感受野:表示网络内部的某个神经单元对应原图像的大小 感受野大小的作用: 神经元的值一般是由感受野的那些数据通过卷积,maxpooling等操作得到的,所以: 感受野的例子: 原始图像为7*7,在conv1层,filter为3*3,stride为2,一个7 7的图像经过conv1处理后得到了一个3*3的feature map,然后利用一个filter=2*2,stride=1的conv2层去处理feature map,得到了一个2 2的feature map,运算的过程可以稍微推导可得。卷积的尺寸公式如下式:下面我们来看conv1中蓝色圈中3对应的感受野,显然这个3是又原始图像的蓝色框中3*3的矩阵和一个3*3的filter运算得到的,那我们可以知道其对应的原始图像的面积即为3*3的一个矩阵,那么其感受野为3*3 再来看conv2中黑色的框中5对应的感受野,这个5是由conv1中黄色框中一个2*2的矩阵和一个2*2的filter运算得到的,其中4个3分别是原始图像中蓝色,绿色,红色,紫色4个3*3的矩阵运算得到的,那么可以看到为了得到conv1中黄色的这个框,实际上在原始图像对其5*5的矩阵进行了处理,而最后在conv2上只表现为一个神经单元5,所以5对应的感受野为5*5 实际上,我们通过计算conv2在conv1上的感受野,再计算其感受野再原始图像上的感受野,即可得到conv2在原始图像的感受野。其中自然有规律。 现在我们简单的用这个例子推到下: 代表在那一层的filter的尺寸大小, 代表步长, 代表感受野大小, 通过 我们可以得到conv2在conv1上的感受野为2,那么现在就相当于求在conv1上一个2*2的矩阵对应的原始图像的面积,实际上,每个conv1对应一个3*3面积,那么一个conv1上2*2矩阵对应的感受野是 其实自己推导一遍的话会有体会,现在直接给出公式:参考: 深度神经网络中的感受野(Receptive Field)
感受野是卷积神经网络里面最重要的概念之一,为了更好地理解卷积神经网络结构,甚至自己设计卷积神经网络,对于感受野的理解必不可少。 一、定义 感受野被定义为卷积神经网络特征所能看到输入图像的区域,换句话说特征输出受感受野区域内的像素点的影响。 比如下图(该图为了方便,将二维简化为一维),这个三层的神经卷积神经网络,每一层卷积核的??????_???? = 3 ,?????? = 1,那么最上层特征所对应的感受野就为如图所示的7x7。 二、计算方式 第1层感受野 第二层特征,感受野为5 第2层感受野 第三层特征,感受野为7 第3层感受野 如果有dilated conv的话,计算公式为 三、更上一层楼 上文所述的是理论感受野,而特征的有效感受野(实际起作用的感受野)实际上是远小于理论感受野的,如下图所示。具体数学分析比较复杂,不再赘述,感兴趣的话可以参考论文。 有效感受野示例 两层3x3 conv计算流程图 四、应用 分类 Xudong Cao写过一篇叫《A practical theory for designing very deep convolutional neural networks》的technical report,里面讲设计基于深度卷积神经网络的图像分类器时,为了保证得到不错的效果,需要满足两个条件: Firstly, for each convolutional layer, its capacity of learning more complex patterns should be guaranteed; Secondly, the receptive field of the top most layer should be no larger than the image region . 其中第二个条件就是对卷积神经网络最高层网络特征感受野大小的限制。 目标检测 现在流行的目标检测网络大部分都是基于anchor的,比如SSD系列,v2以后的yolo,还有faster rcnn系列。 基于anchor的目标检测网络会预设一组大小不同的anchor,比如32x32、64x64、128x128、256x256,这么多anchor,我们应该放置在哪几层比较合适呢?这个时候感受野的大小是一个重要的考虑因素。 放置anchor层的特征感受野应该跟anchor大小相匹配,感受野比anchor大太多不好,小太多也不好。如果感受野比anchor小很多,就好比只给你一只脚,让你说出这是什么鸟一样。如果感受野比anchor大很多,则好比给你一张世界地图,让你指出故宫在哪儿一样。 《S3FD: Single Shot Scale-invariant Face Detector》这篇人脸检测器论文就是依据感受野来设计anchor的大小的一个例子,文中的原话是 we design anchor scales based on the effective receptive field 《FaceBoxes: A CPU Real-time Face Detector with High Accuracy》这篇论文在设计多尺度anchor的时候,依据同样是感受野,文章的一个贡献为 We introduce the Multiple Scale Convolutional Layers (MSCL) to handle various scales of face via enriching receptive fields and discretizing anchors over layers 引用: convolutional nerual networks Understanding the Effective Receptive Field in Deep Convolutional Neural Networks 推荐阅读: 关注SIGAICN公众号,回复文章获取码,即可获得全文链接 机器学习-波澜壮阔40年 【获取码】SIGAI0413. 学好机器学习需要哪些数学知识?【获取码】SIGAI0417. 人脸识别算法演化史 【获取码】SIGAI0420. 基于深度学习的目标检测算法综述 【获取码】SIGAI0424. 卷积神经网络为什么能够称霸计算机视觉领域?【获取码】SIGAI0426. 用一张图理解SVM的脉络 【获取码】SIGAI0428. 人脸检测算法综述 【获取码】SIGAI0503. 理解神经网络的激活函数 【获取码】SIGAI0505. 深度卷积神经网络演化历史及结构改进脉络-40页长文全面解读 【获取码】SIGAI0508. 理解梯度下降法 【获取码】SIGAI0511. 循环神经网络综述—语音识别与自然语言处理的利器 【获取码】SIGAI0515. 理解凸优化 【获取码】SIGAI0518. 【实验】理解SVM的核函数和参数 【获取码】SIGAI0522. 【SIGAI综述】行人检测算法 【获取码】SIGAI0525. 机器学习在自动驾驶中的应用—以百度阿波罗平台为例(上)【获取码】SIGAI0529. 理解牛顿法 SIGAI 2018.5.31 【群话题精华】5月集锦—机器学习和深度学习中一些值得思考的问题 【获取码】SIGAI0601. 大话Adaboost算法 【获取码】SIGAI0602. FlowNet到FlowNet2.0:基于卷积神经网络的光流预测算法 【获取码】SIGAI0604. 理解主成分分析(PCA)【获取码】SIGAI0606. 人体骨骼关键点检测综述 【获取码】SIGAI0608. 理解决策树 【获取码】SIGAI0611. 用一句话总结常用的机器学习算法 【获取码】SIGAI0613. 目标检测算法之YOLO 【获取码】SIGAI0615. 理解过拟合 【获取码】SIGAI0618. 理解计算:从√2到AlphaGo ——第1季 从√2谈起 【获取码】SIGAI0620. 场景文本检测——CTPN算法介绍 【获取码】SIGAI0622. 卷积神经网络的压缩和加速 【获取码】SIGAI0625. k近邻算法 【获取码】SIGAI0627. 自然场景文本检测识别技术综述 【获取码】SIGAI0629. 理解计算:从√2到AlphaGo ——第2季 神经计算的历史背景 【获取码】SIGAI0702. 机器学习算法地图 【获取码】SIGAI0704. 反向传播算法推导-全连接神经网络 【获取码】SIGAI0706. 生成式对抗网络模型综述 【获取码】SIGAI0709. 怎样成为一名优秀的算法工程师 【获取码】SIGAI0711. 理解计算: 从√2到AlphaGo ——第3季 神经网络的数学模型 【获取码】SIGAI0702. 人脸检测算法之S3FD 【获取码】SIGAI6 基于深度负相关学习的人群计数方法 【获取码】SIGAI0718 流形学习概述 【获取码】SIGAI0723 链接: 来源:
感受野的定义:某一层输出结果中一个元素所对应的最开始的输入层的区域大小。 感受野的用途:其值可以用来大致判断每一层的抽象层次,值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局;值越小则表示其所包含的特征越趋向局部和细节。 感受野的计算:(逆向计算) rfsize = f(out, stride, ksize) = (out - 1) * stride + ksize(由卷积中计算输出图片的大小的公式变形而来,一般忽略了padding的影响),其中out是指上一层感受野的大小,ksize是指当前层的卷积核大小,stride指当前层的步长。 注意:计算的时候我们一般假定我们要求的那一层的感受野大小 rfsize=1 ,然后计算输入层(计算中的最后一层)的感受野大小,假设求得为N,然后反转----最后一层(计算中的第一层)感受野大小即为N。要算那一层,就设它感受野为1,然后计算得到的输入层感受野大小即为所求,该方法不可能一劳永逸,即该方法只对假设的那一层有效,其余层计算结果无效(即结果不对)。 示例如下: Raw Image 即为输入层。 公式 : rfsize = f(out, stride, ksize) = (out - 1) * stride + ksize 要计算conv2:设其为1,则conv1 = (1-1)*1 + 2 = 2;Raw = (2-1)*2 + 3 = 5 则conv2为5 (深层卷积层的感受野大小和它之前所有层的滤波器大小和步长有关系) 要计算conv1:设其为1,则Raw = (1-1)*2 + 3 = 3;则conv1 = 3.(第一层卷积层的输出特征图像素的感受野的大小等于滤波器的大小)
核心导读: 1. 神经网络感受野是什么? 2. 感受野的分布是啥样子的? 3. 感受野是不是越大越好? 4. 多路感受野融合提高精度? 5. 如何计算神经网络感受野? 1. 神经网络感受野是什么? 在卷积神经网络中,感受野是卷积神经网络每一层输出的特征图上的像素点在原始图像上映射的区域大小。神经元感受野之外的图像内容并不会对该神经元的值产生影响,所以必须确保这个神经元的感受野覆盖所有相关的图像区域。在应用工程中,通过调节网络的深度,卷积的kernel size等参数控制网络的感受野大小 。感受野的概念尤为重要,对于理解和诊断CNN网络有着极大的帮助。本文对感受野相关的问题进行了总结,下面一一阐述: 2.感受野的分布是啥样子的? 《Understanding the Effective Receptive Field in Deep Convolutional Neural Networks》论文中引出了theoretical receptive field (理论感受野)和Effective Receptive Fields(实际感受野)这2个概念。通常实际感受野小于理论感受野,随着具体的任务变化。作者进一步在数学上证明了 Effective Receptive Fields 在 1D 是一个高斯分布,随后推出 2D/大于2D的情况都是近似高斯分布,如下图所示。 3.感受野是不是越大越好? 我们需要关注网络的感受野是否足够,例如在需要检测或者识别图片中大目标的时候。但这并不意味着感受野越大越好,在某些场景中过大的感受野甚至会降低模型的性能,例如《The Receptive Field as a Regularizer in Deep Convolutional Neural Networks for Acoustic Scene Classification》论文通过1*1 Conv替换3*3Conv缩小ResNet和DenseNet等网络的感受野在ASC场景获取了比原始模型更高的精度;《Gated Recurrent Convolution Neural Network for OCR 》论文提出了GRCL 结构来限制无效感受野,提高了STR的识别精度,下图展示了改进后特征响应图,可以看出RCNN能强化文字上的响应,减弱无效背景的响应。 4.多路感受野融合提高精度? Inception网络提出多路卷积融合的思路,实际是在同一个尺度上多种感受野信息的融合,主要是为了解决图像大小分布差异较大的问题。《MixNet: Mixed Depthwise Convolutional Kernels》Google Brain最近提出Mixed Depthwise Convolution,类似Inception的单元结构,以此来提高网络表达能力。Google Brain在MobilenetV2的基础上用MDConv替换3*3 Depthwise Conv进行了多组实验,在大多数情况下都取得了更好的效果,接着在Imagenet上用Auto ML搜索出MixNet-L,取得了78.9%的top-1分类精度,同时FLOPs小于600M,超过Resnet153。 5.感受野如何计算? 感受野的计算方式有两种,下面给出其中一个计算公式和计算示例 6.小结 感受野作为神经网络隐藏的重要特性还有很多需要发掘的地方,在实际的工程项目中我们需要考虑这一块的影响,细节往往决定成败,与其沉迷在研究高大上的算法架构,真不如沉下心把一些基础性的研究工作做透彻。
感受野(receptive field)是CNN中很重要的一个概念,指的是某个输出的feature map上某个点对应的输入图像的区域 关于感受野的计算方式用一个例子说明 对应pool2的区域是8x8 对应conv2的区域是10x10 对应pool1的区域是20x20 对应conv1的区域是22x22 总结一下计算公式:F代表当前层区域边长,S代表步长,K代表卷积核边长 当前层区域映射对应上一层的区域大小边长L计算公式: 如果当前层是pooling得到的:L = FxS 如果当前层是conv得到的:L = (F-1)xS + K
在学习计算感受野(Receptive field)之前,先可视化一下感受野吧。举一个例子,原始图像为5x5,卷积核(Kernel Size)为3x3,padding 为1x1,stride为2x2,依照此卷积规则,连续做两次卷积。熟悉卷积过程的朋友都知道第一次卷积结果是3x3大小的feature map,第二次卷积结果是2x2大小的feature map。整个过程如图所示:
如图所示,第一层卷积结束后,感受野是3x3。在第二层卷积结束了,感受野是7x7
公式一 :这个算法从top往下层层迭代直到追溯回input image,从而计算出RF。
(N-1)_RF = f(N_RF, stride, kernel) = (N_RF - 1) * stride + kernel
其中,RF是感受野。N_RF和RF有点像,N代表 neighbour, 指的是第N层feature map的一个feature在N-1层的RF ,记住N_RF只是一个中间变量,不要和RF混淆。 stride是N-1层的步长,ksize是N-1层卷积核大小。
我来解释一下这个公式。首先,我们的问题是右一的红叉叉映射到左一中,应该是什么size?自然思路就是右一的红叉叉映射到中间是什么size?因为卷积核是3x3,所以右一的红叉叉(1个feature)映射到中间是3x3. 因为一个feature是通过kernel卷积而来, 所以最后一层(第N层)的感受野即为(1-1) * 2 + 3 = 3, 就是kernel size. 那么接下来我们如果算出来中间3x3的红框框映射到左一是什么size,不就解决了我们的问题嘛。聪明的我们就发现了从中间映射到左边的size是kernel_size+stride * (3-1). 抽象一下就是kernel_size +stride * (N_RF-1)嘛。接下来就很简单了,一层又一层的迭代下去直到迭代到第一层,就求出了RF。 Note: kernel_size和stride是左一的,而N_RF是中间的, 代表中间在左一的感受野。
举例:第一层ksize=3,stride=2; 第二层ksize=3,stride=2; 第三层ksize=3,stride=1 则第三层输出的featuremap为3x3(逐点扫描), feature map上任一点的感受野为kernel size大小3x3. (若第三层的stride=2, 则输出的feature map为2x2, 即四个顶点) 第四层在第三层的感受野是3,但stride和kernel size为第三层的参数
总的感受野为23
两个小卷积(3*3)对于5×5网络感知野相同的替代性。
在卷积神经网络中,感受野(Receptive Field)的定义是卷积神经网络每一层输出的特征图(feature map)上每个像素点在原始图像上映射的区域大小,这里的原始图像是指网络的输入图像,是经过预处理(如resize,warp,crop)后的图像。 神经元之所以无法对原始图像的所有信息进行感知,是因为在卷积神经网络中普遍使用卷积层和pooling层,在层与层之间均为局部连接。 神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次. 如图所示 的原始图像,经过kernel_size=3, stride=2的Conv1,kernel_size=2, stride=1的Conv2后,输出特征图大小为 ,很明显,原始图像的每个单元的感受野为1,Conv1的每个单元的感受野为3,而由于Conv2的每个单元都是由 范围的Conv1构成,因此回溯到原始图像,每个单元能够看到 大小的区域范围。那么卷积神经网络的每一层感受野应该如何计算呢?很明显,深层卷积层的感受野大小和它之前所有层的滤波器大小和步长有关系,而涉及到这两个参数的有卷积层和pooling层。我们用 分别表示第n层的kernel_size,stride,receptive_field,通过对n-1层输出特征图的 个感受野为 的特征单元卷积得到的n层输出特征单元最大的感受野为 ,但在对n-1层输入特征图进行卷积时,经常会由于 小于 而存在重叠,因此要减去 个重叠部分( 存在一个重叠部分, 存在两个重叠部分)。那么重叠部分应该怎么计算呢?如图所示,对于Conv2层,其输出特征单元最大感受野为: 但由于Conv1层对输入图片卷积时存在重叠部分,所以Conv2层的特征单元感受野小于6,该重叠部分为: 而对于Conv3层,其输出特征单元最大感受野为: 又因为Conv2层对其输入特征图进行卷积时也存在重叠部分,所以Conv3层的特征单元感受野小于10,此时重叠部分为: 因此对于卷积神经网络,其感受野计算有如下规律:以上公式只计算conv层和pooling层,以AlexNet为例: 其中Padding参数不影响感受野大小。
感受野(Receptive Field),指的是神经网络中神经元“看到的”输入区域,在卷积神经网络中,feature map上某个元素的计算受输入图像上某个区域的影响,这个区域即该元素的感受野。
卷积神经网络中,越深层的神经元看到的输入区域越大,如下图所示,kernel size 均为3×3,stride均为1,绿色标记的是Layer2每个神经元看到的区域,黄色标记的是Layer3 看到的区域,具体地,Layer2每个神经元可看到Layer1上3×3 大小的区域,Layer3 每个神经元看到Layer2 上3×3 大小的区域,该区域可以又看到Layer1上5×5 大小的区域。
为了具体计算感受野,这里借鉴视觉系统中的概念:
receptivefield=center+surround
准确计算感受野,需要回答两个子问,即视野中心在哪和视野范围多大。
对于分割网络而言,CNN是十分核心的部分。 由于以前都是比较零散地去了解一些CNN相关的东西以使用CNN网络, 对于CNN一些基础概念的理解非常浅薄。 最近终于还是下了决心仔细地补一下基础,本文将首先针对CNN, 进行一个知识点的记录。
一个标准的卷积过程如上, 的输入 和一个 的卷积核进行卷积运算, 最后得到的是 的输出。
将上一级输入进过一个卷积层处理完之后得到的输出, 可以看做是上一级输入内容在空间维度上的某一级别的特征表示,所以被称为 特征图 。
特征图大小的计算公式可简单总结为:
, 分别为输出的特征图大小和上一层的特征图/输入数据大小。
感受野 是指 特征图 上的一个点在输入空间上所受影响的区域, 用人话说也就是 特征图上的点对应的原始数据上的空间大小 。
以上图的标准卷积过程为例, 输出的 是有输入的一个 的区域计算而来的, 也就是它能够 感受到这个区域的信息 。
感受野大小的计算公式可简单总结为:
, 分别为输入输出特征图的感受野,原始图像感受野为 。
显而易见,卷积操作让图像缩水了一圈,影响了图像的分辨率。
为了平衡这种影响,直接在图像周围填充一圈,就可以让图像的feature map尺寸维持不变。
如图所示,padding操作影响了输出的大小,加入padding后的feature map size和 receptive field size计算公式如下:
为两侧padding之和。
当输入图像过大的时候,卷积操作是很费时的, 那么是否可以 跳着卷积 ,就像 数据抽稀 一样呢?
答案显然是肯定的,这同样也是卷积的基础操作之一,按照一定步幅(stride)进行跳步(stride)。
如上图所示,对 的图像进行 的padding,得到 的输入; 如果按照传统卷积方式, 的卷积核显而易见会输出 的输出。
此处执行跳步卷积,在 的横向下一个位置为 ,竖向下一个位置为 步幅为 ,当跳步后的位置不足以进行卷积运算时则跳转到下一行。
考虑到stride后,公式更新为:
空洞卷积/带洞卷积/膨胀卷积,dilation convolution有很多翻译。这种形式的卷积核比传统的卷积核多 带 了一些 空洞 ,因而尺寸就 膨胀 了。
相当于一种折中的增大卷积核的方法,卷积核变大了,但是中间很多地方是洞,所以计算量不怎么变。
考虑到dilation后, 使用 替换原公式中的 , 公式更新为:
比较常见的卷积核大小为 、 , 理论上越大的卷积核提取的信息就越 全局 ,学术点说就是 感受野随卷积核大小增大 。
但是理论上两个 卷积核的嵌套就可以替代一个 的卷积核, 但是计算量上,两个 的卷积核为 级别, 而一个 的卷积核为 级别。
显而易见,计算量随卷积核的大小 指数级增长 ,所以明显 使用多个小卷积核的卷积层是更经济的 。
所以在一般问题中,我们都选用 的卷积核。
从原理上说,stride代表对图像特征提取的精度, stride越大则精度越低 。
作用类似于pooling,可以模糊一些特征,从而降低过拟合。
dilation来自于 ,由于之前的CNN通常使用conv + pooling的方式先提取并浓缩特征, 然后再将特征upsampling回原始分辨率。
pooling虽然增大了感受野,却丢失了信息;dilation方式可以扩大感受野,减少信息损失 却又不增加计算量。
不过显然,dilation也存在以下问题:
据说这两篇文章 中着重提了这些问题。
感受野的计算公式如下: l_{k} = l_{k-1}+ \left 其中 l_{k-1} 为第 k-1 层对应的感受野大小, f_k 为第 k 层的卷积核大小,或者是池化层的池化尺寸大小。 更为细致的解释如下: 感受野的计算是逐层进行的,以下表中的网络结构为例。 感受野初始值 l_0 = 1 ,每层的感受野计算过程如下: l_0 = 1 l_1 = 1 + (3-1) = 3 l_2 = 3 + (2-1)*1 = 4 l_3 = 4 + (3-1)*1*2 = 8 l_4 = 8 + (2-1)*1*2*1 = 10 l_5 = 10 + (3-1)*1*2*1*2 = 18 l_6 = 18 + (3-1)*1*2*1*2*1 = 26 l_7 = 26 + (2-1)*1*2*1*2*1*1 = 30