跳转至

讲解稿 · 第 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)。

\[\text{CrossAttn}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V\]

文本经多层 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) 公式

推理时无条件 + 条件 两个分支都跑:

\[\hat\epsilon = (1 + w)\epsilon_\theta(x_t, t, c) - w\epsilon_\theta(x_t, t, \emptyset)\]
  • \(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 (生成) 的所有成果压缩进一个模型。