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

摘要:
每批_大小样本更新一次参数。权重衰减惩罚项使权重收敛到较小的绝对值。一开始,它可以设置得稍高一些,这可以使权重快速变化,并在迭代一定数量的时间段后手动降低学习率。在yolo训练中,网络训练160个阶段的初始学习率为0.001。在60和90个时期,学习率除以10。在深度学习中,通常使用SGD训练,即

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

免责声明:文章转载自《【YOLO】YOLO网络中参数的解读》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇电脑用命令给Android手机录屏方法 记录Linux中三种SCSI target的介绍之STGT下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

目标检测算法-YOLO算法纵向对比理解

目标检测算法-YOLO算法纵向对比理解 DeepLearning的目标检测任务主要有两大类:一段式,两段式 其中两段式主要包括RCNN、FastRCNN、FasterRCNN为代表, 一段式主要包括YOLO,SSD等算法 由于一段式直接在最后进行分类(判断所属类别)和回归(标记物体的位置框框),所以现在一段式大有发展。 YOLO v1 论文地址:You...

配置glibc

cmake_minimum_required(VERSION 3.10)project(yolo_example)set(CMAKE_CXX_STANDARD 11)include(FindPkgConfig)pkg_check_modules(GLIB glib-2.0 REQUIRED)include_directories(${GLIB_INCLUD...

AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3

1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理。本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析。 目标检测可以理解为是物体识别和物体定位的综合,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置。 为了完成这两个任务,目标检测模型分为两类。一类是two-sta...

YOLO V2论文理解

概述 YOLO(You Only Look Once: Unified, Real-Time Object Detection)从v1版本进化到了v2版本,作者在darknet主页先行一步放出源代码,论文在我们等候之下终于在12月25日发布出来。 新的YOLO版本论文全名叫“YOLO9000: Better, Faster, Stronger”,主要有两个...

YOLOv3:训练自己的数据(附优化与问题总结)

环境说明 系统:ubuntu16.04 显卡:Tesla k80 12G显存 python环境: 2.7 && 3.6 前提条件:cuda9.0 cudnn7.0 opencv3.4.0 安装cuda和cudnn教程 安装opencv3.4.0教程 实现YOLOV3的demo 首先安装darknet框架,官网链接 git c...

小目标检测技术分析

小目标检测技术分析 小目标检测及跟踪系统分为四个模块: · 硬件模块   该模块基于标准PCI总线,并配以超大规模可编程芯片(DSP、FPGA),具有极强的运算、处理能力。 · DSP 程序模块   其功能主要实现复杂背景下的小目标检测、跟踪。考虑到系统的实时性要求,复杂背景下的小目标检测采用红外能量积累技术。首先对红外图像进行增强;然后在对小目标进行粗检...