LoginSignup
0
2

More than 3 years have passed since last update.

顔画像データセット仕分けのためモデル構築-VGG19の転移学習(#2)

Last updated at Posted at 2020-12-28

概要

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)

# vggoutputを受け取り、分類する層を定義します
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'))

# vggtop_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

うーむ。まだまだやりようはありそうですがひとまずの結果です。
この学習済モデルを用いて画像データをフォルダ毎に仕分けしたいと思います。

機械学習モデルを用いた顔画像データセット仕分け(#3)

その後…
ちなみに、今回使用した学習用データは手作業による仕分けが不十分だったため、間違いを学習させてしまうようなデータが混在していました。
今回の学習済モデルでの仕分けも活用しながら、且つ手作業で学習用データをクリーンにして再度モデル学習を行ったところ、正解率が96%にまで向上しました。
学習用データ作りは手が抜けない事がよく分かりました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2