目录
安装darknet
数据集下载
生成训练样本list
制作数据配置文件
制作网络配置文件
训练模型
从checkpoint开始训练
模型验证
遇到的问题
本教程教你在darknet框架下训练一个分类器,使用cifar-10数据集。
如果还没安装darknet,请先安装,使用以下命令:
git clone https://github.com/pjreddie/darknet
cd darknet
make
使用以下命令下载数据集:
wget http://pjreddie.com/media/files/cifar.tgz
tar xzf cifar.tgz
数据集解压后如下图所示,将数据放到data文件夹下。
Labels.txt为标签名,一行一类;
train和test文件夹下都是类别标签名为文件名的样本数据。
进入到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重新开始。
./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
在基于分类模型的训练中,使用预训练模型的命令不知道是什么,试了几次都失败,还没开始训练就直接结束了。