感受野

  • 一、感受野
    • 1.全连接网络与卷积神经网络
    • 2.进一步体验“感受野”
    • 3.计算感受野通用方式
    • 4.综合实例
    • 5.总结

一、感受野

感受野:卷积神经网络中每个网络层输出的特征图中的单个元素映射回原始输入特征中的区域大小,网络层越深,其输出特征的元素对应感受野越大。可以这么去描述感受野:网络层输出特征图上的一个元素点,由原始输入中多大区域映射而来,其感受野就是多大。

1.全连接网络与卷积神经网络

对于全连接网络而言,其输出中的每一个元素都受到输入特征中所有元素的影响,而对于卷积神经网络而言,利用卷积核与输入特征之间的互相关操作提取特征,输出特征中的每一个元素由卷积核在输入特征上的一次移动得到,而卷积核的每次移动均是与输入中与之对应的局部区域进行运算,既输出中的每个元素只由输入中的局部区域影响,此处所说的局部区域的大小也就是网络层输出特征中元素的感受野。
此处对全连接网络与卷积神经网络进行实例对比(网络均只有一层):
1)全连接网络:可看到共输出5个元素,每个元素都受到输入中的所有元素影响。

2)卷积神经网络:可看到输出中的每个元素都由(3,3)的卷积核对应输入中(3,3)的局部区域“加权求和”得到,所以该输出的特征元素对应到输入中的区域大小就是3×3,既其感受野大小为3×3。

2.进一步体验“感受野”

下面的示例中所有卷积核大小均为:(3,3),图中的红线表示卷积层,如步长、填充等参数都保持默认:
1)原始输入(3,3),共经历1个卷积层:此时,唯一的卷积层输出结果为(1,1),输出特征仅含有一个元素,而该元素对应输入中的3×3区域,故其感受野为3×3。


2)原始输入(5,5),共经历2个卷积层:此时,第一个卷积层输出结果为(3,3),而第二个卷积层输出为(1,1)。第二层的输出仅有一个元素,该元素是由第一层输出结果中(3,3)特征得到;而对于第一层输出结果而言,其中的每一个元素的感受野是3×3,所有元素是通过原始输入中的(5,5)区域映射而来,所以对于第二层输出结果来说其元素的感受野为(5,5)。

3)原始输入O(7,7),共经历3个卷积层:此时三个卷积层的输出依次为A(5,5),B(3,3)和C(1,1)。对于C而言,仅有一个元素,是由B中3×3区域得到;对于B而言,每个元素由A中(3,3)区域得到,所有元素由A中(5,5)区域得到;对于A而言,每个元素由原始输入O中(3,3)区域得到,所有元素由O中(7,7)区域得到,A中一个(3,3)区域的特征由O中(5,5)特征映射而来,所以对于三个卷积层的输出结果A、B、C来说,感受野依次为(3,3)、(5,5)、(7,7)。

由上面的例子也可以看到通常情况下,网络越深,输出的结果所拥有的感受野越大。
所以对于当前层的输出结果,要看其感受野多大可通过以下方式:从当前层的输出结果反向映射,直到映射回原始输入特征,此时即可得到对应的感受野大小。比如上图中的第三层结果C,C由中的元素由B中的3×3区域得到,B中的3×3区域需要A中的5×5区域得到,而A中的5×5区域由原始输入中的7×7区域得到,所以对于C中元素而言,其感受野大小为7×7。
看到这里大家对感受野的计算如果还没透彻,请不要着急,看一下下一节的感受野计算方式,再回过头来看我画的图,是不是一目了然。

3.计算感受野通用方式

我们知道在实际搭建卷积神经网络时可能用到大量的卷积层、池化层进行堆叠构成完整的网络结构,而这两种网络层均会改变特征图的大小,实现特征之间的映射,在这两种网络层中均涉及到卷积核(或池化核)kernel_size、步长stride等参数,这些参数共同决定了输出结果对应的感受野大小。
在计算感受野的过程中需要注意以下几点:
(1)计算感受野时不考虑padding和dilation的影响;
(2)当前网络层对于当前层输入来说,感受野大小等于当前卷积核大小。如上图中最后一层的输出C相对于B来说,感受野为(3,3);
(3)采用“从后往前”的计算方式计算感受野:从当前层开始反向映射直到原始输入,先计算当前层输出在前一网络层输出中的感受野大小,再依次传递到原始输入即可得到当前层所拥有的感受野大小;
(4)感受野计算通用公式:此处RF、S、K分别表示感受野、步长、卷积核大小,计算第i层输出结果的感受野时,利用上面公式从RF(i)一直计算到RF(1)时,RF(1)即为第i层对应的感受野大小。
有没有看到计算感受野的这个公式特别熟悉,没错这和卷积层(其他参数保持默认)计算输出结果大小的公式一毛一样:

很好理解,卷积层输出和输入结果的指定大小区域之间遵循上面公式。以此可得到相邻网络层之间感受野大小的计算关系。

这里我再将上一节中最后的一个示例推导一波,以此验证感受野计算公式:
输入(7,7);输出(1,1)

网络层 输入 卷积核 步长 输出 感受野
Conv1 (7,7) (3,3) 1 (5,5) (3,3)
Conv2 (5,5) (3,3) 1 (3,3) (5,5)
Conv3 (3,3) (3,3) 1 (1,1) (7,7)

网络共包含三个卷积层,从前往后以此标记为1,2,3层,下面从后往前计算每层感受野,当前层感受野大小受到当前层卷积核大小、步长以及下一层的感受野共同影响:
计算Conv3的感受野大小:

  • Conv3在Conv2的(3,3)输出中感受野大小等于Conv3卷积核,既RF3=3×3;
  • 要想Conv2得到RF3=3×3大小的输出,输入需提供RF2=S2(RF3-1)+K2=1×(3-1)+3=5,既RF2=5×5;
  • 同理,要想Conv1得到RF2=5×5大小的输出,输入需提供RF1=S1(RF2-1)+K1=1×(5-1)+3=7,既RF1=7×7;

因此对于Conv3的输出来说,感受野大小为(7,7).
按照此方式,大家可以自行计算Conv2输出结果的感受野为(5,5)。

4.综合实例

举一个综合实例,依据“从后往前”原则计算最后一个网络层在原始输入上的感受野大小:

索引 网络层类型 卷积核尺寸 步长
1 Conv1 3×3 1
2 Conv2 2×2 2
3 Pool1 3×3 1
4 Conv3 3×3 1
5 Pool2 2×2 2
6 Conv4 2×2 2

计算Conv4层输出结果的感受野:

  • RF6=2 ;
  • RF5=S5(RF6-1)+k5=2(2-1)+2=4 ;
  • RF4=S4(RF5-1)+k4=1(4-1)+3=6;
  • RF3=S3(RF4-1)+k3=1(6-1)+3=8 ;
  • RF2=S2(RF3-1)+k2=2(8-1)+2=16;
  • RF1=S1(RF2-1)+k1=1(16-1)+3=18;

因此对于Conv4层输出结果中的元素,其在原始输入上的感受野大小为18×18。

5.总结

1)输入结果感受野一致的前提下,使用连续的小卷积核替换单个大卷积核,第一可以有效降低网络训练的参数量,第二可以增加网络深度,第三可以引入更丰富的非线性变换,使得网络可以拟合更多的可能性,更好地缓解过拟合;
输入(C,7,7),对于最终的输出其感受野为(7,7),假设每个卷积层的输出通道数均为C,我们看一下各自的参数量:
(1)使用连续的3个(3,3)卷积,其参数量为:(3×3×C)×C×3=27×C×C

(2)使用一个(7,7)卷积,其参数量为:(7×7×C)×C=49×C×C

由此看到感受野一致的前提下,使用连续的小卷积核替换单个大卷积核,可以有效降低网络训练的参数量。
2)网络浅层提取的特征针对输入特征的局部区域进行,感受野较小;而网络深层对应的感受野更大,可以体现原始输入更多的全局信息;
3)在分类任务中,合理设计网络深度,可得更合理的感受野,保证网络性能。如此操作使最后的输出结果中,元素对应的感受野可以大于等于原始输入特征的大小,这样可确保分类所用特征可以包含原始输入所有的信息。比如在一个分类网络中,原始输入大小为(64,64),而输出结果中元素对应的感受野大小超过了64×64,那么可保证最后分类判断所用特征可以体现原始输入中所有的信息。

细说卷积神经网络(CNN)中所谓的“感受野”(Receptive Field)相关推荐

  1. python 图像卷积_[卷积神经网络(CNN)中的卷积核到底是如何提取图像特征的(python实现图像卷积运算)]...

    1.前言 我们知道,卷积核(也叫滤波器矩阵)在卷积神经网络中具有非常重要的作用.说白了,CNN主要作用在于提取图像的各种特征图(feature maps). CNN主要是通过卷积运算来完成特征提取的. ...

  2. 详细解释卷积神经网络CNN中卷积层以及BN层的参数

    问题的提出 在做关于python的卷积神经网络的项目中,发现了一个卷积层加一个BN层竟然一共有6个参数.百思不得其解. if batch_norm:layers += [nn.Conv2d(in_ch ...

  3. 卷积神经网络CNN中1×1卷积作用理解

    0.引言 研究 GoogLeNet 和 VGG 神经网络结构的时候,都看见了它们在某些层有采取 1x1 作为卷积核,在最开始看到的AlexNet中都是出现了卷积核是 3x3和5×5的.那么,1x1 的 ...

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

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

  5. keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)

    版权声明:小博主水平有限,希望大家多多指导. 目录: [使用传统DNN] BG大龍:[DL项目实战02]图像分类--Keras框架+使用传统神经网络DNN​zhuanlan.zhihu.com [使用 ...

  6. [人工智能-深度学习-30]:卷积神经网络CNN - 感受野,特征的提取与范围的扩散

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

  7. 深度学习 --- 卷积神经网络CNN(LeNet-5网络详解)

    卷积神经网络(Convolutional Neural Network,CNN)是一种前馈型的神经网络,其在大型图像处理方面有出色的表现,目前已经被大范围使用到图像分类.定位等领域中.相比于其他神经网 ...

  8. 卷积神经网络(CNN,ConvNet)

    卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...

  9. 卷积神经网络(CNN)简介

    卷积神经网络(CNN)简介 多层的线性网络和单层的线性网络没有区别,而且线性模型的能够解决的问题也是有限的 1. 更复杂抽象的数据 一个单隐含层有更多的神经元,就能捕捉更多的特征.而且有更多隐层,意味 ...

  10. 卷积神经网络(CNN)介绍与实践

    七月 上海 | 高性能计算之GPU CUDA培训 7月27-29日三天密集式学习  快速带你入门阅读全文> 正文共4499个字,26张图,预计阅读时间18分钟. CNN的前世今世 1.1.大脑 ...

最新文章

  1. XenServer和VMware vSphere技术比较
  2. ACL 2019开源论文 | 基于图匹配神经网络的跨语言知识图对齐
  3. flex 有关数据类型强制转
  4. 黄金周添堵 U-Mail邮件系统拒垃圾保畅通管理有序
  5. MySQL5.7报错[ERROR] Unix socket lock file is empty /tmp/mysql.sock.lock的解决方法
  6. Ubuntu16.04系统 GPU1070Ti下搭建Caffe++Nvidia显卡驱动+Cuda9.0+Cudnn7.0.5
  7. OnlineDict:Chrome取词翻译扩展
  8. 网站icp备案服务器ip,域名已有icp备案更换服务器
  9. Android Studio 个性化主题配置。
  10. linux系统检测硬盘物理损坏,linux系统下检测硬盘上的坏道和坏块
  11. 2021年中国皮革行业现状分析:销售收入同比增长8.4%[图]
  12. 基于Python Django框架后端的微信小程序开发
  13. NKOJ 2770 难度系数(最小生成树)
  14. 0xc000007b 问题总结
  15. Pytest(17)运行未提交的git(pytest-picked)
  16. 新浪微博第三方登录,显示重定向错误问题
  17. rviz导航——2D Pose estimate
  18. 软件测试人员能用python做哪些事情?
  19. 手动打造优盘杀毒伴侣
  20. 工作时应遵循的几个原则

热门文章

  1. 小象学院 nlp 自然语言处理项目实战
  2. PyTorch 深度学习:60分钟快速入门
  3. 戴尔服务器加装固态硬盘吗,戴尔如何加装固态硬盘_戴尔电脑增加固态硬盘教程...
  4. python搬家具_python3 摆放家具练习
  5. jq插件之bxSlider
  6. 弱密码验证不能连续字符(如123、abc)连续3位或3位以上、不能相同字符(如111、aaa)连续3位或3位以上
  7. 牛顿广义二项式定理-母函数
  8. 《网蜂A8实战演练》——11.Linux 电容式触摸屏驱动
  9. eNews 第二十七期/2007.08
  10. 【Linux 内核】Linux 内核源码根目录下的文件 ( .clang-format | COPYING | CREDITS | Kbuild | Kconfig | MAINTAINERS )