私は、光学式文字認識(OCR)プロジェクトを実行したいと考えています。いくつかの調査を行った後、興味深いと思われるアーキテクチャに出会いました:CNN + RNN + CTC。私は畳み込みニューラルネットワーク(CNN)とリカレントニューラルネットワーク(RNN)に精通していますが、コネクショニスト時間分類(CTC)とは何ですか?素人の言葉で説明をお願いします。
私は、光学式文字認識(OCR)プロジェクトを実行したいと考えています。いくつかの調査を行った後、興味深いと思われるアーキテクチャに出会いました:CNN + RNN + CTC。私は畳み込みニューラルネットワーク(CNN)とリカレントニューラルネットワーク(RNN)に精通していますが、コネクショニスト時間分類(CTC)とは何ですか?素人の言葉で説明をお願いします。
回答:
次を含むデータセットがあります:
したがって、データセットは次のようになります。
ニューラルネットワーク(NN )は、画像の可能性のある各水平位置(文献ではタイムステップ t と呼ばれることが多い)のスコアを出力します。これは、幅2(t0、t1)と2つの可能な文字( "a"、 "b")を持つ画像の場合、次のようになります。
| t0 | t1
--+-----+----
a | 0.1 | 0.6
b | 0.9 | 0.4
このようなNNをトレーニングするには、画像ごとにグラウンドトゥルーステキストの文字が画像内で配置される場所を指定する必要があります。例として、「Hello」というテキストを含む画像を考えてください。ここで、「H」の開始位置と終了位置を指定する必要があります(例えば、「H」は10ピクセル目から25ピクセル目まで)。「e」、「l、...」についても同じです。これは退屈に聞こえますが、大規模なデータセットでは大変な作業です。
この方法で完全なデータセットに注釈を付けたとしても、別の問題があります。NNは、各タイムステップで各キャラクターのスコアを出力します。玩具の例については、上記の表を参照してください。これで、タイムステップごとに最も可能性の高いキャラクターを取得できました。これは、おもちゃの例では「b」と「a」です。ここで、「Hello」などの大きなテキストを考えます。ライターが水平方向に多くのスペースを使用するライティングスタイルを持っている場合、各文字は複数のタイムステップを占有します。タイムステップごとに最も可能性の高いキャラクターを取得すると、「HHHHHHHHHeeeellllllllloooo」のようなテキストが得られます。このテキストを正しい出力にどのように変換する必要がありますか?重複する各文字を削除しますか?これにより、「Helo」が生成されますが、これは正しくありません。したがって、巧妙な後処理が必要になります。
CTCは両方の問題を解決します。
これはどのように達成されますか?
これを説明するために、次の画像を見てください。これは音声認識のコンテキストですが、テキスト認識もまったく同じです。文字の配置と位置が異なっていても、デコードすると両方のスピーカーで同じテキストが生成されます。
参考文献: