Darknet YOLO 安装配置

使用YOLO几个月了,遇到过许多问题,百度+Google,认真读代码看论文(多年工作经验告诉我,Linus 的Reading the fucking source code是句至理名言),基本都解决了。
接下来计划写一系列关于darknet和YOLO的博客来做个总计,这是第一篇。

先放darknet官方链接
https://pjreddie.com/darknet/yolo/

技术论坛(自备梯子)
https://groups.google.com/forum/#!forum/darknet

环境
Ubuntu16.04 + GTX1060 + Cuda8.0 + OpenCV3.2 + Python2.7
环境配置请参考我的另一篇博客
http://blog.csdn.net/hrsstudy/article/details/60340699

darknet安装配置

git clone https://github.com/pjreddie/darknet
cd darknet
make

如果没有错误(环境没问题基本不会有错),最少依赖的简单的darknet就安装好了,然而,这才是开始。

打开Makefile,我们看到

GPU=0
CUDNN=0
OPENCV=0
DEBUG=0

Enable GPU和CUDNN,你可以享受GPU的极速;enable OPENCV 你可以方便的展示结果、使用camera实时检测、处理视频;enable DEBUG 你可以使用GDB进行调试。

问题出现了,在当前环境下,截止到darknet的第330个Commit,如下配置会编译报错

GPU=1
CUDNN=1
OPENCV=1
DEBUG=0

原因是作者使用的OpenCV 2.X,解决方案如下:
https://github.com/PaulChongPeng/darknet/commit/317366e1e46f4b63e5141a03d14293feffdfe86b

在CvCapture报错的文件中引入 videoio_c.h后即可解决

#include "opencv2/videoio/videoio_c.h"

如果我们需要使用GDB进行调试,就需要Enable DEBUG,如果你没有同时打开OpenCV,那么恭喜,一切顺利,不会有任何编译错误。然而,悲催的是我偏偏需要Debug依赖OpenCV的代码。

GPU=1
CUDNN=1
OPENCV=1
DEBUG=1

我以为会一切顺利,悲剧的是,关于cvRound的链接错误报了一堆。
cvRound定义在opencv/modules/core/include/opencv2/core/fast_math.hpp,这是一个内联函数,我们使用objDump看不到声明。
解决方案如下:
https://github.com/PaulChongPeng/darknet/commit/317366e1e46f4b63e5141a03d14293feffdfe86b
修改Makefile,优化等级改为4级,强制内联。

 ifeq ($(DEBUG), 1) 
 -OPTS=-O0 -g
 +OPTS=-O4 -g
  endif

至此,darknet随便怎么编译都OK了

你可能感兴趣的:(机器学习)