关于转置卷积的简约理解

本文仅做记录使用,若有抄袭,请留言删除
本文思想及图片引用于
[Up-sampling with Transposed Convolution]: https://medium.com/activating-robotic-minds/up-sampling-with-transposed-convolution-9ae4f2df52d0

图片进行上采样操作

当我们将低分辨率图片转换为高分辨率图片时,上采样操作需要进行一些插值操作:
关于转置卷积的简约理解
其中插值方式为:

1、最近邻插值(Nearest neighbor interpolation)

2、双线性插值(Bi-linear interpolation)

3、双三次插值(Bi-cubic interpolation)

这种方式无法提供给深度神经网络学习参数,而是直接给定特征参数,这样会产生一些影响(模糊,锯齿等)。

转置卷积层

转置卷积得名与矩阵的转置操作,广泛应用于:

a、DCGAN网络的图片生成

b、语义分割的像素级分类

1、卷积操作

首先通过一个简单地例子说明卷积操作,在4 X 4 的矩阵上应用一个 3 X 3 的卷积核,padding = 0,strides = 1,将会输出一个 2 X 2 的矩阵。如下图所示:
关于转置卷积的简约理解
卷积操作的特点是:多对一;多个特征值通过卷积核生成一个特征值。

思考:如果我们想实现一对多,比如将 2 X 2 的矩阵通过一个操作,变为 4 X 4 的输出,该怎么操作。接下来我们通过矩阵的形式来说明卷积操作,然后再利用矩阵的转置来说明如何实现小矩阵转变为大矩阵。

2、卷积矩阵

我们通过矩阵点乘操作,来说明卷积操作类似于矩阵相乘。首先,将卷积核排列成普通矩阵的形式,如:将3 X 3 排列成 4 X 16 的形式:
关于转置卷积的简约理解
转换成 4 X 16的维度(命名为W):
关于转置卷积的简约理解
以上就是卷积核的矩阵形式,接下来我们将输入转换为 16 X 1 的维度(命名为X):
关于转置卷积的简约理解
将 W 和 X 相乘:
关于转置卷积的简约理解
输出 4 X 1维度,reshape输出维度为 2 X 2:
关于转置卷积的简约理解
由此可说明卷积操作可用矩阵的点乘运算达到同样的效果。

2.3 、转置卷积矩阵

此时,如果将 2 X 2 的矩阵转换成 4 X 4的矩阵,则需要将 W 矩阵转置(W.T)16 X 4,将 2 X 2 输出转换为 4 X 1维度后与 W.T 点乘:
关于转置卷积的简约理解
输出 16 X 1维度,接着reshape成 4 X 4:
关于转置卷积的简约理解
这样,我们就通过将矩阵转置后W.T点乘output,将 2 X 2 还原成了 4 X 4。(个人理解:转置卷积也类似于将低维度转换成高维度操作,所以命名为转置卷积,实际上,转置卷积的参数与上一层原始卷积参数没有任何关系,不是简单的转置一下,也是需要通过反向传播学习的)

注意:理解转置卷积时可将此操作看做是普通卷积操作(实际不是),转置卷积只能将 size 还原,无法将参数也还原。

3、转置卷积计算公式

转置卷积是用来增大特征图的分辨率的,其计算公式如下:

​ out_x = (n−1)× stride−2 × p + k

n:输入到转置卷积里的 intput_size

stride:转置卷积核的移动步长

p:填充 0 的个数

k:转置卷积核的大小

在 FCN 中,我们将卷积核的参数初始化为双线性插值的参数值。这样,可以更完好的还原原图像。