ScratchDet: Training Single-Shot Object Detectors from Scratch 论文笔记

前言

一般在进行目标检测时,通常会使用在大型数据集上经过预训练的分类网络,然后在此基础上进行微调。这样做虽然能够得到较好的检测性能,但会存在一些限制:

  • 分类任务和检测任务对目标位置的敏感程度是不同的。分类任务偏向于平移不变性,因此会采取一些下采样操作以得到更好的性能。而对于检测任务来说,一些局部的上下文信息是非常重要的,因此在采取平移不变操作时需要十分谨慎,否则就会丢失一些局部信息。
  • 在微调时修改网络结构是很不方便的,但如果采用另一种新的网络结构,那么又要在大型数据集上重新进行预训练,耗时耗资源。

如果从scratch开始训练检测器,就可以消除以上限制。但目前的一些trained-from-scratch检测器要么受限于预训练网络的结构,从而无法在其它网络结构上获得良好性能;要么无法达到和pretrained检测器一样好的性能。

本文认为BatchNorm的缺失是trained-from-scratch检测器收敛效果不好的主要原因。因此,本文在backbone和detection head中都添加了BN层,并且发现这样做确实可以在未经过预训练的情况下帮助任何形式的网络快速收敛,甚至比预训练的效果还要好,因此可以摆脱预训练模型的限制进而对网络结构进行修改。

除此之外,实验发现第一个卷积层的采样步长对检测性能有重要影响,因此本文通过引入root block来重新设计检测器的结构,提出一种新的Root-ResNet backbone。root block可以保留特征图中丰富的信息,能够提升对小目标的检测精度。


ScratchDet

1. BactchNorm

本文在SSD中应用BN,以观察BN带来的影响。首先从scratch训练SSD,batch大小为128,不使用BN,将这个作为baseline,如Table 1所示,可以看到baseline的性能是67.6% mA。
在这里插入图片描述
在主干网络中添加BN——在backbone的每一个卷积层中添加BN,然后从scratch开始训练。从Table 1可以看出,这样做可以提升5.2%的mAP,并且使得优化曲线更加光滑,进而可以使用更大的学习率进行优化,提升性能(mAP从72.8%提升到77.8%和78.0%)。结果说明,在backbone中添加BN对于从scratch开始训练SSD是非常重要的。

在detection head中添加BN——为了分析在detection head中添加BN带来的影响,本文将损失值、梯度、梯度的波动随训练阶数的变化以图表示,如下图(a)(b)(c)所示。图中的蓝线表示原始SSD,红线表示在head中添加BN后以1倍的学习率来训练SSD,绿线表示10倍的学习率。
在这里插入图片描述
从(b)和(c)中的蓝线可以看到,以初始学习率0.001从scratch开始训练SSD时,训练初始阶段的梯度波动较大,这会导致损失的突然变化,从而使得收敛陷入局部困境。

而观察(a)和(c)的红线可以看出,在head中添加BN后,损失的曲线会变得更加光滑,因此可以设置更大的学习率而不用担心发生梯度爆炸,从而带来更大的搜索空间以及更快的收敛。

从(b)和(c)的绿线可以看出,由于添加了BN,使得更大的学习率能够帮助网络跳出局部困境,并且产生更加稳定的梯度。

在整个网络中添加BN——在backbone和detection head中添加BN后,能够以更大的学习率(0.05)从scratch来训练SSD,从Table 1可以看出,可以达到78.7%的mAP。

2. 主干网络

VGG-16和ResNet-101是SSD最常使用的backbone,如下图所示:
在这里插入图片描述
通常来说ResNet-101比VGG-16的分类效果更好,但是当输入图像大小相对较小时,基于VGG-16的SSD比基于ResNet-101的SSD的性能更好。作者认为这是由于ResNet-101中的第一个卷积层(conv1_x,步长为2)采用了下采样操作, 而这一操作对检测小目标时的性能影响较大。
在这里插入图片描述

  • (a)ResNet-18:原始结构
  • (b)ResNet-18-A:移除了第一个最大池化层,也就是ResNet-18中的第二个下采样操作,带来的性能上的提升很小;
  • (c)ResNet-18-B:将conv1_x的步长由2变为1,也就是移除了ResNet-18中的第一个下采样操作,使得性能从73.1%提升至77.6%,带来了较大的性能提升。

结果说明,第一个卷积层上的下采样操作对检测性能会有不好的影响,尤其是在检测小目标的时候。

为了克服ResNet在进行目标检测时的限制,同时保持它强大的分类能力,本文对ResNet做出了改进,提出了一种新的结构,称为Root-ResNet,如上图(d)所示。它移除了第一个卷积层中的下采样操作(将步长由2变为1),同时将 7 × 7 7 \times 7 的卷积层替换为3个堆叠的 3 × 3 3 \times 3 卷积层,称为root block。当输入充足时,Root-ResNet能够从图像中发现更多的局部信息,因此在检测小目标时能够提取出更有用的特征。

除此之外,本文还将SSD中添加的4个额外的卷积层替换为4个残差块,添加到Root-ResNet的末端。每个残差块都有两个分支,一个分支是步长为2的 1 × 1 1 \times 1 卷积层;另一个分支包含步长为2的 3 × 3 3 \times 3 卷积层,和步长为1的 3 × 3 3\times 3 卷积层。


结论

本文分析了BN和下采样在检测网络中的重要性,不再采用预训练网络,而是直接从scratch开始训练检测网络。