SSP空间金字塔层笔记

动机:
在一般的CNN结构中,在卷积层后面通常连接着全连接。而全连接层的特征数是固定的,所以在网络输入的时候,会固定输入的大小(fixed-size)。但在现实中,我们的输入的图像尺寸总是不能满足输入时要求的大小。然而通常的手法就是裁剪(crop)和拉伸(warp)。
在这里插入图片描述

这样做总是不好的:图像的纵横比(ratio aspect) 和 输入图像的尺寸是被改变的。这样就会扭曲原始的图像。而Kaiming He在这里提出了一个SPP(Spatial Pyramid Pooling)层能很好的解决这样的问题, 但SPP通常连接在最后一层卷基层。

SPP 显著特点

  1. 不管输入尺寸是怎样,SPP 可以产生固定大小的输出
  2. 使用多个窗口(pooling window)
  3. SPP 可以使用同一图像不同尺寸(scale)作为输入, 得到同样长度的池化特征。

其余:

  1. 由于对输入图像的不同纵横比和不同尺寸,SPP同样可以处理,所以提高了图像的尺度不变(scale-invariance)和降低了过拟合(over-fitting)
  2. 实验表明训练图像尺寸的多样性比单一尺寸的训练图像更容易使得网络收敛(convergence)
  3. SPP 对于特定的CNN网络设计和结构是独立的。(也就是说,只要把SPP放在最后一层卷积层后面,对网络的结构是没有影响的, 它只是替换了原来的pooling层)
  4. 不仅可以用于图像分类而且可以用来目标检测

The Spatial Pyramid Pooling Layer
在这里插入图片描述为什么会得固定大小的输出?
注意我们上面曾提到使用多个窗口(pooling窗口,上图中蓝色,青绿,银灰的窗口, 然后对feature maps 进行pooling,将分别得到的结果进行合并就会得到固定长度的输出), 这就是得到固定输出的秘密原因。
接下来用一个例子来弄懂这张图

Single-size network

我们先假定固定输入图像的尺寸s=224

  • w=⌈a/n⌉=⌈13/3⌉=5
  • t=⌊a/n⌋=⌊13/3⌋=4n=2,n=1

muti-size training(证明其可能性)

有这一公理以及其推理:
公理: 任何一个数都可以写成若干个数的平方和。

在这里插入图片描述
推理: 任何一个数的平方(为一个数)在这里插入图片描述
由于我们的输入图像尺寸是多样的,致使我们在最后一层得到的每个featrue-map大小为a×b
在这里插入图片描述
在这里插入图片描述
SPP网络的核心思想:

通过对feature map进行相应尺度的pooling,使得能pooling出4×4, 2×2, 1×1的feature map,再将这些feature map concat成列向量与下一层全链接层相连。这样就消除了输入尺度不一致的影响。

使用SPP进行检测,先用提候选proposals方法(selective search)选出候选框,不过不像RCNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到conv5上,因为候选框的大小尺度不同,映射到conv5后仍不同,所以需要再通过SPP层提取到相同维度的特征,再进行分类和回归,后面的思路和方法与RCNN一致。