常见特征金字塔网络FPN及变体

文章目录:web

  • 1 概述面试

  • 2 FPN结构概述算法

  • 3 最简单的FPN结构小程序

  • 4 无FPN的多stage结构微信小程序

  • 5 简单双向融合微信

  • 6 BiFPN网络

  • 7 Recursive-FPN循环特征金字塔网络数据结构


很久没有写文章了(对不起我在划水),最近在看北京的租房(真真贵呀)。app

预告一下,最近无事,根据我的多年的证券操做策略和本身的浅显的AI时间序列的算法知识,还有本身Javascript的现学现卖,在微信小程序上弄了个简单的辅助系统。我先试试效果如何,不错的话未来弄个文章给你们介绍介绍。机器学习

感兴趣能够联系炼丹兄哦,WX:cyx645016617。

1 概述

FPN是Feature Parymid Network的缩写。

目标检测任务中,像是在YOLO1中那种,对一个图片使用卷积来提取特征,通过了多个池化层或者stride为2的卷积层以后,输出了一个小尺度的特征图。而后再这个特征图中来作目标检测

换句话说,最后获得的目标检测的结果,彻底是依赖于这一个特征图,这种方法叫作单stage物体检测算法

可想而知,这种方法很难有效的识别出不一样大小的目标,因此产生了多stage检测算法,其实就是要用到了特征金字塔FPN。

简单的说就是:一个图片一样是通过卷积网络来提取特征,原本是通过多个池化层输出一个特征图,如今是通过多个池化层,每通过一个池化层都会输出一个特征图,这样其实就提取出了多个尺度不一样的特征图。

而后尺度不一样的特征图,丢进特征金字塔网络FPN,作目标检测。

(若是还不明白,继续往下看就明白啦~)

2 FPN结构概述

从图中能够看到:

  • 左边的c1啊,c2啊表示不一样尺度的特征图。原始的图像input的尺寸通过一个池化层或者stride为2的卷积层以后,尺寸减小一半,这样就变成了C1特征图;若是又通过一个池化层,那么就变成C2特征图。
  • C3,C4,C5,C6,C7这个四个尺度不一样的特征图,进入FPN特征金字塔网络进行特征融合,而后再用检测头预测候选框。
  • 这里说一些我的的理解(若是有错误,请指正呀): 这里恰好区分一下 多stage检测算法和特征金字塔网络的区别。
    • 多stage检测算法:从上图中咱们能够看到P3,P4,P5,P6,P7这五个不一样尺度的特征图进入一个检测头预测候选框,这个检测头其实就是一我的检测算法,不过这个神经网络的输入是多个不一样尺度的特征图,输出则是候选框,因此这个多sgtage检测算法;
    • 特征金字塔网络:这个实际上是让不一样尺度的特征图之间互相融合,来加强特征图表征能力的一种手段。这个过程不是预测候选框,应该算进特征提取的过程。FPN神经网络的输入也是多个不一样尺度的特征图,输出也是多个不一样尺度的特征图,和输入的特征图是相同的。

因此呢,一个多stage检测算法实际上是能够没有FPN结构,直接用卷积网络输出的C3,C4,C5,C6,C7放进检测头输出候选框的。

3 最简单的FPN结构

自上而下单向融合的FPN,事实上仍然是当前物体检测模型的主流融合模式。如咱们常见的Faster RCNN、Mask RCNN、Yolov三、RetinaNet、Cascade RCNN等,自上而下的单向的FPN结构以下图所示 :

这个结构的精髓就是:C5的特征图,通过上采样,而后和C4的特征图拼接,而后把拼接以后的特征图通过卷积层和BN层,输出获得P4特征图。其中P4和C4的特征图的shape相同。

通过这样的结构,因此P4能够学到来自C5更深层的语义,而后P3能够学到来自C4更深层的语义。我的对此结构有效的解释,由于对于预测精度来讲,确定是越深层的特征提取的越好,因此预测的越准确,可是深层的特征图尺度较小,经过上采样和浅层的特征图融合,能够强化浅层特征图的特征表述。

4 无FPN的多stage结构

这是一个没有用FPN结构的结构图。无融合,又利用多尺度特征的典型表明就是2016年日出的鼎鼎有名的SSD,它直接利用不一样stage的特征图分别负责不一样scale大小物体的检测。

能够看到,卷积网络输出的特征图直接就放进了特征头输出候选框。

5 简单双向融合

原来的FPN是自深到浅单向的融合,如今是先自深到浅、再从浅到深双向的的融合。PANet是第一个提出从下向上二次融合的模型:

  • PAnet:Path Aggregation Network.2018年的CVPR的论文了。

  • 论文名称:Path Aggregation Network for Instance Segmentation

从图中能够看到,先有一个跟FPN相同的上采样过程,而后再从浅到深用stride为2的卷积完成下采样。用stride为2的卷积层把浅层的特征图P3下采样,而后尺寸和C4相同,二者拼接以后再用3x3的卷积层进行整理,生成P4特征图

此外还有不少复杂的双向融合的操做,这里不仔细介绍啦。

6 BiFPN

上面的PAnet是最简单的双向FPN,可是真正起名为BiFPN的是另一个论文。

  • BiFPN:2019年google团队提出的。

  • 论文名称:EfficientDet: Scalable and Efficient Object Detection 结构不难理解,其实就是在PAnet的结构上,作了一些小改进。可是这个论文的主要贡献仍是EfficientDet的提出,因此BiFPN只是算是一个小贡献。

7 Recursive-FPN循环特征金字塔网络

  • Recursive-FPN:效果之好使人惊讶,使用递归FPN的DetectoRS算是目标检测任务的SOTA了吧。(2020年的论文)

  • 论文名称:DetectoRS: Detecting Objects with Recursive Feature Pyramid and Switchable Atrous Convolution

我的在自身的目标检测任务中,也使用了RFN结构,虽然要求的算力提高了一倍,可是效果确实提高的比较明显,大概有3到5个点的提高。  下面来看结构图:能够看到,这个有一个虚线和实线构成了一个特征图和FPN网络之间的一个循环。下面展现一个2-step的RFP结构,也就是循环两次的FPN结构。(若是是1-step,那就是通常的FPN结构)能够看到,就是把以前的FPN结构中的P3,P4,P5这些,再拼接到卷积网络的对应的特征提取过程。拼接以后使用一个3x3卷积层和BN层,把通道数恢复到要求的值就能够用了。


<<小白学PyTorch>>

扩展之Tensorflow2.0 | 22 Keras的API详解(下)池化、Normalization层

扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积、激活、初始化、正则

扩展之Tensorflow2.0 | 20 TF2的eager模式与求导

扩展之Tensorflow2.0 | 19 TF2模型的存储与载入

扩展之Tensorflow2.0 | 18 TF2构建自定义模型

扩展之Tensorflow2.0 | 17 TFrec文件的建立与读取

扩展之Tensorflow2.0 | 16 TF2读取图片的方法

扩展之Tensorflow2.0 | 15 TF2实现一个简单的服装分类任务

小白学PyTorch | 14 tensorboardX可视化教程

小白学PyTorch | 13 EfficientNet详解及PyTorch实现

小白学PyTorch | 12 SENet详解及PyTorch实现

小白学PyTorch | 11 MobileNet详解及PyTorch实现

小白学PyTorch | 10 pytorch常见运算详解

小白学PyTorch | 9 tensor数据结构与存储结构

小白学PyTorch | 8 实战之MNIST小试牛刀

小白学PyTorch | 7 最新版本torchvision.transforms经常使用API翻译与讲解

小白学PyTorch | 6 模型的构建访问遍历存储(附代码)

小白学PyTorch | 5 torchvision预训练模型与数据集全览

小白学PyTorch | 4 构建模型三要素与权重初始化

小白学PyTorch | 3 浅谈Dataset和Dataloader

小白学PyTorch | 2 浅谈训练集验证集和测试集

小白学PyTorch | 1 搭建一个超简单的网络

小白学PyTorch | 动态图与静态图的浅显理解

<<小白学图像>>

小白学论文 | EfficientNet强在哪里

小白学论文 | 神经网络初始化Xavier

小白学论文 | 端侧神经网络GhostNet(2019)

小白学目标检测 | RCNN, SPPNet, Fast, Faster

小白学图像 | BatchNormalization详解与比较

小白学图像 | Group Normalization详解+PyTorch代码

小白学图像 | 八篇经典CNN论文串讲

图像加强 | CLAHE 限制对比度自适应直方图均衡化

小白学卷积 | 深刻浅出卷积网络的平移不变性

小白学卷积 | (反)卷积输出尺寸计算

损失函数 | 焦点损失函数 FocalLoss 与 GHM

<<小白学机器学习>>

小白学ML | 随机森林 全解 (全网最全)

小白学SVM | SVM优化推导 + 拉格朗日 + hingeLoss

小白学LGB | LightGBM = GOSS + histogram + EFB

小白学LGB | LightGBM的调参与并行

小白学XGB | XGBoost推导与牛顿法

评价指标 | 详解F1-score与多分类F1

小白学ML | Adaboost及手推算法案例

小白学ML | GBDT梯度提高树

小白学优化 | 最小二乘法与岭回归&Lasso回归

小白学排序 | 十大经典排序算法(动图)

杂谈 | 正态分布为何如此常见

Adam优化器为何被人吐槽?

机器学习不得不知道的提高技巧:SWA与pseudo-label

<<小白面经>>

秋招总结 | 一个非Top学校的跨专业的算法应届研究生的几十场面试

【小白面经】快手 AI算法岗 附答案解析

【小白面经】 拼多多 AI算法岗 附带解析

【小白面经】八种应对样本不均衡的策略

【小白面经】之防止过拟合的全部方法

【小白面经】梯度消失爆炸及其解决方法

【小白面经】 判别模型&生成模型

<<小白健身>>

【小白健身】腹肌搓衣板化

【小白健身】8个动做练爆胸大肌

【小白健身 】背阔大做战(下)

【小白健身】背阔大做战(上)

【小白健身】徒手健身40个动做(gif)

【小白健身】弹力带轻度健身gif动图







本文分享自微信公众号 - 机器学习炼丹术(liandanshu)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索