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

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;dom

3.冲量-momentum 
梯度降低法中一种经常使用的加速技术,对于通常的SGD,其表达式为函数

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

其中是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。spa

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中出现的代码.net

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

相关文章
相关标签/搜索