【YOLO学习笔记】之YOLO配置文件详解

版权声明: https://blog.csdn.net/shuiyixin/article/details/82470128

在YOLO初体验中,应用到了一个后缀名为cfg的文件,在darknet中有一个文件夹,下面有各种各样的cfg文件

这些cfg文件都是YOLO的配置文件,负责YOLO所需数据集的训练工作,接下来,给大家详细讲解一下配置文件。讲解配置文件,我以 yolov2-tiny.cfg 文件为例。该文件具体内容如下:

[net]
# Testing
# batch=1
# subdivisions=1
# Training
 batch=1
 subdivisions=1
width=480
height=480
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

learning_rate=0.001
burn_in=1000
max_batches = 500200
policy=steps
steps=400000,450000
scales=.1,.1

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

[maxpool]
size=2
stride=2

[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

[maxpool]
size=2
stride=2

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

[maxpool]
size=2
stride=2

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

[maxpool]
size=2
stride=1

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

###########

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

[convolutional]
size=1
stride=1
pad=1
filters=30
activation=linear

[region]
anchors =  0.57273, 0.677385, 1.87446, 2.06253, 3.33843, 5.47434, 7.88282, 3.52778, 9.77052, 9.16828
bias_match=1
classes=1
coords=4
num=5
softmax=1
jitter=.2
rescore=0

object_scale=5
noobject_scale=1
class_scale=1
coord_scale=1

absolute=1
thresh = .6
random=1

加注释后文件如下:

[net]
# Testing
# batch=1
# subdivisions=1
# Training
batch=1                           #每batch个样本更新一次参数。每次迭代要进行训练的图片数量 。
subdivisions=1                     #如果内存不够大,将batch分割为subdivisions个子batch,每个子batch的大小为batch/subdivisions。
                                   #在darknet代码中,会将batch/subdivisions命名为batch。
width=416                          #Input图像的宽
height=416                         #input图像的高
channels=3                         #Input图像的通道数
momentum=0.9                       #动量
decay=0.0005                       #权重衰减正则项,防止过拟合
angle=0                            #通过旋转角度来生成更多训练样本
saturation = 1.5                   #通过调整饱和度来生成更多训练样本
exposure = 1.5                     #通过调整曝光量来生成更多训练样本
hue=.1                             #通过调整色调来生成更多训练样本

learning_rate=0.0001               #初始学习率
max_batches = 500200               #训练达到max_batches后停止学习
policy=steps                       #调整学习率的policy,有如下policy:CONSTANT, STEP, EXP, POLY, STEPS, SIG, RANDOM
steps=400000,450000                #根据batch_num调整学习率
scales=10,.1,.1                    #学习率变化的比例,累计相乘

[convolutional]
batch_normalize=1                  #是否做BN
filters=16                         #输出多少个特征图
size=3                             #卷积核的尺寸
stride=1                           #做卷积运算的步长
pad=1                              #如果pad为0,padding由 padding参数指定。如果pad为1,padding大小为size/2
activation=leaky                   #激活函数:
                                   #logistic,loggy,relu,elu,relie,plse,hardtan,lhtan,linear,ramp,leaky,tanh,stair

[maxpool]
size=2                             #池化层尺寸
stride=2                           #池化步进

[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

[maxpool]
size=2
stride=2

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

[maxpool]
size=2
stride=2

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

[maxpool]
size=2
stride=1

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

#######

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

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



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

[convolutional]
size=1
stride=1
pad=1
filters=125                        #region前最后一个卷积层的filters数是特定的,计算公式为filter=(classes + coords + 1)*5) 
                                   #5的意义是5个坐标,论文中的x,y,w,h,confidence 
activation=linear

[region]
anchors = 0.57273, 0.677385, 1.87446, 2.06253, 3.33843, 5.47434, 7.88282, 3.52778, 9.77052, 9.16828          #预选框,可以手工挑选,
                                                                                #也可以通过k means 从训练样本中学出
bias_match=1
classes=20                         #网络需要识别的物体种类数
coords=4                           #每个box的4个坐标x,y,w,h
num=5                              #每个grid cell预测几个box,和anchors的数量一致。当想要使用更多anchors时需要调大num,且如果调大num后训练时Obj趋近0的话可以尝试调大object_scale
softmax=1                          #使用softmax做激活函数
jitter=.2                          #通过抖动增加噪声来抑制过拟合
rescore=1                          #暂理解为一个开关,非0时通过重打分来调整l.delta(预测值与真实值的差)

object_scale=5                     #栅格中有物体时,bbox的confidence loss对总loss计算贡献的权重
noobject_scale=1                   #栅格中没有物体时,bbox的confidence loss对总loss计算贡献的权重
class_scale=1                      #类别loss对总loss计算贡献的权重                      
coord_scale=1                      #bbox坐标预测loss对总loss计算贡献的权重

absolute=1
thresh = .6
random=0                           #random为1时会启用Multi-Scale Training,随机使用不同尺寸的图片进行训练。

可能大家对于Batch还是不太理解,在这里我再着重说一下:

Batch,中文含义为“批”,一个batch由若干条数据构成。batch是进行网络优化的基本单位,网络参数的每一轮优化需要使用一个batch。batch中的样本是被并行处理的。

那就会有人有问题了,既然是并行处理,那我就多设置一点Batch,这样会不会更好呢?

其实对于Batch来说是分两方面的:

一方面,与单个样本相比,一个Batch的数据能更好的模拟数据集的分布,Batch越大,则对输入数据分布模拟的越好,反应在网络训练上,则体现为能让网络训练的方向“更加正确”,从这个方面来说,Batch越大,训练效果越好。

但另一方面,一个batch也只能让网络的参数更新一次,因此网络参数的迭代会较慢。

所以我们得出以下结论:在测试网络的时候,在条件的允许的范围内尽量使用更大的Batch,这样计算效率会更高

大家有什么其他关于配置文件的问题可以给我留言哦,我们一起沟通交流。

猜你喜欢

转载自blog.csdn.net/shuiyixin/article/details/82470128