如题所述
在学习计算感受野(Receptive field)之前,先可视化一下感受野吧。举一个例子,原始图像为5x5,卷积核(Kernel Size)为3x3,padding 为1x1,stride为2x2,依照此卷积规则,连续做两次卷积。熟悉卷积过程的朋友都知道第一次卷积结果是3x3大小的feature map,第二次卷积结果是2x2大小的feature map。整个过程如图所示:
如图所示,第一层卷积结束后,感受野是3x3。在第二层卷积结束了,感受野是7x7
公式一 :这个算法从top往下层层迭代直到追溯回input image,从而计算出RF。
(N-1)_RF = f(N_RF, stride, kernel) = (N_RF - 1) * stride + kernel
其中,RF是感受野。N_RF和RF有点像,N代表 neighbour, 指的是第N层feature map的一个feature在N-1层的RF ,记住N_RF只是一个中间变量,不要和RF混淆。 stride是N-1层的步长,ksize是N-1层卷积核大小。
我来解释一下这个公式。首先,我们的问题是右一的红叉叉映射到左一中,应该是什么size?自然思路就是右一的红叉叉映射到中间是什么size?因为卷积核是3x3,所以右一的红叉叉(1个feature)映射到中间是3x3. 因为一个feature是通过kernel卷积而来, 所以最后一层(第N层)的感受野即为(1-1) * 2 + 3 = 3, 就是kernel size. 那么接下来我们如果算出来中间3x3的红框框映射到左一是什么size,不就解决了我们的问题嘛。聪明的我们就发现了从中间映射到左边的size是kernel_size+stride * (3-1). 抽象一下就是kernel_size +stride * (N_RF-1)嘛。接下来就很简单了,一层又一层的迭代下去直到迭代到第一层,就求出了RF。 Note: kernel_size和stride是左一的,而N_RF是中间的, 代表中间在左一的感受野。
举例:第一层ksize=3,stride=2; 第二层ksize=3,stride=2; 第三层ksize=3,stride=1
则第三层输出的featuremap为3x3(逐点扫描), feature map上任一点的感受野为kernel size大小3x3.
(若第三层的stride=2, 则输出的feature map为2x2, 即四个顶点)
第四层在第三层的感受野是3,但stride和kernel size为第三层的参数
总的感受野为23
两个小卷积(3*3)对于5×5网络感知野相同的替代性。