卷积与反卷积的理解

反卷积,又称转置卷积,经常用于上采样。

1. 多对一和一对多

常规卷积将输入矩阵中多个元素映射到输出矩阵中的一个元素,属于“多对一”的关系;

反卷积则是将输入矩阵中的一个元素映射到输出矩阵中的多个元素(即:输出矩阵中,有多个元素都跟输入矩阵中这一个元素有关),属于“一对多”的关系;

之所以称反卷积为转置卷积,是因为从矩阵运算的角度来看,反卷积的卷积矩阵的形状恰好是常规卷积的卷积矩阵形状的转置;

 2. 卷积矩阵与反卷积矩阵

卷积矩阵,是为了用矩阵运算的方式来描述卷积过程,将卷积核进行重拍列,所形成的的一个矩阵。

举例说明:

对于卷积核(红色方块),每次滑动一个步长,与输入矩阵进行点乘运算,相当于在不参与运算的位置填充为0,把卷积核扩大为与输入矩阵尺寸一致,然后将扩大后的卷积核和原始矩阵进行点乘运算;滑动多少次,则相当于做了多少次这样的操作。

因此,将上述卷积核滑窗计算的过程总结为一个矩阵,就变为了如下形式:

上图需要仔细体会并理解,其中每一行就代表了卷积核和原图的每一次运算时,卷积核实际参与时的样子;而填充0的地方,代表了本次运算,卷积核所没有参与的位置

同样,对于输入矩阵,也需要拉直为一维向量: 

 由此,卷积过程就变为了:

 将右边的4*1的向量,reshape到2*2,就是正常卷积过程的输出矩阵了。

那么,对于反卷积,我们只需将卷积矩阵进行转置,然后再与需要上采样的输入矩阵(小矩阵,这里的例子是2*2)拉直后的向量相乘,即可得到上采样的结果(反卷积输出,这里的例子中是4*4),如图:

 上图右边结果是16*1的向量,reshape到4*4,即为反卷积得到的上采样结果,尺寸与正常卷积中的输入矩阵一样。

但是,需要注意的一点是:反卷积并非常规卷积的逆过程。如果对常规卷积的输出进行反卷积,只能得到与常规卷积输入矩阵大小一样的矩阵,但里面的元素却不一定相同

反卷积的卷积核,在CNN网络中,是可学习的,因此,经过训练,反卷积会学会如何得到我们想要的结果。比如,在语义分割中,会学习如何得到各个像素的所属类别。

* 图片来自:https://medium.com/@naokishibuya/up-sampling-with-transposed-convolution-9ae4f2df52d0

猜你喜欢

转载自blog.csdn.net/oYeZhou/article/details/108492305