-
2019-08-12 15:03:21
空洞卷积
# 在原始卷积核的每两个元素之间插入 d − 1个空洞 # 膨胀的卷积核尺寸 = 膨胀系数 * (原始卷积核尺寸 - 1) + 1 # 也可以写成 m + (m − 1) × (d − 1) 二者是相等的 # m为原始卷积核尺寸 d为膨胀系数 # 首先由于卷积的操作特性,卷积核尺寸是奇数,则原始卷积核尺寸减一为偶数。 # 那么,在上述公式中,膨胀系数*偶数-1为奇数,保证了膨胀的卷积核尺寸为奇数。 # 其次,笔者认为,卷积核的膨胀系数刻画了卷积核高和宽方向的扩张倍数,可将上述公式看作: # 膨胀的卷积核尺寸 - 1 = 膨胀系数 * (原始卷积核尺寸 - 1) # dilation_rate: 一个整数或 2 个整数的元组或列表, 指定膨胀卷积的膨胀率。 # 可以是一个整数,为所有空间维度指定相同的值。 # 当前,指定任何 dilation_rate 值 != 1 与 指定 stride 值 != 1 两者不兼容
-
空洞卷积的优点:在不做池化损失信息的情况下,加大感受野,让每个卷积的输出都包含较大范围的信息。
在图像需要全局信息,或者语音、文本需要较长序列信息的问题中,空洞卷积都能很好的应用。
-
空洞卷积的缺点:
-
网格效应(
Gridding Effect
)。如果仅仅多次叠加多个dilation rate=2
的3x3
的卷积核时,会发现:并不是所有的输入像素都得到计算,也就是卷积核不连续。这对于逐像素的预测任务来说,是致命的问题。
-
长距离信息可能与任务无关。采用空洞卷积可能对大物体的分割有效果,但是对于小物体的分割可能没有好处。
如何同时处理不同大小的物体,则是设计好空洞卷积网络的关键。
-
-
为了解决空洞卷积的缺点,人们提出了一种混合空洞卷积的结构(
Hybrid Dilated Convolution:HDC
) 。该结构有三个特性:
-
叠加的空洞卷积的
dilation rate
不能有大于 1 的公约数。这是为了对抗网格效应。如:
[2,4,6]
不是一个好的三层空洞卷积,因为会出现网格效应。 -
将
dilation rate
设计成锯齿状结构。这是为了同时满足小物体、大物体的分割要求。如
[1,2,5,1,2,5]
的循环结构。 -
最后一层的空洞卷积的
dilation rate
最大,且dilation rate
小于等于卷积核的大小。这也是为了对抗网格效应。
下面是一组
dilation rate
分别为[1,2,5]
的卷积核,卷积核的尺寸为3x3
-
更多相关内容 -
-
PyTorch 普通卷积和空洞卷积实例
2020-09-18 04:06:14今天小编就为大家分享一篇PyTorch 普通卷积和空洞卷积实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
密集上采样(DUC)和混合空洞卷积(HDC)
2019-06-28 13:55:01),通过卷积后输出feature map维度为 ,其中 是语义分割的类别数。最后通过reshape到 尺寸就可以了。不难看出,DUC的主要思想就是将整个label map划分成与输入的feature map等尺寸的子部分。所有的子部分被叠加 次...转载自: https://zhuanlan.zhihu.com/p/26659914
详细可参考: https://blog.csdn.net/u011974639/article/details/79460893本篇论文主要有两个创新点,DUC(dense upsampling convolution)和HDC(hybrid dilated convolution),分别针对上采样和dilated convolution问题进行改进。
我用pytorch实现了DUC功能,代码放在我的github上了,欢迎star,欢迎讨论。
DUC
语义分割任务下的网络基本都具有encoding和decoding的过程,而大多数网络在decoding时使用的是双线性插值。而双线性插值是不能学习的,且会丢失细节信息。所以,文章中提出了一种方法:dense updampling convolution——通过学习一些系列的放大的过滤器来放大降采样的feature map到最终想要的尺寸。具体结构如下:
,经过ResNet后维度变为
(其中
,
),通过卷积后输出feature map维度为
,其中
是语义分割的类别数。最后通过reshape到
尺寸就可以了。不难看出,DUC的主要思想就是将整个label map划分成与输入的feature map等尺寸的子部分。所有的子部分被叠加
次就可以产生整个label map了。这种变化允许我们直接作用在输出的feature map上而不用像deconvolution和unpooling那样还需要一些额外的信息。
实验对比如下:
HDC
HDC主要是为了解决使用dilated convolution会产生的“gridding issue”。
当dilated convolution在高层使用的rate变大时,对输入的采样将变得很稀疏,将不利于学习——因为一些局部信息完全丢失了,而长距离上的一些信息可能并不相关;并且gridding效应可能会打断局部信息之间的连续性。
所以,文章提出了HDC——使用一系列的dilation rates而不是只用相同的rate,并且使用ResNet-101中blocks的方式连接它们。具体展示如下:
b:连续的卷积层使用dilation rates
从这也可看出,HDC还有一个好处,可以增大网络的感受野。
实验对比如下:
论文地址: https://arxiv.org/pdf/1702.08502.pdf -
空洞卷积的超详细解释
2021-03-09 18:21:31目录什么是空洞卷积为什么需要空洞卷积卷积的问题空洞卷积的好处总结空洞卷积存在的问题潜在问题 1:The Gridding Effect 什么是空洞卷积 Dilated/Atrous Convolution(中文叫做空洞卷积或者膨胀卷积) 或者是 ...目录
什么是空洞卷积
Dilated/Atrous Convolution(中文叫做空洞卷积或者膨胀卷积) 或者是 Convolution with holes 从字面上就很好理解,是在标准的 convolution map 里注入空洞,以此来增加 reception field。相比原来的正常convolution,dilated convolution 多了一个 hyper-parameter 称之为 dilation rate,指的是kernel的间隔数量(e.g. 正常的 convolution 是 dilatation rate 1)。
- 下面分别是普通卷积和空洞卷积的图解例子
- 看上去,空洞卷积的操作十分简单,并没有与普通卷积差别太大。不过光理解他的工作原理还是远远不够的,要充分理解这个概念我们得重新审视卷积本身,并去了解他背后的设计直觉。
为什么需要空洞卷积
卷积的问题
- 在赢得其中一届ImageNet比赛里VGG网络的文章中,他最大的贡献并不是VGG网络本身,而是他对于卷积叠加的一个巧妙观察。
- 这里意思是 7 x 7 的卷积层的正则等效于 3 个 3 x 3 的卷积层的叠加。而这样的设计不仅可以大幅度的减少参数,其本身带有正则性质的 convolution map 能够更容易学一个 generlisable, expressive feature space。这也是现在绝大部分基于卷积的深层网络都在用小卷积核的原因。
- 主要问题有:
1. Up-sampling / pooling layer (e.g. bilinear interpolation) is deterministic. (a.k.a. not learnable)内部数据结构丢失;
2. 空间层级化信息丢失。
3. 小物体信息无法重建 (假设有四个pooling layer 则 任何小于 2^4 = 16 pixel 的物体信息将理论上无法重建。)
在这样问题的存在下,语义分割问题一直处在瓶颈期无法再明显提高精度, 而 dilated convolution 的设计就良好的避免了这些问题。 - 在图像分割领域,图像输入到CNN(典型的网络比如FCN[3])中,FCN先像传统的CNN那样对图像做卷积再pooling,降低图像尺寸的同时增大感受野,但是由于图像分割预测是pixel-wise的输出,所以要将pooling后较小的图像尺寸upsampling到原始的图像尺寸进行预测(upsampling一般采用deconv反卷积操作,deconv可参见知乎答案如何理解深度学习中的deconvolution networks?),之前的pooling操作使得每个pixel预测都能看到较大感受野信息。因此图像分割FCN中有两个关键,一个是pooling减小图像尺寸增大感受野,另一个是upsampling扩大图像尺寸。在先减小再增大尺寸的过程中,肯定有一些信息损失掉了,那么能不能设计一种新的操作,不通过pooling也能有较大的感受野看到更多的信息呢?答案就是dilated conv。
空洞卷积的好处
- 扩大感受野:在deep net中为了增加感受野且降低计算量,总要进行降采样(pooling或s2/conv),这样虽然可以增加感受野,但空间分辨率降低了。为了能不丢失分辨率(持怀疑态度),且仍然扩大感受野,可以使用空洞卷积。这在检测,分割任务中十分有用。一方面感受野大了可以检测分割大目标,另一方面分辨率高了可以精确定位目标。
- 捕获多尺度上下文信息:空洞卷积有一个参数可以设置dilation rate,具体含义就是在卷积核中填充dilation rate-1个0,因此,当设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息。多尺度信息在视觉任务中相当重要啊。
总结
- 其实说白了,就是池化可以扩大感受野,可以降低数据维度,可以减少计算量,但是会损失信息,而对于语义分割来说,这造成了发展瓶颈。而空洞卷积可以在扩大感受野的情况下不损失信息,但其实,空洞卷积的确没有损失信息,但是却没有用到所有的信息,下面我们就要讲空洞卷积的一些问题。
空洞卷积存在的问题
潜在问题 1:The Gridding Effect
- 空洞卷积的例子:
- 上图解释了空洞卷积存在的问题,从左到右属于top-bottom关系,即左图是最上层的图(其实还少了一张图,最右图是输入图像,向左依次是经过一次kernelsize=3,r=2的空洞卷积之后的结果,最左边的图应该是只有一个红点,这里没画。),三层卷积均为r=2的dilatedConv,可以看出最上层的红色像素的感受野为13。
- 上图中蓝色方块的深浅代表在某层进行空洞卷积的过程中,该方块参与卷积核运算的次数的多少。很明显,分布并不是均匀的,很多方块参与次数很少。而且很多方块根本没有参与运算(但并不是上述所有的白块都没有参与运算,因为这只是最高层一个点的感受野,它相邻的点的感受野会包含一部分上图的白块,但有一些方块是确实在整个卷积过程中没有参与)
- 而且,在使用同样尺寸的卷积核的多次卷积中,最终产生的像素点所依赖的输入像素点是不相邻的,是相互独立的。因为空洞卷积得到的某一层的结果中,邻近的像素是从相互独立的子集中卷积得到的,相互之间缺少依赖。这就导致:
局部信息丢失:由于空洞卷积的计算方式类似于棋盘格式,某一层得到的卷积结果,来自上一层的独立的集合,没有相互依赖,因此该层的卷积结果之间没有相关性,即局部信息丢失。
远距离获取的信息没有相关性:由于空洞卷积稀疏的采样输入信号,使得远距离卷积得到的信息之间没有相关性,影响分类结果。本来远距离获得信息是件好事,结果却没有相关性(也不能说没有,而是r越大越远越没有相关性,r越小越近越相关)。
潜在问题 2:Long-ranged information might be not relevant.
- 我们从 dilated convolution 的设计背景来看就能推测出这样的设计是用来获取 long-ranged information。然而光采用大 dilation rate 的信息或许只对一些大物体分割有效果,而对小物体来说可能则有弊无利了。 如何同时处理不同大小的物体的关系,则是设计好 dilated convolution 网络的关键。
- 总结:简单来说,就是空洞卷积虽然在参数不变的情况下保证了更大的感受野,但是对于一些很小的物体,本身就不要那么大的感受野来说,这是极度不友好的。
解决办法
- 对于上个 section 里提到的几个问题,图森组的文章对其提出了较好的解决的方法。他们设计了一个称之为 HDC 的设计结构。
- HDC原则 (Hybrid Dilated Convolution) - 图森组
混合空洞卷积,在每一层使用不同的rate,把dilatioin rate 变成锯齿形式的也就是不同层之间的dilation不断变化。目标是最后的接收野全覆盖整个区域。 - 1.叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷,有些点永远不会被考虑。
- 2.将 dilation rate 设计成锯齿状结构。例如[1, 2, 3, 1, 2, 3] 循环结构,覆盖了所有点,如上图
- 3.需要满足一下这个式子,M<=K:
dilation rate是空洞卷积率,记为 ri,就是扩张倍数;K是卷积核尺寸
举例:对于常见的扩张卷积核大小K=3,如果r=[1,2,5] 则
此时M2=2 ≤ K=3 满足设计要求,设计的示意图如下:
- 上图解释一下,从左往右看,也就是从顶部往下部看,顶部进行size=5的空洞卷积,所用到的蓝点是根据r=2的空洞卷积卷过来的,还原回去就是中间的图,可以看到还是有一些方块是白色的,也就是没有参与运算的,别急,再看这些蓝方块是根据r=1的方块填充的,然后还原,得到最右图,可见所有的输入元素都被参与运算了,使得卷积后的某个像素考虑了感受野内所有的输入像素点,这样就不存在局部信息不完整以及输入像素点之间相关性不强等问题了。
- 下面分别是普通卷积和空洞卷积的图解例子
-
空洞卷积详解
2022-02-23 11:01:16感受野指:卷积神经网络每一层输出的特征图上的像素点在输入图片上映射的区域大小,即FC层每个输出节点的值都依赖FC层所有输入,而CONV层每个输出节点的值仅依赖CONV层输入的一个区域,这个区域之外的其他输入值都...入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。
目录
一、感受野(知道的可以直接跳)
感受野指:卷积神经网络每一层输出的特征图上的像素点在输入图片上映射的区域大小,即FC层每个输出节点的值都依赖FC层所有输入,而CONV层每个输出节点的值仅依赖CONV层输入的一个区域,这个区域之外的其他输入值都不会影响输出值,该区域就是感受野。简单来说就是特征图上的一个点对应输入图上的区域。
举个栗子:一个5*5的特征图经过2个3*3卷积核后(步长为1,padding为0)的感受野是5*5
注:计算感受野的大小时忽略了图像边缘的影响,即不考虑padding的大小
计算方式:先计算最深层在前一层上的感受野,然后逐层传递到第一层
(1)最后一层(卷积层或池化层)输出特征图感受野的大小等于卷积核的大小
(2)其他层感受野计算公式:
其中,
是第i层卷积层的感受野,
是(i+1)层上的感受野,stride是卷积的步长,Ksize是本层卷积核的大小。
二、空洞卷积的原理
空洞卷积有一个参数可以设置dilation rate,具体含义就是在卷积核中相邻两个值内填充dilation rate-1个0
比如说一个3*3卷积核,dilation rate=2,那么如图所示
三、空洞卷积的作用
1、扩大感受野
一般来说,在深度神经网络中增加感受野并且减少计算量的方法是下采样。但是下采样牺牲了空间分辨率和一些输入的信息。
空洞卷积一方面增大了感受野可以检测分割大目标,另一方面相较于下采样增大了分辨率可以精确定位目标。
2、捕获多尺度上下文信息
当设置不同dilation rate时,感受野就会不一样,也即获取了多尺度信息
四、空洞卷积的缺点
1、网格效应
仅仅多次叠加 dilation rate 相同的相同尺寸卷积核,会导致kernel 不连续,进而导致不是所有的像素都用来计算了,因此这会损失信息的连续性。
如下图所示
(那张白色的网格就相当于输入的图片,然后蓝色组成的那个框框就是卷积核,红色的点代表正在处理的像素点)
可以看到红色点的旁边那一圈白色的像素点从头到尾都没有被利用到(都被乘0),所以红色那一点卷积后没有考虑到旁边这些白点的信息。
2、远距离的信息可能不相关
如果光采用大的扩张率的卷积可能只对一些大物体分割有效果,那么对小目标来说就不太友好了。因此设计好空洞卷积层的关键在于如何同时处理不同大小物体的关系。
五、空洞卷积的改进——HDC(混合空洞卷积)
1、叠加卷积的 dilation rate 不能有大于1的公约数,防止出现网格效应。比如【2,4,8】不行。
2、将扩张率设计成锯齿状结构,如[1,2,5,1,2,5]
空洞卷积代码实现:
conv=tf.nn.atrous_conv2d(X,W,rate,padding)
欢迎大家在评论区批评指正,谢谢~
-
空洞卷积詳解
2021-08-01 20:01:42空洞卷积 Dilated/Atrous Convolution(中文叫做空洞卷积或者膨胀卷积) 或者是 Convolution with holes 从字面上就很好理解,是在标准的 convolution map 里注入空洞,以此来增加 reception field。相比原来的正常... -
学习日志整理2:神经网络改进方案——空洞卷积与HDC
2020-03-15 21:32:270.空洞卷积是什么?HDC又是啥? 空洞卷积,说白了就是把kernel变成筛状。 两张图看明白。图源: https://www.jianshu.com/p/f743bd9041b3 传统卷积核: 空洞卷积核: 而HDC又是对空洞卷积的一种改进,可以说他是... -
#空洞卷积(Atrous Convolution) 原理解释+代码学习
2021-12-02 20:44:20空洞卷积概念 空洞卷积(atrous convolutions)又名扩张卷积(dilated convolutions),向卷积层引入了一个称为 “扩张率(dilation rate)”的新参数,该参数定义了卷积核处理数据时各值的间距。 图a:3*3空洞... -
pytorch代码验证空洞卷积
2021-02-05 15:32:201.空洞卷积 注要内容如下: 空洞卷积理解 但是呢,对于这篇博客的部分内容我不赞同。 3x3的kernel设置dialted-rate=2时,理应变为"5x5"的kernel,多出来的空洞用0填充,这也是变相的增加了感受野。也就是说,设置... -
【扩张卷积or空洞卷积】如何理解Dilated Convolutions(空洞卷积)
2019-07-23 10:20:00文章来源:... 1. 扩张卷积的提出 Multi-Scale Context Aggregation by Dilated Convolutions Dilated Residual Networks 论文笔记——CVPR 2017 Dilated Residual Netwo... -
论文阅读 || 深度学习之空洞卷积
2019-09-26 14:16:11空洞卷积(Dilated/Atrous Convolution),就是在标准的卷积里面注入空洞,以此来增加感受野的大小。 1 原理的介绍 1.1 空洞卷积的引入 Deep CNN对于某些任务有致命的缺陷。较为明显的为pooling layer (优点:... -
Dilated Convolution —— 空洞卷积(膨胀卷积)
2019-03-02 20:31:06目录 Dilated Convolution概述 Dilated Convolution存在的问题 ...Dilated Convolution是在标准卷积的Convolution map的基础上注入空洞,以此来增加感受野(reception field)。因此,Dilated ... -
空洞卷积详解(输入输出大小分析)
2022-07-18 18:19:36空洞卷积的详细分析,对输入输出的大小进行了推导;并介绍了相关改进版本。 -
空洞卷积学习
2021-10-26 20:52:05普通卷积: 膨胀卷积: 两者同样采用3×3的卷积。但膨胀卷积的kernel之间存在间隙, ... -
空洞卷积的优缺点
2021-01-14 19:56:52空洞卷积的优缺点 空洞卷积(atrous convolution)又叫扩张卷积(dilated convolution),其实就是向卷积层引入了一个称为“扩张率(dilation rate)”的新参数,这个参数定义了卷积核处理数据时各值的间距。普通卷积和... -
深度可分离卷积、空洞卷积、反卷积、感受野计算、上采样
2021-10-20 22:31:20Depthwise卷积和Pointwise运算成本比较低 [1] https://zhuanlan.zhihu.com/p/92134485 -
【CV】DeepLab:使用DCNN、空洞卷积和全连接条件随机场的图像语义分割网络
2022-05-16 17:46:08提出了对应的三个解决方案: 针对挑战一,提出空洞卷积 (atrous convolution),可以控制 DCNN 中计算特征响应的分辨率。它还允许在不增加参数数量或计算量的情况下,有效地扩大滤波器的视野以包含更大的上下文。 ... -
膨胀卷积(空洞卷积)学习篇
2022-03-19 20:56:06膨胀卷积提出背景膨胀卷积是什么膨胀卷积的设计原理膨胀卷积的优缺点膨胀卷积的改进膨胀卷积基于Pytorch的代码实现总结 提出背景 膨胀卷积是什么 膨胀卷积的设计原理 膨胀卷积的优缺点 膨胀卷积的改进 膨胀卷积基于... -
Dilated/Atrous Convolution(空洞卷积)
2020-07-08 12:13:02参考文献 【1】总结-空洞卷积(Dilated/Atrous Convolution) 【2】Dilated Convolutions(空洞卷积) 【3】Understanding Convolution for Semantic Segmentation -
因果卷积,膨胀卷积,混合膨胀卷积
2020-09-07 09:41:14网络过于深会带来梯度下降,训练复杂,拟合效果不好的问题,因此提出了空洞卷积。 膨胀卷积(空洞卷积) 个人理解觉得膨胀卷积是因果卷积的变种。 在卷积核中增加空洞来增加感受野,不增加过多计算。 普通卷积... -
总结-空洞卷积(Dilated/Atrous Convolution)、gridding问题以及解决方案、训练技巧BN和PReLU、CReLU
2019-04-23 20:22:04空洞卷积的分解观点,在原始特征图上周期性采样形成4组分辨率降低的特征图,然后使用原始的空洞卷积参数(去掉了空洞0)分别进行卷积,之后将卷积的结果进行上采样组合。 从该分解观点可以看出,卷积前后的4个组之间... -
【NLP】Dilated Convolution —— 空洞卷积(膨胀卷积)
2019-09-16 08:11:24Dilated Convolution是在标准卷积的Convolution map的基础上注入空洞,以此来增加感受野(reception field)。因此,Dilated Convolution在Standard Convolution的基础上又多了一个超参数(hyper-parameter)称之为... -
重磅开源!目标检测新网络 DetectoRS:54.7 AP,特征金字塔与空洞卷积的完美结合
2020-06-05 18:12:11目标检测新网络 DetectoRS:54.7 AP,特征金字塔与空洞卷积的完美结合 论文地址:https://arxiv.org/abs/2006.02334 代码地址(基于mmdetection实现): https://github.com/joe-siyuan-qiao/DetectoRS 本文是谷歌... -
Conv1d 2d 3d、空间可分离卷积Separable Conv、分组卷积Group Conv、深度...Separable Conv、空洞卷积、可变性卷积
2021-04-23 15:24:51CNN中各种卷积Convolution介绍1.Conv1d 2d 3d2.空间可分离卷积Separable convolution扁平卷积Flattened convolutions3.分组卷积Group Conv混合分组卷积...空洞卷积(扩张卷积)Dilated Convolutions6.反卷积(转置 -
Dilated Convolutions——扩张卷积
2017-12-07 16:36:50Dilated Convolutions——扩张卷积 -
卷积、反卷积与膨胀卷积
2021-01-12 18:24:041的映射关系时,保持了输出相对于input中的位置性关系对核矩阵做以下变形:卷积核的滑动步骤变成了卷积核矩阵的扩增卷积的矩阵乘法变成以下形式:核矩阵重排,输入featuremap变形为向量反卷积(1---->多 的映射)... -
MixConv:混合感受野的深度可分离卷积
2019-11-01 10:29:30原文链接:MixConv:混合感受野的深度可分离卷积 | Hey~YaHei! 继EfficientNet和CondConv之后,我们再来聊聊Google Brain的另一篇图像特征提取相关的论文《MixConv: Mixed Depthwise Convolutional Kernels(2019BMVC... -
C3模块-空洞可分离卷积存在的问题及轻量化语义分割模型架构技巧
2021-01-15 16:32:16构建轻量化语义分割模型的一种方式是使用深度空洞可分离卷积,但是空洞卷积和深度可分离卷积两种方式的简单结合,形成了一个过于简单的操作,造成了特征图的信息损失导致模型表现衰退(深度可分离卷积对标准卷积... -
【转载】万字长文带你看尽深度学习中的各种卷积网络
2020-07-21 17:54:06Kunlun Bai 是一位人工智能、机器学习、物体学以及工程学领域的研究型科学家,在本文中,他详细地介绍了 2D、3D、1x1 、转置 、空洞(扩张)、空间可分离、深度可分离、扁平化、 分组等十多种卷积网络类型。...