Windows下 YOLOv3配置教程

Summary: YOLOv3—Windows配置
Author: Amusi
Date: 2018-04-05

YOLOv3翻译

yolo官网


目录


系统环境

  • Win10
  • Visual Studio 2013
  • CUDA 8.0
  • cudnn 5.1
  • OpenCV3.3.1()和OpenCV2.4.13(x64)

安装教程

下载darknet

打开cmd命令提示符,输入下述命令,下载AlexeyAB/darknet(假设你已经安装好git环境)

然后根据下图进行操作


修改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


打开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
[3]【参考】darnet fork版(支持Linux和Windows): https://github.com/AlexeyAB/darknet
[6]YOLOv3翻译: https://blog.csdn.net/amusi1994/article/details/79698890


猜你喜欢

转载自blog.csdn.net/amusi1994/article/details/80261735
今日推荐