Darknetをwindows10にインストールして物体認識・物体判別をする

今までChainerやTensorflowなどで記述された物体認識・物体判別をしてきましたが
今回はYoloV2の制作者がC言語製作したdarknetをwindowsPCにインストールして試してみました。

[環境]
windows7 64bit
python3.5.2
VisualStudio2015
OpenCV3.2

[OpenCVインストール]

OpenCV3.2をダウンロードします
*製作者はOpenCV3.0でやっていますがファイル関係のエラーでできなかったため3.2でやっています
OpenCV 3.2 - OpenCV library

ここの一番下の”Windows self-extracting archive:”からexeをダウンロードします

exeを実行し、C:\直下に定してインストール
環境設定に

”C:\opencv\build\x64\vc14\lib;C:\opencv\build\include”
を追加する

[DarkerNetビルド]

https://github.com/AlexeyAB/darknet
ここにアクセスしてzipをダウンロード
ダウンロードしたファイルを解凍し、

”darknet-master\darknet-master\build\darknet”
に移動
次に”darknet.sln”を実行(VisualStudio2015)

VisualStudioが起動したら、
プラットフォームを”x64”に構成を”Release”に変更
ビルド→darknetのリビルドを実行

以下エラー除去
・include失敗、見つからない
 プロジェクト→プロパティ→VC++ディレクトリ→インクルードディレクトリ右の▼→編集→C:\opencv\build\includeを追加
 f:id:weekendproject9:20171029225053p:plain
opencv_world320.libが見つからない、参照できない
 プロジェクト→プロパティ→VC++ディレクトリ→ライブラリディレクトリ右の▼→編集→C:\opencv\build\x64\vc14\libを追加
 f:id:weekendproject9:20171029225506p:plain

*1.CUDA8.0ではなくて他のバージョンをお持ちの場合は、メモ帳を使用してbuild\darknet\darknet.vcxprojを開き、
  ”CUDA 8.0”で2か所探して自分のCUDAバージョンに変更して、リビルドを実行してください。
*2.GPUがない人はbuild\darknet\darknet_no_gpu.slnで実行してください
*3.OpenCV2.4.13の人はパスを変更してください
 ・(right click on project) -> properties -> C/C++ -> General -> Additional Include Directories:
   C:\opencv_2.4.13\opencv\build\include
 ・(right click on project) -> properties -> Linker -> General -> Additional Library Directories:
   C:\opencv_2.4.13\opencv\build\x64\vc14\lib
*4.OpenCV2.4.**の人はさらにパス変更が必要なようです
  \src\detector.c等を開き、”#pragma comment(lib, "opencv_core2413.lib"”などを変更


無事ビルドが終了したら”darknet-master\darknet-master\build\darknet\x64”にexeができています。

[DarkerNet実行]

コマンドプロンプトを起動して以下に移動

cd ***\***\darknet-master\darknet-master\build\darknet\x64
移動したら以下を実行
”darknet_voc.cmd”

以下エラー除去
opencv_world320.libが見つからない、参照できない
  C:\opencv\build\x64\vc14\bin\opencv_world320.dllをdarknet_voc.cmdを生成したexeと同じフォルダにコピー
opencv_ffmpeg320_64.dllが見つからない、参照できない
  C:\opencv\build\x64\vc14\bin\opencv_ffmpeg320_64.dllをdarknet_voc.cmdを生成したexeと同じフォルダにコピー

以下実行結果

\darknet-master\darknet-master\build\darknet\x64>darknet.exe detector
 test data/voc.data yolo-voc.cfg yolo-voc.weights -i 0 -thresh 0.2
layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  32
    1 max          2 x 2 / 2   416 x 416 x  32   ->   208 x 208 x  32
    2 conv     64  3 x 3 / 1   208 x 208 x  32   ->   208 x 208 x  64
    3 max          2 x 2 / 2   208 x 208 x  64   ->   104 x 104 x  64
    4 conv    128  3 x 3 / 1   104 x 104 x  64   ->   104 x 104 x 128
    5 conv     64  1 x 1 / 1   104 x 104 x 128   ->   104 x 104 x  64
    6 conv    128  3 x 3 / 1   104 x 104 x  64   ->   104 x 104 x 128
    7 max          2 x 2 / 2   104 x 104 x 128   ->    52 x  52 x 128
    8 conv    256  3 x 3 / 1    52 x  52 x 128   ->    52 x  52 x 256
    9 conv    128  1 x 1 / 1    52 x  52 x 256   ->    52 x  52 x 128
   10 conv    256  3 x 3 / 1    52 x  52 x 128   ->    52 x  52 x 256
   11 max          2 x 2 / 2    52 x  52 x 256   ->    26 x  26 x 256
   12 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512
   13 conv    256  1 x 1 / 1    26 x  26 x 512   ->    26 x  26 x 256
   14 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512
   15 conv    256  1 x 1 / 1    26 x  26 x 512   ->    26 x  26 x 256
   16 conv    512  3 x 3 / 1    26 x  26 x 256   ->    26 x  26 x 512
   17 max          2 x 2 / 2    26 x  26 x 512   ->    13 x  13 x 512
   18 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024
   19 conv    512  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 512
   20 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024
   21 conv    512  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 512
   22 conv   1024  3 x 3 / 1    13 x  13 x 512   ->    13 x  13 x1024
   23 conv   1024  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x1024
   24 conv   1024  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x1024
   25 route  16
   26 conv     64  1 x 1 / 1    26 x  26 x 512   ->    26 x  26 x  64
   27 reorg              / 2    26 x  26 x  64   ->    13 x  13 x 256
   28 route  27 24
   29 conv   1024  3 x 3 / 1    13 x  13 x1280   ->    13 x  13 x1024
   30 conv    125  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 125
   31 detection

Loading weights from yolo-voc.weights...Done!
Enter Image Path:

使用する画像を尋ねられるからサンプルに付属している画像のパスを入れる

Enter Image Path: ***\darknet-master\darknet-master\data\dog.jpg
***\darknet-master\darknet-master\data\dog.jpg: Predicted in 0.038000 seconds.

car: 75%
bicycle: 77%
dog: 91%

^Cバッチ ジョブを終了しますか (Y/N)? y

Ctrl+Cを打ってyで終了する

実行結果↓
f:id:weekendproject9:20171030003830p:plain
f:id:weekendproject9:20171030003839p:plain



[参考HP]
「darknet」C言語で機械学習!とりあえずインストールとmake、エラーの対処をしてみた - lisz-works
DarknetをWindowsにインストールする - TadaoYamaokaの日記
YOLOv2を使って自前のデータを学習させて認識させるまで。 - 可変ブログ
OpenCV3.2インストール方法(ビルドなし) - Qiita