您现在的位置是:首页 >技术杂谈 >通俗理解CNN感受野的计算方法网站首页技术杂谈

通俗理解CNN感受野的计算方法

daimashiren 2023-07-10 00:00:04
简介通俗理解CNN感受野的计算方法

x o u t = x i n − k s + 1 x_{out} = frac{x_{in} - k}{s} + 1 xout=sxink+1
如果不考虑padding,卷积输出的feature map的计算公式如上,那么 x i n = ( x o u t − 1 ) ∗ s + k x_{in} = (x_{out} - 1) * s + k xin=(xout1)s+k。因此计算模型的感受野可以从最后一层往前推。下面举个例子说明:
在这里插入图片描述
图片来自于https://paddlepedia.readthedocs.io/en/latest/tutorials/CNN/convolution_operator/Convolution.html
一个输入大小为6x6的图像经过两层大小为3x3的卷积核之后,输出特征图变为2x2。现在要计算输出的这个特征图上的每个点对应输入的6x6的图像上多大范围的像素点(感受野)。很直观的,输出的2x2图像上每个点来自于中间特征图的3x3区域。即:
x i n = ( x o u t − 1 ) ∗ s − k = ( 2 − 1 ) × 1 + 3 = 3 x_{in} = (x_{out} - 1)*s - k = (2 - 1) imes 1 + 3 = 3 xin=(xout1)sk=(21)×1+3=3
那么中间的特征图上点影响多大范围的来自第一个特征图像素点?类似的过程代入以上公式:
x i n = ( x o u t − 1 ) ∗ s + k = ( 3 − 1 ) ∗ 1 + 3 = 5 x_{in} = (x_{out} - 1) * s + k = (3 - 1) * 1 + 3 = 5 xin=(xout1)s+k=(31)1+3=5
因此我们得到输出的2x2的特征图上的点对应于原始特征图上5x5范围的像素点,即感受野为5x5。池化层的感受的计算同上。如果是遇到空洞卷积的感受野计算,可以先把空洞卷积转换成等效的卷积核 (参考: 直观理解Dilated Convolution)
空洞卷积的等效卷积核大小为 k ′ = k + ( k − 1 ) ( d − 1 ) = d ( k − 1 ) + 1 k' = k + (k-1)(d-1) = d(k-1)+1 k=k+(k1)(d1)=d(k1)+1,其中d为膨胀率。换成等效卷积核后再套用以上方法计算感受野即可。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。