1. 程式人生 > >Windows下編譯Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)

Windows下編譯Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)

按照官網給出CUDA9.1+cudnn7.0+OpenCV 3.1.0的版本安裝

1 安裝CUDA 9.1

預設位置安裝後發現環境變數自動加入了path

 

2 安裝cudnn 7.0.5 for cuda 9.1

下載地址:https://developer.nvidia.com/rdp/cudnn-archive

2.1 下載解壓

2.2 把這三個資料夾下的檔案分別放到cuda的預設安裝目錄:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1下的對應資料夾。

官方給的建議是為cudnn解壓後的包建立一個系統變數,解壓後發現檔案很少,沒必要建立path了。

2.3 在msvs屬性中,聯結器——>輸入——>附加依耐項,加入 cudnn.lib 

 

3 下載OpenCV 3.1.0 解壓

 

4 用msvs 2015開啟 build\darknet\darknet.sln 

4.1 設定為 x64 and Release 

4.2 darknet屬性管理器中配置:VC++和連結器的Opencv

更改C/C++中的附加包含目錄為自己的opencv路徑:

4.3 生成——>生成解決方案

生成了darknet.exe

 

5 測試

下載yolov3.weights 權重檔案到 D:\darknet-master\build\darknet\x64

cmd中cd到 D:\darknet-master\build\darknet\x64

執行:darknet.exe detector test data/coco.data yolov3.cfg yolov3.weights

 

6 出現的問題

問題1:
錯誤    C1083    無法開啟包括檔案: “cudnn.h”: No such file or directory    darknet    d:\darknet-master\src\cuda.h    33  

解決:下載好cudnn,解壓 

把這三個資料夾下的檔案分別放到cuda的預設安裝目錄:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1下的對應資料夾。

官方給的建議是為cudnn解壓後的包建立一個系統變數,解壓後發現檔案很少,沒必要建立path了。

在msvs屬性中,聯結器——>輸入——>附加依耐項,加入 cudnn.lib 

問題解決!

 

問題2:

錯誤    C2589    “(”:“::”右邊的非法標記    darknet    C:\Users\admin\Documents\opencv\build\include\opencv2\objdetect.hpp    127    
這是因為windows.h中也定義了max和min巨集,當你包含了windows.h時,該程式就不能通過編譯。

解決:

double delta = eps*(std::min(r1.width, r2.width) + std::min(r1.height, r2.height))*0.5;

修改為:

int x1 = r1.width < r2.width ? r1.width : r2.width; // std::min(r1.width, r2.width)
int x2 = r1.height < r2.height ? r1.height : r2.height; // std::min(r1.height, r2.height)
        double delta = eps*(x1 + x2)*0.5;

Reference:

https://github.com/AlexeyAB/darknet

https://blog.csdn.net/amusi1994/article/details/80261735