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]