关于转置卷积的简约理解
本文仅做记录使用,若有抄袭,请留言删除
本文思想及图片引用于
[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 中,我们将卷积核的参数初始化为双线性插值的参数值。这样,可以更完好的还原原图像。