TensorFlowのチュートリアル[1]の中に, 手書きの数字認識を試すものがある.
数字であれば99%以上の認識性能を出すことができるが, 日本語のかな/漢字ではどの程度の認識性能が出るのだろうか?
そこで, まずはひらがなで認識を試してみることにした.
Deep Learningを試すには大量の学習データが必要であるが, 以前日本語のオンライン手書き文字の認識技術の開発を行っていたので, 当時のデータを用い28x28dotの画像データを作成することにした.
手書きのストロークデータから28x28dotの画像への変換がイマイチなようで画像が少し汚いが, こんな感じ...
[元データ]
[28x28dot画像]
今回準備したデータは, 小文字を除くひらがな73文字種.
学習用:約130サンプル/文字, 計9,874サンプル
評価用:約30サンプル/文字, 計2,010サンプル
今回, 画像データのフォーマットは以下とし, データの読み込み部分を作成してみた.
[コード]
# -*- coding: utf-8 -*- import struct import numpy as np # ひらがな class Hiragana: def __init__(self, LT): if LT == 'L': self.fnImage = './data/train_hira.img' else: self.fnImage = './data/test_hira.img' def getImage(self): return _readImage(self.fnImage) # 文字データ読み込み def _readImage(fnImage): f = open(fnImage, 'r') pixel = np.empty((20000, 784)) label = np.zeros((20000, 90)) for i in range(20000): ## header header = f.read(10) dummy = f.read(6) if header == '': break key1, key2, jis, row, col = struct.unpack('<5H', header) # 正解ラベル label[i][jis - 0x2420] = 1; if key1 == 0xf001 & key2 == 0xf001: # pixels npixel = row * col buf = struct.unpack('>%dB' % npixel, f.read(npixel)) # 0-1.0に正規化 pixel[i, :] = np.array(buf) / 255.0 else: break f.close() return i, pixel, label
注意することは, Deep MNIST for Expertsで紹介されている認識プログラムでは, グレースケール画像の画素値を0~1.0に正規化しておく必要がある.
次回は, このデータを使って, ひらがなの学習/認識を行ってみる.
----
[1] Tutorials - TensorFlow
| この1冊でまるごとわかる人工知能&IoTビジネス(日経BPムック)
| 人工知能は私たちを滅ぼすのか―――計算機が神になる100年の物語
|
|