转置卷积 - 一种特殊的卷积操作
- 卷积不会增大输入的高宽,通常要么不变、要么减半
- 转置卷积则可以用来增大输入高宽
为什么称之为“转置”呢?
- 对于卷积
Y
=
X
✭
W
Y=X✭W
Y=X✭W
- 可以对 W W W构造一个 V V V,使得卷积等价于矩阵乘法 Y ′ = V X ′ Y'=VX' Y′=VX′
- 这里 Y ′ , X ′ Y',X' Y′,X′是 Y , X Y,X Y,X对应的向量版本
- 转置卷积则等价于 Y ′ = V T X ′ Y'=V^TX' Y′=VTX′
- 如果卷积将输入从
(
h
,
w
)
(h,w)
(h,w)变成了
(
h
′
,
w
′
)
(h',w')
(h′,w′)
- 同样超参数的转置卷积则从 ( h ′ , w ′ ) (h',w') (h′,w′)变成 ( h , w ) (h,w) (h,w)
转置卷积是一种卷积
- 它将输入和核进行了重新排列
- 同卷积一般是做下采用不同,它通常用作上采样
- 如果卷积将输入从 ( h , w ) (h,w) (h,w)变成了 ( h ′ , w ′ ) (h',w') (h′,w′),同样超参数下它将 ( h ′ , w ′ ) (h',w') (h′,w′)变成了 ( h , w ) (h,w) (h,w)。
重新排列输入和核
- 当填充为0,步幅为1时
- 将输入填充 k − 1 k-1 k−1( k k k是核窗口)
- 将核矩阵上下、左右翻转
- 然后做正常卷积(填充0,步幅1)
-
当填充为 p p p,步幅为1时
- 将输入填充 k − p − 1 k-p-1 k−p−1( k k k是核窗口)
- 将矩阵上下、左右翻转
- 然后做正常卷积(填充0、步幅1)
正常卷积,输入加padding,输出结果会变大
转置卷积,输入加padding,输出结果会变小
-
当填充为 p p p,步幅为 s s s时
- 在行与列之间插入 s − 1 s-1 s−1行或列
- 将输入填充 k − p − 1 k-p-1 k−p−1( k k k是核窗口)
- 将核矩阵上下、左右翻转
- 然后做正常卷积(填充0、步幅1)
形状换算:
- 输入高(宽)为 n n n,核为 k k k,填充 p p p,步幅 s s s
- 转置卷积: n ′ = s n + k − 2 p − s n'=sn+k-2p-s n′=sn+k−2p−s
- 卷积: n ′ = ⌊ ( n − k − s p + 2 ) / s ⌋ → n ≥ s n ′ + k − 2 p − s n'=\lfloor {(n-k-sp+2)/s}\rfloor\rightarrow n\geq sn'+k-2p-s n′=⌊(n−k−sp+2)/s⌋→n≥sn′+k−2p−s
- 如果让高宽成倍增加,那么 k = 2 p + s k=2p+s k=2p+s
同反卷积的关系
- 数学上的反卷积(deconvolution)是指卷积的逆运算
- 如果 Y = c o n v ( X , K ) Y=conv(X,K) Y=conv(X,K),那么 X = d e c o n v ( Y , K ) X=deconv(Y,K) X=deconv(Y,K)
- 反卷积很少用在深度学习中
- 我们说的反卷积神经网络指用了转置卷积的神经网络
总结:
- 转置卷积是一种变化了输入和核的卷积,来得到上采样的目的
- 不等同于数学上的反卷积操作