对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. ES5给object扩展的一些静态方法

    1. Object.create(prototype[, descriptors]) : 创建一个新的对象 1). 以指定对象为原型创建新的对象 2). 指定新的属性, 并对属性进行描述 value ...

  2. leetcode-210-课程表②

    题目描述: 第一次提交: class Solution: def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -& ...

  3. SpringBoot_04_SpringBoot对ssm的整合

    1.在SpringBoot框架下对ssm进行整合 2.搭建一个web的SpringBoot框架 2.1添加pom.xml坐标(需要加上SpringBoot对jsp的支持,和对资源文件位置的说明) &l ...

  4. 模块化开发(requireJS)

    模块化 在前端使用模块化开发,可以将代码根据功能实施模块的划分,每个模块功能(职责)单一,在需要更改对应的功能的时候,只需要对指定的模块进行修改,其他模块不受任何影响. 为什么要进行前端模块化? 达到 ...

  5. C++函数调用原理理解

    空程序: int main() { 00411360  push        ebp       ;压入ebp 00411361  mov         ebp,esp     ;ebp = es ...

  6. XJOI夏令营501-511NOIP训练14——好朋友

    传送门:QAQQAQ 题意:noip2011就要来了,W校的同学们不仅看重这次比赛,更看重noip2011和谁住在同一个房间.同学之间的关系好坏可以用一个亲密值表示,亲密值越大,两个同学关系越好.小A ...

  7. reboot与shutdown -r now 区别与联系(又收集了init和halt的小知识)

    在linux命令中reboot是重新启动,shutdown -r now是立即停止然后重新启动,都说他们两个是一样的,其实是有一定的区别的. shutdown命令可以安全地关闭或重启Linux系统,它 ...

  8. SpringBoot--Thymeleaf入门使用

    一.概述 今天学习到了SpringBoot中的WEB开发,SpringBoot提供了spring-boot-stater-web为web开发给予支持,它里面内嵌了以下依赖: <dependenc ...

  9. Java lambda尝鲜

    最近Java 11都出来了,java 8 的很多新特性还没用过,比如接口可以有方法体啦,default默认方法. 当然最大的特性就是支持函数式编程了.Java 8 提供了lambda表达式和方法引用来 ...

  10. Git log和reflog

    1.log  log命令可以显示所有提交过的版本信息.显示信息如下: Administrator@USER-20171026MG MINGW64 ~/Desktop/lyf (master) $ gi ...