CLIP 模型使用 ViT-H/16 图像编码器,它使用 256×256 分辨率的图像,宽度为 1280,带有 32 个 Transformer 块(它比原始 CLIP 工作中最大的 ViT-L 更深)。文本编码器是一个带有因果注意掩码的 Transformer,宽度为 1024 和 24 个 Transformer 块(原始 CLIP 模型有 12 个 Transformer 块)。尚不清楚文本 transformer 的注意力跨度是否与原始 CLIP 模型中的相同(76 个 token)。
扩散解码器是经过修改的 GLIDE,具有 3.5B 参数。CLIP 图像嵌入被投影并添加到现有的时间步嵌入中。CLIP 嵌入也被投影到四个额外的上下文 token 中,这些 token 连接到 GLIDE 文本编码器的输出序列。保留了原始 GLIDE 的文本条件路径,因为它可以让扩散模型学习 CLIP 未能捕获的自然语言方面(然而,它帮助不大)。在训练期间,10% 的时间用于将 CLIP 嵌入随机设置为零,50% 的时间随机删除文本标题。
解码器生成 64×64 像素的图像,然后两个上采样扩散模型随后生成 256×256 和 1024×1024 的图像,前者具有 700M 参数,后者具有 300M 参数。为了提高上采样的鲁棒性,在训练过程中条件图像被轻微损坏。第一个上采样阶段使用高斯模糊,第二个阶段使用更多样化的 BSR 降级,包括 JPEG 压缩伪影、相机传感器噪声、双线性和双三次插值、高斯噪声。这些模型在目标大小的四分之一的随机图像上进行训练。文本调节不用于上采样模型。
先验根据文本描述生成图像嵌入。作者探索了先验模型的两个不同模型类:自回归 (AR) 先验和扩散先验。两种先验的模型都有 1B 参数。
在 AR 先验中,CLIP 图像嵌入被转换为一系列离散代码,并根据标题进行自回归预测。在扩散先验中,连续嵌入向量直接使用以标题为条件的高斯扩散模型进行建模。
除了标题之外,先验模型还可以以 CLIP 文本嵌入为条件,因为它是标题的确定性函数。为了提高采样质量,作者还通过在训练期间 10% 的时间随机删除此文本条件信息,启用了对 AR 和扩散先验使用无分类器引导的采样。
对于 AR 先验,主成分分析 (PCA) 降低了 CLIP 图像嵌入的维数。1024 个主成分中有 319 个保留了 99% 以上的信息。每个维度量化为 1024 个桶。作者通过将文本标题和 CLIP 文本嵌入编码为序列的前缀来调节 AR 先验。此外,它们在文本嵌入和图像嵌入之间添加一个表征(量化的)点积的 token。这允许在更高的点积上调整模型,因为更高的文本图像点积对应于更好地描述图像的标题。点积是从分布的上半部分采样的。使用带有因果注意掩码的 Transformer 模型预测生成的序列。
对于扩散先验,具有因果注意掩码的仅解码器(decoder-only) Transformer 在由以下成分组成的序列上进行训练:
- 编码的文本
- CLIP 文本嵌入
- 扩散时间步长的嵌入
- 噪声 CLIP 图像嵌入
- 最终的嵌入,其来自 Transformer 的输出用于预测无噪声 CLIP 图像嵌入。
不使用点积来调节扩散先验。相反,为了提高采样时间的质量,生成了两个图像嵌入样本,并选择了一个具有更高点积和文本嵌入的样本。
对于可比较的模型大小和减少的训练计算,扩散先验优于 AR 先验。在与 GLIDE 的成对比较中,扩散先验也比 AR 先验表现更好。
作者还对先验的重要性进行了调查。他们尝试使用不同的信号来调节相同的解码器:1、文本标题和零 CLIP 嵌入,2、文本标题和 CLIP 文本嵌入(就好像它是图像嵌入一样),3、由先验生成的文本和 CLIP 图像嵌入。仅根据标题对解码器进行调节显然是最差的,但对文本嵌入零样本进行调节确实会产生符合期望的结果。
使用不同的调节信号,图片来自原文。
在训练编码器时,作者以相同的概率从 CLIP 和 DALL-E 数据集(总共约 6.5 亿张图像)中采样。在训练解码器、上采样器和之前的模型时,他们只使用了 DALL-E 数据集(大约 2.5 亿张图像),因为在训练生成堆栈时合并了噪声更大的 CLIP 数据集,从而在初始评估中对样本质量产生了负面影响。
模型总大小似乎是:632M?参数(CLIP ViT-H/16 图像编码器)+ 340M?(CLIP 文本编码器)+ 1B(扩散先验)+ 3.5B(扩散解码器)+ 1B(两个扩散上采样器)=~ 大约 6.5B 参数(如果我没记错的话)。
这个方法允许基于文本描述生成图像。然而,其他一些有趣的应用也是可能的。
原论文中的示例。
每个图像 x 可以被编码成一个二分 latent 表示 (z_i, x_T),这足以让解码器产生准确的重建。latent z_i 是一个 CLIP 图像嵌入,它描述了 CLIP 识别的图像方面。latent x_T 是通过使用解码器对 x 应用 DDIM(去噪扩散隐式模型)反演获得的,同时以 z_i 为条件。换句话说,它是在生成图像 x(或等效为 x_0,参见 GLIDE 部分中的去噪扩散模型方案)时扩散过程的起始噪声。
这种二分表示可以实现三种有趣的操作。
首先,你可以通过在解码器中使用 η > 0 的 DDIM 进行采样,为给定的二分潜在表示 (z_i, x_T) 创建图像变体。当 η = 0 时,解码器变得具有确定性,并将重建给定的图像 x。η 参数越大,变化越大,我们可以看到在 CLIP 图像嵌入中捕获了哪些信息并呈现在所有样本中。
探索图像的变化。
其次,你可以在图像 x1 和 x2 之间进行插值。为此,你必须采用 CLIP 图像嵌入 z_i1 和 z_i2,然后应用 slerp(球面线性插值)来获得中间 CLIP 图像表示。对应的中间 DDIM latent x_Ti 有两个选项:1)使用 slerp 在 x_T1 和 x_T2 之间进行插值,2)将 DDIM latent 固定为轨迹中所有插值的随机采样值(可以生成无限数量的轨迹)。以下图像是使用第二个选项生成的。
探索两个图像的插值。
最后,第三件事是语言引导的图像操作或文本差异。为了修改图像以反映新的文本描述 y,你首先获取其 CLIP 文本嵌入 z_t,以及描述当前图像的标题的 CLIP 文本嵌入 z_t0(可能是像「照片」这样的虚拟标题或一个空的标题)。然后计算文本差异向量 z_d = norm(z_t - z_t0)。然后使用 slerp 在嵌入 z_i 的图像 CLIP 和文本差异向量 z_d 之间旋转,并在整个轨迹中生成具有固定基本 DDIM 噪声 x_T 的图像。
探索文本差异,来自原文中。
作者还进行了一系列实验来探索 CLIP 潜在空间。先前的研究表明,CLIP 容易受到印刷攻击。在这些攻击中,一段文本覆盖在一个对象的顶部,这导致 CLIP 预测文本描述的对象而不是图像中描述的对象(还记得带有 “iPod” 横幅的苹果吗?)。现在,作者尝试生成此类图像的变体,发现尽管图像正确分类的概率非常低,但生成的变体以很高的概率是正确的。尽管该标题的相对预测概率非常高,但该模型从未生成 iPod 的图片。
印刷攻击案例。
另一个有趣的实验是用越来越多的主成分重建图像。在下图中,他们获取了少量源图像的 CLIP 图像嵌入,并以逐渐增加的 PCA 维度重建它们,然后使用带有 DDIM 的解码器将重建的图像嵌入可视化。这允许查看不同维度编码的语义信息。
越来越多的主成分,来自原始论文。
还要记住 unCLIP 在属性绑定、文本生成和复杂场景中的细节方面遇到的困难。
前两个问题可能是由于 CLIP 嵌入属性。
可能会出现属性绑定问题,因为 CLIP 嵌入本身并没有将属性显式绑定到对象,因此解码器在生成图像时会混淆属性和对象。
另一组针对难绑定问题的重构,来自原文。
文本生成问题可能是因为 CLIP 嵌入没有精确编码渲染文本的拼写信息。
由于解码器层次结构以 64×64 的基本分辨率生成图像然后对其进行上采样,可能会出现低细节问题。因此,使用更高的基本分辨率,问题可能会消失(以额外的训练和推理计算为代价)。
我们已经看到了 OpenAI 基于文本的图像生成模型的演变。也有其他公司在这个领域展开工作。
DALL·E 2(或 unCLIP)是对系统的第一个版本 DALL·E 1 的巨大改进,仅用了一年时间。不过,它还有很大的提升空间。
遗憾的是,这些强大而有趣的模型一直未开源。作者希望看到更多这样的模型被发布或至少通过 API 提供。否则,所有这些成果都只能适用于一些非常有限的受众。
不可否认,此类模型可能存在误差,有时会产生不正确类型的内容,或被恶意代理使用。作者呼吁人们有必要讨论如何处理这些问题。这些模型有无数潜在的良好用途,但未能解决上述问题阻碍了这些探索。
作者希望 DALL·E 2(或其他类似模型)能很快通过开放的 API 来使得所有人都可以使用。