DeepLearning
OCR
LSTM
ConvolutionalNeuralNetworks

論文まとめ:Gated Recurrent Convolutional Neural Network for OCR

はじめに

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 の模式図は以下。

スクリーンショット 2018-02-12 23.47.10.png

右側の 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のパラメータを別の時刻と共有しないこと。

アーキテクチャ全体

アーキテクチャの全体図。

スクリーンショット 2018-02-13 0.21.57.png

まとめると以下の3ステップ。
1. Feature Sequence Extraction
2. Sequence Modeling
3. Transcription

Feature Sequence Extraction

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

スクリーンショット 2018-02-13 0.28.38.png

Sequence Modeling

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

スクリーンショット 2018-02-13 0.36.49.png

peepholeに対してかける $\gamma_i$ は indication factor になっていて0、1をとる。これは peephole の効果を検証するため。

Transcription

ここでは言語モデルにありがちなCTC(connectionist Temporal Classification)を使う。

実験と結果

GRCNNの効果

スクリーンショット 2018-02-13 1.01.01.png

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

LSTM の中のpeephole効果

スクリーンショット 2018-02-13 1.01.05.png

peepholeが無い方が性能がいい。

他のモデルとの比較

スクリーンショット 2018-02-13 1.01.14.png

おおよそ、本モデルが最も性能がいい。

下から2番目の ResNet-BLSTM は、本モデルの GRCNN を ResNetの20層に置き換えたもの。これよりも GRCNN を用いた方が性能がいい。

ちなみにいい勝負をしている Baoguang et al はこちら。
http://ieeexplore.ieee.org/document/7801919/
arXivには2015ヴァージョンの論文が載ってる。
https://arxiv.org/abs/1507.05717

読み取れた例と失敗した例

以下の左が読み取りに成功した例、右が失敗した例。

スクリーンショット 2018-02-13 1.16.47.png

ARMADA の例みたいに AとRがくっついていると、うまく読み取れない。

Bloom の前の記号を O と読み取ったところは面白い。