感受野:在卷积神经网络CNN中,决定某一层输出结果中一个元素所对应的输入层的区域大小,被称作感受野receptive field。
注意:这里的输入层并不一定是原始图像,可能对原始图像进行了填充。
如上图所示,第一次卷积,卷积核大小(kernel size)k=3*3,填充大小(padding size)p=1*1,步长(stride)s=2*2,(如图左上)对5*5的输入特征图进行卷积生成3*3的绿色特征图;第二次卷积,卷积核大小(kernel size)k=3*3,填充大小(padding size)p=1*1,步长(stride)s=2*2,(如图左下)对上面绿色的特征图采用相同的卷积操作生成2*2的橙色特征图。最后(图右)按列可视化CNN特征图,使卷积后的图像与原图像大小一致,中间用空白填充,可以看到特征位置即感受野的中心位置。
这里对padding做一个解释,首先第一层卷积在原始(蓝色)图像外围增加1个像素的填充,第二层卷积在第一层的结果(绿色图像)外围增加1个像素的填充,对应到原来的图像就需要再增加2个像素的填充,也就是原图像一共向外填充3个像素,也就是图中白色虚线网格。这里对填充的理解会影响后面感受野尺寸的理解。
感受野计算
如上图:
n:卷积后图像尺寸
r:感受野尺寸
j:跳跃尺寸
start:感受野中心坐标
k:卷积核尺寸
p:填充尺寸
s:卷积步长
这里用in和out表示看起来可能有一些迷惑,如果改写成下面这样的话,理解可能会更方便一些:
ni=⌊ni−1+2∗pi−kisi⌋+1
n
i
=
⌊
n
i
−
1
+
2
∗
p
i
−
k
i
s
i
⌋
+
1
ji=ji−1∗si
j
i
=
j
i
−
1
∗
s
i
ri=ri−1+(ki−1)∗ji−1
r
i
=
r
i
−
1
+
(
k
i
−
1
)
∗
j
i
−
1
starti=starti−1+(k−12−p)∗ji−1
s
t
a
r
t
i
=
s
t
a
r
t
i
−
1
+
(
k
−
1
2
−
p
)
∗
j
i
−
1
下面来计算每一层的感受野:(建议先计算感受野再计算跳跃)
第0层:
即输入层,其感受野毫无疑问就是1,即
r0=1
r
0
=
1
,跳跃也是1,
j0=1
j
0
=
1
,第一个特征的感受野中心坐标也就是其中心,即
start0=0.5
s
t
a
r
t
0
=
0.5
第1层: (这一层的感受野也很好计算,3*3,来计算一下检验公式)
k1=3,p1=1,s1=2
k
1
=
3
,
p
1
=
1
,
s
1
=
2
r1=r0+(k1−1)∗j0=1+(3−1)∗1=3
r
1
=
r
0
+
(
k
1
−
1
)
∗
j
0
=
1
+
(
3
−
1
)
∗
1
=
3
j1=j0∗s1=1∗2=2
j
1
=
j
0
∗
s
1
=
1
∗
2
=
2
第2层:
k2=3,p2=1,s2=2
k
2
=
3
,
p
2
=
1
,
s
2
=
2
r2=r1+(k2−1)∗j1=3+(3−1)∗2=7
r
2
=
r
1
+
(
k
2
−
1
)
∗
j
1
=
3
+
(
3
−
1
)
∗
2
=
7
j2=j1∗s2=2∗2=4
j
2
=
j
1
∗
s
2
=
2
∗
2
=
4
参考:
https://blog.csdn.net/u010725283/article/details/78593410