[1] Zeiler M D, Krishnan D, Taylor G W, et al. Deconvolutional networks[C]//2010 IEEE Computer Society Conference on computer vision and pattern recognition. IEEE, 2010: 2528-2535.
[2] Zeiler M D, Taylor G W, Fergus R. Adaptive deconvolutional networks for mid and high level feature learning[C]//2011 international conference on computer vision. IEEE, 2011: 2018-2025.
[3] Zeiler M D, Fergus R. Visualizing and understanding convolutional networks[C]//Computer Vision–ECCV 2014: 13th European Conference, Zurich, Switzerland, September 6-12, 2014, Proceedings, Part I 13. Springer International Publishing, 2014: 818-833.
[4] Long J, Shelhamer E, Darrell T. Fully convolutional networks for semantic segmentation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 3431-3440.
[5] Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. arv preprint arv:1511.06434, 2015.
[6] Ronneberger O, Fischer P, Brox T. U-net: Convolutional networks for biomedical image segmentation[C]//Medical Image Computing and Computer-Assisted Intervention–MICCAI 2015: 18th International Conference, Munich, Germany, October 5-9, 2015, Proceedings, Part III 18. Springer International Publishing, 2015: 234-241.
[7] Sparse Coding
如何理解深度学习中的deconvolution networks?
Sparse Coding: Autoencoder Interpretation
Exercise:Sparse Coding
Autoencoders and Sparsity
[机器学习] UFLDL笔记 - Sparse Coding(稀疏编码)
//TODO
Deconvolution
简介一般说到 deconvolutional network
指的是两种东西,一种是 convolutional sparse coding
组成的网络,另一种是 transposed convolution
组成的网络,这两种都有别名叫做 deconvolutional network
,但概念完全不同,事实上它们之间没有任何关系,光看名字有点容易混淆。
convolutional sparse coding
是 Zeiler 做的工作,初衷是提取稀疏特征之类的,但并不成功(而且公式丑的不要不要的)。反而是在深层卷积网络的可视化上用的很好,在机器学习领域内 sparsity 已经基本过气的情况下算是为数不多用的还不错的东西,参见论文[3]。
transposed convolution
可以用于产生图像或是 segmentation 用的 label,因为经常和普通的 convolutional network
对称使用,组成一个 encoder-decoder
结构的 fully convolutional network
,故称作 deconvolutional network
以显得前后呼应(中间还有 pooling
对 unpooling
之类的),参见论文[4]。
一般情况下,如果不特别说明,Deconvolution
指的是 transposed convolution
,关于 transposed convolution
的详细介绍,请参考另一篇博客:深入浅出理解转置卷积Conv2DTranspose
convolutional sparse coding
Network的两篇文章[1][2],都是由New York University的Matthew D. Zeiler, Rob Fergus等人提出来的(他们提出的ZF-net也是ILSVRC 2013的冠军,Matthew D. Zeiler是Rob Fergus的PhD,毕业后去了自己的人工智能初创公司clarifai,而Rob Fergus也加入了Facebook AI Research)。
第一篇论文[1]主要用于学习图片的中低层级的特征表示,属于unsupervised feature learning
,和传统的auto-encoder,RBM比较类似,和它最像的还是sparse coding[7]。该篇文章的deconv是标准卷积(以下简称“conv”,特指标准卷积)的逆运算,conv是从图片生成feature map,而deconv是用unsupervised的方法找到一组kernel和 feature map
,让它们重建图片。
第二篇论文[2]也是通过 deconvolutional network
学习图片的特征表示,和论文[1]不同的是加入了pooling
,unpooling
,deconv
(Conv2DTranspose
,deconv的参数只是原卷积的转置,并不原卷积的逆运算)。
第二个方面,deconv用来做CNN的可视化。通过deconv将CNN中 conv
得到的 feature map
还原到像素空间,以观察特定的 feature map
对哪些pattern的图片敏感。ZF-Net[3]中用 deconv
做可视化,它是将CNN学习到 feature map
的卷积核,取转置,得到 Conv2DTranspose
。从而将图片特征从 feature map
空间转化到pixel空间,以发现是哪些pixel激活了特定的 feature map
,达到分析理解CNN的目的。
其实,这里的deconv不是conv的逆运算,只是conv的转置,所以tensorflow里一般取名叫 transpose_conv
。第一篇用deconv表示 transposed convolution
的是论文[3],该论文提出了ZFNet,而且是ImageNet 2013年的winner,比较有影响力,之后大家就错误的用下去了。之后有些researchers提出应该叫 transposed convolution
, backward convolution
(见cs231n的课件),但似乎并没有改过来,比较新的深度学习框架应该都是有 Deconvolution
和 TransposedConvolution
两个名字。
upsampling
在 pixel-wise prediction
,比如 image segmentation
[4][6]以及 image generation
[5]中,在编码器中使用卷积层进行特征提取,然后在解码层中通过 upsampling
的方法还原(恢复)到原始图片尺寸,deconv就充当了一个 upsampling
的角色。
分别简单介绍两篇文章,FCN和DCGAN。
FCN[4]主要用来做 pixel-wise
的 image segmentation
预测。为了得到 pixel-wise
的prediction,要把 feature map
通过deconv
转化到像素空间。
DCGAN[5]中使用 deconv
就更自然了,本身GAN就需要 generative model
,需要通过 deconv
从特定分布的输入数据中生成图片。tf.keras.layers.Conv2DTranspose
提供了DCGAN的教程:深度卷积生成对抗网络。