カメラから画像取得してKerasのモデルで認識した話

前回、OpenCVのdnn関数にKerasを読み込ませることができませんでした。 詰んだと思いました。

Kerasのモデル(h5)とtensorflowのモデル(pb)の変換に苦労している件 - moamoa diary

ただ、ふとOpenCVのdnn関数使わなくても、そもそもデータ形式はnumpyの変換されているはずなので、 特に問題ないのではないかと思い、調べてみました。 普通に以下サイトに記載ありました笑 opencvで取得した画像をpreprocess_input関数に与えれば、そのままkerasのpredict関数に読み込ませることができるようでした!!

PiCameraとKerasで物体認識 - Qiita

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 : 失敗する確率?

f:id:thira2:20200322124450p:plain

さらに、なぜかepochを増やすとaccもlossも落ちることがわかりました。 DLは奥が深く、私はまだまだ入り口にも到達していないことがわかりました。

f:id:thira2:20200322125745p:plain

あとがき

というわけで、いろいろKerasで試していますが、DLはなかなかに難しいものということがわかってきました。 lossとかaccは間違いなく基礎的なことのはずなのに、その意味すら本当のところわかっていないことに気がついたので 調査予定です。