Stitcher: Feedback-driven Data Provider for Object Detection 论文学习

Abstract

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

1. Introduction

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

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

在这里插入图片描述

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

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

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

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

2. 问题分析

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

2.1 图像分析

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

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

在这里插入图片描述

在这里插入图片描述

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

2.2 训练分析

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

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

在这里插入图片描述

3. Stitcher

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

3.1 图像层级操作 — Component Stitching

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

给定一组k(k=1,22,32...)k(k=1,2^2, 3^2...)张图片,我们要将它们的分辨率进行缩放,然后再拼接起来,这样其宽高比得到保留,即(h/k,w/k)(h/\sqrt k, w/\sqrt k)。这样通过图像拼接的方式,我们就可以得到更多的小物体,图像的尺度不均衡问题就得到了缓解。因为拼接图像与正常图像的大小一样,不会带来任何额外的计算量。除非特别说明,Stitcher实验都是按照图5(b)的方式进行。

由于正方形的限制,Stitching图片的个数(k=12,22,32...k=1^2, 2^2, 3^2...)是一个待研究的问题。为了让它更灵活,作者提供了另一个实现版本,沿着batch维度进行拼接,这样batch tensor形状就是(kn,c,h/k,w/k)(kn, c, h/\sqrt k, w/\sqrt k)。Tensor 像素点个数不变,而stitching个数就无需非得满足正方形要求了,如图5©所示。第5.4节详细介绍了 stitching order k。Stitcher 提供了动态的batch size,而tensor 大小保持一致,这就可以泛化到传统的多尺度训练(固定的batch size)。

在这里插入图片描述

3.2 训练模块 — 选取方式

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

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

aoho×woa_o \approx h_o \times w_o

Lsreg=Lao<AstL_s^{reg} = L_{a_o < A_s}^t

rst=LstLtr_s^t = \frac{L_s^t}{L^t}

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

3.3 时间复杂度

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

Stitcher 由组件stitching和选取范式构成。在stitching部分,使用最近邻插值法来缩小图片。由于COCO中图像的最长边是640像素,插值操作所需的计算量不高于2×64020.8M2\times 640^2\approx 0.8M乘法计算。与前向或反向传播相比,这个微不足道。例如,ResNet-50需要3.8G FLOPs(乘法和加法计算)来处理一张224×224224\times 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\%,如果在预训练中没有使用mixup操作。而在预训练和微调阶段都使用了mixup操作,则会提升1.2%1.2\% AP。相反,Stitcher 如果应用在了预训练阶段,可以提升2.3%2.3\%的AP。

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章