cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

OpenCV3.4.2で始める浅いディープラーニング (その1 インストールからexample_dnn_object_detection.exeを動かすまで)

最近はDeep Learningを使うと、オシャレなんだそうです。でも面倒くさい勉強は極力したくありません。OpenCVのdnnモジュールが、3.4.2ぐらいからレギュラー扱いで本体に吸収されたそうなので、お手軽にこれを使ってみたいと思います。

1.インストール

OpenCV3.4.2以降のソースコードを用意します。ここではgithubに上がっているmaster版[1]を使おうと思います。開発環境は、Windows10のMSVC2015です。[1]-[3]の3つをダウンロードして、例えばc:\workspaceなどに同じフォルダに並べて置きます。

1.2 cmakeとビルド

CMakeを普通に通してビルドします。CMakeの設定の例は次の通りです。

Where is the source code: c:\workspace\opencv\sources
Where to build the binaries: c:\workspace\opencv\build

  • [check] BUILD_EXAMPLES
  • OPENCV_EXTRA_MODULES_PATH c:\workspace\opencv_extra\modules
1.2.1 [OpenCV 3.4.2限定] object_detection.cppのnmsを直す

zipファイルで配布されているopenCV3.4.2のsampleのソースコードには、なんかしょうもないタイポがありますので、これを直します。
c:\opencv342\sources\samples\dnn\object_detection.cppの25行目const char* keys の設定の中でthrとなっているのをnmsにします。

"{ thr | .4 | Non-maximum suppression threshold. }"

"{ nms | .4 | Non-maximum suppression threshold. }"

1.3 必要なファイルを準備

1.3.1 実行ファイルのコピー

buildした結果のexeファイルやdllファイルを、データファイルがあるopencv_extraフォルダの中にコピーして放り込みます。

  • example_dnn_text_detection.exe
  • example_dnn_segmentation.exe
  • example_dnn_openpose.exe
  • example_dnn_object_detection.exe
  • example_dnn_colorization.exe
  • example_dnn_classification.exe

と、


c:\workspace\opencv_extra\dnn
にコピーします。

1.3.2 dnn用のモデルのダウンロード

opencv_extraのなかにモデルダウンロード用のpythonスクリプトがありますので、これをダブルクリックして実行します。
> download_models.py
大きなファイルを沢山ダウンロードしますので、30分~1時間ぐらいの時間がかかる場合があります。

1.3.3 ラベルファイルのコピー

c:\workspace\opencv\sources\samples\data\dnnの下にある物体の名前リストが書かれたtxtファイル5個をすべてopencv_extraフォルダにコピーして持ってきます。

  • classification_classes_ILSVRC2012.txt
  • enet-classes.txt
  • object_detection_classes_coco.txt
  • object_detection_classes_pascal_voc.txt
  • object_detection_classes_yolov3.txt

1.4 何も分からないまま、dnnの物体検出をテスト

コマンドプロンプトを開いて、次のスクリプトを実行するか、txtエディタでobject_detection.bat等の適当な名前でバッチファイルを作ります。
PCに適当なUSBカメラをつないでおいてください。

example_dnn_object_detection.exe --model=yolov3.weights --config=yolov3.cfg --scale=0.00392 --width=416 --height=416 --mean=0 0 0 --rgb --classes=object_detection_classes_yolov3.txt

USBカメラが無い場合は、適当な画像ファイルを入力に指定してください。

--input=source.jpg

scaleやwidthやheightやmeanなどの謎パラメータはmodel毎に異なるそうなので、[4]を参考に使いたいモデルに合わせて調整してください。パラメータの簡単な説明は[5]の中のYOLO DNNsにありますが、プログラム実行ファイルが表示してくれるhelpを見た方が分かり易いです。

実行結果はこんな感じ。Intel Core i7-4770SのCPU実行で1fpsぐらいの速度です。
f:id:cvl-robot:20180719195022p:plain
confidenceは、認識結果の確信度の閾値で50%以上の自信がある結果だけを表示します。
なんか知らんけど、机の前に座ってる特定のpersonだけ認識結果が悪い。。。

用語が分からない

dnn関係の説明で、CaffeとかCOCOとかYoloとかRNNとかResNetとか良く分からない単語がいっぱい出てきます。次から次へと新しい言葉が出てきて、何のことだかすぐわからなくなっちゃうので、次回はこれを整理したいと思います。(慣れている人なら、[6]を見れば直ぐに分かります)

今日の英語

英語が全然分からないので、勉強しなおしています。この本が短くて明瞭でとても良かった!
あとは、覚えるだけ!(夏の終わりか、テスト前)

サバイバル英文法 「読み解く力」を呼び覚ます (NHK出版新書)

サバイバル英文法 「読み解く力」を呼び覚ます (NHK出版新書)