(FPN)Feature Pyramid Networks for Object Detection论文阅读笔记

(FPN)Feature Pyramid Networks for Object Detection论文阅读笔记2016

Abstract

特征金字塔是用在不同尺度上的目标检测任务中的一个基础成分。但是最近深度学习的目标检测都避免使用金字塔的表示,部分原因是它们计算量和内存占用很大。==本文中,我们利用了深度卷积网络固有的多尺度金字塔等级来构建特征金字塔,并且使用较少的额外花费。==开发了具有横向连接的自上而下的网络结构,来构建多个尺度下的高等级语义特征图。这个网络结构,特征金字塔网络(FPN),与一些标准的特征提取结合进行应用之后,展现出了很好的效果提升。在基础的Faster R-CNN系统中加入FPN,我们的方法在COCO数据集上,没有加bells and whistles情况下,取得了单模型的SOTA,超过了所有的现存的单模型,包括COCO2016竞赛的胜者。另外,我们的网络在一个GPU上,可以达到5FPS。

1. Introduction

多尺度上的目标识别是计算机视觉的一个基础任务,特征图像金字塔是一种基础的标准解决方法(图1a)。**这些金字塔是尺度不变的,因为目标的尺度改变可以通过在尺度维度上的改变来抵消。**模型通过在不同位置和金字塔不同层上进行检测,就可以检测到不同尺度的目标。(FPN)Feature Pyramid Networks for Object Detection论文阅读笔记

在人工设计特征的时代,特征图像金字塔被广泛使用。**之后人工设计的特征逐渐被有深度卷积网络(convnets)计算得到的特征所取代。**除了可以表示更高层的语义,卷积网络同样对于尺度的变化更鲁棒,因此可以在单一的输入尺度来进行训练(图1b)。但是即使有鲁棒性,金字塔仍然可以继续应用其中, 以得到最好的效果。近期ImageNet和COCO上的一些效果好的网络都在特征图像金字塔上进行多尺度测试,这样可以生成多尺度的特征表示,所有层都是语义上很强的,包括高分辨率的那些层。

然而,将图像金字塔的每一层都当做特征图有着明显的限制,测试时间增长了4倍,使得方法对于实时应用来说不现实;且端对端训练图像金字塔耗费大量内存,也不现实;所以如果使用,也只是在测试阶段使用图像金字塔,Fast和Faster R-CNN都没有使用特征图像金字塔。

然而,图像金字塔并不是唯一一种计算多尺度特征表示的方法。深度卷积网络一层一层的逐层计算特征图,通过下采样,这样这些特征图就有着金字塔的形状。这种网络内的特征hierarchy产生了不同分辨率的特征图,但是由于通道数的不同,引入了很大的语义gaps。高分辨率的特征图只有低层次的特征,这损害了网络的表示能力(representational capacity)。

SSD是首先尝试使用卷积网络中的金字塔形式的特征图进行多尺度检测的网络之一。SSD类的金字塔就是网络前向传播过程计算出的不同层的结果,因此几乎不额外消耗计算。但是为了避免使用低等级的特征,SSD放弃了前面已经计算的层,而是从很后面的层开始(VGG的conv4_3),并增加了几个新的层来计算,因此它没有重新利用高分辨率的特征图,我们认为这对于检测小目标非常重要。

本文的目标就是,利用卷积网络的这些金字塔形的特征图,同时还可以在所有尺度上都保持很强的语义性(semantics)。为了达成这个目的,我们依赖于一种结构,这种结构通过一个自上而下的pathway和横向connections可以将低分辨率、语义信息强的特征与高分辨率、语义信息弱的特征相组合(如图1d)。结果得到一个在所有尺度都有强语义信息的特征金字塔,并且可以从一个单尺度输入图像快速求出,与之前的结构相比不牺牲表达能力、速度和内存。

一些使用top-down和跳跃连接的相似结构在最近研究中比较流行。他们的目标是生成一个单个的、有着好分辨率的高等级特征图,在这个图上进行预测(图2上)。相反,我们方法在金字塔的每一层独立进行预测(图2下)。(FPN)Feature Pyramid Networks for Object Detection论文阅读笔记

我们在不同的检测和分割系统中评测了我们的方法(FPN),没有添加其他部件,我们使用Faster R-CNN和FPN,达到了COCO上的SOTA。我们实验中发现,对于bbox的proposal,FPN提升了8.0%的召回率,以及COCO的2.3%和PSACAL的3.8%准确率。我们的方法同样可以轻易移植到mask proposals中,提升了分割的AR以及运行速度。

另外,我们的金字塔结构可以在任意尺度端到端训练,可以同时在训练和测试时使用,内存消耗也是可以接受的。FPN方法可以取得超过所有现存的SOTA的最高准确率,并且没有增加测试时间。

2. Related Work

Hand-engineered features and early neural networks.

SIFT特征最开始在尺度空间提出,用来进行特征点匹配。HOG特征和later SIFT特征在整张图像上densely计算,它们被广泛用在图像分类目标检测等视觉任务中。**Dollar等人尝试了一种快速金字塔计算的方法,先再尺度上计算一个sparsely采样金字塔,然后对缺失的level进行插值。**早期的用于人脸识别的卷积网络中,在图像金字塔上计算浅层网络来进行检测。

Deep ConvNet object detectors.

随着深度卷积网络的发展,OverFeat和R-CNN等网络在检测任务的准确率上有了极大提升。OverFeat与早期神经网络类似,在图像金字塔上使用ConvNet当作滑窗检测器。R-CNN使用基于区域建议的策略,每个proposal进行尺度归一化,然后进行分类。SPPnet证明上面的方法应用在单一尺度的特征图上,效果更好效率也更高。最近的方法,比如Fast R-CNN和Faster R-CNN,都使用单尺度特征图进行计算,这是速度和准确率之间取平衡。多尺度的检测效果更好,但是速度较慢。

Methods using multiple layers.

最近的一些方法提升了检测和分割的效果,它们使用了ConvNet中的不同层。FCN在多尺度上将每一类的部分分数相加,来计算语义分割。 Hypercolumns使用相似的方法进行分割。一些其他的方法(HyperNet、ParseNet、ION)在预测之前,将多个层的特征级联,相当于组合了这些特征。SSD和MS-CNN没有组合特征或分数,直接在多个特征层进行预测。

最近有一些方法使用了横向/skip连接,来将分辨率和语义等级的低等级特征图相连,包括U-Net、SharpMask、Recombinator networks、 Stacked Hourglass networks等。Ghiasi为FCN提出了一个拉普拉斯金字塔表示来修正分割。尽管上面的方法都是用了金字塔形的结构,但是它们不像我们的特征图像金字塔,在所有的层独立进行预测。实际上,对于图2上的金字塔结构,图像金字塔仍需要跨尺度识别目标。

3. Feature Pyramid Networks

我们的目标是利用convnet的金字塔形的特征层次,包含了从低到高等级的语义信息,建立一个特征金字塔,可以利用高等级的语义。我们的FPN网络是通用的,本文中,我们关注滑窗类的区域建议方法,RPN和Fast R-CNN。

**我们的方法输入为任意单一尺寸的图像,以全卷积的fashion,输出多个等级的按比例的特征图。**这个过程与backbone的种类不管,本文我们使用ResNet。我们金字塔的构建包含自下向上的pathway、自上向下的pathway、和横向连接,下面逐一介绍。

Bottom-up pathway.

这个pathway就是backbone的前向计算过程,计算出一系列不同尺度的特征图,尺度上的尺寸step为2。**通常有许多层会生成相同尺寸的输出图,我们将这些层称为相同的stage。对于我们的特征金字塔,我们每个stage定义为一个金字塔等级。选择每个stage的最后一层作为特征图的参考,然后对其不断丰富来创建金字塔。**这个选择很自然,因为每个stage的最后一层应该有着最强的特征。

特别地,**对于ResNet,我们使用每个stage最后一个残差块的**输出作为参考,记为{C2、C3、C4、C5},**对应conv2-5的输出,它们相对于输入图像分别有着{4,8,16,32}像素的步长。因为内存占用大,没使用conv1的输出。

Top-down pathway and lateral connections.

**top-down的pathway通过对空间上粗糙,但是语义上更强,来自高等级的金字塔进行上采样来得到更高分辨率的特征。**这些特征然后又通过横向连接,使用bottom-up pathway得到的特征进行增强。每个横向连接(lateral connection)都将bottom-up pathway和top-down pathway对应的相同空间尺寸的特征图相连。bottom-up的特征图有更低等级的语义,但是它的**定位更加准确因为它被子采样的次数更少。(FPN)Feature Pyramid Networks for Object Detection论文阅读笔记

图3展示了构成我们top-down特征图的building block。对于较粗糙分辨率的特征图,我们使用参数=2来对空间分辨率进行上采样(为了简化,使用最近邻域上采样),经过上采样的图然后与相关联的bottom-up图逐元素相加进行融合(使用1 * 1卷积来减少通道数)。这个过程迭代进行,直到生成最好分辨率的图。为了开始迭代过程,我们在C5之后接1 * 1的卷积来生成最粗糙的图,最后我们在每个融合图上进行3 * 3的卷积,来生成最后的特征图,这是为了减少上采样的其他影响。最后的特征图为{P2、P3、P4、P5},与{C2、C3、C4、C5}相关联,分别有相同的空间尺寸。

因为金字塔的所有等级都共享分类器/回归器,**因此我们固定所有特征图中特征的维度(通道数,记为d)。本文中我们设置d=256,因此所有的额外的卷积层都是256-channel输出,**在这些额外卷积层中,我们没有增加非线性,因为我们发现效果影响很小。

我们的设计中,简单很重要,我们发现我们的模型对许多设计选择都是鲁棒的。我们实验使用了更复杂的blocks(比如使用多层残差块作为连接),观察到略微更好的效果。设计更好的connections不是本文的重点,所以我们选择了上面描述的简单设计。

4. Applications

我们的方法是在深度卷积网络中构建特征金字塔的一种通用解决方法。接下来,我们将我们的方法用在RPN中用来bbox proposal生成,用在Fast R-CNN中用来目标检测。为了验证我们方法的简单性和有效,我们对原来的系统做最少的修改。

4.1 Feature Pyramid Networks for RPN

RPN网络是一种滑窗的,类无关的目标检测器。在原来的RPN设计中,子网络使用3 * 3的卷积在特征图上densely滑窗,来预测object/background的二分类以及bbox回归。3 * 3之后使用两个1 * 1卷积分支,用来分类和回归,我们称为network head。使用一些anchor来进行预测。

我们修改RPN,将它作用的单尺度特征图更改为我们的FPN,我们使用了相同的head设计(3 * 3conv以及两个1 * 1conv分支),对于特征金字塔的每一层进行滑窗。由于head在所有金字塔等级都densely滑窗,在每一层的每个位置就没有必要设置多尺度的anchors了。所以,我们对金字塔每个等级设置单尺度的anchor。我们对{P2、P3、P4、P5、P6}上的anchor,每个anchor包含的像素区域分别为{32 * 32、64 * 64、128 * 128、256 * 256、512 * 512}。同样使用三种长宽比,{1:2、2:1、1:1}。因此整个金字塔共15种anchors。

我们依照与ground truth的IoU来设置样本,大于0.7或有最高IoU的为正样本,小于0.3设为负样本。注意到ground truth的尺度没有分配到金字塔等级上,二是直接与anchor相比较,因为anchor已经包含了金字塔等级了。

我们注意到heads的参数在所有的特征金字塔等级上是共享的,我们同样评估了一个不共享的模型,取得了相似的准确率。共享参数的模型取得的好的效果表明了我们金字塔的所有等级有着相似的语义等级。

修改之后就可以像Faster R-CNN中一样训练了。

4.2 Feature Pyramid Networks for Fast R-CNN

Fast R-CNN使用RoI池化层来提取特征,它主要是作用在单尺度的特征图上。为了使用FPN,我们需要将不同尺度的RoI与金字塔等级进行对齐。

我们将我们的特征金字塔看作是从图像金字塔生成的。我们将一个宽为w,高为h(在输入图像上的尺寸)的RoI与特征金字塔的Pk层对齐:(FPN)Feature Pyramid Networks for Object Detection论文阅读笔记

这里224为ImageNet的预训练尺寸,k0是224 * 224所对应的金字塔level。使用基于ResNet的Faster R-CNN,我们将k0设为4,式子1表明,如果RoI尺寸变小,它会被映射到更低等级(即更高分辨率的金字塔等级)。

我们将predictor head(Fast R-CNN中的class-specific分类器和bbox回归器)应用到RoI的所有等级上。这个head也是共享参数的,无论等级。我们直接使用RoI池化来提取7 * 7特征,然后接两个隐藏fc层(1024-d+ReLU),之后是最后的分类和回归。

基于上面的改造,我们可以在特征金字塔上训练测试Fast R-CNN。

5. Experiments on Object Detection

我们在80类目标的COCO上进行实验。使用80k训练集、35k验证集。

所有网络的backbone在ImageNet分类集上预训练过,使用ResNet-50和ResNet-101模型。

5.1 Region Proposal with RPN

使用COCO的平均召回率AR来评估,ARs、ARm、ARl表示小、中等、大目标的AR。对每张图像使用100和1000proposal,记为AR100和AR1000。

Implementation details.

表1中所有结构都是端到端训练的,输入图像resize到短边800像素,在8个GPU上使用同步SGD训练。mini-batch为每个GPU2图像,每个图像256anchors。使用0.0001的权值衰减和0.9的动量。前30k mini-batch学习率为0.02、之后10k为0.002。**对于所有的RPN实验,训练中都考虑了超出边界的anchor box(Faster R-CNN中忽略了)。**其他的设置与Faster R-CNN中一样,训练RPN花费了8小时。

5.1.1 Ablation Experiments

(FPN)Feature Pyramid Networks for Object Detection论文阅读笔记

Comparisons with baselines.

我们使用了两个baseline作对比,其中anchor的尺度为5种,与FPN的一致。b相对于a没有提升这表示单个高等级的特征图是不够的。

使用FPN,将AR1000提升了8点,达到了56.3%。另外,针对小目标,AR提升了12.9%,这表明我们的FPN提升了RPN对目标尺寸的鲁棒性。

How important is top-down enrichment?

表1(d)展示了没有top-down pathway的结果,这种情况下与图1b差不多,效果与baseline类似。我们推测这是因为bottom-up金字塔中不同等级有着巨大的语义gaps。我们同样使用不共享参数的head进行实验,结果类似,这表明这个问题不能通过使用level-specific的head修复。

How important are lateral connections?

表1(e)展示了不使用横向连接的效果。这种top-down的金字塔有更强的语义特征和分辨率,但是这些特征的定位不够准确,因为map被降采样、上采样了几次。使用横向连接可以将其与定位准确的bottom-up结合,提升了10点召回率。

How important are pyramid representations?

下面我们只是用最高分辨率、最强语义特征的特征图P2进行实验,如表1(f),效果比baseline好,但是比FPN差。

另外,只使用P2导致更多的anchor,这是因为它大的空间分辨率导致的。这个结果表明更多的anchor无法提升准确率。

5.2 Object Detection with Fast/Faster R-CNN

下面我们将FPN应用到基于区域的检测方法中,使用COCO的AP和PSACAL的AP评价,同样使用COCO对小、中、大目标的AP评价。

Implementation details.

输入尺寸resize到短边800像素,8GPU同时SGD训练,每个mini-batch两张图,每张图512RoI。0.0001权值衰减,0.9动量。前60k学习率0.02,后20k0.002学习率。训练时每张图2000RoI,测试时1000。

5.2.1 Fast R-CNN (on fixed proposals)

为了探究FPN对检测器的作用,我们冻结上面使用FPN的RPN提出的RoI,使用这些固定的RoI。我们直接在Fast R-CNN和RPN之间不共享卷积。(FPN)Feature Pyramid Networks for Object Detection论文阅读笔记

backbone使用ResNet,我们RoI池化的输出为14 * 14,将conv5层作为head的隐藏层。取得了31.9AP,使用两层fc,取得28.8AP,这表明使用fc对baseline没有正交的提升。

表2©展示了我们的结果,相比baseline,我们的方法都有所提升。

表2(d)和(e)展示了移除top-down和横向连接的效果,稍微低于baseline‘。值得注意的是,移除了top-down,AP下降严重,这表明Fast R-CNN对于在高分辨率图使用低等级特征效果很差。

表2(f)只使用最好的特征图P2,效果稍差于©,我们认为RoI池化是类似变形的操作,对区域的尺度不敏感。尽管c效果更好,但是这是得益于前面RPN的金字塔特征,而不是此处。

5.2.2 Faster R-CNN (on consistent proposals)

Faster R-CNN中RPN和Fast R-CNN共享卷积层,它们的结构是一样的。表3展示了我们方法与其他baseline的对比。(FPN)Feature Pyramid Networks for Object Detection论文阅读笔记

我们的方法比baseline高出2.3%AP和3.8%[email protected]

注意到(a)(b)比He论文中的baselin效果好,我们发现这个差距是由于下面造成的:

  • 我们使用800像素宽,而不是600.
  • 训练时,每个minibatch,我们每张图512RoI,而不是64
  • 我们使用了4种尺度的anchor,而不是4
  • 测试时我们每张图1000proposals,而不是300

所以我们的baseline要比原论文中的效果好。

相比原论文,我们提升了7.3%和9.6%。

Sharing features.

上面,为了简化,我们没有在RPN和Fast R-CNN之间共享特征。在表5中,我们按照四步训练法来共享特征,我们发现共享之后提升了准确率,同时减少了测试时间消耗。(FPN)Feature Pyramid Networks for Object Detection论文阅读笔记

Running time.

共享特征的情况下,**我们的ResNet-50模型在单块NVIDIA M40 GPU上每张图训练时间0.165s,ResNet-101为0.19s。作为对比,表3(a)的baseline用时0.32s。**总体上是比原来的Faster R-CNN要快。

5.2.3 Comparing with COCO Competition Winners

表4中比较了我们的方法,和其他COCO比赛单模型优胜者的效果。没有加其他东西,我们的单模型就超过了这些competitors。(FPN)Feature Pyramid Networks for Object Detection论文阅读笔记

在test-val集上,我们的方法比现存最好结果提升了0.5点AP,3.4点[email protected]。值得注意的是我们的方法不依赖于图像金字塔,只需要使用单尺度的输入图像,但是对小尺度的目标有着卓越的AP。在之前的方法中,这只能通过高分辨率的图像来取得。

而且,我们方法不需要使用许多流行的改进,比如hard negative mining、context regression、更强的数据增强等。这些方法可能会进一步提升FPN的效果。

最近,FPN在COCO比赛的所有项目中取得了top结果,包括检测、instance分割、关键点估计等。

6. Extensions: Segmentation Proposals

我们的方法是生成金字塔表示的通用方法,不仅可以用在目标检测的应用上。这部分我们使用FPN来生成分割的proposals,遵循DeepMask/SharpMask框架。

下面部分主要是语义分割的内容,就省略啦。