提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本文主要记录了人工智能学习中的Transposed Convolution部分内容
(转置卷积)
提示:以下是本篇文章正文内容,下面案例可供参考
本文参考了两位大佬的文章:
抽丝剥茧,带你理解转置卷积(反卷积)
转置卷积(Transposed Convolution)
一、Transposed Convolution
转置卷积又称fractionally-strided Convolution,又或者deconvolution。
注意转置卷积不是卷积的逆运算,他也是一种卷积。
1.1 普通卷积
我们这里先回顾一下普通卷积:
它可以直观的理解为一个带颜色小窗户(卷积核)在原始的输入图像一步一步的挪动,来通过加权计算得到输出特征。 如下图。
但是在计算机实际计算中,它会将卷积核转换为等效的矩阵,将输入转化为向量,然后将其进行卷积操作,这样一来就舍去了滑动这一操作步骤。
再进一步,我们可以将输入拉成向量,将四个卷积核也拉成向量,进行拼接
如下图
在这里,我们记向量化的图像为 I,向量化的卷积矩阵为C, 输出特征向量为 O
则有:
即下图所示
也就是将一个1x16的行向量乘以16x4的矩阵,得到了1x4的行向量。
而转置卷积的思想就是将其翻过来,也就是将一个1x4的向量乘以一个4x16的矩阵已得到一个1x16的行向量。
1.2 转置卷积
根据上面的思想,我们有如下的转置卷积公式:
由此可知,卷积和转置卷积并不是相互之间的逆操作。(这里只考虑padding=0,stride=1的情况)
上述数学公式,如果用之前的例子来表示,那么就如下图所示:
为了在形象化的去理解,我们通过卷积的方式完成上述操作:
类似的,我们将矩阵的列看做是填充后展平的卷积矩阵。
即如下:
对每一个列向量做相似的变换可得:
我们通过卷积操作形象化的进行一次转变:
我们可以发现,原先的卷积核180度翻转了。
下面我们可以通过填充0的方式来将上述过程转变为我们熟悉的卷积操作
二、转置卷积公式
1.在输入特征图元素间填充s-1行、列0(其中s表示转置卷积的步距)
2.在输入特征图四周填充k-p-1行、列0(其中k表示转置卷积的kernel_size大小,p为转置卷积的padding,注意这里的padding和卷积操作中有些不同)
3.将卷积核参数上下、左右翻转
4.做正常卷积运算(填充0,步距1)
转置卷积操作后特征图的大小可以通过如下公式计算:
其中stride[0]表示高度方向的stride,padding[0]表示高度方向的padding,kernel_size[0]表示高度方向的kernel_size,索引[1]都表示宽度方向上的。通过上面公式可以看出padding越大,输出的特征矩阵高、宽越小,你可以理解为正向卷积过程中进行了padding然后得到了特征图,现在使用转置卷积还原到原来高、宽后要把之前的padding减掉。