Stable Diffusion 系列模型

Stable Diffusion 系列模型

1. 背景

image-20240116234259305

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类似基本没有变化;

img

该版本发布于 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 分数如下图所示:

image-20240116235722441

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 版本,通过引入蒸馏技术来优化加速的版本。