Kerasで顔認識を試している話
先日、顔画像を作成することができるようにり、 kerasもインストールしたので、次に試しに以下サイトを参考に顔認識を試して見ることにしました。
KerasのCNNで、顔認識AIを作って見た〜スクレイピングからモデルまで〜 - Qiita
以下の流れで試しました。 結果としてなかなかにいい感じでできましたが、本当か!?って感じです笑
- トレーニング用にデータを用意
- 32 x 32の画像(顔とその他)
- kerasで↑のデータを用いて学習
- 以下のModelで試しに学習
- テストデータについて100%の精度に
TestDL/TestKeras.ipynb at master · moamoai/TestDL · GitHub
Model summary
Model: "sequential_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d_1 (Conv2D) (None, 32, 32, 32) 896 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (None, 16, 16, 32) 0 _________________________________________________________________ conv2d_2 (Conv2D) (None, 16, 16, 32) 9248 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (None, 8, 8, 32) 0 _________________________________________________________________ flatten_1 (Flatten) (None, 2048) 0 _________________________________________________________________ dense_1 (Dense) (None, 64) 131136 _________________________________________________________________ activation_1 (Activation) (None, 64) 0 _________________________________________________________________ dense_2 (Dense) (None, 32) 2080 _________________________________________________________________ activation_2 (Activation) (None, 32) 0 _________________________________________________________________ dense_3 (Dense) (None, 2) 66 _________________________________________________________________ activation_3 (Activation) (None, 2) 0 ================================================================= Total params: 143,426 Trainable params: 143,426 Non-trainable params: 0
不具合なところ
- jupyter上で学習(model.fit)させた後に以下を実行するとrestartしてしまいます。。 --> 原因不明で、ライブラリのバグなのではと想像中です。。 グラフ作れないので、別にデータを保存して表示が必要でした。
# %matplotlib inline import numpy as np import matplotlib.pyplot as plt plt.plot(history.history["val_accuracy"], label="val_acc", ls="-", marker="x") plt.ylabel("accuracy") plt.xlabel("epoch")
本当はjsonで保存したかったんですが、なぜかうまくいかなったので以下pickleで保存することにしました。 (Dictionary形式で保存されるため、元の形式とは一部異なりました。(history["accuracy"])
python - keras: how to save the training history attribute of the history object - Stack Overflow
# save history import pickle with open('./trainHistoryDict', 'wb') as file_pi: pickle.dump(history.history, file_pi) # load history import pickle history = pickle.load(open('./trainHistoryDict', "rb"))
あとがき
kerasを試しに使ってみましたが、可視化含め、いろいろ関数が揃っていて非常に便利だということがわかりました。 kerasは以前から有名でしたが、どこぞかの社内ライブラリとは異なり、非常に優れていることがわかりました笑
ひとまず、これでテストデータ使った認識ができるようになったので、 次に実運用例としてカメラで取得した画像で認識可能か試してみようと思います。
追記
plotするとrestartする件は以下参考で解決できるみたいでした!!
The kernel appears to have died | Data Science and Machine Learning | Kaggle
Tensorflow GPU won't support for macOS versions of 12.0 and higher, use import os os.environ['KMP_DUPLICATE_LIB_OK']='True'