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

在深度神经网络中有个概念叫感受野,英文是-Receptive Field,第一次听到这个中译的时候让我感到非常不解,这是个啥玩意?看了英文才知道原意指的是什么。

再有卷积操作的深层神经网络中,卷积层神经元对上一层神经元的感受范围的大小被定义为感受野。

神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着他可能蕴含更为全局、语义层次更高的特征;而值越小则表示其所包含的特征越趋向于局部和细节。因此感受野的值可以大致用来判断每一层的抽象层次。

对感受野的理解,大概花了2小时左右才能略懂一二,查阅了很多资料,其中深度神经网络中的感受野(Receptive Field)
这一博文基本能了解感受野的概念,及层与层之间感受野的计算公式,本文基本是转载上述博文,但对原博文中的一些细节和易混淆概念的做了标注。


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

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


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

细节解释

  • 上图中之所以是斜着45°的形式展开层与层之间的卷积,是因为要体现下一层中的核在扫描上一层结果中相邻扫描区域之间的重叠部分(核在单一区域扫描到的数据对求感受野没有实际的帮助,所以我们图中的编号是按整个扫描区域按行编号)。
  • 注意图中各个参数作用的层是当前层还是上一层,举个例子:图中k2作用的是第2层的数据,ri表示第i+1层的感受野大小。
  • 重叠部分的个数(kernel_size-1)的解释:其实要求这个重叠部分的个数的目的是为了求出感受野ri的大小(注意感受野r的编号i是从0开始)。为了方便阅读,我将这个图再次放到下面。其中很明显能看出,每个大括号有k行数据,其中每行数据的重叠部分的重叠次数刚好就是这k行数据的“夹层数”,即k-1。
  • 其中大括号中为何有k行数据,这与这一层即将卷积的卷积核维度相等,比如k2=2,要从上一层数据挑选2x2的数据块进行卷积,而上一层中的第一行数据块为①{1,2,3},②{3,4,5}等数据块,但我们只研究核对于上一层的行数据的重叠部分(最能直接体现重叠部分次数,到这里你应该知道为何下图的编号的形式是如此)于是这里挑选了①和②数据块,数据块个数于卷积核维度一致,数据块之间的重叠部分重叠了k-1次。
  • 解释了重叠部分的次数k-1后,还有重叠部分需要解释,重叠部分指的是卷积核遍历上一层的属于核维度内的那一行数据中重叠部分的大小,比如第2层中经过Conv Filter 3卷积时,扫描到的数据块①{1,2,3,4,5},②{3,4,5,6,7},③{5,6,7,8,9}之间的重叠部分大小,因为三个数据块的重叠部分大小是一样大的,所以我们分析①和②数据块可以看出,重叠部分为{3,4,5},大小为3,实际上是等于(r2-s1 X s2),有了重叠次数k-1和重叠部分大小,我们就可以计算重叠数据的规模,用理论最大感受野减去整个重叠数据规模,就可以得到感受野大小。
  • 这里博主说到为何偏移量stride对后续层的影响是永久性的,且是累计相乘的关系,我个人的理解:每一层偏移都会经过卷积后保存在卷积后的数据块中,这里就体现了层与层之间stride的”继承性“和”永久性“,至于为何是累计相乘的关系,下图的例子的归纳例子不能足以说明累计相乘的准确性,博主的归纳还不够充分(不满足数学归纳法的逻辑),不过查阅了相关资料,公式确实如博主所说的形式。

    在查看B站UP主VGG网络详解及感受野的计算得知另一个关于感受野计算的公式,相对上面的公式比较好理解,是一个递推式,而不是一个归纳式,方便理解:

本人还没有精力去证伪整个公式,权当了解,后续会研究VGG,Alexnet,Resnet,yolov1-3的论文。

感受野-Receptive Field的理解相关推荐

  1. 感受野receptive field个人理解

    先引用一种思路: 至于为什么在下式不成立: 在于我们从长度着手的处理方法,应该从下一层最多从上一层吸收的长度着手(这也是和先前的假设pad操作不能扩展信息量相对应的),用一张图解释一下: 举个例子:在 ...

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

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

  3. 感受野(receptive field)

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. oracle 权限一览表
  2. python json模块rodas方法_json模块使用总结——Python
  3. ubun16.04+搜狗输入法
  4. 【性能优化】 之 10053 事件
  5. 阶梯英语培训学校致家长书
  6. 现有类 成 mfc类_女人不想成“黄脸婆”,4类食物是衰老“催化剂”,女人尽量远离_氧化...
  7. java代码执行linux命令_怎么用java代码运行linux命令
  8. 【回波损耗(dB)和电压驻波比(VSWR)之间的关系】
  9. ubuntu 下载 迅雷
  10. Codeforces 417D Cunning Gena(状压DP)
  11. 使用DistrbutedDataParallel时,nvdiai-smi显示每个进程都占用GPU:0
  12. java毕业生设计大学生兼职平台计算机源码+系统+mysql+调试部署+lw
  13. 软件安全建设【学习笔记】
  14. Connor学Android - Android动画
  15. mac 升级php7.3版本之后Redis扩展升级(phpredis)
  16. 蓝桥杯C/C++ AB组辅导课
  17. YLMF正版转型猜想
  18. java Excel转Pdf
  19. html5 a4页面,如何在A4纸张尺寸页面制作HTML页面?
  20. 在 Visual Studio Code 中使用 Vue

热门文章

  1. Arthas——热替换
  2. 义隆单片机C语言2ms中断,义隆单片机编程时应注意的几点.doc
  3. 关于Github项目DCRNN运行问题小结(1)——tables模块包
  4. python中trun是什么意思_Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun錯誤解決方案...
  5. Ubuntu 修改分辨率
  6. PHP实现站内信设计思路与方案
  7. 三菱FX系列PLC的modbusTCP以太网通讯
  8. 使用C++,Python,Matlab进行facial 68 points landmarks
  9. 信息安全数学基础自学笔记1——群
  10. 微信配置JS接口安全域名-Nginx配置 文件的配置