多尺度输入—空间金字塔池化SPP(Spatial Pyramid Pooling)

何凯明大神于2014年在《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》,这篇paper主要的创新点在于提出了空间金字塔池化。

提出的原因:
在SPP提出之前,深度学习网络主要是以R-CNN为主,它有两大缺点:
1、通常需要输入固定大小的图片来进行训练和测试。
对于大小不一的图片,需要经过裁剪,或者缩放等一系列操作,将其变为统一的尺寸。但是这样往往会降低识别检测的精度。
2、计算量较大,严重影响速度
R-CNN预设1000~2000个候选区域 (采用Selective Search 方法),并分别在每个候选区域进行特征提取。这个想想就害怕,因为图片上有些区域会被重复采样多次。

具体原理:
多尺度输入—空间金字塔池化SPP(Spatial Pyramid Pooling)_第1张图片
现在从左到右来看:
蓝色的图1——我们把一张完整的图片,分成了16个块,也就是每个块的大小就是(w/4,h/4);
绿色的图2,划分了4个块,每个块的大小就是(w/2,h/2);
黑色的图3,把整张图片作为了一个块,也就是块的大小为(w,h)
空间金字塔最大池化的过程,其实就是从这21个图片块中,分别计算每个块的最大值(局部max-pooling)。通过SPP,我们就把一张任意大小的图片转换成了一个固定大小的21维特征(当然你可以设计其它维数的输出,增加金字塔的层数,或者改变划分网格的大小)。上面的三种不同刻度的划分,每一种刻度我们称之为:金字塔的一层,每一个图片块大小我们称之为:windows size了。如果你希望,金字塔的某一层输出n*n个特征,那么你就要用windows size大小为:(w/n,h/n)进行池化了。

解决的问题:
1、对尺度输入
当我们有很多层网络的时候,当网络输入的是一张任意大小的图片,这个时候我们可以一直进行卷积、池化,直到网络的倒数几层的时候,也就是我们即将与全连接层连接的时候,就要使用金字塔池化,使得任意大小的特征图都能够转换成固定大小的特征向量,这就是空间金字塔池化的奥义(多尺度特征提取出固定大小的特征向量)。
2、计算量的减少
存在spp网络的神经网络(如衍生出了之后的fast R-CNN)虽然也需要预设1000~2000个候选区域,但只需要对每张图片进行一次采样特征提取,再由特征图来确定每个候选区域的特征图,因此大大减小了计算量。

你可能感兴趣的:(多尺度输入—空间金字塔池化SPP(Spatial Pyramid Pooling))