原文信息

翻译自作者V2 Nov 2022版本。

原文链接:The Illustrated Stable Diffusion – Jay Alammar – Visualizing machine learning one concept at a time. (jalammar.github.io)

作者博客:@Jay Alammar

这是我翻译这位大佬的第五篇文章了。之前的作业能够看:

  • 【翻译】图解transformer – ()

  • 【翻译】图解BERT、ELMo等 | NLP搬迁学习初步 – ()

  • 【翻译】图解GPT-2 – ()

  • 【翻译】图解GPT-3原理 – ()

带引证标签的内容 归于我自己加的,和原作者无关,如有漏无欢迎批评指正。 尽量坚持原文意思的意译。

原文翻译

AI最近比较吸引人的一个方向是图画生成。从文本描绘中生成图画,某种意义上也意味着人类发明艺术的方法的转变。

Stable Diffusion的发布是这一开展的里程碑,因为它的存在让普通用户运用高性能模型成为可能。

高性能模型:图画质量高、生成速度快而且相对来说对内存等资源的要求较小。

在试过AI图画生成后,你肯定想知道其背后原理。

本文便是对Stable Diffusion作业原理的简要介绍。

【翻译】图解Stable Diffusion

Stable Diffusion非常灵敏,能够用不同的方法进行图画生成。

咱们先来看一下只用文本来生成图画(text2img)。上图向咱们展现了输入文本经过Stable Diffusion的生成的成果。

除了从文本中生成图画之外,另一种首要的生成办法是修正图片,输入是文本和图画。

比方下图,输入一张图片,再加上文字,图片就能够依据文字内容修正图画。

【翻译】图解Stable Diffusion

现在让咱们深化了解一下。解释一下不同的组件之间是怎样效果的,以及图画生成中选项、参数的含义。

Stable Diffusion的组成部分

Stable Diffusion是由几个组件和模型共同组成的,不是一个单一模型。

当咱们深化了解的时分,咱们首先能够看到一个文本了解组件,它将文本信息转化为数字标明,用于捕获文本中的信息。

【翻译】图解Stable Diffusion

方才咱们是从更高层面看的整个模型,接下来本文会深化讲一下机器学习的细节。

其间的文本编码器是一个特殊的Transformer言语模型,其实便是CLIP模型的文本编码器。文本编码器承受输入文本,输出代表每个单词或token的向量。然后将这些信息提供给图画生成器。

【翻译】图解Stable Diffusion

图画生成要经过两个阶段:

1. 图画信息生成器

这个组件是Stable Diffusion技术的秘密武器。它的完成是Stable Diffusion毒打前人模型取得更好的性能的关键。

这个组件经过多个进程来生成图画信息。进程 这个是Stable Diffusion的参数,通常默以为50或100。

图画信息生成器完全在图画信息空间(或潜空间)中运转。咱们稍后会具体评论这意味着什么。这个特性使Stable Diffusion比曾经在像素空间中作业的分散模型更快。在技术是线上,这个组件由一个U-Net神经网络和一个调度算法组成。

“分散”一词描绘了在这个组件中发生的作业。信息一步步被处理,终究生成高质量的图画(生成这一步是由下一个组件图画解码器进行的)。

【翻译】图解Stable Diffusion

2. 图画解码器

图画解码器 用 信息生成器中获取的信息 画出图画。它只在整个画图进程结束时运转一次,发生终究的图画。

【翻译】图解Stable Diffusion

经过这个,咱们能够看到组成Stable Diffusion的三个首要组件(每个组件都有自己的神经网络):

  • ClipText:用于文本编码。

    输入:文本。

    输出:77个标记嵌入向量,每个向量有768个维度。

  • UNet+调度器:在信息(潜在)空间中逐渐处理分散信息。

    输入:文本嵌入和由噪声组成的起始多维数组(结构化数字列表,也称为张量)。

    输出:处理后的信息张量。

  • 主动编码器-解码器运用处理后的信息数组制作终究图画。

    输入:处理后的信息数组(维度:(4,64,64))

    输出:生成的图画(维度:(3, 512, 512),即(赤色/绿色/蓝色,宽度,高度))

【翻译】图解Stable Diffusion

所以什么是“分散”?

“分散”指的是下图中粉色这一块组件“图画信息生成器”中发生的处理进程。该组件获取能标明输入文本信息的token嵌入一个随机初始化的图画信息张量(aka 潜变量),然后用它们生成一个信息张量,把这个信息张量交给图画解码器,去生成终究的图画。

【翻译】图解Stable Diffusion

这个进程是一步一步进行的,逐渐添加相关信息。想更直观的了解这个进程的话咱们能够去查看随机潜变量那个张量,能够看到它逐渐转变为图画噪声。这个查看进程需求凭借图画解码器进行。

作者意思是,这个分散进程是一步一步进行的,初始时分潜变量张量是随机的,每一步都给它加上一点文本相关信息。怎样知道它是逐渐进行的?咱们能够查看处理进程中的潜变量张量的改变,把其间一步的张量放到图画解码器中去生成,能够看到生成的东西从随机噪声变为咱们想要的东西。

【翻译】图解Stable Diffusion

整个分散进程需求许多步,每个进程都对输入的潜变量矩阵进行操作,并生成下一步的潜变量矩阵,生成的这个潜变量矩阵会比前一步生成成果更契合输入信息,也会更像模型从练习会集获取的视觉信息。

【翻译】图解Stable Diffusion

经过下图咱们能够直观地看到这些潜变量即调集每一步都添加了什么信息。

【翻译】图解Stable Diffusion

整个处理进程如下图:

咱们能够看到第二步和第四步效果尤其惊人,就好像一堆噪声中突然就显现出了轮廓。

【翻译】图解Stable Diffusion

分散进程是怎样作业的

分散模型图画生成的核心要依赖于强大的计算机视觉范畴的模型。在足够大的数据集的基础上,这些模型能够学会许多复杂运算。分散模型经过如下方法建模问题以完成图画生成:

假设咱们有一个图画,咱们首先生成一些噪声,然后将这些噪声添加到图画上。

这里是广义的噪声,不只是声音上的狭义噪声。关于图画来说,相片中的噪点导致图画模糊,咱们就能够以为这些噪点是当前图画上的噪声。

【翻译】图解Stable Diffusion

咱们能够将这看成是一个练习示例。之后咱们运用同样的办法去创建更多的练习示例,然后用这些示例去练习咱们图画生成模型的核心组件。

【翻译】图解Stable Diffusion

虽然上图比方展现了从图画到噪音图的一些噪音值只要四步(0步不添加噪音,第4步将图画破坏为完全噪音),但实际上咱们能够很简单操控给图画添加多少噪音,因而咱们能够将整个进程分散到数十个进程中,为数据会集的每个图画创建数十个练习示例。

【翻译】图解Stable Diffusion

有了这个数据集,咱们就能够练习噪声猜测器了。练习完后会得到一个在特定装备下运转时能够生成图画的猜测器。假如你触摸过机器学习,那练习进程看起来应该很熟悉。

【翻译】图解Stable Diffusion

接下来咱们来看看 Stable Diffusion 是怎样生成图画的。

经过降噪生成图片

练习好的噪声猜测器,承受一张带噪图片和噪声步长作为输入,输出是它猜测的噪声。

【翻译】图解Stable Diffusion

猜测出来噪声之后,假如咱们从带噪图片中减去这个噪声,那咱们得到的图画就会得到一张和原始图片接近的图。(当然这里的“图”指的不是图画自身,而是图画遵守的分布,这个分布是图画像素的分布方法,决议了天空通常是蓝色并高于地面,人们有两只眼睛,猫……)

【翻译】图解Stable Diffusion

假如模型练习集的图片质量比较高,那练习出来的模型发生的图画也会比较美观。比方 Stable Diffusion用到了LAION Aesthetics练习集。假如咱们在 logo 图画上对其进行练习,那么咱们终究会得到一个 logo 生成模型。

laion-datasets/laion-aesthetic.md at main LAION-AI/laion-datasets (github.com)

【翻译】图解Stable Diffusion

项目官网:laion.ai/projects/

【翻译】图解Stable Diffusion

到这里咱们就讲完了关于分散模型图画生成的进程,首要是依据Denoising Diffusion Probabilistic Models描绘的。现在你已经掌握了分散的基本概念。你不仅了解了 Stable Diffusion,还了解了DALLE 2 和谷歌 Imagen 的首要组件。

留意嗷,到目前为止,咱们描绘的分散进程生成的图画不运用任何文本数据。假如咱们直接用这个模型,它会生成美观的图,但咱们无法操控它生成的是什么东西,可能是金字塔,可能是猫,还是其他任何东西。在接下来的内容中,咱们讲一下怎样将文本提示加入到图画生成进程中,以便操控模型生成的图画类型。

速度提升:分散在紧缩数据中进行而不是在图画上进行

为了加快图画生成的进程,稳定分散(Stable Diffusion)论文并不直接对像素图画进行分散进程,而是对图画的紧缩版本进行分散。该论文称之为“转移到潜空间”。

压这种紧缩(以及之后的解紧缩/制作)是经过自编码器完成的,自编码器运用编码器将图画紧缩到潜在空间中,然后解码器能够重构潜在空间上紧缩后的信息取得原图画。

【翻译】图解Stable Diffusion

现在,正向分散进程是在紧缩的潜在空间中完成的。噪声片段是应用于这些潜变量的噪声,而不是像素图画。因而,噪声猜测器实际上是练习在紧缩标明(潜空间)中猜测噪声的。

【翻译】图解Stable Diffusion

正向进程(运用自编码器的编码器)中咱们生成练习噪声猜测器所需的数据。练习结束后,咱们就能够经过运转逆向进程(运用自编码器的解码器)来生成图画。

【翻译】图解Stable Diffusion

这两个流程在LDM/Stable Diffusion论文的图3中是这么画的:

【翻译】图解Stable Diffusion

这张图右边部分还展现了“条件”组件,这个组件是模型生成图画进程中添加文字提示的,现在让咱们往下深挖这个图画的文本提示组件:

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

Transformer 言语模型作为言语了解组件,能够承受文本提示词并生成 token embeddings。Stable Diffusion 模型运用的是 ClipText(基于 GPT 的模型),而论文顶用的是BERT。

谷歌的 Imagen 论文标明,言语模型的选择对图画生成质量是非常重要的。你换个更大的图画生成组件 不如 换个更大的言语模型 对生成图画的质量的影响大。

【翻译】图解Stable Diffusion

早期的 Stable Diffusion 模型仅运用了 OpenAI 发布的预练习模型 ClipText。未来模型可能转向新发布的更大的 CLIP 变体 OpenCLIP。(更新于 2022 年 11 月,概况见 Stable Diffusion V2 uses OpenClip。与仅含有 630 万文本模型参数的 ClipText 比较,OpenCLIP 文本模型参数多达 3.54 亿。)

CLIP是怎样练习的

CLIP 模型是在图画-文本数据对上练习的。能够将该数据集幻想成下图中的形式,只不过该数据集包含了4亿张图画和相应的阐明:

【翻译】图解Stable Diffusion

实际上,CLIP数据集是网络上抓取的图画及其“alt”标签上的文本。

CLIP 是图画编码器和文本编码器的结合。简单来说,练习进程能够简化为将图画和其阐明进行编码。

【翻译】图解Stable Diffusion

然后运用余弦相似度比较它们的嵌入向量。

当咱们开始练习时,即使文本正确地描绘了图画,相似度计算出来也会很低。

【翻译】图解Stable Diffusion

所以咱们更新这两个模型,以便下一次嵌入它们时,生成的嵌入向量更加相似。

【翻译】图解Stable Diffusion

运用较大的batch size在整个数据集上重复这个进程,咱们终究得到编码器能够生成嵌入向量,在这些向量中,一张狗的图片和语句“一张狗的相片”是相似的。就像在Word2vec中一样,练习进程还需求包含图画和文本描绘不匹配的样本对作为负样,而且需求模型在计算这些负样本的时分给它们较低的相似度分数。

将文本信息融入图画生成进程

为了将文本加到图画生成进程中,咱们必须调整噪声猜测器,让它能承受文本作为输入。

【翻译】图解Stable Diffusion

咱们的数据集现在再加上一项:编码的文本。

因为咱们在潜在空间中进行计算的,因而输入图画和猜测噪声都在潜在空间中。

【翻译】图解Stable Diffusion

为了更好地了解文本token在U-net中的运用方法,让咱们进一步讲一下U-Net。

无文本的U-net噪声猜测器

首先让咱们看一下不运用文本的分散Unet的输入和输出怎样:

【翻译】图解Stable Diffusion

咱们能够看到:

  • U-net是一系列层,用于转化潜在张量
  • 每个层都在前一层的输出上操作
  • 一些输出经过残差连接添加到网络的后续处理中
  • 在每层中会把时间步转化为时间步嵌入向量

【翻译】图解Stable Diffusion

带文本的U-net噪声猜测器

现在让咱们看看怎样修正猜测器,让它能加上文本内容。

【翻译】图解Stable Diffusion

咱们需求其支持文本输入(术语:文本操控),首要是在ResNet块之间添加一个留意力层。

【翻译】图解Stable Diffusion

请留意,ResNet块不会直接看文本是什么。可是,留意力层能够将这些文本标明合并到潜在标明中。现在,下一个ResNet就能够在其处理中进程中利用这些整合的到潜在标明中的文本信息了。

结语

我期望这篇文章能让你对Stable Diffusion作业原理有一个初步知道,还有许多其他概念,我信任假如你了解了上边讲的内容,那你会很简单了解其他本文中没说到的概念。

下边是我发现的一些比较有用的资源,能够对其进行进一步了解。

其他资源

  • 我有一个一分钟的YouTube短片,介绍怎样运用Dream Studio和Stable Diffusion生成图画。

  • Stable Diffusion with Diffusers (huggingface.co)

  • The Annotated Diffusion Model (huggingface.co)

  • How does Stable Diffusion work? – Latent Diffusion Models EXPLAINED – YouTube

  • Stable Diffusion – What, Why, How? – YouTube

  • 论文原文:High-Resolution Image Synthesis with Latent Diffusion Models – Computer Vision & Learning Group (ommer-lab.com)

  • 假如想深化了解其间的数学原理What are Diffusion Models? | Lil’Log (lilianweng.github.io)

  • 观看fast.ai的技术视频Lesson 9: Deep Learning Foundations to Stable Diffusion, 2022 – YouTube


本文正在参加「金石方案」