转置卷积和反卷积(Transposed Convolution/ DeConvolution)

反卷积(转置卷积)通常用来两个方面:

  1. CNN可视化,通过反卷积将卷积得到的feature map还原到像素空间,来观察feature map对哪些pattern相应最大,即可视化哪些特征是卷积操作提取出来的;(ZFNet可视化

  2. FCN全卷积网络中,由于要对图像进行像素级的分割,需要将图像尺寸还原到原来的大小,类似upsampling的操作,所以需要采用反卷积;

  3. GAN对抗式生成网络中,由于需要从输入图像到生成图像,自然需要将提取的特征图还原到和原图同样尺寸的大小,即也需要反卷积操作。

我们先来看看卷积和反卷积的图,简直不要太形象。

卷积(convolution):

卷积核为 3x3;no padding , strides=1
转置卷积和反卷积(Transposed Convolution/ DeConvolution)_第1张图片
反卷积

“反卷积”(the transpose of conv) 可以理解为upsample conv.
卷积核为:3x3; no padding , strides=1
转置卷积和反卷积(Transposed Convolution/ DeConvolution)_第2张图片
那看下strides=2的时候。

卷积
转置卷积和反卷积(Transposed Convolution/ DeConvolution)_第3张图片
反卷积
转置卷积和反卷积(Transposed Convolution/ DeConvolution)_第4张图片
另外要说明一点反卷积和转置卷积的真正区别:

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

借用一个反池化的图简单说明一下转置卷积是可以恢复到原来输入的shape,但是其value值是不一样的。
转置卷积和反卷积(Transposed Convolution/ DeConvolution)_第5张图片
我们知道,池化是不可逆的过程,然而我们可以通过记录池化过程中,最大激活值得坐标位置。然后在反池化的时候,只把池化过程中最大激活值所在的位置坐标的值激活,其它的值置为0,当然这个过程只是一种近似,因为我们在池化的过程中,除了最大值所在的位置,其它的值也是不为0的。

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

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

你可能感兴趣的:(神经网络,计算机视觉,深度学习,神经网络)