目标检测的特征金字塔(Feature Pyramid Networks)
摘要
特征金字塔是识别系统中检测不同尺度物体的基本组成部分。但是最近的深度学习对象检测器已经避免了金字塔表示,部分原因是它们需要大量的计算和内存。在这篇文章里,我们运用了深度卷积神经网络的固有多尺度和金字塔等级制度来建立了具有边界额外损失(marginal extra cost)的特征金字塔。为了构建一个多尺度的高级语义特征图,我们采用一种自上到下的带有横向连接的结构。这个结构我们称之为 特征金字塔网络(Feature Pyramid Networks,FPN),该结构在作为一些应用的通用特征提取展示了显著的改进。在fater R-CNN系统中使用FPN,我们的方法在COCO检测基准上实现了最先进的单模型结果,超过了所有现有的单模型条目,包括来自COCO 2016挑战赛优胜者的数据。此外,我们的方法可以在GPU上以每秒6帧的速度运行,因此是一种实用而精确的多尺度目标检测方法。代码将公开发布。
1、介绍
在计算机视觉中,识别不同尺度的物体是一个基本的挑战。基于图像金字塔的特征金字塔[1](简称为featurized image pyramids,图1(a))是传统解决思路,具有一定意义的尺度不变性。尺度不变性指的是检测目标的尺度变换与金字塔中的不同层级相互抵消。直观地说,此属性使模型能够通过扫描模型的位置和金字塔不同层级来检测跨越大范围尺度的对象。
featurized image pyramids在人工特征的时期[5][25]大量使用。比如,像DPM[7]这样的目标探测器需要密集的尺度采样才能获得良好的结果(例如,每octave需要10个尺度)。对于识别任务,人工特征已被深卷积网(ConvNets)计算的特征所取代[19,20]。除了能够表示更高层次的语义之外,ConvNets对尺度上的方差也更有稳定性,从而使得可以通过 在单个输入尺度上计算的得到的特征 进行检测[15,11,29](图1(b))。但即使有了这种鲁棒性,金字塔仍然需要得到最精确的结果。ImageNet[33]和Coco[21]检测挑战中的所有最新的顶级成果都使用了对 featurized image pyramids的多尺度测试(例如[16,35])。金字塔结构的优势是其产生的特征每一层都是语义信息加强的,包括高分辨率的低层。
图1:(a)使用图像金字塔建立特征金字塔。特征在每个图片尺度独立计算,计算速度慢。(b)为了达更块的检测,目前的检测系统使用单级的尺度特征计算。©另一种可替代的方法是再次使用通过ConvNet计算的featurized image pyramids。(d)我们提出的特征金字塔网络(FPN)比(b)©更加的块,同时更加准确。由图示。特征图通过蓝色的轮廓表示,粗轮廓表示语义更强的特征。
然而,对图像金字塔的每一级进行特征化有明显的局限性。推理时间大大增加(例如,增加了4倍[11]),使得这种方法不适用于实际应用。此外,在内存方面,在图像金字塔上对深层网络进行端到端的训练是不可行的,因此,如果利用图像金字塔,则仅在测试时间[15、11、16、35]使用图像金字塔,这会造成训练/测试时间推断之间的不一致。出于这些原因,R-CNN和Faster R-CNN都不使用图像特征金字塔featurized image pyramids。
(前三段讲的是featurized image pyramids,一些优势和缺陷。
优势:具有尺度不变性;产生的特征每一层都是语义增强的
缺陷:每一级进行特征化增加了计算时间,仅能在测试时间使用)
然而,图像金字塔并不是计算多尺度特征表示的唯一方法。深层ConvNet逐层计算特征层次( a feature hierarchy),并且通过子采样层,特征层次具有固有的多尺度金字塔形状。这种网络特征层次结构产生了不同空间分辨率的特征图,但也产生了不同深度的语义差异。高分辨率图具有低层次的特征,这会损害其对对象识别的表示能力。 (ConvNet的优缺点)
单级检测器(Single Shot Detector,SSD)[22]是第一次尝试使用ConvNet的金字塔特征层次,它就像(图1(c))的特征图像金字塔。理想情况下,SSD风格的金字塔将重新利用不同层的多尺度特征图,这个多尺度特征图是在前向通道中计算出的。但是为了避免使用底层级的特征,SSD放弃了重用已经计算的层级,而是从网络的高层开始构建金字塔(例如,VGG nets的conv4_3[36]),然后添加几个新层。因此,它放弃重用层次结构的高分辨率映射的机会。我们证明这些对于探测小物体很重要。(ConvNet在SSD的应用)
本文的目标是利用ConvNet特征层次结构的金字塔形状,同时创建一个在所有尺度上都具有强大语义的特征金字塔。为了实现这一目标, 我们依赖一种将低分辨率、语义强特征与高分辨率、语义弱特征通过自上而下的路径和横向连接相结合的架构(图1(d))。其结果得到一个特征金字塔,这个特征金字塔具有各个层级丰富的语义,并可以从一个单输入图像尺度快速建立起来。换言之,我们展示了如何建立一个网络内的特征金字塔,这个特征金字塔可以代替原来的featurized image pyramids,并且不影响速度、内存以及性能。(总结本文提出的特征金字塔网络的结构和优势)
在很多最近的研究中[28、17、8、26]采用自顶向下和skip connetion的类似架构。他们的目标是生成一个高分辨率的单一高级特征图,在上面进行预测(如图2顶部)。相反,我们的方法将架构作为一个特征金字塔来利用,在这个金字塔中,预测(例如,对象检测)在每个层次上独立地进行(图2底部)。我们的模型呼应了前文提到的featurized image pyramid,这在这些作品中没有探索。(特征金字塔的结构)
我们评估了我们提出的特征金字塔网络(FPN),在各种检测和分割系统中[11,29,27]。没有其他影响的情况下,在COCO检测基准[21]的基础上,我们得到了一个最优秀的单一检测器的结果,使用了简单的FPN和Faster R-CNN探测器[29],超过了所有现有的设计。在ablation experiments,我们发现对于边界框候选区域,FPN显著增加了8.0点的the Average Recall (AR) ;对于目标检测,它提高了2.3点的coco样式平均精度(Average Precision (AP) )和3.8点的PASCAL-style AP,超过了更快的强大单尺度基线。(作者说:FPN是目前最好的特征提取工具)
此外,我们的金字塔结构可以用所有的尺度进行端到端的训练,并在训练/测试时持续使用,对比featurized image pyramid不能使用。因此,与现有的所有最先进的方法相比,FPN能够实现更高的精度。此外,这种改进是在不增加单标度基线测试时间的情况下实现的。我们相信这些进展将有助于未来的研究和应用。我们的代码将公开发布。
2、相关工作
人工标注特征以及早期的神经网络
SIFT特征[25]最初是在尺度空间极值处提取的,用于特征点匹配。在整个图像金字塔上密集计算HOG特征[5]和后来的SIFT特征。这些HOG和SIFT金字塔已被用于图像分类,目标检测,人体姿态估计等许多工作。对于快速计算特征图像金字塔也有很大的兴趣。Dollar等[6]通过首先计算稀疏采样(按比例)金字塔,然后插入missing levels,演示了快速金字塔计算。在进行HOG和SIFT之前,早期的工作是使用convnets[38,32]计算图像金字塔上的浅网络,以检测跨越尺度的人脸。
深度目标检测网络ConvNet
随着deep convnets的发展,像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-Nrt[31]和Sharpmask[28]、用于人脸检测的Recombinator networks[17]和用于关键点估计的Stacked Hourglass networks[26]。Ghiasi等人[8]提出一个拉普拉斯金字塔呈现的FCN逐步完善分割。尽管这些方法采用了金字塔形状的建筑,但它们不同于featurized imagepyramids [5、7、34],这些金字塔的预测是在各个层次独立进行的,见图2。事实上,对于图2(顶部)中的金字塔结构,图像金字塔仍然需要跨多个尺度识别对象[28]。
3、特征金字塔网络
我们的目标是利用convnet的金字塔特征层次,从低到高层次的语义,并构建一个具有高层次语义的特征金字塔。由此产生的特征金字塔网络是通用的,本文主要研究滑动窗口候选区域器(Region Proposal Network,简称RPN)[29]和基于区域的检测器(Fast R-CNN)[11]。我们还总结了用于语义分割候选区域的FPNs在第6节。
我们的方法以任意大小的单尺度图像作为输入,并以完全卷积的方式在多个层次上输出成比例大小的特征图。这个过程独立于主干卷积体系结构(the backbone convolutional architectures )(例如[19,36,16]),本文中我们使用ResNet[16]给出结果。我们 金字塔的建造包括一个自下而上的通道,自上而下的连接和横向连接,如下所述。
自下而上的连接(Bottom-up pathway)
自下而上的路径指的是主干框架ConvNet的前馈计算,它计算由多个比例的特征图组成的特征层次,尺度变化的单位为2。通常有许多层生成相同大小的输出映射,我们称这些层处于同一网络阶段stage。对于我们的特征金字塔,我们为每个阶段定义一个金字塔级别。我们选择每个阶段最后一层的输出作为我们的特征参考集,然后将丰富它来创建我们特征金字塔。这种选择是自然合理的的,因为每个阶段的最深层应该具有最强的特性。
具体来说,对于ResNet[16],我们使用每个阶段最后一个剩余块输出的特征。我们将最后这些剩余块的输出表示为{c2、c3、c4、c5},用于conv2、conv3、conv4和conv5输出,并注意到它们相对于输入图像的步幅为{4、8、16、32}像素。由于conv1占用了大量的内存,因此我们不将其包括在金字塔中。
自上而下的通道和横向连接(Top-down pathway and lateral connections. )
自上而下的路径产生高分辨率的特征,而这些高分辨的特征是通过对来自更高的金字塔层次的特征图上进行空间上粗糙的但是语义上更强采样产生的。然后,这些特征通过横向连接从下到上的途径得到增强。每个横向连接合并具有相同空间大小的特征图,这些特征图来自自下而上的路径和自上而下的路径。自下而上的特征映射具有较低层次的语义,但由于次采样次数较少,因此其激活函数(activations)更准确地localized(本地化?)。
图3显示了构建自顶向下功能图的构建块。
我们将卷积神经网络中生成的对应层的特征图进行1×1的卷积操作,将之与经过上采样的特征图融合,得到一个新的特征图,这个特征图融合了不同层的特征,具有更丰富的信息。 这里1×1的卷积操作目的是改变channels,要求和后一层的channels相同。在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应,如此就得到了一个新的特征图。这样一层一层地迭代下去,就可以得到多个新的特征图。假设生成的特征图结果是P2,P3,P4,P5,它们和原来自底向上的卷积结果C2,C3,C4,C5一一对应。金字塔结构中所有层级共享分类层(回归层)。
因为金字塔的所有级别都使用共享分类器/回归器,就像在传统的特征化图像金字塔中一样,我们在所有要素图中设置了特征维度维度(通道数,表示为d)。 我们在本文中设置d = 256,因此所有额外的卷积层都有256通道输出。 在这些额外的层中没有非线性,我们根据经验发现它们具有较小的影响。 简单性是我们设计的核心,我们发现我们的模型对许多设计选择都很稳健。 我们已经尝试了更复杂的块(例如,使用多层残余块[16]作为连接)并观察到略微更好的结果。 设计更好的连接模块不是本文的重点,因此我们选择上述简单设计。
4、应用
Faster R-CNN+Resnet-101
本部分来源自:http://www.voidcn.com/article/p-xtjooucw-dx.html
要想明白FPN如何应用在RPN和Fast R-CNN(合起来就是Faster R-CNN),首先要明白Faster R-CNN+Resnet-101的结构,这部分在是论文中没有的,参照其他博客进行说明。
直接理解就是把Faster-RCNN中原有的VGG网络换成ResNet-101,ResNet-101结构如下图:
faster-RCNN利用conv1到conv4-x的91层为共享卷积层,然后从conv4-x的输出开始分叉,一路经过RPN网络进行区域选择,另一路直接连一个ROI Pooling层,把RPN的结果输入ROI Pooling层,映射成7 * 7的特征。然后所有输出经过conv5-x的计算,这里conv5-x起到原来全连接层(fc)的作用。最后再经分类器和边框回归得到最终结果。整体框架用下图表示:
RPN中的特征金字塔网络
本部分来源自:http://www.voidcn.com/article/p-xtjooucw-dx.html
RPN是Faster R-CNN中用于区域选择的子网络,RPN是在一个13 * 13 * 256的特征图上应用9种不同尺度的anchor,本篇论文另辟蹊径,把特征图弄成多尺度的,然后固定每种特征图对应的anchor尺寸,很有意思。也就是说,作者在每一个金字塔层级应用了单尺度的anchor,{P2, P3, P4, P5, P6}分别对应的anchor尺度为{32^2, 64^2, 128^2, 256^2, 512^2 },当然目标不可能都是正方形,本文仍然使用三种比例{1:2, 1:1, 2:1},所以金字塔结构中共有15种anchors。这里,博主尝试画一下修改后的RPN结构:
从图上看出各阶层共享后面的分类网络。这也是强调为什么各阶层输出的channel必须一致的原因,这样才能使用相同的参数,达到共享的目的。
注意上面的p6,根据论文中所指添加:
正负样本的界定和Faster RCNN差不多:如果某个anchor和一个给定的ground truth有最高的IOU或者和任意一个Ground truth的IOU都大于0.7,则是正样本。如果一个anchor和任意一个ground truth的IOU都小于0.3,则为负样本。
Fast R-CNN 中的特征金字塔网络
总结
作者提出的FPN(Feature Pyramid Network)算法同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。并且预测是在每个融合后的特征层上单独进行的,这和常规的特征融合方式不同。
推荐博客
FPN-Feature Pyramid Networks for Object Detection
Feature Pyramid Networks for Object Detection论文笔记
特征金字塔特征用于目标检测:Feature Pyramid Networks for Object Detection