简介
转置卷积也被称为反卷积,常被用用于CNN中的上采样操作,比如分割任务,或GAN网络中。反卷积并不是常规卷积的完全逆操作,反卷积也起不到根据输出特征以及对应的卷积核,恢复原始输出的作用,它最多的作用就是有可学习参数的上采样操作,仅此而已。
同时,反卷积操作并没有把正向卷积输出,对应的卷积核拿过来做转置使用,而是多了几个卷积核而已。
此外,即便是把正向卷积输出对应的卷积核拿过做反卷积,它也恢复不出来原来的参数,恢复原来参数这种操作看起来并没有太大意义,因为只是想做上采样而已。
这里与常规卷积的区别主要体现在:
- 特征图的宽高尺寸变化与常规卷积相反
- 常规卷积核的转置
所以实际上,反卷积是先按照一定的比例差值 来扩大输入图像的尺寸,再进行正向卷积的过程。
反卷积计算
输入特征图尺寸:
h
i
=
3
h_{i}=3
hi=3,
w
i
=
3
w_{i}=3
wi=3
卷积核尺寸:
h
k
=
3
h_{k}=3
hk=3,
w
k
=
3
w_{k}=3
wk=3
步长:
s
=
2
s=2
s=2
padding:单边
p
=
1
p=1
p=1
期望输出特征尺寸:
h
o
=
5
h_{o}=5
ho=5,
w
o
=
5
w_{o}=5
wo=5
上面这些参数能完整的体现一个反卷积的过程,那么下面是具体的过程
输入特征图插值计算
对于一个输入为 h i = 3 h_{i}=3 hi=3, w i = 3 w_{i}=3 wi=3的特征图,反卷积首先需要对输入进行插值,这就涉及到三个问题:
- 在哪里补?
- 补多少?
- 补什么?
插值一般都是插入0,因为特征图的输入为尺寸为
h
i
h_{i}
hi,
w
i
w_{i}
wi,那么就有
h
i
−
1
h_{i}-1
hi−1,
w
i
−
1
w_{i}-1
wi−1位置可以插入0,每个位置插入0的个数为
s
−
1
s-1
s−1个,插值后特征图就变成了:
h
n
i
=
h
i
+
(
h
i
−
1
)
(
s
−
1
)
=
5
h_{ni}=h_{i}+(h_{i}-1)(s-1)=5
hni=hi+(hi−1)(s−1)=5
w
n
i
=
w
i
+
(
h
i
−
1
)
(
s
−
1
)
=
5
w_{ni}=w_{i}+(h_{i}-1)(s-1)=5
wni=wi+(hi−1)(s−1)=5
正向卷积
对新的特征图做正向卷积,正向卷积的实际步长不是2,而是1,之前设置的步长是体现在插值上,反卷积的卷积步长总是为1。
此外,同样需要对输入特征做padding,两边各padding1。
那么按照常规的卷积公式:
h
o
=
(
h
n
i
+
2
p
−
h
k
)
/
1
+
1
=
5
h_{o}=(h_{ni}+2p-h_{k})/1+1=5
ho=(hni+2p−hk)/1+1=5
w
o
=
(
w
n
i
+
2
p
−
w
k
)
/
1
+
1
=
5
w_{o}=(w_{ni}+2p-w_{k})/1+1=5
wo=(wni+2p−wk)/1+1=5
得到了想要的输出。