FPN学习总结

简介

FPN——Feature Pyramid Networks for Object Detection,其是CVPR 2017年的论文,在多尺度目标检测领域很强!很多多尺度的目标检测算法都采用了FPN作为backbone,很强很常见。

作者提出的多尺度的object detection算法:FPN(feature pyramid networks)。原来多数的object detection算法都是只采用顶层特征做预测,但我们知道低层的特征语义信息比较少,但是目标位置准确;高层的特征语义信息比较丰富,但是目标位置比较粗略。另外虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测,而本文不一样的地方在于预测是在不同特征层独立进行的。

常见的几种多尺度目标检测算法的backbone结构图大致如下:
在这里插入图片描述
额。。。其实我觉得放上这张图之后,FPN基本就讲完了。。。。。。。。。。。。。。。

框架解析

利用FPN构建Faster R-CNN检测器

  • 首先,选择一张需要处理的图片,然后对该图片进行预处理操作;
  • 然后,将处理过的图片送入预训练的特征网络中(如ResNet等),即构建所谓的bottom-up网络;(前馈)
  • 接着,如下图所示,构建对应的top-down网络(即对层4进行上采样操作(2×),先用1x1的卷积对层2进行降维处理,然后将两者相加(对应元素相加),最后进行3x3的卷积操作);(3*3的卷积是为了消除上采样和特征融合后的一下混乱)
  • 接着,在图中的4、5、6层上面分别进行RPN操作,即一个3x3的卷积后面分两路,分别连接一些1x1的卷积用来进行分类和回归操作;(参考Faster R-CNN
  • 接着,将上一步获得的候选ROI分别输入到4、5、6层上面分别进行ROI Pool操作(固定为7x7的特征);
  • 最后,在上一步的基础上面连接两个1024层的全连接层,然后分两个支路,连接对应的分类层回归层

在这里插入图片描述

为什么FPN能够很好地处理多尺度目标

  • FPN可以利用经过top-down模型后的那些上下文信息(深层feature map的语义信息);
  • 对于小目标而言,FPN增加了特征映射的分辨率(即在更大的feature map上面进行操作,这样可以获得更多关于小目标的有用信息),其次这个大分辨率的feature map还融合了深层feature map的语义信息,即现在的feature map(如上图6)中位置信息和语义信息都有了,所以效果会好。

ResNet-FPN + Fast R-CNN

ps:上图来自知乎文章

将ResNet-FPN和Fast RCNN进行结合,实际上就是改进版的Faster RCNN了,但与最初的Faster RCNN不同的是,FPN产生了特征金字塔 [ P 2 , P 3 , P 4 , P 5 , P 6 ] \left[P2, P3, P4, P5, P6\right] [P2,P3,P4,P5,P6],而并非只是一个feature map。金字塔经过RPN之后会产生很多region proposal。这些region proposal是分别由 [ P 2 , P 3 , P 4 , P 5 , P 6 ] \left[P2, P3, P4, P5, P6\right] [P2,P3,P4,P5,P6]经过RPN产生的,但用于输入到Fast RCNN中的是 [ P 2 , P 3 , P 4 , P 5 ] \left[P2, P3, P4, P5\right] [P2,P3,P4,P5],也就是说要在 [ P 2 , P 3 , P 4 , P 5 ] \left[P2, P3, P4, P5\right] [P2,P3,P4,P5]中根据region proposal切出ROI,再进行后续的分类和回归预测。问题来了,我们要选择哪个feature map来切出这些ROI区域呢?实际上,我们会选择最合适尺度的feature map来切ROI。具体来说,我们通过一个公式来决定宽 w w w和高 h h h的ROI到底要从哪个 P k P_k Pk来切,如下:

k = ⌊ k 0 + log ⁡ 2 ( w h / 224 ) ⌋ k=\left\lfloor k_{0}+\log _{2}(\sqrt{w h} / 224)\right\rfloor k=k0+log2(wh /224)

这里 224 224 224表示用于预训练的ImageNet图片的大小。 k 0 k_0 k0表示面积为 w × h = 224 × 224 w \times h = 224 \times 224 w×h=224×224的ROI所应该在的层级。作者将 k 0 k_0 k0设置为4,也就是说 w × h = 224 × 224 w \times h = 224 \times 224 w×h=224×224的ROI应该从 P 4 P_4 P4中切出来。假设ROI的scale小于224(比如说是 112 ∗ 112 112 * 112 112112), k = k 0 − 1 = 4 − 1 = 3 k = k_0 - 1 = 4 - 1 = 3 k=k01=41=3,就意味着要从更高分辨率的 P 3 P_3 P3中产生。另外, k k k值会做取整处理,防止结果不是整数。

这种做法很合理,大尺度的ROI要从低分辨率的feature map上切,有利于检测大目标,小尺度的ROI要从高分辨率的feature map上切,有利于检测小目标

总结

总之目前在多尺度目标检测和图像分割等领域非常常用,效果提升明显,且速度依旧很快。FPN的总结如下:

  • FPN 构架了一个可以进行端到端训练的特征金字塔;
  • 通过CNN网络的层次结构高效的进行强特征计算;
  • 通过结合bottom-up与top-down方法获得较强的语义特征,提高目标检测和实例分割在多个数据集上面的性能表现;
  • FPN这种架构可以灵活地应用在不同地任务中去,包括目标检测、实例分割等;

以下是FPN网络的架构细节图:
在这里插入图片描述
done~

References

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值