Stable Diffusion工作原理

[h1]1. Stable Diffusion 能做什么?[/h1]

s

s

Stable Diffusion 是一种从文本生成 AI 图像的潜在扩散模型。它不是在高维图像空间中操作,而是首先将图像压缩到潜在空间中。

我们将深入了解它在引擎盖下的工作原理。

你为什么需要知道?除了本身就是一个引人入胜的主题之外,对内在机制的一些理解将使您成为更好的艺术家。您可以正确使用该工具以获得更高精度的结果。

文本到图像与图像到图像有何不同?什么是 CFG 量表?什么是降噪强度?您将在本文中找到答案。

[h1]1. Stable Diffusion 能做什么?[/h1]

在最简单的形式中,Stable Diffusion 是一个文本到图像的模型。给它一个文本提示。它将返回与文本匹配的 AI 图像。

Stable diffusion将文本提示转换为图像

[h1]2. 扩散模型[/h1]

Stable Diffusion 属于一类称为扩散模型的深度学习模型。它们是生成模型,这意味着它们旨在生成类似于他们在训练中看到的新数据。在 Stable Diffusion 的情况下,数据是图像。

为什么叫扩散模型?因为它的数学看起来很像物理学中的扩散。让我们来看看这个想法。

假设我训练了一个扩散模型,只有两种图像:猫和狗。在下图中,左边的两个峰代表猫和狗图像的组。

[h2]2.1 前向扩散[/h2]

前向扩散将照片变成噪点

前向扩散过程将噪声添加到训练图像中,逐渐将其变成非特征噪声图像。正向过程会将任何猫或狗图像转换为噪声图像。最终,您将无法分辨它们最初是狗还是猫。(这很重要)

就像一滴墨水掉进了一杯水里。墨滴在水中扩散。几分钟后,它会随机分布在整个水中。你再也无法分辨它最初是落在中心还是边缘附近。

下面是图像向前扩散的示例。猫的图像变成随机噪声。

猫图猫图像的前向扩散

[h2]2.2 反向扩散[/h2]

现在是激动人心的部分。如果我们能逆转扩散呢?就像向后播放视频一样。时光倒流。我们将看到墨滴最初添加的位置。

反向扩散过程可恢复图像

从嘈杂、无意义的图像开始,反向扩散可以恢复猫或狗的图像。这是主要思想。

从技术上讲,每个扩散过程都有两个部分:(1)漂移和(2)随机运动。反向扩散向猫或狗图像漂移,但两者之间没有任何东西。这就是为什么结果可以是猫或狗。

[h1]3. 如何进行训练[/h1]

反向扩散的想法无疑是聪明而优雅的。但百万美元的问题是,“怎么能做到?

为了反转扩散,我们需要知道图像中添加了多少噪声。答案是教授神经网络模型来预测添加的噪声。它在 Stable Diffusion 中被称为噪声预测器。它是 U-Net 模型。培训内容如下。

  1. 选择一张训练图像,例如猫的照片。
  2. 生成随机噪声图像。
  3. 通过将此嘈杂映像添加到一定数量的步骤来破坏训练映像。
  4. 教噪声预测器告诉我们添加了多少噪声。这是通过调整其权重并向其显示正确答案来完成的。

每个步骤都会依次添加噪声,噪声预测器估计每个步骤的总噪声

经过训练后,我们有一个噪声预测器,能够估计添加到图像中的噪声。

反向扩散

现在我们有了噪声预测器。如何使用它?

我们首先生成一个完全随机的图像,并要求噪声预测器告诉我们噪声。然后,我们从原始图像中减去这个估计的噪声。重复此过程几次。你会得到一只猫或一只狗的图像。

反向扩散的工作原理是连续从图像中减去预测的噪声

您可能会注意到,我们无法控制生成猫或狗的图像。当我们谈论条件反射时,我们将解决这个问题。目前,图像生成是无条件的。

[h1]4. Stable Diffusion 模型[/h1]

现在我需要告诉你一些坏消息:我们刚才谈论的不是 Stable Diffusion 的工作原理!原因是上面的扩散过程是在图像空间中。它在计算上非常非常慢。您将无法在任何单个 GPU 上运行,更不用说笔记本电脑上蹩脚的 GPU 了。

图像空间是巨大的。想一想:具有三个颜色通道(红色、绿色和蓝色)的 512×512 图像是一个 786,432 维空间!(您需要为一个图像指定多个值。

谷歌的 Imagen 和 Open AI 的 DALL-E 等扩散模型都处于像素空间中。他们使用了一些技巧来使模型更快,但仍然不够。

[h2]4.1 Latent diffusion 模型[/h2]

Stable Diffusion 旨在解决速度问题。方法如下。

Stable Diffusion 是一种 Latent diffusion(潜在扩散)模型。它不是在高维图像空间中操作,而是首先将图像压缩到潜在空间中。潜在空间小 48 倍,因此它可以从处理更少的数字中受益。这就是为什么它要快得多。

[h2]4.2 变分自动编码器[/h2]

它是使用一种称为变分自动编码器的技术完成的。是的,这正是 VAE 文件的内容,但我稍后会说得很清楚。

变分自动编码器 (VAE) 神经网络由两部分组成:(1) 编码器和 (2) 解码器。编码器将图像压缩为潜在空间中的低维表示。解码器从潜在空间恢复图像。

变分自动编码器将图像转换为潜在空间或从潜在空间转换图像

Stable Diffusion 模型的潜在空间为 4x64x64,比图像像素空间小 48 倍。我们谈到的所有正向和反向扩散实际上都是在潜在空间中完成的。

因此,在训练过程中,它不会生成嘈杂的图像,而是在潜在空间中生成随机张量(潜在噪声)。它不是用噪声破坏图像,而是用潜在噪声破坏图像在潜在空间中的表示。这样做的原因是它要快得多,因为潜空间更小。

[h2]4.3 图像分辨率[/h2]

图像分辨率反映在潜在图像张量的大小中。仅适用于 512×512 图像,潜在图像的大小为 4x64x64。对于 768×512 人像图像,它是 4x96x64。这就是为什么需要更长和更多的VRAM来生成更大的图像。

由于 Stable Diffusion v1 对 512×512 图像进行了微调,因此生成大于 512×512 的图像可能会导致重复的对象,例如臭名昭著的两个头。

[h2]4.4 图像放大[/h2]

若要生成大打印件,请将图像的至少一侧保持在 512 像素。使用 AI upscaler或图像到图像功能进行图像升频。

或者,使用 SDXL 模型。它的默认大小较大,为 1,024 x 1,024 像素。

[h1]5. 为什么潜空间是可能的?[/h1]

您可能想知道为什么VAE可以将图像压缩到更小的潜在空间中而不会丢失信息。原因在于,不出所料,自然图像不是随机的。它们具有很高的规律性:脸部遵循眼睛、鼻子、脸颊和嘴巴之间的特定空间关系。狗有 4 条腿,是一种特殊的形状。

换句话说,图像的高维性是人为的。自然图像可以很容易地压缩到更小的潜在空间中,而不会丢失任何信息。这在机器学习中被称为流形假设。

[h1]6. 潜在空间的反向扩散[/h1]

以下是 Stable Diffusion 中潜在反向扩散的工作原理。

  1. 生成一个随机潜在空间矩阵。
  2. 噪声预测器估计潜在矩阵的噪声。
  3. 然后从潜在矩阵中减去估计的噪声。
  4. 步骤 2 和 3 重复到特定的采样步骤。
  5. VAE的解码器将潜在矩阵转换为最终图像。

[h1]7. 什么是 VAE 文件?[/h1]

VAE 文件用于 Stable Diffusion v1 来改善眼睛和面部。它们是我们刚才谈到的自动编码器的解码器。通过进一步微调解码器,模型可以绘制出更精细的细节。

你可能会意识到我之前提到的并不完全正确。将图像压缩到潜在空间中确实会丢失信息,因为原始VAE无法恢复精细的细节。取而代之的是,VAE解码器负责绘制精细的细节。

[h1]8. 调节[/h1]

我们的理解是不完整的:文字提示从哪里进入图片?没有它,Stable Diffusion 就不是一个文本到图像的模型。你要么得到一只猫,要么得到一只狗的图像,而没有任何办法控制它。

这就是条件反射的用武之地。条件反射的目的是引导噪声预测器,以便预测的噪声在从图像中减去后得到我们想要的。

[h2]8.1 文本到图像[/h2]

下面概述了如何处理文本提示并将其输入到噪声预测器中。Tokenizer 首先将提示中的每个单词转换为一个称为标记的数字。然后,将每个令牌转换为称为嵌入的 768 值向量。(是的,这与您在 AUTOMATIC1111 中使用的嵌入相同)然后,文本转换器处理嵌入,并准备好由噪声预测器使用。

如何处理文本提示并将其输入噪声预测器以指导图像生成

现在让我们仔细看看每个部分。如果上述高级概述对您来说足够好,则可以跳到下一部分。

[h2]8.2 分词器[/h2]

文本提示首先由 CLIP 标记器标记。CLIP 是由 Open AI 开发的深度学习模型,用于生成任何图像的文本描述。Stable Diffusion v1 使用 CLIP 的分词器。

标记化是计算机理解单词的方式。我们人类可以阅读单词,但计算机只能读取数字。这就是为什么文本提示中的单词首先被转换为数字的原因。

分词器只能对训练期间看到的单词进行分词。例如,CLIP 模型中有“dream”和“beach”,但没有“dreambeach”。Tokenizer 将“dreambeach”这个词分解为两个标记:“dream”和“beach”。因此,一个词并不总是意味着一个令牌!

另一个细则是空格字符也是令牌的一部分。在上述案例中,短语“dream beach”产生两个标记“dream”和“[space]beach”。这些令牌与“dreambeach”产生的令牌不同,后者是“dream”和“beach”(海滩前没有空格)。

稳定的扩散模型仅限于在提示中使用 75 个令牌。(现在你知道它和 75 个字不一样了!

[h2]8.3 嵌入[/h2]

Stable diffusion v1 使用 Open AI 的 ViT-L/14 Clip 模型。嵌入是一个 768 值的向量。每个代币都有自己独特的嵌入向量。嵌入由 CLIP 模型固定,该模型在训练期间学习。

为什么我们需要嵌入?这是因为有些词彼此密切相关。我们希望利用这些信息。例如,man、gentleman 和 guy 的嵌入几乎相同,因为它们可以互换使用。莫奈、马奈和德加都以印象派风格作画,但方式不同。这些名称具有接近但不相同的嵌入。

这与我们讨论的用于使用关键字触发样式的嵌入相同。嵌入可以发挥魔力。科学家们已经证明,找到合适的嵌入可以触发任意对象和样式,这是一种称为文本反转的微调技术。

[h2]8.4 将嵌入馈送到噪声预测器[/h2]

从嵌入到噪声预测器

在输入噪声预测器之前,文本转换器需要对嵌入进行进一步处理。变压器就像一个用于调节的通用适配器。在本例中,它的输入是文本嵌入向量,但它也可以是类标签、图像和深度图等其他内容。变压器不仅可以进一步处理数据,还可以提供一种包含不同调节模式的机制。

[h2]8.5 交叉注意力[/h2]

文本转换器的输出被整个 U-Net 的噪声预测器多次使用。U-Net通过交叉注意力机制消耗它。这就是提示与图像相遇的地方。

让我们以提示“一个蓝眼睛的男人”为例。Stable Diffusion 将“蓝色”和“眼睛”这两个词配对在一起(提示中的自我注意力),因此它生成了一个蓝眼睛的男人,而不是一个蓝衬衫的男人。然后,它使用这些信息将反向漫射引导到包含蓝眼睛的图像上。(提示和图像之间的交叉注意力)

旁注:超网络是一种微调稳定扩散模型的技术,它劫持了交叉注意力网络来插入样式。LoRA 模型修改交叉注意力模块的权重以更改样式。仅修改此模块即可微调 Stabe Diffusion 模型,这一事实告诉您该模块的重要性。

[h2]8.6 其它条件[/h2]

文本提示并不是调节 Stable Diffusion 模型的唯一方法。

文本提示和深度图像都用于调节深度到图像模型。

ControlNet 使用检测到的轮廓、人体姿势等对噪声预测器进行调节,并实现对图像生成的出色控制。

[h1]9. Stable Diffusion step-by-step[/h1]

现在您已经了解了 Stable Diffusion 的所有内部机制,让我们来看看引擎盖下发生的事情的一些示例。

[h2]9.1 文本到图像[/h2]

在文本到图像中,您给 Stable Diffusion 一个文本提示,它会返回一个图像。

步骤 1。稳定扩散在潜在空间中生成随机张量。您可以通过设置随机数生成器的种子来控制此张量。如果将种子设置为某个值,则始终会得到相同的随机张量。这是你在潜在空间中的形象。但现在都是噪音。

在潜在空间中生成随机张量

第2步。噪声预测器 U-Net 将潜在噪声图像和文本提示作为输入,并预测噪声,也预测潜在空间(4x64x64 张量)中的噪声。

第 3 步。从潜在图像中减去潜在噪声。这成为你新的潜在形象。

步骤2和3重复一定数量的采样步骤,例如20次。

第 4 步。最后,VAE的解码器将潜在图像转换回像素空间。这是运行 Stable Diffusion 后获得的图像。

以下是图像在每个采样步骤中的演变方式。

[h2]9.2 噪音时间表[/h2]

图像从嘈杂变为干净。您是否想知道噪声预测器在初始步骤中是否无法正常工作?实际上,这只是部分正确。真正的原因是我们试图在每个采样步骤中获得预期的噪声。这称为噪声时间表。下面是一个示例。

15 个采样步骤的噪声时间表

噪音时间表是我们定义的。我们可以选择在每一步中减去相同数量的噪声。或者我们可以在开始时减去更多,如上所述。采样器在每个步骤中减去足够的噪声,以达到下一步的预期噪声。这就是您在分步图像中看到的内容。

[h2]9.3 图像到图像[/h2]

Image-to-image 使用 Stable Diffusion 将图像转换为另一个图像。它首先在SDEdit方法中提出。SDEdit 可以应用于任何扩散模型。因此,我们有了稳定扩散(潜在扩散模型)的图像到图像。

输入图像和文本提示作为图像到图像的输入提供。生成的图像将同时受到输入图像和文本提示的制约。例如,使用这个业余绘画和提示“完美的青苹果照片,有茎,水滴,戏剧性的灯光”作为输入,图像到图像可以将其变成专业绘画:

 图像到图像

现在,这是分步过程。

步骤 1。输入图像被编码到潜在空间。

第2步。噪声被添加到潜在图像中。去噪强度控制添加的噪声量。如果为 0,则不添加任何噪声。如果为 1,则添加最大噪声量,使潜在图像成为完全随机张量。

第 3 步。噪声预测器 U-Net 将潜在噪声图像和文本提示作为输入,并预测潜在空间(4x64x64 张量)中的噪声。

第 4 步。从潜在图像中减去潜在噪声。这成为你新的潜在形象。

步骤3和4重复一定数量的采样步骤,例如20次。

第 5 步。最后,VAE的解码器将潜在图像转换回像素空间。这是运行 image-to-image 后获得的映像。

所以现在你知道什么是图像到图像了:它所做的只是用一点噪声和输入图像来设置初始潜在图像。将去噪强度设置为 1 等同于文本到图像,因为初始潜在图像是完全随机的。

[h2]9.4 修复[/h2]

修复实际上只是图像到图像的一个特殊情况。噪点将添加到要绘制的图像部分。噪声量同样由去噪强度控制。

[h2]9.5 图像深度[/h2]

深度到图像是对图像到图像的增强;它使用深度图生成具有额外条件的新图像。

步骤 1。输入图像被编码为潜伏状态

第2步。MiDaS(一种 AI 深度模型)根据输入图像估计深度图。

第 3 步。噪声被添加到潜在图像中。去噪强度控制添加的噪声量。如果去噪强度为 0,则不添加噪声。如果去噪强度为 1,则添加最大噪声,使潜在图像成为随机张量。

第 4 步。噪声预测器估计潜在空间的噪声,由文本提示和深度图调节。

第 5 步。从潜在图像中减去潜在噪声。这成为你新的潜在形象。

重复步骤 4 和 5 以获取采样步骤的数量。

第 6 步。VAE的解码器对潜在图像进行解码。现在,您可以获得从深度到图像的最终图像。

[h1]10. 什么是CFG?[/h1]

如果不解释无分类器指南 (CFG),这篇文章就不完整,这是 AI 艺术家每天都在修补的价值。要了解它是什么,我们需要首先接触它的前身,分类器指南……

[h2]10.1 分类器指南[/h2]

分类器引导是一种在扩散模型中合并图像标签的方法。您可以使用标签来指导扩散过程。例如,标签“猫”引导反向扩散过程以生成猫的照片。

分类器指导量表是一个参数,用于控制扩散过程与标签的紧密程度。

以下是我从这篇论文中偷来的一个例子。假设有 3 组图像,标签为“猫”、“狗”和“人类”。如果扩散是无引导的,模型将从每组的总人口中抽取样本,但有时它可能会绘制出适合两个标签的图像,例如一个男孩抚摸一只狗。

分类器指南。左图:无制导。中:小引导刻度。右图:大型制导秤。

在高分类器引导下,扩散模型生成的图像将偏向于极端或明确的例子。如果你向模型询问一只猫,它将返回一个明确是猫的图像,而不是其他。

分类器指导量表控制遵循指导的紧密程度。在上图中,右边的抽样比中间的抽样具有更高的分类器指导量表。在实践中,此刻度值只是指向具有该标签的数据的漂移项的乘数。

[h2]10.2 无分类器指南[/h2]

尽管分类器指南实现了破纪录的性能,但它需要一个额外的模型来提供该指南。这给培训带来了一些困难。

用作者的话来说,无分类器指导是一种实现“没有分类器的分类器指导”的方法。他们没有使用类标签和单独的模型进行指导,而是建议使用图像标题并训练条件扩散模型,就像我们在文本到图像中讨论的那样。

他们将分类器部分作为噪声预测器U-Net的条件,在图像生成中实现了所谓的“无分类器”(即没有单独的图像分类器)指导。

文本提示以文本到图像的形式提供此指南。

[h2]10.3 无分类器指导量表[/h2]

现在,我们有一个使用条件反射的无分类器扩散过程。我们如何控制 AI 生成的图像应该在多大程度上遵循指导?

无分类器指导量表(CFG 量表)是一个值,用于控制文本提示对扩散过程的引导程度。当 CFG 刻度设置为 0 时,AI 图像生成是无条件的(即忽略提示)。更高的 CFG 量表将扩散引导到提示。

[h1]11. Stable Diffusion v1.5 与 v2[/h1]

这已经是一篇很长的文章了,但如果不比较 v1.5 和 v2 模型之间的差异,它就不完整。

[h2]11.1 型号差异[/h2]

Stable Diffusion v2 使用 OpenClip 进行文本嵌入。Stable Diffusion v1 使用 Open AI 的 CLIP ViT-L/14 进行文本嵌入。此更改的原因是

  • OpenClip 最多大五倍。较大的文本编码器模型可提高图像质量。
  • 尽管 Open AI 的 CLIP 模型是开源的,但这些模型是使用专有数据训练的。切换到 OpenClip 模型后,研究人员在研究和优化模型时可以更加透明。更有利于长期发展。

v2 模型有两个优点。

  • 512 版本生成 512×512 张图像
  • 768 版本生成 768×768 图像

[h2]11.2 训练数据差异[/h2]

Stable Diffusion v1.4 是用

  • laion2B-en 数据集上分辨率为 256×256 的 237k 步长。
  • 194k 步进,分辨率为 512×512 在 LAION-high-resolution 上。
  • 在“Laion-Aesthetics V2 5+”上以 512×512 步进 225k,文本条件下降 10%。

Stable Diffusion v2 训练有

  • 在 LAION-5B 子集的分辨率 256x256 下以 550k 步长过滤露骨色情材料,使用 LAION-NSFW 分类器, punsafe=0.1 美学评分为 >= 4.5 。
  • 在具有分辨率 >= 512x512 的图像上,同一数据集上的分辨率 512x512 为 850k 步长。
  • 在同一数据集上使用 V 目标的 150k 步。
  • 在图像上 768x768 再恢复 140k 步。

Stable Diffusion v2.1 在 v2.0 上进行了微调

  • 同一数据集上的额外 55k 步(使用 punsafe=0.1 )
  • 另外 155k 的额外步骤 punsafe=0.98

从本质上讲,他们在最后的训练步骤中关闭了 NSFW 过滤器。

[h2]11.3 结果差异[/h2]

用户通常发现使用 Stable Diffusion v2 来控制风格和生成名人更难。虽然 Stability AI 没有明确过滤掉艺术家和名人的名字,但它们的效果在 v2 中要弱得多。这可能是由于训练数据的差异。Open AI 的专有数据可能包含更多艺术品和名人照片。他们的数据可能经过高度过滤,因此所有内容和每个人看起来都很好,很漂亮。

v2 和 v2.1 型号并不受欢迎。人们只使用经过微调的 v1.5 和 SDXL 模型。

[h1]12. SDXL 模型[/h1]

SDXL 型号是 v1 和 v2 型号的官方升级。该模型作为开源软件发布。

这是一个更大的模型。在人工智能世界中,我们可以期待它变得更好。SDXL 模型的参数总数为 66 亿个,而 v1.5 模型的参数总数为 9.8 亿个。

SDXL 管道由基本模型和精简程序模型组成

SDXL 模型实际上是两个模型。运行基本模型,然后运行精简程序模型。基本模型设置全局组合。精简程序模型添加了更精细的细节。

您可以在不使用精简程序的情况下单独运行基本模型。

SDXL 基本模型中的更改包括:

  • 文本编码器结合了最大的 OpenClip 模型 (ViT-G/14) 和 OpenAI 专有的 CLIP ViT-L。这是一个明智的选择,因为它使 SDXL 易于提示,同时保持强大且可训练的 OpenClip。
  • 新的图像大小调节,旨在使用小于 256×256 的训练图像。这通过不丢弃 39% 的图像显着增加了训练数据。
  • U-Net 比 v1.5 大三倍。
  • 默认图像大小为 1024×1024。这比 v1.5 型号的 512×512 大 4 倍。(请参阅用于 SDXL 模型的图像大小)

THEAI.DO » Stable Diffusion工作原理

发表回复