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