成就
- 相比于深度卷积神经网络,可以不管图像的大小而生成固定长度的表示
- 对变形的物体也很有效
- 在准确性相当的前提下,速度比R-CNN更快(24-64× faster overall)
做法
在R-CNN实现思路的基础上,在最后一个卷积层和全连接层之间添加一个SPP层,由SPP层生成固定长度的输出,并将其输入到全连接层中。
SPP的特性
- 无论输入的大小,SPP都能生成固定长度的输出
- SPP使用多级spatial bins(多个尺寸的pooling)
- SPP能够对以任意比例提取的特征进行池化
SPP-net工作原理
在对图片提取特征时,使用的是如上图所示的多级bin块(
1
∗
1
,
2
∗
2
,
4
∗
4
1*1,2*2,4*4
1∗1,2∗2,4∗4),就是将一张图片分别用
1
∗
1
,
2
∗
2
,
4
∗
4
1*1,2*2,4*4
1∗1,2∗2,4∗4的方式分割提取特征,然后对每个区域做Max pooling,这样就可以获得1+4+16中特征向量。由于conv5层filter的数目是256,所以每个特征向量的维度是256。再将这
1
×
256
−
d
,
4
×
256
−
d
,
16
×
256
−
d
1\times256-d,4\times256-d,16\times256-d
1×256−d,4×256−d,16×256−d的特征向量拼接起来,得到
21
×
256
−
d
21\times256-d
21×256−d的特征向量。
即不论图片的尺寸和大小,只要固定了spatial bins,最后得到的特征向量的维度都是相同的。
使用SPP层训练网络
单一规格训练
首先使用固定输入(
224
×
224
224\times 224
224×224)。
对于一个给定了大小的图像,需要先计算SPP所需的bin的大小。假如
c
o
n
v
5
conv_5
conv5之后feature maps的大小为
a
×
a
a\times a
a×a,并且pyramid的等级为
n
×
n
n\times n
n×n的bins,那么window size=
⌈
a
/
n
⌉
\lceil a/n \rceil
⌈a/n⌉,stride=
⌊
a
/
n
⌋
\lfloor a/n \rfloor
⌊a/n⌋.
这一步的目的是为了实现多级池化的行为。(Ps:不理解)
多规格训练
本文使用了两种规格(
180
×
180
180 \times 180
180×180和
224
×
224
224\times 224
224×224),本文是将原来的
224
×
224
224\times 224
224×224调整到
180
×
180
180 \times 180
180×180,而且这两个网络在每一层的参数是相同的,即在训练过程中,利用共享参数的两个输入大小固定的网络来实现输入大小可变的SPP-net.
(无法体会到下面步骤的独特意义不写了)
SPP-net应用于目标识别
- R-CNN的弊端:对于每张图片提取出来的2000个窗口,R-CNN都要在每个窗口上重复的应用深度神经网络,时间耗费很大。
- SPP-net实现:本文在整张图片上只提取一次feature maps,然后在每个feature map的每个候选窗口上应用SPP,对这个候选窗口池化一个固定长度的表示。在此过程中,由于神经网络只应用了一次,所以时间耗费大大减少。
需要学习
- 实验部分没有看( P 12 P_{12} P12之后)
- SPP-net的ROI映射
如有问题 请多多指正