用于目标检测的特征金字塔网络
论文题目:Feature Pyramid Networks for Object Detection
论文是FAIR发表在CVPR 2017的工作
paper地址
Abstract
特征金字塔是识别系统中用于检测不同尺度对象的基本组件。但最近的深度学习对象检测器避免了金字塔表示,部分原因是它们是计算和内存密集型的。在本文中,我们利用深度卷积网络固有的多尺度、金字塔层次结构来构建具有边际额外成本的特征金字塔。开发了一种具有横向连接的自顶向下架构,用于构建所有尺度的高级语义特征图。这种称为特征金字塔网络 (FPN) 的架构在多个应用程序中显示出作为通用特征提取器的显着改进。在基本的 Faster R-CNN 系统中使用 FPN,我们的方法在 COCO 检测基准上实现了最先进的单模型结果,没有花哨的东西,超过了所有现有的单模型条目,包括来自 COCO 2016 挑战赛获胜者的条目。此外,我们的方法可以在 GPU 上以 5 FPS 的速度运行,因此是多尺度目标检测的实用且准确的解决方案。代码将公开。
1. Introduction
在截然不同的尺度上识别物体是计算机视觉中的一项基本挑战。建立在图像金字塔之上的特征金字塔(我们简称为这些特征化图像金字塔)构成了标准解决方案的基础 [1](图 1(a))。这些金字塔在某种意义上是尺度不变的,因为对象的尺度变化会通过移动金字塔中的水平来抵消。直观地,此属性使模型能够通过在位置和金字塔级别上扫描模型来检测大范围内的对象。
特征化图像金字塔在手工设计特征的时代被大量使用 [5, 25]。它们是如此关键,以至于像 DPM [7] 这样的物体检测器需要密集尺度采样才能获得良好的结果(例如,每倍频程 10 个尺度)。对于识别任务,工程特征在很大程度上已被深度卷积网络 (ConvNets) [19、20] 计算的特征所取代。除了能够表示更高级别的语义之外,ConvNets 还对尺度变化更稳健,因此有助于识别在单个输入尺度上计算的特征 [15、11、29](图 1(b))。但即使具有这种稳健性,仍然需要金字塔来获得最准确的结果。 ImageNet [33] 和 COCO [21] 检测挑战中的所有最新顶级条目都对特征化图像金字塔(例如 [16、35])使用多尺度测试。对图像金字塔的每一层进行特征化的主要优点是它产生了多尺度特征表示,其中所有层在语义上都很强,包括高分辨率层。
然而,对图像金字塔的每一层进行特征化都有明显的局限性。推理时间显着增加(例如,增加了四倍 [11]),使得这种方法对于实际应用不切实际。此外,在图像金字塔上端到端训练深度网络在内存方面是不可行的,因此,如果利用图像金字塔,图像金字塔仅在测试时使用 [15、11、16、35],这会造成训练之间的不一致/测试时间推断。由于这些原因,Fast and Faster R-CNN [11, 29] 选择在默认设置下不使用特征化图像金字塔。
然而,图像金字塔并不是计算多尺度特征表示的唯一方法。深度 ConvNet 逐层计算特征层次结构,并且通过子采样层,特征层次结构具有固有的多尺度金字塔形状。这种网络内特征层次结构产生不同空间分辨率的特征图,但引入了由不同深度引起的大语义差距。高分辨率图具有低级特征,会损害其对象识别的表示能力。
Single Shot Detector (SSD) [22] 是首次尝试使用 ConvNet 的金字塔特征层次结构,就好像它是特征化图像金字塔一样(图 1(c))。理想情况下,SSD 风格的金字塔将重用前向传播中计算的不同层的多尺度特征图,因此是免费的。但是为了避免使用低级特征,SSD 放弃重用已经计算的层,而是从网络的高层开始构建金字塔(例如,VGG 网络 [36] 的 conv4 3),然后添加几个新层。因此它错过了重用特征层次结构的高分辨率图的机会。我们表明这些对于检测小物体很重要。
本文的目标是自然地利用 ConvNet 特征层次结构的金字塔形状,同时创建一个在所有尺度上都具有强语义的特征金字塔。为了实现这一目标,我们依赖于一种架构,该架构通过自上而下的路径和横向连接将低分辨率、语义强的特征与高分辨率、语义弱的特征相结合(图 1(d))。结果是一个特征金字塔,它在所有级别都具有丰富的语义,并且可以从单个输入图像尺度快速构建。换句话说,我们展示了如何创建网络内特征金字塔,这些金字塔可用于在不牺牲表征能力、速度或内存的情况下替换特征化图像金字塔。
图 1. (a) 使用图像金字塔构建特征金字塔。特征是在每个图像尺度上独立计算的,这很慢。 (b) 最近的检测系统选择仅使用单一尺度特征来进行更快的检测。 © 另一种方法是重用由 ConvNet 计算的金字塔特征层次结构,就好像它是一个特征化的图像金字塔一样。 (d) 我们提出的特征金字塔网络 (FPN) 与 (b) 和 © 一样快速,但更准确。在此图中,特征图由蓝色轮廓表示,较粗的轮廓表示语义上更强的特征。
采用自上而下和跳过连接的类似架构在最近的研究中很流行 [28、17、8、26]。他们的目标是生成一个高分辨率的单一高级特征图,并在其上进行预测(图 2 顶部)。相反,我们的方法将架构用作特征金字塔,其中在每个级别上独立进行预测(例如,对象检测)(图 2 底部)。我们的模型呼应了一个特征化的图像金字塔,这在这些作品中没有被探索过。
图 2. 顶部:具有跳跃连接的自上而下架构,其中预测是在最精细的级别上进行的(例如,[28])。底部:我们的模型具有相似的结构,但将其用作特征金字塔,并在所有级别上独立进行预测。
我们在各种检测和分割系统中评估我们的方法,称为特征金字塔网络 (FPN) [11、29、27]。没有花里胡哨的东西,我们仅基于 FPN 和基本的 Faster R-CNN 检测器 [29] 在具有挑战性的 COCO 检测基准 [21] 上报告了最先进的单一模型结果,超过了所有现有的重度工程竞赛获胜者的单模型参赛作品。在消融实验中,我们发现对于边界框提议,FPN 将平均召回率 (AR) 显着提高了 8.0 个点;对于目标检测,它在 ResNets [16] 上的 Faster R-CNN 强大的单尺度基线上将 COCO 风格的平均精度 (AP) 提高了 2.3 点,将 PASCAL 风格的 AP 提高了 3.8 点。我们的方法也很容易扩展到掩码proposals,并提高了实例分割 AR 和速度,超过了严重依赖图像金字塔的最先进方法。
此外,我们的金字塔结构可以在所有尺度上进行端到端训练,并在训练/测试时一致使用,这对于使用图像金字塔来说是内存不可行的。因此,FPN 能够实现比所有现有的最先进方法更高的精度。此外,这种改进是在不增加单尺度基线测试时间的情况下实现的。我们相信这些进步将促进未来的研究和应用。我们的代码将公开发布。
2. Related Work
手工设计的特征和早期的神经网络。SIFT 特征 [25] 最初是在尺度空间极值处提取的,用于特征点匹配。 HOG 特征 [5],以及后来的 SIFT 特征,都是在整个图像金字塔上密集计算的。这些 HOG 和 SIFT 金字塔已被用于图像分类、目标检测、人体姿势估计等众多工作中。人们也对快速计算特征化图像金字塔产生了浓厚的兴趣。 Dollár 等人 [6] 通过首先计算稀疏采样(按比例)金字塔然后插入缺失级别来演示快速金字塔计算。在 HOG 和 SIFT 之前,使用 ConvNets [38、32] 进行人脸检测的早期工作计算了图像金字塔上的浅层网络,以跨尺度检测人脸。
深度 ConvNet 目标检测器。随着现代深度 ConvNets [19] 的发展,像 OverFeat [34] 和 R-CNN [12] 这样的物体检测器在准确性上有了显着的提高。 OverFeat 通过将 ConvNet 用作图像金字塔上的滑动窗口检测器,采用了类似于早期神经网络人脸检测器的策略。 R-CNN 采用了基于区域提案的策略 [37],其中每个提案在使用 ConvNet 分类之前都进行了尺度归一化。 SPPnet [15] 证明了这种基于区域的检测器可以更有效地应用于在单个图像尺度上提取的特征图。最近更准确的检测方法,如 Fast R-CNN [11] 和 Faster R-CNN [29] 提倡使用从单一尺度计算的特征,因为它在准确性和速度之间提供了良好的权衡。然而,多尺度检测仍然表现更好,尤其是对于小物体。
使用多层的方法。许多最近的方法通过在 ConvNet 中使用不同的层来改进检测和分割。 FCN [24] 对多个尺度上每个类别的部分分数求和以计算语义分割。 Hypercolumns [13] 使用类似的方法进行对象实例分割。其他几种方法(HyperNet [18]、ParseNet [23] 和 ION [2])在计算预测之前连接多层的特征,这相当于对变换后的特征求和。 SSD [22] 和 MS-CNN [3] 在不组合特征或分数的情况下预测特征层次结构多层的对象。
最近有一些方法利用横向/跳跃连接将跨分辨率和语义级别的低级特征图关联起来,包括用于分割的 U-Net [31] 和 SharpMask [28],用于人脸检测的重组器网络 [17],以及堆叠式沙漏网络[26] 用于关键点估计。 Ghiasi 等人 [8] 提出了 FCN 的拉普拉斯金字塔表示,以逐步细化分割。尽管这些方法采用具有金字塔形状的架构,但它们与特征化图像金字塔 [5, 7, 34] 不同,在特征化图像金字塔 [5, 7, 34] 中,预测是在所有级别独立进行的,见图 2。事实上,对于图 2 中的金字塔架构(顶部) ,仍然需要图像金字塔来识别跨多个尺度的对象 [28]。
3. Feature Pyramid Networks
我们的目标是利用 ConvNet 的金字塔特征层次结构,它具有从低层到高层的语义,并构建一个始终具有高级语义的特征金字塔。由此产生的特征金字塔网络是通用的,在本文中我们关注滑动窗口提议器(区域提议网络,简称 RPN)[29] 和基于区域的检测器(Fast R-CNN)[11]。我们还在第 6 节中将 FPN 推广到实例分割proposal。
我们的方法将任意大小的单尺度图像作为输入,并以完全卷积的方式在多个级别输出按比例大小的特征图。这个过程独立于主干卷积架构(例如 [19,36,16]),在本文中我们使用 ResNets [16] 展示结果。我们的金字塔的构建涉及自下而上的路径、自上而下的路径和横向连接,如下所述。
自下而上的途径。自下而上的路径是主干 ConvNet 的前馈计算,它计算由多个尺度的特征图组成的特征层次结构,缩放步长为 2。通常有许多层产生相同大小的输出图,我们称这些层处于同一网络阶段。对于我们的特征金字塔,我们为每个阶段定义一个金字塔级别。我们选择每个阶段最后一层的输出作为我们的特征映射参考集,我们将对其进行丰富以创建我们的金字塔。这种选择是很自然的,因为每个阶段的最深层应该具有最强的特征。
具体来说,对于 ResNets [16],我们使用每个阶段的最后一个残差块输出的特征激活。对于 conv2、conv3、conv4 和 conv5 输出,我们将这些最后残差块的输出表示为 {C2、C3、C4、C5},并注意它们相对于输入图像。由于 conv1 占用大量内存,我们不将其包含在金字塔中。
自上而下的路径和横向连接。自上而下的路径通过对来自更高金字塔级别的空间上更粗糙但语义上更强的特征图进行上采样来产生更高分辨率的特征。然后通过横向连接使用自下而上路径的特征来增强这些特征。每个横向连接合并来自自下而上路径和自上而下路径的相同空间大小的特征图。自下而上的特征图具有较低级别的语义,但它的激活被更准确地定位,因为它被二次采样的次数更少。
图 3 显示了构建自顶向下特征图的构建块。使用较粗分辨率的特征图,我们将空间分辨率上采样 2 倍(为简单起见,使用最近邻上采样)。然后通过逐元素相加将上采样图与相应的自下而上图(经过 1×1 卷积层以减少通道维度)合并。重复此过程,直到生成最精细的分辨率图。要开始迭代,我们只需在 C5 上附加一个 1×1 卷积层以生成最粗糙的分辨率图。最后,我们在每个合并后的图上附加一个 3×3 的卷积来生成最终的特征图,这是为了减少上采样的混叠效应。这最后一组特征图称为{P2,P3,P4,P5},对应于分别具有相同空间大小的{C2,C3,C4,C5}。
因为金字塔的所有级别都像在传统的特征化图像金字塔中一样使用共享分类器/回归器,所以我们在所有特征图中固定特征维度(通道数,表示为 d)。我们在本文中设置 d = 256,因此所有额外的卷积层都有 256 个通道的输出。这些额外的层中没有非线性,我们凭经验发现影响很小。
简单性是我们设计的核心,我们发现我们的模型对许多设计选择都很稳健。我们已经尝试了更复杂的块(例如,使用多层残差块 [16] 作为连接)并观察到略微更好的结果。设计更好的连接模块不是本文的重点,因此我们选择上述的简单设计。
图 3. 说明横向连接和自上而下路径的构建块,通过加法合并。