导语
在生成式 AI 浪潮中,扩散模型(Diffusion Model)凭借其出色的图像生成质量和可控性,成为文生图领域的核心技术。从 Stable Diffusion 到 Midjourney,扩散模型的原理和实现已广泛应用于创意设计、内容创作等场景。本文将从基础原理讲起,逐步拆解扩散模型的核心机制、Stable Diffusion 的架构设计,以及如何通过文本引导、可控生成和模型微调实现更精准的图像创作。无论你是想理解技术本质,还是想上手调试生成参数,这篇教程都能帮你系统掌握扩散模型与文生图的关键知识点。
1. 扩散模型:从“加噪”到“去噪”的逆向工程
扩散模型(Diffusion Model)是一种通过前向加噪和反向去噪两个过程实现图像生成的概率模型。它的核心思想是:先将真实图像逐步“污染”为噪声,再通过神经网络从噪声中逐步还原图像——这个过程类似“先打碎再修复”,但修复的方向由模型学习决定。
1.1 前向过程:逐步加噪的“退化”路径
想象我们有一张清晰的图像,比如一只猫。前向过程(Forward Process)的目标是通过马尔可夫链逐步给图像添加高斯噪声,最终让图像完全“消失”为纯噪声。具体来说:
- 操作:对图像进行 T 次(通常 200~1000 步)微小噪声添加,每一步噪声强度逐渐增大。
- 数学本质:每一步噪声添加是固定的数学变换(如 $x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{1-\alpha_t} \epsilon$,其中 $\epsilon$ 是高斯噪声,$\alpha_t$ 是每步保留的图像信息比例)。
- 关键特性:经过 T 步后,图像会完全退化为纯高斯噪声(接近白噪声)。
- 为什么要拆成 T 步? 直接从纯噪声一步生成清晰图像难度极大(噪声分布跨度大、多峰),而分步小步长去噪可以将复杂任务分解为多个简单子任务,降低学习难度,保证生成稳定性。
1.2 反向过程:神经网络学习“去噪”的关键
反向过程(Reverse Process)是扩散模型的核心,也是生成图像的核心步骤。我们需要训练一个神经网络(最常用的是 U-Net 结构),让它学会“从带噪图像中预测并移除噪声”。具体流程:
- 输入:从纯噪声 $x_T$ 开始(此时图像完全模糊)。
- 预测:U-Net 模型预测当前带噪图像 $x_t$ 中“被添加的噪声” $\epsilon$。
- 去噪:用预测的噪声 $\hat{\epsilon}$ 减去原噪声,得到去噪后的图像 $x_{t-1} = x_t - \alpha_t \cdot \hat{\epsilon}$。
- 迭代:重复上述步骤,从 $t=T$ 逐步回到 $t=0$,最终得到清晰图像 $x_0$。
训练目标:模型需要学习预测“真实噪声” $\epsilon$ 与“预测噪声” $\hat{\epsilon}$ 之间的差异,通过最小化 MSE(均方误差)损失 $\mathbb{E}[( \hat{\epsilon} - \epsilon )^2]$ 优化去噪能力。这意味着模型的目标不是“直接生成图像”,而是“精准识别噪声”——只有能准确识别噪声,才能在反向过程中逐步还原图像。
1.3 为什么拆分“T 步”?——关键追问与解答
你可能会问:为什么扩散模型要拆成 T 步小噪声,而不是一步到位?
解答:直接从纯噪声生成清晰图像,相当于让模型学习“从噪声到图像”的复杂映射,这种映射的分布跨度极大(噪声是白噪声,图像是高维像素矩阵),且可能存在多峰分布(不同噪声可能对应同一图像),导致模型训练困难、生成质量不稳定。而分步小步长去噪将大问题拆解为多个“局部去噪”任务:每一步只需预测“当前噪声的微小变化”,学习难度大幅降低,生成结果也更稳定可控。
2. Latent Diffusion 与 Stable Diffusion:从像素空间到高效潜空间
原始的扩散模型(如 DDPM)直接在像素空间(如 512×512×3)进行加噪和去噪,当图像分辨率较高时,计算量和显存占用会急剧增加。为解决这一问题,Latent Diffusion(LDM) 引入了潜空间(Latent Space) 的概念,通过压缩图像降低计算成本。
2.1 Latent Diffusion 的核心:VAE 压缩与潜空间扩散
VAE(变分自编码器) 是实现潜空间压缩的关键:
- 编码:将原始图像(如 512×512×3)通过编码器压缩到维度更小的潜空间(如 64×64×4,通道数和空间分辨率大幅降低)。
- 解码:在潜空间完成去噪后,再通过 VAE 解码器将潜向量还原为像素图像。
优势:扩散过程从高维像素空间转移到低维潜空间,计算量(参数数量、内存占用)可降低 10 倍以上,让 Stable Diffusion 等模型能在消费级显卡上运行。
2.2 Stable Diffusion(SD)的三大核心组件
Stable Diffusion(SD)是 Latent Diffusion 的代表性实现,其核心架构由三部分组成:
-
VAE(变分自编码器):负责图像与潜空间的双向转换。
- 编码:将输入图像压缩为潜向量;
- 解码:将去噪后的潜向量还原为最终图像。 -
U-Net:扩散去噪的主干网络,在潜空间中逐步预测噪声。
- 结构:包含编码器和解码器,通过残差连接和注意力机制捕捉图像特征。 -
文本编码器(CLIP Text Encoder):将文本 prompt 编码为语义向量,作为生成的条件。
- 文本输入(如“a cat wearing sunglasses”)→ 编码为固定维度的 embedding → 注入 U-Net 引导去噪方向。
2.3 Stable Diffusion 代码实战:快速上手生成图像
以下是使用 diffusers 库调用 Stable Diffusion 的关键示例,你可以直接在 Python 环境中运行(需先安装 diffusers 和 torch):
# 关键调用示例(diffusers)
from diffusers import StableDiffusionPipeline
# 加载预训练模型(需联网下载,首次运行较慢)
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
# 生成图像:prompt 是文本描述,num_inference_steps 是采样步数,guidance_scale 是引导强度
image = pipe(
prompt="a cat wearing sunglasses", # 文本描述
num_inference_steps=30, # 去噪迭代步数(默认 50,减少可加速)
guidance_scale=7.5 # 引导强度(7~12 常用,越大越贴合 prompt)
).images[0]
# 保存生成的图像
image.save("cat_with_sunglasses.png")
参数说明:
- num_inference_steps:去噪迭代次数,步数越多细节越精细,但耗时增加(建议 20~50 步,结合采样器选择);
- guidance_scale:控制生成图像与 prompt 的贴合程度(7~12 为常用范围,过大可能导致细节僵硬);
- prompt:文本描述越具体(如“a cute cat with sunglasses, photorealistic, 8k”),生成质量越可控。
3. 文本如何引导图像生成:交叉注意力与 CFG 机制
Stable Diffusion 能根据文本 prompt 生成图像,核心依赖交叉注意力(Cross-Attention) 和 CFG(Classifier-Free Guidance) 两个机制。
3.1 交叉注意力:让图像“读懂”文本
在 U-Net 的去噪过程中,交叉注意力 是文本引导图像生成的“桥梁”:
- 原理:U-Net 的特征图作为 Query,文本编码器输出的语义向量作为 Key/Value,通过注意力计算让图像特征在每一层都能“关注”到文本语义。
- 类比:想象 U-Net 是在“看”图像,文本编码器是在“告诉”它“应该看什么”,交叉注意力让图像特征与文本语义对齐,从而引导去噪方向。
3.2 CFG(无分类器引导):平衡多样性与贴合度
CFG 是控制生成质量的关键参数,通过“对比有条件和无条件预测”实现:
- 训练阶段:模型同时学习“有条件去噪”(基于文本 prompt)和“无条件去噪”(无文本引导,即空 prompt)。
- 推理阶段:生成时,模型输出“有条件预测”和“无条件预测”,通过公式计算最终噪声预测:
$$\text{噪声预测} = \text{无条件预测} + \text{guidance_scale} \times (\text{有条件预测} - \text{无条件预测})$$
- 参数作用:guidance_scale 越大,生成结果越贴合 prompt(但多样性下降);越小则更自由(但可能偏离描述)。常用范围 7~12,需根据需求调整。
4. 可控生成扩展:从文本到结构的精细化控制
除了文本引导,Stable Diffusion 还支持多种扩展方式,实现更精细的图像控制:
4.1 ControlNet:基于结构/条件图的精确控制
ControlNet 是目前最流行的可控生成工具,核心思路是:
- 复用 U-Net 权重:冻结原始 U-Net 权重,新增一个可训练的“条件分支”。
- 输入条件图:通过边缘图(Canny)、深度图、人体姿态骨架(OpenPose)等条件图,精确控制图像的结构/构图。
- 优势:无需重新训练整个模型,只需输入条件图即可稳定生成符合结构要求的图像(如“生成一个站在椅子上的人”)。
4.2 IP-Adapter:基于参考图像的风格迁移
IP-Adapter 允许通过一张参考图像(而非文本)控制生成风格:
- 原理:在 U-Net 中插入额外的适配器(Adapter),学习参考图像的风格特征。
- 应用场景:快速将照片风格迁移到动漫、油画等艺术风格,或保持人物/物体的一致性(如“生成与参考图相同风格的猫”)。
4.3 局部重绘与图生图:更灵活的生成方式
- Inpainting(局部重绘):通过 mask 标记图像区域,仅对 mask 区域重新生成,其余区域保持不变(常用于修图、换背景)。
- Img2Img(图生图):以一张已有图像为基础,通过 prompt 调整细节/风格(如“将原图中的猫换成戴帽子的猫”)。
5. 文生图模型微调:从基础模型到个性化定制
Stable Diffusion 的强大之处在于可通过微调适配特定需求(如生成特定人物、风格),常见微调方法如下:
5.1 DreamBooth:少量图像微调特定主体
- 原理:用少量(5~20 张)特定主体的图像(如“一只叫‘小白’的狗”),微调整个模型或 U-Net 部分权重。
- 特点:生成效果自然,但需大量计算资源,且微调后模型可能对主体过拟合。
5.2 SD-LoRA:低秩适应,轻量高效的微调方案
SD-LoRA(Low-Rank Adaptation)是目前社区最主流的微调方式:
- 核心思想:在 U-Net(或文本编码器)的权重旁插入低秩矩阵 $W + \Delta W = W + BA$,其中 $A$ 和 $B$ 是低秩矩阵(参数量仅为原始模型的 1%~5%)。
- 优势:
- 参数量小(通常 10~100MB),训练速度快(单卡几小时完成);
- 可作为“插件”加载/卸载/叠加(如同时加载“卡通风格”和“写实风格”LoRA 模型)。
5.3 Textual Inversion:轻量嵌入新概念
Textual Inversion 不修改模型权重,而是在文本编码器中学习一个“伪词”embedding:
- 原理:通过少量图像(如 10~30 张)学习一个新 token(如“sks_dog”),插入到文本编码器的词表中。
- 特点:最轻量(仅需训练新 token),但表达能力有限(适合风格/特定物体,不适合复杂场景)。
6. 采样器与关键参数:生成质量与效率的平衡
采样器(Sampler) 决定了从噪声到图像的具体计算路径,而 关键参数 则直接影响生成效果。
6.1 主流采样器对比
| 采样器 | 特点 | 适用场景 |
|---|---|---|
| DDPM | 原始采样方法,理论最贴合训练过程 | 研究/精度优先(速度慢) |
| DDIM | 确定性路径,可跳步采样 | 快速生成(30 步内出图) |
| Euler/Auto | 基于欧拉法,平衡速度与质量 | 日常生成(常用) |
| DPM++ | 高效迭代,收敛快 | 高分辨率/细节生成(如 1024×1024) |
6.2 关键参数调优指南
steps(采样步数):- 不是越多越好!步数增加到一定阈值(如 50 步)后,细节提升边际递减,反而增加耗时。
-
建议:优先选择高效采样器(如 DPM++ 2M Karras),步数设为 20~30 即可满足多数场景。
-
guidance_scale(CFG 强度): -
7~12 为常用范围,过高(>15)易导致“prompt 幻觉”(如生成不存在的细节),过低(<5)则偏离文本描述。
-
seed(随机种子): -
固定种子可复现相同结果,用于对比不同参数效果(如调整
guidance_scale时,保持seed不变)。 -
negative prompt(反向提示词): - 明确告诉模型“不要生成什么”(如“blurry, lowres, extra limbs”),可大幅减少错误细节。
7. 高频问题解答:从原理到实践的关键疑问
Q1:扩散模型和 GAN 有什么区别?
- 扩散模型:通过前向加噪和反向去噪实现生成,训练稳定(无模式坍塌),生成质量高但推理慢;
- GAN:通过生成器和判别器对抗训练,推理快但训练不稳定(易模式坍塌),生成质量依赖调参。
Q2:为什么 Stable Diffusion 能在消费级显卡运行?
- 核心:通过 VAE 将图像压缩到潜空间(如 64×64×4),扩散过程在低维潜空间进行,计算量仅为像素空间的 1/10~1/100,显存占用降低 10 倍以上。
Q3:SD 和 DALL·E 有什么区别?
- SD:开源可本地部署,支持微调(LoRA/DreamBooth)和插件扩展(ControlNet),可控性强;
- DALL·E:闭源 API 调用,生成质量强但不可微调,依赖 OpenAI 服务器算力,适合快速创意生成。
Q4:采样步数越多越好吗?
- 不是:步数增加到 50 步后,细节提升有限(尤其用 DPM++ 等高效采样器),反而会增加推理时间。建议:优先选择高效采样器(如 DPM++ 2M),步数设为 20~30 步,平衡速度与质量。
小结
扩散模型通过“前向加噪-反向去噪”的对称过程实现图像生成,而 Stable Diffusion 等模型通过 VAE 潜空间压缩、交叉注意力文本引导 和 CFG 平衡控制,大幅提升了生成效率和可控性。从文本 prompt 到结构控制(ControlNet),从风格迁移(IP-Adapter)到个性化微调(SD-LoRA),扩散模型已成为文生图领域的核心技术。掌握本文所述原理和调参技巧,你就能基于 Stable Diffusion 实现高质量、可定制的图像生成,开启创意创作的新可能。
评论