讲解稿 · 第 10 章 第 04 节 · 跨模态生成 (Stable Diffusion / DALL-E 3 / Imagen)¶
口播时长: 约 14 分钟|建议语速: 中速, 公式处停两拍|字数: 约 3100 字
承 Ch10 §03 视觉分词 / VQ-VAE → Ch10 §04 跨模态生成 → Ch10 §05 统一多模态架构 (下游章节预告)
导语 (约 80 秒)¶
2024 年初, 一条推特刷屏了: 用 ChatGPT 的语言能力写一段详细描述, 喂给 DALL-E 3 生成, 直接出图——"一条橙色虎斑猫, 坐姿警觉, 背景是雨后的窗台, 反射的灯光柔和"——这张图细节精确到不可思议。
这背后就是跨模态生成: 用文本作为条件, 生成图像。和 §03 "图像变文本 token" 相反, §04 是"文本条件 → 图像 pixel"。这一节讲 4 件事: ① 扩散原理快速回顾 (Ch06 §05 已讲); ② Stable Diffusion 在 latent 上做扩散的关键改进; ③ CLIP 文本怎么注入 UNet (cross-attention); ④ 控制生成 (ControlNet / IP-Adapter)。听 14 分钟。
一 · 扩散模型回顾 (60 秒)¶
前向扩散: \(x_t = \sqrt{\bar\alpha_t}x_0 + \sqrt{1 - \bar\alpha_t}\epsilon, T=1000\) 步加噪。 反向去噪: 学 \(\epsilon_\theta(x_t, t, c)\) 预测噪声, \(c\)=条件(文本嵌入)。 训练损失: \(L = \mathbb{E}[\|\epsilon - \epsilon_\theta(x_t, t, c)\|^2]\)。
这些 Ch06 §05 已讲。重点看 §04 如何应用到图像生成。
二 · Stable Diffusion 在 latent 上做扩散 (约 5 分钟)¶
2.1 像素 vs Latent¶
DDPM (2020, Ho et al.) 在像素空间直接扩散——256×256×3 = 196608 维, 1000 步迭代慢得惊人。
LDM (Latent Diffusion, Rombach et al., CVPR 2022) / Stable Diffusion: 1. 用 VAE 把图像压到 \(4 \times 64 \times 64\) latent (262144 维 → 16384 维, 压缩 16 倍) 2. 在 latent 空间做扩散 3. 训练完后, 推理最后用 VAE 解码 latent → 像素
效果: 速度提升 50 倍, 显存节省 8 倍, 质量持平。
2.2 文本条件如何注入¶
核心机制: UNet 每个 spatial block 加 cross-attention 层。
Q 来自 latent (256×256×4), K 和 V 来自文本编码器输出(CLIP ViT-L/14 → 77×768)。
文本经多层 cross-attn 注入到所有空间分辨率层。没有这一步, UNet 看不到文本。
2.3 CLIP 文本侧的选择¶
Stable Diffusion 1.5 用 OpenAI CLIP ViT-L/14 的文本侧 (512 维), 它已经在 4 亿图文对上学到图文对齐。
SDXL 升级到 双文本编码器: - OpenCLIP ViT-bigG (1280 维) - CLIP ViT-L/14 (768 维) - 拼接 1280+768=2048 维
好处: 文字渲染能力大幅提升——SDXL 能画"STOP"等具体字符, SD 1.5 经常写错。
2.4 CFG (Classifier-Free Guidance) 公式¶
推理时无条件 + 条件 两个分支都跑:
- \(c\)=文本嵌入, \(\emptyset\)=空字符串或 null token
- \(w=7.5\): 标准 SD setting
- \(w=0\): 退化为无条件
- \(w=15\): 强烈对齐, 但多样性下降, 颜色过饱和
直觉: 把图像往 "条件方向" 推, 远离"无条件方向"。
三 · DALL-E 3 与 Imagen (约 4 分钟)¶
3.1 DALL-E 3 关键创新: GPT-4V 重写 prompt¶
用户输入简短的"猫"——直接喂给 SD, 会画出普通、敷衍的图。
DALL-E 3 做法: 1. 用 GPT-4V 重写用户简短 prompt 成详细描述 - 例: "猫" → "一只橙色虎斑猫, 坐姿警觉, 窗外是黄昏, 反射光线柔和" 2. 用 T5-XXL 编码重写后的 prompt 3. 用 unCLIP 扩散做生成 4. CLIP reranker 选最对齐的若干张
效果: 文本对齐度大幅提升, 能用文字写"STOP""Open"等字符。
3.2 Imagen: T5 + 级联超分¶
Google 2022 年的 Imagen: - 文本编码器: T5-XXL (4.6B 参数, 比 CLIP-L 强很多) - 加 base 模型在 64×64 latent 跑扩散 - 之后级联超分: 64 → 256 → 1024
优点: T5 文本理解能力强, prompt 对齐更好。 缺点: 训练成本高, 级联维护复杂。
3.3 三种文生图模型对比¶
| 模型 | 文本编码 | 扩散维度 | 超分 | 开源 |
|---|---|---|---|---|
| SD 1.5 | CLIP-L | 64×64 latent | 单阶段 | ✅ |
| SDXL | CLIP-bigG + CLIP-L | 128×128 latent | 单阶段 | ✅ |
| DALL-E 3 | GPT-4V 改写 + T5-XXL | latent | 多阶段 | ❌ |
| Imagen | T5-XXL | 64×64 latent | 级联 64→256→1024 | ❌ |
四 · 控制生成 (约 2.5 分钟)¶
想让图像姿势固定 或 线稿控制 怎么办?
4.1 ControlNet (Lvmin Zhang, 2023)¶
原理: 1. 复制 SD UNet 的可训练副本 (zero convolutions 初始权重 = 0) 2. 给定空间条件 (Canny 边缘 / 深度图 / 姿态点) 单独编码 3. 加到 UNet 各层 zero convolutions 输出 (类似残差) 4. 训练时 SD UNet 冻结, 副本 + zero conv 训练
零卷积的妙处: 训练开始时输出为 0, 不破坏原模型; 训练中渐变, 学会用空间条件。
4.2 IP-Adapter (身份/风格迁移)¶
给一张参考图 (风格 / 人物), 提取特征, 注入到 UNet。 - 类似 cross-attention 但 attention 是图像 patch ↔ 文本 token - 让人物照 + 文本 prompt → 同人物的不同场景
4.3 T2I-Adapter¶
轻量版 ControlNet, 参数量很小 (几十 MB), 适合快速实验。
跨章衔接 (60 秒)¶
§04 跨模态生成的核心是"文本条件 → 图像", 主要是隐空间扩散 + 文本注入。§05 把这件事推到极致: 统一 transformer 处理任意模态——输入可以是文字、图、音频、视频, 输出也可以是任意模态。GPT-4o/Gemini Live 已经能做到实时语音对话 < 300ms。这把 §01 (对齐)、§02 (理解)、§03 (分词)、§04 (生成) 的所有成果压缩进一个模型。