最近学习深度学习的过程中,发现网上对于转置卷积的参数理解的文章较少,因此记录下个人的理解,仅供参考,欢迎指出错误,感谢。
卷积层和池化层,通常会减少下采样输入图像的空间维度,增加通道信息。在以像素级分类的语义分割中有使用转置卷积使得输入和输出的图像的空间维度相同,例如FCN(全卷积神经网络),它将全连接层替换成一个转置卷积层,将分类的预测概率保存在通道中。
一个例子介绍转置卷积直观计算效果

如图,输入是一个2 * 2的矩阵
X
X
X,kernel size 是2 *2,padding是0,stride是1,输出一个3 * 3的矩阵Y。
具体计算:
X
i
,
j
X_{i,j}
Xi,j和
K
K
K做乘法,累加到
Y
[
i
:
i
+
k
e
r
n
e
l
s
i
z
e
,
j
:
j
+
k
e
r
n
e
l
s
i
z
e
]
Y[i:i+kernel\ size,j:j+kernel\ size]
Y[i:i+kernel size,j:j+kernel size]。
转置卷积的定义以及计算过程
- 对于卷积
Y
=
X
∗
W
Y=X*W
Y=X∗W
- 可以对 W W W构造一个V,使得卷积等价于计算矩阵乘法 Y 1 = V X 1 Y^{1}=VX^{1} Y1=VX1。
- 这里的 Y 1 Y^{1} Y1, X 1 X^{1} X1是 Y Y Y, X X X对应的向量展开。
- 转置卷积则等价于 Y 1 = V T X 1 Y^{1}=V^{T}X^{1} Y1=VTX1
- 如果卷积将输入从 ( h , w ) (h,w) (h,w)变成 ( h 1 , w 1 ) (h^{1},w^{1}) (h1,w1),则同样的超参数的转置矩阵则从 ( h 1 , w 1 ) (h^{1},w^{1}) (h1,w1)变成 ( h , w ) (h,w) (h,w)。
具体说明
对于一个size为2 * 2 的输入矩阵X,和一个大小为2 * 2 的卷积核
X = [ x 11 x 12 x 21 x 22 ] X = \begin{bmatrix} x_{11}&x_{12} \\ x_{21} &x_{22} \\ \end{bmatrix} X=[x11x21x12x22]
![[公式]](https://i-blog.csdnimg.cn/blog_migrate/651bd5fc93492feccbf6ec12ba01f369.png)
计算输出
Y
Y
Y的具体实现方法为矩阵乘法。
将卷积核表示为稀疏矩阵
v
v
v:
C
=
[
w
11
w
12
0
w
21
w
22
0
0
0
0
0
w
11
w
12
0
w
21
w
22
0
0
0
0
0
0
w
11
w
12
0
w
21
w
22
0
0
0
0
0
w
11
w
12
0
w
21
w
22
]
C = \begin{bmatrix} w_{11} &w_{12} &0 &w_{21} &w_{22} &0 & 0 &0 &0\\ 0 &w_{11} & w_{12} &0 & w_{21} & w_{22} &0 &0 &0\\ 0 &0 &0 &w_{11} &w_{12} &0 & w_{21} &w_{22} & 0 \\ 0 &0 &0 &0 & w_{11} &w_{12} &0 &w_{21} & w_{22} \\ \end{bmatrix}
C=⎣⎢⎢⎡w11000w12w11000w1200w210w110w22w21w12w110w220w1200w21000w22w21000w22⎦⎥⎥⎤
- 每一行向量表示在一个位置的卷积操作,0填充表示卷积核未覆盖到的区域。
将输入
X
X
X 展开为列向量:
X
=
[
x
11
x
12
x
21
x
22
]
T
X = \begin{bmatrix} x_{11} & x_{12} & x_{21} & x_{22} \end{bmatrix}^T
X=[x11x12x21x22]T
则卷积操作可以表示为:
Y
=
V
X
Y= VX
Y=VX
转置卷积则可以表示为:
Y
1
=
V
T
X
1
Y^{1}=V^{T}X^{1}
Y1=VTX1
转置卷积的填充和步长
转置卷积也是一种卷积,它将输入和核进行了重新排序,同卷积不同的是它通常作用上采样。
1 当填充为0步长为1时
- 将输入填充 k − 1 k-1 k−1。
- 将核矩阵上下,左右翻转。
- 之后正常做填充为0,步幅为1的卷积。

2 当填充为 p p p 步幅为1时
- 将输入填充 k − p − 1 k-p-1 k−p−1。
- 将核矩阵上下,左右翻转。
- 之后正常做填充为0,步幅为1的卷积。

3 当填充为 p p p 步幅为 s s s时
- 在行和列之间插入 s − 1 s-1 s−1行或列。
- 将输入填充 k − p − 1 k-p-1 k−p−1。
- 将核矩阵上下,左右翻转。
- 之后正常做填充为0,步幅为1的卷积。

卷积和转置卷积作用后的矩阵尺寸变化
- 当输入的矩阵高宽为n,核大小为k,padding为p,stride为s。
- 转置卷积作用后的尺寸变化: n 1 = s n + k − 2 p − s n^{1} = sn+k-2p-s n1=sn+k−2p−s。如果想让高宽成倍增加,那么 k = 2 p + s k=2p+s k=2p+s。
- 卷积作用后的尺寸变化: n 1 = ⌊ n − k + 2 p + s s ⌋ n^{1} =\lfloor \frac{n-k+2p+s}{s} \rfloor n1=⌊sn−k+2p+s⌋。如果想让高宽成倍减少,那么 k = 2 p + 1 k=2p+1 k=2p+1。