对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. 类文件路径一classpath

    classpath作用 指定配置/资源文件的路径 web文件夹层次 src(编译前) main java resources webapp test java resources pom.xml we ...

  2. thinkphp 静态路由

    静态路由其实属于规则路由的静态简化版(又称为URL映射),路由定义中不包含动态参数,静态路由不需要遍历路由规则而是直接定位,因此效率较高,但作用也有限. 如果我们定义了下面的静态路由 'URL_ROU ...

  3. oracle将查询结果横转纵

    SELECT '残疾人|民政|综合治理|计划生育|物业监管|安全生产|环境类|司法信访|党建|社会组织|文化体育|社保' D , '53|52|51|50|49|48|47|5|4|3|2|1' g ...

  4. 14 win7 sp1下安装vs2015

    0 引言 在win7下安装vs2015的时候遇到了很多问题,看了很多帖子,尝试了很多次,终于成功了.网上也有大量关于win7 sp1下安装vs2015的帖子,我在安装的时候也参考了很多相关经验,这次写 ...

  5. ZJOI 2006 物流运输 bzoj1003

    题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...

  6. (转)H264--1--编码原理以及I帧B帧P帧 .

    转:http://blog.csdn.net/yangzhongxuan/article/details/8003504 ---------------------- 前言 ------------- ...

  7. linux安装PyCharm,PyCharm常用快捷键及调试模式,pycharm里面对文件夹或者文件进行重命名

    PyCharm常用快捷键及调试模式 2017年10月18日 23:13:43 菜鸟之神 阅读数:5835    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  8. System.Web.Mvc.RouteAttribute.cs

    ylbtech-System.Web.Mvc.RouteAttribute.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Pub ...

  9. 面试系列15 如何保证Redis的高并发和高可用

    就是如果你用redis缓存技术的话,肯定要考虑如何用redis来加多台机器,保证redis是高并发的,还有就是如何让Redis保证自己不是挂掉以后就直接死掉了,redis高可用 我这里会选用我之前讲解 ...

  10. java ajax长连接请求服务器数据

    Servlet 3.0笔记之异步请求Comet推送长轮询(long polling)篇 Comet另一种形式为长轮询(long polling),客户端会与服务器建立一个持久的连接,直到服务器端有数据 ...