论文正文
链接:链接,提取码:f8qi
概述
feature pyramid是用来检测不同尺寸物体的1种基本方法,以往主要有四种做法: 做法1 :Feature pyramids built upon image pyramidsF或者简称eaturized image pyramid。做法 :将图片缩放到不同的尺寸,然后分别进行特征提取与检测。优点 :效果好;缺点 :计算代价、存储代价都很大。主要用于传统的手工提取特征的时代。
做法2 :Single feature map。做法 :在CNN的最后一个feature 上做检测。优点 :速度快;基于CNN的特性,对于语义级别的特征掌握良好;缺点 :小目标检测能力较差。如:YOLO v1,v2 做法3 :基于CNN固有的金字塔结构,使用不同层的feature map进行检测。优点 :没有额外的金字塔构建的开销,使用了CNN的特性。缺点 :不同层之间存在差异,相对而言,浅层网络的语义表征能力没有那么强,会影响最后的结果。如SSD 做法四 :使用了skip connection的方法,将浅层的细粒度信息与深层的语义级特征融合,构建top-down的path,组成特征金字塔。缺点 :只是在最后一层检测,语义级别的特征层层上采样中稀释了。 本文 :同方法4,但是是在每一层都做检测。
问题 :上面说了feature pyramid是用来检测不同scale的object的1种基本方法,但很多基于深度学习的检测器却都没有使用这个方法在多个尺度不同的feature map上进行检测,其中部分原因是它们计算量和存储开销大。
本文做的研究 :基于CNN固有的bottom-up path的结构,和通过skip connection构建top-down path,仅需少量成本生成feature pyramid。并且feature pyramid的每个层都具有优秀的语义级别的特征,最终在特征金字塔的的各个层上进行目标检测
细节
整体流程
流程 :输入任意尺度的图片,输出各个特征金字塔层的feature map,接着针对这些feature map进行检测。 构建 :FPN的构建包括1个bottom-up path、1个top-down path和skip connection
bottom-up path
这部分主要就是骨干网络的前向传播过程,不断进行卷积,feature map尺寸不断减小的过程。 注 :这里有一个stage 的概念。将骨干网络分为若干个stage,每个statge就是特征金字塔的一层。在每个stage中,所有层的特征图的尺寸都是相同的,取这个stage中,最后一层的输出作为stage的输出。并且,相邻stage中,下采样倍数是2。
作者举了一个例子 就是ResNet,可以分为5个stage
[
C
1
,
C
2
,
C
3
,
C
4
,
C
5
]
[C_1,C_2,C_3,C_4,C_5]
[C1?,C2?,C3?,C4?,C5?](下采样倍数分别是2,4,8,16,32),但是为了考虑存储开销,只是将后面四个stage的输出作为特征金字塔的的4层。
top-down path
构建 :主要是通过将浅层的细粒度信息与深层的语义级特征融合,也就是skip connection过程来构建top-down path。 为什么要这个过程呢? 主要是因为深层语义级别的特征,有利于识别物体,但是不利于定位物体,而浅层的细粒度信息就有利于定位物体,难以识别物体,将两者融合,能够提高模型的性能。
skip connection
对于top-down path的feature map进行上采样2倍,并和来自bottom-up path的相同尺寸的feature map进行concat操作就完成了skip connection操作。之后得到的,特征融合了的feature map还得继续做3×3的卷积,得到特征金字塔的输出
[
P
2
,
P
3
,
P
4
,
P
5
]
[P_2,P_3,P_4,P_5]
[P2?,P3?,P4?,P5?] 注 :所谓的concat操作就是在通道这个维度上直接堆叠起来。继续做3x3的卷积是因为深层语义级别的特征在上采样的过程中有损耗,一般做3x3的卷积就是用来不改变输入输出的情况下做特征提取的,1x1的卷积是减小通道数的。
|