みらいテックラボ

音声・画像認識や機械学習など, 週末プログラマである管理人が興味のある技術の紹介や実際にトライしてみた様子などメモしていく.

TensorFlowで文字認識にチャレンジ(7)

前回までは, 手書きの文字を28×28画素の画像とし扱い, CNN(Convolutional Neural Network)による文字認識や認識性能の改善について検討してきた.
しかし, 現状ではJIS第一水準(2965文字種)を認識対象とすると, 約91%の1位認識率しか得られていない.
そこで, 今回は時系列の手書きデータ(筆点列)を直接Deep Neural Networkで処理することを検討してみた.

1. 前処理・特徴抽出処理
前処理・特徴抽出処理としては, 以下を行っている.[1][2]
1) 同一座標点の除去
2) 変化点の抽出
3) 文字の重心を求め, 重心が文字中央になるようように文字データを拡大/縮小変換
4) 所定のピッチで特徴点を抽出. ただし, できるだけ変化点は残すように.
f:id:moonlight-aska:20160706225842p:plain:w200
[例]
f:id:moonlight-aska:20160708064537p:plain
f:id:moonlight-aska:20160708064604p:plain

2. 特徴量
以下のような各軸方向への移動量とストロークのON/OFF情報を特徴量とすることにした.
f:id:moonlight-aska:20160706230303p:plain:w200

f:id:moonlight-aska:20160706231502p:plain:w350

3. モデル構造
時系列データを扱う場合には, RNN(Recurrent Neural Network)を用いる方法がよく知られているが, 自然言語処理でCNNを活用した事例[3][4]もあるので, 今回はCNNでチャレンジしてみることにした.

モデル構造は, 下図のような構造にしてみた.
f:id:moonlight-aska:20160706235016p:plain

4. 学習と評価
[学習条件]

  • 対象文字:漢字2,965文字種(JIS第一水準)
  • 筆記スタイル:楷書
  • 学習データ:53,244サンプル
  • 学習回数:ミニバッチ(100サンプル)×50,000回

[認識条件]

  • 対象文字:漢字2,965文字種(JIS第一水準)
  • 筆記スタイル:楷書
  • 評価データ:11,762サンプル

[実験結果]

方式1位累積(5位)
ベース [5] 88.31% 98.01%
筆点列 92.54% 97.99%

筆点列の場合筆順の情報が利用できるので, 1位の認識率upを期待していがまずまずの性能が出た.

----
参照URL:
[1] Google OS実験室 ~Moonlight 明日香~:手書き文字認識にチャレンジ ~前処理~
[2] Google OS実験室 ~Moonlight 明日香~:手書き文字認識にチャレンジ ~特徴抽出~
[3] Understanding Convolutional Neural Networks for NLP - WildML
[4] 自然言語処理における畳み込みニューラルネットワークを理解する - けんごのお屋敷
[5] TensorFlowで文字認識にチャレンジ(3)





Pythonで体験する 深層学習

Pythonで体験する 深層学習



ITエンジニアのための機械学習理論入門

ITエンジニアのための機械学習理論入門