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

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

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

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

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

モデルの構成

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

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

バックボーンネットワークからの4つの出力を、それぞれConv2D(kernel1)でチャンネル数を減らし、 UpSampling2Dでそれぞれ256x256のサイズになる様に拡大して、Concatにより結合します。 Conv2D(kernel1)をかけて、特徴量は256x256x256、それ以外の要素は256x256x8とします。 ブロックの出力チャネル数に合わせるためにConv2D(kernel1)をかけて出力とします。

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

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

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

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

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

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

Unicodeのコードポイントは0x10FFFFまでなので、1114111以下の整数となります。1091,1093,1097の積は、1308131911となり、 1308131911/1114111=1174.15 なので、間違えた符号ポイントに当たる確率は1/1000以下となります。

もくじへ戻る