上采样和反卷积 Up-sampling and Transposed Convolution (Deconvolution)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/diyoosjtu/article/details/89791528

使用反卷积(Transposed Convolution)来进行上采样操作,不需要借助插值方法,并且可以提供能够学习的参数。

反卷积在DCGAN和图像的语义分割网络中,有很重要的应用。

1. 卷积操作

我们用一个简单的例子来介绍卷积的计算过程。如下图所示,用一个3x3的卷积核对一个4x4的矩阵进行卷积操作,步长为1,不施加padding,则可以得到一个2x2的结果矩阵。
在这里插入图片描述

计算输入矩阵和卷积核相对应的各个元素的乘积,最后相加得到卷积结果,如下图所示:
在这里插入图片描述

从上图的结果可以看到,卷积之后,输入矩阵与输出矩阵存在位置上的联系(positional connectivity)。输入矩阵的左上角元素会影响输出矩阵的左上角结果。3x3卷积核将输入矩阵中的9个元素与输出矩阵中的一个元素连接起来。卷积形成了多对一的关系。

2. 卷积矩阵

我们可以把卷积过程用矩阵乘法来表示。

3x3的卷积核:
[ 1 4 1 1 4 3 3 3 1 ] \begin{bmatrix} 1 & 4 & 1\\ 1 & 4 & 3\\ 3 & 3 & 1 \end{bmatrix}
可以排布成一个4x16的矩阵,如下图所示:
在这里插入图片描述
上图结果被称为卷积矩阵,矩阵的每一行决定了一次卷积操作。

在计算卷积的时候,需要把输入矩阵展平成一个16x1的列向量:
在这里插入图片描述
然后使用矩阵乘法得到卷积结果:
在这里插入图片描述
把乘法结果的4x1列向量reshape成2x2的矩阵,就得到了与图1一样的卷积结果:
在这里插入图片描述

3. 反卷积

反卷积可以看作是卷积操作的逆过程,也就是形成一对多的关系。如下图所示,我们要从一个2x2的矩阵,反推出一个4x4的矩阵:
在这里插入图片描述

接下来,我们介绍如何进行这样的反卷积操作。

4. 反卷积矩阵

借助于第2节介绍的卷积矩阵,可以很容易进行反卷积操作。

我们把卷积矩阵转置成一个16x4的矩阵,再与结果的4x1列向量相乘,就可以得到一个16x1的列向量,reshape之后就是一个4x4的矩阵。
在这里插入图片描述
把结果的16x1列向量reshape成一个4x4的矩阵,结果如下:
在这里插入图片描述
到此为止,我们把一个2x2的小矩阵,上采样变成了一个4x4的大矩阵。反卷积的过程形成了1对9的关系。

5. 使用卷积计算反卷积

如下图所示,使用相同的卷积核,通过卷积来计算反卷积。
在这里插入图片描述
这种方法非常低效,因为需要对输入矩阵大量补零,卷积过程中有大量的乘0操作。

6. 总结

  1. 使用反卷积可以进行上采样
  2. 反卷积具有可供学习的参数,不需要利用插值方法

参考文献

https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0

猜你喜欢

转载自blog.csdn.net/diyoosjtu/article/details/89791528