作者|Jay Alammar
翻译|杨婷、徐佳渝
最近,AI 图画生成引人注目,它能够依据文字描绘生成精巧图画,这极大地改变了人们的图画创作方法。Stable Diffusion 作为一款高功能模型,它生成的图画质量更高、运转速度更快、耗费的资源以及内存占用更小,是 AI 图画生成范畴的里程碑。
在触摸了 AI 图画生成今后,你或许会好奇这些模型背面的作业原理。
下面是对 Stable Diffusion 作业原理的概述。
Stable Diffusion 用处多样,是一款多功能模型。首要它能够依据文本生成图画(text2img)。上图是从文本输入到图画生成的示例。除此之外,咱们还能够运用 Stable Diffusion 来替换、更改图画(这时咱们需要一同输入文本和图画)。
下面是 Stable Diffusion 的内部结构,了解内部结构能够让咱们更好地了解 Stable Diffusion 的组成、各组成部分的交互方法、以及各种图画生成选项/参数的意义。
1
Stable Diffusion 的组成
Stable Diffusion 并不是一个单一模型,而是由多个部分和模型一同构成的体系。
从内部来看,首要咱们能够看到一个文本了解组件,这个组件将文本信息转化为数字标明(numeric representation)以捕捉文本意图。
这部分主要对 ML 进行大约介绍,文章后续还会讲解更多细节。能够说这个文本了解组件(文本编码器)是一个特殊的 Transformer 言语模型(严格来说它是一个 CLIP 模型的文本编码器)。将文本输入到 Clip 文本编码器得到特征列表,关于文本中的每一个 word/token 都有会得到一个向量特征。
然后将文本特征作为图画生成器的输入,图画生成器又由几部分组成。
图画生成器两进程:
1-图画信息创立器(Image information creator)
图画信息创立器是 Stable Diffusion 特有的关键部分,也是其功能远超其他模型的原因。
图画信息创立器运转多个 step 生成图画信息。Stable Diffusion 接口(interfaces)和库(libraries)的 step 参数一般默认为 50 或 100。
图画信息创立器彻底在图画信息空间(亦称潜在空间)上运转,这让 Stable Diffusion 比曾经在像素空间(pixel space)上运转的分散模型速度更快。从技术上讲,图画信息创立器由 UNet 神经网络和调度算法组成。
“分散”一词描绘了图画信息创立器中发生的作业。由于图画信息创立器对信息作了逐渐处理,所以图画解码器(image decoder)才干随后产出高质量图画。
2-图画解码器(Image Decoder)
图画解码器依据图画信息创立器的信息绘制图画,它只用在进程结束时运转一次,以生成终究的像素图画。
这样就构成了 Stable Diffusion 的三个主要组成部分,每个部分都有自己的神经网络:
-
ClipText: 用于文本编码。输入: 文本。输出: 77 个 token embeddings 向量,每个向量有 768 维。
-
UNet+调度程序: 在信息(潜在)空间中逐渐处理信息。输入: 文本 embeddings 和一个初始化的多维数组(结构化的数字列表,也称为张量)组成的噪声。输出:经过处理的信息数组。
-
主动编码解码器(Autoencoder Decoder): 运用经过处理的信息数组绘制终究图画。输入:经过处理的信息数组(维数:(4,64,64))输出: 生成的图画(维数:(3,512,512),即(红/绿/蓝;宽,高))。
2
到底何为分散(Diffusion)?
分散是发生在粉色区域图画信息创立器组件中的进程。这一部分有一个标明输入文本的 token embeddings 和一个随机初始化的图画信息数组,这些数组也被称为 latents,在这个进程中会发生一个信息数组,图画解码器(Image Decoder)运用这个信息数组生成终究图画。
分散是循序渐进逐渐发生的,每一步都会添加更多的相关信息。为了更加直观地了解这个进程,咱们能够检查随机 latents 数组,看它是否转化为了视觉噪音(visual noise)。在这种情况下,视觉检查(Visual inspection)是经过图画解码器进行的。
分散分为多个 step,每个 step 都在输入的 latents 数组上运转,而且会发生另一个 latents 数组,这个数组更类似于输入文本以及模型在模型练习时的一切图画中获取的一切视觉信息。
咱们能够对一组这样的 latents 数组履行可视化,看看每一步都添加了什么信息。这一进程令人拍案叫绝。
「链接」
在这种情况下,进程 2 和 4 之间发生了一些特别有意思的作业,就好像轮廓是从噪音中显现出来的。
「链接」
3
Diffusion 的作业原理
分散模型图画生成的核心是强壮的计算机视觉模型。在足够大的数据集的基础上,这些模型能够学会很多复杂运算。分散模型经过如下方法建构问题来完结图画生成:
假定咱们有一个图画,咱们首要生成一些噪音(noise),然后将这些噪音添加到图画上。
咱们能够将这看成是一个练习示例。之后咱们运用相同的公式去创立更多的练习示例,然后用这些示例去练习图画生成模型的中心组件。
尽管这个比如展现了从图画(总量 0,没有噪音)到总噪音(总量 4,总噪音)的一些噪音值,可是咱们能够轻松操控向图画中添加的噪音,因而咱们能够将其分为数十个 step,为数据会集的每个图画创立数十个练习示例。
有了这个数据集,咱们能够练习噪音猜测器(noise predictor),并终究得到一个在特定装备下运转时能够创立图画的猜测器。触摸过 ML 的人会觉得练习进程十分了解:
接下来咱们来看看 Stable Diffusion 是怎么生成图画的。
4
经过降噪绘图
经过练习的噪音猜测器能够对噪音图画进行降噪处理,而且能够猜测噪音。
由于样本噪音(sampled noise)被猜测,所以如果咱们从图画中去掉这个样本,咱们得到的图画就会更挨近模型练习的图画。(这个图画不是确切的图画自身,而是图画分布,也便是图画的像素排列,在像素排列中天空通常是蓝色的,高于地面,人有两只眼睛,猫有尖耳朵而且总是无精打采的)。
如果练习数据会集的图画比较漂亮,比如说 Stable Diffusion 练习的 LAION Aesthetics,那么练习出来的图画的可观赏性也会更高。如果咱们在 logo 图画上对其进行练习,那么咱们终究会得到一个 logo 生成模型。
这儿总结了分散模型处理图画生成的进程,主要如论文 Denoising Diffusion Probabilistic Models 所述。相信你对分散的意义有了必定的了解,知道了 Stable Diffusion、Dall-E 2 和谷歌 Imagen 的主要组件。
值得注意的是,到目前为止咱们所描绘的分散进程,没有运用任何文本数据,只需运转模型就能生成精巧图画。不过咱们无法操控图画的内容,它或许是一座金字塔,也或许是一只猫。接下来,咱们将讨论怎么将文本信息融入分散进程以操控图片类型。
5
速度提升:在紧缩(Latent)数据中分散
为了加快图画生成进程,Stable Diffusion 论文没有在像素图画进步行运转,而是在图画的紧缩版别上运转。论文将这称为前往潜在空间(Departure to Latent Space)。
紧缩(随后是解紧缩/绘图)经过编码器完结。主动编码器运用 Image Encoder 将图画紧缩进潜空间,然后运用 Image Decoder 再对紧缩信息进行重构。
正向分散在潜空间上完结。噪声信息应用于潜空间,而不是应用于像素图象。因而,练习噪声猜测器(noise predictor)实际上是为了猜测紧缩标明(compressed representation)上的噪音,这个紧缩标明也被称为潜空间(latent space)。
正向分散是运用 Image Encoder 生成图画数据,来练习噪声猜测器。练习一旦完结,就能够履行反向分散,运用 Image Decoder 生成图画。
LDM/Stable Diffusion 论文的图 3 中提及了这两个进程:
上图还显现了“conditioning”组件,这个组件在本例中是描绘模型生成图画的文本提示词(text prompts)。接下来,咱们持续探讨文本组件。
6
文本编码器:一种 Transformer 言语模型
Transformer 言语模型作为言语了解组件,能够承受文本提示词,生成 token embeddings。Stable Diffusion 模型运用的是 ClipText(根据 GPT 的模型),而论文中选用的是 BERT。
Imagen 论文标明,言语模型的挑选相当重要。相较于较大的图画生成组件,较大的言语模型组件对生成图画的质量影响更大。
较大的/更好的言语模型对图画生成模型的质量有巨大的影响。资料来历:Saharia 等人所著论文 Google Imagen 中的图 A.5。
前期的 Stable Diffusion 模型仅运用了 OpenAI 发布的预练习模型 ClipText。未来模型或许转向新发布的更大的 CLIP 变体 OpenCLIP。(更新于 2022 年 11 月,详情见 Stable Diffusion V2 uses OpenClip。与仅含有 630 万文本模型参数的 ClipText 相比,OpenCLIP 文本模型参数多达 3.54 亿。)
7
怎么练习 CLIP
CLIP 模型是在图画和图画阐明数据集上练习的。咱们能够设想这样一个数据集,它里边有 4 亿张图画以及这些图画阐明的材料。
图画及图画阐明数据集
实际上,CLIP 是在网络上抓取的带有“alt”标签的图画上练习的。CLIP 是图画编码器和文本编码器的结合。简略来说,练习 CLIP 便是分别对图画和图画文本阐明进行编码。
然后,运用余弦类似度来比较生成的 embeddings。刚开始练习时,即使文本正确描绘了图画,类似度也会很低。
咱们更新了这两个模型,这样下次嵌入它们时就能够得到类似的 embeddings。
经过在数据集上重复此操作并运用大的 batch size,终究使编码器能够生成图画和文本阐明类似的 embeddings。如 word2vec,练习进程也需要包括不匹配的图画和文本阐明作为负样本,以得到较低的类似度分数。
8
将文本信息融入图画生成进程
为了使文本融入图画生成,咱们须调整噪声猜测器来输入文本。
现在,在数据会集加入文本。由于咱们是在潜空间中运转,所以输入的图画和猜测的噪声都处于潜空间中。
为了更好地了解 UNet 中文本 tokens 的运用方法,下面咱们将进一步探究 UNet 模型。
Unet 噪声猜测器的 Layers(未运用文本)
首要来看没有运用文本的 UNet,其输入和输出如下:
能够看到:
-
UNet 是一系列用于转换 latents 数组的 layers
-
每一 layer 都对前一个 layer 的输出进行操作
-
Some of the outputs are fed (via residual connections) into the processing later in the network
-
经过残差衔接(residual connections),将网络前面的 layer 输出送入到后边的 layer 进行处理
-
时间步长被转化为 embedding 向量,在网络层中运用
Unet 噪声猜测器中的 Layers (带文本)
现在让咱们看看怎么改变该体系以添加对文本的关注度。
为了给文本输入供给支持,也便是专业上所说的文本条件(text conditioning),咱们需要在体系的 ResNet blocks 之间添加一个注意力层(attention layer)。
文本信息不直接由 ResNet 处理,而是经过注意力层将这些文本标明融入到 latents 中。这样,下一个 ResNet 就能在处理进程中利用融入的文本信息。
9
总结
希望本文能帮助你深化了解 Stable Diffusion 的运作机制。尽管还涉及到许多其他概念,可是只需了解了以上板块,这些概念就会变得很简单了解。下面是一些我认为很有用的资源。
资源
-
www.youtube.com/shorts/qL6m…
-
huggingface.co/blog/stable…
-
huggingface.co/blog/annota…
-
www.youtube.com/watch?v=J87…
-
www.youtube.com/watch?v=ltL…
-
ommer-lab.com/research/la…
-
lilianweng.github.io/posts/2021-…
-
www.youtube.com/watch?v=_7r…
(本文在遵从CC BY-NC-SA 4.0 协议的基础上由 OneFlow 编译发布,译文转载请联系取得授权。 原文:Alammar, J (2018). The Illustrated Transformer [Blog post].
jalammar.github.io/illustrated…
欢迎 Star、试用 OneFlow 最新版别:
github.com/Oneflow-Inc…