前言
本文总结了能够增强目标检测网络性能的一些有效的方法,也就是训练过程使用到的一些tricks,这些方法在inference时并不会引入额外的计算消耗。本文的主要贡献如下:
- 系统地评估了不同目标检测流程中应用的多种训练tricks,为未来的研究提供了很有价值的参考;
- 借鉴分类问题中的mixup技术,提出了一种适合于目标检测网络的视觉连贯的image mixup方法,实验证明该方法能够提升模型的泛化能力;
- 扩展了目标检测中数据扩增领域的研究深度,增强了模型的泛化能力,有助于减少过拟合问题;
- 在不改变网络结构的情况下,应用本文中的tricks使得模型实现了5%的精度提升,并且这一提升不会带来额外的inference cost。
bag of freebies
本文共提到6种训练时的通用tricks,接下来一一对它们进行说明。
1. visually coherent image mixup for object detection(mixup数据扩增)
实验证明mixup能够缓解分类网络中的对抗性干扰,图像分类任务中的mixup的主要思想是,通过混合像素作为训练图像对儿之间的插值来规范化神经网络,以支持简单的线性行为;与此同时,使用相同的比例对one-hot图像标签进行混合。下图是图像分类中mixup的一个例子,混合比例(mixup ratio)为0.1:0.9,两个图像在所有像素上是均匀混合的,而混合后的图像标签是原始one-hot标签向量的加权和。
mixup算法中混合比例(blending ratio)的分布是从beta分布中提取的。Rosenfeld等人进行了一系列有趣的实验,称为"elephant in the room",具体来说就是,将一个调整过大小的大象图片随机放到一个自然图像上,也就是给这个自然图像“打补丁”,然后使用该对抗图像去挑战现有的目标检测模型。结果表明,现有的目标检测模型能够简化这种攻击,无力处理这种移植目标。
在本文的实验中,继续增加mixup的混合比例,会发现最后得到的目标更加生动,与自然的图像表示更加一致,类似于在观看低FPS电影时通常观察到的过渡帧。更高混合比例的mixup如下图所示。在图像分类任务中mixup时,需要将两个图像调整为相同大小。而在目标检测中如果将图像调整为相同大小会造成图像畸变,检测任务对于这种变化较为敏感,因此作者采用保留图像几何形状的对齐方式对图像进行mixup。
为了验证mixup在目标检测中是否有效,作者使用YOLOv3在Pascal VOC数据集上对不同的混合比例分布进行测试,结果如下表所示,结果说明采用mixup确实对检测性能有所提升,和都为1.5时的效果是最好的。由此作者认为在目标之间相互遮挡很常见的检测中,可以鼓励网络观察那些异常拥挤的块,这些块既可以是自然形成的,也可以通过对抗技术生成。
为了说明mixup的有效性,作者也进行了"elephant in the room"实验,将一个大象的图像在一个室内房间的图像上进行滑动。作者在COCO 2017数据集上采用相同的设置训练了两个YOLOv3模型,一个采用本文的mixup方法,一个不采用mixup方法,实验结果如下图所示,可以看到,原始YOLOv3模型并不能完美检测出房间中的大象,一方面是由于严重的遮挡,另一方面是因为缺少上下文信息,毕竟在厨房中捕获大象的信息在现实中也是不可能的。而采用本文的mixup方法的YOLOv3模型更鲁棒,虽然它给目标的平均分数都较低,但这并不影响结果。
作者还评估了针对大象滑过的fake video的模型性能,结果如下表所示,可以看到采用本文的mixup的模型在室内场景中检测大象的能力更强(94.12vs42.95),并且mixup模型能够在严重遮挡的情况下保留较多的拥挤的家具,作者认为这是由于mixup模型在训练时会面临更多的挑战,因为在训练时已经有一些随机生成的具有视觉欺骗性的图像,因此在处理不自然的场景和拥挤的目标时,比原始模型的表现更好。
2. classification head label smoothing
对于每个目标,检测网络会通过softmax函数计算该目标对于所有类别的一个概率分布:
其中是直接取自最后一个线性层的未被归一化的结果,以进行分类预测。在训练时,分类损失是由输出分布和gt分布得到的:
是一个one-hot分布,即一个一维向量,维数是类别数目,仅目标所属类别为1,其余都为0。那么这里就出现一个问题,softmax仅在远大于时,才能接近这种分布,但永远达不到。这就很容易使得模型的置信度过高,出现过拟合问题。
而label smoothing就是对gt的分布放松处理,将范围的上下限放松,不再僵硬地取1和0这两个值,这样可以降低模型的置信度,一定程度上可以使模型易于收敛,避免过拟合问题的出现。对gt分布的smoothing处理为:
其中是类别的总数,是一个很小的常量。
3. data preprocessing(数据预处理)
在图像分类任务中,经常会用到一些数据扩增的方法,但是有些方法并不适用于目标检测,尤其是关于图像几何变换的方法,因为检测网络对于这种变换不是很鲁棒。
数据增强的一般方法大致如下:
- 随机几何变换:随机裁剪,随机扩张,随机水平翻转和随机调整大小;
- 随机颜色抖动:亮度,色调,曝光度和对比度。
检测网络一般可分为两种类型:single-stage和multi-stage。在single-stage检测网络中,最终的检测结果是基于特征图上的anchor得到的,比如SSD和YOLO,检测结果与输入图像的空间形状是成比例的。而在multi-stage检测网络中,RPN阶段产生大量的RoI,然后通过RoI pooling或RoIAlign进行裁剪,获取统一尺度的RoI,根据这些RoI获得检测结果。
由于multi-stage检测网络在特征图上进行了大量的裁剪操作,这可以替代对输入图像的随机裁剪操作,因此这类网络在训练时不需要额外的几何扩增方式,这也是single-stage和multi-stage检测网络的主要区别。
4. training schedule revamping(训练策略改进)
在训练时,开始时的学习率通常是一个相对较大的数,然后在训练过程中逐渐变小。step schedule是使用最多的学习率策略,当达到预设的epoch或iteration时,就将学习率与一个小于1的常数相乘,这会导致学习率的陡然变化,从而使模型学习发生震荡而变得不稳定。Loshchilov等人提出一种更平滑的cosine学习率,它根据cosine函数在0到pi之间的值对学习率进行缩放。刚开始的时候缓慢地降低大学习率,然后中途迅速降低学习率,最后以小斜率再次缓慢降低小学习率直到其降为0。
warmup学习率是另一种常用的训练策略,以避免在训练的初始迭代过程中发生梯度爆炸。warmup学习率策略对几种目标检测算法来说是至关重要的,比如YOLOv3,YOLOv3在最开始的迭代中负样本的梯度占主要部分。
采用cosine与合适的warmup策略进行训练能得到更好的验证准确度,即在训练初期采用warmup避免梯度爆炸问题,后续迭代采用cosine策略使学习率缓慢降低,如下图所示,采用cosine学习率衰减策略比step学习率策略所得到的mAP更好。
5. synchronized batch normalization
近年来为应对大量计算资源的需求,通常会在多个GPU上进行训练,以加快训练速度。在这种情况下,一个batch会被分割成几个较小的batch在不同的GPU上进行训练,这虽然能够加快训练速度,但由于batch的变小,在计算过程中可能导致统计信息略有不同,从而限制了batch normalization的作用。这对于ImageNet分类任务来说并不是一个重要的问题,但会损害对batch敏感的任务的性能。因此采用synchronized batch normalization。
6. random shapes training for single-stage object detection networks(输入图像的多尺度训练)
许多single-stage目标检测网络都是用固定大小的图像来训练的,为了降低过拟合的风险以及提升网络的泛化能力,在YOLOv3中提出多尺度训练策略,每隔10个iterations就会变化训练图像的尺寸,这样做可以实现跨尺度融合,也使得模型能够适应不同的图像输入大小。