keras-yolov3 そのまま使うとおかしい

これ↓を参考にして、

自前の画像をVoTTでアノテーションしてkeras-yolo3に呪腕のハサンを学習させる - Qiita


独自の物体認識を試してみた。
学習も無事完了したので、

python yolo_video.py --image

で静止画像(jpeg)を認識してみると結構いい感じ
で認識できている。そこで、静止画像の切り出し元
である動画で認識してみると、


「あまり認識していない.....」


なぜ?どうして?結局は同じ画像なはずだけど?
とあれこれ悩んだ結果、原因は「yolo.py」の
動画の認識処理が変じゃね?という結論に
至った。

動画での認識処理の流れは、


1. OpenCVで動画ファイルを開く
2. OpenCVで1フレームずつ画像(データ)を取得
3. 2.のデータからPILのImageを生成
4. 3.Imageで静止画像からの認識処理を実行
5. Imageに認識結果(矩形)を描画して結果にする
6. 5.で生成された結果を再度OpenCVで動画ファイルに出力

となっているのだが、

2.でOpenCVでフレームデータを取得すると色の並びがBGRなのだが、
PILのImageではRGB並びを想定している。でもyolo.pyでは
BGR→RGB変換をしないまま、Imageを生成しているので、変な
色味の画像を用いて認識処理をしてしまっている。

認識がうまくいかないのはこれが原因。
ひとまずこれで認識処理はうまくいくのだが、結果を動画
に出力するのもOpenCVを使っているので、5.と6.の間で
RGB→BGR変換をしないと、今後は出力された結果動画の
色味がおかしくなってしまう。

ということで、yolo.pyに
・BGR→RGB
・RGB→BGR

変換を追記しないとおかしくね?と思った次第。

 

ちなみに、
python yolo_video.py --image
だとうまくいくのは、JPEGファイルをPILで直接
取得しているため、終始RGBならびをキープできてる
からのようだ。

 

PythonとKerasによるディープラーニング

PythonとKerasによるディープラーニング