引言:无条件生成与条件生成

无条件生成模型学习的是数据分布 $p(x)$——给它噪声,它随机生成一张猫或一辆车的图片。但自动驾驶场景中,我们需要的是可控生成:生成某个特定天气的、某个特定路口的、自车以某个速度行驶的场景。

这就引出了条件生成模型 $p(x|y)$,其中 $y$ 是条件变量。对于扩散模型,“如何加入条件"是这个领域的核心工程问题。

本文从引导方法(如何引导采样方向)和条件注入(如何在网络结构中加入条件)两个维度展开,最后介绍驾驶场景中的特殊条件设计和加速方案。


🧭 Classifier Guidance:利用分类器引导

基本原理

Classifier Guidance(CG)的思路很简单:在采样过程中,用一个额外的分类器 $p(y|x_t)$ 来引导去噪方向,使生成结果更符合条件 $y$。

从贝叶斯定理出发:

$$\nabla_{x_t} \log p(x_t|y) = \nabla_{x_t} \log p(x_t) + \nabla_{x_t} \log p(y|x_t)$$

其中 $\nabla_{x_t} \log p(x_t)$ 是从扩散模型得到的无条件 score,$\nabla_{x_t} \log p(y|x_t)$ 是分类器在噪声图 $x_t$ 上对类别 $y$ 的对数概率梯度。

引入引导强度 $s$ 控制条件强度:

$$\nabla_{x_t} \log p(x_t|y) = \nabla_{x_t} \log p(x_t) + s \cdot \nabla_{x_t} \log p(y|x_t)$$

引导强度的影响

$s$ 值效果
$s=0$无条件生成,与条件无关
$s=1$标准贝叶斯后验采样
$s>1$强条件引导,更符合条件但多样性降低

CG 的典型变体

CLIP Guidance:将分类器替换为 CLIP 模型,$p(y_{text}|x_t)$ 的梯度引导生成符合文本描述的图像:

$$\nabla_{x_t} \log p(x_t|y_{text}) = \nabla_{x_t} \log p(x_t) + s \cdot \nabla_{x_t} \text{sim}(E_{text}(y), E_{img}(x_t))$$

深度 Guidance:在生成过程中约束深度图的估计值与给定的深度条件一致。常用于 ControlNet 等架构中,通过一个额外的深度估计网络提供的梯度信号,将生成过程约束在地形/3D 几何上。

CG 的局限

CG 面临的主要问题是分类器需要在各个噪声级别上都能正常工作($x_0$ 到 $x_T$ 都需要分类准确),这要求分类器必须在扩散过程的各个时间步数据分布上训练或适应。在加噪严重的 $x_t$ 上做分类本就困难,训练不稳定,且额外分类器的训练成本很高。


🎯 Classifier-Free Guidance:更优雅的方案

核心思想

Classifier-Free Guidance(CFG)由 Ho & Salimans 在 2022 年提出,核心洞察是:不需要额外的分类器,用扩散模型自身即可实现引导

CFG 的核心技巧是训练时随机丢弃条件。在训练中,以概率 $p_{uncond}$(通常是 5%~10%)将条件 $y$ 替换为 $\varnothing$(空条件标记)。这样,同一个模型 $\epsilon_\theta$ 可以同时充当条件模型和无条件模型:

$$\epsilon_\theta(x_t, t, y) \quad \text{和} \quad \epsilon_\theta(x_t, t, \varnothing)$$

采样公式

在采样时,将条件预测和无条件预测线性插值:

$$\tilde{\epsilon}_\theta(x_t, t, y) = \epsilon_\theta(x_t, t, \varnothing) + w \cdot (\epsilon_\theta(x_t, t, y) - \epsilon_\theta(x_t, t, \varnothing))$$

其中 $w$ 是引导尺度(Guidance Scale)

Guidance Scale 的影响

$w$含义效果
$w=0$纯无条件生成完全不遵循条件
$w=1$标准条件生成遵循条件,多样性正常
$w>1$强引导更符合条件,多样性下降
$w<1$弱引导多样性更高,但条件对齐减弱

在实践中,CFG 的典型 $w$ 取值:

  • 文本到图像:7.0 ~ 14.0(强引导,强调文本对齐)
  • 驾驶场景生成:2.0 ~ 5.0(中强引导,需要保持场景多样性)
  • 轨迹生成:1.0 ~ 2.0(弱引导,避免模式坍缩到单一行为)

CFG vs CG 详细对比

维度Classifier GuidanceClassifier-Free Guidance
额外模型需要分类器不需要
训练成本扩散模型 + 分类器扩散模型(条件丢弃训练)
采样成本一次前向 + 一次梯度两次前向(条件 + 无条件)
条件类型离散类别为主任意类型(文本、图像、动作等)
实现复杂度
扩展性差(每增一个条件需重新训练分类器)(条件类型可任意扩展)
控制粒度粗(类级别)细(特征级别)

CFG 因其简洁和通用性,成为 Stable Diffusion、Sora 以及几乎所有扩散模型的标准配置。


🏗️ 条件注入的四种技术方案

有了引导方法(确定采样方向),还需要条件注入——如何在网络结构中让模型"看到"条件信息。以下是四种主流方案。

1. 拼接(Concatenation)

最简单直接:将条件信息和噪声图像在通道或 token 维度上拼接。

典型应用

  • 图像条件生成(Image-to-Image):$x_t$ 与条件图像在通道维拼接 $[x_t; c] \in \mathbb{R}^{2C \times H \times W}$
  • BEV 条件生成:BEV 特征作为额外通道拼接到潜变量

优点:实现简单,与网络结构无关 缺点:无法处理非结构化或变长条件(如文本)

2. 交叉注意力(Cross-Attention)

Stable Diffusion 使用的标准方案。将条件编码为特征序列,在 U-Net/DiT 中通过 cross-attention 注入:

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V$$

其中 $Q$ 来自去噪特征,$K, V$ 来自条件编码器(如 CLIP text encoder)。

条件映射过程

$$Q = W_Q \cdot \phi(x_t), \quad K = W_K \cdot \tau_\theta(y), \quad V = W_V \cdot \tau_\theta(y)$$

典型应用

  • 文本条件:文本经 CLIP/LLM 编码为 token 序列
  • 图像条件:图像经 ViT 编码为 patch token 序列

优点:可处理变长条件,条件与主特征的交互是自适应的 缺点:计算量较大,尤其当条件 token 很多时

3. 自适应归一化(Adaptive Normalization)

最初在 StyleGAN 中流行,后被 DiT 推广到扩散模型中。核心思想是用条件信息预测归一化层的缩放和偏移参数

$$\text{AdaLN}(h, y) = \gamma(y) \cdot \frac{h - \mu}{\sigma} + \beta(y)$$

其中 $\gamma(y)$ 和 $\beta(y)$ 都是由条件 $y$ 经由一个小 MLP 回归得到的。

AdaLN-Zero 改进(DiT 默认方案):

在 DiT 中,条件还控制残差连接的缩放:

$$h_{out} = h + \alpha(y) \cdot \text{ModulatedFFN}(\text{AdaLN}(h, y))$$

其中 $\alpha(y)$ 初始化为 0,确保训练初期 DiT block 输出为 identity,稳定训练。

优点

  • 计算开销极小(只需 MLP 回归几个标量)
  • 不改变特征空间分辨率

缺点

  • 对复杂结构化条件(如多物体 bbox)的表征能力有限
  • 常需配合 cross-attention 使用

4. 控制网络(ControlNet / Control Module)

ControlNet 是当前可控生成最流行的方法。核心思想是冻结主模型,额外训练一个条件控制分支

  1. 冻结去噪骨干 U-Net/DiT 的所有参数
  2. 复制编码器的部分层作为控制分支
  3. 控制分支以条件 $y$(深度图、边缘图、分割图等)为输入
  4. 控制分支的输出通过 zero convolution 加到主模型的特征中

优势

  • 不破坏预训练模型的大规模知识
  • 支持多种条件类型(深度、法线、Canny、涂鸦等)
  • 每个条件只需训练一个轻量控制分支

在驾驶中的应用

  • ControlNet for Depth:用 LiDAR 深度图控制生成场景的 3D 几何
  • ControlNet for HDMap:用高精地图控制生成场景中的道路拓扑

四种方案对比

方案计算开销结构化条件变长条件条件类型灵活度代表应用
拼接SR3, Palette
交叉注意力Stable Diffusion, Sora
自适应归一化极低DiT, MagicDrive
ControlNet中(额外分支)极高ControlNet 系列

🚗 驾驶场景中的条件设计

条件类型全景

自动驾驶场景生成需要的条件远多于通用图像生成:

条件类型实例注入方式用途
HDMap车道线、路沿、红绿灯Cross-attention / ControlNet控制道路拓扑
3D Bbox车辆/行人的 3D 位置和朝向拼接 / BEV feature控制物体布局
自车轨迹过去和未来的自车位置Cross-attention / MLP控制自车运动
相机参数内外参矩阵Adaptive Norm多相机对齐
文本描述“夜间雨天下匝道”Cross-attention语义场景控制
天气/光照晴天/雨天/黄昏拼接 / Adaptive Norm环境条件控制
驾驶命令左转/右转/直行Embedding + Cross-attn行为控制
历史帧过去 N 帧图像拼接 / cross-attention时序上下文

命令与轨迹条件

驾驶场景中最重要的两个条件:

驾驶命令(Command)

  • 离散条件:左转、右转、直行、靠边停车
  • 注入方式:Embedding 层编码后,通过 cross-attention 或 adaptive norm 注入
  • 典型应用:GAIA-1 使用文本/命令条件控制自车行为

自车轨迹(Trajectory)

  • 连续条件:未来 N 个时刻的 (x, y, heading, speed)
  • 注入方式:MLP 编码为条件 token,经 cross-attention 注入
  • 关键挑战:轨迹与视频的时序对齐——轨迹中的每个时刻必须精确对应到视频帧

条件之间的冲突处理

当多个条件同时输入时(如 HDMap + 3D bbox + 文本),可能出现条件冲突——文本说"繁忙路口"但 bbox 只标了两辆车。常见处理策略:

  1. 条件融合:将不同条件编码到统一表征空间(BEV 空间)
  2. 条件 dropout:训练时随机丢弃某些条件,避免模型过度依赖某一条件
  3. 分层条件注入:先以 HDMap 条件为主生成道路,再以 3D bbox 条件为主放置物体

DriveDreamer 使用结构化条件融合:将 HDMap 渲染成 BEV 图像,3D bbox 投影到 BEV,两者叠加后作为统一的条件输入。


⚡ 截断扩散:减少步数实现实时推理

问题背景

标准扩散模型需要 50~1000 步去噪才能生成高质量结果,这对自动驾驶的实时推理是致命的。截断扩散(Truncated Diffusion)的目标是在不显著降低质量的前提下,大幅减少采样步数

DiffusionDrive:截断采样

DiffusionDrive 为自动驾驶轨迹生成设计的截断扩散方案:

核心思想:不需要从纯噪声 $x_T$ 开始去噪。相反,从一个比较靠前的时间步开始(如 $t=10$ 而不是 $t=1000$),只去噪少量几步即可。

$$x_{t_0} \sim \mathcal{N}(\sqrt{\bar{\alpha}_{t_0}} x_0, (1-\bar{\alpha}_{t_0})I), \quad t_0 \ll T$$

为什么在轨迹规划中可行

  • 轨迹的维度远低于图像(~10 个 waypoint × 2 坐标 = 20 维)
  • 轨迹数据的分布比自然图像简单得多
  • 轨迹的去噪过程只需少量步数就能收敛

FeaXDrive:特征空间截断

FeaXDrive 进一步将截断扩散扩展到特征空间:

核心洞察:直接在感知特征空间(BEV 特征)中做截断扩散,而非在轨迹空间。

$$z = E_{BEV}(x_t), \quad \text{Diffusion}(z, t) \rightarrow z' \rightarrow D_{traj}(z')$$

优势:

  • 特征空间比轨迹空间包含更丰富的交互信息
  • 感知模型无需为规划单独训练
  • 截断扩散 + 特征复用使得整个过程只需 2-4 步

截断扩散 vs 完整扩散在规划中的对比

维度完整扩散截断扩散
采样步数50~100 步2~10 步
推理时间50~200ms2~15ms
轨迹质量最高略低于完整(可接受)
多样性略低
实时能力✅(可到 30~50Hz)

🌊 Flow Matching:扩散的替代范式

从扩散到 Flow

Flow Matching(FM)是比扩散更通用的生成框架。它与扩散的核心区别在于:

维度扩散模型Flow Matching
路径固定的随机噪声调度可学习/可设计的任意路径
前向过程逐步加噪(SDE)插值从数据到噪声的直线路径(ODE)
训练目标预测噪声 $\epsilon$预测速度场 $v_\theta(x,t)$
采样方式去噪(数十~数百步)ODE 求解(数步即可
调度设计需要精心设计 $\beta_t$路径可任意设计

Flow Matching 在自动驾驶中的优势

  1. 更少的采样步数:直线路径意味着 ODE 求解可以用更大的步长,通常 4~10 步即可达到扩散 50 步的质量
  2. 更稳定的训练:不需要设计复杂的噪声调度,概率路径可任意选择(如最优传输路径)
  3. 天然支持截断:可以只学习从 $t=0$ 到 $t=0.5$ 的路径(相当于截断扩散)

代表工作

  • Flow-GRPO:用 Flow Matching 取代扩散头做轨迹生成,结合 GRPO 强化学习优化轨迹分布
  • GoalFlow:以目标为条件的 Flow Matching 规划器,直接学习从当前状态到目标状态的流
  • ReWorld:在世界模型的潜在空间中使用 Flow Matching 预测未来状态

CFG 在 Flow Matching 中的应用

Flow Matching 同样可以使用 CFG:

$$\tilde{v}_\theta(x_t, t, y) = v_\theta(x_t, t, \varnothing) + w \cdot (v_\theta(x_t, t, y) - v_\theta(x_t, t, \varnothing))$$

与扩散 CFG 完全一致的公式,但作用对象从噪声 $\epsilon$ 变为速度场 $v$。


💭 个人思考

条件扩散模型的工程落地比理论上复杂得多。两个关键观察:

  1. 条件越多,冲突越难解决。CFG 和 cross-attention 给出了"如何注入条件"的答案,但"多个条件冲突时谁优先"没有一般性解法。在驾驶场景中,文本说"繁忙"但 bbox 只标了两辆车——到底听谁的?这需要条件之间有显式的优先级或置信度机制,但当前方法几乎没有。

  2. CFG 的采样效率问题是最大瓶颈。CFG 需要两次前向传播(条件 + 无条件),这让本来就需要多步采样的扩散模型雪上加霜。Flow Matching + 单步 CFG(一次性预测条件和无条件的速度场)可能是未来方向。

  3. 截断扩散与 Flow Matching 实际上在解决同一个问题:用更少的步数做高质量生成。两者正在快速融合——最新的方法(如 Flow-GRPO)使用 Flow Matching 加极少的 ODE 步数(2-4 步)和 CFG 控制在 15ms 内完成轨迹生成,已经达到车端实时要求。