1 概述
1.1 基本介绍
2015年IEEE论文《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》,是对R-CNN的一种优化,SPP即Spatial Pyramid Pooling(空间金字塔池),是一种基于图像金字塔结构的目标检测网络结构。 其网络主要修正的是R-CNN网络的效率问题,也就是主要更改的是
R-
CNN中每个ROI区域均需要通过一个CNN提取高阶特征的这个阶段
的结构
1.2 与RCNN的比较
R-CNN的作用比较强,其主要缺陷(结合SPP Net)就是效率问题:
计算量大,速度慢
:每张图像的每个Propasal均需要通过CNN提取高阶特征、SVM进行分类等操作。
图像失真
:每个Propasal区域在输入CNN网络之前,需要进行warp拉伸 /crop压缩操作,可能会影响图像质量以及模型效果。
SPP Net优化改进:
直接送入整个图像,所有区域
共享卷积计算(一遍) ,
在Conv5层提取所有区域的高阶特征
引入空间金字塔池(
S
patial
P
yramid
P
ooling) ,为不同尺寸的区域,在Conv5层上提取不同的特征,然后映射到尺寸固定的全连接上。
相比R-CNN需要对每个proposal做卷积,SPP Net只做一次卷积,将相应的sub-image映射到full-image卷积后的feature map上从而得到sub-image通过卷积层得到的feature。
2 SPP-net的原理
1.1 SPP-net的感受野了解
卷积神经网络CNN中,某一层输出结果中一个元素所对应的输入层的区域大小,被称作感受
野receptive field。感受野的大小是由
kernel size,stride,padding , outputsize
一起决定的。
上述公式由下面卷积操作产生的feature map 公式反推可得的
感受野坐标映射如下图
1.2 SPP-net原理介绍
在上图RCNN中,因为要使提取区域的尺寸固定,使用resize会导致图像失真
在SPP-net中,则不会固定尺寸,选择性搜索(Selective Search)算法首先在原始图像上运行,以生成大约 2000 个区域提案,整张图像经过卷积后,这些提案在原始图像中对应的区域在经过卷积层处理后,在特征图上也有相应的映射。然后经过SPP层处理
空间金字塔池化层(SPP层)的目的是从每个区域提案中提取一个固定长度的特征向量,无论提案的尺寸如何。它通过在多个尺度(或称为级别)上进行池化操作来实现这一点。这些尺度对应于不同的区域划分,例如:
- 1x1:这是最简单的池化,将整个提案区域池化成一个单一的特征(最大值或平均值)。
- 2x2:将提案区域划分为四个相等的子区域,每个子区域独立进行池化操作。
- 4x4:类似地,将提案区域划分为十六个小子区域,并分别池化。
这样做的结果是,每个划分级别产生了固定数量的特征(1x1产生1个,2x2产生4个,4x4产生16个)。然后,这些特征被合并或拼接成一个固定长度的特征向量。例如,如果只使用上述三个划分级别,最终的特征向量将包含 1 + 4 + 16 = 21 个特征。
因此,SPP层允许网络适应不同尺寸的输入区域提案,而不需要事先将它们调整到某个固定的尺寸。这在处理实际图像中大小不一的对象时特别有用,因为它允许模型捕捉到不同尺度的上下文信息。如下图
3 SPP-net优缺点
SPP Net相比于R-CNN,有以下几个优点:
1 使用full-image卷积仅需要对原图像经过一次卷积操作就提取完所有区域的高阶特征属性;
2 使用SPP结构支持候选框大小可大可小,解决了R-CNN中候选框crop/warp所带来的图像失真的问题。
SPP Net的缺点和R-CNN还是类似的:
1 继续沿用R-CNN结构,特征提取、SVM分类器、BB回归器单独训练;
2 SPP Net没法fine tune训练前面的Conv部分的特征提取网络(效率低)。