十分钟搞懂 Stable Diffusion 的基础概念

一、Stable Diffusion 的技术定位与核心价值

Stable Diffusion 是一种基于潜在扩散模型(Latent Diffusion Model, LDM)的生成式AI技术,其核心突破在于将高维图像数据压缩到低维潜在空间(Latent Space)进行计算,大幅降低显存占用与计算成本。与传统扩散模型(如DDPM)直接在像素空间操作相比,LDM通过自动编码器(Autoencoder)将512×512图像从3×512×512(RGB通道)压缩至4×64×64的潜在表示,使生成效率提升16倍以上。

技术价值

  1. 资源友好性:在消费级GPU(如NVIDIA RTX 3060 12GB)上可运行高分辨率生成任务
  2. 控制灵活性:支持文本、图像、布局等多模态条件输入
  3. 开源生态:代码与模型权重完全公开,催生ComfyUI、Fooocus等衍生工具

二、扩散模型的核心数学原理

1. 前向扩散过程(Forward Diffusion)

通过逐步添加高斯噪声将原始数据$x0$转化为纯噪声$x_T$,噪声添加过程满足马尔可夫链:
q(xtxq(x_t|x
{t-1}) = \mathcal{N}(xt; \sqrt{1-\beta_t}x{t-1}, \betat\mathbf{I})
其中$\beta_t$为时间步$t$的噪声调度系数,累计乘积$\bar{\alpha}_t = \prod
{i=1}^t(1-\beta_i)$用于重参数化。

关键参数

  • 总步数$T$(通常1000步)
  • 线性/余弦噪声调度(Stable Diffusion v2采用余弦调度)

2. 反向去噪过程(Reverse Diffusion)

使用U-Net神经网络预测噪声$\epsilon\theta(x_t, t)$,通过重参数化采样实现去噪:
xx
{t-1} = \frac{1}{\sqrt{\alphat}}(x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}}\epsilon\theta(x_t, t)) + \sigma_t z
其中$z \sim \mathcal{N}(0,\mathbf{I})$,$\sigma_t$在DDPM中为固定值,在DDIM中可调整为确定性采样。

三、Stable Diffusion 的神经网络架构

1. 三维U-Net结构

  • 空间下采样:通过2D卷积+注意力机制实现64×64→32×32→16×16的特征压缩
  • 时间嵌入:使用正弦位置编码处理时间步$t$的输入
  • 交叉注意力:在中间层注入文本条件(通过CLIP文本编码器获取77个token的嵌入)

典型配置

  1. # 伪代码展示U-Net关键组件
  2. class UNet(nn.Module):
  3. def __init__(self):
  4. self.down_blocks = [DownBlock(in_ch, out_ch) for _ in range(3)] # 下采样模块
  5. self.mid_block = AttentionBlock(mid_ch) # 中间注意力层
  6. self.up_blocks = [UpBlock(out_ch, in_ch) for _ in range(3)] # 上采样模块
  7. self.time_embed = SinusoidalPositionEmbedding(dim=128) # 时间步嵌入
  8. def forward(self, x, t, text_emb):
  9. t_emb = self.time_embed(t)
  10. for block in self.down_blocks:
  11. x = block(x, t_emb) # 融合时间信息
  12. x = self.mid_block(x, text_emb) # 注入文本条件
  13. for block in self.up_blocks:
  14. x = block(x, t_emb)
  15. return x

2. 自动编码器(VAE)

  • 编码器:将512×512×3图像压缩为64×64×4潜在表示
  • 解码器:从潜在空间重建图像,损失函数包含L2重建损失和VGG感知损失

四、训练与推理流程详解

1. 训练阶段

  1. 数据准备:LAION-5B数据集筛选后的子集(约23亿图像-文本对)
  2. 损失函数:简化版噪声预测损失
    $$\mathcal{L} = \mathbb{E}{x_0,\epsilon,t}[|\epsilon - \epsilon\theta(x_t, t, c)|^2]$$
    其中$c$为文本条件编码
  3. 优化策略
    • AdamW优化器(学习率3e-6)
    • 梯度累积(等效batch size=2048)
    • EMA模型平均(衰减率0.9999)

2. 推理阶段(文本到图像生成)

  1. 文本编码:使用CLIP ViT-L/14模型获取77×768维文本嵌入
  2. 潜在空间采样:从$\mathcal{N}(0,\mathbf{I})$初始化$x_T$
  3. 迭代去噪
    1. # 简化版DDIM采样
    2. def ddim_sample(model, x_T, text_emb, steps=50):
    3. x = x_T
    4. for t in reversed(range(steps)):
    5. alpha_t = get_alpha(t)
    6. alpha_prev = get_alpha(t-1)
    7. pred_noise = model(x, t, text_emb)
    8. # 确定性采样公式
    9. x_prev = (x - sqrt(1-alpha_t)*pred_noise) / sqrt(alpha_t) * sqrt(alpha_prev) \
    10. + sqrt(1-alpha_prev)*pred_noise
    11. x = x_prev
    12. return vae_decode(x) # 通过VAE解码器生成图像
  4. 超参数选择
    • 采样步数(20-50步可平衡质量与速度)
    • CFG系数(7-15控制文本遵循度)
    • 随机种子(控制生成多样性)

五、实际应用中的关键技巧

  1. LoRA微调:通过低秩适配(Rank=4/8)实现风格迁移,显存占用降低90%
  2. ControlNet插件:添加边缘/深度图等条件控制,典型配置:
    1. controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny")
    2. control_input = preprocess_canny(image) # 输入Canny边缘图
  3. 高性能推理
    • 使用xformers库加速注意力计算
    • 采用torch.compile优化计算图
    • 量化技术(FP16/INT8)降低显存需求

六、技术演进方向

  1. 视频生成:通过3D潜在空间扩展实现时序连贯性(如Stable Video Diffusion)
  2. 多模态控制:结合T2I-Adapter实现姿态/光影精确控制
  3. 高效架构:采用亚曼滤波器(Submanifold Sparse Convolution)降低计算冗余

通过理解上述核心概念,开发者可快速上手Stable Diffusion的二次开发,在AIGC应用中实现从基础部署到高级定制的全流程掌控。”