FPN(feature pyramid networks)算法讲解2

这篇论文是CVPR2017年的文章,采用特征金字塔做目标检测,有许多亮点,特来分享。

论文:feature pyramid networks for object detection
论文链接:https://arxiv.org/abs/1612.03144

论文概述:

作者提出的多尺度的object detection算法:FPN(feature pyramid networks)。原来多数的object detection算法都是只采用顶层特征做预测,但我们知道低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。另外虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测,而本文不一样的地方在于预测是在不同特征层独立进行的。
代码的话应该过段时间就会开源。

论文详解:

下图FIg1展示了4种利用特征的形式:
(a)图像金字塔,即将图像做成不同的scale,然后不同scale的图像生成对应的不同scale的特征。这种方法的缺点在于增加了时间成本。有些算法会在测试时候采用图像金字塔。
(b)像SPP net,Fast RCNN,Faster RCNN是采用这种方式,即仅采用网络最后一层的特征。
(c)像SSD(Single Shot Detector)采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。
(d)本文作者是采用这种方式,顶层特征通过上采样和低层特征做融合,而且每层都是独立预测的。

这里写图片描述

如下图Fig2。上面一个带有skip connection的网络结构在预测的时候是在finest level(自顶向下的最后一层)进行的,简单讲就是经过多次上采样并融合特征到最后一步,拿最后一步生成的特征做预测。而下面一个网络结构和上面的类似,区别在于预测是在每一层中独立进行的。后面有这两种结构的实验结果对比,非常有意思,因为之前只见过使用第一种特征融合的方式。

这里写图片描述

作者的主网络采用ResNet。
作者的算法大致结构如下Fig3:一个自底向上的线路,一个自顶向下的线路,横向连接(lateral connection)。图中放大的区域就是横向连接,这里1*1的卷积核的主要作用是减少卷积核的个数,也就是减少了feature map的个数,并不改变feature map的尺寸大小。

这里写图片描述

自底向上其实就是网络的前向过程。在前向过程中,feature map的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变feature map大小的层归为一个stage,因此每次抽取的特征都是每个stage的最后一个层输出,这样就能构成特征金字塔。
自顶向下的过程采用上采样(upsampling)进行,而横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合(merge)。在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应(aliasing effect)。并假设生成的feature map结果是P2,P3,P4,P5,和原来自底向上的卷积结果C2,C3,C4,C5一一对应。

贴一个ResNet的结构图:这里作者采用Conv2,CONV3,CONV4和CONV5的输出。因此类似Conv2就可以看做一个stage。

这里写图片描述

作者一方面将FPN放在RPN网络中用于生成proposal,原来的RPN网络是以主网络的某个卷积层输出的feature map作为输入,简单讲就是只用这一个尺度的feature map。但是现在要将FPN嵌在RPN网络中,生成不同尺度特征并融合作为RPN网络的输入。在每一个scale层,都定义了不同大小的anchor,对于P2,P3,P4,P5,P6这些层,定义anchor的大小为32^2,64^2,128^2,256^2,512^2,另外每个scale层都有3个长宽对比度:1:2,1:1,2:1。所以整个特征金字塔有15种anchor。

正负样本的界定和Faster RCNN差不多:如果某个anchor和一个给定的ground truth有最高的IOU或者和任意一个Ground truth的IOU都大于0.7,则是正样本。如果一个anchor和任意一个ground truth的IOU都小于0.3,则为负样本。

看看加入FPN的RPN网络的有效性,如下表Table1。网络这些结果都是基于ResNet-50。评价标准采用AR,AR表示Average Recall,AR右上角的100表示每张图像有100个anchor,AR的右下角s,m,l表示COCO数据集中object的大小分别是小,中,大。feature列的大括号{}表示每层独立预测。

这里写图片描述

从(a)(b)(c)的对比可以看出FRN的作用确实很明显。另外(a)和(b)的对比可以看出高层特征并非比低一层的特征有效。
(d)表示只有横向连接,而没有自顶向下的过程,也就是仅仅对自底向上(bottom-up)的每一层结果做一个1*1的横向连接和3*3的卷积得到最终的结果,有点像Fig1的(b)从feature列可以看出预测还是分层独立的。作者推测(d)的结果并不好的原因在于在自底向上的不同层之间的semantic gaps比较大。
(e)表示有自顶向下的过程,但是没有横向连接,即向下过程没有融合原来的特征。这样效果也不好的原因在于目标的location特征在经过多次降采样和上采样过程后变得更加不准确。
(f)采用finest level层做预测(参考Fig2的上面那个结构),即经过多次特征上采样和融合到最后一步生成的特征用于预测,主要是证明金字塔分层独立预测的表达能力。显然finest level的效果不如FPN好,原因在于PRN网络是一个窗口大小固定的滑动窗口检测器,因此在金字塔的不同层滑动可以增加其对尺度变化的鲁棒性。另外(f)有更多的anchor,说明增加anchor的数量并不能有效提高准确率。

另一方面将FPN用于Fast R-CNN的检测部分。除了(a)以外,分类层和卷积层之前添加了2个1024维的全连接层。细节地方可以等代码出来后再研究。
实验结果如下表Table2,这里是测试Fast R-CNN的检测效果,所以proposal是固定的(采用Table1(c)的做法)。与Table1的比较类似,(a)(b)(c)的对比证明在基于区域的目标卷积问题中,特征金字塔比单尺度特征更有效。(c)(f)的差距很小,作者认为原因是ROI pooling对于region的尺度并不敏感。因此并不能一概认为(f)这种特征融合的方式不好,博主个人认为要针对具体问题来看待,像上面在RPN网络中,可能(f)这种方式不大好,但是在Fast RCNN中就没那么明显。

这里写图片描述

同理,将FPN用于Faster RCNN的实验结果如下表Table3。

这里写图片描述

下表Table4是和近几年在COCO比赛上排名靠前的算法的对比。注意到本文算法在小物体检测上的提升是比较明显的。

这里写图片描述

另外作者强调这些实验并没有采用其他的提升方法(比如增加数据集,迭代回归,hard negative mining),因此能达到这样的结果实属不易。

总结

作者提出的FPN(Feature Pyramid Network)算法同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。并且预测是在每个融合后的特征层上单独进行的,这和常规的特征融合方式不同。


Introduction

多尺寸是物体识别的一个难题。传统方法解决问题的方法是下图(a)的方式,构造一个图像的金字塔,然后计算他们的特征形成特征金字塔,然后再每一层特征上去做预测。但是这涉及到尺寸覆盖的问题,对于DPM这样的方法,就需要非常dense(稠密)的金字塔了。

神经网络的方法只需要在最后一层feature map上做预测,也能获得比较好的结果了,如下图(b)。但是对于小物体,表现还是不太好,所以还是需要考虑金字塔。

SSD则考虑从多层的feature map上去做预测,如下图(c)。但是不同层的featuremap上的语义是不同的,浅层的feature map有 high-resolution 但 low-level feature,这影响到它的表征能力,影响它的识别结果。SSD为了用到high-level的feature map,则没有利用过于浅层的feature map,而且增加了网络的深度,抛弃浅层的feature map 既浪费,又影响小物体的检测。

所以作者提出了FPN,通过一个top-down pathway 和lateral connection 结合浅层和高层的feature map,如下图(d)。使得feature pyramid各个level都有丰富的语义。




Ralated Work

传统的手工特征(SIFT, HOG) 等在dense的图像金字塔上计算特征,但是会比较慢。Dollar等人提出一种快速金字塔的算法解决了这一问题。但是就目前来说,传统的方法在精度方面比不上Deep ConvNet。而基于R-CNN框架的方法提倡只在一个尺寸的特征上去做预测,这是因为权衡了精度和速度。但是,多尺寸的检测会还是会表现得更好一些,尤其是对于小物体。

当前,也有一些利用多层feature map 的方法:SSD和MS-CNN从多层feature map分别去做预测;另一种则是将多层的feature map 做了combination,例如Hypercolumns,HyperNet, ParseNet, ION等。最近还有一些用 lateral/skipconnections 的方法,采用一种叫coarse-to-fine 的方式,自顶向下的将不同层的feature map联系在一起,去做预测,例如SharpMask, Recombinator networks, Stacked Hourglass networks,Laplacianpyramid结构抽象如下图:



这些方法都显性或隐性的用到了金字塔。

 


Fuature Pyramid Networks

FPN包含一个自底向上的pathway,一个自顶向下的pathway,以及lateralconnections.

 

Bottom-up pathway

自底向上的过程,就是通常的网络前向传播过程。作者定义,不同层但是尺度相同的feature map处于同一个stage,作者只利用了每个stage 最后一层的feature map去做后续的操作。这里也很好理解,每个stage的feature map 尺寸相同,最深层的feature map肯定有更强的特征表达。作者采用了ResNet的{C2, C3, C4, C5} stage,不用C1是因为太大,占用太多内存了。

 

Top-down pathway and lateral connections

Lateral connection 把bottom-up 和 top-down pathway的feature map用下图所示的方式结合在一起,其中”2x up”是为了上采样以获得同样size的feature map,”1x1 conv”用于减小 channel dimension。此外,从C5开始向下的时候,先用了一个1x1 conv,并在每一个merged feature map 上用一个3x3 conv 去输出最终的feature map{P2, P3,P4, P5}。Low-level的feature map 可能表达能力不强,但是更有利于定位精准。



Applications

作者将自己的构建深度网络特征金字塔的方法应用到RPN 和fast RCNN上。

 

FPN for RPN

Faster RCNN的RPN应用在最后一层featuremap上,作者把FPN应用到RPN上,则不只是利用最后一层feature map了,而是产生了{P2, P3, P4, P5, P6} (这里的P6不是额外增加的层,而是由P5直接上采样得到,是为了覆盖512x512的anchor) 。这里和原来的RPN不同的是,RPN在同一层用了不同尺寸的anchor,而FPN只在每一层用一个尺寸,分别是{32x32, 64x64, 128x128, 256x256, 512x512}。比例是{1:2,1:1, 2:1}。一共有15种anchor。

训练时,anchor的选取,正样本IOU>0.7, 负样本IOU<0.3。

 

FPN for Fast RCNN

Fast RCNN将RoI的位置映射到最后一层featuremap后,就是通过RoI pooling层提取特征了。将FPN应用到Fast RCNN之后,就有把RoI应用到哪一层feature map去选取的问题了。假设RoI在原图的大小为w x h,那么则选取第Ck层feature map,作者设定了公式:

其中,k0 = 4.

 

Experiments

 

Region Proposal with RPN

作者采用pretrained 的ResNet-50和ResNet-100做实验,采用80类的COCO数据库。


从上表(a), (b)可以看出,他们的AR100区别不大,而ARl增大的同时,ARs和Arm会降低。这说明利用多层feature map的必要性。因为每一层feature map 在coarser resolutions和stronger semantics会有一个trade-off,没法做到分辨率高的同时,语义也强。而(c)和(a)(b)比较后也能看出这点。

从(d)看出,top-down结构的作用。作者认为,down-up的结构中,不同层的feature map语义的差别太大了,加了top-down能让他们更好的信息结合。

从(e)看出 1x1 lateral connection的作用。作者认为,top-down的feature map经过上采样和下采样后,没有down-up的feature map有更精准的位置信息。

从(f)看出,pyramid结构的作用。作者把所有的anchor只用在P2层的时候,得到(f)的结果,效果并不好。作者认为RPN用一个fixed size 的滑窗,用在pyramid上在物体的scale variance上可以更鲁棒。

 

Obeject Detection with Fast/Faster RCNN

1. 作者用RPN with FPN提的proposal用到fast RCNN上,这里的RPN和fast RCNN不共享特征,实验表明RPN with FPN性能更好。

2. 在faster RCNN中,RPN和fast RCNN共享网络权值,此时,也相当于共享特征。此时性能更好。

3. 速度方面,在NVIDIA M40 GPU上,ResNet-50的baseline是0.32s,而FPN并不会增加太多时间。

 

 

Conclusion

作者提出了一种清晰而简单的网络特征金字塔框架。主要应用在RPN和faster RCNN上,获得有效的性能提升。




这里介绍的文章是来自 Facebook 的特征金字塔网络 Feature Pyramid Networks(FPN)。FPN 主要解决的是物体检测中的多尺度问题,通过简单的网络连接改变,在基本不增加原有模型计算量情况下,大幅度提升了小物体检测的性能。我们将从论文背景,论文思想,结果与结论几方面探讨此论文。

在物体检测里面,有限计算量情况下,网络的深度(对应到感受野)与 stride 通常是一对矛盾的东西,常用的网络结构对应的 stride 一般会比较大(如 32),而图像中的小物体甚至会小于 stride 的大小,造成的结果就是小物体的检测性能急剧下降。传统解决这个问题的思路包括:(1)多尺度训练和测试,又称图像金字塔,如图 1(a) 所示。目前几乎所有在 ImageNet 和 COCO 检测任务上取得好成绩的方法都使用了图像金字塔方法。然而这样的方法由于很高的时间及计算量消耗,难以在实际中应用。(2)特征分层,即每层分别预测对应的 scale 分辨率的检测结果。如图 1(c) 所示。SSD 检测框架采用了类似的思想。这样的方法问题在于直接强行让不同层学习同样的语义信息。而对于卷积神经网络而言,不同深度对应着不同层次的语义特征,浅层网络分辨率高,学的更多是细节特征,深层网络分辨率低,学的更多是语义特征。

FPN(feature pyramid networks)算法讲解2_第1张图片

图1

因而,目前多尺度的物体检测主要面临的挑战为:

  1. 如何学习具有强语义信息的多尺度特征表示?

  2. 如何设计通用的特征表示来解决物体检测中的多个子问题?如 object proposal, box localization, instance segmentation.

  3. 如何高效计算多尺度的特征表示?

本文针对这些问题,提出了特征金字塔网络 FPN,如图 1(d) 所示,网络直接在原来的单网络上做修改,每个分辨率的 feature map 引入后一分辨率缩放两倍的 feature map 做 element-wise 相加的操作。通过这样的连接,每一层预测所用的 feature map 都融合了不同分辨率、不同语义强度的特征,融合的不同分辨率的 feature map 分别做对应分辨率大小的物体检测。这样保证了每一层都有合适的分辨率以及强语义特征。同时,由于此方法只是在原网络基础上加上了额外的跨层连接,在实际应用中几乎不增加额外的时间和计算量。作者接下来实验了将 FPN 应用在 Faster RCNN 上的性能,在 COCO 上达到了 state-of-the-art 的单模型精度。

具体而言,FPN 分别在 RPN 和 Fast RCNN 两步中起到作用。其中 RPN 和 Fast RCNN 分别关注的是召回率和正检率,在这里对比的指标分别为 Average Recall(AR) 和 Average Precision(AP)。分别对比了不同尺度物体检测情况,小中大物体分别用 s,m,l 表示。

在 RPN 中,区别于原论文直接在最后的 feature map 上设置不同尺度和比例的 anchor,本文的尺度信息对应于相应的 feature map(分别设置面积为 32^2, 64^2, 128^2, 256^2, 512^2),比例用类似于原来的方式设置 {1:2, 1:1,, 2:1} 三种。与 RPN 一样,FPN 每层 feature map 加入 3*3 的卷积及两个相邻的 1*1 卷积分别做分类和回归的预测。在 RPN 中,实验对比了 FPN 不同层 feature map 卷积参数共享与否,发现共享仍然能达到很好性能,说明特征金字塔使得不同层学到了相同层次的语义特征。RPN 网络的实验结果为:

FPN(feature pyramid networks)算法讲解2_第2张图片

这里 FPN 对比原来取自 conv4 和 conv5 的 RPN 网络 (a)(b),召回率得到了大幅度提升,尤其在中物体和小物体上 (c)。另外,作者做了变量对比实验,比如只保留横向连接 (d),即特征分层网络,性能仅与原 RPN 差不多,原因就在于不同层之间的语义特征差距较大。另外,试验了砍掉横向连接,只保留自上而下放大 feature map 做预测结果 (e),以及只用最终得到的 feature map 层 (f),均比完整的 FPN 网络小物体检测 AR 低 10 个点左右。说明金字塔特征表示与横向连接都起了很大作用。

实验 Fast RCNN 时,需要固定 FPN+RPN 提取的 proposal 结果。在 Fast RCNN 里,FPN 主要应用于选择提取哪一层的 feature map 来做 ROI pooling。假设特征金字塔结果对应到图像金字塔结果。定义不同 feature map 集合为 {P2, P3, P4, P5},对于输入网络的原图上 w*h 的 ROI,选择的 feature map 为 Pk,其中(224 为 ImageNet 输入图像大小):

类似于 RPN 的实验,对比了原有网络,以及不同改变 FPN 结构的 Fast RCNN 实验,实验结果为:

FPN(feature pyramid networks)算法讲解2_第3张图片

实验发现 FPN 筛选 ROI 区域,同样对于 Fast RCNN 的小物体检测精度有大幅提升。同时,FPN 的每一步都必不可少。

最后,FPN 对比整个 Faster RCNN 的实验结果如下:

对比其他单模型方法结果为:

FPN(feature pyramid networks)算法讲解2_第4张图片

最后是在 FPN 基础上,将 RPN 和 Fast RCNN 的特征共享,与原 Faster CNN 一样,精度得到了小幅提升。

FPN+Faster RCNN 的方法在 COCO 数据集上最终达到了最高的单模型精度。

总结起来,本文提出了一种巧妙的特征金字塔连接方法,实验验证对于物体检测非常有效,极大提高了小物体检测性能,同时由于相比于原来的图像金字塔多尺度检测算法速度也得到了很大提升。

CVPR 现场 QA:

1. 不同深度的 feature map 为什么可以经过 upsample 后直接相加?

A:作者解释说这个原因在于我们做了 end-to-end 的 training,因为不同层的参数不是固定的,不同层同时给监督做 end-to-end training,所以相加训练出来的东西能够更有效地融合浅层和深层的信息。

2. 为什么 FPN 相比去掉深层特征 upsample(bottom-up pyramid) 对于小物体检测提升明显?(RPN 步骤 AR 从 30.5 到 44.9,Fast RCNN 步骤 AP 从 24.9 到 33.9)

A:作者在 poster 里给出了这个问题的答案

对于小物体,一方面我们需要高分辨率的 feature map 更多关注小区域信息,另一方面,如图中的挎包一样,需要更全局的信息更准确判断挎包的存在及位置。

3. 如果不考虑时间情况下,image pyramid 是否可能会比 feature pyramid 的性能更高?

A:作者觉得经过精细调整训练是可能的,但是 image pyramid 主要的问题在于时间和空间占用太大,而 feature pyramid 可以在几乎不增加额外计算量情况下解决多尺度检测问题。

你可能感兴趣的:(目标检测)