前言
一般在进行目标检测时,通常会使用在大型数据集上经过预训练的分类网络,然后在此基础上进行微调。这样做虽然能够得到较好的检测性能,但会存在一些限制:
- 分类任务和检测任务对目标位置的敏感程度是不同的。分类任务偏向于平移不变性,因此会采取一些下采样操作以得到更好的性能。而对于检测任务来说,一些局部的上下文信息是非常重要的,因此在采取平移不变操作时需要十分谨慎,否则就会丢失一些局部信息。
- 在微调时修改网络结构是很不方便的,但如果采用另一种新的网络结构,那么又要在大型数据集上重新进行预训练,耗时耗资源。
如果从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,并且使得优化曲线更加光滑,进而可以