网络上大部分整理的博文都是关于YOLO以及YOLOv2的finetune过程,但由于实际的业务数据的要求,需要得到与之匹配的预训练模型,本文将使用YOLO的网络进行预训练,得到适合自己的分类器。
文章参考链接地址:https://pjreddie.com/darknet/train-cifar/
1、 下载darknet,并进行编译
git clone https://github.com/pjreddie/darknet
cd darknet
make
2、获取数据
我使用的是Mnist数据集,由于Mnist数据集是二进制格式的,所以需要先将其转化为.jpg格式的图片,同时将其中的标签数据提取出来。具体提取后的适配于Darknet训练的格式如下:
其中test存放测试图片,train存放训练图片,labels存放类别种类。labels中的格式如下:
0
1
2
3
4
5
6
7
8
9
注意:train文件夹中的每张图片的名字,需要包含label中的标签,比如有张图片属于类别”0”,则这张图片名字可以命名为“0_XXXXX”,其中XXXXX 为任意字符,但不能包含标签中其他类别的字符,否则程序就会当作该图片属于多个类。
将lables.txt改为lables.list,然后还需要train.list文件,这个文件里列出了train文件夹里所有的图片,每一行为一张图片的绝对路径。
/home/yrs/darknet/data/train/0_asdgaega.jpg
/home/yrs/darknet/data/train/1_asdgbyel.jpg
3、修改数据配置文件
进入darknet/cfg文件夹,修改imagenet1k.data文件,并保存为mnist.data:
classes=10 //类别数
train = data/train.list //训练集列表路径
valid = data/valid.list //验证集列表路径
backup = /home/yrs/backup/ //用来保存训练结果的路径
labels = data/labels.list //标签路径
names = data/shortnames.list //训练阶段不使用
top=5 //top5准确率
4、修改网络配置文件
还是上一步的文件夹,打开darknet19.cfg,这里列出了主要需要修改的项,并保存为mnist.cfg
[net]
batch=128
subdivisions=1
height=56
width=56
max_crop=512
channels=3
momentum=0.9
decay=0.0005
learning_rate=0.001
policy=poly
power=4
max_batches=10000
angle=7
hue = .1
saturation=.75
exposure=.75
aspect=.75
[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky
......
......
[convolutional]
filters=10 //一定要修改,否则会出错
size=1
stride=1
pad=1
activation=linear
[avgpool]
[softmax]
groups=1
[cost]
type=sse
5、训练模型
进入darknet根目录
./darknet classifier train cfg/mnist.data cfg/mnist.cfg
接下来就看到训练过程啦~