卷积神经网络感受野的计算
神经网络感受野计算
- 普通卷积感受野计算
感受野指的是当前的特征图的一个特征点在输入空间影响的区域,该点的值被输入空间的这个区域影响,与其他区域无5173。通常有两种方式可以计算感受野,从后往前算和从前往后算。从前往后计算的方法很简单,基本上一个公式就可以计算,使用递推公式计算。
L表示感受野的大小,k表示网络的层序号,f表示卷积核尺寸,s表示步长大小。递推公式的增量为后一部分,对于第k层,其卷积核为fk,那么相比前一层需要计算fk个位置(或者神经元,),但是这些位置要一直向前扩展到输入层。对于第一个位置,扩展后的感受野为lk-1,正好是前一层的感受野大小,但是对于剩余的fk-1个位置就要看stride大小,你需要扩展到前面所有层的stride(注意不包括当前层的stride,当前层的stride只会影响后面层的感受野),所以需要累乘所有的stride,这样剩余fk-1个位置的感受野大小就是第二部分的值。
2.对于扩张卷积的感受野计算
对于3*3的扩张卷积,都是考虑same卷积,加padding不减小特征图:
Dilation rate=1, 对应于普通3*3卷积
Dilation=2, 对应于5*5卷积,padding=2
Dilation=4, 对应于9*9卷积,padding=4
Dilation=8, 对应于17*17卷积,padding=8
从后往前计算感受野计算公式:
Rf=(rf-1)* s + k
对于应用在resnet上,全部使用SAME类型的卷积,也就是不减小特征图。下图是使用fomoro Ai网站计算得到的感受野(https://fomoro.com/projects/project/receptive-field-calculator)
直接结算第9层的感受野,从后往前计算:初始rf=1
(1)1*1的卷积 rf=1
(2)3*3,dilation=2对应5*5的卷积,padding=2,
rf=(rf-1)*s+k = (1-1)*1 + 5 = 5
(3)1*1卷积 rf=5
(4)1*1卷积 rf=5
(5)3*3,dilation=2对应5*5的卷积,padding=2,
rf=(rf-1)*s+k = (5-1)*1 + 5 = 9
(6)1*1卷积 rf=9
(7)1*1卷积 rf=9
(8)3*3,dilation=2对应5*5的卷积,padding=2,
rf=(rf-1)*s+k = (9-1)*1 + 5 = 13
(9)1*1卷积 rf=13
可以看到计算结果与上图中完全一样。使用从第一部分的前往后的计算结果也是相同的。
参考
[1]http://shawnleezx.github.io/blog/2017/02/11/calculating-receptive-field-of-cnn/
[2] https://zhuanlan.zhihu.com/p/35708466