batch与subdivisions
1.batch = 64 :一批训练样本的样本数量(64),每batch个样本(64)更新一次参数.
2.subdivisions = 16 :batch/subdivisions作为一次性送入训练器的样本数量(4).
两个参数如果电脑内存小,则把batch改小一点,batch越大,训练效果越好,subdivisions越大,可以减轻显卡压力.
总结:如何确定batch_size
根据数据集的大小和样本数目确定batch_size:
- 样本类别数目较少,而且模型没有BN层,batch_size就设置得较小一点。
- 样本类别数目较多,而且模型没有BN层,batch_size就设置得较大一点。尽量保证一个batch里面各个类别都能取到样本。
- 数据集很小,可以采取Full Batch Learning。每次用所有的训练集进行训练。
batch_size的大小设置为8的倍数。
有BN层的模型,而且数据集也很大,类别也较多时,batch_size尽量越大越好。
width、height、channels
width = 416
height = 416
channels = 3
三个参数为输入图像的参数信息 width和height影响网络对输入图像的分辨率,从而影响precision,只可以设置成32的倍数(256,416,544…).
momentum
momentum = 0.9
动量参数,这个值影响着梯度下降到最优值得速度.
decay
decay = 0.0005
权重衰减正则项,防止过拟合.
angle、saturation、exposure 、hue
angle = 0 通过旋转角度来生成更多训练样本,图片角度变化,单位为度,假如angle=5,就是生成新图片的时候随机旋转-5~5度.
saturation = 1.5 通过调整饱和度来生成更多训练样本,1.5倍
exposure = 1.5 通过调整曝光量来生成更多训练样本,1.5倍
hue = .1 通过调整色调来生成更多训练样本,-0.1~0.1
learning_rate、policy、steps、scales
(1)learning_rate=0.001
1.学习率决定着权值更新的速度,设置得太大会使结果超过最优值,太小会使下降速度过慢。
2.刚开始训练时可以将学习率设置的高一点,而一定轮数之后,将其减小
3.在训练过程中,一般根据训练轮数设置动态变化的学习率。
4.刚开始训练时:学习率以 0.01~0.001 为宜。一定轮数过后:逐渐减缓。接近训练结束:学习速率的衰减应该在100倍以上.
(2)policy = steps
这个是学习率调整的策略,policy有:constant, steps, exp, poly, step, sig, RANDOM,constant等方式.
(3)下面这两个参数steps和scale是设置学习率的变化,比如迭代到100次时,学习率增大10倍;迭代到40000次时,学习率衰减十倍;45000次迭代时,学习率又会在前一个学习率的基础上衰减十倍.
steps=100,40000,45000
scales=10, .1, .1
max_batches
max_batches = 60000
训练达到60000后停止学习.
batch_normalize、filters、size、stride、pad、activation
1.batch_normalize=1 是否做BN(对每层输入加同分布约束,再加参数线性变换学习其表达能力. )
2.filters=32 输出特征图的数量
3.size=3 卷积核的尺寸(滤波器,卷积核,感受野的大小).
4.stride=1 做卷积运算的步长
5.pad=1 设置pad大小 (如果pad为0,padding由 padding参数指定;如果pad为1,padding大小为size/2,padding应该是对输入图像左边缘拓展的像素数量.)
6.activation=leaky 激活函数的类型
总结知识:
epochs
epochs被定义为向前和向后传播中所有批次的单次训练迭代。这意味着1个周期是整个输入数据的单次向前和向后传递。简单说,epochs指的就是训练过程中数据将被“轮”多少次。
公式:one epoch = numbers of iterations = N = 训练样本的数量/batch_size
例:有786个训练样本,batch_size=32,训练总次数max_batches=40000。那epochs=40000/(786/32)≈1628.5。
iterations
iterations(迭代):每一次迭代都是一次权重更新,每一次权重更新需要batch_size个数据进行Forward运算得到损失函数,再BP算法更新参数。
1个iteration = 使用batchsize个样本训练一次。
YOLOv2
random
- random=1 每隔几次迭代后就会微调网络的输入尺寸。随机选择新的输入图像尺寸{320,352,…,608}(32的倍数)。使得网络可以适应多种不同尺度的输入。
- random=0 每次训练大小与输入大小一致。
bias_match
bias_match=1
如果为1,计算best iou时,预测宽高强制与anchors一致。