目标检测-----SSP :Spatial Pyramid Pooling

1.为什么需要SSP层

(1)不使用SSP后果
在RCNN中,一张图片应用选择性搜索算法(之前博文介绍过)产生约2000个候选区域,这2000个候选区域可能都有着不同的尺寸、长宽比。
RCNN网络中需要为每个候选区域用CNN网络提取特征,候选区域经过卷积层操作后需要送入到全连接层,但是全连接层需要设定固定的神经单元个数(例通常是4096)即来自最后一层卷积层的特征图尺寸一致。
因为候选区域的大小各不相同,因此为了使卷积层运作之后得到的特征图大小一致,需要对候选区域重新resize来调整到设定的大小(例227*227)。
直接resize到固定尺寸,会引起图片在某些程度上的扭曲,因此候选区域的空间信息等内容会发生改变,这会导致提取的特征用于后续分类检测等任务得到的精确度受到限制。
2)SSP的作用
SSP层的作用是使CNN能够输入任意大小的图片,在CNN的最后一层卷积层后面加入一层SSP层,他能使不同任意尺寸的特征图通过SSP层之后都能输出一个固定长度的向量。然后将这个固定长度的向量输入到全连接层,进行后续的分类检测任务。
SSP的出现:使得CNN网络不再需要固定尺寸图像的输入,这是一项重大突破。

2.SSP层为什么能够使不同大小的图像产生一个固定长度的输出

(1)SSP的执行过程举例
目标检测-----SSP :Spatial Pyramid Pooling
图片经过多个卷积层的操作之后得到图片对应的一组特征图(上图中的黑色区域,假设有256个特征图且每个特征图的尺寸为244224)。
SSP:即空间金字塔池化(上图框起来部分)作用在这一组特征图上。空间金字塔池化包含了很多金字塔层(上图中包含3层),以左边的一层金字塔为例,该金字塔层有4
4个 spacial bin,对特征图进行滑动窗口池化,,滑动窗口的大小为224/4=56,步长也为224/4=56,这样滑动窗口在特征图上共有44个位置,每个滑动窗口的位置应用pooling操作得到一个值,这样该征图就会产生44=16个输出值,因为特征图共有256个,因此该金字塔层作用在特征图上后就会产生16256个输出。
其他金字塔层以同样的方法产生一个输出,因为不同的金字塔层有着不同数量的spacial bin,因此会产生不同长度的输出。例第二层的输出为4
256,第三层为1256
把所有金字塔的输汇集起来上例产生了一个21
256长度的输出。
(2)为什么SSP对于不同尺寸的图像能产生固定的长度输出
虽然不同尺寸的图像产生不同尺寸的特征图,但是这些特征图都输入到空间金字塔池化(SSP),它有很多的金字塔层。
每个金字塔层都设置了固定数量的spacial bin,假设spacial bin的数量为ss,特征图的尺寸为aa,那么滑动窗口的尺寸以及滑动步长为:
目标检测-----SSP :Spatial Pyramid Pooling
因此这种尺寸的滑动窗口在任意尺寸的特征图上都有ss个位置,因此为每个特征图产生ss个输出值,该金字塔作用域于所有的特征图,产生 spacial bin数量 X 特征图数量 长度的输出,即( s*s X 特征图数量) 长度的输出。
特征图经过SSP层作用后,输出的长度只与各个金字塔层的spacial bin数量总和以及特征图数量有关,跟图像的尺寸无关。 因为即使图片大小不同产生的特征图大小不同,由于SSP的每个金字塔层的滑动窗口大小和滑动的步长是根据特征图尺寸与spacial bin的数量计算得出的,因而即使特征图尺寸不同也能产生相同数量(即spacial bin数量)的输出,只不过每个输出值是不同滑动窗口大小得来的。