Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun
1.摘要
现存的CNNs都需要一个固定尺寸的input image,本文提出了一种池化方法,称为“Spatial Pyramid Pooling”,将之运用到CNNs中可以消除CNNs对input image 固定尺寸的限制。应用了“Spatial Pyramid Pooling”的CNN模型称为SPP-net。SPP-net不管input image的尺寸如何,都可以生成一个固定长度的特征向量。
SPP-net在目标检测领域十分有效,使用SPP-net,我们只需对input image计算一次特征图,然后对任意尺寸的Region Proposals对应的特征区域进行Spatial Pyramid Pooling池化,可以产生一个固定尺寸的特征表示。该方法避免了重复计算特征图,与R-CNN相比,可以节省大量时间,在VOC2007上比R-CNN快24-102倍。
2.概述
在训练或测试CNN时,存在一个技术问题:CNN只接受固定尺寸的image,这限制了input image的长宽比与缩放大小。为了迎合CNN这一要求,input image 可能需要作出诸如裁剪(crop)或者变形(warp)等妥协,这种妥协可能会降低图像识别的准确度。
而CNN之所以只能接受固定尺寸的image是因为后方的全连接层。其实卷积层对图像的尺寸倒无所谓,全连接层需要固定维度的输入向量,所以根本上是全连接层要求卷积层为之提供一个固定维度的特征向量。为了满足全连接层的这一要求,同时也不为难卷积层,于是我们引入了一个“Spatial Pyramid Pooling layer”(SPP layer)插入在全连接层与卷积层之间,作为一个“适配器”。SPP layer对卷积层生成的特征图进行特殊池化,产生固定维度的特征向量来兼容全连接层。
Spatial Pyramid Pooling拥有一些卓越的特性:
- SPP可以无视输入图像的尺寸,产生固定维度的输出,这是滑动窗口池化所不能做到的。
- SPP使用多种级别的空间金字塔来划分出多种尺寸的池化窗口(bin),而滑动窗口池化只使用了一种尺寸的池化窗口。
- 多亏SPP对输入尺寸的灵活性,SPP可以在各种尺寸上进行特征池化。
3.技术细节
卷积层接受的是任意尺寸的image,所以其输出的特征图也是各种尺寸的,SPP layer将特征图划分为对个空间块(bin),这些bin的尺寸与特征图的尺寸成固定比例,因此,bin的数量也是固定的。
假设SPP layer将特征图划分成了
M
M
M个bin,特征图有
k
k
k个通道,我们在每个bin中做max pooling,则该特征图经过SPP后将会产生一个
k
M
kM
kM维的特征向量,因为
k
k
k和
M
M
M都是固定的,故无论input image的尺寸如何,都可以在SPP layer产生出
k
M
kM
kM维的向量。如下图所示,使用了三个级别的空间金字塔,分别是{4x4,2x2,1x1},分别对特征图进行分割与池化,分别产生了16x256,4x256,1x256三种向量,将它们先伸展,再拼接,得到长度为21x256=5376维的特征向量。
网络的训练
理论上,上述的SPP-net可以无视input image的尺寸,通过标准的后向传播算法进行训练。但实际上,GPU更适合于运行固定尺寸的image。接下来描述的训练方法,将在保持SPP-net的同时,结合GPU的优势。
-
单尺寸训练
对于一张固定大小的input image,事先会计算好SPP layer所需要的bin的大小。假设从卷积层conv5输出的特征图大小为axa,对于一个级别的为nxn的空间金字塔,它所划分的bin的大小为win=fllor(a/n),滑动步长为str=ceil(a/n).如果SPP layer中有 l l l个层级的空间金字塔,则将同样进行 l l l次如此的操作,产生 l l l个特征输出。后方的全连接层将会与这 l l l个输出相连接。 -
多尺寸训练
假设通过crop得到了一张尺寸为240x240的image,将之缩放为180x180尺寸,然后将缩放前后的image分别送入SPP-net中进行交替地迭代训练,对于180x180和224x224尺寸的image输入,SPP layer输出的都是相同固定尺寸的向量。它们将共享网络中的所有参数。
目标检测
- Region Proposals的提取方式:“fast”模式的 selective search 算法,产生2000个Region Proposals。
- 网络结构:SPP-net + ZF-5
对于每个Region Proposals, 使用4级空间金字塔 (1×1, 2×2, 3×3, 6×6, totally 50 bins) 进行特征池化,生成12800维的向量,送入全连接层,最后用SVM做分类,以及进行边框回归,和R-CNN相同。
细节:
将input image 缩放 m i n ( w , h ) = s ∈ S = { 480 ; 576 ; 688 ; 864 ; 1200 } min(w, h )=s\in S = \left\{480; 576; 688; 864; 1200\right\} min(w,h)=s∈S={480;576;688;864;1200}种尺寸,再加上自身一个6种尺寸,通过以上6种尺寸缩放后,选取图像上的Region Proposals的尺寸最接近224x224的缩放尺寸,对该种尺寸缩放后的image进行conv5特征图的计算,然后找出特征图中对应于Region Proposals的位置,进行SPP池化。