使用YOLO框架Darknet进行分类预训练

网络上大部分整理的博文都是关于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

接下来就看到训练过程啦~
这里写图片描述

展开阅读全文

没有更多推荐了,返回首页