Single Shot MultiBox DetectorのCaffe実装で物体検出デモを試してみた(2)

caffe-ssd-demo2

Single Shot MultiBox Detector (SSD)のCaffe実装「caffe-ssd」で物体検出デモを試してみました。

この記事では、前回の記事で紹介できなかった2つの物体検出デモを紹介します。

スポンサーリンク

物体検出デモ

前回の記事で環境構築を行ったcaffe-ssdには、

Single Shot MultiBox DetectorのCaffe実装で物体検出デモを試してみた
Single Shot MultiBox Detector (SSD)のCaffe実装「caffe-ssd」で物体検出デモを試してみました。やはりCaffeなので、環境構築に苦労しましたが、その高速性は確認できました。

以下の物体検出デモが用意されています。

  • webcamの画像から物体検出する ssd_pascal_webcam.py
  • 動画ファイルから物体検出する ssd_pascal_video.py
  • Jupyter (IPython) Notebook上で画像ファイルから物体検出する ssd_detect.ipynb
  • 画像ファイル、または動画ファイルから物体検出するコマンドラインツール ssd_detect.bin

この記事では、前回の記事で紹介できなかったssd_pascal_video.pyとssd_detect.bin(ssd_detect.cppの実行ファイル)について紹介します。

ssd_pascal_video.py

Pythonスクリプトを実行する場合、caffe-ssdのcaffe/pythonディレクトリを環境変数PYTHONPATHに設定しておきます。

$ export PYTHONPATH=~/github/caffe/python

動画ファイルから物体検出するために、caffeディレクトリで、以下のコマンドを実行します。

$ python examples/ssd/ssd_pascal_video.py

すると、以下のような物体検出を行った動画が表示されます。GTX 960では、VGG16モデルが約15FPSで動作しています。

ssd_detect.bin

次に、画像ファイル、または動画ファイルから物体検出するコマンドラインツール(ssd_detect.bin)の使い方を紹介します。

caffeディレクトリで、ssd_detect.binのヘルプを表示させるために、以下のコマンドを実行します。

$ ./build/examples/ssd/ssd_detect.bin -help
ssd_detect.bin: Do detection using SSD mode.
Usage:
ssd_detect [FLAGS] model_file weights_file list_file

Flags from examples/ssd/ssd_detect.cpp:
-confidence_threshold (Only store detections with score higher than the threshold.) type: double default: 0.01
-file_type (The file type in the list_file. Currently support image and video.) type: string default: "image"
-mean_file (The mean file used to subtract from the input image.) type: string default: ""
-mean_value (If specified, can be one value or can be same as image channels - would subtract from the orresponding channel). Separated by ','.Either mean_file or mean_value should be provided, not both.) type: string default: "104,117,123"
-out_file (If provided, store the detection results in the out_file.) type: string default: ""

model_file、weights_file、list_fileが必須で、更に5つのオプションを指定できることが分かります。

list_fileとして、以下のようなlist-images.txtを作成します。

examples/images/000456.jpg
examples/images/000542.jpg
examples/images/001150.jpg
examples/images/001763.jpg
examples/images/004545.jpg

list-images.txtの画像ファイルから物体検出するために、caffeディレクトリで、以下のコマンドを実行します。

$ ./build/examples/ssd/ssd_detect.bin \
    models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt \
    models/VGGNet/VOC0712/SSD_300x300/VGG_VOC0712_SSD_300x300_iter_60000.caffemodel \
    list-images.txt \
    -confidence_threshold 0.6
...
examples/images/000456.jpg 6 0.989786 89 48 430 297
examples/images/000542.jpg 8 0.999932 0 0 494 359
examples/images/001150.jpg 12 0.999295 117 92 379 369
examples/images/001150.jpg 15 0.993999 0 0 242 341
examples/images/001150.jpg 15 0.735277 92 20 395 370
examples/images/001150.jpg 18 0.853685 0 28 440 369
examples/images/001763.jpg 8 0.9892 291 126 500 369
examples/images/001763.jpg 12 0.980787 11 19 372 375
examples/images/004545.jpg 7 0.999942 7 99 131 198
examples/images/004545.jpg 13 0.991863 200 87 423 349
examples/images/004545.jpg 15 0.907164 234 10 353 264
examples/images/004545.jpg 15 0.859116 426 123 449 176

処理時間

また、Caffe単独の処理時間を計測してみました。
GPUモードの場合、物体検出(Forward)は、約46msです。

$ ./build/tools/caffe time \
    -model models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt \
    -gpu 0
...
Average Forward pass: 45.4889 ms.
Average Backward pass: 69.8485 ms.
Average Forward-Backward: 115.537 ms.
Total Time: 5776.83 ms.
*** Benchmark ends ***

4コアXeon x2のCPUモード(BLASライブラリはATLAS)の場合、物体検出(Forward)は、約5215msです。

$ ./build/tools/caffe time \
    -model models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt \
    -iterations 10
...
Average Forward pass: 5215.32 ms.
Average Backward pass: 3484.72 ms.
Average Forward-Backward: 8700.5 ms.
Total Time: 87005 ms.
*** Benchmark ends ***

Intel MKLをインストールして、Makefile.configを変更(BLAS := mkl)し、Caffeをmakeしなおしました。
BLASライブラリをMKLに変更したCPUモードでは、物体検出(Forward)を約875msに高速化できました。

$ ./build/tools/caffe time \
    -model models/VGGNet/VOC0712/SSD_300x300/deploy.prototxt \
    -iterations 10
...
Average Forward pass: 875.482 ms.
Average Backward pass: 468.803 ms.
Average Forward-Backward: 1344.7 ms.
Total Time: 13447 ms.
*** Benchmark ends ***

まとめ

Single Shot MultiBox Detector (SSD)のCaffe実装「caffe-ssd」で物体検出デモを試してみました。

この記事では、前回の記事で紹介できなかった2つの物体検出デモを紹介しました。