【CV论文笔记】Feature Pyramid Networks

2020-01-31  本文已影响0人  蘑菇轰炸机

本文主要用于介绍各路大神(包括rbg, kaiming he等)于2017年提出的一种高效提取特征的特征金字塔网络(FPN网络)。本笔记主要为方便初学者快速入门,以及自我回顾。

论文链接:https://arxiv.org/pdf/1612.03144.pdf

基本目录如下:

  1. 摘要
  2. 核心思想
  3. 总结

------------------第一菇 - 摘要------------------

1.1 论文摘要

“特征金字塔(feature pyramids)”是多尺度目标检测系统的核心基础组成部分。但是最近提出的一些深度学习的目标检测器都在避免使用特征金字塔,主要原因在于该结构的计算太占内存且耗时。本论文,在我们深入研究了多尺度问题的本质以后,我们提出了一种不怎么耗费额外计算资源的“特征金字塔”构建方法。该方法就是自上而下平行连接各层卷积网络的输出结果,从而在各个尺度范围内构建结合多层语义信息的特征图。我们将这个结构命名为“特征金字塔网络 (Feature Pyramid Network)”,该网络结构在各个应用上均带来了比较明显的提升。将Faster R-CNN改造加入FPN后,在COCO的目标检测数据集上,创造了最好的单模型记录。另外,我们的方法在单GPU上能有6 FPS,因此也具有一定的应用前景。

------------------第二菇 - 核心思想------------------

2.1 多层特征组合的构建方法梳理

多尺度语义信息的融合一直是大家致力的方向,本文在开篇也点评了多种构建方法,大概的方法总结如下图,

方法梳理.jpg

分别简单总结一下就是,
a) 用图片金字塔生成特征金字塔
b) 只在特征最上层做预测
c) 特征层分层预测
d) 本文提出的FPN,融合了多个特征层,去做预测

2.2 特征金字塔网络架构详解

本文的目的其实就是为了提出一种通用的构建具有高级语义信息的特征金字塔的方法。因此,整一套特征金字塔网络其实是有很强的实用性的,具体的应用我们后面再举例聊,这里,先解释清楚如何构建。

如果用一句话来概述整套架构的本质,就是利用了卷积网络本身的层次结构特性,即,每一次卷积操作提取出的特征其包含的语义信息是不一样的。因此,FPN就是将每一次卷积操作后得到的特征进行整合,从而最终得到融合各层语义信息的特征。

具体的方法是,输入任意一张大小的图片,在卷积网络的多个层级最后以全卷积的方式输出多个比例的特征图,然后再将这些特征图以一定的方式连接起来。(注:因为整一套操作都是独立于卷积网络之外的,所以并不会造成多余的时间消耗)整个过程,涉及到3个细节步骤,分别为bottom-up pathway, top-down pathway, lateral connections,我们接下来分别剖析每一个过程。(参照原论文,直接用的经典ResNets网络来举例说明)

2.2.1 自下而上的路径(bottom-up pathway)

这个其实就是最普通的卷积神经网络的提取特征的过程,自底向上逐层浓缩表达特征的一个过程。很早大家就都发现了,低层的特征通常反映图片的基本信息,而高层的特征往往是包含图片的轮廓特征啊,类别特征等等。

回到本文上来讲,首先要明确一个阶段(stage)的概念,即作者定义在一个阶段的意思就是,很多层其实输出的特征图大小是一样的,那么多个这些层,就可以被理解为一个阶段,或者说处于同一个阶段。而每一个阶段的最后一层输出的特征图,就是要参与到我们特征金字塔的构建中的(那必然是最后一层,毕竟最后一层是公认的特征浓缩表达最好的)。

具体到ResNets上来,先贴一张,ResNets的论文原图,明晰一下其结构,

ResNets结构图.jpg

根据上面的描述,此时被选中的就是4个残差块的最后一层输出,conv2_x, conv3_x, conv4_x, conv5_x。之所以没有选 conv1_x 还是从内存占用的角度考虑的。

2.2.2 自上而下的路径(top-down pathway)

该路径的作用其实就是将第一阶段提取出的不同尺度大小的特征图进行连接,而具体的连接方法就是横向连接。

2.2.1 横向连接(lateral connections)

横向连接的本质其实就是像素相加,因此,在连接之前,必须要对高层的特征图进行上采样(最近邻采样法),然后才能与前一层的特征进行横向拼接。如下图所示,

特征金字塔网络拼接示意图.jpg

上图还有一个细节就是,前一层要经过一个1*1的卷积,才能与上采样后的那层进行拼接,文中给出的解释是为了减少通道数。该步骤将会迭代进行,直到生成最精细的特征图。

具体到ResNets上来说,在迭代开始的时候,会在C_5后面简单的加一个1*1卷积,来产生最coarse的特征图,并且在最后会加一个3*3的卷积核来处理已经融合的特征图(消除上采样的混叠效应)。因此,混合后,对应的特征图就是{P_2, P_3, P_4, P_5},分别对应上面的{C_2, C_3, C_4, C_5}。值得一提的是,所用的金字塔特征层,都会共享最后的分类全连接层,因此,他们的维度都是256。

至此,整一套作者的设计思想已经讲明白了,如果有不明白的同学,看一下我从网上盗的一张源码解析图【1】,上面有很详细的解析,建议大家都看一下,

网络结构源码解析.jpg

也推荐大家看一下这篇博文,里面结合代码的分析很棒。

2.3 特征金字塔网络在目标检测的应用

如果理解了特征金字塔,那其实理解其在文中说明的应用应该不难,这里举一个其在RPN网络的应用。

熟悉Faster R-CNN的同学,肯定都知道RPN的作用,就是提出一系列的候选框嘛~但是RPN的做法就是在最后一层特征图上,预设了多个不同尺度的anchor,从而达到不同尺度大小的定位分类的目的。而用了特征金字塔网络以后,那很明显,每一阶段的特征图输出,再与前一阶段融合以后,都可以当作特征图来预设anchor,输入到后面分类定位。只不过,这时候,对于不同层级提出的特征图,就无需设置多种大小尺度的anchor,每一个特征图都有其对应的anchor大小~后续的实验结果也确实表明,该种方法的有效性~

其他的例子,及结果展示本文就不做展开了,只要理解了特征金字塔的操作方式,理解其应用都应该比较简单~

------------------第三菇 - 总结------------------

3.1 总结

到这里,整篇论文的核心思想已经说清楚了。本论文主要是提出了一种新的思路来构建融合卷积网络的多层语义特征,该网络依据其特性也被命名为“特征金字塔网络”,作者随后将其运用于了目标检测领域,并实验证明其可行性,为后续发展奠定了基础。

简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下本文作者的思路,也简单表述了一下,自己对FPN网络的理解。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁

参考文献:
【1】https://zhuanlan.zhihu.com/p/35854548

上一篇下一篇

猜你喜欢

热点阅读