FPN(Feature Pyramid Networks for Objection Detection)算法理解

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

Github代码(caffe2):https://github.com/unsky/FPN

1、文章概述

    FPN是CVPR2017的文章。FPN是一种思想,类似Resnet里的残差模块一样,提出这种特征金字塔的思想用来改造现有的网络结构,如Faster R-CNN及RPN网络。评价是在COCO数据集上,评价指标用的是AR,检测速度大约在6FPS。论文整体思想比较简单,但是实验部分很详细充分,代码已开源!

    原来多数的object detection算法都是只采用顶层特征做预测,但我们知道低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。另外虽然也有些算法采用多尺度特征融合的方式,但是多尺度要么只是在一个卷积层上进行(比如Faster rcnn),要么就是虽然利用了多个特征层,但低层的特征信息没有充分利用(比如SSD)。而本文不一样的地方在于预测是在不同特征层独立进行的,且充分利用融合了低层和高层的信息。 

2、四种多尺度金字塔

 文章的Figure 1 展示了 4 种多尺度特征金字塔方法,如下图(摘自博客:https://blog.csdn.net/WZZ18191171661/article/details/79494534):


(a)图像金字塔

    即将图像resize成不同的scale,然后在不同的scale的图像上生成对应的不同的scale的特征图,再分别在不同的特征图上进行预测。

    这种方法的优点在于可以获得较好的检测精度,缺点是计算量大,需要大量的内存。早期的DPM就采用了这种方法。有些算法会在测试的时候采用图像金字塔。

(b)多层卷积池化,仅在最后一层的特征图上做预测

    即对原始图像进行多次卷积池化的操作,仅采用网络的最后一层的特征图做预测。SPPnet、Fast R-CNN和Faster R-CNN都是采用的这种方法。

    这种方法速度快,内存占用较少;缺点在于仅关注了深层网络的最后一层的特征,却忽略了其他层的特征,尤其是浅层的特征没有充分利用。

(c)多层卷积池化,在网络不同的层抽取不同尺度的特征做预测

    即在原始图像上进行深度卷积,结合不同层的特征做多尺度融合的预测。SSD、DSSD等就是用的这种方式。

    这种方法的优点是对于有些目标来说,不需要进行多余的前向传播操作,因为简单的目标仅需要较浅层的特征就可以检测,复杂的目标用较深层的特征去检测。这样在一定程度上加速了网络的传播,不增加额外的计算量。缺点是获得的特征不鲁棒,对于小目标检测效果不好(比如SSD没有利用比Conv4_3更浅的层的特征,而这些浅层的特征图有着交大的resolution,对小目标的检测很重要)。

(d)FPN的“Bottom-up pathway”+"Top-down pathway”+“lateral connections”

    具体操作后面会将。总的来说就是上采样的特征和低层特征融合,每层独立预测。

    优点是:浅层特征对定位效果好,深层特征由于语义更高级,对分类结果好。通过对深层和浅层特征的融合,使定位信息和分类信息相结合,构建一个更深的特征金字塔,融合了多层特征信息,并在不同的特征层上预测,大大提高了识别准确率(AP)。

3、FPN的具体连接结构

    具体连接示意图如下,对应的“Bottom-up pathway”、“Top-down pathway”和“lateral connections”在图中已标注:


        具体操作:上图中A相对B是高层,B相对A是浅层。将A特征图上采样(最近邻上采样,2倍),B特征图用1*1卷积核卷积,目的是使B层的特征图的channels与A层的特征图channels相同。然后A、B层特征图对应channels元素点和(注意此时A、B的特征图的resolution应相同),成为C。C后面再接一个3*3的卷积,目的是消除“上采样的混叠效应”。具体结构如下图:


    这里讲一下Bottom-up pathway。即网络的前向传播过程。在前向传播过程中,feature map的大小在经过某些层后会改变,而经过其他一些层时不会改变,作者将不改变feature map大小的层归为一个stage,每次抽取的特征都是在每个stage的最后一层的输出。

    具体地,以Resnet-101为例,作者使用每个阶段最后一个残差结构的特征作为输出,用{C2、C3、C4、C5}表示,对应Conv2_x、Conv3_x、Conv4_x、Conv5_x的最后一个输出,他们对于输入图像具有4、8、16、32像素的步长。Resnet-101结构如下图(摘自博客:https://blog.csdn.net/dcxhun3/article/details/59055974):


    C2、C3、C4、C5在“Top-down pathway”和“lateral connections”之后对应 P2、P3、P4、P5。

4、FPN在Faster R-CNN和RPN上的具体实现

具体模型图可参考作者源码里提高的流程图:


    Faster R-CNN是对Conv4_3后的特征图用RPN扫描,而这里是对不同的P都用RPN扫描一遍,即原来Faster R-CNN仅有一次RPN操作,这里有5次RPN操作。每个FPN后的RPN都对应一个尺度的Anchor。P2、P3、P4、P5、P6分别对应Anchors的尺寸为32*32、64*64、128*128、256*256、512*512。每个anchor又对应三种不同的aspect ratio:1:2、1:1、2:1。因此FPN后的Faster R-CNN有15种不同的anchor。

    关于anchor的整幅样本标定与Faster R-CNN中相同,不同的是Faster R-CNN中关于跨边界的anchor是舍弃的,这里作者并没有舍弃这些anchor。

注意:仔细看上面的流程图,发现这里的ROI Pooling环节输入的是RPN后的ROI和data(即输入图像),而Faster R-CNN里的ROI Pooling环节输入的是RPN后的ROI和feature map(特征图),此外这里有4个ROI Pooling和相应的RCNN,可能是merge和share框架图的区别,这里我没看懂,请知道的同学指点一下!

    实验部分作者做的特别充分详细,可参见原文。

参考博客:

https://blog.csdn.net/u014380165/article/details/72890275

https://blog.csdn.net/WZZ18191171661/article/details/79494534

https://blog.csdn.net/dcxhun3/article/details/59055974

https://blog.csdn.net/quincuntial/article/details/80152306

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值