はじめに
NIPS2017から、J. Wang らの Gated Recurrent Convolutional Neural Network for OCR をまとめてみた。
NIPS2017の論文ページはこちら。
http://papers.nips.cc/paper/6637-gated-recurrent-convolution-neural-network-for-ocr
著者らのコードはこちら。
https://github.com/Jianfeng1991/GRCNN-for-OCR
概要
- OCRタスクのモデル
- RCNN(recurrent convolutional neural network)に gate を加えた GRCNN(Gated RCNN)を用いた
- この gate はRCL(recurrent convolution layer)における context modulation を制御し、feed-forwardな情報とrecurrentな情報とを調整する。
- シーケンス・モデルとしてはBLSTM(Bidirectional LSTM)を用いる
- このGRCNN+BLSTMなモデルで既存の性能を上回った
GRCNNの中身
RCNN
RCNNはこちらの論文
M. Liang, et. al 'Recurrent Convolutional Neural Network for Object Recognition'
https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Liang_Recurrent_Convolutional_Neural_2015_CVPR_paper.pdf
などで発表された仕組みで、RecurrentにConvolutionを組み合わせたもの。
前の層からの出力を $u(t)$、前の時刻の隠れ層からの出力を $x(t-1)$ とすると一般的なRNNは
x(t) = \mathcal{F} (u(t), x(t-1), \theta )
ここで $\mathcal{F}$ はReLUなどの非線形な活性化関数、$\theta $ はパラメータ。RCNNの場合は
x(t) = \mathcal{F} ((w^f \ast u(t), w^r \ast x(t-1))
となる。ここで $\ast$ は convolution。重みがフィルタになって convolution するだけ。
GRCNN
T=2の時の gated recurrent convolution layer の模式図は以下。

右側の gate な部分がなければ通常の RCNN。
この gate の部分は
G(t) = \begin{cases}
0 & t=0 \\
sigmoid(BN(w^f_g \ast u(t)) + BN(w^r_g \ast x(t-1))) & t>0
\end{cases}
となっていて、LSTMの gate に似ている。BN は batch normalizationで、これが特徴的。
G(t) = \begin{cases}
ReLU(BN(w^f \ast u(t)) & t=0 \\
ReLU(BN(w^f \ast u(t)) + BN(BN(w^r \ast x(t-1))\odot G(t))) & t>0
\end{cases}
$\odot$ はHadamard積。イメージとしてはLSTMのhidden unitに対するgateだけがある形に似ている。ただ、決定的に違うのは、conv-LSTMは動画などのシーケンシャルなフレームを1つずつ1時刻に入力するが、このこの仕組みは1つの画像をそれぞれのタイムステップそれぞれに入力する。
また注意点としては、Batch normalizationのパラメータを別の時刻と共有しないこと。
アーキテクチャ全体
アーキテクチャの全体図。

まとめると以下の3ステップ。
- Feature Sequence Extraction
- Sequence Modeling
- Transcription
Feature Sequence Extraction
ここではGRCNNを使う。入力と同じ画像を出力させ、これを左から右にスライスする。GRCNNは以下のようにGRCLユニットとpooling、convの組み合わせ。

Sequence Modeling
ここではbidirectionalなLSTMを用いる。

peepholeに対してかける $\gamma_i$ は indication factor になっていて0、1をとる。これは peephole の効果を検証するため。
Transcription
ここでは言語モデルにありがちなCTC(connectionist Temporal Classification)を使う。
実験と結果
GRCNNの効果

RCNNよりもGRCNNの方が性能いいし、GRCNNの中でもよりiterationが多い方が性能がいい。
LSTM の中のpeephole効果

peepholeが無い方が性能がいい。
他のモデルとの比較

おおよそ、本モデルが最も性能がいい。
下から2番目の ResNet-BLSTM は、本モデルの GRCNN を ResNetの20層に置き換えたもの。これよりも GRCNN を用いた方が性能がいい。
ちなみにいい勝負をしている Baoguang et al はこちら。
http://ieeexplore.ieee.org/document/7801919/
arXivには2015ヴァージョンの論文が載ってる。
https://arxiv.org/abs/1507.05717
読み取れた例と失敗した例
以下の左が読み取りに成功した例、右が失敗した例。

ARMADA の例みたいに AとRがくっついていると、うまく読み取れない。
Bloom の前の記号を O と読み取ったところは面白い。