Object Detection

OpenCVでDNNにてできあがった実行ファイルである,example_dnn_object_detectionを利用します.実行に先立ち,ネットワークの設定ファイル, 重みファイル,クラス名一覧を記したファイルが必要になります.まずは下記を参照してください.

上記ページでそれぞれ利用する場合のパラメータや設定ファイルへのリンクがあります.詳細は上記ページを参照しておいてください.このページではなるべく手早くできるように,以下解説していきます.

なお,あらかた必要なmode, configファイルはopencvによって準備されたダウンロードスクリプトがあるので,そちらを使うと簡単です.

$ wget https://raw.githubusercontent.com/opencv/opencv_extra/master/testdata/dnn/download_models.py
$ python download_models.py

物体検出器として一番有名なSSD(Single Shot multi-box Detector)というアルゴリズムです.特にその中でMobileNetと呼ばれる高速動作が可能なネットワークになり,それをcaffeという深層学習開発環境で作ったものになります.

  • https://github.com/chuanqi305/MobileNet-SSD/ から下記ファイルをダウンロードします.保存場所は <opencv-3.x.x>/samples/build/dnn とします.
    • modelファイル: MobileNetSSD_deploy.caffemodel
    • configファイル: MobileNetSSD_deploy.prototxt
    • classesファイル:names-voc.txt
    • 実行時間:65.18[ms]

ダウンロードが済んだら,下記を実行して動作を確かめてみます.

$ ./example_dnn_object_detection --config=MobileNetSSD_deploy.prototxt --model=MobileNetSSD_deploy.caffemodel --width=300 --height=300 --scale=0.00784 --input=dog.jpg

カメラで起動したい場合は,inputのオプションを消すと,デフォルトカメラで起動します.

https://github.com/opencv/opencv/tree/3.4/samples/dnn に記載されている,SSDs from TensorFlowのScale値では認識結果が正しく帰ってきませんでした.scaleのオプションを1.0とすることで,ただしく動作することを確認しました.

上記SSDをmobilenet等のその他の種類を含め,tensorflowで実装したものです.configファイル及び,modelファイルはTensorflow detection model zooからダウンロードします.たくさん種類があるので,このページでは動作確認したものだけを具体的に上げます.

ssd_mobilenet_v1_coco

ダウンロード後展開し,その中にある frozen_inference_graph.pb をmodelファイルとして指定します.configファイルには,解凍したファイルからpbtxtを生成するのが正しいやり方になります.

$ ./example_dnn_object_detection  --config=ssd_mobilenet_v1/ssd_mobilenet_v1_coco_2017_11_17.pbtxt  --model=ssd_mobilenet_v1/frozen_inference_graph.pb  --classes=names.txt  --width=300 --height=300 --scale=1.0 --rgb --input=dog.jpg

ssd_mobilenet_v2_coco

上記同様に froen_inference_graph.pb をmodelファイル,configファイルには生成したpbtxtを使う.ここでは生成したファイルをはっつけます.

$ ./example_dnn_object_detection  --config=ssd_mobilenet_v2/ssd_mobilenet_v2_coco_2018_03_29.pbtxt  --model=ssd_mobilenet_v2/frozen_inference_graph.pb  --classes=names.txt  --width=300 --height=300 --scale=1.0 --rgb --input=dog.jpg

MobileNetではなく,元々のオリジナルSSDのcaffe実装.まずは下記リンクから一式ダウンロードし,必要なモデル,configファイルを持ってくる.

$ ./example_dnn_object_detection  --config=deploy.prototxt  --model=VGG_coco_SSD_300x300_iter_400000.caffemodel  --classes=names.txt  --width=300 --height=300 --scale=1.0 --input=dog.jpg

動作速度が高速であり,SSDとobject detectionにおいて双璧をなすアルゴリズムです.高速動作と引き換えにmAP(mean Average Percentage)がやや低め(バウンディングボックス精度が低い)というデメリットがあります.適応するアプリケーションがバウンディングボックスの正確性を必要とするものであれば不向きですが,ある程度この辺になにがあるかをざっくり知るだけであれば,本手法がおすすめです.

  • 実行時間:94.38[ms]
$ ./example_dnn_object_detection --classes=names.txt --config=yolov2-tiny.cfg --model=yolov2-tiny.weights --height=416 --width=416 --scale=0.00392 --input=dog.jpg
  • opencv_dnn/samples/object_detection.txt
  • 最終更新: 2019/07/30 09:53
  • by baba