Windows下 YOLOv3配置教程

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

然后根据下图进行操作
Windows下 YOLOv3配置教程_第1张图片

修改darknet.vcxproj

打开darknet/build/darknet/darknet.vcxproj,将14全部替换为12
Windows下 YOLOv3配置教程_第2张图片

打开darknet.vcxproj,将CUDA 9.1全部替换为CUDA 8.0

Windows下 YOLOv3配置教程_第3张图片



修改OpenCV路径,其中x64版本最重要,至于x86版本属于可选。因为建议使用x64版本
Windows下 YOLOv3配置教程_第4张图片

对于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(不知道可行不可行,不知道必要不必要)

改好后,部分代码如下
Windows下 YOLOv3配置教程_第5张图片


修改darknet.sln

将Visual Studio 2015的属性修改为Visual Studio 2013(当前VS版本)的属性
Windows下 YOLOv3配置教程_第6张图片
修改为:
Windows下 YOLOv3配置教程_第7张图片


打开darknet.sln

以防止万一,加上OpenCV3.3.1的属性表
将当前解决方案设置为Release x64
Windows下 YOLOv3配置教程_第8张图片

配置好OpenCV路径后,随便打开几个.c文件快速浏览一下

Windows下 YOLOv3配置教程_第9张图片



编译darknet工程
Windows下 YOLOv3配置教程_第10张图片

编译过程中,你会发现此时可能出现下述问题,如果没有出现,那就基本直接编译成功。
如果发生问题,可以参考下述解决方案:

注:我是自己用CMake和Visual Studio 2013重新编译的OpenCV,所以.lib和.dll命名与官方提供的动态链接库名称不一样,如果你直接用官方编译好的库,那么可以省很多事。

Windows下 YOLOv3配置教程_第11张图片
查找world关键字,发现在detector.c中,有
Windows下 YOLOv3配置教程_第12张图片

将#ifndef CV_VERSION_EPOCH到#endif注释掉,因为我已经添加好了属性表,所以不用在程序中显式声明使用哪个lib。这里其实取决你的OpenCV是如何配置的,如果是使用官方提供编译好的OpenCV,那么就不需要改这些内容了;如果是自己用CMake编译的,那么请参考刚刚描述的内容。
Windows下 YOLOv3配置教程_第13张图片


然后重新编译
Windows下 YOLOv3配置教程_第14张图片

接下来,就是见证奇迹的时刻:
Windows下 YOLOv3配置教程_第15张图片

上述是x64版本的darknet配置过程,如果你想配置x86版本,其实步骤类似,只需要将属性表替换即可。
这里可以看一下我是如何继续配置x86版本的。

同理,添加x86版本的OpenCV属性表,我这里使用的是OpenCV2.4.9 x86,
并将当前工程的状态切换成Release x86:
Windows下 YOLOv3配置教程_第16张图片

然后编译当前x86工程
Windows下 YOLOv3配置教程_第17张图片

接下来,就是再次见证奇迹的时刻

但...还是遇到问题了
Windows下 YOLOv3配置教程_第18张图片

原来我电脑里没有x86版的cublas.lib,这个就尴尬了,但这个不重要,其实我已经配置好了x64版本,这个x86只是尝试。如果你依旧坚持,那么可以下载x86版本的cublas.lib,或者你电脑里本身就有,这就更美滋滋了。


再看一下darknet\build\darknet\x64文件夹,哇塞,那个darknet.exe就是你梦寐以求的!!!
Windows下 YOLOv3配置教程_第19张图片


准备

下载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
Windows下 YOLOv3配置教程_第20张图片

F:\Projects\Object Detection\YOLO\Darknet\Linux_Windows\darknet\build\darknet\x64\data\giraffe.jpg
Windows下 YOLOv3配置教程_第21张图片

上述是针对多幅图像的检测

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

上述两种命令都不能正常运行,出现下述问题:
Windows下 YOLOv3配置教程_第22张图片

上github查询该问题,发现有一些人和我一样,使用网络摄像头检测时,出现问题: https://github.com/AlexeyAB/darknet/issues/551

对当前问题.exe进行调试,发现断点调到http_stream.cpp中的第217行的cpp_cap.isOpenCV()处(和上述github问题吻合)。其实就是get_webcam_frame函数的形参传入值有问题!
Windows下 YOLOv3配置教程_第23张图片

仔细查看变量状态,此时cap有问题,居然是NULL???

Windows下 YOLOv3配置教程_第24张图片



那么怎么修改呢???

问题:摄像头亮着,但程序崩溃
Windows下 YOLOv3配置教程_第25张图片


到底怎么解决呢?这里我们参考下述方法,使用OpenCV2.4.13
Windows下 YOLOv3配置教程_第26张图片

我们将darknet文件夹复制一份,重命名为darknet-opencv2
此时,尝试将已添加的OpenCV3.3.1属性表删除,添加OpenCV2.4.13(x64)版本的属性表;

Windows下 YOLOv3配置教程_第27张图片


再将darknet工程属性里的OpenCV include和lib路径进行修改
Windows下 YOLOv3配置教程_第28张图片

Windows下 YOLOv3配置教程_第29张图片



再对源码进行编译
然后对打开darknet解决方案,对工程进行重新编译—>生成。
出现下述情况,即表示编译成功!
Windows下 YOLOv3配置教程_第30张图片

接下来,打开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
Windows下 YOLOv3配置教程_第31张图片


YOLOv2视频目标检测

  • .\darknet.exe detector demo cfg\coco.data cfg\yolov2.cfg weights\yolov2.weights

注:奇怪,为什么YOLOv2的FPS比YOLOv3的还高
Windows下 YOLOv3配置教程_第32张图片


YOLOv2-Tiny-VOC视频目标检测

  • .\darknet.exe detector demo cfg\voc.data cfg\yolov2-tiny-voc.cfg weights\yolov2-tiny-voc.weights
注:FPS虽然很高,但这检测率太差了...

Windows下 YOLOv3配置教程_第33张图片




安装Yolo_mark

https://github.com/AlexeyAB/Yolo_mark
  • git clone https://github.com/AlexeyAB/Yolo_mark

打开yolo_mark.sln,将环境设置为v120

Windows下 YOLOv3配置教程_第34张图片



(可选)删掉不必要的opencv环境路径
Windows下 YOLOv3配置教程_第35张图片

Windows下 YOLOv3配置教程_第36张图片



添加OpenCV3的属性表
Windows下 YOLOv3配置教程_第37张图片
将main.cpp下述内容修改:
Windows下 YOLOv3配置教程_第38张图片

Windows下 YOLOv3配置教程_第39张图片

但编译时居然还会出错,但机智的Amusi直接对yolo_mark的Release x64进行了OpenCV重新配置

Windows下 YOLOv3配置教程_第40张图片




再次编译
Windows下 YOLOv3配置教程_第41张图片

进入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


你可能感兴趣的:(深度学习,计算机视觉,目标检测,YOLO,YOLOv3,深度学习,目标检测)