原文题目《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》
链接 https://arxiv.org/abs/1406.4729
一、摘要
当时的CNN要求输入的图片是一个固定大小。相对于原图或任意大小的子图来说,这个要求降低了识别的准确率。他们运用了空间金字塔池化(Spatial Pyramid Pooling )策略,避免了需要固定大小输入的要求。同时他们提出了新的cnn结构,命名为SPP-Net,它能对任意大小的输入图片生成一个固定长度的特征表示(特征向量,也是为了满足全连接部分的需要)。测试表明,在不同设计的cnn中加入spp策略能提高他们识别的准确率。
在目标检测中,SPP-Net能一次计算出一整张图像的特征图。然后在任意区域池化特征生成固定长度的特征表示。这样避免了重复的卷积计算特征图。
二、引言
引言部分主要讲了当时的cnn需要固定大小的输入是因为全连接层部分的需要,而卷积层和池化层部分由于使用滑动窗口输入大小可以不固定。
他们的spp-net是在一般的卷积神经网络最顶层的卷积层后面加一层SPP层。
SPPnet作用(创新点):
1、生成固定长度的的输出,用于全连接网络。
2、SPP比一般的滑动窗口池化对于目标的形态更具有鲁棒性。
三、带有空间金字塔池化的深度网络
3.1卷积层和特征图
特征图是卷积层的输出、特征图不仅于响应长度(我的理解是激活特征)有关、还与目标的空间位置有关。
3.2空间金字塔层
空间金字塔层的输出是一个K*M维度的向量,k是最后一层卷积层输出的特征图的数量,M是空间箱子的数量,如下图,M=16+ 4+1=21,空间箱子就是一个个的小格子,对每个格子内的特征进行池化。格子大小是与输入图像(空间金字塔层的输入)大小成比例的。所以格子的数量是固定的,与输入图像大小无关。
3.3训练网络
金字塔池化层的训练可以用三次滑动窗口来实现,如网络的最顶层卷积层输出的每张特征图的尺寸是13*13,那么要把每张特征图分别划分4*4、2*2、1*1大小来进行max池化。那么三次滑动窗口大小( w i n = ⌈ a / n ⌉ win=\lceil a/n \rceil win=⌈a/n⌉)分别是 4 = ⌈ 13 / 4 ⌉ 4=\lceil13/4\rceil 4=⌈13/4⌉、 7 = ⌈ 13 / 2 ⌉ 7=\lceil13/2\rceil 7=⌈13/2⌉、 12 = ⌈ 13 / 1 ⌉ 12=\lceil13/1\rceil 12=⌈13/1⌉,步长( s t r = ⌊ a / n ⌋ str=\lfloor a/n \rfloor str=⌊a/n⌋)分别是 3 = ⌊ 13 / 4 ⌋ 3=\lfloor13/4\rfloor 3=⌊13/4⌋、 6 = ⌊ 13 / 2 ⌋ 6=\lfloor13/2\rfloor 6=⌊13/2⌋、 12 = ⌊ 13 / 1 ⌋ 12=\lfloor13/1\rfloor 12=⌊13/1⌋。
四、spp-net目标检测
步骤如下:
1、先用选择搜索算法生成2000多个候选框。
2、对于一整个图片提取一次特征图。
3、找到每个候选框在特征图上的映射。
4、对每个候选框的特征映射进行金子塔池化。
5、把金字塔池化层输出的提供给全连接部分。
6、全连接部分输出的表示(svm中叫特征向量)用于训练svm,正例是正确的目标框(即人工标记的边界框),负例是IOU值小于0.3的候选框。