みらいテックラボ

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

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

今回は, 前回[1]の認識対象をひらがな73文字から漢字(JIS第一水準)2965文字に広げて試してみた.

認識対象の文字種が約3,000字かつ学習データが約50,000サンプルということで, 私の環境(*1)ではメモリ不足でエラーとなった.
*1:ホストマシン:
   CPU:Intel Core i7-2600K
   RAM:8.00GB 
   OS:Windows 10 Pro
   VMware Workstation 12 Player
  仮想マシン
   プロセッサ数:4
   メモリ:6GB
   HDD:100GB
   OS:Ubuntu 14.04

主な原因としては以下の2つが考えられる.
 1) 正解ラベルをデータ読み込み時に作成すると文字種×サンプル数必要
 2) 画像データをすべてメモリ上に置くには画素数×サンプル数必要
そこで, 1)に対応するため, 「ミニバッチ毎に学習データの正解データを作成する」ようにプログラムを変更することで, 学習/評価が行えるようになった.

[学習]

  • 対象文字:漢字2,965文字種(JIS第一水準)
  • 筆記スタイル:楷書
  • 学習データ:53,202サンプル

f:id:moonlight-aska:20160607235300p:plain

f:id:moonlight-aska:20160607235325p:plain

  • 学習回数:ミニバッチ(100サンプル)×35,000回
  • 学習時間:約3.5時間
  • 学習ログ:

 step 0, training accuracy 0
 step 100, training accuracy 0
 step 200, training accuracy 0
 step 300, training accuracy 0
 step 400, training accuracy 0
 step 500, training accuracy 0
 step 600, training accuracy 0
 step 700, training accuracy 0
 step 800, training accuracy 0.01
 step 900, training accuracy 0.02
 step 1000, training accuracy 0.04
  :
 step 34100, training accuracy 1
 step 34200, training accuracy 1
 step 34300, training accuracy 1
 step 34400, training accuracy 1
 step 34500, training accuracy 1
 step 34600, training accuracy 1
 step 34700, training accuracy 1
 step 34800, training accuracy 1
 step 34900, training accuracy 1

  • 経過視覚化:

 上:学習データの認識率, 下:損失
f:id:moonlight-aska:20160629233846p:plain

[評価]

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

 --- No. 1 亜 ---
 * 1位 : 亜 (0.999973)
  2位 : 豆 (0.000024)
  3位 : 丑 (0.000003)
  4位 : 里 (0.000000)
  5位 : 笠 (0.000000)
 --- No. 2 亜 ---
 * 1位 : 亜 (0.999999)
  2位 : 免 (0.000001)
  3位 : 至 (0.000000)
   :
 --- No. 11761 腕 ---
 * 1位 : 腕 (0.968248)
  2位 : 脳 (0.011852)
  3位 : 胸 (0.007451)
  4位 : 隠 (0.005526)
  5位 : 脇 (0.003566)
 --- No. 11762 腕 ---
 * 1位 : 腕 (0.987139)
  2位 : 脱 (0.010151)
  3位 : 碗 (0.001026)
  4位 : 胞 (0.000841)
  5位 : 庇 (0.000416)
 ---------- Total Accuracy ----------
  1位 : 88.31 % ( 10387 / 11762 )
  2位 : 94.68 % ( 11136 / 11762 )
  3位 : 96.58 % ( 11360 / 11762 )
  4位 : 97.39 % ( 11455 / 11762 )
  5位 : 98.01 % ( 11528 / 11762 )

やはり, 認識対象が3,000語近くになると少し難しいか...
当時の記憶をたどると, 認識対象が漢字だけなら96%以上の認識率だったと思う.

次回から, 認識性能upに向けてトライ予定.

(注)
 評価データに学習データが含まれるなどの不備が見つかったので, 再度評価を行い, 認識結果など一部内容を修正しました. (2016/6/29)

----
[1] TensorFlowで文字認識にチャレンジ(2)




世界でもっとも強力な9のアルゴリズム

世界でもっとも強力な9のアルゴリズム