32
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RaspberryPiで物体検出してみる ~その1:検出速度比較~

Last updated at Posted at 2020-09-19

#はじめに
RaspberryPiで物体検出を行うにあたり、主要な物体検出手法の一つであるYOLO(You only look once)の各ソースの検出速度と検出精度を比較してみたのでまとめます。

YOLOの仕組みについては【物体検出手法の歴史 : YOLOの紹介】が分かり易かったです。

私がRaspberryPi でやりたいこと

猫用のペットカメラとするついでに、4匹の猫を見分けたい!柄は4匹とも違う!
見分けて何をするかは、猫の様子を監視してエアコンのリモコン制御とか、活動量を見て健康管理に使えたらいいなぁ程度しか考えてないです。

  • MUST:識別するクラス数を変更して、オリジナルの学習モデルを作ることができる(今回の記事のスコープからは外れます)
  • MAY:できれば1秒に1回は判定したい

##環境
![RaspberryPi-RaspberryPi4 ModelB(4GB)](https://img.shields.io/badge/Raspberry Pi-RaspberryPi4 ModelB(4GB) - brightgreen) ![OS-Raspbian 32bit(2020.5.27版) ](https://img.shields.io/badge/OS-Raspbian 32bit(2020.5.27版) - brightgreen)

#結果
評価対象はCOCOデータセット(クラス数は80)とし、YOLOの作者のサイト:YOLO: Real-Time Object DetectionAlexeyABで配布されている学習済みモデルの重みを用いています。各モデルには検出時間を優先した"Tiny"というものがあります。

以下、ソース×Modelの結果です。説明・結果の画像・所感は後程記載します。

ソース Model 検出時間 検出精度
pjreddie v2 477秒
pjreddie v2-Tiny 42秒 ×
AlexeyAB v2 33秒
AlexeyAB v2-Tiny 6.6秒
AlexeyAB v3 74秒
AlexeyAB v3-Tiny 6.7秒
AlexeyAB v4 152秒
AlexeyAB v4-Tiny 7.8秒
keras-yolo3 v3 12秒
keras-yolo3 v3-Tiny 0.75秒
Tensorflow-YOLOv3 v3 8.9秒
Tensorflow-YOLOv3 v3-Tiny 3.4秒
yolov3-tf2 v3 5.6秒
yolov3-tf2 v3-Tiny 0.67秒

検出精度は主観ですが、各画像の主の物体の認識率を目安にしています。◎(90%~100%)、〇(70%~90%)、△(50%~70%)、×(認識できない)。

#ソースごとの説明・結果画像・所感

pjreddie/darknet

https://pjreddie.com/
https://github.com/pjreddie/darknet

  • 本家
  • v2、v3の学習済みモデルの重みのダウンロードもこちらからできます。
  • C言語
  • 物体検出中のCPUの使用率は25~35%で遷移しており、CPUの使用効率は悪い。
  • makeファイルのパラメータを変えることで、GPUで動作させることも可能だが、RaspberryPiでは難しい。
  • v3、yolov3-tinyはSegmentation faultで動きませんでした。(Google Colaboratoryでは検出できているので環境の問題)
  • v2-Tinyは物体検出できてなさそうでした。(こちらもGoogle Colaboratoryでは検出できているので環境の問題)

![gcc-8.3.0 (Raspbian 8.3.0-6+rpi1)](https://img.shields.io/badge/gcc - 8.3.0 (Raspbian 8.3.0_6+rpi1) - brightgreen)

Model dog person
v2 predictions_v2_dog.jpg predictions_v2_person.jpg
v2-tiny predictions_v2t_dog.jpg predictions_v2t_person.jpg

AlexeyAB/darknet

  • pjreddieの継承版。YOLO v4に対応。
  • YOLO v4の学習済みモデルの重みのダウンロードはこちらからできます。
  • C言語
  • makeファイルのパラメータを変えることで、GPUで動作させることも可能だが、RaspberryPiでは難しい。
  • 物体検出中のCPUの使用率は25~35%で遷移しており、CPUの使用効率は悪い。

![gcc-8.3.0 (Raspbian 8.3.0-6+rpi1)](https://img.shields.io/badge/gcc - 8.3.0 (Raspbian 8.3.0_6+rpi1) - brightgreen)

Model dog person
v2 predictions_v2_dog.jpg predictions_v2_person.jpg
v2-tiny predictions_v2t_dog.jpg predictions_v2t_person.jpg
v3 predictions_v3_dog.jpg predictions_v3_person.jpg
v3-tiny predictions_v3t_dog.jpg predictions_v3t_person.jpg
v4 predictions_v4_dog.jpg predictions_v4_person.jpg
v4-tiny predictions_v4t_dog.jpg predictions_v4t_person.jpg

qqwweee/keras-yolo3

  • keras版
  • pjreddie/darknetの重みをコンバートして使用することができる。
  • デフォルトでは検出結果の画像を出力できないので、KerasのYOLO-v3を動かしたったを参考に処理を追加しました。 
  • 物体検出中のCPUの使用率は100%

![Keras-2.2.5](https://img.shields.io/badge/Keras-2.2.5 - brightgreen) ![tensorflow-1.13.1](https://img.shields.io/badge/tensorflow-1.13.1 - brightgreen) ![Python-3.7.3](https://img.shields.io/badge/Python-3.7.3 - brightgreen)

Model dog person
v3 out_v3_dog.jpg out_v3_person.jpg
v3-tiny out_v3t_dog.jpg out_v3t_person.jpg

neuralassembly/Tensorflow-YOLOv3

https://github.com/neuralassembly/Tensorflow-YOLOv3
Raspberry Pi で YOLO v3-Tiny / YOLO v3 による物体検出を試してみよう

  • Tensorflow1系
  • pjreddie/darknetの重みをコンバートして使用することができる。
  • 検出時間は出力されないので、sess.run()の前後で時間を計測。
  • 物体検出中のCPUの使用率は100%

![tensorflow-1.13.1](https://img.shields.io/badge/tensorflow-1.13.1 - brightgreen) ![Python-3.7.3](https://img.shields.io/badge/Python-3.7.3 - brightgreen)

Model dog person
v3 image_output_v3_dog.png image_output_v3_person.png
v3-tiny image_output_v3t_dog.png image_output_v3t_person.png

zzh8829/yolov3-tf2

  • tensorflow2系 (tf.keras使用)
  • pjreddie/darknetの重みをコンバートして使用することができる。
  • RaspberryPiではpip install tensorflowでtensorflow2は入らなかったので、https://github.com/PINTO0309/Tensorflow-bin からtensorflow-2.2.0-cp37-cp37m-linux_armv7l.whlをダウンロードしてinstall
  • 物体検出中のCPUの使用率は75~85%

![tensorflow-2.2.0](https://img.shields.io/badge/tensorflow-2.2.0 - brightgreen) ![Python-3.7.3](https://img.shields.io/badge/Python-3.7.3 - brightgreen)

Model dog person
v3 output_v3_dog.jpg output_v3_person.jpg
v3-tiny output_v3t_dog.jpg output_v3t_person.jpg

#まとめ

  • 「1秒に1回は判定したい」を満たすには、多少検出精度は落ちるがPython系のv3-tinyでしか難しい。
  • 私が使うときにはクラス数は少なくなるので、それにより精度は上がることを期待する。

##今後の方向性

  • 学習はAlexeyABをGPU版でbuildし、Google Colaboratoryで実行する。Tinyなら1000エポック:7分程度。
  • 物体検出はPython系の中から流用しやすさを見てどれを使うか決める。(今後のことも考えるとzzh8829/yolov3-tf2が無難か。。)
  • 猫の写真撮らないと。。

次回:RaspberryPiで物体検出してみる ~その2:ねこ画像の学習~

#参考
Raspberry PiでDarknetを使う
YOLOv3 論文訳

qqwweee/keras-yolo3

zzh8829/yolov3-tf2

32
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?