0
点赞
收藏
分享

微信扫一扫

感受野浅析

janedaring 2022-05-03 阅读 66

every blog every motto: There’s only one corner of the universe you can be sure of improving, and that’s your own self.
https://blog.csdn.net/weixin_39190382?spm=1010.2135.3001.5343

0. 前言

简单记录感受野

1. 正文

1.1 感受野

1.1.1 定义

定义:卷积神经网络中的特征图上的一个像素点在输入图像上映射的区域大小

204378737_1_20201012093531178

1.1.2 例子:

  • 5×5的输入特征图经过1个5×5的卷积核,生成1×1的特征图,

  • 5×5的输入特征图经过两个3×3的卷积核,生成1×1的特征图。

上面两个的感受野都为5×5,且两个3×3的卷积核等于一个5×5

20180708133900829

注:上面满足卷积的计算公式:

Hout=Hink+2pSH_{out} = \frac {H_{in} - k + 2p}{S}

1.1.3 感受野大小的计算

方法一:从后往前推

公式讲解

感受野大小计算需要注意以下几点:

  • 最后一层感受野的大小等于核(不一定是卷积核,还有可能是池化核)的大小(当前的感受野相当于“临时感受野”,用于从后往前推)
  • 感受野大小的计算不考虑padding的大小
  • 当前层(i层)的感受野大小和当前层(i层)的卷积核大小步长有关,同时也和网络后一层(i+1)层特征图的感受野大小有关

RFi=(RFi+11)×stride+KRF_i = (RF_{i+1} - 1) × stride + K

RFiRF_i表示第ii层的感受野大小,stride表示步长,K表示卷积核大小

通俗解释

假设有如下网络,现在我们要计算第i+1的感受野,那么,

  • 首先确定i+1层核(卷积核或池化核)大小即为感受野的大小
  • 利用上面的公式计算第i层感受野的大小
  • 依照上面的公式一直推到input层,最终计算的结果即为i+1的感受野的大小

image-20220503092353294

方法二:从前往后推

公式讲解

顾名思义,从网络的输入层一直推到我们想要计算层的感受野

RFi+1=RFi+(k1)SiRF_{i+1} = RF_i + (k - 1) * S_i

SiS_i 表示之前所有层的步长的乘积,不包含当前层,即

Si=i=0nStrideiS_i = \prod_{i=0}^n Stride_i

通俗理解

依旧如图所示,我们需要计算第i+1的层感受野的大小,那么,

  • 首先确定input层后面的核(卷积核或池化核,一般为卷积核)大小,
  • 依照公式逐渐往后推到i+1的感受野大小

image-20220503093534930

1.1.4 验证

验证上面例子

方法一:从后往前推

如果第一种情况,使用5×5的卷积核,最后一层为1×1,那么最后一层的感受野为卷积核大小,即5

如果第二种情况,使用两个3×3的卷积核(步幅为1),最后一层的“临时感受野”为卷积核大小,即3×3,前一层的感受野为:

RF=(31)×1+3=5RF = (3 - 1) × 1 + 3 = 5,最终,最后一层的感受野大小为5

方法二:从前往后推

第一种情况,使用5×5的卷积核,那么最后的感受野即为5

第二种情况,第一个卷积核为3×3,那么最开始的感受野为3,第二个卷积核为3×3,生成的特征图的感受野为:

Si=1S_i= 1 前面一个卷积核的步长为1

​ $RF2=RF1+(K1)S=3+(31)1=3+2=5RF_2 = RF_1 + (K-1)*S = 3 + (3-1)*1 = 3 + 2 = 5

如上,两个情况的的感受野都为5,和上图一致。

例子

layer kernel size stide instidei\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

方法二:从前往后推

为了方便计算,再上面表格中计算了instidei\prod_i^nstide_i

conv1的感受野即为卷积核大小,即

conv1=3conv1 = 3

pool1=3+(k1)s=3+(21)1=3+1=4pool1= 3+(k-1) * s = 3 + (2-1) * 1 = 3 +1 = 4

conv2=4+(k1)s=4+(31)2=4+4=8conv2 = 4 +(k - 1)*s = 4+(3-1)*2=4+4 = 8

pool2=8+(k1)s=8+(21)2=8+2=10pool2 = 8 + (k-1)*s = 8 + (2-1)*2 = 8+2 = 10

conv3=10+(k1)s=10+(31)4=10+8=18conv3 = 10 + (k-1)*s = 10 + (3-1)*4 = 10+8 = 18

conv4=18+(k1)s=18+(31)4=18+8=26conv4 = 18 + (k-1)*s = 18+(3-1)*4 = 18+8 = 26

pool3=26+(k1)s=26+(21)4=26+4=30pool3 = 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](

举报

相关推荐

0 条评论