论文解读——An Analysis of Scale Invariance in Object Detection – SNIP

摘要

一篇分析了极端尺寸变化下的目标识别和检测技术。通过在不同的输入数据配置下对检测器进行训练,比较了检测器的特定尺寸设计和不变尺寸设计。通过评估不同网络架构在ImageNet上对小对象进行分类的性能,我们证明了CNNs对尺度变化的鲁棒性。在此分析的基础上,我们提出了一种图像金字塔在同一尺度上用于训练和测试的检测器。由于小对象和大对象分别在更小和更大的尺度下难以识别,因此我们提出了一种新的训练方案,称为图像金字塔尺度归一化(SNIP),它作为图像尺度的函数,选择性地将不同大小的对象实例做梯度反向传播。在COCO数据集上,我们的单个模型性能是45.7%,3个网络的集成获得了48.3%的mAP。我们使用现成的ImageNet-1000数据集做预训练模型,只有边界框的监督训练。

1.介绍

深度学习从根本上改变了计算机进行图像分类和目标检测的方式。在不到五年的时间里,AlexNet提出后,ImageNet分类的Top-5误差从15%下降到2%。这是具有1000个类的图像分类超越人类的性能。另一方面,在COCO数据集上,表现最好的检测器在50%覆盖率的情况下甚至只有62%的mAP。为什么 目标检测比图像分类更难?

                                               Figure 1. Fraction of RoIs in the dataset vs scale of RoIs relative to the image.

跨对象实例的大尺度变化,尤其是检测非常小对象的挑战是性能差异背后的一个因素。有趣的是对象实例相对于ImageNet(分类)和COCO(检测)中的图像中等尺寸分别为0.554和0.106。因此,COCO数据集中大多数对象实例都小于图像区域的1%。更糟糕的是,COCO数据集中最小和最大的10%对象实例的尺寸分别为0.024和0.472(导致了几乎20倍的规模变化!);参见图1。 这种检测器需要处理的尺度变化是巨大的,对卷积神经网络的尺度不变性提出了极大的挑战。此外,分类和检测数据集之间对象实例尺寸的差异也导致了对预先训练好的分类网络微调的同时,出现较大的域迁移问题。在本文中,我们首先提供了这些问题的验证,然后提出了一种称为图像金字塔归一化的训练方案,在COCO数据集上引出了一个最先进的目标检测器。

总结:分类和检测的难度差异主要因为检测数据集中包含大量小目标,检测器必须同时应对如此之大的尺度变化的样本, 这就导致了我们使用ImageNet(或其他分类)预训练模型时, 有严重的domain-shift问题.

为了减轻尺度变化和小对象实例带来的问题,已经有多种解决方案被提出。例如,来自浅层和深层相结合的多层特征用于检测小对象实例,采用空洞卷积来提高检测大型对象的感受野,在不同分辨率下的多层特征图上独立预测来捕获的不同尺度对象实例,运用上下文信息进行消歧,不同尺度上的训练,在图像金字塔的多个尺寸上进行推理并使用非最大抑制组合预测结果。

总结:解决尺度变化的各种方法如a.深浅特征融合 b.改变卷积核来识别大物体 c.每层独立的预测 d.多尺度训练/测试。主要可以分为两大类:Image Pyramid和Feature Pyramid,下图可以详细说明区别。

虽然这些架构的创新已经极大地帮助改进了目标检测,但与训练相关的许多重要问题仍然没有得到解决:

a.为了获得良好的目标检测性能,上采样图像是否至关重要?即使检测数据集中的图像典型大小是480×640,为什么通常的做法是上采样到800×1200?我们能否对来自ImageNet的低分辨率图像进行更小幅度的CNNs预训练,然后在检测数据集中对它们进行微调以检测小目标实例?

b.当从预训练图像分类模型上微调一个目标检测器,训练目标实例应该被限制在一个较窄的范围后适当的改变输入图像的尺度,或者应该在上采样输入图像后让所有的目标参与训练?

我们在ImageNet和COCO数据集上设计了控制实验来寻找这些问题的答案。在第3节中,我们通过不同尺度的图像作为输入来检查现有的ImageNet分类网络的性能来研究尺度变化的影响。我们还对CNN架构做了一些小的修改,用于对不同尺度的图像进行分类。这些实验表明了上采样对小目标检测的重要性。为了分析尺度变化对目标检测的影响,我们训练并比较了第5节中特定尺度和不变尺度检测器设计的性能。对于特定尺度的检测器,通过训练单独的检测器来处理尺度的变化-每个尺度范围有一个检测器。此外,在相似尺度的目标实例上训练检测器作为预训练分类网络有助于减少预训练分类网络的域迁移问题。但是特定尺度的设计也减少了每个尺度上训练样本的数量,从而降低了性能。另一方面,用所有的样本训练一个单目标检测器会使学习任务变得更加困难,因为网络需要在更大的尺寸范围内学习核过滤器来检测目标对象。

基于这些观察,我们在第6节中提出了一种新的训练范例,我们将其称为图像金字塔尺度归一化(SNIP),它可以在训练过程中从减少尺度变化上受益,而无需支付减少训练样本的代价。尺度不变性是使用图像金字塔实现的,它包含图像金字塔中某一个尺寸中的目标实例规范化输入表示。为了在训练过程中最小化分类网络的域迁移问题,我们只对感兴趣区域或者锚节点进行梯度反向传播,使其分辨率接近于预训练的CNN。由于我们使用上述约束在金字塔的每个尺度上进行训练,因此SNIP有效的利用训练期间可用的实例对象。我们所提出的方法是通用的,可以嵌入不同问题的训练管道,如实例分割、词法估计、时空动作检测——只要感兴趣的对象显示出大的尺度变化。

人们普遍认为,深度神经网络可以在足够的训练数据下学习应对大的尺度变化,但与此相反,我们发现SNIP比传统的目标检测训练范例有显著的改进。我们采用变形的RFCN作为基础网络在重叠率50%的基础上获得69.7%的mAP,比COCO数据集上的最新技术提高了7.4%。

2.相关工作

尺度空间理论主张学习表示法不随尺度变化,该理论已被应用于计算机视觉史上的许多问题。对于目标检测、词法估计、实例分割等问题,学习尺度不变表示对于目标的识别和定位至关重要。针对多尺度目标检测问题, 提出了多种解决方案。

现代的CNNs的深层上有很大的跨度,导致输入图片表示粗糙,这使得小目标检测非常具有挑战性。为了解决这个问题,现代的目遍检测器使用空洞卷积来增大特征图的分辨率,空洞卷积还保留了预训练网络的权重和感受野并且不会影响大目标上的性能。在训练过程中对图像进行1.5到2倍的上采样,在推理过程中进行4倍的上采样,这也是一种增加最终特征图分辨率的常见做法。由于靠近输入的层的特征图具有更高的分辨率,并且通常包含补充信息,这些特征要么结合较浅的层要么在不同分辨率上的特征层做独立预测。SDP、SSH或MS-CNN等方法在不同的层上进行独立预测,也确保较小的对象在更高分辨率层上训练,而较大的对象在较低分辨率上训练。这种方法以牺牲可能损害性能的高级语义特性为代价,提供更好的解决方案。

总结:在浅层预测小物体时, 是以牺牲语意抽象性来实现的.

FPN、Mask-RCNN、RetinaNet等方法采用金字塔表示,将浅层特征和深层特征相结合,至少可以获得更高层次的语义信息。但是,如果一个对象的尺寸是25×25像素,那么即使在训练过程中上采样因子为2,目标尺寸只扩大到50×50像素。注意,通常网络是对分辨率为224×224的图像进行预训练。因此即使是由特征金字塔网络生成的高级语义特征对于小目标的分类也毫无用处(对于高分辨率图像中的大目标可以进行类似的论证)。因此,将它们与浅层的特征相结合并不利于检测小对象,如图2所示:虽然特征金字塔可以有效地利用网络中所有层的特征,但对于检测非常小/大的目标来说,它们并不是图像金字塔的一个有吸引力的替代品。

总结:尽管Feature Pyramids 有效的综合了多卷积层特征图信息,但是对于very small/large objects 检测效果不是很好。若一个25x25的物体, 即使融合上采样x2后也仍然只有50x50. 距离预训练模型224x224还是有很大差距.

                                              Figure 2. The same layer convolutional features at different scales
                                              of the image are different and map to different semantic regions in
                                              the image at different scales.

最近,提出了一种用于检测人脸的锥体方法,其中所有对象的梯度在每个尺度在最大池化后反向传播。在不同尺度的人脸分类层中使用了不同的滤波器,这种方法对目标检测有局限性,因为在目标检测中每个类的训练数据是有限的,并且在外观,姿态等方面的变化比人脸检测要大得多。我们注意到,在R-FCN中为每个类添加特定比例的过滤器会损害目标检测的性能。文章[33]中指出,在推理阶段生成的图像金字塔和maxout被用于从一对尺度更接近预训练数据集分辨率中选择特征。在SPPNet和Fast-RCNN中也提出了类似的推理过程,使用标准的多尺度训练。我们探索了用于训练尺度不变的目标检测器的设计空间并建议对样本接近预训练网络的分辨率有选择的梯度反向传播。

Figure 3. Both CNN-B and CNN-B-FT are provided an upsampled low resolution image as input. CNN-S is provided a low resolution image as input. CNN-B is trained on high resolution images. CNN-S is trained on low resolution images. CNN-B-FT is pre-trained on high resolution images and fine-tuned on upsampled low-resolution images. ResNet-101 architecture is used.

3.多尺度的图像分类

在这一节中,我们研究了在训练和测试过程中提供不同分辨率的图像作为输入时对域偏移的影响。我们进行这种分析是因为最先进的检测器通常训练分辨率为800×1200像素,但是推理是在图像金字塔上进行的,其中包括用于检测小物体的更高分辨率,如1400×2000。

对比多尺度推理:首先我们通过对原始ImageNet数据集进行下采样,得到不同分辨率的图像,48×48,64×64,80×80,96×96和128×128。然后上采样到224×224,并作为输入提供给训练了224×224大小图像的CNN架构,称为CNN-B。图4(a)显示了具有ResNet-101主干的CNN-B的Top-1准确率。我们观察到,随着训练和测试图像分辨率差异的增加,性能下降也是如此。因此,测试未对网络进行训练的分辨率显然是次优的,至少在图像分类方面是这样。

解决特定的分类器:基于上述观察,改进小目标检测器性能的一个简单解决方案是在ImageNet上以不同的步长预训练分类网络。毕竟,在含小目标的CIFAR10上获得最佳性能的网络结构与在ImageNet数据集上是不同的。在ImageNet分类网络中第一个卷积层的stride为2,然后最大池化的stride为2×2,这可能会消除小目标中存在的大部分图像信号。因此对于48×48的图片我们采用步长为1,3×3的卷积核来训练ResNet-101,这是CIFAR的典型架构。同样,对于96×96大小的图片,第一层我们采用步长为2,5×5大小的卷积核。使用随机裁剪、色彩增强等标准的数据增广技术进行70次迭代对这些网络进行训练。如图4所示,这些网络(CNN-S)的性能明显优于CNN-B。因此对于低分辨率的图片的目标检测,可以采用具有不同体系结构的分类网络进行预训练。

Figure 4. All figures report accuracy on the validation set of the ImageNet classification dataset. We upsample images of resolution 48,64,80 etc. and plot the Top-1 accuracy of the pre-trained ResNet-101 classifier in figure (a). Figure (b,c) show results for different CNNs when the original image resolution is 48,96 pixels respectively.

微调高分辨率分类器:解决小目标检测问题的另一个简单解决方案是通过上采样低分辨率图像来微调CNN-B产生CNN-B-FT(图3)。通过上采样低分辨率图像的CNN-B-FT的性能是优于CNN-S的(图4)。实验表明,在高分辨率图像上学习的滤波器对低分辨率图像的识别也很有用。因此,与其将步长减少2倍,不如将样本图像上调2次,然后对预先在高分辨率图像上训练的网络进行微调。

在训练目标检测器时,我们可以使用不同的网络结构对不同分辨率的对象进行分类,也可以对所有分辨率使用同一个网络结构。由于在ImageNet上预训练的益处,在较大的目标实例上学习的过滤器有助于对较小的目标实例进行分类,因此上采样图像和使用对高分辨率图像进行预训练的网络应该比专门的网络更适合对小目标进行分类。幸运的是现有的目标检测器通过对图像进行上采样来检测较小的对象,而不是使用不同的体系结构。我们的分析支持这种做法,并将其与其他方法进行比较以强调区别。总结:CNN-B是原图训练,伪高清测试。 CNN-S是低清训练,低清测试。CNN-B-FT是原图训练, 伪高清微调 / 伪高清测试。三个网络都是在对小目标进行分类,不过CNN-S因为本身网络结构就不同,输入比较小,不需要经过upsample。最后结果,CNN-B-FT准确率最高,CNN-S其次,作者认为这是因为模型从高分辨率图像中得到了充分的学习。这就说明了,训练样本和输入样本如果分辨率存在太大误差,performance必然下降。与其为了小目标而专门使用改变网络结构(CNN-S),直接upsample和使用高分辨率图像预训练得到的模型是更好的选择(CNN-B-FT)。

4.背景

在下一节中,我们将讨论一些用于检测小目标的基线。我们简要描述了将在接下来的分析中使用的Deformable-RFCN检测器.D-RFCN在COCO数据集上获得了最好的单模型结果并且公开可用,所以我们使用这个检测器。D-RFCN是基于R-FCN检测器的,它在conv5层中添加了可变卷积用于自适应的改变网络接受域,从而为不同尺寸的目标创建尺度不变的表达。在每个卷积特征图上,一个轻量级的网络预测二维网格上的偏移量,二维网格是应用卷积核的空间子滤波器的空间位置。第二个改变是位置敏感的ROI池化。与来自卷积特征图上一组固定大小的池化不同,网络预测每个位置敏感过滤器(取决于特征图)的偏移量,在这个位置敏感ROI池化上被执行。

在我们的实验中,我们使用一个开源的D-RFCN检测器在800×1200单一分辨率(上采样后)上提取建议框。它有一个ResNet-101的主干,在800×1200分辨率上训练。在RPN中使用5中形状锚节点生成建议框。为分类这些建议框,我们使用带有ResNet-50作为主干不带变形位置敏感的ROI池化的D-RFCN。我们使用位置敏感的ROI池化方法来实现双线性插值,在最后一层中减少了三倍的过滤器数量。使用阈值为0.3的NMS。不与RPN一起执行端到端训练,使用ResNet-50和消除可变形PSRoI过滤器减少了3倍的训练时间并节省了GPU内存。

5.数据变化还是正确的比例?

第3部分的研究实证了在训练和测试截断之间分辨率的差异会导致性能的显著下降。不幸的是这种分辨率上的差异是当前对象检测管道的一部分——由于GPU内存限制,训练的分辨率(800*1200)低于测试分辨率(1400×2000)。本节分析了图像分辨率、目标实例规模和数据变化对目标检测器性能的影响。我们在不同的设置下训练检测器,并在1400×2000分辨率的图像上的小目标检测进行评估,只是为了区分影响性能的因素,结果如表1所示。

               Figure 5. Different approaches for providing input for training the classifier of a proposal based detector.

不同分辨率下的训练:我们从训练检测器开始,使用两个不同分辨率800×1400和1400×2000上的所有目标实例,分别称为800 all和1400 all,图5.1。正如预期的一样,1400 all的表现超过800 all,因为前者是在同样的分辨率(1400×2000)下进行训练和测试的。然而这种该啥只是微乎其微的。为什么?为了回答这个问题,我们考虑一下以如此大的分辨率下进行训练时中大型目标实例会发生什么情况。它们太大了,无法正确分类!因此,在更高分辨率下的训练会放大小目标,以获得更好的分类,但会放大中大型目标,从而降低性能。

尺寸特定的检测器:我们在1400×2000分辨率下训练另一个检测器,同时忽略所有中大型目标以消除超大目标的有害影响,图5.2。不幸的是,它的表现远比800 all差。发生了什么?由于忽略了中大型目标,我们失去了外观和姿态变化的一个重要来源,这些目标对性能的损害超过了消除极端尺度目标的好处。

多尺度训练:最后,我们评估了在训练过程中使用多分辨率随机采样图像获得尺度不变检测器的常见做法,称为MST 2,图5.3。它确保了在许多不同分辨率下观察到训练实例,但是它也在极小和极大目标情况下被降级。它的表现与800 all差不多。我们得出的结论是,用适当尺度的物体来训练检测器,同时尽可能的多捕捉物体之间的变化是很重要的。在下一节中,我们将描述我们的提出的解决方案,它完全实现了这一点,并显示出它优于当前的训练管道。

总结:本质上,这是因为CNN网络没有尺度不变形,没有把scale这个隐藏变量学习到的机制,只能通过大量参数来强行记忆不同scale的物体。而下面部分谈到的方法也很可能只是治标不治本,关键还是怎么把scale这个隐藏变量抽离出来,甚至可以直接学习;或者直接赋予网络学习scale的能力。在Object Detection中,为了提升测试针对不同scale物体的性能,大家一般会使用Multi-scale training/testing这样的测试时融合的技巧来提升结果。与SNIP做法最大的区别就在于Multi-scale的做法扩充了不同scale样本的数目,但是仍然要求CNN去fit所有scale的物体。通过这样的一个对比实验,SNIP非常solid地证明了就算是数据相对充足的情况下,CNN仍然很难使用所有scale的物体。个人猜测由于CNN中没有对于scale invariant的结构,CNN能检测不同scale的“假象”,更多是通过CNN来通过capacity来强行memorize不同scale的物体来达到的,这其实浪费了大量的capacity,而SNIP这样只学习同样的scale可以保障有限的capacity用于学习语义信息。

6.图像金字塔上的目标检测

我们的目标是将两种最好的方法结合在一起,即训练使用外观和姿态上有最大的变化,同时将尺度限制在一个合理的范围内。我们通过一种新的构造来实现这一点,我们将其称为图像金字塔尺度归一化(SNIP)。我们还讨论了在当前GPU内存范围内的图像金字塔上目标检测器的训练细节。

6.1.图像金字塔尺度归一化

SNIP是MST的一个修改版本,在这个版本中,只有哪些分辨率接近预训练数据集(通常为224×224)的目标实例被用于训练检测器。在多尺度训练(MST)中,每个图像的分辨率不同,因此,在高分辨率(比如1400×2000)时,大目标很难分类,而在低分辨率(480×800)时,小目标很难分类。幸运的是,每个对象实例都以几种不同的比例出现,其中一些出现在所需的比例范围内。为了消除过大或过小的极端尺度对象,只对落在所需尺度范围内的对象进行训练,而在反向传播过程中忽略其余对象。SNIP在训练过程中使用了所有的对象实例,这有助于捕获所有外观和姿势的变化,同时减少了预先训练的网络的规模空间中的域迁移问题。使用SNIP训练的检测器评估结果见表1 -它优于所有其他方法。实验证明了SNIP检测小目标的有效性。下面我们将详细讨论SNIP的实现。

Figure 6. SNIP training and inference is shown. Invalid RoIs which fall outside the specified range at each scale are shown in purple. These are discarded during training and inference. Each batch during training consists of images sampled from a particular scale. Invalid GT boxes are used to invalidate anchors in RPN. Detections from each scale are rescaled and combined using NMS.

对于分类器的训练,所有的真实框都被用来为建议框分配标签。在训练期间,我们不会选择超出特定分辨率的特定尺寸范围的建议框和真实框。在一个特定的分辨率中,如果ROI的区域在一个范围内,它被标记为有效的,否则标记为无效的。同样,RPN的训练也使用所有的真实框来为锚节点分配标签。最后,在训练过程中,那些重叠度大于0.3并无效真实框的锚节点被排除在外。在推理过程中,我们使用RPN生成每个分辨率的建议框,并在每个分辨率下分别进行分类,如图6所示。与训练类似,我们不会在每个分辨率中选择超出指定范围的检测。经过分类和边界框的回归,我们使用soft-NMS结合多分辨率检测得到最终的检测框,如图6所示。

池化后的ROI分辨率与预训练的网络匹配,所以在微调过程中网络更容易学习。对于像R-FCN这样将ROI分解为子部分并使用位置敏感过滤器的方法,这就变得更加重要了。例如,如果ROI的大小是48个像素(conv5 feature map中的3个像素),并且每个轴上有7个过滤器,那么特性和过滤器之间的位置对应就会丢失。

6.2.采样子图片

对ResNet-101或DPN-92[6]等深网络的高分辨率图像进行训练需要更多的GPU内存。因此,我们对图像进行裁剪,使其适合GPU内存。我们的目标是生成最小大小为1000x1000的子图像,它覆盖了图像中的所有小对象。这有助于加速训练,因为在没有小物体的地方不需要计算。为此,我们生成50个随机定位的子图片,每个图像大小为1000x1000。选择覆盖最大对象数量的图片并添加到我们的训练图像集。在覆盖图像中的所有对象之前,我们对其余对象重复采样和选择过程。由于图片是随机生成的,而且建议框通常在图像边界上有一面,为了加快采样过程,我们将子图片贴到图像边界上。我们发现,1400x2000大小的图像平均产生了1.7个1000x1000大小的图片。当图像分辨率为800x1200或480x640或图像不包含小目标时,不需要此采样步骤。随机裁剪不是我们观察检测器性能改善的原因。为了验证这一点,我们使用未裁剪的高分辨率图像(1400x2000)训练ResNet-50(因为它需要更少的内存),并且没有观察到地图的任何变化。

总结:

在训练时,每次回传那些大小在一个预先指定范围内的proposal的gradient,而忽略掉过大或者过小的proposal;在测试时,建立大小不同的Image Pyramid,在每张图上都运行这样一个检测器,同样只保留那些大小在指定范围内的输出结果,最终NMS,保证网络总是在同样scale的物体上训练。

本质上,这是因为CNN网络没有尺度不变形,没有把scale这个隐藏变量学习到的机制,只能通过大量参数来强行记忆不同scale的物体。而下面部分谈到的方法也很可能只是治标不治本,关键还是怎么把scale这个隐藏变量抽离出来,甚至可以直接学习;或者直接赋予网络学习scale的能力。

MST---randomly sampled images at multiple resolutions during training  暴力扩充多尺度的样本.Multi-scale的做法扩充了不同scale样本的数目,但是仍然要求CNN去fit所有scale的物体。通过这样的一个对比实验,SNIP非常solid地证明了就算是数据相对充足的情况下,CNN仍然很难使用所有scale的物体。个人猜测由于CNN中没有对于scale invariant的结构,CNN能检测不同scale的“假象”,更多是通过CNN来通过capacity来强行memorize不同scale的物体来达到的,这其实浪费了大量的capacity.

SNIP----- training is only performed on objects that fall in the desired scale range and the remainder are simply ignored during back-propagation.只学习同样的scale可以保障有限的capacity用于学习语义信息。将尺度这个隐藏变量分离开来了.

7.数据集和评估

我们在COCO数据集上评估我们的方法。COCO包含12.3万张用于训练和评估的图片,在测试集中对20288张图片进行评估。由于COCO的评估服务没有提供建议框召回指标,我们在11.8万张图片上做了训练,并报告了召回情况——包括5000张图片(通常称为minival集)。除非特别提到,小物体的面积小于32x32,中等物体的范围在32x32到96x96之间,大物体的面积大于96x96。

原文中后面章节内容是一些训练参数等设置和效果对比,在此就不做翻译了。如有兴趣可进原文查看:

论文连接:https://arxiv.org/abs/1711.08189

猜你喜欢

转载自blog.csdn.net/neil3611244/article/details/81557599