对CNN感受野一些理解

感受野(receptive field)被称作是CNN中最重要的概念之一。为什么要研究感受野呐?主要是因为在学习SSD,Faster RCNN框架时,其中prior box和Anchor box的设计,一直搞不明白。当我理解了感受野才有点恍然大悟的感觉。快速看完这篇文章的前提是,要对CNN有个大致了解,feature map等术语要知道。

先看八股式定义,感受野:在卷积神经网络CNN中,决定某一层输出结果中一个元素所对应的输入层的区域大小,被称作感受野receptive field。我们看这段定义非常简单,用数学的语言就是感受野是CNN中的某一层输出结果的一个元素对应输入层的一个映射。再通俗点的解释是,feature map上的一个点对应输入图上的区域。注意这里是输入图,不是原始图。好多博客写的都是原图上的区域,经过一番的资料查找,发现并不是原图。

另外加上一句,目前流行的物体识别方法都是围绕感受野来做的设计,就如上文提到的SSD和Faster RCNN。理解好感受野的本质我觉的有两个好处。一,理解卷积的本质;二,更好的理解CNN的整个架构。

看看感受野的计算和可视化是怎么回事?

如上图所示,原文上是这样讲的,我们采用卷积核C的核大小(kernel size)k=3*3,填充大小(padding size)p=1*1,步长(stride)s=2*2。(图中上面一行)对5*5的输入特征图进行卷积生成3*3的绿色特征图。(图中下面一行)对上面绿色的特征图采用相同的卷积操作生成2*2的橙色特征图。(图中左边一列)按列可视化CNN特征图,如果只看特征图,我们无法得知特征的位置(即感受野的中心位置)和区域大小(即感受野的大小),而且无法深入了解CNN中的感受野信息。(图中右边一列)CNN特征图的大小固定,其特征位置即感受野的中心位置。

说的有点晦涩难懂,应该是学术的讲法,在我这里理解就是,左图是常规的卷积过程。右图呐?卷积后的图像和原图一样大,这个操作起来并不难,就是各个特征(可以理解为图像中的像素点)的位置在卷积后保持不变,空的部分用空白来填充。这样做有什么好处,在我们后面会说到。只要注意到,左图和右图在卷积后,其特征的数目(绿色和黄色点的数目)是一样的。

感受野的计算:

看上图,信息量很大,内容很多,有CNN的卷积过程,有感受野的计算公式和过程。弄懂了上图就知道感受野到底是个怎么回事了。

还记得感受野的定义吗?具体看layer1的feature map左上角带有红点的特征(可以理解为一个像素),它对应输入layer0的区域大小就是我们要计算的感受野。

很显然,经过3*3卷积核卷积后,它对应layer0层上的灰色区域(可别忘了还有padding哦!)

再看layer1到layer2的过程,卷积过程的第一步是先加padding,p2=1,这里的1是特征所占的区域,换句话说就是一个特征所占的感受野。所以Conv2过程这张图才会在外面加上了三个格。s2=2也是同样的道理,步长也是跨过两个特征。k2=3也是如此,包含3*3个特征。经过卷积后就来到了layer2了,左上角特征的感受野大小也很明显了,就是灰色部分。它这一个点可要完成接下来组织交代的历史任务。

这整个过程下来,是不是明白点意思了。感受野的计算有卷积逆过程的意思,这里我不能给出直接的定义,因为还没有权威这么说。之前讲了,明白了感受野的计算能更好理解卷积过程对吧。从上图我们再琢磨一下。特征图的大小逐渐变小,一个特征表示的信息量越来越大,这不就是有点压缩的意思嘛。将原图感兴趣的信息提取出来,不关注的统统抛掉。提的过程就是CNN的前向传播,抛的过程就是CNN的反馈学习。这里畅想一下,如果卷积核的大小能够变化那又是一番景象啊。

再看感受野的计算公式数学定义:

除了每个维度上特征图的个数,还需要计算每一层的感受野大小,因此我们需要了解每一层的额外信息,包括:当前感受野的尺寸r,相邻特征之间的距离(或者jump)j,左上角(起始)特征的中心坐标start,其中特征的中心坐标定义为其感受野的中心坐标(如上述固定大小CNN特征图所述)。假设卷积核大小k,填充大小p,步长大小s,则其输出层的相关属性计算如下:

  • 公式一基于输入特征个数和卷积相关属性计算输出特征的个数
  • 公式二计算输出特征图的jump,等于输入图的jump与输入特征个数(执行卷积操作时jump的个数,stride的大小)的乘积
  • 公式三计算输出特征图的receptive field size,等于k个输入特征覆盖区域加上边界上输入特征的感受野覆盖的附加区域
  • 公式四计算第一个输出特征的感受野的中心位置,等于第一个输入特征的中心位置,加上第一个输入特征位置到第一个卷积核中心位置的距离,再减去填充区域大小。注意:这里都需要乘上输入特征图的jump,从而获取实际距离或间隔。

对CNN感受野一些理解的更多相关文章

  1. 转载 - CNN感受野(receptive-fields)RF

    本文翻译自A guide to receptive field arithmetic for Convolutional Neural Networks(可能需要FQ才能访问),方便自己学习和参考.若 ...

  2. CNN中感受野的理解

    本文摘自看完还不懂卷积神经网络“感受野”?那你来找我 作者:程序_小白链接:https://www.jianshu.com/p/9305d31962d8 一.到底什么是“感受野”(接受野Recepti ...

  3. CNN感受野计算

    无痛理解CNN中的感受野receptive field CNN中感受野的计算 从直观上讲,感受野就是视觉感受区域的大小.在卷积神经网络中,感受野的定义是决定某一层输出结果中一个元素所对应的输入层的区域 ...

  4. CNN核心概念理解

    卷积神经网络 (Convolutional Neural Networks,简称CNN),是一种经典的神经网络算法.由于在图像识别领域取得的良好效果,随着人工智能的火热,它也受到越来越多的关注.CNN ...

  5. 卷积神经网络(CNN)的理解与总结

    卷积神经网络模型的历史演化: 0. 核心思想 two main ideas: use only local features 在不同位置上使用同样的特征: 池化层的涵义在于,更高的层次能捕捉图像中更大 ...

  6. 理解CNN中的感受野(receptive-field)

    1. 阅读论文:Understanding the Effective Receptive Field in Deep Convolutional Neural Networks 理解感受野 定义:r ...

  7. 理解NLP中的卷积神经网络(CNN)

    此篇文章是Denny Britz关于CNN在NLP中应用的理解,他本人也曾在Google Brain项目中参与多项关于NLP的项目. · 翻译不周到的地方请大家见谅. 阅读完本文大概需要7分钟左右的时 ...

  8. 空洞卷积(dilated Convolution) 与感受野(Receptive Field)

    一.空洞卷积 空洞卷积是是为了解决基于FCN思想的语义分割中,输出图像的size要求和输入图像的size一致而需要upsample,但由于FCN中使用pooling操作来增大感受野同时降低分辨率,导致 ...

  9. SCNN车道线检测--(SCNN)Spatial As Deep: Spatial CNN for Traffic Scene Understanding(论文解读)

    Spatial As Deep: Spatial CNN for Traffic Scene Understanding 收录:AAAI2018 (AAAI Conference on Artific ...

随机推荐

  1. 解决vs code 内置终端,字体间隔过大问题。(linux centos7 ubuntu成功)

    去文件-首选项-设置里修改. "terminal.integrated.fontFamily": ""注意此处默认为空白,所以显示的就比较奇怪. 此处我改为&q ...

  2. 概率+后效性处理——cf930B好题

    之前题目看错了.. 先用双倍字符串处理后效性 首先要确定一个结论:如果原串s中相距为d的ch1和ch2只有一对,那么如果第一个翻开ch1,第二个翻开ch2,就能确定k 现在要求的是当我们第一次翻开的是 ...

  3. 多线程编程9认识等待函数WaitForSingleObject

    一下子跳到等待函数 WaitForSingleObject, 是因为下面的 Mutex.Semaphore.Event.WaitableTimer 等同步手段都要使用这个函数; 不过等待函数可不止 W ...

  4. 训练计划Day1

    Day1:二分答案,三分查找,快速幂,欧拉筛素数 | 题目:火星人,Bridge,GCD,Prime Path 二分答案 [JSOI 2008] 火星人 对于第一个操作用\(hash + 二分\)来求 ...

  5. 关于延迟加载(lazy)和强制加载(Hibernate.initialize(Object proxy) )

    PO 即Persistence Object VO 即Value Object PO 和VO 是Hibernate 中两个比较关键的概念. 首先,何谓VO,很简单,VO 就是一个简单的值对象. 如:  ...

  6. ThinkPHP5的简单使用

    目录的介绍 thinkphp5 的控制器的创建 第一步:新建一个控制器 第二步:admin.php控制器内容如下 第三步:如何显示模型页面 第四步:显示模板页面 第五步:定义模板变量 第六步:运行结果 ...

  7. PAT甲级——A1132 Cut Integer

    Cutting an integer means to cut a K digits lone integer Z into two integers of (K/2) digits long int ...

  8. 高性能代理缓存服务器—Squid

    Squid是什么? Squid是一款比较知名的开源代理缓存软件,它不仅可以跑在linux上还可以跑在windows以及Unix上,它的技术已经非常成熟.目前使用Squid的用户也是十分广泛的. Squ ...

  9. Wireless Password HDU - 2825

    题意: 给出m个模式串,要求构造一长度为n的文本串,至少包括k种模式串,求有多少种可能的模式串. k<=10  然后可以想到状压 一个文本串,k种模式串,很容易想到AC自动机. 把所有的模式串放 ...

  10. jQuery链式编程时修复断开的链

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...