时间:2021-05-22
卷积和膨胀卷积
在深度学习中,我们会碰到卷积的概念,我们知道卷积简单来理解就是累乘和累加,普通的卷积我们在此不做赘述,大家可以翻看相关书籍很好的理解。
最近在做项目过程中,碰到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、应用领域
图像修复,图像分割,语音合成。
以上这篇Pytorch中膨胀卷积的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
关于Pytorch的MNIST数据集的预处理详解MNIST的准确率达到99.7%用于MNIST的卷积神经网络(CNN)的实现,具有各种技术,例如数据增强,丢失,
pytorch中的2D卷积层和2D反卷积层函数分别如下:classtorch.nn.Conv2d(in_channels,out_channels,kernel
先看Pytorch中的卷积classtorch.nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,
本文为大家讲解了pytorch实现CNN卷积神经网络,供大家参考,具体内容如下我对卷积神经网络的一些认识卷积神经网络是时下最为流行的一种深度学习网络,由于其具有
今天来介绍一下Tensorflow里面的反卷积操作,网上反卷积的用法的介绍比较少,希望这篇教程可以帮助到各位反卷积出自这篇论文:DeconvolutionalN