darknet框架下基于cifar数据集的图像分类模型训练

 

目录

安装darknet

数据集下载

生成训练样本list

制作数据配置文件

制作网络配置文件

训练模型

从checkpoint开始训练

模型验证

遇到的问题


本教程教你在darknet框架下训练一个分类器,使用cifar-10数据集。

安装darknet

如果还没安装darknet,请先安装,使用以下命令:

git clone https://github.com/pjreddie/darknet
cd darknet
make

数据集下载

 

使用以下命令下载数据集:

wget http://pjreddie.com/media/files/cifar.tgz
tar xzf cifar.tgz

数据集解压后如下图所示,将数据放到data文件夹下。

darknet框架下基于cifar数据集的图像分类模型训练_第1张图片

Labels.txt为标签名,一行一类;

darknet框架下基于cifar数据集的图像分类模型训练_第2张图片

train和test文件夹下都是类别标签名为文件名的样本数据。

darknet框架下基于cifar数据集的图像分类模型训练_第3张图片

生成训练样本list

进入到path->cifar根目录下,使用以下命令生成train和test的训练所需的list文件。

cd cifar
find `pwd`/train -name \*.png > train.list
find `pwd`/test -name \*.png > test.list

如果你是jpg格式的则使用以下命令:

find `pwd`/train -name \*.png > train.list
find `pwd`/test -name \*.png > test.list

在使用以下命令进入到darknet框架的根目录;

cd ../..

制作数据配置文件

在cfg/目录下创建一个名为cifar.data的文件,文件内容如下:

classes=10//类别数目
train  = data/cifar/train.list///训练数据路径
valid  = data/cifar/test.list///测试数据路径
labels = data/cifar/labels.txt///训练标签文件路径
backup = backup/   ///模型保存路径
top=2 //输出排名前2类的准确率

制作网络配置文件

我们需要一个网络来训练,在cfg/文件夹下创建一个名为cifar_small.cfg的文件夹,cifar_small.cfg文件如下:

[net]
batch=128
subdivisions=1
height=28
width=28
channels=3
max_crop=32
min_crop=32

hue=.1
saturation=.75
exposure=.75

learning_rate=0.1
policy=poly
power=4
max_batches = 5000
momentum=0.9
decay=0.0005

[convolutional]
batch_normalize=1
filters=32
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=16
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=64
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

[convolutional]
batch_normalize=1
filters=32
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=128
size=3
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=64
size=1
stride=1
pad=1
activation=leaky

[convolutional]
filters=10
size=1
stride=1
pad=1
activation=leaky

[avgpool]

[softmax]

这是一个很小的网络,因此他的性能不一定很好,但这是一个很好的例子。网络仅仅只有4个卷积层和两个池化层。

最后的卷积层有10个filter,因为我们要分10类,输出的大小为7*7*10,我们总共需要十个预测,因此我们使用一个平均池化层来平均图像的每一个通道,最后会给出10个预测,我们使用softmax激活函数使预测结果转化为一个概率分布。

训练模型

使用以下命令进行训练(基于cifar网络):

./darknet classifier train cfg/cifar.data cfg/cifar_small.cfg

使用cifar.data文件的数据配置以及cifar_small.cfg文件的网络配置来训练一个分类器。即使这是一个很小的网络,在CPU上训练也将花很长的时间,因此我们推荐使用GPU训练。

基于darknet19网络训练命令:

./darknet classifier train cfg/cifar.data cfg/darknet19.cfg

从checkpoint开始训练

如果你停止训练,你仍然可以通过模型训练的其中一个checkpoint重新开始。

./darknet classifier train cfg/cifar.data cfg/cifar_small.cfg backup/cifar_N.weights

模型验证

我们可以使用保存的模型文件来验证其可靠性,使用final weight file或者任何一个保存的迭代文件。

./darknet classifier valid cfg/cifar.data cfg/cifar_small.cfg backup/cifar_small.backup

遇到的问题

在基于分类模型的训练中,使用预训练模型的命令不知道是什么,试了几次都失败,还没开始训练就直接结束了。

你可能感兴趣的:(Darknet)