【神经网络】感受野浅析

1.1 感受野 1.1.1 定义
定义:卷积神经网络中的特征图上的一个像素点在输入图像上映射的区域大小。
【神经网络】感受野浅析
文章图片

1.1.2 例子:

  • 5×5的输入特征图经过1个5×5的卷积核,生成1×1的特征图,
  • 5×5的输入特征图经过两个3×3的卷积核,生成1×1的特征图。
上面两个的感受野都为5×5,且两个3×3的卷积核等于一个5×5
【神经网络】感受野浅析
文章图片

注:上面满足卷积的计算公式:
? $$H_{out} = \frac {H_{in} - k + 2p}{S}$$
1.1.3 感受野大小的计算
方法一:从后往前推 公式讲解 感受野大小计算需要注意以下几点:
  • ==最后一层感受野的大小等于核(不一定是卷积核,还有可能是池化核)的大小==(当前的感受野相当于“临时感受野”,用于从后往前推)
  • 感受野大小的计算不考虑padding的大小
  • 当前层(i层)的感受野大小和当前层(i层)的卷积核大小和步长有关,同时也和网络后一层(i+1)层特征图的感受野大小有关
? $$RF_i = (RF_{i+1} - 1) × stride + K$$
$RF_i$表示第$i$层的感受野大小,stride表示步长,K表示卷积核大小
通俗解释 假设有如下网络,现在我们要计算第i+1的感受野,那么,
  • 首先确定i+1层核(卷积核或池化核)大小即为感受野的大小
  • 利用上面的公式计算第i层感受野的大小
  • 依照上面的公式一直推到input层,==最终计算的结果即为i+1的感受野的大小==
【神经网络】感受野浅析
文章图片

方法二:从前往后推 公式讲解 顾名思义,从网络的输入层一直推到我们想要计算层的感受野
? $$RF_{i+1} = RF_i + (k - 1) * S_i$$
$$S_i$$ 表示之前所有层的步长的乘积,==不包含当前层==,即
? $$S_i = \prod_{i=0}^n Stride_i $$
通俗理解 依旧如图所示,我们需要计算第i+1的层感受野的大小,那么,
  • 首先确定input层后面的核(卷积核或池化核,一般为卷积核)大小,
  • 依照公式逐渐往后推到i+1的感受野大小
【神经网络】感受野浅析
文章图片

1.1.4 验证
验证上面例子 【神经网络】感受野浅析
文章图片

方法一:从后往前推 如果第一种情况,使用5×5的卷积核,最后一层为1×1,那么最后一层的感受野为卷积核大小,即5
如果第二种情况,使用两个3×3的卷积核(步幅为1),最后一层的“临时感受野”为卷积核大小,即3×3,前一层的感受野为:
? $$RF = (3 - 1) × 1 + 3 = 5$$,最终,最后一层的感受野大小为5
方法二:从前往后推 第一种情况,使用5×5的卷积核,那么最后的感受野即为5
第二种情况,第一个卷积核为3×3,那么最开始的感受野为3,第二个卷积核为3×3,生成的特征图的感受野为:
? $$S_i= 1 $$ 前面一个卷积核的步长为1
? $$$RF_2 = RF_1 + (K-1)*S = 3 + (3-1)*1 = 3 + 2 = 5$$
如上,两个情况的的感受野都为5,和上图一致。
例子
layer kernel size stide $\prod_i^nstide_i$
input
conv1 3*3 1
pool1 2*2 2 1
conv2 3*3 1 2
pool2 2*2 2 2
conv3 3*3 1 4
conv4 3*3 1 4
pool3 2*2 2 4
方法一:从后向前推: 最后一层为pool3:RF = 2 (临时感受野为核大小)
conv4 = (2 - 1) * 1 + 3 = 4
conv3 = (4 - 1) * 1 + 3 = 6
pool2 = (6 - 1) * 2 + 2 = 12
conv2 = (12 - 1) * 1 + 3 = 14
pool1 = (14 - 1) * 2 + 2 = 28
conv1 = (28 - 1) * 1 + 3 = 30
所以,pool3的感受野为30
方法二:从前往后推 【【神经网络】感受野浅析】为了方便计算,再上面表格中计算了$\prod_i^nstide_i$,
conv1的感受野即为卷积核大小,即
$$conv1 = 3$$
$$pool1= 3+(k-1) * s = 3 + (2-1) * 1 = 3 +1 = 4$$
$$conv2 = 4 +(k - 1)*s = 4+(3-1)*2=4+4 = 8$$
$$pool2 = 8 + (k-1)*s = 8 + (2-1)*2 = 8+2 = 10$$
$$conv3 = 10 + (k-1)*s = 10 + (3-1)*4 = 10+8 = 18$$
$$conv4 = 18 + (k-1)*s = 18+(3-1)*4 = 18+8 = 26$$
$$pool3 = 26+(k-1)*s = 26 +(2-1)*4 = 26 + 4 = 30$$
如上,两种计算得到的结果相同
1.1.5 小结
  • 感受野计算有两种方法,
    • 从后往前推,得到的最终结果即为计算起始位置的感受野,
    • 从前往后退,从网络开始到需要计算的层的之间的感受野都会计算出,需要计算连乘
参考文献
[1] https://zhuanlan.zhihu.com/p/113487374
[2] https://blog.csdn.net/program_developer/article/details/80958716
[3] https://blog.csdn.net/qq_41076797/article/details/114434415
[4] http://www.360doc.com/content/20/1012/21/32196507_940140443.shtml
本文作者: 胡侃有料,欢迎来我的公众号胡侃深度学习
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,欢迎点赞。您的鼓励是博主的最大动力!

    推荐阅读