{{indexmenu_n>3}} ====== Object Detection ====== [[opencv_dnn:環境構築:install|OpenCVでDNN]]にてできあがった実行ファイルである,example_dnn_object_detectionを利用します.実行に先立ち,ネットワークの設定ファイル, 重みファイル,クラス名一覧を記したファイルが必要になります.まずは下記を参照してください. * https://github.com/opencv/opencv/tree/master/samples/dnn 上記ページでそれぞれ利用する場合のパラメータや設定ファイルへのリンクがあります.詳細は上記ページを参照しておいてください.このページではなるべく手早くできるように,以下解説していきます. なお,あらかた必要なmode, configファイルはopencvによって準備されたダウンロードスクリプトがあるので,そちらを使うと簡単です. $ wget https://raw.githubusercontent.com/opencv/opencv_extra/master/testdata/dnn/download_models.py $ python download_models.py ===== MobileNet-SSD from Caffe ===== 物体検出器として一番有名なSSD(Single Shot multi-box Detector)というアルゴリズムです.特にその中でMobileNetと呼ばれる高速動作が可能なネットワークになり,それをcaffeという深層学習開発環境で作ったものになります. * https://github.com/chuanqi305/MobileNet-SSD/ から下記ファイルをダウンロードします.保存場所は /samples/build/dnn とします. * modelファイル: MobileNetSSD_deploy.caffemodel * configファイル: MobileNetSSD_deploy.prototxt * classesファイル:{{ :opencv_dnn:names-voc.txt |}} * 実行時間:65.18[ms] * {{:opencv_dnn:スクリーンショット_2018-09-18_12.34.14.png?400|}} ダウンロードが済んだら,下記を実行して動作を確かめてみます. $ ./example_dnn_object_detection --config=MobileNetSSD_deploy.prototxt --model=MobileNetSSD_deploy.caffemodel --width=300 --height=300 --scale=0.00784 --input=dog.jpg カメラで起動したい場合は,inputのオプションを消すと,デフォルトカメラで起動します. ===== SSDs from TensorFlow ===== https://github.com/opencv/opencv/tree/3.4/samples/dnn に記載されている,SSDs from TensorFlowのScale値では認識結果が正しく帰ってきませんでした.scaleのオプションを1.0とすることで,ただしく動作することを確認しました. 上記SSDをmobilenet等のその他の種類を含め,tensorflowで実装したものです.configファイル及び,modelファイルは[[https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md|Tensorflow detection model zoo]]からダウンロードします.たくさん種類があるので,このページでは動作確認したものだけを具体的に上げます. ==== ssd_mobilenet_v1_coco ==== * [[http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v1_coco_2018_01_28.tar.gz|ssd_mobilenet_v1_coco]] ダウンロード後展開し,その中にある frozen_inference_graph.pb をmodelファイルとして指定します.configファイルには,解凍したファイルからpbtxtを生成するのが正しいやり方になります. * {{ :opencv_dnn:ssd_mobilenet_v1_coco_2017_11_17.pbtxt |}} * 実行時間:63.86[ms] * {{:opencv_dnn:スクリーンショット_2018-09-18_12.32.49.png?400|}} $ ./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 ==== * [[http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz|ssd_mobilenet_v2_coco]] 上記同様に froen_inference_graph.pb をmodelファイル,configファイルには生成したpbtxtを使う.ここでは生成したファイルをはっつけます. * {{ :opencv_dnn:ssd_mobilenet_v2_coco_2018_03_29.pbtxt |}} * 実行時間:91.83[ms] * {{:opencv_dnn:スクリーンショット_2018-09-18_12.31.35.png?400|}} $ ./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 ===== SSD from Caffe ===== MobileNetではなく,元々のオリジナルSSDのcaffe実装.まずは下記リンクから一式ダウンロードし,必要なモデル,configファイルを持ってくる. * https://drive.google.com/file/d/0BzKzrI_SkD1_dUY1Ml9GRTFpUWc/view * 実行時間:1197.79[ms] * {{:opencv_dnn:スクリーンショット_2018-09-18_12.11.35.png?400|}} $ ./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 ===== Yolo ===== 動作速度が高速であり,SSDとobject detectionにおいて双璧をなすアルゴリズムです.高速動作と引き換えにmAP(mean Average Percentage)がやや低め(バウンディングボックス精度が低い)というデメリットがあります.適応するアプリケーションがバウンディングボックスの正確性を必要とするものであれば不向きですが,ある程度この辺になにがあるかをざっくり知るだけであれば,本手法がおすすめです. * 実行時間:94.38[ms] * {{:opencv_dnn:スクリーンショット_2018-09-18_12.09.36.png?400|}} $ ./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