在VOC上训练 darknet yolov3

数据集

需要voc2007和voc2012, 目录结构如下


 VOCdevkit/VOC2007
 VOCdevkit/VOC2012

darknet/sctripts/voc_label.py 在VOCdevkit目录下执行该脚本,生成若干txt,里面都是绝对路径
其中train.all.txt是所有图片的列表, train.txt是除了voc2007 test以外的图片列表,训练时可以使用train.txt,用2007_test.txt作测试

另外VOCdevkit/VOC2007/labels和VOCdevkit/VOC2012/labels目录下生成很多label文件,里面一行表示一个目标


class, x,y,w,h

其中(x,y,w,h)表示目标位置,对图像宽高作了归一化,注意(x,y)是中心点

此处只需要把train.txt和2007_test.txt
修改darknet/cfg/voc.cfg中


classes= 20
train = <path-to-voc>/train.txt
valid = <path-to-voc>2007_test.txt
names = data/voc.names
backup = backup

其中data/voc.names在darknet/data/目录下,记录voc中类别名字

预训练模型

下载一个在imagenet上预训练的darknet53,放在darknet目录下


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

启动训练

3.1 修改cfg/yolov3-voc.cfg中


batch_size = 64
subdivision = 16

如果遇到GPU内存不够的情况,可以适度增大subdividaion的值,当然不能超过batch_size

3.2 ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
GPU内存4G不到,但有时会升高到7G多, 训练中一个关键指标是Avg IOU, 这个值可以偶尔为nan,但是不能一直为nan
iteration打印类似下面的结果


135: 210.697388, 304.020233 avg, 0.000000 rate, 11.308264 seconds, 8640 images

其中


iteration = 135
loss = 210.697388
avg loss = 304.020233

测试


./darknet detect cfg/yolov3-voc.cfg backup/yolov3-voc.backup data/dog.jpg

上面的命令默认使用coco的类别名,所以会看到定位正确,但类比不对

正确的命令如下


./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc.backup data/dog.jpg

下面的命令会批量处理图片,结果保存在results目录下,但不会自动统计recalling


./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc.backup  

50多个epoch,avg loss 0.8左右,看了几个图,定位不错,类比还有错误的

猜你喜欢

转载自blog.csdn.net/z0n1l2/article/details/83479581