Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置

2.CUDA+cuDNN+Darknet框架配置

第一次尝试了博主基于Keras/TensorFlow框架的YOLOv3模型训练方法,该方法操作起来比较便捷,也容易上手,但是用CPU训练模型,我有2000张图片,训练时粗略计算了一下需要750+h的时间,整整31个昼夜啊!!!万一最后模型不理想,那岂不是要搞好几个月。所以后面果断放弃,如果训练样本少的小伙伴可以尝试此法,的确很便捷。

第二次基于Darknet框架使用GPU训练模型,仅需要66个小时,速度快得让人睡着都能笑醒。由于大多数教程都是针对Linux系统,所以看了很多博文,都无法正确完成配置,所以本文将详细讲解Windows系统的darknet框架配置。

电脑环境:
Windows 10 64位(查看方式:此电脑——右击选择属性)
NVIDIA GeForce GT 730 (查看方式:控制面板——设备管理器——显示适配器)
GT 730 支持CUDA的最大版本:CUDA 10.1

很多博客说需要下载与 GT 730 支持的版本一直的CUDA和cuDNN,即10.1,然而我尝试了2次均会出错,所以最终的搭配为CUDA 9.0+cuDNN7.1+ tensorflow-gpu1.5 + python3.4

一、文件下载准备

(1)下载安装CUDA 9.0和cuDNN 7.1

CUDA及CUDNN的安装请参考下面大佬博文,安装时不要轻易改动路径,这种情况下一般在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0
详细步骤:CUDA9.0 + cuDNN7.1 + tensorflow-gpu1.5 + python3.6

(2)下载Visual Studio 2015

切记,一定是2015版,我尝试过其他版本会出错。下载地址为:VS2015下载,下载完后安装。

(3)下载opencv3.4

网址为:OpenCV下载,下载完后打开该文件,可以把此文件放在你想放的位置,记住路径

(4) 下载darknet源码并解压缩

下载地址:DarkNet下载。下载完后解压缩并放到你想要放的位置上,解压缩后的文件应为darknet-master。如下图所示:

Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
二、文件配置

此处主要参考这篇博文,但一些地方会报错,所以加入了自己的解决方案。

(1)打开build文件夹下的darknet文件夹,并用记事本打开darknet.vcxproj,用搜索功能查找CUDA (这里就是CUDA的版本号了),并修改为自己CUDA的版本号,我的CUDA版本是9.0,所以修改为CUDA 9.0(一共有两处需要修改的)并保存,如图:

Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置

确认C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations文件夹下面是否有下面这几个文件(因为我的是CUDA9.0,所以文件名中带有9.0,也就是说自己CUDA的版本号),

如果有,恭喜你,这一步又完成了.如果没有,则把CUDA安装路径下面的(我的路径是C:\Program Files\NVIDIA GPU\ComputingToolkit\CUDA\v9.0\extras\visual_studio_integration\MSBuildExtensions)以上4个文件全部拷贝到C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\V140\BuildCustomizations中。

(2)打开build文件夹下的darknet文件夹,并用vs2015打开darknet.sln,如果打开后显示“需要安装xxx才能打开该项目”,按提示步骤安装,完了重新打开darknet.sln文件。

此时如果还会出现darknet加载不成功并报如下错误,原因要么是该文件夹下没有该文件要么是darknet.vcxproj中的CUDA版本号没改成自己CUDA的版本号,查看上两步当中有哪一步漏了即可。

Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
(3)接下来将之前安装的Opencv3.4的库路径添加到VS工程中,具体操作可参考下面这个链接。然后在VS中进行如下操作:
Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
出现下面结果则说明运行成功。

Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
(4)如果出现下述错误:
Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
或者:
Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
解决方法:还需要配置第三方包pthreadVC2,以下添加路径的操作同上面添加opencv的操作一样(https://note.youdao.com/share/?id=04fb326760a726f23cbd9ae8ff6b1fc6&type=note#/),需要在包含目录中添加D:\python3\darknet-master-20181002\3rdparty\include(需要改成自己对应的目录),在库目录中添加D:\python3\darknet-master-20181002\3rdparty\lib\x64(需要改成自己对应的目录),在链接器输入中添加pthreadVC2.lib(需要改成自己对应的目录),然后点击生成选项中的生成darknet。

按照大佬的博文操作后,我没有出现上述两种错误,而是提示:

Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
参考该链接,解决办法为:

① 打开darknet.vcxproj文件,我的地址是(D:\darknet-master\build\darknet)删除“compute_52,sm_52”,这是删除后的截图:
Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
②在VS2015中修改属性-CUDA C/C++里面CodeGeneration后面的“compute_52,sm_52”也删除就可以了。
Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
然后继续生成,发现成功了!!!打开build下的darknet下的x64会生成一个darknet.exe文件。

Windows10+Darknet+YOLOv3训练自己数据——2.CUDA+cuDNN+Darknet框架配置
框架配置至此完全结束。下一篇文章测试别人训练好的模型。