外观
扩散模型与生成式 AI
2022 年 8 月,Stable Diffusion 以开源的方式把"输入一句话、生成一张图"的能力交到了每个人手里。只需一句 "a fox sitting in a snowfield, golden hour",任何人——不需要会画画,甚至不需要懂机器学习——都能在几十秒内得到一张以假乱真的图像。这背后有一类叫**扩散模型(diffusion model)**的生成模型,它先摧毁数据、再学习重建数据,把"生成"变成了"从噪声中一步步还原"。
本文沿着"为什么需要 → 怎么工作 → 怎么加速 → 怎么控制 → 怎么评估 → 有什么风险 → 怎么上手"的路径,把扩散模型讲透。它是生成式模型三大路线(VAE/GAN/扩散)里当前最成功的那个,也天然是深度学习与Transformer在图像领域的又一次胜利。
一、生成式 AI 现状:从"能画"到"能用"
生成式 AI 的 2020–2024 年是一张令人眩晕的时间线。仅用四年,图像与视频生成从"实验室玩物"变成了"生产力工具":
| 时间 | 事件 | 意义 |
|---|---|---|
| 2021.01 | OpenAI 发布 DALL·E(12B 参数) | 文生图进入大众视野,但闭源、需排队 |
| 2022.04 | OpenAI 发布 DALL·E 2 | 真实感质的飞跃,但依然闭源 |
| 2022.07 | Stability AI 发布 Stable Diffusion 1.4 | 首次开源高质量文生图,生态爆炸 |
| 2022.08 | Midjourney V3/V4 上线 | 美学风格登顶,社区作品反向定义"AI 艺术" |
| 2023.07 | SDXL、SDXL Turbo 发布 | 1024×1024 高清 + 一步生成 |
| 2023.11 | ControlNet、LCM 等控制/加速技术成熟 | 可精确控制构图,生成从"抽卡"变"作画" |
| 2024.02 | OpenAI 发布 Sora 演示 | 一分钟级真实感视频,文生视频迎来拐点 |
| 2024 至今 | Runway Gen-3、可灵、Veo、SVD 等 | 视频生成进入可用阶段,竞争白热化 |
几条值得注意的趋势:
第一,文生图已经"卷无可卷"? 开源阵营(Stable Diffusion 系列)与闭源阵营(Midjourney、DALL·E 3、Imagen)在"单张图质量"上的差距迅速缩小,竞争焦点转向可控性(ControlNet、区域编辑)、速度(一步生成)与工作流集成(Photoshop、Blender、游戏资产管线)。
第二,视频生成是下一个战场。 图像是"空间"任务,视频是"空间+时间"任务,后者对一致性与计算量提出了数量级更高的要求。Sora 的技术报告直接宣称视频生成模型是"世界模拟器(world simulators)"——能学习物理规律、因果关系,这已经超出了"生成"的范畴,见本文第六节。
第三,生成式 AI 正在重塑行业分工。 设计师从"逐张手绘"变成"提示词 + 筛选 + 精修",游戏公司用生成模型批量产出概念图与纹理,电商用图生图生成商品展示。这个转变的基础设施,就是本文主角——扩散模型。想回顾"机器学习为什么能走到今天"的完整脉络,可先读什么是机器学习。
二、扩散模型原理:把"破坏"倒放
1. 核心思想
扩散模型(Diffusion Probabilistic Model)的想法来自统计物理,最初由 Sohl-Dickstein 等人(2015)提出,2020 年 Ho 等人的 DDPM(Denoising Diffusion Probabilistic Models) 把它做成了能碾压 GAN 的实用工具。
它的思想非常朴素,用一个比喻就能讲清:
一张照片的"破坏"(前向过程,训练时完成,成本极低)
真实图像 x₀ ──加噪──▶ x₁ ──加噪──▶ … ──加噪──▶ x_T ≈ 纯高斯噪声
"破坏"的倒放(反向过程,模型要学的)
纯噪声 x_T ──去噪──▶ x_{T-1} ──去噪──▶ … ──去噪──▶ 全新图像 x₀关键洞察是:给图像逐步加高斯噪声,是一个"易得"且"可逆"的破坏过程。易得——因为任意时刻 t 的噪声图 x_t 可以直接从 x₀ 闭式采样,不需要一步步迭代;可逆——虽然单步加噪的逆变换未知,但可以训练一个神经网络去预测"某一时刻的噪声是什么",从而学会把破坏倒放。
于是"生成"被转化成了"去噪":从纯噪声出发,让网络一步步去掉噪声,最终得到一张全新但符合训练数据分布 P(x) 的图像。这比 GAN 的对抗博弈稳定得多,也比 VAE 的变分推断简单得多——这正是扩散模型后来居上的根本原因。三种路线的详细对比见生成式模型。
2. 前向加噪:有闭式解
设 x₀ 是真实图像,噪声调度(noise schedule)给出每步的方差 β₁, β₂, …, β_T(通常 β 从 1e-4 线性升到 0.02)。前向过程定义为:
q(x_t | x_{t-1}) = N( x_t ; √(1-β_t)·x_{t-1}, β_t·I )因为高斯分布的可加性,t 步之后的状态不用逐次迭代,可以直接写出:
x_t = √(ᾱ_t)·x₀ + √(1-ᾱ_t)·ε, ε ~ N(0, I)其中 α_t = 1 − β_t,ᾱ_t = ∏_{s=1}^{t} α_s。这里 √(ᾱ_t) 控制"还剩多少原图",√(1−ᾱ_t) 控制"已混入多少噪声"。当 T 足够大(DDPM 取 T=1000),ᾱ_T → 0,x_T 收敛为标准高斯噪声 N(0,I)。
x_t = √(ᾱ_t) · x₀ + √(1-ᾱ_t) · ε
└──原图成分──┘ └────噪声成分────┘
t=0: 纯原图 t=T: 纯噪声(ᾱ→0)训练时对每个样本随机抽一个 t,用这个公式瞬间得到带噪图 x_t 和"该步加入的噪声" ε——这就是扩散模型训练如此便宜的原因。
3. 反向去噪:DDPM 的训练目标
我们训练一个神经网络 ε_θ(通常是 UNet,见第三节)来预测 x_t 里混入的噪声 ε。DDPM 的简化训练目标(对真实对数似然下界的一个可优化变体)是:
L = E_{t, x₀, ε} [ ‖ ε − ε_θ( √(ᾱ_t)·x₀ + √(1-ᾱ_t)·ε , t ) ‖² ]翻译成人话:对每个训练样本,随机挑一个时刻 t,加好噪声,然后让网络从"带噪图 + 时刻 t"预测"混入的噪声",用均方误差衡量预测是否准确。网络同时接收时刻 t 作为输入(时间步嵌入),因为"去噪的强度"是随时间变化的——t 越大,噪声越多,越要大胆去噪。
为什么是"预测噪声",而不是直接"预测图像"?
两者在数学上等价:知道了 x_t 和 ε,就能反推出 x₀。但实验发现预测噪声的训练信号更稳定、方差更小。这是 DDPM 相对早期扩散模型(直接学数据梯度/得分)的关键工程改进之一。从"得分匹配(score matching)"视角看,ε_θ 学到的其实正是数据对数密度的梯度 ∇_x log p(x)——参见 Song 等人的 SDE 统一框架(arXiv:2011.13456)。
4. 采样:把噪声倒放回图像
训练好 ε_θ 之后,生成就是从 x_T ~ N(0,I) 出发,反复执行反向步骤,共 T 步:
x_{t-1} = (1/√α_t)·( x_t − (β_t/√(1-ᾱ_t))·ε_θ(x_t, t) ) + σ_t·z, z ~ N(0,I)
└─────── 去掉预测出的噪声,还原"更干净"的图像 ───────┘ └─随机扰动─┘其中 σ_t 是每步的随机抖动(保证过程是真正的扩散逆过程)。每一步都在"去一点噪声",肉眼观察的话,前几十步看到的是从混沌噪声里浮现轮廓,最后几十步是在"精修纹理"——这也是为什么采样步数(num_inference_steps)直接决定生成质量与耗时。
采样过程(生成时,T≈1000 步可加速到 20–50 步):
纯噪声 ─▶ 模糊色块 ─▶ 出现轮廓 ─▶ 结构成形 ─▶ 细节清晰 ─▶ 最终图像
x_T x_1 x₀到这里,你已掌握扩散模型的全部数学骨架:前向闭式加噪 + 反向学习去噪 + 迭代采样。下面看它如何被工程化成一个能产图的产品。
三、潜空间与 Stable Diffusion 架构:VAE + UNet + CLIP
DDPM 有个致命缺点:慢。像素级扩散要在 512×512×3 的图像空间迭代 1000 步,训练和推理都贵到无法商用。Latent Diffusion Models(LDM,Rombach et al., 2022)用一招化解:别在像素空间扩散,在压缩过的潜空间(latent space)里扩散。这就是 Stable Diffusion 的直接前身。
1. 为什么是潜空间
图像是高度冗余的:相邻像素高度相关,而"语义信息"远少于像素数。先用一个**自编码器(VAE)**把图像压进低维潜空间,再去噪——计算量直接降一个数量级:
| 像素空间扩散 | 潜空间扩散(LDM/SD) | |
|---|---|---|
| 操作维度 | 512×512×3 ≈ 78 万维 | 64×64×4 ≈ 1.6 万维 |
| 相对计算量 | ~1 | 约 1/50 |
| 生成分辨率 | 难以突破 128×128 | 轻松 512×512 乃至 1024×1024 |
更妙的是,VAE 的潜空间是有语义的连续空间:在潜空间里插值、编辑、混合,对应到图像上就是平滑、自然的变换——这为后续一切条件控制技术(第五节)提供了舞台。
2. 三大组件的分工
Stable Diffusion(SD 1.x)由三块各司其职的模块组成:
┌─────────────────────────────────────────┐
文字提示 ──▶ CLIP 文本编码器 ──▶ 文本嵌入(77 token × 768 维)
"a red fox..." │
▼
随机噪声 z_T ──▶ UNet(潜空间去噪)──▶ 潜变量 z₀ ──▶ VAE 解码器 ──▶ 图像
▲ ▲ │
│ └── cross-attention 注入文本条件 │
└────── timestep 嵌入(第几步) ┘| 组件 | 作用 | 备注 |
|---|---|---|
| VAE 编码器 | 图像 → 潜空间(压缩 8 倍) | 训练时用于造训练样本 |
| VAE 解码器 | 潜变量 → 像素图像 | 生成时最后一步 |
| UNet | 在潜空间逐步去噪(预测噪声 ε_θ) | 模型的"大脑",SD 1.5 约 8.6 亿参数 |
| CLIP 文本编码器 | 提示词 → 文本嵌入 | SD 1.x 用 CLIP ViT-L/14 |
| Cross-Attention | 把文本条件"喂"进 UNet 各层 | 文生图能力的核心机制 |
UNet 是一种编码器-解码器结构的卷积网络,带跳跃连接(skip connection)——编码器逐层下采样提取多尺度特征,解码器逐层上采样还原,跳跃连接保留细节。扩散模型沿用了它在医学图像分割中久经考验的架构,再在每层加入 time embedding 与文本 cross-attention。
Cross-Attention 是文生图的魔法所在:UNet 的中间特征作为查询(Query),文本嵌入作为键值(Key/Value),通过注意力机制让"图像的每个位置去关注与它相关的文字"。这正是Transformer里的多头注意力思想被移植到了图像生成中——图像与文本首次在特征级被深度耦合。
与 Transformer 家族的关系
扩散模型的骨干最初是 CNN 的 UNet,但最新一代(SD3、Sora、SD 3.5 等)越来越多地采用 DiT(Diffusion Transformer):把图像切成 patch,直接用 Transformer 处理。生成式 AI 的骨架正在收敛到同一个架构——Transformer。这也是大语言模型与图像生成殊途同归的技术注脚。
3. 训练数据与模型 zoo
SD 1.x 训练在 LAION-5B(58.5 亿图文对,Schuhmann et al., 2022)的子集上,权重以 CreativeML OpenRAIL-M 许可开源。社区围绕 SD 形成了庞大生态:
- SD 1.5:经典主力,512×512,生态最全(LoRA、ControlNet 几乎都先支持它);
- SD 2.1:换用 OpenCLIP 文本编码器,社区采用率反而低于 1.5;
- SDXL:1024×1024,双文本编码器(OpenCLIP ViT-bigG + CLIP ViT-L),UNet 约 26 亿参数,风格与细节大幅提升;
- SD3 / SD3.5:改为 DiT 骨架 + 三文本编码器(含 T5),引入 rectified flow 训练;
- 配套微调模型:DreamShaper、Realistic Vision 等,都是社区在基础模型上二次训练的专用模型。
这些模型与数据集的获取方式可参考数据集与工具档案。
四、采样加速:把"慢"变成"快"
DDPM 采样要 1000 步,生成一张图需要几十秒到几分钟。整个加速谱系围绕一个目标:用更少的去噪步数得到同等质量。
1. DDIM:换个更聪明的采样轨迹
DDIM(Denoising Diffusion Implicit Models,Song et al., 2021)发现,DDPM 的反向采样轨迹并不是唯一的——前向过程定义的是"从 x₀ 到 x_T"的分布族,而反向过程可以有无数种。DDIM 构造了一个非马尔可夫的反向过程,并给出关键结论:
DDIM 反向步:
x_{t-1} = √ᾱ_{t-1}·( x_t − √(1−ᾱ_t)·ε_θ )/√ᾱ_t + √(1−ᾱ_{t-1}−σ_t²)·ε_θ + σ_t·z- 当随机项系数 σ_t = 0 时,采样是确定性的:同样的噪声输入,永远得到同样的图——这催生了"图生图""修复"等实用功能;
- 可以大步跳跃:只在 20–50 个选定的时间步上采样,质量损失很小。
DDIM 让文生图从"一分钟一张"降到"几秒一张",是第一个量级的加速。
2. 蒸馏:把教师模型"教"给少步模型
蒸馏的思路是训练一个"学生"模型,模仿"教师"(1000 步模型)的采样行为:
- 渐进式蒸馏(Progressive Distillation):逐轮把步数减半,每轮学生学习教师两步的输出;
- ADD(Adversarial Diffusion Distillation,2023):蒸馏 + 对抗损失,让 1–4 步输出的质量逼近教师——SDXL Turbo 就是用它在单步生成里做到了接近 SDXL 的质量;
- 一致性蒸馏 / LCM(Latent Consistency Models,2023):直接学习"任意时刻 x_t 一步跳到 x₀"的一致映射,配合特殊采样器(如 LCMScheduler),4–8 步即可出图。
3. 数学加速器:DPM-Solver 等
还有一类不重新训练的方法:把去噪过程看作一个常微分方程(概率流 ODE)的数值求解问题,用高阶数值方法减少截断误差。DPM-Solver(2022)、UniPC 等采样器在 10–20 步就逼近 1000 步 DDPM 的质量,是 diffusers 里默认采样器的常客。
| 方法 | 步数 | 是否需重训 | 备注 |
|---|---|---|---|
| DDPM | 1000 | 否 | 基线,慢 |
| DDIM | 20–50 | 否 | 确定性、可编辑,最通用 |
| DPM-Solver / UniPC | 10–20 | 否 | 数学加速,即插即用 |
| LCM | 1–8 | 是(蒸馏小模型) | 实时出图,适合交互场景 |
| ADD / SDXL Turbo | 1–4 | 是 | 一步生成,质量最佳 |
加速的代价
少步采样在"图像整体结构"上损失不大,但在高频细节(文字、小物体、手指)上会明显劣化;蒸馏模型往往还会牺牲多样性(同一提示词产出的图更雷同)。"快"和"好"是真实存在的权衡,不是免费的午餐。
五、条件控制:让模型"听话"
基础文生图有个体验痛点:不可控。同一句提示词,构图、姿势、光线全靠运气,被社区戏称为"抽卡"。条件控制技术把"抽卡"变成"作画"。
1. ControlNet:精确控制结构
ControlNet(Zhang et al., 2023)的目标是:额外提供一张条件图(边缘、深度、姿态、分割图),让生成的图在结构上遵循它。
做法很优雅:复制一份 UNet 的编码器作为可训练副本,通过 zero convolution(初始权重为零的 1×1 卷积)把条件图特征逐层注入原 UNet。zero convolution 保证训练开始时副本输出为 0,不破坏预训练模型的任何能力;条件信号随着训练逐步"接管"结构生成。
用户输入:草稿线稿 / Canny 边缘 / 深度图 / 姿态骨骼 / 语义分割图
│
▼
可训练 ControlNet 副本 ──zero conv──▶ 注入原 UNet 各层
▲
原 UNet(冻结)◀──── 文本提示典型应用:设计师画个线稿让 AI 上色渲染、用深度图固定室内布局、用姿态骨骼控制人物动作、用语义分割图布置场景。ControlNet 是 2023 年对文生图工作流影响最大的技术。
2. LoRA:花小钱定制风格
要"让模型学会某个角色、某种画风",传统方案是微调全部权重——显存贵、容易灾难性遗忘。**LoRA(Low-Rank Adaptation)**提供了另一个答案:冻结原模型,只在 attention 层的权重旁加一个低秩旁路。
W' = W + ΔW = W + B·A, B ∈ R^{d×r},A ∈ R^{r×d},r 通常 4~64
└─原权重(冻结)─┘ └────────低秩增量(仅此可训练)────────┘LoRA 本身出自大语言模型微调(Hu et al., 2021),被原封不动移植到扩散模型:训练时显存需求从"全量微调的数 GB"降到"几百 MB",训练数据从"几十万张"降到"几十张示例图",产出的是一个 50–500MB 的 .safetensors 文件,可以在采样时动态加载、叠加、换下——Civitai 社区几十万个 LoRA 模型就是这套机制孵化的生态。
3. IP-Adapter:让"参考图"说话
LoRA 和 ControlNet 控制的是"风格/结构",而 IP-Adapter(2023)解决的是"参照一张图生成":把参考图通过 CLIP 图像编码器变成图像嵌入,经一条解耦的 cross-attention 分支(decoupled cross-attention)与文本条件并行注入 UNet。结果是可以用一张参考图指定"主角长什么样",同时用文字指定场景动作——"图生图"从简单的风格迁移升级成了"身份保持"级别的控制。
| 技术 | 控制维度 | 典型场景 | 训练量 |
|---|---|---|---|
| 提示词/CFG | 语义 | 日常出图 | 0 |
| ControlNet | 几何结构 | 线稿、姿态、深度 | 中(需配对数据) |
| LoRA | 风格/角色/物体 | 画风定制 | 小(几十张图) |
| IP-Adapter | 参考图身份 | 保持人物一致 | 中 |
组合起来就是生产力
真实工作流几乎都是组合拳:ControlNet 定结构 + LoRA 定风格 + IP-Adapter 保角色一致 + 提示词定语义,最后用图生图(img2img)或 inpainting 精修局部。这一整套"模型工厂"的搭建思路,也是值得写进项目作品集的经典主题。
六、文生视频与多模态趋势:从静态到世界模拟器
视频生成是扩散模型的"时间维扩展",也是当前生成式 AI 竞争最激烈的前线。
1. 技术路线的两种加法
把图像扩散变成视频扩散,核心问题只有一个:如何建模时间维度。主流有两条路线:
- 3D 卷积/时空注意力:把 2D 的卷积和注意力扩展出时间维,直接学"视频帧序列"的联合分布。Stable Video Diffusion、Runway 早期版本走这条路;
- 在冻结文生图模型上插时间层:AnimateDiff 的做法——保留已成熟的文生图模型不变,只在层间插入可训练的 temporal attention 模块。好处是复用图像先验,训练数据需求小。
2. Sora 与 DiT:视频即"时空 patch"
2024 年 2 月 OpenAI 发布的 Sora 之所以是拐点,不只是视频长度(一分钟级)和真实感,而是架构与范式的升级:
- 把视频切成时空 patch(spatiotemporal patches):和 ViT 把图像切 patch、LLM 把文本切 token 是同一个思想——Transformer 对"任意长度的 token 序列"一视同仁,图像、视频、音频、文本第一次可以放进同一套生成框架;
- DiT 骨干:去噪网络从 UNet 换成 Diffusion Transformer(Peebles & Xie, 2022),支持任意分辨率/时长;
- re-captioning:用 DALL·E 3 的方法给训练视频重新打详细文字标签,极大提升"听懂提示词"的能力;
- 技术报告把这类模型称为 "world simulators":能涌现出对重力、光影、物体交互的粗略"物理直觉"。
3. 视频生成的开放问题
即便到了 2025 年,视频生成仍面临三个硬约束:一致性(角色、场景、道具跨帧不漂移)、时长带来的平方级计算成本、因果正确性("物体被遮挡后再出现应保持原样"这类长程记忆)。它的成熟度远低于文生图——但这恰恰意味着更大的研究空间与工程机会。
多模态的另一个大趋势是统一生成:谷歌 Gemini、OpenAI 的 GPT-4o 系列把"理解"与"生成"放进同一模型,图像、视频、音频、文本之间可以互相转换与编辑。这个方向的底座仍然是深度学习与Transformer的胜利。
七、怎么评估"生成得好不好"
生成质量评估比分类任务的准确率难得多——因为"好看"是主观的,且不存在标准答案。实践中用两类指标:自动指标 + 人工评估。
1. FID:最常用的自动指标
FID(Fréchet Inception Distance) 的做法是:用预训练 Inception-V3 把真实图像和生成图像都映射到特征空间,然后计算两个特征分布(近似为高斯)之间的 Fréchet 距离:
FID = ‖μ_r − μ_g‖² + Tr( Σ_r + Σ_g − 2·(Σ_r·Σ_g)^{1/2} )
└真实/生成特征均值的距离┘ └────────特征协方差的差异────────┘FID 越低,表示两组图像的特征分布越接近。它同时惩罚"质量差"(均值漂移)和"多样性不足"(协方差收窄),是文生图论文的标配指标。
但 FID 有众所周知的缺陷:
- 可被"记忆"作弊:模型若直接"背诵"训练集里的图,FID 反而极低——FID 分不出"生成"和"抄袭";
- 对模式崩塌不敏感:只生成"一类好看的图"时 FID 可能依然漂亮;
- 特征空间的偏好:Inception-V3 特征侧重物体识别,风格类差异可能被低估。
配套指标还有:**IS(Inception Score)**评估单图清晰度与类别多样性(但与真实分布无关)、CLIP Score 衡量"图文对齐度"(生成图与提示词的匹配程度)。指标选择的完整框架见模型评估与验证。
2. 人工评估:绕不开的"真人裁判"
自动指标永远替代不了人眼,尤其是涉及美学、风格、是否符合意图时:
- A/B 测试与 head-to-head 对决:给评审者两张图选更好的(Midjourney 的社区锦标赛就是这种机制的规模化版本);
- Elo 排名:在成对比较上跑 Elo 系统(类似国际象棋等级分),得到模型的相对强度排名——LMSYS 的 Chatbot Arena 在文本侧验证了这个方法;
- 任务导向评估:如"修复一张图/完成一个重绘任务",让专业用户打分。
评估的诚实提醒
任何单个指标都可以被刷。严谨的做法是:FID/CLIP Score 作为快速筛查,最终以上百人次的双盲人工对比为准。另外别忘了评估生成速度、显存占用、失败率这些工程指标——一个 FID 更低但慢 10 倍的模型在生产中未必更好。这正是评估与验证一节反复强调的"指标要服务于目标"。
八、风险与伦理:技术的另一面
扩散模型的力量越强,被滥用的代价也越高。这一节讲清三个绕不开的问题,也给出业界的应对路径。
1. Deepfake 与真实性危机
换脸、伪造名人言论、合成虚假新闻——扩散模型让"眼见为实"失效了。2023 年起,"AI 生成的教皇羽绒服照片""AI 合成的特朗普被捕照"等事件一次次出圈。产业界的应对分两层:
- 被动检测:训练分类器区分真伪,但生成技术的进步让检测永处下风(对抗生成);
- 主动标注/水印:C2PA Content Credentials(Adobe 牵头,OpenAI、Microsoft 等加入)在文件元数据里记录"由 AI 生成"的来源链;SynthID(Google DeepMind)把不可见水印嵌入像素,裁剪/压缩后仍可检测。2023 年后各大模型厂商逐步强制给生成内容打标。
2. 版权:训练数据里的灰色地带
Stable Diffusion 训练自 LAION-5B——一个从互联网抓取的海量图文对数据集,其中包含大量受版权保护的图片。由此引发了两类标志性诉讼:
- Getty Images 诉 Stability AI(2023):Getty 指控其模型输出了带有 Getty 水印痕迹的图像,属直接侵权;
- 艺术家集体诉讼(Andersen et al. vs Stability AI 等):三位艺术家主张模型"复制了画风"。
核心法律争议至今未完全定论:训练行为是否构成侵权?模型的输出是否算"衍生作品"? 实践层面的行业回应是"授权数据"路线(Adobe Firefly 只用 Adobe Stock 授权图训练、OpenAI 与 Shutterstock 合作),但更大的争论——生成内容与人类创作的关系——远未结束。从机制上讲,模型到底"记住了"什么、"学到了"什么,是可解释性领域仍在回答的问题。
3. 内容安全与身份滥用
- NSFW 与暴力内容:SD 权重自带可选的 safety checker(一个 NSFW 分类器),但开源模型被二次发布后该防线形同虚设;
- 肖像权与身份盗用:用 LoRA 可以仅凭几十张照片复制任何人的面孔——"深度伪造色情""AI 诈骗视频"成为真实社会案件;
- 审核的难题:过度审核会压制正当创作(医学、艺术、教育场景),审核不足则助长滥用。这是生成式 AI 特有的"治理两难"。
从业者能做的具体动作:给生成图加水印/元数据、在部署层加入可配置的输入输出过滤、对"人脸生成"类功能做实名与授权校验、在组织内建立 AIGC 内容标注规范。技术本身中立,取舍在工程与人。
九、实战:本地跑起 Stable Diffusion
理论说完,动手。以下用 Hugging Face 的 diffusers 库在本地运行 Stable Diffusion——一条命令安装,一个脚本出图。
1. 环境准备
bash
pip install diffusers transformers accelerate safetensors torch
# 有 NVIDIA GPU(显存 ≥ 8GB,推荐 16GB+)则装 CUDA 版 torch:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121首次运行会自动下载模型权重(SD 1.5 约 4GB,SDXL 约 7GB)到 ~/.cache/huggingface。多数 SD 权重采用 gated 许可,需要先在 Hugging Face 登录并接受模型卡上的条款:
bash
huggingface-cli login # 粘贴你的 HF token2. 最小文生图脚本
python
import torch
from diffusers import StableDiffusionPipeline
# 加载模型。模型仓库多为 gated repo,需先接受许可并登录。
# 备选:stabilityai/stable-diffusion-xl-base-1.0(1024×1024,更吃显存)
pipe = StableDiffusionPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5",
torch_dtype=torch.float16, # 半精度,省一半显存
safety_checker=None, # 仅演示;生产环境建议保留
)
pipe = pipe.to("cuda") # 无 GPU 可换成 "cpu",但会慢 10~50 倍
prompt = "a red fox sitting in a snowfield, golden hour, photorealistic, high detail"
image = pipe(
prompt,
num_inference_steps=30, # 采样步数:质量与速度的旋钮
guidance_scale=7.5, # CFG 引导强度:越高越贴提示、多样性越低
).images[0]
image.save("fox.png")这段代码就是第三节架构的完整落地:from_pretrained 拉取 VAE+UNet+CLIP 全套,pipe(prompt) 内部依次完成"文本编码 → 噪声采样 → UNet 逐步去噪 → VAE 解码"。
3. 图生图 / 换一种采样器
python
from PIL import Image
from diffusers import StableDiffusionImg2ImgPipeline, DDIMScheduler
pipe = StableDiffusionImg2ImgPipeline.from_pretrained(
"runwayml/stable-diffusion-v1-5", torch_dtype=torch.float16
).to("cuda")
# 换更快的确定性采样器(对应第四节 DDIM)
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config)
init = Image.open("sketch.png").convert("RGB").resize((512, 512))
out = pipe(prompt="watercolor painting of a mountain lake",
image=init,
strength=0.6, # 0~1:保留原图多少结构
guidance_scale=7.5).images[0]
out.save("painting.png")4. 用 LoRA 定制风格
python
# 在已加载的 pipe 上叠加一个 LoRA 适配器(HF 仓库或本地 .safetensors)
pipe.load_lora_weights("ostris/super-cute-cat-playground") # 示例仓库
# 多个 LoRA 可叠加;用 pipe.unload_lora_weights() 卸载回原模型若想自己训练 LoRA,diffusers 官方仓库自带训练脚本(train_dreambooth_lora.py 等),用 20–100 张目标风格的图,在单卡 12–24GB 显存上即可完成训练——详见 diffusers 训练文档。
5. 常见故障速查
| 症状 | 原因与对策 |
|---|---|
CUDA out of memory | 换 torch_dtype=float16、降分辨率、减少 num_inference_steps、用 enable_attention_slicing() |
| 出图是纯噪点 | 权重下载不完整或模型与 pipeline 不匹配;删缓存重下 |
| 出图发灰/有网格 | 换 safetensors 权重、把 pipe.vae 转回 float32 再采样 |
| 慢 | 关闭其他占显存程序、升级 GPU;或改用 LCM/Turbo 等少步模型 |
| 提示词不生效 | 确认文本编码器加载正常;CLIP 只有 77 token 上限,超长提示会被截断 |
进阶路径
跑通最小示例后,把「ControlNet 线稿上色」或「SDXL + LoRA 角色一致性」做成一个小项目,配合效果对比与评估(FID + 人工盲评),就是一份很好的机器学习项目作品集作品。术语若有陌生处,随时查术语表。
十、权衡与取舍
扩散模型项目里反复出现的四组张力,值得每个实践者心里有杆秤:
- 速度 vs 质量:步数、模型规模、蒸馏程度三者构成一个三角形——LCM/Turbo 换来了实时,代价是细节与多样性;要"又快又好"只能加钱(更大的蒸馏模型、更强的 GPU)。
- 可控性 vs 多样性:提高 CFG 引导强度(guidance_scale)和条件控制(ControlNet)能让输出严格贴合意图,但会压缩生成分布的多样性,让结果趋同、失去惊喜。艺术创作要多样性,产品落地要一致性——参数要按用途调。
- 基础模型 vs 微调模型:通用基础模型(SDXL)覆盖面广但专项不精;专用微调(DreamShaper、写实模型)在某类内容上明显更优但泛化变窄。生产环境通常是"一个底座 + 若干 LoRA"的组合,而不是一个模型打天下。
- 开源自部署 vs 闭源 API:开源(SD 系列)可控、可定制、无按量计费,但要自己管 GPU、显存与安全过滤;闭源(Midjourney、DALL·E 3)开箱即用、质量稳定,但缺乏底层控制且数据出境、依赖厂商。对团队而言,这是成本结构而不是技术偏好问题。
还有两个常被忽略的取舍:训练成本 vs 推理成本(一次训练贵但每次推理便宜,反之亦然,决定你的算力预算该往哪边投)、效果 vs 责任(生成能力越强,审核、水印、合规的工程投入越大——这部分成本常被新团队低估)。
十一、延伸阅读
- 生成式模型:VAE / GAN / 扩散三大路线的完整对比,先看这篇再回读本文效果更好;
- 什么是机器学习:机器学习整体框架与术语地基;
- Transformer:cross-attention、patch、token 的源头——理解 CLIP 与 DiT 的必备;
- 大语言模型:文本侧的孪生故事,与图像生成对照阅读别有洞天;
- 模型评估与验证、可解释性与公平性:评估与伦理的系统化视角;
- 网络资源:
- Lilian Weng, What are Diffusion Models? —— 最受推崇的中级综述,公式推导完整;
- Jay Alammar, The Illustrated Stable Diffusion —— 配图讲解 SD 全流程,可视化典范;
- Hugging Face 博客 Stable Diffusion with 🧨 Diffusers —— 从零部署的官方教程;
- diffusers 官方文档 —— 采样器、pipeline、训练脚本的一站式手册;
- arXiv 论文页面 —— Latent Diffusion 论文原文。
参考资料
- Sohl-Dickstein, Weiss, Maheswaranathan, Ganguli. Deep Unsupervised Learning using Nonequilibrium Thermodynamics (ICML 2015) —— 扩散模型思想的源头
- Ho, Jain, Abbeel. Denoising Diffusion Probabilistic Models (NeurIPS 2020) —— DDPM,扩散模型成为实用生成工具的标志性论文
- Song, Meng, Ermon. Denoising Diffusion Implicit Models (ICLR 2021) —— DDIM,确定性加速采样
- Song, Sohl-Dickstein, Kingma, Kumar, Ermon, Poole. Score-Based Generative Modeling through Stochastic Differential Equations (ICLR 2021) —— 扩散/得分模型的 SDE 统一框架
- Rombach, Blattmann, Lorenz, Esser, Ommer. High-Resolution Image Synthesis with Latent Diffusion Models (CVPR 2022) —— Latent Diffusion,Stable Diffusion 的直接前身
- Schuhmann et al. LAION-5B: An open large-scale dataset for training next generation image-text models (NeurIPS 2022) —— SD 的训练数据来源
- Peebles, Xie. Scalable Diffusion Models with Transformers (ICCV 2023) —— DiT,扩散模型 Transformer 化的奠基论文
- Zhang, Rao, Agrawala. Adding Conditional Control to Text-to-Image Diffusion Models (ICCV 2023) —— ControlNet
- Hu et al. LoRA: Low-Rank Adaptation of Large Language Models (ICLR 2022) —— LoRA 原始论文(微调范式,后被扩散模型广泛采用)
- Ye et al. IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models (2023) —— IP-Adapter,图像条件注入
- Luo et al. Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference (2023) —— LCM,少步采样的代表工作
- Sauer, Lorenz, Voelcker, et al. Adversarial Diffusion Distillation (2023) —— ADD,SDXL Turbo 背后的蒸馏方法
- Heusel, Ramsauer, Unterthiner, Nessler, Hochreiter. GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium (NeurIPS 2017) —— FID 指标的原始出处
- Brooks, Peebles, Holmes, DePue, et al. Video generation models as world simulators(OpenAI 技术报告,2024) —— Sora 技术报告
- Hugging Face. Diffusers 官方文档 —— 本文实战代码所依赖的库
- The Illustrated Stable Diffusion (Jay Alammar, 2022) —— SD 架构的可视化讲解