特征金字塔-Feature Pyramid Networks for Object Detection
特征金字塔是用于检测不同尺度的对象的识别系统中的基本组件。但是最近的深度学习对象检测器已经避免了金字塔表示,部分原因是它们是计算密集型和内存密集型的。在本文中,我们利用深层卷积网络固有的多尺度金字塔层次结构来构造具有边际额外损失的特征金字塔。开发了一种具有横向连接的自上而下的架构,用于在所有尺度上构建高级语义特征图。这种称为特征金子塔网络(FPN)的体系结构在几个应用中作为普通特征提取器显示出显著的改进。在基本的Faster R-CNN系统中使用FPN,我们的方法在COCO检测基准上没有任何花里胡哨的技巧实现了最先进的单模型结果,超过所有现有的单模型条目,包括来自COCO2016挑战赛获胜者。此外,我们的方法可以在GPU上以5FPS运行,因此是多尺度物体检测的实际且准确的解决方法。代码将公开发布。
多尺度上识别目标是计算机视觉的一个基本挑战。在图像金字塔上构建特征金字塔(简称特征化图像金字塔)形成了一个基本解决方案【1】(图1(a))。因为一个目标的尺度改变通过在金字塔中移动层级来抵消,所以从某种意义上说这些金字塔是尺度不变的。直观上讲,这些性质通过在位置和金字塔层级上扫描模型使得模型检测跨尺度的目标。
图1:(a)用一个图像金字塔来构建一个特征金字塔。在每个图像尺度上独立地计算特征,很慢。(b)最近的检测系统选择使用于更快速的检测的单尺度特征。(c)通过卷积层重复利用金字塔式的特征层次结构。(d)这里提出的特征金字塔网络(RPN),和(b)(c)一样快,但是更准确。这张图中,特征图通过蓝框表示,越粗的轮廓表示语义越强。
特征化图像金字塔手工设计特征的时代大量使用【5,25】。它们那么重要以至于像DPM【7】这样的目标检测器要求密集尺度采样来实现好的结果(例如,每个阶段10个尺度)。对于识别任务,设计特征已经被卷积特征取代【19,20】。除了能表示更高级的语义特征,卷积网络对于尺度变化更鲁棒,因此促进在单尺度输入上计算的识别【15,11,29】(图1(b))。但是即使有这种鲁棒性,金字塔仍然需要获得更多准确的结果。所有最近在ImageNet【33】和COCO【21】检测挑战上的前几名都在特征化的图像金字塔上使用多尺度测试(例如,【16,35】)。一个图像金字塔的特征化的每个层级的主要优点是它能产生多尺度特征表示,其中所有层级都有很强的语义,并且有很高的分辨率层级。
然而,特征化一个图像金字塔的每一个层级都有明显的限制。大大增加的推理时间(例如,【11】)使得这个方法对于真实的应用是不实际的。此外,在一个图像金字塔上训练端到端的深度网络就内存而言是不可行的,并且如果想用可以在测试时间用【15,11,16,35】,这导致了训练/测试时间不一致。出于这些原因,Fast 和 Faster R-CNN【11,29】在默认设置下选择不使用特征化图像金字塔。
然而,图像金字塔不是计算多尺度特征金字塔的唯一方法。深度卷积网络计算逐层的特征层次结构,并且具有子采样层的特征层次结构有一个固有的多尺度金字塔形状。这个内网层次结构产生了不同空间分辨率的特征图,但是在不同深度有很大的语义差异。高分辨图有低级的特征,该特征影响目标识别表示能力。
单点检测器(SSD)【22】是使用卷积金字塔特征层次第一次尝试中的一个,就好像它是一个特征化的图像金字塔(图1(c))。概念上看,SSD风格的金字塔重用不同层多尺度特征图,因此没有代价。但是为了避免使用低级特征,SSD放弃重用已经计算的层,相反从网络的高层开始构建金字塔(例如,VGG的con4_3【36】)并且然后添加一些新层。因此它失去了重用特征层次结构高分辨率图的机会。这些对于检测小目标是重要的。
这篇论文的目标是利用卷积网络特征层次结构的金字塔形状,并同时创建一个在所有尺度上有强语义的特征金字塔。为了实现这个目标,依赖于一个结构,该结构通过从上而下的路径和横向连接,来将低分辨率但语义强的特征和高分辨率但语义弱的特征结合起来(图1(d))。结果是在所有层级上都有丰富语义且在单输入图像尺度上快速构建的特征金字塔。换句话说,就是使用内网特征金字塔取代特征化图像金字塔,且没有牺牲表示能力,速度和内存。
相似的采样从上而下和跳跃连接的结构在最近的研究中是流行的【28,17,8,26】。它们的目标是在一个精细的特征图上产生一个高级特征图(图2上)。相反的是,这片论文的方法是利用该结构作为一个特征金字塔在每个层级上独立预测(图2下)。
图2:上:一个使用跳跃连接的从上而下的结构,在最精细的层级上预测。下:与上面有相似的结构,但是充分利用作为特征金字塔,在所有层级上独立预测。
在用于检测和分割【11,29,27】的不同系统上评估FPN。没有任何花里胡哨的东西,在COCO检测基准上使用Faster R-CNN和FPN取得了最好的结果。这个方法也可以很容易扩展到掩码建议中并改善实例分割的性能。
此外,这里的特征金字塔结构可以在所有尺度上进行端到到的训练,并且在训练和测试时间是一致的。
特征金子塔网络
我们的目标是利用ConvNet的金字塔特征层次结构,该结构具有从低级到高级的语义,并构建一个具有高级语义的特征金字塔。由此产生的$Feature\,Pyramid\,Network$是通用的,在本文中,我们关注滑动窗口建议器(Region$\,$Proposal$\,$Network,简称RPN)【29】和基于区域的探测器(Fast R-CNN)【11】。我们还将FPN泛化到第6节中的实例分割建议。
我们的方法采用任意大小的单尺度图像作为输入,并以全卷积的方式输出多个级别的按比例大小的特征图。这个过程独立于backbone卷积架构(例如,【19,36,16】),并且本文中我们用ResNets【16】来呈现结果。我们金字塔的结构涉及从下而上的路径,从上而下的路径,和横向连接,如下所述。
图3:一个解释横向连接和从上而下连接路径通过加来融合的构建块。
Bottom-up pathway. 从下而上的路径是backbone ConvNet的前向计算,它计算一个特征层次结构,其包含缩放步长为2的多尺度的特征图。通常有许多层产生同样尺寸的输出图,并且我们说这些层处于同样的网络$stage$。对于我们的特征金字塔,我们为每一个阶段定义一个金字塔等级。我们选择每个阶段最后一层的输出作为我们的参考特征图集,我们将丰富它们创建我们的金字塔。这