在人工智能的世界中,图像生成技术无疑是最令人兴奋的领域之一。而在这个领域中,Stable Diffusion模型无疑是其中的佼佼者。AI科普作者Jay Alammar通过超高质量图解,对Stable Diffusion模型的奥秘进行了深入的探索和讲解。
原文地址:The Illustrated Stable Diffusion
译文如下:
Stable Diffusion图示
人工智能图像生成是最新的人工智能功能,令人惊叹不已(包括我的)。从文本描述中创造出引人注目的视觉效果的能力具有神奇的品质,并清楚地表明人类创造艺术的方式发生了转变。Stable Diffusion的发布是这一发展的一个明显的里程碑,由于它为大众提供了一个高性能模型(图像质量、速度、相对较低的资源/内存要求和不错的性能)。 在尝试了人工智能图像生成之后,您可能会开始想知道它是如何工作的。 这是对Stable Diffusion如何工作的简单介绍。

添加图片注释,不超过 140 字(可选)
Stable Diffusion具有多种用途,可以以多种不同的方式使用。让我们第一关注仅从文本生成图像(text2img)。上图显示了示例文本输入和生成的图像。除了文本到图像之外,使用它的另一种主要方式是使其改变图像(因此输入是文本+图像)。

添加图片注释,不超过 140 字(可选)
让我们开始深入了解底层,由于这有助于解释组件、它们如何交互以及图像生成选项/参数的含义。 Stable Diffusion的组成部分 Stable Diffusion是一个由多个组件和模型组成的系统。它不是一个单一的模型。 当我们深入了解底层时,我们可以做的第一个观察是,有一个文本理解组件将文本信息转换为捕获文本中的想法的数字表明。

添加图片注释,不超过 140 字(可选)
我们从高级视图开始,我们将在本文后面介绍更多机器学习细节。不过,我们可以说这个文本编码器是一种特殊的 Transformer 语言模型(技术上:CLIP 模型的文本编码器)。它接受输入文本并输出代表文本中每个单词/标记的数字列表(每个标记一个向量)。 然后将该信息呈现给图像生成器,图像生成器本身由几个组件组成。

添加图片注释,不超过 140 字(可选)
图像生成器经历两个阶段: 1-图像信息创建者(Image information creator) 该成分是Stable Diffusion的秘密武器。与以前的型号相比,这在很大程度上提高了性能。 该组件运行多个步骤来生成图像信息。这是Stable Diffusion接口和库中的步骤参数,一般默认为 50 或 100。 图像信息创建者完全在图像信息空间(或潜在空间(latent space))中工作。我们将在本文后面详细讨论这意味着什么。此属性使其比以前在像素空间中工作的扩散模型更快。从技术角度来说,该组件由 UNet 神经网络和调度算法组成。 “扩散”一词描述了该组件中发生的情况。信息的逐步处理最终导致生成高质量图像(由下一个组件,图像解码器)。

添加图片注释,不超过 140 字(可选)
2-图像解码器(Image Decoder) 图像解码器根据从信息创建器获得的信息绘制图像。它仅在过程结束时运行一次以生成最终的像素图像。

添加图片注释,不超过 140 字(可选)
这样我们就可以看到构成Stable Diffusion的三个主要组件(每个组件都有自己的神经网络):
- ClipText用于文本编码。 输入文本。 输出:77 个标记嵌入向量,每个向量有 768 个维度。
- UNet + Scheduler逐步处理/扩散信息(潜在)空间中的信息。 输入:文本嵌入和由噪声组成的起始多维数组(结构化数字列表,也称为张量)。 输出:处理后的信息数组
- 自动编码器使用处理后的信息数组绘制最终图像的解码器。 输入:处理后的信息数组(维度:(4,64,64)) 输出:生成的图像(维度:(3, 512, 512),即(红/绿/蓝,宽度,高度))

添加图片注释,不超过 140 字(可选)
到底什么是扩散(Diffusion)? 扩散是发生在粉色“图像信息创建器”组件内部的过程。有了表明输入文本的标记嵌入和随机起始图像信息数组(也称为潜伏),该过程会生成图像解码器用来绘制最终图像的信息数组。

添加图片注释,不超过 140 字(可选)
这个过程是一步一步发生的。每个步骤都会添加更多相关信息。为了直观地了解该过程,我们可以检查随机潜在数组,并查看它是否转换为视觉噪声。在这种情况下,视觉检查是将其通过图像解码器。

添加图片注释,不超过 140 字(可选)
扩散发生在多个步骤中,每个步骤都对输入潜在数组进行操作,并生成另一个潜在数组,该数组更好地类似于输入文本以及模型从模型所训练的所有图像中获取的所有视觉信息。

添加图片注释,不超过 140 字(可选)
我们可以可视化一组这些潜在变量,以查看每一步添加了哪些信息。

添加图片注释,不超过 140 字(可选)
这个过程看起来超级令人叹为观止。

上传视频封面
好的标题可以获得更多的推荐及关注者
在本例中,第 2 步和第 4 步之间发生了一些特别有趣的事情。轮廓仿佛从噪音中浮现出来。

上传视频封面
好的标题可以获得更多的推荐及关注者
扩散如何运作
使用扩散模型生成图像的中心思想依赖于我们拥有强劲的计算机视觉模型这一实际。给定足够大的数据集,这些模型可以学习复杂的操作。扩散模型通过将问题描述如下来处理图像生成: 假设我们有一张图像,我们生成一些噪声,并将其添加到图像中。

添加图片注释,不超过 140 字(可选)
目前可以将其视为训练示例。我们可以使用一样的公式创建大量训练示例来训练图像生成模型的核心组件。

添加图片注释,不超过 140 字(可选)
虽然此示例显示了从图像(数量 0,无噪声)到总噪声(数量 4,总噪声)的一些噪声量值,但我们可以轻松控制向图像添加多少噪声,因此我们可以将其分散到数十个噪声量中。步骤,为训练数据聚焦的所有图像为每个图像创建数十个训练示例。

添加图片注释,不超过 140 字(可选)
有了这个数据集,我们可以训练噪声预测器,并最终得到一个很好的噪声预测器,它在特定配置下运行时实际上会创建图像。如果您接触过机器学习,那么训练步骤应该看起来很熟悉:

添加图片注释,不超过 140 字(可选)
目前让我们看看如何生成图像。 通过消除噪声来绘制图像 经过训练的噪声预测器可以获取噪声图像和去噪步骤的数量,并且能够预测噪声切片。

添加图片注释,不超过 140 字(可选)
采样的噪声是经过预测的,因此如果我们从图像中减去它,我们会得到一个更接近模型训练图像的图像(不是确切的图像本身,而是分布–像素排列的世界,其中天空一般是蓝色,在地面之上,人有两只眼睛,猫看起来有某种方式——尖尖的耳朵,显然不为所动)。

添加图片注释,不超过 140 字(可选)
如果训练数据集是美观的图像(例如,训练Stable Diffusion的LAION Aesthetics),那么生成的图像往往会美观。如果我们在徽标图像上对其进行训练,我们最终会得到一个徽标生成模型。

添加图片注释,不超过 140 字(可选)
这总结了通过扩散模型生成图像的描述,主要如去噪扩散概率模型中所述。目前您已经有了这种扩散的直觉,您不仅了解Stable Diffusion的主要组成部分,还了解 Dall-E 2 和 Google 的 Imagen。 请注意,我们到目前为止描述的扩散过程在不使用任何文本数据的情况下生成图像。因此,如果我们部署这个模型,它会生成美丽的图像,但我们无法控制它是否是金字塔、猫或其他任何东西的图像。在接下来的部分中,我们将描述如何将文本合并到该过程中,以控制模型生成的图像类型。
速度提升:在压缩(潜在)空间而不是像素图像上扩散(Diffusion on Compressed (Latent) Data Instead of the Pixel Image)
译者:用了潜空间可以提升速度,不过代价是不能在图像里准确显示文字。
为了加速图像生成过程,Stable Diffusion论文不是在像素图像本身上运行扩散过程,而是在图像的压缩版本上运行扩散过程。该论文将其称为“出发到潜在空间”。 这种压缩(以及后来的解压缩/绘画)是通过自动编码器完成的。自动编码器使用其编码器将图像压缩到潜在空间中,然后使用解码器仅使用压缩信息来重建图像。

添加图片注释,不超过 140 字(可选)
目前,前向扩散过程是在压缩的潜在变量上完成的。噪声切片是应用于那些潜在图像的噪声,而不是应用于像素图像。因此,噪声预测器实际上经过训练来预测压缩表明(潜在空间)中的噪声。

添加图片注释,不超过 140 字(可选)
前向过程(使用自动编码器的编码器)是我们生成数据来训练噪声预测器的方式。一旦经过训练,我们就可以通过运行相反的过程(使用自动编码器的解码器)来生成图像。

添加图片注释,不超过 140 字(可选)
这两个流程如 LDM/Stable Diffusion 论文的图 3 所示:

添加图片注释,不超过 140 字(可选)
该图还显示了“调节”组件,在本例中是描述模型应生成什么图像的文本提示。那么让我们深入研究一下文本组件。
文本编码器:Transformer 语言模型 Transformer 语言模型用作语言理解组件,它接受文本提示并生成标记嵌入。发布的Stable Diffusion模型使用了ClipText(基于GPT的模型),而论文则使用了BERT。 Imagen 论文表明,语言模型的选择超级重大。与较大的图像生成组件相比,较大语言模型的交换对生成图像质量的影响更大。

更大/更好的语言模型对图像生成模型的质量有显着影响。资料来源:Saharia 等人的 Google Imagen 论文。等人。。图 A.5。
早期的 Stable Diffusion 模型只是插入 OpenAI 发布的预训练 ClipText 模型。未来的模型可能会切换到新发布的、更大的CLIP OpenCLIP变体(2022 年 11 月更新:的确 如此,Stable Diffusion V2 使用 OpenClip)。这个新批次包括大小高达 354M 参数的文本模型,而不是 ClipText 中的 63M 参数。 CLIP 是如何训练的 CLIP 在图像及其标题数据集上进行训练。想象一个像这样的数据集,只有 4 亿张图像及其标题:

图像及其标题的数据集。
实际上,CLIP 是根据从网络上抓取的图像及其“alt”标签进行训练的。 CLIP 是图像编码器和文本编码器的组合。它的训练过程可以简化为拍摄图像及其标题。我们分别使用图像和文本编码器对它们进行编码。

添加图片注释,不超过 140 字(可选)
然后,我们使用余弦类似度比较生成的嵌入。当我们开始训练过程时,即使文本正确描述了图像,类似度也会很低。

添加图片注释,不超过 140 字(可选)
我们更新这两个模型,以便下次嵌入它们时,得到的嵌入是类似的。

添加图片注释,不超过 140 字(可选)
通过在数据聚焦和大批量重复此操作,我们最终使编码器能够生成狗的图像和句子“狗的图片”类似的嵌入。就像在word2vec中一样,训练过程也需要包含不匹配的图像和标题的负例,并且模型需要为它们分配较低的类似度分数。
将文本信息输入图像生成过程 为了使文本成为图像生成过程的一部分,我们必须调整噪声预测器以使用文本作为输入。

添加图片注释,不超过 140 字(可选)
我们的数据集目前包含编码文本。由于我们在潜在空间中操作,因此输入图像和预测噪声都在潜在空间中。

添加图片注释,不超过 140 字(可选)
为了更好地了解文本标记在 Unet 中的使用方式,让我们更深入地了解 Unet 内部。
Unet 噪声预测器的层(无文本) 我们第一来看一个不使用文本的扩散 Unet。它的输入和输出如下所示:

添加图片注释,不超过 140 字(可选)
在里面,我们看到:
- Unet 是一系列用于转换潜在数组的层
- 每一层都对前一层的输出进行操作
- 一些输出(通过剩余连接)被馈送到网络稍后的处理中
- 时间步长被转换为时间步长嵌入向量,这就是在层中使用的内容

添加图片注释,不超过 140 字(可选)
带文本的 Unet 噪声预测器的图层 目前让我们看看如何改变这个系统以包括对文本的关注。

添加图片注释,不超过 140 字(可选)
我们需要添加对文本输入(技术术语:文本调节)支持的系统的主要更改是在 ResNet 块之间添加一个注意层。

添加图片注释,不超过 140 字(可选)
请注意,ResNet 块并不直接查看文本。但注意力层将这些文本表明合并到潜在层中。目前,下一个 ResNet 可以在处理中利用合并的文本信息。
结论 我希望这能让您对Stable Diffusion的工作原理有一个良好的第一直觉。还涉及许多其他概念,但我信任一旦您熟悉了上面的构建块,它们就会更容易理解。以下资源是我发现有用的后续步骤。如需任何更正或反馈,请在Twitter上联系我。
资源
- I have a one-minute YouTube short on using Dream Studio to generate images with Stable Diffusion.
- Stable Diffusion with Diffusers
- The Annotated Diffusion Model
- How does Stable Diffusion work? – Latent Diffusion Models EXPLAINED [Video]
- Stable Diffusion – What, Why, How? [Video]
- High-Resolution Image Synthesis with Latent Diffusion Models [The Stable Diffusion paper]
- For a more in-depth look at the algorithms and math, see Lilian Weng’s What are Diffusion Models?
- Watch the great Stable Diffusion videos from fast.ai



