YOLO如何训练分类网络???

一般YOLO的工程应用直接上检测,源自作者提供了分类的预训练模型,但是如果自己改网络训练怎么办?预训练网络没有怎么办?

不怕,两种方法可以解决!

第一种:比较笨的方法,就是下载imagenet数据训练分类网络!

第二种:一层一层的改网路,每改一层,在原有预训练的条件下训练网络,生成新的模型时作为下一次修改网络的预训练模型!说的好像不是很清楚额,这个问题以后讨论!


今天讨论如何用yolo训练自己的分类模型!可见我们一般的分类工程都是通过caffe来做的,YOLO其实可以替代的,而且yolo是纯c,有着不可替代的优点!加上OpenBlas,效果不要太好了!


第一步:yolo配置

这个在本博文不提了,可参考我的系列博客http://blog.csdn.net/samylee/article/details/53414108


第二步:数据制作

没啥特殊要求,如下图所示,train保存训练图片,test保存测试图片,labels.txt为分类的标签,例如猫狗大战则为cat和dog!

注意一点就行,即图片名称为labels.txt中的一种,例如cat_1.jpg,cat为labels中的一种,后面_1随便写,只要没有dog就行!(WHY?全局搜索strstr函数即可豁然开朗)


同时要分别生成train.list和test.list保存图片train和test的绝对路径,这个程序可以自己写一下啦,很简单!


第三步:数据配置文件制作

例如猫狗大战数据,cat_dog.data怎么写?如下:

classes=2
train  = data/cat_dog/train.list
valid  = data/cat_dog/test.list
labels = data/cat_dog/labels.txt
backup = cat_dog/backup/
top=2
很明显, classes表示几类,labels表示标签路径,backup表示要把模型存放在哪里,top表示准确率输出前几,类似caffe


第四步:网络文件制作

cat_dog.cfg怎么写?如下:

[net]
batch=128
subdivisions=1
height=416
width=416
channels=3
max_crop=428
min_crop=428

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=64
size=3
stride=1
pad=1
activation=leaky

[maxpool]
size=2
stride=2

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

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

[avgpool]

[softmax]
groups=1

[cost]
type=sse
很明显, max_crop表示原始图像大小,heights和weights表示剪切图像大小,最后一层conv输出为几类,这里比如猫狗为2


第五步:训练

到了这一步,很舒服!终端写入如下命令即可:

./darknet classifier train cfg/cat_dog.data cfg/cat_dog.cfg
训练过程看啥呢? 看loss,loss应该越来越小,最后趋于平稳


第六步:测试

训练完毕过后,拿出训练结果的模型来测试,真皮!终端输入如下命令即可:

./darknet classifier predict cfg/cat_dog.data cfg/cat_dog.cfg cat_dog_final.weights data/dog.jpg
结束啦,终端可以看到输出两个结果(top=2), 第一个即为判断的结果啦


任何问题请加唯一QQ2258205918(名称samylee)  !!! 

你可能感兴趣的:(darknet)