本文转载自博客园用户@shine-lee的彻底搞懂感受野的含义与计算。

1. 感受野(Receptive-Field, RF)是什么?

The receptive field is defined as the region in the input space that a particular CNN's feature is looking at (i.e. be affected by). 来自A guide to receptive field arithmetic for Convolutional Neural Networks

在卷积神经网络中,感受野的定义是:卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。

卷积神经网络中,越深层的神经元看到的输入区域越大,如下图所示,kernel size 均为3×3,stride均为1,绿色标记的是 每个神经元看到的区域,黄色标记的是 看到的区域,具体地,每个神经元可看到上3×3大小的区域,每个神经元看到上3×3大小的区域,该区域可以又看到上5×5大小的区域。


所以,感受野是个相对概念,某层feature map上的元素看到前面不同层上的区域范围是不同的,通常在不特殊指定的情况下,感受野指的是看到输入图像上的区域。

为了具体计算感受野,这里借鉴视觉系统中的概念,

准确计算感受野,需要回答两个子问,即视野中心在哪和视野范围多大

  • 只有看到”合适范围的信息”才可能做出正确的判断,否则就可能“盲人摸象”或者“一览众山小”;
  • 目标识别问题中,我们需要知道神经元看到是哪个区域,才能合理推断物体在哪以及判断是什么物体。

但是,网络架构多种多样,每层的参数配置也不尽相同,感受野具体该怎么计算?

2. 计算感受野的大小

在正式计算之前,先对数学符号做如下约定,


  • :kernel size,卷积核大小;
  • :padding size,填充大小;
  • :stride size,步长大小;
  • Layer:用Layer表示feature map,特别地 为输入图像;
  • Conv:用Conv表示卷积,k、p、s为卷积层的超参数, 的输入和输出分别为
  • :feature map size为 n×n,这里假定height=width;
  • :receptive field size为r×r,这里假定感受野为方形;
  • :feature map上相邻元素间的像素距离,即将feature map上的元素与输入图像 上感受野的中心对齐后,相邻元素在输入图像上的像素距离,也可以理解为 feature map上前进1步相当于输入图像上前进多少个像素,如下图所示,feature map上前进1步,相当于输入图像上前进2个像素,j=2;

  • :feature map左上角元素在输入图像上的感受野中心坐标(start,start),即视野中心的坐标,在上图中,左上角绿色块感受野中心坐标为(0.5,0.5),即左上角蓝色块中心的坐标,左上角白色虚线块中心的坐标为(−0.5,−0.5);
  • 表示层,卷积层为 ,其输入feature map为,输出为

下面假定所有层均为卷积层,其他操作如池化,空洞卷积等可以等价于普通卷积层:

  1. 对于空洞卷积dilated convolution,相当于改变了卷积核的尺寸,若含有dilationrate参数,只需将 替换为 ,dilationrate=1时为正常卷积;
  2. 对于pooling层,可将其当成特殊的卷积层,同样存在kernel size、padding、stride参数。
  3. 非线性激活层为逐元素操作,不改变感受野。

2.1 感受野大小的计算

感受野大小的计算是个递推公式:

再看上面的动图,如果feature map 上的一个元素A看到feature map 上的范围为3×3(图中绿色块),其大小等于kernel size ,所以,A看到的感受野范围等价于上3×3窗口看到的范围,据此可以建立起相邻Layer感受野的关系,如下所示,其中的感受野,的感受野:


  • 一个元素的感受野等价于 上k×k 个感受野的叠加;
  • 上一个元素的感受野为
  • 上连续k 个元素的感受野可以看成是,第1个元素看到的感受野加上剩余k−1步扫过的范围 上每前进1个元素相当于在输入图像上前进个像素,结果等于+(k−1)×

可视化如下图所示:


下面的问题是, 怎么求?

上前进1个元素相当于上前进个元素,转换成像素单位为:


其中,的kernel在 上滑动的步长,输入图像的

根据递推公式可知,


上前进1个元素,相当于在输入图像前进了 个像素,即前面所有层stride的连乘。进一步可得, 的感受野大小为:


2.2 计算感受野中心大小

感受野中心的计算也是个递推公式:

在上一节中计算得,表示feature map 上前进1个元素相当于在输入图像上前进的像素数目,如果将feature map上元素与感受野中心对齐,则 为感受野中心之间的像素距离。如下图所示,


其中,各层的kernel size、padding、stride超参数已在图中标出,右侧图为feature map和感受野中心对齐后的结果。

相邻Layer间,感受野中心的关系为:


所有的start坐标均相对于输入图像坐标系。其中, ,为输入图像左上角像素的中心坐标, 表示 左上角元素的感受野中心坐标, 感受野中心相对于 坐标系的偏差,该偏差需折算到输入图像坐标系,其值需要乘上 ,即 相邻元素间的像素距离,相乘的结果为 ,即感受野中心间的像素距离——相对输入图像坐标系。至此,相邻Layer间感受野中心坐标间的关系就不难得出了,这个过程可视化如下。


3. 总结

感受野的计算公式:


由上面的递推公式,就可以从前向后逐层计算感受野了,代码可参见computeReceptiveField.py,在线可视化计算可参见Receptive Field Calculator

最后,还有几点需要注意:

  • 的感受野大小与 无关,即当前feature map元素的感受野大小与该层相邻元素间的像素距离无关;
  • 为了简化,通常将padding size设置为kernel的半径,即 ,可得 ,使得feature map 位置的元素,其感受野中心坐标为
  • 对于空洞卷积dilated convolution,相当于改变了卷积核的尺寸,若含有dilationrate参数,只需将 替换为 ,dilationrate=1时为正常卷积;
  • 对于pooling层,可将其当成特殊的卷积层,同样存在kernel size、padding、stride参数。
  • 非线性激活层为逐元素操作,不改变感受野。

[1][2]

参考

  1. ^彻底搞懂感受野的含义与计算 https://www.cnblogs.com/shine-lee/p/12069176.html
  2. ^SIGAI-关于感受野的总结 https://zhuanlan.zhihu.com/p/40424530

如何理解CNN中的感受野(receptive-field)以及如何计算感受野?相关推荐

  1. 感受野-Receptive Field的理解

    之前在阅读yolov1的论文时,发现yolov1用到了Resnet,于是找到了Resnet论文,在研究Resnet的时候,发现自己对卷积的相关操作理解还不够深刻,于是研究卷积,发现其中一个比较重要的概 ...

  2. 深度CNN感受野(Receptive Field)的计算

    参考 如何计算感受野(Receptive Field)--原理 FOMORO AI -> 可视化计算感受野的网站,可以用来验证自己计算的结果 Python代码 这里使用的是从后向前的计算方法,简 ...

  3. 深度学习笔记~感受野(receptive field)的计算

    以前对CNN中的感受野(receptive field)已经有了一些认识,基本上是从概念理解上得到的. 本篇文章给出了receptive field的计算过程和相应的python代码,对recepti ...

  4. 深度学习之学习(1-2)感受野(receptive field)

    参见:原始图片中的ROI如何映射到到feature map? - 知乎 1 感受野的概念 在卷积神经网络中,感受野的定义是 卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像 ...

  5. 感受野(receptive field)

    学习RCNN系列论文时, 出现了感受野(receptive field)的名词, 感受野的尺寸大小是如何计算的,在网上没有搜到特别详细的介绍, 为了加深印象,记录下自己对这一感念的理解,希望对理解基于 ...

  6. 什么是感受野 Receptive Field 感受野是什么意思

    有一个人写的很好,放上他写的文章 彻底搞懂感受野的含义与计算 - 知乎 然后嘞,如果你点进去不想看,那你就适合看我写的哈哈 比较浮躁,那就我来吧 首先我们得知道感受野的英文名字哈 洋气 感受野 Rec ...

  7. 如何计算感受野(Receptive Field)

    一.感受野的概念 感受野指的是一个特定的 CNN 特征(特征图上的某个点)在输入空间所受影响的区域. 感受野计算时有下面的几个情况需要说明: a)第一层卷积层的输出特征图像素的感受野的大小等于滤波器的 ...

  8. 如何计算感受野(Receptive Field)——原理

    本文转载自知乎专栏:https://zhuanlan.zhihu.com/p/31004121 写这篇文章的初衷是自己需要计算感受野,但是在今天之前只对感受野有感性认识,并不知道如何定量计算.所以在网 ...

  9. 池化层(pooling layer) 感受野(Receptive Field) 神经网络的基本组成

    目录 (1)本文涉及的函数 (2)池化层 (3)感受野 (4)代码示例(含注释) 承接上两篇博客:卷积层(空洞卷积对比普通卷积).激活函数层 (1)本文涉及的函数 import torch impor ...

最新文章

  1. 1.1 Friday the Thirteenth
  2. 2019年北航OO第四单元(UML任务)及学期总结
  3. python和c哪个适合入门-Python和C先学哪个好?
  4. Hibernate 二级缓存使用
  5. java程序课程总结_java课程总结
  6. 华为AR engine 应用开发学习教程
  7. md /mdd /ml /mt/mtd
  8. css sprite原理优缺点及使用
  9. RabbitMQ中queueBind和exchangeBind方法
  10. 【看这一篇就够了】如何删除gitHub仓库中的文件
  11. java定义一个空数组_一个 Java 方法,最多能定义多少参数?
  12. Jetson Nano配置MCP2515 CANBUS模块
  13. 历年考研计算机专业英语平均分,历年考研英语平均分及难度分析(截止至2020年)...
  14. 加域时提示指定的网络名不再可用
  15. word文档输入带勾的复选框
  16. 打卡签到python代码_[python] 初学python,打卡签到
  17. pyqt5 listView 列表显示
  18. pvp服务器有什么项目,N服PVP服率先回归!压测后未来3-4周正式开服
  19. Win10软件环境变量配置(配置原因、配置步骤)
  20. signal函数详解

热门文章

  1. 【Docker】No defult Boot2Docer ISO异常
  2. 必应壁纸爬取 def
  3. outlook企业邮箱服务器怎么填,Outlook客户端怎么配置企业邮箱
  4. Airbnb短租分析
  5. LZW算法原理及实现
  6. 超详细!Win10(UEFI启动)安装Ubuntu18.04双系统
  7. gird布局解决 最后一行数量不对布局问题
  8. 并行流parallelStream
  9. IE代理服务器没有响应 浏览器无法打开网页解决方法
  10. 前度构建工具gulp