ssd系列算法(三)之ScratchDet

这是京东AI研究院发表的cvpr2019的一篇oral论文,这篇论文与上一篇文章介绍的几篇论文(fssd、dssd、m2det)有所不同,前几篇都从特征融合的角度下手调整网络结构,而这篇论文抓住利用在imagenet的预训练模型进行finetune存在的一些问题,介绍了直接从头(from scratch)开始训练的网络scratchdet

这篇论文似乎没有太多的新东西,通篇好像就说了三件事:第一,fine-tuned存在很多问题;第二,利用batch normalization即使从头训练也可以很好的收敛;第三,resnet的第一层7×7的卷积下采样存在问题

这篇文章算法基础架构依然是ssd

但是读完文章发现,自己确实有所收获,文章介绍的东西很有用

接下来一个个问题介绍,基本上就理解了这篇文章了

fine-tune存在的问题

为什么都要在imagenet训练好的基础网络上进行微调?

往往对于卷积神经网络输出可视化而言,对于底层的特征,大多数是没有很大的差别的,深层的高维信息会有较大差别,因而可以用微调的方法,利用已经训练好的网络加快模型的收敛。(网上一些人的解答)

而且如果自己的数据集较小的话,往往从从头开始随机初始化的权重进行训练的话,容易陷入局部极小,容易过拟合(这个自己试验过,确实),因而一般对于目标检测任务的basebone一般都会采用微调方法进行训练。

那么微调存在哪些问题呢?

第一,分类问题是平移不变性的,而目标检测则对位置比较敏感。可能会导致偏差

第二,如果预训练模型的话,必须采用既定的网络结构如VGG,ResNet等来作为basebone,这限制了模型的架构设计

由于采用预训练模型微调存在一些问题,主要是网络架构设计不方便 ,因而要设计新的网络架构就要从头开始训练。当然,设计完新的架构,也可以先在imagenet训练,然后进行迁移学习,但是imagenet是在太大了,训练网络非常耗时。

Batch Normalization可以使网络很好的收敛

BN对于网络的收敛是有很大的帮助的,BN可以使得最优的布局更加的光滑,使得梯度下降的行为更加的稳定与可预测,使得网络有更大的搜索空间与更快的收敛。

文章作者在ssd上进行实验,没有BN时,voc2007上MAP仅有67.6%。当在backbone上利用BN时,可以用更大的学习率,得到更好的效果,MAP达到78.0%。当在感知器网络的头部使用BN时,MAP达到71.0%。使用BN可以使算法有很好的收敛。更高的准确率,可以使用更大的学习率来避免陷入局部极小。

BN原论文中提到BN可以有良好效果是因为降低了内部的协变量偏移(internal covariate shift),但是后来一篇文章通过实验与理论推到证明了BN真正有用的原因是使得最优问题重新参数化,使得布局更加的光滑。

BN原论文:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

另一篇给出BN证明的文章:How Does Batch Normalization Help Optimization?

ResNet第一个下采样问题

resnet的第一个卷积层采用7×7,步长为2 的卷积层直接进行下采样,有点过于粗暴。丢失了大量的细节信息。

因而文章重新设计了第一层卷积的下采样,并将新网络架构命名为Root-ResNet,利用3个3×3的卷积堆叠起来代替7×7的下采样卷积,效果有所提升。

综合这篇论文的贡献,提出利用预训练模型微调存在一些问题,结合BN证明从头训练可行,使得网络基础架构的设计更加灵活。同时提出resnet存在的一个小问题。