4 Stable Diffusion
Stable Diffusion 是由 Stability AI 开发的开源分散模型。Stable Diffusion 能够完成多模态任务,包括:文字生成图画(text2img)、图画生成图画(img2img)等。
4.1 Stable Diffusion 的组成部分
Stable Diffusion 由两部分组成:
-
文本编码器:提取文本 prompt 的信息
-
图画生成器:依据文本 embedding 生成图画
- 图画信息创立器:多步分散进程。步长是其中一个超参数
- 图画解码器:只在最终生成图画时运转一次
-
**文本编码器:**由一种特别的 Transformer 编码器组成,例如:OpenAI 的 Clip。
-
图画信息创立器:由自编码器(通常是 U-Net)和噪音机制组成。
-
图画解码器:由自编码器的解码器组成。
Stable Diffusion Pipeline:
-
Clip:文本信息编码
- 输入:文本
- 输出:77 token 的 embedding 向量,每个包括 768 维
-
U-Net + Noise Scheduler:逐步把信息分散至潜空间中
- 输入:文本 embedding 和由噪音组成的多维 tensor
- 输出:处理后的 tensor
- **自编码器的解码器:**运用分散/处理后的信息生成图画
- 输入:经过处理的 tensor(shape: (4, 64, 64))
- 输出:生成图画(shape:(3, 512, 512))
4.2 分散进程(图画信息创立器)
分散进程产生在图画信息创立器中。该进程**一步步(step by step)**进行。初始的输入为文本 embedding 和一个随机的图画信息数组(也称为潜变量 latents)。每一步分散的输入是潜变量,输出是信息进一步丰富的潜变量。最终的输出是一张图画。如图:
4.2.1 分散进程的作业原理
分散进程的原理其实是练习了一个根据 U-Net 和噪音等级机制(schedule)的噪音等级预测器。
分散进程包括如下阶段:
- 数据集准备阶段:生成练习数据
- 输入:包括明晰图画的数据集、不同级别的噪音等级机制
- 流程:从数据集中抽样得到明晰图画,从噪音等级机制中抽样得到某种级别的噪音样本,把该噪音和图画融合
- 输出:带有某种等级的噪音图画
- 练习阶段:练习噪音等级预测器
- 输入:把上一阶段中的噪音图画和明晰图画作为输入数据,对应的噪音样本作为标签。
- 练习:选用 U-Net 作为神经网络,选用监督 loss 对输入进行学习
- 输出:某种等级的噪音样本
- 推断阶段:去噪并生成图画
- 输入:练习完成的 U-Net、某个噪音图画
- 推断:U-Net 输出该噪音图画的噪音等级(噪音样本)
- 输出:把噪音图画减去噪音样本,得到去噪图画。不断重复该进程,最终得到类似明晰图画的图画(并不一定完全相同)
生成图画的结果依赖于练习数据集。例如:Stable Diffusion 选用了带有艺术作用的 LAION Aesthetics 数据集,因而生成图画也具有艺术作用。
4.3 提速:在潜空间分散
Stable Diffusion 的分散进程是在潜空间中开展的,而不是整个图画像素,这样的紧缩进程加快了图画生成的速度。
该紧缩进程经过**自编码器(autoencoder)**完成。自编码器的编码器把图画紧缩至潜空间,并用解码器依据紧缩信息重建图画。因而,在前向分散进程中,等级噪音应用于潜变量,而不是图画像素。所以 U-Net(噪音预测器)预测的噪音也是以潜变量的形式表明的。
前向分散进程就是给明晰图画不断增加噪音的进程,也是生成数据集练习噪音预测器的进程,当噪音预测器练习完毕后,就能够运转反向抽样进程来去噪并重建图画。
在 Stable Diffusion、LDM(潜变量分散模型) 的论文中,该流程如下:
4.4 Transformer(文本编码器)
Transformer 模型依据文本输入生成 token embedding。
Stable Diffusion 的开源模型中运用的是 OpenAI 的 CLIP(根据 GPT),而其论文中运用的是 Google 的 BERT。两者都是 Transformer 的编码器(encoder)。
有作业指出:文本编码器的挑选关于分散模型的表现比图画生成器的挑选更重要。
4.4.1 CLIP 的练习进程
CLIP 的练习流程为:
- 输入:练习数据为网页爬取的图画和其对应 HTML 标签特点 alt,也就是图画 + 注释(caption)
- 练习:CLIP 分别运用图画编码器和文本编码器把两种输入数据转化为图画 embedding 和文本 embedding,运用余弦相似度作为 loss 和标签 embeddings 进行比较并更新参数
- 输出:练习完毕的 CLIP 接收图画和文本描述并生成对应的 embeddings
4.5 参加文本数据
有了文本编码器后就要给分散模型参加文本数据。
下面是有、无文本的分散进程比照:
参加文本数据后,噪音预测器(U-Net)也要产生相应变化,主要是在每个 ResNet 块后增加注意力运算:
参考
- Ling Yang et al. “Diffusion Models: A Comprehensive Survey of Methods and Applications .” arXiv 2023.
- Jonathan Ho et al. “Denoising Diffusion Probabilistic Models”. NeurIPS 2020.
- Jiaming Song et al. “Denoising Diffusion Implicit Models”. ICLR 2021.
- Alex Nichol et al. “Improved Denoising Diffusion Probabilistic Models”. ICML 2021.
- Robin Rombach et al. “High-Resolution Image Synthesis with Latent Diffusion Models”. arXiv 2022.
- Prafulla Dhariwal et al. Diffusion “Models Beat GANs on Image Synthesis”. NeurIPS 2021.
- Jonathan Ho et al. “Classifier-Free Diffusion Guidance”. NeurIPS Workshop 2021.
- Tim Salimans et al. “Progressive Distillation for Fast Sampling of Diffusion Models”. ICLR 2022.
- Chenlin Meng et al. On Distillation of Guided Diffusion Models”. CVPR 2023.