1. 摘要
2. 引言
3. 相关工作
4. FPN
5. 应用
1. 摘要
特征金字塔是多尺寸obj detection的基础组件,其缺点是计算量及内存开销大。本文提出一种基于CNN的特征金字塔映射方法,这种方法避免了额外的开销。提出的这种结构是具有侧向连接的Top-Down结构,用于构建不同尺寸上的高级语义映射,称为FPN。
2. 引言
在不同尺寸上的obj detection是比较困难的。一般,特征金字塔通过图像金字塔来构建(Fig 1 (a))。这种金字塔具有尺寸不变性,因为可以通过调节金字塔层级来对obj的尺寸变化进行补偿抵消。这种方法在手动特征工程时代相当重要,如DPM中。但在多任务识别中,特征工程被CNN所取代。CNN不仅能够获取高级语义表达,而且对于尺寸变化具有很好的泛化性能(Fig 1 (b))。但是,即使CNN具有这种泛化性,特征金字塔在准确性上仍然高于CNN。在每一层图像金字塔上获取特征的优势是能够产生多尺寸的特征表达,这种表达在不同层级上都具有很强的语义,包括高分辨率层。但是,这种方法太慢了,不适于线上。
CNN能够一层层的计算特征,通过降采样层,能够形成金字塔层级的特征映射。但是在不同深度上的特征语义差别较大。高分辨率的特征映射较为低级,不利于obj detection的表达能力。
SSD采用了CNN 特征金字塔(Fig 1 (c))。但是为了避免低层的特征,在较高层开始构建特征金字塔。所以SSD放弃了低级特征表达。而这些表达有助于较小obj的检测。
3. 相关工作
(1)特征工程和早期神经网络
SIFT feature和HOG feature常被用于图像金字塔计算。早期人们也通过浅层CNN在图像金字塔上进行人脸检测。
(2)Deep CNN目标检测
OverFeat类似早期的神经网络,在图像金字塔上利用CNN作为滑动窗口作为detector。R-CNN在CNN上采用proposal策略,并在分类前将proposal缩放到相同大小。SPPnet在单张图片上采用了更为有效的region-based detector来提取特征。具有更高精度的Fasr R-CNN和Faster R-CNN能够在单一尺寸上进行特征计算。多尺寸检测性能优良,尤其对于small object。
(3)使用多层的方法
FCN对多个尺寸上每个类别的得分进行求和来计算语义分割。HyperNet、ParseNet和ION这些算法则在预测前将不同层特征进行堆叠。SSD和MS-CNN则在多层上进行预测,并未堆叠特征或得分。
U-Net和Sharp-Mask采用侧向/跳跃连接,以结合高-低级语义用于图像分割。FCNs提出一种Laplacian金字塔表达来改善性能。尽管这些方法采用了金字塔层级结构,但他们不像图像金字塔一样在不同层级上独立预测。实际上,对于obj detection来说,还是需要在多层级上进行预测。
4. FPN
FPN的目的是利用CNN的金字塔层级结构(语义特征由低到高),来构建一个始终具有高级语义的特征金字塔。FPN是一种通用结构,在本文中,主要用于RPN和Fast R-CNN。
FPN输入是单张任意尺寸的图片,并在多个层级中输出合适尺寸的特征映射。这个过程独立于backbone。本文中给出了backbone为ResNets的结果。FPN包括bottom-up路径、top-down路径、侧向连接。
(1)Bottom-up
Bottom-up路径即backbone CNN的前向计算,其给出的特征映射层级缩放步长为2。也就是说,所有同一same卷积作为特征映射的一层(一个stage),并在同一same最后一层作侧向连接。
对于ResNets,将每个stage的最后一个res-block输出标记为{C2,C3,C4,C5},对应的stride为{4,8,16,32}。
(2)Top-down和侧向连接
Top-down通过上采样(反卷积)的方法,从高层级特征映射来产生语义更强的高分辨率特征。并且通过bottom-up侧向连接得到特征来增强这些特征(在同一尺寸大小上进行连接)。bottom-up特征映射的语义较为低级,但是由于降采样的次数较少,这些特征对于定位更为精确。
如Fig 3所示,对于粗分辨率特征映射,通过缩放步长2来进行上采样(邻近值法)。将低级语义特征映射通过1x1卷积压缩channel后,与上采样得到的特征进行堆叠。
因为在传统的特征图像金字塔中,分类/回归共享各个金字塔层级。所以FPN固定了所有最后输出特征映射层的通道数为256。这些特征层输出时无激活层。
5. 应用
(1)基于RPN
RPN是一种与类别无关的滑动窗口detector。在原始的RPN中,通过一个具有密集的3x3滑动窗口上和单尺寸卷积特征映射上进行计算,用来执行obj/non-obj二分类和bbox回归。这揭示了3x3卷积层后跟随两个1x1卷积用于分类/回归的一种方法,我们将之称为网络head。obj/non-obj标准和bbox回归是通过一组anchors来定义的。anchors是一组预定义的不同高宽比的box,用于覆盖不同形状的obj。
我们用FPN来代替单尺寸特征映射来适应RPN。我们给FPN的每个输出层设计一个同样的head(3x3+1x1+1x1卷积)。因为head在所有金字塔层的所有位置上都有密集的滑动,所以没有必要在特定的层次上设置多尺度的锚点。相反,给每个层级都设定了一个单尺寸的anchors。形式上,我们定义的anchors具有的面积为{322,642,1282,2562,5122},分别对应{P2,P3,P4,P5},每一层的anchors的高宽比为{1:2,1:1,2:1},所以总的有15个anchors。
如同Fast R-CNN中,根据anchors和ground-truth的IoU来分配训练标签。IoU > 0.7视为正标签,IoU < 0.3视为负标签。这意味着,ground-truth的尺寸并没有实际分配到金字塔层级上去,而是将其与anchor相关联后分配到金字塔层级。
我们注意到各金字塔层级上的head的参数是共享的,我们也试过参数不共享,结果是共享参数的性能更好。这一优点类似于图像金字塔,但这里的head可以用于任何尺寸图像计算。
(2)基于Fast R-CNN
Fast R-CNN是基于region的detector,其RoI pooling用于提取特征。Fast R-CNN通常在单尺寸特征上运行。为了应用FPN,需要将不同尺寸的RoIs分配到不同金字塔层级。因此,当探测器运行在图像金字塔上时,可以采用基于区域的探测器分配策略。将宽w高h的RoI分配到第Pk层:
然后将预测器head(分类和bbox回归)添加到所有RoIs层。所有层级的head共享参数。