卷积padding和反卷积原理探究 |
您所在的位置:网站首页 › padding等于same › 卷积padding和反卷积原理探究 |
反卷积(Deconvolution)的概念第一次出现是Zeiler在2010年发表的论文Deconvolutional networks中,但是并没有指定反卷积这个名字,反卷积这个术语正式的使用是在其之后的工作中(Adaptive deconvolutional networks for mid and high level feature learning)。随着反卷积在神经网络可视化上的成功应用,其被越来越多的工作所采纳比如:场景分割、生成模型等。其中反卷积(Deconvolution)也有很多其他的叫法,比如:Transposed Convolution,Fractional Strided Convolution等等。 为了介绍反卷积 / 转置卷积的概念,本文先从卷积网络开始介绍。 1、卷积![]() 其实图像的卷积和信号系统中的卷积有类似性。在信号系统中,卷积的定义如下: ![]() ![]() ![]() ![]() 卷积往往会降低图片的大小,降维采集特征,属于下采样的一种,输出图像大小和这些参数关系如下:输入图片大小W,卷积核大小F,Padding大小P,Strides大小S,输出图像大小: N = (W − F + 2P )/S+1实践中Padding往往是深度学习平台自动算出来,比如Tensorflow提供了两种Padding模式,valid和same模式。valid模式下padding=0, 可能会有部分像素不参与卷积,same模式下通过周围补0来让所有像素都能参与卷积,平台会自动算出Padding值。 卷积的padding在卷积核的移动过程中,不同的padding模式会造成不同的结果,padding模式有Full、Same、Valid三种。 Valid: ![]() ![]() ![]() 了解完卷积的相关知识,现在我们来了解一下反卷积的相关概念,或者说是转置卷积。反卷积是一种上采样技术, 用来升维还原作用, 比如抠图需要还原出原始图像大小的Mask。反卷积的计算过程和卷积差不多, 只不过它通过补零的方式扩大了原始图像然后再卷积, 最终结果是输出图片变大, 执行动画如下: ![]() 通俗来说,卷积层的前向卷积过程可以理解成为反卷积层的反向传播过程,卷积层的反向传播过程就是反卷 积层的前向传播过程;卷积层的前向反向过程分别是计算乘C和( C )t,而反卷积的前向反向计算分别成为(( C )t)t。 ![]() ![]() 值得注意的是如同卷积网络需要padding,反卷积网络同样需要引入padding,否则伴随相同的卷积层参数,仍然有可能面临输出size不确定的问题。此时pytorch网络决定引入output_padding变量,最好的output_padding应该取stride-1,这样输入输出才能够成比例。那取别的值运算可以吗?可以,不会妨碍到这一个反卷积的计算,但是在网络的后面进行与尺寸有关的操作时就要注意了,此时的输出不是输入尺寸* stride了。 关于output_padding的总结: stride就是输入的feature map膨胀的程度,可以看到stride=2,大约就是像素之间间隔1个元素,stride=3的时候则像素之间间隔两个元素。有一个有意思的事实是因为反卷积的上采样率并不受到kernal size的影响,因此在训练和推理过程的stride定义彼此之间是互不影响的,stride数值可以直接影响到最终的放大倍数。比如训练时设定的上采样倍数为2,但是推理时设定stride为4也不影响,模型仍然可以正常运行。 由于卷积核滑动过程中,边界情况的不确定,使得在运算步长大于1的反卷积时会出现多种合法输出尺寸,pytorch的反卷积层提供了output_padding供使用者选择输出,一般情况下我们希望输入输出尺寸以步长为比例,因此output_padding一般取stride-1,同时padding取 (kernel_size - 1)/2 。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |