Stable Diffusion 工作原理?

Stable Diffusion是一种深度学习模型。我们将深入了解Stable Diffusion的幕后工作原理。

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

文本生成图像与图像生成图像有何不同?CFG值是什么?什么是去噪强度(denoising strength)?您将在本文中找到答案。

让我们深入了解一下。

Stable Diffusion能做什么?

最简单的形式是,Stable Diffusion是一种文本生成图像模式。给它一个文字提示词。它将返回与文本匹配的图像。

StableDiffusion将文字提示词变成图像

扩散模型

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

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

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

前向扩散

前向扩散将照片变成噪声。(图来自论文

前向扩散过程向训练图像添加噪声,逐渐将其变成不典型的噪声图像。前向过程会将任何猫或狗图像变成噪声图像。最终,你将无法分辨它们最初是狗还是猫。(这个很重要)

就像一滴墨水落入一杯水中。墨滴在水中扩散。几分钟后,它随机分布在整个水中。您不再能够判断它最初是落在中心还是边缘附近。

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

猫图像的前向扩散

 

反向扩散

现在到了令人兴奋的部分。如果我们可以反向扩散呢?就像倒放视频一样。时间倒退。我们将看到墨滴最初添加的位置。

反向扩散过程恢复图像。

 

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

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

训练是如何进行的

反向扩散的想法无疑是巧妙而优雅的。但价值百万美元的问题是:“如何才能做到这一点?”

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

  1. 选择一张训练图像,例如猫的照片。
  2. 生成随机噪声图像。
  3. 将噪声图像添加训练图像,并重复一定的步骤。
  4. 教噪声预测器告诉我们添加了多少噪声。这是通过调整其权重和向他显示正确答案来完成的。
在每个步骤中依次添加噪声。噪声预测器估计每一步添加的总噪声。

 

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

反向扩散

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

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

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

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

您可以在本文中阅读有关反向扩散采样和采样器的更多信息。

Stable Diffusion模型

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

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

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

潜在扩散模型Latent diffusion model

Stable Diffusion旨在解决速度问题。就是这样。

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

变分自动编码器Variational Autoencoder

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

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

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

 

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

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

图像分辨率

图像分辨率反映在潜图像张量的大小上(latent image tensor)。仅对于 512×512 图像,潜图像的大小为 4x64x64。768×512 图像的尺寸为 4x96x64。这就是为什么需要更长、更多的 VRAM 才能生成更大的图像。

由于Stable Diffusion v1 在 512×512 图像上进行了微调,因此生成大于 512×512 的图像可能会导致重复的对象,例如臭名昭​​著的两个头。如果必须,请至少将一侧保留为 512 像素,并使用AI 升级器以获得更高分辨率。

为什么潜空间是可行的?

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

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

潜在空间中的反向扩散

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

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

什么是 vae 文件?

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

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

条件作用

我们的理解不完整:文字提示词在哪里进入图片?没有它,Stable Diffusion就不是文本生成图像的模型。您将获得猫或狗的图像,而没有任何方法可以控制它。

这就是条件作用的用武之地。条件作用的目的是引导噪声预测器,以便预测的噪声在从图像中减去后能够为我们提供我们想要的结果。

文本条件(文本生成图像)

下面概述了如何处理文本提示词并将其输入噪声预测器。Tokenizer首先将提示词中的每个单词转换为一个称为token的数字。然后,每个token都会转换为一个包含768个值称为embedding的 向量。(是的,这与您在 AUTOMATIC1111 中使用的Embedding相同)Embedding随后由文本转换器text transformer )进行处理,并准备好供噪声预测器使用。

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

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

使用此笔记本检查任何提示词的token和Embedding。

Tokenizer

 

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

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

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

另一个细则是空格字符也是token的一部分。在上面的例子中,短语“dream beach”产生两个标记“dream”和“[space]beach”。这些token与“dreambeach”生成的token不同,“dreambeach”是“dream”和“beach”(beach之前没有空格)。

Stable Diffusion模型仅限于在提示词中使用 75 个token。(现在你知道它和 75 个字不一样了!)

Embedding嵌入

Stable Diffusion v1 使用 Open AI 的ViT-L/14 Clip 模型。嵌入是一个 768 值向量。每个token都有自己独特的Embedding向量。

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

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

将Embedding提供给噪声预测器

 

在输入噪声预测器之前,Embedding需要由文本转换器进一步处理。转换器就像一个用于条件的通用适配器。在这种情况下,它的输入是文本嵌入Embedding向量,但它也可以是其他东西,例如类标签、图像和深度图。转换器不仅进一步处理数据,而且还提供了一种包含不同调节模式的机制

Cross-attention交叉注意力

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

我们以提示词“蓝眼睛的男人”为例。Stable Diffusion将“蓝色”和“眼睛”这两个词配对在一起(提示词中的自我注意),这样它就会生成一个蓝眼睛的男人,而不是一个穿蓝色衬衫的男人。然后,它使用此信息将反向扩散转向包含蓝眼睛的图像。(提示词和图像之间的交叉注意力)

旁注:超网络是一种微调Stable Diffusion模型的技术,它劫持交叉注意力网络来插入样式。LoRA模型修改交叉注意力模块的权重来改变风格。单独修改这个模块就可以微调 Stabe Diffusion 模型,这一事实告诉您这个模块有多么重要。

其他条件

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

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

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

逐步解释Stable Diffusion过程

现在您已经了解了Stable Diffusion的所有内部机制,让我们通过一些示例来了解幕后发生的情况。

文本生成图像

在文本到图像中,您为Stable Diffusion提供文本提示词,它会返回图像。

步骤1Stable Diffusion在潜在空间中生成随机张量。您可以通过设置随机数生成器的种子来控制该张量。如果将种子设置为某个值,您将始终获得相同的随机张量。这是你在潜在空间中的影像。但目前这都是噪音。

 

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

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

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

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

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

 

噪声表

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


15 个采样步骤的噪声表。

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

图像生成图像

Image-to-image是SDEdit方法中首次提出的方法。SDEdit 可应用于任何扩散模型。因此,我们有用于Stable Diffusion的图像到图像(潜在扩散模型)。

输入图像和文本提示词作为图像到图像的输入。生成的图像将受到输入图像和文本提示词的限制。例如,使用这张业余绘画和提示词“带有茎、水滴、戏剧性灯光的完美青苹果照片(photo of perfect green apple with stem, water droplets, dramatic lighting)”作为输入,图像到图像可以将其变成专业绘画:

 

现在这是分步过程。

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

步骤2。噪声被添加到潜像中。去噪强度( Denoising strength )控制添加的噪声量。如果为0,则不添加噪声。如果为1,则添加最大量的噪声,使潜像成为完全随机的张量。

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

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

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

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

现在您知道什么是图像到图像了:它所做的就是设置带有一点噪声和一点输入图像的初始潜在图像。将去噪强度设置为 1 相当于文本转图像,因为初始潜在图像完全是随机噪声。

Inpainting 局部重绘

Inpainting实际上只是图像到图像的一种特殊情况。噪点会添加到您想要修复的图像部分。噪声量同样由降噪强度控制。

深度生成图像

深度到图像是图像到图像的增强;它使用深度图生成带有附加条件的新图像。

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

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

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

步骤4噪声预测器估计潜在空间的噪声,以文本提示和深度图为条件

步骤5. 从潜在图像中减去潜在噪声。这成为你新的潜像

重复步骤 4 和 5 的采样步骤数。

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

CFG值是什么?

如果不解释无分类器指导(CFG),这篇文章就不完整,这是人工智能艺术家每天都在修改的一个价值。要了解它是什么,我们需要首先了解它的前身:分类器指导……

分类器指导

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

分类器指导系数(classifier guidance scale)是控制扩散过程遵循标签的程度的参数。

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

分类器指导。左:无引导。中:小指导规模。右:指导规模大。

在高分类器指导下,扩散模型生成的图像将偏向极端或明确的示例如果你向模型询问一只猫,它会返回一张明确是猫的图像,除此之外别无其他。

分类器指导尺度控制指导的遵循程度。上图中,右边的采样比中间的采样具有更高的分类器指导尺度。实际上,该比例值只是带有该标签的数据的漂移项的乘数。

无分类器指导

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

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

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

文本提示词提供了文本到图像的指导。

CFG值

现在我们通过调节得到了一个无分类器的扩散过程,我们如何控制应该遵循多少指导?

无分类器引导 (CFG) 系数 是一个控制文本提示词对扩散过程的影响程度的值。当它设置为 0 时,图像生成是无条件的(即忽略提示)。较高的值会引导扩散朝向提示。

Stable Diffusion v1 与 v2

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

模型差异

Stable Diffusion v2 使用OpenClip进行文本嵌入。Stable Diffusion v1 使用 Open AI 的 CLIP ViT-L/14进行文本嵌入。这一变化的原因是

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

训练数据差异

Stable Diffusion v1.4经过训练

Stable Diffusion v2 的训练方式为

  • 使用 LAION -NSFW 分类器,在LAION-5B256x256 的子集上 以550k 步的分辨率  过滤露骨的色情材料,  并且 审美分数 >   =  punsafe=0.14.5
  • 在分辨率为 512x512 的图像上的同一数据集上,分辨率为 850k 步>= 512x512
  •  在同一数据集上使用v 目标的150k 步骤 。
  • 在图像上继续执行另外 140k 步 768x768 。

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

  • 在同一数据集上额外执行 55k 步(带有 punsafe=0.1
  • 另外 155k 额外步骤 punsafe=0.98

所以基本上,他们在最后的训练步骤中关闭了 NSFW 过滤器。

结果差异

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

一些有趣的读物