【YOLO】YOLO网络中参数的解读

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jinlong_Xu/article/details/76375334

1.Batch_Size(批尺寸) 
该参数主要用于批梯度下降算法(Batch Gradient Descent)中,批梯度下降算法是每次迭代都遍历批中的所有样本,由批中的样本共同决定最优的方向,Batch_Size 正是批中的样本数量。 

若数据集比较小,可以采用全数据集(Full Batch Learning)的形式,由全数据确定的方向能更好地代表样本总体,从而更准确地朝向极值所在的方向;但该种方式并不适用于大数据集; 
另一个极端是每次只训练一个样本,即Batch_Size=1,每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。 
在合理范围内增大Batch_Size,可以 
(1)提高内存利用率,进而提高大矩阵乘法的并行效率; 
(2)跑完一次epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快; 
(3)在一定范围内,一般来说Batch_Size越大,其确定的下降方向越准,引起的训练震荡越小。 
盲目增大Batch_Size的坏处: 
(1)超出内存容量; 
(2)跑完一次epoch(全数据集)所需的迭代次数减小,要想达到相同的精度,所需要的epoch数量越多,对参数的修正更加缓慢; 
(3)Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化; 
Batch_Size参数调试: 
大的Batch_Size在显存能允许的情况下收敛速度是比较快的但有时会陷入局部最小的情况;小Batch_Size引入的随机性会更大些,有可能会有更好的效果,但是收敛速度会慢一些;当Batch_Size太小,而类别数又比较多的时候,会导致loss函数震荡而不收敛。具体调试过程中,一般可根据GPU显存,设置为最大,而且一般要求是8的倍数,选择一部分数据,跑几个Batch看看loss是否在变小,再选择合适的Batch_Size。 
每Batch_Size个样本更新一次参数。

2.subdivisions 
如果内存不够大,将batch分割为subdivisions个子batch,每个子batch的大小为batch/subdivisions; 
darknet代码中,是将batch/subdivisions命名为batch;

3.冲量-momentum 
梯度下降法中一种常用的加速技术,对于一般的SGD,其表达式为

沿着负梯度方向下降,而带momentum项的SGD则写成

其中是momentum系数,通俗的理解上面的式子就是,如果上一次的momentum(即)与这一次的负梯度方向是相同的,那么这次下降的幅度就会加大,因此可以起到加速收敛的作用,冲量的建议配置为0.9。

4.权值衰减-weight decay 
使用的目的是防止过拟合,当网络逐渐过拟合时网络权值往往会变大,因此,为了避免过拟合,在每次迭代过程中以某个小因子降低每个权值,也等效于给误差函数添加一个惩罚项,常用的惩罚项是所有权重的平方乘以一个衰减常量之和。权值衰减惩罚项使得权值收敛到较小的绝对值。

5.angle、saturation、exposure、hue 
angle:图片角度变化,单位为度,假如angle=5,就是生成新图片的时候随机旋转-5~5度  
saturation & exposure: 饱和度与曝光变化大小,tiny-yolo-voc.cfg中1到1.5倍,以及1/1.5~1倍  
hue:色调变化范围,tiny-yolo-voc.cfg中-0.1~0.1  
在每次迭代中,会基于角度、饱和度、曝光、色调产生新的训练图片。

6.学习率-learning rate 
学习率决定了参数移动到最优值的速度快慢,如果学习率过大,很可能会越过最优值导致函数无法收敛,甚至发散;反之,如果学习率过小,优化的效率可能过低,算法长时间无法收敛,也易使算法陷入局部最优(非凸函数不能保证达到全局最优)。合适的学习率应该是在保证收敛的前提下,能尽快收敛。 
设置较好的learning rate,需要不断尝试。在一开始的时候,可以将其设大一点,这样可以使weights快一点发生改变,在迭代一定的epochs之后人工减小学习率。 
在yolo训练中,网络训练160epoches,初始学习率为0.001,在60和90epochs时将学习率除以10。

7.burn_in 
与学习率的动态变化有关??? 
if (batch_num < net.burn_in) return net.learning_rate * pow((float)batch_num / net.burn_in, net.power); 
Yolo network.c中出现的代码

8.最大迭代次数-max_batches 
权重更新次数

9.调整学习率的策略-policy 
调整学习率的policy,有如下policy:CONSTANT, STEP, EXP, POLY,STEPS, SIG, RANDOM

10.学习率变化时的迭代次数-steps 
根据batch_num调整学习率,若steps=100,25000,35000,则在迭代100次,25000次,35000次时学习率发生变化,该参数与policy中的steps对应;

11.学习率变化的比率-scales 
相对于当前学习率的变化比率,累计相乘,与steps中的参数个数保持一致;

12.是否做BN-batch_normalize

13.激活函数-activation 
包括logistic,loggy,relu,elu,relie,plse,hardtan,lhtan,linear,ramp,leaky,tanh,stair

14.[route] layer 
the route layer is to bring finer grained features in from earlier in the network 
15.[reorg] layer 
the reorg layer is to make these features match the feature map size at the later layer;The end feature map is 13x13, the feature map from earlier is 26x26x512. The reorg layer maps the 26x26x512 feature map onto a 13x13x2048 feature map so that it can be concate_nated with the feature maps at 13x13 resolution.

16.anchors 
anchors:预测框的初始宽高,第一个是w,第二个是h,总数量是num*2,YOLOv2作者说anchors是使用K-MEANS获得,其实就是计算出哪种类型的框比较多,可以增加收敛速度,如果不设置anchors,默认是0.5;

17.jitter 
通过抖动增加噪声来抑制过拟合

18.rescore 
可理解为一个开关,非0时通过重打分来调整l.delta(预测值与真实值的差)

19.random(yolo模型训练) 
random为1时会启用Multi-Scale Training,随机使用不同尺寸的图片进行训练,如果为0,每次训练大小与输入大小一致; 
是否随机确定最后的预测框

几个尺寸说明

(1)batch_size:批大小。在深度学习中,一般采用SGD训练,即每次训练在训练集中取batch_size个样本训练; 
(2)iteration:1个iteration等于使用batchsize个样本训练一次; 
(3)epoch:1个epoch等于使用训练集中的全部样本训练一次;

训练log中各参数的意义 
Region Avg IOU:平均的IOU,代表预测的bounding box和ground truth的交集与并集之比,期望该值趋近于1。 
Class:是标注物体的概率,期望该值趋近于1. 
Obj:期望该值趋近于1. 
No Obj:期望该值越来越小但不为零. 
Avg Recall:期望该值趋近1 
avg:平均损失,期望该值趋近于0

展开阅读全文

没有更多推荐了,返回首页