Deconvolution && Transposed Convolution

       本文的主角是Transposed Convolution(转置卷积),又名Fractionally-strided convolution和deconvolution,其功能是由低分辨率图像生成高分辨率图像,常出现在GAN和图像分割等研究领域。本文根据文章直观的介绍其运算过程,如有差错请指正。

卷积示例
卷积操作 反卷积操作

        卷积操作以3*3的卷积核对4*4矩阵的处理进行说明。为直观表示计算过程,需要将卷积核和被卷积矩阵进行变换。即通过对卷积核补充0,然后合理安排其位置,得到4*16的卷积核矩阵;4*4的矩阵转换为16*1的列向量。这样两矩阵相乘,得到4*1的列向量,即2*2的结果矩阵。处理过程如下

        反之,从2*2的矩阵通过卷积核得到4*4的矩阵即为反卷积操作。按照矩阵乘法,此时3*3的卷积核应转换为为16*4的矩阵,2*2的矩阵变成4*1的列向量,两矩阵相乘得到16*1的列向量。整个流程如下。

        比较上述两个操作的权重矩阵,卷积操作的为4*16,反卷积操作的矩阵形式为16*4,直观上行与列的位置进行了互换,刚好符合转置矩阵的特征,这也是transpose convolution的由来。

        那么问题来了,上述操作能否利用逆矩阵计算出原矩阵呢?

        问题区分的看待,单就存在解的线性方程而言,可以通过逆矩阵或者广义逆矩阵得到原矩阵;如果从整个网络来看待该过程,则不可行,先不说计算量的大小,单就网络中的池化和非线性变换就无法满足完全还原图像,况且实际应用中甚至不知道原图的具体参数。

参考文献:

  1. https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0
  2. https://github.com/naokishibuya/deep-learning/blob/master/python/transposed_convolution.ipynb
  3. https://towardsdatascience.com/types-of-convolutions-in-deep-learning-717013397f4d 对不同卷积操作的解释
  4. https://github.com/vdumoulin/conv_arithmetic 各种卷积的gif
  5. https://zh.wikipedia.org/wiki/%E5%B9%BF%E4%B9%89%E9%80%86%E9%98%B5 广义逆阵

猜你喜欢

转载自blog.csdn.net/hzhj2007/article/details/82667045