YOLOv2做了哪些改进
YOLOv2在第一个版本的基础上做了不少的改进,包括网络结构和训练的小技巧,anchor机制的加入,本文将对这些改进做一个梳理。
1. 批量规范化 (Batch Normalization)
2.大尺度预训练分类(High Resolution Classifier)
5. 直接预测相对位置(Direct location prediction)
6. 细粒度特征 (Fine-Grained Features)
7. 多尺度训练(Multi-Scale Training)
总览
作者的实验结果总结,可以发现有很多的工程性质的trick,背后的理论却不是很多,感觉上是实验性质。
改进分析
1. 批量规范化 (Batch Normalization)
对数据进行预处理(统一格式、均衡化、去噪等)能够大大提高训练速度,提升训练效果。
这个就像卷积网络中的神器,加上之后又能防止过拟合又能加速收敛。原理上,对每一批训练数据统计通道上的均值和方差,再做归一化处理,预测的时候只有一张图片,统计性质不好,用训练集的期望代表均值和方差。加上BN之后有了2个点的提升。
批量规范化 ,对每一层输入的数据进行加工。示意图:
Batch Normalization,简称 BN,由Google提出,是指对数据的 归一化、规范化、正态化。BN 作为近几年最火爆的Trick之一,主流的CNN都已集成。
该方法的提出基于以下背景:
1)神经网络每层输入的分布总是发生变化,通过标准化上层输出,均衡输入数据分布,加快训练速度;
可以设置较大的学习率和衰减,而不用去care初始参数,BN总能快速收敛,调参狗的福音。
2)通过规范化输入,降低激活函数在特定输入区间达到饱和状态的概率,避免 gradient vanishing 问题;
举个例子:0.95^64 ≈ 0.0375 计算累积会产生数据偏离中心,导致误差的放大或缩小。
3)输入规范化对应样本正则化,在一定程度上可以替代 Drop Out;
Drop Out的比例也可以被无视了,全自动的节奏。
BN 的做法是 在卷积池化之后,激活函数之前,对每个数据输出进行规范化(均值为 0,方差为 1)。
公式很简单,第一部分是 Batch内数据归一化(其中 E为Batch均值,Var为方差),Batch数据近似代表了整体训练数据。
第二部分是亮点,即引入 附加参数 γ 和 β(Scale & Shift),Why? 因为简单的归一化 相当于只使用了激活函数中近似线性的部分(如下图红色虚线),破坏