Win10+vs2017+opencv+darknet做目标检测

一、环境配置
开始之前,我先把我的百度云链接分享出来,如果有不想用我这些的,后面我也写明了具体的下载方式和下载地址,可以自己下载。
链接:https://pan.baidu.com/s/1UzOMT3l3vnPYzD6j1oFgjQ
提取码:cpkx
复制这段内容后打开百度网盘手机App,操作更方便哦
安装vs2017,如图必须勾选这几项,C++和python的支持就不用说了,这是必须的,适用于vs2015是因为darknet支持的是vs2015,所以要勾选这一项才可以。
Win10+vs2017+opencv+darknet做目标检测

Win10+vs2017+opencv+darknet做目标检测
Win10+vs2017+opencv+darknet做目标检测
Win10+vs2017+opencv+darknet做目标检测

安装opencv3.2.0,这里解释一下为什么是3.2.0,其实现在opencv已经发展到4.0+了,但是有很多跟不上时代的东西,只能支持一些老版本,darknet就是了,darknet只能支持3.4.0以下的opencv版本。这个安装也简单可以选择自己到官网下载自己喜欢的版本。
附网址:https://opencv.org/releases/
Win10+vs2017+opencv+darknet做目标检测

就是这个软件,记得自己下载要自己选择系统,我的是windows。无需安装编译,直接双击打开即可使用。
安装cuda
下载地址:
Cuda地址:
https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal
Cudnn地址:
https://developer.nvidia.com/cudnn
大家可以选择自己喜欢的cuda版本,darkNet源码中默认的是cuda10.1的版本,当然其他版本也没有关系,后面会告诉大家怎么做。
安装cuda时基本就是傻瓜操作
Win10+vs2017+opencv+darknet做目标检测

这一步选择自定义,接下来就继续下一步就好了:
Win10+vs2017+opencv+darknet做目标检测

但是安装完之后还需要将cudnn中的三个文件分别复制到cuda的同名文件夹下,这里要注意下载cudnn的时候一定要选择与cuda版本搭配的版本,否则容易出现错误。
Win10+vs2017+opencv+darknet做目标检测

如图将cudnn中的这三个文件分别放置到cuda的同名文件下,cuda的安装地址如果你在安装时没有自己设置的话,那就在你C盘中C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0这个地址下面
Win10+vs2017+opencv+darknet做目标检测

如图将cudnn中的几个文件分别复制到cuda的同名文件夹下
二、下载darkNet
直接附上下载地址:
darknet: https://github.com/AlexeyAB/darknet
下载好darkNet并解压,打开之后去找build,熟悉C++的都知道build中就是已经编译好的东西了,这里可以看出源码作者还是很人性化的,没有让我们自己去编译。
三、在VS2017上配置
环境准备的差不多之后,就要开始配置了,首先用vs2017打开E:\darknet-master\build\darknet这个地址下的darknet.sln,打开之后,选择菜单栏视图>其他窗口>属性管理器,然后在右侧可以看到
Win10+vs2017+opencv+darknet做目标检测

右键点击darknet,选择属性,选择VC++目录中的包含目录并如下图配置
Win10+vs2017+opencv+darknet做目标检测

然后选择库目录进行如下配置:
Win10+vs2017+opencv+darknet做目标检测

再选择链接器里的输入>附加依赖项添加opencv_world320.lib:
Win10+vs2017+opencv+darknet做目标检测

到这里vs2017中的opencv3.2.0就配置完成了,然后将平台调整为release / x64
这时候还需要再加一些其他配置,首先需要添加两个环境变量,一个是cudnn的,另一个是opencv的,如图,在系统环境变量的path中新建两个环境变量
Win10+vs2017+opencv+darknet做目标检测

这个要根据自己的cudnn和opencv的位置创建。
然后还需要在vs2017中配置cuda,将cuda中:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\visual_studio_integration\MSBuildExtensions
文件夹下的所有文件复制到vs2017的这一目录下:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\BuildCustomizations
如图:
Win10+vs2017+opencv+darknet做目标检测

这里特别说一下,因为这里默认的cuda是cuda10.1,但是我安装的是cuda10.0,这个时候怎么办呢,很简单,重命名就好了,直接把图中这两个文件改成10.1即可,另外两个不要改,否则会报错。
Win10+vs2017+opencv+darknet做目标检测

到这一步之后,就可以编译生成项目解决方案了。这个时候如果没什么问题,就会在E:\darknet-master\build\darknet\x64这一目录下生成一个darknet.exe,应该有人会好奇这exe是个什么,其实我也不太确定,但是以我的经验来看,这个exe就是darknet的网络框架,里面是不带有任何权重的,所以运行的时候还需要自己去输入权重。
生成exe之后,也就代表环境配置基本没有问题了,那接下来就该开始测试和训练了。
四、测试初始权重
在做测试之前,先介绍几个文件。
yolov3.weights:yolov3的权重文件,我上传的这个是coco数据集训练的权重文件,共有80个分类,可以直接调用来检测结果。
coco.data/voc.data:这个文件中存放了coco或者voc数据的具体信息的文件名,方便训练或测试的过程中调用,也是为了方便使用者对其进行更改。
yolov3.cfg:这个文件中保存的是yolov3的配置参数,cfg中还有很多模型的cfg,分别存放了不同模型的配置参数,因为我们这里测试的是yolov3,所以只使用了yolov3的配置参数。
测试的时候,需要用到的命令是:
darknet.exe detector test cfg/coco.data yolov3.cfg yolov3.weights -i 0 -thresh 0.25 dog.jpg -ext_output
其中test就是测试的意思,训练则要用train,0.25是表示检测到的准确度大于0.25的结果要输出,dog.jpg表示测试调用的图像,剩下的一些参数我也还没搞明白,有懂王可以在后面给我留言,谢谢。接下来展示一下测试结果。
Win10+vs2017+opencv+darknet做目标检测

Win10+vs2017+opencv+darknet做目标检测

这个测试可以直接在E:\darknet-master\build\darknet\x64下打开终端输入我上面的命令运行,也可以直接运行darknet_yolo_v3的脚本,效果是一样的,通过上面的图可以看到,运行的时候可以看到你配置的所有环境以及电脑的GPU,还有使用的一些参数。
既然测试没有问题了,那么久进入最关键的一步,训练。
五、用自己的数据集进行训练
在用自己的数据集训练之前,先来尝试一下官方数据集的效果,因为coco数据集实在是太大了,所以我用了voc数据集来测试。附voc百度链接,各位也可自己到官网下载,但是一定要把2007和2012的三个文件都下载了。
链接:https://pan.baidu.com/s/135DAKUQRktQ8YnMfuA-aLQ
提取码:zdal
Win10+vs2017+opencv+darknet做目标检测

下载好voc之后,复制到E:\darknet-master\build\darknet\x64\data\voc这一地址下,将压缩包全部解压,会得到一个文件夹VOCdevkit,打开之后可以看见里面的数据,其中主要用到的是下面这三个文件夹里的东西,Annotations中存放的xml文件记录的是图像中的标注信息,JPEGImages中保存的是原图,ImageSets中保存的是分配好的训练集和测试集。
Win10+vs2017+opencv+darknet做目标检测

然后退回到voc文件夹下,可以看见一个py的文件,voc_label.py,直接cmd打开终端运行这个文件,输入python voc_label.py运行
Win10+vs2017+opencv+darknet做目标检测

运行完毕就会生成训练所需的数据集了,然后还需更改一些参数,因为原来的参数是适用于coco的,所以需要改一下。打开cfg文件夹,可以看见很多的配置文件
Win10+vs2017+opencv+darknet做目标检测

在这里找到voc.data, yolov3-voc.cfg,首先修改voc.data,打开之后看见这些信息
Win10+vs2017+opencv+darknet做目标检测

第一行表示训练数据的类别数,因为voc有20类,所以用20,train和valid分别表示保存有训练数据和验证数据信息的文件地址,names表示分类的名字,因为voc.names中名字是写好的,暂时不需要更改,如果用自己的数据集进行训练,就需要更改这个名字。更改之后的信息如下:
Win10+vs2017+opencv+darknet做目标检测

这个是按照自己的地址来配置的,千万不要弄错了。接下来修改yolov3-voc.cfg文件,这里需要更改的主要有两个参数:batch和subdivisions。
Win10+vs2017+opencv+darknet做目标检测

yolov3-voc.cfg文件定义了yolo的卷积神经网络模型,和超参数配置等。这里需要注意,训练时需要将#Testing区块下的batch和subvisions注释掉;测试和验证时则放开注释,同时注释掉#Training区块下的内容。 训练时,可以根据自己GPU的内存来设置批的大小batch,可设为16、32、64、128 验证时,batch和subvisions同时设为1即可。
然后在E:\darknet-master\build\darknet\x64地址下打开终端,输入命令:
darknet.exe detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
这里的darknet53.conv.74是darknet的初始权重,我在开头的百度云链接中已经上传了这个文件,当然也可以自己下载,如果配置没有什么问题,那么就可以正常的训练了。训练过程中会持续往backup/下生成权重文件,如:yolov3-voc_100.weights、yolov3-voc_200.weights…

本文参考的博客有:
https://zhuanlan.zhihu.com/p/92141879
https://blog.csdn.net/qq_43475606/article/details/109187054
https://blog.csdn.net/qq_42001765/article/details/104250101

相关文章: