大连密封材料 发表于 2025-4-8 00:15:17

Stable Diffusion 学习条记

前篇回首:
DDPM学习条记-CSDN博客
DDIM学习条记_ddim网络参数有哪些-CSDN博客
        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.整体架构

https://i-blog.csdnimg.cn/direct/25217e0b00f74c038c9beebf8898ac4e.png
Stable Diffusion由三部分组成:


[*]VAE(变分自编码器):①编码器:将原始图像(Pixel Space)压缩到低维潜伏空间(Latent Space),显著低沉计算量(如512x512图像→64x64潜伏表示)。②解码器:将去噪后的潜伏变量还原为像素空间图像。
[*]扩散模型:在潜伏空间中实行正向(加噪)和反向(去噪)过程。
[*]条件化U-Net:联合交织注意力机制,通过文本、图像等条件引导天生过程。
   简而言之,LDM与DDPM的关系:


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

VAE的具体过程可以参考这篇文章:VAE学习条记-CSDN博客


[*] 编码阶段:原始图像 x 经VAE编码器压缩为潜伏变量 Z0​,作为扩散过程的出发点。
https://latex.csdn.net/eq?Z_0%3DE_%5Cphi%28x%29%3D%5Cmu_%5Cphi%28x%29+%5Csigma_%5Cphi%28x%29%5Codot%5Cepsilon


[*] 扩散过程:在潜伏空间中对 Z0​ 徐徐加噪,天生 Z1,Z2,…,ZT
https://latex.csdn.net/eq?Z_t%3D%5Csqrt%7B%5Calpha_t%7DZ_0+%5Csqrt%7B1-%5Calpha_t%7D%5Cepsilon%2C%5Cquad%5Cepsilon%5Csim%5Cmathcal%7BN%7D%280%2CI%29


[*]天生阶段:去噪后的潜伏变量 Z0​ 经VAE解码器还原为最终图像:
https://latex.csdn.net/eq?%5Chat%7Bx%7D%3DD_%5Cpsi%28Z_0%29
   为什么要加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的目的均为预测噪声 https://latex.csdn.net/eq?%5Cepsilon_%5Ctheta:
https://latex.csdn.net/eq?%5Cmathcal%7BL%7D%20%3D%20%5Cmathbb%7BE%7D_%7Bt%2C%20Z_0%2C%20%5Cepsilon%7D%20%5B%5C%7C%20%5Cepsilon%20-%20%5Cepsilon_%5Ctheta%28Z_t%2C%20t%2Cxxx%29%20%5C%7C%5E2%5D
其中 https://latex.csdn.net/eq?Z_t%20%3D%20%5Calpha_t%20Z_0%20+%20%5Csqrt%7B1%20-%20%5Calpha_t%7D%20%5Cepsilon,https://latex.csdn.net/eq?%5Calpha_t为噪声调度系数,xxx为条件。
③U-Net

https://i-blog.csdnimg.cn/direct/5ce3872be13a4d1490511f6028a61774.png
(1) U-Net的输入与输出


[*] 输入:带噪潜伏变量 Zt​、时间步 t、条件嵌入(如文本向量)。
[*] 输出:预测的噪声 ϵθ​。
(2) 核心组件


[*] 编码器(下采样):

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

[*] 卷积层 + 组归一化(GroupNorm) + SiLU激活。
[*] 时间嵌入 t 通过MLP映射为向量,与特征相加。

[*] 时间嵌入公式:
https://latex.csdn.net/eq?%5Ctext%7BTimeEmb%7D%28t%29%20%3D%20%5Ctext%7BMLP%7D%28%5Csin%28%5Comega%20%5Ccdot%20t%29%20+%20%5Ccos%28%5Comega%20%5Ccdot%20t%29%29
(ω 为频率参数,用于编码时间步的周期性信息)

[*] 中间层(Bottleneck):

[*] 自注意力层:捕捉潜伏变量内部的全局依赖(如物体间位置关系)。
[*] 交织注意力层:条件信息(文本)与图像特征的交互。

[*] 公式:
https://latex.csdn.net/eq?%5Ctext%7BCrossAttention%7D%28Q%2C%20K%2C%20V%29%20%3D%20%5Ctext%7BSoftmax%7D%5Cleft%28%5Cfrac%7BQK%5ET%7D%7B%5Csqrt%7Bd_k%7D%7D%5Cright%29V

[*] Q:U-Net的中间特征(Query)。
[*] K,V:条件嵌入(如CLIP文本编码的投影)。



[*] 解码器(上采样):

[*] 使用转置卷积或插值法徐徐恢复分辨率。
[*] 跳跃连接:将编码器每层的特征与解码器对应层拼接,保存细节。

(3) 条件注入机制


[*] 文本条件:CLIP文本编码器天生的向量 https://latex.csdn.net/eq?c_%7B%5Ctext%7Btext%7D%7D,通过交织注意力与U-Net特征交互。
[*] 其他条件:语义图、参考图像等可通过类似方式注入。

stable diffusion的大致训练和采样过程可以归纳为如下的图:
https://i-blog.csdnimg.cn/direct/2cf238c76de5494191a6c4c0a26e6399.png
3.复现

末了尝试复现步调,这篇文章给了我很大的帮助
Stable-diffusion复现条记_stable diffusion 复现-CSDN博客
stablediffusion$ python txt2img.py   --ckpt "sd-v1-4.ckpt"   --prompt "a photograph of lolita girl in black"   --plms   --H 512   --W 512
https://i-blog.csdnimg.cn/direct/c2419890b1c447c6aab06229024202cc.png
这个stable diffusion也是被我给玩上了(笑)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Stable Diffusion 学习条记