#概要
UTKFaceデータセットを下記特徴ごとに仕分けするモデルを構築する。
・問題なし
・グレースケール
・複数人が写っている
・加工処理されている
前回作成した学習用データを使用しVGG19転移学習に挑戦してみました。
###環境
Google Colaboratory(GPU)
from keras.layers import Dense, Dropout, Flatten, Input
from keras.applications.vgg19 import VGG19
from keras.models import Model, Sequential
from keras import optimizers
###VGG19の学習済モデルを使用します。
処理に負担がかかりますが正解率を上げる事ができなかったため画素数を増やしました。
学習用データが少なかったのかもしれない。
# モデルはvgg19を使用します im_size=299
input_tensor = Input(shape=(im_size, im_size, 3))
vgg19 = VGG19(include_top=False, weights='imagenet', input_tensor=input_tensor)
# vggのoutputを受け取り、分類する層を定義します
top_model = Sequential()
top_model.add(Flatten(input_shape=vgg19.output_shape[1:]))
top_model.add(Dense(1024, activation='relu'))
top_model.add(Dropout(0.5))
top_model.add(Dense(4, activation='softmax'))
# vggとtop_modelを連結します
model = Model(inputs=vgg19.input, outputs=top_model(vgg19.output))
# vggの層の重みを変更不能にします
for layer in model.layers[:18]:
layer.trainable = False
# コンパイルします
model.compile(loss='categorical_crossentropy',
optimizer=optimizers.SGD(lr=1e-4, momentum=0.9),
metrics=['accuracy'])
# 学習を行います
model.fit(X_train, y_train,epochs=20, validation_data=(X_test, y_test))
# テストデータでの評価を表示します。
model.evaluate(X_test, y_test, verbose=1)
# 学習モデルをマイドライブに保存します。
model.save("/content/drive/My Drive/vggsort_model.h5")
###学習の結果
テストデータにて
- loss: 0.4032 - accuracy: 0.8978
うーむ。まだまだやりようはありそうですがひとまずの結果です。
この学習済モデルを用いて画像データをフォルダ毎に仕分けしたいと思います。
その後…
ちなみに、今回使用した学習用データは手作業による仕分けが不十分だったため、間違いを学習させてしまうようなデータが混在していました。
今回の学習済モデルでの仕分けも活用しながら、且つ手作業で学習用データをクリーンにして再度モデル学習を行ったところ、正解率が96%にまで向上しました。
学習用データ作りは手が抜けない事がよく分かりました。