SPP-Net
参考链接:https://blog.csdn.net/u011534057/article/details/51219959
Title
Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition
Link
https://arxiv.org/pdf/1406.4729.pdf
Abstract
现有的卷积神经网络都需要固定尺寸的输入图像,这种需求是人工制定的,强制的图像大小或许会降低识别准确率。在研究中,我们为网络配备了另一种池化策略,“spatial pyramid pooling”—空间金字塔池化,为了消除上述需求。这种新型网络结构,我们称之为“SPP-Net”,它能够在不管输入图像大小、缩放的情况下,将图像池化为固定长度的表示。空间金字塔池化对目标变形也有很好的鲁棒性。
SPP-Net对目标检测领域同样有着重大意义,使用SPP-Net,我们可以一次计算得到整张图像的特征图,然后对特征的任意区域进行池化生成固定长度表示,并训练目标探测器。这种方法避免了重复卷积计算提取特征。
Introduction
现有技术要求,输入图像尺寸固定,对于尺寸不同的图像,通常采取crop(裁剪)、wrap(拉伸)等操作处理。
裁剪得到的图像,可能不包含整个目标;而拉伸,会改变目标的形状特征。
对于分类问题,都会导致分类效果不好。
而空间金字塔池化就可以消除这一问题。
为什么卷积神经网络要固定输入尺寸呢?
有两个原因:
- 卷积层,卷积层本身不需要固定尺寸,但是在设计整体网络结构时,需要对其尺寸进行定义。
- 全连接层,全连接层的输入必须是固定大小,这是从定义上给予的约束。
在本文,我们介绍了空间金字塔池化结构,移除了网络对于固定尺寸输入图像的约束。我们在最后一层卷积层的后面加入SPP层,由SPP层池化特征图并生成固定长度的输出,给予全连接层。
SPP可以通俗的理解为(spatial pyramid matching or SPM),是一个由BOW(Bag-of-Words)扩展而来的模型。
SPP-Net没有考虑到CNN的上下文内容。
SPP有几个闪光点:
- SPP能够不管输入图像尺寸如何,生成固定长度的输出。
- SPP使用多尺度空间序列,提高了对于变形目标的鲁棒性。而普通滑窗池化只有一个尺寸。
- SPP能够对任意尺度提取的特征进行池化。
DEEP NETWORKS WITH SPATIAL PYRAMID POOLING
Convolutional Layer and Feature Maps
考虑流行的七层架构,前五层为卷积层,其中一部分会连接一般的池化层。这些池化层也可以看做是“卷积”。最后两层是全连接层,以及一个N维的Softmax作为输出,N是类别总数。
The Spatial Pyramid Pooling Layer
卷积层接受任意尺寸的输入,但是分类器(SVM/Softmax)或全连接层都需要固定长度的向量作为输入。这些向量都可以通过BoW思想生成。空间金字塔池化改进了BoW,通过池化当前空间序列,保留了一定的空间信息。这些空间序列与图像尺寸成比例,所以序列数量就是固定的,而不管实际图像尺寸如何。与一般的池化层形成对比,池化层输出的尺寸依赖于输入尺寸。
为了适配到深度神经网络,我们替换了卷积层的最后一个池化层,Figure 3说明了我们的方法。
SPP的输出是一个km维的向量
k是最后一层卷积层的卷积核个数,在上图就是256
m是序列的总数,在上图就是16+4+1=21
事实上,SPP是一个全局池化的操作。
[31], [32]全局平均池化用于减小模型尺寸,降低过拟合。
[33], 全局平均池化在测试阶段连接到全连接层后,用于改进准确率。
[34], 全局最大池化用于弱监督的目标识别。
全局池化操作对应传统算法中的BoW方法。
Training the Network
理论上,在上述网络架构中,都能用标准的反向传播算法进行训练。但是在GPU上实现,最好还是选用固定尺寸的输入图像。下一步我们将描述我们的训练方法以及如何在GPU上进行实现。
Single-size training
假设最后一个卷积层输出为a×a(13×13),金字塔等级n×n的序列
池化的窗口尺寸win=,步长str=
单一尺度训练的主要目的是让多尺度训练成为可能,实验表明,这是提升准确率的原因之一。
Multi-size training
对于[pool3×3]
a=13,n=3,sizeX=13/3(向上取整)=5,stride=13/3(向下取整)=4
考虑两种尺寸,180×180、224×224。
我们将上述224 x224区域缩放为180x180,而不是裁剪更小的180x18(区域)。
因此,这两种尺度下的区域仅在分辨率上不同,而在内容/布局上完全相同。为了接受180x180的输入,我们实现了固定输入尺寸为 (180x180)的网络。
在本例中,最后一个卷积层输出的feature map大小为axa=10x10。
180网络的SPP层的输出与224网络的输出具有相同的固定长度。
因此,这个180网络在每一层都具有与224网络完全相同的参数。换句话说,在训练过程中,我们用两个共享参数的固定大小网络实现了可变输入大小的SPP-Net。
为了减少从一个网络(例如,224)切换到另一个网络(例如,180)的开销,我们在一个网络上训练每个完整epoch,然后切换到另一个网络(保留所有权重),以完成下一个完整epoch。这是迭代。在实验中,我们发现这种多尺度训练的收敛速度与单尺度训练相似。
多尺度训练的主要目的是模拟不同的输入大小,同时仍然利用现有的固定大小的优化器实现。除了上述两种尺度的实现外,我们还测试了一个变量,使用s x s作为输入,其中s在[180,224]中,对于每个epoch中随机、均匀地采样。
可以这么说,pool level就是池化后产生的向量长度是多少,然后整个feature map根据这个pool level(比如3×3),等比例的将feature map分为9份,执行最大池化操作。公式只是在控制池化结果数的基础上,计算了每个池化窗口的大小而已。
Conclusion
SPP是一个灵活的解决方案,可以处理不同的规模、大小和纵横比。这些问题在视觉识别中很重要,但在深度网络环境中却很少被考虑。
提出了一种利用空间金字塔池化层训练深度网络的方法。结果表明,SPP-net在分类/检测任务中具有较高的精度,大大加快了基于dnn的检测速度。
我们的研究还表明,在基于深度网络的识别中,许多经过时间检验的计算机视觉技术/见解仍然可以发挥重要作用。
REFERENCES
[31] M. Lin, Q. Chen, and S. Yan, “Network in network,” arXiv:1312.4400, 2013.
[32] C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, and A. Rabinovich, “Going deeper with convolutions,” arXiv:1409.4842, 2014.
[33] K. Simonyan and A. Zisserman, “Very deep convolutional networks for large-scale image recognition,” arXiv:1409.1556, 2014.
[34] M. Oquab, L. Bottou, I. Laptev, J. Sivic et al., “Learning and transferring mid-level image representations using convolutional neural networks,” in CVPR, 2014.