感受野是卷积神经网络中一个很重要的概念,调参的时候,有些时候适当关注一下感受野,往往能起到意想不到的作用。
随着网络层数的加深,逐层去推感受野往往不太现实。本文主要介绍感受野的计算公式和其推导过程。(我注意到有些博客中的计算方式是错误的,大家对问题还是要理解本质,自己多手动推导几次别把错误照单全收了。)
【以下计算不考虑 padding 的问题,不考虑边界的感受野缺失】
感受野就是神经网络 feature map 中 1 个节点在原图中覆盖的区域范围。
符号定义:设第 i 层中,单节点的感受野为 , 作用与该层的卷积核大小为 ,卷积步长为 (方便起见,这里的感受野和卷积核都认为是矩形,以上均为单个方向的尺寸)
根据以上定义第 1 层为原图,。
看以下例子:
层 id | 感受野大小(宽) | 每个节点覆盖的范围(每个节点感受野覆盖的 起点 ~ 终点) | 作用与该层的卷积核宽度与步长 |
1 | 1~1, 2~2,3~3,4~4,... | ||
2 | ----------------------------------- 1~3, 3~5, 5~7 |
||
3 | ----------------------------------- 1~7, 5~11,9~15,... |
||
4 | |||
5 | |||
... |
到第 5 层节点的感受野,即融合第 4 层的 个节点,因此,只要知道第 4 层第 个节点感受野的覆盖范围,即可得到第五层感受野的覆盖边界。
注意上表第三列中第公式,每个节点感受范围的起始范围和终止范围均为等差数列,而起点和终点的差值肯定就是为当前层感受野的大小加 1 (这很好理解,如果不明白多想一会儿)。因此我们只要知道本层感受野的大小和目标节点起始范围就能定位出该节点的感受野具体位置和尺寸了
请大家计算以下,第二层 feature map 左起第二个节点起始范围为 。
而到了第三层,由于作用与第二层feature map 的 stride 为 , 因此第三层的左起第二个节点要从第二层的第 个节点起始,因此,第三层左起第二个节点的起始范围为 ,以此类推。这样起始节点的计算公式便确定了。
接下来就是确定每层的感受野。对于相邻两层,第 i 层,融合了第 i-1 层 个节点,因此我们要找到第 i-1 层的左起第 个节点的感受野范围;按上面的推理方法,该节点起始范围为 ,因此终止范围为。
因此,第 i 层感受野范围为
以上便是推导公式,根据该公式以及以上的推导方法,便可以得到每一层节点的感受野大小和位置啦。
如有问题,欢迎留言讨论。