自習室

こもります

OpenCV 3.3.1 で Yolo v2 for object detection を動かしてみる (Windows)

わーい!

というわけで、とりあえずサンプルを動かしてみました。今回は速報版ってことでご容赦下さい。

環境構築

環境

インストール

  • Windows (vc14) 用にビルドされた物を落としてくる
  • .exe だけど自己解凍するだけなので、適当な場所に置く
    • 私の場合は D:\develop\opencv331 となるように置いた
  • OpenCVのいつもの儀式、パス通し。こちらの記事に習って行う

とりあえずサンプルを動かす

sources\samples\dnn\yolo_object_detection.cpp を動かす。

サンプルのためのプロジェクトを作成
  • Visual Studio 2015 > ファイル > 新規作成 > プロジェクト
  • テンプレート > Visual C++ > 「空のプロジェクト」 を選択
サンプルコードの取り込み
  • $(ProjectDir) 直下に、上記 sources\samples\dnn\yolo_object_detection.cpp を配置
  • Visual Studio の ソリューションエクスプローラー上で、ソースファイル フィルタに、上記ファイルを投げ込む

f:id:AMANE:20171028110435p:plainf:id:AMANE:20171028110439p:plain

インクルードとライブラリのリンク

Debug 時と Release 時で使う .lib ファイルが異なる事に注意。

ビルド
  • ビルド > ソリューションのビルド。 とりあえず Debug でやってみる。
コンフィグとモデルの用意
  • 今回はとりあえず動けば良いので、用途や適正は考えずに、yolo 公式から最もベタっぽいやつを取ってくる。
    • yolo.cfg
    • yolo.weights
  • Visual Studio 上でデバッグ実行する場合、作業ディレクトリは $(ProjectDir) となる。ので、そこに、yoloの cfg ファイルと weights ファイルを置く。
  • ついでに、テスト画像も用意。Yolo の学習にも使っている COCO から適当に。

f:id:AMANE:20171028112003p:plainf:id:AMANE:20171028112141p:plain

実行
  • cfg と model が読まれるようコマンド引数を設定。たとえば以下の様な感じ。
    • -cfg=yolo.cfg -model=yolo.weights -image=3320359009_059880900a_z.jpg
    • これは OpenCVCommandLineParser の書式です。
  • F5 デバッグ実行。

f:id:AMANE:20171028113621p:plain

結果

f:id:AMANE:20171028114308p:plain

見つけたオブジェクトに枠がついています。学習に使われたラベルはこちらです。

奥の車が見つかって無くて、ショルダーバッグだけで無く買い物袋も認識されていて、と言う結果です。良いのか悪いのかはわかりません。

それと、今のところ、提示されたクラスのIDと、その名称の紐付け方がよくわかっていません。他の結果も見た感じ、 Class:0 が人、 Class:2 が車っぽいって事はわかりました(笑)

f:id:AMANE:20171028114953p:plain

次にやりたいこと

  • Class の id から、クラス名を引く方法は?
  • サンプルを元に、動画ファイルやウェブカムを食わせる
  • Tiny YOLO はどうやら高速に動きそう、などモデルと設定の特性について学びたい