赞
踩
最近有一篇国外博主分享的 图解Stable Diffusion 博客 写的非常的好,让你从零开始彻底搞懂图像生成模型的原理,我在这里给大家专业翻译整理一下。
人工智能图像生成是最新的人工智能功能,令人惊叹不已(包括我的)。从文本描述中创造出引人注目的视觉效果的能力具有神奇的品质,并清楚地表明人类创造艺术的方式发生了转变。Stable Diffusion的发布是这一发展的一个明显的里程碑,因为它为大众提供了一个高性能模型(图像质量、速度和相对较低的资源/内存要求方面的性能)。
在尝试了人工智能图像生成之后,您可能会开始想知道它是如何工作的。
这是对稳定扩散如何工作的简单介绍。
稳定扩散具有多种用途,可以以多种不同的方式使用。让我们首先关注仅从文本生成图像(text2img)。上图显示了示例文本输入和生成的图像(实际完整的提示在这里)。除了文本到图像之外,使用它的另一种主要方式是使其改变图像(因此输入是文本+图像)。
让我们开始深入了解底层,因为这有助于解释组件、它们如何交互以及图像生成选项/参数的含义。
稳定扩散是一个由多个组件和模型组成的系统。它不是一个单一的模型。
当我们深入了解底层时,我们可以做的第一个观察是,有一个文本理解组件将文本信息转换为捕获文本中的想法的数字表示。
我们从高级视图开始,我们将在本文后面介绍更多机器学习细节。然而,我们可以说这个文本编码器是一种特殊的 Transformer 语言模型(技术上:CLIP 模型的文本编码器)。它接受输入文本并输出代表文本中每个单词/标记的数字列表(每个标记一个向量)。
然后将该信息呈现给图像生成器,图像生成器本身由几个组件组成。
图像生成器经历两个阶段:
该成分是稳定扩散的秘密武器。与以前的型号相比,这在很大程度上提高了性能。
该组件运行多个步骤来生成图像信息。这是稳定扩散接口和库中的步骤参数,通常默认为 50 或 100。
图像信息创建者完全在图像信息空间(或潜在空间)中工作。我们将在本文后面详细讨论这意味着什么。此属性使其比以前在像素空间中工作的扩散模型更快。从技术角度来说,该组件由 UNet 神经网络和调度算法组成。
“扩散”一词描述了该组件中发生的情况。信息的逐步处理最终导致生成高质量图像(由下一个组件,图像解码器)。
图像解码器根据从信息创建器获得的信息绘制图像。它仅在过程结束时运行一次以生成最终的像素图像。
这样我们就可以看到构成稳定扩散的三个主要组件(每个组件都有自己的神经网络):
扩散是发生在粉色“图像信息创建器”组件内部的过程。有了表示输入文本的标记嵌入和随机起始图像信息数组(也称为潜伏),该过程会生成图像解码器用来绘制最终图像的信息数组。
这个过程是一步一步发生的。每个步骤都会添加更多相关信息。为了直观地了解该过程,我们可以检查随机潜在数组,并查看它是否转换为视觉噪声。在这种情况下,视觉检查是将其通过图像解码器。
扩散发生在多个步骤中,每个步骤都对输入潜在数组进行操作,并生成另一个潜在数组,该数组更好地类似于输入文本以及模型从模型所训练的所有图像中获取的所有视觉信息。
我们可以可视化一组这些潜在变量,以查看每一步添加了哪些信息。
使用扩散模型生成图像的中心思想依赖于我们拥有强大的计算机视觉模型这一事实。给定足够大的数据集,这些模型可以学习复杂的操作。扩散模型通过将问题描述如下来处理图像生成:
假设我们有一张图像,我们生成一些噪声,并将其添加到图像中。
现在可以将其视为训练示例。我们可以使用相同的公式创建大量训练示例来训练图像生成模型的核心组件。
虽然此示例显示了从图像(数量 0,无噪声)到总噪声(数量 4,总噪声)的一些噪声量值,但我们可以轻松控制向图像添加多少噪声,因此我们可以将其分散到数十个噪声量中。步骤,为训练数据集中的所有图像为每个图像创建数十个训练示例。
有了这个数据集,我们可以训练噪声预测器,并最终得到一个很好的噪声预测器,它在特定配置下运行时实际上会创建图像。如果您接触过机器学习,那么训练步骤应该看起来很熟悉:
现在让我们看看如何生成图像。
经过训练的噪声预测器可以获取噪声图像和去噪步骤的数量,并且能够预测噪声切片。
采样的噪声是经过预测的,因此如果我们从图像中减去它,我们会得到一个更接近模型训练图像的图像(不是确切的图像本身,而是分布-像素排列的世界,其中天空通常是蓝色,在地面之上,人有两只眼睛,猫看起来有某种方式——尖尖的耳朵,显然不为所动)。
如果训练数据集是美观的图像(例如,训练稳定扩散的LAION Aesthetics),那么生成的图像往往会美观。如果我们在徽标图像上对其进行训练,我们最终会得到一个徽标生成模型。
这总结了通过扩散模型生成图像的描述,主要如去噪扩散概率模型中所述。现在您已经有了这种扩散的直觉,您不仅了解稳定扩散的主要组成部分,还了解 Dall-E 2 和 Google 的 Imagen。
请注意,我们到目前为止描述的扩散过程在不使用任何文本数据的情况下生成图像。因此,如果我们部署这个模型,它会生成漂亮的图像,但我们无法控制它是否是金字塔、猫或其他任何东西的图像。在接下来的部分中,我们将描述如何将文本合并到该过程中,以控制模型生成的图像类型。
为了加速图像生成过程,稳定扩散论文不是在像素图像本身上运行扩散过程,而是在图像的压缩版本上运行扩散过程。该论文将其称为“出发到潜在空间”。
这种压缩(以及后来的解压缩/绘画)是通过自动编码器完成的。自动编码器使用其编码器将图像压缩到潜在空间中,然后使用解码器仅使用压缩信息来重建图像。
现在,前向扩散过程是在压缩的潜在变量上完成的。噪声切片是应用于那些潜在图像的噪声,而不是应用于像素图像。因此,噪声预测器实际上经过训练来预测压缩表示(潜在空间)中的噪声。
前向过程(使用自动编码器的编码器)是我们生成数据来训练噪声预测器的方式。一旦经过训练,我们就可以通过运行相反的过程(使用自动编码器的解码器)来生成图像。
这两个流程如 LDM/Stable Diffusion 论文的图 3 所示:
该图还显示了“调节”组件,在本例中是描述模型应生成什么图像的文本提示。那么让我们深入研究一下文本组件。
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 在图像及其标题数据集上进行训练。想象一个像这样的数据集,只有 4 亿张图像及其标题:
事实上,CLIP 是根据从网络上抓取的图像及其“alt”标签进行训练的。
CLIP 是图像编码器和文本编码器的组合。它的训练过程可以简化为拍摄图像及其标题。我们分别使用图像和文本编码器对它们进行编码。
然后,我们使用余弦相似度比较生成的嵌入。当我们开始训练过程时,即使文本正确描述了图像,相似度也会很低。
我们更新这两个模型,以便下次嵌入它们时,得到的嵌入是相似的。
通过在数据集中和大批量重复此操作,我们最终使编码器能够生成狗的图像和句子“狗的图片”相似的嵌入。就像在word2vec中一样,训练过程也需要包含不匹配的图像和标题的负例,并且模型需要为它们分配较低的相似度分数。
为了使文本成为图像生成过程的一部分,我们必须调整噪声预测器以使用文本作为输入。
我们的数据集现在包含编码文本。由于我们在潜在空间中操作,因此输入图像和预测噪声都在潜在空间中。
为了更好地了解文本标记在 Unet 中的使用方式,让我们更深入地了解 Unet 内部。
我们首先来看一个不使用文本的扩散 Unet。它的输入和输出如下所示:
在里面,我们看到:
1.Unet 是一系列用于转换潜在数组的层
2.每一层都对前一层的输出进行操作
3.一些输出(通过剩余连接)被馈送到网络稍后的处理中
4.时间步长被转换为时间步长嵌入向量,这就是在层中使用的内容
现在让我们看看如何改变这个系统以包括对文本的关注。
我们需要添加对文本输入(技术术语:文本调节)支持的系统的主要更改是在 ResNet 块之间添加一个注意层。
请注意,ResNet 块并不直接查看文本。但注意力层将这些文本表示合并到潜在层中。现在,下一个 ResNet 可以在处理中利用合并的文本信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。