yolov4在windows下的环境配置并且使用作者的python接口

最开始,我是直接看作者的文档的,作者的文档的说明如下:
yolov4在windows下的环境配置并且使用作者的python接口_第1张图片最开始按照cmake,不行,后面才知道我是漏掉了很多步骤,然后按照vcpkg,想了想,算了,还要另外下载东西,然后就直接按照第三种方法用vs进行编译了,但是,当我按照说明打开darknet.sln项目时候,开始报错了,报错如下:

在这里插入图片描述
遇到这种问题,免不了百度了,然而,百度上搜到的答案,不能解决这个问题,这里就又浪费了个把小时(后面我才知道,是我在安装cuda的时候,我选的自定义安装,然后就没有安装一些东西,这就导致了vs没有配置上cuda组件,我后面重新安装cuda,将所有东西都安装上后,cuda组件就存在vs当中了,然后上面的问题就不存在了,我这里为你们踩坑了,你们编译的时候要注意。还有就是,作者文档里面说了,vs最低版本要2017版本的,所以你如果还在使用vs2015,记得更新),没办法,百度网友的教程吧,我这还是给两篇文章,我也是综合这两篇文章最后才搞定的:
编译A篇
编译B篇
大家主要看A篇吧,这两篇编译cmake过程中主要区别就是一个是将cuda的路径放到系统环境中,一个是在cmake的过程中指定cuda这些的路径。

注意了,作者编译的时候cuda是10.0,如果你不是10.0,比如我是10.1,那么我要打开darknet.vcxproj文件,然后搜索你们的cuda 10.0,然后将cuda10.0改为cuda 10.1,会改两处。改完之后再按照上面给的操作说明去操作就行,但是,我在操作的过程中遇到了一个问题,我最初使用的opencv3.4版本,在cmake的过程中提示我找不到opencv下面的某个文件,如果忽略这个报错,那么最后配置下来的darknet,exe是不能使用opencv的,这里也让我纠结了很久,因为我去我的opencv3.4路径下面查找报错的找不到的文件,但是我的文件就在里面,后面实在没招了,只能试一试我另外安装的opencv4.2版本的文件夹路径,很奇怪,居然解决了这个问题。不知道是不是由于版本的原因才会造成这个结果。希望你们不会遇见这个问题,能够很顺利的编译结束。

ok,总算编译成功了,生成了darknet.exe文件,然后试了一下测试的语句,没问题,然后就很期待的去执行目录下面的darknet_video.py这个文件了,但是,很可惜,直接报错,去看源代码找到问题所在,我没有yolo_cpp_dll.dll这个文件,百度了一下,这玩意需要我们用vs去编译生成。首先我打开的我的某个文件,路径为 F:\code\yolov4\darknet-master\build\darknet\yolo_cpp_dll.vcxproj,搜索cuda 10.0,将其改为cuda 10.1,你如果cuda不是10.0版本也需要这个操作,然后我根据路径F:\code\yolov4\darknet-master\build\darknet\yolo_cpp_dll.sln找到文件,我们对这个sln文件用vs打开然后右击yolo_cpp_dll生成,生成之后再把yolo_cpp_dll.dll放到darknet_video.py的同级目录下,然后运行这个darknet_video.py文件,又报错了,看了看源代码,是因为测试的视频文件缺乏,所以又随便找了个视频放到这个.py文件的目录下并且改名为test.mp4,然后再运行,完美。
yolov4在windows下的环境配置并且使用作者的python接口_第2张图片这里效果有一些区别的就是,我如果使用yolov3.cfg和yolov3.weight,那么帧数会在47左右,如果我使用yolov4.cfg和yolov4.weight,那么帧数会在25帧左右,我的显卡的rtx2060,至于原因,无疑就是yolob4的网络深度要比yolov3深,而且yolov4输入的预处理后的图片尺寸也比yolov3大,正是由于这个原因,yolov4的识别率比yolov3高。


ps

刚刚用这个编译好的yolov4去跑模型,然后意外的发现,我这个依旧是在用cpu跑,然后发现,我在cmake的时候没有选择cuda这些选项,但是,当我将cuda这些选项选择好后重新编译,依旧还是cpu跑,后面想了想,反正我这vs2017在cuda重装后再打开yolov4的工程已经不会报错了,那么就直接根据作者的说明文档去操作吧,我这总结一下:
1:先打开darknet.vcxproj文件,然后搜索你们的cuda 10.0,然后将cuda10.0改为cuda 10.1(根据你的cuda版本去选择更改),会改两处
2:改了之后,根据作者的说明,将几个文件找到并且复制到一个文件夹下,我是复制到 F:\code\yolov4\darknet-master\build\darknet\,至于要复制的文件,如下图所示:
在这里插入图片描述在这里插入图片描述
关于opencv的文件名不一定完全相同,你去类似文件夹下就可以找到,如果你是opencv4.2版本,那么就是opencv420.dll,第二个文件夹是在你的cuda安装路径下,你直接在cuda安装路径下搜索就可以搜到,我这里路径是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin。

将以上两个文件复制过去之后,再去添加一个CUDNN的系统变量,类似下面这种:
yolov4在windows下的环境配置并且使用作者的python接口_第3张图片好了,准备工作做完了,用vs打开darknet.sln文件然后直接生成吧,这里要注意一个地方,如下:
在这里插入图片描述
这里是release 和x64,在生成yolo_cpp_dll.lib的时候,也要注意这里,否则对于最后效果很有影响(我有次是debug x64,测试视频的时候帧数只有7左右,而release x64的情况下帧数有25左右)

好了,折腾来折腾去总算搞好了,以后就可以使用作者给的python文件去使用自己训练好的模型了,只需要更改几个地方就行,还是很方便的。如果大家遇到我上面没有说到的问题,可以去看作者的说明文档,耐心点去看看英文就行。

ps2

之所以yolov4的帧数比yolov3差这么多,是由于yolov4的cfg文件里面默认是将输入的照片尺寸(经过图像预处理后的照片尺寸,用于放到神经网络中)设置为了608,而yolov3的默认输入的照片尺寸是416,如果该一下这个参数,帧数也差不多是39左右了,差距不会太大,但是准map值确实大大提升了。同时,如果你的显存不够,在训练的时候除了该batchsize,还可以改输入的照片尺寸,我是6g显存,用yolov4默认的输入尺寸,是跑不起来的,即使每次输入的图片数量为1也跑不起来,但是更改图片尺寸为416后,能跑起来了。cfg更改图片尺寸位置如下:
yolov4在windows下的环境配置并且使用作者的python接口_第4张图片

2020 5 25

你可能感兴趣的:(yolov4,cv)