什么是deconv操作(反卷积,转置卷积)

发布时间 2023-03-25 15:34:24作者: 大师兄啊哈

1. 前言

zfnet在他们可视化的时候,利用到了《Zeiler, M., Taylor, G., and Fergus, R. Adaptive deconvolutional networks for mid and high level featurelearning. In ICCV, 2011》这篇论文中的反卷积操作,进行特征图的可视化,那什么是deconv操作呢?实际上deconv是有误导性的,令人误认为是卷积的逆运算,实际上cnn的卷积是不可逆的,deconv实际上是转置卷积,是对矩阵进行上采样的一种方法,deconv的作用一般有以下几种:

(1)unsupervised learning,其实就是covolutional sparse coding:这里的deconv只是观念上和传统的conv反向,传统的conv是从图片生成feature map,而deconv是用unsupervised的方法找到一组kernel和feature map,让它们重建图片。
(2)CNN可视化:通过deconv将CNN中conv得到的feature map还原到像素空间,以观察特定的feature map对哪些pattern的图片敏感,这里的deconv其实不是conv的可逆运算,只是conv的transpose,所以tensorflow里一般取名叫transpose_conv。
(3)upsampling:在pixel-wise prediction比如image segmentation以及image generation中,由于需要做原始图片尺寸空间的预测,而卷积由于stride往往会降低图片size, 所以往往需要通过upsampling的方法来还原到原始图片尺寸,deconv就充当了一个upsampling的角色。

我们主要关注2,即CNN的可视化。

2. 转置卷积

2.1. 如何计算

如上图所示,转置卷积主要用途是用来增大输入高宽,左边是输入矩阵和卷积核,转置卷积就是,对矩阵的每个元素,乘以卷积核中的每一个元素形成一个新的矩阵,然后按照步长移动,对下一个输入矩阵的元素进行此操作,最后按照步长大小,将这些结果进行相加,上图已经很好的说明了这个过程。

2.2. 为什么叫转置卷积

在卷积中,我们可以这么定义:

用C代表卷积核,input为输入图像,output为输出图像,经过卷积(矩阵乘法)后,我们将input从大图像下采样为小图像output,这种矩阵乘法遵循:

C · input = output

下面例子展示了这种运算在计算机内的工作方式,它将输入平展为16*1矩阵,并将卷积核转换为一个稀疏矩阵4*16,然后在稀疏矩阵和平展的输入之间使用矩阵乘法,之后,再将所得的矩阵4*1转为2*2的输出。

 

此时,若卷积核对应稀疏矩阵的转置CT(16*4)乘以输出的平展4*1所得到的结果16*1的形状和原输入的形状16*1相同。

 

但值得注意的是,上述两次操作并不是可逆关系,对于同一个卷积核(因非其稀疏矩阵不是正交矩阵),结果转置操作之后并不能恢复到原始的数值,而仅仅保留原始的形状,所以转置卷积的名字由此而来。并回答了上面提到的疑问,相比于“逆卷积”而言转置卷积更加准确。

3. 参考

怎样通俗易懂地解释反卷积?

如何理解深度学习中的deconvolution networks?

47 转置卷积【动手学深度学习v2】

转置卷积【动手学深度学习v2】原稿

(完)