カメラから画像取得してKerasのモデルで認識した話
前回、OpenCVのdnn関数にKerasを読み込ませることができませんでした。 詰んだと思いました。
Kerasのモデル(h5)とtensorflowのモデル(pb)の変換に苦労している件 - moamoa diary
ただ、ふとOpenCVのdnn関数使わなくても、そもそもデータ形式はnumpyの変換されているはずなので、 特に問題ないのではないかと思い、調べてみました。 普通に以下サイトに記載ありました笑 opencvで取得した画像をpreprocess_input関数に与えれば、そのままkerasのpredict関数に読み込ませることができるようでした!!
TestDL/TestRecog.ipynb at master · moamoai/TestDL · GitHub
while True: ret, im = cap.read() if key == 27 or key == ord('q'): # Esc or q break elif key == ord('c'): print('classifying image...') t2 = time.perf_counter() image = cv2.resize(im[target_y:target_y+target_h, target_x:target_x+target_w], (32, 32)) # , interpolation = cv2.INTER_) x = cv2.cvtColor(image, cv2.COLOR_BGR2RGB).astype(np.float32) x = np.expand_dims(x, axis=0) x = preprocess_input(x) preds = model.predict(x) print(preds) t3 = time.perf_counter() # clock() print('inference : %.3f s' % (t3 - t2))
その後
というわけで、なんとかカメラ画像からKerasモデルで認識までを試すことができました。 さて、結果は、、なんとすべてface判定になることがわかりました。
さて、今のモデルの結果を再確認してみます。 accuracyは1.0です。私はこれで精度100%と思っていました。 さてlossをみてみると0.5くらいにさちりそうな感じです。 調べてみると、以下であることがわかりました。というより、わかってないことがわかりました。
accuracy: テストしたデータの正答率
loss : 失敗する確率?
さらに、なぜかepochを増やすとaccもlossも落ちることがわかりました。 DLは奥が深く、私はまだまだ入り口にも到達していないことがわかりました。
あとがき
というわけで、いろいろKerasで試していますが、DLはなかなかに難しいものということがわかってきました。 lossとかaccは間違いなく基礎的なことのはずなのに、その意味すら本当のところわかっていないことに気がついたので 調査予定です。