前篇回首:
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.整体架构
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,作为扩散过程的出发点。
- 扩散过程:在潜伏空间中对 Z0 徐徐加噪,天生 Z1,Z2,…,ZT
- 天生阶段:去噪后的潜伏变量 Z0 经VAE解码器还原为最终图像:
为什么要加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的目的均为预测噪声 :
其中 ,为噪声调度系数,xxx为条件。
③U-Net
(1) U-Net的输入与输出
- 输入:带噪潜伏变量 Zt、时间步 t、条件嵌入(如文本向量)。
- 输出:预测的噪声 ϵθ。
(2) 核心组件
- 编码器(下采样):
- 由多个残差块(ResNet Block)组成,每块包含:
- 卷积层 + 组归一化(GroupNorm) + SiLU激活。
- 时间嵌入 t 通过MLP映射为向量,与特征相加。
- 时间嵌入公式:
(ω 为频率参数,用于编码时间步的周期性信息)
- 中间层(Bottleneck):
- 自注意力层:捕捉潜伏变量内部的全局依赖(如物体间位置关系)。
- 交织注意力层:条件信息(文本)与图像特征的交互。
- 公式:
- Q:U-Net的中间特征(Query)。
- K,V:条件嵌入(如CLIP文本编码的投影)。
- 解码器(上采样):
- 使用转置卷积或插值法徐徐恢复分辨率。
- 跳跃连接:将编码器每层的特征与解码器对应层拼接,保存细节。
(3) 条件注入机制
- 文本条件:CLIP文本编码器天生的向量 ,通过交织注意力与U-Net特征交互。
- 其他条件:语义图、参考图像等可通过类似方式注入。
stable diffusion的大致训练和采样过程可以归纳为如下的图:
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
这个stable diffusion也是被我给玩上了(笑)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |