- @ThothChildren
- 2018.12.6
- PV 526
CNNで画像内文字列をOCR
ー 概要 ー
CNNを使って画像の文字列を認識してプログラムで扱える文字列に起こすOCRの例について紹介します.文字列が可変の場合に対応したCNN+LSTMで構成される基本的なネットワークです.
この章を学ぶ前に必要な知識
条件
- 1行の文字列のみが切り出されている画像
- 横方向に余分があっても構わない
- 画像上の文字列の長さは可変でよい
効果
- 画像に写っている文字列を認識する
ポイント
- CNNとLSTM(or RNN or biLSTM)とCTC損失関数を使って実現
解 説
CNNを使って画像の文字列を認識してプログラムで扱える文字列に起こすOCRの一般的な例について紹介します.文字列が可変の場合に対応したCNN+LSTM(biLSTM)で構成される基本的なネットワークです.
使用する技術
・CNN (Convolutional Neural Network) Convolution層を主に用いたニューラルネットワーク
・LSTM(biLSTM) 時系列データや音声データ等において用いられるニューラルネットワーク. RNNの場合もある.
・CTC Loss 画像文字認識や音声認識などで使用される誤差関数.データの中での文字列の位置や長さが可変なものに対応しており、多く使用される.
全体概要
以下の図のように
1. CNNで画像から「画像の左から右に抽出した文字列特徴データ」列を算出
2. 1.で取り出したデータ列をLSTM(biLSTM)に投入して、推定される文字列を算出
3. 出力された文字列と正解文字列とでCTC損失関数で最適化 | CNNで画像に写っている文字列をOCRする方法について |
OCRの全体の概要図 | |
処理の流れを少しだけ詳細に追う.
1. CNNで画像位置に対応して文字列特徴量列を抽出.
画像を入力にCNNが「特徴量」を出すときには、画像位置に対応して文字の特徴データを出すようにする.上記の画像例では「a book」の画像から「a book」の文字列特徴量列をCNNで出力する.文字列特徴列の各箇所の左からの位置は画像内左からの位置に対応している.
2. LSTMに渡す.
1.で得られた特徴量をLSTMに入れられるように整形して入れる.RNNやbiLSTMでも同様に行う.
3. LSTMの出力と正解データでCTC誤差関数による特殊な最適化する.
文字列長が異なる場合、文字列長が可変な場合は特殊な誤差関数CTCを使用します.
LSTMの出力がブランク文字「_」を使ったときに「_a__b_o_o_k_」や_aa_b_oo_o_k_」のように得られます.CTCはこういった可変でブランク文字を含むものも適切な誤差関数を与え学習させることができます.
| 処理の流れやや詳細 |
この章を学んで新たに学べる
Comments