Windows10+VS2017+CUDA 9.2+CUDNN v7.1.4+OpenCV 3.4.0+YOLO v3环境配置

CUDA 9.2+CUDNN v7.1.4的安装,基本上跟之前这篇文章的描述一致,地址如下:

https://blog.csdn.net/weixinhum/article/details/80296442

不同的地方在于CUDA 9.2版本没有出现之前“遇坑一”的问题。


接着下载OpenCV3.4.0,准备搭建环境。要强调的是现在最新的版本是OpenCV 3.4.2,然而看github上面说OpenCV 3.4.1起(包括3.4.1)会有bug,不知道3.4.2修复了没有,如果有勇士请试试,要是能留言说一下就更好了。


做完上面的准备工作后,可以到下面的网址下载源代码:

https://github.com/AlexeyAB/darknet

解压,在build文件夹下看到

稍微做下说明,里面的"darknet.sln"是主工程,基本上如果要看YOLO能实现什么东西,用它就够了。

"darknet_no_gpu.sln"是"cpu"版本,也就是慢的想哭版本,当然光看效果也是可以的。

"yolo_cpp_dll.sln"是动态链接库的编译版本,主要用于将YOLO的功能打包成dll。

"yolo_cpp_dll_no_gpu.sln"跟"darknet_no_gpu.sln"一个道理。

"darknet_console_dll.sln"是调用动态链接库的demo,也就是说只有把"yolo_cpp_dll.sln"编译过了,生成dll,这个工程才有意义。

对于所有的这些sln都有一个共同的问题,就是我们装的是"CUDA 9.2",而源代码编译的时候配置的环境是"CUDA 9.1",因此需要修改".vcxproj"文件,找到里面"CUDA 9.1"的位置,替换成"CUDA 9.2"(每个文件都有两处)。

做完上面的修改,打开"darknet.sln",切换到"x64"平台,配置"附加库目录"和"附加包目录"中跟"OpenCV"路径相关的内容。然后就可以开始编译了(对于其他的sln也一样)。

如果用到最新版本的VS2017,会出现如下的bug:

这个问题在下面的博客中可以找到答案

https://blog.csdn.net/lovelessyi/article/details/79219276

就是最新版本的CUDA不支持最新版本的VS2017,要修复也比较简单,就是到

CUDA的安装路径中:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include\crt

找到"host_config.h"文件

将第131行

#if _MSC_VER < 1600 || _MSC_VER > 1913

修改成

#if _MSC_VER < 1600 || _MSC_VER > 1920

就可以了。

到此,再编译应该就可以了,编译好发现找不到"opencv_world340.dll",则到OpenCV的文件夹把"opencv_world340.dll"和"opencv_world340d.dll"拷贝到"xx\build\darknet\x64"这个路径下。

编译好会在"xx\build\darknet\x64"下出现一个"darknet.exe"程序,就是我们刚刚编译出来的可执行程序。接着可以看看效果了,看之前需要先下载训练好的模型,地址如下:

https://pjreddie.com/media/files/yolov3.weights

下完也把它扔到"\build\darknet\x64"这个路径下,然后打开命令行cd到"xx\build\darknet\x64"这个路径下,输入命令

.\darknet.exe detector test data/coco.data yolov3.cfg yolov3.weights -i 0 -thresh 0.25 dog.jpg

则可以看到

另外,如果要用到YOLO检测视频对象的功能,需要用到OpenCV读取视频,而OpenCV的解码器不是自带的,因此需要自己装一个,不然会无法工作,具体见下面的博客:

https://blog.csdn.net/weixinhum/article/details/37775913

做完上面的工作之后,准备好视频文件,输入下面的命令之后可以看到效果

.\darknet.exe detector demo data/coco.data yolov3.cfg yolov3.weights -i 0 -thresh 0.25 test.avi

那么到此我们就把YOLO的环境给配置好了,关于如何编译和使用dll这部分,会在下篇文章给出。

参考文章:

https://github.com/AlexeyAB/darknet

https://blog.csdn.net/amusi1994/article/details/80261735?from=singlemessage

https://www.cnblogs.com/cvtoEyes/p/9060232.html

 

猜你喜欢

转载自blog.csdn.net/oHanTanYanYing/article/details/81451210