当前位置: 首页 > news >正文

【卷积神经网络详解与实例】4——感受野

4、感受野

4.1 感受野的概念

在卷积神经网络中,感受野(Receptive Field)是一个非常重要的概念,它描述了卷积神经网络中某一层输出结果的一个元素对应输入层上的区域大小,也就是特征图(Feature Map)上的一个点所对应的输入图像上的区域。

神经元之所以无法对原始图像的所有信息进行感知,是因为在这些网络结构中普遍使用卷积层和池化层,在层与层之间均为局部相连。神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着他可能蕴含更为全局、语义层次更高的特征;而值越小则表示其所包含的特征越趋向于局部和细节。因此感受野的值可以大致用来判断每一层的抽象层次。

4.2 感受野大小的计算

4.2.1 公式推导

我们先看下面这个例子:

可以看到在Conv1中的每一个单元所能看到的原始图像范围是 3*3,而由于 Conv2 的每个单元都是由 2*2 范围的 Conv1 构成,因此回溯到原始图像,能够看到的原始图像范围是 5*5 。因此我们说 Conv1 的感受野是 3,Conv2 的感受野是 5. 输入图像的每个单元的感受野被定义为 1,这应该很好理解,因为每个像素只能看到自己。

通过上图这种图示的方式我们可以“目测”出每一层的感受野是多大,但对于层数过多、过于复杂的网络结构来说,用这种办法可能就不够聪明了。因此我们希望能够归纳出这其中的规律,并用公式来描述,这样就可以对任意复杂的网络结构计算其每一层的感受野了。

由于图像是二维的,具有空间信息,因此感受野的实质其实也是一个二维区域。但业界通常将感受野定义为一个正方形区域,因此也就使用边长来描述其大小了。在接下来的讨论中,本文也只考虑宽度一个方向。我们先按照下图所示对输入图像的像素进行编号。

接下来我们使用一种并不常见的方式来展示CNN的层与层之间的关系(如下图,请将脑袋向左倒45°观看),并且配上对原图像的编号。

图中黑色的数字所构成的层为原图像或者是卷积层,数字表示某单元能够看到的原始图像像素。我们用 r_n 来表示第 n 个卷积层中每个单元的感受野(即数字序列的长度);蓝色的部分表示卷积操作,用 k_is_i 分别表示第 i 个卷积层的 kernel_size 和 stride 。

对 Raw Image 进行 kernel_size=3, stride 2 的卷积操作所得到的 fmap1(fmap为feature map的简称,为每一个conv层所产生的输出)的结果是显而易见的。序列 [1 2 3] 表示 fmap1 的第一个单元能看见原图像中的 1, 2, 3 这三个像素,而第二个单元则能看见 3, 4, 5。这两个单元随后又被 kernel_size=2, stride=1 的 Filter 2 进行卷积,因而得到的 fmap2 的第一个单元能够看见原图像中的 1,2,3,4,5 共5个像素(即取 [1 2 3] 和 [3 4 5] 的并集)。

接下来我们尝试一下如何用公式来表述上述过程。可以看到,[1 2 3] 和 [3 4 5] 之间因为 Filter1 的 stride=2 而错开(偏移)了两位,而3是重叠的。对于卷积两个感受野为3的上层单元,下一层最大能获得的感受野为 3 \times 2 = 6 ,但因为有重叠,因此要减去(kernel_size - 1)个重叠部分,而重叠部分的计算方式则为感受野减去前面所说的偏移量,这里是2。因此我们就得到 r_2 = r_1 \times k_2 - (r_1 - s_1) \times (k_2 - 1) = 3 \times 2 - (3 - 2) \times (2 - 1) = 5 。继续往下一层看,我们会发现[1 2 3 4 5]和[3 4 5 6 7]的偏移量仍为2,并不简单地等于上一层的 s_2 ,这是因为之前的stride对后续层的影响是永久性的,而且是累积相乘的关系(例如,在fmap3中,偏移量已经累积到4了),也就是说 r_3 应该这样求

r_3 = r_2 \times k_3 - (r_2 - s_1 \times s_2) \times (k_3 - 1) = 5 \times 3 - (5 - 2) \times (3 - 1) = 9

以此类推,

r_4 = r_3 \times k_4 - (r_3 - s_1 \times s_2 \times s_3) \times (k_4 - 1) = 9 \times 2 - (9 - 4) \times (2 - 1) = 13

于是我们就可以得到关于计算感受野的抽象公式了:

r_n = r_{n-1} \times k_n - (r_{n-1} - \prod_{i=1}^{n-1} s_i) \times (k_n - 1) \\ = r_{n-1} + (k_n - 1) \prod_{i=1}^{n-1} s_i

3.2.2 具体应用举例

使用公式 r_n = r_{n-1} + (k_n - 1) \prod_{i=1}^{n-1} s_i 计算AlexNet每层的感受野。

AlexNet 的相关数据如下:

  • 原始图像,感受野为:Raw = 1

  • Conv1 = 1 + (11-1) \times 1 = 11

  • Pooling1 = 11 + (3-1) \times (1\times4) = 19

  • Conv2 = 19 + (5-1) \times (1\times4\times2) = 51

  • Pooling2 = 51 + (3-1)\times(1\times4\times2\times1) = 67

  • Conv3 = 67 + (3-1)\times(1\times4\times2\times1\times2) = 99

  • Conv4 = 99 + (3-1)\times(1\times4\times2\times1\times2\times1) = 131

  • Conv5 = 131 + (3-1)\times(1\times4\times2\times1\times2\times1\times1)= 163

  • Pooling3 = 163 + (3-1)\times(1\times4\times2\times1\times2\times1\times1\times1) = 195

3.2.3 感受野大小的变与不变

任何“让单层像素能看到更多/更少输入区域”的操作就能改感受野;只做“通道混合”或“像素重排”而不看更大/更小区域的,就不能。

✅ 能改变感受野的层(看到更大/更小区域

操作方向记忆口诀
普通卷积 (k>1)变大“核>1 就多扫一圈”
空洞卷积 (dilation)变大“空一格看一次,视野成倍”
池化/下采样 (stride>1)变大“一步跨多格,后面层等价看更大”
转置卷积 (deconv)变大“上采样,把 1 像素扩散成 block”
大 stride 卷积变大“ stride=2 等价把后面感受野×2”
1×1 卷积不变只看单点,不扩大也不缩小

❌ 不能改变感受野的层(只动通道,不动空间视野

操作原因一句话
1×1 卷积只混通道,单像素仍只看原像素
BatchNorm / LayerNorm归一化系数,空间位置无关
ReLU、Sigmoid、GELU逐点激活,无邻居信息
Dropout / DropBlock随机失活,不改变实际视野
通道拼接/相加 (concat/add)只是把各支路结果汇总,各支路感受野已固定
通道打乱 (shuffle)像素没动,只是重排通道顺序
  • padding 本身不改感受野大小,只改特征图尺寸;它让“边缘像素也能被正常扫描”,所以常配合大 kernel/dilation 使用

  • 多分支结构 (Inception、ResNet) 的最终感受野 = 各分支最大者;相加/拼接不会把小的变大。


文章转载自:

http://xEgIQFER.gybnk.cn
http://5Ut63Lli.gybnk.cn
http://ErqVUrIC.gybnk.cn
http://FaUPICFy.gybnk.cn
http://rgGY2Wxh.gybnk.cn
http://Hs6eqQRU.gybnk.cn
http://msFBjfIQ.gybnk.cn
http://WGc9fwng.gybnk.cn
http://cdqbfqWr.gybnk.cn
http://oD7m2y5p.gybnk.cn
http://X9zrPwf6.gybnk.cn
http://VT3iLYmW.gybnk.cn
http://XafcFg3C.gybnk.cn
http://PUo7JsC4.gybnk.cn
http://pHXkGmaI.gybnk.cn
http://7yAWDSDx.gybnk.cn
http://1eU3mU4G.gybnk.cn
http://K7t59kwD.gybnk.cn
http://A0B9rqh9.gybnk.cn
http://wGSjqJfq.gybnk.cn
http://5HXALatL.gybnk.cn
http://mpHuJfTK.gybnk.cn
http://Bt22EsfU.gybnk.cn
http://zS92pBnJ.gybnk.cn
http://fE5PWvzz.gybnk.cn
http://DE0Q7P4A.gybnk.cn
http://lx4e6fmD.gybnk.cn
http://wSQZxUsP.gybnk.cn
http://6LQKj30i.gybnk.cn
http://i0HT4b2Q.gybnk.cn
http://www.dtcms.com/a/376832.html

相关文章:

  • 多模态学习双核引擎:对齐建立连接,融合释放价值
  • unity开发类似个人网站空间
  • 【不背八股】10.Redis知识点汇总
  • MySQL 整型数据类型:选对数字类型,让存储效率翻倍
  • OpenCV的图像金字塔
  • PMP考试学习计划与知识大纲
  • 自然语言处理开源框架全面分析
  • antd v5 support React is 16 ~ 18. see https://u.ant.design/v5-for-19 for...
  • 【硬件-笔试面试题-82】硬件/电子工程师,笔试面试题(知识点:讲讲单片机的内部晶振与外部晶振)
  • 【计算机网络 | 第12篇】网络应用原理
  • 【竞赛系列】机器学习实操项目05——客户信用评估模型进阶流程(含XGBoost、LightGBM、CatBoost 高级模型对比与参数优化)
  • 机器学习的本质:从跑模型到真正解决问题
  • LeakCanary最新稳定版
  • 个人博客系统-测试报告
  • 生活中的各种造型 参考多图
  • 独家 | 抖音生活服务调整:涂晴接管市场和达人运营,旭凯担任北部大区负责人
  • Spring Bean扫描
  • 第2讲 机器学习 - 导论
  • 【开题答辩全过程】以 基于Android的智慧旅游APP开发为例,包含答辩的问题和答案
  • Linux服务器的系统安全强化超详细教程
  • Dockerfile构建容器需要注意的事项。
  • YOLO 发展前景与创新点
  • 一个基于 .NET 开源、轻便的 Windows 优化工具,适用于 Win7 - Win11 最新版的优化!
  • RL【7-1】:Temporal-difference Learning
  • child_process 和 cluster的区别
  • 第十七篇|优尼塔斯东京校区的教育数据工程:学费函数、国籍网络与升学有向图
  • ES6 面试题及详细答案 80题 (33-40)-- Symbol与集合数据结构
  • DeepResearch(上)
  • 即时通讯小程序
  • Firefox Window 开发详解(二)