SPP(Spatial Pyramid Pooling:空间金字塔)

发布时间 2023-03-23 16:58:55作者: kuaqi

fasterrcnn中ROI Pooling 与 SPP 理解

一、SPP作用

1、目的:将不同大小的窗口输入得到同样大小的窗口输出

1)解释:在卷积的操作中,对输入的尺寸是没有限制的,但是大多数网络结构的卷积操作后会连着全连接层,因此网络的输入也就有了限制,不然最后一层卷积的输出尺寸无法对应全连接层的输入。当输入图片不满足限制的尺寸时,需要进行裁剪(crop)和拉伸(warp),如下图:

   

(1)问题:图像的纵横比(ratio aspect) 和输入图像的尺寸是被改变的。这样就会扭曲原始的图像。

(2)解决方案:Kaiming He在这里提出了一个SPP(Spatial Pyramid Pooling)层能很好的解决这样的问题, 根据之前分析,SPP只需连接在最后一层卷积层,以便满足全连接层的输入尺寸,与之前结构对比如下:

  

2、SPP的显著特点是:

1)不管输入尺寸大小,SPP 可以产生固定尺寸的输出

2)使用多个不同大小的pooling窗口

3)SPP 可以使用同一图像不同尺寸(scale)作为输入, 得到同样长度的池化特征。

3、SPP优点:

1)可以处理不同纵横比和不同尺寸的输入图片,所以提高了图像的尺度不变(scale-invariance)、降低了过拟合

2)实验表明训练图像尺寸的多样性比单一尺寸的训练图像更容易使得网络收敛(convergence)

3)SPP 对于特定的CNN网络设计和结构是独立的。(也就是说,只要把SPP放在最后一层卷积层后面,对网络的结构是没有影响的, 它只是替换了原来的pooling层)

二、SPP计算原理

1、空间金字塔池化(spatial pyramid pooling)的原理并不复杂,其网络结构如下图:

  

2、详细计算过程:

1)假设输入feature map的尺寸为H x W x C,使用一个H x W尺寸的pooling层进行处理,那么每一个通道C变成了一个值,整个输入得到了一个C维的输出;再分别用H/2 x W/2和H/4 x W/4尺寸的pooling层处理,得到了4xC和16xC维的输出,把三个结果concat在一起变成了一个21xC维的输出,其大小和输入的H与W无关。

2)简而言之,是将任意尺寸的feature map用三个尺度的金字塔层分别池化,再将池化后的结果拼接得到固定长度的特征向量(图中的256为filter的个数),送入全连接层进行后续操作。