Stable Diffusion非常详细的介绍

文章目录

  • 稳定扩散的组成部分
  • 什么是扩散?
  • 扩散的工作原理
  • 通过消除噪点来绘制图像
  • 速度提升:在压缩(潜在)数据上扩散,而不是像素图像
  • 文本编码器:一种转换器语言模型
  • Feeding Text Information Into The Image Generation Process
  • Layers of the Unet Noise predictor (without text)
  • Layers of the Unet Noise predictor WITH text
  • 结论
  • 资源
  • 确认
  • 贡献
  • 讨论

 

AI 图像生成是最新的 AI 功能,让人们大吃一惊(包括我的)。从文字描述中创造引人注目的视觉效果的能力具有神奇的品质,并清楚地表明了人类创作艺术方式的转变。Stable Diffusion 的发布是这一发展的一个明显里程碑,因为它为大众提供了一个高性能模型(在图像质量、速度和相对较低的资源/内存要求方面的性能)。

在尝试了 AI 图像生成之后,您可能会开始想知道它是如何工作的。

这是对 Stable Diffusion 工作原理的温和介绍。

Stable Diffusion非常详细的介绍插图

Stable Diffusion 用途广泛,因为它可以以多种不同的方式使用。让我们首先关注仅从文本 (text2img) 生成图像。上图显示了示例文本输入和生成的图像(实际的完整提示在此处)。除了文本到图像之外,使用它的另一种主要方式是让它改变图像(因此输入是文本 + 图像)。

Stable Diffusion非常详细的介绍插图1

让我们开始了解引擎盖下的情况,因为这有助于解释组件、它们如何交互以及图像生成选项/参数的含义。

稳定扩散的组成部分

Stable Diffusion 是一个由多个组件和模型组成的系统。它不是一个单一的模型。

当我们深入观察时,我们可以观察到的第一个观察是,有一个文本理解组件,它将文本信息转换为数字表示,以捕获文本中的想法。

Stable Diffusion非常详细的介绍插图2

我们从高级视图开始,本文稍后将介绍更多机器学习详细信息。但是,我们可以说这个文本编码器是一个特殊的 Transformer 语言模型(技术上:CLIP 模型的文本编码器)。它接受输入文本并输出一个数字列表,代表文本中的每个单词/标记(每个标记一个向量)。

然后,该信息将呈现给图像生成器,该生成器本身由几个组件组成。

Stable Diffusion非常详细的介绍插图3

图像生成器经历两个阶段:

1-图像信息创建者

这个组件是 Stable Diffusion 的秘诀。与以前的型号相比,这是实现许多性能提升的地方。

此组件运行多个步骤来生成图像信息。这是 Stable Diffusion 接口和库中的 steps 参数,通常默认为 50 或 100。

图像信息创建者完全在图像信息空间(或潜在空间)中工作。我们将在后面的帖子中详细讨论这意味着什么。此属性使其比以前在像素空间中工作的扩散模型更快。从技术上讲,该组件由 UNet 神经网络和调度算法组成。

“扩散”一词描述了此组件中发生的情况。它是信息的逐步处理,最终生成高质量的图像(由下一个组件,图像解码器)。

Stable Diffusion非常详细的介绍插图4

2-图像解码器

图像解码器根据从信息创建者那里获得的信息绘制图片。它仅在过程结束时运行一次以生成最终像素图像。

Stable Diffusion非常详细的介绍插图5

有了这个,我们可以看到构成 Stable Diffusion 的三个主要组件(每个组件都有自己的神经网络):

  • 用于文本编码的 ClipText。输入:文本。输出:77 个令牌嵌入向量,每个向量有 768 个维度。
  • UNet + Scheduler 在信息(潜在)空间中逐渐处理/扩散信息。输入:文本嵌入和由噪声组成的起始多维数组(结构化数字列表,也称为张量)。输出:已处理的信息数组
  • 自动编码器解码器,使用处理后的信息数组绘制最终图像。输入:处理后的信息数组(尺寸:(4,64,64))输出:生成的图像(尺寸:(3,512,512),分别为(红/绿/蓝,宽、高))

Stable Diffusion非常详细的介绍插图6

什么是扩散?

扩散是在粉红色的“图像信息创建者”组件中发生的过程。具有表示输入文本的标记嵌入和随机起始图像信息数组(也称为潜在数组),该过程会生成一个信息数组,图像解码器使用该数组来绘制最终图像。

Stable Diffusion非常详细的介绍插图7

这个过程是循序渐进的。每个步骤都会添加更多相关信息。为了获得该过程的直觉,我们可以检查随机潜伏数组,并查看它是否转化为视觉噪声。在这种情况下,目视检查是通过图像解码器。

Stable Diffusion非常详细的介绍插图8

扩散发生在多个步骤中,每个步骤都对输入潜伏数组进行操作,并生成另一个潜伏数组,该数组更类似于输入文本和模型从模型训练的所有图像中获取的所有视觉信息。

Stable Diffusion非常详细的介绍插图9

我们可以可视化一组这些潜在信息,以查看每个步骤中添加了哪些信息。

Stable Diffusion非常详细的介绍插图10

这个过程令人叹为观止。

Stable Diffusion非常详细的介绍插图11

Something especially fascinating happens between steps 2 and 4 in this case. It’s as if the outline emerges from the noise.

Stable Diffusion非常详细的介绍插图11

扩散的工作原理

使用扩散模型生成图像的中心思想依赖于我们拥有强大的计算机视觉模型这一事实。给定足够大的数据集,这些模型可以学习复杂的操作。扩散模型通过将问题框定为如下来生成图像:

假设我们有一个图像,我们生成一些噪声,并将其添加到图像中。

Stable Diffusion非常详细的介绍插图12

现在可以将其视为一个训练示例。我们可以使用相同的公式来创建大量训练示例来训练图像生成模型的核心组件。

Stable Diffusion非常详细的介绍插图13

虽然此示例显示了从图像(数量 0,无噪声)到总噪声(数量 4,总噪声)的一些噪声量值,但我们可以轻松控制要添加到图像中的噪声量,因此我们可以将其分布在数十个步骤中,为训练数据集中的所有图像创建每个图像数十个训练示例。

Stable Diffusion非常详细的介绍插图14

有了这个数据集,我们可以训练噪声预测器,并最终得到一个伟大的噪声预测器,当在特定配置下运行时,它实际上会创建图像。如果您有过 ML 暴露,则训练步骤应该看起来很熟悉:

Stable Diffusion非常详细的介绍插图15

现在让我们看看它如何生成图像。

通过消除噪点来绘制图像

经过训练的噪声预测器可以获取噪声图像和去噪步数,并能够预测噪声片段。

Stable Diffusion非常详细的介绍插图16

对采样噪声进行预测,因此,如果我们从图像中减去它,我们会得到一个更接近模型训练的图像的图像(不是精确的图像本身,而是分布 – 像素排列的世界,天空通常是蓝色的,高于地面,人们有两只眼睛,猫看起来有某种方式 – 尖耳朵,显然不为所动)。

Stable Diffusion非常详细的介绍插图17

如果训练数据集是美观的图像(例如,LAION Aesthetics,Stable Diffusion 是在其上训练的),那么生成的图像往往在美学上令人愉悦。如果我们在徽标图像上训练它,我们最终会得到一个徽标生成模型。

Stable Diffusion非常详细的介绍插图18

到此,扩散模型对图像生成的描述主要如去噪扩散概率模型中所述。现在你有了这种扩散的直觉,你不仅知道了 Stable Diffusion 的主要组件,还知道了 Dall-E 2 和 Google 的 Imagen。

请注意,到目前为止,我们描述的扩散过程在不使用任何文本数据的情况下生成图像。因此,如果我们部署这个模型,它会生成漂亮的图像,但我们无法控制它是金字塔、猫还是其他任何东西的图像。在接下来的章节中,我们将介绍如何将文本合并到流程中,以控制模型生成的图像类型。

速度提升:在压缩(潜在)数据上扩散,而不是像素图像

为了加快图像生成过程,Stable Diffusion 纸不是在像素图像本身上运行扩散过程,而是在图像的压缩版本上运行扩散过程。这篇论文称之为“离开潜空间”。

这种压缩(以及后来的解压缩/绘画)是通过自动编码器完成的。自动编码器使用其编码器将图像压缩到潜在空间中,然后使用解码器仅使用压缩信息对其进行重建。

Stable Diffusion非常详细的介绍插图19

现在,前向扩散过程是在压缩的潜伏物上完成的。噪声切片是应用于这些潜伏的噪声,而不是应用于像素图像的噪声。因此,噪声预测器实际上经过训练,可以预测压缩表示(潜在空间)中的噪声。

Stable Diffusion非常详细的介绍插图20

前向过程(使用自动编码器的编码器)是我们生成数据以训练噪声预测器的方式。一旦它被训练,我们就可以通过运行反向过程(使用自动编码器的解码器)来生成图像。

Stable Diffusion非常详细的介绍插图21

这两个流程是 LDM/Stable Diffusion 论文的图 3 中所示的内容:

Stable Diffusion非常详细的介绍插图22

此图还显示了“调节”组件,在本例中,这些组件是描述模型应生成的图像的文本提示。因此,让我们深入研究文本组件。

文本编码器:一种转换器语言模型

Transformer 语言模型用作语言理解组件,用于接收文本提示并生成令牌嵌入。发布的 Stable Diffusion 模型使用 ClipText(基于 GPT 的模型),而论文使用 BERT。

Imagen的论文表明,语言模型的选择是一个重要的问题。与较大的图像生成组件相比,在较大的语言模型中交换对生成的图像质量的影响更大。

Stable Diffusion非常详细的介绍插图23 更大/更好的语言模型对图像生成模型的质量有显著影响。资料来源:Saharia 等人的 Google Imagen 论文。图 A.5.

早期的 Stable Diffusion 模型只是插入了 OpenAI 发布的预训练 ClipText 模型。未来的模型可能会切换到新发布的更大的 CLIP 变体(2022 年 11 月更新:没错,Stable Diffusion V2 使用 OpenClip)。这个新批次包括最大 354M 参数的文本模型,而不是 ClipText 中的 63M 参数。

如何训练 CLIP

CLIP 在图像及其标题数据集上进行训练。想想一个数据集,看起来像这样,只有 4 亿张图像及其标题:

Stable Diffusion非常详细的介绍插图24 图像及其标题的数据集。

实际上,CLIP是在从网络上抓取的图像及其“alt”标签上训练的。

CLIP 是图像编码器和文本编码器的组合。它的训练过程可以简化为考虑拍摄图像及其标题。我们分别使用图像和文本编码器对它们进行编码。

Stable Diffusion非常详细的介绍插图25

然后,我们使用余弦相似度比较生成的嵌入。当我们开始训练过程时,即使文本正确地描述了图像,相似度也会很低。

Stable Diffusion非常详细的介绍插图26

我们更新了这两个模型,以便下次嵌入它们时,生成的嵌入是相似的。

Stable Diffusion非常详细的介绍插图27

通过在整个数据集中重复此操作并具有大批量,我们最终使编码器能够生成嵌入,其中狗的图像和句子“狗的图片”相似。就像在 word2vec 中一样,训练过程还需要包括不匹配的图像和标题的负面示例,并且模型需要为它们分配低相似度分数。

Feeding Text Information Into The Image Generation Process

To make text a part of the image generation process, we have to adjust our noise predictor to use the text as an input.

Stable Diffusion非常详细的介绍插图28

Our dataset now includes the encoded text. Since we’re operating in the latent space, both the input images and predicted noise are in the latent space.

Stable Diffusion非常详细的介绍插图29

To get a better sense of how the text tokens are used in the Unet, let’s look deeper inside the Unet.

Layers of the Unet Noise predictor (without text)

Let’s first look at a diffusion Unet that does not use text. Its inputs and outputs would look like this:

Stable Diffusion非常详细的介绍插图30

Inside, we see that:

  • The Unet is a series of layers that work on transforming the latents array
  • Each layer operates on the output of the previous layer
  • Some of the outputs are fed (via residual connections) into the processing later in the network
  • The timestep is transformed into a time step embedding vector, and that’s what gets used in the layers

Stable Diffusion非常详细的介绍插图31

Layers of the Unet Noise predictor WITH text

Let’s now look how to alter this system to include attention to the text.

Stable Diffusion非常详细的介绍插图32

The main change to the system we need to add support for text inputs (technical term: text conditioning) is to add an attention layer between the ResNet blocks.

Stable Diffusion非常详细的介绍插图33

请注意,ResNet 块不会直接查看文本。但是注意力层将这些文本表示合并在潜伏中。现在,下一个 ResNet 可以在其处理中利用合并的文本信息。

结论

我希望这能给你一个很好的初步直觉,了解Stable Diffusion是如何工作的。还涉及许多其他概念,但我相信,一旦您熟悉了上面的构建块,它们就更容易理解了。下面的资源是我发现有用的很棒的后续步骤。如有任何更正或反馈,请在 Twitter 上与我联系。

资源

  • 我有一个一分钟的 YouTube 短片,讲述了如何使用 Dream Studio 使用 Stable Diffusion 生成图像。
  • 带🧨扩散器的稳定扩散
  • 带注释的扩散模型
  • Stable Diffusion 如何工作? – 潜在扩散模型解释 [视频]
  • 稳定扩散 – 什么,为什么,如何?[查看视频]
  • 使用潜在扩散模型的高分辨率图像合成 [The Stable Diffusion paper]
  • 有关算法和数学的更深入了解,请参阅 Lilian Weng 的 什么是扩散模型?
  • 观看来自 fast.ai 的精彩 Stable Diffusion 视频

确认

感谢 Robin Rombach、Jeremy Howard、Hamel Husain、Dennis Soemers、Yan Sidyakin、Freddie Vargus、Anna Golubeva 和 Cohere For AI 社区对本文早期版本的反馈。

贡献

请帮我把这篇文章做得更好。可能的方式:

  • 在 Twitter 上发送任何反馈或更正,或作为拉取请求发送
  • 通过向视觉对象建议标题和替代文本(最好作为拉取请求)来帮助使文章更易于访问
  • 将其翻译成另一种语言并将其发布到您的博客。将链接发送给我,我将在此处添加链接。前几篇文章的译者总是提到他们通过翻译过程对这些概念的理解有多深。

讨论

如果您有兴趣讨论图像生成模型与语言模型的重叠,请随时在 Discord 上 Cohere 社区的 #images-and-words 频道中发帖。在那里,我们讨论了重叠领域,包括:

  • 微调语言模型以生成良好的图像生成提示
  • 使用 LLM 拆分图像字幕提示的主题和样式组件
  • 图像到提示(通过 Clip Interrogator 等工具)
微海报

评论留言

Stable Diffusion非常详细的介绍