扩散模型工作原理 - Stable Diffusion 技术深度解析
扩散模型基础 - 通过去噪生成图像
扩散模型通过两个过程生成图像:前向过程逐步向图像添加高斯噪声直到变为纯噪声,反向过程学习逐步去除噪声恢复清晰图像。
前向扩散过程:
- 从真实图像开始,每一步添加少量高斯噪声
- 经过 T 步(通常 T=1000)后,图像变为近似标准高斯分布的纯噪声
- 每步的噪声量由预定义的调度(schedule)控制,通常使用线性或余弦调度
反向去噪过程:
- 从纯噪声开始,训练神经网络预测每步应去除的噪声
- 逐步去噪 T 步后得到清晰图像
- 网络学习的是条件分布 p(x_{t-1}|x_t),即给定当前噪声图像预测上一步的图像
DDPM(Denoising Diffusion Probabilistic Models)是奠基性工作,证明了这种简单的去噪训练目标可以生成高质量图像。训练目标:最小化预测噪声与实际添加噪声之间的 MSE 损失。
U-Net 架构与噪声预测网络
扩散模型的核心是噪声预测网络,通常采用 U-Net 架构。给定噪声图像和时间步,预测其中包含的噪声。
U-Net 结构:
- 编码器路径:逐步下采样,提取多尺度特征。每层包含残差块和自注意力层
- 解码器路径:逐步上采样,恢复空间分辨率。通过跳跃连接融合编码器特征
- 中间瓶颈:最低分辨率处的特征处理,包含自注意力层捕获全局信息
时间步嵌入:
- 时间步 t 通过正弦位置编码转为向量
- 经过 MLP 映射后注入到每个残差块中
- 使网络能根据当前去噪阶段调整行为(早期去噪关注全局结构,后期关注细节)
注意力机制:
- 自注意力:在特征图内部计算注意力,捕获长距离空间依赖
- 交叉注意力:将文本条件(CLIP 编码)作为 Key/Value,特征图作为 Query,实现文本引导生成
潜在扩散 - Stable Diffusion 架构
直接在像素空间进行扩散计算量巨大(512x512 图像有 786,432 维)。潜在扩散模型(LDM)先将图像压缩到低维潜在空间,在潜在空间中进行扩散,大幅降低计算成本。
Stable Diffusion 的三大组件:
- VAE(变分自编码器):编码器将 512x512 图像压缩为 64x64 的潜在表示(压缩 8 倍)。解码器将潜在表示恢复为像素图像。训练后固定不变
- U-Net:在 64x64 的潜在空间中执行去噪。比像素空间小 64 倍,计算效率大幅提升
- 文本编码器(CLIP):将文本提示词转为 77x768 的嵌入向量,通过交叉注意力注入 U-Net
生成流程:
- 采样随机噪声(64x64x4 的潜在向量)
- 文本编码器处理提示词得到条件嵌入
- U-Net 在潜在空间中迭代去噪(通常 20-50 步)
- VAE 解码器将去噪后的潜在向量解码为 512x512 图像
为什么有效:图像的高频细节(纹理、噪声)在压缩时被丢弃,潜在空间保留了语义信息和全局结构。扩散过程在语义层面操作,效率更高。
文本条件与 Classifier-Free Guidance
文本到图像生成的关键是如何将文本信息有效注入生成过程。Classifier-Free Guidance(CFG)是控制文本条件强度的核心技术。
文本条件注入:
- CLIP 文本编码器将提示词转为嵌入序列
- 嵌入通过交叉注意力层注入 U-Net 的每个分辨率级别
- 交叉注意力:Q 来自图像特征,K/V 来自文本嵌入。每个空间位置关注与其相关的文本 token
Classifier-Free Guidance:
- 训练时随机丢弃文本条件(用空字符串替代),使模型同时学习有条件和无条件生成
- 推理时同时计算有条件预测和无条件预测
- 最终预测 = 无条件预测 + guidance_scale * (有条件预测 - 无条件预测)
guidance_scale(通常 7-12):值越大,生成结果越忠实于文本但多样性降低
负面提示词:
- 用负面提示词替代空字符串作为无条件输入
- 引导生成远离负面描述的内容(如 "blurry, low quality")
- 有效提升生成质量和可控性
加速技术 - SDXL、LCM、Turbo
标准扩散模型需要 20-50 步去噪,推理速度慢。多种加速技术将步数降低到 1-8 步,实现近实时生成。
采样器优化:
- DDIM:确定性采样,可跳过步骤。50 步 DDPM 的质量用 20 步 DDIM 即可达到
- DPM-Solver:高阶 ODE 求解器,10-20 步即可获得高质量结果
- Euler/Euler Ancestral:简单高效的采样器,20 步通常足够
模型蒸馏:
- LCM(Latent Consistency Models):将多步扩散蒸馏为 2-4 步的一致性模型。通过一致性损失训练学生模型直接预测最终结果
- SDXL Turbo:对抗蒸馏,1-4 步生成。使用判别器确保单步输出的质量
- Lightning:渐进蒸馏,逐步减半步数。4 步即可达到接近原始 50 步的质量
SDXL 架构改进:
- 更大的 U-Net(2.6B 参数 vs SD 1.5 的 860M)
- 双文本编码器(CLIP ViT-L + OpenCLIP ViT-bigG)
- 原生 1024x1024 分辨率
- Refiner 模型:第二阶段细化,提升细节质量
实用应用 - ControlNet 与自定义模型
ControlNet 和各种微调技术使扩散模型从随机生成变为精确可控的创作工具。
ControlNet:
- 在冻结的 SD 模型上添加可训练的控制分支
- 接受额外的条件输入:边缘图(Canny)、深度图、姿态骨架、语义分割图等
- 生成结果严格遵循条件输入的结构,同时保持文本引导的风格和内容
- 应用:从草图生成照片、保持构图换风格、精确控制人物姿态
LoRA(Low-Rank Adaptation):
- 在注意力层添加低秩矩阵进行微调,参数量仅为全模型的 0.1-1%
- 训练特定风格、角色、概念仅需 10-50 张图像和几小时训练
- 多个 LoRA 可叠加使用,组合不同的风格和概念
- 文件大小通常 10-200MB,易于分享和切换
实用工作流:
- 图生图(img2img):以现有图像为起点,添加部分噪声后去噪。控制噪声强度(denoising strength)决定与原图的相似度
- 局部重绘(Inpainting):仅对图像的遮罩区域进行重新生成,保持其余部分不变
- 超分辨率(Upscale):将低分辨率生成结果放大到高分辨率,同时添加细节