反卷积 转置卷积的理解

看了不少反卷积和转置卷积的文章,彷佛仍是一头雾水,记录下本身理解的过程~网络

有人一句话总结:逆卷积相对于卷积在神经网络结构的正向和反向传播中作相反的运算。其实仍是不是很理解。ide

反卷积(转置卷积)一般用来两个方面:spa

1. CNN可视化,经过反卷积将卷积获得的feature map还原到像素空间,来观察feature map对哪些pattern相应最大,便可视化哪些特征是卷积操做提取出来的;3d

2. FCN全卷积网络中,因为要对图像进行像素级的分割,须要将图像尺寸还原到原来的大小,相似upsampling的操做,因此须要采用反卷积;blog

3. GAN对抗式生成网络中,因为须要从输入图像到生成图像,天然须要将提取的特征图还原到和原图一样尺寸的大小,即也须要反卷积操做。ip

咱们先来看看卷积和反卷积的图,简直不要太形象。
卷积(convolution):
卷积核为 3x3;no padding , strides=1
 
"反卷积"(the transpose of conv) 能够理解为upsample conv.
卷积核为:3x3; no padding , strides=1

那看下strides=2的时候。
卷积:

反卷积:

在实际计算过程当中,咱们要转化为矩阵的乘积的形式,一个转化为Toeplitz matrix,一个reshape为列矩阵。
举个简单的例子
好比 input= [3,3],Reshape以后,为A=[1,9]
B(能够理解为滤波器)=[9,4](Toeplitz matrix)
那么A*B=C=[1,4]。Reshape C=[2,2]
因此,经过B 卷积,咱们从shape=[3,3]变成了shape=[2,2]

反过来。
输入A=[2,2],reshape以后为[1,4]
B的转置为[4,9]
那么A*B=C=[1,9],reshape为[3,3]
因此,经过B的转置 - "反卷积",咱们从shape=[2,2]获得了shape=[3,3]

也就是输入feature map A=[3,3]通过了卷积滤波B=[2,2] 输出为 [2,2] ,因此padding=0,stride=1
反卷积则是
输入feature map A=[2,2],通过了反卷积滤波B=[2,2].输出为[3,3].padding=0,stride=1

那么[2,2]的卷积核(滤波器)是怎么转化为[4,9]或者[9,4]的呢?
经过Toeplitz matrix,不清楚本身百度下~
 
重点来了:对于卷积操做很了解,这里很少说。咱们梳理一下反卷积的操做:
首先看stride=1时候的反卷积:这里写的是no padding,可是其实这对应的是正常卷积操做的no padding,然而实际意义上卷积操做是no padding,那么反卷积就是full padding;同时带来一个新的问题,那么padding究竟是多少呢?这里我目前理解的是添加的padding值等于(kernel_size - stride),像此处就是padding = kernel_size - stride = 3 - 1 = 2,那么padding添加为2。一样对于下面stride=2的时候,padding = 3 - 2 = 1。(待考证~)
可是当stride>1的时候,须要在原输入中插入0像素值,如上图stride=2的时候,填充padding实际上是进行了两个步骤:其一是根据步长stride来填充,即在原输入矩阵中间插入(stride-1)= 2 - 1 = 1个像素值为0的值;其二再根据padding来填充,padding = kernel_size - stride = 3 - 2 = 1,因此须要在输入外围填充1个像素值为0的值。
而后,咱们来稍微理解一下 Toeplitz matrix这个东西,假设咱们的输入input = [4,4],reshape以后是[1,16],B(能够理解为滤波器)=[16,4](Toeplitz matrix),那么A*B=C=[1,4]。Reshape C=[2,2]
因此,经过B 卷积,咱们从shape=[4,4]变成了shape=[2,2]。
这里,咱们的B滤波器为:(其实咱们的B滤波器中的权重值也就是9个值,即kernel是3×3的卷积核。)

其实这里卷积核B的参数仍然只有9个,加上多个稀疏值0,来构成一个Toeplitz matrix和输入进行矩阵乘积操做。这里为何B的shape会是16×4呢,由于其实输入是[4,4],实际上是有16个值,因此第一维是16,而后由于kernel_size为3,4×4大小的输入须要计算四次,因此第二维是4。input

若是你不理解Toeplitz matrix是怎么来的,你能够在草稿纸上笔划一下,即一个4×4的输入矩阵和一个3×3的卷积核进行卷积操做,而后对照[1,16]*[16,4]矩阵相乘,你会发现其实计算的结果是同样的。数学

 

另外要说明一点反卷积和转置卷积的真正区别:it

反卷积在数学含义上是能够还原输入信号的;可是转置卷积只能还原到原来输入的shape,其value值是不同的。io

 借用一个反池化的图简单说明一下转置卷积是能够恢复到原来输入的shape,可是其value值是不同的。

咱们知道,池化是不可逆的过程,然而咱们能够经过记录池化过程当中,最大激活值得坐标位置。而后在反池化的时候,只把池化过程当中最大激活值所在的位置坐标的值激活,其它的值置为0,固然这个过程只是一种近似,由于咱们在池化的过程当中,除了最大值所在的位置,其它的值也是不为0的。

 

2018.09.03

这里说一下什么是上采样。

实际上,上采样(upsampling)通常包括2种方式:

  1. Resize,如双线性插值直接缩放,相似于图像缩放(这种方法在原文中提到)
  2. Deconvolution,也叫Transposed Convolution

传统的网络是subsampling的,对应的输出尺寸会下降;upsampling的意义在于将小尺寸的高维度feature map恢复回去,以便作pixelwise prediction,得到每一个点的分类信息。

相关文章
相关标签/搜索