1. 转置卷积
转置卷积(Transposed Convolution)也叫Fractionally-strided Convolution和Deconvolution,但用的最多的是Transposed Convolution。
注意:
- 转置卷积不是卷积的逆运算,只会大小恢复为原本大小。
- 转置卷积也卷积,也需要卷积核
1.1 转置卷积的作用
转置卷积的作用是进行上采样upsampling,增大图像。
2. 转置卷积的执行过程
输入为2x2的特征图,但会在周围填充0,卷积核的大小为3x3,最终得到一个4x4的特征图,这是一个上采样的过程。
stride=1,padding=0。
2.1转置卷积的运算步骤
首先一些参数的介绍:
- stride( s s s):步长
- kernel size( k k k):卷积核大小
- padding( p p p):填充大小
下面是运算的步骤:
- 首先在元素间填充 s − 1 s-1 s−1 行和列的0
- 然后在特征图四周填充 k − p − 1 k-p-1 k−p−1行和列的0
- 然后对卷积核进行转置,也就是上下左右翻转。注意:转置的卷积核一般是进行之前进行卷积操作(下采样)的卷积核。
- 最后进行正常的卷积(一般不进行填充,步长为1)
输出的特征图的大小的计算方式如公式所示,其中索引
[
0
]
[0]
[0]代表高度方向的数值,索引
[
1
]
[1]
[1]代表宽度方向的数值。
下图是例子(忽略偏移),其中s=1,p=0,k=3。因此:元素间不填充,特征图四周填充3-0-1=2行与列。
最后使用经过转置的卷积核进行卷积,步长为1。
输出特征图的高=(2-1)x1-2x0+3=4;宽=(2-1)x1-2x0+3=4
2.2 运算例子
①
s
=
2
,
p
=
0
,
k
=
3
s=2,p=0,k=3
s=2,p=0,k=3
在元素间填充2-1=1个0;然后在特征图之间填充3-0-1=2 行和列的0
输出的特征图高=(2-1)x2-2x0+3=5;宽=(2-1)x2-2x0+3=5
②
s
=
2
,
p
=
1
,
k
=
3
s=2,p=1,k=3
s=2,p=1,k=3
在元素间填充2-1=1个0;然后在特征图之间填充3-1-1=1 行和列的0
输出的特征图高=(3-1)x2-2x1+3=5;宽=(3-1)x2-2x1+3=5
3. 转置卷积的运行原理
要理解转置卷积的原理,首先要理解普通卷积的执行过程。下面将以一个4x4的特征图与3x3的卷积核为例进行介绍。
3.1普通卷积
这里 s=1,p=0,k=3对特征图进行卷积,得到一个2x2的特征图。
在之前的介绍中,普通卷积的执行过程是一个窗口在不断滑动来得到结果。
但在实际执行中,这种方法是低效。下面介绍另一种计算方法:
方法如图所示,
- 先根据输入特征图、步长、填充与卷积核得到卷积核的等效矩阵。
这些等效矩阵可以通过类似上面的滑动窗口的方法得到,每个等效矩阵对应一次滑动,窗口里的值使用卷积核的值进行替代。
在当前例子中,可以得到4个等效矩阵 - 针对每个等效矩阵,都与输入特征图进行运算:先进行对应位置的相乘,再将所有位置的值进行求和,得到输出特征图中的值。
3.2 转置卷积
上面进行普通卷积时的计算过程可以变为两个矩阵的乘法运算
首先将输入特征图展开为一行,构成矩阵
I
I
I;而每个等效矩阵都展开为一列,然后拼在一起,构成矩阵
C
C
C
然后计算
I
∗
C
I*C
I∗C,就得到了输出特征图展开成行的矩阵
O
O
O。
要注意的是矩阵
C
C
C是不可逆的,因此转置卷积不是普通卷积的逆运算,只能得到一个与输入特征图同等大小的一个结果。
要得到一个与矩阵 I I I同等大小的矩阵 P P P,有两种方法:
① 只需让矩阵
O
O
O右乘矩阵
C
C
C的转置
C
T
C^T
CT即可。矩阵
P
P
P就是将转置卷积的结果展开。
② 将矩阵
O
O
O还原为普通卷积的输出特征图的形式。
而对于
C
T
C^T
CT,由于其最初是将等效矩阵以列方向进行展开并拼接,因此这里将
C
T
C^T
CT的每行还原成矩阵。
而从
C
T
C^T
CT得到的每个矩阵与输出特征图进行对应位相乘并结果相加,得到矩阵
P
P
P的值。
而这个过程中出现了一个有趣的现象:
① 使用等效矩阵
C
T
C^T
CT的第一个矩阵来与矩阵
O
O
O进行运算,其结果为0,也就是矩阵
P
P
P的第一个值。
而图像中的右下角,对输入特征图进行填充后,如果使用绿色矩阵对输入特征图进行卷积操作的话,会得到与前面相同的结果0。
② 接着使用
C
T
C^T
CT的第二个矩阵进行运算,结果为2,也就是矩阵
P
P
P的第二个值。
而绿色矩阵右移一格后再次进行运算,同样得到矩阵
P
P
P的第二个值。
③ 就这样不断计算矩阵
C
T
C^T
CT的矩阵与滑动绿色矩阵,最终发现使用输入特征图
I
I
I与绿色矩阵可以得到矩阵
P
P
P。
而绿色矩阵在输入特征图
I
I
I上进行滑动与运算的过程,其实让绿色矩阵作为卷积核,在步长为1的情况,对输入特征图
I
I
I进行普通卷积。
而且继续观察绿色矩阵,可以发现绿色矩阵就是普通卷积中所使用的卷积核的转置。
4. 总结
通过上面分析,就可以知道为什么通过对输入特征图进行填充、使用转置的卷积核并且使用转置卷积核与输入特征图进行步长=1的普通卷积操作就可以得到结果。