• 好久没有写文章了(对不起我在划水),最近在看北京的租房(真真贵呀)。
  • 预告一下,最近无事,根据个人多年的证券操作策略和自己的浅显的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、Yolov3、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的论文了。
  • 论文地址:https://arxiv.org/abs/1803.01534
  • 论文名称:Path Aggregation Network for Instance Segmentation

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

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

6 BiFPN

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

  • BiFPN:2019年google团队提出的。
  • 论文地址:https://arxiv.org/abs/1911.09070
  • 论文名称:EfficientDet: Scalable and Efficient Object Detection



    结构不难理解,其实就是在PAnet的结构上,做了一些小改进。但是这个论文的主要贡献还是EfficientDet的提出,所以BiFPN只是算是一个小贡献。

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

  • Recursive-FPN:效果之好令人惊讶,使用递归FPN的DetectoRS算是目标检测任务的SOTA了吧。(2020年的论文)
  • 论文链接:https://arxiv.org/abs/2006.02334
  • 论文名称: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层,把通道数恢复到要求的值就可以用了。

常见特征金字塔网络FPN及变体的更多相关文章

  1. 特征金字塔网络 FPN

    一. 提出背景 论文:Feature Pyramid Networks for Object Detection  [点击下载] 在传统的图像处理方法中,金字塔是比较常用的一种手段,像 SIFT 基于 ...

  2. 特征金字塔网络Feature Pyramid Networks

    小目标检测很难,为什么难.想象一下,两幅图片,尺寸一样,都是拍的红绿灯,但是一副图是离得很近的拍的,一幅图是离得很远的拍的,红绿灯在图片里只占了很小的一个角落,即便是对人眼而言,后者图片中的红绿灯也更 ...

  3. (转) 干货 | 图解LSTM神经网络架构及其11种变体(附论文)

    干货 | 图解LSTM神经网络架构及其11种变体(附论文) 2016-10-02 机器之心 选自FastML 作者:Zygmunt Z. 机器之心编译  参与:老红.李亚洲 就像雨季后非洲大草原许多野 ...

  4. 完全图解RNN、RNN变体、Seq2Seq、Attention机制

    完全图解RNN.RNN变体.Seq2Seq.Attention机制 本文主要是利用图片的形式,详细地介绍了经典的RNN.RNN几个重要变体,以及Seq2Seq模型.Attention机制.希望这篇文章 ...

  5. SPPNet(特征金字塔池化)学习笔记

    SPPNet paper:Spatial pyramid pooling in deep convolutional networks for visual recognition code 首先介绍 ...

  6. 二叉查找树及B-树、B+树、B*树变体

    动态查找树主要有二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree), 红黑树 (Red-Black Tree ), 都是典型的 ...

  7. [译] Z-variant (Z变体)

    阅读目录 1. Z轴上的区别 2. 问题 Unihan 的 kZVariant 字段 译自: en.wikipedia.org/wiki/Z-variant | 已发布zh.wiki 在Unicode ...

  8. RNN-GRU-LSTM变体详解

    首先介绍一下 encoder-decoder 框架 中文叫做编码-解码器,它一个最抽象的模式可以用下图来展现出来: 这个框架模式可以看做是RNN的一个变种:N vs M,叫做Encoder-Decod ...

  9. Gradle for Android ( 构建变体 )

    链接: http://77blogs.com/?p=38 https://www.cnblogs.com/tangZH/p/10999060.html 有时候我们一个app需要有不同的版本,不同的版本 ...

随机推荐

  1. Blend学习之Loading加载动画

    介绍: Blend for visual studio 与 visual studio 是有区别的 两者虽然是IDEA 但是专注的方向是不同的,前者是专注UI后者专注业务逻辑,当然你要用blend f ...

  2. 【随笔】Apache降权和禁用PHP危险函数

    测试环境: Windows Server 2003 + phpstudy 首先在win2003里运行phpstudy,这里注意需要选择应用系统服务模式,应用之后重启phpstudy. 打开系统服务(开 ...

  3. 玩转 SpringBoot2.x 之整合 thumbnailator 图片处理

    1.序 在实际项目中,有时为了响应速度,难免会对一些高清图片进行一些处理,比如图片压缩之类的,而其中压缩可能就是最为常见的.最近,阿淼就被要求实现这个功能,原因是客户那边嫌速度过慢.借此机会,阿淼今儿 ...

  4. 多测师讲解python_003.2练习题

    # 1.分别打印100以内的所有偶数和奇数并存入不同的列表当中# 2.请写一段Python代码实现删除一个list = [1, 3, 6, 9, 1, 8]# 里面的重复元素不能用set# 3.将字符 ...

  5. Chrome浏览器调试移动端网页,测试人员也可以轻松debug

    现在的产品,移动端应用占据很大市场,在测试过程中,就会测试各种各样的移动端页面.测试过程,或多或少会发现些问题,无非就是前端.后端问题.后端接口问题,可以利用工具:Fiddler或charles抓包查 ...

  6. 最近集训的图论(思路+实现)题目汇总(内容包含tarjan、分层图、拓扑、差分、奇怪的最短路):

    (集训模拟赛2)抢掠计划(tarjan强) 题目:给你n个点,m条边的图,每个点有点权,有一些点是"酒吧"点,终点只能在"酒吧",起点给定,路可以重复经过,但点 ...

  7. 《我想进大厂》之Dubbo普普通通9问

    这是面试专题系列第四篇,Dubbo系列.Dubbo本身并不复杂,而且官方文档写的非常清楚详细,面试中dubbo的问题一般不会很多,从分层到工作原理.负载均衡策略.容错机制.SPI机制基本就差不多了,最 ...

  8. 如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (三)

    修改数据结构   基本的 API 已经定义好了,现在是个修改 Person 对象结构的好时机.只要修改 Person 结构体,数据库和 API 都会自动做出相应的修改.   我要做的是在 Person ...

  9. PyCharm搭配github错误处理

    ssh -T git@github.com 验证时 报错Could not open a connection to your authentication agent. 删除前面生成的.ssh文件 ...

  10. GoogleHacking基本语法使用

    查看网络后台 intitle:admin 搜索url中的关键字:asp?id= inurl:asp?id=