Kerasで顔認識を試している話

先日、顔画像を作成することができるようにり、 kerasもインストールしたので、次に試しに以下サイトを参考に顔認識を試して見ることにしました。

KerasのCNNで、顔認識AIを作って見た〜スクレイピングからモデルまで〜 - Qiita

以下の流れで試しました。 結果としてなかなかにいい感じでできましたが、本当か!?って感じです笑

  1. レーニング用にデータを用意
    • 32 x 32の画像(顔とその他)
  2. 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

不具合なところ

  1. 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'