java二维矩阵怎么进行转置_转置卷积(Transpose Convolution)

转置卷积(Transpose Convolution),一些地方也称为“反卷积”,在深度学习中表示为卷积的一个逆向过程,可以根据卷积核大小和输出的大小,恢复卷积前的图像尺寸,而不是恢复原始值。

卷积操作及转置卷积的定义

对于一个输入大小为

的图像,卷积核大小为

计算输出

的具体实现方法为矩阵乘法。

将卷积核表示为稀疏矩阵

  • 每一行向量表示在一个位置的卷积操作,0填充表示卷积核未覆盖到的区域。

将输入

展开为列向量:

则卷积操作可以表示为:

  • 输出向量
    的大小为
    的列向量,改写为矩阵即为

转置卷积则是将

中的输入输出互换:

  • 表示矩阵转置,此时大小为
  • 即由
    的输入
    ,经过转置卷积,得到输出大小为
    的列向量
    ,此时的
    数值上已经和原来不同,只是在形状上一致。

stride=1转置卷积的理解

一维形式

对于输入

,卷积核
,令stride=1,则:

,转置卷积结果:

考虑一个新的卷积过程,令stride=1:

这样能得到和转置卷积相同的结果。其实就是为转置卷积的输入

添加额外的padding,而卷积核则是镜像翻转的。这里仍然是比较元素位置关系的对应,不考虑数值。

这样的理解有什么用呢?

由于转置卷积的卷积核也是可learning的,在给定了输入和卷积核的大小后,我们可以将转置卷积看做是有padding的普通卷积。也就是说,所谓的转置卷积,等价于普通卷积,无非是padding较大时,可以达到上采样的效果。

二维形式

考虑上文二维卷积的矩阵

令转置卷积输入

,对应向量

则转置卷积结果:

这等价于输入padding = 1的输入

和水平和竖直方向镜像翻转的卷积核

之间进行普通卷积的结果。

对应于下面的图像(这里的卷积核大小和举例不一样):

0c7a4259eec8107ce1b262bc5a04d70c.gif

公式计算

对于

的普通卷积,等价的转置卷积的输出大小为:

同时要求转置卷积的输入添加
  • 即转置卷积实现输出变大是卷积核的影响。

转置卷积的输入图像如果再添加额外的padding,可以看做无padding的图像来计算,即先按上面的公式计算出有padding的输入图像大小

,再减去padding值还原尺寸,得到:

此时,相当于减小了输入的padding,有

相当于进行了一个center crop,卷积核和输入图像起始时非零元素的范围大于1×1:

3f3cc8f69bc36f19b84f82347f21d143.gif

stride>1转置卷积的理解

一维形式

对于输入

,卷积核
,令stride=2,则:

,转置卷积结果:

考虑一个新的卷积过程,令stride=1:

和转置卷积是等价的。

此时输入

上产生了空洞(p、q之间),同时为转置卷积的输入
添加额外的padding,卷积核是镜像翻转的。

二维形式

对于输入为

的图像,卷积核大小为
,stride = 2,padding=0,卷积后输出大小为

设卷积核为

,由于稀疏矩阵太大了就不再书写。

转置卷积时,设输入

,则转置卷积结果为:

同样等价于输入添加空洞,额外padding,卷积核水平竖直翻转的普通卷积:

28454379c83e9db4da85e77793124584.png

对应的gif图像:

aadd4cb2d8790d93e523f7b38c8e6ce4.gif

公式计算

对于

的普通卷积,转置卷积的输出大小为:

转置卷积的输入图像需要添加

,相邻像素间的空洞大小为
  • 参数
    显得很重要,可以控制上采样的倍率。

简单推导:

添加空洞后的图像大小为

,根据stride=1的转置卷积,输出大小为:

同样地,padding大于0时,有:

要求

总结

实际使用时,stride>1的情况比较多,可以得到较大的上采样倍率,padding个人觉得没必要仔细研究,先转置卷积得到一个大分辨率的图像,再通过center crop,同样可以精确地恢复尺寸。

参考

  1. A guide to convolution arithmetic for deep learning
  2. https://zhuanlan.zhihu.com/p/48501100
  3. https://github.com/vdumoulin/conv_arithmetic
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值