[深度学习从入门到女装]SPP

论文地址:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

[深度学习从入门到女装]SPP
文章图片

提出金字塔pool(spatial pyramid pooling layer)思想
由于全连接层需要固定节点数量,因此需要保证进入全连接层时的特征数量一致,卷积层不需要,因此之前的方法都是需要在输入原始图像的时候,对图像进行归一化为同一尺寸(放大缩小裁剪等方式),但是对于图像归一化过程中,图像可能会拉伸,或者重要特征信息被裁剪掉
本文提出的这种方式,可以免去图像的归一化过程,原始图像什么size都可以,对于特征图进行不同尺度的pooling,随后将各个尺度得到的pooling组合在一起成为一个特征图,再进行全连接层
因此可以使用这种方法,可以取代全连接层之前的pool层
[深度学习从入门到女装]SPP
文章图片

假设之前卷积层最后得到的特征图size为13*13(a*a),然后我们想要得到三种不同pool来得到3*3(n*n)、2*2(n*n)、1*1(n*n)的特征图
然后使用的pool的参数计算公式如下
[深度学习从入门到女装]SPP
文章图片

[深度学习从入门到女装]SPP
文章图片

其中a为输入特征图size大小,n为要得到的特征图大小

输入为256个13*13的特征图,使用这种方法得到了256个3*3、256个2*2、256个1*1的特征图,随后把这三个特征图进行全连接层连接
也就是不管输入图像尺寸是多大,经过这个金字塔pool层出来的特征图都是256个3*3、256个2*2、256个1*1

【[深度学习从入门到女装]SPP】训练过程分为两种:
1、 Single-Size Training
也就是单一尺寸的训练,只使用224*224尺寸的图像输入网络进行训练

2、Multi-size Training
多尺寸的训练,在本文中有两种尺寸224*224(原始尺寸)、180*180(使用原始尺寸的图像进行缩小得到)
把这两种尺寸的图像交替放入网络内训练,也就是224训练完一个epoch之后,再用180训练一个epoch,再用224.。。
论文说这么做的原因是可以加快收敛

测试的时候就是直接把任意尺寸的图像放进去测试了

接下来是SPP对于目标检测的改进
R-CNN是先对输入图像进行2k个候选框选择后,把候选框内的图像wrap到227*277后,再放到cnn里边进行提取,这2k个候选框很多地方都是重叠的,会带来大量重复的计算,因此SPP就先对输入图像进行特征提取之后,在提取后的feature map上在选取候选框,然后使用spatial pyramid pooling,对对应候选框的feature map区域提到到fixed-length representation。
[深度学习从入门到女装]SPP
文章图片

算法如下:
1、使用“fast” mode of selective search对于每个图像生成2k个候选框
2、然后resize图像到min(w,h)=s大小,放到cnn(同样使用pre-trained,fine-turing(因为SPP可以对任意图像进行特征提取,所以只对FC层进行))中,得到conv5层的feature map
3、根据候选框对conv5层的feature map对应区域使用4-level 的spatial pyramid pooling(1*1,2*2,3*3,6*6,一共50个bins),对于每个window得到12800(256*50)维特征,然后连接到FC上
4、最后使用svm对于每类进行线性回归,再使用non-maximum suppression对分数图进行选取

可以看到和R-CNN较大的区别就在于,R-CNN是对每个候选框进行CNN特征提取,而SPP是对整个图像进行特征提取之后,在conv5层选取相应的候选框再使用SPP提取候选框的特征,减少了大量的重复计算提高算法效率

    推荐阅读