Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)

Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)_第1张图片Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)_第2张图片

按照官网给出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

Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)_第3张图片

2.1 下载解压

Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)_第4张图片

2.2 把这三个文件夹下的文件分别放到cuda的默认安装目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1下的对应文件夹。

官方给的建议是为cudnn解压后的包建立一个系统变量,解压后发现文件很少,没必要建立path了。

2.3 在msvs属性中,连接器——>输入——>附加依耐项,加入 cudnn.lib 

(msvs全局环境配置方法:视图-其他窗口-属性管理器:

 

Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)_第5张图片

双击对应环境下的.user配置

仅对该项目做环境配置:解决方案资源管理器-右击解决方案名-属性

3 下载OpenCV 3.1.0 解压,在msvs中配置好opencv

 

4 下载yolo:github.com/AlexeyAB/darknet

更改build\darknet\darknet.vcxproj 文件中两处:$(VCTargetsPath)\BuildCustomizations\CUDA 9.1.props为安装的cuda版本号

用msvs 2015打开 build\darknet\darknet.sln 

4.1 设置为 x64 and Release 

4.2 darknet属性管理器中配置:VC++和链接器的Opencv

更改C/C++中的附加包含目录为自己的opencv路径:

Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)_第6张图片

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

Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)_第7张图片

darknet-master\build\darknet\x64 下生成了darknet.exe

Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)_第8张图片

 

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

Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)_第9张图片

 

6 出现的问题

问题1:
错误    C1083    无法打开包括文件: “cudnn.h”: No such file or directory    darknet    d:\darknet-master\src\cuda.h    33  

解决:下载好cudnn,解压 
Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)_第10张图片

把这三个文件夹下的文件分别放到cuda的默认安装目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1下的对应文件夹。

官方给的建议是为cudnn解压后的包建立一个系统变量,解压后发现文件很少,没必要建立path了。

在msvs属性中,连接器——>输入——>附加依耐项,加入 cudnn.lib 

问题解决!

Windows下编译Yolov3(CUDA9.1+cudnn7.0+OpenCV 3.1.0)_第11张图片

 

问题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;

问题3:

msvs打开darknet.sln显示“无法加载解决方案”

解决:

复制

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1\extras\visual_studio_integration\MSBuildExtensions

文件下的四个文件至:

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations

 

问题4:

编译出错:MSB372 darknet cuda 9.1.targets 707

将build\darknet\darknet.vcxproj 中的

两处compute_75,sm_75替换成compute_52,sm_52

 

Reference:

https://github.com/AlexeyAB/darknet

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

你可能感兴趣的:(YOLO-V3)