本篇博文主要是参照官网步骤进行VOC数据的训练,博主也是更改接触,如果有错误的地方,欢迎指正
操作环境: ubuntu
如果使用GPU需要安装cuda和cudnn,应为我这边环境已经装好了,所以并没有尝试安装
1.下载编译darknet
git clone https://github.com/pjreddie/darknet
cd darknet
make
2.如需开启GPU,需要修改Makefile
GPU=1
CUDNN=1
//下面两个参数我搜索了一下资料,貌似不一定要改
OPENCV=1 //这个貌似是在线查看图片的情况才需要
NVCC=/usr/local/cuda-8.0/bin/nvcc //这个如果在安装cudnn是配置好,直接用nvcc就可以也不需要配,测试方法,可以直接命令行输入 nvcc -V 看看命令是否可用,不可用再改为具体路径即可
修改完Makefile文件之后需要重新make:
make clean
make
3.(非必须)下载权重文件,并进行测试
wget https://pjreddie.com/media/files/yolov3.weights
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
4.训练VOC数据
4.1(非必须,如果已经有自己的数据,直接用自己的数据进行训练)训练官方VOC数据
一下操作均在darknet根目录下执行
1)下载VOC2007 VOC2012数据,并解压
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
此时,根目录下会多出一个VOCdevkit文件夹,里面有VOC2007和VOC2012的图像和标注数据
2)下载执行voc_label.py脚本
wget https://pjreddie.com/media/files/voc_label.py
python voc_label.py
此时,根目录下会多出2007_test.txt 2007_train.txt 2007_val.txt 2012_train.txt 2012_val.txt五个文件
然后使用命令
cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt
得到train.txt,下一步配置文件中会使用到train.txt和2007_test.txt,我将他们移动到了data文件夹
3)修改cfg/voc.data文件
vim cfg/voc.data
classes= 20 //使用官方VOC数据时不需要改
train = <path-to-voc>/train.txt //将<path-to-voc>改为你存放train.txt的路径,比如我就是data
valid = <path-to-voc>2007_test.txt//将<path-to-voc>改为你存放2007_test.txt的路径,比如我就是data
names = data/voc.names //classes的具体名称
backup = backup //保存weights文件的目录,默认情况下1000以内,每100此保存一次,1000次以上每10000次保存一次
4)修改cfg/yolov3-voc.cfg文件
vim cfg/yolov3-voc.cfg
训练官方数据的话,只需要更改
batch=64
subdevisions=8
即可,batch越大,运算效率越高,但是用GPU的话,太大会报错CUDA: out of memory,那就适当改小一点
5)下载darknet53权重文件
wget https://pjreddie.com/media/files/darknet53.conv.74
6)开始训练
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
4.2使用自己的数据进行训练
数据来源用LabelImg标注
然后需要修改voc_label.py脚本,cfg/voc.data中的classes,cfg/voc.data中的filters、classes以及其他参数。 目前正在学习中,待填坑
参考