FPN

论文:Feature Pyramid Networks for Object Detection

首图

论文地址:https://arxiv.org/abs/1612.03144

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

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

图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 对比原来取自 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 筛选 ROI 区域,同样对于 Fast RCNN 的小物体检测精度有大幅提升。同时,FPN 的每一步都必不可少。

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

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

最后是在 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 里给出了这个问题的答案

FPN

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

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

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




论文概述:

作者提出的多尺度的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)算法同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。并且预测是在每个融合后的特征层上单独进行的,这和常规的特征融合方式不同。
期待代码





该论文主要提出了top-down的思想,对图像进行进行多尺度物体检测,尝试解决尺度不变性的问题

  • 2

Feature pyramids(多尺度特征金字塔)在传统的计算机视觉算法中进场被用到,而在深度学习中,都尽量避免使用多尺度相关的算法,因为一旦涉及多尺度,计算量将成倍增加。

在这篇论文中,作者认为在卷积网络中的每一层,就对应一个尺度的特征,然而在目前的网络中,只是用到了最后一层尺度的特征,于是作者提出了Feature Pyramid Network(FPN). FPN结构在进行物体检测时,不光用到了最后卷积层的feature map,同时也将之前层的feature map结合起来。该结构是结合了Faster RCNN。

  1. In this paper, we exploit the inherent multi-scale, pyramidal hierarchy of deep convolutional networks to construct feature pyramids with marginal extra cost.
  2. A top-down architecture with lateral connections is developed for building high-level semantic feature maps at all scales.

作者给出了目前四种常见利用多尺度信息的方法:

image_1bvoua5t51ihe1i78gdt93s19qt9.png-215.8kB

(a)该方法是现将输入图像进行resize后喂入算法,进行分类和回归,早期的深度学习算法基本上都是这样做的;
(b)这是目前最常见的,将图像送入网络,去最后一层的feature map进行分类回归;
(c)这是利用每一层的feature map进行分类回归最后,进行融合,这种形式代表性的是SSD,但是SSD中,是在基础网络中添加了几个卷积层,然后添加的几个卷积层的feature map进行分类回归;
(d)这是作者提出来的。

这篇论文给出了两个关键的词语bottom-uptop-down
bottom-up
:就是底层信息向高层传播,在深度学习中,网络结构是以层级结构进行排布的,图像从输入到输出,信息是由底层到高层传播的,所谓底层信息就是图像的轮廓,纹理等底层的形状信息;所谓高层信息就是图像的类别,物体的关键部位等高层的语义信息,故bottom-up就是网络的前向传播过程。
top-down:就是高层信息往底层传播,这里的信息是每层的fearure map而非梯度

在这里要解释为什么会存在top-down这样的操作?

因为图像需要检测比较小的物体,直接说就是细粒度的问题,这篇论文(Beyond Skip Connections: Top-Down Modulation for Object Detection)给了个说法,它是这样解释的:高层信息往往语义层面的,是粗糙的,对物体的性状描述是不细腻的;而底层信息是对图像的形状描述是精致的,于是在进行微小物体检测时,最好的方法,是将高层的语义信息和底层的形状信息结合起来。

再来说说,作者是怎么个结合的。。

image_1bvovnvgc14r134r1jetk0i132um.png-60kB

(1)左边箭头依次朝上是bottom-up, 右边的箭头朝下是top-down的过程
(2)网络传至卷积最后一层之后,进行上采样(caffe 中进行反卷积操作)还原层上一层的尺度,然后 与上一层的feature map相加,如此下去;
(3)作者还提出为了保证top-down过程中,feature map的channel一致,进行了1×1

的卷积操作

Github:https://github.com/unsky/FPN-caffe
网络可视化:http://ethereon.github.io/netscope/#/editor




论文阅读: Feature Pyramid Networks for Object Detection

Feature Pyramid 是提取图像特征领域的很重要的概念。在深度学习领域没有被提及是因为目前深度学习仍然受到计算量的限制。

本论文根据不同的feature maps给出了 Feature Pyramid Network,因为 Featrue Pyramid的尺度不变性,可以有效的解决Object Detection 中的目标物体不一致大小的问题。 熟悉图像处理的都知道 sift 算法,其中 sift 的Pyramid很好的解决了 multi-scale 的问题。

从上图可以看出, fpn 充分提取了多个layer的feature maps的特征。针对每一个{p2, p3, p4},都进行一个prediction。high-resolution 的featrue map有着 low-level 的featrue ,这些featrue的表达能力稍微弱点。

本paper的亮点就是将low-resolution,semantically strong feature的feature map和 high-resolution,weak featrue的feature map 通过 top-down pathway 和 lateral connections结合起来。 使得每一个feature Pyramid 都含有丰富的,all-level的sematics。

整个fpn包含三个部分 bottom-up pathway, top-down pathway 和 lateral connection。

bottom-up pathway 就是典型的Network的forward, paper采用的是resnet的(last residual block)不同stage的最后一层concatenate layer作为 reference layer。其中的 {C2,C3, C4, C5} 对应的是Conv2, Conv3, Conv4 和 Conv5的output。


top-down pathway采用的是upsample method, 进行 2x Up 的操作,使得后面的feature map upsample 到和前一阶段的 feature map有着相同的size。 对于low-level的feature map,因为其lower level 的semantic,subsample的次数更少,它的activation也更加精确地localized。

lateral connection的作用是使用 1x1的Conv对low-level的featrue map进行降低维度,使得维度跟后一层top-down下来的feature map的维度一致,从而做element-wise addition。

应用:
用在 RPN, 可以提取多个维度的feature map的anchor,增加了feature的表达。

用在Fast RCNN,就是将 ROI 打在不同scale的Pyramid level上,最后统一roi-pooling到特定的scale,做CNN classification。 并且给出了经验值挑选方式:

论文的关键点: 引入Pyramid,同时保证整个Network的计算增量尽可能小。增强feature representation。



猜你喜欢

转载自blog.csdn.net/hanlinger_/article/details/80365468
FPN