浅浅速通一下Stable Diffusion
1. Stable Diffusion 介绍
Stable Diffusion(SD)是基于 扩散模型(Diffusion Models, DM) 的一种文本到图像(Text-to-Image)生成模型,采用 潜在扩散(Latent Diffusion Model, LDM) 以提高计算效率。它可以:
- 根据文本提示(Prompt) 生成图像
 - 进行 图像到图像(img2img) 变换
 - 结合 ControlNet、LoRA 进行微调和风格控制
 
Stable Diffusion vs. 传统扩散模型
- 传统扩散模型在 像素空间(Pixel Space) 进行去噪,计算量大
 - Stable Diffusion 在 潜在空间(Latent Space) 进行去噪,计算更高效
 
2. Stable Diffusion 的核心架构
Stable Diffusion 由 四个核心组件 组成:
- 文本编码器(Text Encoder, CLIP / T5)
 - 潜在扩散模型(Latent Diffusion Model, LDM)
 - UNet 去噪网络
 - VAE 变分自编码器
 
2.1 文本编码器(CLIP 或 DeepFloyd T5)
Stable Diffusion 使用 CLIP 文本编码器(SD 1.5 / 2.1) 或 DeepFloyd T5(SDXL) 来处理文本输入。
作用
- 将输入的文本 
prompt变成高维向量 文本嵌入(Text Embeddings) - 这些嵌入将指导扩散模型生成符合语义的图像
 
CLIP 文本编码器
- 采用 Transformer 结构
 - 生成固定长度的 文本向量(Text Embedding)
 - 提供 跨模态对比学习能力
 
DeepFloyd T5
- SDXL 采用 更强的文本编码器,能够解析更复杂的句子结构,提高 Prompt 理解能力
 
2.2 潜在扩散模型(Latent Diffusion Model, LDM)
扩散模型的基本原理
扩散模型(Diffusion Model, DM)是一种 概率生成模型,由两部分组成:
- 前向扩散(Forward Diffusion):将干净图像逐步添加噪声
 - 逆向去噪(Reverse Denoising):学习去除噪声,重构原始图像
 
数学公式
- 
    
前向过程:
\[q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t I)\]其中:
- $x_t$ 是时间步 的噪声图像
 - $\beta_t$ 是噪声调节参数
 - 经过多个时间步,最终 $x_T$ 接近标准高斯分布 $\mathcal{N}(0, I)$
 
 - 
    
逆向去噪过程:
\[p(x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \sigma^2 I)\]- UNet 负责学习 $\mu_\theta(x_t, t)$,即如何从噪声恢复原图
 
 
为什么使用潜在扩散?
- 在像素空间扩散计算成本高
 - Stable Diffusion 先用 VAE 压缩图像 到潜在空间,再进行扩散
 
2.3 UNet 生成网络
UNet 负责 去噪,从噪声中恢复图像。它的结构包括:
- 编码器(Encoder) 提取特征(ResNet + Self-Attention)
 - 解码器(Decoder) 生成图像
 - 跳跃连接(Skip Connection) 保持高分辨率信息
 - 自注意力机制(Self-Attention) 处理远程依赖
 
2.4 VAE 变分自编码器
VAE 负责:
- 压缩 原始图像到潜在空间
 - 解码 潜在表示为最终图像
 
Stable Diffusion 使用 预训练 VAE:
- 编码器 $E(x)$ 将 512×512 图像映射到 64×64 潜在空间
 - 解码器 $D(z)$ 负责将潜在表示恢复为清晰的图像
 
3. Stable Diffusion 的推理流程
Stable Diffusion 生成图像的完整流程如下:
1️⃣ 文本编码
- 使用 CLIP / T5 文本编码器将 
prompt转换为 文本嵌入 
2️⃣ 初始化噪声
- 在潜在空间初始化一个 随机高斯噪声
 
3️⃣ 去噪过程
- 采用 UNet 逐步去噪,使用 扩散采样器(如 Euler、DPM-Solver++)
 
4️⃣ VAE 解码
- 将去噪后的潜在表示 解码为最终图像
 
4. 扩展优化
4.1 采样算法
不同的采样器影响生成速度和质量:
- Euler A(速度快,适合创意生成)
 - DPM-Solver++(高质量,最常用)
 - DDIM(快但细节可能损失)
 
4.2 ControlNet
ControlNet 允许对 生成图像施加额外控制:
- Canny 边缘(保持物体形状)
 - OpenPose(控制人物姿势)
 - Depth Map(深度感知)
 
4.3 LoRA 低秩适配
LoRA 是一种轻量级微调方法:
- 允许用户训练个性化模型
 - 计算成本低,可以在 普通 GPU 上训练
 
5. 代码实现
以下是一个基本的 Stable Diffusion 推理代码(基于 diffusers 库):
from diffusers import StableDiffusionPipeline
import torch
# 加载预训练 Stable Diffusion 模型
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
pipe.to("cuda")
# 设置 Prompt
prompt = "A futuristic cyberpunk city at night with neon lights"
# 生成图像
image = pipe(prompt).images[0]
# 显示图像
image.show()
加入 ControlNet
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
controlnet = ControlNetModel.from_pretrained("lllyasviel/sd-controlnet-canny")
pipe = StableDiffusionControlNetPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5", controlnet=controlnet
)
# 生成带有 Canny 约束的图像
image = pipe(prompt, image=processed_canny_image).images[0]
image.show()
总结
- Stable Diffusion 采用 潜在扩散模型(LDM),在 潜在空间 进行扩散,提高计算效率
 - 主要组件包括 文本编码器(CLIP / T5)、UNet、VAE
 - 采样器、ControlNet 和 LoRA 可以 优化和控制生成过程
 - 可用于 文本生成、风格迁移、局部编辑