Summary: YOLOv3—Windows配置
Author: Amusi
Date: 2018-04-05
YOLOv3翻译
yolo官网
目录
硬件环境
安装教程
下载darknet
修改darknet.vcxproj
修改darknet.sln
打开darknet.sln
准备
测试
YOLOv3图像目标检测
YOLOv3视频目标检测
YOLOv2视频目标检测
YOLOv2-Tiny-VOC视频目标检测
安装Yolo_mark
参考
系统环境
- Win10
- Visual Studio 2013
- CUDA 8.0
- cudnn 5.1
- OpenCV3.3.1()和OpenCV2.4.13(x64)
安装教程
下载darknet
打开cmd命令提示符,输入下述命令,下载AlexeyAB/darknet(假设你已经安装好git环境)
- git clone https://github.com/AlexeyAB/darknet
然后根据下图进行操作
修改darknet.vcxproj
打开darknet/build/darknet/darknet.vcxproj,将14全部替换为12
打开darknet.vcxproj,将CUDA 9.1全部替换为CUDA 8.0
修改OpenCV路径,其中x64版本最重要,至于x86版本属于可选。因为建议使用x64版本
对于x64版本
将C:\opencv_3.0\opencv\build\include替换为D:\OpenCV\OpenCV3.3.1\OpenCV3.3.1_Contrib_VS2013_x64\install\include
对于x86版本
将C:\opencv_2.4.9\opencv\build\include替换为D:\OpenCV\OpenCV2.4.9\OpenCV2.4.9_VS2013\install\include
将C:\opencv_2.4.9\opencv\build\x86\vc12\lib替换为:D:\OpenCV\OpenCV2.4.9\OpenCV2.4.9_VS2013\install\x86\vc12\lib
将compute_52,sm_52替换为compute_50,sm_50(不知道可行不可行,不知道必要不必要)
改好后,部分代码如下
修改darknet.sln
将Visual Studio 2015的属性修改为Visual Studio 2013(当前VS版本)的属性
修改为:
打开darknet.sln
以防止万一,加上OpenCV3.3.1的属性表
将当前解决方案设置为Release x64
配置好OpenCV路径后,随便打开几个.c文件快速浏览一下
编译darknet工程
编译过程中,你会发现此时可能出现下述问题,如果没有出现,那就基本直接编译成功。
如果发生问题,可以参考下述解决方案:
注:我是自己用CMake和Visual Studio 2013重新编译的OpenCV,所以.lib和.dll命名与官方提供的动态链接库名称不一样,如果你直接用官方编译好的库,那么可以省很多事。
查找world关键字,发现在detector.c中,有
将#ifndef CV_VERSION_EPOCH到#endif注释掉,因为我已经添加好了属性表,所以不用在程序中显式声明使用哪个lib。这里其实取决你的OpenCV是如何配置的,如果是使用官方提供编译好的OpenCV,那么就不需要改这些内容了;如果是自己用CMake编译的,那么请参考刚刚描述的内容。
然后重新编译
接下来,就是见证奇迹的时刻:
上述是x64版本的darknet配置过程,如果你想配置x86版本,其实步骤类似,只需要将属性表替换即可。
这里可以看一下我是如何继续配置x86版本的。
同理,添加x86版本的OpenCV属性表,我这里使用的是OpenCV2.4.9 x86,
并将当前工程的状态切换成Release x86:
然后编译当前x86工程
接下来,就是再次见证奇迹的时刻
但...还是遇到问题了
原来我电脑里没有x86版的cublas.lib,这个就尴尬了,但这个不重要,其实我已经配置好了x64版本,这个x86只是尝试。如果你依旧坚持,那么可以下载x86版本的cublas.lib,或者你电脑里本身就有,这就更美滋滋了。
再看一下darknet\build\darknet\x64文件夹,哇塞,那个darknet.exe就是你梦寐以求的!!!
准备
下载yolov3.weights
链接1(百度云):链接:https://pan.baidu.com/s/1OsuaURd2jjA9_fX50w651g 密码:chmq
连接2(官网):https://pjreddie.com/media/files/yolov3.weights
测试
打开cmd命令提示符,切换到F:\Projects\Object Detection\YOLO\Darknet\Linux_Windows\darknet\build\darknet\x64路径下
YOLOv3图像目标检测
输入:
- darknet.exe detector test data\coco.data yolov3.cfg .\weights\yolov3.weights
F:\Projects\Object Detection\YOLO\Darknet\Linux_Windows\darknet\build\darknet\x64\data\dog.jpg
F:\Projects\Object Detection\YOLO\Darknet\Linux_Windows\darknet\build\darknet\x64\data\giraffe.jpg
上述是针对多幅图像的检测
YOLOv3视频目标检测
接下来,介绍一下使用网络摄像头来检测的命令
- darknet.exe detector demo data\coco.data yolov3.cfg weights\yolov3.weights
- darknet.exe detector demo data\coco.data cfg\yolov3.cfg weights\yolov3.weights -c 0
上述两种命令都不能正常运行,出现下述问题:
上github查询该问题,发现有一些人和我一样,使用网络摄像头检测时,出现问题:
https://github.com/AlexeyAB/darknet/issues/551
对当前问题.exe进行调试,发现断点调到http_stream.cpp中的第217行的cpp_cap.isOpenCV()处(和上述github问题吻合)。其实就是get_webcam_frame函数的形参传入值有问题!
仔细查看变量状态,此时cap有问题,居然是NULL???
那么怎么修改呢???
问题:摄像头亮着,但程序崩溃
到底怎么解决呢?这里我们参考下述方法,使用OpenCV2.4.13
我们将darknet文件夹复制一份,重命名为darknet-opencv2
此时,尝试将已添加的OpenCV3.3.1属性表删除,添加OpenCV2.4.13(x64)版本的属性表;
再将darknet工程属性里的OpenCV include和lib路径进行修改
再对源码进行编译
然后对打开darknet解决方案,对工程进行重新编译—>生成。
出现下述情况,即表示编译成功!
接下来,打开cmd命令提示符,切换至darknet-opencv2\build\darknet\x64路径下,
输入使用网络摄像头来检测的命令
- darknet.exe detector demo data\coco.data yolov3.cfg weights\yolov3.weights
- darknet.exe detector demo data\coco.data cfg\yolov3.cfg weights\yolov3.weights -c 0
YOLOv2视频目标检测
- .\darknet.exe detector demo cfg\coco.data cfg\yolov2.cfg weights\yolov2.weights
注:奇怪,为什么YOLOv2的FPS比YOLOv3的还高
YOLOv2-Tiny-VOC视频目标检测
- .\darknet.exe detector demo cfg\voc.data cfg\yolov2-tiny-voc.cfg weights\yolov2-tiny-voc.weights
注:FPS虽然很高,但这检测率太差了...
安装Yolo_mark
https://github.com/AlexeyAB/Yolo_mark
- git clone https://github.com/AlexeyAB/Yolo_mark
打开yolo_mark.sln,将环境设置为v120
(可选)删掉不必要的opencv环境路径
添加OpenCV3的属性表
将main.cpp下述内容修改:
但编译时居然还会出错,但机智的Amusi直接对yolo_mark的Release x64进行了OpenCV重新配置
再次编译
进入Yolo_mark\x64\Release文件夹下,双击yolo_mark.cmd,即可看见
参考
[1]darnet官网(只支持Linux):
https://github.com/pjreddie/darknet
[2]yolo官网:
https://pjreddie.com/darknet/yolo/
[3]【参考】darnet fork版(支持Linux和Windows):
https://github.com/AlexeyAB/darknet
[4]知乎YOLOv3:
https://www.zhihu.com/question/269909535/answer/351658032
[5]CSDN:
https://blog.csdn.net/lilai619/article/details/79695109
[6]YOLOv3翻译:
https://blog.csdn.net/amusi1994/article/details/79698890