【概述】为高分辨率图像合成训练Transformers
卷积方法的效率与transformers的表现力。
Created on February 25|Last edited on July 12
Comment
该报告概述了论文“为高分辨率图像合成训练Transformers”。论文解决了使用transformers的表现力进行高分辨率图像合成的重大挑战。所提出的方法将图像表示为感知丰富的图像成分的组成,并进而利用transformers在高分辨率图像内有效地对其组成进行建模。
Run set
1
导言
卷积神经网络(CNN)是视觉任务的首选模型。这是因为CNN表现出很强的局部偏差(由于使用了kernels),并且由于使用共享权重而偏向空间不变性(kernels扫描了整个图像)。
与CNN相比,transformers不包含优先考虑局部相互作用的诱导偏差,从而使它们能够学习输入之间的复杂关系,换句话说,使其具有表达力。然而,这对于长期序列来说计算成本很高。transformers表达力的提高伴随着计算成本的二次增加。
Esser等人 (2021)通过结合CNN的有效性和transformers的表现力展示了高分辨率的图像合成。
关于Generative Models的一些讨论
给定x≈pdata(x),其中pdata(x)是描述数据集X的真实分布,数据集由该分布中的有限样本组成,
生成任务是找到这样一个模型:t .。 θ是模型参数。

我们可以区分两种主要类型的Generative Model:
- 基于可能性的(显式)模型:这些模型提供数据分布的“显式”参数规范,并具有易于处理的似然函数。例如,Variational Autoencoders(VAE)和自回归模型。
- 隐式模型:这些模型没有指定数据本身的分布,而是定义了一个随机过程,该过程经过训练后旨在从基础数据分布中抽取样本。例如,Generative Adversarial Models(GAN)。
以下关键思想有助于对论文有更好理解:
- 隐式的GAN难以评估,通常无法覆盖数据的所有“模式”,因此更容易导致模型崩溃。
- 基于可能性的方法可以优化训练数据的负对数可能性(NLL),从而可以更轻松地进行模型比较并更好地归纳到看不见的数据。然而,像素空间中的可能性最大化是有挑战性的并且在计算上是昂贵的。
- 在自回归模型中,我们假设示例x∈X可以表示为序列xi。使用给定的概率链规则将分布分解为条件乘积: 。该模型基于前一个x <i预测下一个xi。图像生成已成功地转换为自回归序列生成或转换问题。 (来源)
Run set
1
方法概述
以前将transformers应用于图像生成的工作展示了对于尺寸达64x64像素的图像很有希望的结果,但是由于序列长度导致成本成倍增加,因此无法扩展到更高的分辨率。因此,要使用transformers合成更高分辨率的图像,我们需要巧妙地表示图像的语义。使用像素表示是行不通的,因为如果图像分辨率提高2倍,像素数量会以平方的方式增加。
Vector Quantized Variational Autoencoder(VQ-VAE)
- encoder网络输出离散而不是连续的代码(图像的latent表示)。
- 先验是学习得到的,而不是静态的多元正态分布。
您可以在我的报告《使用W&B进行深度生成建模》中了解有关VAE的更多信息。但是,这项工作是VQ-VAE2的更自然的演变,表明在自回归生成建模的背景下,representation learning非常强大。

VQ-VAE包括一个将观测值(图像)映射到一系列离散潜在变量的encoder(the)和一个从这些离散变量重构观测值的decoder()。他们使用共享的codebook。codebook由 给出。在此,K是codebook中离散代码矢量的大小, i是每个代码ei的维数, . VQ-VAE。
如图2所示,图像x通过 生成 。然后根据其与代码向量ei的距离对其进行量化,以使每个向量 .被codebook中最近的代码向量的索引所取代。decoder将其用于重建。量化由下式给出:
where
两个最后的要点,
- 量化是不可微的步骤,因此,为了进行端到端训练,重构误差的梯度将通过decoder反向传播,并使用straight-through梯度估计器传播到encoder(从decoder复制梯度到encoder)。
- 除了重建损失外,还使用codebook损失和commitment损失。Codebook损失会使所选代码e接近encoder的输出。commitment损失可确保encoder的输出保持接近所选的 .。
为什么Discrete Latent Representation有效?
Generating Diverse High-Fidelity Images with VQ-VAE-2 这篇文章与Taming Transformers这篇文章有些类似,也使用VQ-VAE-2(对VQ-VAE的改版)。但是为什么discrete representation有效?
这是受图像JPEG有损压缩的启发。 JPEG编码可删除80%以上的数据,而不会明显改变感知的图像质量。其次,训练噪声较小的生成模型往往效果更好。
训练Transformer

图3: 训练Transformer的体系结构设计。
为了保持序列长度小并利用Transformer的表达力,该论文的作者使用了学习表示的离散codebook(从VQ-VAE启发而来),从而一个图像 可以通过codebook条目的空间集合 来表示 ,其中 是代码的维数。
如图3所示,作者使用了VQ-GAN,它是原始VQ-VAE的一种变体,使用了discriminator和perpetual loss,以在压缩率提高时保持良好的感知质量。
这是一个分为两步的训练体系结构设计:
- 训练VQ-GAN和学习量化codebook。
- 使用量化codebook作为对transformer的顺序输入来训练自回归transformer。
训练VQ-GAN
VQ-GAN使用已知的对抗训练程序和基于补丁的鉴别器D进行训练。找到最佳压缩模型 的完整目标是,
其中 是自适应权重。
展开latent code时,此训练过程可大大减少序列长度,从而可以应用功能强大的transformer模型。
为了训练您自己的VQ-GAN,您可以克隆本文的官方GitHub存储库并安装依赖项。该存储库已配备Weights and Biases,因此您可以在W&B仪表板中自动获取所有必要的指标。作者明确提到了数据准备步骤。训练VQ-GAN:
python main.py --base configs/faceshq_vqgan.yaml -t True --gpus 0,
您可以根据选择的数据集选择其他.yaml文件。
训练Transformer
借助训练的encoder和decoder,我们现在可以根据其编码的codebook索引来表示图像。图像x上的这种量化编码由 给出。通过将该编码表示为来自codebook的索引序列 ,该编码序列是通过将每个代码替换为其在codebook Z中的索引而获得的,, 使得 。现在可以将序列s映射回相应的codebook条目,并可以获得解码后的图像 。
使用此序列,可以将图像生成化为自回归的下一个索引预测。给定索引s <i,transformer学习预测可能的下一个索引的分布,即 ,以计算完整表示为 的可能性。因此,目标函数是使数据表示的对数可能性最大化。这是一篇关于可能性的非常不错的文章。
如果用户可以控制生成过程,则任何图像生成系统都是有用的。图像生成可以有附加信息作为条件,例如类别标签(如上所示)或部分图像。然后的任务是在给定信息c的情况下学习序列的可能性:
使用训练的VQ-GAN,调整config key的检查点路径
model.params.first_stage_config.params.ckpt_path in configs/faceshq_transformer.yaml
然后运行:
python main.py --base configs/faceshq_transformer.yaml -t True --gpus 0,
生成高分辨率图像
随着序列长度的增加,训练transformer的计算成本呈二次方增加,这限制了序列长度。因此,要生成百万像素级的图像,作者必须逐块工作并裁剪图像,以在训练期间将s的长度限制为最大可行的大小。
为了采样图像,以滑动窗口的方式使用了transformer。

图4: 滑动attention窗口
只要数据集的统计信息在空间上近似不变或空间条件信息可用,VQ-GAN确保可用上下文仍对图像进行建模。
在下面显示的媒体面板中,单击⚙️,然后使用滑块来可视化如何使用滑动窗口合成高分辨率图像。
Run set
1
结果
Run set
1
Run set
1
扩展阅读和结论
本报告的目的是对论文进行总结,以使读者更容易理解。我在某些地方使用了论文的原文,为了更好传达信息。
以下是一些您可能会感兴趣的扩展阅读。
Add a comment
Iterate on AI agents and models faster. Try Weights & Biases today.