every blog every motto: There’s only one corner of the universe you can be sure of improving, and that’s your own self.
https://blog.csdn.net/weixin_39190382?spm=1010.2135.3001.5343
记录SSP-Net,阅读前建议先看R-CNN
时间: 2015
论文: https://arxiv.org/pdf/1406.4729.pdf
SPP-Net是在R-CNN基础上进行改进的。(速度约是R-CNN的100倍)
在R-CNN中,我们会先通过seletive search得到2000个左右的候选框,然后将这些候选框长宽(大小)进行变换(如,统一变成227×227)输入到CNN中用于提取特征。存在如下问题:
主要区别简述:
和R-CNN不同的是,不是将每个候选框输入到卷积网络,而是先将原图输入到卷积网络生成特征图。
这里为了便于描述,我们将卷积网络称为函数。原图输入函数函数生成特征图。根据这个映射关系,在特征图上找到候选框对应的候选框特征图。这样就不用每个候选框都经过函数。
大部分和R-CNN类似,不重复讲解,可参考R-CNN文章
原图经过卷积网络生成特征图,我们现在需要通过这种映射关系找到最初经过seletive search 后生成的候选区域在特征图上的映射,这样就不用将每个候选区域都输入进卷积网络了。
这种映射关系主要体现在两方面,一是长宽的变换,一个是坐标的变换。
长宽的变换主要受卷积和池化的影响,具体可参考
文章1
文章2
p i = s i ∗ p i + 1 + [ ( k i − 1 ) / 2 − p a d d i n g ] p_i = s_i * p_{i+1} + [(k_i - 1) / 2 - padding] pi=si∗pi+1+[(ki−1)/2−padding]
| 符号 | 含义 |
|---|---|
| p i p_i pi | 在i层的坐标值 |
| s i s_i si | i层的步长 |
| k i k_i ki | i层的卷积核大小 |
| padding | i层的填充 |
SSP-Net对上面坐标关系做了简化:
令每一层的padding =
⌊
k
i
/
2
⌋
⌊ k_i / 2 ⌋
⌊ki/2⌋
原式变为:
p i = s i ∗ p i + 1 + [ ( k i − 1 ) / 2 − ⌊ k i / 2 ⌋ ] p_i = s_i * p_{i+1} + [(k_i - 1) / 2 - ⌊ k_i / 2 ⌋ ] pi=si∗pi+1+[(ki−1)/2−⌊ki/2⌋]
当
k
i
k_i
ki 为奇数,
[
(
k
i
−
1
)
/
2
−
⌊
k
i
/
2
⌋
]
=
0
[(k_i - 1) / 2 - ⌊ k_i / 2 ⌋ ] = 0
[(ki−1)/2−⌊ki/2⌋]=0,
p
i
=
s
i
∗
p
i
+
1
p_i = s_i * p_{i+1}
pi=si∗pi+1
当
k
i
k_i
ki 为偶数,
[
(
k
i
−
1
)
/
2
−
⌊
k
i
/
2
⌋
]
=
−
0.5
[(k_i - 1) / 2 - ⌊ k_i / 2 ⌋ ] = - 0.5
[(ki−1)/2−⌊ki/2⌋]=−0.5,
p
i
=
s
i
∗
p
i
+
1
−
0.5
p_i = s_i * p_{i+1} - 0.5
pi=si∗pi+1−0.5
又因为,
p
i
p_i
pi 是坐标值,不可能取小数,所以基本认为
p
i
=
s
i
∗
p
i
+
1
p_i = s_i * p_{i+1}
pi=si∗pi+1
即,当前坐标只与前一层有关
通过映射关系,我们可以确定上图中蓝色区域在feature map中的橙色区域的位置。
那么从原图 到特征图的映射关系为:
论文中将原图候选框映射到特征图中,
其中,左上角为:
x
′
=
⌊
x
/
S
⌋
+
1
x' = ⌊ x/ S ⌋ + 1
x′=⌊x/S⌋+1
y
′
=
⌊
y
/
S
⌋
+
1
y' = ⌊ y/ S ⌋ + 1
y′=⌊y/S⌋+1
右下角点:
x
′
=
⌈
x
/
S
⌉
−
1
x' = ⌈ x/ S ⌉ - 1
x′=⌈x/S⌉−1
y
′
=
⌈
y
/
S
⌉
−
1
y' = ⌈ y/ S ⌉ - 1
y′=⌈y/S⌉−1
这一层放在卷积层和全连接层之间,目的是为了输出固定长度的特征(因为全连接层需要输入固定)

在网络中的位置:

池化层,我们常见的是将2×2的小方块中的四个值取平均(变成一个值),或是取最大的一个值。这里我们看的角度往往是“池化核”大小,即上面我们提到的2×2。
在SSP当中,我们关注的是池化以后特征图的大小,假设我们的特征图大小为128×128,我们要将其变成1×1特征图,即128×128个值取平均(论文中用的最大池化,即取最大值);也可以变成2×2,以及其他。这里,我们关注的是池化以后生成的特征大小

论文中池化后的特征图为1×1、2×2、4×4。
注意: 我们的候选框大小是不一样的,当然这对我们没有影响。
假设我们卷积以后生成的特征图为:(128,128,100) ,100为卷积核个数。
经过SSP以后,我们会得到(1,1,100)、(2,2,100),(4,4,100)三种特征图,在将特征图拉平、相加会得到(1+4+16)×100的特征向量,再将其输入进全连接层,即可。
无论输入的特征图大小如何,出来的特征维度固定(1+4+16)×256,这样就实现了不管图中候选框尺寸如何,SSP层输出的特征向量维度永远是固定的。

[1] https://blog.csdn.net/x454045816/article/details/106294105
[2] https://blog.csdn.net/x454045816/article/details/106132566#t7
[3] https://arxiv.org/pdf/1406.4729.pdf
[4] https://www.jianshu.com/p/07a573035e43
[5] https://blog.csdn.net/a24444054d/article/details/118877757
[6] https://zhuanlan.zhihu.com/p/478461060
[7] https://zhuanlan.zhihu.com/p/517553858
[8] https://www.elecfans.com/d/1829732.html