首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VAE 2纸的实现

VAE 2纸的实现
EN

Stack Overflow用户
提问于 2020-03-27 10:35:36
回答 1查看 1.2K关注 0票数 2

我试图建立一个2阶段的VAE 2+ PixelCNN,如论文所示:“用VAE 2生成多样化的高可信度图像”(https://arxiv.org/pdf/1906.00446.pdf)。我有三个执行问题:

本文提到的

  1. :我们允许层次结构中的每个级别分别依赖于像素。

我理解VAE 2中的第二个潜在空间必须以第一个潜在空间的级联和图像的下采样版本为条件。是这样吗?

  1. 论文“带有PixelCNN解码器的条件图像生成”(https://papers.nips.cc/paper/6527-conditional-image-generation-with-pixelcnn-decoders.pdf)指出:h是一种单热编码,它指定一个类,这相当于在每一层添加一个类相关的偏差。

据我所知,这个条件是以一维张量的形式进入的,它通过卷积注入到偏置中。现在对于一个2阶段的条件PixelCNN,需要对类向量施加条件,但也需要对前一阶段的潜在代码进行条件化。我看到的一种可能性是附加它们并提供一个三维张量。有没有人能找到其他方法来做到这一点?

  1. ,损失和优化在两个阶段不变。一个简单地将每个阶段的损失加到一个优化的最终损失中。对吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-01 15:29:21

与论文作者之一讨论时,我收到了所有这些问题的答案,并在下面分享了这些问题。

问题1

这是正确的,但是图像的下采样是用条纹卷积而不是非参数调整实现的。这可以作为编码器体系结构的一部分吸收到这样的内容中(每个变量后面的数字表示它们的空间昏暗,例如h64是B、64、64、D等等)。

代码语言:javascript
复制
   h128 = Relu(Conv2D(image256, stride=(2, 2)))
   h64 = Relu(Conv2D(h128, stride=(2, 2)))
   h64 = ResNet(h64)

现在,为了获得h32和q32,我们可以:

代码语言:javascript
复制
   h32 = Relu(Conv2D(h64,  stride=(2, 2)))
   h32 = ResNet(h32)
   q32 = Quantize(h32)

这样,梯度就会一直流回图像,因此我们在h32和image256之间有一个依赖关系。

在任何地方,您都可以使用1x1卷积来调整最后一个维度(特征层)的大小,对下采样使用条纹卷积,对于上采样空间维可以使用跨距转换卷积。因此,对于这个量化底层的示例,您需要首先在空间上对q32进行采样,使其成为64x64,并将其与h64结合,并将结果提供给量化器。为了获得更多的表达能力,我们还在中间插入了一个剩余堆栈。看起来是这样的:

代码语言:javascript
复制
    hq32 = ResNet(Conv2D(q32, (1, 1)))
    hq64 = Conv2DTranspose(hq32, stride=(2, 2))
    h64 = Conv2D(concat([h64, hq64]), (1, 1))
    q64 = Quantize(h64)

问题2

原始的PixelCNN论文还描述了如何利用卷积来进行空间调理。将类嵌入作为全局条件来处理和附加不是一个好主意。您想要做的是应用一个转置卷积来对齐空间维,然后用1x1卷积将特征维与隐藏的像素表示匹配,然后再添加它。

问题3

把他们分开训练是个好主意。除了隔离损失等,并能够为每个阶段调整适当的学习速度,您还可以使用您的GPU/TPU的每个阶段的全部内存容量。这些前科做得越来越好,规模更大,所以最好不要否认这一点。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60884274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档