cnn感受野计算方法
No. Layers Kernel Size Stride
1 Conv1 33 1
2 Pool1 22 2
3 Conv2 33 1
4 Pool2 22 2
5 Conv3 33 1
6 Conv4 33 1
7 Pool3 2*2 2
感受野初始值 l 0 = 1 l_0 = 1l
0
=1,每层的感受野计算过程如下:
l 0 = 1 l_0 = 1l
0
=1
l 1 = 1 + ( 3 − 1 ) = 3 l_1 = 1 + (3-1) = 3l
1
=1+(3−1)=3
l 2 = 3 + ( 2 − 1 ) ∗ 1 = 4 l_2 = 3 + (2-1)1 = 4l
2
=3+(2−1)∗1=4
l 3 = 4 + ( 3 − 1 ) ∗ 1 ∗ 2 = 8 l_3 = 4 + (3-1)12 = 8l
3
=4+(3−1)∗1∗2=8
l 4 = 8 + ( 2 − 1 ) ∗ 1 ∗ 2 ∗ 1 = 10 l_4 = 8 + (2-1)121 = 10l
4
=8+(2−1)∗1∗2∗1=10
l 5 = 10 + ( 3 − 1 ) ∗ 1 ∗ 2 ∗ 1 ∗ 2 = 18 l_5 = 10 + (3-1)1212 = 18l
5
=10+(3−1)∗1∗2∗1∗2=18
l 6 = 18 + ( 3 − 1 ) ∗ 1 ∗ 2 ∗ 1 ∗ 2 ∗ 1 = 26 l_6 = 18 + (3-1)12121 = 26l
6
=18+(3−1)∗1∗2∗1∗2∗1=26
l 7 = 26 + ( 2 − 1 ) ∗ 1 ∗ 2 ∗ 1 ∗ 2 ∗ 1 ∗ 1 = 30 l_7 = 26 + (2-1)12121*1 = 30l
7
=26+(2−1)∗1∗2∗1∗2∗1∗1=30
2.公式二:
根据top to down的方式,即从网络的最后向前推
感受野的大小是由kernel size(filter)和stride size(步长)一起决定的,
公式:
rfsize = f(out, stride, ksize) = (out - 1) * stride + ksize,其中out是指上一层感受野的大小,stride是当前层stride
最后一层可带也可不带入公式,它的out是前一层的ksize
举刚才那个例子:
out7 = (1-1)*2 +2 =2
out6 = (2-1)*1 + 3 = 4
out5 = (4-1)*1 + 3 = 6
out4 = (6-1)*2 + 2 = 12
out3 = (12-1)*1 + 3 = 14
out2 = (14-1)*2 + 2 = 28
out1 = (28-1)*1 + 3 = 30
out7是第7层输出相对于第7层输入也就是第6层输出的感受野,out6是第7层输出相对于第6层输入也就是第5层输出的感受野,以此类推,out1是第7层输出相对于第1层输入也就是第0层输出的感受野,也就是相对于input_image的感受野。