作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun
SPP—Net
提出背景:
由于CNN的输入需要固定大小的图片(比如224*224),而固定大小的图片是通过将原始图片crop或者wrap得到的,这样,会使原始图片几何失真,最终会使网络训练的准确率下降。
crop或者wrap产生的图片效果如下:
CNN分为卷积层(convolutionallayer)和全连接层(fully-connected layer)。卷积层不需要固定大小的输入,可以产生任意大小的feature map,而全连接层需要固定大小/长度的输入。所以上面提到的CNN需要固定大小的输入就是因为全连接层。
因此,作者提出了空间金字塔池化(spatial pyramid pooling,即SPP),这种方法可以解除CNN对于固定大小输入的限制。作者将这个SPP层放在CNN中最后一个卷积层的后面,全连接层前面。如下图:
上面那个是传统的CNN模式,下面那个是作者提出的新方法。
空间金字塔池化层(SpatialPyramid pooling Layer)
上图是一种SPP层的结构。上图中,其实就是对最后一层卷积层同时进行4x4,2x2,1x1的池化,然后将3个池化后“矩阵”转换成“向量”连接起来。由于池化是按比例下采样上一层图像,故对于任意大小的出入,经过4x4池化后总是得到4x4的输出。所以对于上图,对于任意大小的输入,最后经过SPP层之后,总是得到21x256维的输出(21=4*4+2*2+1*1)。
另外,作者还提出1x1的池化成为“globalpooling”,有以下几个优点:1)可以减小模型大小和减小过拟合 2)一个global average pooling可以提高准确率 3)一个global max pooling可以用于弱监督物体识别(weakly supervised object recognition)。
实验
作者在实验的时候,发现以下几种方法可以提高准确率。
1) Multi-level Pooling Improves Accuracy. 比如4-levelpyramid其中一个例子就是(6x6,3 x 3,2x2,1x1)。
2) Multi-size Training Improves Accuracy. 比如训练的时候输入图片为224x224和180x180,测试的时候仍然为224x224.
3) Full-image Representations Improves Accuracy.
4) Multi-view Testing on Feature Maps
详细的说明可以看看论文。
其他说明
图像分类(Image Classification)的大致流程如下:
物体检测(Object Detection)的简略流程如下:
说明:
1)使用SPP进行检测,先用提候选proposals方法(selective search)选出候选框,不过不像RCNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到conv5上,因为候选框的大小尺度不同,映射到conv5后仍不同,所以需要再通过SPP层提取到相同维度的特征,再进行分类和回归,后面的思路和方法与RCNN一致。实际上这样子做的话就比原先的快很多了,因为之前RCNN也提出了这个原因就是深度网络所需要的感受野是非常大的,这样子的话需要每次将感兴趣区域放大到网络的尺度才能卷积到conv5层。这样计算量就会很大,而SPP只需要计算一次特征,剩下的只需要在conv5层上操作就可以了。
2)映射说的简单一点其实就是:输入图片与卷积层conv5是对应的,而region proposal与输入图像也是对应的,所以region proposal与conv5也是对应的。通过某种映射关系,就可以求出region proposal具体对应conv5的哪个部分。这样,对应每个region proposal不需要进行卷积运算,只需要求一个映射关系就可以,所以速度快乐很多。
3)其实具体流程还涉及到其他的,比如对region proposal重新调整大小等,具体细节参照论文。
参看文献:
RCNN学习笔记(3):Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition(SPP-net)
目标检测——从RCNN到Faster RCNN 串烧