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)是一个基本处理方法。示意图如下:
Featureized image pyramids需要以下操作:
- 先做image pyramid,展成不同尺度的image
- 提取不同尺寸的image的feature map
知道如何整Featureized image pyramids,也就很明白这个方法的问题所在:慢!
提取不同尺寸的feature map需要大量时间,这也从根本上扼杀了这个方法
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开始计算的(论文是
SSD与传统方法的对比如下:
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)
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的特性。
上图是构建top-down pathway的细节:
- 高层feature上采样,采用最邻近上采样法(用这个方法是图简便),spatial resolution放大2倍。处理后的feature map记为
mapup - 底层feature经过
1×1 的卷积layer,让feature的通道数和高层的feature map相同。处理后的feature map记为mapdown (论文中说的是reduce通道数,难道不是增加吗?) - 将
mapup 和mapdown 做像素相加(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)
对于小物体,一方面我们需要高分辨率的 feature map 更多关注小区域信息,另一方面,如图中的挎包一样,需要更全局的信息更准确判断挎包的存在及位置。