YOLOv3使用笔记——darknet分类、计算accuracy

https://pjreddie.com/darknet/train-cifar/

1.数据集准备

本文以darknet19训练开关门数据集为例

根目录data文件夹下新建一个door文件夹用于存放数据集,标签文件。

新建label.txt,分两类开门与关门

open
closed

新建train、test文件夹分别用于存放训练集和测试集

其中图片名格式如下:00001_open.jpg    00001_closed.jpg    序号_标签.后缀名  的形式

新建train.list、test.list,为对应数据集图片的绝对路径,例:/home/yolov3/darknet/data/door/train/00001_closed.jpg

注:路径里不能包含标签名,否则会报Too many or too few labels错误

可以直接写脚本获取list,也可以用命令ls >a.txt得到所有文件名,然后每行行首加字符用于替换,sed 's/^/test&/g' a.txt >test.list,再替换test为绝对路径。 通过文本操作得到list文件。

2. 修改cfg

例:darknet19.cfg ,修改最后一层卷积层filters,其他超参数按需修改

[convolutional]
filters=2//自己的类别数
size=1
stride=1
pad=1
activation=linear

新建door.data,对应数据集和模型的保存路径,修改为top1准确率

classes= 2
train  = data/door/train.list
valid  = data/door/test.list
labels =data/door/labels.txt
backup = /home/yolov3/darknet/door_flag_model/
top=1

 

3.训练

查看darknet.c,classifier.c,darknet训练分类器并不能做finetuning

./darknet classifier train cfg/door.data cfg/darknet19.cfg -gpus 0,1 2>1 | tee train_darknet19.log

其中保存的模型中有个.backup可以用于继续训练,保存模型以epoch数命名。

 

4.测试

./darknet classifier predict cfg/door.data cfg/darknet19.cfg door_flag_model/darknet19_3.weights data/a.jpg 

 

5.计算准确率

 

darknet分类没有像caffe一样训练的同时日志文件输出测试集的准确率,但是提供了valid函数用于输出top-1准确率。

./darknet classifier valid cfg/door.data cfg/darknet19.cfg classify_result/darknet19_18.weights

用相同的数据集对比了caffe、pytorch框架,用近似的网络训练,darknet框架训练的平均loss更低,准确率更高,模型的泛化表现也更好。对比caffe,没有第三方库,c也更方便移植到嵌入式平台。

 

 

 

参考:

https://blog.csdn.net/u011576009/article/details/70146766

https://blog.csdn.net/Allyli0022/article/details/78185305

https://blog.csdn.net/hjimce/article/details/74454165

你可能感兴趣的:(YOLO)