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?
(完)
标签:deconv,conv,16,卷积,矩阵,转置 From: https://www.cnblogs.com/harrymore/p/17254833.html