CUDAは10.0、cuDNNは7.0、OpenCVは3.4.9を使用。既にOpenCVはビルドが終わっていて、CUDAとcuDNNの設定も終わっているものとする。
VS2017も入れておく。2019だとOpenCVのビルドで躓く可能性がある。
OpenCVビルドした時の記事
https://matsudamper.hatenablog.com/entry/2019/04/09/212629
darknet
https://github.com/AlexeyAB/darknet
Cmake
Configure
OpenCV_DIRとCUDA_SDK_ROOT_DIRがNOTFOUNDと言われるので設定。
もう一度Configure。エラーはもう出ていないはず。
Generate-Open Project
特に問題はないはず。
Visual Studio
Build
Releaseにする。
ソリューションのビルド
失敗する。
2>プロジェクト "dark.vcxproj" のビルドが終了しました -- 失敗。 5>プロジェクト "uselib_track.vcxproj" のビルドが終了しました -- 失敗。 4>プロジェクト "uselib.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 3 正常終了、3 失敗、0 更新不要、1 スキップ ==========
failed
失敗しているのでとりあえずdarkだけビルドしてみる。
エラー詳細が出た。コード1で終了。要するにエラー。
nvcc.exeの実行に失敗しているようなので、該当のコマンドをdarknetのディレクトリで実行してエラーの詳細を得る。
nvcc fatal : Unknown option 'pthread'
"-pthread"のオプションが要らないっぽい。外でも問題になっている。
https://github.com/arbor-sim/arbor/pull/649
"-pthread"オプションに該当するものを削除。
cl.exeが無いとエラーが出たので、PATHに追加。自分の場合は以下のPath。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64
Build
もう一度全体をビルド。成功。
========== ビルド: 3 正常終了、0 失敗、3 更新不要、1 スキップ ==========
darknet/darknet.exeが出力されているはず。
実行
エラー
pthreadVC2.dll が見つからないため、コードの実行を続行できません。プログラムを再インストールすると、この問題が解決する可能性があります。
検索すると見つかるのでPATHを通す。
問題なさそう。
D:\documents\darknet>Release\darknet.exe usage: Release\darknet.exe <function>
重みをダウンロードし、実際に引数を入れて使用する。
https://pjreddie.com/darknet/yolo/
darknet.exe detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights -thresh 0.25 test/test.jpg
検出結果が出て、ファイルも生成されるはず。
python
yolo_cpp_dll.dllの作成
darknet\build\darknet\yolo_cpp_dll.slnを開いてReleaseに設定し、ビルドをする。
darknet\build\darknet\x64にyolo_cpp_dll.dllが出力されている。
darknet.py
この状態だとdllを読み込んでくれないようなのでcwdにdllがあるパスを設定しました。
if os.name == "nt": cwd = os.path.dirname(__file__) cwd = r"D:\documents\darknet\build\darknet\x64" os.environ['PATH'] = cwd + ';' + os.environ['PATH'] winGPUdll = os.path.join(cwd, "yolo_cpp_dll.dll") winNoGPUdll = os.path.join(cwd, "yolo_cpp_dll_nogpu.dll") envKeys = list()
これでPythonから使用できる。
おわり
Windowsで使用するってなかなか普通でないから面倒くさかった。PythonのDLLの読み込みでも躓いたりして面倒だった。でもまぁWindows好きだから良しとする。
Pythonはよくわからん。