[AIGC] Stable Diffusion是如何工作的?

英文原文:https://stable-diffusion-art.com/how-stable-diffusion-work/

稳定扩散是一种 latent(潜在)潜在扩散模型,可从文本生成 AI 图像。它不是在高维图像空间中操作,而是首先将图像压缩到潜在空间中。

通过将数据的维度降低到2D (在这种情况下可以被认为是“潜在空间”表示)

我们将深入了解它的幕后工作原理。

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

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

让我们深入了解一下。

稳定扩散能做什么?

最简单的形式是,稳定扩散是一种文本到图像模型。给它一个文字提示。它将返回与文本匹配的 AI 图像。

在这里插入图片描述
稳定的扩散将文字提示变成图像。

扩散模型

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

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

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

前向扩散

在这里插入图片描述
前向扩散将照片变成噪声

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

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

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

在这里插入图片描述

反向扩散

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

在这里插入图片描述
反向扩散过程恢复图像

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

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

训练是如何进行的

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

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

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

在这里插入图片描述
在每个步骤中依次添加噪声。噪声预测器估计每一步添加的总噪声。

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

反向扩散

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

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

在这里插入图片描述
反向扩散的工作原理是连续从图像中减去预测的噪声。

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

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

稳定扩散模型

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

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

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

Latent(潜在)扩散模型

稳定扩散旨在解决速度问题。就是这样。

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

Variational Autoencoder(VAE)变分自动编码器

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

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

在这里插入图片描述
变分自动编码器将图像转换为潜在空间或从潜在空间转换图像。

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

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

张量(Tensor)在深度学习中,张量实际上就是一个多维数组(multidimensional array),其目的是能够创造更高维度的矩阵、向量。

图像分辨率

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

由于稳定扩散 v1 在 512×512 图像上进行了微调,因此生成大于 512×512 的图像可能会导致重复的对象,例如臭名昭​​著的两个头

图像放大

要生成大尺寸,请将图像的至少一侧保持为 512 像素。使用 AI 放大器或image-to-image功能进行图像放大。

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

为什么潜在空间是可能的?

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

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

潜在空间中的反向扩散

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

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

什么是 .vae 文件?

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

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

Conditioning(调节)

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

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

文本调节(文本到图像)

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

在这里插入图片描述
如何处理文本提示并将其输入噪声预测器以引导图像生成。

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

Tokenizer(分词器)

在这里插入图片描述

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

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

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

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

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

Embedding(嵌入)

在这里插入图片描述
稳定扩散 v1 使用 Open AI 的 ViT-L/14 Clip 模型。嵌入是一个 768 值向量。每个标记都有自己独特的嵌入向量。嵌入由 CLIP 模型固定,该模型是在训练过程中学习的。

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

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

将嵌入提供给噪声预测器

在这里插入图片描述
从嵌入到噪声预测器。

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

Cross-attention(交叉关注)

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

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

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

其他条件

文本提示并不是调节稳定扩散模型的唯一方法。

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

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

逐步实现Stable Diffusion

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

Text-to-image

在文本到图像中,您为稳定扩散提供文本提示,它会返回图像。

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

在这里插入图片描述
在潜在空间中生成随机张量。

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

在这里插入图片描述
步骤 3. 从潜在图像中减去潜在噪声。这成为你新的潜在图片。

在这里插入图片描述
重复步骤2和3一定数量的采样步骤,例如20次。

步骤4.最后,VAE的解码器将潜在图像转换回像素空间。这是运行稳定扩散后获得的图像。

在这里插入图片描述
以下是图像在每个采样步骤中的演变方式。

在这里插入图片描述

噪音表

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

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

Image-to-image

图像到图像使用稳定扩散将一幅图像转换为另一幅图像。它是在SDEdit方法中首次提出的。 SDEdit 可应用于任何扩散模型。因此,我们有用于稳定扩散的图像到图像(潜在扩散模型)。

输入图像和文本提示作为图像到图像的输入提供。生成的图像将受到输入图像和文本提示的限制。例如,使用这张业余绘画和提示“带有茎、水滴、戏剧性灯光的完美青苹果照片”作为输入,图像到图像可以将其变成专业绘画:
在这里插入图片描述
现在这是分步过程。

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

在这里插入图片描述
步骤 2. 将噪声添加到潜在的图像中。去噪强度控制添加的噪声量。如果为0,则不添加噪声。如果为1,则添加最大量的噪声,使潜在的图像成为完全随机的张量。

在这里插入图片描述
步骤 3. 噪声预测器 U-Net 将潜在噪声图像和文本提示作为输入,并预测潜在空间(4x64x64 张量)中的噪声。
在这里插入图片描述
步骤 4. 从潜在图像中减去潜在噪声。这成为你新的潜像。

在这里插入图片描述
重复步骤3和4一定数量的采样步骤,例如20次。

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

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

Inpainting

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

图像深度

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

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

在这里插入图片描述
步骤 2.MiDaS(AI 深度模型)根据输入图像估计深度图。

在这里插入图片描述
步骤 3. 将噪声添加到潜像中。去噪强度控制添加的噪声量。如果去噪强度为0,则不添加噪声。如果去噪强度为1,则添加最大噪声,使得潜像变成随机张量。

在这里插入图片描述
步骤 4. 噪声预测器根据文本提示和深度图估计潜在空间的噪声。

在这里插入图片描述
步骤 5. 从潜在图像中减去潜在噪声。这成为你新的潜像。

在这里插入图片描述
重复步骤 4 和 5 的采样步骤数。

步骤 6.VAE的解码器对潜像进行解码。现在,您可以获得从深度到图像的最终图像。
在这里插入图片描述

Classifier-Free Guidance(CFG)值是什么?

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

Classifier guidance(分类器指导)

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

分类器指导尺度是控制扩散过程遵循标签的程度的参数。

下面是我从这篇论文中偷来的一个例子。假设有 3 组图像,标签为“猫”、“狗”和“人”。如果扩散是无引导的,模型将从每个组的总人口中抽取样本,但有时它可能会抽取适合两个标签的图像,例如一个男孩在抚摸一只狗。
在这里插入图片描述
分类器指导。左:无引导。中:小指导规模。右:指导规模大。

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

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

Classifier-free guidance(无分类器指导)

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

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

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

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

无分类器指导量表

现在,我们有一个使用调节的无分类器扩散过程。我们如何控制人工智能生成的图像应该遵循指导的程度?

无分类器引导尺度(CFG 尺度)是控制文本提示引导扩散过程的程度的值。当 CFG 比例设置为 0 时,AI 图像生成是无条件的(即忽略提示)。较高的 CFG 比例会引导扩散朝向提示。

Stable Diffusion v1.5 与 v2

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

模型差异

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图像

训练数据差异

Stable Diffusion v1.4 经过训练

Stable Diffusion v2 的训练方式为

  • 使用 LAION-NSFW 分类器,在 punsafe=0.1 和审美分数 >= 4.5 的情况下,在 LAION-5B 的子集上以 256x256 的分辨率执行 550k 步,过滤掉露骨的色情内容。
  • 在分辨率 >= 512x512 的图像上的同一数据集上,在分辨率 512x512 下执行 850k 步。
  • 在同一数据集上使用 v-objective 的 15 万步。
  • 在 768x768 图像上恢复另外 140k 步。

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

  • 在同一数据集上额外执行 55k 步(punsafe=0.1)
  • punsafe=0.98 时又多了 155k 步

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

结果差异

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

v2 和 v2.1 模型并不流行。人们只使用经过微调的 v1.5 和 SDXL 模型。

SDXL模型

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

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

在这里插入图片描述
SDXL 管道由基本模型和refiner模型组成。

SDXL 模型实际上有两个模型。您运行基本模型,然后运行refiner模型。基本模型设定全局组成。细化器模型添加了更精细的细节。

您可以单独运行基本模型,无需细化器。

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 型号的图像尺寸

伦理、道德和法律问题

稳定扩散与其他人工智能模型一样,需要大量数据进行训练。它的第一个版本使用了没有版权许可的图像。尽管这对于研究来说可能没问题,但其商业受欢迎程度引起了版权所有者和律师的注意。

2023 年 1 月,三名艺术家对 Stable Diffusion 的商业合作伙伴 Stability AI 提起集体诉讼。次月,图像巨头 Getty 又对其提起诉讼

法律和道德问题很复杂。它质疑计算机通过模仿艺术家风格创作新作品是否构成版权侵权。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值