Stable Diffusion 系列模型
Stable Diffusion 系列模型
1. 背景
stable diffusion系列从 LDM 到SDXL 一直是开源工作里传播和使用最广的,大量工作都在此基础上展开。
从 2021年5月 openai 发表的 DM beat GANS 开始,diffusion model 的效果开始超过传统的 GAN 模型,进一步推动了 DM 在图像生成领域的应用。
早期的 DM 作用于像素空间,训练和推理的成本很高,为了实现在有效的计算资源上训练 DM,同时保持其质量和灵活性,作者提出将 DM 应用于强大的预训练 AutoEncoder 的隐空间(Latent Space),这也就是为什么提出的模型叫 LDM。此外,作者还在模型中引入交叉注意力层,可以将文本、边界框等条件很方便地引入到模型中,将 DM 转化为强大而灵活的生成器,实现高分辨率的生成。作者提出的 LDM 模型同样在图像修复、类别条件生成等方面取得很好的效果,同时与基于像素空间的扩散模型相比,大大降低计算要求。
2. 演进
2.1 Latent Diffusion
Stable Diffusion 之前的版本,对应的正是论文的开源版本,位于代码库 High-Resolution Image Synthesis with Latent Diffusion Models 中。
该版本发布于 2022 年 4 月,主要包含三个模型:
- 文生图模型:基于 LAION-400M 数据集训练,包含 1.45B 参数。
- 图像修复模型:指定区域进行擦除。
- 基于 ImageNet 的类别生成模型:在 ImageNet 上训练,指定类别条件生成,获得了 3.6 的 FID 分数。使用了 Classifier Free Guidance 技术。
代码实现参考了 OpenAI 的 Diffusion Models Beat GANs 代码实现。
2.2 stable diffusion V1
V1 系列的模型结构和LDM类似基本没有变化;
该版本发布于 2022 年 8 月,该模型包含 2 个子模型:
- AutoEncoder 模型:U-Net,8 倍下采样,包含 860M 参数。
- Text Encoder 模型:使用 CLIP ViT-L/14 中的 Text encoder。
模型首先在 256x256 的分辨率下训练,然后在 512x512 的分辨率下微调。总共包含 4 个子版本:
- sd-v1-1.ckpt:
- 在 LAION-2B-en 数据集上以 256x256 分辨率训练 237k step。
- 在 LAION-high-resolution(LAION-5B 中超过 1024x1024 分辨率的 170M 样本)上以 512x512 分辨率继续训练 194k step。
- sd-v1-2.ckpt:
- 复用 sd-v1-1.ckpt,在 LAION-aesthetics v2 5+(LAION-2B-en 中美观度分数大于 5.0 的子集) 上以 512x512 分辨率继续训练 515k step。
- sd-v1-3.ckpt:
- 复用 sd-v1-2.ckpt,在 LAION-aesthetics v2 5+ 上以 512x512 分辨率继续训练 195k step,使用了 Classifier Free Guidance 技术,以 10% 概率删除文本条件。
- sd-v1-4.ckpt:
- 复用 sd-v1-2.ckpt,在 LAION-aesthetics v2 5+ 上以 512x512 分辨率继续训练 225k step,使用了 Classifier Free Guidance 技术,以 10% 概率删除文本条件。
对应的 FID 和 CLIP 分数如下图所示:
2.3 Stable Diffusion V1.5
Stable Diffusion 的 V1.5 版本,由runway发布,
该版本发布于 2022 年 10 月,主要包含两个模型:
- sd-v1-5.ckpt:
- 复用 sd-v1-2.ckpt,在 LAION-aesthetics v2 5+ 上以 512x512 分辨率继续训练 595k step,使用了 Classifier Free Guidance 技术,以 10% 概率删除文本条件。
- sd-v1-5-inpainting.ckpt:
- 复用 sd-v1-5.ckpt,在 LAION-aesthetics v2 5+ 上以 512x512 分辨率以 inpainting 训练了 440k step,使用 Classifier Free Guidance 技术,以 10% 概率删除文本条件。在 U-Net 的输入中额外加了 5 个 channel,4 个用于 masked 的图像,1 个用于 mask 本身。
2.4 Stable Diffusion V2
Stable Diffusion 的 V2 版本,由 Stability-AI 发布
V2 包含三个子版本,分别为 v2.0,v2.1 和 Stable UnCLIP 2.1:
- v2.0:
- 发布于 2022 年 11 月,U-Net 模型和 V1.5 相同,Text encoder 模型换成了 OpenCLIP-ViT/H 中的 text encoder。
- SD 2.0-base:分别率为 512x512
- SD 2.0-v:基于 2.0-base 微调,分辨率提升到 768x768,同时利用 [2202.00512] Progressive Distillation for Fast Sampling of Diffusion Models 提出的技术大幅降低 Diffusion 的步数。
- 发布了一个文本引导的 4 倍超分模型。
- 基于 2.0-base 微调了一个深度信息引导的生成模型。
- 基于 2.0-base 微调了一个文本信息引导的修复模型。
- v2.1:
- 发布于 2022 年 12 月,模型结构和参数量都和 v2.0 相同。并在 v2.0 的基础上使用 LAION 5B 数据集(较低的 NSFW 过滤约束)微调。同样包含 512x512 分辨率的 v2.1-base 和 768x768 分辨率的 v2.1-v。
- Stable UnCLIP 2.1:
- 发布于 2023 年 3 月,基于 v2.1-v(768x768 分辨率) 微调,参考 OpenAI 的 DALL-E 2(也就是 UnCLIP),可以更好的实现和其他模型的联合,同样提供基于 CLIP ViT-L 的 Stable unCLIP-L 和基于 CLIP ViT-H 的 Stable unCLIP-H
从结果来看,V2版本相对于V1.5提升比较明显,但是实际体验效果比较一般,而且V2版本难以finetune。
SD 2.1 相较于 SD1.5 的改进主要在模型结构和训练数据。
- 模型结构
- text encoder使用更大的 openclip Vit-H/14,而SD1.5使用的是CLIP-Vit-L/14,参数量扩大了约3倍。
- SD 2.0提取的是text encoder倒数第二层的特征,而SD 1.x提取的是倒数第一层的特征。由于倒数第一层的特征之后就是CLIP的对比学习任务,所以倒数第一层的特征可能部分丢失细粒度语义信息。
- SD 2.0不同stage的attention模块是固定attention head dim为64。
- 在图像分辨率是768*768上进行了微调,并且采用美学评分更低的laion-2b子集进行训练。
3.4 Stable Diffusion XL
Stable Diffusion 的 XL 版本,由 Stability-AI 发布,位于代码库 Generative Models by Stability AI。
该版本发布于 2023 年 06 月,主要包含两个模型:
- SDXL-base-0.9:基于多尺度分辨率训练,最大分辨率 1024x1024,包含两个 Text encoder,分别为 OpenCLIP-ViT/G 和 CLIP-ViT/L。
- SDXL-refiner-0.9:用来生成更高质量的图像,不应直接使用,此外文本条件只使用 OpenCLIP 中的 Text encoder。
2023 年 07 月发布 1.0 版本,同样对应两个模型:
- SDXL-base-1.0:基于 SDXL-base-0.9 改进。
- SDXL-refiner-1.0:基于 SDXL-refiner-0.9 改进。
2023 年 11 月发表 SDXL-Trubo 版本,通过引入蒸馏技术来优化加速的版本。