Stable Diffusion 学习笔记

前篇回顾:

DDPM学习笔记-优快云博客

DDIM学习笔记_ddim网络参数有哪些-优快云博客

        Stable Diffusion 是 一种基于潜空间扩散(Latent Diffusion)的深度学习模型,用于生成高质量图像。它由 CompVis于 2022 年发布,随后由 Stability AI 进行优化和推广。

        Stable Diffusion 属于扩散模型(Diffusion Models)的范畴,其基本原理是:①训练阶段:给真实图像不断添加噪声,让模型学习如何逐步去噪恢复原图。②生成阶段:从纯噪声开始,逐步去噪生成符合文本描述的图像。与早期扩散模型(如 DDPM, DDIM)相比,Stable Diffusion 进行了多项优化,使其计算量大幅降低,能在消费级显卡上运行。

1.stable diffusion 发展及版本

Stable Diffusion (SD)是基于扩散模型的文生图模型

  • 2021.12 早期由StabilityAI资助,CompVis与Runway ML联合研究,发布paperLDM
  • 2022.08 CompVis发布SD1.1~SD1.4
  • 2022.10 Runway ML发布SD1.5
  • ·2022.11 StabilityAl发布SD2.0
  • 至今此后发布便一直以Stability Al名义发布模型

2.整体架构

Stable Diffusion由三部分组成:

  • VAE(变分自编码器):①编码器:将原始图像(Pixel Space)压缩到低维潜在空间(Latent Space),显著降低计算量(如512x512图像→64x64潜在表示)。②解码器:将去噪后的潜在变量还原为像素空间图像。
  • 扩散模型:在潜在空间中执行正向(加噪)和反向(去噪)过程。
  • 条件化U-Net:结合交叉注意力机制,通过文本、图像等条件引导生成过程。

简而言之,LDM与DDPM的关系:

  • LDM=VAE + DDPM
  • LDM在语义空间做difusion
  • LDM有更多模态的融入:      ①类别融入      ②文本融入
①VAE

VAE的具体过程可以参考这篇文章:VAE学习笔记-优快云博客

  •  编码阶段:原始图像 x 经VAE编码器压缩为潜在变量 Z0​,作为扩散过程的起点。

Z_0=E_\phi(x)=\mu_\phi(x)+\sigma_\phi(x)\odot\epsilon

  •  扩散过程:在潜在空间中对 Z0​ 逐步加噪,生成 Z1,Z2,…,ZT

Z_t=\sqrt{\alpha_t}Z_0+\sqrt{1-\alpha_t}\epsilon,\quad\epsilon\sim\mathcal{N}(0,I)

  • 生成阶段:去噪后的潜在变量 Z0​ 经VAE解码器还原为最终图像:

\hat{x}=D_\psi(Z_0)

为什么要加VAE?

  • 降低计算复杂度:直接在像素空间(如512×512图像)执行扩散过程需要处理百万级维度(3×512×512=786,432),计算量和内存消耗巨大。VAE将图像压缩到低维潜在空间(如64×64×4=16,384维)。
  • 潜在空间的连续性与稳定性:问题:像素空间中高频噪声会导致扩散过程不稳定,生成图像细节模糊。VAE的潜在空间是连续且平滑的,更适合扩散模型逐步去噪。
  • 数据分布建模的简化:直接建模高维像素空间的复杂分布极其困难。
  • 高质量重建能力:普通自编码器(AE)的潜在空间缺乏概率约束,重建质量不稳定。VAE通过KL散度约束潜在空间分布。
②扩散过程

         Stable Diffusion支持多种采样方法,包括DDPM和DDIM,默认常用DDIM以实现快速生成。扩散过程的具体内容可见之前的笔记,再次不做赘述

        噪声预测目标:

        无论使用DDPM或DDIM,U-Net的目标均为预测噪声 \epsilon_\theta

\mathcal{L} = \mathbb{E}_{t, Z_0, \epsilon} [\| \epsilon - \epsilon_\theta(Z_t, t,xxx) \|^2]

其中 Z_t = \alpha_t Z_0 + \sqrt{1 - \alpha_t} \epsilon\alpha_t为噪声调度系数,xxx为条件。

③U-Net

(1) U-Net的输入与输出

  • 输入:带噪潜在变量 Zt​、时间步 t、条件嵌入(如文本向量)。

  • 输出:预测的噪声 ϵθ​。

(2) 核心组件

  • 编码器(下采样):

    • 由多个残差块(ResNet Block)组成,每块包含:

      • 卷积层 + 组归一化(GroupNorm) + SiLU激活。

      • 时间嵌入 t 通过MLP映射为向量,与特征相加。

    • 时间嵌入公式:

      \text{TimeEmb}(t) = \text{MLP}(\sin(\omega \cdot t) + \cos(\omega \cdot t))

      (ω 为频率参数,用于编码时间步的周期性信息)

  • 中间层(Bottleneck):

    • 自注意力层:捕捉潜在变量内部的全局依赖(如物体间位置关系)。

    • 交叉注意力层:条件信息(文本)与图像特征的交互。

      • 公式:

        \text{CrossAttention}(Q, K, V) = \text{Softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

        • Q:U-Net的中间特征(Query)。

        • K,V:条件嵌入(如CLIP文本编码的投影)。

  • 解码器(上采样):

    • 使用转置卷积或插值法逐步恢复分辨率。

    • 跳跃连接:将编码器每层的特征与解码器对应层拼接,保留细节。

(3) 条件注入机制

  • 文本条件:CLIP文本编码器生成的向量 c_{\text{text}},通过交叉注意力与U-Net特征交互。

  • 其他条件:语义图、参考图像等可通过类似方式注入。

stable diffusion的大致训练和采样过程可以归纳为如下的图:

3.复现

最后尝试复现程序,这篇文章给了我很大的帮助

Stable-diffusion复现笔记_stable diffusion 复现-优快云博客

stablediffusion$ python txt2img.py   --ckpt "sd-v1-4.ckpt"   --prompt "a photograph of lolita girl in black"   --plms   --H 512   --W 512

这个stable diffusion也是被我给玩上了(笑)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值