最近两天在看yolo项目,所以想着把作者的项目copy一下运行看一下效果,谁知道一不小心,陷入坑中无法自拔。真实感叹作者的厉害之处。
同时也记录了自己Windows10+YOLOV3+VisualStudio2017最新版本超详细走坑成功过程。
PS:(2019/9/28更新)根据博客朋友的反馈,我这里再把常见报错问题总结一下:
1.编译失败,项目成功0个,失败1个。这种情况较多: 错误 MSB3721 命令,CUDA和CUDNN是否正确安装,右键项目属性页,重新查找一下项目属性页中是否有哪些路径没有配置好。
2.CUDA:ERROR:电脑的NVIDIA显卡驱动,CUDA和cudnn版本一致,最好都是最新版,不然到最后执行检测会的时候错误(CUDA:ERROR)。以及检查系统环境变量C:\Program Files\NVIDIA Corporation\NVSMI等等。
3.CUDA Error: out of memory 。电脑独立显卡显存不足!(我在正常测试时NVIDIA1050TI ,4G独立显卡没有问题,再小可能就会出现显存不足情况。)
4.CUDNN_ERROR:CUDNN_STATUS_BAD_PAPRM:此时检查一下电脑CUDA状态是否被其他程序占用,可以重启一下电脑再试一下即可。
5.训练CIFAR-10等其他数据集数据,作者给出了教程:https://pjreddie.com/darknet/train-cifar/
若显卡内存不足可在darknet\build\darknet\x64\cfg\cifar.cfg。中文本方式打开修改并减小训练时bactch的大小。测试时我看了一下yolo.cfg默认就是batch=1,只要显存足够4G应该没问题。
YOLO项目官网:
https://pjreddie.com/darknet/
YOLO检测darknet安装教程
https://pjreddie.com/darknet/install/
作者完整项目:
https://github.com/AlexeyAB/darknet
首先先总结一下我踩过的坑:
1,官网上的安装教程入门是在Linux and Mac ,所以windows的用户还要自己编译,作者在github上也给出了具体的步骤,但是自己弄的时候还是感觉Error漫天飞。
作者说了:
2,VMware虚拟机安装Ubuntu貌似行不通,如果是CPU版本的话,我试过是可以,但是GPU版本就不行了,我查了一下因为虚拟机的显卡驱动都是虚拟的,不能直接调用自己主机电脑的硬件,所以就放弃了。
3,ubuntu的cpu版本比较简单,按照说明步骤执行就行了
作者项目地址:https://github.com/pjreddie/darknet
终端命令执行:
git clone https://github.com/pjreddie/darknet.git
cd darknet
make
接着下载训练好的权重
#wget命令获取预训练的参数权重
wget https://pjreddie.com/media/files/yolov3.weights
#可能有点大,大概200多MB
#当前文件下直接执行
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
然后就能看见效果图了。至于GPU版本由于是虚拟机没法用,所以就选择了windows。
![](https://i-blog.csdnimg.cn/blog_migrate/c27e01d308d43f6067f0e42a2d603c4d.jpeg)
3,windows10下编译遇到好多问题,主要详细记录一下:
本人电脑配置与环境:
①Windows10
②VisualStudio2017community
③Opencv3.4版本
④cuda10.1version
⑤cudnn-10.1-windows10-x64-v7.5.0.56
除了opencv不是最新版,其余的配置应该都是最新版本。
- 注意电脑的NVIDIA显卡驱动,CUDA和cudnn版本一致,最好都是最新版,不然到最后执行检测会的时候错误(CUDA:ERROR)。
- 至于为什么不要用最新版本的opencv,首先在作者的github项目中有说明书:
如用最新版本的(>=opencv4.0)会造成许多问题。其他版本注意路径配置。
![](https://i-blog.csdnimg.cn/blog_migrate/13351ab1940dc3c62152ce510f1847c0.png)
因为遇到的BUG问题太多,不过基本上都形似:
①错误 MSB3721 命令““C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin\nvcc.exe” -gencode=arch=compute_30,code=“sm_30,compute_30” -gencode=arch=compute_75,code=“sm_75,compute_75” --use-local-env -ccbin “E:\VisualStudio\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64” -x cu -IC:\opencv_3.0\opencv\build\include -I…\include -I…\3rdparty\include -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include" -I\include -I\include -I"F:\githubCode\projectGit\vcpkg\installed\x64-windows\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include" --keep-dir x64\Release -maxrregcount=0 --machine 64 --compile -cudart static -DCUDNN_HALF -DOPENCV -DCUDNN -D_TIMESPEC_DEFINED -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_CRT_RAND_S -DGPU -DWIN32 -DNDEBUG -D_CONSOLE -D_LIB -D_MBCS -Xcompiler "/EHsc /W3 /nologo /O2 /Fdx64\Release\vc141.pdb /FS /Zi /MD " -o x64\Release\convolutional_kernels.cu.obj “F:\githubCode\projectGit\darknet\src\convolutional_kernels.cu””已退出,返回代码为 2。 darknet E:\VisualStudio\Common7\IDE\VC\VCTargets\BuildCustomizations\CUDA 10.1.targets 757
这里我后面把opencv4.0换成了opencv3.4,然后核对了cuda和opencv3.4等文件的系统环境变量和darknet.sln工程解决方案配置文件中的路径一致之后,再重新按照系统环境变量中的路径配置一遍。
②错误 C1083 无法打开包括文件: “opencv2/highgui/highgui_c.h”: No such file or directory darknet f:\githubcode\projectgit\darknet\src\image.h 11
诸如类似的这个错误一般是需要检查一下自己其实就是工程项目属性设置文件的路径,我的这个是opencv2/highgui/highgui_c.h的路径错误,这里我发现我在工程属性文件darknet.vcxproj以notepad++中文本形式打开,然后将对应的一些版本号与路径设置完毕即可;实际上经过我查阅一番发现这个darknet.vcxproj,opencv的环境路径和其他一些版本更改之类的,直接为darknet.sln解决方案在VisualStudio中设置对应的信息就行,具体整个配置流程我每一步争取都记录下来。
下面是我的详细安装过程:
一,为电脑安装最新版本的cuda和cudnn
cuda安装地址:https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal
cudnn安装地址:https://developer.nvidia.com/cudnn
其中cudnn下载安装包需要注册一个账号,过程是免费的。
![](https://i-blog.csdnimg.cn/blog_migrate/70c14f27ebc53bc547c09a0f3c084025.png)
两个文件下载完成之后是这样的:
1,将cuda运行安装,建议默认路径,因为我试过自己修改路径,最后遇到了两个问题:
-
①临时解压路径:
-
②安装路径:
-
(应该是CUDA10,因为我已经安装完了,所以在网上找了一个图来表示说明)
![](https://i-blog.csdnimg.cn/blog_migrate/8b162c7d12908520daf0a50c069ca37d.png)
所以会遇到这两个路径如果设置为同一个的话,安装时会自动删除那个解压缩的Temp所在的文件夹,最后会发现CUDA安装的文件又没了!所以建议默认路径原因就是怕这两个路径设置为同一个了。
2,对于cudnn直接将其解开压缩包,然后需要将以下bin,include,lib文件复制粘贴到cuda的文件夹下C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1:
3,配置cuda的环境变量
4,最后测试cuda是否配置成功:
打开CMD执行:
nvcc -V
即可看到cuda的信息
二,如果电脑opencv不是opencv3.4之前的版本,可以在opencv3.4链接下载:
https://opencv.org/opencv-3-4.html
接着只需要将其解压缩,后配置环境变量就行了。
我自己的配置如下:
三,对YOLOV3中的darknet项目文件进行编译
准备工作已经做好:win10+cuda+cudnn+visualstudio2017community+opencv3.4
1,首先cd到你的项目想保存的文件路径后:
使用git clone https://github.com/AlexeyAB/darknet
下载的YOLO原生版本文件应该是这样的:
![](https://i-blog.csdnimg.cn/blog_migrate/51795dd786c6fea5b5d107bd8787d8f0.png)
2,进入build>darknet文件中,主要有用的文件
![](https://i-blog.csdnimg.cn/blog_migrate/aa161f05ef66e9362df0f94096ccc014.png)
注意此时先进入x64文件夹下>将opencv3.4中的两个dll文件:opencv_ffmpeg340_64.dll和opencv_world340.dll复制到该文件夹下,不然后面运行会报错找不到dll。
关于该问题,作者也给了说明:
意思是最后会生成一个darknet.exe文件,该文件执行时需要依赖上面两个dll。
至于这两个文件的路径,我自己的是在opencv的安装路径中:
选择以上两个就行(顺便说一下,340后面带有小d的貌似是debug版本;不带d的是release版本)
因为最后需要release版本的所以就只用选上面红框的复制到darknet>×64文件夹下就行。
3,来到最关键的一步了,前面工作一个都不能少,否则这接下来会BUG和ERROR漫天飞。
用visualstudio2017打开darknet.sln文件进行生成darkent.exe文件
![](https://i-blog.csdnimg.cn/blog_migrate/31514088a113b3cf9ac6fbb707892860.png)
①右键对darknet.sln进行配置,注意上面应选为release和x64。
![](https://i-blog.csdnimg.cn/blog_migrate/fee1c124e890de5f2ae1aea5060c6af4.png)
接下来一共几个关键步骤:
1:注意Windows SDK版本,平台工具集选择自己的VisualStudio2017
![](https://i-blog.csdnimg.cn/blog_migrate/74ad423241a39025a12a445357630d37.png)
- 注意:如果后面报错说请选择对应的VisualStudio2015版本,这里需要去darknet.vcxproj中用文本形式打开,并将红框中的内容都替换为v141即可(我的是已经替换过了):
![](https://i-blog.csdnimg.cn/blog_migrate/143897affdf96e9ea1dc9e909e45c13e.png)
2,修改包含目录和库目录,即添加opencv3.4的包含目录和库目录(按照自己的opencv3.4的路径来进行添加):
![](https://i-blog.csdnimg.cn/blog_migrate/350518b9fd5012dd202d300a61de4f76.png)
![](https://i-blog.csdnimg.cn/blog_migrate/079b2b0d179aadf18b6cef4042eab8ac.png)
3,附加依赖项
![](https://i-blog.csdnimg.cn/blog_migrate/481efd28fe3839b52e1b4c278e03d43c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fbf39874699495fa53e2d14182922f28.png)
4,最后已经完成对任务的配置,右键生成或者重新生成就行了。
结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/7b1428ae773cb3fdf5d6969cc135b320.png)
前面都成功不出意外的话,在文件夹下多出一个darknet.exe文件就是想要的结果:
![](https://i-blog.csdnimg.cn/blog_migrate/7ddd2c5f5cbe0d5799e4c7abce3305e2.png)
在测试效果之前还需要添加以下官网上下载训练好的权重:
#wget命令获取预训练的参数权重或者直接打开链接就能下载。
wget https://pjreddie.com/media/files/yolov3.weights
这里我把它放在了一个起名为weights的文件下面:
5,最后的最后,执行命令查看效果:
打开cmd命令提示符,切换到F:\githubCode\projectGit\darknet\build\darknet\x64
即生成的darknet.exe文件所在文件夹下
- 检测图片效果:
执行命令(一句话):
即利用darknet.exe执行检测效果,加载权重之后,对.\data\文件夹下的dog.jpg进行检测
darknet.exe detector test data\coco.data yolov3.cfg .\weights\yolov3.weights .\data\dog.jpg
大功告成!!!
然后就会看到效果了:
![](https://i-blog.csdnimg.cn/blog_migrate/b0b9e16d210b313b6fad4649406ca042.png)
- 检测摄像头命令:
- 也是在darknet.exe所在文件下执行
darknet.exe detector demo data\coco.data yolov3.cfg weights\yolov3.weights
- 或者指定摄像头设备号0:
darknet.exe detector demo data\coco.data cfg\yolov3.cfg weights\yolov3.weights -c 0
- 注意:检测前注意查看设备管理器自己的电脑摄像头是否正常工作,然后即可看到检测到自己电脑摄像头的检测效果。
- 检测视频文件:
- 我在data文件下放了一个视频文件即:.\data\TownCentre.avi
- 执行命令:
darknet.exe detector demo data\coco.data yolov3.cfg .\weights\yolov3.weights .\data\TownCentre.avi
- 通常需要YOLO保存检测后的视频文件时可以用下面命令:
- 即增加了置信阈值选项0.25,和输出视频文件路径与名称
darknet.exe detector demo data\coco.data yolov3.cfg .\weights\yolov3.weights .\data\TownCentre.avi
-thresh 0.25 -out_filename .\data\test_result.avi
以及我看到在YOLO的GitHub说明中作者给出了利用微软的lib安装工具vcpkg对YOLO编译的教程,试了以下以后也遇到了许多问题,有待后续研究。
参考博客:
YOLO配置:https://blog.csdn.net/amusi1994/article/details/80261735
YOLOV3配置opencv:https://blog.csdn.net/leonary_jy/article/details/80293205
解决VC运行opencv后提示缺少opencv_world310d.dll问题