作者|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 的运作机制。尽管还波及到许多其余概念,然而只有相熟了以上板块,这些概念就会变得很容易了解。上面是一些我认为很有用的资源。
资源
- https://www.youtube.com/short…
- https://huggingface.co/blog/s…
- https://huggingface.co/blog/a…
- https://www.youtube.com/watch…
- https://www.youtube.com/watch…
- https://ommer-lab.com/researc…
- https://lilianweng.github.io/…
- https://www.youtube.com/watch…
(本文在遵循 CC BY-NC-SA 4.0 协定的根底上由 OneFlow 编译公布,译文转载请分割取得受权。原文:Alammar, J (2018). The Illustrated Transformer [Blog post]. https://jalammar.github.io/il…)
欢送 Star、试用 OneFlow 最新版本:https://github.com/Oneflow-In…