Up-sampling with Transposed Convolution(转置卷积上采样)

虽然之前发过一篇转载类型的博客:
你想到的卷积类型这里都有,在里面的上篇有介绍转置卷积,但是他那篇的参考博客是国外的,一般看不了,我在这里就翻译一下,对自己加深印象也是好的。
在这里也给出原博客链接:
https://medium.com/activating-robotic-minds/up-sampling-with-transposed-convolution-9ae4f2df52d0
可以打开的也可以看看。


如果你曾经听说过转置卷积(transposed convolution)并对它感到很迷惑,那可以来看一下这篇文章。这篇文章的内容如下:

  • 上采样的需要
  • 为什么需要转置卷积?
  • 卷积操作
  • 逆向回去
  • 卷积矩阵
  • 转置卷积矩阵
  • 总结

在我的Github上也有jupyter notebook对应部分。

上采样的需要

当我们使用神经网络去生成图像,通常会涉及到上采样操作,也就是从低分辨率到高分辨率。


上采样示意图

有不同的方法可以进行上采样:

  • 最近邻插值(Nearest neighbor interpolation)
  • 双线性插值(Bi-linear interpolation)
  • 双立方插值(Bi-cubic interpolation)

这些方法都涉及到一些插值的方法,所以我们在决定网络架构的的时候我们需要去选择一种。这有点像人工的特征工程(feature engineering),并且这个过程中网络没有网络可以学习的。

为什么需要转置卷积?

如果我们想要我们的网络学习怎样最优地进行上采样,我们能够使用转置卷积(transposed convolution)。它不使用预先定义的插值方法,它有可学习的参数。

去理解转置卷积是非常有用的,因为它被使用在重要的论文和项目中,例如:

  • DCGAN中的生成器(generator)就把随机采样的值产生出一个full-size的图像;
  • 语义分割领域,在编码阶段就会使用卷积层来提取特征,然后在解码阶段又把特征恢复到原图大小,因此就可以将原图中的每一个像素都进行分类。

供参考(FYI):转置卷积也被称作:

  • 小数步长的卷积(fractionally strided convolution)
  • 反卷积(deconvolution)

在这篇文章里面,我们只使用转置卷积这个名称,但是你在别的文章里面可能会注意到别的名字。

卷积操作

让我们用一个简单的例子来解释一下卷积操作是怎么进行的。假设我们有一个4x4的矩阵,在其上使用3x3的核应用一个卷积操作,没有补零操作,步长设为1。如下图所示,结果是一个2x2的矩阵:


卷积操作

卷积操作就是计算输入矩阵和卷积核矩阵之间逐元素的乘积然后加和。因为我们没有补零,步长为1,我们只能做这样的操作4次,因此输出的矩阵就是2x2的。
逐元素乘积求和

<font color=red size=4>一个重要的点就是:这样的卷积操作,在输入值和输出值之间存在位置连接关系的</font>
例如,输入矩阵的左上方的值就会影响输出矩阵的左上方的值。

更确切地说就是,3x3的卷积核用来连接输入矩阵中的9个值和输出矩阵中对应的1个值。一个卷积操作形成了一个多对一的关系。让我们把这个观念牢记在心,因为之后我们还需要用到它。

逆向回去

现在,假设我们想要从另一个方向进行。我们想把一个矩阵中的1个值关联到另一个矩阵中的9个值。现在就是一个一对多的关系。这就像卷积操作的反向,这就是转置卷积的核心想法。
举个例子,我们把一个2x2的矩阵上采样到一个4x4的矩阵。这个操作就维持着1-to-9的关系。

卷积的逆向回去

但是我们怎么实现这样的操作呢?
在讲怎样实现之前,我们需要定义卷积矩阵(convolution matrix)和转置卷积矩阵(transposed convolution matrix)。

卷积矩阵

其实我们可以用一个矩阵来表达卷积操作。只要重排一下核矩阵,我们就能用矩阵相乘来实现卷积操作。


3x3的卷积核

我们把这个3x3的卷积核重排成4x16的矩阵,就像下面这样:

卷积矩阵

这就是卷积矩阵(就是核矩阵重排后的矩阵)。每一行都定义了一个卷积操作。如果你没有看出来,下面这幅图会帮助你。卷积矩阵的每一行就是把核矩阵重排,然后在不同的位置进行补零。
卷积矩阵的每一行

为了使用这个卷积矩阵,我们把4x4的输入矩阵展平成一个列向量(16x1)。
把输入矩阵展平

我们把4x16的卷积矩阵和展平后的16x1的输入矩阵(也就是个16维的列向量)进行矩阵相乘:


矩阵相乘实现卷积操作

输出的4x1的矩阵能够reshape成一个2x2的矩阵,这和我们上面的结果一致。


输出矩阵reshape

总的来说,一个卷积矩阵就是一个重排的核参数,并且卷积操作可以被表达为矩阵相乘。

那又怎么样?

关键点在于用了卷积矩阵,你就能从16(4x4)变到4(2x2),因为卷积矩阵是4x16的。那么,如果你有一个16x4的矩阵,那你就能从4(2x2)变到16(4x4)。

想不通了嘛?

接着看吧!!

转置卷积矩阵

我们需要从4(2x2)变到16(4x4),那我们就得使用16x4的矩阵。并且我们想要维持这个1 to 9的关系。
我们记卷积矩阵为C(4x16),它的转置记为C.T(16x4)。我们能够把这个转置后的矩阵C.T(16x4)和一个4x1的列向量进行矩阵相乘得到一个16x1的输出矩阵。这个转置的矩阵就把1个值联系到输出中的9个值。


通过矩阵相乘的卷积

输出能够reshape成4x4的;


输出矩阵reshape成4x4

刚刚,我们就把一个小一点的2x2的矩阵上采样成一个大一点的4x4的矩阵。其中转置卷积就维持了这种1对9的关系(由于权重矩阵的排列形似达到的)。

注意一下:事实上之后的权重值并不来自于原初的卷积矩阵。重要的是,之后的权重值的排列是之前卷积矩阵的一个转置形式。

总结

转置卷积操作组成了如正常卷一样的连接关系,只不过是一个反向的操作。

我们可以利用转置卷积进行上采样,并且,转置卷积矩阵中的权值是可以学习的,所以我们不需要一个预先定义的插值方法。

尽管它叫做转置卷积,但它并不是我们把之前存在的卷积矩阵进行转置并拿来使用。关键的点是,转置卷积过程和一个标准的卷积操作相比,输入和输出是以不同的方式进行处理的(一对多而不是多对一的联结)。

同样的,转置卷积不能算是卷积。但是我们能够用一个卷积来模仿转置卷积。你也可能会发现一些文章是这样来解释转置卷积的(这个我看到的地方我会再加进来):我们通过在输入矩阵的值之间加零进行上采样,然后在其上用一个直接的卷积操作来达到和转置卷积一样的效果。然而,这样由于在卷积之前通过加零对输入上采样,会更加低效率。

One caution:在生成图像是,转置卷积是造成棋盘效应(checkerboard artifacts)的起因。这篇文章推荐了一种上采样操作(如一种插值方法),借着一个卷积操作就能减小这样的问题。如果你的目的是为了生成没有棋盘效应的图像,那篇文章值得一读。

参考文献

[1] A guide to convolution arithmetic for deep learning
Vincent Dumoulin, Francesco Visin
https://arxiv.org/abs/1603.07285

[2] Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks
Alec Radford, Luke Metz, Soumith Chintala
https://arxiv.org/pdf/1511.06434v2.pdf

[3] Fully Convolutional Networks for Semantic Segmentation
Jonathan Long, Evan Shelhamer, Trevor Darrell
https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf

[4] Deconvolution and Checkerboard Artifacts
Augustus Odena, Vincent Dumoulin, Chris Olah
https://distill.pub/2016/deconv-checkerboard/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343