0. 写本博客的目的
对于使用yolov3训练自己的数据,网上虽然文章多,但是经过实验发现,基本没有能一次运行的成功的。因此特写此文,记录自己在使用yolov3训练自己的数据时遇到的坑。
环境:ubuntu14 + CUDA8.0 + cudnn5.0 + GTX1050Ti (4G)
1. 制作数据
为了便于在多个目标检测框架(如Faster R-CNN,SSD等)中训练,制作数据时,推荐使用类似VOC(VOC-LIKE)数据。windows可以使用labelImg.exe来进行标注。具体这里不详细介绍了。
2. 下载+编译yolov3
从官方网址中下载yolov3源码。具体编译过程作者有介绍。这里简要介绍一下自己编译的过程。
假设yolov3在ubuntu中的路径为/home/XXX/darknet
1) 修改配置文件(Makefile)
Makefile文件中(下面是配置文件中的修改部分,或者需要注意的部分)
需要注意的是:是否使用GPU,是否使用CUDNN进行进一步加速,是否使用opencv。如果使用GPU时,需要注意CUDA的安装位置,如果使用opencv,需要注意opencv的位置。有关opencv的ubuntu安装,推荐一个靠谱的安装方式。对于需要注意的地方,在下面的Makefile中有相关注释。
GPU=1 ## using GPU for train or test
CUDNN=0 ## using CUDNN to improve speed
OPENCV=1 ## using opencv
OPENMP=0
DEBUG=0
## the arch of your GPU
ARCH = -gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_62,code=compute_62
#ARCH= -gencode arch=compute_30,code=sm_30 \
# -gencode arch=compute_35,code=sm_35 \
# -gencode arch=compute_50,code=[sm_50,compute_50] \
# -gencode arch=compute_52,code=[sm_52,compute_52] \
# -gencode arch=compute_60,code=sm_60 \
# -gencode arch=compute_61,code=sm_61 \
# -gencode arch=compute_61,code=compute_61
# -gencode arch=compute_20,code=[sm_20,sm_21] \ This one is deprecated?
# This is what I use, uncomment if you know your arch and want to specify
# ARCH= -gencode arch=compute_52,code=compute_52
CFLAGS+=$(OPTS)
ifeq ($(OPENCV), 1)
COMMON+= -DOPENCV
CFLAGS+= -DOPENCV
LDFLAGS+= `pkg-config --libs opencv2.4` ## the position of your opencv
COMMON+= `pkg-config --cflags opencv2.4` ## the position of your opencv
endif