目前多模态任务成为行业热点,本文梳理了较为优秀的多模态文本图像模型:DALL·E、CLIP、GLIDE、DALL·E 2 (unCLIP)的模型框架、优缺点,及其迭代关系。
OpenAI 最近发布了 DALL·E 2 系统,在 AI 界引发了「地震」,该系统能够根据文本描述创建图像。这是 DALL·E 系统的第二个版本,第一个版本是在近一年前发布的。然而,在 OpenAI 内部,DALL·E 2 背后的模型被称为 unCLIP,它更接近于 OpenAI 的 GLIDE 系统,而不是原始的 DALL·E。
对笔者来说,DALL·E 2 系统的冲击力可以与 AlphaGo 相媲美。看起来该模型捕获了许多复杂的概念,并且以有意义的方式将它们组合起来。就在几年前,计算机能否从这样的文本描述中生成图像还是一件难以预测的事情。Sam Altman 在他的博客文章中提到,我们对 AI 的预测似乎是错误的,是需要更新的,因为 AI 已经开始影响创造性的工作,而非只是机械重复的工作。
本文旨在带领读者一览 OpenAI 的文本引导图像生成模型的演变,包括 DALL·E 的第一个和第二个版本以及其他的模型。
DALL·E 演变史
DALL·E 1
DALL·E 的第一个版本是 GPT-3 风格的 transformer 解码器,它可以根据文本输入和可选的图像开头自回归生成 256×256 大小的图像。
你一定见过这些牛油果椅子:
来自原始博客文章。
如果你想了解类似 GPT 的 transformer 的工作原理,请参阅 Jay Alammar 的精彩视觉解释:https://jalammar.github.io/how-gpt3-works-visualizations-animations/
文本由 BPE tokens 编码(最多 256 个),图像由离散变分自编码器 (dVAE) 生成的特殊图像 tokens(其中 1024 个)编码。dVAE 将 256×256 图像编码为 32×32 tokens 的网格,词汇表包含 8192 个可能的值。dVAE 会在生成的图像中丢失一些细节和高频特征,所以 DALL·E 生成图像的特征采用了一些模糊和平滑。
原始图像(顶部)和 dVAE 重建(底部)的比较。图片来自原始论文。
这里使用的 transformer 是有着 12B 大小参数的大模型,由 64 个稀疏 transformer 块组成,内部具有一组复杂的注意力机制,包括:1) 经典的文本到文本注意力掩码机制,2) 图像到文本的注意力,3) 图像到图像稀疏注意力。所有三种注意力类型都合并为一个注意力运算。该模型是在 250M 图像 - 文本对的数据集上训练的。
类似 GPT-3 的 transformer 解码器使用一系列文本 token 和(可选)图像 token(此处为 id 为 42 的单个图像 token)并生成图像的延续(此处为 id 为 1369 的下一个图像 token)
训练后的模型根据提供的文本生成了几个样本(最多 512 个),然后将所有这些样本通过一个名为 CLIP 的特殊模型进行排序,并选择排名靠前的一个作为模型的结果。
原始论文中的几个图像生成示例。
CLIP
CLIP 最初是一个单独的辅助模型,用于对 DALL·E 的结果进行排序。它的名字是 Contrastive Language-Image Pre-Training 的缩写。
CLIP 背后的想法很简单。笔者从互联网上抓取了一个图像 - 文本对数据集(400M 的规模),然后在这样的数据集上训练一个对比模型。对比模型可以给来自同一对的图像和文本产生高相似度得分(因此它们是相似的),而对不匹配的文本和图像产生低分(我们希望在当前训练批次中某个图像和任何其他对的文本之间得到高相似度结果的机会很小)。
该模型由两个编码器组成:一个用于文本,另一个用于图像。编码器产生嵌入(一个对象的多维向量表征,例如一个 512 字节的向量)。然后使用两个嵌入计算点积,并得出相似度得分。因为嵌入会被归一化,所以这个计算相似度得分的过程输出的是余弦相似度。对于指向相同方向的向量(它们之间的角度很小),余弦相似度接近 1,对于正交向量,余弦相似度接近 0,对于相反的向量,余弦相似度接近 -1。
对比预训练过程可视化(图片来自原帖)
CLIP 是一组模型。有 9 个图像编码器、5 个卷积编码器和 4 个 transformer 编码器。卷积编码器是 ResNet-50、ResNet-101 和类似 EfficientNet 的模型,称为 RN50x4、RN50x16、RN50x64(数字越大,模型越好)。transformer 编码器是视觉 Transformer(或称之为 ViT):ViT-B/32、ViT-B/16、ViT-L/14 和 ViT-L/14@336。最后一个在分辨率为 336×336 像素的图像上进行微调,其他的则在 224×224 像素上进行训练。
OpenAI 分阶段发布了程序,首先发布了 ViT-B/32 和 ResNet-50,然后是 ResNet-101 和 RN50x4,然后 RN50x16 和 ViT-B/16 于 2021 年 7 月发布,然后是 RN50x64 和 ViT-L /14 在 2022 年 1 月发布,2022 年 4 月终于出现了 ViT-L/14@336。
文本编码器是一个普通的 transformer 编码器,但具备掩码注意力机制。这个编码器由 12 层组成,每层有 8 个注意力头,总共有 63M 的参数。有趣的是,注意力跨度只有 76 个 token(相比之下,GPT-3 有 2048 个 token,标准 BERT 有 512 个 token)。因此,模型的文本部分只适用于相当短的文本,不能在模型中放入大段文本。由于 DALL·E 2 和 CLIP 大致相同,应该也有相同的限制。
CLIP 预训练之后,可以将其用于不同的任务(有良好基础模型的优势)。
最重要的是,读者可以使用在 DALL·E 中排序好的模型对多个结果进行评分,并选择最好的一个。或者,也可以使用 CLIP 功能在其之上训练自定义分类器,但是目前成功的例子还不是很多。
接下来,可以使用 CLIP 对任意数量的类进行零样本分类(当没有专门训练模型以使用这些类时)。这些类可以在不重新训练模型的情况下进行调整。
简单来说,可以为所需的多个类创建一个描述图片中物体的文本数据集。然后为这些描述生成文本嵌入并将它们存储为向量。当图像用于分类时,使用图像编码器生成图像嵌入,并计算图像嵌入和所有预先计算的文本嵌入之间的点积。选择得分最高的对,其对应的类就是结果。
用于使用 CLIP 进行零样本分类的程序。
零样本分类模型是说并未针对特定类别集训练模型。现在可以选择使用预训练的 CLIP 进行即时工程(与使用 GPT 模型相同),而不是从头开始训练分类器或通过微调预训练的图像模型。
很多人没有想到,也可以使用 CLIP 生成图像(即使它并没有被预设可以这样做)。成功案例包括 CLIPDraw 和 VQGAN-CLIP。
CLIPD 绘制示例。图片来自原论文。
VQGAN-CLIP 及其文本 prompt 的生成示例。图片来自原论文。
该过程简单而美观,与 DeepDream 非常相似。从想要的图像的文本描述和初始图像(随机嵌入、样条线或像素中的场景描述、任何以可区分方式创建的图像)开始,然后运行一个生成图像的循环,加入一些增强以提高稳定性,获得结果图像的 CLIP 嵌入,并将其与描述图像的文本的 CLIP 嵌入进行比较。根据此差异计算损失,并运行梯度下降程序,以此来更新图像、减少损失。经过一些迭代后,可以得到很好地匹配文本描述的图像。创建初始场景的方式(使用样条线、像素、渲染基元、来自 VQGAN 的潜在代码等)会显著影响图像特征。
CLIPDraw 生成过程:从一组随机的 Bezier 曲线开始,优化曲线的位置和颜色,使生成的图形与给定的描述 prompt 最匹配。图片来自原论文。
VQGAN-CLIP 生成过程。图片来自原论文。
CLIP 嵌入并不能捕获所有内容,一些有趣的演示证明了它的弱点。其中一个广为人知的例子是印刷攻击。在这种攻击中,图像上的文本可能导致图像的错误分类。
目前有一些与 CLIP 结构相似的替代模型,例如 Google 的 ALIGN 或华为的 FILIP。
GLIDE
GLIDE,即 Guided Language to Image Diffusion for Generation and Editing,是 OpenAI 推出的文本引导图像生成模型,目前已经击败了 DALL·E,但受到的关注相对较少。它甚至在 OpenAI 网站上也没有专门的帖子。GLIDE 生成分辨率为 256×256 像素的图像。
拥有 3.5B 参数的 GLIDE 模型(但似乎正确的数字是 5B 参数,因为有一个单独的具有 1.5B 参数的上采样模型)比 12B 参数 DALL·E 更受人们的青睐,并且在 FID 得分上也击败了 DALL·E。
来自 GLIDE 的样本。图片来自原始论文。
GLIDE 模型还可以进行微调以执行图像修复,从而实现强大的文本驱动图像编辑,这在 DALL·E 2 中使用。
来自 GLIDE 的文本条件图像修复示例。绿色区域被擦除,模型根据给定的提示填充这个区域。该模型能够匹配周围环境的风格和光线,产生逼真的完成效果。示例来自原论文。
GLIDE 在发布时可以称作「DALL·E 2」。现在,当一个单独的 DALL·E 2 系统发布时(实际上在论文中称为 unCLIP 并且大量使用 GLIDE 本身),我们可以将 GLIDE 称为 DALL·E 1.5 :)
GLIDE 类似于另一种称为扩散模型的模型。简而言之,扩散模型通过扩散步骤链向输入数据添加随机噪声,然后它们会学习逆向扩散过程以从噪声中构造图像。
去噪扩散模型生成图像。
下