![1b41a46e8641ff755ee9df6eda225695.png](https://img-blog.csdnimg.cn/img_convert/1b41a46e8641ff755ee9df6eda225695.png)
如果想训练自己的数据集,可以参考下面的链接
JustDoIT:YOLO3 darknet训练自己的数据zhuanlan.zhihu.comyolo官网
YOLO: Real-Time Object Detectionpjreddie.com![e374ebb56ca5dabe9fd157f9c5407c41.png](https://img-blog.csdnimg.cn/img_convert/e374ebb56ca5dabe9fd157f9c5407c41.png)
安装darknet cpu版本的请点下面这个链接
JustDoIT:windows下darknet之YOLO3安装与使用zhuanlan.zhihu.com![e7e0bd7e9caf06edc2e57decad9fccf0.png](https://img-blog.csdnimg.cn/img_convert/e7e0bd7e9caf06edc2e57decad9fccf0.png)
实际上,darknet有两个版本,一个是下面这个版本,
pjreddie/darknetgithub.com![2c8006daccc114badab070bc7dd35164.png](https://img-blog.csdnimg.cn/img_convert/2c8006daccc114badab070bc7dd35164.png)
但貌似这个版本对windows“不太友好”,我只成功安装了cpu的(其实在windows环境下安装也不太容易,可参照文章开始给出的链接),gpu版本的一直没安装成功,但永不言弃,一直尝试,时间滴答地过去了,无奈,最后还是放弃了转而选择下面这个“友好”的版本,
https://github.com/AlexeyAB/darknetgithub.com事实上这个github上面已经有比较全面的安装教程,但我在安装的过程中还是遇到了些问题,现把我的安装过程记录如下,希望能帮到各位朋友。如果在安装过程中遇到问题,可以查看文章最后的常见问题,也许能解决遇到的问题。
1.安装CUDA及CUDNN(当然,如果没有独立显卡,还是去安装cpu版本的哈哈)
关于CUDA及CUDNN的安装请参考下面这个链接里面的第3个步骤,要记住安装路径(我的路径是C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.0)
JustDoIT:windows tensorflow-gpu的安装zhuanlan.zhihu.com2.下载microsoft vs2015(不是2010或者2017,下载2015为上策)
当然,如果电脑已经安装了vs2015,则直接到第3步,如果没有,则可以在microsoft官方自行下载并参考网上的教程进行安装
3.下载opencv3.4.0(3.40为上策,版本低一点也可以,但高了真不行)
下载链接如下
Download OpenCV from SourceForge.netsourceforge.net下载完后打开该文件,可以把此文件放在你想放的位置,记住路径就行(我的路径是C:opencv)
4.下载darknet源码并解压缩
下载链接如下
https://github.com/AlexeyAB/darknetgithub.com下载完后解压缩并放到你想要放的位置上(我的路径是D:python3darknet-master-20181002),解压缩后的文件应为darknet-master,但为了和我原有的darknet-master做区分,故加上今天的安装日期(对的,国庆第二天我还在奋斗)。打开darknet-master-20181002,文件结构如下图
![7aecfc15e2c46918cd5426203eba83cc.png](https://img-blog.csdnimg.cn/img_convert/7aecfc15e2c46918cd5426203eba83cc.png)
真正的安装操作开始了
- 打开build文件夹下的darknet文件夹,并用编辑器(推荐sublime,太好用了,当然,其他的也可以)打开darknet.vcxproj,用搜索功能查找CUDA (这里就是CUDA的版本号了),并修改为自己CUDA的版本号,我的CUDA版本是9.0,所以修改为CUDA 9.0(一共有两处需要修改的)并保存,如图
![55a22e521b1cea4dd8a0eac1062ef0f7.png](https://img-blog.csdnimg.cn/img_convert/55a22e521b1cea4dd8a0eac1062ef0f7.png)
![924ea8f3361457ac201512eddc2d5deb.png](https://img-blog.csdnimg.cn/img_convert/924ea8f3361457ac201512eddc2d5deb.png)
- 确认C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V140BuildCustomizations文件夹下面是否有下面这几个文件(因为我的是CUDA9.0,所以文件名中带有9.0,也就是说自己CUDA的版本号),
![29cedd8ef9a757fb4f562d1eae14ac14.png](https://img-blog.csdnimg.cn/img_convert/29cedd8ef9a757fb4f562d1eae14ac14.png)
如果有,恭喜你,这一步又完成了,如果没有,则把CUDA安装路径下面的(我的路径是C:Program FilesNVIDIA GPU Computing ToolkitCUDAv9.0extrasvisual_studio_integrationMSBuildExtensions)以上4个文件全部拷贝到C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V140BuildCustomizations中
- 打开build文件夹下的darknet文件夹,并用vs2015打开darknet.sln,如果打开后显示darknet加载不成功并报如下的错误(未找到导入的项目“C:Program Files (x86)MSBuildMicrosoft.Cppv4.0v110BuildCustomizationsCUDA 9.0.props”。请确认 声明中的路径正确,且磁盘上存在该文件。)
![5577ce4f3a2b4c3417f11c33d0c775df.png](https://img-blog.csdnimg.cn/img_convert/5577ce4f3a2b4c3417f11c33d0c775df.png)
这个错误出现的原因要么是该文件夹下没有该文件要么是darknet.vcxproj中的CUDA版本号没改成自己CUDA的版本号,那么查看上两步当中有哪一步漏了即可。
加载成功后,接下来将之前安装的Opencv3.4的库路径添加到VS工程中,具体操作可参考下面这个链接
https://note.youdao.com/share/?id=04fb326760a726f23cbd9ae8ff6b1fc6&type=note#/note.youdao.com然后在VS中进行如下图的设置
![80ab3271297a6f6364c63fbb776454b1.png](https://img-blog.csdnimg.cn/img_convert/80ab3271297a6f6364c63fbb776454b1.png)
最后点击生成选项中的生成darknet
![387d8bb88486b8e6cdb0c36ade11040c.png](https://img-blog.csdnimg.cn/img_convert/387d8bb88486b8e6cdb0c36ade11040c.png)
出现下面的信息则说明编译成功
![aeaeb38f13a7dbe292450092551d9116.png](https://img-blog.csdnimg.cn/img_convert/aeaeb38f13a7dbe292450092551d9116.png)
如果出现下面两张图片的错误(感谢知友提供的两张图片),则还需要配置第三方包pthreadVC2,以下添加路径的操作同上面添加opencv的操作一样(https://note.youdao.com/share/?id=04fb326760a726f23cbd9ae8ff6b1fc6&type=note#/),需要在包含目录中添加D:python3darknet-master-201810023rdpartyinclude(需要改成自己对应的目录),在库目录中添加D:python3darknet-master-201810023rdpartylibx64(需要改成自己对应的目录),在链接器输入中添加pthreadVC2.lib(需要改成自己对应的目录),然后点击生成选项中的生成darknet
![8566bfdc89d9a360fe5898ab9430ec73.png](https://img-blog.csdnimg.cn/img_convert/8566bfdc89d9a360fe5898ab9430ec73.png)
![e6f276b1d18d5bd569825e75291e4007.png](https://img-blog.csdnimg.cn/img_convert/e6f276b1d18d5bd569825e75291e4007.png)
最后打开build下的darknet下的x64会有一个darknet.exe文件,
![1af307a363e098f0a5cb02cfce9351e7.png](https://img-blog.csdnimg.cn/img_convert/1af307a363e098f0a5cb02cfce9351e7.png)
至此,darknet的gpu版本已经安装完了,不过且慢,实践是检验真理的唯一标准,让我们测试一下
5.测试darknet
- 下载yolov3.weights并放到同darknet.exe的目录下(我的路径是D:python3darknet-master-20181002builddarknetx64)
- 打开命令行并切换到darknet.exe所在的目录下,运行下面的命令
darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
![604f2927fe07120bc7bac07418312643.png](https://img-blog.csdnimg.cn/img_convert/604f2927fe07120bc7bac07418312643.png)
运行完上述命令后会出现这样的结果
![db2ad7371766a423f39d92dab712eee7.png](https://img-blog.csdnimg.cn/img_convert/db2ad7371766a423f39d92dab712eee7.png)
和一张效果图
![6b25d66b7d8a78160ed0fb3ec6c286c4.png](https://img-blog.csdnimg.cn/img_convert/6b25d66b7d8a78160ed0fb3ec6c286c4.png)
6.用python代码大批量检测图片
当然,还有些朋友想用python代码来大批量检测图片,没问题的,我们接着弄。
darknet.exe所在目录下有个darknet.py文件,想必就是用来检测图片的python代码,好极了,那运行一下这个文件。坐等结果,然后等来的却是下面这样的报错结果
Traceback (most recent call last):
File "D:python3darknet-master-20181002builddarknetx64darknet.py", line 109, in <module>
raise ValueError("NoDLL")
ValueError: NoDLL
看看代码,注意到代码开头有这样的几句话
Python 3 wrapper for identifying objects in images
Requires DLL compilation
Both the GPU and no-GPU version should be compiled; the no-GPU version should be renamed "yolo_cpp_dll_nogpu.dll".
嗯,需要编译一个DLL。当然了,我们可以编译cpu的也可以编译gpu的,下面我是编译gpu版本的。
darknet文件下有一个yolo_cpp_dll.sln文件,同样的需要修改对应的yolo_cpp_dll.vcxproj文件,修改yolo_cpp_dll.vcxproj的过程和编译yolo_cpp_dll.sln过程和编译darknet.sln的一样,参考上面第4点就可以了,编译完成后,我们可以看到darknet.exe同目录下生成了yolo_cpp_dll.dll文件。
最后,我们再次运行darknet.py文件,稳稳地出现了我们想要的结果。
![d9fe6ee6be02a641d474271def5d22cf.png](https://img-blog.csdnimg.cn/img_convert/d9fe6ee6be02a641d474271def5d22cf.png)
当然了,这只是检测一张图片,如果检测多张只要对代码做点小修改就可以了。
7 常见问题
- 生成darknet过程中报MSB372的错
可参见评论区的解决办法,删除一些文件试试
如果本文对你有用,可以点个赞,如果觉得文章还不错,可以尝试关注我