Feature Pyramid Networks for Object Detection

来源:互联网 发布:小马云现身阿里总部 编辑:程序博客网 时间:2024/06/05 20:00

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上,获得有效的性能提升。

 

 

 

 

 

这是个人的学习笔记,所以文章里关于segmentation的部分就没关注。如有错误多多指教。但是,感觉作者的灵感,应该有不少是从segmentation领域来的,因为related work里提到的SharpMask, Recombinator network等的结构和本文很像,只不过作者从多层去输出,而segmentation里只用了top-down的最后一层。

如有不对,请大家多多指教,欢迎讨论。



1 0