摘要:特征金字塔(Feature pyramids)是用于检测不同尺度(at different scales)的对象的识别系统中的基本组件。 但是最近的深度学习物体检测器(object detectors)已经避免了金字塔表示(pyramid representations),部分原因(in part because)是它们的计算复杂度高(they are compute and memory intensive)。在本文中,我们利用深层卷积网络(deep convolutional networks)固有的(inherent)多尺度金字塔层次结构来构造特征金字塔,这只是稍微的(marginal )增加计算成本。开发了具有横向连接(lateral connections)的自上而下架构(A topdown architecture),用于在所有尺度上(at all scales)构建高级语义特征图(high-level semantic feature maps)。这种称为特征金字塔网络(FPN)的体系结构在几个应用程序中作为通用特征提取器(generic feature extractor)显示出显着的改进。在基于Faster R-CNN系统中使用FPN,我们的方法在COCO检测基准测试基准上实现了最先进(state-of-the-art)的单一模型结果(single-model),没有花里胡哨(without bells and whistles),超越了所有(surpassing all)现有的单一模型,包括来自COCO 2016挑战赛获胜者。此外,我们的方法可以在GPU上以6 FPS运行,因此是多尺度物体检测(multi-scale object detection)的实用且准确的解决方案。 代码将公开发布。
图1.**(a)使用图像金字塔构建特征金字塔。 在每种尺度图像上独立地计算特征,这是缓慢的。(b)**最近的检测系统选择仅(have opted to)使用单一尺度特征(scale features)来加快检测速度。 **(c)另一种方法是重用由ConvNet计算的金字塔特征层次结构( pyramidal feature hierarchy ),就好像它是一个特征化的图像金字塔(featurized image pyramid)。(d)**我们提出的特征金字塔网络(FPN)和(b)、(c)一样快,但更准确。 在此图中,特征图(feature maps)以蓝色轮廓表示,较粗的轮廓(thicker outlines)表示语义较强的特征。
1. Introduction(简介)
识别不同尺度(at vastly different scales)的物体是计算机视觉中的一项基本挑战。 基于图像金字塔构建的特征金字塔(简称特征图像金字塔)构成了标准解决方案的基础[1](图1(a))。这些金字塔在尺度上是不变的(scale-invariant),因为物体的尺度变化通过在金字塔中移动其水平来抵消(an object’s scale change is offset by shifting its level in the pyramid)。 直观地(Intuitively),此属性使模型能够通过在两个位置和金字塔等级上扫描模型来检测大范围尺度(a large range of scales)的对象。特征图像金字塔(Featurized image pyramids)在手工设计(hand-engineered features)特征的时代(in the era of)被大量使用[5,25]。 它们非常关键,像DPM这样的物体探测器[7]需要进行密集的采样(dense scale sampling)以获得良好的结果(e.g., 10 scales per octave)。
对于识别任务,手动设计的特征(engineered features)已经基本上被深度卷积网络(ConvNets)[19,20]计算的特征所取代。 除了( Aside from being)能够表示更高级别的语义(higher-level semantics)之外,ConvNets对于尺度变化(variance in scale )也更加稳健(are robust to ),因此有助于(facilitate)从单个输入规模计算的特征进行识别[15,11,29](图1(b))。但即使有这种稳健性,仍然需要金字塔才能获得最准确的结果。 ImageNet [33]和COCO [21]检测挑战中最近的所有顶级结果( top entries )都使用对特征化图像金字塔(featurized image pyramids)进行多尺度测试(multi-scale testing)(例如,[16,35])。对图像金字塔的每个级别进行特征化的主要优点(principle advantage)是它产生了多尺度特征表示,其中所有级别在语义(semantically)上都很强,包括高分辨率级别(high-resolution levels)。然而(Nevertheless),对图像金字塔的每个级别进行特征化(featurizing each level of an image pyramid)具有明显的局限性。 推理时间(Inference time)显着增加(例如,增加四倍[11]),使得这种方法对于实际应用来说是不切实际(impractical )的。此外(Moreover),在图像金字塔上端到端地训练深度网络在内存方面是不可行的,因此,如果被利用(exploited),图像金字塔仅在测试时[15,11,16,35]使用,这会产生不一致(inconsistency)训练/测试时间推断(inference)。 出于这些原因, Fast 和Faster R-CNN [11,29]选择(opt to)在默认设置下不使用特征化的图像金字塔。
但是,图像金字塔不是计算多尺度特征表示(multi-scale feature representation)的唯一方法。 深层ConvNet逐层计算特征层次(feature hierarchy)结构,对于子采样层(with subsampling layers),特征层次结构(feature hierarchy)具有固有的多尺度(inherent multiscale)金字塔形状。 这种网内(in-network)特征层次结构产生不同空间分辨率的特征图(resolutions),但引入了由不同深度引起的大的语义鸿沟(semantic gaps)。 高分辨率图(high-resolution maps)具有低级别(low-level features)的特征,这些特征会损害其对象识别的表征能力。
单次检测器(The Single Shot Detector)(SSD)[22]是使用ConvNet的金字塔特征层次结构(pyramidal feature hierarchy)的第一次尝试之一,就好像它是一个特征化的图像金字塔(featurized image pyramid)(图1(c))。 理想情况下(Ideally),SSD式金字塔将重复使用前向传递中计算的不同层的多尺度特征图,没有花费多少。 但是为了避免使用低级功能,SSD放弃重新使用已计算的层,而是从网络中的高位开始构建金字塔(例如,VGG网络的conv4 3 [36]),然后再添加几个新层。 因此,它错过了重用特征层次结构的更高分辨率地图的机会。 我们证明这些对于检测小物体很重要。