论文解读FPN 用于目标检测的特征金字塔网络

Posted 一颗小树x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文解读FPN 用于目标检测的特征金字塔网络相关的知识,希望对你有一定的参考价值。

前言

FPN,全名是Feature Pyramid Networks,中文称为特征金字塔网络;它是目前用于目标检测、语义分割、行为识别等方面比较重要的一个部分,对于提高模型性能具有较好的表现。

在特征提取中,低层的特征语义信息比较少,但目标位置准确,分辨率高。高层的特征语义信息比较丰富,但是目标位置比较粗略,分辨率低和比较抽象。于是有些算法采用多尺度特征融合的方式,在融合后的特征做预测。

 FPN的预测是在不同特征层独立进行的,即:同时利用低层特征高分辨率和高层特征的高语义信息,通过融合这些不同层的特征达到预测的效果。作者认为足够低层高分辨的特征对于检测小物体是很有帮助的。

论文地址:Feature Pyramid Networks for Object Detection

目录

前言

一、特征提取框架

1.1 图像金字塔

 1.2 采用最后一层的特征

1.3 多尺度特征融合

1.4 FPN特征金字塔

 二、FPN特征金字塔与多尺度特征融合

三、FPN网络结构

四、FPN嵌在RPN中

五、模型效果

六、小结

七、FPN代码


一、特征提取框架

首先看看4种特征框架的使用形式,包括: 图像金字塔、采用最后一层的特征、多尺度特征融合、FPN特征金字塔,下面逐一介绍。

1.1 图像金字塔

图像金字塔,将图像做成不同的尺寸,然后不同尺寸的图像,生成对应的不同尺寸的特征。

对每一种尺度的图像进行特征提取,能够产生多尺度的特征表示,并且所有尺寸的特征图都具有较强的语义信息,甚至包括一些高分辨率的特征图。

缺点:推理时间大幅度增加;内存占用大;

 1.2 采用最后一层的特征

采用最后一层的特征做预测,是常见目标检测网络的做法。像SPP net,Fast RCNN,Faster RCNN是采用这种方式,预测仅采用网络最后一层的特征。

1.3 多尺度特征融合

像SSD(Single Shot Detector)采用这种多尺度特征融合的方式,只通过下采样提取特征,从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。但它没有上采样过程。

看看SSD的网络结构:

   FPN作者认为SSD算法中没有用到足够低层的特征;低层的特征语义信息比较少,但目标位置准确和分辨率高,足够低层的特征对于检测小物体是很有帮助的。

1.4 FPN特征金字塔

顶层特征通过上采样和低层特征做融合,而且每层都是独立预测的。FPN使每一层不同尺度的特征图都具有较强的语义信息。 

 二、FPN特征金字塔与多尺度特征融合

多尺度特征融合的方式,在融合后的特征做预测。经过多次上采样并融合特征到最后一步,拿最后一步生成的特征做预测

  FPN是在不同特征层独立进行预测。

三、FPN网络结构

FPN的主网络采用ResNet,网络结构思路是一个自底向上的线路,一个自顶向下的线路,横向连接(lateral connection)

ResNet:https://github.com/kaiminghe/deep-residual-networks

 1*1的卷积核减少卷积核的个数,也就是减少feature map的个数,并不改变feature map的尺寸大小。

 自底向上的过程也称为下采样,feature map尺寸在逐渐减小,同时提取到的特征语义信息逐渐丰富。在下采样过程中,feature map的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变feature map大小的层归为一个stage,因此每次抽取的特征都是每个stage的最后一个层输出,这样就能构成特征金字塔。

自顶向下的过程也称为上采样(upsampling)进行,而横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合(merge)。其中,1*1的卷积核减少卷积核的个数,也就是减少feature map的个数,并不改变feature map的尺寸大小。

在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应(aliasing effect)。并假设生成的feature map结果是P2,P3,P4,P5,和原来自底向上的卷积结果C2,C3,C4,C5一一对应。

四、FPN嵌在RPN中

Faster RCNN中的RPN网络是以主网络的某个卷积层输出的feature map作为输入,只用这一个尺度的feature map。对于特征层上的每一个点,用anchor的方式预设了9个框。

FPN嵌在RPN时,RPN输入是 FPN生成不同尺度特征并融合后的特征。即把RPN应用到每一个P层。由于每个P层相对于原始图片具有不同的尺度信息,因此作者将原始RPN中的尺度信息分离,让每个P层只处理单一的尺度信息。

FPN对{32^2、64^2、128^2、256^2、512^2}这五种尺度的anchor,分别对应到{P2、P3、P4、P5、P6}这五个特征层上。每个特征层都处理1:1、1:2、2:1三种长宽比例的候选框。P6是专门为了RPN网络而设计的,用来处理512大小的候选框。它由P5经过下采样得到。

COCO 最小数据集上测试,RPN,FPN,目标检测结果:

五、模型效果

COCO 最小数据集上测试,Fast R-CNN,FPN,目标检测结果:

使用 Fast R-CNN在 COCO 最小集上进行评估, 目标检测结果:

使用 Faster R-CNN在 COCO 最小集上进行评估, 目标检测结果:

Faster R-CNN:https://github.com/rbgirshick/py-faster-rcnn

六、小结

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

不同大小的目标都经过了相同的降采样比例后会出现较大的语义代沟,最常见的表现就是小目标检测精度比较低。(比如VGG)。FPN可以在保证特征图相对于输入是全分辨率的,而且还能结合底层细节信息和高层语义信息,因此能显著提高物体特别是小物体的检测效果。

七、FPN代码

FPN开源代码1:https://github.com/unsky/FPN

这是非官方版本的,用于目标检测的特征金字塔网络代码,框架caffe 。

FPN开源代码2:https://github.com/jwyang/fpn.pytorch

这是非官方版本的,用于目标检测的特征金字塔网络代码,框架Pytorch 。

本文参考:https://blog.csdn.net/u014380165/article/details/72890275

https://zhuanlan.zhihu.com/p/92005927https://github.com/caffe2/caffe2

本文只提供参考学习,谢谢。

以上是关于论文解读FPN 用于目标检测的特征金字塔网络的主要内容,如果未能解决你的问题,请参考以下文章

经典论文解读YOLOv3 目标检测

经典论文解读YOLOv3 目标检测

极智Paper | 单级特征检测网络 YOLOF

FPN

FPN(feature pyramid networks)算法讲解

FPN(feature pyramid networks)算法讲解