#WindowsでYOLOv3を使うためのあれこれ
darknetで学習するために必要なのは
・AlexyABさんのWindows版darknetのビルド
・学習データ作成
このふたつ。
両方結構大変なので簡単な流れと参考URLを書いておく。
##darknetのビルド
これがかなりつらみ。Visual Studio使ったことない人には分からないことだらけだと思う。僕もそうだった。というか一回諦めた。インストールするものが沢山あるけど頑張りましょう。
※NVIDIAのGPUを前提としてます。
自分でできるからファイルだけくれって人はここからクローンしてね
https://github.com/AlexeyAB/darknet
###STEP1 いろいろダウンロード
英語大丈夫な人はここを参照
https://github.com/AlexeyAB/darknet#requirements
※全てCドライブ上に展開すること。
・Visual Studio 2017
・darknetビルド用ファイル
・Nvidiaドライバ
・CUDA Toolkit 10.0
・cuDNN (for CUDA 10.0)
・OpenCV (C/C++の方)
・CMake
以上!多い!
1つ1つ説明するでよ。
あとVisual StudioはCUDAより先に入れること。すでにCUDA10.0が入ってる人はインストールしなおしましょう。
各ファイルのインストール先はメモっておくこと。
darknetビルド用ファイル
AlexyABさんが提供してます。リンク先のgitでクローン or ZIPダウンロード。
https://github.com/AlexeyAB/darknet
Visual Studio 2017
2020年1月現在、最新版はVisual Studio 2019だけど2017を入れる。DLはここから。
https://docs.microsoft.com/ja-jp/visualstudio/releasenotes/vs2017-relnotes
Visual Studio Installer が起動したらC++によるデスクトップ開発にチェックを入れてインストール。
Nvidiaドライバ
自分のGPUに合ったドライバを入れます。
(何のGPUが入ってるか分からないときはコルタナさんに「dxdiag」を入力)
https://www.nvidia.co.jp/Download/index.aspx?lang=jp
ここで一つ言っておかねばならないことがありまして、、
ドライバダウンロード時にこんな画面が出るのだけども
ここのバージョンが411.31以上でないと、CUDA10.0が正常に動作しないと思われます。
なのでGPUがちょっと古すぎる人はここのやり方だと多分うまくいかない。
CUDA Toolkit 10.0
AlexyABさんがCUDA 10.0を指定しているので素直に従う。
https://developer.nvidia.com/cuda-10.0-download-archive
cuDNN (for CUDA 10.0)
cuDNNはCUDAのバージョンに合わせたものを入れる。CUDA10.0に対応した最新版を選びましょう。
https://developer.nvidia.com/rdp/cudnn-archive
ダウンロードにはNVIDIAの会員登録が必要。怖がらずパパっと登録しちゃう。
OpenCV (C/C++の方)
ここからWindows用のものを。
https://opencv.org/releases/
バージョンは2.4以上なら何でもいい、はず。最新版入れちゃう。
CMake
ビルドのために必要なソフトウェアらしい。最新版入れちゃう。
https://cmake.org/download/
ここまででSTEP1は終了。お疲れ様です。
ダウンロードした圧縮ファイルは全部展開しておいてね。
###STEP2 ビルドするための設定変更いろいろ
まずはvisual studio 2017を起動。
1.ファイルを開く
「プロジェクト/ソリューションを開く」からdarknet.slnを選択。
ファイルはgitから落としたフォルダのdarknet-master\build\darknetにある。
ファイルを開くとソリューションの再ターゲットとかいう画面が出るのでとりあえずSDKもプラットフォームもアップグレードしとく。
2.プラットフォームを変更
visusal studio 上部のソリューション構成/プラットフォームを「Release/×64」に変更
3.プロパティのC/C++を変更
※参照パスに日本語が入ってるとビルドに失敗する可能性があるので注意
Visual Studioの画面右側、ソリューションエクスプローラー内のdarknetファイルを右クリックしてプロパティを開く。
「構成プロパティ」→「C/C++」→「全般」
追加のインクルードディレクトリに
・CUDA v10.0
・cudnn
・opencv
の3つのincludeフォルダのパスを追加する。元から入ってるパスはそのままで無視して良い。
CUDA v10.0のincludeフォルダは Program files/Nvidia Gpu Computing Toolkit/
~にあるはず。
各includeフォルダの場所が分からない場合は下のスクショを参考にどぞ。
4.プロパティのリンカーを変更
※参照パスに日本語が入ってるとビルドに失敗(以下略
さっきと同じくdarknetファイルの構成プロパティ内から
「リンカー」→「全般」
追加のライブラリディレクトリに
・CUDA v10.0
・cudnn
・opencv
の3つのlibフォルダのパスを追加する。
CUDAとcudnnは lib/×64
まで入れちゃう。
opencvは opencv/build/×64/vc14/lib
だけでいいと思う。不安ならvc15の方も追加しちゃいましょう。
###STEP4 ビルド
メニューバーの[ビルド]から[ソリューションのビルド]或いは[リビルド]を実行。
一発でうまくいくことはあまりない。
リビルドしないとエラーが分からなかったりするからそこは各自で適当に。
必要なものはインストールしてあるはずなので細かいエラーは各自で修正しましょう。
ビルドが完了すると darknet-master\build\darknet\x64
内にdarknet.exeができる。
###STEP5 darknet.exeの実行 の前に、、
実はビルドができてもこのまま実行するとおそらくエラーが出る。
理由は、darknetがいろんなbinフォルダを参照したいのに環境変数にbinフォルダのパスを追加していないから。
ってことで
・CUDA v10.0
・cudnn
・opencv
の3つのbinフォルダのパスを環境変数に追加する。
openCVのbinのパスは注意が必要。
**opencv/build/×64/vc14/bin
**の方のパスを追加すること。opencv/bin
の方じゃない。
###STEP6 darknet.exeの実行
STEP5までをちゃんとやったならもう大丈夫!
試しに学習済みモデルを使って画像を推論してみたい人は
https://github.com/AlexeyAB/darknet#pre-trained-models
からweightsファイルをダウンロードしてdarknet.exeと同じ階層に入れておく。
因みにcfgファイルそれぞれに対応したweightsファイルがあるので、好きなものを落として使うといいと思う。
実行用のコマンドはこんな感じ。(yolov3.cfgとyolov3.weightsを使った例)
コマンドプロンプトでdarknet-master\build\darknet\x64に移動した後
darknet.exe detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights -thresh 0.25
を実行。そのあと画像のパスを入力して完了
他のコマンドについてはここ参照されたし。
https://github.com/AlexeyAB/darknet#improvements-in-this-repository
飛んだ先から少し下にスクロールしたとこにある"How to use on the command line"てとこに他のコマンドがいろいろ書いてある。
##おわりに
ビルドできた方、お疲れ様でした。
準備編②では学習データについて書くよー。