天天看点

Stitcher: Feedback-driven Data Provider for Object Detection 论文学习Abstract1. Introduction2. 问题分析3. Stitcher4. 学术背景

Abstract

目标检测器通常会根据尺度的大小而有不同的表现,在小物体上的表现是最不好的。本文中,作者研究了该现象,发现:在训练的大多数迭代中,小物体几乎不对整体损失做贡献,优化不均衡造成模型的表现很差。受此启发,本文提出了Stitcher,它是一个反馈驱动的数据提供器,以均衡的方式来训练目标检测器。在Stitcher中,图像会被缩小,然后拼接起来组成一张正常的图像。拼接后的图像里面所包含的物体更小,有利于小物体的检测,然后将损失统计信息作为反馈来指导下一步的迭代更新。作者针对多个检测器、主干网络、训练周期、数据集,甚至实例分割上进行实验。Stitcher 在所有的设定中,都可以稳定地提升模型性能,尤其是对于小物体,在训练和测试阶段都不会增加额外的计算成本。

1. Introduction

深度目标检测器的表现差别很大。目标检测器尤其受到尺度差异的影响,检测小物体就非常困难。例如,在 ResNet-50 FPN 的结果( A P : 36.7 % , A P s : 21.1 % , A P m : 39.9 % , A P l : 48.1 % AP:36.7\%, AP_s: 21.1\%, AP_m:39.9\%, AP_l:48.1\% AP:36.7%,APs​:21.1%,APm​:39.9%,APl​:48.1%)中,在小物体上的准确率几乎是中等物体和大物体的一半,这是由于不同尺度下不均衡训练造成的。这个问题降低了整体的表现,使得目标检测器无法在复杂场景下通用。一个合理的解释就是,在小物体上的监督信号是不充分的。

监督信号可以通过训练损失来反映。作者研究了不同尺度的损失分布,在图1中作了展示。该统计信息是在 Faster R-CNN 上得到的,其主干网络为 ResNet-50和FPN,在MS COCO数据集上训练。根据物体的大小将其分为小、中、大的尺度。具体点,在迭代 t t t中,小物体的损失 L s t L_s^t Lst​ 所反映的物体大小是小于1024的。 r s t r_s^t rst​表示在当前迭代中, L s t L_s^t Lst​与整体损失 L t L^t Lt的比值。值得注意的是,在超过 50 % 50\% 50%的迭代中, r s t r_s^t rst​都非常小(小于0.1),如图1所示。缺乏小物体的信息就导致模型训练不均衡,表现差。

Stitcher: Feedback-driven Data Provider for Object Detection 论文学习Abstract1. Introduction2. 问题分析3. Stitcher4. 学术背景

本文中,作者提出了Stitcher,它是一个反馈驱动的数据提供器,以反馈的方式使用训练损失,从而增强目标检测的性能。在Stithcer中,我们将多个缩小后的图像拼接为一个正常大小的图片。其核心思想就是,将当前迭代的损失信息作为反馈,自适应地决定下一步的输入。如图3所示,如果当前迭代 t t t中的小物体损失比值 r s t r_s^t rst​很小,那么 t + 1 t+1 t+1步的输入拼接图像,就会包含更多的小物体。否则,在默认设定下,输入图像就是正常的图片。图像拼接缓解了输入特征空间中,图像层级不均衡的问题。同时,该反馈的方式也缓解了优化不均的问题。这样,目标检测就会更加平衡。

在实验中,作者在多个检测框架(Faster R-CNN, RetinaNet)、主干网络(ResNets, ResNeXts)、训练方式( 1 × , 2 × 1\times, 2\times 1×,2×)、数据集(COCO, VOC),甚至实例分割上验证了Stitcher的有效性。在所有这些设定中,本文方法都能提升不少准确率,如图2所示,尤其是对小物体而言。由于Stitcher包含了多个尺度的图像,作者也将Stitcher和多尺度训练进行了比较。多尺度训练需要更长的训练时间,但是表现不如Stitcher。

Stitcher可以非常容易地融入到其它检测器中。它几乎不会给训练和推理带来任何的额外成本。额外的成本只存在于损失信息的计算与图像拼接中,这与前向和反向传播的计算比起来不值得一提。

下面,作者首先分析现有的问题,然后引入本文方法。在第4部分,作者会介绍Stitcher与其它方法的关系。第5部分介绍试验结果。

2. 问题分析

目标检测器的性能会随着尺度变化而变化。这一部分,作者会通过实验分析解释该现象。

2.1 图像分析

量化分析。图像中的小物体非常常见,在不同的图片中,其分布是不可预测的。如表1所示,COCO训练集中 41.4 % 41.4\% 41.4%的物体是小物体,要比另两个尺度的物体数量多得多。但是,只有 52.3 % 52.3\% 52.3%的图片包含小物体。相反,包含中等物体和大物体的图像比例为 70.7 % 70.7\% 70.7%和 83.0 % 83.0\% 83.0%。在一些图片中,大多数的物体是小物体,而接近一半的图片是不包含小物体的。该不均衡阻碍了训练。

量化分析。在正常图像中,由于成像的问题,物体通常会比较模糊,要么失焦,要么运动模糊。如果我们缩小正常大小的图片,中等物体或大物体也会变得较小,但是其轮廓或细节会比本身就小的物体要清楚一些。在图4中,从较大尺度缩放得到的足球要比风筝更加清晰,尽管它们的大小相近,分别是 29 × 31 29\times 31 29×31和 30 × 30 30\times 30 30×30。

Stitcher: Feedback-driven Data Provider for Object Detection 论文学习Abstract1. Introduction2. 问题分析3. Stitcher4. 学术背景
Stitcher: Feedback-driven Data Provider for Object Detection 论文学习Abstract1. Introduction2. 问题分析3. Stitcher4. 学术背景

上述分析启发了作者提出stitching。

2.2 训练分析

本章节通过损失的统计数据,分析在训练过程中,尺度造成的问题。作者使用了COCO数据集中的 trainval35k 数据集,用于训练和评价。在ImageNet上预训练的 ResNet-50和FPN 作为主干网络。作者将Faster R-CNN训练了1个周期(90K)。所有的训练设定,包含学习率、momentum、weight decay和batch size都按照默认值来。在训练过程中,作者记录每个迭代中三个尺度的损失值。根据这些统计信息,图1 展示了不同尺度下的损失分布。

小物体在图像中有着不均匀的分布,这就给训练带来了不均衡的问题。尽管在某些图像中包含了小物体,但在训练过程中它们有可能被忽略。图1显示,在超过 50 % 50\% 50%的迭代中,小物体对整体损失的贡献不足 10 % 10\% 10%。训练损失主要由中等或大物体主导。因此,小物体的监督信号不充分,严重伤害了小物体的准确率,甚至整体表现。该现象促使作者提出了Stitcher。

Stitcher: Feedback-driven Data Provider for Object Detection 论文学习Abstract1. Introduction2. 问题分析3. Stitcher4. 学术背景

3. Stitcher

根据之前的分析,不同尺度下的不均衡问题始于图像层级,但在训练过程中变得更糟。受此启发,作者深入研究了该问题,如何缓解尺度不均衡问题,尤其是对小物体。至此,作者提出了一个新的训练策略,Stitcher。它由2个不同的阶段组成,在图像和训练层级中。

3.1 图像层级操作 — Component Stitching

在表1的数据中,训练集中接近一半的图片没有小物体。该不均衡现象会极大地影响 mini-batch 优化。为了解决该问题,作者提出了Stitcher,一个自适应数据生成器,动态地提供拼接后的图片或原始图片,受惩罚信号指导。

给定一组 k ( k = 1 , 2 2 , 3 2 . . . ) k(k=1,2^2, 3^2...) k(k=1,22,32...)张图片,我们要将它们的分辨率进行缩放,然后再拼接起来,这样其宽高比得到保留,即 ( h / k , w / k ) (h/\sqrt k, w/\sqrt k) (h/k

​,w/k

​)。这样通过图像拼接的方式,我们就可以得到更多的小物体,图像的尺度不均衡问题就得到了缓解。因为拼接图像与正常图像的大小一样,不会带来任何额外的计算量。除非特别说明,Stitcher实验都是按照图5(b)的方式进行。

由于正方形的限制,Stitching图片的个数( k = 1 2 , 2 2 , 3 2 . . . k=1^2, 2^2, 3^2... k=12,22,32...)是一个待研究的问题。为了让它更灵活,作者提供了另一个实现版本,沿着batch维度进行拼接,这样batch tensor形状就是 ( k n , c , h / k , w / k ) (kn, c, h/\sqrt k, w/\sqrt k) (kn,c,h/k

​,w/k

​)。Tensor 像素点个数不变,而stitching个数就无需非得满足正方形要求了,如图5©所示。第5.4节详细介绍了 stitching order k。Stitcher 提供了动态的batch size,而tensor 大小保持一致,这就可以泛化到传统的多尺度训练(固定的batch size)。

Stitcher: Feedback-driven Data Provider for Object Detection 论文学习Abstract1. Introduction2. 问题分析3. Stitcher4. 学术背景

3.2 训练模块 — 选取方式

拼接图像可能包含更多的小物体,什么时候利用它们则看情况而定。如图1所示,超过 50 % 50\% 50%的迭代中,小物体所贡献的损失不足 10 % 10\% 10%。为了避免这个问题,作者提出了一个新的方法,根据当前迭代的反馈信息来决定下一个迭代的输入。如果在第 t t t个迭代,小物体的损失非常小,就认为小物体的信息非常匮乏。为了补偿该信息的匮乏,作者使用拼接图片来作为第 t + 1 t+1 t+1个迭代的输入。否则,就使用正常的图片。

为了计算小物体损失在所有尺度的比例,作者采用了下面的方式。直接点说,物体的尺度由mask 区域决定,而这只存在于分割任务上。但是,对于通用的目标检测,ground truth masks 是没有的。因此,作者使用边框区域代替。在等式1,对于物体 o o o,它的区域 a o a_o ao​可以通过它的边框来近似表示,记作 h o × w 0 h_o \times w_0 ho​×w0​。 L s t L_s^t Lst​表示小物体的损失,其面积 a o a_o ao​不大于 A s A_s As​(COCO中默认的是1024)。小物体的比例可以用下面等式来获取:

a o ≈ h o × w o a_o \approx h_o \times w_o ao​≈ho​×wo​

L s r e g = L a o < A s t L_s^{reg} = L_{a_o < A_s}^t Lsreg​=Lao​<As​t​

r s t = L s t L t r_s^t = \frac{L_s^t}{L^t} rst​=LtLst​​

比值 r s t r_s^t rst​可以作为反馈来指导下一步的迭代。该策略会平衡损失的分布,有助于优化。作者在图6中可视化了损失的分布,在图7中可视化了表现的差异。作者每1万次就计算一次统计数据。它反映了,利用Stitcher方法,不同尺度上损失的分布会变得平滑,可以得到更高的准确率。

3.3 时间复杂度

Stitcher只在训练时使用,所以在推理时不会带来任何成本。这里作者详细介绍它训练时的时间复杂度。

Stitcher 由组件stitching和选取范式构成。在stitching部分,使用最近邻插值法来缩小图片。由于COCO中图像的最长边是640像素,插值操作所需的计算量不高于 2 × 64 0 2 ≈ 0.8 M 2\times 640^2\approx 0.8M 2×6402≈0.8M乘法计算。与前向或反向传播相比,这个微不足道。例如,ResNet-50需要3.8G FLOPs(乘法和加法计算)来处理一张 224 × 224 224\times 224 224×224的图像。在选取范式中,我们需要计算每个选中的ground truth边框的面积。但是,每次只会有部分被保留下来。这一步的计算量也很少。

除了理论分析,作者也计算了Stitcher实际的运行时间。如果需要stitched 图像,大约这一步会给正常训练额外增加0.02秒。对于基线模型(使用ResNet-50-FPN的Faster R-CNN),总体的训练时间大约是8.7小时。在相同的设备上跑,使用了Stitcher会增加大约15分钟。如果使用了更大的主干网络,这个差距会收缩。

4. 学术背景

本文工作与之前的一些工作都息息相关。

多尺度图像金字塔 这是传统地、直观地处理尺度差异问题的方法。在人工特征时代就很流行,比如SIFT和HOG。如今,基于CNN的目标检测器也能从多尺度训练和测试中获益,图像会被随机缩放为不同的分辨率。因此,这一步学到的特征对尺度变化更加鲁棒。

与多尺度训练相似,Stitcher 设计的目的也是能更加鲁棒地应付尺度变化。但是,有2个核心差异。(1) Stitcher 既不需要构建金字塔,也不需要调整输入大小。Stitched图像与正常图像大小一样,极大地缓和了计算量负担,而在图像金字塔中,计算量很大。(2) Stitcher中的物体尺度由损失分布来自适应地决定。与图像金字塔相反,在每一步中,随机选择不同大小的图片。这样,其表现要比多尺度训练更好。

SNIP和SNIPER 这俩方法是图像金字塔策略中比较高级的。SNIP在多尺度训练中,归一化物体的尺度。每个尺度都有一定的范围,如果物体的ROI落在其外,则被认为是无效的。SNIPER 将图像区块作为训练数据,而不是正常的图片。它将ground truth 实例的区域裁剪出来,作为正样本,然后采样背景区域作为负样本。

Stitcher 操作与SNIPER有着本质的不同。SNIPER中的裁剪操作要更复杂一些,需要计算ground truth边框和用于标签赋值裁剪的IOU。但是,Stitcher中的stitch操作只包含插值和concat操作。此外,由于SNIP和SNIPER依赖于多尺度测试,它们会增加推理时间。

Mixup Mixup方法首先应用于图像分类中,为了减轻对抗扰动。随后,它用在了目标检测领域。它将图像像素混合起来,通过一个经验 mixup 比值将ground truth 标签融合,从而进行调整。从操作方面来说,stitching和mixup都很简洁。

关于性能,Stitcher 要优于mixup。Mixup可以提升基线模型的AP 0.2 % 0.2\% 0.2%,如果在预训练中没有使用mixup操作。而在预训练和微调阶段都使用了mixup操作,则会提升 1.2 % 1.2\% 1.2% AP。相反,Stitcher 如果应用在了预训练阶段,可以提升 2.3 % 2.3\% 2.3%的AP。

Auto Augmentation 该方法会学习数据增广的策略。其搜索空间包含若干个预训练增广策略。它使用搜索算法,如增强学习来优化数据增广策略。随后,我们用表现最好的方法来重新训练模型。

自动增广需要数千个GPU天数,在线下进行完备的搜索,这与作者的目的背道而驰。但是,Stitcher的表现与Auto augmentation相似,Auto augmentation可以提升 1.6 % 1.6\% 1.6%,而Stitcher可以提升 1.7 % 1.7\% 1.7%,基线模型是Faster R-CNN,主干网络是ResNet-50。此外,auto augmentation会使用更多复杂的变换,如颜色操作(相等化,亮度)以及几何操作(旋转、修剪等)。

Scale-aware Network 与操作图片相反,另一个处理尺度差异的思路就是 scale-aware 神经网络,通常有2类:基于特征金字塔的方法,基于膨胀的方法。关于特征金字塔方法,SSD 使用不同的尺度来检测物体,在对应的层将特征图作为输入。FPN在所有的尺度上,引入了侧路连接来构建高层级语义特征金字塔。另一方面,基于膨胀的方法会调节物体的感受野。变形卷积网络DCN使用膨胀卷积来调节感受野。Trident 网络由多个分支构成,使用不同的膨胀率来产生具体尺度的特征。

继续阅读