Skip to content

扩散模型与生成式 AI

本页速览 从 DDPM 到 Stable Diffusion:本文拆解扩散模型加噪/去噪的数学原理、潜空间架构与采样加速方法,讲清 ControlNet、LoRA 等条件控制技术,并给出本地实战代码与风险评估。

扩散模型与生成式 AI ​

2022 年 8 月,Stable Diffusion 以开源的方式把"输入一句话、生成一张图"的能力交到了每个人手里。只需一句 "a fox sitting in a snowfield, golden hour",任何人——不需要会画画,甚至不需要懂机器学习——都能在几十秒内得到一张以假乱真的图像。这背后有一类叫**扩散模型(diffusion model)**的生成模型,它先摧毁数据、再学习重建数据,把"生成"变成了"从噪声中一步步还原"。

本文沿着"为什么需要 → 怎么工作 → 怎么加速 → 怎么控制 → 怎么评估 → 有什么风险 → 怎么上手"的路径,把扩散模型讲透。它是生成式模型三大路线(VAE/GAN/扩散)里当前最成功的那个,也天然是深度学习与Transformer在图像领域的又一次胜利。

一、生成式 AI 现状:从"能画"到"能用" ​

生成式 AI 的 2020–2024 年是一张令人眩晕的时间线。仅用四年,图像与视频生成从"实验室玩物"变成了"生产力工具":

时间事件意义
2021.01OpenAI 发布 DALL·E(12B 参数)文生图进入大众视野,但闭源、需排队
2022.04OpenAI 发布 DALL·E 2真实感质的飞跃,但依然闭源
2022.07Stability AI 发布 Stable Diffusion 1.4首次开源高质量文生图,生态爆炸
2022.08Midjourney V3/V4 上线美学风格登顶,社区作品反向定义"AI 艺术"
2023.07SDXL、SDXL Turbo 发布1024×1024 高清 + 一步生成
2023.11ControlNet、LCM 等控制/加速技术成熟可精确控制构图,生成从"抽卡"变"作画"
2024.02OpenAI 发布 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 里默认采样器的常客。

方法步数是否需重训备注
DDPM1000否基线,慢
DDIM20–50否确定性、可编辑,最通用
DPM-Solver / UniPC10–20否数学加速,即插即用
LCM1–8是(蒸馏小模型)实时出图,适合交互场景
ADD / SDXL Turbo1–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 token

2. 最小文生图脚本 ​

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 责任(生成能力越强,审核、水印、合规的工程投入越大——这部分成本常被新团队低估)。

十一、延伸阅读 ​

参考资料 ​