linux之yolov3的重新训练

最近一段时间把yolov3里面的voc2007-2012样本重新训练了一次,中间遇到不少坑,此篇希望能帮到后来者。

我用的电脑配置并不高(gtx780)

训练前提:电脑装好linux16.04,opencv3.4,cuda9.0,cudnn7.0(这些在网上教程比较多,也许版本不一样,但是安装整体过程都是一样的。)

下面直接进入主题:重新训练yolov3

前期工作:

1.下载darknet:

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

2.进入darknet修改Makefile配置:

因为用到了gpu,cudnn,opencv。因此0改为1,gtx780的计算能力是35,因此设置为35(计算能力可以自行进nvida官网查询:https://developer.nvidia.com/cuda-gpus)只需改第10行的数字,另外几行可以不需要改动。再把另外三处路径对应着自己的cuda路径。到这就完成对Makefile修改了。

GPU=1
CUDNN=1
OPENCV=1
........................................................
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_35,code=[sm_35,compute_35]
.........................................................
NVCC=/usr/local/cuda-9.0/bin/nvcc           #第23行
.........................................................
COMMON+= -DGPU -I/usr/local/cuda-9.0/include/      #第49行
..........................................................

LDFLAGS+= -L/usr/local/cuda-9.0/lib64 -lcuda -lcudart -lcublas -lcurand   #第51行

3.安装darknet:

cd darknet
make

4.下载原作者的权重文件

wget https://pjreddie.com/media/files/yolov3.weights   #下载权重文件

5.测试图片

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg  #使用下载的权重文件进行图片检测

测试结果:

linux之yolov3的重新训练_第1张图片

至此前期工作全部完成,我们可以开始进行训练voc样本的训练了;

训练voc数据:

1.下载voc数据并解压:(这部下载会很慢,可以在window上用迅雷下载然后复制过来,会快很多)

wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar

2.现在已经有数据集,每张照片的名字也改好了,接下来就是把每张图片的信息以.txt形式保存下来,进入darknet/scripts。里面会有一个voc_label.py,将此脚本复制到主目录下(这样做主要是可以省去一些代码)

python voc_label.py
cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt

3.对配置文件进行修改,进入darknet/cfg/voc.data,因为是重新训练voc数据,所以第1,4,5行可以不需要修改,只需修改第2,3行,改为自己对应的路径(在主目录下通过属性找到对应的路径)

  1 classes= 20
  2 train  = /train.txt
  3 valid  = /2007_test.txt
  4 names = data/voc.names
  5 backup = backup

4.进入darknet/cfg/yolov3-voc.cfg!!!这一步非常,非常,非常重要)将测试模式改为训练模式。即将Testing下的batch=1,subdivisions=1加上#注释;同时将Training下的batch=64,subdivisions=16的#注释去掉;要是觉得显存比较小,在同一目录下,同时将random从1改为0即是关闭多尺度训练,共有三处。

[net]
# Testing    ................测试模式
 #batch=1
 #subdivisions=1
# Training   ................训练模式
 batch=64
 subdivisions=16
................................................

random=0             #关闭多尺度训练分别在第616,700,784行;

5.下载寻先训练权重:

wget https://pjreddie.com/media/files/darknet53.conv.74

6.开始重新训练权重:

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

gtx780经历一周之后,终于出了结果,权重都保存在darknet/backup内(训练半天时间就能出最终结果的一定是有问题的)将训练得到的最终yolov3-voc_final.weights文件拷贝到darknet文件夹内。

7.测试训练到的权重

先将第4步的训练模式改为测试模式。然后进入darknet/examples/darknet.c在第440行将coco.data改为voc.data

test_detector("cfg/voc.data", argv[2], argv[3], filename, thresh, .5, outfile, fullscreen);

然后重新编译环境。

cd darknet
make clean
make

至此所有配置修改完成,可以进行图片测试了

 ./darknet detect cfg/yolov3-voc.cfg yolov3-voc_final.weights data/dog.jpg

结果如下:

linux之yolov3的重新训练_第2张图片

你可能感兴趣的:(linux之yolov3的重新训练)