博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【论文笔记】:FPN
阅读量:3904 次
发布时间:2019-05-23

本文共 3744 字,大约阅读时间需要 12 分钟。

&Title

&Summary

文章的思想比较简单,主要是利用特征金字塔对不同层次的特征进行尺度变化后,再进行信息融合,从而可以提取到比较低层的信息,也就是相对顶层特征来说更加详细的信息。顶层特征在不断地卷积池化过程中可能忽略了小物体的一些信息,特征金字塔通过不同层次的特征融合使得小物体的信息也能够比较完整地反映出来。这个方法可以广泛地应用在针对小目标物体的检测上。

我的理解:本来图片通过卷积池化操作,只能保留住大物体的特征,换句话说,小物体的特征基本上就会被过滤掉。现在通过top-down的操作,对特征图片进行上采样(放大图片(小物体就跟着放大了,也就比较容易检测到),与对应的卷积层的下一层的尺寸相同),然后融合他们的特征,高层特征得到了增强,每一层预测所用的feature map都融合了不同分辨率、不同语义强度的特征,可以完成对应分辨率大小的物体进行检测,保证每一层都有合适的分辨率以及强语义特征。

即:少位置信息而多语义信息的top层feature map + 多位置信息而少语义信息的down层feature map

&Research Objective

特征金字塔是检测不同尺度上目标的识别系统中的基本组件。但最近的深度学习目标检测器避免使用金字塔表示,部分是因为计算量和存储都很大

作者的目标:目标是很自然的利用ConvNet的特征层次的金字塔形状,同时生成一个在所有层次上都有很强语义的特征金字塔。(就是设计一个算法,使得(计算/存储) 开销合理,而却有效检出小物体。)

&Problem Statement

特征金字塔是检测不同尺度上目标的识别系统中的基本组件。但最近的深度学习目标检测器避免使用金字塔表示,部分是因为计算量和存储都很大。现有的三种 Scale handling 方法都不好!

1.Featurized image pyramid 计算开销和存储开销都太大
(这是一个特征图像金字塔,整个过程是先对原始图像构造图像金字塔,然后在图像金字塔的每一层提出不同的特征,然后进行相应的预测。这种方法的缺点是计算量大,需要大量的内存;优点是可以获得较好的检测精度。它通常会成为整个算法的性能瓶颈,由于这些原因,当前很少使用这种算法。)
在这里插入图片描述
基于深度网络的检测算法出来之前,检测算法基本都是基于这种scale handling;后来出现的SNIP、SNIPER也是基于Image Pyramid。

2.Single feature map 框不出小物体

(通过这种操作我们可以获得不同尺寸的feature map,这样其实就类似于在图像的特征空间中构造金字塔。它的缺点是我们仅仅关注深层网络中最后一层的特征,却忽略了其它层的特征,但是细节信息可以在一定程度上提升检测的精度。因此有了下图所示的架构)
在这里插入图片描述
使用Single feature map的包括R-CNN、SPPNet、Fast R-CNN、Faster R-CNN、YOLOv1以及R-FCN系列。

3.Pyramidal feature hierarchy 底层大scale的feature map 语义信息少,虽然框出了小物体,但小物体容易被错分

(整个过程就是首先在原始图像上面进行深度卷积,然后分别在不同的特征层上面进行预测。它的优点是在不同的层上面输出对应的目标,不需要经过所有的层才输出对应的目标(即对于有些目标来说,不需要进行多余的前向操作),这样可以在一定程度上对网络进行加速操作,同时可以提高算法的检测性能。它的缺点是获得的特征不鲁棒,都是一些弱特征(因为很多的特征都是从较浅的层获得的))。

在这里插入图片描述

使用Pyramidal feature hierarchy的包括SSD。

&Method(s)

提出FPN网络。

设计出包含 “ top-down路径 ” 和 “ 横向连接 ” 的套件,来融合 “ 少位置信息而多语义信息的top层feature map ” 和 “ 多位置信息而少语义信息的down层feature map ” :

在这里插入图片描述
具体地,“ top-down路径 ” 采用 2×上采样 来保证左右的scale相同;“ 横向连接 ” 采用 conv1×1 降维来保证所有channel都为256-d
在这里插入图片描述
自底向上的过程 就是神经网络普通的正向传播过程,特征图经过卷积核计算,通常会越变越小。

自上而下的过程 是把更抽象、语义更强的高层特征图进行上采样,然后把该特征横向连接至前一层特征,因此,高层特征得到了增强,每一层预测所用的feature map都融合了不同分辨率、不同语义强度的特征,可以完成对应分辨率大小的物体进行检测,保证每一层都有合适的分辨率以及强语义特征。

横向连接 根本上来说,是将上采样的结果和自下而上生成的特征图进行融合。我们将卷积神经网络中生成的对应层的特征图进行1×1的卷积操作,将之与经过上采样的特征图融合,得到一个新的特征图,这个特征图融合了不同层的特征,具有更丰富的信息。 这里1×1的卷积操作目的是改变channels,要求和后一层的channels相同。(在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积目的是消除上采样的混叠效应,如此就得到了一个新的特征图。)

值得注意的是:横向连接的两层特征在空间尺寸上要相同,这样做可以利用底层定位细节信息


作者使用的这个架构,通过自上而下的通道和横向连接,综合了低分辨率、语义强的特征,和高分辨率,语义上弱的特征。

这个结果是一个在所有层次上都有丰富语义的特征金字塔,而且是从输入的单幅图像尺度上快速构建的。换句话说,作者给出的是如何构建网络中的特征金字塔,这个金字塔可以用于替换特征化的图像金字塔,而且不用牺牲表示能力、速度或内存

&Evaluation

实验部分:

实验一 RPN网络中的特征金字塔
实验二 fast rcnn中的特征金字塔
参考链接:

  • :文章中有两个实验的解析讲解。
  • Result:

&Conclusion

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

&Thinking

  • FPN如今已成为Detecton算法的标准组件,不管是one-stage(RetinaNet、DSSD)、two-stage(Faster
    R-CNN、Mask R-CNN)还是four-stage(Cascade R-CNN)都可用;
  • R-FCN系由于其自身设计的缘故,无法使用FPN;
  • 底层feature map位置信息多但语义信息少,FPN为其增强了语义信息,提升了对小物体的检测效果;
  • 提升检测精度,包括加强对小物体的检测效果和对大物体的检测效果。一般来说,顶层feature map是检测大物体的关键,因为容易框出大物体;底层feature map是检测小物体的关键,因为容易框出小物体;
  • FPN只是给底层featue map提供了福利,所以仅仅提升了对小物体的检测效果;
  • 顶层feature
    map语义信息多但位置信息少,还是对检测大物体不利。后来者PAN在FPN的基础上再加了一个bottom-up方向的增强,使得顶层feature
    map也可以享受到底层带来的丰富的位置信息,从而把大物体的检测效果也提上去了:

&Notes

1. 利用FPN构建Faster R-CNN检测器步骤

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

在这里插入图片描述

2. 为什么FPN能够很好的处理小目标?
在这里插入图片描述
如上图所示,FPN能够很好地处理小目标的主要原因是:

  • FPN可以利用经过top-down模型后的那些上下文信息(高层语义信息);
  • 对于小目标而言,FPN增加了特征映射的分辨率(即在更大的feature
    map上面进行操作,这样可以获得更多关于小目标的有用信息),如图中所示;

参考链接

注:整体论文笔记风格采用的是实验室师兄建议的方式,刚看完论文后,感觉明白了,但又不知道明白了啥,故借鉴了三位大神的FPN论文学习笔记,加深了自己对FPN的理解,特此表示感谢,也从他们的文章中,集成了我所认为重要的,好理解的笔记内容。以便后面翻阅复习。

转载地址:http://ejxen.baihongyu.com/

你可能感兴趣的文章
总结: 笔试中常见virtual函数问题
查看>>
vue中使用mock模拟后端数据
查看>>
vue中如何实现table的详情页获取及渲染
查看>>
常见的数据库有哪几种?
查看>>
Java后端的SQL语句
查看>>
vue中利用js函数截取时间的年月日时分秒
查看>>
数据库(sql)截取时间数据方法函数
查看>>
vue中报错:Error in render: TypeError: Cannot read property name(或者其他属性) of undefined解决办法
查看>>
vue中报错:`value` provides invalidate moment time.
查看>>
前端发起网络请求 返回状态码含义
查看>>
VUE 使用router-link路由参数变化,页面数据不刷新问题
查看>>
vue使用v-for实现hover点击button按钮颜色变换效果
查看>>
vue中如何利用js如何检测网络状况,监听网络状态
查看>>
vue获取当前日期以及前七天日期
查看>>
vue + antd项目Table的前台内容排序
查看>>
Ant Design Vue 如何分页(后台传入)
查看>>
vue项目pdf文档的在线预览(注:意外服务器响应或pdf文件缺失损坏解决办法)
查看>>
js取小数点后几位方法总结
查看>>
Vue中父组件向子组件传递一个动态的值,子组件保持实时更新。
查看>>
vue父子组件之间互相传值,以及组件之间方法相互调用
查看>>