08.文字の位置と種類を特定する(CenterNet)

Created: 2022/03/05
Last Update: 2022/03/05

画像から、文字の位置と種類を特定します。

モデルはいろいろありますが、CenterNetの手法 Objects as Points https://arxiv.org/abs/1904.07850 を使い、バックボーンネットワークに、EfficientNetV2 https://arxiv.org/abs/2104.00298 を利用したモデルを構築しました。

コードは、 https://github.com/lithium0003/findtextCenterNet にあります。

モデルの構成

入力画像は、512x512x3のカラー画像とします。これより大きい場合は、分割して入力するか、縮小します。

入力画像を、バックボーンネットワークであるEfficientNetV2Sに入れます。その出力(入力の1/32サイズ)と、 途中のブロックで1/4,1/8,1/16サイズとなる出力を引き出します。

小さいサイズの出力を、Conv2DTranspose(kernel3 stride2)で2倍に拡大して、次のサイズの出力とConcatで結合するという操作を繰り返し、 1/2サイズになるまで続けます。 Conv2D(kernel3)の後に、ブロックの出力チャネル数に合わせるためにConv2D(kernel1)をかけて出力とします。

EfficientNetV2Sの出力は、中心位置のヒートマップ、BOX縦横サイズ、中心位置の詳細なオフセットXY、 テキストの連続を示すライン、テキストの分離を示すライン、文字の特徴量をそれぞれ出力するLeafMapネットワークに入力します。

LeafMapは、384次元の特徴量ベクトルを求めるものだけConvの次元数が512で、その他は128次元としています。

前学習用の文字識別モデルの構成

最終的には、384次元の文字特徴量をTransformerに入力して符号化しますが、モデルの学習のために1文字ずつ符号化することを先に学習させます。

384次元の文字特徴量が、Unicodeに変換できるような識別機を後段に付けて、異なる文字同士の文字特徴量が離れ、 同じ文字同士の文字特徴量が近くなるように学習が進むようにします。

文字は、UTF32で1つのコードポイントとして表されるとして、37,41,43,47,53での剰余を学習させて、 Chinese remainder theorem により文字コードを表せるようにします。

もくじへ戻る