关于感受野的理解与计算
感受野
在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上每个像素点在原始图像上映射的区域大小,这里的原始图像是指网络的输入图像,是经过预处理(如resize,warp,crop)后的图像。
神经元之所以无法对原始图像的所有信息进行感知,是因为在卷积神经网络中普遍使用卷积层和pooling层,在层与层之间均为局部连接。
神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次.
感受野的计算
如图所示7*7的原始图像,经过kernel_size=3, stride=2的Conv1,kernel_size=2, stride=1的Conv2后,输出特征图大小为2 * 2,很明显,原始图像的每个单元的感受野为1,Conv1的每个单元的感受野为3,而由于Conv2的每个单元都是由2 * 2范围的Conv1构成,因此回溯到原始图像,每个单元能够看到5 * 5大小的区域范围。
那么卷积神经网络的每一层感受野应该如何计算呢?很明显,深层卷积层的感受野大小和它之前所有层的滤波器大小和步长有关系,而涉及到这两个参数的有卷积层和pooling层。我们用k_n, s_n, r_n分别表示第n层的kernel_size,stride,receptive_field,通过对n-1层输出特征图的k_n * k_n个感受野为r_{n-1}的特征单元卷积得到的n层输出特征单元最大的感受野为k_n * r_{n-1},但在对n-1层输入特征图进行卷积时,经常会由于s_{n-1}小于k_{n-1}而存在重叠,因此要减去k_n - 1个重叠部分(k_n = 2存在一个重叠部分,k_n = 3存在两个重叠部分)。
那么重叠部分应该怎么计算呢?如图所示,对于Conv2层,其输出特征单元最大感受野为:
k_2 * r_1 = 2 * 3 = 6
但由于Conv1层对输入图片卷积时存在重叠部分,所以Conv2层的特征单元感受野小于6,该重叠部分为:
k_1 * r_0 - s_1 * r_0 = r_1 - s_1 = 1
而对于Conv3层,其输出特征单元最大感受野为:
k_3 * r_2 = 2 * 5 = 10
又因为Conv2层对其输入特征图进行卷积时也存在重叠部分,所以Conv3层的特征单元感受野小于10,此时重叠部分为:
因此对于卷积神经网络,其感受野计算有如下规律:
以上公式只计算conv层和pooling层,以AlexNet为例:
转自https://www.jianshu.com/p/9997c6f5c01e