Win10 +VS2015+双gtx Titan X使用YOLO v2训练VOC数据
其他博客地址:http://blog.csdn.net/baolinq
本文主要是记录在win10下,yolo v2训练数据的一整个过程,网上很多是在linux下的,不得不说这个东西还是linux下方便啊,主要依赖项:
VS2015或者VS2013都可以
Opencv2.x或者opencv3.x
Cuda8.0和cudnn6.0
GitHub上下载darknet源码
最近老师给配了一个深度学习专用的电脑,两路Titan X显卡+i7 6700K+SSD 256G+HD 4T(企业级),自己组装,搞了一下午(电脑硬件小白)。然后装双系统,配环境,真的是麻烦,搞了很久。磨刀不误砍柴工,为了以后效率高点还是值得的。
好了,不扯淡了。回到正题,使用YOLO v2训练VOC数据,我觉得使用yolo的朋友应该都是看上了它的速度,可以做到实时检测,这是最大的优点。
1. 配环境
装cuda和cudnn环境,这里就不说了,直接官网下载下来一路默认安装就好了,本文使用cuda8.0和cudnn6.0,cudnn下载的时候需要注册和填一个调查问卷,很简单这里就不谈了,网上也有很多是写这个的。配好在cmd窗口运行nvcc –V,有出现
表示安装成功。
为了显示图像,这里还安装了opencv,随便选一个版本,我装了opencv2.413,具体安装方法见我转载的博客(),并把环境配好,主要是环境变量和VS是属性管理器。
2. 编译源文件
从GitHub上下载darknet网络的源代码,在darknet-master\build\darknet目录下有这些文件,包括gpu版本和cpu版本,我们这里选择darknet.vcxproj,即是gpu版本,用VS
打开一般是出错的,不能正确加载项目,这是正常的。如果是no gpu版本的是能正常打开的,它并不依赖cuda的环境。
这里有一个很关键 的步骤,因为我们的cuda环境没有加入到相应的VS里面去,作者是用属性文件.props文件配置的工程,所以我们需要把cuda的一些props文件等加到相应的VS
版本里面去,很简单。复制几个文件到另一个地方就行了。我们查找发现project文件里面有两处关于cuda8.0的文件,props和target文件,找到他们复制到VS环境中即可。Darknet.project文件用notepad++打开,看到如下内容:
<ImportGroupLabel="ExtensionSettings">
<ImportProject="$(VCTargetsPath)\BuildCustomizations\CUDA 8.0.props" />
<ImportGroup Label="ExtensionTargets">
<ImportProject="$(VCTargetsPath)\BuildCustomizations\CUDA 8.0.targets" />
把cuda里面的这个文件夹C:\Program Files\NVIDIA GPU ComputingToolkit\CUDA\v8.0\extras\visual_studio_integration\MSBuildExtensions
所有的文件复制到
C:\ProgramFiles (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations(注意:我的是VS2015,所以是v140,不同版本加到不同的文件夹下)
文件夹下面即可。
不出意外,现在就能正确打开darknet.project。然后把include文件、lib文件的路径和lib文件名添加到VS的属性中即可
(注:上图来源于网络http://blog.csdn.net/qq_14845119/article/details/53612362,偷个懒~~)
然后把lib文件夹下的lib文件名添加到连接器的输入里面的附加依赖项,我的如下:
pthreadVC2.lib
cublas.lib
curand.lib
cudart.lib
opencv_core2413.lib
opencv_highgui2413.lib
opencv_imgproc2413.lib
注意:一定要添加自己对应的版本,不要复制别人的哈~
环境配好了之后,就可以直接点击重新生成文件,正常情况下不会出错,有出错发到评论大家一起看看.这样就会生成darknet.exe文件。你可以去看一下main函数,在darknet.c文件里,根据不同的输入参数,进入不同函数,执行不同的功能。
3. 开始训练
先准备数据,我是新手,先使用VOC的数据试试水,如果用其他数据(自己的数据或者kitti数据等等),可以先转化为voc数据格式的,GitHub上有很多源码教程,这里不谈了。
根据源代码里面的scripts文件夹下的voc_label.py文件把voc数据格式稍作变换,使yolo网络能使用。
你把准备好的数据放到scripts文件夹下,一定做成和VOC一样的格式。包含以下几个文件夹Annotations,ImageSets,JPEFImages,SegmentationClass,SegmentationObject;(不做分割,后面两个应该可以不用)Annotations中是放着所有图片的标记信息,以xml为后缀名.以分类检测的数据为例,打开ImageSets中的layout,
根据实际情况修改voc_label.py文件,主要是设置sets和classes,以及数据的目录和输出目录,我的是设置为3类只检测车(car、bus)和人(person)。
在cmd窗口执行python voc_label.py后,会生成label文件夹里面是每个图片的groundtruth 的框坐标信息txt格式,还会在scripts目录生成2007_train.txt文件。图片的绝对路径。
根据自己的需求配置网络结构文件.cfg文件
darknet网络文件,很多参数都可以改,像batch、learningrate等等,根据实际训练情况调参。
必改的地方:最后一层filters的个数,根据classes个数决定,将它改成「(你的类别数+5)×5」。更准确地说,「this depends on the num and coords, i.e. equal to (classes +coords + 1)*num」。
Classes为你的类别数。
还有就是voc.names文件,是object的种类名称,就写为你自己的classes的名称就好了
例如我的是
bus
car
person
最后一个是voc.data文件,修改后的内容如下
classes= 3
train =D:\HBL_data\object_detect\darknet-master\scripts/2007_train.txt
//valid = /home/pjreddie/data/voc/2007_test.txt
names = data/voc-3.names
backup =D:\HBL_data\object_detect\darknet-master/backup/
就是种类数,train数据集的文件位置,前面voc_label.py生成的txt文件,我没有用valid,注释掉,names是自己修改后的voc.names路径,backup是训练好的权重文件,前1000轮是每100轮保存一次权重文件,之后是每1000轮保存一次文件。
万事俱备,只欠东风了。
下载预训练权重(http://pjreddie.com/media/files/darknet19_448.conv.23)
新建一个cmd文件写上内容如下,直接放到cmd窗口也可以
darknet.exe detector train data/voc-3.data cfg/yolo-3.cfg pre_model/ darknet19_448.conv.23-gpus 0,1
含义如下:程序名 模块名称 动作(train 还是test等) data配置文件 cfg配置文件权重文件 –gpus (使用的gpu编号,有多个才需要写,0,1,2,3之类的,我这里是2个)
然后就出现了下面的截图:
从上图看到,gpu的显存只是用了3G多,但是gpu的利用率(指计算能力)却到了99%,说明这个网络的计算量很大呀,虽然显存占用不大。
我的训练过程还没结束,从下午3点到此时晚上8点,5个小时,训练了14000轮,我给的maxbatch是25000,还有10000多轮呢。
过几天用kitti的数据集再做些实验,十几个G的数据已经下载完备,哈哈。
参考文献
[1]https://pjreddie.com/darknet/yolo/ 官网提供了很多训练好的模型,很良心
[2]https://arxiv.org/abs/1612.08242 yolo v2论文原文
[3] https://github.com/pjreddie/darknet github源码
[4]还有很多优秀的博客,感谢他们的贡献
好了,本篇就到此结束,废话有点多了~~有问题欢迎底下评论交流
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:目标检测之三 Win10 +VS2015+双gtx Titan X使用YOLO v2训练VOC数据 - Python技术站