本页提供了 Stable Diffusion v1 模型架构的全面技术概述。Stable Diffusion 是一种潜在扩散模型,它将一个自编码器与在自编码器潜在空间中训练的扩散模型相结合,使其比像素空间扩散模型在计算上更有效,同时保持高质量的图像生成。
有关使用该模型的信息,请参阅使用指南。有关特定采样方法的详细说明,请参阅采样方法。
Stable Diffusion 的运作方式是将扩散过程转移到压缩的潜在空间,而不是直接处理像素。这种方法在不牺牲生成质量的情况下显著降低了计算要求。
来源: ldm/models/diffusion/ddpm.py424-470
系统遵循一个类层次结构,该结构扩展了 PyTorch Lightning 的模块系统。
来源: ldm/models/diffusion/ddpm.py44-123 ldm/models/diffusion/ddpm.py424-470
该 DDPM 类实现了核心的去噪扩散概率模型功能。
register_schedule():设置噪声调度参数(betas、alphas 等)。q_sample():实现前向过程(添加噪声)。p_sample():实现反向过程的单步去噪。p_sample_loop():执行完整的反向扩散过程。p_losses():计算训练损失。来源: ldm/models/diffusion/ddpm.py44-123 ldm/models/diffusion/ddpm.py204-250 ldm/models/diffusion/ddpm.py252-272
该 LatentDiffusion 类扩展了 DDPM 以在潜在空间中进行操作。
| 组件 | 目的 | 实现 |
|---|---|---|
first_stage_model | 自编码器(编码器/解码器) | 通常是 AutoencoderKL 实例。 |
cond_stage_model | 文本编码器 | 通常是 CLIP ViT-L/14 模型。 |
scale_factor | 缩放潜在表示。 | 用于标准化方差。 |
model(继承自) | UNet 主干。 | 主要的扩散模型。 |
关键方法
encode_first_stage():将图像转换为潜在表示。decode_first_stage():将潜在表示转换为图像。get_learned_conditioning():获取文本的条件嵌入。apply_model():应用 UNet 模型执行去噪。来源: ldm/models/diffusion/ddpm.py424-564 ldm/models/diffusion/ddpm.py706-824 ldm/models/diffusion/ddpm.py825-992
UNet 被封装在一个 DiffusionWrapper 类中,是扩散模型的主干。
UNet 处理带噪的潜在表示,并根据 eps 参数化预测添加的噪声,或根据 x0 参数化预测干净的潜在表示。交叉注意力层通过允许文本嵌入影响去噪过程来实现文本条件。
来源: ldm/models/diffusion/ddpm.py86-87 ldm/models/diffusion/ddpm.py231-241 ldm/models/diffusion/ddpm.py891-992
自编码器由编码器和解码器组成。
对于 512×512 的图像,潜在表示的空间维度为 64×64。
来源: ldm/models/diffusion/ddpm.py502-508 ldm/models/diffusion/ddpm.py706-763 ldm/models/diffusion/ddpm.py825-863
文本编码器是一个预训练的 CLIP ViT-L/14 模型。
来源: ldm/models/diffusion/ddpm.py509-529 ldm/models/diffusion/ddpm.py551-562
Stable Diffusion 支持由 conditioning_key 参数控制的不同条件机制。
| 条件键 | 机制 | 内部键 |
|---|---|---|
'crossattn' | 交叉注意力条件。 | 'c_crossattn' |
'concat' | 连接条件。 | 'c_concat' |
无 | 无条件生成。 | 不适用 |
最常见的机制是交叉注意力,文本嵌入通过交叉注意力层影响 UNet。
来源: ldm/models/diffusion/ddpm.py29-31 ldm/models/diffusion/ddpm.py442-448 ldm/models/diffusion/ddpm.py891-901
在训练期间,前向扩散过程根据预定义的调度向潜在表示添加噪声。
来源: ldm/models/diffusion/ddpm.py274-278 ldm/models/diffusion/ddpm.py1012-1016
在推理过程中,逆扩散过程将随机噪声逐渐去噪,生成清晰的潜在表示
来源: ldm/models/diffusion/ddpm.py252-265
该模型支持两种参数化模式
eps 参数化(默认):UNet 预测添加的噪声x0 参数化:UNet 直接预测清晰的潜在表示来源: ldm/models/diffusion/ddpm.py76-78 ldm/models/diffusion/ddpm.py300-305
该模型以以下配置进行训练
来源: Stable_Diffusion_v1_Model_Card.md91-113
完整的图像生成流程包括
迭代去噪步骤可以使用不同的采样策略,在速度和质量之间提供不同的权衡。有关详细信息,请参阅 采样方法。
来源: ldm/models/diffusion/ddpm.py252-272
该模型使用预定义的噪声调度,该调度决定了在前向过程中如何添加噪声
register_schedule 方法计算扩散过程中使用的各种系数,包括 alpha、beta 和后验参数。
来源: ldm/models/diffusion/ddpm.py117-169
该模型可以选择性地维护模型权重的指数移动平均(EMA),以获得更稳定的性能
来源: ldm/models/diffusion/ddpm.py88-91 ldm/models/diffusion/ddpm.py171-184
模型应用缩放因子来规范潜在表示的方差
这可以是一个固定值,也可以从数据中自动确定。
来源: ldm/models/diffusion/ddpm.py456-459 ldm/models/diffusion/ddpm.py477-491 ldm/models/diffusion/ddpm.py543-549
Stable Diffusion v1 模型有几个局限性
有关限制的完整列表,请参阅 许可证和使用限制。
来源: Stable_Diffusion_v1_Model_Card.md58-71
本 wiki 页面概述了 Stable Diffusion v1 模型架构。有关各个组件的更具体详细信息,请参阅链接的 wiki 页面。