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

感受野如何计算?

感受野(Receptive Field, RF)是卷积神经网络(CNN)中的一个重要概念,它指的是网络中某个特定神经元能够接收到的输入图像上的区域大小。换句话说,感受野定义了输出特征图中的每个单元依赖于输入图像中哪些像素。理解感受野对于设计和调试CNN架构非常重要,因为它直接影响模型捕捉到的上下文信息量。

感受野的计算

感受野的计算涉及多个因素,包括卷积核大小、步长(stride)、填充(padding),以及池化操作等。随着网络深度的增加,感受野会逐渐扩大,因为每一层都在其前一层的感受野基础上进行操作。

感受野的计算公式如下:

RF new = RF old + ( kernel size − 1 ) × jumper old \text{RF}_{\text{new}} = \text{RF}_{\text{old}} + (\text{kernel size} - 1) \times \text{jumper}_{\text{old}} RFnew=RFold+(kernel size1)×jumperold

其中:

  • R F o l d RF_{old} RFold 是前一层的感受野。
  • k e r n e l s i z e kernel size kernelsize 是当前层的卷积核或池化核大小。
  • j u m p e r o l d jumper_{old} jumperold 是前一层的jumper值。
  • R F n e w RF_{new} RFnew 是更新后的感受野。

jumper(有时也被称为“有效步长”或“累积步长”)是用于计算感受野(Receptive Field, RF)时的一个重要概念。它表示当前层相对于输入层的像素间距,即从输入图像到当前层,每个输出单元在原始输入图像上对应的实际距离。随着网络深度的增加,这个距离会根据每一层的步长和卷积/池化操作而累积变化。

jumper 的计算

jumper 的初始值为1,因为它代表了输入层本身,此时每个像素点的感受野只包含自身。对于后续每一层,jumper 的更新规则如下:

jumper new = stride × jumper old \text{jumper}_{\text{new}} = \text{stride} \times \text{jumper}_{\text{old}} jumpernew=stride×jumperold

其中:

  • stride 是当前层的步长。
  • j u m p e r o l d jumper_{old} jumperold 是前一层的jumper值。
  • j u m p e r n e w jumper_{new} jumpernew 是更新后的jumper值,用于计算下一层的感受野。
基本公式

假设我们从一个输入层开始,逐层计算感受野,可以使用以下递归公式:

  1. 初始状态

    • 感受野:1x1
    • jumper(或称为累积步长):1
  2. 卷积层/池化层

    • 感受野更新公式:
      RF new = RF old + ( kernel size − 1 ) × jumper old \text{RF}_{\text{new}} = \text{RF}_{\text{old}} + (\text{kernel size} - 1) \times \text{jumper}_{\text{old}} RFnew=RFold+(kernel size1)×jumperold
    • jumper 更新公式:
      jumper new = stride × jumper old \text{jumper}_{\text{new}} = \text{stride} \times \text{jumper}_{\text{old}} jumpernew=stride×jumperold

具体例子

在CNN网络中,图A经过核为3x3,步长为2的卷积层,ReLU激活函数层,BN层,以及一个步长为2,核为2x2的池化层后,再经过一个3x3的的卷积层,步长为1,此时的感受野是多少?
我们来具体计算每层的感受野jumper

  1. 初始状态

    • 感受野:1x1
    • jumper:1
  2. 第一个3x3卷积层,步长为2:

    • 感受野: RF new = 1 + ( 3 − 1 ) × 1 = 3 \text{RF}_{\text{new}} = 1 + (3 - 1) \times 1 = 3 RFnew=1+(31)×1=3
    • jumper jumper new = 2 × 1 = 2 \text{jumper}_{\text{new}} = 2 \times 1 = 2 jumpernew=2×1=2
  3. ReLU激活函数层BN层

    • 这些层不会改变感受野或jumper,因此它们的感受野和jumper与前一层相同。
    • 感受野:3x3
    • jumper:2
  4. 2x2池化层,步长为2:

    • 感受野: RF new = 3 + ( 2 − 1 ) × 2 = 5 \text{RF}_{\text{new}} = 3 + (2 - 1) \times 2 = 5 RFnew=3+(21)×2=5
    • jumper jumper new = 2 × 2 = 4 \text{jumper}_{\text{new}} = 2 \times 2 = 4 jumpernew=2×2=4
  5. 第二个3x3卷积层,步长为1:

    • 感受野: RF new = 5 + ( 3 − 1 ) × 4 = 5 + 8 = 13 \text{RF}_{\text{new}} = 5 + (3 - 1) \times 4 = 5 + 8 = 13 RFnew=5+(31)×4=5+8=13
    • jumper jumper new = 1 × 4 = 4 \text{jumper}_{\text{new}} = 1 \times 4 = 4 jumpernew=1×4=4

因此,最终的感受野是13x13。

感受野的意义

  • 大感受野:意味着神经元能够“看到”更大的输入区域,这有助于捕捉更广泛的上下文信息,适合处理需要全局信息的任务,如分类任务。
  • 小感受野:意味着神经元只能“看到”较小的输入区域,这有助于捕捉局部特征,适合处理需要精细局部信息的任务,如边缘检测。

在设计CNN时,理解并控制感受野的大小可以帮助优化网络性能,确保模型既能捕捉到必要的细节,又能覆盖足够的上下文信息。


http://www.kler.cn/a/446734.html

相关文章:

  • STM32 高级 物联网通信之CAN通讯
  • 梯度(Gradient)和 雅各比矩阵(Jacobian Matrix)的区别和联系:中英双语
  • Android详解——ConstraintLayout约束布局
  • 在Ubuntu下运行QEMU仿真FreeBSD riscv64系统
  • Linux 中的 mkdir 命令:深入解析
  • springboot449教学资源共享平台(论文+源码)_kaic
  • vtie项目中使用到了TailwindCSS,如何打包成一个单独的CSS文件(优化、压缩)
  • 阿里云OSS批量导出下载地址 OSS批量导出 OSS导出清单
  • 应用端sql慢查询监控分析
  • git全教程(长期更新)
  • Leetcode分隔链表
  • 急!急!急!电脑丢失msvcr100.dll怎么办?电脑“缺失msvcr100.dll”要怎么解决?
  • 使用计算机创建一个虚拟世界
  • 【P2P】【Go】采用go语言实现udp hole punching 打洞 传输速度测试 ping测试
  • 《XML》教案 第1章 学习XML基础
  • C# OpenCV机器视觉:图像拼接
  • 重拾设计模式--建造者模式
  • MFC/C++学习系列之简单记录8——消息映射
  • 2.6 网络面试问题
  • 二叉树 -- 堆(详解)
  • 网安信息收集(web层面)
  • springboot——登录认证(包括jwt技术、拦截器过滤器)
  • redis 在 win10中的使用
  • Linux Swap: 深入解析 mkswap, mkfs.swap, 和 swapon
  • Kubernetes(k8s)安装详细过程
  • 服务器数据恢复—RAIDZ离线硬盘数超过热备盘数导致阵列崩溃的数据恢复案例