卷积和膨胀卷积

在深度学习中,我们会碰到卷积的概念,我们知道卷积简单来理解就是累乘和累加,普通的卷积我们在此不做赘述,大家可以翻看相关书籍很好的理解。

最近在做项目过程中,碰到Pytorch中使用膨胀卷积的情况,想要的输入输出是图像经过四层膨胀卷积后图像的宽高尺寸不发生变化。

开始我的思路是padding='SAME'结合strides=1来实现输入输出尺寸不变,试列好多次还是有问题,报了张量错误的提示,想了好久也没找到解决方法,上网搜了下,有些人的博客说经过膨胀卷积之后图像的尺寸不发生变化,有些人又说发生变化,甚至还给出了公式,按着他们的方法修改后还是有问题,报的错误还是没有变。一时不知道怎样解决,网上关于膨胀卷积输出尺寸的大小相关的知识也很少。

终于......,经过自己的研究,发现了问题所在。好啦!我们先从膨胀卷积的概念开始。

1、膨胀卷积的概念

Dilated Convolutions,翻译为扩张卷积或空洞卷积。扩张卷积与普通的卷积相比,除了卷积核的大小以外,还有一个扩张率(dilation rate)参数,主要用来表示扩张的大小。扩张卷积与普通卷积的相同点在于,卷积核的大小是一样的,在神经网络中即参数数量不变,区别在于扩张卷积具有更大的感受野。感受野是卷积核在图像上看到的大小,例如5x5的卷积核的感受野大小为25。

2、示意图

a.普通卷积,dilation=1,感受野为3x3=9

b.膨胀卷积,dilation=2,感受野为7x7=49

c.膨胀卷积,dilation=4,感受野为16x16 = 256

3、感受野的概念

在卷积神经网络中,感受野的定义是 卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小

卷积核经过膨胀后实际参与运算的卷积大小计算公式:

膨胀后的卷积核尺寸 = 膨胀系数 × (原始卷积核尺寸-1)+ 1

例如对于输入是19 x 19(暂且不考虑图像通道数)大小的图像做膨胀卷积,要使输出的图像大小保持不变,即就是仍然为19 x 19,我们要怎样实现呢?

我们的代码是基于pytorch实现的,它的卷积参数中没有padding='SAME‘的选项,padding的可取值为0,1,2,3等等的值。它的计算方式和tensorflow中的padding='VALID'的计算方式一样。

Output=(W-F+2P)/S+1

我们取strides=1,这里的原始卷积核为3 x 3大小,dilation=6,我们可以计算出膨胀后的卷积核大小为6(3-1)+1=13

带入公式可以求得:

(19-13+2*p)/1+1=19,要使这个式子成立,可以反推出padding=6。

这样一来,就可以使得输入输出的尺寸保持不变。达到了我们想要的效果。

4、膨胀卷积的优点

膨胀卷积在保持参数个数不变的情况下增大了卷积核的感受野

5、应用领域

图像修复,图像分割,语音合成。


原文链接: https://zhuanlan.zhihu.com/p/101600513

卷积和膨胀卷积在深度学习中,我们会碰到卷积的概念,我们知道卷积简单来理解就是累乘和累加,普通的卷积我们在此不做赘述,大家可以翻看相关书籍很好的理解。最近在做项目过程中,碰到Pytorch中使用膨胀卷积的情况,想要的输入输出是图像经过四层膨胀卷积后图像的宽高尺寸不发生变化。开始我的思路是padding='SAME'结合strides=1来实现输入输出尺寸不变,试列好多次还是有问题,报了张量错误的提示,想了好久也没找到解决方法,上网搜了下,有些人的博客说经过膨胀卷积之后图像的尺寸不发生变化,有些人又
Dilated conv, 文叫做空洞卷 或者扩张卷 ,起源于语义分割,大部分文章也用于语义分割,具体能否对其他应用有价值姑且还不知道,但确实是一个不错的探究方向。 感受野(receptive field):CNN ,某一层输出结果 一个元素所对应的输入层的区域大小,感受野是卷 核在图像上看到的大小,例如3×3卷 核的感受野大小为9。越大的感受野包含越多的上下文关系。 膨胀 与普通的卷 相比...
本文转自http://blog.csdn.net/tangwei2014和https://blog.csdn.net/jiongnima/article/details/69487519,转载目的便于自己查看学习 第一位大神解析: deeplab发表在ICLR 2015上。论文下载地址:Semantic Image Segmentation with Deep Convolutional Ne...
提出原因: (1)maxpooling层,会降低特征层的高度和宽度,同时会导致丢失细节信息以及较小目标,丢失的信息和目标无法通过上采样操作进行还原。 (2)如果将maxpooling层去掉,会导致得到的特征图所对应原图的感受野变小 此时选用 膨胀 ,能够: (1)增大感受野 (2)保持原输入特征图的高度和宽度 (2)设 膨胀 率为2 (3)则 膨胀 后的卷 核的大小为:dilation_rate*(kernel_size - 1)+1 结果就是 2*(3-1)+1=5, 膨胀 后的卷 核大小是5*5 3.默认的dilation_rate=1.
NLP进阶之(七) 膨胀 神经网络1. Dilated Convolutions 膨胀 神经网络1.2 动态理解2. Dilated Convolutions 优点3. 应用 理论来自Multi-scale context aggregation by dilated convolutions ICLR 2016 作者将代码贡献于github 针对语义分割问题 semantic segment...
参考: A guide to convolution arithmetic for deep learning            如何理解深度学习 的deconvolution networks? 卷 运算实际上是一种矩阵的乘法运算。反卷 相当于卷 在神经网络结构的正向和反向传播 做相反的矩阵运算。 卷 运算可表示为(C是一个由卷 核转换而来的稀疏矩阵)。而反卷 运算就是正向时...
PyTorch是机器学习领域使用最多的深度学习框架之一,而d2l _pytorch 包则是一种基于PyTorch的深度学习教学工具包,它包含了很多深度学习的实现代码和实践案例,是学习深度学习的好工具。 在导入d2l _pytorch 包时,需要先下载并安装该包,具体步骤如下: 1. 打开命令行工具,使用pip工具下载d2l _pytorch 包的安装文件。可以使用以下命令: ``` python !pip install d2l==0.16.5 2. 在 Python 的开发环境 导入已安装的d2l _pytorch 包。可以使用以下命令: ``` python import d2l 3. 确认已成功导入d2l _pytorch 包的所有模块和函数。可以使用以下命令: ``` python dir(d2l) 这样可以查看d2l _pytorch 所有模块和函数的名称和使用方法,方便用户快速编写深度学习模型和实践案例。 总之,导入d2l _pytorch 包需要先下载并安装该包,然后在 Python 的开发环境 导入已安装的包。在使用d2l _pytorch 包时,建议查看包内文档和实践案例,更快地掌握深度学习的知识和技能。