Object Detection -- 论文FPN(Feature Pyramid Networks for Object Detection)解读

FPN

FPN(Feature Pyramid Networks)是Kaiming He男神和Rgb大神联手的又一力作。主要使用特征金字塔网络来融合多层特征,将底层和高层的特征融合,再利用融合后的特征进行分类和定位。FPN曾在COCO数据集上测试结果排名第一。

原论文地址: Feature Pyramid Networks for Object Detection

Introduction

In Computer Vision中,利用不同尺度来做目标识别一直是个大坑(fundamental challenge)。

Featureized image pyramids

featureized image pyramids(Feature pyramids built upon image pyramids)是一个基本处理方法。示意图如下:

Object Detection -- 论文FPN(Feature Pyramid Networks for Object Detection)解读

Featureized image pyramids需要以下操作:

  • 先做image pyramid,展成不同尺度的image
  • 提取不同尺寸的image的feature map

知道如何整Featureized image pyramids,也就很明白这个方法的问题所在:慢!

提取不同尺寸的feature map需要大量时间,这也从根本上扼杀了这个方法不能实用。退一万步来说,现在我们就要这么整,如果想训练一个end-to-end的模型,内存也不支持,总不能再像R-CNN一样存到disk来整了吧。

Featureized image pyramids不好使,先排除掉。我们就想其他办法

ConvNet提取feature maps 

在实用ConvNet提取图片特征时,每个layer都是在提取feature maps,因为subsampling的存在,整个ConvNet天生就存在multi-scale的feature maps,也就是我们说的pyramidal shape。

但是这样的底层和高层的feature maps很难组合到一起用,为什么?因为ConvNet提取过程中,底层高分辨率的feature map和高层的feature maps的通道数(depth)不同,这直接导致了极大的语义间隔(large sementic gaps)。

SSD

SSD是第一个吃螃蟹的,即使用ConvNet’s pyramidal feature hierarchy。SSD复用了不同layer上的feature maps(前馈网络已经计算了,没有额外的计算)。但是SSD只是从较为高层的feature maps开始计算的(论文是Conv4_3),并添加了几个CONV层提取特征。

SSD与传统方法的对比如下:

Object Detection -- 论文FPN(Feature Pyramid Networks for Object Detection)解读

SSD的问题在于没有充分利用不同尺度的feature maps,尤其是底层高分辨率的feature maps,这些high-resolution的feature maps对small objects的检测尤为的重要。

FPN的思路

FPN的思路是:ConvNet的多个layer提取出的不同尺度的feature maps,这形成一个pyramid hierarchy,从上到下建立一个top-down pathway and lateral connections。(这个top-down的path就是用高层的特征来弥补底层的特征,从而得到高分辨率、强语义的预测,也就是弥补了上面不同尺度feature map之间通道不同存在的large segmantic gaps)

FPN和SSD和一些其他方法[1],[2]的比较如下:

Object Detection -- 论文FPN(Feature Pyramid Networks for Object Detection)解读

Feature Pyramid Networks

FPN的目标是:ConvNet’s的pyramidal feature hierarchy是有着low to high levels 的语义的,利用这样的hierarchy构建一个高语义的feature pyramid。

Bottom-up pathway

ConvNet’s的forward计算是自下而上的,特征图经过卷积核计算,会以成倍的比例缩小(pooling layer的原因)。但同时有需多卷积层输出的feature map的尺寸是一样的,针对输出一样大小的feature map的卷积层我们统称为stage

stage为单位,我们在构建feature pyramid时,以每个’stage’为一个pyramid level,取每个stage最后layer输出的feature map作为pyramid level。至于为什么会这么取?论文说是:这样取是理所当然的,因为靠后的layer有着更强壮的feature。

Top-down pathway and lateral connections

如何实现Top-down pathway?

前面我们得到了一个高语义的feature pyramid。 高层的feature map有着强语义,大感受野的的特性,底层的feature map有着high-resolution,并且保留对small object的语义。在构建好的feature pyramid上,要设法连接高层和底层,充分利用不同层feature map的特性。那么该怎么连接?

FPN的做法是: 将高层的feature map上采样得到高分辨率的feature map,再与其在pyramid内下一个level的feature map做横向连接(lateral connections)。这样可以让高层特征得到加强。同时保证横向连接的两层特征在空间尺寸上要相同。这样做是为了利用底层的high-resolution的特性。

Object Detection -- 论文FPN(Feature Pyramid Networks for Object Detection)解读

上图是构建top-down pathway的细节:

  • 高层feature上采样,采用最邻近上采样法(用这个方法是图简便),spatial resolution放大2倍。处理后的feature map记为mapup
  • 底层feature经过1×1的卷积layer,让feature的通道数和高层的feature map相同。处理后的feature map记为mapdown(论文中说的是reduce通道数,难道不是增加吗?)
  • mapupmapdown做像素相加(element-wise addition),迭代直到产生finest resolution map
  • 迭代后,在每个合并的feature map上使用3×3卷积得到最终map。(为了减少上采样过程中混叠效应)

这里整Top-down pathway的道理是啥?

这里直接贴出作者在CVPR上的QA:

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

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

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

Object Detection -- 论文FPN(Feature Pyramid Networks for Object Detection)解读

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