Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
原文链接
Abstract
现存的CNN需要固定的输入,这个需求需要人为调整来满足,并且在输入端图像是任意尺寸时会降低识别的准确率。
SPP特点在于能够只用对输入的全图进行一次特征提取避免了RCNN中的对不同候选区重复进行卷积运算,并且能够从任意大小的候选区中生成定长的特征表示来进行预测。
1 Introduction
当时的CNN需要输入固定尺寸的图形,这限制了输入的长宽比和大小。然而在将图形处理以满足输入要求是,区域裁剪可能会导致物体部分的丢失,伸缩变换也可能会导致预想之外的几何畸变。识别的准确度也会因为上下文信息的丢失和畸变而下降。除此之外,固定的预设大小不能适应多变的物体大小。
卷积层本身可以适应各种尺寸和大小的输入,限制仅来自于网络深层的全连接层。
将SPP层添加在卷积层的尾部,可以由任意维度的特征生成定长的输出,来满足全连接层的输入要求,从而去除了对网络输入图片尺寸和大小的限制。
SPP对于深层CNN有几个显著的特点:
- SPP能够对任何输入尺寸产生定长输出,这是滑窗池化所做不到的;
- SPP使用的多梯度的空间划分,而滑窗池化只能有固定的窗大小。多梯度的池化增强的模型面对物体变形时的健壮性;
- 由于对输入不加限制,SPP可以从各种大小的图片中提取特征信息。
SPP的灵活性使得它在测试时可以对全图生成特征表示。RCNN之所以慢,就是因为它在特征提取时的卷积运算有大量重复。使用了SPP后先从全图进行特征提取,再根据候选区对特征进行划分,只需一次通过卷积层,大大减少了运算量。
SPP可以在训练时输入不同尺寸和大小的图片,这增强了模型对不同大小的图片的适应性、减少了过拟合的风险。
2 Deep Networks with Spatial Pyramid Pooling
2.1 Convolutional Layers and Feature Maps
只有全连接层需要定长的输入,而卷积层可以接受任意尺寸的输入
卷积层的输出被称为特征图feature map
2.2 The Spatial Pyramid Pooling Layer
SPP可以通过不同梯度空间划分的池化来保留空间信息
为了让深层网络适应任意的输入尺寸,作者将(AlexNet中)第五层的池化层替换为了空间金字塔池化层SPP,在各个滤波器不同的空间划分中对特征表示进行池化(文中作者使用的是max pooling)
SPP使得输入不禁可以是任意尺寸,还可以是任意大小
空间池化层的网络结构
2.3 Training the Network with the Spatial Pyramid Pooling Layer
理论上来说,上述的网络结构可以对任何输入尺寸进行常规的反向传播训练。但是在实际中,卷积神经网络框架和GPU的交互在运行时更倾向于输入固定尺寸的图片。下面会介绍如何在发挥GPU工具的优点的同时保留SPP的性能。
Single-Size Training
假设第五层卷积层的输出尺度为a*a,对于SPP层中一个n*n的空间划分,使用窗大小为a/n、步长为a/n的滑窗法来实现,在第六层则将SPP层中所有的输出串联起来。
对输入特征图为13*13的3级SPP中参数配置举例
Multi-size Training
对于不同尺寸的输入,可以证明使用与上述一样的方法可以得到相同尺寸的输出。
证明详见SPP(Spatial Pyramid Pooling)详解 - 理想几岁 - 博客园 (cnblogs.com)
5 Conclusion
图像的尺寸和大小在识别任务中很重要,但在深层网络中不受重视。SPP则补足了这个缺口