今回はYOLOを使って物体検出を行ってみました。今回の対象はペットボトルです。なぜペットボトルかというと、ゴミの識別を行いたいためペットボトルにしました。同じくカスケード分類器でもペットボトルの識別を行っていますので、そちらとも結果を比較してみたいと思います。

カスケード分類器でペットボトルを判別してみる

Raspberry Piで水面ゴミ収集ロボットを作ってみる

環境構築を実施

YOLOを実行するためにまず環境を用意する必要があります。今回はこちらの記事を参考にして環境構築を実施しました。

【Python】keras-yolo3を使用して物体検出

画像で物体検出した場合

まずは画像でペットボトルが認識できるか試してみました。

コカ・コーラの場合

コーラの場合、ペットボトルとして認識してくれました。ただし、他のものも誤認識されているようでした。他の画像を試すと違う結果になるかもしれません。カスケード分類器でもコーラの認識率は良かったので、コーラを識別するのは簡単なほうかもしれません。

三ツ矢サイダーの場合

三ツ矢サイダーの場合も試してみました。サイダーの場合は誤認識もせずにペットボトルと識別してくれました。透明度が高いせいか、カスケード分類器で試してみたときは全然識別してくれなかったので、こちらのほうはYOLOのほうが有能であると言えそうです。

ボールペンの場合

ついでにボールペンなどでも試してみました。ボールペンは識別してくれず。。そういう学習データがYOLOの中に入っていないのか、もしくはボールペンの形状が細すぎて認識するのが難しいのか。要因はわからないですけど、ボールペンの画像は検出してくれませんでした。

ビニール袋の場合

ビニール袋の場合も試してみました。こちらも認識されませんでした。ビニール袋は形状も変わるし、背景も同じ白い壁なので認識するのが難しいのかもしれません。

動画で物体検出した場合

動画で物体検出した場合はこのようになりました。非常によく検出してくれています。ペットボトルだけでなく手も認識してくれています。ところどころ誤認識されているようですが、今のところこれは問題にしていないです。

まとめ

今回はYOLOを使用してペットボトルの物体検出を行ってみました。カスケード分類器と比較してこちらのほうが非常に認識率が高かったです。また、デフォルトの学習データを使用して十分に認識することができたので、その点も楽なのでよいのではないかと思います。

デメリットとしては、動画の処理速度が非常に遅いことです。動画の場合は容量を小さくして実施しましたが、それでも2時間程度かかりました。これをリアルタイムなどで行う場合はハイスペックなPCが要求されてきそうです。

動画の処理速度の問題はこちらの記事で解決していければと思っています。

Google ColabでYOLOを動かすことを検討してみる

補足

PyTorchでもYOLOを動かしてみましたが、こちらのほうでもあまり速度は変わらない感じでした。PyTorchでYOLOを動かしたときに参考にしたサイトはこちらです。

高速化したYOLO V3を使ったリアルタイム物体検出 for PyTorch

PyTorchでエラーが発生したら以下の方法を試してみてください。

pytorch-yolo-v3のRuntimeErrorを解消できたよ