今回の記事はKerasを使って日本語のひらがな画像「あ」「い」を文字分類する流れをご紹介する記事です。データの準備からモデルの作成、モデルの学習までの一連の流れを紹介していきます。初学者でもわかるように動くサンプルコードと合わせて解説していきますので是非参考にしてみてください。
データの準備
必要画像数は、経験上各クラス100枚程度必要です。
画像は適当に手書き、もしくはフォントを変えて、スクショなどを撮り10枚程度まずは作成します。この画像を、Kerasメソッドで画像水増しを行なっていきます。
画像の水増し方法は様々ありますが、Kerasの基本的な水増しは下記などがありますので参照してください。
├── a
│ └── a.jpg
└── i
└── i.jpg
モデル学習
モデル学習は下記のコードで実施できます。
import keras
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers.convolutional import Conv2D, MaxPooling2D
from keras.layers.core import Dense, Dropout, Activation, Flatten
import numpy as np
from sklearn.model_selection import train_test_split
from PIL import Image
import glob
folders = ['a','i']
print("147,151,149,152,154,153,154,137,149,153,158,158,157,157,154,152")
X = []
Y = []
image_size = 50
# 対象Aの画像
index = 0
for folder in folders:
files = glob.glob('./test/' + str(folder) + '/*.JPG')
print(files)
for file in files:
print(file)
image = Image.open(file)
image = image.convert("RGB")
image = image.resize((image_size, image_size))
data = np.asarray(image)
X.append(data)
Y.append(index)
index = index + 1
X = np.array(X)
Y = np.array(Y)
X = X.astype('float32')
X = X / 255.0
# 正解ラベルの形式を変換
Y = np_utils.to_categorical(Y, 16)
# 学習用データとテストデータ
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20)
# CNNを構築
model = Sequential()
model.add(Conv2D(32, (3, 3), padding='same',input_shape=X_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Conv2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(16))
model.add(Activation('softmax'))
# コンパイル
model.compile(loss='categorical_crossentropy',optimizer='SGD',metrics=['accuracy'])
history = model.fit(X_train, y_train, epochs=200)
print("完了")
model.save('/only_test/model.hdf5')
print("保存完了")
まず初めに必要なモジュールのインポートがあって、その後に画像の読み込みを行っております。画像の読み込み時はPILのImageを使って読み込んでおります。読み込み時に配列として読み込み、データYは成果ラベルが格納されています。
この読み込んだ画像の配列データをmodel学習させていきます。
モデルの作成方法はSequential関数でネットを定義し、中間層にあたる関数メソッドをaddで追加します。
コメント
[…] ここまで来れればあとは自作AIモデルの作成や既存のAIモデルを利用して、画像の分類を行ってみましょう。私の記事でも多数書いておりますがまずはmnistモデルで数字画像を分類してみたり、こちらの記事のように「自作AIモデルでひらがなの「あ」「い」を分類してみる」などを行ってみましょう。 […]
[…] 「日本語文字を画像分類する方法」 […]
[…] 「【Python】日本語の文字分類を行う方法ご紹介。」 […]