反卷积是一种特殊的正向卷积,先按照一定的比例通过补 [公式] 来扩大输入图像的尺寸,接着旋转卷积核,再进行正向卷积。
1,卷积核反转
所谓反转,并不是线性代数中的转置操作,而是上下左右方向的递序操作。反转前后对比如下所示:
2,对输入进行补0操作,补0个数为步长减1,如果步长为1,则不补0
假设反卷积的输入为3x3,步长为2,输出为6x6,补0后的矩阵为5x5
3,对补0后的输入矩阵再做整体补0。
以补0后的5x5输入矩阵作为输入,反转以后的卷积核作为权重,此时的stride参数变为1,按照普通卷积的pad计算方式计算padding的补0位置及个数,得到的补0位置要上下左右各自颠倒一下。
pad_height = max((out_height -1) * stride_height + filter_height - in_height,0)
pad_width = max((out_width -1) * stride_width + filter_width - in_width,0)
pad_top = pad_height /2
pad_bottom = pad_height - pad_top
pad_left= pad_width/2
pad_right= pad_width - pad_left
以步骤2中的参数为例,得到的padding参数为pad_top=1,pad_bottom=2,pad_left=1,pad_right=2,颠倒以后为pad_top=2,pad_bottom=1,pad_left=2,pad_right=1,padding以后的矩阵如下
4,将补0后的矩阵作为输入,反转后的卷积核作为filter,进行步长为1的卷积操作即可完成反卷积的计算。