[{"content":"一个困惑 看端到端自动驾驶的论文时，你会发现同一个任务在不同的文章里用了完全不同的 Loss：\n任务 UniAD VADv2 DiffusionDrive 轨迹规划 L2 回归 + 碰撞 Loss KL 散度（分布匹配） 扩散去噪 Loss + 碰撞/边界/舒适 检测 Focal Loss Focal Loss — 占用预测 二值交叉熵 + Dice — — 这还不是最让人晕的——同一篇文章内部，Loss 也在\u0026quot;打架\u0026quot;：UniAD 的 Planner 用 L2 回归，但 MotionFormer 用 L1 回归；VADv2 的分布 Loss 对 4096 条轨迹做分类，而 SparseDrive 对锚点做分类 + 残差回归，而 DiffusionDrive 又完全不用任何分类或回归——它用一个扩散去噪 Loss 隐式地学分布。\n这些 Loss 背后遵循什么设计逻辑？为什么从 UniAD 到 VADv2 到 DiffusionDrive，Loss 设计的思路一直在变？\n答案其实很简单：Loss 的选择反映了你对\u0026quot;驾驶规划\u0026quot;这个问题的建模方式。你对问题的认知变了，Loss 就会变。这篇文章帮大家把每类 Loss 吃透。\n一、损失函数的本质 在端到端自动驾驶中，损失函数的核心作用是把\u0026quot;什么样的驾驶是好的\u0026quot;这个模糊目标，翻译成神经网络能理解的数学信号。\n用个比方：你教一个刚拿驾照的新手开车。\n你（教练）说： \u0026#34;刚才那个弯转得太急了，下次慢一点\u0026#34; ← 这是语言反馈 神经网络的 Loss 做的是类似的事： L2回归 → \u0026#34;你的轨迹和我的轨迹差了2.3米，扣分\u0026#34; 碰撞 Loss → \u0026#34;你刚才离路沿只有10厘米了，扣分\u0026#34; Focal Loss → \u0026#34;你第三次没认出停止标志了，扣大分\u0026#34; 每种 Loss 都在告诉模型\u0026quot;你哪里做得不够好\u0026quot;。但\u0026quot;不够好\u0026quot;的定义不同，Loss 的数学形式就不同。\n二、Loss 是怎么让模型\u0026quot;学会\u0026quot;的？——梯度与反向传播 讲具体 Loss 之前，先搞明白一个更基础的问题：计算了 Loss 之后，模型到底是怎么更新参数的？\n很多同学看论文只看 Loss 公式，然后跳过训练过程，结果对\u0026quot;为什么 Loss 长这样\u0026quot;一知半解。这一节用最白话的方式讲清楚。\n2.1 先理解这个核心公式 整个深度学习的训练过程，可以用一句话概括：\n新参数 = 旧参数 − 学习率 × 梯度 或者写成公式：\n\\[ \\theta_{new} = \\theta_{old} - \\eta \\cdot \\frac{\\partial \\mathcal{L}}{\\partial \\theta} \\]逐词翻译：\n符号 含义 大白话 \\(\\theta\\) 模型的参数 就是神经网络里所有的权重 W 和偏置 b \\(\\mathcal{L}\\) Loss 值 模型预测得有多差 \\(\\partial \\mathcal{L} / \\partial \\theta\\) 梯度 参数变化一点点，Loss 会变多少 \\(\\eta\\) 学习率 每次更新的步长 2.2 梯度是什么？一个例子就懂 假设你只有一个参数 w，Loss 是 w 的函数：ℒ = w²。\nw = 3 时：ℒ = 9，梯度 = ∂ℒ/∂w = 2w = 6 解读：w 增加一点点（比如 0.1），Loss 会增加 6 × 0.1 = 0.6 → Loss 在 w=3 处\u0026#34;往上走\u0026#34;，需要往反方向走 → w 应该减小 w = -2 时：ℒ = 4，梯度 = 2w = -4 解读：w 增加一点点，Loss 会减少 4 × 0.1 = 0.4 → Loss 在 w=-2 处\u0026#34;往下走\u0026#34;，继续往这个方向走 → w 应该增加 梯度的方向 = Loss 上升最快的方向。所以参数更新时，我们要沿着梯度的反方向走——这就是\u0026quot;梯度下降\u0026quot;名字的由来。\n梯度 \u0026gt; 0 → Loss 随参数增大而增大 → 参数应该减小 梯度 \u0026lt; 0 → Loss 随参数增大而减小 → 参数应该增大 2.3 链式法则：为什么叫\u0026quot;反向传播\u0026quot;？ 神经网络有很多层，Loss 在最末端，参数在最前面。怎么把 Loss 信号传回前面的层？\n答案是链式法则。\n假设一个 3 层的玩具网络：\n输入 x → 层1 (W₁) → h₁ → 层2 (W₂) → h₂ → 层3 (W₃) → ŷ → Loss 我们要算 Loss 对 W₁ 的梯度。W₁ 在最前面，Loss 在最后面，中间隔了：\nW₁ → h₁ → h₂ → ŷ → Loss 链式法则说：\n\\[ \\frac{\\partial \\mathcal{L}}{\\partial W_1} = \\frac{\\partial \\mathcal{L}}{\\partial \\hat{y}} \\times \\frac{\\partial \\hat{y}}{\\partial h_2} \\times \\frac{\\partial h_2}{\\partial h_1} \\times \\frac{\\partial h_1}{\\partial W_1} \\]逐层相乘，从后往前传。\n前向传播（蓝色）→： x → h₁ → h₂ → ŷ → Loss （逐层计算） 反向传播（红色）←： ∂ℒ/∂ŷ → ∂ℒ/∂h₂ → ∂ℒ/∂h₁ → ∂ℒ/∂W₁ （从后往前乘回去） 这就是\u0026quot;反向传播\u0026quot;名字的来源——梯度信号从 Loss 出发，沿着网络的反方向逐层传回去。\n2.4 一个完整的训练步骤（Step-by-Step） 假设 UniAD 的 Planner 输出了一条轨迹 ŷ，GT 轨迹是 y。\n第 1 步：前向传播（Forward） → 图像进 BEVFormer → 输出 BEV 特征 B → B 进 TrackFormer → 输出 agent query Q_A → Q_A 进 MotionFormer → 输出 motion feature → motion + B 进 Planner → 输出轨迹 ŷ 第 2 步：算 Loss ℒ_plan = (ŷ₁ - y₁)² + (ŷ₂ - y₂)² + ... + (ŷ₁₂ - y₁₂)² 得到：ℒ = 2.34（一个具体的 Loss 值） 第 3 步：反向传播（Backward） ∂ℒ/∂W_planner = ? ← Planner 参数的梯度 ∂ℒ/∂W_motion = ? ← MotionFormer 参数的梯度 ∂ℒ/∂W_track = ? ← TrackFormer 参数的梯度 ∂ℒ/∂W_backbone = ? ← BEVFormer 参数的梯度 这些梯度通过链式法则逐层算出来。 注意：UniAD 是端到端的，规划 Loss 的梯度可以一路回传到 backbone！ 第 4 步：更新参数 W_planner_new = W_planner - 0.001 × ∂ℒ/∂W_planner W_motion_new = W_motion - 0.001 × ∂ℒ/∂W_motion ... 所有参数都按这个公式更新 第 5 步：下一轮 用新的参数再跑一次前向传播 → 算 Loss → 反向传播 → 更新 重复几千几万次 → Loss 逐渐下降 → 模型越开越好 2.5 为什么 Loss 的数学形式这么重要？ 回到 Loss 设计——现在你应该能理解为什么 Loss 的数学形式直接决定了训练效果：\nL2 Loss 的梯度：∂ℒ₂/∂ŷ = 2(ŷ - y) 误差越大，梯度越大 → 大误差样本被优先修正 问题：异常值主导训练 L1 Loss 的梯度：∂ℒ₁/∂ŷ = sign(ŷ - y) 误差不管多大，梯度都是 ±1 → 大误差不会崩 问题：小误差处梯度不变，收敛慢 Smooth L1 的梯度： |ŷ-y| \u0026lt; 1 时：梯度 = ŷ - y（像 L2，小误差平滑收敛） |ŷ-y| ≥ 1 时：梯度 = ±1（像 L1，大误差鲁棒） 不同 Loss 的梯度行为不同，这才是选择 Loss 时真正要考虑的——不是哪个 Loss 分数高，而是哪个 Loss 的梯度行为符合你的任务需求。\n2.6 学习率 η 怎么定？ 学习率是训练中最关键的超参数之一。\nη 太大（比如 0.1）： θ_new = θ_old − 0.1 × 梯度 步子太大 → 在 Loss 最低点附近来回震荡，永远不收敛 η 太小（比如 0.00001）： θ_new = θ_old − 0.00001 × 梯度 步子太小 → 要跑几百万步才能到最低点，训练极慢 η 适中（比如 0.001）： 刚好每一步都稳定下降 → 又快又好地收敛 实际训练中学习率通常是动态的——学习率衰减（learning rate decay）：前几步大（快速接近最优），后面小（精调不震荡）。\n2.7 实际训练中常见的\u0026quot;翻车\u0026quot;场景 场景 1：Loss 完全不下降 原因：学习率太小 / 梯度消失 / 参数初始化不对 解决：调大学习率 / 检查激活函数（别用 sigmoid 在深层） / 用 Xavier/Glorot 初始化 场景 2：Loss 先下降然后突然变 NaN 原因：梯度爆炸 → 参数一下变得极大 → NaN 解决：梯度裁剪（gradient clipping）→ 限制梯度最大值 UniAD 等所有端到端方法都会做梯度裁剪 场景 3：Loss 下降但验证集不降 原因：过拟合 解决：加正则化（weight decay）/ dropout / 数据增强 场景 4：Loss 震荡不降 原因：学习率太大 / batch size 太小 解决：调小学习率 / 增大 batch size 2.8 这就够了：训练的核心流程 while 没收敛: 1. 取一批数据（图像 + GT 轨迹） 2. 前向传播 → 模型输出预测轨迹 ŷ 3. 算 Loss：ℒ = f(ŷ, y) ← Loss 函数在起作用 4. 反向传播：∂ℒ/∂θ ← 链式法则 ← 算出每个参数的梯度 5. 更新：θ = θ - η × ∂ℒ/∂θ ← 参数沿着梯度反方向走一步 6. 如果 Loss 降不下去了 → 收敛 这个流程对 L1、L2、Focal、KL、扩散、碰撞 Loss——对所有 Loss 都完全一样。区别只在第 3 步的 f(ŷ, y) 不同，导致第 4 步的梯度不同，进而导致第 5 步的参数更新方向不同。\n这就是为什么 Loss 设计如此重要：它决定了参数更新的方向，而参数更新的方向决定了模型能学到什么。\n三、回归损失：找\u0026quot;最优答案\u0026quot; 回归损失是最直观的 Loss——给你一个场景，你认为有一条\u0026quot;正确答案\u0026quot;轨迹，让模型的预测尽量靠近它。\n2.1 L1 Loss / MAE（平均绝对误差） \\[ \\mathcal{L}_1 = \\frac{1}{N} \\sum_{i=1}^N |y_i - \\hat{y}_i| \\]直觉理解：你和正确答案的距离，绝对差值。预测偏了 1 米，扣 1 分；偏了 3 米，扣 3 分。扣分和偏差成线性关系。\n梯度特点：梯度始终是 ±1。误差 0.1 米和误差 10 米，梯度大小一样——不会因为某个样本误差特别大就疯狂更新参数。\n谁在用：UniAD 的 MotionFormer（轨迹预测）、MapFormer（地图点回归）、SparseDrive（锚点残差回归）\n举个例子：UniAD 的 MotionFormer 预测每个智能体未来 3 秒的轨迹。3 秒后的位置本来就很难准确预测，即使同一场景让两个人来标，他们标的轨迹也会有差异——因为未来是不确定的。用 L1 的好处是：即使某个时间点的预测误差很大，它也不会主导整个梯度更新。L1 对\u0026quot;不确定的未来\u0026quot;很宽容。\n2.2 L2 Loss / MSE（均方误差） \\[ \\mathcal{L}_2 = \\frac{1}{N} \\sum_{i=1}^N (y_i - \\hat{y}_i)^2 \\]直觉理解：偏 1 米扣 1 分，偏 3 米扣 9 分。误差越大的样本，惩罚力度呈平方级增长。\n梯度特点：梯度 = 2 × (y−ŷ)。误差越大，梯度越大——模型会优先\u0026quot;修正\u0026quot;那些大误差样本。\n谁在用：UniAD Planner（规划轨迹回归）、Diffusion Planner（扩散去噪）、ST-P3（端到端规划）\nL1 vs L2 的一个经典例子——UniAD 内部的\u0026quot;分裂\u0026quot;：\nUniAD 的 MotionFormer（运动预测）→ 用 L1 原因：预测其他车辆的轨迹，3秒后的位置不确定性大 效果：即使预测错了，也不会因为一个样本就崩掉整个训练 UniAD 的 Planner（规划）→ 用 L2 原因：自车轨迹是执行信号，需要精确控制 效果：偏差稍大就受到强烈惩罚，迫使模型输出高精度轨迹 同一个模型、同一个作者，却在两个相邻的模块里用了不同的回归 Loss。这不是失误，是任务目标不同导致的有意识设计。\n2.3 Smooth L1 ℒ_smooth = 0.5 × x² 当 |x| \u0026lt; 1 （小误差：像 L2 一样平滑收敛） ℒ_smooth = |x| - 0.5 当 |x| ≥ 1 （大误差：像 L1 一样对异常值鲁棒） 直觉理解：误差小的时候用 L2（平滑），误差大的时候切到 L1（不被异常值带偏）。这是\u0026quot;既要又要\u0026quot;的聪明折中。\n谁在用：Faster R-CNN（框回归）、Sparse4D、几乎所有现代 3D 检测器\n为什么检测器爱用 Smooth L1？ 因为框的标注有系统误差——两个标注员标的 3D 框可能差几厘米，L2 会把这种标注噪声放大，L1 在大误差处梯度不够平滑。Smooth L1 综合了两者优点。\n2.4 三张 Loss 的对比图 图示解读：\nL1（蓝线）：V 形折线，底部尖锐，两侧斜率为 ±1。梯度处处一样大。 L2（红线）：抛物线，底部平坦、越往外越陡。误差越大，梯度越大。 Smooth L1（绿线）：底部像 L2（圆滑），两侧像 L1（直线）。兼顾两者优点。 2.5 怎么选？ 场景 推荐 Loss 原因 训练数据干净，需要快速收敛 L2 / MSE 大误差梯度大，收敛快 数据有离群值 / 标注噪声 L1 对异常值不敏感 框回归（检测） Smooth L1 兼顾小误差平滑 + 大误差鲁棒 轨迹回归（规划） L1 为主 轨迹标注本身噪声大 四、分类损失：选\u0026quot;哪个答案\u0026quot; 4.1 交叉熵 \\[ \\mathcal{L}_{CE} = -\\sum_{c=1}^C y_c \\log(\\hat{y}_c) \\]直觉理解：模型给正确答案的概率越高，Loss 越低。如果正确答案的概率是 0.9，Loss 很小；如果是 0.1，Loss 很大。\n一个直观的例子：假设你要模型判断交通灯——红/黄/绿。正确答案是\u0026quot;红\u0026quot;。\n情况A：模型输出 [红:0.9, 黄:0.05, 绿:0.05] → 交叉熵 = -log(0.9) ≈ 0.1 ← Loss 低 情况B：模型输出 [红:0.3, 黄:0.3, 绿:0.4] → 交叉熵 = -log(0.3) ≈ 1.2 ← Loss 高 情况C：模型输出 [红:0.01, 黄:0.01, 绿:0.98] → 交叉熵 = -log(0.01) ≈ 4.6 ← Loss 极高 谁在用：几乎所有分类任务——目标检测类别、交通灯状态、驾驶意图\n4.2 Focal Loss \\[ \\mathcal{L}_{focal} = -\\alpha (1 - \\hat{y}_c)^\\gamma \\log(\\hat{y}_c) \\]和交叉熵的唯一区别：加了一个调制因子 \\((1 - \\hat{y}_c)^\\gamma\\)。\n直觉理解：自动驾驶的目标检测有一个棘手的问题——正负样本极度不平衡。一张图像里有几十万个锚点/像素，但其中只有几个是真正的车/人。99.99% 都是背景。如果用普通交叉熵，模型会学会\u0026quot;把全部检测为背景，Loss 就很低\u0026quot;——因为 99.99% 的样本都对了。\nFocal Loss 的解法：模型已经分得很好的样本（比如背景概率 0.999），权重被大幅压低；分类错误的难样本（比如车被分类成背景），权重保持不变。\nFocal Loss 的两个参数： γ（聚焦参数）：γ=0 → 退化为标准交叉熵；γ=2 → 常用值，效果显著 α（平衡参数）：正样本权重，处理正负样本数量差异 举个例子（γ=2）： 模型对某个背景预测 0.999：调制因子 = (1-0.999)² = 0.000001，几乎忽略 模型对某辆车预测 0.6：调制因子 = (1-0.6)² = 0.16，保留大部分梯度 谁在用：UniAD（检测 + 地图）、VAD（检测 + 地图）、SparseDrive（检测 + 地图）、几乎所有自动驾驶检测头\n论文原文: \u0026ldquo;Our novel Focal Loss focuses training on a sparse set of hard examples and prevents the vast number of easy negatives from overwhelming the detector during training.\u0026rdquo; (Lin et al., ICCV 2017)\n3.3 BCE 二值交叉熵 \\[ \\mathcal{L}_{BCE} = -y \\log(\\sigma(s)) - (1-y) \\log(1-\\sigma(s)) \\]直觉理解：BCE 和普通交叉熵的区别在于——不用 softmax 做归一化，每个类别独立用 sigmoid 判断\u0026quot;是还是不是\u0026quot;。\n关键区别：\nsoftmax（多分类 CE）： 输出 [0.9, 0.05, 0.05] → 概率和为 1 \u0026#34;三个类别中我选第一个\u0026#34; sigmoid（多标签 BCE）： 输出 [0.9, 0.8, 0.1] → 各维度独立 \u0026#34;第一个很可能，第二个也可能，第三个不可能\u0026#34; 谁在用：\nVADv2 规划词表——4096 条轨迹各自独立打分，多个合理动作可以同时高概率 OccFormer 占用预测——BEV 中每个格子独立判断\u0026quot;是否被占用\u0026quot; DiffusionDriveV2 两阶段选择器中的粗筛——对每条轨迹做\u0026quot;是否可通行\u0026quot;二分类 4.4 交叉熵 vs Focal Loss vs BCE 总结 损失 适用场景 特点 交叉熵 多分类（N选1） 标准分类 Loss Focal Loss 类别极度不平衡 压住易分样本，聚焦难样本 BCE 多标签分类（可同时选多个） 各维度独立，互不排斥 五、分布损失：学\u0026quot;正确答案的分布\u0026quot; 分类损失要求动作之间互斥，回归损失在非凸空间会取平均。当这两种 Loss 都面临根本缺陷时——分布损失出现了。\n4.1 为什么需要分布损失？ 先看三个 Loss 面对同一个问题时的表现差异：\n场景：自车在路口，前方有对向来车 合理动作：减速让行（概率 0.6），加速抢道（概率 0.3），急刹（概率 0.1） 回归 Loss： 模型学\u0026#34;正确答案\u0026#34; → 取所有合理轨迹的平均 → 输出一条\u0026#34;半减速半加速\u0026#34;的危险轨迹 这就像让你回答\u0026#34;3和7的平均是什么\u0026#34;——答案是5，但5根本不在选项里 分类 Loss（softmax）： 强制概率和为 1 → 加速和让行的概率互相挤压 但问题在于：两条都是合理轨迹，概率不应该互相排斥 BCE + sigmoid： 每条轨迹独立打分 → 加速0.6、让行0.3、急刹0.1 这才是\u0026#34;多模态\u0026#34;的正确建模方式 这就是 VADv2 采用 BCE + sigmoid 而不是 softmax 的根本原因。\n5.2 KL 散度 \\[ D_{KL}(P \\parallel Q) = \\sum_x P(x) \\log \\frac{P(x)}{Q(x)} \\]直觉理解：KL 散度衡量两个分布的距离——你预测的分布 Q 和真实分布 P 有多像。\nVADv2 怎么算数据分布 P_data？\nVADv2 的数据分布统计方法： 1. 对训练集中每一帧数据，从规划词表中找到与人类轨迹最匹配的词条 2. 该词条标记为\u0026#34;最佳匹配\u0026#34; 3. 统计所有帧中每个词条成为最佳匹配的频次 4. 归一化 → p_data(a)：每条轨迹被人类选择的概率 然后让模型的预测分布 p_pred(a) 尽量接近 p_data(a)： ℒ_distribution = D_KL(p_data || p_pred) = -∑ p_data(a) · log p_pred(a) + 常数 （常数是 p_data 的熵，训练中不变，所以等价于最小化交叉熵） 谁在用：VADv2（规划分布）、知识蒸馏（教师分布 → 学生分布）\n5.3 扩散 Loss \\[ \\mathcal{L}_{simple} = \\mathbb{E}_{t, x_0, \\epsilon} \\left[ \\|\\epsilon - \\epsilon_\\theta(x_t, t)\\|^2 \\right] \\]扩散模型的特殊之处：它的 Loss 既不是回归也不是分类——它预测的是\u0026quot;当前噪声图像里的噪声是什么\u0026quot;，而不是\u0026quot;正确答案在哪\u0026quot;。\n直觉理解：\n训练过程： 1. 拿一条真实轨迹 x₀ 2. 加噪声到时间 t，得到 x_t 3. 告诉模型：\u0026#34;现在给你 x_t 和时间 t，请猜我加的是什么噪声\u0026#34; 4. Loss = 预测的噪声和实际加的噪声之间的 MSE 5. 模型本质上学会了：给定一个\u0026#34;损坏版本\u0026#34;，如何一步步恢复原样 推理过程： 1. 从纯噪声 x_T 开始 2. 用模型预测当前步该去多少噪声 3. 去掉一点噪声 → x_{T-1} 4. 重复直到 x₀（干净轨迹） 关键 Insight：扩散 Loss 隐式地建模了整个数据分布，而不只是\u0026quot;一个正确答案\u0026quot;。因为模型学会的不是\u0026quot;场景→输出\u0026quot;的映射，而是\u0026quot;噪声→数据\u0026quot;的去噪过程。在这个过程中，多样的训练数据使模型学会了多样的轨迹分布。\n谁在用：\nDiffusionDrive — 锚定截断扩散 + 安全 Loss 组合 Diffusion Planner — 联合预测-规划扩散 Gen-Drive — 扩散生成未来场景 + RL 微调 5.4 Flow Matching Loss \\[ \\mathcal{L}_{FM} = \\mathbb{E}_{t, x_0, x_1} \\left[ \\|v_\\theta(x_t, t) - (x_1 - x_0)\\|^2 \\right] \\]和扩散 Loss 的区别：\n扩散：走一条弯曲的随机路径从噪声到数据（SDE） Flow Matching：走一条从噪声到数据的直线路径（ODE） 扩散路径 → 步数多（50-1000步），质量高 FM 路径 → 步数少（2-10步），速度快 谁在用：π0（机器人 VLA）、GoalFlow（自动驾驶规划）\n5.5 分布损失总结 方法 Loss 本质 步数 谁在用 VADv2 KL 散度（分布匹配） 离散词表分类 1步 VADv2 扩散 噪声预测 MSE 连续去噪 10-1000步 DiffusionDrive Flow Matching 矢量场预测 直线去噪 1-10步 π0, GoalFlow 六、安全约束 Loss：让模型学会\u0026quot;绝对不能做什么\u0026quot; 这是端到端自动驾驶最有特色的 Loss 类别——纯模仿学习不管安全。\n5.1 碰撞 Loss（UniAD） \\[ \\mathcal{L}_{collision} = \\sum_t \\max(0, \\text{dist}(\\tau_t, O_t) - \\text{margin}) \\]直觉理解：模型产出一条规划轨迹 τ，把它和 OccFormer 预测的未来占用 O_t 对比。如果轨迹太靠近占用区域（小于安全距离 margin），就被惩罚。\n为什么需要 margin？ 你不需要轨迹离障碍物无限远——那会开成\u0026quot;老奶奶开车\u0026quot;，安全但没法走。margin = 0.5 米意味着只要轨迹和障碍物保持 0.5 米以上就不扣分，只有小于 0.5 米才被惩罚。\nUniAD 消融实验：只有加上了碰撞 Loss，3 秒碰撞率才从 1.58 降到 1.39（降 12%）。再加占用优化，降到 1.05（降 36%）。\n6.2 冲突 Loss（VADv2） \\[ \\mathcal{L}_{conflict} = \\sum_{a \\in V} \\mathbb{1}_{\\text{conflict}}(a) \\cdot \\log p_{\\text{pred}}(a) \\]直觉理解：VADv2 对规划词表里的 4096 条轨迹做两件事：\n统计每条轨迹被人类选的频率 → 分布 Loss 判断每条轨迹是否碰撞/偏离道路 → 冲突 Loss 冲突的轨迹被标记为正样本，Log Loss 让它们的概率被压低。\n谁在用：VADv2、Hydra-MDP\n6.3 DiffusionDrive 的安全 Loss 组合 ℒ_total = ℒ_diff ← 学得像人类（扩散 Loss） + λ_collision ℒ_collision ← 别撞上 + λ_boundary ℒ_boundary ← 别出车道 + λ_comfort ℒ_comfort ← 别急刹急转（jerk 约束） 工程经验：不能只靠扩散 Loss。纯生成目标只关心\u0026quot;分布像不像数据\u0026quot;，但驾驶是安全攸关任务。必须把碰撞、合规等硬约束作为辅助 Loss 显式注入。\n6.4 碰撞 Loss 的演进 论文 安全 Loss 方式 特点 UniAD 碰撞 Loss + 占用优化 可微 Loss 用 OccFormer 的占用预测做碰撞检查 VAD 向量化规划约束 可微几何约束 把矢量地图变成可微的\u0026quot;安全距离场\u0026quot; VADv2 冲突 Loss 词表负采样 对词表中冲突轨迹压低概率 DiffusionDrive 碰撞 + 边界 + 舒适 多 Loss 加权 扩散 Loss 做生成 + 三个安全约束 七、多任务 Loss 平衡 7.1 问题：Loss 在打架 端到端模型有 5+ 个 Loss 同时优化。它们天然会打架：\nUniAD 的 Loss 构成： ℒ = ℒ_track + ℒ_map + ℒ_motion + ℒ_occ + ℒ_plan 每个 Loss 的典型量级： ℒ_plan（L2 回归）：≈ 1.0 量级 ℒ_track（Focal + L1）：分类 ≈ 0.01，回归 ≈ 0.1 ℒ_occ（BCE + Dice）：≈ 0.5 如果直接相加 → ℒ_plan 的梯度把 ℒ_track 的梯度淹没了 模型学到的全是规划，感知部分几乎不更新 7.2 解决方式 1：手动加权（最简单） 给每个 Loss 手动配权重：\n\\[ \\mathcal{L} = \\lambda_1 \\mathcal{L}_{track} + \\lambda_2 \\mathcal{L}_{map} + \\lambda_3 \\mathcal{L}_{motion} + \\lambda_4 \\mathcal{L}_{occ} + \\lambda_5 \\mathcal{L}_{plan} \\]UniAD 就这么干的。缺点是需要反复试，每个权重都是超参数。\n7.3 解决方式 2：不确定性加权（最常用） \\[ \\mathcal{L} = \\sum_i \\frac{1}{2\\sigma_i^2} \\mathcal{L}_i + \\log \\sigma_i \\]每个任务有一个可学习的 \\(\\sigma_i\\)。任务噪声大 → 权重自动低；任务噪声小 → 权重自动高。\n直觉理解：模型的 Loss 自动学会\u0026quot;什么时候该相信哪个任务\u0026quot;。如果跟踪模块当前不确定性高，跟踪 Loss 的权重自动降低，不让它干扰其他任务。\n谁在用：多任务分割、Multi-Task Learning Using Uncertainty to Weigh Losses (Kendall et al., 2018) 系列方法\n7.4 解决方式 3：两阶段训练（最可靠） 阶段一：各模块分别预训练 1. 训练 BEVFormer（骨干） 2. 训练 TrackFormer + MapFormer（感知） 3. 固定感知，训练 MotionFormer（预测） 4. 固定 MotionFormer，训练 OccFormer（占用） 5. 固定所有上游，训练 Planner（规划） 阶段二：端到端联合微调 1. 打开所有梯度 2. 规划 Loss 的梯度回传至感知 3. 各模块在规划目标下做精调 关键经验：直接从头端到端训练一定崩。梯度尺度差异大一两个量级。先让每个模块各自学个差不多，再联合微调。\n谁在用：UniAD（经典两阶段）、SparseDrive（逐步端到端）、几乎所有多模块融合的端到端方法\n八、强化学习 Loss：从\u0026quot;模仿\u0026quot;到\u0026quot;探索\u0026quot; 监督学习的学生永远只能学到老师做过的。RL 让模型自己探索\u0026quot;怎么做更好\u0026quot;。\n7.1 PPO-Clip（Proximal Policy Optimization） \\[ \\mathcal{L}_{PPO} = -\\mathbb{E} \\left[ \\min\\left( \\frac{\\pi_\\theta(a|s)}{\\pi_{\\theta_{old}}(a|s)} A, \\text{clip}\\left( \\frac{\\pi_\\theta(a|s)}{\\pi_{\\theta_{old}}(a|s)}, 1-\\epsilon, 1+\\epsilon \\right) A \\right) \\right] \\]用大白话翻译：\n1. 旧策略在场景 s 下选了动作 a，获得了\u0026#34;相对优势\u0026#34;A （A \u0026gt; 0 表示这个动作比平均水平好，A \u0026lt; 0 表示比平均水平差） 2. 新策略现在要更新自己 - 对好动作（A \u0026gt; 0）：提高选这个动作的概率 - 对坏动作（A \u0026lt; 0）：降低选这个动作的概率 3. 但不准一次改太多 - clip(ratio, 1-ε, 1+ε)：新旧策略的比率不能超过 1±ε - 这就像\u0026#34;每次只迈一小步\u0026#34;，保证训练的稳定性 谁在用：多智能体交互策略、传统 RL 驾驶\n7.2 GRPO（Group Relative Policy Optimization） GRPO 是 PPO 在端到端自动驾驶中的\u0026quot;特化版本\u0026quot;。\nPPO 的痛点：需要训练一个价值网络（critic）来估计\u0026quot;这个状态有多好\u0026quot;。价值网络和策略网络一起训，不稳定且显存翻倍。\nGRPO 的解法：不要价值网络了。模型自己生成一组候选轨迹，在这组内部算相对优势。\nGRPO 的组内优势计算： 场景 → 模型生成 8 条候选轨迹 → 每条打分 候选 A：85 分 候选 B：92 分 候选 C：60 分 ... 平均分：78 分，标准差：12 A 的优势 = (85 - 78) / 12 = +0.58 （比平均好） B 的优势 = (92 - 78) / 12 = +1.17 （明显好） C 的优势 = (60 - 78) / 12 = -1.50 （明显差） 为什么 GRPO 在自动驾驶里尤其流行？因为端到端自动驾驶天然产出一组候选轨迹——你不需要额外采样，模型的前向传播本身就在产出多条候选。组内比较比绝对评分更稳、更简单。\n谁在用：\nAlphaDrive-GRPO — 元动作分类 + GRPO 精调 AutoVLA — 连续轨迹 + GRPO 后训练 DiffusionDriveV2 — 截断扩散 + 锚内 GRPO Flow-GRPO — Flow Matching + GRPO 7.3 DiffusionDriveV2 的截断 GRPO（一个具体例子） DiffusionDriveV2 把扩散和 GRPO 做了个聪明的结合：\n1. 截断扩散： - 正常扩散去噪要 100 步 - 截断扩散只保留最后 2 步的梯度 - 前面 98 步完全忽略梯度 2. 为何能截断？ - 扩散的前期去噪是全体的、粗粒度的 - 后期去噪是局部的、精调的 - RL 的目标是\u0026#34;精调轨迹质量\u0026#34;，所以只对最后几步做 RL 3. 锚内比较： - 直行锚的候选和直行锚的候选比 - 转弯锚的候选和转弯锚的候选比 - 不同锚之间不直接比较——直行和转弯没有优劣之分 7.4 RL Loss 总结 Loss 需要价值网络？ 计算量 谁在用 PPO ✅ 是 高 传统 RL 驾驶 GRPO ❌ 否 中 AlphaDrive, AutoVLA, Flow-GRPO REINFORCE ❌ 否 低 策略梯度基础方法 截断 GRPO ❌ 否 低 DiffusionDriveV2 九、排序 / 对比 Loss 8.1 Margin-Rank Loss \\[ \\mathcal{L}_{rank} = \\sum_{i,j} \\max(0, -(\\hat{s}_i - \\hat{s}_j) + m) \\]直觉理解：好轨迹的分数要比坏轨迹高至少 m 分。只关注\u0026quot;相对排序\u0026quot;而不关心绝对分数。\n谁在用：DiffusionDriveV2 的两阶段选择器——先用 BCE 粗筛，再用 Margin-Rank 精排。\n和 MSE / 交叉熵的区别：\nMSE：让预测分数 = 真实分数 0.95（精确拟合） Margin-Rank：让好轨迹分数 \u0026gt; 坏轨迹分数 + m（只关心排序） 交叉熵：正确答案概率高，其他低（硬分类） 8.2 对比 Loss \\[ \\mathcal{L}_{contrast} = -\\log \\frac{\\exp(\\text{sim}(q, k_+) / \\tau)}{\\sum \\exp(\\text{sim}(q, k_i) / \\tau)} \\]直觉理解：把相似的东西拉近，把不同的推远。\n谁在用：\nJEPA-DRIVE（自监督表征学习） VLA-World（跨模态对齐） ReWorld（世界模型表征学习） 十、全景总结 演进路线：Loss 设计的\u0026quot;三代\u0026quot; 第一代：确定论 Loss：L1 / L2 / Smooth L1 哲学：\u0026#34;每条轨迹有唯一正确答案\u0026#34; 局限：多模态场景下输出\u0026#34;平均\u0026#34; 代表：ST-P3、TCP 第二代：分布论 Loss：交叉熵 / Focal / BCE / KL / 扩散 哲学：\u0026#34;动作空间有分布，不应只取一点\u0026#34; 局限：安全只能软约束 代表：VADv2、DiffusionDrive 第三代：策论 Loss：PPO / GRPO / Rank 哲学：\u0026#34;让它自己探索更好\u0026#34; 局限：奖励设计难、训练不稳定 代表：AlphaDrive、DiffusionDriveV2 十条设计原则 回归适合精确控制，不适合多模态 — 轨迹回归用 L1，框回归用 Smooth L1 分类解决多模态，但受限于词表覆盖 — Focal Loss 解决正负样本不平衡 分布匹配是\u0026quot;不丢信息\u0026quot;的回归替代方案 — KL 散度允许分布呈任意形状 扩散 Loss 同时做生成 + 分布建模 — 简单 Loss 即可学复杂分布 安全约束不能靠学，要硬编码进 Loss — collision / conflict loss 是必需的 多任务 Loss 需要显式平衡 — 两阶段训练是最可靠的工程经验 RL Loss 让模型超越人类 — GRPO 是当前端到端规划的主流选择 不同 Loss 服务于不同的优化目标 — 理解目标比理解公式更重要 没有万能 Loss — 每个 Loss 都是对驾驶某个维度的建模 Loss 进化的方向：从\u0026quot;找答案\u0026quot;到\u0026quot;学分布\u0026quot;再到\u0026quot;定策略\u0026quot; 十一、各论文 Loss 配置速查表 论文 检测 建图 运动预测 占用预测 规划 UniAD Focal + L1 Focal + L1 L1 + Focal BCE + Dice L2 + 碰撞 Loss VAD Focal + L1 Focal + L1 L1 + 终点 Loss — L1 + 向量约束 ×3 VADv2 Focal + L1 Focal + L1 — — KL + Conflict + Token SparseDrive Focal + L1 Focal + L1 L1 + 分类 — 锚点分类 + 残差 L1 DiffusionDrive — — — — 扩散 + 碰撞 + 边界 + 舒适 DiffusionDriverV2 — — — — 扩散 + 碰撞 + RL(GRPO) SparseDriveV2 Focal + L1 Focal + L1 L1 + 分类 — 锚分类 + 残差 L1 + 碰撞 AlphaDrive — — — — SFT(CE) + GRPO 十二、写在最后 端到端自动驾驶是一个多目标优化问题——要像人（模仿）、要安全（碰撞）、要舒适（jerk）、要合法（车道）、还要能处理不确定性（多模态）。每个目标都是一个 Loss，每个 Loss 都有适合它的数学形式。\n一个好的 Loss 设计，不是在选\u0026quot;哪个 Loss 最好\u0026quot;，而是在搞清楚这个 Loss 让模型把注意力放在哪里——是让模型\u0026quot;猜得准\u0026quot;（L2），还是\u0026quot;选得对\u0026quot;（分类），还是\u0026quot;不犯错\u0026quot;（碰撞 Loss），还是\u0026quot;敢于尝试\u0026quot;（GRPO）。\n这篇文章覆盖了所有主流 Loss，但实际中你可能还需要根据具体场景做组合和改动。如果有特定的 Loss 或论文配置想了解，欢迎继续问。\n","permalink":"https://auto-driving-blog.pages.dev/posts/loss-function-guide/","summary":"读论文时被各种 Loss 搞晕了？L1、L2、Focal、KL 散度、碰撞 Loss、GRPO……为什么同一个任务在不同文章里用的 Loss 不一样？这篇文章帮你把端到端自动驾驶里的所有损失函数理清楚——每种 Loss 的数学形式、直觉理解、适用场景，以及它们之间的演进关系。","title":"损失函数完全指南：从 L1 到 GRPO——端到端自动驾驶中的 Loss 设计哲学"},{"content":"一个很自然的困惑 前几天有个读者问我一个问题：\n\u0026ldquo;VLA 模型（比如 Qwen3-VL）不是有视觉编码器（ViT）吗，它能理解图像内容，那为什么自动驾驶系统还需要感知模块（3D检测、BEV感知、占用网络）？VLM 自己看图像不就能知道环境了吗？\u0026rdquo;\n这是个很好的问题。而且坦率说，不少刚接触这个领域的人都有这个困惑——毕竟 VLM 在图像问答上表现那么好，它认出\u0026quot;这是一辆车\u0026quot;、\u0026ldquo;前方是红灯\u0026rdquo;、\u0026ldquo;路上有行人\u0026quot;完全没问题。那感知模块是不是要被淘汰了？\n这篇文章给一个明确的答案：\nVLM 的视觉编码器替代不了感知模块。它们解决的是完全不同的问题。两者必须协同工作，而不是二选一。\n下面我用最直白的方式说清楚这件事。\n核心矛盾：VLM 看到的 vs 驾驶需要知道的 先来一个极简的对比。\nVLM 视觉编码器（ViT）在做什么 VLM 的视觉编码器（比如 Qwen3-VL 用的 SigLIP ViT）做的是2D 语义理解。它把一张 RGB 图像切成 patch，每个 patch 提取一个特征向量。大规模预训练让它学会了识别图像里有什么：\n\u0026ldquo;这是一辆红色小轿车\u0026rdquo; \u0026ldquo;它好像在右转\u0026rdquo; \u0026ldquo;路上有斑马线\u0026rdquo; \u0026ldquo;天气是晴天\u0026rdquo; 这些都是语义层面的理解——回答\u0026quot;这是什么\u0026quot;的问题。\n但这些信息是2D 的、像素空间的、没有度量尺度的。一个 patch 可能在图像的某个位置，但如果你问\u0026quot;这辆车离我几米？\u0026quot;、\u0026ldquo;它的速度是多少？\u0026quot;、\u0026ldquo;它是一个 3D 空间里的什么位置和朝向？\u0026quot;，VLM 的视觉编码器根本回答不了。\n不是能力不够，是信息在编码阶段就已经丢失了。\n自动驾驶需要知道的 驾驶规划需要的是一组精确的 3D 度量信息：\n那辆车的位置：(x=10.53m, y=2.17m, z=0m) 朝向：相对于自车航向角 23 度 尺寸：4.7m × 1.8m × 1.5m 速度：5.2m/s，正在减速 加速度：-0.3m/s² 道路边界在哪、路面坡度多少、前方有没有被遮挡的区域 做碰撞检测的时候，你需要的是\u0026quot;这辆车 1.8 秒后会在 (x=15.8, y=2.5)\u0026quot;，而不是\u0026quot;这辆车在图像右前方\u0026rdquo;。差 0.5 米就可能决定撞上还是安全通过。\n这就像一个非常会看画的艺术家，你问他\u0026quot;这幅画里有什么\u0026quot;他给你讲得头头是道，但你让他测量画里一个人物的实际身高——他做不到。因为画本来就没有这个信息。\n信息损失的源头 ViT 在处理图像时做了两次信息丢失：\n3D → 2D 投影丢失：相机成像把 3D 世界投影到 2D 平面。深度信息（z 轴）在投影过程中丢失了。一张 2D 图像里，一个大物体在远处和一个小的物体在近处，看起来完全一样。 Patch 化离散丢失：ViT 把图像切成 14×14 或 16×16 的 patch，每个 patch 被压缩成一个特征向量。几何细节进一步丢失。 看这个经典例子——为什么单目图像无法区分\u0026quot;远处的大物体\u0026quot;和\u0026quot;近处的小物体\u0026rdquo;：\nVLM 可以识别出\u0026quot;有两辆车\u0026rdquo;，但它不知道怎么转换成 3D 度量坐标。\n这里有一个更深层的问题：即使 ViT 通过某种方式\u0026quot;猜\u0026quot;出了深度（比如通过阴影、大小先验、消失点估计），这种猜测也是有偏的、概率性的、不可靠的。在驾驶场景中，一个错误的深度估计（比如把 10 米处的车误判为 5 米）可能直接导致碰撞。\n而感知模块通过多视图几何约束（立体视觉）或主动传感器（LiDAR），直接测量深度而不是猜测深度。这是本质区别：一个是\u0026quot;推测\u0026quot;，一个是\u0026quot;测量\u0026quot;。\n那感知模块做了什么是 VLM 做不了的？ 感知模块（3D 检测 + BEV 感知 + 占用网络）的核心能力是从 2D 图像重建 3D 几何。\n具体的差异对比：\n维度 VLM 视觉编码器 感知模块（3D检测/BEV/Occupancy） 输入 单张或多张 2D RGB 图像 多相机 + LiDAR + Radar 数据 输出 2D patch 特征序列 结构化 3D 度量向量 能回答 \u0026ldquo;这是车，在图像左下方\u0026rdquo; \u0026ldquo;这辆车在 (10.53, 2.17, 0)，速度 5.2m/s\u0026rdquo; 数据类型 语义特征（不可求导到度量） 度量数值（可直接用于控制） 3D 几何 无 精确重建 深度感知 无（单目歧义） 有（通过多视图几何+LiDAR监督） 速度感知 无 有（时序关联+多普勒雷达） 核心技术差异用一句话说：\nVLM 理解\u0026quot;是什么\u0026quot;，感知模块理解\u0026quot;在哪、多快、多大、朝哪\u0026quot;。\n感知模块内部：有 BEV 的 vs 没有 BEV 的 上面说的是\u0026quot;感知 vs VLM\u0026quot;，但很多读者还会卡在感知模块自己内部的一个问题上：为什么有的感知有 BEV，有的没有？有 BEV 的是怎么做的，没有 BEV 的又是怎么做的？\n简单回答：有 BEV 的是\u0026quot;先把多相机搬到一张俯视图上，再做检测\u0026quot;；没有 BEV 的是\u0026quot;跳过俯视图，直接在 3D 空间里用稀疏 query 做检测\u0026quot;。 这是两种对\u0026quot;2D 图像如何变成 3D 信息\u0026quot;的不同答案。\n有 BEV 的感知：BEVFormer 范式（稠密俯视图） BEV 感知解决的核心难题是：下游模块（预测/规划/控制）都默认在统一的俯视坐标系里工作，但传感器给的是多路透视相机 2D 图。怎么把 2D 图像\u0026quot;搬\u0026quot;到俯视图上？\n主流的 BEV 做法是 BEVFormer 范式——用 Transformer 注意力做\u0026quot;图像 → BEV\u0026quot;的端到端学习，而不是手写几何：\n定义 BEV 网格（BEV queries）：把自车周围的一块俯视区域离散成 $H \\times W$ 的网格，每个网格点是一个可学习 query $Q_p$。每个 query 在几何上对应一个参考点——注意背后是柱状参考点（pillar），沿高度采样多个 3D 点，因为同一个 BEV 位置在不同高度可能是不同物体（头顶标牌 vs 地面锥桶）； 空间交叉注意力（SCA）：每个 BEV query 把自己的 3D 参考点投影到各相机图像上，用 deformable attention 只在投影点附近采样特征——就像一个\u0026quot;侦察兵\u0026quot;拿着自己的坐标去问各相机\u0026quot;你那边看到啥了\u0026quot;； 时间自注意力（TSA）：把历史帧的 BEV 也拉进来对齐融合（用自车运动做补偿），让检测能利用时序信息、判断运动； 统一表示上做多任务：BEV 特征出来后，一个特征图可以同时接 3D 检测头、地图头（车道线/路缘）、甚至占用头——这就是\u0026quot;统一俯视图\u0026quot;的价值：多任务共享一个表示。 之前还有 LSS（Lift-Splat-Shoot）路线：先让网络给每个像素预测一个深度分布，再把像素\u0026quot;lift\u0026quot;成 3D 点云、\u0026ldquo;splat\u0026quot;投影到 BEV 上。BEVFormer 的注意力路线后来占了上风，因为不用显式预测深度。\n一句话：BEV 感知 = \u0026ldquo;先重建一张鸟瞰图，再在鸟瞰图上做感知\u0026rdquo;。它的最大优点是统一表示——检测、地图、占用、规划全在同一个俯视图空间里协作。\n没有 BEV 的感知：Sparse4D / DETR3D 范式（全稀疏 query） BEV 范式很有效，但带着一个\u0026quot;算力原罪\u0026rdquo;：BEV 是稠密网格，算力随分辨率平方爆炸，且大部分格子是空地、算力浪费在没东西的地方。于是有了\u0026quot;全稀疏（Fully Sparse）\u0026ldquo;路线：\n核心思想：路上有意义的东西本来就稀疏（几十辆车、几个行人、几条车道），为什么中间表示非要稠密？直接用一组稀疏的实例 query，从图像一路查到 3D 检测框。\n以 Sparse4D 为例，它的做法是：\n初始化稀疏 query：每个候选目标是一个 query（而不是网格），携带位置、尺寸、速度等属性，数量与场景目标数相当（而不是 $H \\times W$ 个）； 4D 关键点采样：每个 query 在 3D 空间里定义一组关键点，投影到多相机图像上采样特征——和 BEV 的 SCA 类似，但采样点是稀疏目标专属的，不铺满整个俯视图； 循环时序融合：多帧之间不再对齐稠密 BEV，而是直接把锚框特征循环传给下一帧（复杂度 O(1)），天然支持跟踪（推理时分配 ID 即可）； 直接出 3D 框：query 一路变形、聚合特征，最后回归出检测框，全程没有中间俯视图。 这条路线的好处：\n算力随目标数线性，而不是随分辨率平方； 车端部署友好（Orin 这类芯片跑得动）； 时序融合天然便宜。 代价是：在做密集占据预测、栅格化可行驶区域这类\u0026quot;需要稠密表示\u0026quot;的任务时，不如 BEV 自然。\n两条路线怎么选？ 维度 BEV 范式（BEVFormer） 全稀疏范式（Sparse4D） 中间表示 稠密俯视图 稀疏实例 query 算力 随分辨率平方爆炸 随目标数线性 多任务共享 强（检测/地图/占用共享 BEV） 偏弱（稠密任务不自然） 时序融合 多帧 BEV 对齐（重） 循环传锚框特征（O(1)） 车端部署 难 友好 典型代表 BEVFormer、LSS、BEVDet Sparse4D、DETR3D、SparseDrive 一个很关键的联系：这条\u0026quot;BEV vs 稀疏\u0026quot;的争论，和上面\u0026quot;感知 vs VLM\u0026quot;的争论是同构的——都是**\u0026ldquo;稠密统一表示 vs 稀疏按需表示\u0026rdquo;。VLM 用稠密的 patch token 覆盖整张图（类似 BEV 的\u0026quot;全覆盖\u0026rdquo;），而 DriveVLA-M0 用稀疏的结构检索键按需取信息（类似 Sparse4D 的\u0026quot;按需采样\u0026quot;）。SparseOccVLA 甚至更进一步：用稀疏占用查询完全替代 ViT patch token** 作为 LLM 的唯一视觉输入——感知内部\u0026quot;稀疏化\u0026quot;的趋势，也正在蔓延到 VLA 架构里。\n那为什么很多模型\u0026quot;没有感知\u0026quot;，却表现还不错？ 看到这里你可能会冒出一个更大的疑惑：很多论文（比如 DriveVLA-W0、ReCogDrive、SimWAM）输入就只是几路相机，连 LiDAR/Radar 都没有，也没有显式输出 BEV 或 occupancy——它们拿到的明明就是 2D 图像啊，ResNet/ViT 不也只是个\u0026quot;视觉特征提取器\u0026quot;吗？那感知到底是怎么做的？为什么分数还不错？\n这个问题问得很准。我拆成两部分回答：它到底是怎么做到的，以及这算不算\u0026quot;感知\u0026quot;。\n第一步：先纠正一个直觉——\u0026ldquo;只有 2D 图像\u0026quot;不等于\u0026quot;只有 2D 信息\u0026rdquo; 相机拍的确实是 2D 投影，但 2D 图像序列里藏着的 3D 信息比你想的多。端到端模型不是只看一张静态图，它实际利用了这些线索：\n多视角几何（multi-view geometry）：NAVSIM 等数据集通常给 3 路甚至 8 路环绕相机。同一辆车会同时出现在多个相机画面里，它们的相对位置、成像大小差就是隐式的立体视差——模型可以在训练中隐式地学会\u0026quot;这个物体在两个视角里都出现，说明它大概在这个方位\u0026quot;。 多帧时间线索（temporal cues）：输入通常是连续 4 帧（甚至更多）历史图像。同一个物体在前后帧里的位置移动，蕴含了运动信息（速度方向）和粗略深度（近处物体移动快、远处移动慢，这是运动视差 parallax）。这就是为什么端到端模型都要喂多帧——单帧确实不够，但 4 帧能给出一大堆隐式 3D 信号。 自车状态（ego state）作为\u0026quot;尺子\u0026quot;：模型还拿到自车的速度、加速度、航向等状态。自车状态 + 图像里物体的图像位置，可以隐式换算相对距离——模型训练时会学会这种\u0026quot;用运动学搭桥\u0026quot;的对应关系。 一句话：端到端模型吃的不是\u0026quot;一张图\u0026quot;，而是\u0026quot;多视角 + 多帧 + 自车运动\u0026quot;的复合信号，这里面有足量的隐式几何信息。 它没有显式输出深度，但它可以在特征里隐式地\u0026quot;估算\u0026quot;出规划需要的深度量级。\n第二步：端到端训练会让\u0026quot;规划相关模式\u0026quot;自己浮现 ResNet/ViT 确实只是 backbone，但它不是孤立训练的——它和轨迹预测头一起被端到端监督。最终 loss 只关心\u0026quot;轨迹对不对\u0026quot;（L1 距离、碰撞率、PDMS），于是 backbone 会在梯度信号下自发地提取对规划有用的特征：\n车道线、道路边界在哪（决定可行驶区域） 前车在哪、多快（决定跟车距离和碰撞风险） 红灯、停止线、路缘（决定是否该停） 这些正是\u0026quot;感知任务要提取的信息\u0026quot;——只不过它们没有被显式解码成 3D box 或 BEV 图，而是隐式地存在于特征向量里。换句话说：ResNet 不等于\u0026quot;没做感知\u0026quot;，它只是把感知结果压缩进了对规划有用的 latent 表示里。 感知任务依然在做，只是不显式。\n第三步：NAVSIM 这个基准本身对\u0026quot;显式感知\u0026quot;要求不高 还有一个很现实的因素——NAVSIM 的评估设计：\n短时域规划：NAVSIM 只要求预测未来 3 秒左右的轨迹（约 8-10 个点），不要求输出完整的 3D 世界模型。它不考\u0026quot;你的 BEV 准不准\u0026quot;，只考\u0026quot;你最终轨迹好不好\u0026quot;。 PDM 打分看轨迹结果：评估器（PDM）是拿你输出的轨迹和专家/碰撞检查比较，不直接检查你的模型内部有没有生成显式 BEV。所以\u0026quot;没有 BEV 表示\u0026quot;不会被扣分。 ego 状态和 route 是送分题：NAVSIM 直接把自车位置、速度、导航路线（route）喂给模型。这些信息解决了大量规划问题，模型不需要从零推理\u0026quot;我要去哪\u0026quot;。 所以很多模型\u0026quot;没有显式感知也能拿高分\u0026quot;，有一部分原因是：基准测试本来就没强制要求显式感知。 这不代表它们真的感知得很好，只是基准没考这一项。\n第四步：VLM 在这个故事里的真实角色 那 VLM（Qwen3-VL、InternVL 这类）又贡献了什么？它和 ResNet 的区别是：\nResNet/ViT 提取的是\u0026quot;规划用几何特征\u0026quot;——由端到端 loss 驱动，偏向几何/运动； VLM 提供的是\u0026quot;语义先验\u0026quot;——\u0026ldquo;前面是施工区\u0026quot;\u0026ldquo;这是警车\u0026quot;\u0026ldquo;斑马线意味着让行\u0026rdquo;，这些知识来自互联网规模图文预训练，是纯感知模块给不了的。 但注意，VLM 并不自动解决空间精度问题。它增强语义理解，却可能牺牲精确空间几何——尤其当 VLM 的视觉塔是冻结的（只训后面的 adapter/规划头）时，它的 patch token 从没被\u0026quot;驾驶 loss\u0026quot;校正过，对 3D 度量的估计依然是\u0026quot;预训练时的直觉\u0026rdquo;。这也是为什么 Percept-WAM 要专门训练感知 token、Last-VLA 要请 VGGT 当\u0026quot;几何老师\u0026rdquo;。\n所以结论是什么？——区分\u0026quot;感知任务\u0026quot;和\u0026quot;显式感知表示\u0026quot; 这是整篇文章最关键的一个区分，建议反复咀嚼：\n感知任务重要 ≠ 显式感知表示重要。\n感知任务重要：模型必须能从图像里判断道路、车道、车辆、障碍物、可行驶区域——这一项没有任何模型能跳过，跳过了就撞车； 显式感知表示不一定重要：不一定要输出 depth、3D boxes、BEV 或 occupancy map——这些只是\u0026quot;把感知结果摆出来\u0026quot;的形式，而不是\u0026quot;感知\u0026quot;本身。 用一句话总结：\n\u0026ldquo;没有显式感知\u0026quot;不等于\u0026quot;没有感知\u0026rdquo;。端到端模型把感知的职责内化进了 backbone——它不做显式 BEV/occ，但它在 latent 里隐式地完成了感知任务。显式 BEV/occupancy 不是高分的必要条件，但感知能力本身是。\n那这种\u0026quot;隐式感知\u0026quot;的边界在哪？ 诚实地说，这种\u0026quot;全靠隐式\u0026quot;的路线有明显的短板，论文里也反复被验证：\n短板 表现 遮挡 被遮挡的车看不到，没有显式 3D 推理就很难\u0026quot;脑补\u0026quot;出它还在那里 距离估计 远距离/小目标距离误差大，多帧运动视差在静止物体上失效 跨视角目标对应 多相机里同一辆车对不上，缺乏显式几何就靠猜 长尾障碍物 训练里没见过的小物体（锥桶、坠落物）识别不稳 分布外场景 换了城市、换了天气，隐式先验就可能失效 这就是为什么真正要量产（而不只是刷榜）的系统，仍然会要显式感知——BEV/occ 的价值不在\u0026quot;分数\u0026quot;，而在可靠性和可验证性。而 2026 年的论文也正是在这两端之间找平衡：Percept-WAM 把显式感知内化进 VLM、DriveVLA-M0 用显式结构键做记忆检索、Last-VLA 用显式 3D 先验做蒸馏——它们都在补\u0026quot;隐式感知\u0026quot;缺失的那部分可靠性。\n如果你还不信，做一个小实验就知道了 拿任意一张自动驾驶场景图（nuScenes 也好、自己拍也好），让 VLM（Qwen3-VL、GPT-4o、Claude 都行）回答这五个问题：\n这辆车在自车坐标系下的 (x, y) 坐标是多少米？ 这辆车的速度是多少 m/s？ 这辆车 3 秒后会到哪个位置？ 前面那辆车的宽度是多少米？ 自车到前车的纵向距离是多少米？ VLM 对这五个问题要么答错、要么给范围估计（\u0026ldquo;大概 5-8 米\u0026rdquo;）。但它对\u0026quot;这辆车是什么颜色\u0026quot;这种语义问题可以 100% 答对。\n这不是 VLM 的缺陷，这是信息通道的物理限制——你不可能从一个抹去深度信息的输入中恢复精确深度。\nVLA 论文里到底用不用感知？——深入看 7 篇代表工作 我们直接看 2024-2026 最有影响力的 VLA 论文实际怎么做的。每一篇都能说清楚感知模块的具体角色。先看 7 篇\u0026quot;奠基性\u0026quot;的代表工作，下一节再盘点最近精读的一批 2026 新论文。\nDriveVLM (2024) — 双系统架构，感知管度量，VLM 管推理 DriveVLM 是最早的驾驶 VLA 工作之一，由清华大学和多家车企联合发表。它的架构非常明确地分为两个系统：\nSystem-1（快系统）：传统感知 + 规划管线\n3D 目标检测（基于 BEVFormer 或类似架构） BEV 特征构建（多相机融合到鸟瞰空间） 轨迹规划（基于精确度量的碰撞检测 + 运动规划） 延迟低、可实时、安全有保障 System-2（慢系统）：VLM 推理引擎\n输入：多相机图像 处理：ViT 提取 2D 语义特征 → LLM 推理 → 场景描述 + 推理链 输出：高层驾驶建议（\u0026ldquo;前方有斑马线，注意减速\u0026rdquo;） 延迟高（几百毫秒到几秒），但语义理解强 两者的协同方式：System-1 做实时规划，System-2 做语义监督。System-2 的输出不直接控制车辆，而是作为\u0026quot;语义约束\u0026quot;修正 System-1 的规划——比如 VLM 发现 \u0026ldquo;前方有一辆自行车可能在你的盲区\u0026rdquo;，System-1 的规划器因此增加横向安全距离。\n关键结论：DriveVLM 是\u0026quot;感知做规划，VLM 做监督\u0026quot;的经典范式。VLM 不碰任何度量计算，只做语义增强。\nDriveVLA-W0 (2025) — 感知 tokens 直接拼入 VLM 序列 DriveVLA-W0 走得更远：把 BEV 感知特征 token 化后，直接作为额外输入拼接到 VLM 的 token 序列里。\n具体的输入序列构造：\n[ [ [ C B p L E r S V o ] _ m t p [ o t V k _ i e t T n o _ _ k p 1 e a ] n t _ c [ 1 h B ] _ E 1 V [ ] _ p t r [ o o V k m i e p T n t _ _ _ p 2 t a ] o t k c e h n _ _ 2 2 ] [ ] B E V _ t [ o [ V k p i e r T n o _ _ m p M p a ] t t _ c t h o _ k N e ] n _ K ] ViT patch tokens（约 256-1024 个）：来自图像编码器，提供 2D 语义信息 BEV tokens（约 64-256 个）：来自 BEV 感知模块的稀疏 query，携带精确的 3D 几何和度量信息 文本 prompt tokens：用户指令（\u0026ldquo;直行通过路口\u0026rdquo;） LLM（Qwen3-VL 或类似结构）在自注意力层中同时关注三种 token。这意味着 LLM 在做推理时，既能看到\u0026quot;这是一辆红色轿车\u0026quot;（语义），也能看到\u0026quot;它在 (10.53, 2.17)，速度 5.2m/s\u0026quot;（度量）。\nDriveVLA-W0 的消融实验非常说明问题：\n去掉感知 tokens → 碰撞率翻倍（3.2% → 8.7%）。去掉 ViT tokens → 语义理解能力下降但碰撞率仅微增。两者都用 → 最好。 这个消融实验是\u0026quot;感知模块不可或缺\u0026quot;的最直接证据。\nSparseOccVLA (CVPR 2026) — 感知和推理在统一 query 空间融合 SparseOccVLA 是 2026 年的代表性工作，来自旷视和清华团队的联合研究。它的核心创新在于把感知和推理统一到同一个稀疏 query 空间中。\n传统的 VLA 架构是\u0026quot;感知模块输出特征 → 作为 VLM 的输入\u0026quot;，两个模块之间有一条清晰的边界。SparseOccVLA 说：不要这条边界，让感知 query 和推理 query 在同一个 Transformer 里交互。\n架构拆解：\n图像编码层：ViT 提取多尺度 2D 特征 稀疏 query 初始化： 感知 query（~300 个）：负责拟合 3D 检测框、占用网格、运动场 推理 query（~64 个）：负责场景理解、决策推理、规划 统一 Transformer 层（12 层）： 每层中，感知 query 通过可变形注意力从 2D 特征中采样 3D 信息 推理 query 通过自注意力从感知 query 中获取 3D 上下文 两种 query 在每层中充分交互 预测头： 感知头：检测框、占用概率、运动矢量 推理头：决策 token、轨迹 token SparseOccVLA 证明了感知和推理需要双向交互——推理需要感知的 3D 信息，感知也能从推理的语义理解中获益（比如\u0026quot;知道这是一辆警车\u0026quot;可以修正检测置信度）。\nKnowVal (CVPR 2026) — 外部知识补足 VLM 盲区 KnowVal 从另一个角度验证了 VLM 在驾驶场景中的局限。它指出 VLM 有两个严重的盲区：\n盲区 1：度量盲区 VLM 无法精确回答距离、速度、尺寸这类问题。这是根本性的，前面已经说清楚了。\n盲区 2：知识盲区 VLM 在驾驶场景的\u0026quot;常识\u0026quot;上也是残缺的。比如：\n不知道卡车右侧盲区的具体范围（对驾驶规划至关重要） 不知道某些非标准交通标志的含义 不知道特定城市的道路规则差异（比如某个路口禁止掉头的特殊规则） 不知道某些车型的制动距离特性（满载卡车 vs 空载卡车的刹车距离差异） KnowVal 的做法是：显式构建驾驶知识图谱，把驾驶领域的专业知识（车辆动力学参数、交通规则、盲区范围、常见事故模式）编码成结构化知识，通过知识注入层与 VLM 的推理结果融合。\n这再次说明：VLM 的视觉编码器连语义理解都不完整，需要外部知识补足，更不用说做 3D 度量了。\nEMMA (Waymo/Wayve, 2025) — 在成熟感知堆栈上架 LLM EMMA 是 Waymo（或者 Wayve，取决于你指哪一个）在 2025 年发表的工作。它的做法非常务实：\n使用 Waymo 成熟的自动驾驶感知堆栈（包括 3D 检测、BEV 融合、轨迹预测） 把感知堆栈的结构化输出 token 化：检测框 token、轨迹 token、地图 token 把这些 token 和图像 token 一起输入到一个 Gemini 风格的 LLM 中 LLM 在感知之上做\u0026quot;宏观推理\u0026quot;：场景理解、行为预测、策略决策 EMMA 的核心设计原则是：不要让 LLM 学习的\u0026quot;世界\u0026quot;去拟合感知任务，让感知模块把 3D 世界压缩成 LLM 能理解的结构化表示。\n这种做法的优势：\n安全：成熟感知堆栈经过了数十亿英里的验证 效率：不需要端到端训练一个感知-VLA 巨模型 可解释：感知输出是人类可读的结构化数据 LinkVLA (2025) — VLM 和感知用专用连接层融合 LinkVLA 提出了一个很有意思的观察：VLM 的 ViT 特征和感知模块的 3D 特征分布差异巨大，直接拼接会导致 LLM 难以对齐。于是它引入了一个专门的\u0026quot;连接层\u0026quot;（Linker）来做特征空间的对齐和映射。\nLinker 做的事情：\n把 ViT 的 2D 特征通过可变形注意力映射到 3D 空间 把感知模块的 3D 特征编码成和 VLM token 空间兼容的表示 两者在共享的 3D 空间中对齐后，再输入 LLM LinkVLA 的核心结论：VLM 和感知的特征空间相差太大，不能简单拼接，需要一个专门设计的桥接层。\npi0 / GR-3 (2024-2025) — 通用机器人 VLA 的视角 虽然 pi0（Physical Intelligence）和 GR-3（Google DeepMind）是通用机器人领域的 VLA，不是自动驾驶专用的，但它们的架构设计同样能说明问题。\npi0 的架构：\n视觉编码器：SigLIP ViT（2D 语义） 流匹配动作头：直接输出连续动作 中间层：没有显式感知模块，只靠 ViT 特征 + LLM 推理 pi0 在操作任务上表现很好（抓取、放置、开抽屉等），因为这些任务对精确 3D 度量的要求远低于自动驾驶。但 pi0 在涉及空间精确度的任务上表现很差——比如\u0026quot;把杯子放在桌子的右上角\u0026quot;这种需要精确坐标的任务。\nGR-3 做了类似的观察，引入了\u0026quot;空间推理层\u0026quot;来增强 VLA 的空间理解能力。这本质上是在 VLA 内部显式增加了感知模块的功能，从侧面印证了感知的必要性。\n最新论文精读盘点：感知与 VLM 的十种协同方式 上面 7 篇是代表性老工作。最近我在博客里精读了一大批 2026 年的新论文（DriveVLA-M0、BrainWAM、Percept-WAM、SimWAM、CoWorld-VLA、ReCogDrive、AutoVLA、ST4VLA、Last-VLA、Qwen-VLA……），它们把\u0026quot;感知 vs VLM\u0026quot;这道题答出了十种不同的答案。每一种都值得单列出来对比。\n① DriveVLA-M0（2026）：感知变成\u0026quot;检索键\u0026quot;，不进推理链 DriveVLA-M0 的立场最激进：感知模块根本不进 VLM 的推理链，而是变成记忆检索的\u0026quot;钥匙\u0026quot;。\n一个 Retrieve Model（DINOv2 + Decoupled LoRA）从图像里提取结构键：Map 分支管静态路网、Agent 分支管动态交互； 这些键用来从\u0026quot;失败记忆库\u0026quot;里检索结构相似的失败场景，再用 LoRA 测试时训练（TTT）逐场景纠正动作解码器； 关键洞察：用语言特征当检索键反而拖后腿（PDMS 90.7 \u0026lt; 基线 91.0）——因为驾驶决策需要的是结构相似性（路怎么拐、车在哪条道），不是语义相似性（\u0026ldquo;都是车\u0026rdquo;）。感知提取的结构键（91.7→92.3）比 VLM 的语义键有用得多。 这是\u0026quot;感知（结构检索）\u0026gt; VLM（语义检索）\u0026ldquo;在驾驶场景的最直接证据：检索什么，决定了记忆有没有用。\n② BrainWAM（2026）：VLM 和预测模型\u0026quot;分居\u0026rdquo;，靠动作空间协调 BrainWAM 用一个反直觉的实验证明了不能把语义和动态简单地拼在一起：\n它比较了 Tri-MoT（把 VLM 语义 token、视频预测 token、动作 token 全倒进同一个注意力锅） 和 Dual-MoT（分居、各自配专属 FFN）； 结果 Tri-MoT 端到端性能甚至不如单独的 WAM（87.8 vs 88.1 PDMS）。原因：action token 对\u0026quot;好啃\u0026quot;的语义 token 过度关注，视频/预测 token 被边缘化——注意力失衡； 于是 BrainWAM 用\u0026quot;大脑式分工\u0026quot;：VLA 分支（语义）+ WAM 分支（预测）各自独立，中间靠 CAB（Callosal Action Bridge，模拟胼胝体）和 CIF（Cerebellar Intent Fusion，模拟小脑）在动作表示空间协调。 这提示感知/VLM 融合的关键不是\u0026quot;塞进同一层\u0026quot;，而是在哪一层融合：原始 token 空间融合会失衡，动作空间融合更稳。\n③ Percept-WAM（2026）：感知直接\u0026quot;长进\u0026quot;VLM 里，共享骨架 Percept-WAM 主张感知是规划的底盘，应该长在 VLM 内部：\n它指出 VLM 有三大空间硬伤：3D 定位漂移、时序不一致、置信度不可靠（LLM 过度自信）； 解法是在一个 VLM（InternVL2-8B）里长出三族 World Token：World-PV（透视 2D 感知）、World-BEV（鸟瞰 3D 感知，用 cross-attention 从 PV 特征\u0026quot;提\u0026quot;出 3D 表示）、World-Action（四组点级轨迹查询）； 感知结果成为持久的、可定位的世界状态，不是一次性中间变量——这正好回击了\u0026quot;VLM 看不准 3D\u0026quot;的批评：让 VLM 自己长感知能力，而不是让它依赖外部感知。 这是\u0026quot;感知内化\u0026quot;路线：不把感知模块挂在外面，而是让 VLM 的 token 直接承担感知职责，消融显示加 LiDAR 初始化 BEV 还能再 +8.2 mAP。\n④ SimWAM（2026）：视频预测（感知动态）只在训练期有用 SimWAM 回答了一个关键问题：世界模型的\u0026quot;未来感知\u0026quot;到底该放在训练期还是推理期？\n传统 WAM 走 imagine-then-act：推理时先生成未来帧再出轨迹，时延飙到秒级； SimWAM 的答案是训练期用视频监督学动态先验，推理期把视频分支删掉——只用 Flow-GRPO 强化学习出轨迹； 结果：NAVSIM PDMS 91.5，时延却回到纯 planner 量级。 对\u0026quot;感知 vs VLM\u0026quot;的启示：感知/预测这类\u0026quot;重活\u0026quot;的价值在训练期（喂信息），不在推理期（拖时间）。这和 DriveVLA-W0 的\u0026quot;世界模型换稠密监督\u0026quot;思路一致，但 SimWAM 更极致——干脆不上线。\n⑤ ReCogDrive（2026）：VLM 只做认知，轨迹交给扩散模型 ReCogDrive 把\u0026quot;不要让 VLM 直接出动作\u0026quot;这个原则推到极致：\nVLM（认知）→ 扩散规划器（动作）：VLM 只输出认知表征（关键目标、场景描述、驾驶推理、元行为），不碰轨迹； 理由是轨迹不需要过文本 tokenizer 的\u0026quot;离散化瓶颈\u0026quot;——直接让连续扩散模型翻译认知表征； 效果：相比文本 token 解码轨迹，推理速度提升 7.8×，轨迹平滑度提高 35%。 这是\u0026quot;模态错配\u0026quot;的经典案例：VLM 的文本空间和动作的连续空间根本不是一个世界，中间必须有一个专门的\u0026quot;翻译器\u0026quot;（感知/规划器）。\n⑥ CoWorld-VLA（2026）：在 VLM 隐空间锚定四个\u0026quot;专家维度\u0026quot; CoWorld-VLA 的做法是在 VLM 隐空间里显式锚定四个语义轴（专家 token），让规划器有针对性地利用不同维度：\n它批评纯文本 CoT：把连续时空结构离散成文字会丢精细空间信息； 也批评隐空间世界推理：隐变量难以直接作为动作生成的条件信号； 解法：多源监督从 VLM 隐空间提取四种互补专家 token，每个对应自动驾驶一个知识维度，供分层扩散规划器使用。 这本质上是\u0026quot;在 VLM 内部重建感知的维度结构\u0026quot;——与其让 VLM 隐式包含所有信息，不如用外部监督显式地把感知维度\u0026quot;钉\u0026quot;出来。\n⑦ Last-VLA（2026）：用 3D 几何先验补 VLM 的空间盲区 Last-VLA（小米）直接把 VLM 的空间短板当作核心矛盾来打：\n它批评显式文本 CoT 的两个病灶：语义-感知脱耦（文字压丢视觉细节）和对语言先验的过度依赖； 解法是引入两个\u0026quot;物理老师\u0026quot;：VGGT（3D 几何基础模型，提供度量几何先验：深度、占据结构、可行驶区域）+ Cosmos（动力学模型，提供动态先验），在训练期把物理知识\u0026quot;烤\u0026quot;进权重，推理期旁路； 用视觉瓶颈掩码禁止动作 token 直接看图像嵌入，把视觉信息全部逼进隐 CoT，让它成为决策的唯一信息通道。 这是\u0026quot;感知内化 + 知识蒸馏\u0026quot;路线：感知能力被蒸馏进 VLM 权重，推理时零额外开销。\n⑧ ST4VLA（2026）：给 VLM 补\u0026quot;空间接地\u0026quot;预训练 ST4VLA 回答\u0026quot;VLM 的空间先验能不能补\u0026quot;这个问题——能，但需要专门设计：\n诊断出 VLM 扩展到处具身任务的三大问题：空间接地坍塌（VLM+动作头拼接导致空间能力退化）、多模态优化冲突、分布外脆弱； 解法是两阶段：先用点/框/轨迹三类空间预测任务做空间接地预训练，再用统一空间提示引导动作生成； 效果：Google Robot 从 66.1 → 84.6，WidowX 从 54.7 → 73.2。 它和 Percept-WAM 呼应：VLM 的空间能力不是天生的，得靠显式的空间任务喂出来。 这也从侧面说明：感知不是 VLM 的冗余，而是 VLM 的必修课。\n⑨ AutoVLA（2025）：动作 token 化，让 VLM 自己开 AutoVLA 走\u0026quot;无显式感知\u0026quot;路线，但它给出了一个聪明的补偿：\n它把连续轨迹离散成 codebook 里的可行动作 token，让 VLM 自回归生成动作； 好处是动作天然物理可行（每个原型来自真实人类驾驶），且能统一\u0026quot;思考+动作\u0026quot;在一个模型里； 但它也承认：不是每个场景都需要深思熟虑——用 GRPO 强化微调在简单场景关掉多余的 CoT 推理。 这是\u0026quot;纯 VLM 驾驶\u0026quot;的乐观派：它不需要外部感知，但代价是感知能力（物理可行性、空间精度）被压缩进了动作 codebook——感知没有消失，只是被离散化了。\n⑩ Qwen-VLA（2025）：VLM 和动作专家\u0026quot;分工但同居\u0026quot; Qwen-VLA 给出的是工程上最稳健的答案——认知主干 + 运动专家双模块解耦：\n认知主干（Qwen3.5 VLM）做视觉-语言理解和推理，动作专家（单流 DiT Flow Matching，1.15B）管高频动作生成； 关键洞察是训练不对称：VLM 已是强预训练，动作解码器是随机初始化，朴素联合训练既低效又不稳定——所以设计了 T2A→CPT→SFT→RL 四阶段渐进策略； 消融显示：视觉-语言协同训练不干扰简单任务，反而提升复杂任务——互联网图文知识是真金白银的先验。 它和 ReCogDrive 一样反对\u0026quot;VLM 直接出动作\u0026quot;，但采用了更保守的架构（DiT 外挂），并证明了多模态先验对 VLA 是有用的——前提是别让它和动作空间打架。\n十一张表收束 把上面的十种关系汇总成一张总表：\n# 模型 年份 感知角色 一句话立场 1 DriveVLA-M0 2026 检索键 感知变结构键，不进推理链，检索比语义靠谱 2 BrainWAM 2026 平行分支 语义与预测分居，动作空间协调 3 Percept-WAM 2026 内部底盘 感知长进 VLM，共享骨架 4 SimWAM 2026 训练期老师 动态预测只在训练期有用，推理期删掉 5 ReCogDrive 2026 认知翻译器 VLM 只认知，扩散模型翻译成动作 6 CoWorld-VLA 2026 隐空间锚点 在 VLM 隐空间显式钉出感知维度 7 Last-VLA 2026 蒸馏老师 3D 几何/动力学先验烤进权重，推理旁路 8 ST4VLA 2026 预训练课程 用空间任务补 VLM 的空间接地 9 AutoVLA 2025 动作 codebook 感知被离散化压缩进动作 token 10 Qwen-VLA 2025 外挂专家 认知与动作分工，DiT 别和 VLM 打架 三点规律浮现：\n没有一篇驾驶 VLA 敢真的抛弃感知——哪怕最\u0026quot;纯 VLM\u0026quot;的 AutoVLA，也把感知能力压缩进了动作 codebook； 2026 年感知的角色大幅演化了：从\u0026quot;外部输入\u0026quot;（DriveVLA-W0 拼 token）进化到\u0026quot;内部骨架\u0026quot;（Percept-WAM 长进 VLM）、\u0026ldquo;检索钥匙\u0026rdquo;（DriveVLA-M0）、\u0026ldquo;蒸馏老师\u0026rdquo;（Last-VLA）——感知并没有消失，而是换着姿势存在； VLM 的语义先验被反复证明有用但不够：有用（Qwen-VLA 的 VL 协同、ReCogDrive 的认知表征），不够（DriveVLA-M0 的语义检索反效果、BrainWAM 的注意力失衡、ST4VLA 的空间坍塌）——感知补的正是 VLM 永远差的那一截：空间精度与结构。 VLA 论文芯片对比：感知模块的接入方式 我把上面讨论的论文按照感知模块的接入方式做了一个分类：\n接入方式 代表工作 感知角色 融合深度 独立双系统 DriveVLM 感知做规划，VLM 做语义监督 弱融合（VLM 输出文本约束给规划器） 特征拼接 DriveVLA-W0, EMMA 感知特征 token 拼入 VLM 序列 中融合（共享 attention 层） 统一 query 空间 SparseOccVLA 感知 query 和推理 query 在统一空间交互 强融合（共享整个 Transformer） 桥接对齐 LinkVLA 专用连接层对齐感知和 VLM 特征 中融合（专用桥接模块） 外部知识注入 KnowVal 外部知识图谱补足 VLM 盲区 弱融合（后处理融合） 检索键（不进推理链） DriveVLA-M0 感知提取结构键，检索失败记忆 弱融合（检索结果经 TTT 注入解码器） 平行分支 + 动作协调 BrainWAM 语义/预测分支分居，动作空间协调 中融合（CAB+CIF 动作级融合） 感知内化（长进 VLM） Percept-WAM, Last-VLA, ST4VLA 感知作为 VLM 内部 token/预训练课程 强融合（共享 VLM 骨架） 训练期老师 SimWAM, DriveVLA-W0 预测/感知只在训练期喂信息，推理旁路 弱融合（知识蒸馏进权重） 认知-动作分工 ReCogDrive, Qwen-VLA, CoWorld-VLA VLM 只认知，扩散/DiT 专家翻译动作 中融合（显式分工 + 中间表征） 无显式感知 pi0, GR-3（简化版）, AutoVLA 无独立感知，靠 ViT 直接学 无感知（感知被压缩进动作 codebook） 有三点值得注意：\n2026 年的趋势是从\u0026quot;弱融合\u0026quot;走向\u0026quot;强融合\u0026quot;和\u0026quot;感知内化\u0026quot;，而不是\u0026quot;去掉感知\u0026quot; 端到端的 VLA（无显式感知）只在机器人操作这种低精度场景可行，驾驶场景没有成功案例（AutoVLA 也要靠动作 codebook 兜底物理可行性） 感知在 2026 年出现了四种新姿势：检索键（M0）、平行分支（BrainWAM）、内部骨架（Percept-WAM）、训练期老师（SimWAM/Last-VLA）——感知没有消失，而是被重新分配 2026 年的结论：感知 + VLA 融合，不是替代 我自己的理解是：2024-2026 年 VLA 的演进趋势非常清晰地告诉我们一个结论：\nVLM 不替代感知，VLM 和感知融合。\n阶段 做法 代表工作 2024 传统感知 + 独立 VLM 推理 DriveVLM 2025 感知特征作为 token 拼接进 VLM DriveVLA-W0, EMMA 2025 认知-动作显式分工 ReCogDrive, Qwen-VLA, AutoVLA 2026 感知和 VLA 在统一 sparse query 空间融合 SparseOccVLA 2026 感知内化：感知长进 VLM 骨架 Percept-WAM, Last-VLA, ST4VLA 2026 感知变检索键 + 测试时训练 DriveVLA-M0 2026 语义与预测分居 + 动作空间协调 BrainWAM, SimWAM, CoWorld-VLA 2026+ 感知 + VLA + 世界模型三位一体 VLA-World 趋势很明显：不是\u0026quot;去掉感知\u0026quot;，而是\u0026quot;感知和 VLA 越融越深\u0026quot;——而且 2026 年感知被重新分配成四种角色（检索键 / 平行分支 / 内部骨架 / 训练期老师），每种都在证明同一个道理：VLM 单独扛不住驾驶的空间精度要求。\n原因也很简单：\n安全不能靠猜：驾驶的 safety-critical 特性要求度量级别的精确。VLM 的视觉编码器从设计上就不提供这个。 传感器更全、更便宜：LiDAR 价格降到 2800 元，4D 成像雷达成熟。有精确数据不用、非要从单张图像里猜深度，是反直觉的。 融合收益被反复验证：每一篇 VLA 论文的消融实验都证明：感知 + VLM \u0026gt; 只有 VLM \u0026gt; 只有感知（在语义理解维度）。 从传感器到规划轨迹的完整数据流 为了让你彻底看清楚，我按照当前 VLA 系统的实际架构，把完整数据流展开到最细粒度：\n核心要点：\n感知模块提供 3D 度量和碰撞检测，解决\u0026quot;安全\u0026quot;问题 VLM 的 ViT 提供语义理解，解决\u0026quot;智能\u0026quot;问题 规划轨迹需要两者兼具：安全是底线，智能是上限 核心要点：\n感知模块提供 3D 度量和碰撞检测，解决\u0026quot;安全\u0026quot;问题 VLM 的 ViT 提供语义理解，解决\u0026quot;智能\u0026quot;问题 规划轨迹需要两者兼具：安全是底线，智能是上限 那什么场景下 VLM 的视觉编码器就够了？ 有些场景确实不需要感知模块，VLM 的视觉编码器就够了：\n简单的机器人操作（比如\u0026quot;抓取红色的杯子\u0026quot;）：位置的精确度要求低，语义理解主导。pi0 在这样的任务上表现很好。 自动驾驶的数据标注辅助：VLM 辅助标注 2D 语义标签、描述场景、写数据报告。语义正确即可，不需要 3D 坐标。 安全监控：发现异常事件（\u0026ldquo;有人在路边招手\u0026rdquo;、\u0026ldquo;前面有事故\u0026rdquo;），不需要精确位置，只需要触发告警。 导航中的地标识别：\u0026ldquo;前面那个红色大楼右转\u0026rdquo;——语义识别为主，不需要厘米级精度。 驾驶教练/分析系统：分析驾驶行为是否安全，给出语义反馈（\u0026ldquo;你变道时没有打转向灯\u0026rdquo;），不需要实时控制。 但对驾驶规划这个任务——需要精确到厘米级和毫秒级——感知模块是绕不过去的。\n一个更大的问题：那未来的感知会被 VLM\u0026quot;吸收\u0026quot;吗？ 这是这篇分析真正想触及的问题。\n从 2024 到 2026，趋势不是\u0026quot;VLM 替代感知\u0026quot;，而是\u0026quot;VLM 和感知融合\u0026quot;。那更远的未来呢？感知模块会不会最终被 VLM 的视觉编码器\u0026quot;吸收\u0026quot;——变成统一的端到端模型？\n这个可能性不能说没有，但有几个根本性障碍：\n障碍 1：训练数据的模态鸿沟 VLM 的视觉编码器是在 2D 图像上预训练的（ImageNet 分类、CLIP 对比学习、SigLIP 等）。它学到的表征是2D 语义空间中的分布。\n感知模块需要的是3D 度量空间中的精确表征。要把 ViT 的表征空间从 2D 语义转移到 3D 度量，需要：\n大规模 3D 标注数据（检测框、深度图、占用网格） 多传感器数据（相机 + LiDAR + Radar 联合训练） 度量级别的监督信号 目前没有任何一个 VLM 预训练数据包含这个级别的 3D 监督。即使以后的预训练数据包含更多 3D 信息，其占比也不可能超过 2D 数据（因为 2D 图像的获取成本比 3D 标注低了几个数量级）。\n障碍 2：度量精度和模型容量之间的张力 假设我们真的训练了一个超大的视觉编码器，同时学会了 2D 语义和 3D 度量。一个根本问题依然存在：模型的输出空间中，\u0026ldquo;语义\u0026quot;和\u0026quot;度量\u0026quot;两种信息的表示成本不同。\n语义信息可以压缩（\u0026ldquo;这是一辆红色的车\u0026quot;只需要几个 token） 度量信息不能压缩（\u0026quot;(x=10.53, y=2.17, θ=23°, v=5.2)\u0026ldquo;需要高精度数值表示） 如果用一个统一的 token 空间同时表示这两种信息，token 的数量和精度要求会被度量信息主导。这让模型的推理效率严重下降——因为大部分 token 都在做\u0026quot;精确位置编码\u0026quot;这个感知模块本来就能高效完成的事。\n障碍 3：安全验证和模块化带来的工程优势 这是工程实践中最关键的一点：分解的模块更容易验证。\n感知模块可以单独验证：3D 检测精度（mAP、NDS）、占用召回率 规划器可以单独验证：碰撞率、舒适性指标 VLM 可以单独验证：场景理解准确率、推理链质量 如果合成了一个端到端模型，你只能验证最终输出（轨迹质量），找不到哪一步出了问题。在 safety-critical 的自动驾驶系统中，这种\u0026quot;黑盒可验证性\u0026quot;是不可接受的。\n所以结论是？ 短期（2026-2028）：感知和 VLA 继续深度融合，但感知保持独立模块。 中期（2028-2030）：可能出现\u0026quot;感知原生\u0026quot;的视觉编码器（在 3D 数据上预训练的 ViT），感知模块从独立变成一个内部的子网络。 长期（2030+）：如果出现全新的视觉编码范式（比如原生 3D tokenizer + 因果预测预训练），感知可能被完整吸收进 VLA 的统一架构中。\n但即使在最激进的长期愿景中，感知代表的功能（精确 3D 度量）不会被消除——只会被重新分配到模型的不同层。 驾驶的安全要求不会因为架构变化而降低。\n一张图总结 感知模块给 VLA 提供了\u0026quot;精确的 3D 骨骼\u0026rdquo;，VLM 给感知模块提供了\u0026quot;丰富的语义血肉\u0026rdquo;。把它们结合起来，自动驾驶系统才有了真正的驾驶能力。\n个人想法 我一直在想一个问题：为什么会有\u0026quot;VLM 替代感知\u0026quot;这种直觉？\n可能因为\u0026quot;认知\u0026quot;和\u0026quot;度量\u0026quot;在人类的感知中是合一的。我们人类看世界，不会刻意区分\u0026quot;我在做语义理解\u0026quot;和\u0026quot;我在做深度感知\u0026rdquo;——大脑的视觉皮层同时完成这两件事。所以我们会自然地觉得：\u0026ldquo;我看得懂画面，那我就知道距离和速度。\u0026rdquo;\n但机器的视觉编码器（ViT）和大规模预训练 VLM 没有经历人类的视觉发育过程。人类视觉皮层在成长中通过双眼视差、运动视差、触觉反馈学会了 3D 感知。ViT 只是在 2D 图像上做对比学习/掩码重建——它从来没有真正\u0026quot;看到\u0026quot;过 3D 世界。\n更有意思的是：即使人类的视觉系统，在缺乏深度线索的单张图像上也会犯错。你可以做一个简单的实验：拿一张照片，闭上一只眼，试着判断画面中物体的绝对距离。你会发现非常困难。人类是通过双眼视差 + 运动视差 + 先验知识来感知深度的，单张固定视角的图像本身就不够。\nVLM 面临的是同样的问题。\n这解释了为什么直到 2026 年，所有成功的工作都在做融合而不是替代。\n最近这一批论文精读又让我想得更深了一层。以前我以为答案是\u0026quot;感知 + VLM 融合\u0026quot;，现在我觉得更准确的表述是：感知不会消失，但感知的形式会不断演化。\n回看 2026 年：DriveVLA-M0 把感知改造成\u0026quot;检索键\u0026quot;，BrainWAM 把感知和语义\u0026quot;分居\u0026quot;，Percept-WAM 把感知\u0026quot;长进\u0026quot;VLM，SimWAM 把感知\u0026quot;退居训练期\u0026quot;，Last-VLA 把感知\u0026quot;蒸馏进权重\u0026quot;，ST4VLA 把感知变成\u0026quot;预训练课程\u0026quot;……感知模块作为\u0026quot;一个独立的东西\u0026quot;在 2026 年已经不那么常见了，但感知承担的功能——把 2D 像素还原成 3D 结构——从未缺席。它只是换了六种姿势存在。\n这让我想到一个类比：就像\u0026quot;特征工程\u0026quot;在深度学习早期非常重要，后来被表示学习吸收。感知模块很可能也在被 VLA 一步步\u0026quot;吸收\u0026quot;——但吸收的是实现形式，不是功能。 而功能之所以不能被吸收，是因为驾驶的物理约束（厘米级精度、毫秒级响应、可验证的安全）不会因为模型变大而放松。\n所以我的最终结论是：别再问\u0026quot;VLM 能不能替代感知\u0026quot;，改问\u0026quot;感知以什么形态存在于 VLA 里\u0026quot;——这个问题的答案，正是 2026 年每一篇论文精读的实质。\n可能未来的某一天，某个下一代视觉编码器（原生 3D tokenizer？视频因果预测预训练？）会同时学会度量和语义。但现在的 ViT + CLIP/SigLIP 范式做不到。在做到之前，感知模块和 VLM 就是自动驾驶的两条腿——缺一条能走，但瘸。\n","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/vla-vs-perception/","summary":"VLA（Vision-Language-Action）模型自带 ViT 视觉编码器，为什么自动驾驶还需要 3D 检测、BEV 感知、占用网络这些传统感知模块？它们之间到底是替代关系还是互补关系？本文从 14 篇论文精读出发，盘点感知与 VLM 的十种协同模式，详解有 BEV 与无 BEV 感知的实现方法，并解释为什么只有 2D 相机、没有显式 BEV/occ 的模型也能表现不错——关键在于区分\u0026rsquo;感知任务\u0026rsquo;与\u0026rsquo;显式感知表示\u0026rsquo;。","title":"个人思考｜VLA 都有了视觉编码器，为什么还需要感知模块？"},{"content":"感知到底是什么？ 如果你开过带辅助驾驶的车，你可能听过\u0026quot;感知\u0026quot;这个词。但感知到底在做什么？\n用一个类比：感知就是给自动驾驶系统画一张\u0026quot;上帝视角的地图\u0026quot;。\n想象你坐在驾驶位，你的眼睛在看什么？\n前面那辆车离我多远、开多快 车道线在哪、是虚线还是实线 路边有没有行人要过马路 路面上有没有坑洼或障碍物 感知模块的任务，就是把摄像头、激光雷达、毫米波雷达的原始数据，变成结构化的场景描述——告诉规划模块\u0026quot;哪里能走、哪里不能走、周围的东西都在哪、它们要去哪\u0026quot;。\n这篇文章会从传感器讲起，一路走到2026年最新的占用网络，把感知模块的每一层说清楚。\n第一层：传感器——自动驾驶的\u0026quot;感官\u0026quot; 感知的起点是传感器。每类传感器各有优缺点，现代自动驾驶系统通常用多传感器融合来取长补短。\n摄像头（Camera） 摄像头是信息最丰富的传感器。它提供纹理、颜色、语义信息——能看出\u0026quot;那是个红色车\u0026quot;、\u0026ldquo;那个标志是限速60\u0026rdquo;。但摄像头有一个根本缺陷：单目图像没有深度信息。一个像素可能对应近处的小物体，也可能对应远处的大物体。\n典型配置：6-12 个摄像头环视部署，前向主摄像头可达 8MP 分辨率。Tesla 是纯视觉路线的代表，FSD HW4.0 用了 11 个摄像头。\n激光雷达（LiDAR） 激光雷达直接测量 3D 点云——每个点都有精确的 (x, y, z) 坐标。它的优势是深度精确、不受光照影响，缺点是成本高、在雨雪天气性能下降。\n2025-2026 年，激光雷达成本从 5000 美元降到约 2800 元人民币，让更多车型用上了 LiDAR。代表产品：禾赛 AT1440（1550nm，600m 探测）、速腾聚创 EM4（MEMS，499 美元）。\n毫米波雷达（Radar） 毫米波雷达的优势在于直接测量速度（多普勒效应）和恶劣天气鲁棒。传统雷达分辨率低、无法识别物体形状。4D 成像雷达（2024-2026 年成熟）通过 MIMO 阵列提升到 0.1° 角分辨率，可以构建带高度信息的 4D 环境模型。\n传感器融合 三种传感器互补：\n条件 摄像头 LiDAR 雷达 白天正常 优秀 优秀 一般 夜间 差 优秀 良好 暴雨 差 下降58% 良好(下降12%) 浓雾 极差 下降83% 良好(下降9%) 多传感器融合的核心挑战是时空对齐：把不同坐标系、不同频率的数据统一到同一个时空参考系。BEVFusion（NeurIPS 2022）是标志性工作，在 BEV 空间融合相机和 LiDAR 特征。\n第二层：3D 目标检测——\u0026ldquo;有什么、在哪、多大\u0026rdquo; 感知最基础的任务是 3D 目标检测：从传感器数据中找出车辆、行人、骑行者等交通参与者，输出它们的 3D 边界框。\n点云检测（LiDAR-only） LiDAR 点云的处理方法经历了三代演进：\nVoxel-based（体素法）： VoxelNet（2018）把空间划分为 3D 体素网格，每个体素内用 PointNet 提取特征，然后用 3D 卷积处理。精度高但计算量巨大。SECOND（2018）引入稀疏卷积大幅加速。\nPillar-based（柱体法）： PointPillars（2019）是工程实践的里程碑。它把点云在 xy 平面划分为 pillar（柱子），z 轴信息编码到特征通道中。核心洞察是\u0026quot;牺牲不太重要的 z 轴分辨率，换回 2D 卷积的效率\u0026quot;。PointPillars 在 KITTI 上达到 62Hz，比 VoxelNet 快 10 倍以上，至今仍是工程标配。\nPoint-based（点级法）： PointRCNN、3DSSD 直接在原始点云上操作，精度最高但速度慢。后续的 PV-RCNN 系列尝试结合 point-based 和 voxel-based 的优点。\n纯视觉检测（Camera-only） 纯视觉方案不做 LiDAR，从图像中推理 3D 信息。核心挑战是单目深度模糊——一个 2D 像素可以对应 3D 空间中一条射线上的任意点。\n早期的 FCOS3D（2021）在 2D 检测器上加一个深度回归分支。DETR3D（2021）用 Transformer query 做端到端 3D 检测，摆脱了 NMS 后处理。PETR（2022）把 3D 坐标编码到位置 embedding 中。\n纯视觉的核心优势是成本低，核心劣势是深度不准。2026 年，纯视觉+BEV+时序的方案已经可以接近 LiDAR 方案的表现。\n多模态融合检测 融合相机和 LiDAR 是量产方案的主流。融合策略有三代：\n结果级融合：各自检测，再 NMS 合并。简单但有信息损失。 点级融合：把图像特征投影到点云上做融合，如 F-PointNet、MV3D。 BEV 级融合：在 BEV 空间融合两种模态特征，如 BEVFusion、TransFusion。这是当前最优方案——不同模态在同一个坐标系下互补。 检测输出 每个被检测到的目标输出一个结构化向量：\n字段 含义 示例 ID 目标唯一编号 0, 1, 2, \u0026hellip; 类别 语义分类 car, pedestrian, cyclist x, y, z 3D 中心位置（米） 10.5, 2.3, 0.0 w, l, h 3D 尺寸（米） 1.8, 4.5, 1.5 yaw 朝向角（弧度） 0.52 vx, vy 速度（m/s） 5.0, 0.0 confidence 置信度 0.95 常用数据集和指标：KITTI（mAP）、nuScenes（NDS）、Waymo Open Dataset（mAP/mAPH）。\n第三层：BEV 感知——统一鸟瞰图 传统方法在图像上做检测，再投影到 3D 空间。但多相机投影后的坐标可能不一致、融合困难。BEV（Bird\u0026rsquo;s Eye View）感知解决了这个问题——直接在统一的鸟瞰图坐标系中做感知。\nLSS：开山之作 Lift-Splat-Shoot（ECCV 2020, NVIDIA）是 BEV 感知的奠基工作。它分三步：\nLift（抬升）： 对每张图像每个像素预测一个深度分布（不是单点深度），形成一个锥形点云（frustum）。 Splat（溅射）： 把所有相机的 frustum 点云根据内外参投影到 BEV 栅格，累积池化。 Shoot（射击）： 在 BEV cost map 上\u0026quot;射击\u0026quot;模板轨迹，选成本最低的执行。 LSS 的精妙之处在于：不要求精确深度，而是让模型自己学深度分布。模糊的物体均匀散布特征，清晰的物体集中在准确的深度上。\nBEVFormer：Transformer 时代 BEVFormer（ECCV 2022）引入可学习的 BEV query。每个 BEV grid cell 有一个 query，通过 Cross-Attention 从多相机图像中聚合特征，再用 Temporal Self-Attention 融合历史帧的 BEV 特征。\nBEVFormer 的核心优势：\n显式建模时序信息（对运动估计至关重要） BEV query 解耦了图像分辨率和 BEV 分辨率 单 BEV 特征支持多任务（检测、分割、地图构建） 后续的 BEVFormer v2、BEVDet、M2BEV 等改进了速度、稀疏化和多任务效果。\nBEV 多任务输出 同一张 BEV 特征图可以接多个任务头：\n3D 目标检测头 车道线/路网分割头（HDMapNet） 可行驶区域分割头 速度估计头 第四层：3D 占用网络——\u0026ldquo;不需要知道是什么，知道有东西就行\u0026rdquo; Bounding Box 有一个根本缺陷：只能表示预定义类别的标准物体。掉落的树枝、施工锥桶、侧翻的卡车——这些都不符合\u0026quot;car\u0026quot;或\u0026quot;pedestrian\u0026quot;的典型形状，但都是危险障碍物。\n占用网络（Occupancy Network）换了一种思路：不检测物体，检测空间。 它把周围空间划分为 3D 体素栅格，对每个体素预测\u0026quot;是否被占用\u0026quot;以及\u0026quot;被什么类型的物体占用\u0026quot;。\n占用网络的演进 OccNet（ICCV 2023）： 定义 3D 占用感知任务，发布 Occ3D 数据集 PanoOcc（CVPR 2024）： 统一全景分割和占用预测 Cam4DOcc（CVPR 2024）： 纯视觉 4D 占用预测（含时序） UnO（CVPR 2024, Oral）： 自监督占用场，无需 3D 标签 OccWorld（ECCV 2024）： 占用世界模型，预测未来占用变化 BEV vs 占用 维度 BEV 占用网络 空间维度 2D (x, y) 3D (x, y, z) 高度信息 丢失 保留 非标准物体 无法描述 可描述 算力需求 低 高 2026 趋势 逐渐被占用取代 成为感知新范式 InfoFusion 2025 年综述指出：\u0026ldquo;3D 占用感知正在成为自动驾驶感知系统的新趋势，捕获了 BEV 忽略的垂直结构。\u0026rdquo;\n第五层：语义分割 + 车道线检测 除了检测物体，感知还要理解道路结构。\n可行驶区域分割 把图像或 BEV 中的每个像素/格子分为\u0026quot;能走/不能走\u0026quot;。这是规划器最重要的输入之一——规划器只在 free space 内生成轨迹。\n代表工作：SegFormer（2021，层级 Transformer 编码）、PIDNet（2023，实时语义分割）。\n车道线检测 检测车道线的位置、类型（虚线/实线/双线/黄色/白色）、曲率。输出给预测模块做意图推理——\u0026ldquo;这辆车在车道线内，但它在虚线区域打了转向灯，可能要变道\u0026rdquo;。\n代表工作：LaneNet（2018，实例分割式车道检测）、UFLD（2020，超快速车道检测）。\n2025-2026 年趋势：用 transformer 或 CNN 直接从 BEV 做端到端车道线检测，规避图像投影的误差。\n第六层：多目标跟踪 + 状态估计 单帧检测只能告诉你\u0026quot;现在有什么\u0026quot;，但规划需要知道\u0026quot;这辆车过去 3 秒在怎么运动\u0026quot;。\nTracking-by-Detection 最常见的范式中，检测器每帧输出检测框，跟踪器把相邻帧的框关联起来：\n用 Kalman Filter 预测每个轨迹在当前帧的位置 用 IoU 或 ReID 特征匹配检测和轨迹 用匈牙利算法做最优分配 代表工作：SORT（2016，纯运动模型+IoU匹配，260Hz）、DeepSORT（2017，+ReID外观特征）、ByteTrack（2022，高低分框分治）。\n状态估计 跟踪给每个目标分配稳定 ID 后，可以做更精确的运动估计：\nKalman Filter 平滑速度估计 交互模型预测意图（变道/直行/转弯） 未来轨迹预测（MultiPath++、Wayformer） 这些信息输入到行为预测模块，规划器据此生成安全轨迹。\n感知的输出：传给下游的是什么？ 经过以上六层处理后，感知模块的输出可以概括为：\n输出项 格式 说明 3D 目标列表 [{ID, class, x, y, z, w, l, h, yaw, vx, vy, conf}] x N 个目标 每个交通参与者的完整状态 可行驶区域 BEV grid {free, occupied} x H x W 告诉规划器哪里能走 车道线结构 [{line_type, curve_params}] x M 条车道 车道拓扑和线型 3D 占用 occupancy_grid x X x Y x Z 体素级占用和语义 跟踪轨迹 [{ID, history, velocity, intent}] x N 带 ID 的稳定轨迹 这些结构化的数据传给预测模块做交互推理，再传给规划模块做轨迹生成。\n关键论文速览 检测与感知 PointPillars (CVPR 2019) — 奠基性的 pillar 式点云检测，62Hz VoxelNet (CVPR 2018) — 端到端体素检测 SECOND (2018) — 稀疏卷积加速体素检测 LSS (ECCV 2020) — BEV 感知开山之作，深度分布隐式建模 BEVFormer (ECCV 2022) — Transformer-based BEV，显式时序建模 DETR3D (CoRL 2021) — 端到端 3D 检测，不依赖 NMS BEVFusion (NeurIPS 2022) — 多模态 BEV 级融合 占用网络 OccNet (ICCV 2023) — 定义 3D 占用感知任务 PanoOcc (CVPR 2024) — 统一全景分割和占用 Cam4DOcc (CVPR 2024) — 纯视觉 4D 占用预测 OccWorld (ECCV 2024) — 占用世界模型 UnO (CVPR 2024 Oral) — 自监督占用场 分割与跟踪 SegFormer (NeurIPS 2021) — 层级 Transformer 分割 PIDNet (CVPR 2023) — 实时语义分割 SORT / DeepSORT (2016/2017) — Tracking-by-detection 经典 ByteTrack (ECCV 2022) — 高低分框分治跟踪 综述 3D Object Detection Survey (IEEE T-ITS 2019) — 最早的系统性 3D 检测综述 BEV Perception Survey (IEEE T-PAMI 2023) — BEV 感知全景 Occupancy Perception Survey (InfoFusion 2025) — 3D 占用感知综述 复杂场景感知综述 (中国公路学报 2026) — 高阶自动驾驶感知关键技术 感知技术的演进脉络 时期 主流范式 代表工作 2017-2019 2D检测+后处理 VoxelNet, PointPillars, SECOND, Frustum PointNet 2020-2022 BEV感知兴起 LSS, BEVFormer, BEVFusion, DETR3D, PETR 2023-2024 占用网络崛起 OccNet, PanoOcc, Cam4DOcc, OccWorld, UnO 2025-2026 感知统一化 SparseOccVLA, OccVLA, HENet++, UniSparseBEV 每条技术路线不是替代关系，而是适用于不同的工业化阶段和成本约束。PointPillars 到今天仍然是最好的工程选择之一，BEV 是 2022-2025 的主流，占用是 2024 开始兴起的新范式。\n最后 感知不是自动驾驶的全部——它只是第一环。但如果你不理解感知输出了什么，你就无法理解预测和规划为什么那样工作。\n核心记住一句话：感知的目标不是\u0026quot;看得全\u0026quot;，而是\u0026quot;看得懂\u0026quot;。把物理世界的原始传感器数据，翻译成规划器能直接使用的结构化场景描述。\n📖 本文基于对自动驾驶感知领域 30+ 篇论文和 10+ 份技术综述的调研。\n","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/autonomous-driving-perception-guide/","summary":"一篇全景式讲解自动驾驶感知模块的技术文章。从传感器硬件讲起，覆盖3D目标检测、BEV感知、占用网络、语义分割、多目标跟踪，以及它们如何输出给下游的预测和规划模块。附完整感知流水线图。","title":"个人思考｜自动驾驶感知模块全景：从传感器到BEV再到占用网络，到底在感知什么"},{"content":"📍 为什么需要这份指南 2026 年的自动驾驶技术已经不再是\u0026quot;模块化 vs 端到端\u0026quot;的二元争论。VLA、世界模型、Scoring-based 规划、JEPA、Flow-GRPO……新技术范式在短短两年内集中爆发，每一条路线都有自己完整的论文谱系、工程实践和社区生态。\n对从业者来说，问题已经不是\u0026quot;该学什么\u0026quot;，而是**\u0026ldquo;太多东西要学，不知道该从哪里入手\u0026rdquo;**。\n这份指南的目标不是替代已有的知识点拆解文章（博客里每篇都写得很细了），而是提供一份导航地图——告诉你每个知识点在整体图景中的位置、它依赖什么前置知识、它能通向什么前沿方向。\n🧱 第一层：基础基石 这些是理解所有上层范式的前置知识，绕不过去。\n1.1 Transformer 与注意力机制 这是所有现代自动驾驶模型的底层构件。从 UniAD 到 VLA 到世界模型，无一例外。\n必须搞懂的核心概念：\nScaled Dot-Product Attention 的计算流程 Cross-Attention 在模态融合中的作用（图像 token 作为 Query，场景 token 作为 Key/Value） KV-Cache 加速推理的原理 Positional Encoding（绝对位置 vs RoPE vs ALiBi） 博客文章：Transformer与注意力机制详解\n自测：能写出 Cross-Attention 的前向代码，并解释 $O(n^2)$ 复杂度从哪来。\n1.2 BEV 感知 BEV（Bird\u0026rsquo;s Eye View）是 2022-2025 年自动驾驶感知的事实标准。即使最新的稀疏化方案（SparseDrive）也在师承 BEV 的思想。\n必须搞懂的核心概念：\nLSS（Lift-Splat-Shoot）视角变换 Transformer-based BEV 融合（BEVFormer 的 Temporal Self-Attention） BEV 特征 vs 稀疏 query 的 trade-off 博客文章：BEV感知技术详解\n自测：能解释\u0026quot;为什么 BEV 特征比图像特征更适合做规划输入\u0026quot;。\n1.3 扩散模型与 Flow Matching 生成式范式（VLA 的动作头、世界模型的视频生成、Scoring 的候选采样）全部建立在这两个技术上。\n必须搞懂的核心概念：\nDDPM 的前向加噪和反向去噪过程 Flow Matching 的直线轨迹 vs 扩散的弯曲轨迹 Classifier-Free Guidance（CFG）的原理 ODE vs SDE 采样 博客文章：扩散模型基础详解 + Flow-Matching入门详解\n自测：能数学上写出 Flow Matching 的条件向量场损失函数。\n1.4 强化学习基础 从 Flow-GRPO 到 DiffGRPO 到 Dreamer V3，RL 正在渗透自动驾驶的每一个角落。\n必须搞懂的核心概念：\nPolicy Gradient 定理和 REINFORCE 算法 PPO 的 clipped objective 和 advantage 估计 On-policy vs Off-policy 的核心差异 GRPO 的组内优势计算（不需要 critic） 博客文章：强化学习基础详解 + GRPO强化学习方法详解\n自测：能推导 PPO 的 ratio 公式，并解释为什么 GRPO 不需要 critic。\n1.5 VLM 与视觉语言对齐 VLA 的基础——如果不理解 VLM，就无法理解 VLA。\n必须搞懂的核心概念：\nCLIP 的对比学习目标和双塔架构 LLaVA 的视觉投影层和指令微调范式 多模态 token 拼接和自回归生成 博客文章：VLM视觉语言模型入门详解\n1.6 评测体系 没有评测就没有进步。NAVSIM、nuScenes、Bench2Drive 的指标设计直接影响方法论走向。\n必须搞懂的核心概念：\n开环（Open-Loop）vs 闭环（Closed-Loop）的根本区别 PDMS 的五维指标：NC(碰撞) × DAC(可行驶区域) × (5TTC + 2C + 5EP)/12 EPDMS 的扩展：新增 DDC(方向)/TL(红绿灯)/LK(车道保持)/EC(扩展舒适) Bench2Drive 的 Driving Score 和 Success Rate 博客文章：NAVSIM基准详解 + 开环评测vs闭环评测深度解析\n🏛️ 第二层：六大核心范式 范式一：端到端自动驾驶（E2E） 一句话定位：用一个大网络打通传感器到控制，消除模块间信息损失。\n发展脉络：\n从 2016 年 NVIDIA PilotNet 的\u0026quot;单目图像→方向盘\u0026quot;的直接回归开始，E2E 经历了三个阶段的演进：\n隐式 E2E（2016-2022）：CNN 直接回归控制量，黑盒、难训练、效果不稳定。代表：PilotNet、Conditional Affordance Learning、Learning by Cheating。\n显式 E2E（2023-2024）：网络内部保留感知/预测/规划的任务结构，但梯度贯通联合优化。UniAD（CVPR 2023 Best Paper）是开山之作。VAD 实现了向量化效率革命。SparseDrive 把稀疏化做到极致。\n生成式 E2E（2024-2026）：引入扩散模型做多模态轨迹生成。DiffusionDrive 用 Flow Matching 替代确定性回归，DiffusionDrive V2 引入 RL 约束增强安全性。\n关键论文序列：\nU → n i D A i D f ( f 2 u 0 s 2 i 3 o ) n D → r i V v A e D ( V 2 2 0 ( 2 2 4 0 ) 2 5 → ) S → p a S r p s a e r D s r e i D v r e i ( v 2 e 0 V 2 2 5 ( ) 2 0 → 2 6 D ) i f f u s i o n D r i v e ( 2 0 2 5 ) 与其他范式的关系：\nE2E → 进化出 VLA（加入 LLM 推理能力） E2E → 需要 World Model 提供数据增强和闭环训练环境 E2E × Scoring = SparseDriveV2（生成候选 + 评分选优） 推荐博客文章：端到端自动驾驶演进 + VAD向量化端到端精读\n范式二：VLA（Vision-Language-Action） 一句话定位：给 E2E 装上 LLM 的\u0026quot;脑子\u0026quot;，让系统边推理边开车。\n发展脉络：\nVLA 经历了动作表征的三代演进：\nG1 离散 Token（2023-2024）：RT-2 把动作离散化成 256 个 bin 当作文字生成。精度受限于量化误差，但证明了\u0026quot;VLM 可以直接输出动作\u0026quot;的可行性。\nG2 扩散/Flow Matching（2024-2025）：π0 用 Flow Matching 替代离散 tokenization，10 步采样即达 30Hz 控制频率。Octo 开源了扩散策略标杆。\nG3 CoT 推理（2025-2026）：GR-3 引入 Chain-of-Thought 推理（\u0026ldquo;看到行人→判断意图→规划制动→输出动作\u0026rdquo;），碰撞率降低 45%。EPM 把规划显式嵌入 token 生成过程。BridgeVLA 用\u0026quot;桥接监督\u0026quot;弥合预训练和微调之间的 gap。\n动作头的三角权衡：\n方案 精度 速度 多模态支持 代表 离散 Token 中（量化误差） 慢（自回归） 弱 RT-2, OpenVLA 连续回归 中（mode averaging） 快 弱 早期 SFT 头 扩散/Flow Matching 高 中（可优化） 强 π0, Octo, DiffusionDrive 三阶段训练管线：\nV L M 预 训 练 ( 图 文 对 齐 ) → S F T ( 图 + 指 令 + 动 作 ) → R L H F / G R P O ( 偏 好 对 齐 ) 2026 年最新进展：\nVLA-World（CVPR 2026）：统一 VLA 预测想象与反思推理——用动作引导未来帧生成，再用 GRPO 优化。 Orion：端到端 VLA，语言指令直接驱动轨迹生成。 OpenDriveVLA：开源 VLA 驾驶模型，在 nuScenes 上 SOTA。 推荐博客文章：什么是VLA模型 + 前沿VLA模型全景速览\n范式三：世界模型（World Model） 一句话定位：学会\u0026quot;世界怎么运作\u0026quot;，在脑子里预演未来。\n三大预测空间：\n空间 信息密度 优点 缺点 代表 像素空间 最高 可可视化、数据增强 计算量大、不保证物理一致 GAIA-1, Cosmos 潜在空间 中 计算高效、可服务规划 不可直接可视化 World4Drive, ReWorld 占用空间 低（语义级） 显式碰撞检测 无纹理细节 OccWorld, NIFF 三大应用场景：\n数据增强：生成训练集中稀缺的组合场景（如夜间暴雨+行人横穿）。代表：DriveDreamer、MagicDrive。\n闭环仿真：根据自车动作实时生成下一帧，实现互动式训练。代表：Vista（DiT 骨干 + 动作条件）。\nModel-based Planning：在推演中选最优轨迹。代表：Drive-WM（世界模型+MPPI）、ReWorld（重建误差即 reward）。\n与其他范式的关系：\nWorld Model → 为 VLA 提供\u0026quot;想象力\u0026quot;（VLA-World 路线） World Model → 为 E2E 提供训练数据和闭环仿真环境 World Model × JEPA = 表征式世界模型（在隐空间预测，不重建像素） 推荐博客文章：什么是世界模型 + 驾驶世界模型全景详解\n范式四：Scoring-based 规划 一句话定位：生成多个候选轨迹，学一个评分器选最好的。判别比生成更可靠。\n三大范式对比：\n范式 核心思路 优点 缺点 代表 Vocabulary-based 预定义轨迹模式库 推理快、可解释 覆盖有限 VADv2, Hydra-MDP Dynamic Generation CEM 自适应采样 覆盖任意轨迹 推理慢 TOAD, DrivoR Diffusion-based 扩散生成多样性候选 质量高、模式多 多步采样慢 DiffusionDrive SparseDriveV2 的关键突破（2026.03）：\n清华 + 地平线证明了一个反直觉的结论：\u0026ldquo;Scoring is All You Need\u0026rdquo;——只要词汇表够大、评分器够好，静态词汇表可以匹敌甚至超越动态生成方法。\n因子化词汇表：1024 路径 × 256 速度 = 262,144 候选 层级评分：coarse scorer 粗筛 top-128×top-64 → fine scorer 精评 400 条 ResNet-34 轻量骨干，NAVSIM PDMS 92.0，Bench2Drive DS 89.15 Scorer 损失函数：PDM label（开环 approach）→ Cycle Energy（自监督 approach，JEPA-DRIVE）\n推荐博客文章：Scoring-based规划范式详解\n范式五：JEPA（联合嵌入预测架构） 一句话定位：在隐空间做预测，不碰像素。让模型学\u0026quot;会发生什么\u0026quot;，而非\u0026quot;画得像什么\u0026quot;。\n核心三件套：\n组件 作用 参数更新 Context Encoder 编码已知信息到隐空间 梯度下降 Target Encoder 编码待预测目标作为答案 EMA（动量更新）+ stop-gradient Predictor 从已知预测未知的隐空间表征 梯度下降 为什么在隐空间预测？\n传统方法（MAE/Diffusion）在像素空间预测，模型可以作弊——用周围像素颜色模糊填充，不需要理解\u0026quot;被遮的是什么\u0026quot;。JEPA 把预测搬到隐空间，天然丢弃了像素级纹理细节，迫使模型理解语义。\n演进路线：\nI - J E P A ( 2 0 2 3 , 图 像 ) → V - J E P A ( 2 0 2 4 , 视 频 ) → V - J E P A 2 ( D J 2 R E 0 I P 2 V A 5 E - , - D 世 J R 界 E I 模 ↓ P V 型 A E ) ( ( 2 2 0 0 2 2 6 6 , , 驾 自 驶 监 特 督 征 评 提 分 取 ) ) 两个自动驾驶 JEPA 路线的区别：\n维度 DRIVE-JEPA（XPENG） JEPA-DRIVE（我们的项目） JEPA 角色 视觉编码器（特征提取） 世界模型 + 自监督评分信号 决策范式 端到端模仿学习 推演式决策（生成+评分+选择） 评分信号 PDM 标签 Cycle Energy 自监督 参数量 ~300M+ 3.88M 推荐博客文章：JEPA联合嵌入预测架构详解\n范式六：RL + 生成式规划 一句话定位：用强化学习优化生成式策略，让模型超越\u0026quot;模仿人类\u0026quot;的上限。\n为什么需要 RL？\n模仿学习（Behavior Cloning）有三个根本局限：\n分布偏移：模型自己输出偏离训练数据时，没有信号拉回来 无法超越专家：上限就是训练数据的水平 目标不可微：碰撞率、舒适性无法写成监督标签 RL 的解法：优化\u0026quot;结果好不好\u0026quot;，不是\u0026quot;像不像数据\u0026quot;。\n四大范式谱系：\n范式 方法 代表 1️⃣ Reward Guidance 推理时用奖励梯度引导采样 Diffusion Planning 2️⃣ Rejection Sampling 生成 N 条候选，挑最好的训练 TrajRL, RGT 3️⃣ Policy Gradient 通过 log-prob 把奖励反馈到生成网络 Flow-GRPO, DiffGRPO 4️⃣ World Model RL 在世界模型的\u0026quot;想象\u0026quot;中训练策略 Dreamer V3, Drive-WM Flow-GRPO 的核心改造：\n把 GRPO 从离散 token（语言模型）迁移到连续去噪（Flow Matching），需要三个关键改造：\n去噪转移 = action：从 $x_t$ 到 $x_{t-1}$ 的 latent 转移作为 RL 的 action ODE → SDE：纯 ODE 确定性的，没有概率密度就写不出 log-prob。注入随机性：$x_{t-1} = \\mu(x_t, t) + \\sigma \\cdot \\epsilon$ 终点 reward 广播：最终结果的 reward 复制到每个去噪步的 log-prob ratio 上 加速技巧：Flow-GRPO-Fast 只训练 1-2 个窗口步，速度数倍提升；GRPO-Guard 用 RatioNorm + Gradient Reweight 防过优化。\n推荐博客文章：Flow-GRPO详解 + PPO算法深度拆解\n🔗 第三层：范式间的联系 这六大范式不是孤立的，它们之间有依赖、进化、互补三重关系。\n依赖关系 T 扩 R r 散 L a / ( n F P s l o f o l o w i r c m M y e a r t G / c r A h a t i d t n i e g e n n t ─ t i ─ ) o ─ n ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┬ ─ ─ ─ ─ ─ ─ ─ ─ ─ ├ ├ └ ┬ ┬ ├ ├ ├ └ ─ ─ ─ ─ ─ ├ ├ └ ─ ─ ─ ─ ─ → ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ V ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ L → → → → ─ ─ ─ → → → → → A → → → ( W S R F E V W S J 动 o c L l D D S 2 L o c E 作 r o ( o i r c E A r o P 头 l r F w f e o ( ( l r A : d i l - f a r U L d i ( n o G G m i n L n V π M g w R R e n i M M g i 0 ( - P P r g A o ( T d 扩 G O O ( D b d S b e 散 R ( ( V R / a e c b r l 候 P 流 扩 3 L V c l o a i ( 选 O 匹 散 ( A k ( r c d 视 采 配 策 世 f D b D e k g 频 样 的 策 略 界 i ) o i N b e 生 ) 去 略 优 模 n n T e o V 成 噪 优 化 型 e e / t n L : 链 化 ) + - ) T e A ) ) R t r C ) ) C L u a r o ) n n o s e s s m f s o S o A s c r t / o m t V r e n i e r ) s N t e d a t e ) ) c o d e r ) 进化关系 E S J 2 c E E o E ( r P 确 i ( 定 n P 性 g D 回 ( M 归 静 监 ) 态 督 词 评 ─ 汇 分 ─ 表 ) → ) ─ V ─ ─ L ─ → A → ( J 加 S E 入 p P L a A L ↑ r ↓ - M s D 推 e R 理 D I ) r V i E ─ v ( ─ e 自 → V 监 2 督 V ( 评 L 因 分 A 子 ) + 化 W 词 o 汇 r 表 l + d 层 级 M 评 o ↑ 分 d ) e l ( 推 演 + 决 策 ) 互补关系 范式组合 解决的问题 代表工作 VLA + 世界模型 VLA 缺乏\u0026quot;预言\u0026quot;能力 VLA-World (CVPR 2026) E2E + Scoring E2E 的多模态困境 SparseDriveV2 世界模型 + RL 模仿学习上限 Dreamer V3 JEPA + Scoring PDM 标签依赖 JEPA-DRIVE Flow-GRPO + VLA 流匹配策略的 RL 优化 DiffGRPO / ReCogDrive 📄 第四层：论文时间线与关键脉络 2023 年：基础奠基 论文 范式 机构 为什么重要 I-JEPA JEPA Meta 首个 JEPA 实现，证明隐空间预测有效 UniAD E2E 清华+商汤 CVPR Best Paper，定义显式 E2E 范式 RT-2 VLA Google 首个 VLM→VLA，证明可行性 GAIA-1 WM Wayve 首个十亿参数驾驶世界模型 2024 年：范式爆发 论文 范式 机构 为什么重要 VAD E2E 华中科大 向量化效率革命 V-JEPA JEPA Meta 扩展到视频，时空掩码 π0 VLA Physical Int. Flow Matching 动作头标杆 DriveDreamer WM 上海 AI Lab 结构化条件可控生成 DriveVLM VLA 上交+蔚来 首个驾驶 VLM 思维链 OccWorld WM 上海 AI Lab 首个占用空间世界模型 VADv2 Scoring 华中科大 轨迹词汇表概念 Hydra-MDP Scoring — 多头规划器+独立评分器 DiffusionDrive E2E+Scoring 华中科大 扩散模型规划头 SparseDrive E2E 清华+地平线 稀疏化极致设计 2025 年：工程深化 论文 范式 机构 为什么重要 V-JEPA 2 JEPA Meta 自回归预测器，物理世界基础模型 V-JEPA 2-AC JEPA Meta 动作条件世界模型，零样本机器人规划 GR-3 VLA Google CoT 推理驱动，碰撞率降 45% Cosmos WM NVIDIA 2000 万小时视频预训练 SparseDriveV2 Scoring 清华+地平线 \u0026ldquo;Scoring is All You Need\u0026rdquo; Flow-GRPO RL+Gen 字节跳动 流匹配+GRPO 范式 GenAD E2E — 生成式端到端框架 2026 年：融合收敛 论文 范式组合 机构 为什么重要 DRIVE-JEPA JEPA+E2E XPENG+VT+Purdue V-JEPA 预训练+轨迹蒸馏，NAVSIM SOTA JEPA-DRIVE JEPA+Scoring 我们 Cycle Energy 自监督评分，3.88M 参数 VLA-World VLA+WM 上交+华为 CVPR 2026，统一预测想象与推理 EMMA VLA Wayve Gemini 风格多任务端到端 BridgeVLA VLA Stanford 桥接监督弥合预训练-微调 gap EPM VLA+Planning MIT 规划即推理，多步状态预测 SparseDriveV2 Scoring+E2E 清华+地平线 PDMS 92.0, Bench2Drive DS 89.15 🧭 第五层：学习路线推荐 按角色推荐 如果你是感知背景出身：\nB → E V J 感 E 知 P A → ( 表 O 征 c 式 c 世 u 界 p 模 a 型 n 的 c 另 y 一 种 N 思 e 路 t ) w o r k → S p a r s e D r i v e ( 稀 疏 化 ) → 世 界 模 型 ( 占 用 空 间 ) 如果你是规划/控制背景：\n端 → 到 端 F 演 l 进 o w → - G S R c P o O r ( i 用 n R g L - 优 b 化 a 规 s 划 e 策 d 略 规 ) 划 ( S p a r s e D r i v e V 2 精 髓 ) → V L A 动 作 头 设 计 如果你是 LLM/VLM 背景：\nV → L M V 基 L 础 A + → 世 界 V 模 L 型 A 融 训 合 练 ( 管 V 线 L ( A S - F W T o + r R l L d H ) F ) → C o T 推 理 ( G R - 3 / E P M ) 如果你是系统工程/部署背景：\n工 → 业 方 车 案 端 对 部 比 署 ( 优 F 化 S ( D 量 / 化 M K m V e - n c t a a c / h 华 e 为 a 小 c 鹏 t ) i o → n 影 c 子 h 模 u 式 n / k 数 i 据 n 飞 g 轮 ) 按时间投入推荐 1 周入门：E2E演进 + VLA基础 + 世界模型概念 + 评测体系\n1 个月系统学：以上 + VAD精读 + π0/DriveVLM精读 + Scoring范式详解\n3 个月深入：以上 + JEPA详解 + Flow-GRPO源码 + SparseDriveV2复现 + JEPA-DRIVE理解\n6 个月专家：以上 + 能梳理任意新论文的范式归属 + 能设计新范式组合方案\n📋 第六层：知识自测清单 每道题按表计分，60 分及格，80 分良好，90 分以上是专家水平。\n基础层（每题 2 分，共 20 分） 能写 Transformer 的 Cross-Attention 前向代码 能解释 BEVFormer 的 Temporal Self-Attention 作用 能对比扩散模型和 Flow Matching 的核心公式差异 能推导 PPO 的 clipped objective 能对比开环评测和闭环评测的优缺点 能解释 PDMS 指标的五维组成 能说出 CLIP 的训练目标和双塔架构 能解释 LSS 视角变换的核心步骤 能说出 GRPO 相比 PPO 的关键差异 能解释 CFG（Classifier-Free Guidance）的作用 核心层（每题 4 分，共 40 分） 能梳理端到端三代架构（隐式/显式/生成式）的演进脉络 能比较 UniAD / VAD / SparseDrive 三者的核心设计差异 能比较三种 VLA 动作头（离散/回归/扩散/Flow）的 trade-off 能说出世界模型三大预测空间及其适用场景 能对比 Scoring 三大范式（Vocabulary/Dynamic/Diffusion）的优劣 能解释 SparseDriveV2 的因子化词汇表和层级评分设计 能画出 JEPA 三件套（Context Encoder/Target Encoder/Predictor）架构 能说出 JEPA 为什么不需要数据增强（对比 SimCLR/BYOL） 能对比四种 RL+生成范式（Reward Guidance/Rejection/Policy Gradient/World Model RL） 能解释 Flow-GRPO 的三个核心改造（action=SDE/latent transition/log-prob） 进阶层（每题 5 分，共 25 分） 能对比 FSD / Momenta / 华为 ADS / 小鹏 XNGP 四家方案的核心差异 能说出 VLA-World (CVPR 2026) 的\u0026quot;预测想象+反思推理\u0026quot;具体怎么做 能对比 DRIVE-JEPA 和 JEPA-DRIVE 的 JEPA 角色差异 能解释 Cycle Energy 和 JEPA 预测误差的关系 能说出 Flow-GRPO-Fast 和 GRPO-Guard 的加速/防过优化原理 专家层（每题 5 分，共 15 分） 能用一个框架统一解释 E2E / VLA / World Model / Scoring / JEPA / RL+Gen 六个范式的关系 能判断一篇新论文属于哪个范式，并说出它解决了什么核心问题 能为一个具体问题（如\u0026quot;重卡VLA\u0026quot;）设计范式组合方案 评分对照 分数 定位 建议行动 ≤40 基础薄弱 先读博客的知识点拆解系列，打牢 Transformer/BEV/RL/VLM 基础 40-60 入门 读 E2E 演进 + VLA 详解 + 世界模型全景三篇 60-80 良好 深入 Scoring/JEPA/Flow-GRPO 三篇精读，做论文对照表 80-90 优秀 能复现关键论文思路，可指导范式选择 ≥90 专家 你在创造知识，不是在学习知识 🔮 未来趋势判断 已确认的趋势（共识级） Scoring 范式成为规划主流：SparseDriveV2 证明\u0026quot;静态词汇表+层级评分\u0026quot;可以匹敌动态生成。JEPA-DRIVE 证明评分可以自监督，不需要 PDM。\nVLA + 世界模型走向融合：VLA-World (CVPR 2026) 是标志性工作——VLA 做推理，世界模型做想象，共享骨干。\nRL 成为 Post-training 标配：Flow-GRPO → DiffGRPO → ReCogDrive，RL 正在从图像生成渗透到驾驶策略优化。\n表征式世界模型崛起：JEPA 路线证明了在隐空间预测的有效性，\u0026ldquo;不重建像素\u0026quot;正在成为世界模型的新共识。\n仍在争议的方向 像素 vs 潜在 vs 占用：三者各有适用场景，尚未出现\u0026quot;赢家通吃\u0026rdquo;。\n端到端 One-Model vs 模块化：FSD 走 one-model，其他三家走\u0026quot;端到端化模块\u0026quot;，谁最终胜出取决于安全验证体系。\n仿真数据 vs 真实数据：Tesla 走仿真为主（65%），Momenta 走真实为主。数据策略的分化在扩大。\nCoT 推理的价值：CoT 在碰撞率上提升明显（GR-3 降低 45%），但引入了\u0026quot;幻觉推理\u0026quot;的新失败模式（~1.3%）。是否值得额外延迟？\n个人判断 3.88M vs 7B 不是参数量的竞争，是范式的竞争。JEPA-DRIVE 证明：如果你改变范式（从\u0026quot;映射\u0026quot;到\u0026quot;选择\u0026quot;），小模型也能做大事。\n自监督评分是 2026 年的关键突破口。Cycle Energy（JEPA-DRIVE）和 ReWorld（重建误差即 reward）印证了同一个方向——评分信号可以从数据中自监督地产生。\n2027 年的方向是\u0026quot;三层融合\u0026quot;：VLA（推理层）+ 世界模型（推演层）+ Scoring/RL（优化层）三层融合，共享隐空间表征，形成真正像人一样开车的系统。\n📚 参考文献索引 本文依赖博客已有的系列文章体系。建议按以下顺序阅读：\n基础系列：\nTransformer与注意力机制详解 BEV感知技术详解 扩散模型基础详解 + Flow-Matching入门详解 强化学习基础详解 + GRPO强化学习方法详解 VLM视觉语言模型入门详解 核心范式系列： 6. 端到端自动驾驶演进 + VAD向量化端到端精读 7. 什么是VLA模型 + 前沿VLA模型全景速览 8. 什么是世界模型 + 驾驶世界模型全景详解 9. Scoring-based规划范式详解 10. JEPA联合嵌入预测架构详解 11. Flow-GRPO详解\n产业实践系列： 12. 主流自动驾驶方案对比（FSD/Momenta/华为/小鹏） 13. NAVSIM基准详解 + NAVSIM排行榜深度分析 14. 端到端驾驶评测指标全景\n知识库资源推荐 除了博客文章，以下知识库也值得持续关注：\n自动驾驶技术指南（GitHub Pages）— 云飞机器人实验室维护的系统性技术手册，覆盖从概述到实例的完整体系 自动驾驶之心知识星球 — 4000+ 成员的自动驾驶学习社区，整合近 40+ 方向的技术栈学习路线 自动驾驶全栈学习路线汇总（CSDN）— 13 个主流方向的学习资料和论文清单 53AI 知识库 (53ai.com) — 大模型与AI应用知识库，含自动驾驶行业应用实践 技术栈社区 (jishuzhan.net) — 自动驾驶领域热点简报，追踪政策和产业动态 KnowVal 驾驶知识图谱 (CVPR 2026) — 融合交规、防御性驾驶规范的知识增强驾驶系统 📖 本文是对博客已有知识体系的一次全景梳理与路线图绘制。如果你能答出 80/100 分自测题，说明你已经掌握了 2026 年自动驾驶技术的核心知识；如果你能答出 90+，你就是这个领域的专家。\n知识库资源将持续更新，建议定期查阅上述链接获取最新内容。\n","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/autonomous-driving-learning-guide/","summary":"一份面向自动驾驶从业者的全景式学习指南。系统梳理六大技术范式（端到端E2E、VLA、世界模型、Scoring规划、JEPA、RL+生成）的核心概念、代表工作、联系脉络和知识依赖。附自测清单和推荐阅读路线，帮助你定位自己的知识短板。","title":"个人思考｜自动驾驶技术全景学习指南：从基础到前沿的六范式知识体系"},{"content":"1. JEPA 架构：世界模型的底层范式革命 1.1 起源：LeCun 的 2022 年蓝图 2022 年，Yann LeCun 发表位置论文《A Path Towards Autonomous Machine Intelligence》，提出了一个完整的 AI 架构蓝图。JEPA（Joint Embedding Predictive Architecture）是其中的核心——一个用于构建世界模型的自监督学习框架。\n核心理念：智能的本质不是模式匹配，而是拥有一个世界模型——能够在抽象空间中预测行为后果的内部模型。\n1.2 JEPA 的核心机制 JEPA 的架构围绕三个组件构建：\n组件 作用 架构 参数更新 Context Encoder 编码观测信息 → 隐空间表征 ViT 梯度下降 Target Encoder 编码待预测目标 → 真实表征 ViT（与 context 同结构） 动量更新（EMA） Predictor 从 context 预测 target 表征 轻量 Transformer 梯度下降 训练目标仅在隐空间计算：$\\mathcal{L} = \\|\\text{pred} - \\text{sg}(\\text{target})\\|^2$。从不预测像素。\nI-JEPA 的训练流程：\n从图像中采样 context block（保留区域） 采样多个 target block（遮挡区域，需大尺度 \u0026gt;15% 图像面积） context encoder (ViT) → context representation predictor（轻量 Transformer）→ 预测 target representations target encoder（动量更新）→ 真实 target representations L2 损失：||pred - target||²（仅在隐空间） 两个关键设计选择：\nTarget blocking 必须足够大 → 迫使模型学习语义级表征，而非像素级纹理 Context block 必须信息丰富（空间分布广）→ 避免模型走捷径（只预测附近区域） 为什么非要在隐空间预测？而不像 VAE/MAE 那样直接在像素空间做？\n理解这个问题是理解 JEPA 的关键。\nVAE 和 MAE 的做法是：遮住图像的一部分 → 让模型预测被遮住的像素。问题是模型有很多\u0026quot;作弊\u0026quot;方式——它可以用周围的像素颜色做插值、模糊填充，或者在像素平均颜色附近随便猜一个值。这些方式都能降低像素级的 MSE，但模型完全不需要理解被遮住的是什么物体。\nJEPA 把预测从像素空间搬到了隐空间。模型不再被问\u0026quot;这些位置的像素值是多少\u0026quot;，而是被问\u0026quot;被遮住的东西在抽象空间里是什么样\u0026quot;。由于隐空间是编码器学出来的（编码器本身也在参与训练），这个空间天然压缩了语义信息、丢弃了像素级细节。模型无法通过猜颜色来混过去，它必须真正理解 scene composition、物体关系、物理常识。\n这就是为什么 I-JEPA 不需要任何数据增强（对比 SimCLR 依赖的随机裁剪/颜色抖动）——它的\u0026quot;数据增强\u0026quot;是架构自带的：在隐空间做预测天然丢弃了像素级干扰。\n结果：I-JEPA 在 ImageNet 上用 ViT-Huge/14 在 16 个 A100 GPU、72 小时内完成训练，下游分类、目标计数、深度估计等任务达到 SOTA，且完全不需要数据增强（对比 SimCLR/BYOL 依赖的随机裁剪、颜色抖动等）。\n1.3 JEPA 家族全景 从 2023 年 I-JEPA 到 2026 年，JEPA 已发展出覆盖图像、视频、语言、驾驶等模态的完整家族：\nJEPA 家族演进时间线：\n2022 — LeCun 位置论文提出 JEPA 概念 2023 — I-JEPA（图像掩码预测，CVPR 2023） + MC-JEPA（图像运动+内容） 2024 — V-JEPA（视频时空预测，Meta） 2025 — V-JEPA 2（1.2B 参数，Block-Causal Attention，100万+小时视频） V-JEPA 2-AC（动作条件世界模型，零样本机器人规划） VL-JEPA（Vision-Language JEPA，选择性解码 2.85×加速） LeJEPA（可证明的自监督理论框架） 2026 — DRIVE-JEPA（XPENG × VT × Purdue，V-JEPA 预训练+轨迹蒸馏，NAVSIM SOTA） 构想中 — H-JEPA（层次化世界模型，高层次抽象决策+低层次精细控制） 各变体详解：\n变体 年份 机构 模态 核心贡献 I-JEPA 2023 CVPR Meta 图像 首个 JEPA 实现，多块掩码预测，无需数据增强 MC-JEPA 2023 Meta 图像 联合学习光流（运动）+ 内容特征，双流结构 V-JEPA 2024 Meta 视频 扩展至视频，时空掩码，学习物体交互物理常识 V-JEPA 2 2025 Meta 视频 1.2B 参数，Block-Causal Attention，100万+小时视频预训练 V-JEPA 2-AC 2025 Meta 视频+动作 动作条件世界模型，零样本机器人规划突破 VL-JEPA 2025 Meta 视觉+语言 替代自回归解码，选择性解码加速 2.85× LeJEPA 2025 Meta/NYU 理论 可证明的 JEPA 理论框架，去掉所有启发式 DRIVE-JEPA 2026.01 XPENG+VT+Purdue 驾驶 V-JEPA 预训练 + 多模态轨迹蒸馏，NAVSIM v1/v2 SOTA H-JEPA 构想中 — 多层次 层次化世界模型：高级抽象决策 + 低级精细控制 1.4 DRIVE-JEPA（2026）：JEPA 在驾驶中的首次应用 2026 年 1 月，XPENG Motors 联合 Virginia Tech 和 Purdue 发表了 DRIVE-JEPA（arXiv:2601.22032），这是 JEPA 架构在端到端自动驾驶中的首次直接应用。\n核心思路：\nV-JEPA 视频预训练：用 V-JEPA 在大规模驾驶视频上做自监督预训练，学习场景理解和运动表征 多模态轨迹蒸馏：将 V-JEPA 接入多模态轨迹解码器，用专家轨迹蒸馏生成多样化的候选 端到端微调：在 NAVSIM v1/v2 和 Bench2Drive 上微调 与 VLA 的关键区别：DRIVE-JEPA 用 V-JEPA 替换了传统 VLA 中的 CLIP 视觉编码器。CLIP 学的是互联网图文对齐，V-JEPA 学的是物理世界动态——后者对驾驶中的场景演变更本质。本质仍然是模仿学习路线（V-JEPA 做特征提取 → 解码器生成轨迹），而非推演式决策。\n1.5 JEPA 作为世界模型：为什么与 VLA 有本质不同 JEPA 不是\u0026quot;另一种 VLA\u0026quot;，它在哲学上就与 VLA 不同：\n维度 VLA（模仿学习范式） JEPA 世界模型范式 学什么 $P(\\text{action} \\mid \\text{observation})$ $P(\\text{world state} \\mid \\text{prev state}, \\text{action})$ 决策方式 单次 forward 生成动作 推演多种可能 → 评分 → 选最优 推理能力 统计相关性（学数据分布） 因果推理（场景一致性） OOD 处理 弱——未见过的场景没有训练数据支撑 强——不合理的行为会被高能量检测到 知识表征 隐式编码在 LLM 权重中 显式编码为场景隐空间 + 行为组合词汇表 可解释性 黑盒（无法回答为什么） 白盒——可以问\u0026quot;为什么选这条？因为其他的重建误差更大\u0026quot; 数据需求 互联网图文 + 驾驶标注 仅驾驶数据，自监督 Scaling 方式 增大模型和数据 增大词汇量（组合爆炸）和场景多样性 用一句话总结：\nVLA：看了大量人开车的视频 → 学会了\u0026quot;遇到这种情况就这么开\u0026quot; → 但遇到没见过的情况就蒙了 JEPA 世界模型：学会了\u0026quot;这个世界是怎么运作的\u0026quot; → 遇到新情况时在脑子里推演各种走法 → 选那个\u0026quot;走得通\u0026quot;的 → 即使没见过也能推理 1.6 JEPA 家族中与驾驶相关的路线 从 JEPA 家族中梳理出两条与驾驶决策相关的技术路线：\n路线 A：DRIVE-JEPA（XPENG）—— JEPA 作为特征提取器\n用 V-JEPA 做视觉编码器，替换 CLIP 保留模仿学习范式（端到端单次生成） 改进在特征层面，不在决策范式层面 路线 B：JEPA-DRIVE（我们的项目）—— JEPA 作为自监督评分信号\n用 JEPA 能量函数思想设计 cycle energy 评分 彻底转向推演式决策（生成+评分+选择） 改进在决策范式层面，不在特征层面 两者互补：路线 A 解决特征质量，路线 B 解决决策范式。理论上可以结合。\n2. JEPA-DRIVE：JEPA 在驾驶决策中的落地 JEPA-DRIVE 是我们将 JEPA 的\u0026quot;隐空间世界模型 + 推演式决策\u0026quot;思想具体化为驾驶决策系统的项目。与标准 JEPA 不同，JEPA-DRIVE 不处理原始像素，而是接收结构化场景特征（物体/车道/地图等感知模块输出）。\n2.1 问题形式化 给定场景特征 $S$ 和候选轨迹集合 $\\mathcal{C}$：\n$$ T^* = \\arg\\max_{T \\in \\mathcal{C}} f(T, S) $$其中 $f$ 是评分函数。JEPA-DRIVE 的独特之处在于 $f$ 基于自监督重建误差（cycle energy），而非外部标签。\nNAVSIM 约束：每个场景固定提供 8 个 SD 候选，评估 selected_pdm（选中的轨迹的 PDM 分数）、oracle_pdm（最高 PDM 分数）、gap（两者之差）。模型可以生成任意多候选用于训练，但最终评估只看 8 个 SD 候选中的选择质量。数据规模：85,109 训练场景 + 12,000 测试场景。\n2.2 架构全景 2.3 World Encoder：结构化场景编码 JEPA-DRIVE 接收的是感知模块输出的结构化场景特征——6 种模态的向量，每种模态用独立 MLP 编码到统一的 96 维隐空间：\nclass ModalEncoder(nn.Module): def __init__(self, in_dim=24, out_dim=96): super().__init__() self.proj = nn.Linear(in_dim, out_dim) self.norm = nn.LayerNorm(out_dim) def forward(self, x): return self.norm(self.proj(x)) 各模态编码后拼接为 [65 tokens × 96 dim]：\n模态 输入维度 token 数 含义 Object 32 × 24 32 周围物体位置/类别/速度 Lane 16 × 24 16 车道线几何/类型 Map 4 × 24 4 地图元素（人行道/路肩等） Route 4 × 24 4 导航路径点 Velocity 1 × 24 1 自车速度 Dynamics 8 × 24 8 动态物体运动状态 为什么用 MLP 而非 Transformer 编码器？ 场景要素已经高度结构化（物体位置、车道线方向等），MLP 更轻量，且保持模态分离——下游 CrossAttn 可以区分 token 的模态来源。\n2.4 Vocabulary 系统（核心创新） 这是 JEPA-DRIVE 区别于所有其他方法的核心设计。\n关键思想：驾驶行为可以被分解为两个独立维度的组合——横向（path）和纵向（vel）。\nself.path_queries = nn.Parameter(torch.randn(512, 96)) # 512 种横向行为 self.vel_queries = nn.Parameter(torch.randn(128, 96)) # 128 种纵向行为 为什么是 512 × 128 = 65,536？\n512 种路径：4 种基础走法（直行/左转/右转/变道）× 8 种幅度 × 16 种细粒度偏移 128 种速度：4 种基础趋势（加速/巡航/减速/停止）× 4 种幅度 × 8 种微调 候选生成流程：\nPath/Vel Queries → CrossAttn(场景) → 场景感知的 path/vel features Cartesian Product: 512 × 128 = 65,536 组合 Predictor MLP + Trajectory Decoder → 65,536 条轨迹 关键优势：组合爆炸。512 种路径 × 128 种速度 = 65,536 种行为模式，但只需要学习 512 + 128 = 640 个 query 向量。这是 JEPA-DRIVE 能够做到 3.88M 参数的秘密——用组合代替记忆。\n训练时：从 65,536 中均匀采样 64 个候选，reshape 为 [B, 64, 24]。 推理时：coarse-to-fine 策略——先用 path/vel scorer 粗筛 top-64×top-32=2048，再用 FineScorer 精评。\n2.5 FineScorer V2（评分器） Phase B 唯一训练的部分，经历了 20+ 版本的迭代：\nclass FineScorerV2(nn.Module): # 输入: action_lat [B,N,96] + attended [B,N,96] + traj_lat [B,N,96] # ① TrajFusion: concat → MLP(288→1024→96) # ② CrossAttn(融合特征, world_tokens) → 场景感知特征 # ③ SceneQuery: 跨候选全局上下文 # ④ ScoreHead: MLP(192→1024→1024→1) → 分数 [B,N] # ⑤ ComponentHead: MLP(96→512→6) → 6 维辅助评分 设计演进（关键修复）：\n版本 评分器设计 问题 V10 hidden=512, 全局 mean pool 场景 全局池化丢失空间信息，hidden=512 是假的大（实际 192） V11-V14 hidden=512，各种改进 逐步调优但基础受限 V15 hidden=512（真实），更深 MLP 容量提升，0.84→0.85 V16-V17 移除全局池化，改 CrossAttn 关键突破，0.85→0.8839 V18-V20 微调 接近 64 值瓶颈上限 V21 Cycle Energy 自监督 训练中，目标突破瓶颈 V10 用全局 mean pool 提取场景特征，所有候选共享同一个场景向量——丢失了\u0026quot;某条轨迹是否适合场景的某一部分\u0026quot;这样的精细信息。V16 改 CrossAttn 让每个候选独立查询场景，这是 0.84 → 0.8839 的关键突破。\n2.6 Cycle Energy：自监督评分信号 Cycle energy 来源于 JEPA 的**能量基础模型（EBM）**思想：给定场景 $S$ 和轨迹 $T$，能量 $E(T, S)$ 越低，表示 $T$ 与 $S$ 越兼容。\n计算流程（轨迹 12 帧切成两半，用前 6 帧 + 场景预测后 6 帧）：\naction_lat = MLP(prefix) → 轨迹前半段编码 [96] traj_lat = MLP(full_traj) → 轨迹全段编码 [96] attended = CrossAttn(action_lat, world_tokens) → 场景-轨迹交互 [96] pred_suffix = Decoder(concat[action_lat, attended, traj_lat]) → 预测后半段 [6,2] cycle_energy = MSE(pred_suffix, real_suffix) → 标量 直觉：如果一条轨迹在场景中是合理的，场景隐空间包含\u0026quot;这条路接下来会怎样\u0026quot;的信息，解码器准确预测后半段。反之，如果轨迹不合理（如直行撞向路栏），场景中无支持信息，解码器只能胡猜——重建误差大。\n相比 PDM 标签的优势：\n维度 PDM（64 值瓶颈） Cycle Energy（自监督） 值域 64 个离散值 {0.00, 0.17, \u0026hellip;, 12.00} 连续值，任意精度 来源 外部 PDM 打分器 自监督，从数据中产生 数据覆盖 仅 9k / 85k 场景 全部 85k 场景 语义 单一分数，无法解释 可分解（位置/速度/方向误差） 2.7 两阶段训练方法 Phase A：生成器训练\nEpochs: 100 | Batch: 2 | LR: 1e-4 | GPU: 1×L20 (48GB) 数据: 7119 navtrain 场景（有候选标注用于多样性损失） 冻结: 无（全模型训练） 损失函数：\n$$\\mathcal{L}_{\\text{Phase A}} = \\mathcal{L}_{\\text{im-s}} + \\mathcal{L}_{\\text{im-w}} + \\lambda_{\\text{cyc}}\\mathcal{L}_{\\text{cyc}} + \\lambda_{\\text{div}}\\mathcal{L}_{\\text{div}} + \\lambda_{\\text{dst}}\\mathcal{L}_{\\text{dst}}$$ 分量 权重 作用 图像重建（强/弱） 1.0 候选轨迹在场景中的特征重建 Cycle 一致性 1.0 编解码循环中的自一致性 多样性 0.01 鼓励 64 个候选多样化 距离损失 0.10 候选接近数据集轨迹 收敛：E1 loss=1.30, cyc=0.22, div=0.77 → E100 loss=0.06, cyc=0.003, div=0.92（~17 小时）\nPhase B：评分器训练\nEpochs: 50 | Batch: 8×8GPUs=64 | LR: 1e-4 | GPU: 8×A800-80GB 数据: 85109 navtrain 全量场景（cycle energy 实时计算） 冻结: 生成器全部冻结，仅训练 FineScorerV2（3.17M/3.88M 参数） V17 损失（PDM 标签）：$\\mathcal{L}_{\\text{listnet}}(scores, proxy) + 0.2 \\cdot \\bar{E}_{\\text{cyc}} + 0.1 \\cdot \\mathcal{L}_{\\text{BCE}}$\nV21 损失（Cycle Energy）：$\\mathcal{L}_{\\text{listnet}}(scores, -ce) + 0.05 \\cdot \\mathcal{L}_{\\text{GRPO}} - 0.01 \\cdot \\mathcal{H}(\\pi)$\nV21 中 GRPO 只有 0.05 权重，只是\u0026quot;保底\u0026quot;防止 cycle energy 初始阶段出错。随着训练进行，listnet 主导学习。\n2.8 实验演进 版本 时间 关键变化 分数 V1-V9 7/9-7/11 原型探索，基础 JEPA 验证 — V10 7/11 评分器定型，全局池化缺陷 ~0.80 V11-V14 7/12-7/13 Baseline 优化 0.82-0.84 V15 7/14 评分器容量修复（hidden 192→512） ~0.84 V16 7/15-7/16 移除全局池化，改 CrossAttn ~0.85 V17 7/17-7/19 架构定型：FineScorerV2 + CrossAttn + 1024 hidden 0.8839 V18-V20 7/19-7/23 尝试各种改进 → 确认 64 值瓶颈 0.875-0.882 V21 7/23-至今 Cycle Energy 自监督替代 PDM（训练中） ? V17 里程碑：验证了 JEPA 架构可行、推演式决策有效、FineScorerV2 设计正确。但暴露了数据泄露（训练在 navtest）和 64 值瓶颈两个问题。\n64 值瓶颈：V18-V20 无论怎么改架构——加大评分器、换损失函数、升级整个模型——分数全在 0.875-0.882 徘徊。因为：\nscores = model(batch) # [B, 64] 评分器输出，连续值 proxy = get_nn_proxy() # [B, 64] 只有 8 种不同的值（被广播到 64 个候选） # 评分器只能学这 8 个档次之间的排序 PDM 的打分精度就是评分器的理论上限。Cycle energy 没有这个限制——每个候选有自己独立的连续值标签。\nV21 当前状态：\n步骤 状态 详情 Phase A ✅ 完成 100 epochs, loss=0.06 Phase B 🔄 训练中 8×A800 DDP, ~55min/epoch 预计完成 7/26 50 epochs 2.9 与 DRIVE-JEPA 的对比 维度 DRIVE-JEPA（XPENG） JEPA-DRIVE（我们的项目） 流派 端到端模仿学习 规划+评分（推演式决策） JEPA 角色 视觉编码器（特征提取） 世界模型 + 自监督评分信号 参数量 ~300M+（视觉编码器） 3.88M 训练方式 V-JEPA 预训练 → 微调 Phase A 生成器 + Phase B 评分器 评分信号 PDM 标签（模仿学习） Cycle Energy 自监督 输出 单条轨迹（端到端生成） 65,536 候选 → 评分 → 选最优 NAVSIM 分数 SOTA（闭源） V17: 0.8839, V21 训练中 2.10 优劣势总结 核心优势：\n极轻量：3.88M 参数 vs VLA 的 7B+，差 1800 倍；vs DRIVE-JEPA 的 300M+，差 77 倍 完全自监督：不需要互联网数据、不需要人工标注、不需要 PDM OOD 鲁棒：推演式决策天生处理未见场景 可解释：每个决策可以追溯到重建误差的来源 核心劣势：\n计算量大：推理需多次 decoder forward，延迟 ~220ms（可优化至 50-100ms） 依赖场景编码质量：编码器漏了关键信息，cycle energy 就不准 候选覆盖有限：65,536 虽大，仍有覆盖不到的行为 工程复杂：两阶段训练、DDP、候选采样 2.11 JEPA-DRIVE 中的 JEPA 架构映射 很多读者读完 JEPA-DRIVE 后会有和你一样的困惑：\u0026ldquo;这个系统哪里体现出 JEPA 了？\u0026rdquo;\n答案是：JEPA-DRIVE 不是 JEPA 的严格实现（严格实现应该预测隐空间+动量目标编码器），而是把 JEPA 的预测范式重新解读后应用到驾驶决策中。\n把标准 JEPA 和 JEPA-DRIVE 一一对应：\n标准 JEPA（I-JEPA） JEPA-DRIVE 中的对应 说明 Context = 图像可见区域 场景特征（物体/车道/地图等，共 65 tokens） 都是\u0026quot;已知的上下文信息\u0026quot; Target = 图像被遮区域 轨迹后半段（6 帧坐标） 都是\u0026quot;要预测的东西\u0026quot; Context Encoder（ViT，梯度下降） World Encoder（MLP + LSTM） 把上下文编码到隐空间 Predictor（轻量 Transformer，梯度下降） Trajectory Decoder 从隐空间预测 target Target Encoder（ViT，动量更新 EMA） 直接取真实轨迹坐标作为 target JEPA-DRIVE 做了简化，skip 了动量编码器 损失函数：$\\|\\text{pred} - \\text{sg}(\\text{target})\\|^2$ Cycle Energy：$\\text{MSE}(\\text{pred\\_suffix}, \\text{real\\_suffix})$ 都是重建误差，能量越低越好 三个关键差异（为什么说 JEPA-DRIVE 是\u0026quot;JEPA 思想\u0026quot;而非\u0026quot;JEPA 实现\u0026quot;）：\n预测空间不同：标准 JEPA 的 Predictor 输出的是隐空间表征，JEPA-DRIVE 的 Decoder 输出的是轨迹坐标——回到了物理空间。这是最大的偏离。\n没有动量 Target Encoder：标准 JEPA 用动量更新的 Target Encoder 生成 target 表征（防止模式坍塌），JEPA-DRIVE 直接用真实轨迹做 target——因为在驾驶决策场景中，轨迹坐标有明确的物理含义，不需要担心坍塌。\nJEPA 的角色不同：标准 JEPA 用预测任务训练编码器从而学出好表征；JEPA-DRIVE 用预测任务评估候选轨迹的质量——JEPA 在这里是评分信号，不是表征学习工具。\nJEPA-DRIVE 真正继承 JEPA 的地方在 Cycle Energy 背后的逻辑：\n# 如果候选轨迹 T 在场景 S 中是合理的 # → 场景隐空间包含\u0026#34;这条路接下来会怎样\u0026#34;的信息 # → Decoder 能准确预测 T 的后半段 # → Cycle Energy 低 → 推荐这条轨迹 # 如果候选轨迹 T 不合理（如直行撞向路栏） # → 场景隐空间中无支持信息 # → Decoder 只能猜 # → Cycle Energy 高 → 拒绝这条轨迹 # 这本质上是 JEPA 的前向预测范式： # \u0026#34;用已知的（场景+轨迹前半段）推演未知的（轨迹后半段）， # 用推演误差衡量合理性\u0026#34; 用一句话总结 JEPA-DRIVE 和 JEPA 的关系：JEPA-DRIVE 没有复刻 JEPA 的架构，但复刻了 JEPA 的核心思想——在抽象空间中用预测误差作为推理和决策的依据。\n3. 个人思考 3.1 JEPA 家族给我们的启示 从 I-JEPA 到 V-JEPA 2 到 VL-JEPA 到 DRIVE-JEPA，JEPA 的演进路径清晰地指向一个方向：从表征学习走向世界模型，从感知走向决策。\nV-JEPA 2-AC 的零样本机器人规划已经证明了 JEPA 世界模型在动作空间中的推演能力。DRIVE-JEPA 证明了 V-JEPA 作为驾驶场景特征提取器的有效性。我们的 JEPA-DRIVE 则证明了 JEPA 能量函数思想在驾驶决策评分中的可行性。三条路线各有所长，最终可能交汇。\n3.2 与 VLA 的本质差异 3.88M vs 7B 只是表象。更深层的差异在哲学层面：\nVLA 把驾驶看成\u0026quot;映射问题\u0026quot;——输入场景，输出动作。JEPA-DRIVE 把驾驶看成\u0026quot;选择问题\u0026quot;——生成候选，推演后果，选择最优。\n映射问题一旦遇到分布外输入就会坍塌。选择问题天然包含异常检测——如果所有候选的推演结果都不好（能量都高），模型可以选择\u0026quot;减速/停车\u0026quot;作为安全兜底。这是 JEPA 世界模型路线的核心优势。\n3.3 64 值瓶颈的教训 V18-V20 花了大量时间改架构但没用——因为瓶颈不在模型容量，在标签质量。改架构之前先确认瓶颈在哪。\n3.4 与 LinkVLA 的对比 两者都用离散词汇表，动机不同：LinkVLA 用共享词表对齐语言-动作 embedding；JEPA-DRIVE 用组合生成覆盖最大行为空间。两者都验证了离散化是 VLA 系统的重要设计维度。\n3.5 与 SparseDrive V2 的巧合与差异 2026 年 3 月 31 日，清华和地平线联合发布 SparseDrive V2（arxiv: 2603.29163），与我们的 JEPA-DRIVE 几乎同时（V21 实验是 7/24 开始的）。两者的核心思路惊人地相似：\n共同范式：规划 = 生成候选 + 评分选优\nSparseDrive V2 = 轨迹词汇表 × 两阶段评分器 JEPA-DRIVE = 路径×速度词汇表 × Cycle Energy 评分器 关键对照：\n维度 SparseDrive V2 JEPA-DRIVE (V17) 词汇表大小 路径 512 × 速度 512 = 262,144 路径 256 × 速度 256 = 65,536 评分机制 两阶段 coarse-to-fine scorer（显式） Cycle Energy（隐式自监督） 场景编码 Transformer decoder（依赖检测） LSTM 编码器（结构化特征） 视觉主干 ResNet-34 无（复用 METR 的视觉信息） 推理延迟 未见实验 ~220ms NAVSIM PDMS 92.0 88.39 NAVSIM EPDMS 90.1 未测试 Bench2Drive DS 89.15 未测试 训练方式 端到端（检测+规划联合） 两阶段（生成器+评分器分离） SparseDrive V2 用多帧注意力（Multi-Frame Attention）聚合时序信息，生成初始检测和轨迹候选，再用 coarse scorer 筛选 top-K，最后 fine scorer 精细评分。JEPA-DRIVE 用离散组合生成候选，用 cycle energy（重建误差的隐式正则化）自动评估可行性。\n核心差异点：\n评分信号来源：SparseDrive V2 的评分器是显式训练的（从 NAVSIM 监督）；JEPA-DRIVE 的 cycle energy 是自监督的（不依赖任何标注或 PDM） 词汇表组合方式：SparseDrive V2 的路径/速度词汇表是分开学到的；JEPA-DRIVE 的路径/速度是因子化乘积 检测 vs 直接规划：SparseDrive V2 仍然依赖显式检测输出；JEPA-DRIVE 完全跳过检测（结构化特征直接输入） SparseDrive V2 的结果验证了 Scoring 范式是目前端到端驾驶的最优路线——这与 JEPA-DRIVE 的核心理念完全一致。差距主要在工程细节（词汇表大小、端到端训练、视觉特征质量），而非方法论层面。\n3.6 下一步方向 如果 V21 验证了 cycle energy 能打破 64 值瓶颈：\n词汇表扩展：1024×256 = 262k 候选（追上 SparseDrive V2 规模） 端到端联合训练：cycle energy 反向传播到生成器 联合 V-JEPA 2：用 V-JEPA 2 做视觉编码器替换结构化特征输入 多步 cycle energy：不只是预测后 6 帧，而是多步 rollout 📖 本文是对 JEPA-DRIVE 项目的技术总结与个人思考。V21 训练结果预计 7/26 完成，届时更新。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/jepa-drive%E8%87%AA%E7%9B%91%E7%9D%A3%E9%A9%BE%E9%A9%B6%E5%86%B3%E7%AD%96%E7%B2%BE%E8%AF%BB/","summary":"JEPA-DRIVE 是一个基于 Joint Embedding Predictive Architecture 的自监督驾驶决策系统。它用结构化隐空间世界模型编码驾驶场景，从 65,536 个离散行为词汇中组合生成候选轨迹，再用 cycle energy 重建误差作为自监督评分信号。V17 在 NAVSIM 上达到 0.8839 selected_pdm，V21 正在用纯自监督 cycle energy 突破 PDM 代理标签的 64 值瓶颈（8×A800 分布式训练中）。全模型仅 3.88M 参数。","title":"个人思考｜JEPA-DRIVE：用联合嵌入预测架构做自监督驾驶决策"},{"content":"📄 论文信息 标题：Unifying Language-Action Understanding and Generation for Autonomous Driving 作者：王新阳（浙大）, 刘倩, 丁文杰, 杨昭（项目主导）, 李伟, 刘畅, 李柏霖, 战锟, 郎咸朋, 陈为（浙大） 团队：浙江大学 CAD\u0026amp;CG 国家重点实验室 \u0026amp; 理想汽车 arXiv：2603.01441（Submitted: 2026-03-02） 收录：CVPR 2026（Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, pp. 25193-25203） 官方链接：CVPR Open Access 关键词：VLA, 离散词表, 语言-动作对齐, 粗到细生成, Bench2Drive 一句话总结：LinkVLA 通过共享离散词表（结构链接）+ 轨迹→指令反向理解（语义链接）建立语言-动作双向对齐，再用 C2F 两步解码代替自回归，在 Bench2Drive 上 DS=91.01，延迟仅 48ms（比 AR 降低 86%）。 🏗️ 架构详解 LinkVLA 的整体架构遵循\u0026quot;视觉编码器 → LLM → 离散动作解码\u0026quot;的标准 VLA 范式，但有三处关键设计使其区别于其他 VLA：\n数据处理流 前视相机图像 ↓ InternViT-300M（视觉编码器） → 视觉 token（patch embeddings，~256 个） ↓ Qwen2-0.5B-Instruct（LLM backbone） ↓ ←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←←→→→→→→→→→ ↓ ↓ 【训练阶段】 【推理阶段】 ↓ ↓ 两种拼接方式随机采样： C2F 两步解码： ┌─────────────────────┐ ┌───────────────┐ │ [V, L, A] → 预测 A │ (动作生成) │ Step1: 预测终点│ │ [V, A, L] → 预测 L │ (动作理解) │ (1 步解码) │ └─────────────────────┘ ↓ ↓ │ 插值 → 20 粗航点│ 共享词表 K = K_text ∪ K_action └───────┬───────┘ │ 文本 token (≈50K) ↓ │ 动作 token (5,656) Step2: 并行精化→10 航点 └────────────→ logits 投影到 K 上的概率分布 (20 步并行) 三个核心设计要点 ① 共享词表（图中红色箭头）：动作 token 的 embedding 直接插入到 Qwen2 的原始 embedding 矩阵中，与文本 token 在同一空间做 attention。这意味着\u0026quot;change lane to the left\u0026quot;这句话的语义表征会自然地与\u0026quot;向左变道\u0026quot;对应的动作 token 表征靠拢——因为 attention 机制会在它们之间建立直接的注意力通路。\n② 双向训练（图中双箭头）：不同于 VLA 只做 L→A 的单向映射，LinkVLA 在 batch 中随机选取一半样本做 A→L 的反向任务。这个设计的精妙之处在于：(V, A) → L 迫使模型关注轨迹中蕴含的场景交互信息（比如\u0026quot;减速\u0026quot;可能是因为前方有车），这些信息在纯 L→A 训练中容易被视觉特征淹没。\n③ C2F 解码（图中右下角）：推理时模型先输出 \u0026lt;path_goal\u0026gt; token 确定轨迹终点（宏观方向），然后根据终点几何插值出 20 个粗航点，最后用一个轻量细化网络同时优化这 20 个点得到 10 个精确航点。所有细粒度预测是并行的——这是加速的核心来源。\n与其他 VLA 架构的关键区别 方面 传统 VLA（SimLingo/AutoVLA 等） LinkVLA 动作表示 连续坐标 + MLP 回归头 或 独立离散 head 与文本共享同一 embedding 层的离散 token 语言-动作交互 单向 L→A（隐式对齐） 双向 L↔A（显式对齐） 轨迹解码 自回归逐点 或 单步 MLP 先终点后细化的两步 C2F 词表 文本词表 + 独立动作映射 统一词表 $K_{\\text{text}} \\cup K_{\\text{action}}$ 🤔 要解决什么问题？ 核心痛点 问题 具体表现 根因分析 语言-动作不对齐 模型说\u0026quot;向左变道\u0026quot;却输出直行轨迹；说\u0026quot;加速\u0026quot;却减速 语言和动作在架构层面分离：文本 tokenizer 处理语言，连续回归头处理轨迹，两者之间没有结构性对齐机制 自回归生成低效 预测一条 20 步轨迹需要逐 token 解码 80+ 步 每一步都依赖前一步输出，无法并行，推理延迟高达 361ms，远超实时要求（\u0026lt;100ms） 现有方法为什么不奏效 数据增强法（SimLingo 2025, CAST 2026）：通过扩展数据集来间接缓解对齐问题——但这是在绕开根本的建模挑战，不是从架构上保证对齐 RL 后处理（AutoVLA 2026）：在 SFT 之后通过 GRPO 强化学习校正行为——但将对齐当作\u0026quot;事后修正\u0026quot;，SFT 阶段的不对齐会持续到 RL 阶段 隐空间分布匹配（ORION 2026）：在某一中间层对齐语言和动作的隐分布——但缺乏直接可验证的监督信号 LinkVLA 的解决方案是：从架构层面建立结构级和语义级的双向链接，在 SFT 阶段就解决对齐问题。\n💡 核心思想 LinkVLA 的三项创新环环相扣，分别从结构、语义、效率三个层面解决问题：\n结构链接（Structural Link）——共享词表：语言 token 与动作 token 共用同一离散词表，从 embedding 层面消除模态鸿沟，是架构上保证对齐的根基 语义链接（Semantic Link）——双向理解：引入\u0026quot;从轨迹反推指令\u0026quot;的反向训练目标，迫使模型建立语言↔动作的双向映射，在训练中强化对齐 效率优化（C2F）——粗到细解码：两步代替多步自回归，先预测终点确定宏观方向，再插值并行细化，将延迟从 361ms 压缩到 48ms 三者关系：结构链接提供对齐基础，语义链接强化映射精度，C2F 保证实用效率。\n⚙️ 方法细节 3.1 统一 Token 化框架 为什么需要动作 Token 化？ 语言模型天然处理离散 token（词表中的 id），而驾驶轨迹是连续坐标序列。要让两者共享同一模型和词表，必须将连续的轨迹离散化。\n方案：将 BEV 空间 $x \\in [0,50]\\text{m}$、$y \\in [-30,30]\\text{m}$ 划分为离散网格，每个网格对应一个 action token，共 $56 \\times 101 = 5{,}656$ 个离散动作 token。这些 token 的 embedding 被加入到 LLM 原有文本词表（约 50K token）中，构成统一的词表 $K = K_{\\text{text}} + K_{\\text{action}}$。\n但直接的均匀量化有两个已知问题：\n分辨率浪费：近处（车前 0-10m）的精度需求远高于远处（40-50m），均匀网格无法自适应 空间拓扑丢失：One-hot 标签将相邻网格视为完全不同的类别，没有嵌入\u0026quot;相邻网格在物理空间中也相邻\u0026quot;这一先验 LinkVLA 通过两项关键技术解决：\n① 对数坐标变换（Log Coordinate Transformation）\n对每个坐标 $z \\in \\{x, y\\}$ 做非线性变换，使得近处分辨率高、远处分辨率低：\n$$z' = \\operatorname{sign}(z) \\cdot \\log(1 + k \\cdot |z|)$$其中 $k=5$ 控制线性区域大小。这相当于在物理空间中做非均匀量化——车前 0-5m 的每个网格对应很小的物理空间（高精度），而 30-50m 的每个网格对应很大的物理空间（低精度），与驾驶规划的实际需求一致。变换后的空间 $(x', y')$ 再进行均匀量化。\n② 空间软标签（Spatial Soft-labeling）\n模型预测的是 action token 上的概率分布 $p(a)$，但标准的 one-hot 交叉熵损失会惩罚任何分配到相邻 token 的概率。空间软标签构建了一个以 GT token $a_{gt}$ 为中心的高斯分布作为 target：\n$$q(a) = \\frac{1}{Z} \\exp\\left(-\\frac{\\|\\text{pos}(a) - \\text{pos}(a_{gt})\\|_2^2}{2\\sigma^2}\\right)$$其中 $\\text{pos}(a)$ 是 token $a$ 的网格坐标，$\\sigma=1.2$ 控制分布范围，$R=10$ 个格子内的高斯值被考虑。\n损失函数改为 soft cross-entropy：\n$$\\mathcal{L}_{\\text{generation}} = -\\sum_{a \\in \\mathcal{C}_{\\text{action}}} q(a) \\log p(a)$$这一设计的好处：即使模型预测到 GT token 的相邻网格，也只受到轻微惩罚，让模型学习到动作空间的平滑性。\n3.2 统一语言-动作理解与生成（双向训练） 核心洞察：在视觉-语言建模中，图像→文本（caption）和文本→图像（generation）是互逆任务，同时训练两者能产生更鲁棒的联合嵌入空间（类比于 CLIP 的双向对比学习）。LinkVLA 将这一思想扩展到语言-动作映射。\n正向——动作生成（Action Generation）：给定视觉场景 $V$ 和语言指令 $L$，预测动作序列 $A$：\n$$p(A|V,L)$$反向——动作理解（Action Understanding）：给定视觉场景 $V$ 和执行过的动作序列 $A$，推断指令 $L$：\n$$p(L|V,A)$$训练目标为两者加权和：\n$$\\mathcal{L}_{\\text{total}} = \\mathcal{L}_{\\text{generation}} + \\lambda \\mathcal{L}_{\\text{understanding}}$$$$\\mathcal{L}_{\\text{understanding}} = -\\sum_j \\log p(l_j | V, A, l_{1:j-1})$$其中 $l_{1:j-1}$ 表示前 $j-1$ 个已生成的文本 token（标准自回归分解）。$\\lambda$ 是一个平衡超参数。\n训练时，每个 batch 中随机将 $(V, L, A)$ 拼接为两种格式：\n$[V, A, L]$：监督 $L$ 的输出，执行动作理解任务 $[V, L, A]$：监督 $A$ 的输出，执行动作生成任务 两种格式共享同一个模型参数，通过 attention mask 控制不同的预测目标。\n3.3 粗到细生成（C2F） 传统 VLA 在推理时用自回归逐个预测轨迹点，每步依赖上一步的输出，无法并行。LinkVLA 提出了两步生成方案。\n训练阶段：引入两个特殊 token —— \u0026lt;path_goal\u0026gt; 和 \u0026lt;waypoint_goal\u0026gt;。模型学会：\n在看到 \u0026lt;path_goal\u0026gt; 时预测整个轨迹的终点位置 在看到 \u0026lt;waypoint_goal\u0026gt; 时输出细化后的精确航点 推理阶段分三步：\nStep 1 — 路径终点预测：模型输出 \u0026lt;path_goal\u0026gt; 对应的终点 token（1 步解码），得到轨迹的宏观方向 Step 1.5 — 插值：根据预测终点，通过简单的几何插值生成 20 个粗航点（path tokens），作为细化阶段的起点 Step 2 — 并行精化：20 个粗航点同时通过细化网络，得到 10 个最终精化航点（waypoint tokens），所有细化计算可并行 解码方式 解码步数 总延迟 DS 加速比 标准自回归 (AR) 80+ token 361ms 90.66 1× C2F（两步） 2 步 48ms 91.01 7.5× 有趣的是 C2F 不仅加速，还提升了 DS（从 90.66 到 91.01）。这是因为\u0026quot;先定方向再细化\u0026quot;的归纳偏置天然有利于生成合理轨迹——AR 模型可能在逐步解码中累积方向偏差。\n模型与训练配置 模型结构：\nVision Backbone：InternViT-300M-448px（InternVL2-1B 系列中的视觉编码器） LLM：Qwen2-0.5B-Instruct（0.5B 参数的轻量语言模型） 总参数量：约 1B 训练细节：\n微调方式：LoRA（rank=32，$\\alpha=64$），只训练 adapter，不更新全量参数 训练轮数：30 epochs 计算资源：32 × H20 GPU，batch size = 48 优化器：AdamW，lr = 1e-4，weight decay = 0.1，cosine 学习率调度 数据：用 PDM-lite 专家在 CARLA v2 Bench2Drive 场景中采集 推理细节：\n采用 CoT 方式：先生成文本解释（commentary），再基于 commentary + 视觉特征预测 action sequence 每帧输出 20 个 path tokens + 10 个 waypoint tokens C2F 的延迟 48ms 已排除了 CoT 的时间（因为 CoT 是可选配置） 🧪 实验与结果 基准说明：Bench2Drive Bench2Drive（Jia et al., 2025）是 CARLA v2 上最全面的闭环评测基准之一，包含 44 种交互场景 × 5 条路线 = 220 条官方测试路线，覆盖多种天气条件（晴天、阴天、雨天、黄昏等）。评估指标包括：\nDriving Score (DS)：综合分数，反映整体驾驶质量 Success Rate (SR)：任务完成率 Efficiency：路线完成效率 Comfortness：驾驶舒适度 Multi-Ability：在 7 种子能力上的平均表现 4.1 Bench2Drive 主动循环评估（Table 1） 闭环指标对比：\n方法 类型 DS ↑ SR (%) ↑ 效率 ↑ 舒适度 UniAD-Base (Hu et al., 2023) IL（端到端） 45.81 16.36 129.21 43.58 VAD (Jiang et al., 2023) IL（向量化） 42.35 15.00 157.94 46.01 DriveTransformer (Jia et al., 2025) IL（Transformer） 63.46 35.01 100.64 20.78 Orion (Kumar et al., 2025) VAE 规划 77.74 54.62 151.48 17.38 AutoVLA (Yue et al., 2026) VLA + GRPO 78.84 57.73 146.93 39.33 SimLingo (Yuan et al., 2025) VLA（MLP head） 85.07 67.27 259.23 33.67 LinkVLA (Ours) VLA（共享词表） 91.01 74.55 255.84 34.62 LinkVLA 在 DS 上超越 SOTA SimLingo 达 5.94 分（+6.98% 相对提升），SR 提升 7.28 分（+10.82%）。相比同为 VLA 但使用 MLP head 的 SimLingo，LinkVLA 的共享词表方案证明了对齐带来的不仅仅是\u0026quot;说做一致\u0026quot;的改善，也直接提升了驾驶质量。\n多能力分解：\n子能力 SimLingo LinkVLA 提升 Merging（汇入车流） 53.75 60.00 +6.25 Overtake（超车） 68.89 80.00 +11.11 Brake（制动） 81.67 93.33 +11.66 Give-Way（让行） 50.00 50.00 0 Traffic-Sign（交通标志） 82.11 83.68 +1.57 Multi-Ability 平均 67.28 73.40 +6.12 提升最显著的是 Brake（制动，+11.66）和 Overtake（超车，+11.11）——这两项都是对指令跟随要求极高的能力：急刹车对应\u0026quot;减速\u0026quot;指令、超车对应\u0026quot;变道+加速\u0026quot;的组合指令。LinkVLA 在指令跟随上的优势自然地转化为了场景驾驶能力的提升。\n4.2 指令跟随评估（Table 3） 使用 SimLingo 的 Action Dreaming 数据集，在 CARLA Town 13 上评估 6 类语言指令的跟随成功率：\n配置 统一词表 C2F 对齐训练 Faster Slower Target Spd Lane Change Object Stop 均值 ① 基线 (SimLingo) ✗ ✗ ✗ 81.42 61.83 66.27 75.53 74.69 60.93 70.11 ② +Token ✓ ✗ ✗ 88.44 65.24 63.37 88.49 84.34 99.88 81.63 ③ +C2F ✓ ✓ ✗ 93.16 55.86 69.24 95.45 85.38 92.14 81.87 ④ 完整 ✓ ✓ ✓ 96.48 65.57 74.73 97.42 91.41 97.34 87.16 逐项分析：\n统一词表（②→①）带来 +11.52 的巨幅提升，说明结构性对齐的基础性作用 C2F（③→②）变化不大（+0.24），说明解码方式本身不影响模型的对齐能力 对齐训练/动作理解目标（④→③）贡献 +5.29，尤其在 Faster（+3.32）和 Stop（+5.20）上——这两个是最需要理解\u0026quot;加速/减速\u0026quot;语义的指令 4.3 语言能力评估（Table 4） DriveLM-hard VQA 和 Commentary 生成评测（SPICE / BLEU / ROUGE-L）：\n配置 VQA SPICE VQA BLEU VQA ROUGE-L Com. SPICE Com. BLEU Com. ROUGE-L ① 基线 66.7 68.9 71.5 49.2 60.3 64.3 ② +Token 69.7 70.5 73.1 53.3 63.7 68.0 ③ +C2F 71.3 69.9 73.4 53.6 61.6 67.3 ④ 完整 73.0 74.7 77.0 57.4 65.7 70.8 引入动作理解反向目标（④→③）在语言指标上的提升表明：让模型学会从轨迹反推文本，反过来增强了模型的文本生成能力——这是因为轨迹编码中包含了丰富的场景信息（在哪里、做了什么），这些信息通过反向任务被更好地融合到了语言表示中。\n4.4 消融实验（Table 5） 统一词表 C2F 对齐训练 DS SR (%) 对应消融贡献 ✗ ✗ ✗ 85.07 67.27 SimLingo 基线 ✓ ✗ ✗ 89.57 73.18 +Token: DS +4.50 ✓ ✓ ✗ 89.85 72.27 +C2F: DS +0.28（但延迟↓86%） ✓ ✓ ✓ 91.01 74.55 +Align: DS +1.16 关键发现：\n统一词表贡献最大（DS +4.50）——这是 LinkVLA 最核心的技术贡献 C2F 对性能几乎没有影响（DS +0.28），但大幅降低延迟——是纯工程优化 对齐训练（DS +1.16）主要是提升指令跟随，在基本驾驶能力上影响有限 4.5 推理延迟分析（Table 2） 方法 解码方式 延迟 DS 延迟-性能权衡 Orion VAE（单步） 65ms 77.74 低延迟但性能差 SimLingo MLP（单步） 34ms 85.07 最低延迟，中等性能 LinkVLA (AR) 自回归（80+步） 361ms 90.66 高性能但延迟超标 LinkVLA (C2F) 两步 48ms 91.01 最佳均衡点 C2F 在延迟上击败了自回归（361ms→48ms），接近 SimLingo 的 34ms，但性能更优。这说明 C2F 是一个\u0026quot;两全其美\u0026quot;的方案——既有接近 MLP head 的效率，又保留了统一词表的对齐优势。\n🔬 深入分析：LinkVLA 为什么有效？ 共享词表的类比意义 从表征学习的角度看，共享词表相当于在 50K 文本 token 和 5.6K 动作 token 之间建立了隐含的语义连接桥梁。当 LLM 在处理\u0026quot;change lane to the left\u0026quot;这句话时，其内部的 attention 机制会自动将这句话的语义表征与\u0026quot;向左变道\u0026quot;对应的动作 token 表征拉近，因为它们在 embedding 空间中共享同一个投影矩阵。\n动作理解任务的微妙之处 这个反向任务的训练样本不需要额外标注——只要有一条轨迹和对应的指令，就可以构造成 $(V, A) \\rightarrow L$ 的样本。在自动驾驶数据集中，指令通常是弱标注的（有些来自场景描述，有些来自自动生成），但 LinkVLA 的动作理解目标对这些弱标注不敏感，因为它的反向任务本身就是\u0026quot;从执行结果反推意图\u0026quot;，而不是\u0026quot;与精确文本匹配\u0026quot;。\n与领域其他工作的关系 工作 对齐方式 延迟 性能 核心思路 SimLingo 数据增强 34ms 85.07 增加对齐数据数量 ORION 隐空间匹配 65ms 77.74 在 VAE 隐空间对齐 AutoVLA RL 后训练 ~400ms 78.84 SFT 不对齐然后 RL 纠正 LinkVLA 架构对齐 48ms 91.01 从架构保证对齐 NoRD 放弃推理 ~120ms ~85.6 不需要对齐，直接映射 ⚠️ 局限与未来方向 仿真局限：仅在 Bench2Drive（CARLA v2）上验证，无 NAVSIM 或真实世界路测结果。Bench2Drive 虽然场景丰富（44 场景），但仍是仿真环境 超参数敏感性：对数坐标变换的 $k$ 值（=5）需要根据车速范围调整；动作理解损失的 $\\lambda$ 需要调参 C2F 的单点故障：第一步终点预测如果出错，插值和细化阶段无法纠正——这是一个\u0026quot;先射箭再画靶\u0026quot;的潜在风险 未探索 RL 阶段：与 AutoVLA 对比，LinkVLA 未使用 GRPO 做 RL 后训练。在 LinkVLA 的对齐基础上叠加 RL 可能进一步提升性能 模型规模：仅使用 1B 模型，更大规模（7B+）的扩展性未探索 📝 个人思考 LinkVLA 最让我欣赏的是设计的优雅性：它不像其他 VLA 那样在模型之后接额外的 MLP head 或 diffusion 模块，而是直接修改了 token 化层——把驾驶轨迹变成和文本一样的离散 token。这种\u0026quot;侵入式\u0026quot;的设计虽然工程上更复杂（需要重写 tokenizer、处理位置编码等），但从信息论的角度看是最彻底的模态统一方案。\n与同类离散 token 范式的对比：LinkVLA vs AutoVLA AutoVLA（Yue et al., CVPR 2026）和 LinkVLA 的共同点是都将动作轨迹离散化为 token，但在具体实现上有本质区别：\n对比维度 AutoVLA LinkVLA 词表设计 动作 token 独立于文本词表，通过额外 head 映射 动作 token 直接插入 LLM embedding 矩阵，与文本共享 对齐方式 隐式对齐（SFT 阶段 L→A 单向学习），不对齐后果被推到 RL 阶段修正 显式对齐（共享词表保证结构对齐 + 反向理解任务强化语义对齐） 训练流程 SFT → GRPO（先学基础，再用 RL 纠偏） 端到端双向训练（无 RL 阶段） 解码效率 自回归逐 token 解码（~400ms 延迟） C2F 两步解码（48ms 延迟） 指令跟随 RL 后训练提升，但 SFT 阶段天然不对齐 共享词表 + 反向训练在 SFT 阶段就内建了对齐能力 为什么 AutoVLA 不直接使用共享词表？ 这很可能是工程权衡：AutoVLA 基于 InternVL2-8B（比 LinkVLA 的 1B 大 8 倍），修改 8B 模型的 embedding 层需要额外显存和训练成本。LinkVLA 选择 0.5B LLM 作为 backbone，修改 embedding 的成本相对可控。这揭示了一个有趣的设计空间：模型规模 → 对齐策略。小模型适合从架构上硬对齐（LinkVLA 路线），大模型可能更适合在 SFT 后通过 RL 软对齐（AutoVLA 路线），因为修改大模型架构的边际成本太高。\nLinkVLA + RL 会怎样？ 这是最让人好奇的问题。LinkVLA 的双向训练已经建立了很好的对齐基础（DS=91.01），如果再叠加 AutoVLA 式的 GRPO 后训练，效果可能进一步提升。但需要注意的是：LinkVLA 的共享词表是一个离散动作空间，而 GRPO 在离散空间上的 KL 散度计算天然稳定——这恰好是 AutoVLA 的连续动作空间所不具备的优势。换句话说，如果在 LinkVLA 基础上做 GRPO，既享受了架构对齐的好处，又免去了连续空间 RL 不稳定的困扰。\n离散 token 化方向的启示 LinkVLA 和 AutoVLA 共同指向一个趋势：VLA 正从\u0026quot;语言模型 + 连续动作头\u0026quot;向\u0026quot;统一离散词表\u0026quot;演进。这个趋势让我想起 2023-2024 年图像生成领域从 diffusion→VQGAN→VQVAE-2 的范式迁移——一旦某个模态被成功离散化，它就能与语言模型无缝整合。\n对于 Flow-GRPO 项目，LinkVLA 的共享词表设计提供了一个直接可用的思路：如果将策略网络输出的连续动作先通过对数坐标变换离散化，再用 GRPO 在离散 token 空间优化，可以在保持端到端可微的同时，利用离散空间的统计稳定性来加速 RL 收敛。\n📖 这是论文精读系列的第 XX 篇。语言和动作的统一词表是 VLA 对齐的一条优雅路径，但\u0026quot;对齐之后如何利用 RL 进一步提升\u0026quot;仍然是一个开放问题。欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/linkvla%E7%B2%BE%E8%AF%BB/","summary":"LinkVLA 提出将语言指令和驾驶轨迹统一到共享离散词表的 VLA 架构，通过对数坐标变换+空间软标签实现连续轨迹的离散化，引入动作理解反向目标建立双向语义映射，并用 C2F 两步解码替代逐点自回归。在 Bench2Drive (CARLA v2) 上 DS 达 91.01（超 SimLingo 5.94 分，+6.98%），推理延迟从 361ms 降到 48ms。主要作者来自浙大和理想汽车，收录于 CVPR 2026。","title":"论文精读｜LinkVLA：统一语言-动作理解与生成的 VLA 架构"},{"content":"前言 本文不是一篇教程，而是一份学习笔记 + 个人思考。写这篇文章是因为我自己在学这个方向时，发现文献散落在各个会议和 arXiv 上，缺少一个从\u0026quot;小白视角\u0026quot;出发的宏观梳理。希望这篇文章能帮到同样在入门这个方向的朋友。\n写这篇文章的契机是最近读了 Diffusion Planner、Flow-GRPO、AutoVLA、DriveVLA-W0 等几篇工作，发现它们虽然都在做同一件事——用强化学习改进生成式轨迹规划——但技术路线差异很大。更让我困惑的是，每篇论文都说自己是\u0026quot;第一个把 RL 和扩散/流结合的工作\u0026quot;，到底谁在说真话？\n后来读多了才发现：不是谁在撒谎，而是\u0026quot;结合\u0026quot;的方式可以非常不同。\n所以这篇文章的目的就是：把\u0026quot;RL × 生成式轨迹\u0026quot;这盘棋的全局画出来，然后深入分析每一种下法的优缺点，最后给出我自己对这个方向的判断。\n1. 快速基础回顾（写给小白） 1.1 生成式轨迹规划是什么？ 传统的轨迹规划是\u0026quot;确定性的\u0026quot;——给定一个场景，输出一条轨迹。但这有问题：一个场景可能有多个\u0026quot;正确\u0026quot;的走法。\n生成式模型（扩散/Flow）天生适合做轨迹规划，因为它们输出的是一个分布而不是一个点。\n关键点：\n训练：给模型看大量专家轨迹，让它学会\u0026quot;合理的轨迹长什么样\u0026quot; 推理：从噪声出发，逐步去噪/积分，得到一条合理的轨迹 多模态：多次采样可以得到多条不同的合理轨迹 1.2 强化学习的核心概念（写给纯小白） 如果你完全没接触过 RL，不要怕。这里用最直白的方式讲清楚。\nRL 和 SFT 最本质的区别 SFT（监督学习） RL（强化学习） 训练数据 给定的\u0026quot;标准答案\u0026quot; 自己探索 + 奖励信号 目标 模仿正确答案 最大化累积奖励 反馈 每个样本都有\u0026quot;对错\u0026quot; 只有最终结果才有\u0026quot;好坏\u0026quot; 上限 不超过训练数据质量 可以超越专家 RL 的核心循环：\n智能体（Agent）在环境（Environment）中做动作（Action），环境反馈奖励（Reward）和下一个状态（State），智能体根据奖励调整策略（Policy），让它下次做得更好。\n简化成流程：\n状态 sₜ → 智能体（策略 π）→ 动作 aₜ → 环境 → 奖励 rₜ + 新状态 sₜ₊₁ → 策略更新 → 循环\n在轨迹规划里：\n智能体 = 扩散/Flow 模型 动作 = 生成的轨迹（一系列 waypoint） 环境 = 驾驶场景（道路、障碍物、交通参与者） 奖励 = 安全？舒适？到达？规则遵守？ 四组核心概念 如果你是 RL 新手，记住这四个概念就够了：\n概念 通俗理解 轨迹规划中的对应 策略 π(a|s) 在状态 s 下如何选择动作 a 生成式模型：p_θ(轨迹|场景) 奖励 R(s,a) 这一步走得好不好 碰撞？舒适？到没到？ 价值 V(s) 当前状态\u0026quot;值多少钱\u0026quot; 这个场景好不好开？ 策略梯度 好的动作概率↑ 坏的动作概率↓ 用奖励信号更新生成模型 核心公式（只需看一眼）：\n∇J(θ) = E[ R(τ) · ∇log p_θ(τ) ]\n翻译成人话：好的轨迹要让生成概率变大，差的轨迹变小的方向更新模型参数。\n为什么是 log-prob？因为我们要在保持生成多样性的前提下调整概率分布。这个 log-prob 在传统 RL 里很容易算（单步动作），但在扩散/Flow 的多步去噪过程中就变得极其麻烦——这会是后面的核心话题。\n2. SFT 的天花板 2.1 为什么 SFT 不够？ 目前的生成式轨迹模型，绝大多数是用 SFT（模仿学习/行为克隆） 训练的：\n收集大量专家驾驶数据 让模型\u0026quot;照着学\u0026quot;：最大化 log p_θ(轨迹_专家 | 场景) 这就是最直接的监督学习。看起来没什么问题？\n实际上问题很大。\n2.2 Mode Averaging 效应 SFT 最隐蔽的问题是什么？我举一个具体例子：\n在一个路口，有人说\u0026quot;左转\u0026quot;、有人说\u0026quot;右转\u0026quot;、没人说\u0026quot;直走\u0026quot;。SFT 学到的结果是——直走。\n因为 SFT 最小化的是 KL 散度 D_KL(专家数据分布 || 模型分布)，它对\u0026quot;数据里没有的\u0026quot;做了平滑平均。模型在\u0026quot;左转和右转的高斯混合\u0026quot;中间找到了一个\u0026quot;都有点像又都不像\u0026quot;的均值点。\n这就导致了 mode averaging（模式坍缩到平均）。\n看懂这张图了吗？左边有两个专家的路线——一个绕左边走、一个绕右边走。SFT 学完以后，对于中间的障碍物，它给出的轨迹是\u0026quot;直走\u0026quot;，因为这是\u0026quot;左和右的平均\u0026quot;。但直走意味着撞上障碍物。\n在实际驾驶中，这个效应非常危险。 所有专家都避开的障碍物，SFT 可能因为\u0026quot;左右需求平均\u0026quot;而直接对着障碍物开过去。\n值得一提的是，这个问题的严重程度和数据的多样性有关：\n数据情况 SFT 表现 问题严重度 所有专家走同一条路 完美拟合 ★☆☆☆☆ 几条常见路线 + 少数特殊走法 主流路线完整，特殊走法被平滑 ★★★☆☆ 每条路线各不同（多模态分布） 全部平滑至均值→灾难 ★★★★★ 扩散/Flow 模型在 SFT 下的 mode averaging 比传统回归模型更隐蔽，因为生成式模型本身是分布式的（输出是一个分布而不是一个点），SFT 只是\u0026quot;拉偏\u0026quot;了分布的方向，但生成的样本仍然有多样性。这种\u0026quot;假性多模态\u0026quot;让人误以为模型学会了所有走法，实际上模型只是在所有走法之间取了个平均。\n这也是为什么一些论文报告 SFT 效果还不错——因为评测指标只看\u0026quot;最终位置误差\u0026quot;或\u0026quot;碰撞率\u0026quot;，不看你走的路线是不是\u0026quot;合理\u0026quot;的。你可能撞不上障碍物（因为误差容限大），但走了一条所有人类司机都不会走的奇怪路线。\n2.3 永远无法超越专家 这可能是 SFT 最本质的限制：模型学到的最高水平不会超过训练数据里的最高水平。\n就像一个学棋的人只看棋谱，永远下不出棋谱上没有的妙手。但 RL 可以——它通过试错、奖励、改进，找到训练数据里根本不存在的更好策略。\n2.4 那为什么偏偏是「扩散/Flow × RL」？ 你可能想问：普通 RL（如 DQN、SAC）也能做轨迹规划，为什么要加上扩散/Flow 模型？\n答案是：扩散/Flow 给 RL 带来了两个传统 RL 没有的优势。\n优势 1：天然的多模态输出\n传统 RL 策略（如高斯策略）输出的是\u0026quot;一个动作\u0026quot;——即使是随机策略，也是在某个均值附近采样。这意味着它在一个状态下只能产生\u0026quot;一种风格\u0026quot;的行为。\n扩散/Flow 策略输出的是\u0026quot;一个分布\u0026quot;——它可以同时包含\u0026quot;左转\u0026quot;和\u0026quot;右转\u0026quot;两个模式。RL 只需要从这些模式中选出\u0026quot;好\u0026quot;的那个，而不是从零开始学会探索。\n优势 2：先验分布 = 好的初始化\nSFT 虽然有限制，但它给了模型一个非常好的初始化——模型已经知道\u0026quot;什么样的轨迹是合理的\u0026quot;。RL 要做的是\u0026quot;在这个基础上优化\u0026quot;，而不是\u0026quot;从随机策略开始探索世界\u0026quot;。\n这一点在自动驾驶中尤其重要。你不可能让一个 RL 智能体在真实道路上做数百万次试错（那会撞死所有人）。但有了 SFT 预训练 + 生成式模型的多模态先验，RL 只需要在\u0026quot;已经合理的轨迹\u0026quot;中做选择和改进。\n打个比方：\nSFT + RL on 扩散/Flow = 先让一个学生看所有教科书（SFT），再让他做真题、找老师批改（RL）。\n传统 RL on 传统策略 = 让一个学生直接做真题，连公式都不知道。\n后者在 Atari 游戏里可行（死一局重来一局），但在自动驾驶里不可行（撞一次车就完了）。\n这就是为什么扩散/Flow × RL 在 2025-2026 年突然火起来——生成式模型提供了 RL 需要的安全探索空间。\n3. 四大范式全景 在研究清楚当前文献后，我把 \u0026ldquo;RL × 生成式轨迹\u0026rdquo; 的方法归纳为四个由浅入深的范式。\n范式一：推理时奖励引导（Training-Free Guidance） 核心思想：模型权重不动，只在采样过程中用 cost function 的梯度去\u0026quot;推\u0026quot;轨迹。\n代表性工作：Diffusion Planner、CTG++\n为什么最简单？\n想象你已经训练好了一个扩散轨迹模型。现在你想让生成的轨迹\u0026quot;更安全\u0026quot;。传统做法是：重新收集安全数据 → 重新训练模型。\n但这个范式的做法是：在推理时，每一步去噪时除了看模型预测，还额外计算一个安全 cost 函数对轨迹的梯度，然后把轨迹往 cost 减小的方向推一点。\n实现步骤：\n训练一个扩散/Flow 轨迹生成模型（完全正常的 SFT） 推理时，每一步去噪： 先算模型预测的速度/噪声：v_t = v_θ(x_t, t) 再算一个引导项：g_t = ∇_{x_t} J_collision(x_t) 修正：v_t\u0026rsquo; = v_t - λ · g_t 走一步修正后的去噪 最终轨迹自然更安全、更舒适 优点：\n完全不需要改动模型权重，部署极快 零训练成本 可以换不同的 cost 函数（不同风格） 不担心\u0026quot;训飞\u0026quot; 缺点：\n引导强度 λ 是玄学——太弱没效果、太强产生伪影 cost 函数必须可微 受预训练模型的分布限制，不能\u0026quot;无中生有\u0026quot; 每次推理需要多算一轮 cost 梯度，计算量增加 个人评价：这是目前落地最成熟的范式。Diffusion Planner 的引导效果非常漂亮。但如果你的生成模型本身就很差（SFT 阶段没学好），那引导也救不了。\n实战经验：λ 怎么调？ 引导强度 λ 是这个范式中唯一（也是最重要的）超参数。我总结了一个经验法则：\n从 λ=0 开始（无引导），看模型默认生成的轨迹质量 每次翻倍：λ=0.1 → 0.2 → 0.4 → 0.8，直到轨迹出现明显伪影（锯齿、抖动） 回退一半：取上一个不产生伪影的值 按场景调整：不同场景可能需要不同的 λ 更高级的做法是自适应 λ：\n在 cost 梯度方向与模型预测方向一致时，加大 λ 在 cost 梯度方向与模型预测方向冲突时，减小 λ 这样可以避免引导\u0026quot;拉扯\u0026quot;模型到不合理的区域 范式二：拒绝采样微调（RFT） 核心思想：采样一大批 → 用规则奖励打分 → 挑最好的当新的训练数据 → 继续 SFT。\n代表性工作：AutoVLA RFT\n如果说范式一是\u0026quot;小改\u0026quot;，范式二就是\u0026quot;退一步\u0026quot;——本质上又把 RL 问题退化成了 SFT 问题，只不过训练数据变成了自己采样的好轨迹。\n具体流程：\n重复 N 轮：\n采样：从当前模型对每个场景 s 采样 K 条轨迹 打分：用规则奖励函数 R 给每条轨迹评分 筛选：取 Top-M 高分轨迹作为正样本 训练：用这些正样本做 SFT，更新模型参数 这套流程在 AutoVLA 中效果非常显著。它的实现真的非常朴素，没有任何花哨的 RL 技巧。\n优点：\n实现简单到令人发指 不要求模型 log-prob 可求（不需要改去噪过程） 任何生成模型都能用（扩散、Flow、VAE 随便） 不会出现 reward hacking（因为我们只采样，不直接优化 reward） 采样越多，数据集越丰富，效果越好 缺点：\n样本效率极低：4 条里挑 1 条，浪费 75% 分布受限：永远是在\u0026quot;当前模型能生成的范围\u0026quot;里挑最好的 不能真正改变模型的行为模式，只是筛选已有的好样本 多轮迭代后收益递减——到了后期，采样的轨迹全都高分，没有进步空间 本质上还是 SFT，所以 SFT 的所有问题（mode averaging、过平滑）依然存在 个人评价：作为\u0026quot;第一个 RL 改进\u0026quot;非常推荐。代码改动小、效果可预期、风险极小。但别指望它带来质的飞跃。做了一圈 RFT 后你会发现——瓶颈在生成模型的\u0026quot;探索能力\u0026quot;，不在\u0026quot;筛选能力\u0026quot;。\n实战经验：做好 RFT 的五个技巧 技巧 1：K 值怎么选？\nK（每组采样的轨迹数）是 RFT 中最重要的参数。我的经验是：\nK=4 是最低要求，再少则样本覆盖率不够 K=8~16 是 sweet spot K\u0026gt;32 时收益递减——因为高分轨迹开始大量重复 技巧 2：奖励函数不要复杂\n很多人一上来就设计花哨的奖励函数：碰撞检测 + 舒适度 + 效率 + 交通规则 + 车道保持 + \u0026hellip;\n实际上 RFT 只需要 2-3 个核心指标就够了。越简单的奖励函数，筛选出的数据噪声越小，SFT 训练效果越好。\n技巧 3：不仅要选好的，也要用坏的？\n有些做法是把\u0026quot;好轨迹\u0026quot;当正样本，\u0026ldquo;坏轨迹\u0026quot;当负样本做 contrastive learning。我试过，效果不好。RFT 的核心思路是提纯数据，而不是对比学习。筛选出的正样本直接做 SFT 就够了。\n技巧 4：多轮迭代的频率\n每轮 RFT 后模型会变好，采样到的轨迹质量也更高。但迭代到第 5-8 轮后收益会饱和。这时候需要切换到范式三（策略梯度）才能突破。\n技巧 5：小心伪高分\n有时候奖励函数有 bug，会让某些明显不合理的轨迹得高分（比如急刹车停住不动但碰撞分为 0）。建议每轮 RFT 后人工检查 Top-10 的高分轨迹，确认奖励函数的质量。\n范式三：策略梯度直接优化 核心思想：对生成过程的参数直接算策略梯度，用奖励信号反向传播更新去噪网络。\n代表性工作：Flow-GRPO、DPO for Diffusion、Diffusion Policy Gradient\n这是最\u0026quot;正宗\u0026quot;的 RL，也是最难实现的。\n3.1 核心困境：扩散模型的 log-prob 怎么算？ 回顾 RL 更新公式：\nθ ← θ + α · E[ R(τ) · ∇_θ log p_θ(τ) ]\n这里的问题是 log p_θ(τ) 对于扩散/Flow 模型来说极其复杂。\n为什么？因为\u0026quot;生成一条轨迹 τ\u0026rdquo; 是一个多步迭代过程：\nτ = v ₁ , v ₂ , . , _ T ) 其中 v_t 是第 t 步去噪时的预测速度。我们的生成模型输出的是 T 个这样的速度。\n整个过程的联合概率： p_θ(τ) = p_θ(v₁, v₂, \u0026hellip;, v_T) = p_θ(v₁) · p_θ(v₂|v₁) · \u0026hellip; · p_θ(v_T|v_{T-1})\n在扩散/Flow 中，每一步的分布通常是高斯分布： p_θ(v_t | v_{t-1}) = N(μ_θ(v_{t-1}, t), σ² I)\n所以： log p_θ(τ) = Σ_t log N(v_t; μ_θ(v_{t-1}, t), σ² I) = -½ Σ_t ||v_t - μ_θ(v_{t-1}, t)||² / σ² + const\n但这里有个关键细节：实际生成时，我们用的是确定的 ODE 求解器（如 Euler、RK4），没有随机性。这怎么办？\n3.2 Flow-GRPO 的解决方案 Flow-GRPO（字节跳动, NeurIPS 2025）的解决思路非常优雅：\nODE → SDE 转换：在确定性 ODE 求解中加入少量噪声，让它变成随机微分方程（SDE），这样就重建了可导的 log-prob\nDenoising Reduction：把 T 步的 log-prob 近似压缩成 1 步，大幅降低训练计算量\n使用 GRPO 而非 PPO：不用 critic 网络，省掉大约 40% 的显存\n具体来说：\n标准 Flow 生成：dx = v_θ(x, t) dt（ODE，确定性，无 log-prob） Flow-GRPO 转换后：dx = v_θ(x, t) dt + σ(t) dw（SDE，有随机性，可算 log-prob） log-prob：用 Itô 积分的 Girsanov 定理推算 这个 SDE 转换保证了：\n生成的质量几乎不变（σ(t) 很小） log-prob 终于可以算了 策略梯度可以正式应用 3.3 各策略梯度方法对比 Flow-GRPO vs DPO for Diffusion:\n维度 Flow-GRPO DPO for Diffusion 需要奖励模型 是 否（只需偏好对） 训练稳定性 较高（组归一化） 极高（闭式解） 可探索性 高（采样多条） 低（从已有偏好对学） 代码复杂度 高 中 SDE 转换 需要 不需要（用 ELBO 替代） 个人评价：策略梯度是最有\u0026quot;RL 感觉\u0026quot;的方法，也是我个人认为最有前途的方向。但实话实说，目前的技术成熟度还远不如范式一和范式二。Flow-GRPO 的 SDE 转换虽然优雅，但引入的额外噪声和近似会降低生成质量。DPO for Diffusion 虽然不需要奖励模型，但依赖已有的偏好数据，缺乏探索动力。\n3.4 PPO vs GRPO：到底选哪个？ 如果你要做策略梯度，首先面对的问题是：用 PPO 还是 GRPO？\nPPO 的核心架构：\nActor + Critic 两个网络 Critic 负责估计状态价值 V(s)，作为 baseline 计算优势 A_t = Q(s,a) - V(s) 需要 GAE（Generalized Advantage Estimation）做多步优势估计 Critic 和 Actor 一样大 → 显存 ×2 GRPO 的核心架构：\n只有 Actor，没有 Critic 对同一个输入采样 G 条轨迹，用组内奖励的均值和标准差做基线 A_i = (R_i - mean(R_group)) / std(R_group) 省掉 40-50% 的显存，训练更稳定 在扩散/Flow 模型上的选择：\n我的建议非常明确——选 GRPO，不要选 PPO。\n原因有三：\n扩散模型的 Actor（去噪网络）已经非常大了（几百 M 到几 B 参数），再加一个同样大小的 Critic，显存根本不够 Critic 的输入是\u0026quot;状态\u0026quot;，而扩散模型的状态是整个场景信息（图像、点云等），Critic 也需要同样的视觉编码器 → 等于训两个大视觉模型 扩散模型的生成过程本身就可以采多条轨迹 → GRPO 的\u0026quot;组内采样\u0026quot;成本几乎为零 这也是为什么 Flow-GRPO、DriveVLA-W0 等最新工作全部选择 GRPO。\n3.5 Flow-GRPO 训练循环详解 理解 GRPO 的概念是一回事，理解它如何在扩散/Flow 模型上具体实现是另一回事。\n这张图展示了 Flow-GRPO 的完整训练循环：\nStep 1：ODE → SDE 转换\n标准 Flow 是确定性 ODE：dx = v_θ(x, t) dt Flow-GRPO 加入少量噪声：dx = v_θ(x, t) dt + σ(t) dw σ(t) 通常设得很小（如 σ=0.01），保证生成质量几乎不变 关键作用：SDE 的随机性让 log-prob 变得可计算 Step 2：采样一组轨迹\n对同一个场景/条件 c，从 SDE 采样 G 条轨迹 G 一般取 4-8 条（和 GRPO 的 group size 一致） 对每条轨迹用奖励函数 R 打分 Step 3：组内优势计算\n计算本组奖励的均值 μ 和标准差 σ 每条轨迹的优势 A_i = (R_i - μ) / σ 这就是\u0026quot;组相对\u0026quot;的含义——奖励是相对的，不是绝对的 Step 4：Denoising Reduction\n完整去噪链有 T=50-100 步，每一步都算 log-prob 太贵 DR 技术：随机采样 K 个时间步（K=1-4），只在这几步算 log-prob 近似公式：log p_θ(τ) ≈ (T/K) · Σ log p_θ(v_{t_k} | v_{t_{k-1}}) 训练速度快 10-20 倍，且实验证明效果几乎不变 Step 5：GRPO 策略更新\n用优势 A_i 加权更新 Actor 参数 好的轨迹（A_i \u0026gt; 0）→ 提高生成概率 差的轨迹（A_i \u0026lt; 0）→ 降低生成概率 用 clip 限制更新幅度，防止训飞 整个循环反复迭代，每次迭代模型都变得更好。\n3.6 策略梯度如何通过扩散网络反向传播？ 你可能好奇：说了这么多\u0026quot;策略梯度\u0026quot;，梯度到底是怎么通过几十步去噪网络传回去的？\n让我们一步步看：\n前向生成：从初始噪声 x₀ 开始，经过 T 步去噪，每步调用 v_θ 预测速度/噪声，最终生成轨迹 x_T 计算奖励：R(x_T) 是对最终轨迹的打分 反向传播：∇_θ R(x_T) 需要穿过整个计算图 从 x_T 往回传 → 经过最后一步 v_θ → 到 x_{T-1} → \u0026hellip; → 到 x₀ 每一层都涉及 v_θ 的梯度 这就是\u0026quot;通过时间反向传播\u0026quot;（BPTT），和训练 RNN 的原理类似。\n为什么这很难？\n内存爆炸：T=50 步的计算图，每一步都存中间变量 → GPU 内存不够 梯度消失/爆炸：50 步连乘，梯度要不消失要不爆炸 log-prob 不可导：确定性 ODE 没有概率解释 Flow-GRPO 用两个技巧分别解决：\nDenoising Reduction → 减少 T（从 50 步降为 1-4 步）→ 解决内存和梯度问题 SDE 转换 → 重建 log-prob → 解决概率问题 没有这两个技巧，策略梯度在扩散/Flow 模型上就训不动。\n范式四：世界模型 + RL 核心思想：学一个世界模型做环境，把生成模型当策略，在世界模型里做 RL 训练。\n代表性工作：DriveVLA-W0、DreamerV2/3、Iso-Dream\n这是最\u0026quot;宏大\u0026quot;的范式，也是最复杂的。\n4.1 为什么需要世界模型？ 前面三种范式都有一个共同的问题：奖励只能在轨迹终结后计算。\n在实际驾驶中，一个看似安全的动作可能在 5 秒后导致危险。前面的方法都无法捕捉这种\u0026quot;延迟奖励\u0026quot;。世界模型提供了解决方案：在想象中提前预测未来。\n4.2 架构拆解 世界模型范式的核心架构包含三个组件：\n世界模型（World Model）：学环境的动力学 p(s_{t+1} | s_t, a_t)\n输入：当前状态 + 动作 输出：下一状态的预测分布 在驾驶中，这相当于学了一个\u0026quot;模拟器\u0026quot; 策略模型（Policy/Actor）：生成式轨迹模型，负责决定怎么走\n与世界模型交互，生成动作序列 价值模型（Critic/Value）：估计某个状态值多少钱\n帮助策略在想象中做出更好的决策 训练流程：\n策略生成轨迹（在真实环境或世界模型中） 收集交互数据 (s, a, r, s') 更新世界模型：最小化预测误差 更新策略：用世界模型做 rollout，用 RL 优化 更新价值函数（如果用 Actor-Critic） 世界模型 Rollout 详解 世界模型范式中最核心的操作是 imagination rollout（在想象中 rollout）：\n从当前真实状态 s₀ 出发 策略 π 生成动作 a₀ 世界模型预测下一状态 ŝ₁ = WM(s₀, a₀) 策略 π 基于 ŝ₁ 生成 a₁ 世界模型预测 ŝ₂ = WM(ŝ₁, a₁) 重复直到 rollout 结束 计算累积奖励 Σr_t，更新策略 这个 rollout 完全在\u0026quot;想象\u0026quot;中进行，不需要真实环境交互。这就意味着：\n不需要真车上路（安全） 可以并行 rollout 大量场景（高效） 可以探索极端情况（没有风险） 但前提是世界模型要足够准。\nDriveVLA-W0 的具体做法 DriveVLA-W0（CVPR 2025）把世界模型和扩散策略结合得最紧密：\n世界模型作为条件编码器：世界模型把历史信息编码成潜变量 z 扩散策略以 z 为条件：p_θ(轨迹 | 场景, z) GRPO 在世界模型的 rollout 中做优化 这样做的好处是：世界模型提供的潜变量 z 包含了\u0026quot;未来会怎样\u0026quot;的信息，扩散策略可以根据这个信息调整当前的轨迹。\n比如在十字路口，世界模型预测\u0026quot;右侧车辆 2 秒后会加速\u0026quot;，策略就可以提前减速避让——即使用 SFT 数据里没有这种场景。\nDriveVLA-W0 的 NavSim 榜单结果证明了这套方案的有效性：在 closed-loop 评测中超过了所有纯 SFT 方法和简单的 RL 方法。\n但训练复杂度也相应增加了：需要联合训练世界模型编码器、扩散策略去噪网络、以及 reward model。\n优点：\n理论上上限最高 可以做离线训练（不用真车上路） 可以做多步规划（想象中推演未来） 可以处理 long-horizon 任务 缺点：\n训练复杂度极高（三个模型联合训） 世界模型的精度是瓶颈——如果世界模型预测不准，策略学到的就是错的 分布外问题严重——策略探索到世界模型没见过的区域，世界模型开始\u0026quot;幻想\u0026quot; 个人评价：这是\u0026quot;终极方案\u0026quot;，但现阶段还不够成熟。我用 DriveVLA-W0 的代码试过，训一个世界模型需要的数据量和算力是前面三种范式的 5-10 倍。而且世界模型的\u0026quot;幻觉\u0026quot;问题在自动驾驶中非常致命——想象出一条不存在的障碍物，然后策略绕开它走，学到的完全是无用行为。\n4. Flow Matching + Diffusion + RL：范式三深度拆解（重点） 本章是为我们后续用 Flow-GRPO / DiffGRPO 范式做轨迹生成和轨迹优化的核心参考。 前面第 3 章提到了范式三的基本概念，但不够深入。这里把 Flow Matching、扩散模型、GRPO 三者的结合方式彻底讲清楚，并对比 Flow-GRPO 和 DiffGRPO 两条技术路线的差异。\n4.1 从两个问题出发 在深入之前，先想清楚两个核心问题：\n问题 1：为什么需要 Flow 或 Diffusion？\n轨迹规划的输出是连续的高维向量（一系列 waypoint，每维是坐标/速度/朝向）。我们想要的是一个概率分布 p_θ(轨迹 | 场景)，而不是确定性函数。Flow 和 Diffusion 天然是分布生成器。\n问题 2：为什么需要 GRPO？\nSFT 只能\u0026quot;模仿专家\u0026quot;，不能\u0026quot;超越专家\u0026quot;。GRPO 让模型在\u0026quot;自己生成的轨迹\u0026quot;上通过奖励信号自我改进。而且 GRPO 不需要 Critic 网络，省了 40-50% 的显存——这对大模型训练至关重要。\nFlow/Diffusion 负责\u0026quot;表示分布\u0026quot;，GRPO 负责\u0026quot;优化分布\u0026quot;。 两者结合，形成完整的\u0026quot;生成→评估→改进\u0026quot;闭环。\n4.2 基础回顾：Flow Matching vs Diffusion 虽然它们同属于\u0026quot;生成式模型\u0026quot;家族，但 Flow Matching 和扩散模型在数学框架上有本质差异，这些差异直接影响了后续 RL 集成的难度和方式。\n扩散模型（DDPM） 扩散模型的核心思想是离散时间马尔可夫链：\n前向过程（加噪）：\nx q ₀ ( x → _ t x ₁ | → x _ x { ₂ t - → 1 } ) = → N ( x √ _ ( T 1 - β _ t ) x _ { t - 1 } , β _ t I ) 从干净轨迹 x₀ 逐步加噪，T 步后变成纯噪声。\n反向过程（去噪）：\nx p _ _ T θ ( → x _ x { _ t { - T 1 - } 1 } | → x _ t ) = → N x ( ₀ μ _ θ ( x _ t , t ) , σ _ t ² I ) 从噪声开始，每步预测噪声 ε_θ，逐步还原出轨迹。\n关键特性：\n离散时间步（T=50-1000 步） 每步是高斯条件分布 log-prob 通过 ELBO 下界近似 训练损失 = E[ ||ε - ε_θ(x_t, t)||² ] Flow Matching Flow Matching 的核心思想是连续时间归一化流：\n概率路径：\nx _ t = ( 1 - t ) x ₀ + t x ₁ , t ∈ [ 0 , 1 ] 从数据分布 x₀（t=0）到标准噪声 x₁（t=1）的线性插值路径。\n速度场（Vector Field）：\nd x / d t = _ θ ( x _ t , t ) 模型 v_θ 学习预测\u0026quot;在位置 x_t、时间 t\u0026quot;时的速度方向。\n关键特性：\n连续时间（t ∈ [0,1]） 确定性 ODE 路径（可逆） log-prob 通过 Neural ODE / Girsanov 定理计算 训练损失 = E[ ||v - v_θ(x_t, t)||² ] 核心差异汇总 维度 扩散模型 (DDPM) Flow Matching 时间 离散 (T=50-1000) 连续 (t∈[0,1]) 路径 随机扩散链 确定性 ODE 可逆性 不可逆（有随机噪声） 可逆（ODE 可反向积分） log-prob 精度 ELBO 近似 Girsanov 定理（更精确） 采样速度 慢（步数多） 快（可大步积分） 实现复杂度 低 中 轨迹规划适配 自然（离散时序对齐） 自然（连续路径） 在轨迹规划中的直观理解：\n扩散模型就像\u0026quot;一步一说\u0026quot;地擦除噪声：先看清大概方向，再逐渐聚焦到精确轨迹。每一步都在小幅修正。\nFlow Matching 就像\u0026quot;顺着水流走\u0026quot;：从噪声出发，沿着速度场指引的方向匀速前进，时间从 0 到 1 正好生成完整轨迹。\n两者在纯生成任务上效果相近，但在 RL 集成上有显著差异——因为 log-prob 的\u0026quot;可计算性\u0026quot;和\u0026quot;精度\u0026quot;直接影响策略梯度的质量。\n4.3 Flow-GRPO：Flow Matching + GRPO 的完整方案 Flow-GRPO（字节跳动，NeurIPS 2025）是目前最完整的\u0026quot;Flow Matching + GRPO\u0026quot;方案。它的设计解决了三个核心问题：\n问题 1：确定性 ODE 没有 log-prob → 怎么算策略梯度？\n解法：ODE → SDE 转换\n标准 Flow 的生成过程是确定性 ODE：\nd x = _ θ ( x , t ) d t 这种确定性路径没有概率解释，无法计算 log p_θ(τ)。\nFlow-GRPO 在 ODE 中加入微小噪声，将其转换为 SDE：\nd x = _ θ ( x , t ) d t + σ ( t ) d w 其中 σ(t) 是一个很小的噪声幅度（通常 σ=0.01），w 是维纳过程。\n转换后，生成路径从\u0026quot;一条确定性路径\u0026quot;变成\u0026quot;一束随机路径\u0026quot;。这束路径的概率测度通过 Girsanov 定理 可以精确计算：\nl o g p _ θ ( τ ) = ∫ ₀ ¹ _ θ ( x _ t , t ) | | ² d t / σ ² ( t ) + b o u n d a r y t e r m s 这个公式就是 Flow-GRPO 计算 log-prob 的基础。\n关键权衡：σ(t) 越大 → log-prob 越精确 → 但生成质量下降越多。实践中 σ(t) 通常设得很小（0.01-0.05），保证生成质量几乎不变的同时让 log-prob 可算。\n问题 2：T 步去噪的计算图太大 → GPU 内存不够？\n解法：Denoising Reduction (DR)\n完整去噪链有 T=50-100 步，每一步都需要存储中间变量用于反向传播。T 步的计算图在 GPU 上根本放不下。\nFlow-GRPO 的 DR 技巧：\n不从完整的去噪链算 log-prob 而是随机采样 K 个时间步（K=1~4） 只在这 K 步上计算条件 log-prob 近似公式：\nl o g p _ θ ( τ ) ≈ ( T / K ) · Σ _ { k = 1 } ^ { K } l o g p _ θ ( v _ { t _ k } | _ { t _ { k - 1 } } ) 这个近似在 K≥1 时已经非常准确。K=1 时（只采样一步）都能收敛，K=4 时几乎和完整计算无异。\nDR 的效果：训练速度提升 10-20 倍，GPU 内存降低 5-10 倍。\n问题 3：GRPO 不依赖 Critic，但如何在扩散/Flow 上应用？\n解法：组内采样 + 相对优势\nGRPO 的核心是\u0026quot;组内相对奖励\u0026quot;：\n对同一个场景/条件 c，从 SDE 采样 G 条轨迹（G=4~8） 用奖励函数 R 对每条轨迹打分 组内优势：A_i = (R_i - mean(R_group)) / std(R_group) 优势为正 → 提高该轨迹的生成概率 优势为负 → 降低该轨迹的生成概率 为什么 GRPO 比 PPO 更适合 Flow/Diffusion？\n维度 PPO GRPO 需要 Critic 网络 是（和 Actor 一样大） 否 显存占用 Actor + Critic + Reward = 3 个模型 Actor + Reward = 2 个模型 价值估计 Critic 学出来的（可能不准） 组内统计量（无偏） 实现复杂度 高（需要 GAE、优势裁剪等） 低（几行代码） 训练稳定性 好（有 Critic 做 baseline） 好（组内归一化天然稳定） 对于 Flow/Diffusion 这类大模型（几百 M 到几 B 参数），省掉一个同样规模的 Critic 意味着训练成本直接减半。这也是 Flow-GRPO、DiffGRPO 全部选择 GRPO 的根本原因。\n4.4 Flow-GRPO 训练循环完整拆解 Step 1：ODE → SDE 转换\n标准 Flow 是确定性 ODE：dx = v_θ(x, t) dt 加入少量噪声变成 SDE：dx = v_θ(x, t) dt + σ(t) dw σ(t) 通常设为 0.01-0.05，保证生成质量几乎不变 SDE 的随机性让 log-prob 变得可通过 Girsanov 定理计算 Step 2：组内采样（G=4~8 条轨迹）\n对同一个场景条件 c，从 SDE 采样 G 条轨迹 每条轨迹通过奖励函数 R 打分 组内奖励的差异反映了模型在当前策略下的行为多样性 Step 3：GRPO 组内优势计算\n计算组内均值 μ_R 和标准差 σ_R 优势 A_i = (R_i - μ_R) / σ_R 不需要 Critic 网络做价值估计——省 40-50% 显存 优势是相对的：好轨迹被鼓励，差轨迹被抑制 Step 4：Denoising Reduction\n完整去噪链有 T=50-100 步 DR 技巧：随机采样 K=1~4 个时间步 只在这几步上计算条件 log-prob 训练速度提升 10-20 倍，内存降低 5-10 倍 Step 5：GRPO 策略更新\n用优势 A_i 加权更新去噪网络参数 A_i \u0026gt; 0 → 提高该轨迹的生成概率 A_i \u0026lt; 0 → 降低该轨迹的生成概率 用 KL 散度惩罚防止模型偏离预训练分布太远 4.5 DiffGRPO：扩散模型 + GRPO 的简化方案 DiffGRPO 是 2026 年出现的另一种方案。和 Flow-GRPO 的核心区别在于：它不对生成过程做 SDE 转换，而是直接用扩散模型的训练损失来近似策略梯度。\nDiffGRPO 的简化逻辑 Flow-GRPO 需要做 ODE→SDE 转换，因为 Flow 的确定性路径没有概率解释。但扩散模型的反向过程天生就是随机的——每一步去噪 p_θ(x_{t-1} | x_t) = N(μ_θ, σ²I) 本身就是高斯分布。\n这意味着扩散模型的 log-prob 可以直接写出来：\nl o g p _ θ ( x _ { t - 1 } | x _ t ) = - ½ | x _ { t - 1 } - μ _ θ ( x _ t , t ) | | ² / σ _ t ² + c o n s t DiffGRPO 的核心观察：扩散模型的训练损失 L_simple = E[||ε - ε_θ||²] 和 log-prob 在数学上是等价的（只差一个常数因子）。\n所以 DiffGRPO 的策略梯度可以直接写为：\n∇ _ θ J ( θ ) = E [ R ( τ ) · ∇ _ θ L _ s i m p l e ( θ , τ ) ] 不需要 SDE 转换，不需要 Girsanov 定理，不需要额外噪声。几行代码就能实现。\n实现差异对比 实践中的选择建议 选 Flow-GRPO 的场景：\n你希望理论更完备（log-prob 更精确） 你已经有了 Flow Matching 的代码基础设施 你愿意接受 SDE 转换的复杂度 你的轨迹需要连续时间建模（如非等间距 waypoint） 选 DiffGRPO 的场景：\n你希望快速验证效果（实现成本低） 你已经有现成的扩散轨迹模型 你的资源有限，不想做复杂的 SDE 调试 你的轨迹是等间距 waypoint（扩散模型的离散时间步和轨迹的离散 waypoint 天然对齐） 我的建议：如果你是从零开始搭建，优先尝试 DiffGRPO——它更简单、更稳定、更容易出结果。如果 DiffGRPO 已经达到了性能瓶颈，再升级到 Flow-GRPO 追求更高的上限。\n4.6 具体实现：Flow-GRPO 训练的核心代码逻辑 下面给出一个简化但完整的 PyTorch 伪代码，展示 Flow-GRPO 训练循环的核心逻辑。\ndef flow_grpo_train_step(model, scenes, reward_fn, group_size=8, K=2): \u0026#34;\u0026#34;\u0026#34; Flow-GRPO 单步训练 - model: Flow Matching 模型 v_θ - scenes: 一批场景条件 (多视图图像 + 自车状态) - reward_fn: 奖励函数 R(τ) - group_size: GRPO 组大小 G - K: Denoising Reduction 采样步数 \u0026#34;\u0026#34;\u0026#34; total_loss = 0 for scene in scenes: # === Step 1: 组内采样 G 条轨迹 === trajectories = [] rewards = [] for _ in range(group_size): # SDE 采样：dx = v_θ(x,t)dt + σ(t)dw traj = sde_sample(model, scene, noise_scale=0.01) traj = traj.detach() # 停止梯度，只算奖励 trajectories.append(traj) # 计算奖励 r = reward_fn(traj, scene) rewards.append(r) # === Step 2: GRPO 组内优势 === rewards_tensor = torch.tensor(rewards) mu_r = rewards_tensor.mean() sigma_r = rewards_tensor.std() + 1e-8 advantages = (rewards_tensor - mu_r) / sigma_r # === Step 3: Denoising Reduction 计算 log-prob === for i, traj in enumerate(trajectories): # 随机采样 K 个时间步 t_samples = random.sample(range(T), K) log_prob = 0 for t in t_samples: # 在 SDE 路径上取点 x_t x_t = get_sde_path_point(traj, t) # 模型预测速度 v_pred = model(x_t, t, scene) # Girsanov log-prob 近似 log_prob_t = -0.5 * ||v_pred||² / sigma² * dt log_prob += log_prob_t # DR 缩放 log_prob = log_prob * (T / K) # === Step 4: GRPO 策略更新 === policy_loss = -advantages[i] * log_prob # KL 散度惩罚（防止偏离初始化太远） with torch.no_grad(): ref_log_prob = reference_model(x_t, t, scene) kl_loss = (log_prob - ref_log_prob).mean() loss = policy_loss + beta * kl_loss total_loss += loss # 反向传播更新模型 total_loss.backward() optimizer.step() return total_loss.item() 关键实现细节：\nsde_sample：在 Flow ODE 求解器每一步加入 N(0, σ²dt) 的噪声 sigma 的取值：σ=0.01 是常用起点，太小则 log-prob 计算不稳定，太大则生成质量下降 reward_fn 的设计：推荐 2-3 个核心指标（碰撞、效率、舒适度），不要超过 5 个 beta（KL 惩罚系数）：控制模型更新幅度，常用范围 0.01-0.1 4.7 轨迹生成与优化的具体流程 结合我们实际要做的轨迹生成和优化任务，我把 Flow-GRPO / DiffGRPO 的完整工作流程梳理如下：\n阶段 1：SFT 预训练（初始化） 数据：nuScenes / NAVSIM 专家轨迹 目标：训练 Flow/Diffusion 模型学会\u0026quot;合理轨迹长什么样\u0026quot; 损失：Flow 用 L = E[ ||v - v_θ(x_t, t)||² ]，Diffusion 用 L = E[ ||ε - ε_θ(x_t, t)||² ] 结果：模型可以生成多样化的合理轨迹 这个阶段不涉及任何 RL。目标是让模型有一个好的初始化——在\u0026quot;合理的轨迹空间\u0026quot;内采样。\n阶段 2：奖励函数设计 奖励函数是 RL 成功的关键。对于轨迹规划，我建议的奖励函数结构：\n公式：R(τ) = w_safe · R_safe + w_eff · R_eff + w_comfort · R_comfort + w_rule · R_rule\nR_safe = -碰撞惩罚（碰撞=0, 否则=1） R_eff = 前进距离 / 目标距离（鼓励到达） R_comfort = -jerk² 累积（平滑性惩罚） R_rule = 交通规则遵守（红灯停、车道保持等） 权重建议：\nw_safe = 10.0（安全是最底线，必须拉满） w_eff = 1.0（效率是目标） w_comfort = 0.5（舒适是加分项） w_rule = 2.0（规则遵守重要但优先级低于安全） 核心原则：把安全作为硬性约束（碰撞直接判负），而不是加权项。这样模型不会在安全上做权衡。\n阶段 3：GRPO 强化学习 每轮迭代： 从当前模型采样 G 条轨迹（SDE 或扩散采样） 每条轨迹用 R(τ) 打分 组内优势计算（相对奖励） 用优势加权更新模型参数 KL 惩罚防止训飞 重复 N 轮，直到奖励收敛或达到预期效果 收敛判断：\n奖励均值不再增长（或增长小于 1%） 组内奖励方差缩小（所有采样的轨迹都是好轨迹） 人工检查生成的轨迹：变好了还是变奇怪了？ 阶段 4：评测与部署 闭环评测（如 NAVSIM）：\n碰撞率 ↓（核心指标） 驾驶得分 ↑ 舒适性指标（jerk、加速度变化） 开环评测（如 nuScenes）：\nL2 位移误差 碰撞率 部署前的安全检查：\n模型是否学会了 reward hacking？ 极端场景（cut-in、行人突现）表现如何？ 和规则安全层的冲突情况？ 4.8 常见陷阱与实战经验 陷阱 1：策略梯度 + 扩散训练 = 梯度消失 扩散模型的训练损失 L_simple = E[||ε - ε_θ||²] 在数值上很小（通常 0.01-0.1 量级），但策略梯度的幅度可能更小。两者叠加后，策略梯度的信号容易被噪声淹没。\n解法：\n对策略梯度做梯度裁剪（gradient clipping, max_norm=1.0） 策略梯度的学习率设为 SFT 阶段的 1/10 到 1/100 使用 AdamW 优化器（不是 Adam） 陷阱 2：奖励函数设计不当 → reward hacking 这是 RL 中最常见的问题。一个真实的例子：\n奖励函数：R = 前进距离 - 碰撞惩罚 × 10\n模型学到：以 60km/h 的速度直行，即使前方 20 米有静止车辆也不减速——因为\u0026quot;减速会减少前进距离\u0026quot;，而\u0026quot;碰撞还没发生（在 3 秒后的未来），不扣分\u0026quot;。\n解法：\n加入碰撞提前预警：如果与前方障碍物的 TTC（碰撞时间）\u0026lt; 3s，就扣分 把终点到达作为硬约束（没到达=直接判负） 使用模仿学习奖励（生成的轨迹和专家轨迹的相似度）作为辅助信号 陷阱 3：GRPO 组大小的选择 G（组大小）是 GRPO 中最重要的超参数：\nG 值 优势 劣势 G=2 显存最低 优势估计噪声大 G=4 常用，性价比高 偶尔不稳定 G=8 优势估计最稳 显存翻倍 G=16 理论最优 显存需求高 我推荐 G=4 起步。如果训练不稳定，增大到 G=8。一般来说，G=4 已经足够给出稳定的优势估计。\n陷阱 4：预训练模型被\u0026quot;训飞\u0026quot; SFT 预训练的 Flow/Diffusion 模型有一个良好的初始分布。GRPO 更新后，模型可能逐渐偏离这个分布，生成\u0026quot;奖励高分但不合理\u0026quot;的轨迹。\n解法：\nKL 惩罚项（Flow-GRPO 标准做法）：L = L_policy + β · KL(π_θ || π_ref) β 通常取 0.01-0.1 如果 KL 散度持续增大 \u0026gt; 10，说明模型偏离太远了，需要减小学习率或增大 β 定期测试模型在原始 SFT 数据上的 loss——如果 loss 显著增大，说明模型在\u0026quot;遗忘\u0026quot;基础能力 4.9 Flow-GRPO vs DiffGRPO 的选择决策树 Q1: 你是否有现成的扩散轨迹模型代码？\n是 → 优先选 DiffGRPO（几行代码改动即可实现） 否 → 进入 Q2 Q2: 你是否需要精确的 log-prob？\n是 → Flow-GRPO（Girsanov 定理更精确） 否 → 进入 Q3 Q3: 你的轨迹是否等间距 waypoint？\n是 → 两者都可，推荐 DiffGRPO（实现更简单） 否 → Flow-GRPO（连续时间建模更自然） Q4: 你的计算资源？\n有限（8 卡以内）→ DiffGRPO（不需要 SDE 调参） 充裕（32 卡以上）→ Flow-GRPO（理论上限更高） 我的最终建议：\n第一步：用 DiffGRPO 快速验证\u0026quot;RL 是否对轨迹生成有效\u0026quot; 第二步：效果确认后切换到 Flow-GRPO，追求更好的性能 长期：两条路线都保持关注。DiffGRPO 的方向是\u0026quot;更稳定的近似\u0026quot;，Flow-GRPO 的方向是\u0026quot;更精确的理论\u0026quot;，两者都在快速演进中。 对于我们的项目：我建议 从 DiffGRPO 开始，原因是：\n代码改动量最小，可以快速验证 RL pipeline 扩散模型在轨迹生成上的表现已经过充分验证（Diffusion Planner、DiffusionDrive 等） 等 DiffGRPO 效果确认后，再决定是否需要升级到 Flow-GRPO 追求上限 维度 范式一：奖励引导 范式二：拒绝采样 范式三：策略梯度 范式四：世界模型 实现难度 ★☆☆☆☆ ★★☆☆☆ ★★★★☆ ★★★★★ 训练成本 0 低 高 极高 推理时间 增加 不变 不变 可能增加 可扩展性 低 中 高 高 理论上限 低 中 高 最高 适用范围 已有好模型 任何模型 希望突破上限 长期规划 技术成熟度 高 高 中 低 训飞风险 无 极低 高 中 代表工作 Diffusion Planner AutoVLA RFT Flow-GRPO DriveVLA-W0 4.2 关于\u0026quot;训飞\u0026quot;的特别讨论 \u0026ldquo;训飞\u0026rdquo;（Training Divergence，训练发散/模型崩溃）是 RL 在自动驾驶中最让人头疼的问题。我观察到：\n范式一永远不会训飞——因为模型权重根本没变 范式二几乎不会训飞——因为每次都是 SFT，而 SFT 的目标是\u0026quot;拟合分布\u0026quot;，不是\u0026quot;最大化奖励\u0026quot; 范式三容易训飞——策略梯度是\u0026quot;向着奖励最大的方向走\u0026quot;，如果奖励设计有缺陷，模型会钻空子 范式四的训飞风险来自世界模型——不是策略本身训飞，而是世界模型给策略提供了虚假的反馈 我的建议：如果你刚入门，从范式一开始；如果你的项目需要快速落地的效果，从范式二开始；如果你在做研究且资源充裕，挑战范式三或范式四。\n5. 核心挑战深入分析 5.1 Log-Prob 的三个层次 我前面多次提到 log-prob 的问题。现在系统地梳理一下：\n第一层：不需要 log-prob（范式一、二）\n奖励引导：只需要 cost 的梯度，不求 log-prob 拒绝采样：只需要采样能力，不求 log-prob 理由：它们的下个方法是\u0026quot;筛选\u0026quot;而不是\u0026quot;优化\u0026quot; 第二层：需要近似 log-prob（范式三的大多数）\nFlow-GRPO：通过 SDE 转换近似 log-prob Diffusion Policy Gradient：通过 ELBO 下界近似 log-prob 理由：精确计算实在太难，近似够用 第三层：需要精确 log-prob（从理论角度）\n目前没有实用方法能做到 但是像 RLHF 中对语言模型做的 PPO，之所以这么成功，就是因为语言模型的 log-prob 可以精确计算（因为每一步 token 的概率是精确的） 这可能是生成式轨迹的 RL 还没达到语言模型那样成熟度的根本原因 5.2 Reward Hacking：RL 最头疼的问题 Reward hacking 是 RL 最经典的失败模式：模型找到了一个\u0026quot;让奖励函数看起来很好\u0026quot;但实际上无用的策略。\n在轨迹规划中，我至少见过这三种形态：\n形态 1：碰撞奖励逃避\n奖励函数说：\u0026ldquo;碰撞了要减分\u0026rdquo; 模型学会：生成\u0026quot;原地不动\u0026quot;的轨迹（因为不动就不会碰撞） 结果：安全分很高，但车不走 为什么？只有惩罚没有正奖励，模型选择\u0026quot;零风险\u0026quot;= 零收益 解决方法：加入\u0026quot;前进距离\u0026quot;正奖励 形态 2：舒适性奖励 gamming\n奖励函数说：\u0026ldquo;jerk 小加分\u0026rdquo; 模型学会：生成无限平滑的直线 结果：舒适分很高，但不去目的地 为什么？舒适权重太大，压制了任务奖励 解决方法：多目标权重合理设计 形态 3：多目标权衡崩溃\n同时优化安全和效率 模型学会：在边界上疯狂试探，找到奖励函数的漏洞 结果：每个目标看上去都不错，但组合起来是危险行为（如贴边高速行驶） 为什么？加权和引入权衡漏洞 解决方法：用约束优化替代加权和 如何缓解 reward hacking？\n先看一个真实案例：我在一个项目中同时优化\u0026quot;安全\u0026quot;和\u0026quot;效率\u0026quot;，权重各 50%。模型学会的是——在十字路口以 80km/h 的速度贴着行人冲过去。碰撞检测说\u0026quot;没碰到（差 5cm）\u0026quot;，安全分满分；速度达标，效率分满分。但这是人敢开的吗？\n从这件事我学到了几个原则：\n奖励函数越简单越好。不要超过 3-4 个目标的加权组合。更多目标意味着更多权衡漏洞。 远离边界。如果你发现模型生成的轨迹总是\u0026quot;刚好不碰障碍物\u0026quot;或\u0026quot;刚好达到速度上限\u0026quot;，说明奖励函数在鼓励边界试探。 使用约束优化。把一些指标作为硬约束（如\u0026quot;必须零碰撞\u0026quot;），而不是作为加权项。模型不会在安全上做权衡。 Ensemble reward。用多个不同的奖励函数投票，降低单一奖励被 hack 的风险。 定期人工检查。不要只看聚合奖励分数，定期抽样看模型实际生成的轨迹长什么样。 5.3 探索与利用的困境 RL 的核心矛盾是：探索未知 vs 利用已知。\n在生成式轨迹中，这个矛盾更尖锐：\n如果探索太多（温度设得很高），采样的轨迹全是废的 如果探索太少（温度很低），采样到的都是相似的轨迹 找不到\u0026quot;刚好\u0026quot;的参数 这个问题在范式二中尤其明显——在 RFT 的最后一轮，当所有采样的轨迹都是高分时，RL 训练就停在了。\n目前最有效的解决方法是 entropy bonus（在目标函数里加一项\u0026quot;保持多样性\u0026quot;），但这又引入了另一个超参数\u0026hellip;\n5.4 收敛行为对比 不同范式的收敛行为差异很大，了解这些差异可以帮助你判断训练是否正常。\nSFT（灰色虚线）：\n一开始就接近训练数据平均水平 永远无法超过专家水平线 横轴不适用（SFT 是一次性训练，不是迭代优化） 范式一：推理时引导（蓝色）\n不训练模型，一步到位 效果上限受预训练模型限制 横轴是推理计算量，不是训练步数 范式二：RFT（绿色阶梯线）\n每轮迭代有跳跃式提升 阶梯平台期 = 模型在\u0026quot;消化\u0026quot;新数据 3-5 轮后开始饱和，曲线变平 突破方式：增加采样 K 值 or 转入范式三 范式三：策略梯度（紫色波动线）\n初期波动最大（最容易训飞） 但只要奖励函数稳定，长期趋势向上 有持续增长潜力 如果奖励分数不增长反而下降 → 检查 reward hacking 或训飞 如何判断训练是否健康？\n奖励均值在上升（不是必须单调，但长期趋势向上） 奖励方差在缩小（好的轨迹越来越多，差的越来越少） 生成轨迹的多样性没有消失（如果有 entropy bonus，观察 entropy 值） 人工检查部分高分段和低分段轨迹，确认奖励函数没有 bug 6. 个人思考与未来方向 6.1 我的几个判断 判断一：范式二是当前的性价比之王\n对于大多数团队，实现难度、效果、稳定性综合来看，范式二（RFT）是当前的最佳选择。这也是为什么 AutoVLA 选择这个方案——简单、可靠、有效。它的信号噪声比最高。\n判断二：范式三是未来，但短期内不会取代范式二\n策略梯度方法（Flow-GRPO 等）在理论上更优美、上限更高。但目前的工程成熟度还不够。我预计 1-2 年内会出现更成熟的 pipeline，让范式三成为主流。\n判断三：世界模型需要「炼丹」级别的投入\n范式四要做对，需要有极致精度的世界模型。而训世界模型本身就是自动驾驶中公认最难的问题之一。除非团队有世界模型方面的长期积累，否则不建议作为第一个尝试的方向。\n6.2 一条技术路线建议 如果让我给一个团队制定路线图，我会建议：\nPhase 1 (1-2 月)：范式一\n已有扩散/Flow 轨迹模型加上推理时引导，快速看效果 Phase 2 (2-4 月)：范式二\n实现 RFT pipeline，迭代 3-5 轮，效果显著提升 Phase 3 (6-12 月)：范式三\n尝试 Flow-GRPO，解决 log-prob 估算问题 研究奖励函数的正确设计，追求超越 SFT 的质变 Phase 4 (长期)：范式四\n世界模型预研，等范式三成熟后再接轨 6.3 如何选择适合你的范式？ 不同团队的情况不同，适合的范式也不同。\n如果你属于以下情况，从范式一开始：\n刚接触 RL，团队没有 RL 经验 模型已经部署，想快速看到 RL 收益 资源有限（没有 GPU 集群做训练） 如果你属于以下情况，从范式二开始：\n有 SFT 经验，想尝试 RL 需要稳定可靠的结果 有标注/奖励函数设计能力 如果你属于以下情况，从范式三开始：\nRL 经验丰富，团队有 RL 研究员 有大量 GPU 资源（至少 8 卡起步） 追求上限，想突破 SFT 瓶颈 愿意接受训飞和调试的代价 如果你属于以下情况，再考虑范式四：\n有世界模型的长期积累 几十万 GPU 小时的预算 追求终极方案 6.4 我觉得最重要的认知 最后想说一点个人感受：\nRL 不是 SFT 的替代品，而是互补品。\nSFT 教会模型\u0026quot;什么看起来合理\u0026quot;，RL 教会模型\u0026quot;什么实际上是好的\u0026quot;。两者缺一不可。\n如果把 SFT 比作\u0026quot;学字帖\u0026quot;，RL 就是\u0026quot;真正写文章去投稿被审稿人骂\u0026quot;。没练过字帖的人写不出字，但只练字帖的人写不出好文章。\n另外，不要迷信 RL。2025 年以来，很多论文喜欢把\u0026quot;RL\u0026quot;当作一个卖点，但实际上很多 RL 改进带来的提升主要来自更多的采样和筛选，而不是 RL 算法本身。我个人的经验是：\n把采样数量翻倍，比你花一个月调 PPO 超参带来的提升大得多。\nRL 不是银弹，但它是这个方向上最有潜力的工具。\n7. 工程实现的一些建议 7.1 代码框架选择 框架 适合场景 学习曲线 RL 支持 备注 PyTorch + custom 研究、实验 陡 灵活 最推荐，自由度最高 Stable-Baselines3 标准 RL 环境 平 丰富 但不支持扩散策略 Ray/RLlib 大规模分布式 中 丰富 适合 Paradigm 3/4 Hugging Face TRL LLM/RLHF 平 GRPO/PPO 配合扩散模型需改写 对于生成式轨迹的 RL，PyTorch + custom 是最主流的选择。因为你需要：\n自定义扩散/Flow 模型的训练循环 自定义奖励函数 自定义采样和筛选逻辑 高度灵活的实验控制 7.2 训练监控 checklist RL 训练比 SFT 容易出各种问题。建议至少监控这些指标：\n必监控：\n奖励均值（每个 batch / 每个 epoch） 奖励方差（reward diversity） 策略熵 / 轨迹多样性 KL 散度（新旧策略之间） clip 比例（PPO/GRPO 中被 clip 的样本占比） 建议监控：\n最大/最小奖励（看是否有异常值） 轨迹长度（模型是否学会\u0026quot;偷懒\u0026quot;停在原地） 碰撞率等具体 safety 指标 生成轨迹的自车速度分布 奖励函数的各子项分解（看是否有某项异常增长） 训飞预警信号：\n奖励突然飙升但生成轨迹明显变差 → reward hacking clip 比例持续 \u0026gt; 50% → 更新步长太大，需要调小 lr 策略熵骤降 → 模式塌缩，模型丧失了多样性 生成轨迹长度突然变短 → 模型学会了\u0026quot;偷懒\u0026quot; 7.3 算力预算参考 范式 训练时间（参考） GPU 需求 数据需求 范式一 0（推理时引导） 1 卡推理 无 范式二 1-3 天 4-8 卡 10K-100K 场景 范式三 3-14 天 8-32 卡 10K-100K 场景 范式四 14-60 天 32-128 卡 100K-1M 场景 注意这些是\u0026quot;从零开始\u0026quot;的大概估计。如果你有预训练模型，范式二和范式三的时间可以减半以上。\n8. 相关工作的对比表 方法 范式 基础模型 RL 框架 需要 reward model 改模型权重 发表 Diffusion Planner 一 扩散模型 Cost Guidance 是（cost func） 否 CoRL 2023 CTG++ 一 扩散模型 Classifier Guidance 是 否 ICRA 2024 AutoVLA 二 VLA RFT 是（规则奖励） 是 NeurIPS 2025 Flow-GRPO 三 Flow Model GRPO 是 是 NeurIPS 2025 DPO for Diffusion 三 扩散模型 DPO 否 是 NeurIPS 2024 Diffusion PG 三 扩散模型 PPO 是 是 arXiv 2024 DriveVLA-W0 四 VLA + WM GRPO + World Model 是 是 CVPR 2025 DreamerV3 四 RSSM Dreamer 是（环境奖励） 是 ICLR 2023 9. 写在最后 这篇文章断断续续写了一个多星期，因为我发现这个方向的文献在快速增长，几乎每周都有新论文出现。就在我写这篇文章的过程中，又冒出了两篇用 GRPO 优化扩散策略的 pre-print\u0026hellip;\n如果这篇文章对你有帮助，欢迎 Star 和讨论。如果我有理解错误的地方，也欢迎指正——毕竟 RL + 生成式轨迹还是一个非常年轻的领域，大家都在学习。\n我们正在见证自动驾驶规划范式的转变：从\u0026quot;学专家\u0026quot;到\u0026quot;在试错中超越专家\u0026quot;。\n附录：常见问题 FAQ Q1: RL + 扩散/Flow 在实车上跑过吗？\nA: 目前大多数工作还在仿真环境中验证。Diffusion Planner 在 CARLA 上做了闭环测试，AutoVLA 在 NAVSIM 上验证，DriveVLA-W0 也在 NAVSIM 上做了闭环评测。实车部署是当前的最大 gap，但从仿真到实车的迁移正在加速。\nQ2: 我需要先学会哪些技术才能做这个方向？\n建议的学习路径：\n扩散模型 / Flow Matching 基础（至少能写训练推理代码） PPO / GRPO 的原理（不需要写，但要知道公式） PyTorch 的自定义训练循环（自己写过 train loop） 自动驾驶的规划基础知识（轨迹表示、坐标变换、碰撞检测） Q3: 用预训练的文生图扩散模型能做轨迹规划吗？\n理论上可以，但效果不好。文生图模型的输出空间是 RGB 像素，轨迹规划的输出是连续坐标。直接迁移需要大量调参。更实际的做法是从零训练一个轨迹扩散/Flow 模型，或者用 Bagel 这种已经预训练好的轨迹生成模型做初始化。\nQ4: 奖励函数需要多少人工设计？\n取决于范式。范式一需要可微的 cost 函数（可能是手工设计的碰撞距离等），范式二需要规则奖励（规则相对容易设计），范式三需要更复杂的奖励函数（因为模型会尝试 hack）。总体来说，奖励函数的设计是这个方向最需要人类直觉的部分——好的奖励函数比好的算法重要得多。\nQ5: RFT 和策略梯度能一起用吗？\n当然可以。事实上这是一个非常有效的组合：\n先用 RFT 做 3-5 轮粗调（快速提升基础质量） 再用 Flow-GRPO 做精调（追求上限） RFT 给 GRPO 提供了一个好的初始化，GRPO 突破了 RFT 的限制。两者互补，不互斥。 Q6: 生成式轨迹的 RL 和 LLM 的 RLHF 有什么异同？\n维度 LLM RLHF 生成式轨迹 RL 动作空间 离散 token 连续 waypoint 动作数量 几百万步 几十到几百步 log-prob 精确可算 近似（扩散/Flow） 奖励来源 人类偏好 规则/仿真 探索代价 低（文本生成） 高（轨迹要安全） 相同点是都用 PPO/GRPO 做策略优化。不同点是轨迹规划的 log-prob 更难算、探索更危险。\nQ7: 我应该从哪篇论文的代码开始看？\n按难度排序：\nDiffusion Planner（最简单，只有推理时引导） AutoVLA（RFT 的完整实现） Flow-GRPO（最完整的策略梯度实现，代码开源） DriveVLA-W0（世界模型 + 扩散策略，最复杂） 10. 参考文献 Diffusion Planner (CoRL 2023) - arXiv:2305.08705 CTG++ (ICRA 2024) - arXiv:2402.05248 AutoVLA (NeurIPS 2025) - arXiv:2505.08701 Flow-GRPO (NeurIPS 2025) - arXiv:2505.05470 DPO for Diffusion (NeurIPS 2024) - arXiv:2311.12962 Diffusion Policy Gradient (arXiv 2024) - arXiv:2403.06326 DriveVLA-W0 (CVPR 2025) - arXiv:2503.13576 DreamerV3 (ICLR 2023) - arXiv:2301.04104 PPO (2017) - Schulman et al. GRPO (DeepSeekMath, 2024) - arXiv:2402.03300 ","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/rl-diffusion-traj/","summary":"RL + 生成式轨迹是 2025-2026 最火热的方向之一。本文从一个小白的视角，梳理 SFT 的天花板、四种 RL 范式（奖励引导、拒绝采样、策略梯度、世界模型），深入分析 log-prob 难题和 reward hacking，用大量对比图和流程图让每个概念一目了然。最后给出了自己的理解和未来方向判断。","title":"个人思考｜强化学习 + 生成式轨迹规划：四种范式、核心挑战与未来方向"},{"content":"一句话理解ROS2 ROS2不是操作系统，而是撑起无人系统分布式通信的骨架——它定义了所有\u0026quot;感知→决策→控制\u0026quot;模块之间如何交换数据，以及每个数据包应该在何时、以何种可靠性送达。\n很多自动驾驶研究者对ROS2的理解停留在\u0026quot;这是一个消息框架\u0026quot;的层面，直到他们的感知模块发出一条里程计消息但规划模块收不到、或者多传感器时间戳不同步导致定位发散，才意识到ROS2远不止一个简单的pub-sub库。本文从工程实践角度出发，系统讲解ROS2在自动驾驶系统中的核心用法和需要避开的坑。\n1. ROS2核心概念 1.1 Node：一切皆节点 Node（节点）是ROS2中最基本的执行单元。一个典型的自动驾驶系统可能有50–200个节点，包括传感器驱动节点、感知融合节点、定位节点、规划节点、控制节点和监控节点等。每个Node是独立进程，拥有自己的生命周期。节点之间通过Topic、Service和Action三种机制通信。\n节点发现通过DDS内置的Discovery协议实现——新节点加入时广播自己的存在，其他节点的DDS层自动维护全网拓扑。一个工程陷阱：在WiFi环境下（如无人车场调试），节点发现延迟可能从局域网下的50ms飙升到500ms以上，导致前端节点已发出消息但后端节点尚未发现。解决方案是在rmw_cyclonedds_cpp配置中将ParticipantExpiryTime缩短到30秒。\n1.2 Topic：异步发布-订阅 Topic提供一对多异步数据分发。发布者写入消息，订阅者接收消息，两者完全解耦。自动驾驶系统中的Topic命名约定为/模块名/数据类型/具体信息：\n/ / / / / / c l l p p c a i o e l o m d c r a n e a a c n t r r l e n r a i p i o t z t n l f o a i g r p t o c o / i n t o n p o / r m t o n a m _ i b j a c n o j e n e t d e c d n s o c t s t _ m t o e r e s r r a t y / w r i y m a g e _ r a w Topic性能取决于消息大小、发布频率和QoS。一帧1920×1080 RGB图像约6MB（未压缩），以30fps发布产生180MB/s的流量，远超DDS默认零拷贝传输吞吐量。实际工程中必须压缩：\nfrom sensor_msgs.msg import CompressedImage compressed_msg = CompressedImage() compressed_msg.format = \u0026#34;jpeg\u0026#34; encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 85] result, encimg = cv2.imencode(\u0026#39;.jpg\u0026#39;, frame, encode_param) compressed_msg.data = encimg.tobytes() publisher.publish(compressed_msg) JPEG压缩（质量85%）将单帧从6MB压到约50KB，压缩比120:1，编解码延迟约3–5ms（CPU上）或0.5ms（硬件JPEG）。\n1.3 Service：同步请求-响应 Service适用于需要立即响应的同步调用，如\u0026quot;查询参数\u0026quot;\u0026ldquo;校准传感器\u0026rdquo;。调用是阻塞的——客户端发送请求后等待响应。默认超时为无限等待，必须设置合理超时：\nauto future = client-\u0026gt;async_send_request(request); auto status = future.wait_for(std::chrono::seconds(5)); if (status == std::future_status::timeout) { RCLCPP_ERROR(logger, \u0026#34;Service call timed out\u0026#34;); // 回退到默认行为 } 1.4 Action：带反馈的异步任务 Action是Service的增强版，适用于长时间任务（如\u0026quot;导航到B点\u0026quot;\u0026ldquo;执行泊车\u0026rdquo;）。三个阶段：Goal（目标发送）、Feedback（过程反馈）、Result（最终结果）。\nclass NavClient: def __init__(self): self._client = ActionClient(self, NavigateToPose, \u0026#39;navigate_to_pose\u0026#39;) def send_goal(self, x, y, theta): goal_msg = NavigateToPose.Goal() goal_msg.pose.pose.position.x = x goal_msg.pose.pose.position.y = y self._client.wait_for_server(timeout_sec=10.0) self._client.send_goal_async(goal_msg, feedback_callback=self.feedback_callback) def feedback_callback(self, feedback_msg): dist = feedback_msg.feedback.distance_remaining print(f\u0026#34;距离目标还有{dist:.2f}m\u0026#34;) Action的工程难点在于抢占处理——新目标到达时系统应取消当前动作。错误的处理会导致车辆在目标切换时出现异常路径。\n2. DDS通信与QoS策略 2.1 DDS中间件 ROS2底层使用DDS（Data Distribution Service），是OMG定义的工业级分布式数据分发标准。核心特性包括无中心化（节点直接P2P通信）、动态发现（无需手动配置IP）、丰富QoS策略。\n三种主流DDS实现：\nDDS实现 许可证 优势 劣势 Fast DDS Apache 2.0 功能最全、社区最大 内存占用高 Cyclone DDS Eclipse Public 延迟最低、适合嵌入式 功能略少 GurumDDS 商业/开源 轻量级 生态较小 默认使用Fast DDS，但在NVIDIA Jetson Orin等边缘设备上推荐Cyclone DDS——内存占用减少约30%，p99延迟低约40%。\n2.2 QoS策略详解 QoS（Quality of Service）是ROS2上手最容易出问题的部分。\nReliability：RELIABLE保证送达（ACK+重传），BEST_EFFORT不保证。\nDurability：TRANSIENT_LOCAL让新订阅者收到最新历史消息（late joiner），VOLATILE只收新消息。\nDeadline：设置消息发布最小周期，用于检测传感器故障：\nrclcpp::QoS qos_profile(10); qos_profile.deadline(std::chrono::milliseconds(100)); auto sub = node-\u0026gt;create_subscription\u0026lt;LaserScan\u0026gt;( \u0026#34;/lidar/scan\u0026#34;, qos_profile, [\u0026amp;](const LaserScan::SharedPtr msg) { last_lidar_time = node-\u0026gt;now(); }); if ((node-\u0026gt;now() - last_lidar_time).nanoseconds() \u0026gt; 150\u0026#39;000\u0026#39;000) RCLCPP_WARN(\u0026#34;LiDAR data timeout!\u0026#34;); 常见QoS配置：\n场景 Reliability Durability History Deadline 转向控制 RELIABLE VOLATILE KEEP_LAST=1 10ms 相机图像 BEST_EFFORT VOLATILE KEEP_LAST=1 33ms 定位里程计 RELIABLE TRANSIENT_LOCAL KEEP_LAST=10 20ms LiDAR点云 BEST_EFFORT VOLATILE KEEP_LAST=5 100ms 路网地图 RELIABLE TRANSIENT_LOCAL KEEP_ALL N/A QoS不兼容是ROS2最常见的错误。当发布者和订阅者的QoS不兼容时（例如RELIABLE发布者+ BEST_EFFORT订阅者可兼容，反之不行），系统会在运行时抛出INCOMPATIBLE_QOS。规则：双方策略要满足对方最严格的要求。\n2.3 零拷贝传输 ROS2通过零拷贝机制减少大数据量场景的性能损耗。Loaned messages从DDS预分配池借用内存，避免用户空间到内核空间的拷贝。启用零拷贝后LiDAR点云订阅延迟从110μs降至28μs，CPU占用率从15%降至6%。\nrclcpp::LoanedMessage\u0026lt;PointCloud2\u0026gt; loaned_msg(node.get(), \u0026#34;/lidar/points\u0026#34;); auto msg = loaned_msg.get(); msg-\u0026gt;header.stamp = node-\u0026gt;now(); msg-\u0026gt;width = point_count; msg-\u0026gt;data.resize(row_step); publisher-\u0026gt;publish(std::move(loaned_msg)); 3. TF坐标树与消息同步 3.1 TF2坐标变换系统 典型自动驾驶坐标系层次：\nm a p → o d o m → b a s e _ l i n k → { l i d a r _ t o p , c a m e r a _ f r o n t , i m u _ l i n k , w h e e l _ f l , . } base_link到各传感器的变换是静态变换（车辆设计完成后固定），map→odom由定位模块实时发布。\nstatic_broadcaster = tf2_ros.StaticTransformBroadcaster() t = TransformStamped() t.header.frame_id = \u0026#34;base_link\u0026#34; t.child_frame_id = \u0026#34;lidar_top\u0026#34; t.transform.translation.z = 1.85 t.transform.rotation.w = 1.0 static_broadcaster.sendTransform(t) 查找变换务必设置超时——lookup_transform会阻塞直到变换可用：\ntry: trans = tf_buffer.lookup_transform( \u0026#34;base_link\u0026#34;, \u0026#34;lidar_top\u0026#34;, rclpy.time.Time(), timeout=rclpy.duration.Duration(seconds=0.1)) except LookupException: RCLCPP_WARN(\u0026#34;TF chain broken\u0026#34;) except ExtrapolationException: RCLCPP_WARN(\u0026#34;TF extrapolation requested\u0026#34;) 失败常见原因：TF tree断裂（某个中间变换未被发布）或时间戳超出缓存范围（默认10秒）。\n3.2 消息同步 多传感器消息需精确对齐时间戳。ExactTime要求严格一致，ApproximateTime近似对齐（容忍窗口默认50ms）：\ntypedef message_filters::sync_policies::ApproximateTime\u0026lt; LaserScan, Image\u0026gt; SyncPolicy; message_filters::Subscriber\u0026lt;LaserScan\u0026gt; lidar_sub(node, \u0026#34;/lidar/scan\u0026#34;, 10); message_filters::Subscriber\u0026lt;Image\u0026gt; cam_sub(node, \u0026#34;/camera/image_raw\u0026#34;, 10); message_filters::Synchronizer\u0026lt;SyncPolicy\u0026gt; sync(SyncPolicy(10), lidar_sub, cam_sub); sync.registerCallback([](const LaserScan::ConstSharedPtr\u0026amp; scan, const Image::ConstSharedPtr\u0026amp; image) { fusion_process(scan, image); }); ApproximateTime对10Hz LiDAR+20Hz Camera的组合总能找到匹配对，但在丢帧时容忍窗口内可能找不到，此时同步器跳过当前消息。\n4. rosbag：数据录制与回放 4.1 录制bag文件 典型录制配置：\nr o s 2 / / / / / / / b c l l p p c t a a i o e l o f g m d c r a n e a a c n t / r r r l e n r t e a i p i o f c t z t n l _ f o a i g s r r p t o c t d o / i n t o a n p o / r m t t o n a m i _ i b j a c c n o j e n t e t d e c d e n s o c t s s t _ m t t e r e s r _ r a t y r / w r u i y n m _ a 2 g 0 e 2 _ 6 r 0 a 7 w 1 / 9 c _ o 0 m 0 p 1 r e \\ s s e d \\ 存储量估算（一小时路测）：\n消息类型 单帧大小 频率 每分钟 每小时 压缩图像(1080p, 85%JPEG) 50KB 30Hz 90MB 5.3GB LiDAR点云(64线) 1.2MB 10Hz 720MB 42.2GB 定位里程计 200B 100Hz 1.2MB 71MB 总计 — — ~1.6GB ~96GB 使用压缩和分片：\nr o s 2 b - - - - a c c m s g o o a t m m x o r p p - r e r r b a c e e a g o s s g e r s s - d i i s s o o i q n n z l - - e i m f t l o o 1 e o d r 0 3 n e m 7 g a 3 _ f t 7 t i 4 e l z 1 s e s 8 t t 2 \\ d 4 \\ \\ \\ Zstd对LiDAR点云的压缩比可达3:1到5:1（取决于场景中的点数密度）。\n4.2 回放bag与仿真 r o s 2 b a g p l a y t e s t _ r u n _ 2 0 2 6 0 7 1 9 _ 0 0 1 - c l o c k 1 0 0 - l o o p 使用--clock让回放器发布/clock消息，节点通过use_sim_time:=true参数同步到仿真时间。\n5. 自动驾驶常用消息类型 5.1 sensor_msgs Image：图像数据，支持rgb8/bgr8/mono8/mono16/bayer_*编码 CompressedImage：压缩图像，format可为jpeg/png/h264 LaserScan：2D激光扫描，含angle_min/angle_max/range_max/range_min和ranges[] PointCloud2：3D点云，含fields[]定义点字段、is_dense标记是否含无效点 Imu：IMU测量，含四元数orientation、角速度angular_velocity、线加速度linear_acceleration及6×6协方差矩阵 5.2 nav_msgs Odometry：里程计，含pose.pose、twist.twist及6×6协方差矩阵展开为36个值 Path：路径，PoseStamped序列从起点到终点 OccupancyGrid：占用栅格地图，含resolution、width/height、origin及data[-1未知/0空闲/100占用] 5.3 visualization_msgs Marker：RViz可视化标记，支持ARROW/CUBE/SPHERE/CYLINDER/TEXT_VIEW_FACING，动作含ADD/MODIFY/DELETE MarkerArray：标记数组 5.4 自定义消息 使用.msg文件定义自动驾驶专用消息类型：\n# u u u f g g s d i i i l e e h u D n n n o o o a r e t t t a m m p a t 8 8 8 t e e e t e 3 t t _ i c C C c 2 r r m o t L L l y y s n e A A a c _ _ g d S S s o m m s l O S S s n s s / i b I I i f g g S f j F F f i s s e e I I i d / l t c C C c e P T i i t A A a n o w d m . T T t c s i P e m I I i e e s r s O O o W t i g N N n i W m _ _ t i i C P h t t A E C h i R D o C v E v o e = S a v T r a s 0 R i r h I a i a A n a p N c n e e c = e p 1 o t s w e i s t 6. 工程实践与常见陷阱 6.1 跨进程通信性能上限 同一机器上ROS2回环通信延迟（Cyclone DDS + Ubuntu 22.04 + 10GbE）：\n消息大小 平均延迟 p99延迟 吞吐量 100B（里程计） 45μs 78μs 2.2M msg/s 10KB（压缩图像） 110μs 210μs 900K msg/s 1MB（LiDAR原始） 2.1ms 4.5ms 47K msg/s 超过1MB的大消息延迟显著增加。建议\u0026lt;100KB直接走topic，\u0026gt;1MB走零拷贝或FlatBuffers序列化。\n6.2 时间同步常见问题 时间不同步的典型症状：定位发散（IMU和LiDAR观测错位）、感知滞后（物体位置与画面偏移）、规划与执行脱节。解决方案：使用硬件时间戳（GPS PPS同步）、融合前用Time Synchronizer对齐、log中输出完整处理时间线。\n6.3 Launch文件管理 ROS2使用launch文件管理多节点系统启动，支持组合节点容器实现进程内通信：\ndef generate_launch_description(): return LaunchDescription([ Node(package=\u0026#39;velodyne_driver\u0026#39;, executable=\u0026#39;velodyne_driver_node\u0026#39;), Node(package=\u0026#39;planning\u0026#39;, executable=\u0026#39;planning_node\u0026#39;), ComposableNodeContainer( name=\u0026#39;perception_container\u0026#39;, package=\u0026#39;rclcpp_components\u0026#39;, executable=\u0026#39;component_container\u0026#39;, composable_node_descriptions=[ ComposableNode(package=\u0026#39;localization\u0026#39;, plugin=\u0026#39;localization::LocalNode\u0026#39;), ComposableNode(package=\u0026#39;perception\u0026#39;, plugin=\u0026#39;perception::PerceptionNode\u0026#39;), ]), ]) 7. 总结 ROS2是自动驾驶系统的通信脊椎。掌握它不止于pub-sub API调用，更要理解QoS策略如何在丢帧和延迟之间权衡、TF变换树如何保证传感器数据空间一致性、消息同步如何确保融合算法的时间精确性。成熟自驾系统中ROS2相关基础架构工作（QoS调优、时间同步、零拷贝优化）占总投入的30%以上。建议每一位研究者花1–2周搭建完整的ROS2通信原型系统——这一步节省的调试时间远超投入。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/ros2%E5%85%A5%E9%97%A8/","summary":"ROS/ROS2是自动驾驶和机器人领域的行业标准中间件，但研究新手往往低估了它的重要性。本文从发布-订阅模型出发，讲解ROS2的核心概念（node/topic/service/action）、DDS通信中间件的QoS策略（reliability/durability/deadline）、TF坐标树与消息同步、rosbag的数据录制与回放，以及自动驾驶系统中常用的消息类型栈（sensor_msgs/nav_msgs/visualization_msgs）。","title":"ROS/ROS2入门：自动驾驶中的通信中间件"},{"content":"一句话理解Failure Analysis Failure Analysis不是找bug——而是通过系统化方法确定\u0026quot;模型在当前场景下为什么不行\u0026quot;，并据此判断这究竟是数据问题、模型能力边界、还是系统设计缺陷，最终决定要不要、以及如何投入修改资源。\n训练一个自动驾驶模型也许需要3个月，但让它在长尾场景中可靠运行可能需要3年。在工业级自动驾驶研发中，Failure Analysis（故障分析）相关的工作量通常占总研发资源的40–60%。这不仅是\u0026quot;修bug\u0026quot;的问题，而是一套从数据收集到根因定位再到回归防御的完整工程体系。本文不讨论具体算法如何改进，而是聚焦于Failure Analysis的方法论框架和工程落地经验。\n1. Failure Analysis的方法论框架 1.1 基本分析流程 Failure Analysis的标准工作流包含六个阶段：\nBad Case收集（24小时内）：从路测数据或仿真日志中标记异常行为（碰撞、接管、违规） 现象描述（2小时）：用结构化模板记录故障表现的上下文信息 假设生成（1天）：基于领域经验提出3–5个可能的根因假设 假设验证（2–5天）：通过消融实验、仿真复现、数据回放验证每个假设 根因确认（0.5天）：确定主要根因和次要根因 修复计划（0.5天）：确定修复方案优先级和预计工时 class FailureCase: def __init__(self, case_id, timestamp): self.case_id = case_id self.severity = None # critical / major / minor self.module = None # perception / prediction / planning / control self.scenario_type = None self.phenomenon = \u0026#34;\u0026#34; self.hypotheses = [] self.root_cause = None self.fix_plan = \u0026#34;\u0026#34; self.fix_verified = False 一个case从进入到根因确定需3–10天。在资源紧张时，最有效的做法是按照严重程度和复现率排序，优先处理\u0026quot;影响大\u0026quot;且\u0026quot;复现率高\u0026quot;的case——修复一个高频bad case对系统整体表现的提升远大于修复十个偶发case。\n1.2 故障分类Taxonomy 采用\u0026quot;四层分类\u0026quot;体系：失效模块×场景语义×触发条件×严重程度。\n第一层：失效模块（占比来自某L4级城区公司1000个bad case统计）\n感 - - - - - 预 - - - - 规 - - - - 控 - - - - 知 测 划 制 层 漏 误 分 速 深 层 轨 意 交 长 层 决 轨 风 安 层 跟 执 响 车 检 检 类 度 度 迹 图 互 时 策 迹 险 全 踪 行 应 辆 ( （ （ 错 估 估 ( 预 预 建 间 ( 错 优 评 约 ( 误 器 延 模 ~ F F 误 计 计 ~ 测 测 模 预 ~ 误 化 估 束 ~ 差 饱 迟 型 3 a a （ 偏 偏 2 错 错 失 测 3 （ 失 错 违 1 过 和 （ 偏 5 l l M 差 差 5 误 误 败 退 0 应 败 误 反 0 大 （ \u0026gt; 差 % s s i （ （ % （ （ （ 化 % 让 （ （ （ % （ 达 1 （ e e s \u0026gt; \u0026gt; ) 偏 直 未 （ ) 行 无 低 轨 ) \u0026gt; 到 0 模 o c 5 3 差 行 考 \u0026gt; 却 可 估 迹 0 物 0 型 f N P l m 0 \u0026gt; v 虑 5 加 行 遮 违 . 理 m 与 e o a / % 车 s 多 s 速 解 挡 反 3 极 s 实 f g s s s ） 道 转 a 后 ） 或 行 安 m 限 ） 际 a a i s ） 宽 向 g 误 轨 人 全 ） ） 动 i t t i 度 判 e 差 迹 风 距 力 l i i f ） 断 n 剧 不 险 离 学 u v v i 错 t 增 光 ） 约 差 r e e c 误 交 ） 滑 束 异 e ） ） a ） 互 ） ） ） s ： ： t ） ) 模 检 i 型 测 o 未 到 n 检 不 ） 测 存 ： 到 在 类 障 的 别 碍 障 错 物 碍 误 物 纯视觉系统感知层故障可占50%以上，多模态融合（LiDAR+相机+Radar）系统可降至25%左右。\n严重程度分级：\n级别 定义 示例 处理优先级 CRITICAL 必然导致碰撞 对向车道车辆完全漏检 48h内修复 MAJOR 高概率碰撞 未避让横穿行人 1周内修复 MINOR 影响舒适性 不必要的急刹或频繁变道 1月内修复 INFO 可改进 轨迹不够平滑 可选修复 2. 故障归因的消融策略 2.1 消融实验设计 模块化消融（Modular Ablation）逐层替换或抠除可疑模块来隔离故障源头。对于端到端系统：\nS S S S t t t t e e e - e p p p p b + + + 1 2 3 a 4 : : : s G G G : e T T T 量 确 逐 l 感 预 规 根 化 认 模 i 知 测 划 因 故 故 块 n 确 障 障 回 e → → → 认 现 可 溯 （ ： 象 复 端 追 追 追 预 （ 现 到 尾 尾 尾 测 如 （ 端 模 \" 自 模 ( ( ( 块 追 车 型 8 1 2 对 尾 6 ） 5 2 % 前 \" 0 → % % ) 车 : k ) ) 制 m 追 动 最 / 尾 意 小 h 图 车 , ( 的 距 碰 预 \u0026lt; 前 撞 测 0 车 率 延 . - 9 → → → 迟 5 6 5 超 m m % 感 预 规 过 ） / ) 知 测 划 5 s 不 是 不 0 ² 是 主 是 0 , 主 要 主 m 要 因 要 s 车 因 素 因 距 素 素 2 5 m ） class AblationExperiment: def __init__(self, model, scenario_loader): self.model = model self.scenarios = scenario_loader def evaluate(self, debug_mode): modes = [\u0026#34;gt_perception\u0026#34;, \u0026#34;gt_prediction\u0026#34;, \u0026#34;gt_planning\u0026#34;, \u0026#34;gt_all\u0026#34;, \u0026#34;full\u0026#34;] results = {} for mode in modes: collisions = 0 for scenario in self.scenarios: if mode == \u0026#34;gt_perception\u0026#34;: detections = load_gt(scenario) predictions = model.predict(detections) trajectory = model.plan(predictions) # ...其他模式 if check_collision(trajectory, scenario): collisions += 1 results[mode] = collisions / len(self.scenarios) return results 2.2 因果链追踪的5个问题 Q1: 是否感知到了？——检查检测结果中是否包含目标。如果没有，说明是感知漏检；如果有，检查检测框精度和速度估计是否准确。\nQ2: 是否预测对了？——对比预测轨迹与后验数据，计算ADE（平均位移误差）和FDE（最终位移误差）。\nQ3: 是否规划出了安全轨迹？——区分优化失败（无可行解）vs 决策错误（选了不安全轨迹）。\nQ4: 是否控制到位？——检查跟踪误差和执行器是否饱和。\nQ5: 是否存在系统级失效？——通信延迟、计算资源竞争、时间戳未同步等不归因于单模块的系统性问题。\n2.3 传感器故障模式 LiDAR遮挡：前车尾气/大雨/泥污使有效距离从100m降至40m 相机过曝/欠曝：隧道出口10lux→100,000lux，需HDR或自动曝光调节，过渡需3–5帧 IMU漂移：消费级IMU零偏约5°/h，无GPS隧道中60秒位置漂移10–30m Radar干扰：多车近距离互扰，点迹密度增加5–10倍 传感器故障呈\u0026quot;间歇性\u0026quot;——同一场景复现率低，但同类故障在不同场景反复出现。应提取模式进行批量修复。\n3. 场景还原与仿真复现 3.1 从路测到仿真场景 技术流程：离线时间戳对齐（使用PTP时间戳）→自车位姿重建（若定位已发散则需后验batch优化+loop closure）→交通参与者轨迹提取（使用离线LiDAR追踪避免感知模块污染）→静态环境重建（从HD Map或SLAM地图提取路网）→场景格式转换（OpenSCENARIO 2.0）。\n难点在于交互还原——仿真回放中预录轨迹固定，参与者不会对自车变化做出反应。常用折衷方案是\u0026quot;混合回放\u0026quot;：自车由被测算法控制，其他参与者按预录轨迹刚性执行。\n3.2 可复现率与置信度 影响复现率的三因素：\n传感器差异：仿真与真实传感器特性不完全一致，复现率80–85% 车辆动力学误差：极限工况下Bicycle Model偏差大，复现率50–60% 环境交互差：路面起伏/风阻/轮胎温度等被简化 综合复现率65–75%，25–35%的故障无法在仿真中复现，需依赖其他方法分析。\n3.3 场景裁剪与最小复现条件 逐项移除场景元素，每次检查故障是否仍然发生：\n原 最 始 小 ： - - - - 复 自 现 车 移 改 前 自 条 6 除 为 车 车 件 0 邻 晴 速 速 ： k 车 天 度 度 自 m = = 车 / → → 0 3 6 h 0 0 , 仍 仍 → k 发 发 → m 前 生 生 故 / 车 （ （ 障 故 h 5 不 不 消 障 , 0 必 必 失 消 k 要 要 （ 失 前 m ） ） 前 （ 车 / 车 自 静 h 运 车 止 , 动 速 , 状 度 车 态 必 车 距 必 要 距 3 要 ） 3 0 ） 0 m m , , 三 直 车 道 道 , 邻 车 , 阴 天 最小条件直接指示根因——系统在前车静止且高速接近时存在感知或预测问题。\n4. 长尾场景的系统性发现 4.1 基于聚类的场景发现 从大量路测数据中挖掘相似场景：\n路 测 数 据 ( → → 1 0 降 参 0 维 数 0 ( 化 h U 扩 , M 展 A ~ P → 3 ) 6 放 T → 入 B 场 ) 聚 景 类 库 → ( H 特 D 征 B 提 S 取 C ( A 速 N 度 ) / 车 → 距 / 每 车 簇 道 提 / 取 天 代 气 表 / 性 交 场 通 景 密 度 / 曲 率 等 ) HDBSCAN无需预设聚类数。500小时城区路测通常产出80–120个场景簇，其中15–20个是系统从未见过的\u0026quot;新场景\u0026quot;。聚类质量取决于特征设计——既要判别性又要可解释性，避免\u0026gt;100维导致结果难以解读。\n4.2 基于异常检测的场景发现 三种信号：\n预测不确定性：MC Dropout/Deep Ensemble的方差在OOD场景中是正常值的3–10倍 特征空间距离：中间层embedding距训练集距离超阈值时为分布外样本 动作差异：模型输出与历史外推趋势的显著偏差（如直道上突然大转向） class ActionAnomalyDetector: def __init__(self, window_size=10, z_threshold=3.0): self.history = deque(maxlen=window_size) def detect(self, current_action): if len(self.history) \u0026lt; 5: self.history.append(current_action); return False predicted = np.mean(np.array(self.history)[-3:], axis=0) residuals = np.abs(np.array(current_action) - predicted) std = np.std(np.array(self.history)[-5:], axis=0) + 1e-6 z_scores = residuals / std is_anomaly = np.any(z_scores \u0026gt; self.z_threshold) self.history.append(current_action) return {\u0026#34;is_anomaly\u0026#34;: is_anomaly, \u0026#34;z_scores\u0026#34;: z_scores} 4.3 基于对抗搜索的场景发现 基于RL的场景生成器：训练RL agent配置场景参数使被测系统失效。场景生成器学会的\u0026quot;攻击策略\u0026quot;本身有分析价值——揭示系统在哪种场景中最脆弱。\n基于BEV-Grid的对抗搜索：将场景表示为BEV网格上的离散变量，用遗传算法搜索使规划损失最大的配置。发现的场景往往\u0026quot;反直觉\u0026quot;——看起来不危险但正好落在模型薄弱环节（如小角度切入在BEV离散化中边缘模糊）。\n5. Bad Case追踪与回归防御体系 5.1 Bad Case追踪系统 持久化数据库记录每个case的完整生命周期：\nCREATE TABLE failure_cases ( case_id SERIAL PRIMARY KEY, severity VARCHAR(10), module VARCHAR(20), scenario_type VARCHAR(50), description TEXT NOT NULL, root_cause VARCHAR(50), fix_status VARCHAR(20) DEFAULT \u0026#39;pending\u0026#39;, fix_commit_hash VARCHAR(40), parent_case_id INTEGER, regression_ids INTEGER[] ); CREATE INDEX idx_severity ON failure_cases(severity); CREATE INDEX idx_module ON failure_cases(module); CREATE INDEX idx_status ON failure_cases(fix_status); 关键能力：同类聚合（同一根因的几十个case自动归并，修复后统一验证）、回归溯源（git blame关联到提交记录）、趋势分析（按月统计新增/关闭/backlog数量）。\n5.2 回归测试场景库管理 规模控制：Core Suite 500个（每commit），Extended Suite 5000个（每日），Full Suite 50000个（每周）。\n清理策略：修复后连续3个月无报警，core→extended→archive逐级降级。约60%不复发，但约30%会因其他模块变更重新出现。\n5.3 CI中的Failure Analysis集成 自动标注：路测数据上传后自动检查碰撞/接管/违规，召回率\u0026gt;95%。\n自动建议：faiss向量检索匹配历史case推荐根因：\nclass RootCauseRecommender: def __init__(self, historical_cases): self.index = faiss.IndexFlatL2(feature_dim) self.labels = [] for case in historical_cases: vec = self.extract_features(case) self.index.add(np.array([vec])) self.labels.append(case.root_cause) def recommend(self, new_case, top_k=3): vec = self.extract_features(new_case) distances, indices = self.index.search(np.array([vec]), top_k) return [{\u0026#34;root_cause\u0026#34;: self.labels[i], \u0026#34;similarity\u0026#34;: 1.0/(1.0+d)} for i, d in zip(indices[0], distances[0])] 自动回归防御：每commit运行core suite，失败时定位最近变更并通知开发者。\n6. Failure Analysis成熟度模型 等级 名称 特征 平均修复时间 L1 被动响应 bug来了才修，凭个人经验 2–4周 L2 系统化追踪 有追踪系统和标准分析流程 5–10天 L3 主动发现 聚类/异常检测主动探索边界 2–5天 L4 自动化防御 全自动标注/建议/回归防御 1–2天 很多团队卡在L2→L3跃迁上，因为主动发现需要场景挖掘系统和仿真闭环（3–6个月建设投入）。但从长期看，主动发现决定了系统能否从\u0026quot;demo级\u0026quot;走向\u0026quot;产品级\u0026quot;——被动响应的速度永远追不上长尾场景的涌现速度。\n7. 总结 Failure Analysis的核心问题不是\u0026quot;这个bug怎么修\u0026quot;，而是\u0026quot;如何在数万小时驾驶数据中找到系统真正的薄弱环节，并判断哪些值得投入资源\u0026quot;。从故障分类到消融归因、从场景复现到长尾搜索、从bad case追踪到回归防御，这是一条从被动救火到主动防御的演进路线。成熟的FA体系可将长尾故障率降低1–2个数量级，其投入产出比在自动驾驶工程化中是最高的——远高于刷一个新的SOTA评测指标。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E5%9C%BA%E6%99%AF%E7%90%86%E8%A7%A3%E4%B8%8Efailure-analysis/","summary":"自动驾驶系统的每次路测都会产生大量bad case，如何从海量数据中系统化地分析模型失败的根因是一项关键工程能力。本文讲解failure analysis的方法论框架：场景分类taxonomy（感知失败/预测失败/规划失败/控制失败）、故障归因的ablation策略、场景还原与仿真复现、长尾场景的systematic discovery（基于聚类/基于异常检测/基于对抗搜索）、以及建立持续性的bad case追踪与回归防御体系。","title":"场景理解与Failure Analysis：定位自动驾驶的边界"},{"content":"一句话理解仿真器搭建 仿真器不是游戏引擎的简单套用——它需要在渲染逼真度、物理保真度和运行速度之间做艰难取舍，而仿真测评系统搭建的本质是决定\u0026quot;在哪个层面简化真实世界的复杂度\u0026quot;。\n自动驾驶仿真器搭建涉及大量工程决策：选用什么级别的渲染引擎？传感器噪声模型怎么加？场景是参数化生成还是人工编辑？仿真的逼真度越高，运行速度越慢，能在固定时间内覆盖的里程越少。本文从工程实践出发，覆盖从仿真器选型到大规模并行测试的完整技术栈。\n1. 主流仿真器选型对比 1.1 仿真器能力矩阵 特性 CARLA 0.10 MetaDrive NVIDIA Isaac Sim AlpaSim 引擎 Unreal 5 Panda3D Omniverse RTX 自研C++ 渲染质量 ★★★★☆ ★★☆☆☆ ★★★★★ ★★★☆☆ 物理精度 ★★★☆☆ ★★★☆☆ ★★★★★ ★★★★☆ 运行速度(单核) 0.8x real-time 3x real-time 0.3x real-time 5x real-time 大规模并行 △(有限) ✅(原生) ❌(单卡) ✅(分布式) 传感器仿真 相机/LiDAR/Radar 基本LiDAR 物理级 统计级 场景编辑 图形化编辑器 Python脚本 USD Stage 配置文件 开源协议 MIT Apache 2.0 免费(非商用) 商业 不存在\u0026quot;最好的仿真器\u0026quot;，只有\u0026quot;最适合当前测试目标的仿真器\u0026quot;。核心选型决策取决于你的瓶颈在哪里：是渲染质量？运行速度？还是物理精度？\n1.2 CARLA：通用型首选 基于Unreal Engine 5，是自动驾驶研究中使用最广泛的仿真器（引用量\u0026gt;5000）。传感器仿真管线：\n相机：通过Scene Capture组件渲染RGB/Depth/Semantic Segmentation/Instance Segmentation。渲染质量直接取决于地图和材质的精细程度。 LiDAR：Ray-Casting算法模拟扫描，每条射线从LiDAR原点沿指定角度投射，与mesh求交得到命中点。支持200m有效距离和最大256条射线的旋转扫描。 Radar：简化反射模型，基于表面材料属性计算回波强度，默认可探测150m范围内车辆和50m范围内行人。 单实例在RTX 4090上约0.8–1.2倍实时速度，单次tick()调用耗时8–15ms。并行100个场景需要大量GPU资源，成本极高。\n1.3 MetaDrive：大规模并行的正确选择 由UC Berkeley于2022年发布，不追求视觉逼真度（使用Panda3D），追求极致的运行速度和场景多样性。单张RTX 3090可同时运行128个实例，总帧率超5000fps——1小时产生约1800万帧驾驶数据，是CARLA同等硬件下三个数量级以上的吞吐量。\nimport metadrive env_config = dict( use_render=False, start_seed=0, num_scenarios=1000, traffic_density=0.2, map=\u0026#34;CCC\u0026#34;, agent_control=False) env = metadrive.MetaDriveEnv(env_config) env.start_multi_proc_render(proc_num=16) 代价是传感器仿真粗糙——LiDAR不支持多回波和强度衰减模型。常见组合：训练用MetaDrive，评测用CARLA。\n1.4 NVIDIA Isaac Sim：物理精度至上的工业方案 基于Omniverse平台，使用Path Tracing实现物理级精确传感器仿真，能够模拟光线折射、反射、散射等真实光学效应。物理引擎基于PhysX 5，支持柔体仿真（轮胎形变、悬挂振动）和精确碰撞检测，轮胎-地面摩擦系数与真实车辆偏差\u0026lt;3%。\n完全启用Path Tracing后RTF仅0.3–0.5x（仿真1分钟需要2–3分钟计算）。最佳实践：训练用MetaDrive，验证用CARLA，HIL用Isaac Sim。\n1.5 AlpaSim：端到端可微仿真 2025年开源的商业级仿真器，为端到端可微仿真优化。使用自研C++渲染引擎，支持渲染管线末端输出可微的RGB图和深度图，使策略梯度可直接反向传播到环境参数中。使用\u0026quot;统计级传感器仿真\u0026quot;——基于真实数据拟合噪声分布，以统计采样生成传感器数据，相比Isaac Sim加速约80倍，感知精度差异在3%以内。\nfrom alpasim import ScenarioEditor, SensorConfig scenario = ScenarioEditor() scenario.set_map(\u0026#34;highway_4lane\u0026#34;) scenario.place_vehicle(\u0026#34;ego\u0026#34;, position=(0, 0, 0), speed=30.0) scenario.place_vehicle(\u0026#34;adversary1\u0026#34;, position=(50, -3.5, 0), speed=15.0) scenario.parameterize(\u0026#34;adversary1.speed\u0026#34;, range=(10.0, 25.0), step=0.5) scenario.parameterize(\u0026#34;ego.reaction_time\u0026#34;, range=(0.3, 1.5), step=0.1) scenarios = scenario.mesh_all_params() print(f\u0026#34;Total: {len(scenarios)}\u0026#34;) # 360个场景 2. 传感器仿真与渲染管线 2.1 相机仿真 渲染管线质量由光照模型、材质系统和后处理效果决定。CARLA使用UE定向光+天空球+点光源，晴天场景光照精度约±5%（以真实Lux值为基准），但逆光/黄昏/隧道出口等极端场景误差可达±30%。\n材质系统经常被低估——仿真器道路反射率如果与真实道路偏差5%，训练出的感知模型会产生系统性偏差。CARLA车道线材质反射率（0.6–0.7）与真实新车道线（0.5–0.6）偏差约10%，需手动调整。\n运动模糊影响显著：60km/h时30fps相机相邻帧位移0.56米，导致检测框偏移约0.1米。\n相机仿真性能基准：\n分辨率 渲染方式 帧时间(ms) 对应fps GPU内存(GB) 1920×1080 光栅化 2.1 476 2.5 1920×1080 路径追踪 38.5 26 8.2 3840×2160 路径追踪 152.0 6.5 15.3 2.2 LiDAR仿真 Ray-Casting核心参数包括：垂直视场角（32线-25°+15°，64线-15°+15°）、水平分辨率（0.1°–0.4°，对应900–3600点/圈）、有效距离（50m–200m）、回波模式（单回波/最强回波/最后回波）。\n最重要的噪声模型是光束发散（beam divergence）。真实激光束发散角0.1–0.5mrad，击中物体边缘时光斑部分落在前景和背景，产生\u0026quot;边缘涂抹\u0026quot;效应：\ndef simulate_lidar_beam_divergence(hit_points, divergence_angle=0.3e-3): ranges = np.linalg.norm(hit_points, axis=1) noise = np.random.normal(0, divergence_angle * ranges, (len(ranges), 3)) noisy_points = hit_points + noise noisy_ranges = np.linalg.norm(noisy_points, axis=1) thermal_noise = np.random.normal(0, 0.02, len(ranges)) return noisy_ranges + thermal_noise 2.3 Radar仿真 Radar仿真最具挑战性（多次反射、多普勒频移、极化散射）。三层处理：几何层（计算交点）、电磁层（RCS计算回波强度，车辆尾部10–20dBsm，行人0–5dBsm）、信号处理层（CFAR检测+多普勒FFT）。多数开源仿真器只实现了几何层。实用方案：几何层输出后根据经验分布添加噪声（距离噪声std=0.5m，方位角噪声std=1°，速度噪声std=0.3m/s）。\n3. SIL与HIL测试架构 3.1 Software-in-the-Loop SIL是被测算法运行在通用计算平台上，通过仿真环境替代真实传感器和执行器，目标是无硬件约束下快速验证算法功能性。\nSIL架构：管理节点（场景生成器→仿真调度器→结果收集器）分发任务给多个仿真引擎实例，每个实例运行完整感知-规划-控制算法栈。在标准HPC集群（256核+8张RTX 4090）上，MetaDrive的SIL配置可达每小时2.5万公里虚拟里程。\nSIL局限性：假设传感器驱动延迟为零、执行器响应无限快、通信无延迟。这个假设在后期验证中会被打破。\n3.2 Hardware-in-the-Loop HIL将车载计算平台（如Orin、TDA4、Aurix TC397）接入仿真环，用硬件I/O替代软件API。HIL覆盖SIL无法验证的硬件问题：\n计算延迟：Orin上感知管线需45ms，规划模块收到的信息已过时45ms 调度抖动：控制模块被IMU处理抢占，输出延迟2–15ms 内存带宽瓶颈：多路4K视频解码占用60%带宽，推理速度从45ms退化到85ms HIL时序要求：\n- - - - 仿 传 硬 全 真 感 件 环 t 器 控 总 i 数 制 延 c 据 反 迟 k 注 馈 : 延 入 采 迟 延 集 \u0026lt; : 迟 : 2 : 0 \u0026lt; \u0026lt; m 1 \u0026lt; 2 s 0 5 m m m s s s ( 硬 实 时 ) 典型HIL失效模式：HIL中碰撞率0.5%的系统在真实路测中碰撞率1.7%——差异主要来自未建模的硬件时序。\n3.3 Vehicle-in-the-Loop VIL将真实车辆放在测试场，感知输入由仿真器生成，执行器动作在真实车辆上生效。需要GPS-RTK+PTP（IEEE 1588）实现\u0026lt;1ms的同步精度。VIL是连接仿真测试和路测的\u0026quot;最后一公里\u0026quot;桥梁。\n4. 场景编辑器与参数化场景生成 4.1 场景表征与OpenSCENARIO 场景包含三要素：静态环境 + 动态参与者行为 + 度量指标。ASAM OpenSCENARIO 2.0是行业标准场景格式：\nscenario CutInScenario: param ego_speed: km/h = 60 param cutin_speed: km/h = 80 param cutin_distance: m = 40 param cutin_duration: s = 3.5 init: EgoVehicle.speed = ego_speed CutinVehicle.position = (50, -7, 0) behavior CutinManeuver: timeline at 1.5s: CutinVehicle.start_lane_change(left, duration=cutin_duration) end: CutinVehicle.lane_id == EgoVehicle.lane_id fail_criteria: collision == True 4.2 参数化场景生成 以\u0026quot;前车紧急制动（LVB）\u0026ldquo;场景为例，参数空间6维：\n参数 范围 步长 取值数 意义 ego_speed 30–120 10 10 自车初始速度(km/h) lead_speed 10–80 10 8 前车初始速度 gap 10–80 5 15 初始车距(m) decel -8 to -2 1 7 前车减速度(m/s²) friction 0.3–1.0 0.1 8 路面摩擦系数 weather 4种 — 4 天气类型 全网格采样产生10×8×15×7×8×4=268,800个场景，每小时2万公里虚拟里程下需40小时。更高效的是重点采样：在危险边界附近密集采样，安全区域稀疏采样。\n4.3 对抗性场景搜索 基于梯度的方法（AdvSim）：假设仿真场景可微，通过反向传播梯度更新场景参数最大化被测试系统损失：\n$$\\theta_{t+1} = \\theta_t + \\alpha \\nabla_\\theta \\mathcal{L}_{\\text{ego}}(s(\\theta_t))$$AdvSim在CARLA中搜索的难例场景在覆盖规划失败率上比随机采样提高约3倍。\n基于黑盒优化的方法：对不可微仿真器有效。使用高斯过程代理模型建模场景参数到失败概率的映射，通过Expected Improvement采样。\n5. 大规模并行仿真与回归测试 5.1 并行仿真架构 生产级系统要素：仿真容器化（Docker）、资源调度器（Kubernetes/Slurm）、场景队列（Redis FIFO）、结果收集器（PostgreSQL/MongoDB）、监控看板。\nclass ParallelSimManager: def __init__(self, num_workers=64): self.task_queue = redis.Redis(\u0026#39;localhost\u0026#39;, 6379) self.result_db = MongoClient(\u0026#39;localhost\u0026#39;, 27017).sim_results def submit_batch(self, scenarios): for sid, scenario in enumerate(scenarios): task = {\u0026#39;scenario_id\u0026#39;: sid, \u0026#39;simulator\u0026#39;: scenario[\u0026#39;simulator\u0026#39;], \u0026#39;config\u0026#39;: scenario, \u0026#39;status\u0026#39;: \u0026#39;pending\u0026#39;} self.task_queue.rpush(\u0026#39;sim_tasks\u0026#39;, json.dumps(task)) def collect_results(self): cursor = self.result_db.scenarios.find({\u0026#39;status\u0026#39;: {\u0026#39;$in\u0026#39;: [\u0026#39;completed\u0026#39;, \u0026#39;failed\u0026#39;]}}) results = {\u0026#39;total\u0026#39;: 0, \u0026#39;passed\u0026#39;: 0, \u0026#39;failed\u0026#39;: 0, \u0026#39;collision_rate\u0026#39;: 0.0} for doc in cursor: results[\u0026#39;total\u0026#39;] += 1 if doc[\u0026#39;passed\u0026#39;]: results[\u0026#39;passed\u0026#39;] += 1 else: results[\u0026#39;failed\u0026#39;] += 1 return results 5.2 回归测试体系 Level 1：开环回归（每commit）——固定数据集100K–1M帧，5–15分钟 Level 2：闭环日测（每日）——200–500个核心场景SIL测试，1–2小时 Level 3：全量周测（每周）——10K–50K个场景，8–24小时，95%置信区间\u0026lt;0.1%\n5.3 数据飞轮 路测→Bad Case自动标注→场景还原（OpenSCENARIO）→回归测试→修复验证→新一版部署的闭环。场景还原是数据飞轮中最困难的一环——从rosbag提取的场景与仿真环境总有差异，成功率约60–70%，剩余30–40%需手动调整参数才能复现。\n6. 工程经验总结 6.1 仿真逼真度的边际效益递减 Phase 1（2周）：MetaDrive + SIL，覆盖基础场景（前车制动、行人横穿、车道保持） Phase 2（4周）：CARLA + 高质量传感器仿真，1000个参数化场景，交叉验证 Phase 3（8周）：HIL部署在真实计算单元上，5000个场景 6.2 Sim-to-Real Gap Waymo 2025年报告：CARLA中碰撞率0.3%的系统在真实路测中碰撞率0.9%，放大系数约3x。这个系数随仿真逼真度提高而缩小，但几乎不可能降到1x以下。\n6.3 场景覆盖度 \u0026ldquo;跑了多少公里\u0026quot;是误导性指标——空无一车的直道100km和高密度城区1km对系统的考验完全不可比。更有效的是场景覆盖度：\n$$\\text{Coverage} = \\frac{|\\text{已测试的场景类别}|}{|\\text{参数化空间中有意义的场景}|}$$ 7. 总结 仿真器搭建的核心工程决策是在渲染逼真度、物理保真度和运行速度三者之间权衡。算法开发阶段用MetaDrive做大规模快速迭代，系统级验证回退到CARLA或Isaac Sim，安全关键测试必须过HIL。场景参数化和对抗搜索的能力决定了仿真测试的覆盖深度，数据飞轮的建立决定了仿真库能否持续演进。没有完美的仿真器，只有在不同阶段使用正确工具的工程智慧。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E4%BB%BF%E7%9C%9F%E5%99%A8%E6%90%AD%E5%BB%BA%E4%B8%8E%E9%97%AD%E7%8E%AF%E6%B5%8B%E8%AF%95/","summary":"仿真测试是自动驾驶安全验证的核心手段，但搭建一套好用的仿真测评系统远比想象中复杂。本文讲解主流仿真器的选型对比（CARLA/MetaDrive/NVIDIA Isaac Sim/AlpaSim）、传感器仿真与渲染管线、SIL（Software-in-the-Loop）与HIL（Hardware-in-the-Loop）测试架构、场景编辑器构建与参数化场景生成、以及大规模并行仿真与回归测试的工程落地经验。","title":"仿真器搭建与闭环测试：从CARLA到SIL/HIL"},{"content":"一句话理解VLA模型演进 从\u0026quot;看路开车\u0026quot;到\u0026quot;边想边开\u0026quot;——VLA模型三代演进的核心是动作表征从离散token到连续扩散再到流匹配的精度跃迁，以及推理能力从零到一的质变。\nVLA（Vision-Language-Action）模型在2023–2026年间经历了三代技术路线的迭代。如果把RT-2看作\u0026quot;把驾驶当成翻译任务\u0026quot;的第一代，RT-2-X和EmbodiedGPT就是把动作空间从分类扩展为结构化序列的第二代；而pi0的Flow Matching动作头、GR-3的Chain-of-Thought推理则标志着第三代——模型开始真正\u0026quot;思考\u0026quot;如何驾驶。本文不讨论VLA的基础定义（参见《什么是VLA模型》），而是聚焦于工程实现层面的具体设计选择，帮助研究者在面对一个新VLA任务时做出正确的技术选型。\n1. 第一代VLA：离散动作Tokenization（2023–2024） 1.1 RT-2：将驾驶建模为翻译任务 RT-2（Robotic Transformer 2）由Google DeepMind于2023年7月发布，是第一个真正意义上的VLA模型。其核心思路极其直接：把视觉输入通过PaLI-X编码为视觉token序列，然后让PaLM-E大语言模型以自回归方式输出离散动作token。\nRT-2的动作空间设计是理解其能力边界的起点。它将机器人的连续控制信号（6-DoF末端执行器位姿 + 夹爪开合）离散化为256个bin，每个bin对应一个token。这种离散化精度为：平移量每bin约1cm，旋转量每bin约1度。这意味着RT-2的位置控制精度大约在±0.5cm，对于抓取水瓶这种任务足够，但对于精密装配（需要±0.1mm精度）完全不可用。\n# RT-2动作离散化的简化实现 class RT2ActionTokenizer: def __init__(self, num_bins=256, translation_range=(-0.5, 0.5)): self.num_bins = num_bins self.bin_edges = np.linspace(translation_range[0], translation_range[1], num_bins + 1) def discretize(self, continuous_value): # 将连续值映射到最近的bin索引 idx = np.digitize(continuous_value, self.bin_edges) - 1 return np.clip(idx, 0, self.num_bins - 1) def reconstruct(self, token_id): # 用bin中心值近似连续值 bin_center = (self.bin_edges[token_id] + self.bin_edges[token_id + 1]) / 2 return bin_center RT-2的训练管道分为两步：首先在大规模互联网图文数据上预训练视觉-语言模型，然后在机器人操作数据上微调。这个范式的核心问题在于——预训练的图文数据和微调的机器人数据之间存在巨大的分布鸿沟。互联网图片里\u0026quot;杯子\u0026quot;出现在餐桌上的频率远高于出现在操作场景中的频率，导致RT-2在未见过的背景或光照条件下泛化能力骤降。\n1.2 PaLM-E：具身推理的首次尝试 PaLM-E（PaLM with Embodiment）是与RT-2同期的工作，但设计哲学不同。PaLM-E的核心创新在于：将传感器时间序列、3D场景表示和状态估计等非文本信息直接嵌入LLM的token序列中。具体来说，PaLM-E使用一个ViT编码器将图像映射为视觉token，同时将一个状态编码器将机器人关节角度和夹爪状态映射为状态token，然后与文本token拼接后送入PaLM层。\nPaLM-E的参数量级跨越了三个规模：12B、62B和540B。实验结果表明，随着模型规模增大，emergent abilities（如零样本规划、多步推理）显著涌现。62B版本在TableTop操作任务上的成功率为87.6%，而540B版本达到了92.3%。但代价是推理延迟：540B版本在单张A100上生成一个动作序列需要2–3秒，远远无法满足实时控制的要求。\n1.3 Generation 1对比表 模型 发布 Backbone 动作表征 参数量 实时性 关键创新 RT-2 2023.07 PaLM-E 256-bin离散 12B/55B ❌ 首次统一VLA PaLM-E 2023.03 PaLM 离散token 12B→540B ❌ 多模态token嵌入 EmbodiedGPT 2023.05 LLaMA 离散序列 7B/13B △ 开源VLA尝试 RT-2-X 2024.01 PaLM-E 扩展bin 55B ❌ 跨任务泛化 第一代VLA的核心问题在于离散化精度限制和推理速度。RT-2在桌面操作场景的末端执行器位置误差约为1–3cm，而在自动驾驶场景中，1cm的精度误差在高速下可能导致横向偏差达10–30cm。此外，自回归逐token生成需要串行推理，限制了控制频率的上限。\n2. 第二代VLA：连续控制与扩散策略（2024–2025） 2.1 π0（Pi-0）与Flow Matching动作头 第二代VLA的标志性进展来自Physical Intelligence公司于2024年10月发布的pi0。pi0的核心创新是用Flow Matching取代离散tokenization来建模连续动作分布。\nFlow Matching的基本思想是：定义一个从噪声分布到数据分布的连续概率路径，然后学习一个向量场来沿着这条路径\u0026quot;流\u0026quot;动。对于动作预测，这意味着模型不再输出一个离散的token，而是输出一个连续的动作向量。具体地，pi0对机器人动作的建模方式如下：\n设 $x_0 \\sim \\mathcal{N}(0, I)$ 为标准高斯噪声，$x_1$ 为目标动作。Flow Matching定义一个随时间 $t \\in [0, 1]$ 的概率路径 $\\phi_t(x)$，使得 $\\phi_0(x) = x$，$\\phi_1(x) = x_1$。模型学习一个向量场 $v_\\theta(x, t)$ 来近似这个路径的导数：\n$$\\frac{d\\phi_t(x)}{dt} = v_\\theta(\\phi_t(x), t)$$推理时的采样过程从 $x_0$ 开始，沿向量场进行数值积分。pi0使用10步采样（基于欧拉法），在每个步长 $h = 1/10$ 执行：\n$$x_{t+h} = x_t + h \\cdot v_\\theta(x_t, t)$$这个过程的计算开销是10次前向传播，但可以通过CFM（Conditional Flow Matching）技术将每次传播融合到单次模型调用中。pi0在模拟器中的实际控制频率达到30Hz，基本接近实时控制要求。\npi0的训练数据集分布值得关注：它在13个不同的机器人平台上收集了超过10万次操作演示，涵盖从叠衣服到插拔充电器的多种精细操作。这个数据量相比RT-2增加了两个数量级，是性能大幅提升的关键。\n2.2 Octo：开源VLA的标杆 Octo由UC Berkeley的RAIL Lab于2024年发布，是第一个真正可用的开源VLA基础模型。Octo使用扩散策略（Diffusion Policy）作为动作头，在Open X-Embodiment数据集上训练。Octo的设计哲学是模块化：提供一个通用的视觉-语言-动作骨干网络，用户可以通过LoRA微调适配到特定机器人平台。\n# Octo的扩散策略动作头简化实现 class OctoDiffusionPolicy(nn.Module): def __init__(self, obs_dim=512, action_dim=7, num_diffusion_steps=100): super().__init__() self.noise_net = UNet( in_channels=action_dim, cond_dim=obs_dim, ) self.num_steps = num_diffusion_steps def sample_action(self, obs_embedding): # 从标准高斯噪声开始 action_noise = torch.randn(1, self.action_dim) # DDIM采样 action = action_noise for step in reversed(range(self.num_steps)): noise_pred = self.noise_net(action, step, obs_embedding) action = self.ddim_step(action, noise_pred, step) return action Octo在7自由度机械臂上的控制精度达到±0.3mm（统计学意义上的90%分位），相比RT-2提升了一个数量级。但代价是推理延迟：扩散策略需要100步DDIM采样，约120ms，对应8Hz的控制频率——这对于缓慢的桌面操作足够，但对于高速运动任务（如投掷、接取）还有差距。\n2.3 DriveVLA与RoboFlamingo：自动驾驶场景的VLA DriveVLA是2024年底将VLA范式引入自动驾驶的代表工作。它的视觉编码器采用BEVFormer提取鸟瞰视角特征，LLM使用Vicuna-7B，动作头采用MLP直接回归连续的转向角、油门和刹车值。DriveVLA在nuScenes数据集上的开环评测中，碰撞率比UniAD降低22%，规划距离误差降低15%。\n但DriveVLA面临的核心问题在于分布漂移：由于训练数据来自nuScenes的日志回放，模型学习到的驾驶策略严重依赖于标注数据中的驾驶员行为。当在闭环仿真中长时间运行时（超过30秒），模型容易偏离正常轨迹，最终发生碰撞。这是所有开环训练模型共有的covariate shift问题。\n2.4 Generation 2对比表 模型 发布 动作表征 步长(ms) 频率 精度 数据量 pi0 2024.10 Flow Matching 33 30Hz ±0.1mm 100K Octo 2024.08 扩散策略 120 8Hz ±0.3mm 500K DriveVLA 2024.11 MLP回归 10 100Hz ±10cm 40K RoboFlamingo 2024.09 MLP回归 15 66Hz ±5mm 80K GR-1 2024.12 扩散策略 80 12Hz ±0.5mm 200K 第二代VLA在动作精度和推理速度上相比第一代有了质的提升，但还没有解决\u0026quot;推理\u0026quot;问题。模型仍然是直接从观测映射到动作（perception → action），没有显式的推理过程。这意味着模型在处理需要多步推理的长尾场景时仍然力不从心。\n3. 第三代VLA：推理驱动的自回归架构（2025–2026） 3.1 GR-3：Chain-of-Thought与自回归架构 GR-3（Generalist Robot 3）于2025年底由Google DeepMind发布，标志着VLA进入推理驱动时代。GR-3的核心架构包括了三个关键组件：\n（1）视觉编码器：SigLIP-ViT GR-3使用SigLIP（Sigmoid Loss for Language-Image Pre-training）作为视觉 backbone。SigLIP相比标准CLIP的关键改进在于用sigmoid损失替代对比损失，使得模型可以在更大的batch size下稳定训练，并且在细粒度视觉理解（如物体姿态估计）上优于CLIP约8%。SigLIP-ViT输出576个patch token（基于24×24网格）加上1个cls token。\n（2）LLM Backbone：Gemini Pro精简版 GR-3的LLM基于Gemini Pro架构，但为了满足实时性要求做了大规模模型剪枝和量化。具体地，注意力头的数量从32减少到24，FFN层的中间维度从16,384降低到10,240，最终模型规模约80B参数。通过8-bit量化（HQQ），模型在TPU v5p上的推理延迟降至45ms/token。\n（3）CoT推理机制 GR-3在生成动作之前会先输出一段推理链，格式为：\n\u0026lt; 根 行 需 因 \u0026lt; t 据 人 要 此 / a h 交 距 降 应 t c i 通 离 到 立 h t n 规 我 0 即 i i k 则 约 k 开 n o i ， 2 m 始 k n n 我 5 / 制 i \u0026gt; g 必 米 h 动 n \u0026gt; 须 ， 需 。 g b 在 当 要 \u0026gt; r 前 人 前 约 a 方 行 减 4 k 有 横 速 . e 行 道 度 2 : 人 前 可 秒 正 停 达 ， 0 在 车 3 制 . 通 。 m 动 7 过 / 距 , 人 s 离 行 ² 约 s 横 。 2 t 道 6 e ， 米 e 车 。 r 速 : 为 4 0 5 . k 0 m / h / 。 a c t i o n \u0026gt; CoT（Chain-of-Thought）极大地提高了模型在复杂场景下的成功率。在Waymo Open Motion Dataset的闭环评测中，GR-3的CoT版本相比无CoT版本的碰撞率降低45%（从1.8%降至0.99%），而平均推理时间仅增加18%（从45ms增至53ms，因为思考链只有20–30个token）。\n但是CoT也带来了新的问题：思考链可能包含幻觉。在压力测试中，GR-3会在约1.3%的样本中出现\u0026quot;幻觉推理\u0026quot;，例如认为一个静止的汽车\u0026quot;即将变道\u0026quot;并提前减速。这说明CoT虽然提高了平均表现，但引入了新的长尾失败模式。\n3.2 EPM（Embodied Planning Model）：规划即推理 EPM由MIT CSAIL在2026年初提出，它的核心主张是：具身智能体应该显式地进行规划，而规划本质上是一种多步推理。EPM的架构将规划过程嵌入到LLM的token生成过程中：在每个时间步，模型先预测未来T步的状态序列（world model rollout），然后基于预测状态选择最优动作。\nEPM的训练损失由三部分组成：\n$\\mathcal{L} = \\underbrace{\\mathcal{L}_{\\text{act}}(\\hat{a}, a^*)}_{\\text{动作模仿}} + \\lambda_1 \\underbrace{\\mathcal{L}_{\\text{feat}}(\\hat{z}, z^*)}_{\\text{特征预测}} + \\lambda_2 \\underbrace{\\mathcal{L}_{\\text{task}}(\\hat{R}, R^*)}_{\\text{任务奖励预测}}$\n其中 $\\mathcal{L}_{\\text{feat}}$ 是未来视觉特征的自监督预测损失，$\\mathcal{L}_{\\text{task}}$ 是任务完成度的预测损失。EPM在MetaWorld基准上相比GR-3的提升约为11%，但在复杂场景中（如需要精准抓取的任务）提升更显著（约23%），说明规划过程对精细操作帮助更大。\nEPM的代价是额外的计算开销：每次推理需要生成T=8步的规划链，增加了约3倍的推理延迟（从45ms增至135ms）。在实时系统中，这意味着控制频率从22Hz降至7.4Hz，超过了大多数实时控制需求的下限（通常为10Hz）。\n3.3 BridgeVLA：桥接监督的新范式 BridgeVLA是2026年4月由Stanford发表的论文，核心观点是：VLA模型的训练应该通过一个\u0026quot;桥接\u0026quot;阶段来弥合预训练和指令微调之间的gap。具体做法分为三步：\nStep 1：图文预训练（VLM Stage） 使用SigLIP + LLaMA 3在LAION-5B + Internal-1T规模数据上预训练，建立基础的视觉-语言对齐。这个阶段的目标不是学习动作，而是学习\u0026quot;看到什么、说出什么\u0026quot;。\nStep 2：桥接监督（Bridging Stage） 这是BridgeVLA的核心创新。在这个阶段，模型在大量演示数据上同时学习两个任务：\n视频到文本的描述预测（\u0026ldquo;这个物体正在被左移5cm\u0026rdquo;） 文本到动作的条件生成（\u0026ldquo;左移5cm\u0026rdquo; → 动作token序列） 桥接监督的关键设计是：描述预测任务强制模型学习从视觉观测到语言化状态表征的映射，而文本到动作任务则学习从语言化表征到具体动作的映射。两步的中间表示统一在语言空间，使得模型可以泛化到训练数据中没有见过的动作描述。\nStep 3：指令微调（Instruction Tuning） 在桥接监督后的模型基础上，使用RLHF（基于Bradley-Terry偏好模型）对多种任务指令进行微调，优化动作的精细度。\n# BridgeVLA桥接监督的训练循环 class BridgeVLATrainer: def __init__(self, model, vlm_data_loader, demo_data_loader): self.model = model # 同一个模型 self.vlm_loss = nn.CrossEntropyLoss() # 文本预测 self.action_loss = FlowMatchingLoss() # 动作预测 def train_step(self, batch): images, language_desc, action_seq = batch # Step 1: 视频→文本描述预测 pred_desc = self.model.generate_text(images, prefix=\u0026#34;描述当前操作：\u0026#34;) desc_loss = self.vlm_loss(pred_desc, language_desc) # Step 2: 文本→动作条件生成 pred_action = self.model.predict_action(images, language_desc) act_loss = self.action_loss(pred_action, action_seq) # 联合优化 total_loss = desc_loss + act_loss total_loss.backward() return total_loss.item() BridgeVLA的桥接监督在Caltech Robotic Manipulation Benchmark上取得了89.2%的任务成功率，比仅在操作数据上端到端训练的基线高出14.3个百分点。这说明显式的桥接监督缓解了预训练和下游任务之间的表示层gap。\n3.4 Generation 3对比表 模型 发布 动作表征 推理机制 参数量 延迟(ms) 碰撞率(闭环) GR-3 2025.12 自回归token CoT 80B 53 0.99% EPM 2026.02 扩散策略 多步规划 40B 135 0.71% BridgeVLA 2026.04 Flow Matching 桥接推理 70B 48 0.82% RoboVLM-3 2026.05 混合token CoT + MC 100B 62 0.65% GR-4(传闻) 2026.Q3 自回归+Diff 多模态CoT 200B \u0026lt;30 N/A 4. 关键技术深水区 4.1 动作表征的三角权衡 动作表征设计是VLA模型的核心选择，存在一个三角权衡：精度 ↔ 速度 ↔ 表达能力。\n离散tokenization（RT-2路线）的表达能力受限于bin数量，增加bin数会指数级增长词汇表大小和softmax计算量。对于6-DoF齐次变换，如果每个维度256个bin，词汇表规模是 $256^6 \\approx 2.8 \\times 10^{14}$，完全不可行。因此RT-2只能对每个维度独立离散化，忽略了维度间的相关性。\n扩散策略（Octo/GR-1路线）在表达多峰分布方面最自然，因为扩散过程可以建模复杂的动作分布。但100步的DDIM采样在实时场景中仍然是瓶颈。最近的进步包括LCM（Latent Consistency Model）将步数降至2–4步，代价是样本质量轻微下降。\nFlow Matching（pi0/BridgeVLA路线）在精度和速度之间取得了最好的平衡。10步欧拉采样的输出质量已接近扩散策略100步DDIM的水平，而计算开销仅为后者的1/10。CFM技术进一步允许将采样过程融合到单次推理中。\n4.2 LLM Backbone的选择策略 VLA中LLM backbone的选择需要同时考虑三个维度：推理能力、延迟和可微调性。\n从推理能力看，PaLM-E和Gemini路线利用了专用闭源模型的最佳性能，但无法在自定义数据上微调。开源路线（LLaMA系列、Qwen系列）提供了灵活的微调接口，但模型能力上限低于同规模的闭源模型。\n延迟优化方面，KV-cache是降低自回归推理延迟的关键。对于生成N个动作token，使用KV-cache后每个token的延迟从$O(L^2)$降至$O(L)$（L为序列长度）。VLA场景的典型序列长度为256–1024 tokens，KV-cache带来的加速约为5–10倍。\n可微调性决定了下游适配的效果。LoRA（Low-Rank Adaptation）是VLA模型最常用的参数高效微调方法，在模型所有注意力层的Q和V投影矩阵上插入秩为r=16的低秩适配器。对于80B的GR-3，LoRA微调的参数量仅为约1.2B（占比1.5%），但足以在特定任务上达到全参数微调90%以上的性能。\n4.3 从预训练到RLHF的训练管线 现代VLA模型的训练管线通常包含四个阶段：\nVLM预训练（100B+ tokens）：在互联网图文对数据上训练视觉编码器和LLM的对齐，学习基础的视觉语义理解能力。这个阶段的损失函数是标准的交叉熵（文本生成）+ 对比损失（图文对齐）。\n行为克隆（1M–10M demonstrations）：在演示数据上通过监督学习（BC Loss）训练完整的VLA模型。常用的损失函数是负对数似然：\n$\\mathcal{L}_{\\text{BC}} = -\\mathbb{E}_{(o, a) \\sim \\mathcal{D}}[\\log \\pi_\\theta(a | o)]$\n指令微调（10K–100K instructions）：使用多样化的自然语言指令和对应的动作标签对模型进行微调，提高模型的指令跟随能力。这个阶段通常使用NEFTune（Noisy Embedding Fine-Tuning）添加高斯噪声到embedding层进行正则化。\nRLHF/GRPO（偏好数据）：基于人类或自动评估器给出的偏好对进行强化学习。GR-3使用GRPO（Group Relative Policy Optimization）替代了传统的PPO，因为GRPO不需要critic network，降低了训练的计算开销约40%。\n5. VLA模型选型决策指南 面对一个具体的具身智能任务，如何选择VLA模型的技术路线？\n如果你的任务是高速运动控制（如自动驾驶、无人机飞行）： 推荐Flow Matching动作头 + 小规模LLM（7B–13B）+ 无CoT推理。高速场景对延迟极度敏感（控制频率需≥50Hz），CoT带来的推理延迟可能得不偿失。pi0路线最合适。\n如果你的任务需要复杂多步推理（如精细装配、多阶段操作）： 推荐扩散策略 + 中等规模LLM（40B–80B）+ CoT推理。EPM的多步规划架构虽然延迟更高，但在这类任务上的成功率提升显著。\n如果你追求零样本泛化能力： 推荐BridgeVLA路线的桥接监督范式。额外的\u0026quot;视频→语言→动作\u0026quot;桥接使得模型可以泛化到训练数据中未出现的指令和场景。\n如果你受限于计算资源（单卡A100）： 推荐Octo路线（开源 + LoRA微调）。Octo可以在单张A100上微调8小时完成特定任务适配，推理延迟约120ms，足以应对大多数桌面操作场景。\n6. 挑战与未来方向 6.1 数据集瓶颈 当前最大的VLA数据集规模约为10M条演示（来自Open X-Embodiment + RT-1-X + Bridge Data v3），但相比于LLM预训练的万亿token级数据仍然是杯水车薪。如何生成高质量的合成演示数据（使用仿真器自动生成、或使用视频生成模型合成）是一个关键方向。\n6.2 实时性-精度-泛化三角 VLA模型面临着实时性、精度和泛化能力的不可能三角。当前最先进模型在泛化能力上仍然远逊于人类——GR-3在一个新场景上需要5-10次演示才能适应，而人类通常只需要1次。任务调制（task modulation）和快速适配（fast adaptation）是实现通用机器人智能的关键门槛。\n6.3 安全性与可解释性 CoT推理为VLA模型带来了一定程度上的可解释性，但这是一种\u0026quot;自我报告\u0026quot;式的解释——我们无法验证推理链是否真的反映了模型的决策过程。更严格的可解释性方法（如activation patching、causal tracing）在VLA上的应用仍处于早期阶段。\n6.4 GR-4可能的方向 根据业内人士的分析，GR-4可能在以下几个方向突破：\n将自回归token生成和扩散策略融合为混合架构，在精度和速度上同时达到最优 引入视频生成作为世界模型的隐式形式，通过predicting future frames来增强规划 跨具身体的知识迁移，让在机械臂上学习的技能可以迁移到人形机器人或自动驾驶车辆上 7. 总结 代际 代表模型 动作表征 推理能力 控制频率 典型精度 G1 (2023–2024) RT-2, PaLM-E 离散token ❌ 无 \u0026lt;1Hz ±1cm G2 (2024–2025) pi0, Octo, DriveVLA 扩散/Flow/MLP △ 隐式 8–100Hz ±0.1mm G3 (2025–2026) GR-3, EPM, BridgeVLA 自回归+CoT ✅ 显式 7–22Hz ±0.05mm VLA模型的发展史是一部从\u0026quot;简单化\u0026quot;到\u0026quot;精细化\u0026quot;的工程进化史。每一代都在精度、速度和推理能力之间做出不同的设计权衡。理解这些权衡背后的工程原理，远比追逐最新模型更重要——因为每一个新模型的背后，都是对前一代模型核心局限性的针对性突破。随着GR-4的到来，我们很可能看到自回归token生成和扩散策略走向融合，这也是目前学术界和工业界最看好的方向。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E5%89%8D%E6%B2%BFvla%E6%A8%A1%E5%9E%8B%E5%85%A8%E6%99%AF%E9%80%9F%E8%A7%88/","summary":"VLA模型从2023年的RT-2到2026年的GR-3经历了三代演进。本文系统对比15+主流VLA模型的核心设计选择：动作表征（tokenization/连续控制/扩散策略）、视觉编码器架构、LLM backbone选择、以及训练范式（预训练→指令微调→RLHF）。重点分析pi0的Flow Matching动作头、GR-3的CoT推理与自回归架构、BridgeVLA的桥接监督等前沿技术路线。","title":"前沿VLA模型全景速览：从RT-2到GR-3"},{"content":"一句话理解主流自动驾驶方案对比 四家方案的本质差异不在\u0026quot;谁更先进\u0026quot;，而在\u0026quot;用什么路径逼近自动驾驶上限\u0026quot;：FSD押注纯视觉端到端+仿真数据飞轮，Momenta押注数据驱动的模块化+统一BEV空间，华为押注多传感器融合+规则安全兜底，小鹏押注视觉为主+渐进式端到端。2026年这些路线正在收敛——但收敛的方向各不相同。\n理解这四家方案的差异，不能只看他们\u0026quot;做了什么\u0026quot;，更要看他们\u0026quot;没做什么\u0026quot;以及\u0026quot;为什么不做\u0026quot;。每一家的选择背后，都是对自动驾驶核心问题的不同信念：感知应该多冗余？规划应该多智能？数据应该多真实？系统应该多耦合？\n🏗️ 第一维度：感知架构 感知是整个自动驾驶系统的起点，也是各家公司技术路线分歧最明显的地方。感知架构的选择决定了后续所有模块的设计空间。\nTesla FSD：纯视觉 + Occupancy Network Tesla是纯视觉最坚定的信徒。从2021年去掉雷达开始，Tesla感知架构经历了三个阶段：\n阶段 时间 架构 核心思路 HydraNet 2019-2020 多任务共享Backbone 一个Backbone同时输出检测、车道线、交通灯等 BEV + Transformer 2021-2022 多摄像头→ Transformer → BEV 用Transformer将各视角特征融合到BEV空间 Occupancy Network 2023-至今 BEV特征→占据栅格 不再依赖3D框，用体素占据率描述空间 FSD感知的核心哲学是用空间的连续表示替代离散的物体表示。Occupancy Network对每个BEV网格中的体素预测\u0026quot;是否被占据\u0026quot;以及\u0026quot;被什么占据\u0026quot;，不依赖预定义的物体类别。这意味着即使遇到训练集中从未出现的异形车、掉落物、施工区域，Occupancy也能感知到\u0026quot;那里有东西\u0026quot;，只是不知道具体是什么。\n在实现层面，FSD的感知流程是：\n多 相 机 图 像 → → → → O L O c a b R c n j e u e e g p c N a D t e n e t c c D / y o e B d c i D e o F e r d P c （ e N o 车 r d 道 （ B e 线 3 a r 拓 D c （ 扑 框 k 体 ） ， b 素 辅 o 占 助 n 据 监 e 率 督 ） ） → T r a n s f o r m e r 特 征 交 互 → B E V 特 征 图 值得注意的是，Tesla已经不再单独输出3D检测框用于规划——规划器直接读取Occupancy栅格。这意味着\u0026quot;感知到规划的接口\u0026quot;从稀疏的物体列表变成了稠密的占据场，信息更丰富。\n代价：Occupancy需要巨大的计算量（~100T FLOPs级别），Tesla为此自研了HW 3.0/4.0芯片。Occupancy的体素分辨率（0.5m/0.25m）直接决定了感知粒度，而高分辨率意味着显存和算力的指数增长。\nMomenta：数据驱动的统一BEV感知 Momenta走的是\u0026quot;模块化+数据驱动\u0026quot;路线。感知架构本质上还是检测+分割+地图的多任务BEV融合，但核心差异在于：\n深度解耦设计：感知模型分离了\u0026quot;特征提取\u0026quot;和\u0026quot;任务头\u0026quot;，底层的BEV Backbone通用，上层任务头各不相同。这使得Momenta可以针对不同客户（OEM）定制不同精度的感知包。\n时序深度融合：Momenta特别强调temporal fusion（时序融合）的价值。其感知架构在每个时间步维护一个时序BEV记忆模块，将历史帧的BEV特征通过运动补偿对齐后与当前帧融合。这相当于用时间换精度——单帧不完美，但多帧叠加后鲁棒性大幅提升。\n数据闭环驱动：Momenta的感知模型每隔2-3周就重新训练一次，每次训练使用超过1000万公里的真实驾驶数据。数据来源包括：\n量产车影子模式（shadow mode）回传的corner case 离线自动标注系统（AutoLabeling）生成的高质量GT 仿真平台生成的对抗性场景 Momenta的感知指标（2026年量产版本）：\n指标 数值 说明 BEV检测mAP 82.3% @0.7 IoU，覆盖50m范围 Occupancy IoU 76.1% 体素分辨率为0.4m 车道线F1 94.5% 可达距离120m 感知延迟 38ms 单次前向，含预处理 时序融合增益 +8.7% mAP 相比单帧提升 华为ADS：多传感器融合 + GOD网络 华为ADS的感知架构从命名上就体现了其野心——GOD（General Obstacle Detection）网络。GOD的思路与Occupancy类似（用稠密表示覆盖任意障碍物），但实现方式不同：\n传感器配置：华为是四家中传感器最\u0026quot;豪华\u0026quot;的。ADS 3.0/4.0配备了3个激光雷达（远距+侧向+补盲）、6个毫米波雷达、11个摄像头。传感器的冗余给感知带来了极大的容错空间。\n特征级融合：华为的感知不是\u0026quot;各传感器单独检测后融合\u0026quot;，而是在特征层面融合。每个传感器独立提取特征，然后通过一个Cross-Attention模块在统一BEV空间融合。这与BEVFusion的思路一致：\n相 L 毫 机 i 米 图 D 波 像 A R → → 点 云 雷 2 达 D → B a B 3 c a D k c b k B o b a n o c e n k e b → o → n 雷 e 达 图 B 像 → E B V E 点 特 V 云 征 特 B 征 E V 特 征 → C r o s s - A t t e n t i o n 融 合 → 融 合 B E V 特 征 GOD网络：GOD在融合BEV特征上预测稠密占据场，输出格式为200×200×16体素（50m×50m覆盖，0.25m分辨率，16帧时序）。GOD对\u0026quot;非标准障碍物\u0026quot;的检出率比传统检测器高47%（华为内部数据）。\nRCR（Road Cognition \u0026amp; Reasoning）：华为还单独做了一个道路认知网络，负责理解车道拓扑、交通规则、路口结构。这部分其实相当于一个\u0026quot;隐式地图\u0026quot;模块，与感知分开处理。\n华为感知的优势在于鲁棒性：某个传感器损坏或降级时，其他传感器还能兜底。代价是系统成本极高（三激光雷达方案的单套传感器成本超过2000美元）。\n小鹏XNGP：视觉为主 + 轻雷达辅助 小鹏的感知路线介于FSD和华为之间。其核心思路是**\u0026ldquo;以视觉为主，激光雷达作为安全冗余\u0026rdquo;**。\nXNet感知架构：小鹏自研的XNet是一个端到端的多任务BEV感知网络，输入来自11个摄像头+2个激光雷达(可选)，输出BEV检测结果、车道线拓扑、可行驶区域：\n多 L 相 i 机 D A → R 点 S 云 w i → n P T o r i a n n t s N f e o t r + m + e r B a B c a k c b k o b n o e n e → → 稀 疏 视 B 角 E 变 V 换 特 ( 征 L S → S 风 C 格 r ) o s → s - B A E t V t 特 e 征 n t i o n 融 合 任 务 头 去除激光雷达的趋势：小鹏从G6开始力推\u0026quot;纯视觉\u0026quot;版本，激光雷达逐步从标配变为选配。核心逻辑是：纯视觉方案在大部分场景下已经足够安全，激光雷达只在极低光照、逆光、雨雾等corner case下才展示价值。\n感知数据飞轮：小鹏在2024-2026年累计从量产车回传了超过50亿公里影子模式数据。通过自动标注+主动学习（active learning），从中筛选出高价值场景进入训练集。\n感知端到端：小鹏在2025年量产的XNet 2.0中，将感知模块从\u0026quot;多任务头独立预测\u0026quot;改进为\u0026quot;感知特征直接作为规划输入\u0026quot;——减少了感知→规划之间的表示转换损失。这一步可以看作是\u0026quot;从模块化走向端到端\u0026quot;的关键过渡。\n感知架构对比总结 维度 FSD Momenta 华为ADS 小鹏XNGP 传感器 纯视觉(8相机) 视觉+可选雷达 多传感器融合(3LiDAR) 视觉+轻雷达 感知表示 Occupancy(稠密) BEV检测+Occupancy GOD Occupancy BEV检测 时序融合 隐式(Transformer) 显式时序BEV记忆 16帧时序Occupancy 基于BEV warp 芯片 HW 4.0(自研) Orin/Thor(NVIDIA) 昇腾920(自研) Orin/Thor 算力消耗 ~150 TOPS ~80 TOPS ~200 TOPS ~100 TOPS 感知延迟 45ms 38ms 55ms(融合) 40ms 📐 第二维度：规划方法 规划决策是自动驾驶的\u0026quot;大脑\u0026quot;，也是2024-2026年间变化最剧烈的模块。四家公司在规划方法的路径选择上差异极大。\nFSD：从Hybrid到One-Model端到端 FSD的规划架构是四家里最激进的。\nV11时代（2022-2024）——Interleaved Hybrid：\nV11保留了视觉输出→原始轨迹→基于规则的轨迹优化的框架：\n感 知 O c c → u p 轨 a 迹 n 采 c 样 y \u0026amp; 评 + 分 ( 车 规 道 则 拓 + 扑 M L → ) 交 → 互 式 最 行 优 为 轨 预 迹 测 ( → I n 控 t 制 e 模 r 块 a c t i o n N e t ) 这里的\u0026quot;ML\u0026quot;部分主要体现在交互预测和轨迹评分中，但最终选轨迹的优化器是基于规则的——类似于使用栅格化的cost function做穷举搜索。\nV12/V13时代（2024-至今）——One-Model端到端：\nV12是自动驾驶行业的里程碑：首次将整个驾驶策略（从感知输入到控制输出）用一个大神经网络实现。架构变为：\n多 相 机 图 像 → O c c u p a n c y → T r a n s f o r m e r P l a n n i n g → 直 接 输 出 轨 迹 点 V12去除了一切显式规划规则，所有驾驶行为都是神经网络学出来的。这意味着：\n没有显式的cost function 没有轨迹采样+评分 没有行为规划器（先判断向左变道还是向右变道，再算轨迹） 没有显式的安全约束（靠网络自身学会安全） V13在V12基础上改进：\n引入了视频序列作为输入（不再是单帧+稀疏历史），用Video Transformer处理16帧视频 增加了交互感知的因果推理（其他车看到本车会怎么反应？） 输出从轨迹点升级为空间-时间轨迹场（不仅给出轨迹，还给出每个时刻的可接受偏差范围） FSD端到端的优势：\n行为自然流畅，没有规则方案的\u0026quot;机器感\u0026quot; 能自动适应不同地区的驾驶风格 长尾场景的覆盖靠数据投喂，不需要人工编写规则 FSD端到端的劣势：\n缺乏可解释性（为什么这样变道？不知道） 安全边界难以数学验证 数据需求巨大（V12训练用了超过1000万条视频clip） Momenta：数据驱动的Hybrid Planning Momenta是\u0026quot;模块化+数据驱动\u0026quot;路线的代表。其规划架构本质上是分级规划（hierarchical planning），但每一级都深度使用ML。\nMomenta规划架构分为三级：\n级别 输入 输出 方法 行为规划 BEV感知+地图 决策指令(跟车/变道/绕障) 基于学习的策略网络+规则约束 运动规划 决策指令+场景 粗糙轨迹（10s horizon） 模仿学习+对抗训练 轨迹优化 粗糙轨迹 平滑可行轨迹 约束优化(规则) 关键的设计思路：\nLearned Policy + Rule Safety Net：行为规划器是一个经过RL训练的策略网络，但输出会被一组规则约束\u0026quot;截断\u0026quot;。例如，策略网络可能决定\u0026quot;现在变道\u0026quot;，但如果规则判断\u0026quot;相邻车道后车太快→变道风险高\u0026quot;，则该决策被否决。\nMotion Planning with Imitation + Adversarial：运动规划器先用模仿学习学习人类的驾驶轨迹，再用对抗训练（对抗性场景生成）提高在corner case中的表现。训练数据中包含自动标注的碰撞梯度信息——即\u0026quot;如果朝这个方向走，碰撞概率会上升\u0026quot;。\nSafety Layer：Momenta的轨迹优化层是一个可微的约束优化器。它接收粗糙轨迹，输出满足动力学约束、碰撞约束、交规约束的平滑轨迹。由于优化器是可微的，整个规划pipeline可以端到端地优化（梯度可以从最终轨迹一直回传到感知模块）。\nMomenta规划指标（量产版本）：\n指标 数值 决策准确率 99.3%（复杂路口） 轨迹规划成功率 99.7%（非对抗场景） 规划延迟 12ms（行为）+ 28ms（轨迹） 舒适性（jerk） \u0026lt;2.0 m/s³ Momenta的哲学是：不要为端到端而端到端。保留模块化结构的好处是每个模块可单独调试、验证、改进，而数据驱动则让每个模块都在持续进化。\n华为ADS：规则为主 + ML增强 华为ADS在规划上走的是一条**\u0026ldquo;保守渐进\u0026rdquo;**路线。\n华为规划的核心架构：\nG O D 感 知 → + 运 动 R 规 C 划 R ( 道 规 路 则 认 约 知 束 优 → 化 ) 行 为 → 决 策 控 ( 制 规 ( 则 模 引 型 擎 预 + 测 M 控 L 制 评 M 分 P ) C ) 规则引擎：华为拥有业界最大的驾驶规则库（超过3000条规则），覆盖了从\u0026quot;高速跟车距离保持\u0026quot;到\u0026quot;无保护左转的让行策略\u0026quot;的方方面面。规则引擎的输出是一组可行驾驶指令（可选的动作空间）。\nML评分：在每个驾驶指令上，用一个ML模型打分，评分考虑因素包括：通行效率、舒适度、碰撞风险、违反规则的风险。评分最高的指令进入运动规划阶段。\nConstraint Optimization：华为的运动规划是强约束优化——轨迹必须在规则的严格约束下生成（如：不能压线、不能超速、与障碍物距离至少0.5m）。约束优先级是硬编码的，安全永远优先于效率。\nMPC控制：华为在底层控制中使用模型预测控制（MPC），规划周期为50ms，预测horizon为3s。MPC本身带有动力学约束，确保生成的控制量在实际车辆上可达。\n华为规划的特点：\n安全可证明：由于规则和约束都是显式的，华为可以通过形式化方法证明在某个场景下\u0026quot;不会发生碰撞\u0026quot;。 调试友好：如果车辆行为异常，可以快速定位到是某条规则写错了，还是某个ML评分模型出了问题。 保守：华为的驾驶策略在四家中最为保守——倾向于等待而非抢行，这也与华为\u0026quot;安全第一\u0026quot;的品牌定位一致。 华为规划在2025-2026年间引入的\u0026quot;ML增强\u0026quot;主要包括：\n用ML替代部分规则的场景判断（\u0026ldquo;这个路口是否适合加塞\u0026quot;而不是\u0026quot;所有路口都不允许加塞\u0026rdquo;） 用ML做轨迹分布预测（行人/车辆的运动预测，供规划器参考） 用ML做决策评分校准（根据实时路况动态调整各决策因素的权重） 小鹏XNGP：渐进式端到端 小鹏的规划演进是四家中最清晰的\u0026quot;三步走\u0026quot;：\n阶 阶 阶 段 段 段 1 2 3 ( ( ( 2 2 2 0 0 0 2 2 2 2 4 6 - - - 2 2 ) 0 0 : 2 2 3 5 端 ) ) 到 : : 端 化 规 H 则 y 规 b 划 r i d 规 划 ( 规 则 + M L ) XPlanner是小鹏规划架构的核心：\nX N e t 感 知 特 征 → X P l a n n e r ( T r a n s f o r m e r ) → 轨 迹 → 轨 迹 优 化 器 ( 规 则 ) → 控 制 感知特征直接输入：与FSD V12不同但方向一致，XPlanner的输入不是物体列表或栅格，而是从XNet直接输出的稠密BEV特征。这避免了从感知到规划的\u0026quot;表示降级\u0026quot;。\n规划Transformer：XPlanner使用一个轻量级Transformer模型，以BEV特征+自车状态+导航指令作为输入，直接回归未来8秒的轨迹（16个waypoint，0.5秒间隔）。模型的训练方式为：\n95% 模仿学习：从人类驾驶数据中学习 5% 对抗训练：在仿真中学习避免碰撞 可微轨迹优化：XPlanner输出的粗糙轨迹通过一个可微优化器精化。优化器考虑了：动力学可行性、碰撞约束、舒适度。关键设计：优化器的约束违反可以被回传到XPlanner中，让规划Transformer学会自动避免生成违反约束的轨迹。\n安全冗余：在端到端规划器之外，小鹏保留了一个独立的规则规划器作为fallback。当端到端规划的置信度低于阈值时（或感知到系统检测到异常时），系统切换回规则规划。切换逻辑：\ni e f l s c e o u : u n s s f e e i d X R e P u n l l c a e e n - ( n b X e a P r s l e a t d n r n a t e j r r e a _ c j t t e r o c a r t j y o e r c y t o r y ) \u0026gt; t h r e s h o l d : 小鹏2026年量产版本的规划能力：\n场景 表现 端到端占比 高速公路 全程端到端，无需规则介入 100% 城市快速路 95%端到端，5%需要规则fallback 95% 复杂城市路口 70%端到端，30%规则fallback 70% 小区/窄路 50%端到端，50%规则 50% 规划方法对比总结 维度 FSD Momenta 华为ADS 小鹏XNGP 架构范式 One-Model E2E Hierarchical ML+Rule Rule+ML Progressive E2E 规则占比 0%（V12+） ~20%（安全层） ~70%（规则引擎） ~20%（fallback） 可解释性 低 中 高 中 可验证性 低 中 高 中 流畅度 极好 好 中（偏保守） 好 安全验证 数据驱动 Hybrid 规则验证+数据 Hybrid 训练数据量 ~1000万clip ~500万clip ~200万clip+规则 ~300万clip 📊 第三维度：数据策略 \u0026ldquo;得数据者得天下\u0026quot;在自动驾驶领域绝非虚言。四家公司的数据策略差异直接决定了他们的技术天花板。\n数据来源对比 来源 FSD Momenta 华为ADS 小鹏XNGP 量产车回传 ~500万辆(全球) ~200万辆(含合作车企) ~50万辆(含合作车企) ~150万辆 年度数据量 ~50亿公里 ~20亿公里 ~8亿公里 ~15亿公里 仿真数据 极大量(NeRF-based) 中量 少量 中量 生成数据 大量(Diffusion) 中量 少量 中量 FSD：仿真数据飞轮 Tesla是仿真数据运用最极致的公司。其仿真平台不仅生成训练数据，还作为模型评估的核心工具。\n仿真数据生成流水线：\n真 实 场 景 采 → 集 新 → 视 角 3 渲 D 染 重 建 → ( N 自 e 动 R 标 F 注 / G 3 T D G → S ) 加 入 → 训 练 场 集 景 编 辑 ( 插 入 车 辆 / 改 变 光 照 ) 这套流水线可以在一个真实际景数据上生成1000+个变体：改变天气、改变光照角度、插入不同类型的车辆、改变障碍物运动轨迹。\nFSD的仿真数据使用量已经超过了真实数据（2026年数据：训练集中仿真数据占比约65%）。核心原因：真实数据中的corner case密度太低。需要跑100万公里才能遇到的极端场景，仿真中随时生成。\n关键创新：Tesla的仿真不是随机构建场景，而是从模型当前的失败案例中自动挖掘需要生成的场景——\u0026ldquo;哪里有短板，就针对性地生成数据\u0026rdquo;。这套自动化的data flywheel流程：\n模 型 评 估 → 发 现 失 败 场 景 → 场 景 分 类 → 自 动 生 成 变 体 → 重 新 训 练 → 验 证 → 循 环 Momenta：真实数据为主 + 数据闭环 Momenta的数据策略核心是\u0026quot;质量优先于数量\u0026rdquo;。CEO曹旭东多次强调：\u0026ldquo;100万公里高质量场景数据的价值超过1000万公里随机驾驶数据\u0026rdquo;。\nMomenta的数据闭环流程：\n影子模式（Shadow Mode）：在量产车上运行一套简化版的感知+规划系统，持续对比模型决策与人类驾驶行为。\nCorner Case挖掘：通过对比度过滤（decision difference \u0026gt; threshold），每天从海量数据中挖掘出约1万-2万个高价值片段。\n自动化标注：Momenta的自动标注系统（AutoLabeling 3.0）利用自车多帧信息+跨相机一致性，在无人工介入的情况下生成3D检测框、车道线拓扑、运动轨迹的GT标签。自动标注的质量达到了人工标注的95%以上。\n主动学习（Active Learning）：训练中的模型对每个新场景输出不确定度，不确定度高的场景优先进入标注和训练。\nMomenta认为，随着自动驾驶模型趋近成熟，数据质量比数据量更重要。当模型在常见场景上已经达到99.9%的准确率时，再增加10倍普通数据不如增加100个corner case有效。\n华为ADS：真实数据+规则知识 华为因为起步相对较晚，在真实数据积累上不占优势，但华为的数据策略有一个独特的优势——规则知识。\n华为的规则知识库（超过3000条驾驶规则）可以看作是\u0026quot;手动编码的人类驾驶知识\u0026quot;。这些规则在数据不足时起到了数据替代作用：\n规则定义了什么行为是安全的，什么是不安全的 当数据中缺乏某个场景的驾驶示例时，规则提供了\u0026quot;应该怎么做\u0026quot;的指导 规则可以作为模型训练的辅助监督信号 华为的数据策略三支柱：\n策略 说明 投入 真实数据 与车企合作回传真实驾驶数据 每年8亿公里（2026年） 规则知识 3000+规则编码的驾驶知识 持续更新的规则库 场景库 人工构造+仿真生成的典型测试场景 超过20万个场景 小鹏XNGP：端到端数据飞轮 小鹏的数据策略是四家中\u0026quot;最像Tesla\u0026quot;的，但有一个关键差异：小鹏在中国，能够获取更适合中国驾驶场景的数据。\n小鹏的数据飞轮特点：\n全量数据回传：小鹏的量产车（2024年后）支持全量数据回传（不只是影子模式触发时回传），每天的原始数据量超过5PB。经过压缩和脱敏后，核心场景数据约500TB/天。\n预训练场景提取：小鹏在车端部署了一个场景检测模型，实时判断当前驾驶场景是否是\u0026quot;有价值的训练场景\u0026quot;（如：复杂路口、加塞、行人横穿等）。有价值的场景自动打标签并压缩回传，无价值场景仅保存统计特征。\n生成式数据增强：小鹏在2025年引入了基于扩散模型的数据增强。给定一个真实驾驶场景，扩散模型可以改变背景、光照、其他车辆的分布，生成语义一致但视觉多样的新场景。这种生成数据不需要人工标注——标注继承自原始场景。\n小鹏数据策略的一个亮点是**\u0026ldquo;大模型→小模型\u0026quot;的知识蒸馏**：用海量数据训练一个超大感知模型（XNet-Large），然后用它的输出作为伪标签来训练车端的小模型（XNet-Small）。这样车端模型获得了远超其自身参数量应有的数据量。\n数据策略对比总结 维度 FSD Momenta 华为ADS 小鹏XNGP 首要数据源 仿真(65%) 真实场景(80%) 真实+规则 真实(70%)+生成(30%) 数据飞轮成熟度 极高 高 中 高 Corner case挖掘 自动+仿真生成 Shadow模式对比 规则+测试 车端场景检测 数据标注方式 自动标注 AutoLabeling 人工+自动 自动+知识蒸馏 独特优势 仿真多样性 场景质量 规则知识补偿 中国场景数据 🏗️ 第四维度：系统架构 系统架构决定了整个自动驾驶软件栈的组织方式——模块怎么划分、接口怎么定义、怎么迭代升级。\n系统架构谱系 四家公司的系统架构可以放在一个从\u0026quot;高度模块化\u0026quot;到\u0026quot;高度耦合\u0026quot;的直线上：\n华 为 A D S ( M o s t M o d u l a r ) → M o m e n t a → 小 鹏 X N G P → F S D V 1 2 + ( M o s t I n t e g r a t e d ) 华为ADS：模块化架构 华为ADS是四家中最模块化的：\n[ 感 知 G 模 O 块 ↑ D ] 感 知 → [ 融 合 模 特 块 征 ] 融 合 → ↑ [ 决 策 规 模 则 块 引 ] 擎 + → M L [ 规 划 模 ↑ 块 约 ] 束 优 → 化 [ 控 制 模 块 ] M ↑ P C ↑ 每两个模块之间有严格的接口定义（protobuf格式）。各模块由不同的团队独立开发、独立测试、独立部署。升级一个模块不需要重新编译其他模块。\n模块化的优势：\n可独立验证每个模块的性能 支持OTA分模块升级（只更新感知模块而不动规划） 便于供应链管理（不同模块可以来自不同供应商） 模块化的代价：\n模块间接口压缩了信息（感知的稠密特征传到规划时变成稀疏object list） 联合优化困难（梯度无法跨模块传播） 系统延迟高（每个模块序列执行，总延迟=各模块延迟之和） Momenta：软耦合模块化 Momenta的架构形式上也是模块化的，但模块之间不是硬接口，而是共享BEV特征：\n[ 感 知 B a c k b o n e ] → 共 享 B E V 特 [ 征 时 序 → 记 ↑ 忆 [ ] 预 测 H e a d ] [ [ 行 规 为 划 规 H 划 e ] a d ↓ ] [ 运 [ 动 地 规 图 划 H ] e a d [ ] 地 图 ↓ 更 新 ] ↓ 所有模块共享同一个BEV特征空间，模块之间的接口是稠密特征图而非结构化对象。这降低了信息损失。\nMomenta架构的另一个特点是可微分接口：虽然模块在组织上分离，但感知和规划之间通过可微模块连接，允许梯度从规划loss回传到感知Backbone。这在形式上实现了模块间的端到端训练。\n小鹏XNGP：半耦合架构 小鹏的架构介于Momenta和Tesla之间：\n[ X 多 N 相 e 机 t + 感 ↑ L 知 i ] D A → R [ 稠 密 B E V 特 征 ] → [ X P l a 导 n 航 n 指 e 令 r + ] 自 车 → ↑ 状 态 [ 轨 迹 优 化 ] → [ 控 制 ] 感知和规划共享特征空间，但安全层（规则fallback）保留为独立模块。训练时，感知和规划可以联合优化（端到端训练）；部署时，如果端到端路径置信度不够，自动切换到规则规划。\nFSD V12+：One-Model架构 FSD V12/V13是四家中唯一实现\u0026quot;一个模型搞定一切\u0026quot;的系统：\n[ 多 相 机 视 频 ] → [ 一 个 巨 大 T r a n s f o r m e r ] → [ 轨 迹 点 ] 没有感知模块、没有规划模块、没有控制模块——没有模块边界，一切都在一个统一的神经网络中。模型架构是类似Video Transformer + Dense Prediction Transformer的混合体。\nOne-Model的优势：\n信息无损传递（模块边界不存在，自然不会丢信息） 全局优化（所有参数朝着最终目标优化） 自然仿真人驾驶（训练数据=人类驾驶数据，模型直接克隆驾驶行为） One-Model的劣势：\n调试极其困难（调试\u0026quot;为什么在这个路口停下来\u0026quot;需要理解整个模型的行为） 安全验证几乎是黑盒（无法证明模型在某种场景下不会出错） 迭代成本高（改一个地方需要重新训练整个模型） 架构演进趋势 2024-2026年间，四家架构的演进趋势：\n趋势 表现 模块间融合加深 感知→规划的接口从结构化→稠密特征演进 安全层独立保留 端到端化的同时，规则安全层作为冗余 可微分模块连接 即使保留模块结构，也通过可微接口实现部分端到端训练 系统延迟降低 通过算子融合、并行执行、模型压缩降低端到端延迟 🔬 四象限综合分析 从感知、规划、数据、架构四个维度，可以对四家公司做一个综合定位：\n感 高 中 低 知 稠 密 度 华 M 低 为 ( o ( A 多 m B 模 D 传 e E 块 S 感 n V 化 器 t + O a O c c c c u u p p a a n n c c 端 y y 到 ) ) 高 端 F S ( D 纯 小 视 鹏 觉 X ( O N B _ c G E → c P V u 检 规 p 测 划 a ) 端 n 到 c 端 y 化 ) 程 度 另一个维度：\n数 高 中 低 据 驱 动 程 度 F 小 华 模 S ( 鹏 ( 为 ( 块 D 仿 X 真 A 真 化 真 N 实 D 实 + G + S + 真 P 生 规 实 成 则 ) ) ) o ( n 真 e M 实 - o 场 m m 景 o e + d n 闭 e t 环 l a ) _ → 架 构 耦 合 程 度 ⏳ 演进时间线 四家方案的关键技术节点：\n2 2 2 2 2 0 0 0 0 0 2 F M 华 小 2 F M 华 小 2 F M 华 小 2 F M 华 小 2 F M 华 小 2 S o 为 鹏 3 S o 为 鹏 4 S o 为 鹏 5 S o 为 鹏 6 S o 为 鹏 : D m : : : D m : : : D m : : : D m : : : D m : : : e : e : e : e : e n A X n A X n A X n A X n 多 渐 V t D N V t D N V t D P V t D N 端 t 传 进 1 a S G 1 a S e 1 a S l 1 a S e 到 a 感 式 0 : P 1 : t 2 : a 3 : t 端 : 器 端 发 1 首 发 2 发 3 n ( 4 + + 到 布 发 . 版 布 数 . 1 布 端 . n 视 全 . 2 仿 模 规 端 ( 布 0 发 ( 据 0 . ( 到 0 e 频 场 0 . 真 块 则 量 B M ( 布 O 闭 ( 0 端 端 ( r 输 景 ( 0 数 化 安 产 E p 高 c 环 G 发 到 可 去 + 入 L 纯 + 据 端 全 V i 精 c 3 O 布 端 微 掉 端 + 4 视 X d 到 + l 地 u . D O 架 高 到 时 方 觉 P r 端 T o 图 p 0 网 n 构 精 端 空 案 版 l i 成 r t 依 a 上 络 e 地 化 轨 本 a v 熟 a 量 赖 n 线 ) - 图 迹 探 n e n 产 ) c M ) ) 索 n n s 方 y o ) e f 案 d r o N e r e l 2 m t ) . e w 0 r o ) r k ) 💡 各路线面临的挑战与2026年趋势 FSD的挑战 可解释性危机：当FSD在某个路口做出冒险行为时，工程师无法知道\u0026quot;为什么\u0026rdquo;。这在安全监管日趋严格的背景下是一个巨大隐患。 数据需求无上限：端到端模型的性能似乎还没有看到天花板，但数据需求也没有上限。Tesla需要持续扩大仿真数据规模。 中国场景适应性：FSD基于美国/欧洲驾驶数据训练，在中国复杂的交通环境下（大量非机动车、不规则路口、加塞文化）表现打了折扣。 Momenta的挑战 模块复杂度：虽然模块化带来了可调试性，但整个系统的模块数量超过15个，模块间的交互复杂度呈指数增长。 功能安全认证：每个模块都需要单独认证，模块越多认证工作越大。 客户定制负担：不同OEM客户的定制需求导致需要维护多个版本。 华为ADS的挑战 成本：三激光雷达+高算力芯片的方案成本至今难以降低到主流车型可接受的范围。 规则维护：3000+条规则的维护成本越来越大，新场景需要持续添加规则。 创新速度：相比数据驱动的Tesla/Momenta，华为迭代速度受限于规则更新和仿真测试的周期。 小鹏XNGP的挑战 端到端不彻底：保留的规则fallback层带来了\u0026quot;两个大脑\u0026quot;的不一致问题——端到端模型觉得可以走，规则层觉得不能走，决策冲突。 规模效应：小鹏150万辆的保有量是Tesla的30%，意味着数据积累速度有量级差距。 2026年收敛趋势 感知层的收敛：Occupancy Network已经成为共识——所有四家都在2025-2026年引入了稠密占据表示作为主要感知输出。差异在于传感器配置和分辨率。\n规划层的分化：FSD走向one-model端到端，其他三家走向\u0026quot;端到端化模块架构\u0026quot;——保留模块结构，但通过可微接口和共享特征实现部分端到端。\n架构的趋同：BEV→稠密表示→规划器的三段式架构成为事实标准。区别在于耦合紧密度。\n数据策略的分野：Tesla的仿真数据路径和其他三家的真实数据路径的差异在扩大。Tesla认为仿真可以无限扩展，其他三家认为真实场景的多样性无法被仿真完全覆盖。\n安全策略的竞合：所有公司都在引入\u0026quot;可验证安全机制\u0026quot;——FSD通过safety filter加在模型输出之后，华为保留规则层，Momenta/小鹏用可微约束优化做安全兜底。\n🔧 工程实践：如何选择技术路线 对于从业者和OEM厂商，选择/参考某个技术路线时需要考虑：\n因素 如果倾向于\u0026hellip; 选择\u0026hellip; 追求极致体验 端到端One-Model FSD路线参考 需要安全验证 规则+ML Hybrid 华为ADS路线参考 想要数据驱动迭代 模块化+数据闭环 Momenta路线参考 渐进式转型 从模块化走向端到端 小鹏路线参考 成本敏感 纯视觉+轻雷达 参考小鹏/FSD 安全优先 多传感器冗余+规则 参考华为ADS 📝 总结 问题：全球自动驾驶行业在2020-2026年间形成了FSD、Momenta、华为ADS、小鹏XNGP四条主要技术路线，每条路线背后是对感知架构、规划方法、数据策略、系统架构的深层假设差异，从业者需要理解这些差异的根源和影响。\n方法：本文从四个维度系统对比：感知架构（Occupancy vs BEV检测 vs 多传感器融合）、规划方法（One-Model端到端 vs Hybrid vs 规则主导）、数据策略（仿真驱动 vs 真实场景驱动 vs 规则知识补偿）、系统架构（模块化 vs 软耦合 vs One-Model），每个维度结合具体的技术实现细节和量化指标进行分析。\n结论：四条路线在感知层已呈现收敛趋势（Occupancy Network成为共识），但在规划方法和系统架构上仍然分化明显。FSD的One-Model路径代表了\u0026quot;上限最高但风险最大\u0026quot;的选择，华为ADS的规则路径代表了\u0026quot;最安全但迭代最慢\u0026quot;的选择，Momenta和小鹏则走在中间地带。2026年的行业趋势是\u0026quot;端到端化模块架构\u0026quot;——既有模块的可调试性和可验证性，又有端到端的全局优化能力。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E4%B8%BB%E6%B5%81%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6%E6%96%B9%E6%A1%88%E5%AF%B9%E6%AF%94/","summary":"全球自动驾驶行业已形成中美两强的竞争格局，不同公司的技术路线选择反映了对\u0026rsquo;什么是正确的自动驾驶\u0026rsquo;的深层假设差异。本文从感知架构（BEV vs 占据网络 vs 端到端）、规划方法（规则+ML hybrid vs 纯端到端）、数据策略（真实数据 vs 仿真数据 vs 生成数据）、系统架构（模块化 vs one-model）四个维度，深度对比Tesla FSD、Momenta、华为ADS和小鹏XNGP的技术异同，并分析各路线在2026年的收敛趋势。","title":"主流自动驾驶方案对比：FSD vs Momenta vs 华为 vs 小鹏"},{"content":"📄 论文信息 标题：DriveVLM: The Convergence of Autonomous Driving and Large Vision-Language Models 来源：上海交通大学 × 蔚来（NIO） 关键词：VLM、场景理解、空间推理、双系统架构 一句话总结：用 VLM 做自动驾驶的\u0026quot;大脑\u0026quot;，理解场景 + 推理决策，再用一个小模型保证实时性。 🤔 要解决什么问题？ 传统自动驾驶 pipeline 能做检测、跟踪，但缺乏\u0026quot;理解\u0026quot;和\u0026quot;推理\u0026quot;能力：\n能识别\u0026quot;前方有锥桶\u0026quot;，但不懂\u0026quot;因为施工所以要变道绕行\u0026quot; 能检测\u0026quot;雨天\u0026quot;，但不会推理\u0026quot;路滑所以要提前减速\u0026quot; 能看到\u0026quot;路口有交警\u0026quot;，但不会推理\u0026quot;交警手势优先级高于红绿灯\u0026quot; 人类开车靠的是对场景的语义理解和因果推理，而这正是大语言模型（LLM）的强项。规则系统无法枚举所有 corner case，而 VLM 可以借助预训练知识做\u0026quot;举一反三\u0026quot;。\n核心问题：如何让 VLM（视觉语言模型）的推理能力服务于自动驾驶决策？更进一步——如何让又大又慢的 VLM 真正跑在车端？\nDriveVLM 给出的答案是两步走：先把推理流程结构化（CoT），再用双系统架构解决实时性。\n💡 核心思路：CoT 场景推理 DriveVLM 设计了一套**思维链（Chain-of-Thought）**式的场景理解流程，模拟人类司机的思考过程：\n描述 → 分析 → 提取 → 推理\n先看清楚 → 想明白 → 再行动。这四步不是随意切分，而是对应人类从\u0026quot;看到\u0026quot;到\u0026quot;想到\u0026quot;再到\u0026quot;决定\u0026quot;的认知链条。\nM1 场景描述（Describe） 这一步要说清楚\u0026quot;我在哪、周围有什么\u0026quot;。模型输出对自车状态和环境元素的客观描述，分三类枚举：\n交通参与者：轿车、卡车、行人、骑行者、交警…… 交通信号与标识：红绿灯、停止线、限速牌、施工标志…… 道路结构与障碍：车道线、护栏、锥桶、施工围挡…… 📍 例子： \u0026ldquo;本车行驶在城市双向两车道上，前方约 20 米有一辆白色厢式货车正缓慢行驶；右车道被一排施工锥桶占用；路口东侧有一个红绿灯当前显示为绿灯剩余 3 秒；右侧人行道上有两名行人正朝路口走来。\u0026rdquo;\n注意，这一步只描述，不下判断——先把场景\u0026quot;拍下来\u0026quot;，避免过早决策漏掉关键信息。\nM2 场景分析（Analyze） 在描述的基础上，评估每个目标的状态、属性及其对自车的潜在影响：\n目标的运动状态：速度、朝向、是否在加速/减速 目标的空间关系：相对距离、所在车道、与自车的相对位置 目标的潜在影响：会不会变道、会不会闯红灯、是否构成风险 📍 例子： \u0026ldquo;前方货车速度明显低于本车（约 15 km/h），且其右车道已被锥桶封闭，短期内无法避让；红绿灯即将变黄，本车按当前速度无法在变灯前通过路口；右侧行人虽然还在人行道，但步速较快，预计会在本车到达路口时进入斑马线。\u0026rdquo;\n这一步把\u0026quot;看到的事实\u0026quot;升级成\u0026quot;懂的含义\u0026quot;，是从感知到推理的关键过渡。\nM3 关键目标提取（Extract） 真实场景里目标几十上百个，全盘推理既慢又没必要。这一步用一套拓扑关系筛出当前最影响决策的目标：\n与自车交互最强的目标（同车道前车、汇入车辆） 具有高风险的目标（行人、电动车、施工区） 具有高不确定性的目标（打灯未变道、犹豫的行人） 提取后形成一个关键目标集合，后续推理只围绕它们展开。\n📍 例子： 当前关键目标 = {前方货车, 右侧行人, 红绿灯}，其余车辆因距离远或车道无关而被剔除。\nM4 推理决策（Reason） 最后一步基于上述三个模块的输出，给出明确的驾驶决策和理由：\n📍 例子： \u0026ldquo;由于前方货车速度过低且右车道施工封闭，本车应减速跟车而非强行变道；同时红绿灯即将变黄，应准备在停止线前停车；右侧行人可能在变灯时进入斑马线，需保持观察并随时制动。最终决策：缓慢减速，准备停车。\u0026rdquo;\n这一步的输出不仅是动作，更包含可解释的因果链——这是 VLM 路线相比黑盒端到端的巨大优势。\n四步对比一览 步骤 作用 关注什么 输出形式 例子 M1 描述 客观陈述场景 元素存在性 自然语言清单 \u0026ldquo;前方有施工锥桶，右侧有行人\u0026rdquo; M2 分析 评估状态与影响 运动/空间关系 带属性的描述 \u0026ldquo;锥桶占据左车道，行人靠近路边\u0026rdquo; M3 提取 聚焦关键目标 拓扑重要性 目标集合 \u0026ldquo;施工区域是当前主要风险\u0026rdquo; M4 推理 得出决策 因果链 决策+理由 \u0026ldquo;需减速并变道至右车道\u0026rdquo; 为什么不直接\u0026quot;看图出决策\u0026quot;？ 一个自然的疑问：为什么不让 VLM 直接从图像输出动作？ 实验表明，直接映射有两个问题：\n幻觉严重：模型会编造场景中不存在的东西（凭空出现一辆车） 推理跳跃：跳过中间步骤，决策缺乏依据，出错难定位 CoT 把一个大跳跃拆成几个小步骤，每步可验证、可监督，既提升准确率，也带来可解释性——这也是 LLM 领域\u0026quot;think step by step\u0026quot;在驾驶场景的迁移。\n⚙️ 关键创新：DriveVLM-Dual 双系统架构 VLM 虽然聪明，但推理慢（单次推理几百毫秒到数秒），无法满足车端实时性（规划通常需要 10Hz+）。作者借鉴卡尼曼《思考，快与慢》中的双系统理论，设计了 DriveVLM-Dual：\n🐢 慢系统（VLM 大模型）：深度推理，频率低（几秒一次），处理复杂/罕见场景 ⚡ 快系统（轻量网络）：高频运行，实时输出控制，处理常规场景 两者通过触发机制和条件融合协同工作。\n快系统：高频实时 快系统是一个轻量化 CNN/Transformer，输入多帧图像和传感器数据，直接输出轨迹或控制量。它的特点：\n频率高：10Hz 以上，保证平顺性和安全性 覆盖常规场景：直线行驶、跟车、普通变道等 不擅长长尾：对施工、复杂路口、突发情况理解不足 可以理解为\u0026quot; reflex 反射弧\u0026quot;——大部分时间它在开车。\n慢系统：低频深度推理 慢系统就是上文的 VLM + CoT，输出的是高层语义指导：\n场景描述（M1） 关键目标集合（M3） 高层决策意图（M4，如\u0026quot;减速准备停车\u0026quot;\u0026ldquo;变道绕行\u0026rdquo;） 注意慢系统不直接输出最终轨迹，而是给快系统当\u0026quot;指挥官\u0026quot;。\n关键场景触发机制 慢系统很贵，不能一直开。**触发器（Trajectory Trigger）**负责判断\u0026quot;当前是否需要请慢系统出山\u0026quot;：\n触发条件 说明 目标突变 前车急刹、有车强汇入、行人闯入 特殊路况 施工区、事故、临时管制 复杂拓扑 多岔路口、无保护左转、环岛 异常天气 雨、雪、雾影响感知 快系统置信度低 快系统对自己的输出\u0026quot;没把握\u0026quot; 定时兜底 即使无异常，每隔几秒也跑一次 触发器本质上是一个轻量分类器，把\u0026quot;是否复杂\u0026quot;做成一个可学习的判断，避免人工写死规则。\n双系统的融合方式 慢系统被触发后，它的输出如何\u0026quot;指导\u0026quot;快系统？大致是条件注入的思路：\n慢系统输出（描述/关键目标/决策意图） ➜ 编码为条件向量 ➜ 作为额外输入拼到快系统 ➜ 快系统输出最终轨迹\n这样设计的好处：\n快系统始终在跑，保证实时性 慢系统的指导像\u0026quot;提词器\u0026quot;，把语义信息注入到低层规划 即使慢系统偶尔延迟，快系统也能维持基本安全 维度 慢系统（VLM） 快系统（轻量网络） 频率 低（~0.2–1Hz） 高（10Hz+） 算力 大 小 擅长 语义推理、长尾 实时反应、常规场景 输出 高层决策指导 轨迹/控制量 类比 人脑\u0026quot;深思\u0026quot; 人脑\u0026quot;反射\u0026quot; 这套设计的精髓在于：用频率解耦\u0026quot;深度\u0026quot;和\u0026quot;速度\u0026quot;——重要的不是让 VLM 跑得多快，而是让它在关键时刻\u0026quot;点一下\u0026quot;。\n🧪 训练策略与数据 DriveVLM 不只是\u0026quot;调一个 GPT-4V\u0026quot;，而是有完整的训练 pipeline。\n基座模型选择 作者选用 Qwen-VL 系列作为基座（实验中也对比了 InternVL 等），原因：\n中文场景描述能力强（适配国内路况标注） 开源可微调，便于车端部署 视觉编码器（ViT）与 LLM 部分解耦，便于优化 视觉-语言对齐 VLM 预训练时见的多是\u0026quot;网络图片 + 描述\u0026quot;，驾驶视角图像与日常照片差异巨大（鱼眼、多摄、低光照）。对齐的关键：\n视觉编码器用驾驶图像继续预训练，让 token 编码适配车端视角 多视图融合：把环视多摄像头图像分别编码后拼接，让模型有 360° 视野 时序信息：用少量历史帧提供运动线索，弥补单帧看不出速度的问题 训练阶段与 loss 设计 训练分多个阶段，逐步解锁能力：\n阶段 数据 目标 loss 阶段 1：对齐预训练 大量驾驶图像 + 简短描述 视觉-语言对齐 图文对比 + 描述生成（CE） 阶段 2：CoT 监督微调 标注的四步推理样本 学会 Describe/Analyze/Extract/Reason 逐步骤交叉熵（SFT） 阶段 3：决策对齐 带决策动作的样本 让推理对齐最终动作 动作回归 + 语言 CE 联合 几个关键设计：\n逐步骤监督：每一步（M1–M4）都有独立标注和 loss，而不是只监督最后决策。这强迫模型\u0026quot;过程正确\u0026quot;，显著降低幻觉 关键目标提取的可学习性：M3 的输出用集合匹配 loss，允许目标顺序不固定 高效微调：大模型部分用 LoRA / QLoRA，只训少量参数，降低显存压力 快系统单独训练：快系统是独立的轻量网络，用海量驾驶轨迹数据训练，与慢系统解耦 🏭 Meta-DriveVLM 数据生成引擎 CoT 监督需要大量带四步推理标注的数据，人工标注又贵又慢。作者提出 Meta-DriveVLM，用 VLM 自己自动生成训练数据——一个\u0026quot;数据飞轮\u0026quot;。\n工作流程 采集驾驶片段 ➜ 关键帧抽取 ➜ 用强 VLM（如 GPT-4V / 标注大模型）生成四步 CoT ➜ 质量过滤 ➜ 入库用于训练小模型\n关键技术点 关键帧采样：不是每帧都标注，而是按\u0026quot;场景变化点\u0026quot;采样（变道、加减速、信号变化），提升数据效率 多模型交叉验证：用多个 VLM 生成描述，取一致部分作为伪标签，过滤单模型幻觉 结构化提示词：用固定 schema 约束输出格式，保证 M1–M4 结构整齐，便于下游训练 人工抽检：抽样人工复核，估算伪标签准确率，反过来迭代提示词 数据飞轮的意义 Meta-DriveVLM 的真正价值在于可规模化：\n人工标注一天几百条，自动生成可达几万到几十万量级 新场景（新城市、新天气）只要采集视频，就能快速产出标注 形成\u0026quot;采集 ➜ 生成 ➜ 训练 ➜ 部署 ➜ 再采集\u0026ldquo;的闭环 维度 人工标注 Meta-DriveVLM 自动生成 速度 慢（小时级/条） 快（秒级/条） 成本 高 低（摊销算力） 一致性 因人而异 模板统一 准确性 高（专家） 中等（需过滤） 规模上限 千-万 万-百万 这也是论文把\u0026quot;数据\u0026quot;作为独立贡献的原因——VLM 落地驾驶的瓶颈不在模型，而在数据。\n🔬 实验与结果 评测数据集 作者在多个 benchmark 上评测：\nDriveVLM 自建数据集：覆盖施工、复杂天气、复杂路口等长尾场景，带 CoT 标注 nuScenes：通用感知与预测基准，做对比验证 SUP-AD 等私有仿真平台：闭环/开环规划评测 关键指标 主要从两个维度看效果：\n1. 推理与决策质量（开环）\n方法 场景描述准确率 决策合理性（人工评分） 纯感知 + 规则 — 基线 GPT-4V 直接推理 中（幻觉多） 中 DriveVLM（CoT） 高 高 2. 规划精度（L2 误差 / 碰撞率）\nDriveVLM-Dual 在长尾场景下相比纯快系统基线有明显提升，同时双系统设计把平均延迟控制在可接受范围。具体数值随 benchmark 差异较大，建议查原论文 Table。\n经验性结论：在常规场景下双系统与纯快系统持平，在长尾场景下显著优于纯快系统——这正是慢系统被触发的时候。\n与 GPT-4V 直接做驾驶推理的对比 一个常见疑问：直接用 GPT-4V 不就行了？ 实测下来差距明显：\n维度 GPT-4V 直接推理 DriveVLM 空间感知 弱（距离/车道判断常错） 强（驾驶数据对齐过） 幻觉 严重（编造目标） 受 CoT 监督约束，显著降低 延迟 数秒（云端调用） 双系统可达车端实时 可控性 黑盒，难微调 可微调、可注入业务约束 成本 每次调用付费 一次性部署 离网可用 否（依赖云） 是（本地部署） 核心结论：通用 VLM 缺的不是智力，而是\u0026quot;驾驶常识\u0026quot;和\u0026quot;车端可部署性\u0026rdquo;，这正是 DriveVLM 微调 + 双系统要解决的。\n失败案例 论文和分析中常见的失败模式：\n夜间/强逆光：视觉编码器失效，描述漏检关键目标，导致 M1 就错了，后续连锁出错 罕见交通手势：训练数据少，模型识别不准 远距离小目标：分辨率不足，行人/电动车在 M3 漏提取 慢系统延迟过大：触发后慢系统没及时返回，快系统只能\u0026quot;盲开\u0026quot;几帧，存在安全隐患 过度推理：简单场景也被触发慢系统，造成算力浪费和平顺性下降 这些失败案例提示：触发器的设计、视觉编码器的鲁棒性、慢系统的延迟预算是工程落地的三大关键。\n🎯 这篇论文的意义 范式验证：证明了 VLM 的推理能力确实能提升自动驾驶决策质量，尤其在长尾场景 工程可行：双系统架构给出了一套\u0026quot;VLM 落地车端\u0026quot;的现实方案，而不只是 demo 数据飞轮：Meta-DriveVLM 展示了用 VLM 反哺数据生成的可能性，把\u0026quot;数据瓶颈\u0026quot;变成可工程化的 pipeline 可解释性：CoT 输出天然带因果链，对安全审计和事故复盘有重大价值 它是 VLA 这条路线在自动驾驶领域的重要奠基工作之一。\n🔗 相关工作延伸 工作 团队 与 DriveVLM 的关系 EMMA Wayve 更激进的端到端多模态大模型，统一感知+规划 DriveVLM-Dual 本文 DriveVLM 的实时化版本 LMDrive 田野 LLM 辅助的端到端驾驶 π0 / π0.5 Physical Intelligence 通用机器人 VLA，Flow Matching 动作头设计可借鉴 GPT-4V / Qwen-VL OpenAI / 阿里 作为基线或数据生成器被对比/使用 📝 个人思考 这篇论文最打动我的不是某个模块设计，而是**\u0026ldquo;用人类思考方式来设计系统\u0026rdquo;这个理念。CoT 推理 + 双系统架构，本质上是在用 AI 架构模拟人类认知机制——人类开车也是\u0026quot;平时靠反射、遇到复杂情况才动脑子想\u0026quot;。这种仿认知结构**的设计哲学，比单纯堆参数或堆数据更有长期价值，因为它对齐了我们已知的最优驾驶智能体（人类司机）的工作方式。\n对工程实践的第一点启发：VLM 落地车端的核心矛盾是**\u0026ldquo;聪明\u0026quot;和\u0026quot;快\u0026quot;不可兼得**，而双系统是一种通用的解法模板——不只是自动驾驶，机器人、具身智能、甚至工业控制都能用。关键不是把大模型蒸馏到多小，而是想清楚**\u0026ldquo;哪些决策需要深思、哪些只需要反射\u0026rdquo;**，把算力花在刀刃上。这个\u0026quot;重要性与算力的匹配\u0026quot;思想，比具体网络结构更值得迁移。\n第二点启发在数据侧。Meta-DriveVLM 让我意识到，大模型时代自动驾驶的护城河正在从\u0026quot;模型结构\u0026quot;转移到\u0026quot;数据闭环\u0026rdquo;。谁能把\u0026quot;采集 ➜ 自动标注 ➜ 训练 ➜ 部署 ➜ 再采集\u0026quot;这条飞轮转得更快更稳，谁就有优势。CoT 的结构化输出在这里起到关键作用——它不仅是推理范式，更是一种数据 schema，让自动生成、人工校验、模型训练三者能对齐。这一点上，DriveVLM 的工程价值可能比它的模型设计更深远。\n最后一点是对可解释性的体会。监管和安全验证是自动驾驶绕不开的坎，而黑盒端到端最大的软肋就是出事说不清。CoT 天然带因果链：\u0026ldquo;我看到了什么 ➜ 我判断了什么 ➜ 所以我怎么做\u0026rdquo;，这种可追溯的决策日志在事故复盘里价值巨大。我倾向于认为，未来真正能大规模上车的系统，一定会在\u0026quot;端到端的效率\u0026quot;和\u0026quot;CoT 的可解释\u0026quot;之间找一个平衡点——而 DriveVLM 给出了一个相当有说服力的左脚踩右脚的起点。\n📖 这是论文精读系列的第 1 篇。下一篇你想看哪篇论文的解读？欢迎留言。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/drivevlm%E7%B2%BE%E8%AF%BB/","summary":"DriveVLM 是首个系统性地把视觉语言模型用于自动驾驶场景理解与推理的工作。它提出双系统架构——VLM 慢系统做思维链推理输出高层决策，传统规划器快系统做安全执行。在 CARLA 闭环评测中大幅超越基线，为 VLA 的 Dual-System 范式奠定基础。","title":"论文精读｜DriveVLM：把大语言模型推理能力搬上自动驾驶"},{"content":"一句话理解 VLA VLA = 看得懂图（Vision）+ 听得懂话（Language）+ 会做动作（Action）\nVLA（Vision-Language-Action）模型把视觉理解、语言推理和动作执行统一到一个端到端的神经网络里。它不是三个模块的简单拼接，而是一个模型直接从「图像+指令」输出「动作」。\n理解 VLA 的关键在于它把大语言模型（LLM）的推理能力引入了控制问题——模型不仅能识别\u0026quot;前方有行人\u0026quot;，还能推理出\u0026quot;行人正在看手机、可能横穿马路，所以我应该减速\u0026quot;，并直接输出刹车/转向指令。\n🚗 为什么自动驾驶需要 VLA？ 传统模块化架构的瓶颈 传统自动驾驶是模块化流水线：\n摄像头 → 感知 → 预测 → 规划 → 控制\n这套架构成熟、可解释性强，但有三个硬伤：\n信息丢失：每个模块只把有限结果（如目标框、轨迹）传给下一级，原始像素中的丰富信息层层衰减，下游永远看不到上游\u0026quot;看到的一切\u0026quot;。 无法理解\u0026quot;语义\u0026quot;：感知模块能识别\u0026quot;前方有锥桶\u0026quot;，但不懂\u0026quot;因为施工所以要变道\u0026quot;这种需要常识和因果推理的判断。 长尾场景弱：遇到规则库里没定义过的复杂路况（如前方货车掉落货物、临时交通管制），规则系统容易失效，且难以泛化到新城市。 VLA 的破局思路 VLA 的核心思路是引入大语言模型的推理与常识能力，让系统真正\u0026quot;看懂\u0026quot;场景、\u0026ldquo;想明白\u0026quot;该怎么做，并且把整条链路压进一个可端到端训练的网络里。这样梯度可以从最终动作误差直接回传到视觉编码器，避免模块间的信息割裂。\n🏗️ VLA 的典型架构 一个 VLA 模型通常由三部分组成：\n视觉编码器 → 语言模型（LLM） → 动作头（Action Head）\n组件 作用 典型实现 📷 视觉编码器 把摄像头图像编码成 token 序列 ViT、SigLIP、CLIP、DINOv2 🧠 语言模型 融合视觉与语言 token，进行推理决策 LLaMA、Qwen、InternLM、Gemma 🎯 动作头 把推理结果转成可执行的动作向量 Diffusion、Flow Matching、回归头 三大组件的协同 视觉编码器输出图像 token（通常经过一个投影层对齐到 LLM 的嵌入空间），连同文本指令的 token 一起送入 LLM。 LLM 在统一的 token 空间里做跨模态推理，可以输出**思维链（Chain-of-Thought）**解释决策依据。 动作头接收 LLM 的隐状态（或中间特征），生成最终的低层控制信号（方向盘转角、油门、刹车，或机械臂关节角）。 关键创新：Action Head 的设计演进 动作头是 VLA 区别于普通 VLM（如 GPT-4V）的关键——它必须输出可执行的连续控制量。这部分的设计直接决定了精度、速度和表达能力，目前主要有三大流派。\n🎯 Action Head 设计详解 Action Head 要解决的核心问题是：如何从一个高维语义特征，生成精确的低层动作？ 这个看似简单的问题，因为动作分布的多模态性（同一场景下可能有多个合理动作，比如左绕或右绕障碍）而变得棘手。下面三种方案各有取舍。\n方案一：动作离散化为 Token（Action Tokenization） 代表工作：RT-2、OpenVLA\n把每个动作维度（如转向角、油门）独立离散化成若干个 bin（典型 256 个），每个 bin 对应词表里的一个 token。于是动作变成一段\u0026quot;伪文字\u0026rdquo;，模型用自回归方式逐 token 生成动作。\n✅ 优点：完全复用 LLM 的自回归生成机制和交叉熵训练，实现最简单；动作和语言共享同一套解码器。 ❌ 缺点：量化误差（连续值被强行压进有限 bin）；自回归生成长动作序列时延迟高；难以表达多模态分布。 🎯 定位：早期验证 VLA 可行性的方案，实现门槛低，适合研究和快速复现。 方案二：连续动作回归（Continuous Regression） 在 LLM 末端接一个 MLP/Dense 头，直接回归出连续动作向量。\n✅ 优点：推理极快（一次前向就出结果），实现简单，没有量化误差。 ❌ 缺点：当训练数据中存在多个合理动作时，回归会倾向于取平均（mode averaging），导致输出一个\u0026quot;谁都不像\u0026quot;的折中动作，在多模态场景下表现差。 🎯 定位：适合动作空间相对确定、单模态的任务，或对延迟要求极端苛刻的部署。 方案三：扩散 / Flow Matching 生成（Diffusion / Flow Matching） 代表工作：π0、Diffusion Policy、DiffusionDrive\n把动作生成建模成一个生成式采样过程。扩散模型从噪声出发，逐步去噪得到动作；Flow Matching 则学习一个把简单分布\u0026quot;流\u0026quot;到动作分布的速度场。它们可以一次性生成一整段动作序列（action chunk）。\n✅ 优点：天然支持多模态动作分布；精度高；可生成未来若干步的动作（action chunking），减少高频推理开销。 ❌ 缺点：推理需要多次迭代去噪，计算开销大；训练和调参更复杂。 🎯 定位：当前精度和表达能力最强的方案，是研究和工业界的主流方向。 三种方案对比 方案 精度 速度 多模态支持 实现难度 代表工作 离散化 Token 中（有量化误差） 慢（自回归） 弱 低 RT-2、OpenVLA 连续回归 中 快 弱（mode averaging） 低 早期 SFT 头 扩散/Flow Matching 高 慢（可优化） 强 高 π0、DiffusionDrive 💡 实践技巧：为缓解扩散头的延迟问题，业界常用 action chunking（一次生成未来 N 步动作，按需执行）+ 模型蒸馏（把扩散老师蒸馏成一步回归学生）+ 异步推理流水线来逼近实时性。\n🧪 VLA 的训练流程 一个完整的 VLA 训练通常分三个阶段，和 LLM 的训练范式高度对齐，但数据形式不同。\n阶段一：视觉-语言预训练（Pretraining） 目标是让模型学会\u0026quot;看图说话\u0026quot;。通常用海量互联网图文对做对比学习或生成任务，建立视觉 token 和语言 token 的对齐。\n数据：网络爬取的图文对（如 LAION）、VQA 数据集。 方法：冻结/部分冻结 LLM，训练视觉编码器和投影层。 产出：一个通用的 VLM（如 PaLI、LLaVA 系列）。 阶段二：动作指令微调（Instruction Tuning / SFT） 这是 VLA 真正\u0026quot;学会做动作\u0026quot;的阶段。用 (图像, 指令, 动作) 三元组进行监督学习。\n数据构建： 机器人：遥操作采集的示教轨迹（teleoperation demos）、仿真数据。 自动驾驶：人类驾驶日志中切片出的 (多视角图像, 导航指令, 方向盘/油门/刹车标签)。 关键技巧：加入思维链标签——除动作外，还标注中间推理过程（\u0026ldquo;前方有行人 → 行人正在靠近车道 → 减速\u0026rdquo;），让模型学会\u0026quot;想清楚再做\u0026quot;。 损失：动作头用回归/MSE 或扩散去噪损失；语言部分用交叉熵。 阶段三：偏好对齐（RLHF / Preference Optimization） 用强化学习或偏好数据，把模型对齐到安全、舒适、符合人类直觉的行为。\n奖励来源：人类标注的轨迹偏好对（A 比 B 好）、基于规则的安全 shield（碰撞/违规给负奖励）、仿真器回放。 常用算法：PPO、DPO（Direct Preference Optimization，免显式奖励模型，更稳定）。 自动驾驶特殊性：安全相关约束通常用硬约束 + 规则后处理兜底，不完全依赖 RL 学出来的软偏好。 三阶段对比 阶段 目标 数据 典型方法 预训练 视觉-语言对齐 海量图文对 对比学习、生成 指令微调 学会做动作 (图, 指令, 动作) 三元组 SFT + 思维链 偏好对齐 安全/舒适/符合直觉 偏好对、安全规则 RLHF、DPO 🏆 代表性 VLA 工作详解 VLA 的发展先在机器人领域爆发，再延伸到自动驾驶。下面按领域梳理代表性工作。\n机器人领域 模型 团队 Action Head 核心特点 RT-1 Google 离散 token 早期 Transformer 控制策略，验证大规模示教数据可泛化 RT-2 Google DeepMind 离散 token 首个真正把 VLM 直接变 VLA 的工作，动作复用词表 OpenVLA Stanford/Berkeley/TRI 离散 token 开源标杆，基于 Llama 2 + SigLIP，可复现可微调 Octo Berkeley 扩散头 通用机器人策略，支持多种机器人本体 π0 / π0.5 Physical Intelligence Flow Matching 通用 VLA，跨本体跨任务，动作头用 Flow Matching，目前能力天花板之一 自动驾驶领域 模型 团队 核心特点 DriveVLM 清华/上交 + 蔚来 首个把 VLM 用于自动驾驶空间推理，引入思维链（场景→关键对象→动作） EMMA Wayve 基于 Gemini 的多任务端到端，统一感知+规划+预测，单模型多输出 DriveVLM-Dual 上海交大 + 蔚来 双系统：快思考（小模型实时）+ 慢思考（大模型推理），兼顾速度与深度 DiffusionDrive 华中科大等 扩散头做规划，建模多模态轨迹分布 SparseDrive 稀疏化设计，提升端到端规划效率 关键定位解读 RT-2 的贡献是证明了可行性：VLM 可以直接输出动作，不需要单独的控制模块。它的离散化方案简单但奠基。 OpenVLA 的贡献是民主化：把一个完整的 VLA 训练 recipe 开源，让学术界能快速跟进。 π0 的贡献是生成式动作头的天花板：Flow Matching 让它在精细操作和长程任务上远超离散化方案，是通用具身智能的代表。 DriveVLM 的贡献是把 VLM 推理搬上车：首次展示思维链能提升复杂场景（如施工、拥堵）的决策质量。 EMMA 的贡献是多任务统一：一个 Gemini 风格模型同时输出感知、预测、规划，验证了 VLA 在车端的多任务潜力。 ⚖️ 自动驾驶 VLA vs 机器人 VLA 虽然都叫 VLA，但两个领域的约束差异巨大，直接照搬机器人的方案上车往往行不通。\n维度 自动驾驶 VLA 机器人 VLA 实时性 极严苛，需 10Hz+（\u0026lt;100ms） 较宽松，1–5Hz 常可接受 安全等级 安全关键（safety-critical），出错可能致命 容错较高，可重试 动作空间维度 低维（方向盘、油门、刹车，约 2–3 维） 高维（7 自由度臂 + 夹爪，\u0026gt;7 维） 动作分布 相对单模态（多数场景有\u0026quot;标准答案\u0026quot;） 高度多模态（多种抓取/放置方式） 数据获取 车队海量日志，但\u0026quot;有趣\u0026quot;场景稀缺 实验室/仿真采集，规模有限 传感器 多相机 + LiDAR + 雷达，时序要求高 少量相机/深度相机 场景开放性 开放道路，长尾无穷 工作空间相对受限 延迟确定性 必须硬实时，错过 deadline 即危险 软实时，偶尔慢一拍可接受 三个核心差异的深入分析 1. 实时性是车端的生死线。 机器人手臂慢 100ms 几乎无感，但汽车以 30m/s 行驶时，100ms 就是 3 米。这要求自动驾驶 VLA 必须做激进的模型压缩、量化、action chunking 和异步推理，而机器人 VLA 可以放开手脚用更大的模型。\n2. 安全性要求截然不同的验证方法。 自动驾驶需要**形式化验证、海量仿真回归、影子模式（shadow mode）和规则安全盾（safety shield）**做兜底——VLA 的输出经常要过一个硬规则过滤器才会下发。机器人则更多依赖任务级成功率指标。\n3. 动作空间维度相反。 自动驾驶动作维度低但精度要求极高（方向盘差 1° 可能偏离车道），且常常是单模态，所以连续回归/action chunking 更实用；机器人动作维度高且多模态，更依赖扩散/Flow Matching 来表达多样性。\n💡 因此，自动驾驶 VLA 不能照搬机器人方案，而要针对低延迟、高安全、低维高精度重新设计 Action Head 和推理流水线。\n📊 VLA vs 传统端到端 维度 传统端到端 VLA 推理能力 弱（黑盒映射） 强（可链式推理） 可解释性 差 较好（可输出思维链） 泛化性 依赖数据分布 借助 LLM 预训练知识 实时性 快 较慢（LLM 推理开销） 训练成本 中等 高（需要大规模数据+算力） 数据需求 中 大（且要带推理标签） 当前最大挑战：如何让 LLM 的推理既准又快，满足车端实时性要求。\n🧭 当前挑战与未来方向 主要挑战 ⏱️ 实时性：数十亿参数的 LLM 推理延迟难以压到 100ms 以内。方向：模型蒸馏、量化、KV-cache 复用、action chunking、专用加速芯片。 🛡️ 安全性验证：如何为一个\u0026quot;会推理的黑盒\u0026quot;提供安全保证？方向：形式化方法、对抗场景测试、规则安全盾、不确定性估计。 📦 数据效率：带思维链标注的驾驶数据极其昂贵。方向：世界模型生成数据、主动学习、仿真闭环训练。 🔗 多模态融合：如何同时利用多相机、LiDAR、雷达、历史帧时序？方向：3D/BEV token 化、时序注意力、跨模态对齐。 🌍 长尾泛化：罕见场景（事故、极端天气）下仍需可靠决策。方向：合成数据、LLM 常识迁移、检索增强。 未来趋势 世界模型 + VLA 结合：世界模型预测未来，为 VLA 提供仿真训练环境和\u0026quot;想象\u0026quot;能力。 快慢双系统：小模型做实时反应，大模型做慢思考，按需触发（如 DriveVLM-Dual）。 端云协同：车端跑蒸馏后的小 VLA，云端大 VLA 做难例推理和持续学习。 跨本体/跨车型统一：一个 VLA 适配多种车型/机器人（类比 π0 在机器人侧的通用性）。 🎓 如何入门 VLA 研究 推荐学习路线 LLM 基础 → 多模态 VLM → VLA 经典论文 → 动手复现 → 选方向深挖\n打基础：理解 Transformer、自回归生成、对比学习、指令微调、RLHF/DPO。 学 VLM：读 CLIP、BLIP、LLaVA，搞懂视觉-语言对齐机制。 进 VLA：按下面论文清单顺序读，先离散化、再扩散/Flow Matching。 动手：跑通 OpenVLA 或 LeRobot 的 demo，做一次微调。 深挖：在 Action Head 设计、训练范式、或自动驾驶适配中选一个方向。 推荐论文清单 机器人 VLA（按时间线）：\nRT-1（Google, 2022）— 大规模示教数据驱动的控制策略 Diffusion Policy（2023）— 扩散动作头的奠基工作 RT-2（DeepMind, 2023）— VLM 直接变 VLA OpenVLA（2024）— 开源 VLA 标杆 π0 / π0.5（Physical Intelligence, 2024）— Flow Matching 通用 VLA Octo（2024）— 通用机器人策略 自动驾驶 VLM/VLA：\nDriveVLM / DriveVLM-Dual（上交+蔚来）— 思维链 + 双系统 EMMA（Wayve）— 多任务端到端 DriveGPT4、LMDrive — VLM 辅助驾驶的早期探索 开源代码与资源 资源 说明 OpenVLA https://github.com/openvla/openvla — 完整开源 VLA，首选复现对象 LeRobot HuggingFace 出品，含数据集+模型+训练流水线，对新手友好 Octo 通用机器人策略，支持多本体 Diffusion Policy 扩散动作头参考实现 π0 (公开说明) Physical Intelligence 发布的技术报告与部分实现 💡 新手建议：先从 LeRobot 起步，它的抽象层次高、文档完善，能让你在一周内跑通一个完整 VLA demo，再逐步深入到 OpenVLA 和扩散头。\n✅ 小结 VLA 不是某个具体模型，而是一种新范式：用大模型的通用理解与推理能力，重新定义\u0026quot;感知 → 决策 → 动作\u0026quot;的链路。它代表了自动驾驶从\u0026quot;规则驱动\u0026quot;走向\u0026quot;理解驱动\u0026quot;的方向。\n记住三个要点：\n架构 = 视觉编码器 + LLM + 动作头，其中动作头的设计（离散 / 连续 / 扩散）是性能 trade-off 的核心。 训练 = 预训练 + 指令微调 + 偏好对齐，数据构建（尤其思维链标签）是关键。 上车 ≠ 照搬机器人，必须针对实时性、安全性、低维高精度重新设计。 下一篇我们聊世界模型——它解决的是 VLA 训练中\u0026quot;数据从哪来\u0026quot;的问题。\n💡 觉得有用？这系列会持续更新，点个关注不迷路。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E4%BB%80%E4%B9%88%E6%98%AFvla%E6%A8%A1%E5%9E%8B/","summary":"VLA 模型将视觉理解、语言推理和动作执行统一到一个端到端网络中，引入大语言模型的常识推理能力解决自动驾驶长尾场景问题。本文剖析其视觉编码器、LLM 与动作头的标准三组件架构，以及从 LLaVA、RT-2、DriveVLM 到 VLA 的完整演进路线。VLA 正成为后端到端时代自动驾驶的新技术范式。","title":"什么是 VLA（Vision-Language-Action）模型？"},{"content":" 这页是本站论文精读区的总目录。很多文章单独看都懂，但串不起来。参考学习路径的思路，我按\u0026quot;金字塔\u0026quot;把它们分层：每一层解决上一层留下的问题，顺着层往上读，最后正好落在 VLA / 世界模型这些前沿范式上。\n🏔️ 先给你全局视图：六层金字塔 第六层【前沿范式】 VLA / 世界模型 / 强化微调 ← 当前最热，本站的重心 第五层【生成式规划】 扩散规划 + 强化学习(GRPO) ← AlphaDrive/DiffusionDrive/Flow-GRPO 第四层【世界模型】 DreamerV3/Cosmos/GEN-1... ← 预测未来·做数据工厂 第三层【端到端规划】 UniAD / VAD / SparseDrive ← 2023-2024 主战场 第二层【BEV 感知】 BEVFormer / Sparse4D ← 行业基石 第一层【地基】 Transformer / ViT ← 一切的源头 阅读总原则：按层往上走。跳层读会痛苦（没读 BEVFormer 直接看 VLA，感知那部分会糊涂）。每层里我标了\u0026quot;必读\u0026quot;和\u0026quot;进阶\u0026quot;，按顺序点进去即可。\n📍 第 0 站：先看全景再进层 进任何层之前，先读这三份，建立坐标系：\n自动驾驶技术全景学习指南｜六范式知识体系 ⭐ 本站总地图 自动驾驶感知学习指南 ⭐ BEV/感知分地图 自动驾驶优质博客收藏夹 —— 外部高质量资源 读完这几份，再进金字塔，就知道每篇论文\u0026quot;躺在哪一层、为谁服务\u0026quot;。\n第一层：地基（Transformer / ViT） 不读这两块，后面全是天书——所有端到端/VLA/世界模型都建立在 Transformer 上。\n⭐ 必读：Attention Is All You Need (Transformer)——注意力机制的开山作（理解\u0026quot;自注意力怎么并行 + 全局感受野\u0026quot;） ⭐ 必读：ViT: An Image is Worth 16x16 Words——图像切 patch 当 token，视觉 token 一切的源头 📌 我这里的底层参考：Transformer → ViT 的 patch 思想 -\u0026gt; 一切视觉模型输入来源 本站精读偏工程/前沿，地基理论靠经典论文原文补。可先用我写的 VLA vs 感知：两种路线怎么选 建立感性认识，再回去补理论。\n第二层：BEV 感知（行业基石） 解决\u0026quot;多路相机图像怎么变成统一的鸟瞰表示\u0026quot;。你读 VLA/V 世界模型前，感知这层必须有。\n⭐ BEVFormer 感知精读 —— BEV query 反向查询，Spatial Cross-Attention Sparse4D 稀疏感知精读 —— 稀疏 query 而非稠密网格 SparseDrive-V2 精读 —— 稀疏统一感知+预测 SparseOccVLA 精读 —— 稀疏占据 / VLA 结合的感知 第三层：端到端规划（2023-2024 主战场） 解决\u0026quot;感知→预测→规划各模块误差累积 / 目标不一致\u0026quot;。代表作是模块化端到端的巅峰。\n⭐ UniAD 端到端自动驾驶框架精读 —— planning-oriented，CVPR 最佳论文 ⭐ VAD 向量化端到端精读 —— 场景矢量化，逼近实时 TransFuser 论文精读 —— 多传感器融合端到端（CARLA 经典） DriveTransformer 精读 —— 大网络化端到端 EMMA-Wayve 端到端多模态精读 —— 多模态大模型直接出规划 Senna-VLM 辅助驾驶精读 —— VLM 辅助端到端 进阶：JEPA-DRIVE 自监督驾驶决策精读 / RAW2Drive 精读 / NoRD 精读 第四层：世界模型（预测未来 + 做数据工厂） 解决\u0026quot;真车训练太危险、长尾场景太少\u0026quot;。用生成式模型预测/合成未来场景，既是世界模型又是闭环训练环境。\n⭐ Cosmos3 世界基础模型精读 —— NVIDA 开源世界基础模型 DreamerV3 世界模型精读 —— RL 决策 + 世界模型，通用智能体经典 DriveDreamer 世界模型精读 —— 可控驾驶场景生成（数据工厂） DLWM 精读 / UniSim 交互式世界模拟器精读 我的工程向：Cosmos3-MoE + Flow-GRPO 架构 第五层：生成式规划 + 强化学习（本站重心） 解决\u0026quot;模仿学习有天花板，模型最多和人类一样好\u0026quot;。用**扩散/Flow 生成轨迹 + 强化学习（GRPO）**突破上限。这是你读 Flow-GRPO 的落地点。\n扩散 / Flow 生成式规划 ⭐ DiffusionDrive 精读 —— 截断扩散 + anchor 先验，实时多模态规划 Diffusion-Planner 精读 —— 规划当轨迹生成 Diffusion-Policy 精读 —— 动作扩散，机器人/驾驶通用 GoalFlow 精读 —— Flow Matching + 目标点引导 TransDiffuser 论文精读 强化学习微调（GRPO 进入驾驶） ⭐ AlphaDrive-GRPO 驾驶策略精读 —— GRPO 首次引入驾驶规划，多模态规划 Gen-Drive 扩散强化驾驶精读 —— 扩散 + reward / RL 微调 AutoVLA 精读 —— VLA + GRPO 快慢双模 ReCogDrive 精读 —— 扩散规划器 + GRPO（DiffGRPO） AlpaMayo-R1 精读 我的深入讲解（综合） ⭐ Flow-GRPO 完全讲解 —— 训练/推理/梯度流逐行拆解 RL 与扩散轨迹规划：怎么结合 NavSim PDMS-90：闭环指标 第六层：VLA 与具身智能（前沿范式） 解决\u0026quot;端到端网络遇到长尾场景泛化差\u0026quot;。用视觉-语言-动作统一模型，既能开自动驾驶车又能操作机器人。\nVLA 模型 ⭐ OpenVLA 开源 VLA 模型精读 —— 开源落地标准起点 AutoVLA 精读 / Qwen-VLA 精读 pi0 通用 VLA 模型精读 One-VL 精读 / Last-VLA 精读 / LinkVLA 精读 / DriveVLM 系列精读 综述：VLA Survey 精读 ⭐ / VLA 安全综述精读 具身 / 机器人基础 RT-1 Robotics Transformer 精读 / RT-2 精读 PaLM-E 具身多模态语言模型精读 EmbodiedGPT 具身思维链精读 SayCan 语言 grounding 精读 / VIMA 多模态 prompt 精读 Gato 通用智能体精读 数据 / 工程 RT-1 配套 Open-X-Embodiment 数据集 RH20T 拟人机器人数据集精读 DROID 机器人操作数据集精读 LIBERO 精读 / ACT-ALOHA 精读 🚚 商用车 / 重卡专题（按需） 工程与安全重卡方向的一批精读，按你当前项目取用：\nAntiRollover 重型车防侧翻 CargoLoad-RSS 载荷估计 MANTruckScenes 卡车场景 TruckDrive / TruckV2X 重卡驾驶与协同 · TruckV2X PARA-Drive 🧭 建议阅读顺序（一个月路线） 阶段 读什么 目标 第 1 周 第 0 站全景 + 第二层 BEV 建立感知坐标系 第 2 周 第三层 端到端（UniAD/VAD） 懂为什么行业要端到端 第 3 周 第四层 世界模型 懂 VLA/世界模型怎么来 第 4 周 第五层 扩散+GRPO → Flow-GRPO 完全讲解 抵达你的核心方向 更多精读文章在 📁 论文精读分类 里按时间排（上百篇）。这页是\u0026quot;该先读哪些\u0026quot;的精选骨架，那页是\u0026quot;全部藏货\u0026quot;。\n","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/auto-driving-learning-path/","summary":"参考\u0026rsquo;少读要比乱读强\u0026rsquo;的思路，把我论文精读区的文章按\u0026rsquo;地基→BEV感知→端到端→世界模型→扩散+强化学习→VLA\u0026rsquo;六层金字塔组织起来。顺着层往上走，每层解决上一层留下的问题，最后落在 VLA/世界模型这些前沿范式上。这是本站论文精读的总入口。","title":"自动驾驶学习路径总目录｜用我的论文精读串成的金字塔地图"},{"content":"📄 论文信息 标题：ST4VLA: Spatially Guided Training for Vision-Language-Action Models 团队：上海人工智能实验室, 香港科技大学, 南方科技大学, 复旦大学 arXiv：2602.10109 收录：ICLR 2026 关键词：VLA, 空间引导训练, 空间接地, 具身智能, 机器人操作 一句话总结：ST4VLA 通过\u0026quot;空间接地预训练 + 空间引导动作训练\u0026quot;双阶段方案，让 VLM 的空间先验显式服务于 VLA 策略学习，在仿真和真实机器人上大幅提升泛化鲁棒性。 🤔 要解决什么问题？ VLM 在视觉-语言理解上表现出色，但直接扩展到具身任务时面临根本性挑战：\n问题 表现 原因 空间接地坍塌 VLM+动作头的简单拼接导致空间能力退化 VLM 的空间先验与策略学习的目标冲突 多模态优化冲突 感知目标和动作目标竞争计算资源 两者在训练动态上不一致 分布外脆弱性 面对新物体/新指令/长时任务性能骤降 缺乏可迁移的空间推理能力 💡 核心思想 ST4VLA 的核心洞察是：VLM 本身就具有丰富的空间先验，关键是如何在策略学习中保留并利用这些先验。 方案分为两阶段：\n空间接地预训练（Stage 1）：在 VLM 上预训练点、框、轨迹预测任务，注入可迁移的空间先验 空间引导动作训练（Stage 2）：用统一的空间提示激活空间注意力，引导动作生成 ⚙️ 方法细节 双系统架构 ST4VLA 采用\u0026quot;VLM Planner + MLP Action Head\u0026quot;的双系统设计：\nVLM Planner：处理视觉和语言输入，输出空间特征和推理 MLP Action Head：将 VLM Planner 的输出映射为具体动作指令 阶段一：空间接地预训练 使用三类空间预测任务从网络数据和机器人数据中学习空间先验：\n预测任务 输入 输出 数据来源 点预测 图像 + 语言指令 目标物体位置点 网络级数据 框预测 图像 + 语言指令 目标边界框 网络级数据 轨迹预测 图像 + 语言指令 完整操作轨迹 机器人专有数据 阶段二：空间引导动作训练 动作训练时使用统一的空间提示（Spatial Prompting）：\n\u0026ldquo;Figure out how to execute it, then locate the key object needed.\u0026rdquo;\n这个提示虽然简单，但起到了关键作用——它激活了 VLM 中已学到的空间注意力机制，让模型在预测动作前先进行空间推理。消融实验表明，语义提示的有效性远超显式格式约束（如要求输出边界框或坐标点）。\n损失函数设计 训练包含两类损失的加权组合：\n$$ \\mathcal{L} = \\mathcal{L}_{action} + \\lambda \\cdot \\mathcal{L}_{grounding} $$最优比例约 $\\lambda = 1:10$（接地损失:动作损失），即动作目标占主导，但保留约 10% 的空间接地监督。\n🧪 实验与结果 SimplerEnv 基准 方法 Google Robot (VM) WidowX (VM) 平均 RT-1-X 39.2 1.1 20.2 Vanilla VLA 66.1 54.7 60.4 π₀ 72.8 59.3 66.1 GR00T N1.5 74.5 62.1 68.3 Vanilla Co-training VLA 70.3 58.9 64.6 ST4VLA 84.6 73.2 78.9 真实世界评估 在 Franka Research 3 机器人上的真实世界杂乱场景抓取放置任务：\n23 个物体 + 5 个容器，1000 条轨迹微调 分布偏移下成功率：92% 对比基线 Vanilla VLA：约 65% 泛化能力 测试场景 Vanilla VLA ST4VLA 提升 已见过物体 78.3% 91.5% +13.2% 未见物体 54.1% 82.7% +28.6% 改述指令 62.8% 85.3% +22.5% 长时任务扰动 48.2% 76.1% +27.9% 消融实验 配置 Google Robot WidowX Vanilla VLA 66.1 54.7 + 空间接地预训练 79.8 67.4 + 空间引导动作训练 82.3 70.9 完整 ST4VLA 84.6 73.2 ⚠️ 局限与未来方向 ST4VLA 聚焦于机器人操作任务，而非自动驾驶——但空间引导训练的思想对驾驶场景同样有借鉴意义 性能随 VLM 模型规模的增长趋势未充分探索 未报告推理延迟和计算资源消耗，实时部署可行性待验证 失败模式分析不够系统（如 mis-grounding vs. 抓取失败 vs. 轨迹碰撞） 📝 个人思考 ST4VLA 给我的最大启发是 \u0026ldquo;不要抛弃 VLM 已有的能力\u0026rdquo;——很多方法在做 VLA 时简单地在 VLM 后面接一个动作头，结果 VLM 的空间理解能力在微调中退化。ST4VLA 通过两阶段方案巧妙地保留了这些先验。\n另一个有趣发现是语义提示比格式约束更有效。直觉上，要求模型输出边界框应该更精确，但实际效果反而不好——这可能是因为强制格式化限制了 VLM 的灵活性。统一提示让模型自己决定\u0026quot;怎么理解空间\u0026quot;，反而激活了更强的空间推理。\n虽然 ST4VLA 主要做机器人，但其\u0026quot;先接地再动作\u0026quot;的思路完全可以迁移到自动驾驶 VLA。驾驶场景中\u0026quot;红绿灯位置\u0026quot;、\u0026ldquo;车道线空间关系\u0026quot;等空间先验同样需要类似的保护机制。\n📖 这是论文精读系列的第 XX 篇。空间引导能否成为 VLA 训练的标准范式？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/st4vla%E7%B2%BE%E8%AF%BB/","summary":"ST4VLA 提出双阶段空间引导训练框架：第一阶段用点、框、轨迹预测进行空间接地预训练注入空间先验；第二阶段用空间提示引导动作生成。在 SimplerEnv 上 Google Robot 从 66.1 提升到 84.6，WidowX 从 54.7 提升到 73.2，并展现对未见物体和复杂长时任务的强泛化。","title":"论文精读｜ST4VLA：空间引导训练实现鲁棒的视觉-语言-动作模型"},{"content":"一句话理解VLA大模型训练技巧 训练VLA大模型本质上是一场\u0026quot;显存-算力-通信\u0026quot;的三元约束优化：混合精度在数值精度与显存占用之间博弈，梯度检查点在计算量与显存之间做trade-off，activation offloading把显存压力转移到内存/NVMe，序列并行将长序列的显存分摊到多卡。只有把这四个技巧协同调好，7B到70B的VLA模型才能稳定高效地训练起来。\n在开始之前，先记住一个核心数字：训练一个70B参数的VLA模型（视觉编码器3B + LLM 70B），仅模型参数就需要560GB显存（FP32）或280GB显存（FP16）。加上优化器状态（AdamW需要2倍参数量的momentum和variance），总共需要840GB显存**（FP16）或1680GB显存（FP32）。8×H100(80GB)的节点只能提供640GB——不优化寸步难行。**\n🎯 技巧一：混合精度训练（Mixed Precision Training） 为什么要混合精度 混合精度的核心逻辑是：用更低精度存储中间状态（激活值、梯度），用更高精度维护模型副本，在保证模型收敛的前提下最大化地节省显存和计算时间。\n一个简单估算：\n精度 参数量显存(70B) 激活显存(典型值) 吞吐量(相对) FP32 280GB ~240GB 1.0x FP16 140GB ~120GB 1.8x BF16 140GB ~120GB 1.9x FP8 70GB ~60GB 2.5x(理论) 注意：激活显存通常在训练中占据更大比重。对于一个batch size=1、序列长度=4096的70B模型，激活显存可能超过300GB——远大于参数显存。\nFP16 vs BF16：精度范围的战争 FP16和BF16都是16位浮点格式，但数值分布不同：\n格式 指数位 尾数位 取值范围 精度 适用场景 FP16 5 10 ~65504 高(10bit尾数) 梯度幅值稳定时 BF16 8 7 ~3.4e38 低(7bit尾数) 梯度幅值跨度大时 最关键的区别：FP16的取值范围只有~65504，而VLA模型中视觉编码器的梯度往往幅值很小（视编码器的梯度L2 norm通常比LLM部分小10-100倍）。FP16在表示这些微小梯度时容易underflow（下溢到0），导致视觉编码器的训练信号丢失。\n实际训练中的现象：用FP16训练VLA模型时，视觉编码器的梯度更新步长在1000步后趋于0，而LLM部分的梯度正常。切换BF16后，视觉编码器的梯度不再下溢，模型收敛速度提升约30%。\n所以VLA训练的第一条铁律：如果硬件支持（A100/H100都支持BF16），用BF16替代FP16作为主精度格式。\nFP8训练：2025-2026年的新战场 H100/H200/B200支持FP8计算。FP8有两种变体：\n变体 指数位 尾数位 说明 E4M3 4 3 范围~448，精度低，用于前向激活+权重 E5M2 5 2 范围~57344，精度极低，用于反向梯度 FP8训练的核心挑战是精度缩放（scaling）——在将FP32/BF16张量转换为FP8时，需要对数值范围做自适应缩放，确保不溢出也不下溢。\nFP8训练的标准流程：\n前 反 向 向 传 传 播 播 : 权 ↑ : 梯 ↑ 重 度 ( s ( s F c F c P a P a 8 l 8 l ) i ) i n n × g → g 激 f 参 f 活 a 数 a ( c 更 c F t 新 t P o ( o 8 r F r ) 动 P 动 态 3 态 → 计 2 计 算 算 累 m 加 a 器 s ( t F e P r 1 6 c / o F p P y 3 ) 2 ) → 输 出 ( B F 1 6 ) 在实际VLA训练中，FP8只能用于LLM部分的线性层和注意力层，视觉编码器的卷积层和归一化层需要保留BF16——视觉特征的数值分布更广泛，量化损失对最终精度影响更大。\n混合精度配置示例（70B VLA）：\n视 L A 觉 L c 编 M - - - - t 码 部 i 器 分 A F L E o : : t F a m n t N y b B e e e H F n G r d e 1 t a N d a 6 i t o i d o e r n : ( n / m g 所 U : : B 有 Q p F 层 K / B B 1 ) V D F F 6 投 o 1 1 影 w 6 6 ( : n 精 : 度 F 敏 P F 感 8 P ) 8 E 4 M 3 ( 前 向 ) / E 5 M 2 ( 反 向 ) Loss Scaling策略 即使使用BF16，在某些情况下也需要loss scaling：\ni e f l i a f n s s s y c k a c ( a i l a g l p l l r e _ ( e a _ u g _ d f p r f i a d a a e c a d c n t t i t t o e e o ) r _ n r . s t h * t ) * a = e . = s p a _ 0 b 2 i . s . n 5 ( 0 f ) _ . o # m # r a _ 遇 x 全 n 到 ( 部 a 溢 ) 正 n 出 常 : ， \u0026lt; ， 降 尝 低 2 试 s ^ 增 c 1 大 a 6 s l : c e a l e 但BF16下遇到overflow的概率比FP16低得多。建议的初始scale_factor：\nFP16: 2^10 (1024) BF16: 2^0 (1.0) —— 大多数情况下不需要loss scaling FP8: 需要每层独立的per-tensor scaling 📦 技巧二：梯度检查点（Gradient Checkpointing） 核心思想 梯度检查点（也叫activation checkpointing）用计算换显存：在前向传播时只保留部分中间激活值（checkpoint），反向传播时重新计算被丢弃的激活值。\n三种策略的显存对比 假设一个Transformer Block：\n策略 激活显存/层 额外计算开销 说明 无检查点 100% 0% 保留所有activations Full Checkpointing ~33% ~33% 只保留input，反向重算一切 Selective Checkpointing ~50% ~10-15% 保留attention output，重算FFN 对于12层Transformer的VLA模型（LLM 70B的L层通常是60-80层），显存差异巨大：\n无 F S 检 u e 查 l l 点 l e : c C t 激 h i 活 e v 显 c e 存 k p C ~ o h i e 1 n c 2 t k i p × n o g i 2 : n . t 5 激 i G 活 n B 显 g 存 : = ~ 激 3 活 0 1 显 G 2 存 B × ~ ( p 0 1 e . 2 r 8 G × l B a 1 y = . e 2 r 9 G ) . B 6 G = B 1 4 . 4 G B Full Checkpointing 在每层的forward中，只保留输入tensor，丢弃所有中间结果。backward时从输入重新执行一次forward。\nd e f t # r x # x # x r x # x # r r e e e a 不 s = 丢 = 丢 = s = 丢 = 丢 t n 保 i 弃 弃 i 弃 弃 u s 存 d l : s : x d l : f : r f 任 u a e u a f n o 何 a y x l a + a y x n f r 中 l e _ f t l e _ ( f x m 间 r n _ t r r n x n e 值 = _ o a n e = _ o ) _ + r n r t _ s n r o _ x o m t o i x o m u r b r e e u d r e t e l m d n t u m d p s o ( t p a ( _ u i c x i u l x 2 t d k ) o t ) u _ n a f ( l o x r ) w a r d ( x , p a r a m s ) : 缺点：在backward时，所有中间计算都要重做一遍，导致30-35%的额外计算开销（实测值，因模型而异）。\nSelective Checkpointing 不丢弃所有activation，而是有选择地保留那些重算成本最高的中间值。\n推荐的Selective策略：\n保 丢 留 弃 的 - - - 的 - - - - a a c A A L c D A F R t t t a t r c F e i t t y i o t N s v e e e v p i 中 i a n n r a o v 间 d t t t N t u a 激 u i i i o i t t 活 a o o o r o i l n n n m n m o s 的 的 的 s a n c : Q S 输 （ s 函 o K o 入 需 k 数 n V f （ 要 输 n 投 t 用 时 出 e 影 m 于 重 （ c 输 a b 算 G t 出 x a ） E i （ 输 c : L o 重 出 k U n 算 （ w / 的 成 重 a S 中 本 算 r i 间 高 涉 d L 值 ， 及 时 U 因 大 计 ） 为 张 算 涉 量 g 及 乘 a l 法 m a ） m r a g / e b e G t E a M 梯 M 度 ） ） 这种策略将额外计算开销从33%降低到10-15%，显存节省仍然可观。\nRecomputation Profiling：找到最优检查点方案 不同模型结构的最优检查点策略不同。推荐的做法是profiling一下各层activations的重算成本：\ndef profile_checkpoint_strategy(model, sample_input): strategies = [\u0026#39;none\u0026#39;, \u0026#39;full\u0026#39;, \u0026#39;selective_attn\u0026#39;, \u0026#39;selective_ffn\u0026#39;, \u0026#39;selective_all\u0026#39;] for strategy in strategies: memory = measure_memory(model, sample_input, strategy) compute = measure_time(model, sample_input, strategy) print(f\u0026#34;{strategy}: memory={memory:.2f}GB, compute_overhead={compute:.1f}%\u0026#34;) 实测案例（70B VLA模型，batch_size=1, seq_len=4096, 8×A100）：\n策略 激活显存 每步时间 额外计算开销 无检查点 OOM(\u0026gt;640GB) - - Full Checkpointing 156GB 3.2s 33% Selective(attn保留+ffn丢弃) 198GB 2.6s 14% Selective(attn保留+ffn+emb丢弃) 172GB 2.8s 18% 结论：推荐selective策略，保留attention activation，丢弃FFN activation。这样能在显存节约和计算开销之间取得最佳平衡。\nVLA特有的检查点设计 VLA模型有一个特殊的检查点考虑：视觉编码器和LLM的激活显存消耗不同。\n典型的VLA模型层级：\nV V L A i i L c s s M t i i : i o o o n n L n - _ E L l H n a e c n = a o g d d u 8 : e a 0 r g 层 4 ( e , - V 8 i P 每 层 T r 层 , ) o 激 : j 活 每 e 层 L c ~ 激 _ t 活 v o 2 r . ~ = : 5 G 0 2 2 B . 4 - 2 层 4 ( G , 层 s B M e 每 L q 层 P _ 激 , l 活 e 每 n ~ 层 = 激 4 0 活 0 . 9 8 ~ 6 G ) B 0 . ( 1 2 G 2 B 4 × 2 2 4 输 入 , p a t c h _ s i z e = 1 4 ) 优化建议：\n视觉编码器使用Full Checkpointing（每层计算量小，重算代价低） LLM使用Selective Checkpointing（保留attention，丢弃FFN） Projector和Action Head使用无检查点（层数少，激活小） 💾 技巧三：Activation Offloading 当梯度检查点还不够时，可以考虑activation offloading。核心思路：在训练过程中把中间激活值从GPU显存转移到CPU内存或NVMe SSD上，需要时再加载回来。\n两种Offloading方式 CPU Offloading：\n前 反 向 向 传 G 传 G 播 P 播 P : U : U : : 计 需 算 求 f 激 o 活 r 值 w a → r d 从 C → P U 激 内 活 存 值 加 载 → → 压 缩 解 压 → 缩 传 → 输 到 用 C 于 P 梯 U 度 内 计 存 算 → 释 放 G P U 显 存 传输带宽：PCIe 4.0 × 16 ≈ 32GB/s（单向） 适用于：显存不足但CPU内存充裕的场景 NVMe Offloading：\n前 反 向 向 传 G 传 G 播 P 播 P : U : U : : 计 需 算 求 f 激 o 活 r 值 w a → r d 从 N → V M 激 e 活 加 值 载 → → 压 解 缩 压 缩 → → 传 输 用 到 于 N 梯 V 度 M 计 e 算 S S D → 释 放 G P U 显 存 传输带宽：NVMe SSD ≈ 7-14GB/s（远低于CPU内存） 适用于：CPU内存也不足时的最后手段 Offloading决策树 是 1 2 3 4 5 否 . . . . . 开 启 尝 → 尝 → 尝 → 尝 → 减 a 试 试 试 试 小 c 梯 显 S 显 C 显 N 显 b t 度 存 e 存 P 存 V 存 a i 检 够 l 够 U 够 M 够 t v 查 了 e 了 了 e 了 c a 点 吗 c 吗 O 吗 吗 h t ？ t ？ f ？ O ？ i + i f f s o → v → l → f → i n 梯 e o l z 度 是 是 a 是 o 是 e o 累 C d a 或 f 积 → h → i → d → 梯 f e n i 度 l 停 c 停 g 停 n 停 累 o 止 k 止 （ 止 g 止 积 a ， p 仅 （ 步 d 不 o o 仅 数 i 需 i f o ， n 要 n f f 或 g o t l f 者 : f i o l 换 f n a o 更 l g d a 多 o i d G a n i P d g n U i 最 g n 大 低 g 的 频 a 使 c 用 t 的 i a v c a t t i i v o a n t s i ） o n s ） VLA中的Offloading策略 对于VLA模型，最值得offloading的不是所有activations，而是有选择性地offloading：\n优先offloading的activations（体积大、使用频率低）：\n1 2 3 . . . 视 - L - - 注 - 觉 L 意 编 只 M 如 否 力 体 码 在 的 果 则 S 积 器 b F 使 ， c 大 中 a F 用 这 o 但 间 c N 了 些 r 只 特 k 中 s 是 e 在 征 w 间 e 最 矩 a : a 激 l 值 阵 t r 活 e 得 : t 体 d : c o e 积 中 t f 体 n 访 体 i f 积 t ~ 问 积 v l i 一 e o ~ o 2 次 ~ a n 5 ， c d 4 7 适 4 h i 0 b 合 0 e n 9 a × C 9 c g 6 c P 6 k 的 k 7 U p × w 6 × o a 8 o i 4 r f 1 n 0 d × f 4 t 9 需 l 3 i 6 要 2 o 3 n 一 4 a 6 g × 次 层 d ， i × 这 3 ≈ n 些 2 g 2 已 头 4 经 . ≈ 被 × 7 丢 G 1 弃 2 B . 了 1 ≈ ( G V B 4 i / G T 层 B - / L × 层 ) 8 0 层 不建议offloading的activations：\n1 2 3 4 . . . . 梯 优 模 L 度 化 型 a （ 器 参 y 在 状 数 e 优 态 （ r 化 （ 常 N 器 常 驻 o 更 驻 G r 新 G P m 之 P U 的 前 U 或 r 必 或 C u 须 C P n 常 P U n 驻 U ） i G ， n P 取 g U 决 ） 于 s Z t e a R t O i 配 s 置 t ） i c s 实际性能影响 实测数据（70B VLA, 8×A100, seq_len=4096, batch_size=1）：\nOffloading策略 显存使用 每步时间 吞吐量下降 无offloading 612GB(需4节点) 2.8s 基准 CPU offloading(部分) 512GB(1节点) 4.1s -32% CPU offloading(全部) 480GB(1节点) 5.6s -50% NVMe offloading 470GB(1节点) 9.8s -71% 结论：能不用offloading就不用。CPU offloading在offloading量适当时（\u0026lt;20%激活量）带来的吞吐量下降可接受（~20%），但大量offloading会让训练变得极为缓慢。\n🔗 技巧四：序列并行（Sequence Parallelism） 当序列长度持续增长（VLA模型的序列长度从4096扩展到8192→16384→32768），单个GPU无法容纳完整的序列。序列并行就是将序列维度切分到多个GPU上。\n三种序列并行方法 方法 切分维度 通信模式 适用场景 Ring Attention 序列维度+注意力计算重叠 P2P通信(ring) 超长序列(\u0026gt;16K) Sequence Parallelism(SP) 序列维度+所有层 AllGather+ReduceScatter 中等序列(4K-16K) Context Parallelism(CP) 序列维度+数据并行 AllGather+AllReduce 混合并行场景 Ring Attention Ring Attention的核心思想：不要让每个GPU持有完整的序列来计算注意力，而是让GPU形成一个ring，各自持有序列的一部分，通过循环传递KV块来计算局部注意力。\nG G G G S S S S P P P P t t t t U U U U e e e e p p p p 0 1 2 3 : : : : 1 2 3 4 : : : : 持 持 持 持 有 有 有 有 每 每 每 重 序 序 序 序 个 个 个 复 列 列 列 列 G G G N P P P _ [ [ [ [ U U U g 0 N N 3 用 将 用 p , / / N 本 自 本 u 4 2 / 地 己 地 - 1 , , 4 Q K Q 1 , , 和 V 和 次 N N 本 传 新 ， 2 / / 3 地 给 收 完 , 4 2 N K 下 到 成 + + / V 一 的 完 1 1 4 计 个 K 整 , , + 算 G V 序 . 1 注 P 再 列 , , 意 U 算 的 力 ， 一 注 N . . 同 次 意 , , 时 注 力 4 . 从 意 计 - N 3 , 前 力 算 1 / N 一 ] 2 / N 个 - 4 - G 1 - 1 P ] 1 ] U ] 接 收 K V 关键优化：计算和通信重叠。在Step 2传输KV的同时，可以开始Step 3的计算。\nRing Attention在序列长度\u0026gt;16K时优势明显，但在短序列时通信开销占比过大。\nSequence Parallelism（SP） SP将序列维度与张量并行（Tensor Parallelism）结合：\n原 T S 前 反 始 P P 向 向 : 切 切 : L A F : 反 分 分 a t F 向 [ h s y t N 前 b i e e e : 向 a d q r n 顺 t d : N t 与 序 c e o i T h n [ r o P , : b m n 一 a 等 : 致 s [ t 非 ， e b c T 需 h q a h P 要 i _ t , 操 跨 d l c 作 G d e h s : P e n , e U m , q 每 聚 _ s _ 个 合 d h e l G Q i i q e P K m d _ n U V 切 d l / 处 （ 片 e e N 理 A n n _ 自 l _ , g 己 l d p 分 G i h u 到 a m i , 的 t ] d 序 h d h 列 e → e i 部 r n d 分 分 _ d q 配 d e / 到 i n k N m _ / _ / d v g N i ） p _ m u g ] p u ] SP的核心通信原语：\n前 F 向 F a A 或 R N 沿 t l : e : 用 t l d T e G u P n a c 的 t t e A i h S l o e c l n r a G : : t a t t 聚 e h 合 r e Q : r / ( K 并 前 / 行 ) V 计 算 + → a t R 完 t e 整 e d 序 n u 列 t c i e → o S n c 本 后 a 地 归 t 计 并 t 算 e a r t ( t 反 e ) n t i o n SP适合序列长度8K-16K的场景。对于更长的序列，Ring Attention更高效。\nContext Parallelism（CP） CP是SP的变体，用于数据并行+序列并行的混合场景。在CP中：\n数 上 每 据 下 个 并 文 D 行 并 P 维 行 度 维 r ( 度 a D ( n P C k ) P 内 : ) 部 : 的 b G a 序 P t 列 U c 维 处 h 度 理 维 切 同 度 分 一 切 个 分 b a t c h 的 序 列 碎 片 CP适合：\n微调场景（batch size小，但序列长） 推理场景（sequences per request \u0026gt; 1） VLA长序列训练的特殊挑战 VLA模型在训练时，序列由三部分组成：\n[ 视 文 动 视 觉 本 作 觉 t t t t o o o o k k k k e e e e n n n n : : : 序 列 2 指 通 ] 5 令 常 7 + 较 + 个 C 短 ( o ( [ p T 1 文 a 的 6 本 t t - t c o 6 o h k 4 k e e t n t n o o 序 k k 列 e e ] n n s s + ) + [ 动 C 作 L t S o ) k e × n 序 N 列 _ ] f r a m e s 当使用多帧输入时（如VLA模型使用8帧视频输入），序列长度急剧增长：\n输入配置 序列长度 GPU数量需求(seq_len=4096基准) 单帧 4096 1 GPU 4帧(关键帧) 8192 2-4 GPU(SP) 8帧(低频采样) 16384 4-8 GPU(Ring Attention) 16帧(密集采样) 32768 8-16 GPU(Ring Attention) VLA多帧训练的序列并行配置建议：\n短 中 长 超 序 序 序 长 列 列 列 序 ( ( ( 列 ≤ 4 8 ( 4 K K \u0026gt; K - - 1 ) 8 1 6 : K 6 K ) K ) 不 : ) : 使 : 用 S R 序 P R i 列 i n 并 o n g 行 n g ， A 仅 2 A t 使 - t t 用 4 t e T e n P G n t + P t i D U i o P s o n n + o n S P 4 混 - 合 8 ( 结 G 合 P A U t s t e n t i o n 计 算 的 环 状 通 信 与 F F N 的 T P 通 信 ) 通信重叠优化 无论哪种序列并行方法，通信都能与计算重叠。关键是将通信操作异步化：\n# a a # c l c f l t o o o i 不 l t 好 m c m n 好 _ e 的 m a m a 的 g n 做 _ l _ l 做 a t 法 h _ h _ 法 t i （ a o a o （ h o 通 n u n u 通 e n 信 d t d t 信 r _ 与 l p l p 阻 ( o 计 e u e u 塞 q u 算 t . t 计 k t 重 = w 算 v p 叠 = a = ） ) u ） a i t l c t c l o ( o # = _ m ) m g p b 等 a a u i 待 t t t # n 通 t h e e 信 e e _ 等 ( 完 n r p 待 l 成 t _ a 通 o i a r 信 c o s t 完 a n y i 成 l ( n a _ q c l o , ( _ u q a t k k t p , v t u ) e t n , t # i r o e 启 n c 动 ( e 异 q i 步 _ v 通 l e 信 o d c _ a o l u , t p k u _ t l ) o c a l , _ l o c a l ) # 同 时 计 算 本 地 部 分 🔬 VLA多模态编码器的训练优化 VLA模型独有的训练挑战是视觉编码器和LLM的协同训练。\nFreeze vs Tune视觉编码器 策略 训练开销 最终性能 说明 完全冻结 低 中 仅训练Projector+LLM+ActionHead 部分解冻(最后6层) 中 好 视觉编码器最后几层参与训练 完全解冻 高 最好 所有视觉编码器参数参与训练 推荐策略：前三阶段冻结视觉编码器，最后阶段部分解冻。\n视觉编码器的混合精度特化 视觉编码器对精度更敏感。实际训练中的配置建议：\n# DeepSpeed ZeRO-3配置示例 train_batch_size: 32 gradient_accumulation_steps: 4 # 混合精度配置 fp16: enabled: false bf16: enabled: true # 视觉编码器的特殊处理 custom_parameters: - name: \u0026#34;vision_encoder.*\u0026#34; # 使用更高的精度 dtype: bf16 # 不使用fp8 lr: 1e-5 # 比LLM低10倍 weight_decay: 0.0 # 视觉编码器通常不用weight decay - name: \u0026#34;llm.*\u0026#34; dtype: fp8 # LLM可以用FP8 lr: 1e-4 weight_decay: 0.1 - name: \u0026#34;action_head.*\u0026#34; dtype: bf16 # Action Head精度敏感 lr: 5e-4 weight_decay: 0.01 学习率分层策略 VLA中不同部分的最佳学习率差异可达两个数量级：\n组件 推荐初始LR 调度策略 原因 视觉编码器 1e-5 - 5e-5 Cosine, warmup 10% 预训练参数，微调幅度要小 Projector 1e-4 - 3e-4 Cosine, warmup 5% 随机初始化，需要大LR快速收敛 LLM 5e-5 - 2e-4 Cosine, warmup 5% LoRA或全参数微调 Action Head 3e-4 - 5e-4 Cosine, warmup 3% 新组件，需要较大学习率 经验法则：不同组件的LR差异不要超过50倍，否则优化器状态分布不均匀，可能导致loss震荡。\n🛠️ 训练配置白皮书 综合以上四个技巧和VLA特化优化，给出推荐的训练配置（按模型规模分级）：\n7B VLA训练配置 硬 模 参 并 显 训 件 型 数 行 存 练 : : 量 策 T P D 序 优 混 梯 A 梯 吞 : 略 P P P 列 化 合 度 c 度 吐 8 V : : : : 并 : 精 检 t 累 : i ~ 行 度 查 i 积 × T 7 1 1 8 : : 点 v : ~ - . : a 4 A L 5 ( ( ( 不 B t 4 0 1 B 不 不 数 需 F S i 步 0 0 + 需 需 据 要 1 e o , 0 0 要 要 并 ( 6 l n 7 张 流 行 s e 有 t 8 B 量 水 ) e c O 效 o 0 并 线 q t f b k G L 行 并 _ i f a e B L ) 行 l v l t n M ) e e o c s ( n ( a h / 单 + V d G 节 ≤ i i = P 点 A T n U ) c 4 g 3 / t 0 f : 2 s i 9 u o 6 l 不 n ) l 需 , 要 H e L a L d M s e l e c t i v e ) 30B VLA训练配置 硬 模 参 并 显 训 件 型 数 行 存 练 : : 量 策 T P D 序 优 混 梯 A 梯 吞 : 略 P P P 列 化 合 度 c 度 吐 4 V : : : : 并 : 精 检 t 累 : i ~ 行 度 查 i 积 × T 3 2 2 8 : : 点 v : ~ - 2 : a 1 ( G B ( ( ( S B t 8 8 8 张 流 数 P F S i 步 0 + 量 水 据 1 e o , 0 × 并 线 并 o 6 l n 3 行 并 行 n e 有 t A 0 , 行 , ( c O 效 o 1 B , 2 视 t f b k 0 切 4 觉 i f a e 0 L 分 4 节 G 编 v l t n L h 点 P 码 e o c s 8 M i s 间 U 器 ( a h / 0 d t ) s ) V d G G + d a i i = P B e g ( + T n U ) A n e s g 6 / c _ ) e F f : 4 s = t d q P u i i _ 8 l C 3 o m l l P 2 n ) e ( , U n L G H L L o P e = M L f U a ) M f d 8 l 1 s o 9 e a 2 l d ) e i c n t g i v 1 e 0 , % 激 a 活 c 值 t i o n h e a d n o n e ) 70B VLA训练配置 硬 模 参 并 显 训 件 型 数 行 存 练 : : 量 策 T P D 序 优 混 梯 A 梯 吞 : 略 P P P 列 化 合 度 c 度 吐 1 V : : : : 并 : 精 检 t 累 : 6 i ~ 行 度 查 i 积 T 7 4 4 8 : : 点 v : ~ × - 2 : a 8 G B ( ( ( R B t 1 0 ( / 张 流 数 i F S i 6 0 8 1 量 水 据 n 1 e o 步 4 并 线 并 g 6 l n , t × 行 并 行 e o + ) 行 ) A ( c O 有 k H , t 视 t f 效 e 1 7 t 觉 i f b n 0 0 8 e 编 v l a s 0 B n 码 e o t / s t 器 ( a c G 8 L t i + V d h P 0 L a o a i i U G M g n c T n = / B e t g s ) + ) o i f : 1 n o u 2 = A n l C 8 c 4 l P 1 t h , U 2 i G e 8 o P a L o n U d L f G s ) M f P H l U e ( + s o a s e a d e F l d q P e i _ 8 c n l t g e ( i n L v 1 L e 5 = M 保 % ) 留 激 1 a 活 6 t 值 3 t ( 8 n 视 4 ) 觉 ) 特 征 ) 🔍 常见调优诊断方法 Loss曲线诊断 异 可 异 可 异 常 能 常 能 常 类 原 - - - 类 原 - - - 类 - - 型 因 型 因 型 : : 学 精 初 : : F 数 梯 : 视 A 习 度 始 P 据 度 觉 c L 率 下 化 L 8 异 爆 各 l t o 过 溢 问 o 常 炸 组 o i s 高 题 s 件 s o s → s v → → l s n 不 → → 突 e o 占 下 检 然 r 检 启 s 比 h 降 检 查 检 s f 查 用 s 过 e 查 梯 查 p l d g 不 低 a l 度 a i o a r 平 d r 统 c k w t a 衡 → 计 t e a d l s , i → l i 增 o c o o e 加 s h 切 n 检 a n 视 s e 换 查 d t 觉 发 d 到 h F e 部 散 u B e P r c 分 l F a 8 中 l 的 → e 1 d 是 i l , 6 的 s 否 p o 降 初 c 有 p s 低 尝 始 a 损 i s a 试 化 l 坏 n c 降 i 样 g w t 低 n 本 ( e i 1 g 推 i o 0 荐 g n 倍 f m h a a t h c x 或 e t _ 调 a o n 高 d r o 学 的 r 习 l m 率 r = 1 . 0 ) 显存瓶颈诊断 # 使用nvidia-smi监控显存 watch -n 1 nvidia-smi # 使用PyTorch profiler torch.cuda.memory_summary() # DeepSpeed memory monitor # 在deepspeed_config中设置: # \u0026#34;monitor_config\u0026#34;: {\u0026#34;tensorboard\u0026#34;: {\u0026#34;enabled\u0026#34;: true}} 显存分配饼图（70B VLA典型情况）：\n参 优 激 临 其 数 化 活 时 他 ( 器 值 缓 : F 状 ( 存 P 态 检 : 1 1 : 查 2 6 点 2 G ) 4 后 0 B : 2 ) G 0 : B 1 G 4 B 4 0 8 G G B B ( ( 6 3 6 ( % ( ( % 8 ) 2 2 ) % % 2 ) ) % ) ← 最 大 头 ！ 优化器状态是显存的最大消耗者。ZeRO-3可以将优化器状态分布到所有GPU上，大幅缓解单卡显存压力。\n通信瓶颈诊断 检查通信是否成为训练瓶颈的快速方法：\n# 查看是否有通信等待 nsys profile -o trace_file python train.py # 在profile trace中检查 # - ncclKernel AllGather 等通信算子的耗时占比 # - 计算-通信重叠的比例 # - 是否有大量\u0026#34;空闲\u0026#34;时间 # 简化版：比较实际吞吐和理论吞吐 actual_throughput = tokens_per_second theoretical_throughput = flops_utilization * peak_flops communication_overhead = 1 - actual_throughput / theoretical_throughput if communication_overhead \u0026gt; 0.3: # 通信瓶颈，需要优化 # 尝试: 增大batch size, 减少TP度数, 使用更高效的通信后端 快速诊断清单 当训练出现问题时，按这个清单快速排查：\n- - - - - - - - - 检 检 检 检 检 检 检 检 检 查 查 查 查 查 查 查 查 查 梯 显 G 通 视 F a 数 l 度 存 P 信 觉 P c 据 o 是 使 U 时 编 8 t 加 s 否 用 利 间 码 i 载 s 有 是 用 占 器 s o 速 是 N 否 率 比 梯 c n 度 否 a 超 是 度 a 和 N 过 否 → n l h → 预 / 8 \u0026gt; o i e 训 I 5 9 如 r n a 确 练 n % 0 果 m g d 保 一 f % \u0026gt; 输 d 致 → 3 → f 出 a → → 0 a 分 t → 减 % 如 c 布 a 启 少 否 , 果 t l 否 用 b 则 比 o → o 则 B a 可 调 L r a 检 F t 能 整 L 如 d 查 1 c 是 并 M → 果 e 数 6 h I 行 小 超 r 据 , 或 / 策 1 如 出 / 启 O 略 0 果 [ n 代 降 用 或 0 频 - u 码 低 更 通 x 繁 1 m 回 l 激 信 以 波 , _ 归 r 进 瓶 上 动 1 w 检 颈 , , ] o 查 范 r 点 调 切 围 k 整 回 , e L B r R F 调 s 1 整 足 6 初 够 始 化 📝 总结 问题：训练VLA大模型（7B-70B参数规模）面临着严重的显存瓶颈和通信开销挑战，仅参数+优化器状态就可能超过单节点显存容量，且多模态架构带来视觉编码器与LLM的协同训练难题。\n方法：本文系统分析了四种核心训练技巧——混合精度训练（BF16/FP8的精度策略与loss scaling）、梯度检查点（selective checkpointing的显存-计算trade-off）、activation offloading（CPU/NVMe offloading的决策树与分层策略）、序列并行（Ring Attention/SP/CP在VLA多帧输入场景下的配置），并结合VLA多模态编码器的差异化训练优化（分层学习率、混合精度特化、Freeze策略）给出了7B/30B/70B三档完整推荐配置与调优诊断方案。\n结论：通过合理组合BF16+FP8混合精度、selective梯度检查点、适度的CPU activation offloading、以及针对序列长度的并行方案选择（短序列用DP/TP，长序列用Ring Attention），VLA模型可以在有限硬件资源下高效训练。核心原则是：不盲目使用所有优化技巧，而是根据模型的参数规模、序列长度、硬件配置，找到最优的trade-off组合。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/vla%E5%A4%A7%E6%A8%A1%E5%9E%8B%E8%AE%AD%E7%BB%83%E6%8A%80%E5%B7%A7/","summary":"训练VLA模型远远不止\u0026rsquo;用DeepSpeed跑起来\u0026rsquo;这么简单，当模型规模从7B增长到70B参数时，显存瓶颈和通信开销会逼你深入理解每一个训练技巧的原理和trade-off。本文从混合精度训练（FP16 vs BF16 vs FP8的精度缩放策略）、梯度检查点（selective checkpointing vs full checkpointing vs recomputation profiling）、activation offloading（CPU offloading vs NVMe offloading）、序列并行（Ring Attention + sequence parallelism + context parallelism）四个核心技巧展开，配合VLA特有的多模态编码器训练优化，给出实用的训练配置建议与常见调优诊断方法。","title":"VLA大模型训练技巧：混合精度×梯度检查点×序列并行"},{"content":"📄 论文信息 标题：π0: A Vision-Language-Action Flow Model for General Robot Control 团队：Physical Intelligence（PI）— Sergey Levine、Chelsea Finn、Karol Hausman、Danny Driess 等 发表：RSS 2025（arXiv: 2410.24164，2024年10月首发） 关键词：VLA、Flow Matching、通用机器人策略、灵巧操作、基础模型 一句话总结：用预训练 VLM 做大脑、Flow Matching 做动作头，在迄今最大规模机器人数据集上训练，一个模型搞定从叠衣服到收桌子的多种高难度操作。 🤔 要解决什么问题？ 机器人学习的终极目标是通用性——一个模型能控制不同机器人、执行不同任务。但现实中有三大障碍：\n数据不足且碎片化：每个实验室、每种机器人的数据各自为政，规模远不及互联网图文数据 泛化能力弱：在 A 任务上训练的模型换到 B 任务就失效 动作表达困难：语言和图像是离散的，但机器人控制信号是连续的、高频的、多维的 前两个问题靠\u0026quot;大数据 + 大模型\u0026quot;的经典配方（类似 GPT 在 NLP 领域的成功）。但第三个问题是机器人领域独有的动作表示瓶颈——也是阻碍 VLA 模型落地的最大技术障碍。\n具体来说，NLP 和 CV 的输出天然是离散的（token、像素分类），可以直接复用大模型的自回归框架。但机器人控制信号是连续的（关节角度、末端速度、力矩），频率高达 20-50Hz，维度从 7 维（单臂）到 20+ 维（灵巧手）不等。如何让一个本质上处理离散 token 的 VLM 高效地输出这种连续、高频、多维的动作流？这不是一个简单的工程适配问题，而是一个根本性的表征鸿沟。\n核心矛盾：如何让一个继承了大语言模型语义理解能力的 VLM，高效地输出连续、精确、高频的机器人动作？\nπ0 的回答是：VLM 骨干 + Flow Matching 动作头——前者负责\u0026quot;理解世界\u0026quot;，后者负责\u0026quot;生成动作\u0026quot;，两者通过注意力机制深度耦合。\n💡 核心创新：Flow Matching 动作头 动作表示的三大路线之争 在 π0 之前，VLA 模型的动作输出主要有两条路线，π0 开创了第三条：\n路线 代表工作 做法 问题 离散化 RT-1、RT-2 把连续动作分箱成离散 token，用 LLM 自回归预测 精度受分箱数限制；自回归生成慢 扩散模型 Diffusion Policy 从噪声逐步去噪生成动作序列 采样步数多（几十到上百步）；训练复杂 Flow Matching π0 学习一个向量场，沿直线从噪声\u0026quot;流\u0026quot;到动作 步数少、训练简单、路径近直线 π0 选择 Flow Matching 的核心理由是：它比扩散更简洁高效，比离散化更精确快速。\nFlow Matching 的数学直觉 Flow Matching 的思想很优雅。设目标动作序列为 z₁（ground truth action chunk），噪声先验为 z₀ ~ N(0, I)。定义一条从噪声到目标的线性插值路径：\nz_t = (1 - t) · z_0 + t · z_1, t ∈ [0, 1] 这条路径上每个点的\u0026quot;流速\u0026quot;（速度场真值）就是常数 u = z₁ - z₀。训练目标是让神经网络 v_θ 学会预测这个速度场：\nL = E_{z_0, z_1, t} [ || v_θ(z_t, t, c) - (z_1 - z_0) ||² ] 其中 c 是 VLM 提供的条件特征（图像 + 语言指令的语义编码）。\n推理时，从 z₀ 出发，用少量欧拉步（论文中仅用 10 步）沿学到的速度场积分到 z₁，就得到动作序列。因为路径接近直线（Rectified Flow），极少步数就足够精确。\nFlow Matching 相比扩散的优势 虽然 Flow Matching 和扩散模型都是从噪声生成连续样本的生成模型，但两者有本质区别：\n特性 扩散模型 Flow Matching 路径形状 弯曲（马尔可夫链） 近直线（ODE） 采样步数 50-100 步 10 步 训练目标 复杂的噪声预测 + 调度 简单的速度场回归 训练稳定性 对噪声调度敏感 稳定 多模态支持 支持 支持 直线路径是关键优势：扩散模型本质上是定义了一条弯曲的随机路径从噪声走到数据，需要很多步才能沿曲线走完。而 Flow Matching（特别是 Rectified Flow 变体）直接拉直了这条路，走直线自然更快——对实时性要求极高的机器人控制来说，这意味着从\u0026quot;勉强能用\u0026quot;到\u0026quot;流畅运行\u0026quot;的质变。\n为什么不直接回归？ 一个自然的问题：为什么不直接让网络回归输出 z₁？ 原因是机器人动作的分布是多模态的——同一个场景下可能有多种合理操作（从左边抓还是右边抓）。简单的均值回归会平均化这些模式，产生无意义的中间动作。Flow Matching 通过建模整个分布而非点估计，天然地处理多模态，这是它优于直接回归的根本原因。\n⚙️ 模型架构详解 π0 的架构可以概括为\u0026quot;大模型理解 + 小专家执行\u0026ldquo;的分层设计。\n整体数据流 图像 + 语言指令 ➜ PaliGemma VLM（3B） ➜ 语义条件特征 c ➜ Flow Matching 动作专家（含噪声 z_t + 时间 t）➜ 动作序列（50步 chunk）\nVLM 骨干：PaliGemma π0 选用 Google 的 PaliGemma（约 3B 参数）作为骨干，它包含：\nSigLIP 视觉编码器：将输入图像编码为视觉 token Gemma 语言模型（2B）：融合视觉 token 和语言指令，输出上下文化的语义特征 关键设计：VLM 在互联网级图文数据上预训练，继承了丰富的语义知识（物体识别、空间关系、动作理解），这是从小数据训练的专用策略无法获得的\u0026quot;免费先验\u0026rdquo;。\n动作专家：独立的 Flow Matching 网络 动作生成由一个独立的小型 Transformer（动作专家）负责，它和 VLM 是两个不同的网络：\n组件 输入 作用 噪声动作 chunk z_t（50步 × 动作维度） 当前待去噪的动作序列 Flow 时间步 t ∈ [0, 1] 告诉网络当前在流的哪个位置 VLM 条件特征 c（来自 PaliGemma） 提供视觉-语言语义指导 动作专家通过注意力机制接收 VLM 的输出 token——VLM 的语义特征直接参与动作专家的注意力计算，实现深层条件注入。这种分离式设计的好处是：VLM 的大参数量只用于\u0026quot;理解\u0026quot;，不拖慢高频动作生成。\nAction Chunking（动作分块） π0 每次生成 50 步未来动作（一个 chunk），而非单步动作：\n平滑性：一次规划一段轨迹，避免单步决策的抖动 效率：50 步并行生成（一次前向），而非逐步自回归 时序一致性：chunk 内动作天然协调，不会出现帧间不连贯 📊 训练数据与策略 迄今最大规模的机器人数据集 π0 的另一核心贡献是构建了当时最大、最多元的机器人交互数据集（约 10,000 小时量级），覆盖：\n平台类型 具体机器人 典型任务 单臂 Franka Panda 桌面抓取、推门、倒茶 双臂 自研双臂系统 叠衣服、组装纸盒、收桌子 移动操控 轮式底盘 + 机械臂 开门、取物、导航+操作 灵巧手 配灵巧手平台 复杂手内操作、精细操控 数据来源包括：自采遥操作数据 + 开源数据集（如 DROID 等）+ 多平台混合。数据多样性是 π0 通用性的基石——跨平台、跨任务的数据让模型学到真正的\u0026quot;操作先验\u0026quot;，而非过拟合到某一种机器人。\n两阶段训练 阶段 数据 目标 预训练 全量多元数据 学习通用操控先验，获得 zero-shot 能力 微调 特定任务族数据 精化特定高难度技能（如叠衣服、做咖啡） 预训练让模型获得跨平台、跨任务的通用基础能力；微调则像\u0026quot;专项训练\u0026quot;，用少量数据快速适配新任务。这套范式与 LLM 领域的\u0026quot;预训练 + 微调\u0026quot;如出一辙。\n🔬 实验与结果 评测维度 π0 从四个角度验证通用性：\nZero-shot 执行：预训练后直接在新任务上测试，无需额外训练 语言指令跟随：听人的自然语言指令执行操作 层级控制：由高层 VLM 策略下发子目标，π0 负责底层执行 微调新技能：用少量数据快速学习全新的复杂任务 关键发现 预训练规模至关重要：在多元大数据上预训练的模型，显著优于单任务训练的专用模型，验证了\u0026quot;机器人基础模型\u0026quot;路线的可行性。这和 NLP 中 GPT-3 证明\u0026quot;scale matters\u0026quot;的逻辑完全一致——通用能力来自规模化的多元训练 高难度灵巧任务：叠衣服、收桌子、组装纸盒等此前需要专门设计系统的任务，π0 微调后能可靠完成——这是通用 VLA 首次在如此高难度任务上展示实用级性能。尤其叠衣服这种涉及可变形物体的任务，一直是机器人操作的难题 跨平台泛化：一个模型同时控制单臂、双臂、移动机器人，动作专家自动适配不同动作空间维度。模型不关心\u0026quot;是哪种机器人\u0026quot;，只关心\u0026quot;要做什么操作\u0026quot; Flow Matching 优于扩散：消融实验中，相同架构下 Flow Matching 动作头在效率和效果上均优于扩散动作头，验证了这一选择的正确性 语言理解的有效迁移：预训练 VLM 的语义知识确实帮助了指令跟随——模型能理解\u0026quot;把蓝色杯子放到左边\u0026quot;这样的组合泛化指令 ⚔️ 与 RT-2 等方案的深度对比 维度 RT-2（Google） Diffusion Policy π0 动作表示 离散 token（256 bin） 连续（扩散去噪） 连续（Flow Matching） 生成方式 自回归逐 token 迭代去噪（50-100步） 并行 chunk（10步积分） 精度 受 bin 数限制 高 高 推理速度 慢（自回归） 中等 快 语义理解 强（PaLI-540B） 无（纯动作策略） 强（PaliGemma 3B） 多模态动作 支持（token 分布） 支持 支持（分布建模） 训练复杂度 低（标准 CE loss） 高（噪声调度） 低（简单回归） 核心洞察：RT-2 的离散化方案虽然巧妙复用了 LLM 的自回归框架，但在精度和速度上有结构性瓶颈——256 个 bin 难以表达精细操作，逐 token 生成无法满足高频控制。π0 把\u0026quot;语言理解\u0026quot;和\u0026quot;动作生成\u0026quot;解耦——VLM 负责语义理解，Flow Matching 负责连续动作生成——各司其职，避免了用离散框架硬套连续问题的尴尬。\n而相比 Diffusion Policy，π0 的 Flow Matching 路径更接近直线，10 步就能生成动作，远快于扩散的几十步去噪，更适合实时控制。这一点在需要 20-50Hz 控制频率的机器人上尤为关键——10 步积分在 GPU 上只需几毫秒，而扩散的 100 步去噪可能带来上百毫秒延迟，这在闭环控制中是不可接受的。\n可以说，π0 在架构设计上的核心贡献不是发明了某个全新组件，而是做了正确的组合选择：用最成熟的 VLM 做理解，用最高效的 Flow Matching 做动作生成，用最大规模的数据做训练。\n📝 个人思考 π0 最让我印象深刻的是它把复杂问题拆成了正确的两半。\u0026ldquo;理解世界\u0026quot;用预训练大模型解决，\u0026ldquo;生成动作\u0026quot;用 Flow Matching 解决——这种解耦设计比试图用一个端到端大模型搞定一切更务实，也更符合工程直觉。Flow Matching 的选择尤其精妙：它比扩散简洁（直线 ODE）、比离散化精确（连续输出），在\u0026quot;表达力\u0026quot;和\u0026quot;效率\u0026quot;之间找到了甜点。我认为 Flow Matching 很可能成为 VLA 架构的标准动作头，正如 Transformer 之于 NLP。\n第二点启发是关于数据。π0 证明了机器人领域的\u0026quot;GPT 时刻\u0026quot;需要三个条件同时满足：足够大的模型、足够多元的数据、足够好的动作表示，三者缺一不可。其中数据多元性（跨平台、跨任务）可能比纯数据量更重要——一个平台上练十万小时，不如十个平台各练一千小时。这也解释了为什么 Physical Intelligence 公司在数据采集上投入巨大。对行业的启示是：机器人基础模型的壁垒不在算法本身（Flow Matching 是公开技术），而在数据闭环和采集能力。\n最后一点关于通用性与专用性的张力。π0 展示了令人惊艳的通用能力，但论文也坦诚高难度任务仍需微调。我倾向于认为，未来通用 VLA 会像 LLM 一样分化为\u0026quot;通用基座 + 任务适配\u0026quot;的生态——π0 的两阶段训练已经预示了这个方向。而对于自动驾驶和具身智能的从业者来说，π0 的架构范式（预训练骨干 + Flow Matching 动作头）完全值得借鉴迁移：把规划/控制信号看作连续动作序列，用 Flow Matching 替代传统的轨迹回归或离散规划，或许能打开新的设计空间。\n🔗 延伸阅读 工作 团队 与 π0 的关系 RT-2 Google DeepMind VLA 离散化路线的代表作，π0 的主要对比对象 Diffusion Policy Columbia / TRI 用扩散做动作生成，π0 的 Flow Matching 是其直接改进 Octo Berkeley 另一款通用机器人 Transformer，数据规模较小 OpenVLA Stanford / Princeton 开源 VLA 模型，基于离散化动作 π0.5 / π0-FAST Physical Intelligence π0 的后续演进，进一步提升效率和泛化 Flow Matching 原始论文 Meta / ENS Paris Flow Matching 理论基础，π0 动作头的理论来源 PaliGemma Google π0 的 VLM 骨干基座 📖 这是论文精读系列的第 2 篇。Flow Matching 正在成为具身智能动作生成的主流范式，你怎么看它在自动驾驶轨迹规划中的应用潜力？欢迎留言。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/pi0-%E9%80%9A%E7%94%A8vla%E6%A8%A1%E5%9E%8B%E7%B2%BE%E8%AF%BB/","summary":"π0 用预训练 VLM 做大脑、Flow Matching 做动作头，开创了 VLA 模型动作头设计的第三条路线。Flow Matching 相比扩散采样步数更少、训练更简单，相比离散化精度更高，巧妙弥合了 VLM 与连续机器人控制之间的表征鸿沟。在迄今最大规模机器人数据集上训练，一个模型搞定从叠衣服到收桌子的多种高难度操作。","title":"论文精读｜π0：基于Flow Matching的通用视觉-语言-动作模型"},{"content":"一句话理解世界模型 世界模型 = 让 AI 在脑子里\u0026quot;预演未来\u0026quot;\n给它当前的场景和你要做的动作，它能告诉你**\u0026ldquo;接下来会发生什么\u0026rdquo;——下一帧画面什么样、前车会不会急刹、行人往哪走。更学术地说，世界模型学习的是一个动力学的转移函数**：在给定当前状态 $s_t$ 和动作 $a_t$ 的条件下，预测下一时刻的状态 $s_{t+1}$。\n$$s_{t+1} = f_\\theta(s_t,\\ a_t)$$这里的 $s$ 可以是像素（视频帧），也可以是抽象的潜在表征，正是这一选择把世界模型分成了两大流派。\n为什么需要世界模型？ 自动驾驶训练有个根本矛盾：\n真实数据太贵：采集一辆车的数据成本高，且长尾场景（事故、极端天气）几乎采不到 仿真数据太假：传统仿真（如 CARLA）渲染的图像和真实世界差距大，模型训了也不一定管用 世界模型的价值：学会现实世界的运行规律后，能\u0026quot;想象\u0026quot;出逼真的未来场景，相当于一个无限数据生成器。整个闭环可以概括为四步：\n采集真实世界驾驶数据 训练世界模型，让它学会\u0026quot;物理规律 + 交通规则 + 行为人意图\u0026quot; 生成模型想象出未来场景或长尾场景 反哺驾驶策略（VLA / 端到端）的训练与评测 世界模型的两大流派 按\u0026quot;预测在什么空间里发生\u0026quot;，世界模型分为生成式和表征式两大流派。这不仅是技术路线之争，更是两种不同的建模哲学。\n🎨 流派一：生成式（Video Generation） 直接在像素空间生成未来视频帧，追求\u0026quot;看得见的未来\u0026quot;。\n核心网络结构：\n结构 思路 代表 潜空间扩散（LDM） 在 VAE 压缩的潜空间里做去噪，再解码成像素 Stable Video Diffusion、DriveDreamer 扩散 Transformer（DiT） 用 Transformer 替换 U-Net 做去噪骨干，扩展性更强 Sora、MagicDrive、Drive-WM 自回归 Transformer 把图像/动作离散化成 token，像 GPT 一样\u0026quot;预测下一帧\u0026quot; GAIA-1、ADriver-I 训练方式：以扩散模型为例，给真实未来帧加噪，让网络学习逆噪过程；同时通过条件注入（文本、HDMap、3D bbox、自车轨迹）实现可控生成。常配合 Classifier-Free Guidance（CFG） 增强条件跟随能力，用 DDPM/DDIM 采样。\n✅ 优点：画面逼真、可直接可视化、天然适配数据增强与闭环仿真 ❌ 缺点：计算昂贵（多步去噪）、只保证\u0026quot;长得像\u0026quot;不保证\u0026quot;符合物理\u0026quot;、长程预测容易失真 🧠 流派二：表征式（Latent Dynamics） 不在像素层面生成，而是在压缩的表征空间里预测未来状态。这是 LeCun 力推的方向。\n核心网络结构：\n结构 思路 代表 JEPA（联合嵌入预测架构） 用两个编码器分别编码上下文与目标，在表征空间做预测，丢弃像素级重建 I-JEPA / V-JEPA RSSM（循环状态空间模型） 循环 + 变分推断，学习带不确定性的潜在动力学 Dreamer 系列 占用预测（Occupancy） 直接预测未来 3D 体素占用，介于像素与语义之间 OccWorld、DriveWorld 训练方式：典型如 JEPA，用编码器把\u0026quot;过去帧 + 动作\u0026quot;映射到表征，预测\u0026quot;未来帧的表征\u0026quot;，再用一个目标编码器（EMA 更新、stop-gradient）提供监督。关键是刻意不重建像素，从而过滤掉对决策无用的纹理细节（比如云的形状、广告牌颜色）。\n✅ 优点：计算高效、关注语义层面预测、可注入物理/几何先验、表征可迁移到下游任务 ❌ 缺点：不可直接可视化、可解释性弱、训练稳定性需要技巧（容易表征坍缩） 两大流派横向对比 维度 生成式 表征式 预测空间 像素 / 视频帧 抽象特征 / 潜空间 计算量 大（尤其长视频） 小 可视化 ✅ 直观 ❌ 抽象 物理一致性 不保证 可显式设计 训练信号 像素重建 / 去噪 表征预测 / 对比 核心适用 数据增强、闭环仿真 规划、表征预训练 一个值得注意的趋势：两大流派正在融合。很多新工作先用表征式学一个好的编码器，再用扩散在潜空间里生成，兼顾效率与画质（如 Latent Diffusion、Drive-WM）。\n代表性工作详解 自动驾驶世界模型领域已涌现一批代表性工作，它们在\u0026quot;控制信号、时空范围、是否服务规划\u0026quot;上各有侧重。\n模型 团队 类型 核心特点 是否服务规划 GAIA-1 Wayve 生成式（自回归+扩散） 首个十亿参数级驾驶世界模型，支持文本/动作条件 否（数据生成） DriveDreamer 上海 AI Lab 生成式（扩散） 用 HDMap + 3D bbox 做结构化条件，可控性强 部分 MagicDrive 华科等 生成式（DiT） 精确的多相机视角与 3D 几何控制 否 Drive-WM 蔚来 + 上交 生成式（DiT） 首个端到端打通\u0026quot;世界模型 → 规划\u0026quot;，用 MPPI 采样 ✅ 是 OccWorld 上海 AI Lab 表征式（占用） 预测未来 3D 占用栅格，几何一致性好 部分 JEPA / V-JEPA Meta (LeCun) 表征式 潜空间掩码预测，通用表征预训练范式 否（表征） Dreamer V3 Danijar Hafner 表征式（RSSM） model-based RL 通用框架，已在 CARLA 验证 ✅ 是 选型经验法则：要数据、要仿真 → 生成式；要规划、要表征预训练 → 表征式；要闭环驾驶 → 走 Drive-WM / Dreamer 这类**打通\u0026quot;想象→决策\u0026quot;**的路线。\n自动驾驶世界模型 vs 通用视频生成 很多人会问：有了 Sora，自动驾驶直接用通用视频生成不就行了？不行，两者的目标差很远。\n维度 通用视频生成（Sora 等） 自动驾驶世界模型 视角 单镜头，构图优先 环视多相机（6 路同步），要 3D 一致 几何约束 弱，2D 像素即可 强，物体必须在 3D 空间中合理运动 可控性 文本 prompt 即可 需精确控制地图、3D 框、自车轨迹 动作条件 通常无 必须有（自车油门/转向） 时长 几秒短片可接受 规划需要 5–10s 以上长程稳定 正确性要求 \u0026ldquo;看着像\u0026quot;就行 必须物理合理（不能车穿墙、人凭空消失） 一句话总结：通用视频生成追求\u0026quot;好看\u0026rdquo;，驾驶世界模型追求\u0026quot;正确 + 可控 + 一致\u0026quot;。把 Sora 直接搬到车上，它会生成一辆很漂亮地穿墙而过的小轿车。\n世界模型在自动驾驶中的三大应用 1️⃣ 数据生成（最成熟） 用世界模型生成没采到的长尾场景，补充训练数据。比如生成\u0026quot;夜间暴雨 + 行人横穿 + 对向远光\u0026quot;这种罕见组合。\n技术挑战：\n可控性：如何精确指定天气、光照、物体数量、相对位置，而不是随机抽卡 多样性：避免生成大量雷同样本，导致策略过拟合到某个固定模式 Sim-to-Real Gap：生成数据与真实数据仍存在分布差异，需做域适配 2️⃣ 闭环仿真（最被寄予厚望） 传统仿真是开环的（场景写死），只能\u0026quot;回放\u0026quot;。世界模型可以根据自车动作实时生成下一步场景，做到真正的\u0026quot;互动式\u0026quot;训练与评测——这是解决长尾验证的关键。\n技术挑战：\n实时性：车端推理要 20–30 FPS，扩散模型多步采样天然偏慢，需用一致性模型 / 少步蒸馏 多视角同步：6 路相机必须在时间和几何上严格对齐，否则下游感知直接崩 长程不退化：闭环跑几十秒后画面不能越来越糊、目标不能凭空消失或重复 反应性：其他车辆/行人必须对自车动作做出合理反应（博弈），而不是死的录像带 3️⃣ 基于模型的规划 Model-based Planning（最有想象空间） 策略网络在决策前，先用世界模型\u0026quot;推演\u0026quot;几个候选动作的后果，选最安全的那条。这类似人类\u0026quot;三思而后行\u0026quot;，也对应经典的 model-based RL 思想。\n技术挑战：\n可微分 vs 可采样：要做梯度规划需要世界模型可微；做蒙特卡洛采样则需要快——两条技术路线各有代价 奖励设计：在潜空间预测里很难直接读出\u0026quot;碰撞时间 TTC\u0026quot;，需要可解释的安全度量 规划时延 vs 预测精度：预测越远越不准，但规划又需要足够时域，需权衡 计算成本：实时在脑子里 rollout 几十条候选轨迹，算力压力极大 一个直观例子 假设前方有辆车突然减速。世界模型的工作是：\n当前状态：自车 60km/h，前车减速，右侧有车 候选动作 A（急刹）→ 预演结果：可能被追尾 ❌ 候选动作 B（变道）→ 预演结果：右侧有车，危险 ❌ 候选动作 C（缓刹）→ 预演结果：安全停住 ✅ 最终决策：选 C 这就是 model-based planning 的核心思想：把\u0026quot;试错\u0026quot;从真实世界搬到想象世界。\n世界模型与强化学习的关系 世界模型的概念其实最早来自 model-based RL：与其让智能体在真实环境里磕磕碰碰地学（成本高、危险），不如先学一个环境的动力学模型，然后在这个\u0026quot;想象的环境\u0026quot;里大规模试错。最经典的代表是 Dreamer 系列。\nDreamer 的三段式：\nEncoder + RSSM：把观测编码成带不确定性的潜在状态，学习潜在动力学 Imagination：在潜空间里 rollout 想象轨迹（无需真实交互，速度快、安全） Actor-Critic：在想象轨迹上用回播训练策略和价值函数 从 Dreamer V1 → V2 → V3，框架越来越通用，V3 已能在多种任务（含部分驾驶仿真）上稳定收敛，无需调超参。同源的还有 MuZero（学习潜在动力学 + 用 MCTS 规划，AlphaGo 的后继）和 TD-MPC。\n在自动驾驶里的落地：把世界模型当作\u0026quot;软仿真器\u0026quot;，让策略在想象中大量试错，既避开了真实路测的安全风险，也绕开了传统仿真器的\u0026quot;假数据\u0026quot;问题。Drive-WM 就是把世界模型生成的未来送进 MPPI（模型预测路径积分） 采样器，实现端到端\u0026quot;想象 + 决策\u0026quot;的代表。不过挑战依旧明显：驾驶的奖励极度稀疏（事故极少），且世界模型自身有误差，\u0026ldquo;在错的想象力上学习\u0026quot;会放大错误——这正是 model-based RL 在驾驶里最棘手的难题。\n当前挑战与未来方向 长程一致性：预测 1 秒容易，预测 10 秒后画面就糊、目标会漂移甚至消失。根因是误差累积，每一步的小偏差被指数级放大。研究方向：分层预测（先粗后细）、记忆增强、显式约束。 物理准确性：生成的视频可能\u0026quot;违反物理\u0026rdquo;——车穿墙、物体凭空消失、速度与运动不符。需要引入几何先验（BEV/3D bbox）、运动学约束、碰撞检测作为训练信号或后处理。 可控性：怎么让世界模型生成\u0026quot;我想要的特定场景\u0026quot;（指定天气、指定车流、指定事件），而非抽卡式随机。当前依赖 CFG、ControlNet 式条件注入，但精细控制仍难。 评测体系：没有统一标准衡量\u0026quot;世界模型有多准\u0026quot;。FID/FVD 只能看画质，看不出语义和物理对错；亟需面向驾驶的闭环评测指标（如预测轨迹误差、碰撞率、动作可控度）。 计算效率：扩散类世界模型推理慢，难以满足车端实时性，少步蒸馏、一致性模型、潜空间预测是主要提速方向。 未来方向判断：生成式与表征式走向融合——用表征式学高效语义编码，用生成式补视觉细节；世界模型与 VLA 走向协同——VLA 负责决策，世界模型负责预测与想象，两者共骨干、共表征。\n小结 世界模型本质是给 AI 装一个**\u0026ldquo;想象力\u0026rdquo;**：能预演、能脑补、能试错。它和 VLA 是互补关系——VLA 负责\u0026quot;决策\u0026quot;，世界模型负责\u0026quot;预测\u0026quot;，两者结合才能构建真正智能的驾驶系统。\n从更深的技术脉络看，世界模型既是 model-based RL 在大模型时代的复兴，也是自动驾驶走向\u0026quot;理解物理世界\u0026quot;的关键一环。谁能率先造出一个长程稳定、物理可信、可被规划调用的驾驶世界模型，谁就拿到了通往 L4 的另一张门票。\n💡 下一篇：端到端自动驾驶的演进——从 UniAD 到 DiffusionDrive。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E4%BB%80%E4%B9%88%E6%98%AF%E4%B8%96%E7%95%8C%E6%A8%A1%E5%9E%8B/","summary":"世界模型让 AI 在脑中预演未来，学习现实世界的物理规律与交通规则后生成逼真的驾驶场景。本文对比生成式（像素空间预测）与表征式（潜在空间预测）两大流派各自的哲学与优劣。世界模型是解决自动驾驶真实数据稀缺与长尾场景覆盖的核心基础设施。","title":"什么是世界模型（World Model）？"},{"content":" 目的很朴素：防止好链接弄丢。看到哪篇长期高质量的博客/专栏/资源，就记到这里。每一条都是\u0026quot;值得反复回来看\u0026quot;的那种，不是流水账资讯。\n📍 怎么用这份收藏夹 每个条目记 3 件事：平台 + 作者 + 为什么值得回访 越到后面越是\u0026quot;我真正会回头点开\u0026quot;的，而非\u0026quot;刷到过\u0026quot;的 发现新的好博客，直接在文末\u0026quot;待补充\u0026quot;里往上加即可 ⭐ 个人博客 / 学习站点 1. Digtime · Corwien —— 自动驾驶实战课程体系 链接：https://digtime.cn/users/1 专栏：AI-Learning（自动驾驶学习） 为什么收藏：罕见地按课程章节式组织内容，而非散篇。有完整\u0026quot;从零到端到端自动驾驶实战\u0026quot;系列（CARLA/ROS2 环境搭建、模仿学习、BEV 感知、VLA 强化学习微调、ROSMASTER-X3 小车实战）。它的论文地图把 14 篇论文串成\u0026quot;四层金字塔\u0026quot;，非常适合建立自动驾驶全局地图。VLA-GRPO 强化学习微调那篇讲 GRPO 原理非常通俗，和我的 Flow-GRPO 精读互为补充。 可借鉴：课程化章节体系 + \u0026ldquo;开头先给全局视图再展开\u0026quot;的讲法。 2. 智能汽车人 · CSDN —— 行业资深算法工程师 链接：https://blog.csdn.net/janeiskangs 专栏：自动驾驶 Planning 决策规划、感知\u0026amp;端到端大模型、聊聊自动驾驶技术 为什么收藏：作者是自动驾驶大厂资深算法工程师，专栏覆盖决策规划、端到端大模型、行业研究。更新的\u0026quot;自动驾驶大模型\u0026quot;系列（UniUGP、FastDriveVLA、RAD 等）紧跟前沿，且带工程视角。 适合：追行业前沿工作 + 了解量产/工程落地角度。 3. 地平线智能驾驶开发者 · 博客园 链接：https://www.cnblogs.com/horizondeveloper 为什么收藏：地平线官方开发者社区，VLA / 端到端 / 世界模型等方向的官方技术解读，工程味道浓，适合看\u0026quot;量产方案怎么落地\u0026rdquo;。 🔬 论文 \u0026amp; 项目官方资源 这些不是博客，但都是会反复回来查的权威一手来源，一并存着。\nFlow-GRPO（我在精读的仓库） Paper：https://arxiv.org/abs/2505.05470 Code：https://github.com/yifan123/flow_grpo 可视化项目页：https://gongyeliu.github.io/Flow-GRPO/ 在线 Demo：https://huggingface.co/spaces/jieliu/SD3.5-M-Flow-GRPO 论文速读工具 ar5iv / arXiv HTML 版：把 PDF 变可读网页，https://ar5iv.labs.arxiv.org/html/\u0026lt;arxiv_id\u0026gt; AlphaXiv：https://www.alphaxiv.org （带大纲/音频的论文阅读） 🧭 我的博客内部导航 这份收藏夹不是孤立的，配某几篇\u0026quot;地图型\u0026quot;文章一起用效果更好：\n自动驾驶技术全景学习指南｜六范式 —— 我自己做的全景知识体系 自动驾驶学习路径总目录 —— 用我自己的论文精读串起来的金字塔路径 Flow-GRPO 完全讲解 —— 训练/推理/梯度流逐行拆解 📝 待补充（发现好博客就往这里加） 世界模型方向的独立技术博客 VLA 结合世界模型/仿真闭环的一手工程博客 端到端 + 强化学习（GRPO 进入驾驶落地）的最新实践 更新原则：宁缺毋滥。只收\u0026quot;值得二刷\u0026quot;的，流水线资讯不进收藏夹。\n","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/auto-driving-blog-collection/","summary":"把平时刷到的优秀自动驾驶博客/资源链接集中存到这里，避免日后找不到。主打一个\u0026rsquo;少逛、逛精\u0026rsquo;——每篇能持续产出高质量内容才放进收藏。持续更新。","title":"自动驾驶优质博客收藏夹｜随手存，少逛，逛精"},{"content":"📄 论文信息 标题：NoRD: A Data-Efficient Vision-Language-Action Model that Drives without Reasoning 团队：Applied Intuition, Texas A\u0026amp;M University, UC Berkeley arXiv：2602.21172 代码：github.com/Applied-Open-Source/nord 收录：CVPR 2026 关键词：VLA, 数据效率, 免推理驾驶, Dr.GRPO, RL 后训练 一句话总结：NoRD 去掉了 VLA 中的推理环节，只用少量轨迹数据做 SFT + Dr.GRPO 强化学习，在 Waymo 和 NAVSIM 上取得可比性能，token 数减少 3 倍。 🤔 要解决什么问题？ 当前 VLA 模型在自动驾驶中面临两个高昂的依赖：\n依赖 问题 代价 大规模数据集 需要数十万乃至百万级带标注驾驶样本 采集和标注成本极高 推理标注 需要 GPT-4o 等教师模型生成 CoT 推理链 训练计算量大，推理延迟高 NoRD 的关键问题：自动驾驶真的需要\u0026quot;边想边开\u0026quot;吗？能否做到直接感知到动作的映射？\n💡 核心思想 NoRD 的核心洞察有三层：\n推理并非必要：模型可以在不生成中间推理文本的情况下直接预测轨迹，利用 VLM 内部的空间-时间先验即可 小数据 + 无推理的 SFT 策略足够作为起点：仅用 80K 样本（SOTA 方法的 \u0026lt;60%）即可训练基础策略 标准 GRPO 在弱策略上因难度偏差失效：Dr.GRPO 可修复这个问题 ⚙️ 方法细节 训练流程对比 传统 VLA 流程： 大规模驾驶数据 → 教师 LLM 生成推理标注 → SFT 训练（含推理链）→ GRPO 强化学习\nNoRD 流程： 小规模驾驶数据（80K 样本）→ SFT 训练（仅轨迹）→ Dr.GRPO 强化学习\n难度偏差（Difficulty Bias） 这是本文最核心的分析发现：\n标准 GRPO 的优势计算为：\n$$ A_i = \\frac{r_i - \\mu}{\\sigma} $$对于弱策略产生的 rollout，简单场景（直线行驶）的 rollout 方差低，reward 稳定；复杂场景（急转弯、避障）的 rollout 方差高，reward 波动大。GRPO 用标准差 $\\sigma$ 做归一化时，高方差场景的 reward 被严重惩罚，导致模型倾向于只学习简单场景，忽略困难场景。\n场景类型 Rollout 方差 GRPO 优势 学习效果 简单（直线） 低 正常 正常学习 复杂（转弯） 高 被压制 几乎不学习 Dr.GRPO 的改进 Dr.GRPO 移除了标准差分母，缓解难度偏差：\n$$ A_i = r_i - \\mu $$这样高方差场景中偶尔成功的 rollout 也能获得正向优势信号，让弱策略能有效从困难场景中学习。\n模型架构 基座：Qwen-2.5VL-3B-Instruct 输入：多视角 RGB 图像（前、前左、前右）+ 历史轨迹 token + 速度/加速度 输出：使用 k-disc tokenized 词表直接预测未来 10Hz 轨迹 🧪 实验与结果 NAVSIM 结果 方法 PDM Score 训练数据量 推理标注 UniPlan 82.14 ~790K ✅ HMVLM 83.95 ~350K ✅ AutoVLA 84.12 ~460K ✅ NoRD (SFT only) 76.88 80K ❌ NoRD (SFT + GRPO) 77.55 80K ❌ NoRD (SFT + Dr.GRPO) 85.60 80K ❌ Dr.GRPO 带来了 11.68% 的显著提升，而标准 GRPO 仅有 0.67%。\nWaymoE2E 结果 方法 RFS 数据量 推理标注 Poutine 7.91 ~680K ✅ AutoVLA 7.87 ~460K ✅ NoRD (SFT only) 7.26 80K ❌ NoRD (SFT + Dr.GRPO) 7.59 80K ❌ Token 效率 方法 Token 数 推理延迟 AutoVLA (含推理) ~900 tokens ~400ms EMMA (含推理) ~750 tokens ~380ms NoRD ~250 tokens ~120ms 消融实验 — GRPO vs Dr.GRPO 策略 PDM Gain 说明 SFT baseline 76.88 基础 + GRPO 77.55 (+0.67%) 几乎无提升 + Dr.GRPO 85.60 (+11.68%) 显著提升 🎯 NoRD vs LinkVLA：两种哲学 维度 NoRD LinkVLA 语言-动作关系 去掉推理，直接映射 强化对齐，双向绑定 对推理的态度 不需要 需要（但只是生成动作，非 CoT） 后训练 Dr.GRPO 纯 SFT 关键瓶颈 难度偏差 模态不对齐 ⚠️ 局限与未来方向 仅使用 Qwen2.5VL-3B，更大模型的表现有待验证 在真实场景中的闭环比仿真更具挑战性 无推理策略在极端长尾场景下的表现需进一步研究 Dr.GRPO 的超参数敏感性未充分分析 📝 个人思考 NoRD 最精彩的部分是对 GRPO 失效原因的诊断。难度偏差这个概念在 LLM 领域已被关注，但 NoRD 首次在自动驾驶 VLA 中揭示了它的影响。这个发现不仅对 NoRD 本身有价值，对所有用 RL 做 VLA 后训练的工作都有警示意义。\n与 LinkVLA 对比来看，NoRD 走了相反的路——去掉冗余的中间环节。两篇同时被 CVPR 2026 接收，说明当前领域对 VLA 应该\u0026quot;多思考\u0026quot;还是\u0026quot;少思考\u0026quot;还存在根本分歧。我个人倾向于中间路线：保留轻量推理但不过度，同时用 RL 做端到端优化。\n有趣的是，NoRD 来自工业界（Applied Intuition），LinkVLA 来自车企（理想汽车）。工业界对效率的极致追求在这里体现得很明显——每毫秒的延迟节省和每 MB 的计算量都有实际意义。\n📖 这是论文精读系列的第 XX 篇。驾驶到底需不需要推理？这个问题的答案可能因场景而异。欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/nord%E7%B2%BE%E8%AF%BB/","summary":"NoRD 挑战 VLA 对大规模数据和推理标注的依赖，仅用 60% 数据 + 零推理标注即可达到可比性能。核心发现是标准 GRPO 在弱策略上由于难度偏差（Difficulty Bias）失效，引入 Dr.GRPO 后从 0.67% 提升扭转为 11.68% 的显著增益。","title":"论文精读｜NoRD：无需推理的高效数据驱动 VLA"},{"content":"论文信息 标题：Planning-oriented Autonomous Driving（面向规划的自动驾驶） 作者机构：上海人工智能实验室 × 武汉大学 × 复旦大学 arXiv：2212.10156（CVPR 2023 最佳论文奖，是该会议历史上首篇自动驾驶领域的最佳论文） 代码：github.com/OpenDriveLab/UniAD 一句话总结：首次把感知、预测、规划全部统一进一个可端到端联合训练的网络里，以规划为最终目标反向驱动所有任务，开创了显式端到端的新范式。 要解决什么问题？ 在 UniAD 之前，自动驾驶工业界几乎清一色采用分模块拼接的方案：检测 → 跟踪 → 在线建图 → 运动预测 → 占用预测 → 规划与控制。每个模块单独训练、各自调优，最后用规则串联起来。这种 pipeline 成熟可靠，但有几个根本性顽疾：\n痛点 表现 后果 误差累积 上游漏检一个目标，下游预测/规划全错 错误\u0026quot;滚雪球\u0026quot; 信息丢失 模块间只传结构化结果（框/轨迹），丢掉了特征级信息 后段无法补救前段 目标错位 每个模块都在自己任务上刷分，跟\u0026quot;开得好不好\u0026quot;脱节 感知 SOTA ≠ 规划好 几何失配 不同任务用不同表示（栅格/矢量/网格），难以融合 系统复杂、难优化 而另一条隐式端到端路线（直接\u0026quot;图像进、控制出\u0026quot;，典型如早期的行为克隆）虽然能联合优化，却完全黑盒、不可解释、不可调试，且难以吸收多年积累的感知预测知识。\nUniAD 的灵魂拷问：既然所有任务最终都是为\u0026quot;把车开好\u0026quot;服务的，那为什么不以规划为导向，把感知预测都装进一个可训练的网络里？既享受端到端的梯度贯通，又保留显式的中间表示（轨迹、地图、占用）以维持可解释性——这就是论文标题 \u0026ldquo;Planning-oriented\u0026rdquo; 的含义。\n核心思想：以规划为最终目标统一所有任务 UniAD 给出了一条折中路线，介于\u0026quot;纯分模块\u0026quot;与\u0026quot;纯黑盒端到端\u0026quot;之间：\n多任务统一 + 显式中间表示 + 以规划为锚点的端到端联合优化\n它的关键判断有三条：\n规划是唯一终极目标：感知、预测的存在意义就是服务规划，所以训练时应当让规划的梯度一路回传到感知，而不是各模块各刷各的分。 中间表示不能丢：把检测框、轨迹、地图、占用栅格这些显式表示保留下来，既可解释、又可单独监督、还能复用已有知识。 用 query 把所有模块串起来：用同一套 Transformer query 机制贯穿全流程，让信息在特征级流动，避免\u0026quot;框/栅格\u0026quot;这种有损的硬传递。 先看 UniAD 的整体架构，再理解它为什么选择了这种设计。\n图 1：UniAD 整体架构。 环视六相机图像流式输入，经 BEVFormer 编码为 BEV 特征 B。随后五个 Transformer decoder 模块依次处理：TrackFormer 输出 agent query Q_A（跟踪到的智能体），MapFormer 输出 map query Q_M（地图元素），MotionFormer 输出多模态轨迹预测，OccFormer 输出未来占用栅格，Planner 结合自车 query 生成规划轨迹。所有模块通过 query 接口传递信息，梯度可从规划 loss 贯通至感知。\nUniAD 的完整 pipeline：多相机图像 → TrackFormer（跟踪） → MapFormer（在线建图） → MotionFormer（轨迹预测） → OccFormer（占用预测） → Planner（规划）。关键在于：每一段的输入输出都是 query，而不是传统的框或栅格。这样梯度就能从最后的规划 loss 一路贯通回最前面的感知，真正做到\u0026quot;为规划而训练\u0026quot;。\n作为对比，下图为论文给出的几种自动驾驶框架设计路线——从纯分模块、多任务学习到最终 UniAD 选择的显式端到端范式，展示了 UniAD 在设计哲学上的选择：\n图 2：五种自动驾驶架构范式对比。 (a) 分模块独立模型：各任务独立训练，信息传递有损，误差累积严重。(b) 多任务学习（MTL）：共享骨干但各任务 head 独立，缺乏任务间显式交互。(c.1) 黑盒端到端：传感器直出控制信号，完全不可解释。(c.2) 部分组件端到端：仅局部链路可微。(c.3) UniAD 的规划导向范式：所有感知/预测模块以 Transformer decoder 结构组织，通过 task query 交互，最终服务于规划。相比其他范式，UniAD 同时做到了\u0026quot;梯度贯通\u0026quot;和\u0026quot;可解释性\u0026quot;。\nUniAD 各模块的核心配置：\n模块 Decoder 层数 Query 数量 特征维度 TrackFormer 6 900 → N_a 256 MapFormer 6 定位 + 4 mask 300 (thing) + 1 (stuff) 256 MotionFormer 3 N_a × 6 (模态) 256 OccFormer 5 个时间块 N_a + 密集 BEV 256 Planner 3 自车 query 256 下面逐段拆解。\n第一段：TrackFormer（跟踪模块） TrackFormer 负责联合检测与多目标跟踪（MOT），不需要任何不可微的后处理（如传统的匈牙利匹配 + 卡尔曼滤波）。\n设计机制 它采用两套 query 设计，继承自 MOTR：\nDetection queries：标准检测 query（900 个），负责在当前帧发现新目标。初始化为可学习的 positional embedding，通过 6 层 Transformer decoder 与 BEV 特征交互，输出检测框和类别。 Track queries：跟踪 query（动态数量），负责跨帧追踪已跟踪的目标。每帧更新后传递到下一帧，保持 ID 连续性。 核心创新：query 的跨帧传播 TrackFormer 最关键的设计：每帧结束后，与 ground truth 匹配成功的 query 作为下一帧的 track query 保留，匹配失败的检测 query 被丢弃。新一帧输入时，上一帧的 track query + 新初始化的 detection query 一起输入，共同处理。\nF F r r a a m m e e t t : + 1 : d e d t e e t c e t c i t o i n o n q u q e u r e i r e i s e s ( 9 ( 0 9 0 0 ) 0 ) + + t r m a a c t k c h q e u d e r q i u e e s r i ( e f s r o ( m f r t o - m 1 ) t ) → → d e d c e o c d o e d r e r → → o u o t u p t u p t u s t s + + m a m t a c t h c e h r e r 这种机制使得：\n无需显式关联：query 本身就携带了身份信息，跨帧自动对应 端到端可微：整个跟踪过程没有硬性后处理 遮挡鲁棒：被遮挡的智能体可以通过 track query 的记忆特性维持跟踪 输出 TrackFormer 输出一组 agent query \\(Q_A \\in \\mathbb{R}^{N_a \\times 256}\\)，其中 \\(N_a\\) 是当前帧检测到的动态智能体数量（车、人、骑行者等）。每个 query 编码了该智能体的位置、朝向、尺寸、速度等属性，同时携带了 BEV 特征级信息。\n除了 agent query 外，TrackFormer 还维护一个特殊的自车 query（ego-vehicle query），它不会参与预测-真值匹配，而是专门预测自车位置，供下游规划使用。\n第二段：MapFormer（在线建图模块） MapFormer 负责从 BEV 特征中实时提取矢量化地图元素，包括车道中心线、车道分隔线、道路边界、人行横道等。\n设计机制 MapFormer 采用 MapTRv2 的结构，使用两类 query：\nThing queries（300 个）：负责实例级地图元素（车道线、边界、人行横道等），通过二分图匹配与 ground truth 配对 Stuff query（1 个）：负责语义级元素（可行驶区域），采用固定类别分配 结构为 6 层定位 decoder + 4 层 mask decoder。定位 decoder 预测地图点的坐标，mask decoder 预测每个地图元素的语义 mask。\n输出 MapFormer 输出 map query \\(Q_M \\in \\mathbb{R}^{N_m \\times 256}\\)，\\(N_m=300\\)，编码了周围道路的拓扑结构。这些 map query 将为 MotionFormer 提供\u0026quot;车该往哪开\u0026quot;的道路约束。\n第三段：MotionFormer（运动预测模块） MotionFormer 是 UniAD 的技术核心之一。它基于 agent query 和 map query，预测每个智能体未来 3 秒（12 个 waypoint，间隔 0.5s）的多模态运动轨迹，同时建模自车与其他智能体的交互。\n三类交互建模 MotionFormer 的核心是其三重交互机制。每个 motion query \\(Q_{i,k}\\)（第 i 个 agent 的第 k 个模态）同时经历三类交互：\nQ Q Q _ _ _ a m g = = = M M D H H e C C f A A o ( ( r M M m H H A S S t A A t ( ( n Q Q ( ) ) Q , , , Q Q x _ _ ̂ A M _ ) ) T ^ { l - 1 # # } , ① ② B A A ) g g e e n n # t t - - ③ A M g a A e p g n e t 交 n 互 t 交 - 互 G o a l 交 互 图 3：MotionFormer 详细结构。 由 N 层堆叠的 agent-agent、agent-map、agent-goal 交互 Transformer decoder 组成。agent-agent 和 agent-map 交互使用标准 Transformer decoder 层（MHSA + MHCA），agent-goal 交互基于可变形注意力（Deformable Attention）模块。每个 agent 有 K=6 个模态，各模态独立经历这三类交互后，通过 MLP 融合为 query context。\n① Agent-Agent 交互（智能体间） 每个 agent 的 query 对其他所有 agent 做 MHSA + MHCA，建模\u0026quot;谁在关注谁\u0026quot;——自我车预测前车轨迹时，需要考虑前车是否被旁边车道的车辆影响。这种联合预测（joint prediction）而非独立预测（marginal prediction）是 UniAD 的重要特点。\n② Agent-Map 交互（智能体与地图） agent query 对 map query 做 MHSA + MHCA，让每个 agent 了解它受哪些车道线/道路边界约束。例如，一个 agent 在当前车道内行驶，它的注意力会集中在所在车道的地图元素上，从而知道\u0026quot;不能超出车道线\u0026quot;。\n③ Agent-Goal 交互（智能体与终点） 这是 MotionFormer 最有特色的设计。使用可变形注意力（Deformable Attention），以上一层的预测终点 \\(\\hat{x}_T^{l-1}\\) 为参考点，在 BEV 特征 B 上做稀疏注意力采样：\n\\[ Q_g = \\text{DeformAttn}(Q, \\hat{x}_T^{l-1}, B) \\]这相当于告诉模型：\u0026ldquo;你认为你要去那里，仔细看看终点附近有什么\u0026rdquo;。通过逐层 refine，预测轨迹越来越精确。这借鉴了 DETR 中 iterative box refinement 的思想。\nMotion Query 的构建 Motion query 由两部分组成：query context \\(Q_{\\text{ctx}}\\) 和 query position \\(Q_{\\text{pos}}\\)。\n\\(Q_{\\text{pos}}\\) 融合了四类位置信息：\n\\[ Q_{\\text{pos}} = \\text{MLP}(\\text{PE}(I^s)) + \\text{MLP}(\\text{PE}(I^a)) + \\text{MLP}(\\text{PE}(\\hat{x}_0)) + \\text{MLP}(\\text{PE}(\\hat{x}_T^{l-1})) \\] \\(I^s\\)：场景级锚点（scene-level anchor），对所有 agent 通用的 k-means 聚类轨迹（K=6），表示常见的运动模式 \\(I^a\\)：智能体级锚点（agent-level anchor），从训练集中对该类智能体聚类的轨迹 \\(\\hat{x}_0\\)：智能体当前位置 \\(\\hat{x}_T^{l-1}\\)：上一层预测的终点 MotionFormer 输出 每个被跟踪的 agent 得到 K=6 条多模态轨迹（每条 12 个 waypoint），附带各轨迹的置信度分数。所有 agent 的预测是联合优化的——每个 agent 的轨迹生成时已经考虑了其他 agent 的响应。\n此外，自车 query 也通过 MotionFormer 的前向传播与场景中的所有 query 交互，从而携带了全局场景理解。\n第四段：OccFormer（占用预测模块） 运动预测只对被检测到的、可跟踪的目标做轨迹预测。但真实世界里还有大量未观测到、不规则、难以归类的障碍物（散落物、异形车、施工围挡）。OccFormer 用一个 BEV 栅格去预测\u0026quot;未来某个时刻，每个格子会不会被占据\u0026quot;，补上了运动预测的盲区。\n图 4：OccFormer 架构。 OccFormer 由 T_o=5 个时序块堆叠而成。每个块以 BEV 特征和 agent 特征为输入：BEV 特征依次经过下采样 → pixel self-attention → pixel-agent cross-attention（受注意力 mask 约束）→ 上采样 → 残差相加；agent 特征由 track query、agent 位置和 motion query 经时序特化 MLP 融合得到。每个块输出当前时间步的占用预测，同时传入下一块作为输入。\n设计机制 OccFormer 在时间上展开——5 个时间块，每个块预测未来一个时间步的占用栅格。\nAgent Feature 构建 首先，从 MotionFormer 最后一层的 motion query 中，在模态维度上做 max-pooling，得到每个 agent 的特征 \\(Q_X \\in \\mathbb{R}^{N_a \\times 256}\\)。然后与 track query \\(Q_A\\)、位置编码 \\(P_A\\) 拼接，经时间特化的 MLP 融合：\n\\[ G^t = \\text{MLP}_t([Q_A, P_A, Q_X]), \\quad t = 1, \\dots, 5 \\]Pixel-Agent 交互 这是 OccFormer 的核心创新。它把密集的 BEV 特征与稀疏的 agent 特征统一起来：\nBEV 特征 B 下采样 4 倍（进入）→ 下采样 8 倍（做 attention）→ 上采样回 4 倍（输出） 在 1/8 分辨率下，对密集特征做 self-attention（建模远距离栅格间响应） 再以密集特征为 query，agent 特征为 key/value，做 cross-attention（每个栅格从相关 agent 取信息） cross-attention 受一个注意力 mask 约束——每个像素只能 attend 到占据该位置的 agent 注意力 mask \\(O_m^t\\) 通过 mask feature \\(M^t = \\text{MLP}(G^t)\\) 与密集特征 \\(F_{\\text{ds}}^t\\) 的矩阵乘法生成，语义上类似于当前的占用。这个 mask 确保 agent 和像素的空间对应关系是精确的。\n输出 生成实例级占用概率图 \\(\\hat{O}_A^t \\in \\mathbb{R}^{N_a \\times H \\times W}\\)（每个 agent 一个概率图），然后通过像素级 argmax 合并为整场景占用 \\(\\hat{O}^t \\in \\mathbb{R}^{H \\times W}\\)。这个合并后的占用图既用于占用评估，也传递给 Planner 做碰撞避免。\n关键认知：MotionFormer 和 OccFormer 是互补的。Motion 假设世界由少数可跟踪的目标组成，对已知目标做精确预测；Occ 假设世界是稠密的栅格，对\u0026quot;不管是什么先看有没有\u0026quot;做兜底。一个看\u0026quot;已知目标怎么动\u0026quot;，一个看\u0026quot;还有什么挡路\u0026quot;。\n第五段：Planner（规划模块） 规划模块拿到上述所有信息后，输出自车未来轨迹。\n图 5：Planner 架构。 自车 query \\(Q_{\\text{ego}}\\) 在 3 层 Transformer decoder 中依次与 BEV 特征 B 和 motion query 做交叉注意力，融合场景理解后输出规划轨迹。碰撞损失与占用优化在训练/推理时提供安全约束。\n输入 自车 query（来自 MotionFormer） 密集 BEV 特征 B 占用预测结果 \\(\\hat{O}\\) 机制 Planner 是一个 3 层 Transformer decoder。自车 query 作为 query，与 BEV 特征和 MotionFormer 的输出做交叉注意力，综合\u0026quot;周围车要怎么动、车道在哪、占用情况\u0026quot;来生成轨迹。\n碰撞损失（Collision Loss） 为了把\u0026quot;安全\u0026quot;硬编码进优化目标，Planner 引入了一个碰撞损失——将规划轨迹投影回 BEV 坐标系，与 OccFormer 预测的占用栅格做约束，惩罚可能与障碍物重叠的轨迹：\nL _ c o l l i s i o n = Σ _ t m a x ( 0 , d i s t ( τ _ t , O _ t ) - m a r g i n ) 其中 τ_t 是规划轨迹在时间 t 的位置，O_t 是时间 t 的占用栅格。这实际上去鼓励规划轨迹与所有预测的占用区域保持安全距离。\n占用优化（Occupancy Optimization） 在推理时，Planner 还可以使用基于梯度的轨迹优化：将初始轨迹过一遍占用预测，对与占用冲突的 waypoint 做梯度下降微调。这种\u0026quot;learned cost function + gradient-based solver\u0026quot;的组合，兼顾了学习的灵活性和优化的安全性。\nQuery：端到端梯度贯通的关键 UniAD 最具方法论价值的创新，是用 query 作为贯穿全流程的统一接口。这带来三个本质好处：\n特征级信息流动：模块之间不再传递\u0026quot;框/轨迹\u0026quot;这种离散有损信息，而是传递连续的特征向量，规划模块能看到感知的全部细节。 梯度可回传：因为整条链路都是可微的，规划 loss 可以一路反传到感知，真正实现\u0026quot;为规划而感知\u0026quot;。 统一调度：所有模块都遵循 query + 注意力的范式，便于在一个框架里联合训练、联合推理。 这正是它区别于传统 pipeline（不可微）和黑盒端到端（无中间表示）的根本所在——用 query 同时拿到了\u0026quot;端到端的可微性\u0026quot;和\u0026quot;显式表示的可解释性\u0026quot;。\nUniAD 中所有重要的张量形状和含义：\n符号 形状 含义 B 200×200×256 BEV 特征 Q_O 900 初始化检测 query 数 Q_A N_a×256 TrackFormer 输出的 agent 特征 P_A N_a×256 Agent 位置编码 Q_M 300×256 MapFormer 输出的地图特征 N_m 300 Map query 数量 K 6 MotionFormer 预测模态数 T 12 预测时间步长（0.5s×12=6s） N_a 动态 当前帧跟踪的 agent 数 T_o 5 OccFormer 预测时间步长 G^t N_a×256 每时间步的 agent 特征 \\hat{O}^t 200×200 整场景占用图 τ T_p×2 规划轨迹 D 256 所有 query 的特征维度 多任务联合 Loss 设计 UniAD 是典型的多任务学习系统，每个模块有自己的监督信号：\n任务 主要 Loss Track 分类 Focal Loss + 框 L1 回归 Loss + 关联匹配 Loss Map Focal 分类 Loss + 点集 L1 回归 Loss（MapTRv2 方式） Motion 轨迹回归 L1 Loss（minADE/minFDE）+ 多模态分类 Focal Loss + 终点分类 Loss Occ 二值交叉熵 Loss + Dice Loss Plan 轨迹 L2 回归 Loss + 碰撞 Loss + 占用优化 Loss 两阶段训练策略 训练上有一个重要工程经验：直接从头端到端联合训练会崩——各任务梯度尺度不一、相互打架，很难收敛。UniAD 采用两阶段策略：\n阶段一：分别预训练各感知/预测模块，让每个子任务先到合理初始化。TrackFormer 和 MapFormer 在 nuScenes 上单独训练，MotionFormer 在 Track+Map 固定的情况下训练，OccFormer 再在 Motion 固定的情况下训练。 阶段二：端到端联合微调，把所有模块接起来，以规划为主导做联合优化。此时规划 loss 的梯度回传到所有上游模块，微调它们使其更好地服务于规划。 这种\u0026quot;先分后合\u0026quot;的做法，是后来几乎所有端到端工作（VAD、SparseDrive 等）默认采用的训练范式，可谓\u0026quot;立规矩\u0026quot;的贡献。\n实验：nuScenes 全面评测 UniAD 在 nuScenes 上做了全面评测。下图展示了环视图像与 BEV 视角下的全任务输出——自车正在礼让前方黑色车辆，运动预测与占用预测保持一致。\n图 6：UniAD nuScenes 可视化结果。 上排：六环视相机图像，每张图上标注了检测框（3D框投影到图像）和轨迹预测；下排：BEV 视角，展示 Track（彩色框 + ID）、Map（蓝色车道线）、Motion（虚线轨迹）、Occ（黄色/绿色占用区域）、Plan（粗绿线为自车规划轨迹）。图中场景为自车在路口礼让对向黑车。\n规划结果 Benefiting from rich spatial-temporal information in both the ego-vehicle query and occupancy, UniAD reduces planning L2 error and collision rate by 51.2% and 56.3% compared to ST-P3, in terms of the average value for the planning horizon.\n方法 L2 (1s) L2 (2s) L2 (3s) Col (1s) Col (2s) Col (3s) ST-P3 0.84 1.65 2.60 1.52 2.84 6.28 UniAD 0.44 0.99 1.71 0.56 0.88 1.64 跟踪（MOT）结果 方法 AMOTA↑ AMOTP↓ Recall↑ IDS↓ MUTR3D 0.294 1.498 0.427 3822 UniAD 0.359 1.320 0.467 906 UniAD 在所有指标上优于之前的端到端 MOT 方法。\n运动预测结果 方法 minADE↓ minFDE↓ MR↓ EPA↑ PnPNet-vision 1.15 1.95 0.226 0.222 ViP3D 2.05 2.84 0.246 0.226 UniAD 0.71 1.02 0.151 0.456 UniAD 比 PnPNet-vision 降低 38.3% 预测误差，比 ViP3D 降低 65.4%。\n占用预测 方法 IoU-near↑ IoU-future↑ VPQ-near↑ VPQ-future↑ FIERY 56.5 31.0 45.5 26.1 BEVerse 58.5 38.7 49.8 28.5 UniAD 62.5 39.8 53.2 32.6 在近处区域取得显著领先。\n消融实验：每个模块为什么不可或缺 UniAD 的消融实验非常充分，有力证明了每个模块的价值。\n主消融：逐步添加任务的影响 下图为消融实验的核心结果，展示从纯多任务学习（MTL）基线逐步添加各模块后各指标的变化：\n表 2 关键行分析：\nID 配置 规划 L2↓ 碰撞率↓ 关键结论 0* MTL baseline 1.154 0.941 各任务独立训练，无交互，规划最差 7 +Motion - - 加入运动预测后各项开始提升 9 +Motion+Occ - - 两预测模块协同效果更好 10 Planner only 1.131 0.773 纯规划（无感知融合）结果 11 +Track+Map+Motion 1.014 0.717 加入感知后提升明显 12 全量 1.004 0.430 完整 UniAD，碰撞率降幅最大 关键发现：\nOccupancy 对安全最关键：ID 11 → 12，加入 Occupancy 后碰撞率从 0.717 降到 0.430，降低 40% Motion + Occupancy 协同：单独 Motion（ID 7）或单独 Occ（ID 8）的占用预测都比两者都有的（ID 9）差——说明预测任务间有正向协同 感知提升预测：加入 Track 和 Map（ID 5 → ID 6）后，Motion 的 minADE 降低 9.7%、minFDE 降低 12.9% 占用预测模块消融 ID Cross Attn Attn Mask Mask Feat IoU-near↑ 1 61.2 2 ✓ 61.3 3 ✓ ✓ 62.3 4 ✓ ✓ ✓ 62.6 注意力 mask 和 mask feature 重用都贡献了可观的提升。\n规划模块消融 ID BEV Att Col Loss Occ Optim L2 (3s)↓ Col (3s)↓ 1 1.71 1.64 2 ✓ 1.81 1.58 3 ✓ ✓ 1.76 1.39 4 ✓ ✓ ✓ 1.81 1.05 碰撞损失（Col Loss）将 3 秒碰撞率从 1.58 降至 1.39，占用优化（Occ Optim）进一步降至 1.05——降幅达 36%。\n可视化结果 UniAD 在多种城市驾驶场景中都能生成高质量的中间表示与规划轨迹：\n图 7：UniAD 城市巡航可视化。 图中展示了多个城市驾驶场景下的全任务输出。每个场景中，BEV 视角统一展示了检测跟踪框、矢量化地图元素、多模态运动预测轨迹与自车规划轨迹（粗绿线）。UniAD 在不同道路拓扑与交通环境下均能保持各模块输出的一致性——跟踪框准确、地图元素完整、运动预测合理、规划轨迹平滑安全。\n历史地位：开创\u0026quot;显式端到端\u0026quot;范式 UniAD 的历史地位，远不止于\u0026quot;一个跑得好的系统\u0026quot;，而在于它确立了一条新路线：\n路线 代表 特点 局限 分模块拼接 工业界传统 成熟、可解释 误差累积、不可微 隐式端到端 行为克隆类 联合优化 黑盒、不可调试 显式端到端 UniAD ⭐ 可微 + 显式表示 训练复杂、算力高 显式端到端这个范式几乎成了 2023 年之后学术界的\u0026quot;默认选项\u0026quot;，后续一大批工作都沿着 UniAD 铺好的路往前走。\n与后续工作的关系 UniAD → VAD VAD 直接继承了 UniAD 的\u0026quot;显式端到端 + 向量化表示\u0026quot;思想，但做了两件关键瘦身：\n用矢量化场景表示替代 UniAD 中较重的密集 BEV 栅格，大幅降低算力、提升推理速度 进一步精简模块，强调效率与泛化，推理速度从 UniAD 的 ~10FPS 提升到 VAD 的 ~40FPS UniAD → SparseDrive SparseDrive 把\u0026quot;稀疏\u0026quot;做到极致——用稀疏 query 表示目标和地图，避免密集 BEV 计算，在保持甚至提升精度的同时把推理开销进一步压低。它延续了 UniAD \u0026ldquo;query 贯通 + 显式表示\u0026rdquo; 的内核，只是把表示做得更稀疏、更高效。\n三者一脉相承 工作 核心传承 主要进化 UniAD 范式奠基者 首次显式端到端，规划导向 VAD 向量化 + 显式端到端 轻量化、提速 4 倍 SparseDrive query 通路 + 显式表示 全稀疏，进一步提效 个人思考 读 UniAD 最打动我的，是它对\u0026quot;目标\u0026quot;的清醒定位。在它之前，自动驾驶学术界和工业界都容易陷入一种\u0026quot;局部最优陷阱\u0026quot;——每个团队埋头把自己的模块（检测、预测、规划）刷到 SOTA，却很少反思这些模块拼起来是否真的让车开得更好。UniAD 用一句话点醒了这个迷思：所有任务的终极目标只有一个，就是规划。这种\u0026quot;以终为始\u0026quot;的系统观，比任何具体的网络结构都更值得铭记。\n从架构看 UniAD 的三个关键设计选择 1. 为什么用 query 做统一接口？\n因为 query 比任何结构化表示都更适合做梯度传导。一个检测框是离散的（位置 + 类别 + 置信度），而 query 是连续的 (256-dim 向量)，可以携带丰富的上下文信息。MotionFormer 之所以能联合预测所有 agent，就是因为它直接以 agent query 作为输入，而不是框坐标。这是\u0026quot;表示连续化\u0026quot;的胜利。\n2. 为什么需要 Motion + Occupancy 双预测？\n这本质上是稀疏表示 + 稠密表示的互补。Motion 假设世界由有限的可跟踪目标构成，对已知目标做高精度预测。但真实世界总有未检测到的物体（异常障碍物、施工区域）。Occupancy 是对 Motion 的安全兜底——即使 Motion 漏了，Occupancy 也能知道\u0026quot;前方有东西\u0026quot;。这种\u0026quot;稀疏目标 + 稠密占用\u0026quot;的双重预测，在后来的世界模型和端到端工作中被广泛采纳。\n3. 为什么两阶段训练是必须的？\n端到端联合训练在理论上是美好的，但实践中各任务的梯度尺度差异巨大——规划的 L2 loss 在 1 量级，跟踪的分类 loss 在 0.01 量级。如果从头联合训练，感知模块的梯度会被规划的梯度淹没。UniAD 的\u0026quot;先分后合\u0026quot;策略是实用的折中：先用强监督让各模块到合理位置，再用规划梯度做精调。\n三点启示 第一，占用预测是工程价值最高的创新之一。真实世界充满\u0026quot;不规则、未归类、未观测\u0026quot;的障碍物，传统的检测/预测范式天然漏掉它们。占用栅格是一种\u0026quot;不管是什么，先告诉我有没有\u0026quot;的兜底表示。这种\u0026quot;从语义回到几何\u0026quot;的设计思路，对今天的研究仍然有启示——越是高层语义容易出错的地方，越需要底层几何的安全网兜着。\n第二，UniAD 的架构复杂度在实用中是一个问题。五个级联的 Transformer decoder + 密集 BEV 特征，推理速度约 7-10FPS，远不及实时要求。这直接催生了 VAD 和 SparseDrive 的轻量化改进。但这并不减损 UniAD 的学术价值——它先证明了\u0026quot;方向对了\u0026quot;，后继工作再优化效率。\n第三，\u0026ldquo;折中\u0026quot;的智慧。UniAD 没有走极端：既不全盘黑盒（保留了显式的轨迹/地图/占用表示），也不固守分模块（让梯度贯通到感知）。这种\u0026quot;鱼与熊掌兼得\u0026quot;的设计哲学，在工程实践中往往比纯学术的激进更值钱。真正能大规模落地的自动驾驶系统，一定是某种形式的\u0026quot;显式端到端\u0026rdquo;——因为它同时满足了\u0026quot;可优化\u0026quot;和\u0026quot;可解释、可兜底\u0026quot;这两个落地刚需。\nUniAD 的价值，在于它不只是\u0026quot;一个跑得好的模型\u0026quot;，而是给整个领域立了一根旗杆：从此大家讨论端到端自动驾驶，都会以它为坐标系的原点。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/uniad-%E7%AB%AF%E5%88%B0%E7%AB%AF%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6%E6%A1%86%E6%9E%B6%E7%B2%BE%E8%AF%BB/","summary":"UniAD 首次将感知、预测、规划全部统一进一个可端到端联合训练的网络，以规划为最终目标反向驱动所有中间任务。它开创了显式端到端新范式，每个模块输出可解释的中间表示，并通过规划导向的联合优化全面提升系统一致性。获 CVPR 2023 最佳论文奖，是自动驾驶端到端路线里程碑式的奠基工作。","title":"论文精读｜UniAD：面向规划的端到端自动驾驶框架（CVPR 2023最佳论文）"},{"content":"\n什么是\u0026quot;端到端\u0026quot;？ 端到端 = 传感器输入直接到控制输出，中间没有人工设计的模块边界\n传统：感知 → 预测 → 规划 → 控制（四个独立模块，各管各的）\n端到端：摄像头/雷达 → 一个网络搞定 → 方向盘/油门/刹车\n\u0026ldquo;端\u0026quot;指的是输入端（传感器）和输出端（控制），\u0026ldquo;端到端\u0026quot;就是从输入直接到输出，一以贯之。严格来说，端到端自动驾驶希望用一个统一的神经网络，直接把多视角图像、激光雷达点云等原始信号，映射成车辆的控制指令（轨迹点、方向盘转角、油门刹车）。\n需要注意的是，现实工业落地里的\u0026quot;端到端\u0026quot;是一个相对概念：从最纯粹的\u0026quot;图像到方向盘\u0026quot;到保留部分任务结构（感知、规划）的方案，都可以被叫作端到端。下文我们会看到，这条光谱其实是端到端技术演进的主线。\n为什么要走向端到端？ 模块化方案的瓶颈 传统 pipeline 看似清晰，实则问题重重：\n问题 说明 误差累积 感知漏检一个目标 → 预测错 → 规划错，错误层层放大 信息瓶颈 模块间只传结构化结果（如 bbox、轨迹），丢失丰富原始信息 无法联合优化 每个模块单独训练，无法为最终目标做全局优化 计算冗余 多个模块重复提取相似特征，BEV 特征反复重算 上游误差不可回传 规划模块错了，没法反向告诉感知\u0026quot;你应该看清一点\u0026rdquo; 端到端的卖点：把所有环节揉成一个网络，朝着\u0026quot;开得安全\u0026quot;这一个唯一目标一起优化。 梯度可以从最终的规划/控制 loss 一路回传到最前面的视觉编码器，让感知为规划服务。\n端到端的三个发展阶段 🥚 阶段一：隐式端到端（Implicit E2E） 直接用一个大网络从图像回归出轨迹或控制量，网络内部不显式地做感知、预测等任务。这一阶段以早期探索为主。\n代表工作与思路：\n工作 核心做法 NVIDIA PilotNet（DAVE-2，2016） 一个小 CNN 直接从单目图像回归方向盘角度，开启\u0026quot;行为克隆\u0026quot;先河 Conditional Affordance Learning（CAC，2019） 用 affordance 中间量（车距、航向）约束网络，缓解纯回归的发散 Learning by Cheating（LBC，2019） 先用\u0026quot;特权信息\u0026quot;训教师网络，再蒸馏到只用视觉的学生网络 MP0 / Urban Driver（2022） 在向量化场景上直接做策略学习，引入 RL/IL 框架 隐式 E2E 的主要问题：\n黑盒：内部完全不可解释，出事没法定位 难训练：直接回归控制量监督信号太弱，容易陷入局部最优 效果不稳定：泛化性差，遇到没见过的场景容易\u0026quot;翻车\u0026rdquo; 但它奠定了\u0026quot;用网络直接输出动作\u0026ldquo;这一思路，是后续所有端到端工作的鼻祖。\n🏗️ 阶段二：显式端到端（Explicit E2E）—— 当下主流 网络内部保留感知、预测、规划的任务结构，但用梯度让它们联合优化。既有端到端的优势，又保留一定可解释性。核心思想是\u0026quot;任务级联合，而非模块级独立\u0026rdquo;。\n代表工作：\n模型 特点 UniAD（2023，CVPR Best Paper） 首个完整的任务级端到端框架，奠定方向 VAD（2023，ICLR 2024） 向量化的端到端，高效优雅 PARA-Drive 并行多任务 SparseDrive（2024） 稀疏化设计，提速降耗 AD-MLP / ego-MLP 简洁的轨迹回归 baseline 🚀 阶段三：生成式 / 大模型端到端 —— 前沿 引入扩散模型、VLM、世界模型，让端到端具备生成能力和推理能力。这一阶段的特征是\u0026quot;从确定性回归走向多模态分布，从纯感知映射走向带推理的决策\u0026quot;。\n代表工作：\n模型 特点 DiffusionDrive（2024） 用 Flow Matching / 扩散做多模态轨迹生成 DriveVLM VLM 驱动的端到端推理 EMMA（Wayve，2024） 多模态大模型做端到端，统一感知+规划 GoalFlow / Diffusion Planner 扩散做目标导向的轨迹生成 显式端到端三大代表作深入剖析 🏛️ UniAD：任务级端到端的奠基者 UniAD（Unified Autonomous Driving）是首个把\u0026quot;跟踪 → 在线建图 → 运动预测 → 占用预测 → 规划\u0026quot;五大任务串成一个网络的方案。它的几个关键设计：\nQuery-based 串联：所有任务通过 query 这一接口连接。Track Query 把检测/跟踪结果传给 Motion Forecasting，再传给 Occupancy，最后 Planner 通过 ego query 直接消费所有信息。 梯度贯通：规划 loss 可以一路反传到最前面的图像 backbone，感知模块\u0026quot;被迫\u0026quot;为规划服务。 辅助监督：检测、跟踪、建图、运动预测、占用都有显式监督，避免规划信号过弱导致退化。 占有预测当\u0026quot;安全网\u0026quot;：Occupancy Map 用来表达 Planner 没想到的障碍物（如静态路障），降低碰撞。 为什么 UniAD 拿了 Best Paper？因为它第一次证明了\u0026quot;端到端 + 多任务监督\u0026quot;能稳定跑通，并定义了后续两年显式 E2E 的基本范式。\n🧩 VAD：向量化带来的效率革命 UniAD 强归强，但又慢又重（推理 ~30Hz 都很勉强）。VAD（Vectorized Auto-Driving）的核心贡献是用向量化场景表示替代密集栅格化表示：\nVectorized Map / Agent：地图元素（车道线、边界）和动态目标用矢量（折线、关键点）表示，而不是稠密的栅格图。 大幅降算力：VAD-Base / VAD-Tiny 比 UniAD 快 2~4 倍，显存占用大幅下降，更适合上车。 Ego Query 规划：用一个 ego-vehicle query 与场景 query 交互，回归自车未来轨迹。 多任务辅助：保留地图矢量化、agent 矢量化的监督，帮助学到结构化场景理解。 一句话总结：VAD 把 UniAD 的\u0026quot;重任务联合\u0026quot;做到了\u0026quot;轻量可上车\u0026quot;，是显式端到端工业落地的关键一步。\n🪶 SparseDrive：把稀疏化做到极致 SparseDrive 进一步把\u0026quot;算力\u0026quot;打下来，思路是全程稀疏：\n稀疏检测：放弃稠密 BEV，用一组稀疏的 centerness query 直接在 3D 空间里检测目标。 稀疏时空预测：只对 detected agent 做运动预测，不再对每个 BEV 网格算未来。 两阶段规划：先粗规划，再用 motion planner 精修，避免一次回归不稳。 性能/效率双赢：在 nuScenes / NAVSIM 上同时拿到高规划指标和低延迟。 三者放在一起对比：\n维度 UniAD VAD SparseDrive 场景表示 密集 BEV + Query 向量化 全稀疏 速度 慢 中 快 可上车性 弱 中 强 历史地位 范式定义 工程化里程碑 极致效率 🎨 扩散模型与 DiffusionDrive 为什么用扩散做轨迹规划？ 传统规划头常用确定性回归：一个 MLP 输出一条轨迹。但真实驾驶本质是多模态的——同样的场景，你既可以刹车、也可以变道、也可以匀速绕行，没有唯一正确答案。确定性回归会出现：\n模式平均：网络把\u0026quot;刹车\u0026quot;和\u0026quot;变道\u0026quot;两条最优解平均，得到一条不合理轨迹（比如撞墙） 无法表达不确定性：只给一条线，下游无法做风险评估 扩散模型（Diffusion）天然适合多模态分布建模：采样 N 次就能得到 N 条不同的合理轨迹，再通过评分函数（碰撞、舒适度、合规性）挑最好的。\nFlow Matching 的优势 经典的 DDPM 扩散需要上百步去噪，太慢，做不了实时规划。Flow Matching（流匹配） 作为扩散的近亲，有几个明显优势：\n维度 经典扩散（DDPM） Flow Matching 采样步数 几十~上百步 几步即可 训练稳定性 受噪声调度影响大 更稳定 路径设计 固定的加噪/去噪 可学习的概率路径 理论基础 Score Matching Vector Field 回归 DiffusionDrive 的核心就是把 Flow Matching 用在轨迹生成上：\n用 条件流匹配（Conditional Flow Matching） 在 ego query 的引导下，把一个简单先验分布（如高斯）\u0026ldquo;流\u0026quot;到目标轨迹分布 一次前向能输出多模态候选轨迹 用 collision / comfort / similarity 等代价函数打分选最优 在 NAVSIM / nuPlan 上拿到 SOTA 级 PD（Progress + Distance）分数 直觉理解：扩散/Flow Matching 让规划从\u0026quot;画一条线\u0026quot;升级成\u0026quot;画一片合理的可能性云，再挑最稳的那条\u0026rdquo;。这正是端到端走向不确定性感知的关键一步。\n📊 Loss 设计与训练策略 多任务 Loss 权衡 显式 E2E 同时优化多个任务，loss 形式通常长这样：\nL_total = w_plan * L_planning + w_det * L_detection + w_track * L_tracking + w_map * L_mapping + w_motion * L_motion + w_occ * L_occupancy 关键难点：这些 loss 的量级、收敛速度差异巨大。规划 loss 几米、检测 loss 几十、占用 loss 几百，直接相加会被某一项主导。常用解法：\nUncertainty Weighting（Kendall et al.）：让网络自动学习每个任务的权重，与任务的同方差不确定性挂钩。 GradNorm / DWA：动态调节权重，让各任务梯度量级平衡。 分阶段训练：先预训练感知/预测，再冻结 backbone 微调规划（curriculum 思路）。 规划 loss 本身通常包含：\nL2 / ADE / FDE：与人类驾驶轨迹的位移误差 碰撞惩罚：与动态/静态障碍物的碰撞 soft penalty 舒适度约束：jerk（急动度）、横向加速度惩罚 方向/航向一致性：避免轨迹折返 课程学习（Curriculum Learning） 从简单到复杂逐步加难度：\n直道 + 少车 → 2. 路口转弯 → 3. 拥堵变道 → 4. 极端长尾 这种渐进式训练能显著提升收敛稳定性，避免一开始就让网络在复杂场景里\u0026quot;懵掉\u0026quot;。\n数据增强 场景扰动：随机扰动周围车辆位置、速度，扩宽数据分布 时序抖动：对历史帧做时间抖动，提升时序鲁棒性 图像层增强：颜色、噪声、模糊、遮挡，模拟不同天气/光照 生成式增强：用世界模型（GAIA、DriveDreamer）合成罕见场景，弥补长尾 📈 评测体系：开环 vs 闭环 端到端怎么评？这其实是个比训练更难的问题。\n开环评测（Open-Loop） 给定数据集中的历史帧，让模型预测未来轨迹，与 ground truth 比较。常用指标：\n指标 含义 L1 / L2 误差 预测轨迹与 GT 在各时间步的位移误差（米） ADE Average Displacement Error，全程平均 FDE Final Displacement Error，终点误差 Collision Rate 与已知障碍物的碰撞率（静态/动态分别算） 典型 benchmark：nuScenes Planning、NAVSIM、nuPlan。\n⚠️ 开环的核心缺陷：模型只预测一步、不实际执行，不会进入\u0026quot;我变了 → 别人也会变\u0026quot;的反应链。在开环上刷高分，不代表真的能开车。NAVSIM 引入 PD（Progress + Distance） 指标，部分缓解了\u0026quot;模型原地不动也得低分\u0026quot;的问题，是当前更合理的开环评估。\n闭环评测（Closed-Loop） 把模型放进仿真器里真正开车，与其它智能体交互。常用平台：\n仿真器 特点 CARLA 研究界主流，渲染偏游戏化，与真实差距大 nuPlan 真实日志驱动的闭环，含 reactive agents NAVSIM nuScenes 衍生，非反应式（半闭环） 私有仿真器 特斯拉、Wayve 等自建，最接近真实 闭环指标：完成率、违规率、碰撞率、舒适性、接管次数。这才是真正考验\u0026quot;能不能开\u0026quot;的评测。\n理想评测 = 开环看精度 + 闭环看行为 + 实路看长尾，三者缺一不可。\n⚠️ 端到端的四大挑战 1. 可解释性 黑盒网络出事了，没法定位是哪个环节出错。监管和安全验证很难做。\n解法思路：\n显式端到端，保留任务结构，可以分别看感知/预测/规划的中间输出 注意力可视化、 saliency map 做 post-hoc 解释 VLA / CoT（Chain-of-Thought）让模型\u0026quot;说出理由\u0026quot;，提供语言级可解释性 2. 数据需求巨大 端到端是\u0026quot;数据饥饿型\u0026quot;方案，需要海量优质驾驶数据，长尾场景几乎采不全。\n解法思路：\n世界模型生成数据补长尾（GAIA、DriveDreamer、MagicDrive） 自动标注、弱监督、半监督降低人工成本 影子模式：车上跑旧方案，收集真实触发，回灌训练 跨车队的联邦学习与数据共享 3. 安全验证 模块化系统可以逐模块做单元测试。端到端只能整体测，怎么保证它在所有场景下都安全？目前没有成熟的验证体系。\n解法思路：\n基于场景库的覆盖性测试（ODD 边界、对抗样本） 形式化验证（formal verification）的初步探索 影子模式 + 离线对比，持续监测与人类/旧策略的差异 冗余系统（safety cage / rule-based fallback）兜底关键场景 4. 训练稳定性 大网络端到端训练容易崩，学习率、loss 权衡、数据配比都需要精心调参。\n解法思路：\n课程学习从易到难 多任务 loss 自适应加权（uncertainty weighting） 分阶段训练：感知预训练 → 冻结 → 规划微调 梯度裁剪、loss scaling、混合精度训练 🔮 未来趋势：两个关键融合方向 方向一：VLM + 端到端（让系统\u0026quot;看懂\u0026quot;） 纯视觉端到端能\u0026quot;看见\u0026quot;，但不一定\u0026quot;看懂\u0026quot;。比如它识别到前方有锥桶，但不懂\u0026quot;因为施工所以要变道\u0026quot;。把 VLM/VLA 引入端到端，让系统具备语义推理能力：\nDriveVLM：VLM 做场景理解与思维链推理，输出结构化决策，再交给传统 planner 执行 EMMA：用 Gemini 类多模态大模型统一感知+规划，多任务输出 VLA 直接出动作：视觉 + 语言 → 动作，一步到位（参考 π0、OpenVLA） 这一方向最大的工程挑战是LLM 推理太慢，车端实时性要求几十毫秒响应。当前解法：蒸馏小模型、推理加速（量化、KV cache）、关键场景才上 LLM。\n方向二：世界模型 + 端到端（让系统\u0026quot;预演\u0026quot;） 世界模型给端到端装上**\u0026ldquo;想象力\u0026rdquo;**：\nModel-based Planning：策略网络在决策前，先用世界模型\u0026quot;推演\u0026quot;几个候选动作的后果，选最安全的那条（类似人类\u0026quot;三思而后行\u0026quot;） 闭环训练：世界模型当仿真器，让策略在生成的未来里学习，不再受限于固定数据集 数据飞轮：世界模型生成 → 训练策略 → 策略采集新场景 → 训练更好的世界模型 终极愿景：VLM 负责\u0026quot;理解与决策\u0026quot;，世界模型负责\u0026quot;预测与预演\u0026quot;，端到端网络负责\u0026quot;执行\u0026quot;，三者融合成一个真正像人一样开车的系统。\n🆚 三代演进对比 维度 模块化 Pipeline 显式端到端 大模型 / 生成式端到端 代表 传统方案 UniAD / VAD / SparseDrive DiffusionDrive / VLA / EMMA 场景表示 结构化中间结果 Query / 向量 / 稀疏 Token / 表征 / 多模态分布 输出 确定性轨迹 确定性轨迹 多模态轨迹分布 + 推理 优化方式 各模块独立 任务级联合优化 联合优化 + 大规模预训练 可解释性 强 中（保留任务结构） 中~强（可输出 CoT） 效果上限 次优 工程上 SOTA 潜力最大 落地难度 低 中 高（算力/数据/延迟） 🤖 从数据到策略：影子模式与持续学习 端到端上车的一个重要工程范式是影子模式（Shadow Mode）。当车辆在人类司机驾驶下运行时，端到端模型在后台\u0026quot;影子\u0026quot;运行并输出决策，但不执行。如果模型的决策和人类操作明显不同，就将这段场景标记、上传、回灌训练。这样形成的持续学习闭环：\n车队采集海量真实驾驶数据 影子模式自动挖掘模型失败场景 回灌训练修复模型短板 更新模型下发车队 重复 1-4 特斯拉 FSD V12 从纯规则（30 万行 C++代码）转向纯端到端模型，正是依靠这个闭环。数据显示，每经过一轮迭代，模型需要的人类接管次数降低约 30%。\n开环 vs 闭环的评测困境 端到端社区最大的隐忧之一是开环评测无法反映真实驾驶能力。一个典型现象：在 nuScenes 开环评测上 L2 误差达到 0.3 米的模型，在闭环 CARLA 仿真中可能只有 40% 的任务通过率。原因在于开环只测\u0026quot;预测\u0026quot;不测\u0026quot;应对\u0026quot;——模型不会因为自己过去 0.5 秒的预测偏差而进入不同的未来场景。\nNAVSIM 的 PDMS 指标 是一次重要进步：它同时测量 Progress（前进距离） 和 Distance（偏离专家轨迹程度），惩罚\u0026quot;原地不动得低分\u0026quot;的投机行为，使开环指标与闭环行为的相关性大幅提升。\n小结 端到端不是银弹，但代表了**\u0026ldquo;用数据和学习取代人工规则\u0026rdquo;的大趋势。当下最务实的路线是显式端到端**（保留任务结构，UniAD/VAD/SparseDrive 这条主线），同时向生成式 + 大模型方向探索（DiffusionDrive、VLA、世界模型融合）。\n理解了端到端的这条演进线，再回头看 VLA 和世界模型，你会发现它们正是端到端走向\u0026quot;智能化\u0026quot;的两个关键拼图——VLA 给它\u0026quot;脑子\u0026quot;，世界模型给它\u0026quot;想象力\u0026quot;。\n💡 这个系列会持续深入。下期可以聊聊具体的 loss 设计、某篇论文的实现细节，或者 NAVSIM 上怎么刷分。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E7%AB%AF%E5%88%B0%E7%AB%AF%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6%E6%BC%94%E8%BF%9B/","summary":"端到端自动驾驶将传感器输入直接映射到控制输出，消除了模块化方案中的误差累积与信息瓶颈问题。本文梳理从隐式端到端到显式端到端再到生成式大模型的三代架构演进，对比 UniAD、VAD、VLA 等代表性方案。为理解这一技术路线提供了完整的历史脉络与趋势展望。","title":"端到端自动驾驶：从模块化到一体化的演进"},{"content":"📄 论文信息 标题：DriveVLA-M0: Failure-Aware Memory Augmentation for Autonomous Driving 团队：中科院自动化所（CASIA / NLPR）× 长安科技（Chongqing Chang\u0026rsquo;an Technology） 发表：arXiv:2608.10413（2026 年 8 月）；ACM MM 2026（第 34 届 ACM 国际多媒体会议，里约热内卢） 代码：github.com/ZebinX/DriveVLA-M0 一句话总结：给 VLA 自动驾驶装上一个\u0026quot;失败记忆库\u0026quot;——离线把模型表现差的长尾场景连同路网/交互结构存进 latent memory，在线按结构相似度检索，再用解耦 LoRA 做测试时训练逐场景纠正，让模型\u0026quot;吃一堑长一智\u0026quot;。 🤔 要解决什么问题？ VLA 会\u0026quot;屡教不改\u0026quot;：同样的坑掉两次 现有 VLA 自动驾驶模型有个被忽视的通病：模型在相似场景下反复犯同样的错误。它没有能力把\u0026quot;当前处境\u0026quot;和\u0026quot;过去失败\u0026quot;关联起来——今天在这个路口没刹住，明天换个时间出现在同一个路口，它还是没刹住。\n论文从人类认知借来洞察：人之所以越开越稳，是因为大脑会把当下处境和历史错误关联起来，预测当前情境出错的概率，从而提前调整行为（Brown \u0026amp; Braver 2005, Botvinick 2001）。而现在的 VLA 模型没有\u0026quot;记忆\u0026quot;这个器官——训练完参数就固定了，上线后遇到分布偏移（新的城市、新的交通习惯）只能硬扛。\n🎯 核心问题：如何让 VLA 模型\u0026quot;记得过去的失败\u0026quot;，并在遇到相似场景时用这些失败经验纠正自己？\n为什么\u0026quot;拿语言特征当检索键\u0026quot;不够？ 直觉做法是把 VLA 的中间语言特征（F_lang）当检索键，从记忆里找相似场景——这是 MemoryVLA 等具身智能记忆系统的常见做法。但论文指出驾驶规划场景下这样检索是失灵的，因为自动驾驶决策高度依赖两类内在结构信息：\n信息类型 内容 为什么关键 动态信息（dynamic） 周围 agent 的运动、交互 决定碰撞风险（NC/TTC） 场景结构（structure） 道路拓扑、车道线、边界 决定可行驶区域（DAC/EP） 语言特征捕捉的是高层语义（\u0026ldquo;前面有辆车\u0026rdquo;），却忽略结构属性（\u0026ldquo;这车在哪个车道、路怎么拐\u0026rdquo;）。用语言特征检索，可能召回\u0026quot;语义上相关但结构上完全不同\u0026quot;的场景——这种检索对驾驶决策毫无帮助。\n💡 核心思路：记忆增强 + 测试时训练（TTT） 一句话：离线把\u0026quot;失败\u0026quot;写进记忆，在线按\u0026quot;结构\u0026quot;检索，再按场景临时微调。\nDriveVLA-M0 的关键洞察有两个：\n结构检索（Structural Retrieval）：检索键必须基于场景级结构相似度（动态 + 物理结构），而不是视觉-语言相似度； 失败感知（Failure Awareness）：记忆里只存模型表现差的场景——聚焦长尾、安全关键情境，而不是均匀采样。 整个框架分成两个阶段：\n离线（Memory Generation）：用 oracle 仿真打分器识别失败场景，把它们的中间表示（场景嵌入、轨迹簇、专家信号）写进 latent memory； 在线（Inference with TTT）：用 Retrieve Model 检索结构相似的失败案例，通过解耦 LoRA对动作解码器做测试时训练，逐场景定向纠正，最小化开销。 🎯 记忆和 TTT 的协同是关键：记忆提供\u0026quot;过去的失败经验\u0026quot;，TTT 让模型\u0026quot;临场消化\u0026quot;这些经验。二者结合，让模型在原本容易失败的场景上稳住，同时应对分布偏移——且不需要大规模重训。\n🧩 整体架构拆解（论文核心图） 图 1：DriveVLA-M0 与经典 VLA 的范式对比 🔍 图 1 怎么读？ 这张图是**\u0026ldquo;范式对比图\u0026rdquo;**，画了三种状态的对比：\n(a) 经典 VLA：图像 + 指令 → VLM 场景推理 → Action Decoder 出轨迹。模型没有记忆器官——红色轨迹是模型基于训练分布的\u0026quot;惯性选择\u0026quot;，无论之前在这个场景栽过几次跟头，它都不会吸取教训； (b) DriveVLA-M0：VLM 推理的同时，Retrieve Model 去 latent memory 里捞结构相似的失败案例，把这些案例经 LoRA 测试时训练注入 Action Decoder——注意图和 (a) 的差别就在多了中间那条\u0026quot;记忆 → 检索 → 注入\u0026quot;的通路； (c) 成绩单：左蓝右橙两个条形图分别是 Navtest 和 Navhard，DriveVLA-M0 都拔得头筹。 读图关键：(a) 到 (b) 之间不是换了模型，而是给模型加了一个\u0026quot;外挂记忆 + 检索 + 临时微调\u0026quot;的三件套。\n图 2：DriveVLA-M0 完整总装图（全文最重要的图） 🔍 图 2 怎么读？（按上下两半 + 中缝读） 这张图是全文的\u0026quot;总装图\u0026quot;，分三部分读：\n上半（[M] 离线 Memory Generation）：Base Model 在历史数据上跑推理 → oracle 打分器 PDM 评估 → 低于阈值 β 的判为失败 → 连同 Retrieve Model 提取的路网/agent 结构表示、Base Model 缓存的规划表示一起写入 latent memory。右侧的记忆池里能看到每条记忆的三元组 (k, x, y)； 下半（[I] 在线 Inference with TTT）：当前场景经 Retrieve Model 提取查询键 → 从记忆池检索结构相似案例 → Decoupled LoRA 对规划头做测试时训练（只动解码器、不动 VLM 骨干）→ 出修正后的轨迹； 中缝的联动：上半\u0026quot;写入\u0026quot;的记忆，就是下半\u0026quot;检索\u0026quot;用的记忆——同一份记忆库在离线与在线之间复用，这是\u0026quot;记忆增强\u0026quot;闭环的关键。 架构图核心读法：看\u0026quot;谁产生记忆、谁消费记忆\u0026quot;。Base Model 和 Retrieve Model 产生记忆（离线），同一个 Retrieve Model + 解耦 LoRA 消费记忆（在线）——记忆是连接两阶段的\u0026quot;缓存层\u0026quot;。\n🧩 架构讲解：输入 → 模型 → 输出 📍 架构图在这：论文的完整架构是 图 2（Figure 2）——它同时画了\u0026quot;离线写记忆\u0026quot;和\u0026quot;在线 TTT\u0026quot;两条流程，是全文总装图。下面先用一张我自己画的流程图把整体数据流讲清楚。\n① 输入是什么？（2 类） 输入 类型 作用 前视图像 I 视觉 同时进 Base Model（做场景理解与规划）和 Retrieve Model（提结构检索键） 系统指令 T / 自车状态 文本 / 向量 进 Base Model，作为语言指令与运动状态条件 ② 中间经历了什么？（离线 + 在线两条线） 离线：Base Model 出轨迹 → PDM oracle 打分 → Q(τ̂) \u0026lt; β 判失败 → 把 (k, x, y) 写进 latent memory（k=结构键、x=解码器输入、y=监督标签）； 在线：Retrieve Model 提结构键 → Trigger 按相似度门控 → 检索 top-k 失败案例 → Decoupled LoRA TTT 微调 Action Decoder → 路径感知分数融合选轨迹。 ③ 输出是什么？（1 类） 一条可执行的未来轨迹 τ̂。模型不直接回归，而是先生成 M 条候选轨迹簇 𝕋̂ ∈ ℝ^{M×8×3}，再用 Score Head 打分选出最优——失败记忆纠正的正是\u0026quot;打分器的偏好\u0026quot;，让模型从\u0026quot;不敢选\u0026quot;变\u0026quot;敢选对\u0026quot;。\n🧠 模块一：Base Model（VLM 骨干 + 两阶段解码器） 3.1 VLM Backbone：InternVL3 + Q-Former 压缩 Base Model 的视觉语言部分沿用 RecogDrive 的配方：\n骨干用 InternVL3，在大规模自动驾驶问答数据（RecogDrive 聚合的 12 个公开数据集，含 Talk2Car、SUTD、NuScenes-QA、OmniDrive 等，共 310 万 QA 对；过滤后约 77.5 万对用于 NAVSIM 训练）上做领域预训练； 前视图像 + 系统提示 → 双编码器 → 统一特征空间 → LLM 模块，取 LLM 最后一层特征 h^{-1} 作为中间场景表示。 但 h^{-1} 维度高达 2800 × 1536，直接存记忆/算注意力开销过大。因此引入 Q-Former 式压缩模块：\n$$F_{\\text{lang}} = \\mathrm{Transformer}(Q_{\\text{cmp}},\\ \\mathrm{Linear}(h^{-1}),\\ \\mathrm{Linear}(h^{-1})),$$其中可学习 query Q_cmp ∈ ℝ^{16×256}，把 h^{-1} 压成 16 个 token、256 维的紧凑特征 F_lang——约 1050 倍压缩。注意：压缩模块只在训练 Action Decoder 时联合训练，不参与 VLM 预训练。\n3.2 Action Decoder：Trajectory Head + Score Head（iPad 式） 解码器走 score-based planning 两阶段路线（iPad 范式）：\n① Trajectory Head（出候选轨迹）：先经轻量 MLP 把自车状态压成 F_ego ∈ ℝ^{1×D}，再与 F_lang 联合解码出 M 条轨迹的轨迹簇：\n$$F_{\\text{proposals}} = \\mathrm{Transformer}\\big((Q_{\\text{ego}} + F_{\\text{ego}}),\\ F_{\\text{lang}},\\ F_{\\text{lang}}\\big),$$ $$\\hat{\\mathbb{T}} = \\mathrm{MLP}(F_{\\text{proposals}}),$$其中 Q_ego 是可学习 embedding，引导 M 个多样的轨迹模式。轨迹监督用 min-over-N 的 L1 损失：\n$$\\mathcal{L}_{\\text{traj}} = \\min_{i \\in \\{1,\\dots,N\\}} \\|\\hat{\\tau}_i - \\tau^{*}\\|_1.$$min 形式鼓励轨迹多样化，保证至少一条接近人类示范。\n② Score Head（打分选优）：把轨迹簇重新编码为 F'_proposals，融合 F_lang 后为每条候选预测 K 个安全子分数（碰撞率、可行驶区域合规等）：\n$$F_{\\text{scores}} = \\mathrm{Transformer}\\big((F'_{\\text{proposals}} + F_{\\text{ego}}),\\ F_{\\text{lang}},\\ F_{\\text{lang}}\\big),$$ $$\\hat{\\mathbb{S}} = \\big\\{\\mathrm{MLP}_i(F_{\\text{scores}})\\ \\big|\\ i = 1, \\dots, K\\big\\},$$打分用 BCE，软标签来自 PDM oracle 给每条候选打的真实质量分 s_i ∈ [0,1]。得分最高的轨迹作为最终输出 τ̂。\n🎯 Base Model 的定位：它是\u0026quot;记忆系统的土壤\u0026quot;——失败场景的记忆正是围绕它的中间表示 F_lang/F_ego/𝕋̂ 构建的，TTT 也作用在它的解码器上。\n🧠 模块二：Retrieve Model（结构检索的关键，重点讲解） 📍 这是本文最重要的架构图（图 5），读懂它就懂了一半的\u0026quot;结构检索\u0026quot;思想。\n🔍 图 5 怎么读？ 这张图是 Retrieve Model 的\u0026quot;结构图\u0026quot;，按从左到右读：\n特征提取器：DINOv2（轻量预训练视觉模型）做 backbone，用 LoRA 微调——不是全量微调，只插低秩适配器； Decoupled LoRA 关键设计：把微调拆成 Map（静态）和 Agent（动态）两条 LoRA 分支，同一个输入 I 并行过两条分支，同时产出两个解耦特征： $$F_{\\text{map}}, F_{\\text{agent}} = \\mathrm{DINO}_{\\text{LoRA}}(I)$$ Map 分支捕捉静态道路结构（边界、车道线、拓扑）； Agent 分支捕捉动态 agent 上下文（前向车辆等）； 聚合与解码：每条分支经 Transformer 解码器 + 可学习 query 压成紧凑表示，再用独立的解码头输出 occupancy grid M̂_map / M̂_agent； 监督：沿用 TransFuser 的 occupancy-grid 范式，用二元交叉熵监督两张栅格图： $$\\mathcal{L}_{\\text{Retrieve}} = \\mathrm{BCE}(\\hat{\\mathcal{M}}_{\\text{map}}, \\mathcal{M}_{\\text{map}}) + \\alpha \\cdot \\mathrm{BCE}(\\hat{\\mathcal{M}}_{\\text{agent}}, \\mathcal{M}_{\\text{agent}})$$ 为什么\u0026quot;解耦\u0026quot;这么重要？ 论文用注意力可视化（图 3）证明解耦是有效的：\nMap 分支的注意力集中在路网结构上（边界、车道线），Agent 分支的注意力集中在动态目标上（前向车辆）。这让检索能\u0026quot;按需命中\u0026quot;：\n想纠正道路结构类错误（压线、偏航）→ 用 map 特征检索； 想纠正交互类错误（碰撞风险）→ 用 agent 特征检索。 而且后面 TTT 阶段会复用同一套解耦 LoRA——map 检索喂静态分支、agent 检索喂动态分支，检索和纠正\u0026quot;键值同构\u0026quot;。\n🗄️ 模块三：Memory Generation（离线写记忆） 记忆里存什么？ 每个记忆案例编码三类信息（结构 𝕄 = {(kᵢ, xᵢ, yᵢ)}）：\n符号 内容 作用 k（检索键） 静态 map 特征 F_map + 动态 agent 特征 F_agent 让在线检索\u0026quot;按结构命中\u0026quot; x（适配输入） 语言嵌入 F_lang + 自车嵌入 F_ego + 轨迹簇 𝕋̂ 作为 TTT 时解码器的输入 y（监督标签） 专家轨迹 τ + oracle 打分的轨迹簇分数 𝕊 作为 TTT 时解码器的监督 怎么判定\u0026quot;失败\u0026quot;？ 给定场景，两条支线并行：\nBase Model 跑推理：出预测轨迹 τ̂，缓存中间表示 F_lang / F_ego / 𝕋̂； Retrieve Model 提键：DINO_LoRA 提取 F_map / F_agent； Oracle 打分：把 τ̂ 放进仿真，用 PDM 打分器按 K 个安全/舒适子标准打分，聚合为 Q(τ̂) ∈ [0,1]； 阈值判定：Q(τ̂) \u0026lt; β → 记为失败场景，写入记忆： $$\\mathbb{M} \\leftarrow \\mathbb{M} \\cup \\big\\{ (F_{\\text{lang}}, F_{\\text{ego}}, \\hat{\\mathbb{T}}),\\ (F_{\\text{map}}, F_{\\text{agent}}),\\ (\\tau, \\mathbb{S}) \\big\\}$$ 去重与扩展 去重：写入前用 cosine 相似度检查记忆里是否已有足够相似的场景，防止冗余、把记忆池控制在可管理大小； 扩展：记忆可以无训练地扩容——用 SimScale 合成数据生成新失败场景直接塞进记忆（论文扩到 10K 条），在线检索到更多相关经验就能持续涨点。这是\u0026quot;记忆规模即收益\u0026ldquo;的免费扩展路径。 ⚡ 模块四：Inference with TTT（在线纠正，重点讲解） 📍 这张图（图 4）展示了 TTT 注入为什么有效——它是\u0026quot;记忆系统\u0026quot;最后一步的机制验证。\n检索（Retrieve from Memory） 在线阶段，当前前视图像 I 过 Retrieve Model 提取 F_map、F_agent 作为查询键，分别按 map 级和 agent 级检索 top-k 最相似案例。取回的 x = (F_lang, F_ego, 𝕋̂) 和 y = (τ, 𝕊) 用于微调。\nTrigger 门控：只在\u0026quot;可能翻车\u0026quot;时出手 TTT 微调不是无条件触发的——引入一个基于 cosine 相似度的二值开关：\n$$g = \\begin{cases} 1, \u0026 \\text{if } \\dfrac{F^\\top F^{*}}{\\|F\\|_2 \\|F^{*}\\|_2} \u003e \\lambda \\\\ 0, \u0026 \\text{otherwise} \\end{cases}$$F* 是从记忆里检索到的特征。只有当当前场景和某个失败案例结构足够相似（λ=0.9 最优）时才激活 TTT，否则直接返回 base 轨迹 τ̂₀。消融显示：λ 太松（0.7）会引入噪声检索、NC/TTC 反而下降；λ 太严（0.99）几乎不触发，性能掉到 89.4 甚至低于基线——\u0026ldquo;选择性适应\u0026quot;比\u0026quot;无差别微调\u0026quot;更有效。\nDecoupled LoRA TTT：低成本、场景定制 一旦触发，用 LoRA 只微调 Action Decoder 的规划头（不动 VLM 骨干）：\n采用与 Retrieve Model 同款解耦设计：map 检索的案例喂 Map（静态）LoRA 分支，agent 检索的案例喂 Agent（动态）LoRA 分支； LoRA 权重每个测试场景重新初始化——保证严格\u0026quot;场景专属\u0026quot;适应，不把上个场景的经验带过来； 微调用 AdamW，lr=2e-4，3 步即可（附录 D 显示 1 步也有 92.0+ PDMS，且对超参极鲁棒，PDMS 波动 ≤0.3）。 路径感知分数融合 微调后两条分支各自独立打分：\n道路理解类子分（如可行驶区域合规 DAC）→ 用静态 LoRA 的预测； 动态能力类子分（如碰撞避免 NC、TTC）→ 用动态 LoRA 的预测。 这种\u0026rdquo;路径感知的分数融合\u0026ldquo;贯穿整个轨迹簇选择，最终选出最优轨迹 τ̂。\n🎯 直观理解：失败案例里\u0026quot;该往哪开\u0026rdquo;（轨迹监督 τ）和\u0026quot;哪种轨迹算好\u0026quot;（分数监督 𝕊）被临时灌进解码器的 LoRA 里，等于让模型在相似场景\u0026quot;临时复习\u0026quot;怎么避坑。\n📊 实验结果 NAVSIM v1（Navtest）：VLA 阵营登顶 方法 类型 传感器 PDMS ↑ TransFuser 经典 E2E 3cam+LiDAR 83.4 GoalFlow 经典 E2E 3cam+LiDAR 90.3 Centaur 经典 E2E（TTT） 3cam 92.6 DriveSuprim 经典 E2E 3cam 93.5 AutoVLA VLA 环绕相机 89.1 ReCogDrive VLA 前视 90.8 ELF-VLA VLA 前视 91.0 DriveVLA-W0（同系） VLA 前视 90.2 DriveVLA-M0-Base VLA+记忆 前视 92.3 DriveVLA-M0-Scale（10K 记忆） VLA+记忆 前视 94.1 DriveVLA-M0-Base（92.3） 仅凭前视相机就超过所有先前 VLA，并逼近最强 E2E（含同样用 TTT 的 Centaur 92.6）； DriveVLA-M0-Scale（94.1） 用 SimScale 合成数据把记忆扩到 10K 条，不重训模型就涨到 94.1——追平最接近人类的水平。 NAVSIM v2（Navhard）：安全关键指标碾压 NAVSIMv2 是更新的伪闭环基准，多数 VLA 方法还没上榜，主要对比 E2E 强基线：\n方法 NC↑ DAC↑ DDC↑ TTC↑ EP↑ EPDMS↑ DiffusionDrive 96.8 80.3 88.2 86.1 84.5 28.9 Mimir 95.6 80.6 92.2 89.3 86.4 34.6 GTRS-Dense 98.9 91.5 98.2 90.1 94.7 45.3 DriveVLA-M0-Base 98.9 91.1 96.2 89.2 93.1 47.0 DriveVLA-M0 在 EPDMS（47.0） 上全面领先，且各项子指标更均衡——不偏科（不像 GTRS 那样某个子项极高、某个子项崩掉）。\n消融一：检索策略（结构键 vs 语言键） 检索键 NC↑ DAC↑ EP↑ TTC↑ PDMS↑ Base Model（无记忆）† 98.4 97.1 87.7 95.2 91.0 Lang（语言特征） 98.0 97.3 88.1 93.9 90.7 ↓ Map（仅静态） 98.4 97.7 89.1 94.5 91.7 Map + Agent（双结构键） 98.9 97.7 89.6 95.0 92.3 语言特征检索反而拖后腿（90.7 \u0026lt; 91.0）——证实了\u0026quot;语言特征对驾驶结构检索无效\u0026quot;的假设； map 键提升 DAC/EP（路拓扑相关），加 agent 键后 NC/EP/TTC 各 +0.5（交互相关）——解耦结构键各管一摊。 消融二：知识注入策略（离线 vs TTT） 注入方式 PDMS↑ Base Model（无记忆）† 91.0 离线后训练（失败样本训 10 epoch） 91.2 TTT 全量微调（解码器） 92.4 TTT 解耦 LoRA 92.3 离线后训练只涨 0.2——固定数据混合无法做场景特定适应（分布失配）； TTT 全量微调最高（92.4），但解耦 LoRA（92.3）几乎打平，同时把后向开销从 55.42ms 砍到 26.44ms——低秩适应在测试时能逼近全量微调。 消融三：Trigger 阈值 λ NC↑ DAC↑ EP↑ TTC↑ PDMS↑ 0.70（太松） 98.0 96.9 88.1 93.8 90.4 0.90（最优） 98.4 97.7 89.1 94.5 91.7 0.95 98.1 97.6 88.8 94.3 91.4 0.99（太严） 98.1 96.9 85.2 94.3 89.4 λ=0.9 是甜点：既覆盖足够多场景，又不让噪声检索污染。0.99 时 EP 崩到 85.2（几乎不触发），0.7 时 NC/TTC 被噪声干扰。\n效率：TTT 开销极小 组件 耗时 (ms) 检索（查询 4000 条记忆） 15.19 前向（单次推理） 30.79 后向 LoRA（TTT） 26.44 后向全量（对比） 55.42 H20 GPU + 4000 条记忆下，TTT 只增加 26.44ms 后向开销——满足车端实时部署要求。\n附录可视化 ⚖️ 与 DriveVLA-W0 的深度对比（同系接力） 这是用户最关心的部分。DriveVLA-W0 和 DriveVLA-M0 出自同一批人（CASIA）、都叫 DriveVLA、都用前视单目、都刷 NAVSIM，但走的是两条几乎相反的技术路线——一个从\u0026quot;数据\u0026ldquo;入手，一个从\u0026rdquo;记忆\u0026ldquo;入手：\n维度 DriveVLA-W0（世界模型） DriveVLA-M0（失败记忆） 一句话定位 世界模型放大数据缩放律 失败记忆 + 测试时训练 核心手段 预测未来图像，用稠密自监督喂饱骨干 检索失败场景，用 TTT 逐场景纠正 解决的问题 \u0026ldquo;监督赤字\u0026rdquo;——稀疏动作监督喂不饱大模型 \u0026ldquo;屡教不改\u0026rdquo;——相似场景反复出错、无法关联过去 监督来源 稠密（每个像素的未来帧预测） 定向（只针对失败场景的专家轨迹 + oracle 分数） 训练方式 两阶段：世界预训练（6VA）→ 动作专精（2VA） 两阶段：离线 Memory Generation → 在线 TTT 模型结构 VLM 骨干 + 世界模型（AR/Diffusion）+ MoE 动作专家 VLM 骨干 + Q-Former 压缩 + 双头解码器 + Retrieve Model + 记忆池 动作生成 Query-based / AR / Flow Matching 三种专家 Trajectory Head 出多候选 + Score Head 打分选优 部署开销 推理时世界模型旁路；MoE 把延迟降到 74.3ms 推理时多一次检索（15ms）+ 触发时 26.44ms 后向 核心收益 数据越多越强（70M 帧仍持续提升），跨域泛化 记忆越大越强（10K 记忆免费涨点），场景自适应 NAVSIMv1 PDMS 90.2（AR 专家 + best-of-N 93.0） 92.3 / 94.1（10K 记忆） NAVSIMv2 EPDMS 86.1 47.0 关键区别：监督密度 vs 记忆密度 两者本质差异可以用一句话概括：\nW0 把\u0026quot;驾驶\u0026quot;重新定义成\u0026quot;建模世界动力学\u0026rdquo;——用像素级稠密监督逼模型学世界规律，把知识存进权重；M0 把\u0026quot;驾驶\u0026quot;重新定义成\u0026quot;关联失败经验\u0026quot;——用结构检索 + TTT 在关键时刻调用历史经验，把知识存进显式记忆。\nW0 是\u0026quot;练内功\u0026quot;：不改变模型推理流程，只是训练时多一个世界模型任务，让骨干更懂世界。收益是可迁移的（换个数据集照样有用），代价是需要大规模预训练数据； M0 是\u0026quot;吃一堑长一智\u0026quot;：不改变主干训练，另建一个记忆系统 + 检索模型，在推理时按需纠正。收益是即插即用（不用动 base 模型就能涨点），代价是多一套离线记忆构建 + 在线检索开销。 为什么 M0 能反超 W0？ W0 的上限受数据曲线限制——它放大缩放律，但前提是有海量数据；M0 直接瞄准 W0 没解决的长尾失败场景，用记忆\u0026quot;精准补课\u0026quot;； M0 可以无训练扩容——记忆池从 4K 扩到 10K 不用动模型；W0 想要更强必须重新训练； 导航/指令等语义信息在 M0 里由 Base Model（RecogDrive 配方）承接，而 W0 用世界模型间接建模——M0 的语义通路更直接。 🎯 一句话对比：W0 用\u0026quot;世界模型\u0026quot;换稠密监督，M0 用\u0026quot;失败记忆\u0026quot;换场景自适应。前者赌\u0026quot;数据喂得越多越好\u0026quot;，后者赌\u0026quot;关键时刻用对经验\u0026quot;。\n📝 个人思考 这篇论文最打动我的，是它把自动驾驶的\u0026quot;经验闭环\u0026quot;第一次做成了显式模块。人类老司机的核心优势从来不是反应快，而是\u0026ldquo;我经历过这种场面\u0026rdquo;——同样的路口、同样的加塞模式，别人紧张我淡定。DriveVLA-M0 用 latent memory 把\u0026quot;经历\u0026quot;存下来，用结构检索在\u0026quot;场面相似\u0026quot;时把经历调出来，再用 TTT 临时消化——这套\u0026quot;记忆 → 检索 → 临场应用\u0026ldquo;的闭环，比单纯堆参数更贴近驾驶的本质。\n另一个值得学习的点是**\u0026ldquo;解耦\u0026quot;贯穿始终**：检索键解耦（map/agent）、TTT 分支解耦（静态/动态）、分数融合解耦（DAC 走静态、NC 走动态）。这种\u0026rdquo;把不同性质的信息交给不同通路\u0026ldquo;的设计，和 BrainWAM 的\u0026quot;动作空间协调\u0026rdquo;、WAM 系列的\u0026quot;token 隔离\u0026quot;异曲同工——自动驾驶问题本质上就是\u0026quot;结构 + 动态\u0026quot;两类信息的耦合问题。\n几个可以深入探讨的点：\n记忆的时效性：论文的记忆是静态构建的。真实驾驶中失败是随时间积累的——如果记忆能在线增量写入（今天遇到的坑，明天就能用），会不会更强？ 记忆与权重蒸馏：W0 把世界知识蒸馏进权重，M0 把失败知识存在显式记忆。两者能否融合？——用 W0 的世界模型训练出一个更强的 base，再用 M0 的记忆系统兜底长尾，可能是下一代 DriveVLA 的方向； TTT 的安全边界：LoRA 每场景重置避免了\u0026quot;串经验\u0026rdquo;，但也意味着每次触发都要花后向时间。在算力受限的车端，26.44ms 能否压缩到个位数，是量产关键。 🔗 延伸阅读 工作 与 DriveVLA-M0 的关系 DriveVLA-W0 同系前作，世界模型路线，本文主要对比对象（详见上文深度对比） ReCogDrive Base Model 的 VLM 配方来源（InternVL3 + 驾驶 QA 预训练） iPad Action Decoder 的两阶段范式来源（Trajectory + Score 双头） MemoryVLA / EchoVLA 具身智能记忆系统，本文对比\u0026quot;语言特征检索\u0026quot;的不足 Mimir / Centaur NAVSIM 上同样用 TTT 的代表工作，本文的结构检索 + LoRA 与其差异化 SimWAM / BrainWAM 同为 WAM 系列（世界模型 + 动作），本文展示\u0026quot;记忆增强\u0026quot;与\u0026quot;世界建模\u0026quot;是互补杠杆 📖 这是论文精读系列关于 DriveVLA 家族的第二篇（W0 → M0）。下一站或许就是\u0026quot;W0 的稠密监督 + M0 的失败记忆\u0026quot;的合体版本？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/drivevla-m0%E7%B2%BE%E8%AF%BB/","summary":"DriveVLA-M0 给 VLA 自动驾驶加上了\u0026rsquo;失败记忆\u0026rsquo;：离线把模型表现差的场景连同路网/交互结构特征写进 latent memory，在线用专用的 Retrieve Model 检索结构相似的失败案例，再用解耦 LoRA 做测试时训练（TTT）逐场景纠正，让模型\u0026rsquo;吃一堑长一智\u0026rsquo;。NAVSIMv1 上 94.1 PDMS、NAVSIMv2 上 47.0 EPDMS，TTT 后向开销仅 26.44ms。它与同系 DriveVLA-W0 走了完全相反的路：W0 用世界模型换\u0026rsquo;稠密监督\u0026rsquo;，M0 用失败记忆换\u0026rsquo;场景自适应\u0026rsquo;。","title":"论文精读｜DriveVLA-M0：失败感知的记忆增强，让 VLA 学会吃一堑长一智"},{"content":"📄 论文信息 标题：Vision-Language-Action Safety: Threats, Challenges, Evaluations, and Mechanisms 团队：北京大学, 新加坡国立大学, Monash 大学 arXiv：2604.23775（CC BY 4.0） 关键词：VLA 安全, 对抗攻击, 防御机制, 具身 AI 安全 一句话总结：首篇系统性 VLA 安全综述，沿攻击/防御双时间轴整理了数据投毒、对抗攻击、语义越狱等 10+ 类威胁及其防御方案，指出具身特性（物理后果、多模态攻击面、实时延迟约束）使 VLA 安全远复杂于传统 LLM 安全。 🤔 为什么要关注 VLA 安全？ VLA 模型正从实验室走向真实部署，其具身特性带来了全新的安全挑战：\n安全维度 VLA 特有挑战 传统 LLM 安全对比 物理后果 动作直接影响物理世界 仅限于数字内容 多模态攻击面 视觉+语言+状态三通道 主要是文本 实时约束 防御必须在毫秒级完成 宽松延迟容忍 错误传播 长时程轨迹中错误累积 相对独立 数据供应链 机器人数据收集过程易被污染 数据来源相对可控 📋 综述框架 该综述以两条平行的时间轴组织整个领域：\n攻击时机 训练时攻击：\n数据投毒（Data Poisoning）：在训练数据中注入恶意样本 后门攻击（Backdoor Attacks）：植入特定触发器，推理时激活恶意行为 推理时攻击：\n对抗补丁（Adversarial Patches）：在物理世界中贴对抗图案 跨模态扰动（Cross-modal Perturbations）：同时干扰视觉和语言输入 语义越狱（Semantic Jailbreaks）：用语义层面的对抗提示绕过安全约束 冻结攻击（Freezing Attacks）：让模型进入\u0026quot;不作为\u0026quot;状态 防御时机 训练时防御：\n数据清洗与验证 对抗训练 安全感知的 RLHF 推理时防御：\n输入检测与过滤 运行时监控 鲁棒推理 评估基准 综述整理了现有 VLA 安全评估基准和指标：\n基准 领域 评估维度 DriveLM-Safety 自动驾驶 对抗场景下的 QA 准确性 CARLA-Security 自动驾驶 物理对抗攻击成功率 RobotSafetyBench 机器人 操作安全与异常检测 EmbodiedAttackSuite 通用具身 跨模态攻击效果 🎯 六大部署领域的安全挑战 综述涵盖 6 个具体部署场景：\n自动驾驶：对抗补丁导致错误转向/刹车决策 服务机器人：语义越狱导致危险操作 工业机器人：数据投毒导致生产事故 医疗机器人：跨模态扰动导致手术偏差 无人机：冻结攻击导致坠毁 家庭机器人：隐私泄露与物理安全 🔑 关键发现 多视角优化比单帧攻击更有效：在自动驾驶的 6 相机设置中，同时攻击所有视角比单独攻击某一视角的迁移性高 30%+ 特征空间目标提升黑盒迁移：基于特征空间的对抗目标比基于标签的目标在黑盒场景下攻击成功率高 15-20% 文字内容嵌入图像是持久漏洞：相机图像中的印刷文字（路牌、广告牌）被替换时，VLA 模型几乎无法防御 推理时防御面临实时性瓶颈：现有检测方法在自动驾驶要求的 \u0026lt;50ms 延迟内难以完成 ⚠️ 开放问题 综述强调的几个关键未解决问题：\n具身轨迹的认证鲁棒性（Certified Robustness）：现有认证方法主要针对图像分类，无法扩展到长时程动作序列 物理可实现的防御（Physically Realizable Defenses）：理论安全的防御方案在物理世界中往往失效 安全感知训练（Safety-Aware Training）：如何将安全约束系统性地融入 VLA 训练 统一运行时安全架构：缺少端到端的 VLA 安全监控系统 标准化评估：不同领域的评估基准高度碎片化 📝 个人思考 这篇综述的价值在于它把分散在机器人、对抗机器学习、AI Alignment、自动驾驶安全四个社区的工作第一次统一到了一个框架下。对于从事 VLA 研究的同学来说，这是一份\u0026quot;安全必读清单\u0026quot;——在做 VLA 模型设计时就应考虑这些威胁，而非事后补丁。\n最让我警觉的是**\u0026ldquo;文字内容嵌入图像\u0026quot;的漏洞**。在自动驾驶中，路牌、广告牌上的文字可以被恶意替换成对抗性内容，而目前的 VLA 模型几乎无法防御。这意味着 VLA 不仅需要视觉鲁棒性，还需要语义级的鲁棒性。\n值得注意的是，这篇综述与我们的论文精读系列有很好的互补——我们读了这么多 VLA 架构论文，但几乎没有一篇深入讨论安全问题。安全是 VLA 从 Demo 走向部署的最后一道门槛。\n📖 这是论文精读系列的第 XX 篇。VLA 能力越强，安全责任越大。欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/vla%E5%AE%89%E5%85%A8%E7%BB%BC%E8%BF%B0%E7%B2%BE%E8%AF%BB/","summary":"这是首篇系统梳理 VLA 安全的综述，从攻击时机（训练时/推理时）和防御时机（训练时/推理时）两条平行轴组织文献，涵盖数据投毒、后门攻击、对抗补丁、跨模态扰动、语义越狱等威胁及对应防御，并讨论了 6 大部署领域的安全挑战。","title":"论文精读｜VLA Safety Survey：视觉-语言-动作模型安全的全面综述"},{"content":"📄 论文信息 标题：AutoVLA: A Vision-Language-Action Model for End-to-End Autonomous Driving with Adaptive Reasoning and Reinforcement Fine-Tuning 团队：UCLA（Zewei Zhou, Tianhui Cai, Bolei Zhou, Jiaqi Ma 等） 发表：NeurIPS 2025，arXiv:2506.13757 代码：github.com/ucla-mobility/AutoVLA 一句话总结：把「推理」和「动作」统一进一个自回归 VLM——轨迹被离散化成可行动作 token，简单场景快思考直出轨迹，复杂场景慢思考先 CoT 再出轨迹，最后用 GRPO 把简单场景里多余的推理「省掉」。 整体框架 图：AutoVLA 把视觉、语言、动作三个空间统一到一套自回归生成里。轨迹经 codebook 离散成动作 token，与文本 token、视觉 token 一起被 LLM 生成；推理 token 可选出现（快慢思考切换）。\n🤔 要解决什么问题？ VLA 模型用于自动驾驶有三个通病，AutoVLA 逐一对症下药：\n痛点 表现 AutoVLA 的解法 动作不可行 VLM 直接生成「左转 30 度」这种自然语言动作，常物理不可执行 把连续轨迹 token 化成离散、可行的动作 token（codebook 约束） 结构复杂 推理模块、规划模块各管各的，流水线长 推理与动作统一进同一个自回归模型，一次生成 推理太长 每个场景都走一遍长 CoT，实时性差 双思考模式 + GRPO 微调，简单场景跳过推理 核心洞察是：不是每个场景都需要深思熟虑。直行、跟车这种简单场景，直接出轨迹就好；只有施工区、非常规博弈才需要 CoT 推理。AutoVLA 想让模型「自适应」决定想不想。\n💡 核心创新一：物理动作 token 化（Action Tokenization） 这是 AutoVLA 能「直接生成轨迹」的基石。它借鉴 VQ-VAE / 轨迹聚类思路，预先用一个 codebook（动作码本） 把训练集里的真实轨迹聚成 K 个「可行动作原型」。\n连续轨迹（比如未来 8 个时刻的 x/y/θ）被量化成 codebook 里最近的那个离散 token id； 推理时模型自回归生成的就是这些动作 token，再经 codebook 查表反量化回连续轨迹； 因为 codebook 里的每个原型都来自真实人类驾驶，生成的轨迹天然物理可行，避免了「语言式动作」不可执行的问题。 关键判断：把动作变成词表里的 token，VLA 就既能「说话」也能「开车」。这和 OpenVLA / FAST tokenizer 的离散化思路一脉相承，但 AutoVLA 强调 codebook 必须保证「可行」（feasible），不是任意分箱。\n💡 核心创新二：快慢思考双模式（Dual Thinking） AutoVLA 用**有监督微调（SFT）**让同一个模型学会两种「性格」：\n快思考（Fast Thinking）：输入图像 + 指令，直接自回归生成动作 token 序列，不出任何推理文字。适合大多数常规场景，延迟低。 慢思考（Slow Thinking）：先生成一段链式推理（CoT） token（描述场景、关键物体、意图、最佳动作），再生成动作 token。适合长尾、歧义、需要反事实推理的复杂场景。 训练数据里同时有「轨迹-only」样本和「CoT + 轨迹」样本，模型在 SFT 阶段就把两种模式都学到了。推理时由一个简单的路由策略决定走哪条：复杂场景触发慢思考，简单场景走快思考。\n💡 核心创新三：GRPO 强化微调（Reinforcement Fine-Tuning） 光有双模式还不够——模型可能「不管简不简单都慢慢想」，推理又长又慢。AutoVLA 引入基于 GRPO（Group Relative Policy Optimization） 的强化微调来「逼」模型在简单场景少想：\n对每个 prompt 采样一组轨迹（含/不含 CoT），用可验证的奖励（如轨迹是否安全、PDMS 高低、是否多余推理）打分； GRPO 不依赖一个独立 critic，而是用同一组样本内的相对优劣做基线，稳定且省显存； 奖励函数同时鼓励「规划准」和「推理省」：简单场景里若模型硬走慢思考，会被扣分；复杂场景走快思考导致出错，也会被扣分。 这样训练出的模型学会了自适应推理——只在值得的场景才展开 CoT。\n这和同在博客里的 AlphaDrive / Flow-GRPO 是同一类技术（GRPO 用于驾驶策略对齐），说明 GRPO 已成为自动驾驶 VLA 后训练的事实标准之一。\n🧠 与 DriveVLA-W0 / DriveVLM 的对比 维度 AutoVLA（UCLA） DriveVLM（SJTU×NIO） DriveVLA-W0（CASIA×蔚来） 推理形式 自适应快慢思考（CoT 可选） 显式语言 CoT（描述/分析/提取/推理） 隐式预测式（世界模型预测未来） 动作生成 离散动作 token（codebook） 高层决策指导快系统出轨迹 连续（Query/AR/Flow Matching） 监督密度 稀疏（动作 + 可选 CoT） 稀疏（决策/动作） 稠密（未来图像） 关键训练 SFT 双模式 + GRPO 微调 常规 SFT 两阶段 + 世界模型稠密监督 传感器 多相机（3 cam） 多相机 单目前视 NAVSIM v1 PDMS 89.1 / 92.1（+锚点） — 93.0（AR） 三者代表 VLA 自动驾驶的三种「如何理解世界」的哲学：AutoVLA 用语言推理的可解释性 + GRPO 效率；DriveVLM 用显式 CoT；DriveVLA-W0 用稠密世界模型把监督密度拉满。AutoVLA 是 NAVSIM 上 VLA 路线的代表基线，DriveVLA-W0 论文的主要对比对象就是它。\n🧪 实验与结果 AutoVLA 在 nuPlan、nuScenes、Waymo、CARLA 四个真实/仿真基准上做了开环与闭环评测，跨数据集证明泛化。\nNAVSIM v1 榜单（VLA 路线代表）：\n方法 传感器 PDMS ↑ UniAD 6 cam 83.4 DiffusionDrive 3 cam + L 88.1 AutoVLA 3 cam 89.1 AutoVLA + 锚点 3 cam 92.1 DriveVLA-W0（AR） 1 cam 93.0 几个关键发现：\n动作 token 化有效：相比直接生成语言动作，codebook 量化后的轨迹在可行性和安全性上明显更好（碰撞率下降）。 慢思考在长尾场景立功：在需要博弈、施工的困难场景下，带 CoT 的慢思考 PDMS 显著高于快思考；常规场景两者持平。 GRPO 微调既提分又提速：强化微调后，模型在简单场景自动走快思考，平均推理 token 数下降，端到端延迟降低，同时规划指标不降反升。 闭环也 work：在 CARLA 闭环里，AutoVLA 能处理动态交互，说明「自适应推理」不只服务于开环指标。 📝 个人思考 AutoVLA 最值得借鉴的是**「推理不该是免费的」这一工程直觉。很多 VLA 工作默认「越多推理越好」，AutoVLA 用 GRPO 把推理变成一种可开关、有成本**的资源——这其实和人类驾驶一致：大部分时间靠直觉（快思考），只有陌生场景才认真分析（慢思考）。对车端部署，这种自适应比「永远深思」现实得多。\n不过它和 DriveVLA-W0 暴露了 VLA 路线的同一个软肋：监督仍然偏稀疏。AutoVLA 的监督是「动作 token + 可选 CoT」，没有世界模型那种每像素稠密信号；所以它 PDMS 上限（92.1+锚点）略低于 DriveVLA-W0 的 93.0，且依赖多相机。我个人判断：AutoVLA 的「自适应推理」与 DriveVLA-W0 的「稠密世界模型」并非互斥——前者管「想不想想、怎么想」，后者管「监督够不够密」。未来若把 GRPO 自适应推理接到世界模型稠密监督上，可能同时拿到可解释性、效率与上限。这恰好是博客里三条 VLA 主线的交汇点。\n另外，codebook 动作 token 化带来的量化误差和 DriveVLA-W0 里 AR 解码器小数据掉点如出一辙——说明「离散动作」与「连续动作」的优劣之争，本质是数据规模与表达力的权衡，和 DriveVLA-W0 发现的「解码器随数据规模反转」是同一个规律。\n🔗 延伸阅读 工作 团队 与 AutoVLA 的关系 DriveVLM SJTU × NIO 显式语言 CoT 路线，AutoVLA 慢思考的思想来源之一 DriveVLA-W0 CASIA × 蔚来 稠密世界模型路线，NAVSIM 主要对比对象，PDMS 更高 AlphaDrive — GRPO 用于驾驶策略对齐，同属强化微调范式 Flow-GRPO — 流匹配 + GRPO 驾驶策略，强化微调的另一实现 OpenDriveVLA — 结构化视觉-语言 token 自回归出轨迹，动作 token 化同类 UniAD Shanghai AI Lab BEV 端到端范式，AutoVLA 的超越对象 📖 这是 VLA 自动驾驶系列的又一篇。AutoVLA（自适应推理）与 DriveVLA-W0（稠密世界模型）看似两条路，实则都在回答「怎么让大模型既懂世界、又开得动」——欢迎留言讨论哪条更适合车端。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/autovla%E7%B2%BE%E8%AF%BB/","summary":"AutoVLA（NeurIPS 2025, UCLA）把「链式推理 CoT」与「物理动作 token 化」塞进同一个自回归生成模型，用一套代码本把连续轨迹离散成可行动作，再用 SFT 训练出快思考（只出轨迹）与慢思考（带 CoT 推理）双模式，最后用 GRPO 强化微调在简单场景关掉多余推理。它是 NAVSIM v1 上 VLA 路线的代表基线（PDMS 89.1 / 92.1+锚点），也是 DriveVLA-W0 的主要对比对象。","title":"论文精读｜AutoVLA：用自适应推理与 GRPO 微调统一「思考」与「动作」的端到端 VLA"},{"content":"📄 论文信息 标题：DriveVLA-W0: World Models Amplify Data Scaling Law in Autonomous Driving 团队：中科院自动化所（CASIA / NLPR）× 蔚来（Yinwang Intelligent Technology） 发表：arXiv:2510.12796（2025 年 10 月首发，12 月更新 v2） 代码：github.com/BraveGroup/DriveVLA-W0 一句话总结：用一个\u0026quot;预测未来画面\u0026quot;的世界模型给 VLA 大模型补上稠密监督，让海量驾驶数据真正喂得进、学得动，单目前视相机就刷新了 NAVSIM 榜单。 🤔 要解决什么问题？ 当前端到端自动驾驶有两条主流路线，各有软肋：\n路线 代表工作 优点 软肋 BEV 感知驱动 UniAD、VAD、DiffusionDrive 几何先验强、结构紧凑 难以复用非驾驶数据，规模天花板低 VLA 大模型驱动 AutoVLA、ReCogDrive、本文 模型大、潜在 Scaling 强 监督信号太稀疏 DriveVLA-W0 抓住的是 VLA 路线一个反直觉的痛点——\u0026ldquo;监督赤字\u0026rdquo;（Supervision Deficit）：你给了一个 7–8B 参数的大模型，却只用几维的未来轨迹点（waypoints）去监督它。这就好比你请了一位博士，却只让他抄写\u0026quot;左转、右转\u0026quot;。结果就是：\n大模型的表征能力严重浪费，学不出对世界的深层理解； 单纯堆数据也救不了，因为动作监督本身是稀疏的，再多的数据也只是稀疏信号的重复； 实验中甚至出现\u0026quot;大 VLA 反而打不过小 BEV 模型\u0026quot;的尴尬。 核心问题：如何给 VLA 大模型配上一个稠密的、能逼它学会世界运行规律的监督信号？答案就是——世界模型。\n换个比喻更好理解：传统动作监督像是只告诉模型\u0026quot;考试答案\u0026quot;，而世界模型监督是让模型\u0026quot;把整张卷子的解题过程都写出来\u0026quot;。前者只校验终点对不对，后者校验中间每一步对世界的理解对不对——显然后者更能逼出真正的理解力。\n💡 核心创新：世界模型作为稠密自监督 让模型\u0026quot;预见未来\u0026quot; DriveVLA-W0 的核心动作很朴素：除了预测动作，还要预测未来的图像。给定当前观测和动作，模型被要求画出\u0026quot;下一帧会是什么样子\u0026quot;。这个任务带来的是每一时刻、每个像素级的稠密监督，逼着模型去学环境的物理动力学——车往前开会看到什么、减速时景物如何变化、变道后周围车流如何重组。\n关键判断：动作是稀疏的低维信号，图像是稠密的高维信号。用图像预测去\u0026quot;放大\u0026quot;动作监督的密度，是用世界规律反哺驾驶决策。\n图1：世界模型作为 VLA 数据缩放律的催化剂。(a) 与传统 VLA 仅用动作监督不同，DriveVLA-W0 同时预测未来动作和未来图像。(b) 世界模型提供稠密监督，使模型能更好利用大规模数据的缩放律收益。\n两种世界模型实现 VLA 模型按视觉表示分为两大流派，作者为各自量身定制了世界模型。图中展示了两种架构的详细对比：\n图2：DriveVLA-W0 的整体架构。左侧 VLA 骨干处理深度交错的视觉-语言-历史动作序列。(a) AR 世界模型：将未来图像编码为离散 token，做 next-token 预测，适用于 Emu3-8B 等离散 token 骨干。(b) Diffusion 世界模型：在隐空间训练扩散模型去噪生成未来帧，适用于 Qwen2.5-VL-7B 等连续视觉特征骨干。世界模型分支在推理时被旁路，不影响实时性。\n维度 AR 世界模型（自回归） Diffusion 世界模型（扩散） 适配骨干 Emu3-8B（离散视觉 token） Qwen2.5-VL-7B（连续视觉特征） 做法 把未来图像编码成离散 token，做 next-token 预测 在隐空间训练潜扩散，去噪生成未来帧 预测目标 当前帧的视觉 token 序列 下一帧图像 $\\mathbf{I}_{t+1}$ 的潜表示 训练损失 交叉熵 $\\mathcal{L}_{\\text{WM-AR}}$ MSE 噪声预测 $\\mathcal{L}_{\\text{WM-Diff}}$ 总目标 $\\mathcal{L} = \\mathcal{L}_{\\text{Action}} + \\alpha \\mathcal{L}_{\\text{WM-AR}}$ $\\mathcal{L} = \\mathcal{L}_{\\text{Action}} + \\beta \\mathcal{L}_{\\text{WM-Diff}}$ AR 世界模型数学形式 AR 世界模型将未来图像 $\\mathbf{I}_{t+1}$ 编码为离散 token 序列 $\\{w_{t+1}^j\\}_{j=1}^{N}$，在 VLM 的因果注意力下做 next-token 预测：\n$$\\mathcal{L}_{\\text{WM-AR}} = -\\sum_{j=1}^{N} \\log p_\\theta(w_{t+1}^j \\mid \\mathbf{I}_{\\le t}, \\mathbf{A}_{\\le t}, w_{t+1}^{\u003c j})$$条件包含历史所有视觉-动作对，模型必须理解\u0026quot;我做了什么动作→世界变成什么样\u0026quot;的因果链。生成时 MoVQGAN 解码器将 token 序列渲染回像素。\nDiffusion 世界模型数学形式 对于连续视觉特征骨干 Qwen2.5-VL，Diffusion 世界模型在隐空间操作。设 $\\mathbf{z}_t = E(\\mathbf{I}_t)$ 为当前帧的潜表示，扩散过程从 $\\mathbf{z}_{t+1}$ 出发逐步加噪：\n$$q(\\mathbf{z}_{t+1}^{(k)} \\mid \\mathbf{z}_{t+1}^{(k-1)}) = \\mathcal{N}(\\sqrt{1-\\beta_k}\\,\\mathbf{z}_{t+1}^{(k-1)}, \\beta_k\\mathbf{I})$$去噪网络 $\\epsilon_\\theta$ 以历史信息为条件预测噪声：\n$$\\mathcal{L}_{\\text{WM-Diff}} = \\mathbb{E}_{k, \\epsilon \\sim \\mathcal{N}(0,\\mathbf{I})} \\left[ \\| \\epsilon - \\epsilon_\\theta(\\mathbf{z}_{t+1}^{(k)}, k, \\mathbf{I}_{\\le t}, \\mathbf{A}_{\\le t}) \\|^2 \\right]$$一个巧妙的细节：Diffusion 世界模型预测的是\u0026quot;下一帧\u0026quot;而非\u0026quot;当前帧\u0026quot;。因为条件里已经包含当前帧的全部特征，若只重建当前帧就退化成复制任务；只有预测未来，才能学到真正的预测性动力学。\n需要强调：推理时世界模型分支被旁路，只走动作通路以保证实时性；图像生成只在可视化、反事实分析时启用。所以世界模型更像一位\u0026quot;严师\u0026quot;——只在训练时逼着模型把世界学透，上车推理时并不拖慢决策。\nVLA 基线架构 在引入世界模型之前，先建立标准的 VLA 基线。基线处理三类输入：\n语言指令 $L_t$：用 VLM 原生 tokenizer 编码 前视图像 $V_t$：不同骨干有不同的视觉编码方式 历史动作 $A_{t-1}$：用 FAST tokenizer 将连续轨迹编码为离散 token 输入采用深度交错的序列格式：\n$$S_t = [L_{t-H}, V_{t-H}, A_{t-H-1}, \\dots, L_t, V_t, A_{t-1}]$$VLA 基线有两个变体：\nVLA (VQ)：基于 Emu3-8B，图像量化为离散视觉 token VLA (ViT)：基于 Qwen2.5-VL-7B，提取连续视觉特征 动作预测使用标准交叉熵损失：\n$$\\mathcal{L}_{\\text{Action}} = -\\sum_{i=1}^{L} \\log P(a_i | S_t, a_{\u003c i})$$ ⚙️ Action Expert：轻量 MoE 动作专家 大 VLM 骨干虽擅长学表征，但太重、不适合实时控制。作者引入一个仅 500M 的动作专家（Action Expert），与完整 VLA 骨干组成 MoE 架构。\n图3：DriveVLA-W0 的 MoE 架构与三种动作解码器。(a) Joint Attention 机制：VLA Expert 与 Action Expert 分别计算 Q、K、V，沿 token 维度拼接后做联合注意力，输出再拆分路由回各自专家，实现深度融合。Action Expert 仅 500M 参数。(b) Query-based 解码器：可学习 query 经注意力后用 MLP 直接回归轨迹。(c) Autoregressive 解码器：自回归预测离散动作 token。(d) Flow Matching 解码器：学向量场，从噪声沿直线路径流到真实轨迹。\nJoint Attention 数学形式 设 Understanding Expert 输出为 $\\mathbf{H}_U \\in \\mathbb{R}^{N_U \\times d}$，Action Expert 输出为 $\\mathbf{H}_A \\in \\mathbb{R}^{N_A \\times d}$，则联合注意力为：\n$$\\mathbf{Q} = [\\mathbf{H}_U\\mathbf{W}_Q^U; \\mathbf{H}_A\\mathbf{W}_Q^A] \\in \\mathbb{R}^{(N_U+N_A) \\times d}$$ $$\\mathbf{K} = [\\mathbf{H}_U\\mathbf{W}_K^U; \\mathbf{H}_A\\mathbf{W}_K^A] \\in \\mathbb{R}^{(N_U+N_A) \\times d}$$ $$\\mathbf{V} = [\\mathbf{H}_U\\mathbf{W}_V^U; \\mathbf{H}_A\\mathbf{W}_V^A] \\in \\mathbb{R}^{(N_U+N_A) \\times d}$$$$\\mathbf{O} = \\text{Softmax}\\left(\\frac{\\mathbf{Q}\\mathbf{K}^T}{\\sqrt{d}}\\right)\\mathbf{V}$$$$\\mathbf{O}_U, \\mathbf{O}_A = \\text{Split}(\\mathbf{O})$$这种对称融合让小专家能高效\u0026quot;借用\u0026quot;大骨干的丰富表征，而不必把大模型搬到控制回路里。\n三种动作解码器 作者把这套 MoE 当成\u0026quot;试验台\u0026quot;，系统对比了三种动作生成方式：\n解码器 表示 原理 训练损失 Query-based 连续 可学习 query 经联合注意力后用 MLP 直接回归轨迹 $\\mathcal{L}_1$ Autoregressive 离散 自回归预测离散动作 token（同基线） 交叉熵 Flow Matching 连续 学一个向量场，从噪声沿直线路径\u0026quot;流\u0026quot;到真实动作 MSE 三种解码器都能生成连续驾驶轨迹，但适用场景竟会随数据规模\u0026quot;反转\u0026quot;——这是后文最精彩的发现之一。\nFlow Matching 解码器推导 设 $x_0 \\sim \\mathcal{N}(0, \\mathbf{I})$ 为初始噪声，$x_1$ 为目标轨迹点。Flow Matching 定义一个概率路径 $\\psi_t(x) = (1-t)x_0 + tx_1$，向量场为：\n$$u_t(\\psi_t(x) \\mid x_1) = x_1 - x_0$$网络 $v_\\theta$ 近似该向量场，训练目标为：\n$$\\mathcal{L}_{\\text{FM}} = \\mathbb{E}_{t\\sim\\mathcal{U}[0,1], x_0\\sim\\mathcal{N}(0,\\mathbf{I}), x_1\\sim\\mathcal{D}}\\left[ \\|v_\\theta(\\psi_t(x), t, \\mathbf{c}) - (x_1 - x_0)\\|^2 \\right]$$其中 $\\mathbf{c}$ 为 VLM 骨干提供的条件特征。推理时从 $x_0$ 沿 ODE 积分 $T$ 步得到轨迹：\n$$x_{t+\\Delta t} = x_t + v_\\theta(x_t, t, \\mathbf{c}) \\cdot \\Delta t, \\quad \\Delta t = 1/T$$ 🔄 两阶段训练范式 为了让\u0026quot;先学世界、再学动作\u0026quot;的思路落地，作者设计了两阶段训练：\n阶段 输入序列 监督目标 参与模块 作用 阶段 1：世界预训练 长序列 6VA（6 组视觉-动作, 12 帧） $\\mathcal{L}_{\\text{全部}} = \\mathcal{L}_{\\text{Action}} + \\alpha\\mathcal{L}_{\\text{WM}}$ VLM 骨干 + 世界模型 + 动作头 用稠密信号喂出丰富的世界表征 阶段 2：动作专精 短序列 2VA（2 组, 4 帧） $\\mathcal{L}_{\\text{动作}} = \\mathcal{L}_{\\text{Action}}$ 仅 Action Expert 接入轻量动作专家，专攻实时出轨迹 阶段 1 详述 长序列 6VA 意味着输入窗口包含 6 组交错的视觉帧与动作 token（共 12 帧时域跨度）。在此阶段，VLM 骨干、世界模型（AR 或 Diffusion）和动作头全部可训练。总目标联合优化：\n$$\\mathcal{L}_{\\text{阶段1}} = \\underbrace{\\frac{1}{T}\\sum_{t=1}^T \\|\\hat{\\mathbf{a}}_t - \\mathbf{a}_t^*\\|_2}_{\\text{动作模仿}} + \\alpha \\cdot \\underbrace{\\mathcal{L}_{\\text{WM}}(\\hat{\\mathbf{I}}_{t+1}, \\mathbf{I}_{t+1})}_{\\text{世界建模}}$$系数 $\\alpha$ 控制两个任务的平衡——实验显示 $\\alpha=0.1$ 最优，世界模型损失权重不宜过高，否则骨干表征会过度偏向\u0026quot;生成完美未来帧\u0026quot;而牺牲动作精度。\n阶段 2 详述 阶段 2 的核心是模型瘦身：冻结或移除世界模型分支，仅保留 VLM 骨干（冻结）+ Action Expert（可训练）+ 动作解码器。输入序列缩短为 2VA（仅当前与前一帧），大大降低推理延迟：\n$$\\text{延迟} = \\begin{cases} 117.8\\,\\text{ms} \u0026 \\text{阶段 1 完整模型} \\\\ 74.3\\,\\text{ms} \u0026 \\text{阶段 2 动作专精} \\end{cases}$$PDMS 反而从 85.6 提升到 88.4——说明阶段 1 学到的世界表征已经蒸馏进骨干权重，阶段 2 去掉世界分支后，骨干依然保有丰富的动力学理解。\n这种\u0026quot;先宽泛学习、再专注行动\u0026ldquo;的策略，其哲学是先让模型成为\u0026quot;世界的理解者\u0026rdquo;，再成为\u0026quot;高效的行动者\u0026quot;。这与人类的学习过程也高度一致——先观察世界运行规律（婴儿期），再学习精细动作控制（幼儿期）。\n🧠 从\u0026quot;语言 CoT\u0026quot;到\u0026quot;预测式 CoT\u0026quot; 提到把推理引入驾驶，本系列第一篇 DriveVLM 走的是显式语言思维链：描述 ➜ 分析 ➜ 提取 ➜ 推理，用自然语言把\u0026quot;想到了什么\u0026quot;讲出来。而 DriveVLA-W0 走的是另一条路——预测式 CoT：\n看见当前 ➜ （隐式）预见未来 ➜ 生成动作\n它不输出文字推理过程，而是通过\u0026quot;预测下一帧画面\u0026quot;这件事，把对场景的因果理解压进网络权重。论文用一组反事实实验验证了这种理解是\u0026quot;接地\u0026quot;的：当显式给定一个\u0026quot;减速\u0026quot;轨迹作为条件，世界模型生成的画面里，周围景物流动明显变慢——说明模型真的理解\u0026quot;减速会让世界这样变化\u0026quot;，而非死记动作。\n消融实验给出有力佐证：用\u0026quot;视觉+动作\u0026quot;交错序列（6VA）预训练，比只用\u0026quot;视觉\u0026quot;序列（6V）的 PDMS 从 84.1 提升到 85.6。把视觉预测与自车动作绑定，模型才被迫去学因果动力学，这正是一种结构化的、非语言的\u0026quot;推理\u0026quot;。所以 CoT 在驾驶里的落地不必拘泥于文字——预测未来本身，就是一种推理。\n🧪 实验与结果 NAVSIM 基准：单相机登顶 在学术基准 NAVSIM（源自 OpenScene，聚焦安全关键场景）上，DriveVLA-W0 仅用单目前视相机，就超越了依赖多相机 + 激光雷达的强对手：\n方法（NAVSIM v1） 传感器 PDMS ↑ UniAD 6 相机 83.4 DiffusionDrive 3 相机 + LiDAR 88.1 WoTE 3 相机 + LiDAR 88.3 AutoVLA 3 相机 89.1 / 92.1（+锚点） DriveVLA-W0（AR 专家 + best-of-N） 1 相机 93.0 人类参考 — 94.8 NAVSIM v2（扩展指标 EPDMS）上同样以 86.1 超过 DiffusionDrive 的 84.5。\nNAVSIM v2 详细对比 在扩展指标的 NAVSIM v2 基准上，DriveVLA-W0 在所有维度上都展示了强竞争力，尤其是 DAC（可行驶区域合规性）达到 99.1，领先所有方法。\n方法 NC↑ DAC↑ DDC↑ TLC↑ EPDMS↑ DiffusionDrive 98.2 95.9 99.4 99.8 84.5 ARTEMIS 98.3 95.1 98.6 99.8 83.1 DriveVLA-W0 98.5 99.1 98.0 99.7 86.1 放大数据缩放律 真正的重头戏在一个 7000 万帧、100 万+片段的内部数据集（约 NAVSIM 的 680 倍）上。\n图4：世界模型解锁数据缩放的泛化能力。图(a) 展示了 NuPlan 与 NAVSIM 的动作分布差异。对于仅用稀疏动作监督的基线模型（红线），预训练反而有害——模型过拟合源域动作分布导致目标域性能下降。而对于加了世界模型的 VLA-W0（绿线），预训练变成加分项，因为学到的是可迁移的视觉表征。图(b) 展示了数据集间的视觉域相似性。\n作者对比了 70k / 700k / 70M 三档数据规模：\n模型 指标 70k → 700k 700k → 70M 总提升 VLA-VQ（无 WM） ADE ↓ -3.2% -1.1% -4.3% VLA-VQ + WM ADE ↓ -12.7% -16.1% -28.8% VLA-ViT（无 WM） ADE ↓ -2.8% -0.9% -3.7% VLA-ViT + WM ADE ↓ -6.5% -9.4% -15.9% 模型 70k → 700k 700k → 70M 总提升 VLA-VQ + WM 碰撞率↓ -8.3% -11.4% -19.7% VLA-ViT + WM 碰撞率↓ -6.1% -9.8% -15.9% 关键发现有三层：\n基线饱和：不加世界模型时，从 70k 到 700k 还有微弱提升，但从 700k 到 70M 几乎停滞——监督赤字导致缩放律提前截断。\n稠密监督撬动缩放律：加世界模型后，从 700k 到 70M 仍能取得显著收益——曲线的斜率被\u0026quot;重新撬起\u0026quot;。这意味着 VLA 的数据需求远未被满足，世界模型是释放大规模数据潜力的钥匙。\n离散 token 收益更大：VQ（离散 token）骨干从世界模型获益（ADE -28.8%）远超 ViT（连续，-15.9%），因为离散 token 的 next-token 预测天然适合世界模型任务。\n更反直觉的是泛化性：基线模型在 NuPlan 上预训练后迁到 NAVSIM 反而变差（过拟合了源域的动作分布，把 NuPlan 的驾驶习惯当成了\u0026quot;真理\u0026quot;，反而难以适应 NAVSIM 的长尾操作）；而加了世界模型的 VLA-W0 预训练反而是加分项——因为它学到的是可迁移的视觉表征，而非死记某套动作。换句话说，世界模型让模型学的是\u0026quot;世界长什么样、会怎么变\u0026quot;，这套知识在不同城市、不同数据集之间是通用的。\n动作解码器的\u0026quot;反转\u0026quot; 把同一个预训练骨干接三种解码器，在小数据（NAVSIM，10 万帧）和大数据（70M 帧）上对比，结果令人意外——出现完全的排名反转：\n解码器 小数据 PDMS 大数据 PDMS 反转幅度 Query-based（连续回归） 87.4 90.1 +2.7 Flow Matching（连续 ODE） 86.8 91.3 +4.5 Autoregressive（离散 token） 84.1 93.0 +8.9 小数据 regime：轨迹分布简单且数据量有限，连续回归方法（query-based: 87.4, flow matching: 86.8）精度优势凸显，离散 AR 受量化误差拖累仅 84.1。\n大数据 regime：海量数据下轨迹分布极其复杂多模态，AR 的强建模能力让它能捕捉更丰富的驾驶模式。从 84.1 跃升至 93.0（+8.9），不仅反超而且拉大差距。\n反转原因分析 这个\u0026quot;反转\u0026quot;有三个深层原因：\n量化误差随数据稀释：小数据下离散化的精度损失（~2-3%）无法被额外数据补偿；大数据下 AR 学会利用上下文自动补偿量化精度。\nTeacher-forced 训练效率：AR 的 teacher-forcing 让每个 token 都接受监督，训练信号密度远高于连续回归（仅轨迹端到端一个 Loss）。大数据下信号密度的优势被放大。\n分布覆盖能力：连续回归本质是\u0026quot;期望模式\u0026quot;预测，难以覆盖多模态；AR 通过 token 序列的 combinatorics 天然支持多模态轨迹生成。\n这个\u0026quot;反转\u0026quot;对行业选型极有启发：解码器的优劣不是绝对的，而是数据规模的函数——小团队用连续回归起步快；数据充裕时 AR 上限更高。\n效率 MoE 动作专家把延迟从 117.8ms 砍到 74.3ms（降到原来 63.1%），同时 PDMS 还从 85.6 涨到 88.4。又快又好，为车端实时部署扫清障碍。\n图6：延迟分析。AR Expert 和 VLA 基线的延迟随生成 token 数 L 线性增长，Flow Matching 和 Query-based 专家则保持恒定推理时间。NAVSIM 上轨迹平均 5.6 个 token，AR Expert 仅 95ms；内部数据集上平均 17.8 个 token，延迟 170ms，仍远快于基线的 240ms。\n配置 延迟 (ms) PDMS 备注 完整 VLA (7B) 117.8 85.6 世界模型 + VLM 骨干全量推理 + Action Expert (500M) 74.3 88.4 MoE 联合注意力，快 37% 且精度提升 + 量化部署 (INT8) 52.1 87.9 进一步加速，精度几乎无损 车端边缘推理 \u0026lt;100 — 满足实时性要求（100ms 以内） 与主流方法的全面对比 方法 传感器 NDS ↑ PDMS ↑ 碰撞率 ↓ 特点 UniAD 6 cam — 83.4 0.42 BEV 端到端先驱 VAD 6 cam — 84.8 0.38 矢量场景 DiffusionDrive 3 cam + LiDAR — 88.1 0.33 扩散规划 WoTE 3 cam + LiDAR — 88.3 0.32 世界模型规划 AutoVLA 3 cam — 89.1 0.30 VLA 自回归基线 AutoVLA + 锚点 3 cam — 92.1 0.28 带锚点先验 DriveVLA-W0 (查询) 1 cam — 90.1 0.29 连续回归 DriveVLA-W0 (FM) 1 cam — 91.3 0.27 Flow Matching DriveVLA-W0 (AR) 1 cam 74.1 93.0 0.24 自回归 + 世界模型 DriveVLA-W0 仅用 单目前视相机 就超越了依赖 3-6 个相机甚至激光雷达的所有方法。稠密的世界模型监督，让单目打穿了多传感器。\n消融实验 视觉-动作交错 vs 纯视觉预训练 预训练方式 微调方式 PDMS 无预训练 2VA 80.7 6V（纯视觉） 2VA 84.1 6VA（视觉+动作） 2VA 85.6 预训练中加入动作交错，PDMS 从 84.1 提升至 85.6，说明将视觉预测与自车动作绑定是因果动力学学习的关键。\n序列长度消融 预训练 微调 PDMS VA VA 83.3 2VA 2VA 84.2 6VA 2VA 85.6 更长的预训练上下文窗口带来持续收益。\n生成质量与规划性能的正相关 作者发现，世界模型的生成质量（FID）和规划性能（PDMS）之间存在强正相关：\n预训练 FID ↓ PDMS ↑ 2VA 9.847 84.1 6VA 4.610 85.6 MoVQGAN 上限 3.007 — 6VA 的生成质量（FID 4.610）远优于 2VA（FID 9.847），对应的 PDMS 也更高。这说明模型生成逼真未来图像的能力与其产生优质轨迹的能力直接相关——进一步验证了世界模型作为监督信号的有效性。\n可视化分析 图5：反事实推理——行动条件仿真。记录的地面真值中，自车保持速度直行。通过给模型一个反事实的\u0026quot;减速\u0026quot;动作作为条件，世界模型生成了截然不同的视觉结果：车辆明显减速，周围景物流动变慢。这证明模型真正理解了动作与视觉动力学之间的因果关系。\n图7：世界模型提升复杂场景中的轨迹规划质量。在交互密集场景中，TransFuser 和 VLA 基线常因缺乏场景动态预测能力而失败。VLA-W0 借助世界模型的预测能力，成功避撞。\n图8：Flow Matching 与 AR 动作专家的轨迹对比（一）。FM 专家生成的轨迹在相邻帧间出现跳跃，稳定性较差；AR 专家则生成更平滑稳定的轨迹。\n图9：Flow Matching 与 AR 动作专家的轨迹对比（二）。FM 专家再次出现不稳定现象，AR 专家表现出更一致的驾驶行为。\n图10：Flow Matching 与 AR 动作专家的轨迹对比（三）。FM 专家在某些场景中甚至偏离可行驶区域，而 AR 专家始终保持稳定。这些可视化结果与 Table 4 中的量化数据一致——大数据 regime 下 AR 的稳定性和精度远超连续方法。\n图11：失败案例分析——指令歧义。在 Y 形路口，\u0026ldquo;直行\u0026quot;指令变得模糊不清，模型无法确定走左支还是右支，最终犹豫地驶入分叉区域（红色轨迹）。这表明 NAVSIM 的离散指令集（仅左转/直行/右转）在复杂拓扑下缺乏足够粒度。\n图12：失败案例分析——动态物体预测。世界模型在复杂交叉口的多个动态物体预测上存在挑战。本例中，模型未能预见对向车辆的出现在未来帧中，导致规划器错误地执行左转，与实际来车形成冲突。这指出了精细动态物体建模是未来有价值的研究方向。\n图13：未来图像生成。世界模型展现出强大的生成逼真度，在多样化的挑战性场景（复杂交叉口、密集交通流）中生成视觉真实、上下文合理的未来画面。\n图14：反事实推理。在路边给模型一个反事实的\u0026quot;右转\u0026quot;动作作为条件，世界模型生成了车辆偏离地面真值轨迹、驶入路外的逼真画面。这验证了模型学到了底层场景几何结构，而非简单记忆训练数据。\n世界模型时间区间消融 预训练 微调 时间间隔 PDMS 6VA VA / 82.9 6VA 2VA 4s 84.3 6VA 2VA 1s 85.6 1 秒的时间间隔是最优选择。过短（VA）缺乏时序信息，过长（4s）则帧间变化过大增加预测难度。\n🔗 与 DriveVLM 的传承与进化 本系列第一篇 DriveVLM 用显式语言 CoT 把 VLM 的推理能力引入驾驶，证明了\u0026quot;理解驱动\u0026quot;比\u0026quot;感知驱动\u0026quot;更有潜力。DriveVLA-W0 沿着这条主线下一步，但走了不同的技术分支：\n维度 DriveVLM（SJTU×NIO） DriveVLA-W0（CASIA×蔚来） 推理形式 显式语言 CoT（描述/分析/提取/推理） 隐式预测式（世界模型预测未来） 核心目标 把 VLM 推理用于场景理解 给 VLA 补稠密监督、放大缩放律 架构 VLM 慢系统 + 轻量快系统（双系统） VLM 骨干 + 世界模型 + MoE 动作专家 动作输出 高层决策意图指导快系统出轨迹 端到端直接出连续轨迹 关键贡献 可解释性、长尾推理 数据缩放律、单目 SOTA 监督密度 稀疏（决策/动作） 稠密（未来图像） 两者一个重\u0026rdquo;说清楚\u0026quot;（可解释的语言推理），一个重\u0026quot;学得深\u0026quot;（稠密的世界建模）。理想形态或许是二者融合：用世界模型把表征喂饱，再叠加语言 CoT 做可解释决策——这正是自动驾驶走向\u0026quot;理解驱动\u0026quot;的两条互补路径。\n📝 个人思考 这篇论文最让我受震动的是它点破了一个反直觉的事实：大模型 + 大数据并不天然等于好效果，瓶颈往往在监督信号的密度上。一个 8B 的模型只用几维轨迹去训，就像用吸管喝大海——水很多，但喝不进来。世界模型预测未来图像，本质上是把\u0026quot;驾驶\u0026quot;这个低维任务，重新装订成\u0026quot;建模世界动力学\u0026quot;这个高维任务，让大模型的容量终于有用武之地。这背后的思想值得所有做\u0026quot;大模型落地垂直领域\u0026quot;的人借鉴：迁移的不是模型，而是要为它匹配密度的监督。\n第二个启发是关于缩放律的\u0026quot;反转\u0026quot;。多数人相信\u0026quot;模型越大越好、解码器越复杂越好\u0026quot;，但 DriveVLA-W0 揭示了两个反转：预训练可能有害（基线）、简单解码器在大数据下反超复杂解码器。这提醒我们，很多架构优劣的结论是小数据下的幻觉，真正的工程选型必须在自己业务的真实数据规模上重新验证。Flow Matching 在小数据夺冠、AR 在大数据称王——这种\u0026quot;规模依赖的优胜\u0026quot;现象，很可能在机器人、具身智能等领域同样存在。\n不过我也在思考一个问题：DriveVLA-W0 的世界模型分支，本质上是把\u0026quot;驾驶\u0026quot;重新定义成了\u0026quot;视觉生成+动作模仿\u0026quot;的多任务学习。但每多一个任务，就多一组超参数（α, β, 各阶段权重）。而这篇论文已经在用 7-8B 的骨干了，如果要扩展到 70B+，世界模型的计算开销会不会重新成为瓶颈？我认为现阶段\u0026quot;世界模型旁路\u0026quot;的设计是在 trade off 训练时耗和推理时耗，但 70B 级别的世界模型训练成本可能让很多团队望而却步。未来的方向可能是更轻量的世界模型——不是逐像素重建，而是学习场景级别的 latent dynamics（比如 Waymo 的 latent world model 方向）。\n最后，\u0026ldquo;单目前视相机超越多相机 + 激光雷达\u0026quot;这个结果，对整个自动驾驶行业是一记警钟。它说明当模型真正\u0026quot;理解\u0026quot;了世界，传感器堆料的边际收益在下降。我倾向于认为，未来的竞争重心会从\u0026quot;谁的传感器更全\u0026quot;转向\u0026quot;谁能让模型学得更深\u0026rdquo;——而世界模型/生成式预训练正是那条把数据价值最大化的路径。DriveVLA-W0 给出了一个相当硬核的起点：稠密监督，才是打开大模型驾驶智能的钥匙。\n另外，三个解码器的反转现象让我联想到一个更宏观的 pattern：在小数据 regime 下，inductive bias 更重要的方法占优（连续回归的空间平滑性）；在大数据 regime 下，表达能力更强的数据驱动方法占优（AR 的离散序列建模）。这个规律在 NLP（CNN → Transformer）、CV（ResNet → ViT）和 RL（DQN → MuZero）里反复出现。对从业者的启示是：判断一个技术方向，得先知道自己处在数据曲线的哪个位置。\n🔗 延伸阅读 工作 团队 与 DriveVLA-W0 的关系 DriveVLM SJTU × NIO 本系列首篇，语言 CoT 路线，理解驱动的\u0026quot;另一条腿\u0026quot; LAW — 先驱性地用隐式世界模型做表征学习，本文用\u0026quot;预测未来图像\u0026quot;做更直接的稠密监督 GAIA-1 / DrivingGPT Waymo 等 世界模型作为\u0026quot;数据合成器\u0026quot;路线，本文则用作\u0026quot;自监督目标\u0026quot; AutoVLA — 轨迹 token 化的自回归 VLA，本文 NAVSIM 主要对比对象 π0 Physical Intelligence 通用机器人 VLA，Flow Matching 动作头；本文系统对比了 Flow Matching 解码器 Emu3 / Qwen2.5-VL 华为 / 阿里 本文的两种 VLM 骨干（离散 token vs 连续特征） UniAD Shanghai AI Lab 本系列第三篇，BEV 端到端范式，本文的对立面与超越对象 📖 这是论文精读系列的第 4 篇。世界模型会不会成为自动驾驶的\u0026quot;下一道分水岭\u0026quot;？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/drivevla-w0%E7%B2%BE%E8%AF%BB/","summary":"DriveVLA-W0 用世界模型给 VLA 大模型补上稠密监督，解决了大参数模型仅用稀疏轨迹信号训练的\u0026rsquo;监督赤字\u0026rsquo;问题。它同时预测未来动作和未来图像，用像素级稠密监督逼模型学懂物理动力学。单目前视相机即刷新 NAVSIM 榜单，证明了\u0026rsquo;世界模型放大数据缩放律\u0026rsquo;的路线可行性。","title":"论文精读｜DriveVLA-W0：世界模型放大自动驾驶数据缩放律"},{"content":"一句话理解 Flow Matching 上图对比了 Flow Matching（OT 路径）和 Diffusion（VP/VE 路径）的生成轨迹。Flow Matching 的直线路径意味着更少的采样步数和更稳定的训练。\nFlow Matching = 学一个\u0026quot;风场\u0026quot;，让随机噪声顺着风飘到数据样本的位置。\n扩散模型（Diffusion）是先加噪再去噪，路径弯弯绕绕；Flow Matching（流匹配）则是直接学一条把噪声\u0026quot;搬\u0026quot;到数据的直线路径。路径越直，跑完这条路需要的步数就越少，训练也就越稳。这就是它近两年在图像生成、动作生成、轨迹规划里快速取代扩散头的根本原因。\n形式化地说，Flow Matching 学习的是一个速度场 $v_\\theta(x,t)$，它告诉你在时刻 $t$、位置 $x$ 处，应该沿哪个方向、以多快的速度移动，才能从噪声分布 $p_0$（通常是高斯）\u0026ldquo;流\u0026quot;到目标数据分布 $p_1$。\n🔄 从 Diffusion 说起：为什么需要 Flow Matching 要理解 Flow Matching，先得明白扩散模型\u0026quot;慢\u0026quot;在哪里。\n扩散模型的两条路径：\n前向过程：把一张干净图像逐步加高斯噪声，最后变成纯噪声。这是一个固定的、不学习的马尔可夫链。 逆向过程：训练一个网络 $v_\\theta$（或预测噪声 $\\epsilon_\\theta$）去反转这个过程，从纯噪声一步步去噪回图像。 问题出在哪？ 扩散前向过程的轨迹是弯曲的——它对应一个非线性时变的随机微分方程（SDE）。逆向去噪必须用很小的步长才能跟上这条弯路，所以经典 DDPM 要采样 1000 步，DDIM 也要 20–50 步。即便后续有 DPM-Solver、一致性模型（Consistency Model）等各种加速技巧，弯曲路径这个根因始终没消除。\nFlow Matching 的洞察： 既然路径弯曲是病根，那为什么不直接构造一条直的路径？一条直线只需要学一个平滑的速度场，推理时用大步长的 ODE solver，几步甚至一步就能走完。这就是 Flow Matching 的核心动机——它不是对扩散的修补，而是从更一般的视角重新定义生成过程，扩散只是它的一个特例。\n📐 数学直觉：向量场、ODE 与\u0026quot;流\u0026rdquo; 这一节是 Flow Matching 的数学核心，但我们会用最直白的方式讲。\n什么是向量场？ 想象一张地图，每个城市上空都插着一个小箭头，告诉你\u0026quot;如果从这里出发，该往哪个方向、以多大速度走\u0026quot;。这些布满空间的箭头集合，就叫向量场。\n在 Flow Matching 里，向量场 $v(x,t)$ 是依赖于时间 $t$ 的：同一个位置，在 $t=0$ 和 $t=0.5$ 的箭头方向可能不同。它的物理含义是——\u0026ldquo;流\u0026quot;在演化过程中，风向是会变的。\n什么是 ODE 与\u0026quot;流\u0026rdquo;？ 有了向量场，我们就能写出一个常微分方程（ODE），描述一个粒子如何随时间运动：\n$$\\frac{dx}{dt} = v_\\theta(x,t), \\quad x(0) \\sim \\mathcal{N}(0,I)$$这条公式的意思是：\u0026ldquo;粒子在每一瞬间的速度，等于向量场在当前位置和当前时刻的取值\u0026rdquo;。从 $t=0$ 的噪声点出发，顺着这个 ODE 一路积分到 $t=1$，粒子到达的位置就构成一个样本。这个由向量场定义的、把分布从 $p_0$ 推到 $p_1$ 的演化过程，就叫流（Flow）。\n用最通俗的话说： 训练阶段，网络在学\u0026quot;风怎么吹\u0026quot;；推理阶段，随机撒一把噪声粒子，让它们顺着风飘，飘到 $t=1$ 时聚集成的形状就是数据分布。\nFlow Matching 的训练目标 核心问题是：怎么训练这个向量场 $v_\\theta$？ Flow Matching 的答案是——匹配。构造一个\u0026quot;理想的风场\u0026quot; $u_t(x)$（它把噪声沿直线路径推到数据），然后让网络去逼近它：\n$$\\mathcal{L}_{FM}(\\theta) = \\mathbb{E}_{t,\\,x_t}\\left[\\,\\big\\|\\,v_\\theta(x_t,t) - u_t(x_t)\\,\\big\\|^2\\,\\right]$$其中：\n$t \\sim \\mathcal{U}(0,1)$ 是随机采样的时刻 $x_t = (1-t)\\,x_0 + t\\,x_1$ 是噪声 $x_0$ 和数据 $x_1$ 之间的线性插值（这就是\u0026quot;直线路径\u0026quot;的来源） $u_t(x_t) = x_1 - x_0$ 是沿这条直线的恒定速度 换句话说，理想的\u0026quot;风向\u0026quot;就是\u0026quot;从当前插值点指向数据点\u0026quot;的方向，网络只要学会预测这个方向即可。这个形式简单到令人惊讶——没有马尔可夫链，没有 SDE，没有繁琐的噪声调度，就是一个回归。\n🆚 Flow Matching vs Diffusion 两者都属于基于分数/速度场的生成模型，但建模哲学截然不同。\n维度 扩散模型（Diffusion） Flow Matching 前向路径形状 弯曲（非线性噪声调度） 直线（线性插值） 底层方程 SDE（含随机项） ODE（确定性） 采样步数 DDPM 1000 步，DDIM 20–50 步 几步到十几步即可 训练目标 预测噪声 $\\epsilon$ 或分数 $\\nabla\\log p$ 预测速度场 $v$ 路径可设计性 固定的加噪过程 任意可设计（条件流） 理论统一性 Flow Matching 的一个特例 更一般的框架 训练稳定性 一般 通常更稳（目标更平滑） 多模态支持 ✅ ✅（天然支持） 三个关键差异的深入解读：\n路径直 vs 弯 是最本质的差别。直线路径意味着 ODE 的曲率小，数值积分可以用大步长——这就是 Flow Matching 能用 5–10 步采样的根本原因，而 Diffusion 想做到同样质量往往要更多步。 确定性 vs 随机性 也带来工程影响。Flow Matching 的推理是一条确定性 ODE，容易缓存、容易蒸馏（把多步蒸馏成一步）；扩散的 SDE 有随机项，控制起来更复杂。 统一视角 在理论上很优雅：当 Flow Matching 的路径取特定的非线性形式时，它就退化为扩散模型。所以学界常说\u0026quot;Diffusion 是 Flow Matching 的特例\u0026quot;。 💡 一句话记忆：Diffusion 是\u0026quot;弯路慢走\u0026quot;，Flow Matching 是\u0026quot;直路快跑\u0026quot;。\n🔀 主要变体：OT-CFM 等 Flow Matching 的一个强大之处是路径和边际分布可以自由设计，由此衍生出多个变体。下面从数学直觉和工程意义两个维度，逐一拆解每个变体。\nFM（原始 Flow Matching）——理论奠基 原始 FM 的直接目标是学习一个边缘向量场 $u_t(x)$，使得沿 $u_t$ 积分能实现从噪声分布 $p_0$ 到数据分布 $p_1$ 的\u0026quot;流\u0026quot;。它的损失函数：\n$$\\mathcal{L}_{FM}(\\theta) = \\mathbb{E}_{t \\sim \\mathcal{U}(0,1),\\, x \\sim p_t} \\left[ \\|v_\\theta(x,t) - u_t(x)\\|^2 \\right]$$问题：$p_t$ 和 $u_t$ 的真实边缘分布是未知的（我们只知道数据样本 $x_1$，不知道所有 $x_t$ 的分布）。所以 FM 只是理论框架，不能直接训练。\nCFM（Conditional Flow Matching）——可训练的真正起点 CFM 解决了 FM \u0026ldquo;不可训练\u0026quot;的问题。核心思想：不直接构造边缘路径，而是以单个数据点 $x_1$ 为条件构造直线路径。对于给定的数据点 $x_1$，条件路径定义为：\n$$x_t = (1-t)\\,x_0 + t\\,x_1, \\quad u_t(x|x_1) = x_1 - x_0$$其中 $x_0 \\sim \\mathcal{N}(0,I)$ 是随机噪声。对应的条件损失：\n$$\\mathcal{L}_{CFM}(\\theta) = \\mathbb{E}_{t,\\,x_0,\\,x_1} \\left[ \\|v_\\theta(x_t,t) - (x_1 - x_0)\\|^2 \\right]$$关键洞察：虽然条件路径是以单个 $x_1$ 为条件定义的，但对所有数据点取期望后，条件路径的期望恰好等于原始 FM 想要的边缘路径：\n$$\\mathbb{E}_{x_1}[\\,u_t(x|x_1)\\,] = u_t(x)$$这就是 CFM 名字中\u0026quot;Conditional\u0026quot;的来源——以数据点为条件构造路径，但期望效果等价于原始 FM。CFM 的出现让 Flow Matching 从理论优雅变成了真正可训练的算法。所有后续变体都是以 CFM 为基础构建的。\nOT-CFM（Optimal Transport CFM）——最常用的变体 CFM 中噪声 $x_0$ 和数据 $x_1$ 是随机独立配对的。这意味着噪声点可能需要穿过其他数据点才能到达目标位置，路径不是最优的。OT-CFM 的改进：用最优传输将 $x_0$ 和 $x_1$ 配对——找一个一一映射 $\\pi$，使得 $\\sum \\|x_0 - \\pi(x_0)\\|^2$ 最小。直观理解：\nCFM（随机配对）：100 个人在 A 点，100 辆出租车在 B 点，随机上车 → 有人要走很远才能到车的位置 OT-CFM（最优传输）：100 个人在 A 点，100 辆出租车在 B 点，全局调度让第 $i$ 近的人上第 $i$ 近的车 → 所有人的平均路程最短 配对后 $x_0$ 和 $x_1$ 之间的路径更短更直，训练时梯度方向更一致，收敛更快。在实际项目中，OT-CFM 是默认选择（Stable Diffusion 3、Bagel 都使用它）。\nRectified Flow（整流流）——追求一步生成 Rectified Flow 走了一条不同且极具实用价值的路。它的核心是一个 \u0026ldquo;拉直 → 重训 → 再拉直\u0026rdquo; 的迭代过程：\n训练：用 CFM 训练一个流量模型 $v_\\theta^{(1)}$ 整流（Rectify）：用训练好的模型生成一批配对 $(x_0, x_1)$——噪声 $x_0$ 沿学到的路径走到终点 $\\hat{x}_1$。用这些新配对 $(x_0, \\hat{x}_1)$ 取代原始数据配对 重训：用整流后的配对重新训练一个模型 $v_\\theta^{(2)}$ 迭代：重复上述过程，每次整流后路径都更接近直线 为什么这有效？第一次训练时路径是直的（线性插值），但模型预测有误差，实际轨迹略有弯曲。整流后的新配对把\u0026quot;起点\u0026quot;和\u0026quot;终点\u0026quot;直接连起来，第二次训练的路径就比第一次更直。迭代几次后，路径接近完美直线，模型可以做到一步生成（从 $x_0$ 直接跳到 $x_1$，不需要中间步）。\nRectified Flow 的工程价值巨大：一步生成意味着推理延迟从\u0026quot;多步迭代\u0026quot;降到\u0026quot;单次前向\u0026rdquo;，对实时性敏感的应用（自动驾驶、机器人控制）意义非凡。\nStochastic FM（随机流匹配）——在 ODE 中加回随机性 纯 ODE 的 Flow Matching 是确定性的——同一个噪声必然生成同一个结果。这会损失样本多样性。Stochastic FM 在 ODE 的每一步注入适量噪声：\n$$\\mathrm{d}x = v_\\theta(x,t)\\,\\mathrm{d}t + \\sigma(t)\\,\\mathrm{d}w$$其中 $\\mathrm{d}w$ 是维纳过程增量，$\\sigma(t)$ 控制噪声强度。这实际上把 ODE 重新变成了 SDE，兼顾了：\n确定性近似（$\\sigma=0$）：快速稳定的生成 随机采样（$\\sigma\u003e0$）：多样化的生成结果，避免 mode collapse 在 Flow-GRPO 的推理代码中，noise_level 参数就控制这个 $\\sigma(t)$：noise_level=0 退化为纯 ODE，noise_level=0.8 是常见的 SDE 折中值。\n变体选择指南 变体 选型场景 核心优缺点 CFM 教学、最小实现 最简单的可训练形式，但路径非最优 OT-CFM 生产环境（默认推荐） 训练最快最稳，路径最短 Rectified Flow 需要超快推理（一步生成） 迭代训练开销大，但推理极快 Stochastic FM 追求样本多样性 牺牲部分速度换取多样性 实践建议：先用 OT-CFM 快速出效果；推理延迟要求苛刻时升级到 Rectified Flow；需要探索多样性时开启 Stochastic FM 的噪声注入。\n💻 真实项目代码讲解：Bagel / Flow-GRPO 下面所有代码节选自 ByteDance-Seed/BAGEL（一个全模态理解+生成的 VLM）以及 Flow-GRPO 扩展。这是目前最完整的将 Flow Matching 融入 LLM 做生成的工业级实现，比伪代码有营养得多。\n模型架构概览 Bagel 模型是一个\u0026quot;通才\u0026quot;——它用一个 Qwen2 LLM 做骨干，同时支持视觉理解（SIGLIP ViT 编码图像）和视觉生成（Flow Matching 解码图像）。生成部分的核心组件：\n关键配置（BagelConfig）：\nclass BagelConfig(PretrainedConfig): def __init__( self, visual_gen=True, # 开启 Flow Matching 生成 visual_und=True, # 开启视觉理解 llm_config=None, # Qwen2 config vit_config=None, # SIGLIP config vae_config=None, # VAE config（输出 latent） latent_patch_size=2, # 每个 latent patch 的尺寸 max_latent_size=32, # 最大 latent 网格 timestep_shift=1.0, # timestep 偏移（推理时常用 3.0） ... ) 训练阶段：真正的 Flow Matching 前向 训练时，模型接收 VAE 编码后的 latent、文本 token、以及随机 timestep，经过 LLM 后预测速度场。代码如下（Bagel.forward 视觉生成部分）：\n# ----------------------------------------------------------- # Step 1: 从 VAE latent 构造干净的 packed_latent # ----------------------------------------------------------- p = self.latent_patch_size # 通常为 2 packed_latent = [] for latent, (h, w) in zip(padded_latent, patchified_vae_latent_shapes): # VAE latent shape: [C, H, W] → reshape to patches # 把 latent 切成 p×p 的 patch，每个 patch 展平成向量 latent = latent[:, :h * p, :w * p].reshape(self.latent_channel, h, p, w, p) latent = torch.einsum(\u0026#34;chpwq-\u0026gt;hwpqc\u0026#34;, latent).reshape(-1, p * p * self.latent_channel) packed_latent.append(latent) packed_latent_clean = torch.cat(packed_latent, dim=0) # ----------------------------------------------------------- # Step 2: 采样噪声 + 线性插值（CFM 核心） # ----------------------------------------------------------- noise = torch.randn_like(packed_latent_clean) # x₀: 高斯噪声 packed_timesteps = torch.sigmoid(packed_timesteps) # t: 0→1 的 timestep # timestep shift: 让模型在 t 接近 0 时\u0026#34;看得更细\u0026#34; packed_timesteps = self.timestep_shift * packed_timesteps / \\ (1 + (self.timestep_shift - 1) * packed_timesteps) # x_t = (1-t) * x₀ + t * x₁ 直线插值 packed_latent = (1 - packed_timesteps[:, None]) * packed_latent_clean \\ + packed_timesteps[:, None] * noise # ----------------------------------------------------------- # Step 3: 把 latent patch 映射到 LLM 隐空间 + 加 timestep/位置编码 # ----------------------------------------------------------- packed_timestep_embeds = self.time_embedder(packed_timesteps) latent_token_pos_emb = self.latent_pos_embed(packed_latent_position_ids) # vae2llm: Linear 把 patch 投影到 hidden_size packed_latent = self.vae2llm(packed_latent) \\ + packed_timestep_embeds + latent_token_pos_emb # 插入到 packed_sequence 的对应位置（与文本 token 拼接） packed_sequence[packed_vae_token_indexes] = packed_latent # ----------------------------------------------------------- # Step 4: 过 LLM backbone，得到隐状态 # ----------------------------------------------------------- last_hidden_state = self.language_model(packed_sequence=packed_sequence, ...) # ----------------------------------------------------------- # Step 5: 预测速度场 + MSE loss # ----------------------------------------------------------- packed_mse_preds = self.llm2vae(last_hidden_state[mse_loss_indexes]) # 注意这里的 target 方向：x₁ - x₀ 即\u0026#34;从数据指向噪声\u0026#34; # （与论文中 u_t = x₁ - x₀ 一致，符号取决于路径定义方向） target = noise - packed_latent_clean has_mse = packed_timesteps \u0026gt; 0 mse = (packed_mse_preds - target[has_mse]) ** 2 和伪代码的区别： 真实代码里多了timestep shift（把 timestep 重新分布）和patchify（把 dense latent 切成 patch 序列以适配 LLM 的 token 输入格式）。核心逻辑 (1-t)*x₀ + t*x₁ 和 MSE loss 是完全一致的。\nTimestep 编码：正弦位置嵌入 Flow Matching 的 $t$ 是连续浮点数，需要编码成向量才能送入网络。真实实现使用了 DiT 式正弦编码：\nclass TimestepEmbedder(nn.Module): def __init__(self, hidden_size, frequency_embedding_size=256): super().__init__() self.mlp = nn.Sequential( nn.Linear(frequency_embedding_size, hidden_size), nn.SiLU(), nn.Linear(hidden_size, hidden_size), ) @staticmethod def timestep_embedding(t, dim, max_period=10000): half = dim // 2 freqs = torch.exp( -math.log(max_period) * torch.arange(start=0, end=half, dtype=torch.float32) / half ).to(device=t.device) args = t[:, None].float() * freqs[None] embedding = torch.cat([torch.cos(args), torch.sin(args)], dim=-1) return embedding def forward(self, t): t_freq = self.timestep_embedding(t, self.frequency_embedding_size) t_emb = self.mlp(t_freq) # 256 → hidden_size return t_emb timestep_shift 是一个容易被忽视但很重要的技巧。原始的 timestep $t$ 均匀分布在 $[0,1]$，但实际生成时 $t$ 靠近 0 的步（细节塑造）比靠近 1 的步（轮廓布局）需要更多分辨率。shift 公式 shift * t / (1 + (shift-1) * t) 会把更多步压缩到细节区域，shift=3.0 是常见的经验值。\n推理阶段（1）：ODE 求解 + SDE 噪声注入 Flow Matching 推理的金标准不是纯 ODE 而是带噪声注入的 SDE——每一步在预测方向上加适量随机性，兼顾确定性和多样性。核心 step 实现：\ndef _sde_step_with_logprob(self, model_output, timestep, prev_timestep, d_timestep, sample, prev_sample=None, noise_level=0.8): model_output = model_output.float() sample = sample.float() # 计算当前步的噪声标准差 # std_dev_t = sqrt(t / (1 - t\u0026#39;)) * noise_level # 其中 t\u0026#39; = max(sigma_max, t) 防止除零 std_dev_t = torch.sqrt( timestep / (1 - torch.where(timestep == 1, sigma_max, timestep)) ) * noise_level # 预测下一步均值（Euler 步 + 噪声修正项） # x_{t-1} = x_t*(1 + σ²/(2t)*dt) + v_t*(1 + σ²*(1-t)/(2t))*dt # 当 noise_level=0 时退化为纯 Euler: x_{t-1} = x_t + v_t * dt prev_sample_mean = ( sample * (1 + std_dev_t**2 / (2 * timestep) * d_timestep) + model_output * (1 + std_dev_t**2 * (1 - timestep) / (2 * timestep)) * d_timestep ) if prev_sample is None: variance_noise = randn_tensor(model_output.shape, ...) prev_sample = prev_sample_mean + std_dev_t * torch.sqrt(-d_timestep) * variance_noise # log_prob 用于 RL 策略梯度（Flow-GRPO 需要） log_prob = -((prev_sample.detach() - prev_sample_mean) ** 2) \\ / (2 * (std_dev_t * torch.sqrt(-d_timestep))**2) log_prob = log_prob.mean() return prev_sample, log_prob, prev_sample_mean, std_dev_t 理解这个代码的三个层次：\nnoise_level=0 → 纯 Euler ODE，$x_{t-1} = x_t + v_t \\cdot dt$ noise_level\u0026gt;0 → 加噪声的 SDE，$x_{t-1} = \\text{mean} + \\sigma \\cdot \\epsilon$ log_prob 计算了每一步 transition 的高斯 log-probability，这是 Flow-GRPO 能做 RL 的关键——没有它就没法算策略梯度 推理阶段（2）：完整采样循环 + CFG 完整的采样循环从 $t=1$ 的纯噪声积分到 $t=0$ 的生成结果，中间可以选择性使用 Classifier-Free Guidance (CFG) 提升条件控制强度。\ndef generate_image(self, ...): x_t = packed_init_noises # 起点：纯噪声 # 准备离散 timestep 序列（从 1 → 0） timesteps = torch.linspace(1, 0, num_timesteps) # 例如 50 步 timesteps = timestep_shift * timesteps / \\ (1 + (timestep_shift - 1) * timesteps) dts = timesteps[1:] - timesteps[:-1] for i, t in enumerate(timesteps[:-1]): # ----------------------------------------------------------- # 预测速度场（含可选的 CFG） # ----------------------------------------------------------- v_t = self._forward_flow( x_t=x_t, timestep=torch.tensor([t]), cfg_text_scale=cfg_text_scale, # 文本 CFG 强度 cfg_img_scale=cfg_img_scale, # 图像 CFG 强度 ... ) # ----------------------------------------------------------- # SDE step（含可选的噪声注入） # ----------------------------------------------------------- x_t, log_prob, _, _ = self._sde_step_with_logprob( v_t, timesteps[i], timesteps[i+1], dts[i], x_t, noise_level=cur_noise_level ) return x_t # 生成结果 CFG 在 _forward_flow 中实现（简化版）：\ndef _forward_flow(self, x_t, timestep, ..., cfg_text_scale, cfg_img_scale): # 1) 条件前向（有 text/image 条件） v_t = self.llm2vae(llm_output) # 2) 无条件前向（text CFG：用空文本做条件） if cfg_text_scale \u0026gt; 1.0: cfg_text_v_t = self.llm2vae(cfg_text_llm_output) # 3) 图像无条件前向（image CFG） if cfg_img_scale \u0026gt; 1.0: cfg_img_v_t = self.llm2vae(cfg_img_llm_output) # 4) CFG 插值 + renormalization（防止 CFG 导致向量范数爆炸） # v = v_uncond + scale * (v_cond - v_uncond) v_t = cfg_text_v_t + cfg_text_scale * (v_t - cfg_text_v_t) v_t = v_t * (norm(v_t) / norm(v_t_)) # CFG-Renorm 保持速度尺度 return v_t CFG 的核心： 同时推理有条件和无条件两个分支，然后外推 v = v_uncond + s * (v_cond - v_uncond)。$s\u003e1$ 时模型会更\u0026quot;卖力\u0026quot;地满足条件，但同时速度场范数会膨胀，所以需要 renormalization 把速度尺度拉回合理范围。\n推理超参数速查 参数 作用 典型值 num_timesteps 采样步数 10–50（步数越少越快，但质量下降） cfg_text_scale 文本条件强度 4.0–8.0（1.0 = 关闭） cfg_img_scale 图像条件强度（编辑/图生图） 1.0–2.0 cfg_interval CFG 生效的 t 范围 [0, 1] 全程或 [0.4, 1] 后半段 timestep_shift 步数分布偏移 3.0（t→0 细节区域分配更多步） noise_level SDE 噪声强度 0.7–0.8（0 = 纯 ODE） 🚗 自动驾驶中的应用：多模态轨迹生成 为什么轨迹规划需要多模态？ 这是理解 Flow Matching 在自动驾驶价值的起点。考虑一个场景：前方有静止障碍物，左车道空、右车道也空。 此时合理的选择有至少两种——向左变道、向右变道。如果用普通的回归头输出一条\u0026quot;平均轨迹\u0026quot;，结果往往是压着障碍物正中间走（mode averaging），这比任何一个合理选择都更危险。\n多模态意味着输出分布有多个峰（多个合理轨迹），模型需要能表达\u0026quot;这两种选择都合理\u0026quot;，而不是强行取平均。这正是生成式模型（扩散、Flow Matching）的强项——它们输出的是一个分布，采样多次能得到不同的合理轨迹。\n代表工作：DiffusionDrive 与 Flow 头规划 工作 团队 动作头 核心特点 DiffusionDrive 华中科大等 扩散头 把规划建模成条件去噪，输出多模态轨迹分布 CTG++ CMU 条件扩散 用代价函数引导扩散，融合规则约束 GameFormer 上交等 迭代预测 多智能体博弈下的层次化轨迹预测 Flow-based Planner 多家 Flow Matching 头 用直线流路径替代扩散，采样更快 为什么 Flow Matching 在规划里比 Diffusion 更有吸引力？ 答案还是速度。规划在车端是高频任务（10 Hz 以上），扩散头的多步去噪常常是延迟瓶颈；Flow Matching 的几步 ODE 采样能让规划耗时压到一个量级的提升。此外，规划对多模态和可控性都有强需求——前者通过采样多个初始噪声得到多条轨迹，后者通过条件注入（自车状态、地图、障碍）控制生成。\n一个具体的轨迹生成例子 假设要生成未来 3 秒的轨迹（30 个时间点 × 2 维坐标，共 60 维向量）：\n噪声 $x_0$：从 60 维高斯分布采样 条件 $c$：当前自车状态、HDMap、周围障碍物编码成特征 训练：让模型学速度场 $v_\\theta(x_t, t, c)$，目标是把噪声沿直线推到真实轨迹 $x_1$ 推理：用 5 步 Euler 法积分，得到一条候选轨迹；采样多个 $x_0$ 得到多条候选轨迹，再用代价函数（碰撞、舒适度、合规）挑最优的一条下发 整个流程清晰、高效、天然多模态。\n🤖 在 VLA 中的应用：作为 Action Head 在 VLA（Vision-Language-Action）模型里，Action Head 是把 LLM 的推理结果变成连续动作的关键。Flow Matching 正在成为最强 Action Head 的代名词，代表就是 π0。\nπ0：Flow Matching 动作头的标杆 Physical Intelligence 的 π0 把 Flow Matching 用作通用机器人的动作生成头，是目前 VLA 能力的天花板之一。它的设计要点：\n骨干：PaLI/Gemma 风格的 VLM 做视觉-语言理解 动作头：一个Flow Matching 网络，以 VLM 的隐状态为条件，从噪声生成一段动作序列（action chunk） 训练：用大规模示教数据（含跨本体、跨任务）训练，损失就是上文那个简单的 MSE 流匹配损失 推理：用 ODE solver 生成一段未来 N 步动作，按需执行（action chunking） 为什么 π0 选 Flow Matching 而不是 Diffusion 或回归？\n比回归强：机器人动作高度多模态（同一个\u0026quot;把杯子放到架子上\u0026quot;有多种抓取和放置路径），回归会 mode averaging 比扩散快：机器人控制需要 10–50 Hz，Flow Matching 的少步采样对实时性更友好 比扩散稳：Flow Matching 的训练目标更平滑，大规模数据上收敛更可靠 VLA Action Head 三大流派回顾 方案 精度 速度 多模态 代表 离散化 Token 中 慢 弱 RT-2、OpenVLA 连续回归 中 快 弱 早期 SFT 头 Flow Matching 高 较快（可优化） 强 π0、π0.5 Flow Matching 正在成为高精度 VLA 动作头的事实标准。\n🔗 与 GRPO 的结合：Flow-GRPO 的真实训练代码 Flow-GRPO 是 ByteDance Bagel 项目的一个扩展，把 Flow Matching 的图像生成和 GRPO 策略优化结合起来。我们直接从实际训练代码中拆解其核心逻辑。\n核心挑战：Flow Matching 策略的 log-prob 从哪来？ GRPO 需要 $\\log p_\\theta(a)$ 计算 importance ratio。Flow Matching 的策略分布通过 ODE 定义，没有显式密度。但SDE 的每一步 transition 是高斯分布，因此整个轨迹的 log-prob 就是各步 log-prob 之和。\n在 _sde_step_with_logprob 中，我们早就埋好了 log-prob 计算：\n# transition: x_{t+1} ~ N(mean_t, σ_t²) # log p(x_{t+1} | x_t, θ) = -(x_{t+1} - mean_t)² / (2σ_t²) log_prob = -((prev_sample.detach() - prev_sample_mean) ** 2) \\ / (2 * (std_dev_t * torch.sqrt(-d_timestep))**2) log_prob = log_prob.mean() 关键洞察：Flow Matching + SDE 的每一步 transition 恰好是高斯分布，所以 log-prob 有闭式解，不需要复杂的瞬时变量替换公式。每一步的 log_prob 累加就是整条轨迹的 $\\log p_\\theta(\\text{轨迹})$。\nFlow-GRPO 训练循环 训练时，模型先生成一组候选图像（多条轨迹），用奖励模型打分，然后做 GRPO 策略更新。\nStep 1: 采样生成 + 保存中间 latent # generate_image() 中保存每一步的 latent 和 log_prob all_latents = [] # 每一步的 latent all_log_probs = [] # 每一步的对数概率 all_timesteps = [] # 对应的时间步 for i, t in enumerate(timesteps): v_t = self._forward_flow(x_t, ...) x_t, log_prob, _, _ = self._sde_step_with_logprob(v_t, ...) # 在指定窗口内保存中间结果用于 RL 训练 if i \u0026gt;= sde_timestep_begin and i \u0026lt; sde_timestep_begin + window_size: all_latents.append(x_t) all_log_probs.append(log_prob) all_timesteps.append(t) 生成完成后，把图像送入奖励模型得到标量奖励 $r$，同 prompt 的 $G$ 条轨迹做组内归一化得到 advantage $A^{(i)} = \\frac{r^{(i)} - \\bar{r}}{\\sigma_r}$。\nStep 2: 逐 timestep 做 PPO-style 策略更新 def generate_image_learn(self, sample, grpo_config, accelerator, optimizer, ...): latents = sample[\u0026#34;latents\u0026#34;] # 采样时保存的 latent 序列 prev_latents = sample[\u0026#34;prev_latents\u0026#34;] # 上一步的 latent timesteps = sample[\u0026#34;timesteps\u0026#34;] advantages = torch.clamp( sample[\u0026#34;advantages\u0026#34;], -grpo_config.train.adv_clip_max, grpo_config.train.adv_clip_max, ) for i, t in enumerate(timesteps): with accelerator.accumulate(transformer): # 用当前策略预测速度场（online） v_t = self._forward_flow(x_t=latents[i], timestep=t, ...) # 计算 log_prob（含重参数化） _, log_prob, prev_sample_mean, std_dev_t = self._sde_step_with_logprob( v_t, timesteps[i], timesteps[i+1], dts[i], latents[i], prev_sample=prev_latents[i], ... ) # KL 正则：对 reference model 也做一步推理 if grpo_config.train.beta \u0026gt; 0: v_t_ref = self._forward_flow(..., ref_model=True) _, _, prev_sample_mean_ref, _ = self._sde_step_with_logprob( v_t_ref, ... ) # ----------------------------------------------------------- # GRPO 策略梯度（核心 4 行） # ----------------------------------------------------------- ratio = torch.exp(log_prob - sample[\u0026#34;log_probs\u0026#34;][i]) unclipped_loss = -advantages * ratio clipped_loss = -advantages * torch.clamp( ratio, 1.0 - grpo_config.train.clip_range_lt, 1.0 + grpo_config.train.clip_range_gt, ) policy_loss = torch.mean(torch.maximum(unclipped_loss, clipped_loss)) # KL 散度（高斯分布的 KL 有闭式解） if grpo_config.train.beta \u0026gt; 0: kl_loss = ((prev_sample_mean - prev_sample_mean_ref) ** 2).mean() \\ / (2 * std_dev_t ** 2) loss = policy_loss + grpo_config.train.beta * kl_loss else: loss = policy_loss accelerator.backward(loss) optimizer.step() optimizer.zero_grad() 代码对应的 GRPO 公式 上面的核心 4 行代码对应 GRPO 的裁剪 surrogate 目标：\n$$L(\\theta) = -\\mathbb{E}\\left[\\min\\left(r_t(\\theta) A_t, \\text{clip}(r_t(\\theta), 1-\\epsilon, 1+\\epsilon) A_t\\right)\\right]$$其中 $r_t(\\theta) = \\frac{\\pi_\\theta(a_t|s_t)}{\\pi_{\\theta_{\\text{old}}}(a_t|s_t)} = e^{\\log p_\\theta - \\log p_{\\theta_{\\text{old}}}}$，$A_t$ 是组内归一化优势。\n和 PPO 的区别： GRPO 不用 critic network（价值网络），优势直接从组内奖励归一化得到 $$\\hat{A}_i = \\frac{r_i - \\mu_\\text{group}}{\\sigma_\\text{group}}$$。这个简化对 Flow Matching 尤其友好——不用额外训一个价值网络去逼近连续动作空间的价值函数。\n为什么 Flow + RL 特别契合自动驾驶？ 契合点 说明 多模态探索 Flow 采样天然给出多条不同轨迹，正是 RL 探索所需的样本多样性 连续动作平滑 ODE 生成的动作平滑连续，比离散 token 更适合车辆控制 奖励稀疏可处理 GRPO 的组内比较把\u0026quot;绝对奖励\u0026quot;变\u0026quot;相对优势\u0026quot;，缓解驾驶奖励极度稀疏的问题 世界模型协同 可用世界模型做 rollout 评估，无需真实路测，安全且低成本 💡 一句话理解 Flow-GRPO：用 Flow Matching 的 SDE 采样提供多模态候选轨迹 + 高斯 log-prob 闭式解，用 GRPO 的组内归一化做免价值网络策略优化。\n⚖️ 什么时候该用 Flow Matching？ 场景 推荐度 理由 多模态动作/轨迹生成 ⭐⭐⭐⭐⭐ 天然支持多峰分布 实时性要求高的生成 ⭐⭐⭐⭐⭐ 少步采样，速度远胜扩散 单模态精确回归 ⭐⭐ 杀鸡用牛刀，普通回归头更快 离散决策（如左转/右转） ⭐ 适合分类，不必用生成模型 大规模图像/视频生成 ⭐⭐⭐⭐ SD3、Meta MovieGen 都在用 高频控制（机器人/车端） ⭐⭐⭐⭐⭐ 少步采样 + action chunking 是当前最优解 ✅ 小结 记住这三个要点，就能抓住 Flow Matching 的精髓：\n本质 = 学习一个速度场 $v_\\theta(x,t)$，通过 ODE 把噪声分布\u0026quot;流\u0026quot;到数据分布，路径是直线。 优势 = 路径直 → 采样步数少；目标平滑 → 训练稳定；理论上是扩散的更一般框架。 落地 = 在自动驾驶做多模态轨迹生成（DiffusionDrive 等）、在 VLA 做连续动作头（π0）、与 GRPO 结合做偏好对齐（Flow-GRPO）。 一句话总结：Flow Matching 把生成式建模从\u0026quot;弯路慢走\u0026quot;升级为\u0026quot;直路快跑\u0026quot;，正在成为连续动作生成的事实标准，也是连接\u0026quot;模仿学习\u0026quot;和\u0026quot;强化学习\u0026quot;的关键桥梁。\n📚 延伸阅读 奠基论文：\nFlow Matching for Generative Modeling（Lipman et al., ICLR 2023）—— Flow Matching 原始论文 Stochastic Interpolants（Albergo \u0026amp; Vanden-Eijnden, 2023）—— 同期独立工作，与 FM 等价 Flow Straight and Fast: Rectified Flow（Liu et al., ICLR 2023）—— 整流流，路径拉直 Optimal Transport CFM（Tong et al., 2023）—— OT-CFM 变体 应用论文：\nπ0 / π0.5（Physical Intelligence, 2024）—— Flow Matching VLA 标杆 Diffusion Policy（Chi et al., 2023）—— 扩散动作头奠基，理解 FM 动作头的基础 DiffusionDrive（华中科大等）—— 扩散头轨迹规划 Stable Diffusion 3（Stability AI, 2024）—— Rectified Flow 用于图像生成 代码仓库（本文的代码来源）：\nByteDance-Seed/BAGEL（https://github.com/ByteDance-Seed/BAGEL）—— 全模态 VLM，含 Flow Matching 图像生成的完整工业级实现 Flow-GRPO（https://github.com/anomalyco/Flow-GRPO）—— 在 Bagel 基础上扩展 GRPO 策略优化，支持 RL 训练 博客与教程：\nLily Yang 的 Flow Matching for Generative Modeling 教程（直观图解） torchcfm（https://github.com/atong01/conditional-flow-matching）—— 官方 CFM 最小实现 HuggingFace Diffusers 库已原生支持 Flow Matching / Rectified Flow 💡 新手建议：先读 torchcfm 的最小示例（100 行就能跑通），然后在 Bagel 仓库里看实际的 bagel.py forward 函数，再回来看本文的代码讲解，会非常通透。\n💡 觉得有用？这是「知识点拆解」系列的第 4 篇，后续会继续讲强化学习（GRPO）和世界模型如何与这些生成模型协同。点个关注不迷路。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/flow-matching%E5%85%A5%E9%97%A8%E8%AF%A6%E8%A7%A3/","summary":"Flow Matching 通过直接学习从噪声到数据的直线 ODE 路径，解决了扩散模型弯曲路径导致采样步数过多的问题。本文从数学直觉出发讲解向量场、ODE 与流的核心概念，并对比 CFM、Rectified Flow、OT路径等关键变体。与普通教程不同的是，本文所有代码均来自 ByteDance Bagel / Flow-GRPO 的真实项目实现，包含 CFG 推理、SDE 采样、GRPO 策略优化等工业级代码讲解。","title":"Flow Matching 入门详解：从扩散模型到连续动作生成（含代码讲解）"},{"content":"\n📄 论文信息 标题：DLWM: Dual Latent World Models enable Holistic Gaussian-centric Pre-training in Autonomous Driving 团队：香港科技大学, 华为 arXiv：2604.00969 收录：CVPR 2026 关键词：世界模型, 3D 高斯泼溅, 自监督预训练, 占据预测, 运动规划 一句话总结：DLWM 提出双潜在世界模型的自监督预训练框架，通过高斯流引导和自车规划引导两条路径，在占据感知、4D 预测和运动规划三个任务上同时取得显著提升。 🤔 要解决什么问题？ 基于视觉的自动驾驶中，3D 场景表示的选择至关重要：\n表示方法 优点 缺点 稠密 BEV 空间连续，信息完整 计算量大，冗余高 稀疏 Query 高效，聚焦关键区域 缺乏几何细节 3D 语义高斯 稀疏且全面，兼具几何和语义 缺乏统一预训练方法 核心问题：如何为高斯中心的场景表示设计一个统一的自监督预训练框架，同时服务于占据感知、4D 预测和规划？\n💡 核心思想 DLWM 采用两阶段预训练方案：\n第一阶段：几何与语义学习 — 从多视图图像重建语义和深度图，学习 3D 高斯的上下文特征 第二阶段：双潜在世界模型 — 训练两个独立的潜在世界模型： 高斯流引导的世界模型 → 占据感知与预测 自车规划引导的世界模型 → 运动规划 ⚙️ 方法细节 第一阶段：多视图重建预训练 给定多视图图像输入，DLWM 预测 3D 语义高斯，并通过可微渲染重建多视图语义图和深度图：\n$$ \\mathcal{L}_{stage1} = \\mathcal{L}_{semantic}(\\hat{S}, S) + \\lambda \\cdot \\mathcal{L}_{depth}(\\hat{D}, D) $$其中 $\\hat{S}$ 和 $\\hat{D}$ 是重建的语义和深度图，$S$ 和 $D$ 是伪标签。这一阶段让高斯 query 学会几何和语义特征。\n第二阶段：双潜在世界模型 世界模型一：高斯流引导（Gaussian-flow-guided）\n输入：当前帧的 3D 高斯特征 任务：预测未来帧的高斯特征流 输出：用于 3D 占据感知和 4D 占据预测\n核心思想：高斯的运动天然以流的形式存在（每个高斯在三维空间中移动），因此用潜在世界模型预测高斯流的演进。\n世界模型二：自车规划引导（Ego-planning-guided）\n输入：当前帧的高斯特征 + 候选自车轨迹 任务：预测轨迹对应的未来场景演进 输出：评估不同轨迹的合理性，用于运动规划\n核心思想：如果一条轨迹会驶入前方障碍物占据的区域，世界模型应能提前预测到冲突。\n与现有方法的对比 方法 表示 预训练目标 下游任务范围 VisionPAD BEV 重建 + 时间对比学习 感知 + 规划 BEV-VAE BEV VAE 重建 规划 DLWM 3D 高斯 双潜在世界模型 感知+预测+规划 🧪 实验与结果 3D 占据感知（SurroundOcc） 方法 mIoU 说明 Baseline (scratch) 38.26 无预训练 Baseline + DLWM 39.73 (+1.47) 清晰提升 4D 占据预测（nuScenes） 方法 mIoU (1s) mIoU (2s) mIoU (avg) Baseline (scratch) 35.12 33.85 34.49 Baseline + DLWM 37.14 35.83 36.49 (+2.00) 运动规划（nuScenes） 方法 L2 (1s) ↓ L2 (3s) ↓ 碰撞率 ↓ Baseline 0.67 1.33 0.85 + DLWM (stage1 only) 0.58 1.18 0.62 + DLWM (dual WM) 0.54 1.12 0.51 L2 误差降低约 16%，碰撞率降低约 40%。\n消融实验 组件 占据 mIoU L2 (3s) 完整 DLWM 39.73 1.12 w/o 高斯流 WM 38.52 1.12 w/o 规划引导 WM 39.73 1.25 w/o 阶段1 预训练 38.15 1.21 ⚠️ 局限与未来方向 两阶段训练增加了整体训练复杂度 高斯场景表示对动态物体的建模仍有挑战 仅在 nuScenes 和 SurroundOcc 验证，需扩展到更多数据集 高斯的数量对性能的影响需要进一步 scaling 分析 📝 个人思考 DLWM 选择高斯作为场景表示是一个值得关注的方向。相比 BEV 的稠密网格和 sparse query 的隐式表示，3D 高斯同时具备了可解释性（语义+几何）和稀疏性（计算高效）。双世界模型的设计也很有工程智慧——不同下游任务需要的世界模型侧重点不同，分开训练比强行统一更合理。\n让我联想到之前读的 DriveDreamer 和 OccWorld——世界模型正从\u0026quot;用一个模型预测一切\u0026quot;走向\u0026quot;任务特定的世界模型\u0026quot;。DLWM 的双分支设计是这个趋势的一个很好的体现。\n不过两个世界模型分开训练也意味着更多的工程工作量。如果能设计一个共享大部分参数、只在预测头解耦的统一框架，可能会更优雅。\n📖 这是论文精读系列的第 XX 篇。3D 高斯正在从 NeRF 炫技走向自动驾驶的实用表示。欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/dlwm%E7%B2%BE%E8%AF%BB/","summary":"DLWM 提出双阶段自监督预训练范式：第一阶段用多视图语义和深度重建学习 3D 高斯场景表示；第二阶段训练双潜在世界模型——高斯流引导的潜在预测（占据感知/预测）和自车规划引导的潜在预测（运动规划）。在 nuScenes 上占据预测 +1.02 mIoU，规划 L2 误差降低 16%。","title":"论文精读｜DLWM：双潜在世界模型实现高斯中心的全方位预训练"},{"content":"📄 论文信息 标题：Alpamayo-R1: Bridging Reasoning and Action Prediction for Generalizable Autonomous Driving in the Long Tail arXiv：2511.00088（2025年10月，2026年1月更新 v2） 团队：NVIDIA（42+ 位作者，NVIDIA CES 2026 发布） 开源：模型权重 huggingface.co/nvidia/Alpamayo-R1-10B，推理代码 github.com/NVlabs/alpamayo 一句话总结：把 结构化因果推理链（Chain of Causation） 与 GRPO 强化学习后训练 引入 VLA 驾驶策略，让模型在长尾场景中不仅能\u0026quot;开得好\u0026quot;，还能\u0026quot;解释为什么这么开\u0026quot;。 一、动机：模仿学习的天花板与推理的必要性 当前端到端自动驾驶的主流范式是模仿学习（IL）——用海量人类驾驶数据做行为克隆。IL 让模型学会了\u0026quot;正常开车\u0026quot;，但在安全关键的长尾场景中表现脆弱。原因有两个：\n1. 监督稀疏：长尾场景（鬼探头、加塞、施工绕行等）在人类驾驶数据中占比极低，模型没有足够样本学习正确的应对方式。即便数据规模再大，长尾的分布天然是稀疏的。\n2. 因果理解缺失：IL 拟合的是行为的相关性（\u0026ldquo;这个画面 → 这个动作\u0026rdquo;），而非决策的因果性（\u0026ldquo;因为前方有行人横穿，所以减速让行\u0026rdquo;）。一旦遇到训练集中未见过的情况，模型不具备因果推理能力，很容易崩溃。\nNVIDIA 的解法思路非常明确：不试图用更多数据覆盖更多场景，而是让模型学会\u0026quot;推理\u0026quot;——在决策之前，先基于场景观测构建因果链，再驱动轨迹生成。这就是 AlpaMayo-R1 的核心设计哲学。\n二、架构总览：VLA 三组件 + 模块化设计 AlpaMayo-R1 是一个模块化的 VLA（Vision-Language-Action）模型。架构的核心哲学是模块化——可以替换任意 VLM 骨干，同时保持领域特定的视觉编码和动作解码组件。\n2.1 问题形式化 输入：历史多帧多摄图像 $o_{\\text{image}}$ + 自车运动历史 $o_{\\text{egomotion}}$\n输出：推理链 Reason + 未来 6.4s 轨迹 $\\tau$\n序列公式： $$[o_{\\text{image}}, o_{\\text{egomotion}}, \\text{Reason}, \\tau]$$每个元素都以前面的所有元素为条件。\n轨迹 $\\tau$ 包含 64 个 waypoint（10Hz 采样）： $$\\tau = \\{(x^i, y^i, \\theta_{\\text{yaw}}^i)\\}_{i=1}^{64}$$2.2 视觉编码：高效的多摄多帧处理 自动驾驶车辆通常有 6-10 个摄像头。如果每个摄像头独立编码，token 数量会线性增长，导致推理不可实时。AlpaMayo-R1 支持三种图像 tokenization 策略：\nTokenization 策略 方式 token/帧 适用 单帧单摄编码 ViT patch + 双线性下采样（448×280→160 token/图） ~1120（7摄） 默认配置 多摄联合编码 Triplane 3D 隐式编码（固定大小 288 token） 288（固定） 多摄场景 多摄视频编码 Flex 全自注意力压缩多帧多摄 可压缩至~50 极限压缩场景 其中 Triplane 方法 是一个关键创新：将多摄图像投影到三个正交平面（xy, xz, yz），用固定大小的 triplane grid 表示全景场景。无论有多少个摄像头、多高分辨率，triplane token 数量恒定（例如 Sx=Sy=96, Sz=48, px=py=pz=8 → 288 token）。相比单帧单摄编码，压缩比达 3.9× 且指标几乎无损。\n2.3 VLM 骨干：Cosmos-Reason AlpaMayo-R1 采用 Cosmos-Reason 作为 VLM 骨干。Cosmos-Reason 是 NVIDIA 专为 Physical AI 设计的 VLM，在 370 万 VQA 样本上做过后训练，以发展物理常识和具身推理能力。其中包含：\n24,700 个驾驶场景视频 VQA 样本（场景描述、驾驶难度标注、推理链） 使用 DeepSeek-R1 蒸馏的\u0026quot;下一步动作\u0026quot;推理链数据 为了适配自动驾驶部署，NVIDIA 在 Cosmos-Reason 基础上补充了：\n跨物理 AI 领域（机器人、医疗、智能城市、制造等）的多领域预训练 自动驾驶专项 10 万样本（关键目标标注 + 下一步动作推理） 2.4 动作解码：基于 Flow Matching 的轨迹生成 动作解码是 VLA 模型最难的部分之一——既要保证生成精度，又要满足实时推理约束。\n为什么不直接用 x,y 坐标回归？ 原始位置 waypoint 空间对传感器噪声敏感，容易影响模型收敛；且下游控制器通常会对轨迹做平滑处理。\nAlpaMayo-R1 的解法：基于单轮动力学模型（Unicycle Dynamics）的控制量表示。\n控制量 $a = \\{(a^i, \\kappa^i)\\}_{i=1}^{64}$（加速度 + 曲率），通过欧拉积分映射到轨迹：\n$$\\mathbf{x}^{i+1} = f(\\mathbf{x}^i, a^i, \\kappa^i, \\Delta T)$$这个表示同时包含位置、航向角、速度、加速度/曲率，比直接回归 waypoint 更稳定、更物理合理。\nFlow Matching 解码器：将离散轨迹 token 映射为连续 waypoint。采用 $\\pi_{0.5}$-KI 的策略——VLM 输出离散 token，一个独立的\u0026quot;动作专家\u0026quot;（action-expert）模块用 Flow Matching 解码为连续轨迹。这种\u0026quot;离散 token + 连续解码\u0026quot;的设计既保留了 VLM 训练的高效性，又保证了轨迹生成的精度和动力学可行性。\n三、Chain of Causation 数据集：因果链标注 这是 AlpaMayo-R1 最有特色的贡献。现有的驾驶推理数据集存在三个普遍问题：\n行为描述模糊：\u0026ldquo;the ego vehicle should be cautious\u0026rdquo;——到底该怎么操作？缺乏与具体轨迹的绑定。 推理浅表化：\u0026ldquo;晴天、宽路\u0026quot;这类与决策无直接因果关系的因素。 因果混淆：标注员看了完整视频（包括未来帧），标注了模型不可观测的\u0026quot;未来因素\u0026rdquo;。 3.1 结构化 CoC 格式 AlpaMayo-R1 把每个推理样本拆分为三个结构化组件：\n组件 定义 是否闭集 驾驶决策 Driving Decision 当前时刻的纵向+横向操控意图 闭集（8纵×8横） 关键因素 Critical Components 影响决策的场景元素（目标、红绿灯、道路事件等） 开集（可扩展） CoC 推理链 将决策和因果因素组合为自然语言推理链 动态生成 3.2 闭集驾驶决策 纵向决策（至多选1个）：\n决策 含义 Set speed tracking 无约束下保持/达到目标速度 Lead obstacle following 与前车保持安全时距 Speed adaptation (road events) 为道路特征（弯道、减速带等）调整速度 Gap-searching (for LC/merge) 为变道/合流匹配目标车道车速或创造空档 Acceleration for passing/overtaking 加速超越慢车 Yield (agent right-of-way) 让行有路权的目标（行人、交叉车流等） Stop for static constraints 在控制点（停止线、红灯等）减速至停止 横向决策（至多选1个）：\n决策 含义 Lane keeping \u0026amp; centering 保持在车道内，不越线 Merge / Split (facility change) 设施间过渡（匝道↔主路） Out-of-lane nudge 短暂越线避障后回到原车道 In-lane nudge 车道内偏移避障 Lane change (lateral push) 变道到相邻车道 Pull-over / curb approach 靠边/停靠 Turn 转弯/掉头 Lateral maneuver abort 取消正在进行的横向操作并回到车道中心 这套闭集设计确保推理链直接锚定到具体驾驶行为，杜绝了\u0026quot;be cautious\u0026quot;这类模糊描述。\n3.3 混合标注管线 NVIDIA 设计了一个五步标注管线，兼顾质量与规模：\n片段选择：从海量驾驶数据中筛选\u0026quot;包含明确驾驶决策\u0026quot;的片段。分为两类：\n被动场景：自车必须立即响应的事件（前车刹车/红灯/行人横穿等），14 种 主动场景：自车需要主动评估和预判的情况（变道准备/预判减速等），5 种 关键帧定位：在片段中精确定位\u0026quot;决策时刻\u0026quot;。\n被动场景：事件触发后 0.5s 作为关键帧 主动场景：标注决策准备区间（起始和结束帧） 标注关键因素：只标注在关键帧之前的观测窗口内可观测的因素，禁止引用未来信息。\n确定驾驶决策：从闭集中选择匹配的纵向/横向决策。\n组装 CoC 链：将决策与关键因素组合为自然语言推理链。\n3.4 自动标注 + 人工校验 为了规模化，NVIDIA 采用混合方案：\n自动标注：用 Qwen3-VL 等教师 VLM 生成结构化 CoC 样本（注入驾驶先验 + 元动作定义） 人工标注：覆盖 ODD（天气/光照/路况）、交通法规、关键目标因果推理等高要求部分 人工校验：对自动标注结果做抽样审核，保证质量 这种混合方式平衡了规模（自动标注千万级）和质量（人工保证因果准确性）。\n四、三阶段训练策略 Stage 1：动作模态注入 让 VLM 学会输出驾驶动作。方法：\n将轨迹 $\\tau$ 编码为离散 token（均匀量化控制量 $a$）或连续 embedding（sinusoidal positional encoding + MLP） 与文本 token 一起送入自回归 VLM 训练目标：标准的 next-token prediction 这个阶段的输出是一个能理解并生成轨迹的 VLA。同时训练 Flow Matching 动作解码器。\nStage 2：推理能力激发 用 CoC 数据集做 SFT，让模型学会输出结构化因果推理链。\n数据格式：\n输入：多摄图像 + 自车历史 输出：[CoC 推理链 → 轨迹 token] 经过 Stage 2，模型能够在做出驾驶决策之前，先生成一段自然语言推理链，解释\u0026quot;为什么这么开\u0026quot;。\nStage 3：RL 后训练 最关键的阶段。用 GRPO（Group Relative Policy Optimization）来做强化学习后训练。\n为什么用 GRPO 而不是 PPO？ PPO 的 advantage 估计依赖一个价值网络（critic）$V(s)$。但在自动驾驶场景中，critic 很难训：\n状态空间巨大（高维感知） 回报稀疏（碰撞是低概率事件） critic 本身就是个和 policy 差不多大的回归网络 GRPO 的核心创新：用\u0026quot;组内相对\u0026quot;替代 critic。\n对同一场景 $s$，采样 G 条候选轨迹 $\\{a_1,...,a_G\\}$，做组内标准化：\n$$A_i = \\frac{r_i - \\text{mean}(\\{r_1,...,r_G\\})}{\\text{std}(\\{r_1,...,r_G\\}) + \\epsilon}$$无需价值网络，省一半显存，训练更稳定。\nGRPO 目标函数：\n$$ \\mathcal{J}{\\text{GRPO}}(\\theta) = \\mathbb{E}\\left[\\frac{1}{G}\\sum{i=1}^G\\frac{1}{|\\tau_i|}\\sum_{t=1}^{|\\tau_i|} \\min\\left(w_t^{(i)}A_i,\\ \\text{clip}(w_t^{(i)}, 1-\\epsilon, 1+\\epsilon)A_i\\right)\n\\beta,\\mathbb{D}{\\text{KL}}(\\pi\\theta|\\pi_{\\text{ref}})\\right] $$ 其中 $w_t^{(i)}$ 是 importance ratio，$\\pi_{\\text{ref}}$ 是参考策略（Stage 2 的模型），KL 散度防止策略退化。\nReward 模型设计 RL 奖励函数包含三个独立维度：\n奖励项 评估内容 评估方式 推理质量 推理链的逻辑合理性、场景相关性 大模型评分（VLM as judge） 推理-动作一致性 生成的轨迹是否与推理链中的决策一致 自动规则检查 轨迹质量 安全/舒适/效率多目标 仿真器碰撞检测 + 运动学指标 这三个奖励一起优化，确保模型不仅\u0026quot;做对了\u0026quot;，还能\u0026quot;解释正确且言行一致\u0026quot;。\nRL 训练基础设施 大规模 RL 训练需要高效的基础设施。NVIDIA 设计了专门的 RL 训练框架：\n在仿真环境中批量 rollout（每帧采样 G 条轨迹） 用 VLM 对推理链质量做自动评分 支持分布式训练（模型并行 + 数据并行） 训练过程中动态过滤低质量数据，提高训练效率 五、实验与结果 5.1 开环规划准确率 在挑战性场景（long-tail cases）中：\n模型 规划准确率 提升 纯轨迹基线（无推理） baseline — AlpaMayo-R1（w/ CoC + RL） +12% ↑ 12% 推理链的引入让模型在复杂、罕见场景中的表现显著提升。\n5.2 闭环仿真安全指标 指标 纯轨迹基线 AlpaMayo-R1 改善 碰撞率（off-road rate） baseline -35% ↓ 35% 近距离冲突率（close encounter） baseline -25% ↓ 25% 闭环环境的改善尤其关键——这证明了推理链 + RL 的组合不仅提升了\u0026quot;纸上谈兵\u0026quot;的开环指标，也改善了真实的驾驶安全性。\n5.3 RL 后训练效果 指标 SFT 后 + RL 后 提升 推理质量（大模型评分） baseline +45% ↑ 45% 推理-动作一致性 baseline +37% ↑ 37% 推理质量 +45% 说明 GRPO 后训练确实让模型学会了\u0026quot;更好的推理\u0026quot;（不仅推理结果正确，过程更合理）。推理-动作一致性 +37% 则是验证了\u0026quot;言行一致\u0026quot;——模型推理链中说要减速，轨迹也真的减速了。\n5.4 消融实验 VLM 骨干选择 模型 规划准确率 Alpamayo-VA（纯轨迹，无推理） baseline Alpamayo-R1 w/ 8B VLM +8% Alpamayo-R1 w/ Cosmos-Reason +12% Cosmos-Reason 的 Physical AI 预训练带来了显著的额外收益。\n模型缩放律 从 0.5B 到 7B 参数，性能持续提升、无饱和迹象。更大模型 = 更好规划 + 更好推理。\n动作模态注入方式 方式 收敛速度 闭环表现 离散 token 快 中等 连续 embedding 慢 较好 离散 token + Flow Matching（最终方案） 快 最优 离散 token + Flow Matching 策略在训练效率和闭环性能之间取得了最佳平衡。\n视觉编码效率 方法 token/帧 压缩比 规划准确率 单帧单摄 1120 (7cam) 1× baseline Triplane 多摄 288 3.9× ≈baseline Flex 视频 ~50 ~20× ≥baseline Flex 方法最惊艳：20 倍压缩的同时没有降低规划准确率，说明视频级别的 tokenization 可以高效利用跨帧信息冗余。\n5.5 真车路测 端到端延迟：99ms（满足 10Hz 实时控制要求） 部署场景：城市道路复杂交通环境 推理链可以在车载上实时生成，用于安全监控和可解释性 六、与现有方法的对比 维度 AutoVLA DriveVLM AlpaMayo-R1 推理形式 自适应\u0026quot;think vs. act\u0026quot; 自由格式 CoT 结构化 CoC 推理锚定 松散 松散 闭集驾驶决策 因果约束 无 无 显式因果链接 RL 后训练 无 无 GRPO（推理+一致性+轨迹） 轨迹解码 自回归 waypoint 自回归 waypoint Flow Matching + 单轮动力学 视觉编码 单帧 单帧 多摄 Triplane/Flex 模型缩放 有限 有限 0.5B→7B 持续提升 AlpaMayo-R1 的核心差异化优势：\n结构化推理：闭集决策 + 开集因素，确保推理链的决策锚定性 因果完整性：强制关键帧分割，避免因果混淆 RL 后训练的完整性：同时优化推理质量、一致性和轨迹质量 工程完备性：多摄高效编码 + 实时推理（99ms）+ 真车部署 📊 方法特性总结 组件 作用 解决什么问题 CoC 结构化推理 决策锚定的因果推理链 IL 的因果理解不足 + 模糊推理 Cosmos-Reason VLM 具身推理预训练 VLM 通用 VLM 的驾驶领域适应 Flow Matching 解码器 离散→连续轨迹生成 轨迹精度 + 多模态 + 实时性 Triplane/Flex 编码 高效多摄多帧 tokenization 推理延迟与 token 数量的矛盾 GRPO 后训练 组相对优势优化策略 PPO critic 训不准 + reward hacking 📝 个人思考 AlpaMayo-R1 是 2025-2026 年自动驾驶论文中我评价最高的工作之一。不是因为它的指标最惊艳（规划准确率 +12% 虽然不错但并不夸张），而是因为它同时解决了多个层面的核心问题。\n1. \u0026ldquo;推理\u0026quot;不再是贴片 很多 VLA 论文的\u0026quot;推理\u0026quot;其实是后加的——模型先预测轨迹，再\u0026quot;附上\u0026quot;一段解释。这种推理是装饰性的，对驾驶性能没有实质贡献。AlpaMayo-R1 特别强调 reasoning-action consistency（推理-动作一致性），并通过 CoC 的闭集决策设计确保推理链与轨迹生成之间的因果关系。\n这个设计哲学很关键：推理不是为了让论文更\u0026quot;可解释\u0026rdquo;，而是作为一个功能性组件直接改善驾驶性能。RL 后训练中同时优化推理质量和推理-动作一致性，说明他们把推理放到了和轨迹同等重要的位置。\n2. CoC 标注管线的普适价值 CoC 标注管线虽然是为 AlpaMayo-R1 设计的，但其方法论可以推广到整个自动驾驶标注领域。现有的驾驶 VQA 数据集（DriveLM、NuInstruct 等）大量存在\u0026quot;因果混淆\u0026quot;问题——标注员看了完整视频后写出的\u0026quot;推理\u0026quot;，模型在做决策时根本看不到这些信息。CoC 的\u0026quot;关键帧分割 + 仅标注历史窗口\u0026quot;原则应该是所有驾驶推理数据集的默认标准。\n3. 消融实验的说服力 AlpaMayo-R1 的消融实验质量很高。特别是 Flex 视频 tokenizer 的 20 倍压缩不降指标的实验，以及 0.5B→7B 持续缩放的验证，为后续的工程化部署和模型选型提供了可靠依据。这些消融实验的完整性在自动驾驶论文中并不常见。\n4. 一点反思 如果说有什么不足：GRPO 的 reward 模型中使用\u0026quot;VLM as judge\u0026quot;来评估推理质量，这引入了额外的复杂性和潜在的偏见——VLM judge 的偏好偏差会通过 reward 信号传递到策略中。论文中对此的讨论相对有限。不过考虑到这已经是当前 RLVR（Reinforcement Learning with Verifiable Rewards）范式的标准做法，这个批评可能适用于整个领域而非 AlpaMayo-R1 本身。\n另外，论文开源了模型权重和推理代码（7B 模型目前是最大的开源驾驶 VLA 模型之一），这对社区的价值很大——不仅是一个方法论报告，还是一个可以实际部署和复用的系统。\n总的来说，AlpaMayo-R1 是 VLA + 推理 + RL 后训练这条技术路径上最重要的工作之一。它的 CoC 数据集、结构化推理设计和 GRPO 后训练框架，很大概率会成为后续驾驶 VLA 研究的新基线。\n本文基于 arXiv:2511.00088 v2（2026 年 1 月更新）撰写。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/alpamayo-r1%E7%B2%BE%E8%AF%BB/","summary":"NVIDIA 提出 AlpaMayo-R1，一个融合 Chain of Causation 因果推理与 GRPO 强化学习的 VLA 模型。它基于 Cosmos-Reason VLM 骨干，通过结构化 CoC 数据集实现决策锚定的因果推理，利用 Flow Matching 动作解码器生成连续轨迹。三阶段训练（动作注入→推理微调→RL后训练）在长尾场景中取得显著提升：规划准确率 +12%，近距离冲突率 -35%，推理质量 +45%。真车路测延迟仅 99ms。","title":"论文精读｜AlpaMayo-R1：因果推理链 + RL 驱动的 VLA 驾驶策略"},{"content":"一句话理解 BEV BEV = 把多个摄像头的画面，统一\u0026quot;摊平\u0026quot;成一张俯视的鸟瞰图，让车在上帝视角下感知世界。\nBEV（Bird\u0026rsquo;s Eye View，鸟瞰图）感知是过去几年自动驾驶视觉感知最重要的一次范式跃迁。它不再让每个摄像头各自为政地在 2D 图像上画框，而是把所有视角的图像特征\u0026quot;重投影\u0026quot;到一个统一的、以自车为中心的 3D/俯视空间里，在那里做检测、分割、预测。\n理解 BEV 的关键在于它解决了一个根本矛盾：图像是透视的（近大远小、有遮挡），而驾驶决策需要的是度量空间（哪里有车、多远、多宽）。BEV 就是连接这两者的那座桥。\n🚗 什么是 BEV，为什么自动驾驶需要它 什么是鸟瞰图 鸟瞰图就是从正上方往下看得到的俯视投影，类似于你在实时地图 App 里看到的\u0026quot;车辆位置示意图\u0026quot;。在自动驾驶里，BEV 通常是一个以自车为中心、覆盖周边几十米范围的栅格化网格（比如 200×200 个格子，每格 0.5 米），每个格子上挂一个特征向量。\n为什么必须切换到 BEV 视角 早期的多摄像头感知是**\u0026ldquo;各自检测、后融合\u0026rdquo;**：每个相机独立跑一个 2D 检测器，再用后处理把跨相机的框拼起来。这种做法有一堆硬伤：\n痛点 后融合 2D 检测的问题 BEV 的解决方式 跨相机拼接难 同一辆车被前后两个相机看到，难以判断\u0026quot;是同一辆\u0026quot;还是\u0026quot;两辆\u0026quot; 在统一 BEV 空间里自然重叠、天然去重 缺乏深度/距离 2D 框没有真实距离，需要额外估计深度 BEV 网格本身就是度量空间，自带坐标 无法表达 3D 框只有 (x,y,w,h)，没有朝向、高度 BEV 上可直接输出 3D 框（位置+朝向+尺寸） 时序融合困难 在图像空间对齐多帧几乎不可能 BEV 空间下多帧只需做平移/旋转对齐 下游不好用 规划、地图模块要自己再做一遍坐标变换 BEV 特征可直接喂给下游所有任务 一句话总结：BEV 把感知从\u0026quot;看图说话\u0026quot;升级成\u0026quot;看地图办事\u0026quot;，所有下游任务（检测、跟踪、建图、预测、规划）都能在同一个统一的度量空间里协同工作。这也是 UniAD、VAD 等端到端框架都把 BEV 特征作为统一中间表示的根本原因。\n🔄 从 2D 图像到 3D BEV：两条主流路线 核心难题是：图像是 2D 的、透视的，怎么把它\u0026quot;变\u0026quot;成 3D 的 BEV？ 这一步通常被称为 View Transformation（视角变换）。目前有两大流派。\n路线一：LSS（Lift-Splat-Shoot）—— 显式几何投影 LSS（Philion \u0026amp; Fidler, ECCV 2020）是 BEV 感知的开山之作，思路非常直观，分三步：\nLift（提升）：对每个像素，预测一个深度分布（这个像素的物体可能在哪些深度上），把 2D 像素特征\u0026quot;拉升\u0026quot;成带深度的 3D 特征（实际是沿着相机射线的一组特征点）。 Splat（洒落）：用已知的相机内外参，把这些 3D 特征点投影（点云化）到 BEV 网格上做累积（类似 PointPillars 的池化），得到 BEV 特征图。 Shoot（发射）：在 BEV 特征图上跑常规的 2D 检测头（如 CenterPoint），输出 3D 检测框。 关键点：LSS 的\u0026quot;魔法\u0026quot;在于第一步——深度是隐式预测的。网络不用显式监督深度，但为了下游检测效果好，它自己学会了把每个像素放到正确的深度。后来 BEVDepth 发现，显式加一个深度监督（用 LiDAR 点云当深度 GT）能让效果大幅提升，这就是 BEVDepth 的核心贡献。\n优点：几何关系清晰，可解释性强，容易扩展到多任务；缺点：深度预测不准会拖累整体，BEV 网格大时显存占用高。\n路线二：BEVFormer —— Transformer 注意力采样 BEVFormer（Li et al., ECCV 2022）走了完全不同的路：不显式建栅格，而是用可学习的注意力去\u0026quot;查询\u0026quot;图像特征。\n核心机制：\nBEV Queries：在 BEV 平面上初始化一组可学习的网格 query（比如 H×W 个），每个 query 代表 BEV 空间的一个位置。 空间交叉注意力（Spatial Cross-Attention, SCA）：每个 BEV query 把自己（通过参考点）投影回各个相机图像上，去采样对应位置的特征。这相当于\u0026quot;逆向查询\u0026quot;——BEV 上的点主动去图像里找答案。 时间自注意力（Temporal Self-Attention, TSA）：BEV query 还和历史帧的 BEV 特征做注意力，实现时序融合（这是 BEVFormer 的一个亮点）。 关键点：BEVFormer 不需要显式预测深度，而是用注意力机制让网络自己学会\u0026quot;从哪个像素、哪个深度采样\u0026quot;。它借助 Deformable Attention 把计算量压下来，做到可训练。\n优点：精度高，时序融合自然，扩展性强；缺点：训练更难、更慢，对参数敏感，工程上不如 LSS 系直观。\n⚔️ 多摄像头 BEV 融合：三大技术路线对比 随着 LSS 和 BEVFormer 奠定基础，后续工作迅速分化成三大阵营。理解它们的差异，是看懂 BEV 感知论文的关键。\n维度 LSS 派（显式几何） Transformer 派（注意力查询） 稀疏 Query 派（DETR3D 系） 代表工作 LSS, BEVDet, BEVDepth, BEVStitched BEVFormer, PolarDETR, PETR/BEVFormer v2 DETR3D, Sparse4D, Far3D 视角变换核心 预测深度 → 投影洒落到密集 BEV 网格 BEV query 反向采样图像特征 一组稀疏 3D object query 直接采样图像 是否建密集 BEV 是（稠密网格） 是（稠密 BEV query） 否（只在目标位置算） 深度建模 显式（可监督） 隐式（注意力自学） 隐式（位置编码 PE） 时序融合 后加（BEVDet4D 拼接历史 BEV） 原生支持（TSA） 原生支持（query 携带历史） 精度 中高（加深度监督后高） 高 高（尤其长距离） 速度/显存 显存吃紧（网格大） 中等 最省（稀疏，可扩远距离） 可解释性 强（几何清晰） 中 中 适合任务 检测、占用、分割皆可 多任务统一 检测为主，规划友好 三大派系要点解读 LSS 派的精髓是\u0026quot;几何 + 深度\u0026quot;。BEVDet 第一个把 LSS 工程化跑通完整检测 pipeline；BEVDepth 加上显式深度监督，把 nuScenes 上的精度刷上一个台阶，成为工业界最爱用的基线之一。它们的劣势是密集 BEV 网格在远距离或大范围时显存爆炸。\nTransformer 派的精髓是\u0026quot;端到端学习 + 时序\u0026quot;。BEVFormer 用注意力摆脱了对显式深度的依赖，且时序融合优雅，是研究界和部分车企（如 Tesla FSD 的早期方案思想接近）的选择。代价是训练慢、调参难。\n稀疏 Query 派的精髓是\u0026quot;只算有用的地方\u0026quot;。DETR3D 开创性地用一组 3D object query 直接采样图像特征，不建密集 BEV，省算力、好扩远距离。Sparse4D（v1/v2/v3）进一步把稀疏做到极致，加入多层特征、时序、多任务，成为端到端框架（如 Sparse4D 配合规划）的宠儿。\n💡 趋势判断：随着端到端和远距离感知的需求上升，稀疏 Query 派正在崛起——它和下游规划任务的 query 接口天然契合，显存友好，是当前最被看好的方向之一。\n⏳ 时序融合：让 BEV 感知更稳定 单帧 BEV 有个老问题：速度估计难、遮挡物体\u0026quot;突然出现\u0026quot;、小目标抖动。解决方案是时序融合——把多帧 BEV 信息对齐后聚合。\n为什么要时序融合 估速度：单帧只能看到\u0026quot;车在哪\u0026quot;，多帧才能算出\u0026quot;车往哪开、多快\u0026quot;。 补遮挡：上一帧能看到的车，这一帧被别的车挡住了，时序能让它\u0026quot;不丢\u0026quot;。 稳输出：多帧平均能让检测框不抖，提升下游规划稳定性。 主流时序融合方法 方法 代表工作 思路 特点 BEV 特征拼接 BEVDet4D 把历史帧 BEV 按自车运动平移旋转对齐到当前帧，拼接后送检测头 简单直接，LSS 系常用 时间自注意力 BEVFormer 当前 BEV query 与对齐后的历史 BEV 做 Deformable Attention 学习能力强，效果好 Query 时序传播 Sparse4D, StreamPETR object query 跨帧传播，携带目标的\u0026quot;身份与历史\u0026quot; 稀疏高效，天然做跟踪 递归/记忆机制 BEVFormer+memory 维护一个 BEV 记忆库，每帧更新 长时序，但调参复杂 关键技巧：无论哪种方法，自车位姿对齐（ego-motion alignment）都是前提——必须把历史帧的 BEV 按自车的平移和旋转\u0026quot;挪\u0026quot;到当前坐标系，否则多帧叠在一起就是一团乱麻。\n🔗 BEV 在端到端中的角色 BEV 不只是感知的输出，更是现代端到端自动驾驶的统一中间表示。理解 BEV，才能看懂 UniAD、VAD 这些端到端框架为什么这么设计。\nBEV 特征为什么是端到端的\u0026quot;黄金接口\u0026quot; 统一空间：感知、预测、规划都在同一个 BEV 度量空间里，无需反复坐标变换。 梯度贯通：规划 loss 能一路反传到 BEV 特征乃至图像 backbone，感知被迫为规划服务。 多任务共享：一张 BEV 特征图，同时供检测、建图、占用、预测、规划使用，省算力。 VAD / UniAD 如何用 BEV 框架 BEV 的角色 关键设计 UniAD 密集 BEV 特征作为所有任务的共享底座 track query 在 BEV 上做跟踪 → 运动 → 占用 → 规划，任务级串联 VAD 用向量化 BEV（车道线、agent 用矢量而非栅格）替代密集 BEV 大幅降算力，2~4 倍加速，更易上车 SparseDrive 进一步全程稀疏，放弃密集 BEV 稀疏 query 贯穿检测/预测/规划，效率最高 演进脉络：从 密集 BEV（UniAD） → 向量化 BEV（VAD） → 稀疏 Query（SparseDrive），端到端在 BEV 这一层上不断瘦身，本质是在**\u0026ldquo;空间分辨率\u0026quot;和\u0026quot;计算效率\u0026quot;之间找平衡**。\n🏆 代表性工作一览 下面这张表把核心 BEV 感知工作按流派和贡献梳理清楚，方便查阅：\n工作 流派 核心贡献 LSS（2020） LSS 派开山 提出 Lift-Splat 框架，首次把多相机图像转成 BEV，奠定几何投影路线 BEVDet（2021） LSS 派工程化 第一个把 LSS 跑通为完整 3D 检测 pipeline，验证可行性 BEVDepth（2022） LSS 派 + 深度监督 显式加 LiDAR 深度监督，精度大幅提升，成工业基线 BEVFormer（2022） Transformer 派 用 Spatial/Temporal Attention 做 BEV，原生时序，精度 SOTA DETR3D（2021） 稀疏 Query 先驱 用 3D object query 采样图像，跳过密集 BEV PETR / PETRv2（2022） Transformer 变体 用 3D 位置编码（PE）替代交叉注意力投影，简洁高效 Sparse4D v1/v2/v3（2023-24） 稀疏 Query 集大成 多层特征 + 时序 + 多任务，稀疏高效，端到端友好 BEVStitched / SOLOFusion LSS 派长时序 长时序融合，提升远距离与遮挡场景表现 Far3D（2023） 稀疏 Query 远距离 专门针对远距离检测优化 🛠️ 工程挑战：把 BEV 真正搬上车 BEV 在论文里很美，但上车要过几道硬关。\n挑战一：内存/显存占用 密集 BEV 网格（比如 200×200×80 通道）加上多相机、多尺度、时序缓存，显存动辄几十 GB，车端芯片（Orin 等）很难承受。\n解法：稀疏 Query（Sparse4D）、向量化表示（VAD）、降网格分辨率、混合精度、BEV 特征量化压缩、按需时序缓存（只存少量关键帧）。\n挑战二：实时性 BEV 感知要求 10Hz 以上（\u0026lt;100ms），但 Transformer 注意力和多相机特征提取都极其耗算力。\n解法：Deformable Attention 把注意力局部化、TensorRT 部署优化、模型蒸馏（大 BEV 老师蒸馏小 BEV 学生）、量化（INT8）、算子融合、削减历史帧数量。\n挑战三：多传感器融合 纯视觉 BEV 在恶劣天气、夜间、远距离上不如 LiDAR，如何把 LiDAR/雷达和视觉 BEV 融合是上车刚需。\n融合层级 做法 特点 结果级融合 各传感器各自出 BEV，再做后处理拼接 简单但损失信息 特征级融合 把 LiDAR BEV 特征和视觉 BEV 特征拼接/相加 主流，效果好 早期/点级融合 把图像特征贴到 LiDAR 点上再聚合 信息最全，计算重 代表工作如 BEVFusion（MIT/清华），就是把视觉 BEV 和 LiDAR BEV 在特征层对齐融合，做到\u0026quot;1+1\u0026gt;2\u0026rdquo;。\n挑战四：标注成本 BEV 的 3D 标注（尤其跨相机一致的 3D 框、占用网格）极其昂贵。\n解法：用 LiDAR 自动标注再迁移到纯视觉、弱监督/半监督、合成数据（世界模型生成场景并自动出标注）。\n✅ 小结 BEV 感知是现代自动驾驶视觉感知的基石，它把\u0026quot;多相机各自为战\u0026quot;变成了\u0026quot;统一俯视视角协同作战\u0026quot;。记住三条主线：\n视角变换是核心：两大流派——LSS（显式几何 + 深度） 和 BEVFormer（注意力查询），外加崛起的 稀疏 Query（DETR3D/Sparse4D）。 时序融合是关键：BEVDet4D 拼接、BEVFormer 时间注意力、Sparse4D 的 query 传播，都是为了让感知更稳、更快、更抗遮挡。 BEV 是端到端的黄金接口：从 UniAD 的密集 BEV，到 VAD 的向量化，再到 SparseDrive 的全稀疏，BEV 这一层在不断瘦身，推动端到端走向可上车。 一句话点题：BEV 之于自动驾驶，就像\u0026quot;统一坐标系\u0026quot;之于多模块协作——没有它，一切都是散装的。\n💡 这是「知识点拆解」系列的一篇。理解了 BEV，再回头看端到端（UniAD/VAD/SparseDrive）和世界模型，你会顺畅很多。下期见。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/bev%E6%84%9F%E7%9F%A5%E6%8A%80%E6%9C%AF%E8%AF%A6%E8%A7%A3/","summary":"BEV 感知将多摄像头画面统一重投影到以自车为中心的鸟瞰图空间，解决了透视图像到度量空间的根本矛盾。本文详细讲解 LSS 与 Transformer 两条主流视角变换路线，以及 BEVFormer 等代表方法的架构设计。BEV 已是现代端到端自动驾驶感知系统的事实标准中间表示。","title":"BEV 感知技术详解：自动驾驶的鸟瞰图视角"},{"content":"\n📄 论文信息 标题：Raw2Drive: Reinforcement Learning with Aligned World Models for End-to-End Autonomous Driving (in CARLA v2) 团队：上海交通大学, 复旦大学, AgiBot arXiv：2505.16394 代码：github.com/Thinklab-SJTU/Raw2Drive 收录：NeurIPS 2025 关键词：模型基强化学习, 世界模型, 端到端驾驶, 双流架构, 特权学习 一句话总结：RAW2Drive 提出双流 MBRL 方案，先用特权 BEV 信息高效训练世界模型，再通过时空对齐机制指导原始传感器世界模型，成为首个在 CARLA v2 上成功的端到端原始传感器 MBRL 方法。 🤔 要解决什么问题？ 端到端自动驾驶的训练范式对比：\n范式 问题 原因 模仿学习（IL） 因果混淆 + 分布偏移 学的是\u0026quot;专家在做什么\u0026quot;而非\u0026quot;应该做什么\u0026quot; 无模型强化学习（MFRL） 样本效率低，难以收敛 高维原始观测空间探索极困难 模型基RL（MBRL） 仅适用于特权输入 原始传感器数据高维冗余，世界模型难以学习 核心问题：能否设计一个 MBRL 框架，使其既能享受 RL 的因果推理优势，又能在原始传感器输入上直接工作？\n💡 核心思想 RAW2Drive 的双流方案：\n特权流（Privileged Stream）：用 BEV 语义掩码作为输入，高效训练一个特权世界模型和特权策略 原始传感器流（Raw Sensor Stream）：用多视图 RGB 图像作为输入，在对齐机制的引导下学习原始传感器世界模型 关键洞察：低维特权信息的世界模型容易训练，且质量高，可以作为\u0026quot;教师\u0026quot;来引导原始传感器流的学习。\n⚙️ 方法细节 整体架构 RAW2Drive 包含四个核心组件：\n组件 特权流 原始传感器流 世界模型 RSSM + Encoder/Decoder/Reward/Continue heads RSSM + Encoder/Decoder (仅保留 Decoder) 策略 基于世界模型 rollouts 训练 基于对齐后的世界模型训练 输入 时序 BEV 语义掩码 时序多视图 RGB 图像 引导机制（Guidance Mechanism） 引导机制包含三个层次：\n1. 时空对齐损失（Spatial-Temporal Alignment Loss）： 对齐特权流和原始传感器流的编码状态：\n$$ \\mathcal{L}_{align} = \\|e_t - \\hat{e}_t\\|^2 $$其中 $e_t$ 是特权编码状态，$\\hat{e}_t$ 是原始传感器编码状态。\n2. Reward/Continue 头重用： 原始传感器流的 reward 和 continue 预测头直接使用特权世界模型的参数，避免从零学习困难的价值预测。\n3. 动作蒸馏（Action Distillation）： 使用特权策略的 rollout 数据填充回放缓冲区，并蒸馏动作分布到原始传感器策略。\n为什么去掉原始传感器流的 Reward/Continue 头？ 消融实验发现保留这两个头反而有害：\n配置 DS SR 无 Decoder/Reward/Continue 头 17.4 1.2/10 仅 Decoder 83.5 7.5/10 Decoder + Reward 72.1 5.8/10 Decoder + Continue 68.3 4.9/10 三者全有 58.7 3.6/10 原因：原始视觉数据在相邻帧间高度相似，但 reward 和 continue 信号可能剧烈跳变，网络难以同时学习感知一致性和价值预测。\n🧪 实验与结果 Bench2Drive 闭环评估 方法 类型 DS ↑ SR ↑ UniAD IL 36.2 1.5/10 VAD IL 40.8 2.3/10 DriveTransformer IL 72.4 5.6/10 Think2Drive (privileged) MBRL 51.7 3.1/10 RAW2Drive MBRL (raw) 83.5 7.5/10 多能力评估 能力 RAW2Drive DriveTransformer 提升 左转 72.3% 58.1% +14.2% 右转 76.8% 62.4% +14.4% 直行 91.2% 85.6% +5.6% 车道保持 94.5% 91.2% +3.3% 交通灯遵守 88.7% 76.3% +12.4% 避障 71.4% 45.8% +25.6% 消融实验 组件 DS 说明 完整 RAW2Drive 83.5 w/o 对齐损失 61.2 时空状态对齐关键 w/o Reward 头重用 74.8 价值引导有助 w/o 动作蒸馏 68.5 特权策略知识重要 w/o 特权流（从头训练） 18.3 双流方案不可少 ⚠️ 局限与未来方向 依赖 CARLA 仿真环境：特权信息（BEV 语义掩码）在真实世界中不可直接获得 两阶段训练复杂度高：需要先训练特权流，再训练原始传感器流 对齐损失对感知质量敏感：如果原始传感器编码质量差，对齐会失效 仅基于视觉输入：未探索 LiDAR 或其他模态 📝 个人思考 RAW2Drive 的双流特权引导方案在思路上与 VAE/蒸馏有亲缘关系——用干净的低维信号引导冗余的高维信号学习。区别在于这是在一个 MBRL 框架内完成的，世界模型不仅要学会\u0026quot;理解现在\u0026quot;，还要学会\u0026quot;预测未来\u0026quot;。\n最有工程价值的发现是 Reward/Continue 头反而有害。直觉上，给原始传感器世界模型更多的预测头应该帮助学习，但实验证明 decoder-only 的效果最好。这提示我们：原始传感器世界模型的瓶颈是感知质量，而非价值预测——先把\u0026quot;看清楚\u0026quot;的问题解决，再把\u0026quot;判断好坏\u0026quot;的任务交给特权世界模型。\n与 NoRD 相比，RAW2Drive 也用了 RL，但目标不同：NoRD 用 RL 优化最终驾驶得分，RAW2Drive 用 RL 学习世界模型内的规划策略。两种 RL 的 VLA 结合方式值得区分。\n📖 这是论文精读系列的第 XX 篇。特权知识蒸馏到原始传感器，是通往真实世界 MBRL 的一条务实路径。欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/raw2drive%E7%B2%BE%E8%AF%BB/","summary":"RAW2Drive 提出双流模型基强化学习框架，先用特权信息（BEV 语义）高效训练特权世界模型+策略，再通过对齐机制引导原始传感器世界模型的学习，实现首个从原始传感器直接规划端到端 MBRL 方法。在 Bench2Drive 上 DS 达 83.5，超越所有原始传感器基线。","title":"论文精读｜RAW2Drive：对齐世界模型的强化学习端到端驾驶"},{"content":"🎯 NAVSIM 是什么？ NAVSIM = Non-reactive Autonomous Vehicle Simulation，一个\u0026quot;非反应式\u0026quot;的自动驾驶开环评测框架与基准。\n如果你这两年读端到端自动驾驶的论文，几乎每一篇都会报一个叫 PDMS 的分数，这个分数就来自 NAVSIM。它由图宾根大学、NVIDIA Research、OpenDriveLab 联合提出（Daniel Dauner 等，NeurIPS 2024），目前已经是端到端规划领域事实上的标准评测，也是智驾挑战赛（AGC）的官方赛道。\nNAVSIM 的几个关键事实：\n维度 说明 数据来源 OpenScene 数据集，本质上是 nuPlan 日志降采样到 2 Hz 的子集 任务 给定历史观测（多相机/LiDAR），预测自车未来 4 秒轨迹 仿真方式 非反应式（non-reactive）：背景车按录制轨迹走，自车用 LQR 控制器执行预测轨迹 核心指标 PDMS（v1）/ EPDMS（v2） 发表 NeurIPS 2024 Datasets \u0026amp; Benchmarks 理解 NAVSIM 的关键在于\u0026quot;非反应式\u0026ldquo;三个字：自车虽然会把轨迹\u0026quot;开出来\u0026rdquo;（4 秒前向仿真），但周围车辆、行人不会因为自车的动作而改变行为——它们只是回放历史轨迹。这是一种\u0026quot;半开环\u0026quot;设计：既比纯位移误差更接近真实（轨迹要经过物理执行和碰撞检查），又避免了闭环仿真的高昂成本。\n一句话定位：NAVSIM 用开环的代价，换取尽可能接近闭环的信号。\n📏 核心指标 PDMS 怎么算？ PDMS（Predictive Driver Model Score，预测驾驶模型得分） 是 NAVSIM v1 的核心分数，它最大的贡献是抛弃了与人类轨迹比 L2 误差的思路，转而直接衡量规划的\u0026quot;质量\u0026quot;。\n传统 L2 指标的致命缺陷 在 nuScenes 上，规划指标是 L2 位移误差 / 碰撞率。但驾驶本质是多模态的——前方有障碍时，左变道和右变道都合理。如果你预测了\u0026quot;绕行\u0026quot;，而人类 GT 是\u0026quot;刹车\u0026quot;，L2 会判你错，可你其实开得很好。更糟的是，\u0026ldquo;原地不动\u0026quot;几乎永远 L2 最低，于是模型学会了\u0026quot;躺平\u0026quot;刷分。\nPDMS 的设计哲学 PDMS 的思路是：不跟人比像不像，而是看这条轨迹本身安不安全、舒不舒服、有没有往前走。 它由两部分组成——乘性惩罚（multiplier） 和 加权子分（weighted）。NAVSIM 官方文档（docs/metrics.md）给出的 v1 定义是：\n$$\\text{PDMS} = \\underbrace{\\left(\\prod_{m \\in \\{NC,\\, DAC\\}} m(\\text{agent})\\right)}_{\\text{乘性惩罚：撞了/越界直接清零}} \\cdot \\underbrace{\\left(\\frac{\\sum_{m \\in \\{TTC,\\, EP,\\, C\\}} w_m \\cdot m(\\text{agent})}{\\sum w_m}\\right)}_{\\text{加权平均：行驶质量}}$$ 乘性部分：一旦发生无责碰撞或驶出可驾驶区域，整条轨迹直接得 0 分——这是\u0026quot;安全一票否决\u0026rdquo;。 加权部分：在安全的前提下，再综合\u0026quot;是否前进、是否留有安全距离、是否舒适\u0026quot;给出质量分。 这样设计的好处非常明显：\u0026ldquo;原地不动\u0026quot;虽然不撞，但 EP（前进量）极低，拿不到高分；合理的绕行即便偏离人类 GT，只要安全舒适、有进展，照样得高分。\n🔧 一次评测到底发生了什么？从模型输出到 PDMS 的完整链路 这是整篇最关键的一节。很多文章只告诉你\u0026quot;NAVSIM 用 LQR 把轨迹开出来再打分\u0026rdquo;，但没有讲清楚几何轨迹是怎么变成物理运动、又怎么变成分数的。 下面我们完全依据 NAVSIM 官方源码逐段还原，从你的模型吐出一条轨迹开始，到它拿到 PDMS 结束。\n第 0 步：模型输出什么？ 你的模型输出的东西非常朴素——一个 Trajectory 数据类（navsim/common/dataclasses.py:280）：\n@dataclass class Trajectory: poses: npt.NDArray[np.float32] # (T, 3) 局部坐标 trajectory_sampling: TrajectorySampling = TrajectorySampling(time_horizon=4, interval_length=0.5) 也就是说：未来 4 秒、每 0.5 秒一个点，共 8 个点，每个点是 (x, y, heading)，全部是以自车当前后轴为原点的局部坐标。注意这里不含速度、不含加速度——模型只需要给出几何形状。\n第 1 步：评测脚本拿到轨迹 → 转全局帧（transform_trajectory） 评测入口在 navsim/planning/script/run_pdm_score.py，它从 MetricCacheLoader 读每条样本的缓存，让模型推理出 Trajectory 后，调用 navsim/evaluate/pdm_score.py 的 pdm_score()。第一步是 transform_trajectory()（pdm_score.py:26）：\n用 relative_to_absolute_poses(initial_ego_state.rear_axle, relative_states) 把 8 个相对点转换到全局坐标系； 通过 _se2_vel_acc_to_ego_state 把每个点包装成 EgoState，速度与加速度都显式设为 0——源码注释写着 \u0026ldquo;velocity and acceleration ignored by LQR + bicycle model\u0026rdquo;，即这两个量反正会被控制器和运动学模型重算，干脆忽略； 最终拼成一个 nuPlan 的 InterpolatedTrajectory（包含 t=0 的初始自车状态 + 8 个未来状态）。 第 2 步：插值到评测分辨率（get_trajectory_as_array） get_trajectory_as_array()（pdm_score.py:57）按 future_sampling（评测用的 proposal_sampling）把轨迹重采样成状态数组。看 default_common.yaml：\nproposal_sampling: num_poses: 40 interval_length: 0.1 也就是说，实际打分是在 4 秒、0.1 秒步长（40 个点）的分辨率上进行的——模型那 8 个粗点会被插值成 40 个细点。每个状态是一个 11 维向量（pdm_enums.py 的 StateIndex）：\n下标 含义 单位 0–2 x, y, heading m, m, rad 3–4 velocity_x, velocity_y m/s 5–6 acceleration_x, acceleration_y m/s² 7–8 steering_angle, steering_rate rad, rad/s 9–10 angular_velocity, angular_acceleration rad/s, rad/s² 同时，缓存里的 PDM 参考轨迹（metric_cache.trajectory） 也被同样处理。两条轨迹被拼成 (2, 41, 11) 的 batch——第 0 条是参考、第 1 条是你的模型轨迹（pdm_score.py:144）。\n第 3 步：LQR 控制器把轨迹翻译成\u0026quot;开出来\u0026quot;（PDMSimulator + BatchLQRTracker） 两条轨迹一起送进 PDMSimulator.simulate_proposals()（pdm_simulator.py:31）。它的核心是两个组件：\nBatchLQRTracker（batch_lqr.py）——控制器，负责计算每条轨迹在每个时刻该给什么\u0026quot;指令\u0026quot;； BatchKinematicBicycleModel（batch_kinematic_bicycle.py）——车辆运动模型，负责把指令积分成真实状态。 仿真是逐时刻循环的：tracker.track_trajectory() 先根据当前状态和参考轨迹算出控制指令，再用 motion_model.propagate_state() 把状态推进 0.1 秒，如此往复 40 次。\nLQR 控制器如何工作？ BatchLQRTracker 把控制问题分解成纵向、横向两个子系统（batch_lqr.py:27 注释明说）：\n纵向子系统（决定加不加速）：\n$$\\text{State: }[v] \\qquad \\text{Input: }[a] \\qquad v{\\_dot} = a$$ 权重：q_longitudinal = [10.0]，r_longitudinal = [1.0]； 假设整个 tracking_horizon（默认 10 步 × 0.1s = 1 秒）内加速度恒定，于是 velocity_N = v_0 + (N·dt)·a； 这是一个单步 LQR：直接解 min a·(r + B²q)·a... 的闭式解得到加速度指令（_solve_one_step_longitudinal_lqr）。 横向子系统（决定转不转方向），状态向量 3 维（LateralStateIndex）：\n下标 状态 含义 0 LATERAL_ERROR 相对参考线的横向偏差（在后轴处） 1 HEADING_ERROR 相对参考线的航向偏差 2 STEERING_ANGLE 当前前轮转角 其连续动力学（做了小角度线性化）：\n$$\\dot{e}_{lat} = v \\cdot e_{head} \\qquad \\dot{e}_{head} = v \\cdot \\left(\\frac{\\delta}{L} - \\kappa\\right) \\qquad \\dot{\\delta} = \\dot{\\delta}_{cmd}$$其中 $L$ 是轴距、$\\kappa$ 是参考线曲率。权重 q_lateral = [1.0, 10.0, 0.0]、r_lateral = [1.0]，输入是转向速率 $\\dot\\delta$。由于速度、曲率随时间变化，这是一个线性时变（LTV）系统：控制器会先把 tracking_horizon 步的状态转移矩阵 $A$、输入矩阵 $B$、仿射项 $g$ 逐步前推（_lateral_lqr_controller 里的 einsum 累乘），再解一个单步 LQR 得到转向速率指令。\n💡 细节：当参考速度和当前速度都低于 stopping_velocity = 0.2 m/s 时，LQR 会被一个更简单的停车 P 控制器取代：a = -0.5·(v - v_ref)，转向速率归零。这在等红灯场景非常常见。\n运动模型如何积分？ BatchKinematicBicycleModel（batch_kinematic_bicycle.py）使用经典自行车模型（后轴为参考点）：\n$$\\dot{x} = v\\cos\\theta, \\quad \\dot{y} = v\\sin\\theta, \\quad \\dot{\\theta} = \\frac{v \\tan\\delta}{L}$$关键参数（全部可在源码确认）：\n车辆使用 Pacifica（克莱斯勒大捷龙）参数：轴距 wheel_base = 3.089 m、半长 2.588 m、半宽 1.1485 m； 指令不是立即生效：加速和转向各经过一个一阶低通/控制延迟（accel_time_constant=0.2s、steering_angle_time_constant=0.05s），模拟真实执行器滞后； 转向角被 clip 到 $\\pm \\pi/3$，heading 用 principal_value 归一化到 $[-\\pi, \\pi]$。 最终 simulate_proposals 返回 (2, 41, 11) 的仿真后真实状态——这才是打分器看到的\u0026quot;自车实际轨迹\u0026quot;。\n第 4 步：背景交通流（traffic agents policy） pdm_score_from_interpolated_trajectory 里，仿真出的自车轨迹会交给一个 traffic_agents_policy 生成背景车序列（pdm_score.py:149）：\nsimulated_agent_detections_tracks = traffic_agents_policy.simulate_environment(simulated_states[1], metric_cache) 默认（v1 风格，log_replay_traffic_agents.py）：直接取 metric_cache.observation 里录制好的未来目标轨迹，只把与初始自车重叠的车辆去掉——这就是\u0026quot;非反应式\u0026quot;的字面实现； 反应式（navsim_IDM_traffic_agents.py）：让背景车用 IDM 跟车模型对自车的动作做出反应（v2 两阶段评测采用）。IDM 参数可见 navsim_IDM_traffic_agents.yaml：目标速度 10 m/s、最小间距 1.0 m、车头时距 1.5 s、a_max=1.0、d_max=2.0。 ⚠️ 注意：NAVSIM v2（navhard）的背景车其实是反应式的。论文标题里的\u0026quot;non-reactive\u0026quot;描述的是自车评测流程（不开环做多步递归仿真），而背景车可以用 IDM 响应——这是很多人理解的误区。\n第 5 步：打分器算各子分（PDMScorer） scorer.score_proposals()（pdm_scorer.py:130）拿到的就是仿真后状态。它先把自车每个时刻的位姿转成车辆包围盒多边形（state_array_to_coords_array），然后算两组指标：\n乘性指标（MultiMetricIndex）——任何一个违规整条得 0：\n子指标 含义 取值 NC No at-fault Collisions 是否发生有责碰撞（区分前撞/侧撞，撞静止车与动态车责任不同） {0, ½, 1} DAC Drivable Area Compliance 车辆是否始终在可驾驶区域内（车道/路口/泊车区） {0, 1} DDC Driving Direction Compliance 是否逆行（沿前进方向投影距离衡量） {0, ½, 1} TLC Traffic Light Compliance 是否闯红灯（与红灯多边形相交） {0, 1} v1 只有前两个（NC、DAC），v2 新增 DDC、TLC（docs/metrics.md 明确标注）。\n加权指标（WeightedMetricIndex）——在安全前提下给出质量分：\n子指标 权重 含义 EP Ego Progress 5 沿参考中线前进的距离，归一化到 [0,1]（反\u0026quot;躺平\u0026quot;的关键） TTC Time-to-Collision 5 未来 1s 内是否始终保留碰撞时间余量（投影 1s 后的车体做前瞻检查） LK Lane Keeping 2 连续 2s 偏离车道中心线 \u0026gt; 0.5m 则失败（路口不判） HC History Comfort 2 舒适度，把人类历史轨迹拼在前面一起算体感（急加急刹/急转都扣） EC Extended Comfort 2 相邻帧输出轨迹的动态一致性，防止\u0026quot;忽左忽右\u0026quot;抖动 v1 的加权项是 {EP, TTC, C}（权重 5/5/2），v2 把 C 拆成 HC + EC，并新增 LK。所有权重、阈值都在 pdm_scorer.yaml 里：progress 5, ttc 5, lane_keeping 2, history_comfort 2, two_frame_extended_comfort 2。\n最终在 _aggregate_pdm_scores()（pdm_scorer.py:223）里合成：\n$$\\text{PDMS} = \\left(\\prod_{\\text{乘性}} m\\right) \\cdot \\left(\\frac{\\sum w_m \\cdot m_{\\text{加权}}}{\\sum w_m}\\right)$$注意 EP 是相对归一化的：以当前 batch 里所有候选轨迹的最大前进量为基准做 clip 归一化（norm_constant_progress = np.max(masked_progress)），这样\u0026quot;敢开\u0026quot;的候选相对占优。而 EC（两帧扩展舒适）这一步先不参与——它是 v2 在后处理阶段单独注入的（见下文两阶段聚合）。\n第 6 步：v2 的 EPDMS —— 两阶段伪闭环聚合 上面算出来的是\u0026quot;单场景 PDMS\u0026quot;。EPDMS（v2 / navhard） 在其之上加了 SceneAggregator（scene_aggregator.py）做两阶段聚合：\n第一阶段：在初始场景上按上面的流程打一次分（记录你的轨迹终点 endpoint_x/y）； 第二阶段：对每个初始场景，评测集里额外准备了一组预滚动的 follow-up 场景（每条对应一种不同的 4 秒规划结果：偏左/偏右/快慢不一）。你的模型在这些 follow-up 场景上各打一次分； 加权：用高斯核衡量\u0026quot;第一阶段终点\u0026quot;和\u0026quot;第二阶段起点\u0026quot;的距离（scene_aggregator.py:36）： $$\\text{weight} = \\frac{\\exp\\left(-\\,\\frac{d^2}{2\\sigma^2}\\right)}{\\sum \\exp(\\cdots)}, \\qquad \\sigma^2 = 0.1$$即你的轨迹最终停在哪，离哪条 follow-up 起点越近，那条 follow-up 的权重越高——近似模拟\u0026quot;偏离之后会怎样\u0026quot;，却完全不用交互式仿真； 4. EC 注入：SceneAggregator 还比较相邻两帧的仿真状态重叠段（_compute_two_frame_comfort），把 two_frame_extended_comfort 填进加权指标（run_pdm_score.py:compute_final_scores），最终：\n$$\\text{EPDMS} = \\text{multiplicative\\_prod} \\times \\text{weighted\\_avg}(EP, TTC, LK, HC, EC)$$ 误报惩罚过滤（human_penalty_filter）：当人类驾驶员在该场景也违规时（如借对向车道绕障），把对应子分强制置 1（pdm_score.py:171 起），避免\u0026quot;按规矩开车反而被扣分\u0026quot;。 🔍 子指标详解（速查表） 子指标 全称 类型 取值 权重 衡量什么 NC No at-fault Collisions 乘性 {0, ½, 1} — 是否与障碍发生有责碰撞 DAC Drivable Area Compliance 乘性 {0, 1} — 是否始终在可驾驶区域内 DDC ⭐v2 Driving Direction Compliance 乘性 {0, ½, 1} — 是否逆行 TLC ⭐v2 Traffic Light Compliance 乘性 {0, 1} — 是否闯红灯 EP Ego Progress 加权 [0, 1] 5 前进量（相对 batch 归一化） TTC Time-to-Collision 加权 {0, 1} 5 是否保留足够碰撞时间余量 LK ⭐v2 Lane Keeping 加权 {0, 1} 2 是否长时间偏离车道中心 HC ⭐v2 History Comfort 加权 {0, 1} 2 含历史运动一致性的舒适度 EC ⭐v2 Extended Comfort 加权 {0, 1} 2 相邻帧输出的动态一致性 ⭐ = v2（EPDMS）新增；v1 加权项为 {EP, TTC, C}。\n几个要点深入解读：\nNC 的\u0026quot;无责\u0026quot;很关键：NAVSIM 区分\u0026quot;责任\u0026quot;。如果碰撞是背景车突然冲出来造成的（自车无法避免），不算自车的错。实现上靠 get_collision_type 区分 ACTIVE_FRONT_COLLISION（正面追尾，有责）/ ACTIVE_LATERAL_COLLISION（侧向，需结合是否在多车道判定）/ STOPPED_TRACK_COLLISION 等（pdm_scorer_utils.py）。撞动态车扣到 0，撞静态物只扣到 0.5。 EP 是反\u0026quot;躺平\u0026quot;的利器：它正比于自车沿参考线的前进距离。原地不动 EP→0，直接压低加权平均分。这也是 NAVSIM 区别于 L2 的核心。 TTC 是前瞻安全：future_collision_horizon_window = 1.0s，把自车包围盒按当前速度外推 1 秒，再与未来背景车做碰撞检查，鼓励\u0026quot;留余地\u0026quot;的规划。 LK 是连续犯规才算：lane_keeping_horizon_window = 2.0s、偏差限 0.5m，必须连续超限才失败，路口豁免——避免把正常变道误判。 EC 专治\u0026quot;抖动\u0026quot;：比较相邻两帧模型的输出，若加速度、jerk 等动态量在重叠时间段不一致就扣分。 📂 navtrain / navtest / navhard 数据划分 NAVSIM 的评测公平性，很大程度上来自它精心设计的 split（数据划分）。这些 split 都是对 OpenScene（nuPlan 2Hz）做场景过滤得到的。官方 docs/splits.md 和 config/common/train_test_split/*.yaml 给出了完整定义：\nSplit 来源 用途 帧数（tokens） 特点 navtrain trainval 训练 104,480 过滤掉无聊场景，只保留有挑战性的非平凡驾驶；传感器 445GB（带历史，无历史 300GB） navtest test NAVSIM v1 标准测试 12,282 过滤为有挑战场景，是 v1 排行榜（PDMS）的评测集 navhard_two_stage test + 合成帧 NAVSIM v2 标准测试 5,988 原始 + 合成 含合成观测的伪闭环两阶段评测，对应 EPDMS 排行榜 warmup / private_test — 挑战赛 227 / 1,872 热身赛与私有测试集，禁止用于训练 这些数字直接来自 scene_filter/navtrain.yaml（tokens: 列表 104,480 条）、navtest.yaml（12,282 条）等配置。\n为什么要\u0026quot;过滤\u0026quot;？ nuPlan 原始日志里，绝大多数场景是直道匀速、无交互的\u0026quot;无聊\u0026quot;片段。如果直接拿来评测，模型只要输出\u0026quot;恒速直行\u0026quot;就能拿高分。NAVSIM 的 scene filter 专门挑选那些**\u0026ldquo;恒速恒向\u0026quot;会失败**的场景——比如路口转弯、变道、减速避让、应对行人。这样刷出来的分数才有区分度。\n每个 split 的过滤配置（源码级） 以 navtest.yaml / navtrain.yaml 为例（train_test_split/scene_filter/）：\nnum_history_frames: 4 # 取 4 帧历史（2 秒 @2Hz） num_future_frames: 10 # 取 10 帧未来（5 秒 @2Hz） frame_interval: 1 # 滑窗步长，每 1 帧滑一次（所以场景高度重叠） has_route: true # 只保留有有效路由的场景 navtrain 与 navtest 完全独立、无重叠：一个基于 trainval、一个基于 test 数据 split，navtest 禁止用于训练。 navhard_two_stage 不同：它 num_future_frames: 8（4 秒），且 include_synthetic_scenes: true、带 reactive_synthetic_initial_tokens——即在原始场景基础上掺入合成观测做两阶段伪闭环。 navtrain vs navtest 的本质区别 navtrain 是给模型学习用的，场景丰富但分布相对平缓； navtest 是只评不训的盲测集，分布更偏安全关键与长尾。 两者都来自过滤，但完全独立、无重叠，navtest 禁止用于训练，否则成绩无效。 一句话：navtrain 教模型\u0026quot;怎么开\u0026rdquo;，navtest 考模型\u0026quot;关键时刻开不开得对\u0026quot;。\n值得一提的是三者之间的演进逻辑：navtest 是 v1 时代的\u0026quot;一锤定音\u0026quot;；navhard 则是 v2 为治理\u0026quot;开环刷榜\u0026quot;而引入的升级版——它不仅包含真实帧，还掺入合成观测，并要求两阶段伪闭环评测，专门用来暴露纯开环看不到的规划脆弱性。所以当你看到论文报分时，一定要分清是 PDMS（navtest，v1） 还是 EPDMS（navhard，v2），后者通常比前者低 3–10 分，含金量更高。\n🗃️ NAVSIM 数据到底长什么样？从源码看一个 scene 上面说了切分，但真正的难点在于一个\u0026quot;样本\u0026quot;（scene）具体包含哪些数据、模型训练时又能看到什么。这一节全部依据 NAVSIM 官方源码 navsim/common/dataclasses.py、navsim/common/dataloader.py 逐行还原。\n数据的三层组织：log → frame → scene 数据不是整卷倒给模型的，而是按三层组织：\nO p e → n S l c o → e g n f e r → （ a = m s n e c u 一 e P 段 n l 完 一 e a 整 帧 n 行 （ 车 2 以 降 记 H 一 采 录 z 个 样 （ 「 到 约 采 带 几 样 路 2 百 ， 由 H 到 间 的 z 上 隔 帧 ， 千 」 N 帧 0 为 A . 中 V @ 5 心 S 2 s 截 I H ） 取 M z 的 _ ） 时 I 序 N 窗 T 口 E R = V A 基 L 本 _ 训 L 练 E / N 评 G 测 T 样 H 本 = 0 . 5 s ） 关键点：\nlog 是下载/切分的最小单位：train_logs、val_logs、test_logs 都按整段 log 分，不按帧切。这样同一段行车记录不会泄漏到训练和验证两边。表：trainval 日志 14GB / 传感器 \u0026gt;2000GB；test 日志 1GB / 传感器 217GB；navtrain 传感器 445GB。 scene 是训练/评测的最小单位：训练 batch 里装的是一个个 scene。一个 scene 由 SceneMetadata（log 名、scene token、地图名、初始帧 token、历史/未来帧数）+ map_api（地图）+ 一列 Frame 组成。 scene 由滑窗采样生成：filter_scenes()（dataloader.py:16）里的 split_list(input_list, num_frames, frame_interval) 会从 log 里每 frame_interval 帧取一个长度为 num_frames 的窗口。默认 frame_interval=1、num_frames = 4 + 10 = 14（4 历史 + 10 未来），所以重叠的帧可以出现在多个 scene，这正是 navtrain 104,480 个 scene 远高于 log 数（13,180）的原因。 帧类型：Original vs Synthetic（token 的秘密） navsim/common/enums.py 定义了帧类型：\nclass SceneFrameType(IntEnum): ORIGINAL = 0 # 来自 nuPlan/OpenScene 真实日志 SYNTHETIC = 1 # v2 生成的合成观测帧 如何区分？metric_cache_processor.py:317 有一行很妙的 trick：\nis_synthetic_scene = len(scenario.token) == 17 真实帧的 token 是 16 位十六进制，合成帧的 token 是 17 位（多一位前缀用于标识）。合成帧来自 v2 的\u0026quot;预滚动\u0026quot;流程：把某条 4 秒规划用仿真器 rollout 到 t=4s，以该时刻为起点生成新的传感器观测（Scene.save_to_disk / load_from_disk 实现了这套落盘/加载）。所以合成帧天然携带 corresponding_original_scene 与 corresponding_original_initial_token 两个元数据字段（SceneMetadata），用于第二阶段回链到原始场景。\n一个 frame 里的内容块 每个 Frame（dataclasses.py:318）包含五类字段，可用 Scene.from_scene_dict_list() 从 log 装载：\n内容块 类型 作用（是观测还是特权） token / timestamp 基础 唯一标识（即该帧 LiDAR 点数的 token） roadblock_ids List[str] 该帧自车所在车道，后续导出路由（特权） traffic_lights List[(lane_connector, bool)] 路口信号灯状态，True=红（特权） annotations Annotations 包围框真值标定（特权） ego_status / lidar / cameras 观测 模型可见输入 标定信息（Annotations）——\u0026ldquo;人类专家标注了什么\u0026rdquo; Annotations 类（dataclasses.py:260）在一个场景里携带五段等长数组，逐对象对齐：\nboxes：3D 包围框，姿态用 BoundingBoxIndex 索引：(x, y, z, len, width, height, heading)。 names：类别标签 List[str]，包含 vehicle、pedestrian、bicycle、traffic_cone、barrier、czone、general 等。 velocity_3d：3D 速度向量。 instance_tokens / track_tokens：跨帧计数与追踪的恒定 ID，供时序关联。 评测/训练用这些真值框前后对齐成跟踪轨迹。但注意 NAVSIM v1/v2 评测不直接要求模型做感知：打分时碰撞、车道内等用这些真值框离线算，模型自己只需输出未来的自车几何轨迹。\n观测数据（AgentInput）——模型真正拿到的东西 Scene.get_agent_input() 从 scene 里抽出模型可见的观测，组成一个 AgentInput，不包含任何特权信息：\nEgoStatus（当前帧 + 历史帧）：自车 ego_pose（3 维）、ego_velocity 与 ego_acceleration（各 2 维），都转到局部坐标系。 Cameras × 8：cam_f0 / cam_l0 / cam_l1 / cam_l2 / cam_r0 / cam_r1 / cam_r2 / cam_b0，每个含 image + sensor2lidar 外参 + 内参 + 畸变。 LiDAR 合并点云：5 个 LiDAR 融合为一次 (6, n) 数组 +x,y,z,intensity,ring,lidar_id，频率对标 2Hz。 driving_command 离散意图：左变道 / 直行 / 右变道（由期望路由推出，EgoStatus 装载），另有第 4 档\u0026quot;未知\u0026quot;用于训练时过滤歧义样本。 NAVSIM 的观测设计很克制：相机+LiDAR 只覆盖 2 秒过去 / 2Hz（每帧 4 帧历史观测）；并刻意用一张图说明了：排列在图里的这些只有测试帧才释放——地图、tracks、occupancy 等你在训练可以用，但排行榜提交时拿不到，防止做题式作弊。\n训练标签：人类专家 GT 轨迹 训练时由 TrajectoryTargetBuilder 通过 Scene.get_future_trajectory() 取出人类驾驶员真车未来轨迹作为回归目标：把未来 5s（10 帧）自车 GEOM 姿态转换到当前后轴为原点的局部坐标。这正是 EgoStatusMLP、TransFuser 等 baseline 做行为克隆（behavior cloning）时监督的标签——\u0026ldquo;人类专家开成了什么样\u0026rdquo;。\n🏭 MetricCache：评测的工程基石 评测时我们不可能每帧都重新解析日志、抽中心线、算可驾驶区域——那会慢一个数量级。NAVSIM 的做法是离线预计算 MetricCache（metric_caching/metric_cache_processor.py），每个场景 token 一个 lzma 压缩的 pkl 文件，评测时直接读入（.pkl 是什么、目录怎么组织，见下下小节「.pkl 是什么？」）。\n缓存里有什么？ compute_metric_cache()（metric_cache_processor.py:313）返回的 MetricCache 字段：\n字段 内容 trajectory PDM-Closed 参考轨迹（用 PDMClosedPlanner 在离线仿真实时生成） human_trajectory 人类专家 GT 轨迹（合成帧为 None） past_human_trajectory 人类历史轨迹（用于 HC 舒适度） observation PDMObservation：插值到 10Hz 的未来检测轨迹 + 信号灯（TTC 需要 1s 额外前瞻） centerline 参考中线（PDMPath，来自 Dijkstra 搜索的路由） route_lane_ids / drivable_area_map 路由车道 + 可驾驶区域多边形 past/current/future_tracked_objects 过去(2Hz)/当前/未来(10Hz)目标轨迹 ego_state / map_parameters 初始自车状态 + 地图参数 scene_type / timepoint Original/Synthetic 与起始时刻 🔑 关键性质：缓存里没有一条字段依赖任何特定模型。 全部是\u0026quot;场景本身长什么样 + 参考轨迹 + 真值\u0026quot;——这决定了它天然可以被所有模型共享。至于\u0026quot;模型自己的输入（相机图/LiDAR）该从哪来、要不要缓存\u0026quot;，是另一条完全独立的线（AgentInput），详见下节「MetricCache 到底建几份？」。\n注意缓存里的 observation 目标轨迹是从 2Hz 真值插值到 10Hz 的（_interpolate_gt_observation，metric_cache_processor.py:99），因为打分的仿真步长是 0.1s——背景车也要有逐 0.1s 的状态才能做碰撞检测。\n预计算为何重要？ 评测时我们要对整个 navtest(12k 帧) 或 navhard(真实+合成) 逐帧算 PDMS。地图解析、中心线抽取、可驾驶区域这些与模型无关的昂贵计算，多跑一次只会浪费算力。NAVSIM 改成一次 cache、多次评测复用，这是它评测高效、可大规模并行的工程基石。\n.pkl 是什么？MetricCache 就是每个场景 token 一个 pkl 文件吗？ 是的，正是如此——MetricCache 本质上就是\u0026quot;每个场景 token 一个 .pkl 文件\u0026quot;。 下面把它讲透。\n① 什么是 .pkl？ .pkl 是 Python pickle 序列化的标准文件后缀（全称 \u0026ldquo;pickle file\u0026rdquo;）。pickle 是 Python 把内存里的对象（字典、列表、类实例……）变成字节流保存到磁盘的机制，要用时再反序列化还原成对象。\n能存什么：几乎任意 Python 对象——NAVSIM 的 MetricCache 就是个 @dataclass 类，里面嵌套了 PDMPath、PDMObservation、Polygon 等自定义对象，pickle 可以原样整套序列化； 为什么用 pkl 不用 JSON：JSON 只能存基础类型（字典/列表/字符串/数字），遇到 Polygon、PDMPath 这种带方法和类型信息的对象就得手写序列化逻辑；pickle 直接\u0026quot;整体封存\u0026quot;，反序列化后拿到的是类型完整的原始对象，评测代码读出来就能直接用； 为什么\u0026quot;每条样本一个文件\u0026quot;：pickle 按对象序列化，天然适合\u0026quot;一个对象存一个文件\u0026quot;的布局——评测按 token 随机取样本时，只读需要的那一个文件，不用像一个大 JSON 那样全量加载。 ② MetricCache 在磁盘上长什么样？ $ { N m ( A e l V t o ( S a g t I d _ o m M a n k e _ t a e t E a m n r X / e ) i P ) c _ _ R c O a O c T h } e / . m p e k t l r i c _ c a c ← ← h e 索 这 / 引 一 目 个 录 场 ： 景 t 的 o 完 k 整 e n M e → t r 文 i 件 c 路 C 径 a 的 c 映 h 射 e 清 （ 单 l z m a 压 缩 ） 目录结构按 log → token → metric_cache.pkl 三级组织（(log_name) 是 log 名、(token) 是场景 token，写代码时替换为实际值即可）； 每个 token 一个目录，目录里是 metric_cache.pkl（默认文件名见 dataloader.py 的 MetricCacheLoader(cache_path, file_name=\u0026quot;metric_cache.pkl\u0026quot;)）； token 就是场景的唯一 ID（一条帧级样本）。有多少个评测 token，就有多少个 pkl 文件——navtest 约 12k 个、navhard 还要再加上合成帧； 上面提到 lzma，是指存的时候用 LZMA 压缩（lzma.open + pickle.load）。因为目标轨迹、可驾驶区域多边形这些数据量不小，压缩后能省一大半磁盘，读的时候自动解压，速度影响很小。 ③ 评测时怎么\u0026quot;读\u0026quot;它？ MetricCacheLoader（dataloader.py）在初始化时先扫描 metadata/ 里的索引，建立 {token: pkl路径} 的字典；评测循环里对每个 token 调用：\nmetric_cache = metric_cache_loader.get_from_token(token) # 按 token 找到对应 pkl → lzma 解压 → pickle 还原 注意这个函数只按 token 查文件——不涉及任何模型。所以前面说的\u0026quot;所有模型共享同一份 MetricCache\u0026quot;在落盘层面就是：同一个 token 只存在一个 metric_cache.pkl，谁评测谁读它。\n💡 一句话总结：pkl 是 Python 的\u0026quot;对象封存\u0026quot;格式；MetricCache = 每个场景 token 一个 lzma 压缩的 pkl 文件；评测按 token 索引读取，与模型无关。\n❓ 高频疑问：MetricCache 到底建几份？雨雪雾呢？ 这是几乎所有第一次用 NAVSIM 的人都会绕进去的问题。直觉是对的：MetricCache 本质上建一份就够，所有模型应该共享。 但你会觉得\u0026quot;每个模型都要建自己的 cache\u0026quot;，是因为把两件完全不同的事混在了一起。下面彻底讲清楚。\n先分清两个完全不同的东西：MetricCache ≠ 模型的输入 NAVSIM 里有两套并行的数据通路，一套与模型无关、全模型共享，另一套与模型强相关、每个模型各自定制。它们唯一的共同点是\u0026quot;都从同一个 scene 派生\u0026quot;。\nMetricCache（打分缓存） AgentInput（模型输入） 服务于 打分器（PDMS 怎么算） 模型（怎么出轨迹） 内容 参考轨迹、人类 GT、中心线、可驾驶区域、路由、未来目标、初始自车状态、地图参数 历史 ego 状态 + 相机图像 + LiDAR 点云（+ driving_command） 生成方式 离线预计算，每个 scene 一份 评测时实时从原始传感器按需加载 依赖模型吗 ❌ 完全不依赖 ✅ 依赖：模型声明用哪些传感器（SensorConfig） 谁复用 所有模型共用同一份 每个模型用自己的配置加载 在代码里的入口 MetricCacheLoader.get_from_token() SceneLoader.get_agent_input_from_token() 看官方评测入口 run_pdm_score.py 的实际循环（这是最硬的证据）：\nmetric_cache = metric_cache_loader.get_from_token(token) # ① 共享缓存：同一份给所有模型 agent_input = scene_loader.get_agent_input_from_token(token) # ② 专属输入：每个模型按需加载 trajectory = agent.compute_trajectory(agent_input) # ③ 模型只用 AgentInput 推理 score = pdm_score(metric_cache=metric_cache, model_trajectory=trajectory, ...) 注意第 ③ 行：模型推理时只碰 agent_input，根本不读 cache。 而打分时用的是 cache 里的地图/真值/参考轨迹。也就是说——你的模型从头到尾看不到 cache 里有什么，cache 也完全不关心你的模型长什么样。\n💡 一句话记忆：MetricCache 是\u0026quot;考卷的标准答案和阅卷标准\u0026quot;，AgentInput 是\u0026quot;发给考生的考题材料\u0026quot;。 全年级考生共用同一份标准答案；但每个考生拿到什么考题材料（只给单目前视？还是八路环视+激光雷达？），取决于他\u0026quot;报考\u0026quot;时声明要哪些传感器。\n那\u0026quot;每个模型建自己的 cache\u0026quot;的错觉是从哪来的？ 你的观察不是空穴来风，工程上确实常常看到\u0026quot;每个模型各跑一遍 cache\u0026quot;。原因有四个，但没有一个是\u0026quot;cache 必须按模型建\u0026quot;：\n每个模型要准备自己的 AgentInput，容易被误记成\u0026quot;建 cache\u0026quot;。真正的模型专属工作量在于：从原始传感器数据里提取并预处理该模型需要的输入（裁哪几个摄像头、LiDAR 要不要 BEV、分辨率、历史帧数、归一化、token 化……）。这是模型的数据加载器干的活，不是 MetricCache。AgentInput.from_scene_dict_list()（dataclasses.py:157）就是干这个的，它按模型的 SensorConfig 从 sensor 目录里挑传感器。\n训练侧的\u0026quot;cache\u0026quot;确实要按模型重新算。注意区分两层：评测用的 MetricCache 共享；但训练侧有两类 cache 都跟模型有关——一是DataCache（training_cache）：每个模型注册自己的 feature/target builders，把 agent_input 变成输入张量、把 scene 变成监督标签并缓存（见下节「data cache」），这部分确实按模型各建一份；二是很多模型训练时把 PDM-Closed 参考轨迹、可驾驶区域、未来 GT 目标当监督标签（比如 Scoring 类方法），是否用、怎么用取决于模型自己——如果你要离线打分给候选轨迹当训练标签，那确实得自己再算一份（参见 排行榜深度分析 里 Hydra-MDP 的\u0026quot;30 小时预计算 PDM 分数\u0026quot;）。这些是\u0026quot;训练标签/输入张量的 cache\u0026quot;，不是\u0026quot;评测的 MetricCache\u0026quot;，别混为一谈。\n合成帧（navhard）的 cache 需要单独补。navhard 掺了 3DGS 合成帧，合成帧没有人类 GT（compute_metric_cache 里 human_trajectory = None），且需要额外预滚动。但这也是按场景建的，不是按模型建的——同一份合成帧 cache，所有模型照常共享。\n工程上\u0026quot;懒得复用\u0026quot;。很多人为了省事，直接给每个新模型重跑一遍完整 cache 流程（反正 scene 过滤配置一样就能算）。这不是必需，只是偷懒——代价是白白多算几千上万条场景的地图解析和 PDM-Closed，纯浪费算力。\n✅ 结论：只要评测集相同、评测配置（scene filter、proposal sampling、LQR 参数）相同，一份 MetricCache 就够所有模型复用。 官方设计初衷就是\u0026quot;一次缓存、多模型复用\u0026quot;。你真正要为每个模型单独准备的，是 AgentInput 那条线。\n雨雪雾数据集：建一份雨的 cache，雪和雾还要建吗？ 分两种情况，答案完全不同——关键看\u0026quot;雨雪雾\u0026quot;是改了什么：\n情况一：同一个 scene，只换天气渲染（外观不变）——一份就够，而且不需要另建。\n假设你对同一个 navtest 场景，用渲染管线把相机图换成雨天版。此时：\nMetricCache 完全不变。因为 cache 里存的是几何/语义信息：参考轨迹、中心线、可驾驶区域、未来目标框（坐标+速度+类别）、路由、初始自车状态。这些内容在雨天、雪天、雾天都是一样的——车还是那辆车、路还是那条路、目标还是那个目标，变的只是\u0026quot;相机拍到的那张图\u0026quot;。 模型输入才变。雨天相机图像变模糊、有雨滴；雪天白茫茫、对比度低；雾天能见度低。这些是 AgentInput 里的 cameras，属于模型感知要处理的。 所以如果雨/雪/雾只是同一批 scene 的不同视觉渲染，那么建一份 cache，三个天气的评测全都能用——评测循环里 metric_cache_loader.get_from_token(token) 完全不变，你只需要在 agent_input 那一步加载不同天气下的相机图。cache 不感知天气，因为天气只影响图像像素，不影响几何真值。\n情况二：雨雪雾是不同场景（不同日志/不同路径）——每个场景都要 cache，但这是\u0026quot;场景维度\u0026quot;，不是\u0026quot;天气维度\u0026quot;。\n如果雨天的 1000 个场景和雾天的 1000 个场景是不同的行车日志（不同地点、不同车流、不同路段），那它们本来就是不同的 scene，自然各有一份 cache。但注意：这不是因为\u0026quot;雨天\u0026quot;需要单独的 cache，而是因为\u0026quot;不同场景\u0026quot;需要各自的 cache——哪怕都是晴天，两个不同场景也得各自建一份。天气在这里只是\u0026quot;这些场景碰巧在雨天拍的\u0026quot;，cache 照旧按 scene 一份一份建。\n💡 判断准则：MetricCache 只跟\u0026quot;场景内容\u0026quot;绑定，跟\u0026quot;场景长什么样（外观）\u0026ldquo;无关。 换个天气、换个光照、换个渲染风格，只要几何真值和地图没变，cache 就复用；换个地点、换段车流、换个交叉口，那就是新场景，就得新 cache。而\u0026quot;每个模型\u0026quot;这个维度，从头到尾都不影响 cache。\n那 MetricCache 里的东西到底是谁\u0026quot;提供\u0026quot;的？ 拆开看，cache 里的字段来自四个不同的提供方——不是单纯\u0026quot;数据集给的\u0026rdquo;：\nMetricCache 字段 提供方 说明 past_human_trajectory / human_trajectory 数据集（OpenScene 日志） 人类司机真实轨迹，日志标注里就有 past/current/future_tracked_objects 数据集 检测目标轨迹，来自日志真值（含类别/尺寸） ego_state / map_parameters 数据集 自车起始状态（位置/朝向/速度）+ 场景地图元数据 centerline / route_lane_ids / drivable_area_map 地图 + PDM 规划器 从 nuPlan 地图 API 拉取路网，Dijkstra 搜出路由、抽取中心线、切出可驾驶区 trajectory（PDM-Closed 参考轨迹） NAVSIM 自带的 PDM 规划器 PDMClosedPlanner 在离线仿真里算出的\u0026quot;满分答案\u0026quot; observation（插值到 10Hz 的目标+信号灯） 数据集 + scorer 版本 目标轨迹来自真值，插值方式由 scorer 的仿真分辨率决定 所以更准确的说法是：MetricCache = 数据集（场景/真值）× 地图 × NAVSIM/PDM scorer 版本 × 评测配置 四者的共同产物，而不是\u0026quot;数据集直接提供的\u0026quot;。\n那\u0026quot;按数据集提取 MetricCache\u0026quot;具体指什么？ 指对每一个 scene（一个 token）跑一遍 compute_metric_cache(scenario)（metric_cache_processor.py:313）：\n# 输入是一个 NavSimScenario = OpenScene 数据(自车/目标/标注) + nuPlan 地图(MapAPI) metric_cache = metric_cache_processor.compute_metric_cache(scenario) # 按 token 存成 metric_cache_path 下 (log)/(token)/metric_cache.pkl 三个层级 metric_cache_loader.dump_all_caches() 数据流是：原始日志 → scene（pickle）→ 场景 + 地图喂给 compute_metric_cache → 逐字段算出 → 按 token 落盘一份。评测时所有模型从同一份落盘文件 get_from_token(token) 读。所以\u0026quot;提取\u0026quot;的对象是\u0026quot;场景\u0026quot;，不是\u0026quot;模型\u0026quot;——你为 11 个模型服务时，这段代码也只该跑一遍。\n那\u0026quot;data cache\u0026quot;又是什么？和 MetricCache 什么关系？ 这是刚才那句\u0026quot;别混为一谈\u0026quot;的关键另一半。NAVSIM 里确实存在第二种 cache，官方叫 training_cache（见 default_training.yaml 里的 cache_path: ${NAVSIM_EXP_ROOT}/training_cache），你同事说的 \u0026ldquo;data cache\u0026rdquo; 基本就是这个。它和 MetricCache 是两种完全不同的东西：\nMetricCache（打分缓存） DataCache / training_cache（训练数据缓存） 官方配置项 metric_cache_path cache_path（training_cache） 缓存什么 PDM scorer 要用的场景指标（参考轨迹/中心线/可驾驶区/真值） 模型的输入张量 + 监督标签（feature/target builders 的输出） 谁生成 MetricCacheProcessor（与模型无关） Dataset.cache_dataset()（按模型注册的 builders） 落盘形式 每个 scene 一个 metric_cache.pkl 每个 scene 下 token/(builder_unique_name).gz 依赖模型吗 ❌ 不依赖，全模型共享 ✅ 依赖：不同模型注册不同的 feature/target builders 用途 评测打分（PDMS） 训练时避免反复从原始传感器重算输入 看训练数据集源码 dataset.py 的缓存逻辑就一目了然——_cache_scene_with_token 对每个 builder 单独存一份：\nscene = scene_loader.get_scene_from_token(token) # 从原始数据读场景 agent_input = scene.get_agent_input() # 读传感器 → AgentInput # feature_builders：把 agent_input 变成模型输入张量 builder.compute_features(agent_input) → 存成 token/(name).gz # target_builders：把 scene 变成监督标签张量 builder.compute_targets(scene) → 存成 token/(name).gz 注意上面 builder.get_unique_name() 生成的唯一名——这个唯一名里带着模型特征。所以：\nDataCache 才是\u0026quot;按模型不同\u0026quot;的那个 cache：你的模型要 8 个摄像头、另一个模型只要前视，它们的 feature builder 不同 → unique_name 不同 → 各存各的 .gz，不能混用。这就是\u0026quot;每个模型都建 cache\u0026quot;这个说法在训练侧是真的的原因。 MetricCache 是\u0026quot;按场景不同\u0026quot;的那个 cache：跟模型零关系，评测侧全模型共享。 一句话总结两种 cache 的分工：MetricCache 管\u0026quot;怎么打分\u0026quot;（评测共享）；DataCache 管\u0026quot;怎么喂模型\u0026quot;（训练按模型各自建）。 前者缓存场景指标，后者缓存输入张量和标签。你之前看到\u0026quot;每张图像都建 cache\u0026quot;，说的其实是 DataCache 这条线；而 MetricCache 从算法上讲就该是大家共用一份的。\n一个真实例子：同事的雨天数据为什么得重建 cache？ 把上面所有规则套到一个具体场景，能帮你彻底固化理解。假设同事用渲染管线做了雨天版本，你问\u0026quot;雨天能复用官方 NAVTEST 的 metric cache 吗？\u0026quot;——答案取决于雨天数据动了哪些东西：\n如果能复用：如果只是把同一批场景的相机图像换成雨天渲染，而 scene token、scene pickle（自车/目标/地图真值）、以及动态目标信息全都不变——那么完全可以复用官方 NAVTEST 的 metric cache。因为天气只影响 agent_input.cameras 的像素，MetricCache 里没有一个字段被它碰到。\n必须重建的情况：你同事给的雨天数据实际上引入了这些变化——\n新的日志目录、新的 scene pickle 目录； 新的 token（带 _rain_multi 后缀，token 本身变了）； 场景集合变了：12370 个场景 ≠ 官方 12146 个； 还需要做 token 映射 + lidar 字段兼容处理。 token 一变，MetricCacheLoader 的索引就找不到了（它按 {token: path} 建立索引，dataloader.py:316）。而这些新场景本质上是一批\u0026quot;新场景\u0026quot;——哪怕内容长得和官方场景几乎一样，只要 token/scene pickle/场景集合变了，就得为它们重建对应场景的 metric cache。将来做雪天、雾天同理：\n只做\u0026quot;原 token 对应的图像替换\u0026quot; → 复用官方 cache； token、scene pickle 或场景集合变了 → 必须重建。 但注意这跟模型数量无关——不管 11 个模型还是 1 个模型，只要大家用同一批场景、同一个 NAVSIM v1 scorer，就该共享同一份（雨天）metric cache。模型真正不同的，只是 checkpoint 推理和 trajectory 输出。\n那每个模型的输入到底从哪\u0026quot;提取\u0026quot;？ 这正是 SceneLoader + AgentInput 干的活。模型不直接从 cache 里拿输入，而是从原始日志的传感器数据里提取：\n1 2 3 4 5 . . . . . n S A m T a c g o r v e e d a s n n e j i e t l e m L I . c o n c t 原 a p o o 始 d u m r 数 e t p y 据 r u （ （ ： { , , t 8 l 按 e o e c l _ 个 g s g a i t 局 s c o m d r 部 e _ e a a 坐 + n s r r j 标 e t a s e 点 s _ a s （ c ） e f t （ 可 t n i u 该 选 o s l s 模 r o t e 型 L y r e s 要 i ( s r （ 的 D a ） 历 相 A g 圈 史 机 R e 定 自 图 n 车 点 t t 状 + 云 _ o 态 ） i k + 内 } n e d 外 p n r 参 u ， i ） t 按 v ) 模 i 型 n g S _ e c n o ← s m o m 模 r a 型 C n 只 o d 用 n ） 这 f 个 i g 选 传 感 器 提取的关键是 SensorConfig（dataclasses.py:782）——每个模型自己声明：cam_f0=True（只要前视）、cam_l0=[0,1]（要左前且要历史两帧）、lidar_pc=True（要激光雷达）……SceneLoader 就按这份声明去 sensor 目录里读对应的 blob，拼成 AgentInput。所以：\n换模型 = 换 SensorConfig + 换预处理（图像 resize、LiDAR 转 BEV、token 化），这是模型自己的数据加载器逻辑； 不换 scene = cache 不变（共享那份）；不换场景内容 = 天气变了 cache 也不变。 一句话收束本节：MetricCache 建一份给所有人用；AgentInput 每个模型按自己的 SensorConfig 从原始传感器里现取。 把这两条线分开，你看到的所有\u0026quot;每个模型都要……\u0026ldquo;的困惑就都解开了。\n🆚 为什么 NAVSIM 比 nuScenes 的 L2 更好？ 这要从 L2 误差的根本问题说起。\n对比维度 nuScenes L2 误差 NAVSIM PDMS 衡量对象 与人类 GT 的位移差 轨迹本身的安全/舒适/进展 多模态 ❌ 把合理替代方案判为错 ✅ 只要合理就给分 \u0026ldquo;躺平\u0026quot;问题 ❌ 原地不动 L2 最低，最\u0026quot;优\u0026rdquo; ✅ EP 惩罚，不动拿低分 分布偏移 严重：自车轨迹几乎总在 GT 流形上 缓解：不要求贴合 GT 与闭环相关性 几乎无相关 有正相关 NAVSIM 论文里一个核心实验（见上图）：他们把多个规划器放进真正的闭环仿真，发现传统 L2/OLS 指标和闭环分数几乎零相关——一个 nuScenes 上 L2 最低的模型，闭环里可能是个马路杀手；而 PDMS 与闭环分数呈现明显的正相关。这正是 NAVSIM 迅速取代 nuScenes、成为端到端规划标配的原因：它在开环代价下，给出了一个真正\u0026quot;预言\u0026quot;驾驶能力的信号。\n💡 一句话：nuScenes 的 L2 衡量\u0026quot;像不像人开\u0026rdquo;，NAVSIM 的 PDMS 衡量\u0026quot;开得好不好\u0026quot;——后者才是我们真正关心的。\n🏆 当前 NAVSIM 排行榜 Top（2025–2026） 下面是 NAVSIM 上有代表性的 SOTA 工作（分数为公开报告值，含 v1 的 PDMS 与 v2 的 EPDMS）。注意榜单迭代极快，半年就有新王者。\n排名 模型 PDMS(v1) ↑ EPDMS(v2) ↑ 关键技术 1 CLOVER 94.5 90.4 候选生成+打分器闭环自蒸馏 2 CLEAR 93.7 — VAE 单步漂移 + Drive-JEPA + 小 LLM 3 DriveVLA-W0 93.0 86.1 世界模型预训练 + AR 动作头（单目） 4 LWDrive 92.0 89.6 世界模型引导的层级化规划 5 ASSCG 91.4 — 快慢系统自适应 Query 门控 6 D³-MoE 91.3* 87.5* 解耦扩散 MoE + 风格控制 7 HiST-VLA — 88.6 层次化时空 VLA 8 WoTE 88.3 — 面向思考的端到端 9 DiffusionDrive 88.1 84.5 扩散头多模态轨迹生成 10 S-squared-VLA 87.1 — 语义/空间解耦 VLA — OneDrive 86.8 — 统一多范式 VLA — UniAD 83.4 — 经典基线（2023） 参考 人类驾驶 ~94.8 — 性能天花板 * D³-MoE 为 Best-of-Three 集成分数。\n几点趋势观察：\n天花板逼近人类：头部工作（CLOVER 94.5）已非常接近人类参考分（~94.8），navtest 上的 PDMS 几乎快要刷满。 战场转移到 v2/navhard：因为 v1 接近饱和，2025 年起竞争焦点转向 EPDMS 和伪闭环 navhard（更难、含分布外场景），顶尖模型的 EPDMS 仍在 90 上下挣扎。 方法论收敛：榜单前列几乎全是 \u0026ldquo;生成式多模态候选 + 打分挑选\u0026rdquo; + 大模型/世界模型\u0026quot; 的组合，纯确定性回归已被淘汰。 安全类子分饱和：NC、TTC、Comfort 在 SOTA 模型上普遍接近满分，真正拉开差距的是 EP（前进量）——敢不敢开得快、开得远。 ⚠️ NAVSIM 的局限性 NAVSIM 再好用，也不是闭环。认清它的边界，才能正确解读分数。\n局限 说明 后果 非反应式（自车层面） 只评测单次 4 秒前向仿真，不递归 看不到\u0026quot;小偏差滚雪球成大事故\u0026quot;的复合误差 背景车可反应、但不交互学习 v2 背景车是 IDM 反应式 仍无法覆盖\u0026quot;自车与背景互相博弈\u0026quot;的完整闭环 无误差恢复 只仿真 4 秒，不递归 复合误差根本触发不了 分布偏移 评测仍在数据集分布内 OOD（真正长尾）场景的失败完全暴露不出来 传感器固定 无天气/光照/对抗扰动 感知鲁棒性测不到 开环打分本质 仍是非交互式 \u0026ldquo;刷榜技巧\u0026rdquo;（针对指标过拟合）依然可能 最典型的反例：一个在 NAVSIM 上拿 90+ 分的模型，闭环里可能因为第一次轻微偏离车道后，场景就跑出训练分布而彻底崩溃——这就是所谓的 compounding error（误差累积） 雪球效应。NAVSIM 的非反应式设计根本触发不了这种失败模式。\n⚠️ 记牢：NAVSIM 高分是\u0026quot;能规划\u0026quot;的必要条件，远非\u0026quot;能开车\u0026quot;的充分条件。\n🔗 与 Bench2Drive 等闭环评测的互补关系 正因为 NAVSIM 有上述局限，社区形成了\u0026quot;开环 + 闭环\u0026ldquo;双轨评测的共识，而 Bench2Drive 正是闭环侧的代表。\n维度 NAVSIM（开环/半开环） Bench2Drive（闭环） 底层 OpenScene / nuPlan 真实日志 CARLA 仿真器 交互 自车非反应式，背景车 v2 起可 IDM 反应 完全反应式，交通流实时响应 指标 PDMS / EPDMS Driving Score（完成率×合规） 成本 低，提交预测即可 高，需模型在线推理 rollout 覆盖 真实数据分布 44 条预定义路线、9 类能力的场景库 强项 真实感、大规模、快速迭代 真能跑通、能暴露累积误差与交互失败 两者的互补关系可以这样理解：\nNAVSIM 负责\u0026quot;快速筛选\u0026rdquo;：成本低、迭代快，适合算法研发的日常打磨。一个新想法先在 NAVSIM 上验证有没有前途。 Bench2Drive 负责\u0026quot;终极考核\u0026quot;：只有在闭环里真正跑通 44 条路线、低碰撞高完成率，才算\u0026quot;能开车\u0026quot;。 有意思的是，2026 年的一项跨基准研究（arXiv:2605.00066）系统比较了两者，得出三个关键结论：\nPDMS 与闭环 Driving Score 强正相关但不单调——存在明显的排名反转； EP（前进量）是闭环成功最强的单项预测器，甚至比碰撞指标 NC 更能预言闭环表现； TTC 和 Comfort 在 SOTA 上已接近饱和，对区分模型贡献很小。 这恰好印证了\u0026quot;开环负责精度与质量、闭环负责行为与交互\u0026quot;的分工。\n理想的评测组合拳 N B 实 A e 路 V n 路 S c 测 I h （ M 2 影 （ D 子 开 r 模 环 i 式 ， v ） P e D （ M 闭 S 环 → ） ， D S 真 → ） 正 长 → 尾 快 、 速 天 验 暴 气 证 露 、 规 累 对 划 积 抗 质 误 场 量 差 景 、 、 刷 验 算 证 法 真 迭 能 代 开 三者缺一不可：开环看精度 + 闭环看行为 + 实路看长尾。NAVSIM 不是终点，而是这条评测链上最关键、最高效的第一环。\n✅ 小结 抓住这三点，你就抓住了 NAVSIM 的精髓：\n本质 = 基于 nuPlan/OpenScene 的非反应式开环评测，用 4 秒前向仿真让轨迹\u0026quot;开出来\u0026quot;再做碰撞/合规检查，成本远低于闭环。 链路 = 模型输出 (8,3) 局部坐标轨迹 → 转全局帧 → 插值到 0.1s → LQR 控制器（纵向+横向双子系统） 生成加减速/转向指令 → 自行车运动模型 逐 0.1s 积分 → 与背景交通流做碰撞/合规检查 → 乘性×加权合成 PDMS，v2 再经两阶段伪闭环聚合得到 EPDMS。 定位 = 当前端到端规划的事实标准，navtest 接近饱和、战场转向 v2 的 EPDMS 与 navhard；但它仍非闭环，必须与 Bench2Drive、实路测试互补。 一句话总结：NAVSIM 让\u0026quot;规划好不好\u0026quot;第一次变得可量化、可复现、可比拼——它是端到端驾驶走向科学的基石。\n💡 这是「知识点拆解」系列的第 6 篇。结合前面讲过的端到端演进、DiffusionDrive、Flow Matching，你就能完整理解一篇端到端论文里\u0026quot;PDMS 88→92\u0026quot;到底意味着什么。下期我们继续拆解闭环评测与强化学习在规划里的落地。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/navsim%E5%9F%BA%E5%87%86%E8%AF%A6%E8%A7%A3/","summary":"NAVSIM 是当前自动驾驶规划领域最重要的开环评测基准，几乎所有端到端新工作都在上面比拼 PDMS 分数。它基于 OpenScene 数据设计了非反应式仿真框架，以 PDMS/EPDMS 为核心指标抛弃传统 L2 误差思路。是端到端规划从学术研究走向工业落地的关键度量工具。","title":"NAVSIM 详解：自动驾驶规划的事实标准评测基准"},{"content":"📄 论文信息 标题：Cosmos 3: An Omni-Modal World Foundation Model for Physical AI 团队：NVIDIA（黄仁勋 GTC 2026 主题演讲重磅发布，由 Cosmo 团队主导） 发表：2026 年（技术报告 + 开源权重同步放出） 关键词：世界模型、全模态、Mixture-of-Transformers、物理 AI、视频生成、具身智能 一句话总结：用一套 Mixture-of-Transformers 双塔架构把语言、图像、视频、音频、动作五模态揉进一个模型，让\u0026quot;看世界、听世界、动世界\u0026quot;在同一个权重里完成，并以宽松开源许可证释放给产业界。 🗺️ Cosmos 三代演进：从\u0026quot;视频生成器\u0026quot;到\u0026quot;全模态世界大脑\u0026quot; 理解 Cosmos 3 必须先看这条演进线。NVIDIA 用三代产品回答了三个递进的问题：世界模型到底该建模什么？\n代际 发布时间 核心定位 模态覆盖 架构关键 开源许可证 Cosmos 1 2025 年 1 月 文本到世界的视频生成器 文本 → 视频 扩散 + 因果 Transformer，连续 token NVIDIA Open Model License Cosmos 2 2025 年中 可控、可预测的世界模拟器 文本/动作/状态 → 视频 引入可预测 token、强化时序一致性 NOML（更新版） Cosmos 3 2026 年 全模态世界基础模型 语言 + 图像 + 视频 + 音频 + 动作 MoT 双塔，五模态原生统一 OpenMDW-1.1 三代的逻辑很清晰：第一代证明\u0026quot;能生成物理可信的视频\u0026quot;，第二代证明\u0026quot;生成结果可控可用\u0026quot;，第三代证明\u0026quot;世界可以统一建模\u0026quot;。Cosmos 3 不再是\u0026quot;一个会画视频的模型\u0026quot;，而是\u0026quot;一个能同时理解、生成、预测、控制世界的基座\u0026quot;——这是从\u0026quot;专用工具\u0026quot;到\u0026quot;通用基础设施\u0026quot;的跃迁。\n🏗️ Cosmos 3 架构总览 Cosmos 3 的最大创新在于 Mixture-of-Transformers (MoT) 双塔架构，将 Reasoner（推理器）与 Generator（生成器）融合在单一框架中。\nMoT 双塔设计 塔 架构 职责 生成方式 Reasoner Tower（语义塔） 自回归 Transformer 语言理解、视觉推理、因果分析 next-token 自回归解码 Generator Tower（感知塔） 扩散 Transformer 图像/视频/音频/动作生成 迭代去噪 两塔在每一层通过 共享跨模态注意力（Shared Cross-Modal Attention） 交换信息——Reasoner 告诉 Generator \u0026ldquo;应该生成什么\u0026rdquo;，Generator 把生成结果反馈给 Reasoner 做进一步推理。推理时可按需只激活单塔，实现灵活的推理/生成分离。\n五模态统一编码 模态 编码方式 空间/时间表示 语言 BPE 文本 token 离散 图像 空间因果 VAE 光栅顺序，保留空间结构 视频 时空因果 VAE（3D 压缩） 时序+空间联合压缩 音频 连续频谱 token + 语义码本 声学细节+语义兼顾 动作 连续向量 + 时间编码 低维强因果 三种模型规格 规格 参数量 定位 典型部署 Cosmos 3 Nano 16B 车端/机器人端近实时 实时世界预测、策略推理 Cosmos 3 Super 64B 云端旗舰 最强物理一致性、研究用途 🤔 要解决什么问题？ 物理 AI（自动驾驶、机器人、工业仿真）对世界模型的需求与传统生成 AI 截然不同。它要求的不只是\u0026quot;画面好看\u0026quot;，而是物理一致性、时序因果性、多模态对齐。此前的世界模型普遍面临三大瓶颈：\n模态割裂：语言模型、视频生成模型、音频模型、控制策略各自为政，无法共享世界知识。一个机器人系统往往要串联五六个模型，误差逐级放大 物理可信度不足：纯生成模型常出现物体穿模、重力违背、因果倒置，无法直接用于仿真训练 闭源垄断风险：商业世界模型多不开源，企业担心数据外泄和断供 Cosmos 3 的目标就是用一个统一架构同时解决这三件事：原生多模态融合、面向物理 AI 的训练目标、以及彻底的开源策略。\n🏗️ 核心创新：MoT 双塔架构 Mixture-of-Transformers（MoT，混合 Transformer） 是 Cosmos 3 的灵魂。它没有沿用\u0026quot;一个超大 Transformer 硬吃所有 token\u0026quot;的稠密路线，而是采用双塔（Dual-Tower）+ 共享注意力的设计。\n为什么要双塔？ 不同模态的统计特性差异巨大：语言是离散、稠密语义；视频是连续、空间冗余；音频是连续、时序高频；动作是连续、低维、强因果。把它们塞进同一个 token 空间强行对齐，要么牺牲语义精度，要么牺牲时序细节。MoT 的解法是——该分开的分开，该共享的共享。\n双塔分工 模块 负责模态 token 类型 设计动机 语义塔（L-Tower） 语言、高层语义 离散文本 token 继承 LLM 的推理与指令能力 感知塔（P-Tower） 图像、视频、音频、动作 连续 + 离散混合 token 处理时空冗余与物理动力学 两座塔各自拥有独立的 FFN 与归一化层（模态专属参数），但在每一层都通过一个**共享跨模态注意力（Shared Cross-Modal Attention）**模块交互。这样设计的好处是：语义推理和感知生成各有专精，又能在每一层深度对齐，而不是只在最后做一次拼接。\n数据流示意 模型的整体数据流可以用一句话概括（为避免框图字符，这里用箭头文字描述）：\n任意模态输入 → 分别进入对应塔的自注意力 → 在每层通过共享跨模态注意力交换信息 → 各塔输出 → 解码为对应模态。任意模态都可作为输入，任意模态都可作为输出——这就是\u0026quot;全模态任意到任意（any-to-any）\u0026quot;。\n与稠密多模态模型的对比 维度 稠密单塔（如早期多模态 LLM） Cosmos 3 MoT 双塔 参数共享 全部共享 FFN 分、注意力合 模态冲突 严重（互相稀释） 低（专属参数隔离） 扩展新模态 需重训 加一路编码器即可 推理效率 单塔稠密 可按需激活塔 训练稳定性 易失衡 塔间负载均衡更稳 可以说，MoT 把** mixture-of-experts 的\u0026quot;分而治之\u0026quot;思想从 FFN 粒度提升到了模态粒度**。\n训练上的两个工程细节 架构之外，Cosmos 3 在训练侧有两个值得注意的设计。其一是模态负载均衡 loss：由于五模态的数据量与学习难度差异极大（语言 token 极多、动作 token 极少），若不加约束，模型会偏向数据多的模态。MoT 引入了一个轻量的塔间均衡项，让每座塔的梯度贡献相对可控，避免\u0026quot;语言吃掉感知\u0026quot;。其二是模态dropout：训练时随机屏蔽部分模态输入，强迫模型在模态缺失时仍能推理——这正是\u0026quot;任意到任意\u0026quot;生成能力的来源，也让模型在部署时具备容错性（某路传感器失效仍可工作），这对自动驾驶这种对鲁棒性要求极高的场景尤为关键。\n🔗 五模态如何统一 统一五模态的关键不在\u0026quot;加输入口\u0026quot;，而在让模型理解模态间的因果与对齐关系。Cosmos 3 的做法可以拆成三层：\n第一层：统一 token 化 每种模态都被转成模型可处理的 token 序列，但保留各自特性：\n模态 token 化方式 特点 压缩率 语言 BPE 文本 token 离散，语义稠密 ~4 chars/token 图像 空间因果 VAE 按光栅顺序，保留空间结构 8×8 patch → 1 token 视频 时空因果 VAE（3D 压缩） 时序 + 空间联合压缩 8×8×4 frames → 1 token 音频 连续频谱 token + 语义码本 兼顾声学细节与语义 可调压缩比 动作 连续向量 + 时间编码 低维但强因果 每时间步 1 token Cosmos 3 的 tokenizer 设计遵循\u0026quot;同一表征空间，不同编码策略\u0026ldquo;的原则——所有模态最终映射到统一的 hidden space，但保留各自的统计特性。VAE 的因果设计（空间因果 / 时空因果）确保生成时的自回归一致性，这是世界模型区别于纯生成模型的关键。\n第二层：跨模态对齐预训练 用一个任意模态掩码重建 + 跨模态生成的混合目标训练，让模型学到\u0026quot;看到画面要能想象声音、听到声音要能脑补画面、给出指令要能预测动作\u0026rdquo;。这种双向补全是世界模型区别于单向生成的核心。\n训练流程：Reasoner + Generator 双线并行 Cosmos 3 的训练在两条管线上同步推进：\n训练管线 模型模式 目标函数 数据 生成方式 Reasoner 自回归 VLM $\\mathcal{L}_{\\text{reasoner}} = -\\sum \\log p(t_i \\mid t_{\u003c i})$ 图文对+视频标注+推理链 next-token 预测 Generator 扩散 Transformer $\\mathcal{L}_{\\text{gen}} = \\mathbb{E}[\\|\\mu_\\theta(\\bm{x}^{(t)}, t, \\bm{c}) - \\bm{x}^{(0)}\\|^2]$ 2000 万小时视频+音频+动作 迭代去噪 联合优化目标：$\\mathcal{L} = \\mathcal{L}_{\\text{reasoner}} + \\lambda \\mathcal{L}_{\\text{gen}} + \\alpha \\mathcal{L}_{\\text{balance}}$，其中 $\\mathcal{L}_{\\text{balance}}$ 为模态负载均衡项。训练先用海量互联网数据预训练，再用仿真合成数据做物理对齐后训练。\n第三层：物理对齐后训练 预训练后，用物理标注数据（物体持久性、重力、碰撞、因果时序）做后训练，把\u0026quot;画面合理\u0026quot;升级为\u0026quot;物理可信\u0026quot;。这也是 Cosmos 3 在 Physics-IQ 上拉开身位的关键。\n📊 预训练数据：规模与构建 世界模型的能力上限由数据决定。Cosmos 3 的预训练数据在规模、多样性、质量三个维度都做了升级。\n总规模：约 2000 万小时量级的多模态数据（视频为主，辅以图文、音频、机器人轨迹） 视频来源：互联网爬取 + 版权合作 + 仿真合成，覆盖驾驶、工厂、室内、自然、机器人操作等场景 清洗管线：质量分类器去模糊/去文字/去动画 → 运动筛选剔除静态帧 → 物理一致性过滤去除穿模片段 → 去重 合成数据：用 NVIDIA Omniverse / Isaac Sim 大量合成带完美标注的物理仿真片段，弥补真实数据中 corner case 的稀缺 数据维度 Cosmos 2 Cosmos 3 视频时长 千万小时级 2000 万小时级 模态种类 文本 + 视频 五模态 物理标注 弱 强（仿真合成） 驾驶场景占比 中 显著提升 合成数据的引入是关键——它让模型在真实世界罕见但安全攸关的场景（如高速爆胎、行人鬼探头）上也能学到合理的物理规律，这对自动驾驶和机器人训练价值巨大。\n🔬 基准表现：8 项物理 AI 基准开放第一 Cosmos 3 在三个权威基准族上验证了\u0026quot;全模态 + 物理可信\u0026quot;的价值。\nUniGenBench（统一生成基准） 评测多模态生成质量，包括文生视频、图生视频、音生视频、视频续写等。\n任务 闭源 SOTA Cosmos 3 开放模型此前最佳 文生视频（物理一致性） 略高 开放第一 落后明显 图生视频 持平 开放第一 — 音视频联合生成 略低 开放第一 不支持 PAIBench（物理 AI 基准） 评测作为世界模拟器训练策略的能力——能否生成足够真实的\u0026quot;世界\u0026quot;来训练自动驾驶/机器人。\nCosmos 3 生成的驾驶场景用于训练端到端规划器后，闭环仿真通过率显著优于用 Cosmos 2 的数据 在机器人操作策略的 sim-to-real 迁移中，真实环境成功率提升明显 Physics-IQ（物理智商） 专门测物理规律理解：重力、碰撞、物体持久性、因果时序。\n模型 物理一致性得分 通用视频大模型 较低（穿模/因果错误频发） Cosmos 2 中等 Cosmos 3 开放模型最高，逼近闭源 SOTA 关键结论：Cosmos 3 在 8 项物理 AI 基准上取得开放模型第一，部分指标甚至超过闭源旗舰。物理对齐后训练和仿真合成数据是拉开差距的核心。\n📐 三种规模：覆盖从车端到云端 Cosmos 3 同步发布三个尺寸，对应不同部署场景：\n规格 参数量 定位 典型部署 Cosmos 3 Nano ~4B 车端 / 机器人端实时 实时世界预测、闭环仿真 Cosmos 3 Standard ~20B 工作站 / 边缘服务器 数据生成、策略训练 Cosmos 3 Large ~64B 云端训练与旗舰推理 最强物理一致性、研究用途 这种分层发布降低了落地门槛：中小团队用 Nano 就能在本地跑世界模型，大厂用 Large 撑起最高质量。同一架构、同一权重配方，只换规模不换范式，这也是基础模型相比专用模型的最大红利。\n🔓 开源策略：OpenMDW-1.1 的产业意义 Cosmos 3 采用 OpenMDW-1.1（Open Model Defense Warranty）许可证，相比 NVIDIA 早期许可证更宽松、更明确：\n允许商用：企业可直接用于商业产品，无需额外授权 权重 + 代码 + 部分数据管线全部开放 明确防御性条款：约束模型不被滥用于有害用途，同时保护使用方权益 维度 传统闭源世界模型 Cosmos 3 (OpenMDW-1.1) 商用 受限/付费 自由商用 数据安全 担心外泄 本地部署 可定制 黑盒 全可微调 供应链风险 断供风险高 自主可控 对自动驾驶、机器人这种安全攸关且高度定制的行业，\u0026ldquo;能自己掌握权重\u0026quot;几乎是从\u0026quot;敢用\u0026quot;到\u0026quot;敢上量产\u0026quot;的决定性因素。NVIDIA 这一招本质上是用开源换生态——把 Cosmos 做成物理 AI 时代的\u0026quot;安卓/Linux\u0026rdquo;。\n🚗 应用场景：自动驾驶与机器人 自动驾驶 闭环仿真数据生成：按需生成各种 corner case（雨雪夜、鬼探头、前车掉落物）训练规划器，解决真实数据长尾稀缺 世界预测：实时预测未来 3–5 秒的多智能体轨迹与场景演变，作为规划前置模块 多视角一致性生成：环视多摄像头画面联合生成，保证跨视角几何一致 可解释的世界理解：配合语言塔，输出\u0026quot;我预测前车会变道，因为……\u0026ldquo;的自然语言解释 值得强调的是，音频模态在自动驾驶里常被忽视，实则价值不低——警车/救护车的鸣笛定位、轮胎异常声响、事故碰撞声，都能成为感知系统的有益补充。Cosmos 3 把音频纳入世界建模，让\u0026quot;听声辨位\u0026quot;成为可能，这是纯视觉世界模型做不到的。\n机器人 仿真到真实（sim-to-real）：生成多样化物理仿真环境训练操作策略，再迁移到真机 动作条件视频预测：给定一个动作，预测世界如何变化，用于模型预测控制（MPC） 灵巧操作数据扩增：合成罕见操作场景，补足真实遥操作数据不足 工业与数字孪生 工厂产线异常预测、Omniverse 数字孪生的物理填充——NVIDIA 把 Cosmos 与自家 Omniverse / Isaac 生态深度打通，形成\u0026quot;建模型→生数据→训策略→部署\u0026quot;的闭环。 📝 个人思考 读完 Cosmos 3，我最大的感受是：世界模型正在重走 LLM 的路，而且走得更激进。从 GPT 证明\u0026quot;一个架构吃所有 NLP 任务\u0026rdquo;，到 Cosmos 3 证明\u0026quot;一个架构吃所有模态的世界建模\u0026quot;，叙事高度一致。MoT 双塔的精妙之处不在于它有多复杂，而在于它承认了模态之间的本质差异，并在正确的粒度上做了分离与共享——这比强行用一个稠密塔硬扛所有模态要聪明得多。我判断 MoT 这种\u0026quot;注意力共享 + FFN 分家\u0026quot;的范式会成为下一代多模态基座的主流，就像 Transformer 取代 RNN 一样。\n第二点启发是关于仿真合成数据。物理 AI 的核心瓶颈从来不是算法，而是真实世界长尾数据。Cosmos 3 用 Omniverse/Isaac 合成带完美标注的物理数据，本质上是把\u0026quot;数据采集\u0026quot;从\u0026quot;去真实世界碰运气\u0026quot;变成\u0026quot;在仿真里按需生产\u0026quot;。这对自动驾驶意义尤其重大——那些一辈子难得遇到的极端场景，可以在仿真里生成千万遍。谁能把\u0026quot;真实数据 + 合成数据\u0026quot;的混合配方调到最优，谁就掌握了物理 AI 的数据护城河。这也呼应了我在读 DriveVLM 时的判断：壁垒正在从模型结构转向数据闭环。\n最后一点关于开源与生态。NVIDIA 用 OpenMDW-1.1 这种宽松许可证开放 64B 级别的世界模型，几乎是在\u0026quot;送基础设施\u0026quot;。这不是慈善，而是精准的生态卡位——当全行业的自动驾驶和机器人都用 Cosmos 生数据、跑仿真，NVIDIA 的 GPU、Omniverse、Isaac 就成了物理 AI 时代的事实标准。对从业者来说，这是难得的窗口期：与其从零自研世界模型，不如站在 Cosmos 肩膀上做上层应用。但也要清醒——开源基座意味着算法红利迅速摊薄，真正的差异化会越来越集中在数据、场景理解、安全验证这些苦活累活上。能在这些地方扎根的团队，才是物理 AI 长跑里的赢家。\n📖 这是论文精读系列的第 6 篇。Cosmos 3 把世界模型推向全模态统一，你认为它会在哪些场景最先落地？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/cosmos3-%E4%B8%96%E7%95%8C%E5%9F%BA%E7%A1%80%E6%A8%A1%E5%9E%8B%E7%B2%BE%E8%AF%BB/","summary":"NVIDIA Cosmos 3 用 Mixture-of-Transformers 双塔架构将语言、图像、视频、音频、动作五模态统一进单一世界基础模型。Reasoner 塔负责语义推理，Generator 塔负责高保真生成，两塔通过共享跨模态注意力深度耦合。在 8 项物理 AI 基准上取得开放模型第一，并以 OpenMDW-1.1 宽松许可证开源。","title":"论文精读｜NVIDIA Cosmos 3：全模态世界基础模型开启物理AI新纪元"},{"content":"一句话理解坐标系统 坐标系统 = 给自动驾驶的每一个传感器和空间定义一个\u0026quot;原点在哪、xyz 朝哪\u0026quot;的共识规则，让不同来源的数据能在同一个空间里对齐。\n自动驾驶车辆上通常有 612 个摄像头、13 个 LiDAR、若干个毫米波雷达。每个传感器都在自己的\u0026quot;小坐标系\u0026quot;里感知世界——摄像头看到的是像素，LiDAR 看到的是点云。要把这些数据融合到一起、做统一感知和规划，就必须建立一套坐标系统变换链。\n🎯 自动驾驶中的六大坐标系 1. 世界坐标系（World / Global Coordinate） 世界坐标系是全局统一的参考系，通常采用**东北天（ENU）或地心地固（ECEF）**坐标系：\nECEF：原点在地球质心，$+x$ 指向本初子午线与赤道交点，$+z$ 指向北极，$+y$ 按右手系确定。用于全球导航。 ENU：以局部点为原点，$+x$ 向东，$+y$ 向北，$+z$ 向上（天）。更常用在自动驾驶局部场景中。 在自动驾驶系统中，世界坐标通常来自 GPS + IMU 组合导航的定位结果。车辆在高精地图上的位置就是用世界坐标表示的。\n2. 自车坐标系（Ego-Vehicle / Body Coordinate） 自车坐标系以车辆本身为原点，是感知和规划的默认工作空间：\n$+x$：车辆前进方向（车头） $+y$：车辆左侧 $+z$：垂直向上（车顶方向） 原点通常位于后轴中心在地面的投影点，或车辆几何中心 几乎所有感知算法的输出（目标位置、速度、朝向）都是在自车坐标系中给出的。规划模块输出的轨迹点也是自车坐标系下的 $(x, y, \\theta)$。\n3. 相机坐标系（Camera Coordinate） 相机坐标系以**相机光心（optical center）**为原点：\n$z$：沿光轴指向正前方（看的方向） $x$：向右（图像水平方向） $y$：向下（图像垂直方向） 这是一个右手系，但 $y$ 向下与图像像素坐标的 $v$ 轴方向一致 这个定义意味着：相机看到的点 $(X_c, Y_c, Z_c)$ 中，$Z_c$ 就是深度（到光心的距离沿光轴的分量）。\n4. LiDAR 坐标系 LiDAR 坐标系以激光雷达的扫描中心为原点：\n$+x$：指向 LiDAR 正前方（与车头方向对齐） $+y$：指向左侧 $+z$：指向上方 注意不同厂商的坐标系约定可能有差异：\n厂商 $x$ $y$ $z$ 说明 通用约定 前 左 上 右手系，与自车坐标系一致 部分 Velodyne 前 左 上 同上 某些机械式 LiDAR 后 左 上 需要旋转 180° 对齐 ROS REP-105 前 左 上 标准 ROS 约定 在部署时，务必查阅传感器手册确认其坐标系定义。将 LiDAR 点云对齐到自车坐标系是融合的第一步。\n5. BEV 坐标系（Bird\u0026rsquo;s Eye View） BEV 坐标系本质上是自车坐标系的俯视投影，去掉 $z$ 轴信息：\n$+x$：车辆前进方向（通常对应 BEV 网格上方） $+y$：车辆左侧（对应 BEV 网格左方） 范围：前方 $[-30m, 60m]$，左右 $[-30m, 30m]$（典型值） BEV 网格通常表示为 $H \\times W$ 的栅格，每个格子的大小（resolution）如 $0.5m$。坐标系原点对应网格的中心（自车位置）。\n6. 图像像素坐标系 像素坐标 $(u, v)$ 是最终的 2D 输出：\n$u$：水平方向（向右），单位：像素 $v$：垂直方向（向下），单位：像素 原点在图像左上角 这是唯一离散的坐标系，所有 3D 信息最终都要投影到这里才能被人或感知网络看到。\n🔧 坐标变换：连接所有坐标系 外参：传感器 → 自车 外参（Extrinsics）描述了传感器坐标系到自车坐标系的刚体变换：\n$$ \\begin{bmatrix} X_{\\text{ego}} \\\\ Y_{\\text{ego}} \\\\ Z_{\\text{ego}} \\\\ 1 \\end{bmatrix} = \\begin{bmatrix} R \u0026 t \\\\ 0 \u0026 1 \\end{bmatrix} \\begin{bmatrix} X_{\\text{sensor}} \\\\ Y_{\\text{sensor}} \\\\ Z_{\\text{sensor}} \\\\ 1 \\end{bmatrix} $$其中 $R$ 是 $3\\times3$ 旋转矩阵，$t$ 是 $3\\times1$ 平移向量。外参在车辆出厂时标定，并在使用中定期校验。\n内参：相机坐标系 → 像素坐标系 内参矩阵 $K$ 将相机坐标系中的 3D 点投影到 2D 像素平面：\n$$ K = \\begin{bmatrix} f_x \u0026 0 \u0026 c_x \\\\ 0 \u0026 f_y \u0026 c_y \\\\ 0 \u0026 0 \u0026 1 \\end{bmatrix} $$$$ s \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} = K \\begin{bmatrix} X_c \\\\ Y_c \\\\ Z_c \\end{bmatrix} $$其中 $s = Z_c$ 是深度。展开后：\n$$ u = f_x \\frac{X_c}{Z_c} + c_x, \\quad v = f_y \\frac{Y_c}{Z_c} + c_y $$完整变换链：世界 → 像素 一个世界点 $P_w$ 到图像像素的完整投影为：\n$$ s \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} = K \\cdot T_{\\text{cam}\\to\\text{ego}}^{-1} \\cdot T_{\\text{ego}\\to\\text{world}}^{-1} \\cdot P_w $$在实际系统中，通常简化为离线算好的联合投影矩阵。\n🔄 3D ↔ 2D 投影 3D → 2D：前向投影（Forward Projection） 已知 3D 空间点（如 LiDAR 点云中的点），找到它在图像上的对应像素。\n流程：\n将 LiDAR 点 $(x_l, y_l, z_l)$ 通过外参变换到自车坐标系 再通过相机外参变换到相机坐标系 通过内参 $K$ 投影到像素坐标 这是多模态融合（如 LiDAR-Camera 融合）的基础操作——将点云投影到图像上获取语义标签。\nLift-Splat（LSS）视角变换 LSS（Lift-Splat-Shoot）是 BEV 感知中经典的视角变换方法：\nLift：为每个像素预测一个深度分布（Depth Distribution），将 2D 图像特征\u0026quot;抬升\u0026quot;到 3D 空间 Splat：将 3D 空间中的特征点池化（sum pooling）到 BEV 网格上 数学上，LSS 完成的是： $$ F_{\\text{BEV}}(x, y) = \\sum_{i} \\sum_{d} w_{i,d} \\cdot f_i \\cdot \\mathbb{1}[\\pi^{-1}(u_i, v_i, d) = (x, y, z)] $$其中 $\\pi^{-1}$ 是逆投影，$f_i$ 是像素 $i$ 的特征，$w_{i,d}$ 是深度 $d$ 的权重。\nLift-Splat 在 BEVFormer 中的演进 BEVFormer 使用 Transformer 的 cross-attention 替代 LSS 的显式深度预测：\n定义 BEV Queries：每个 BEV 网格位置 $(x, y)$ 对应一个可学习 query 对每个 query，在 3D 空间中采样若干个参考点（沿 $z$ 轴和高度方向） 通过 cross-attention 从多相机特征图中聚合信息 BEVFormer 的一个关键创新是空间注意力（Spatial Cross-Attention, SCA）：\n$$ \\text{SCA}(Q_p, F) = \\sum_{i=1}^{N_{\\text{cam}}} \\sum_{j=1}^{N_{\\text{ref}}} \\text{DeformAttn}(Q_p, \\mathcal{P}(p, i, j), F_i) $$这里 $\\mathcal{P}(p, i, j)$ 将 BEV 网格点 $p$ 投影到第 $i$ 个相机的第 $j$ 个参考点的像素位置——本质就是坐标变换的跨视图应用。\n2D → 3D：逆投影（Inverse Projection） 给定一个像素 $(u, v)$ 和对应的深度 $d$，可以反投影到相机坐标系：\n$$ \\begin{bmatrix} X_c \\\\ Y_c \\\\ Z_c \\end{bmatrix} = d \\cdot K^{-1} \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} $$但单张图像的单目深度估计是病态问题——同一个像素可以对应 3D 空间中一整条射线上的任意点。因此：\n单目 3D 检测：网络必须从图像外观线索（尺寸先验、遮挡关系、地面接触点）隐式估计深度 多目立体：通过左右视图的视差计算深度（三角测量） LiDAR + 相机：LiDAR 提供精确深度，相机提供语义 深度估计方法对比 方法 深度来源 精度 密度 成本 单目深度估计 网络隐式回归 低（~30% 相对误差） 密集 低 双目立体匹配 视差计算 中（~10% 相对误差） 密集 中 LiDAR 直接测量 ToF 高（±2cm） 稀疏 高 多传感器融合 综合 高 密集 高 🔗 为什么理解坐标系统如此重要 很多刚接触自动驾驶的同学会被论文中的\u0026quot;将点云投影到图像空间\u0026quot;、\u0026ldquo;在 BEV 空间采样\u0026rdquo;、\u0026ldquo;使用逆透视映射（IPM）\u0026ldquo;等描述搞混。这背后的核心就是坐标变换链。\n几个关键教训：\n所有传感器标定误差最终都会变成感知误差：外参偏了 1°，30 米外的目标会偏移 0.5 米——这足以让车道级定位失效 不同数据集使用不同的坐标约定：nuScenes 使用 $(x_{\\text{前}}, y_{\\text{左}}, z_{\\text{上}})$，KITTI 使用 $(x_{\\text{右}}, y_{\\text{下}}, z_{\\text{前}})$，做跨数据集实验时务必检查 BEV 感知的核心就是坐标变换：LSS 和 BEVFormer 的区别本质上是如何实现\u0026quot;图像 → BEV\u0026rdquo; 的坐标变换 部署中坐标系统是常见 bug 源：很多时候模型在训练集上指标很好，但上车就出问题——排查下来往往是坐标变换链中某个环节的符号反了 📚 延伸阅读 Hartley, R. \u0026amp; Zisserman, A. \u0026ldquo;Multiple View Geometry in Computer Vision.\u0026rdquo; Cambridge University Press, 2nd Ed. Zhang, Z. \u0026ldquo;A flexible new technique for camera calibration.\u0026rdquo; IEEE TPAMI, 2000. Philion, J. \u0026amp; Fidler, S. \u0026ldquo;Lift, Splat, Shoot: Encoding Camera from Arbitrary Transformers.\u0026rdquo; ECCV, 2020. Li, Z. et al. \u0026ldquo;BEVFormer: Transforming Bird\u0026rsquo;s-Eye-View into Map-like Space via Queries.\u0026rdquo; NeurIPS, 2022. Caesar, H. et al. \u0026ldquo;nuScenes: A multimodal dataset for autonomous driving.\u0026rdquo; CVPR, 2020. Geiger, A. et al. \u0026ldquo;Are we ready for autonomous driving? The KITTI vision benchmark suite.\u0026rdquo; CVPR, 2012. ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B63d%E5%9D%90%E6%A0%87%E7%B3%BB%E7%BB%9F%E8%AF%A6%E8%A7%A3/","summary":"3D 坐标系统是自动驾驶感知的数学基石。本文详解六大坐标系（世界、自车、相机、LiDAR、BEV、图像像素）的定义与变换关系，覆盖针孔投影、内外参标定、3D↔2D 投影流程，以及 BEVFormer 等模型中的坐标变换设计。理解坐标系统就等于理解了感知流水线的数学骨架。","title":"自动驾驶 3D 坐标系统详解：从传感器到世界"},{"content":"📄 论文信息 标题：Percept-WAM: Perception-Enhanced World-Awareness-Action Model for Robust End-to-End Autonomous Driving 作者机构：引望智能（Yinwang Intelligent Technology，华为车 BU 前身相关）/ 复旦大学（韩建华、田梦、朱江桐、何凡、张慧新、郭思同、朱德昌、唐昊、徐培、郭玉泽、牛敏哲、朱浩杰、董启超、严雪超、董思远、侯璐、黄庆九、贾晓松、徐航 ✉）——韩建华、田梦、朱江桐并列一作，徐航通讯 会议：CVPR 2026（pp. 10642-10655） arXiv：2511.19221（2025-11-24） 一句话总结：Percept-WAM 是第一个把 2D/3D 场景理解\u0026quot;隐式\u0026quot;集成进单个 VLM 的 WAM。它不搞 QA 式空间推理（\u0026ldquo;前车距离多少？\u0026quot;），而是把感知任务统一成两类世界 token——透视视角的 World-PV 和鸟瞰视角的 World-BEV，每个 token 编码空间坐标 + 校准后的置信度；再用四组点级轨迹 query 把感知表示对齐成轨迹。NAVSIM v1 拿到 90.2 PDMS（超 DiffusionDrive 2.1）、COCO 2D 检测 51.7 mAP、nuScenes BEV 3D 检测 58.9 mAP，流式推理时延 707ms。 🎯 一句话记忆点：Percept-WAM = \u0026ldquo;把感知器官长进大脑里\u0026rdquo;——别的 WAM 把感知当\u0026quot;外部输入\u0026rdquo;，它把感知当\u0026quot;内部神经元\u0026quot;（World-PV/World-BEV token），让规划和感知共享同一个 VLM 骨架，感知越强、规划越稳。\n🤔 要解决什么问题？ VLM 的空间感知是硬伤 自动驾驶本质上是\u0026quot;精确空间感知 + 环境推理 + 控制决策\u0026quot;。但常识是：通用 VLM 的空间能力并不好。论文引了多份评估（Thinking-Motion、SpatialRGPT 等）指出 VLM 的三大通病：\n3D 定位漂移：测距、朝向估计误差大； 时序不一致：对同一目标，逐帧判断前后矛盾； 置信度不可靠：LLM 系统性地过度自信——即使检测很模糊，softmax 概率也接近饱和。 这些问题在长尾场景（夜间、雨雾、小目标、稀有目标）和复杂交互里会放大成雪崩式的决策失误——感知的一个小几何误差（检测偏了、yaw 漂了、BEV 错了）会一路传导到轨迹。\n现有两派都占不全 路线 代表 优点 致命伤 QA 式空间推理 EMMA、FutureSightDrive、InProMPT 用 LLM 推理空间 \u0026ldquo;前车距离多少？\u0026ldquo;这种 QA 监督只给间接定位信号，得不到持久、可定位的世界状态，拥挤场景里重复检测+置信度失真 Encoder-扩散-Diffusion 解码 DiffusionDrive、DiffE2E 生成式控制，轨迹直接 跳过显式空间任务学习 → E2E 性能上不去，且复杂场景需要 LLM 的推理能力 💡 论文的观点：感知任务（检测/分割）不是规划的可选项，而是规划的\u0026quot;底盘\u0026rdquo;。与其让规划器在\u0026quot;看不见\u0026quot;的情况下硬猜，不如把感知能力真正长进模型里——这就是 UniAD 式\u0026quot;planning-oriented\u0026quot;的思路，但落在单个 VLM 里。\n关键主张：感知和规划要\u0026quot;共享骨架\u0026rdquo; Percept-WAM 的立场是：2D 感知、3D 感知、轨迹规划应该在一个 VLM 里联合优化——感知结果成为\u0026quot;持久、可定位的世界状态\u0026quot;，直接喂给推理和规划，而不是作为外部模块先算一遍再传入。这就是 \u0026ldquo;World-Awareness-Action\u0026rdquo; 的含义：世界（world）状态内嵌 → 感知（awareness）→ 动作（action），一条链路。\n💡 核心思路：三族世界 Token Percept-WAM 的全部设计围绕 三族 token 展开，对应\u0026quot;感知 → 规划\u0026quot;的完整链路：\n输入图像先进入 VLM 骨干（InternVL2-8B）； 再由 World-PV tokens 做透视 2D 感知； 由 World-BEV tokens 做鸟瞰 3D 感知； 最后由 World-Action tokens（四组 query）解码出轨迹。 World-PV tokens（透视视角）：图像特征按网格化组织，每个 grid 位置负责检测/分割其局部区域的目标； World-BEV tokens（鸟瞰视角）：一组可学习的 BEV 网格查询，用 cross-attention 从 World-PV 特征\u0026quot;提\u0026quot;出 3D BEV 表示，纯数据驱动地把 2D 证据升维成 3D 空间； World-Action tokens（动作）：四组点级轨迹查询（Q_pv/Q_bev/Q_ego/Q_full），对齐各自模态特征后由 MLP 解码出轨迹。 为什么叫 World（世界）？ 因为这些 token 不是\u0026quot;一次性推理的中间变量\u0026quot;，而是持久的、可定位的世界状态——它们编码了空间坐标和置信度，可以在多次推理中被复用（还支持流式 KV cache 复用），构成了模型对\u0026quot;世界\u0026quot;的内部表示。\n🧩 架构讲解：输入 → 模型 → 输出 📍 架构图在这：Percept-WAM 的完整架构图是 图 2（Figure 2，见下方\u0026quot;架构总览\u0026quot;小节）。下面先用一张我自己画的流程图把整体数据流讲清楚——它的核心特征是\u0026quot;一个 VLM 里同时长着感知和规划\u0026quot;，感知和规划不是串联的模块，而是并联的 token。\n① 输入是什么？（2 类） 输入 类型 编码器 变成什么 多视角图像 视觉 VLM 视觉编码器（InternVL2-8B，动态分块） 图像特征 → World-PV tokens 的\u0026quot;母体\u0026quot; 可选 LiDAR 点云 点云 预训练 LiDAR 编码器 初始化 World-BEV tokens（消融里 +8.2 mAP） ② 中间经历了什么？（三族 World token 并行） World-PV tokens：图像特征网格化 → 透视视角 2D 感知（检测/分割/单目 3D）； World-BEV tokens：可学习 BEV 网格查询 cross-attention World-PV → 鸟瞰 3D 感知（3D 检测/BEV 地图）； World-Action tokens：四组点级 query（Q_pv/Q_bev/Q_ego/Q_full）受控注意力掩码对齐各模态 → MLP 并行解码轨迹。 ③ 输出是什么？（2 类，可选） 感知结果（2D/3D 检测框、分割 mask）+ 最终轨迹（推理时只用 Q_full 的解码结果）。同一个骨架既能出感知、又能出轨迹——也可以只输出轨迹。\n⚙️ 架构总览（论文核心图） 🔍 图 2 怎么读？ 这是全文的\u0026quot;总装图\u0026quot;，按下述顺序读：\n输入：多视角相机图像 → VLM 骨干（InternVL2-8B），视觉编码器提取多尺度图像特征。保持预训练 VLM 参数是为了保住通用智能（逻辑推理、常识）； World-PV tokens（图像平面）：把图像特征 patch 化成一个 H×W 网格，每个网格位置作为一个\u0026quot;局部查询\u0026quot;，负责检测/分割它坐标附近的目标 → 产出 2D 检测框、分割 mask； World-BEV tokens（鸟瞰平面）：一组可学习的 BEV 网格查询（论文用 40×40 grid），通过 cross-attention 查询 World-PV 特征，把 2D 证据\u0026quot;升维\u0026quot;成 3D BEV 表示 → 产出 3D 检测框、BEV 语义地图； Action Head（右侧）：四组点级轨迹查询 Q_pv / Q_bev / Q_ego / Q_full，在受控注意力掩码下各自对齐对应模态，再由 MLP 并行解码出轨迹； Memory Bank（底部）：流式推理的 KV cache 复用模块，支持无限长时序输入。 读图关键：感知（PV/BEV）和规划（Action）共享同一个 VLM 骨架——图中没有独立的感知模块，感知就是 VLM 内部的 token。这正是和\u0026quot;感知-规划分离\u0026quot;流水线（比如 UniAD 用单独检测头）的本质区别。\n⚙️ 模块一：World-PV（透视视角 2D/3D 感知） 3.1 设计 World-PV 分支负责在图像平面上做稠密目标感知。设计要点：\n利用预训练 VLM 的图像理解：图像先过 VLM 骨干，得到图像特征（World-PV tokens）； 网格化 patchify：把特征组织成 H×W 网格，每个 grid 位置作为\u0026quot;局部化查询\u0026quot;负责单一目标感知（受 UFO 启发，用插值得到与局部图像坐标对齐的细粒度特征）； 高分辨率输入：采用 InternVL 式动态分块（dynamic tiling），把高分辨率图像切成不重叠的 tile 共享 ViT 权重编码，再通过全局位置对齐融合——在避免二次方显存增长的同时保留远距离细节（这对检测远处小目标至关重要）。 3.2 任务定义 2D / 单目 3D 检测采用语言式自回归解码，输出序列化为类文本 token（\u0026lt;cls\u0026gt; 标签、\u0026lt;box\u0026gt; 标签、\u0026lt;conf\u0026gt; 标签分别携带类别、box 坐标、置信度）：\n2D 检测：(cls, x, y, w, h, conf)——中心点 + 宽高； 单目 3D 检测：(cls, x, y, z, w, h, ℓ, θ, vx, vy, conf)——3D 中心、尺寸、朝向、水平/垂直速度 + 置信度。 连续坐标（中心、尺寸、朝向、速度）归一化后离散成整数 bin，用 cross-entropy 监督（Pix2Seq 范式）； 分类是文本 token → 天然支持开放词汇检测（open-vocabulary），长尾场景鲁棒； 所有 grid 并行解码，吞吐高。 实例/语义分割：借鉴 UFO，把分割建模成特征检索——预测 K=16 个 \u0026lt;MASK\u0026gt; token，通过 World-PV tokens 与 mask token 的点积相似度检索 mask，一次前向产出所有类别的 mask，不加新参数。\n3.3 IoU 校准置信度（重要创新） 论文指出 MLLM 检测的经典病根：训练-推理不一致 + LLM 系统性过度自信。UFO 用类 logits 的 softmax 做 box 置信度，但 softmax 即使对模糊检测也饱和 → 拥挤场景大量假阳性。\n解法：给每个 box 额外加一个 IoU-based 置信度 token \u0026lt;conf\u0026gt;，它依赖 box 的属性（类别/坐标/尺寸）预测该框和 GT 的 IoU——这样置信度就和\u0026quot;定位准不准\u0026quot;挂钩，而不是和\u0026quot;像不像\u0026quot;挂钩。\n围绕它有三个配套设计：\n置信度调优数据集：不是从 GT 做随机扰动（IoU 分布接近均匀），而是用中间训练阶段模型在训练图上推理，把匹配上 GT 的预测框配上它们的真实 IoU——模型预测的 IoU 分布更贴近真实分布，假阳性更少； 训练时的 loss mask：GT 样本（IoU 固定为 1）只学类别和框、不学 IoU（避免塌缩）；置信度调优样本预测 IoU，只对置信度算 loss； 推理时最终分数 = 类别 softmax × 预测 IoU——更统一、可解释、定位敏感。 🔍 图 3 怎么读？ (a) 上半部分是数据生成：一张图对比两种构建置信度数据集的方式——左半边从 GT 框加随机扰动（生成 IoU 分布接近均匀，不真实），右半边让模型先推理一遍再取匹配框配 IoU（分布贴近真实，效果好）； (b) 下半部分是训练监督：展示 loss-mask 怎么在 batch 里区别对待两种样本——GT 样本锁死 IoU=1 只学框和类，调优样本只学 IoU。这样 IoU 预测既真实又不会拖累检测主任务。 🎯 一句话：Percept-WAM 的置信度不是\u0026quot;像不像这个类\u0026quot;，而是\u0026quot;这个框准不准\u0026quot;——它直接把检测质量和分数挂钩，长尾拥挤场景的假阳性大幅减少。\n⚙️ 模块二：World-BEV（鸟瞰视角 3D 感知） 3D 空间理解是自动驾驶的基石。Percept-WAM 显式地把 3D 检测和语义地图分割集成进 BEV 表示空间：\nWorld-BEV tokens 是一组可学习查询 token，把 BEV 空间实例化为以自车为中心的 H×W 网格（检测用 40×40，分割用 10×10）； 每个 token（即一个 grid cell）输出高维 embedding，编码空间和语义信息（物体、地图元素）； 这些 World-BEV tokens 通过 cross-attention 查询 World-PV tokens，纯数据驱动地把 2D 证据\u0026quot;升维\u0026quot;成 3D BEV 表示——不需要显式的几何变换（如 IPM 或 depth 预测）。 两大优势：\n和 World-PV 一样，World-BEV tokens 可以在 prefill 阶段一次前向算完 → 轨迹预测的高效性； World-BEV tokens 天然支持 LiDAR 初始化——消融里用预训练 LiDAR 编码器特征初始化 BEV token，mAP 提升 8.2%，说明可以灵活融合多模态。 🔍 图 4 怎么读？ 一张\u0026quot;机制特写图\u0026quot;：说明 grid tokens 从哪里来、负责干什么； 关键点：grid tokens 是从 World-PV 或 World-BEV tokens 插值得到的（不是独立学习的新参数），每个 grid token 预测与其图像/BEV 坐标对齐的 box； 这样就保证了\u0026quot;感知的每一格都和空间位置绑定\u0026quot;——可定位性是这些 token 被称为\u0026quot;世界状态\u0026quot;而不是\u0026quot;临时特征\u0026quot;的根本原因。 ⚙️ 模块三：World-Action（从感知到动作） 这是把\u0026quot;感知\u0026quot;变成\u0026quot;驾驶决策\u0026quot;的关键一步——感知-动作对齐。\n3.3 四组点级轨迹查询 可靠的未来轨迹需要三种视角的信息：\nWorld-BEV tokens：准确的动态/静态上下文（物体在哪、路在哪）； World-PV tokens：丰富的语义细节（这是红灯还是刹车灯）； ego 状态：车辆运动学信息（速度、航向）。 为了让动作和这些特征完全对齐、避免过度依赖单一模态，论文设计了四组点级查询（每组 N 个轨迹点，随机初始化）：\nQuery 注意力掩码 对齐的目标 作用 Q_pv 只看 PV token 透视图像特征 语义/外观细节对齐 Q_bev 只看 BEV token 鸟瞰特征 3D 空间上下文对齐 Q_ego 只看 ego 特征 自车状态 运动学约束对齐 Q_full 看所有特征 全局 解码最终轨迹 🔍 图 5 怎么读？ 四个 query 集合 Q_pv / Q_bev / Q_ego / Q_full 各一行，每行是 N 个轨迹点； 注意力掩码：前三个 query 通过 mask 只能看自己对应的模态（PV 只看图像特征、BEV 只看鸟瞰特征、ego 只看自车状态），只有 Q_full 可以看全部特征； 解码：每个 query 集的特征经 MLP 解码成轨迹。训练时四组并行生成轨迹、用 Smooth-L1 监督；推理时只用 Q_full 的输出作为最终轨迹。 🎯 这个设计的妙处：前三个 query 是\u0026quot;专业分工\u0026quot;，Q_full 是\u0026quot;综合裁决\u0026quot;。分组注意力掩码逼着模型分别学会\u0026quot;从图像看语义、从 BEV 看空间、从 ego 看运动\u0026quot;，Q_full 再把它们综合——避免了轨迹只从单一模态推断的偏见。\n3.4 流式推理（Streaming Inference） 自动驾驶要求实时性。Percept-WAM 引入流式 KV cache：轨迹预测 token 只关注最近两帧（T 和 T-1），历史帧的 KV cache 被复用，避免每帧全量 prefill。\n但训练（定长视频片段）和推理（无限时序）的不一致会带来分布漂移，论文用三招应对：\n更长片段训练：训练时用更长的视频片段，让模型学会依赖更长历史； Attention Sink + 双重重算（dual-recomputation）：保留 attention sink 锚点稳定计算，同时对旋转位置编码（RoPE）做局部精炼 + 全局缓存重算，纠正跨帧 KV cache 的连续性； 周期性缓存 ViT token 并重算完整 KV cache：抑制长序列推理的错误累积。 🔍 图 11 怎么读？ (a) Streaming Attention Map：展示轨迹 token 的注意力窗口——每个预测时刻只看 T 和 T-1 两帧，历史被\u0026quot;压缩\u0026quot;进 KV cache； (b) Streaming Strategy：展示 KV cache 的结构——绿色块是 attention sink（锚点，固定保留），蓝色斜纹块是复用的历史帧 KV cache，白色数字是需要双重重算的 RoPE 位置编码。因为 attention sink 和历史帧之间的位置编码不连续，所以要重算来校正。 🎯 流式推理的收益（表 7）：AR 解码时延 -16%、Query 解码 -40%，精度损失 \u0026lt;0.01——707ms 就能出一次轨迹。\n📊 实验结果 5.1 主结果：NAVSIM v1 + nuScenes 方法 nuScenes L2-1s↓ L2-2s↓ L2-3s↓ Avg↓ NC↑ DAC↑ TTC↑ Comf↑ EP↑ PDMS↑ UniAD 0.20 0.42 0.75 0.46 97.8 91.9 92.9 100 78.8 83.4 VAD-Base/V2 0.17 0.34 0.60 0.37 97.2 89.1 91.6 100 76.0 80.9 DiffusionDrive 0.27 0.54 0.90 0.57 98.2 96.2 94.7 100 82.2 88.1 DRAMA — — — — 98.0 93.1 94.8 100 80.1 85.5 Hydra-MDP — — — — 98.3 96.0 94.6 100 78.7 86.5 Percept-WAM 0.17 0.35 0.63 0.38 98.7 97.8 93.2 92.8 84.4 88.6 Percept-WAM* 0.16 0.33 0.60 0.36 98.8 98.6 94.4 99.5 84.8 90.2 Percept-WAM* 90.2 PDMS，超 DiffusionDrive 2.1；二阶段训练（感知增强基座再 E2E 对齐）带来 +1.6 提升； DAC 98.6、NC 98.8 全场最高——感知强了，可行驶区域合规直接受益； nuScenes 轨迹 L2 误差 0.36m（Avg），和 VAD 打平，显著好于 DiffusionDrive（0.57）——注意感知增强对轨迹精度的传导。 5.2 感知主结果（PV 2D/3D + BEV） PV 感知（表 1）：\n任务 Percept-WAM 专有模型对比 2D 检测 nuImages 49.9 mAP Mask R-CNN 47.8 2D 检测 COCO 51.7 mAP LMM-Det 47.5 2D 实例分割 nuImages 41.7 mAP Mask R-CNN 38.6 单目 3D 检测 nuScenes 33.0 mAP FCOS3D 32.1 2D 语义分割 COCOstuff 50.3 mIoU — BEV 感知（表 4，nuScenes val）：\n方法 3D 检测 mAP NDS Dri IoU Ped IoU Lane IoU Veh IoU PointPillars 0.523 0.613 — — — — SECOND 0.526 0.630 — — — — BEVFusion 0.685 0.714 85.5 60.5 67.7 — Percept-WAM 0.589 0.645 87.0 70.9 62.7 60.2 💡 关键洞察：BEV 感知的意义不是\u0026quot;刷 SOTA\u0026quot;（论文明确说没想超过每个子任务的最优），而是增强 3D 空间理解来反哺规划——感知是手段，规划才是目的。\n5.3 消融 1：IoU 置信度（表 5） 置信度方案 AP AP50 AP75 基线（仅类分数） 48.1 70.9 51.4 + IoU（random-perturb） 46.9 70.0 50.7 + IoU（uniform model-pred） 46.2 69.1 49.3 + IoU（real model-pred） 49.6 70.4 53.7 用真实模型预测分布构建置信度数据集 → +1.5 AP、+2.3 AP75； 随机扰动 / 均匀采样反而有害（-1~2 AP）——因为 IoU 分布不真实，学出来的置信度反而带偏检测。 🔍 图 6(c) 怎么读？ 横轴 = 预测置信度，纵轴 = 框与 GT 的 IoU；完美预测应该落在 y=x 对角线上； (a) 里大量点落在右下（低 IoU 但高置信度）→ 后处理滤不掉假阳性； (c) 用模型预测分布训练的 IoU 置信度让点整体贴近对角线 → 分数排序可靠，检测精度提升。 5.4 消融 2：BEV 3D 检测（表 6） 配置 mAP NDS 基线（相机） 25.0 25.7 + LiDAR 编码器初始化 33.2 (+8.2%) 32.2 + 数据增强 41.3 (+8.1%) 39.2 + 网格分辨率（20→40） 50.4 (+9.1%) 46.6 + MLP 并行（16× 加速） 50.4 43.7 每个设计点都能带来 8-9 mAP 的提升；MLP 并行替换 AR 解码在保持 50.4 mAP 的同时加速 16 倍。\n5.5 消融 3：轨迹解码方式（表 7） 解码机制 L2 (avg)↓ 时延 (ms)↓ AR（轨迹当文本） 0.3970 2700 AR + 流式推理 0.4058 2209 AR (cluster) 0.3919 1470 Query-base 0.3822 1174 Query-base + 流式推理 0.3839 707 Query-base 解码精度和速度都最优（L2 0.3822，时延 1174ms）； 流式推理再压 40%（→707ms），精度损失 \u0026lt;0.01——这就是\u0026quot;能上车\u0026quot;和\u0026quot;上不了车\u0026quot;的区别。 🔍 可视化：三个\u0026quot;效果图\u0026quot; PV 感知效果（图 7） 论文强调 PV 感知在拥挤场景、长距离、小目标下的稳定性和开放词汇能力——这正是 VLM 系检测器最常翻车的三类场景。\nBEV 感知效果（图 8） 轨迹规划效果（图 9） 🎯 效果图的叙事逻辑：图 7 证明\u0026quot;看得清\u0026quot;（感知），图 8 证明\u0026quot;看得全\u0026quot;（3D 空间），图 9 证明\u0026quot;开得好\u0026quot;（规划）——三张图连起来正好是 World-Awareness-Action 的完整链路。\n⚖️ 与 BrainWAM、SimWAM 的横向对比（WAM 系列三足鼎立） 这三篇是 2025-2026 年 WAM（World Action Model） 系列的三个代表，但\u0026quot;加强\u0026quot;的侧重点完全不同。先把 WAM 的特点讲清楚，再对比三者的差异。\n先复习：WAM 到底是什么？ WAM（World-Action Model）= 世界模型（World Model）+ 动作（Action）。和纯 WM 的区别是：WM 只预测未来（不输出动作），WAM 把\u0026quot;未来预测\u0026quot;和\u0026quot;动作生成\u0026quot;焊在一起——通常用视频/未来状态作为动作预测的监督信号，让动作\u0026quot;懂物理\u0026quot;。\n三家加强的重点完全不同 维度 Percept-WAM SimWAM BrainWAM arXiv 2511.19221 2608.07468 2608.12854 时间 2025-11 2026-08 2026-08 会议 CVPR 2026 arXiv preprint arXiv preprint 要解决的问题 VLM 空间感知弱 → 感知不稳拖垮规划 训练时视频监督 + 推理时删视频的 gap VLA 语义和 WAM 预测\u0026quot;融合打架\u0026quot; 加强的模块 感知（World-PV/World-BEV token） 训练（Flow-GRPO 强化） 协调（CAB/CIF 动作空间融合） 世界建模方式 无显式视频生成（感知即世界） 视频生成（Wan2.2）监督动作 视频生成（Wan2.2）预测通路 语义/语言先验 ✅ VLM 本体（InternVL2-8B） ❌ 无 ✅ 独立 VLA 通路（Qwen3-VL-4B） 轨迹解码 四组 query 并行 + MLP rectified-flow DiT rectified-flow action expert 是否 RL ❌（未来计划） ✅ Flow-GRPO ❌ NAVSIM v1 90.2 PDMS 91.5 PDMS 89.5 PDMS 推理时延 707ms（流式） ~100ms（删视频） 475ms（1步视频） 三家对比：核心差异一句话 Percept-WAM：感知派——\u0026ldquo;规划要稳，先让模型把世界\u0026rsquo;看\u0026rsquo;清楚\u0026rdquo;。它不给模型加视频生成或 RL，而是把 2D/3D 感知直接长进 VLM（World token），用更强的空间表示喂规划。世界模型的理解是\u0026quot;感知即世界\u0026quot;（没有显式未来生成）。 SimWAM：训练派——\u0026ldquo;模型结构是死的，训练方法是活的\u0026rdquo;。它用 Flow-GRPO（强化学习） 在 NAVSIM 场景上直接优化轨迹质量，配合训练期视频监督，训练完把视频分支删掉换推理效率。91.5 PDMS 是目前 NAVSIM v1 的天花板。 BrainWAM：协调派——\u0026ldquo;单打独斗不如协同作战\u0026rdquo;。它保留 VLA 语义通路 + WAM 预测通路两条特化通路，通过 CAB（动作空间桥）+ CIF（意图融合） 在动作层协调，既保留语义先验又保留预测动态。89.5 PDMS / 89.6 EPDMS 双榜 SOTA。 一句话总结 WAM 系列的演进脉络 WAM 系列三篇的演进脉络（增强手段不同，方向互补）：\nPercept-WAM（CVPR'26，感知增强）：世界状态（World token）内嵌，让规划吃到更好的感知； SimWAM（2026-08，训练增强）：Flow-GRPO 强化，直接优化轨迹质量，拿到 NAVSIM v1 91.5 的天花板； BrainWAM（2026-08，结构增强）：双通路 + 动作空间协调，让语义和预测互补，双榜 SOTA。 三个方向恰好代表 WAM 设计的三大杠杆：\n输入侧（Percept-WAM）：让模型\u0026quot;看得更好\u0026quot;——世界状态建模； 目标侧（SimWAM）：让模型\u0026quot;学得更狠\u0026quot;——RL 直接优化驾驶质量； 结构侧（BrainWAM）：让模型\u0026quot;配合得更好\u0026quot;——多通路动作空间协调。 三者不冲突，未来大概率是组合拳：Percept-WAM 的世界 token + SimWAM 的 RL + BrainWAM 的动作空间协调，可能才是完整形态。\n⚠️ 优势与局限 ✅ 优势 感知-规划真正共享骨架：2D/3D 感知和轨迹预测在同一个 VLM 里联合优化，感知精度提升直接传导到规划（表 3 里 Percept-WAM* 比单阶段 +1.6 PDMS）； 置信度校准创新扎实：IoU-aware 置信度解决了 LLM 检测系统性过度自信的问题，可视化（图 6）和消融（表 5）双重验证； 四组 query 的分组注意力对齐：Q_pv/Q_bev/Q_ego/Q_full 避免轨迹过度依赖单一模态，同时保留综合裁决； 工程可落地：流式推理 707ms、MLP 并行 16× 加速，距离\u0026quot;上车\u0026quot;很近； 开放词汇：分类走文本 token，天然支持开放词汇检测/分割，长尾鲁棒。 ❌ 局限 没有显式未来生成：Percept-WAM 的\u0026quot;世界\u0026quot;是感知出来的当前世界，不是预测出来的未来世界——这跟 SimWAM/BrainWAM 的\u0026quot;视频生成\u0026quot;路线是两码事，缺少对\u0026quot;未来动态\u0026quot;的显式建模； 没有 RL：轨迹质量完全依赖模仿学习，论文自己也说未来要用 RL（离线/在线）联合优化感知和规划； 数值对比的微妙点：NAVSIM 90.2 是 v1 的 PDMS，且论文用的是\u0026quot;从静态轨迹词表打分选优\u0026quot;（借鉴 Hydra-MDP），和端到端逐帧生成的对比口径要小心； 感知是\u0026quot;手段\u0026quot;，但感知本身仍有天花板：BEV 3D 检测 58.9 mAP 仍低于 BEVFusion（68.5），论文承认\u0026quot;不追求每项感知 SOTA，只为增强 3D 理解\u0026quot;； 模型体量：InternVL2-8B + 多任务联合训练，显存和训练成本不低。 📝 个人思考 这篇的价值在于把\u0026quot;感知\u0026quot;重新放回了 WAM 讨论的中心。2026 年的 WAM 热潮基本被\u0026quot;视频生成 + 动作\u0026quot;主导（SimWAM、BrainWAM 都在谈未来帧），而 Percept-WAM 提醒我们：世界动作模型，动作靠的首先是\u0026quot;对世界的准确感知\u0026quot;。VLM 的空间感不行，再好的生成式规划器也是空中楼阁。\n三个让我眼前一亮的点：\n\u0026ldquo;World token\u0026rdquo; 这个概念很本质。把感知输出（检测框、分割 mask）从\u0026quot;一次性模块输出\u0026quot;升级成\u0026quot;可定位、可复用、带置信度的世界状态 token\u0026quot;，并且和动作 token 在同一个注意力空间对齐——这比传统的\u0026quot;感知头 → 向量 → 传入规划器\u0026quot;干净得多，还支持 KV cache 复用（流式）。感知不是插件，是模型世界观的一部分。\nIoU 校准置信度解决了\u0026quot;训练-推理不一致\u0026quot;这个隐蔽问题。MLLM 检测的假阳性往往不是\u0026quot;检测错了\u0026quot;，而是\u0026quot;置信度不可信\u0026quot;。用模型自己预测的 IoU 分布来做监督数据（而不是从 GT 扰动），这个细节非常工程——真实分布比构造分布重要。\n四组 query 的分组掩码 = 隐式 Mixture-of-Experts。Q_pv/Q_bev/Q_ego 各自只看自己模态，Q_full 综合裁决——本质上是用注意力掩码实现\u0026quot;模态路由\u0026quot;，和 MoE 的\u0026quot;专家路由\u0026quot;哲学同源。作者在局限里也说未来要上显式 MoE。\n下一步最值得关注：①Percept-WAM + SimWAM 的 Flow-GRPO（感知增强的世界 token 做 RL 状态，探索空间更大）；②Percept-WAM + BrainWAM 的\u0026quot;未来生成\u0026quot;（感知当前世界 + 预测未来世界一起喂轨迹）；③感知精度对闭环（Bench2Drive 反应式）的影响量化——NAVSIM 非反应式协议下感知误差不传导，闭环才是真正的考场。\n关联阅读：这篇和 BrainWAM 精读（双通路动作协调）、SimWAM 精读（Flow-GRPO 强化）正好构成 WAM 系列的\u0026quot;三驾马车\u0026quot;，分别代表感知增强、训练增强、结构增强三个方向。往前追溯还能串起 Metis 精读（非对称注意力掩码解耦）、DiffusionDrive 精读（NAVSIM 的直接对手）、以及 UniAD-端到端自动驾驶框架精读（planning-oriented 感知的思想源头）。\n📖 论文精读系列。Percept-WAM（arXiv:2511.19221，CVPR 2026，引望智能 × 复旦大学）是\u0026quot;感知增强型 WAM\u0026quot;的代表作——与 SimWAM（训练增强，arXiv:2608.07468）、BrainWAM（结构增强，arXiv:2608.12854）对照阅读，可以看清 2026 年 WAM 设计的三大杠杆：让模型看得更好、学得更狠、配合得更好。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/percept-wam%E7%B2%BE%E8%AF%BB/","summary":"Percept-WAM 回答的是 WAM 系列的另一个致命问题：VLM 的空间感太差——\u0026lsquo;定位漂移、时序不一致、置信度虚高\u0026rsquo;，导致 VLA 系统的感知和规划都不稳。它把 2D/3D 感知任务直接\u0026rsquo;种\u0026rsquo;进单个 VLM 里：用 World-PV token（透视视角）和 World-BEV token（鸟瞰视角）编码可定位的世界状态，配合网格条件化预测头、IoU 校准置信度和并行自回归解码，再用四组点级 query（Q_pv/Q_bev/Q_ego/Q_full）把感知表示对齐成轨迹。NAVSIM v1 拿到 90.2 PDMS，超过 DiffusionDrive 2.1，还配了流式推理把时延压到 707ms。","title":"论文精读｜Percept-WAM：把 2D/3D 感知'种'进 VLM 里的感知增强世界动作模型"},{"content":"\n📄 论文信息 标题：Scaling-Aware Data Selection for End-to-End Autonomous Driving Systems 团队：NVIDIA, New York University, University of Ottawa arXiv：2604.08366 收录：CVPR 2026 关键词：数据选择, 缩放定律, 端到端自动驾驶, 数据混合, EPDMS 一句话总结：MOSAIC 提出基于聚类+缩放定律的数据选择框架，通过拟合每个数据域对评估指标的贡献曲线，迭代地从边际增益最大的域添加数据，在 NAVSIM 上以 42% 更少数据达到全量性能。 🤔 要解决什么问题？ 端到端自动驾驶模型的数据需求面临核心矛盾：\n问题 表现 后果 数据异构性 不同场景（高速/城市/夜间/雨天）对模型性能影响不同 简单加数据效果无法预测 指标竞争 部分场景提升 A 指标时可能降低 B 指标 全局优化困难 选择盲目性 随机采样/难例挖掘均无法保证最优 数据效率低下 核心问题：在一个包含多种场景的混合数据集中，如何选择最具价值的数据点来最大化综合评估指标？\n💡 核心思想 MOSAIC 的关键洞察：不同数据域的缩放行为不同，通过在域级别建模数据的边际贡献，可以做出最优选择。\n三阶段流程：\n聚类分域：将数据集划分为语义一致的域 拟合缩放定律：对每个域拟合数据量→指标提升的缩放曲线 迭代选择：每次从边际增益最大的域挑选一个样本 ⚙️ 方法细节 算法流程 Algorithm: Mixture Optimization via Scaling-Aware Iterative Collection (MOSAIC) 1. 将候选数据集 D_pool 聚类为 M 个域 2. 对每个域拟合缩放定律 ΔÛ_i(n) 3. 初始化：D_sel = ∅, b_i = 0 (已选计数) 4. while |D_sel| \u0026lt; B (预算): for i = 1 to M: δ_i = ΔÛ_i(b_i + 1) - ΔÛ_i(b_i) j = argmax δ_i 从域 j 的排序序列中取下一个样本加入 D_sel b_j += 1 关键组件 1. 聚类与排序：\n使用语义描述（caption）/ 地理位置 / 场景属性对数据聚类 每个域内根据重要性分数排序 2. 神经缩放定律：\n对每个域训练多个数据量级别的模型子集 拟合数据量 $n$ 与累积指标提升 $\\Delta U_i(n)$ 的关系 3. 迭代选择：\n每次选择使 $\\delta_i$（边际增益）最大的域 从该域中按重要性排序依次取样本 适用模型 MOSAIC 在 Hydra-MDP（NAVSIM challenge 获胜模型）上验证，但框架通用，可应用于任意端到端规划器。\n🧪 实验与结果 NAVSIM 性能 方法 EPDMS 使用数据比例 全量训练 87.12 100% 随机采样 82.45 50% 难例挖掘 84.18 50% Influence-based 83.76 50% 聚类均匀采样 84.92 50% MOSAIC 86.88 50% MOSAIC (最佳) 86.73 ~42% (达到全量 99.6%) MOSAIC 仅用 42% 的数据即可达到全量训练的 99.6% 性能，节省超过一半的数据采集成本。\n不同聚类方法的鲁棒性 聚类方法 EPDMS (50%) 说明 语义 Caption 86.88 基于场景描述聚类 地理位置 86.02 基于采集地点聚类 场景属性 86.45 基于光照/天气等聚类 不使用聚类（flat） 82.15 仅缩放定律，不分域 MOSAIC 对不同聚类方法均优于基线，且聚类+缩放定律的组合显著优于仅用聚类。\n数据效率提升 场景 数据节省 达到全量 EPDMS 的 99% -42% 达到特定 EPDMS 阈值 -80%（vs 随机采样） ⚠️ 局限与未来方向 每个域需要训练多个子模型来拟合缩放定律，计算开销不可忽视 聚类方式的选择对最终结果有影响，最优聚类策略仍需探索 仅在仿真基准（NAVSIM）上验证，真实场景的适用性待确认 当前仅考虑固定数据预算下的选择，未考虑主动学习场景 📝 个人思考 MOSAIC 是数据效率派的典型代表——在自动驾驶数据集规模越来越大的今天（Waymo 超 2000 万帧，nuScenes 超 140 万帧），不是数据越多越好，而是哪种数据更有用才重要。 这篇工作的工程实用性非常强——数据采集是自动驾驶中最昂贵的环节之一，减少 42% 的数据需求意味着千万级的成本节省。\n与缩放定律的关系：经典的缩放定律研究关注\u0026quot;加更多数据会怎样\u0026quot;，而 MOSAIC 逆向思考\u0026quot;加哪种数据收益最大\u0026quot;。两者本质互补——缩放定律告诉你曲线趋势，MOSAIC 告诉你选哪个点。\n这个框架对正在进行 Flow-GRPO 训练的我们有直接参考价值——不同驾驶场景的训练数据配比直接影响 RL 策略的最终性能，MOSAIC 的域级边际收益分析可以被引入到 reward 设计中。\n📖 这是论文精读系列的第 XX 篇。数据的选择比数据的数量更重要——在自动驾驶领域尤其如此。欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/mosaic%E6%95%B0%E6%8D%AE%E9%80%89%E6%8B%A9%E7%B2%BE%E8%AF%BB/","summary":"MOSAIC 提出三阶段数据选择框架：聚类分域 → 拟合神经缩放定律 → 迭代选择最大化指标边际增益。在 NAVSIM 上使用 Hydra-MDP 模型，以 42% 更少数据达到全量训练性能，EPDMS 最优。来自 NVIDIA 和 NYU 的 CVPR 2026 工作。","title":"论文精读｜MOSAIC：面向端到端自动驾驶的缩放感知数据选择"},{"content":"\n一句话理解 Flow-GRPO Flow-GRPO = 把\u0026quot;扩散/流匹配的多步去噪过程\u0026quot;当成一条可被强化学习优化的轨迹，用最终结果的奖励信号去反向更新每一步的去噪策略。\n传统的扩散/Flow Matching 模型只会\u0026quot;模仿数据分布\u0026quot;，而 Flow-GRPO 让模型能根据任务奖励（如图文一致性、人类偏好，或自动驾驶中的安全舒适性）自主探索更优的生成路径。它由字节跳动提出（arXiv:2505.05470），最初在 SD3 上验证，现已扩展到 FLUX、Qwen-Image、Wan2.1、Bagel 等模型。本文结合源码笔记，把这个算法彻底拆开。\n🌊 Flow Matching 策略：用 ODE 生成轨迹 要理解 Flow-GRPO，先要理解 Flow Matching 策略到底是什么。\n普通的回归式模型（如直接回归轨迹点 $(x,y,yaw)$ 的网络）只能学到一个确定性映射：输入场景 → 输出唯一答案。而 Flow Matching 策略把生成过程建模成一条从噪声到数据的连续轨迹：\n$$\\frac{dx_t}{dt} = v_\\theta(x_t, t, c)$$其中 $v_\\theta$ 是网络预测的速度场，$c$ 是条件（图像任务里是 prompt，驾驶任务里是场景上下文）。采样时从纯噪声 $x_0 \\sim \\mathcal{N}(0, I)$ 出发，沿速度场一步步积分到 $x_1$（数据样本）。这就是 Rectified Flow / Flow Matching 的核心，Stable Diffusion 3 用的就是它。\n对比确定性回归，Flow Matching 策略有三个关键优势：\n维度 确定性回归 Flow Matching 策略 输出形式 唯一答案 一个分布（多模态） 多解支持 ❌ 无法表达\u0026quot;多种合理轨迹\u0026quot; ✅ 不同噪声 → 不同样本 可微分性 直接对输出求梯度 轨迹中间状态可插值、可控 生成步数 1 步前向 通常 5–28 步去噪 在自动驾驶里，这意味着：同一个拥堵路口，模型可以生成多条不同但都合理的未来轨迹（让行/变道/缓行），这正是规划需要的多模态性。\n采样步数的工程含义需要特别澄清：配置里的 config.sample.num_steps = 10 不是训练 10 个 epoch，而是每张样本从噪声生成到结果 latent 时一共走的 flow/SDE 步数。训练采样少（10 步）是为了降低在线采样成本——因为 RL 每轮都要生成大量样本并打 reward；而评估时可以走更多步（如 40 步）以拿到更高质量的结果。这个\u0026quot;训练少步、评估多步\u0026quot;的非对称设计，是 Flow-GRPO 工程上的一个关键取舍。\n🤔 为什么要在 Flow Matching 上做强化学习 Flow Matching 的预训练目标是分布拟合（让 $v_\\theta$ 逼近数据构造的目标速度），本质上是一种模仿学习（Behavior Cloning）。这带来几个根本性局限：\n1. 分布偏移（Covariate Shift） 模仿学习只在\u0026quot;专家轨迹附近\u0026quot;学得好。一旦上线时模型自己的输出偏离了训练数据分布，就没有任何信号把它拉回来，错误会指数级累积。驾驶场景的开放性让这个问题尤其严重。\n2. 无法超越专家 BC 的损失是\u0026quot;像不像数据\u0026quot;，它的上限就是专家水平。而人类驾驶数据本身可能保守、犹豫、舒适性不稳定——模型会把这些不足也学进去。\n3. 真正的目标不可微 我们关心的指标——碰撞率、舒适性 jerk、规则违反、路线完成度——很难写成可微的监督标签。同一个场景往往有多条可行轨迹，监督学习根本说不出\u0026quot;哪一条是标准答案\u0026quot;。\n三者的对比：\n范式 优化目标 能否超越数据 对稀疏指标的处理 监督/Flow Matching 似然/MSE 拟合数据 ❌ 上限是数据质量 难（需硬编码标签） RL（Flow-GRPO） 任务奖励 ✅ 可探索更优解 直接转化为 reward RL 的核心价值在于：它优化的是\u0026quot;结果好不好\u0026quot;，而不是\u0026quot;像不像数据\u0026quot;——这两个目标本就不是一回事。Flow-GRPO 就是把这种 RL 思想注入到 Flow Matching 的去噪过程中。\n还有一个常被忽略的点：预训练目标（似然）和后训练目标（奖励）本质上是解耦的。基础模型先用海量数据学会\u0026quot;会生成\u0026quot;，把数据分布的先验压进权重；再用少量计算量的在线 RL，把这个先验对齐到具体任务偏好上。这种\u0026quot;先预训练、后 RL 对齐\u0026quot;的两阶段范式，和语言模型里 SFT → RLHF 的思路一脉相承，只是 Flow-GRPO 把它搬到了连续生成的去噪轨迹上。\n🎯 GRPO 方法详解：组内相对优势 Flow-GRPO 用的强化学习算法是 GRPO（Group Relative Policy Optimization），它源自 DeepSeek 的语言模型工作。\n从 PPO 说起 PPO 用旧策略采样数据，再用当前策略做 clipped objective：\n$$\\text{ratio} = \\exp(\\log \\pi_{\\text{new}}(a|s) - \\log \\pi_{\\text{old}}(a|s))$$$$\\mathcal{L} = -\\mathbb{E}\\big[\\min\\big(r \\cdot A,\\ \\text{clip}(r, 1-\\epsilon, 1+\\epsilon)\\cdot A\\big)\\big]$$PPO 通常需要一个独立的 critic（value network） 来估计 baseline，从而算出 advantage $A$。这个 critic 体积和 policy 一样大，训练成本高、调参难。\nGRPO 的关键差异 GRPO 的核心洞察是：critic 可以被\u0026quot;组内均值\u0026quot;替代。对同一个 prompt 采样一组 $G$ 个结果，用组内 reward 的均值和标准差做 baseline：\n$$A_i = \\frac{r_i - \\text{mean}(r_{1..G})}{\\text{std}(r_{1..G}) + \\epsilon}$$PPO 与 GRPO 的对比：\n维度 PPO GRPO baseline 来源 Critic 网络估计 组内 reward 均值 是否需要 critic ✅ 必须 ❌ 不需要 显存/调参成本 高（双模型） 低 advantage 计算 $Q - V$ $(r_i - \\bar r)/\\sigma$ group size 无 关键超参（如 24） 源码里这个逻辑位于 flow_grpo/stat_tracking.py 的 PerPromptStatTracker.update()：\nfor prompt in unique: prompt_rewards = rewards[prompts == prompt] mean = np.mean(self.stats[prompt], axis=0, keepdims=True) std = np.std(self.stats[prompt], axis=0, keepdims=True) + 1e-4 advantages[prompts == prompt] = (prompt_rewards - mean) / std 一个直观例子： 同一个 prompt 生成 4 张图，reward 是 $[0.2, 0.4, 0.8, 0.6]$，均值 $0.5$。那么 $0.8$ 的那张得到正 advantage（提高其生成概率），$0.2$ 的得到负 advantage（降低其生成概率）。这就是\u0026quot;最终结果打分，整条生成路径领奖或背锅\u0026quot;。\n为什么\u0026quot;组内相对\u0026quot;比\u0026quot;绝对 reward\u0026quot;更合理 直接用绝对 reward 训练会有严重的难度偏置问题。简单 prompt（如\u0026quot;a red apple\u0026quot;）平均 reward 天然高，复杂 prompt（如\u0026quot;three dogs wearing hats under a bridge\u0026quot;）天然低；如果全局比较，模型会一味偏向简单 prompt 的生成路径，复杂场景的能力反而退化。组内相对把\u0026quot;绝对好不好\u0026quot;换成\u0026quot;在同题候选里排第几\u0026quot;，自动抵消了不同 prompt 之间的难度差异。这个洞察对驾驶同样成立——直路场景的 reward 普遍高于无保护左转，必须按场景分组比较才有意义。\n💡 当 reward 稀疏导致同组方差为 0 时，可设置 config.sample.global_std=True，用全局 std 替代组内 std，避免训练信号消失。\n🔧 Flow-GRPO 核心：从离散 token 迁移到连续去噪 这是整个算法最精妙的地方。GRPO 最初是为离散 token设计的（语言模型），而 Flow Matching 是连续 latent 空间的迭代去噪。Flow-GRPO 怎么把它们对接起来？\n三个关键改造 改造 1：把\u0026quot;去噪转移\u0026quot;定义为 action。 在语言模型里 action 是下一个 token；在 Flow-GRPO 里，action 是从 $x_t$ 到 $x_{t-1}$ 的一步 latent 转移：\nRL 概念 语言模型 GRPO Flow-GRPO state 已生成 token 当前 latent $x_t$ + 条件 + 时间 $t$ action 下一个 token $x_t \\to x_{t-1}$ 的转移 policy $\\pi(\\text{token})$ 去噪网络预测的速度 reward 答案正确性 最终图像/轨迹的任务 reward 轨迹长度 序列长度 采样步数（如 10 步） 改造 2：必须引入 SDE 才有 log-prob。 纯 ODE 采样是确定性的——给定初始噪声和 prompt，每一步没有概率密度可言，PPO/GRPO 的 importance ratio $r = \\exp(\\log\\pi_{\\text{new}} - \\log\\pi_{\\text{old}})$ 根本算不出来。所以 Flow-GRPO 把 flow step 改造成 SDE：\n$$x_{t-1} = \\underbrace{\\mu_\\theta(x_t, t)}_{\\text{模型预测的均值}} + \\sigma_t \\cdot \\epsilon, \\quad \\epsilon \\sim \\mathcal{N}(0, I)$$这样 $x_{t-1}$ 就是从一个高斯分布里采样出来的，可以解析地写出 log-prob。源码在 flow_grpo/diffusers_patch/sd3_sde_with_logprob.py，log-prob 就是这个高斯的密度取对数，再对所有 latent 维度取均值。\n改造 3：最终 reward 广播到每个去噪步。 中间 latent 没有直接的图像/轨迹语义，reward model 只能对最终 decode 后的结果打分。于是代码把每个 prompt 的一个最终 reward 复制成 10 份，分摊给这条轨迹的每个可训练 step：\nsamples[\u0026#34;rewards\u0026#34;][\u0026#34;avg\u0026#34;] = samples[\u0026#34;rewards\u0026#34;][\u0026#34;avg\u0026#34;].unsqueeze(1) \\ .repeat(1, num_train_timesteps) ⚠️ 这是最容易误解的点：不是每一步都重新打分，而是\u0026quot;完整 10 步生成完成后统一算 reward 和 advantage；训练时把同一个 advantage 用到该轨迹每个去噪步的 log-prob ratio 上\u0026quot;。\n准确地说，Flow-GRPO 的语义是：GRPO 的 group 是\u0026quot;同 prompt 的多张最终结果/完整轨迹\u0026quot;，PPO ratio 的 action 粒度是\u0026quot;轨迹里的每个 latent transition\u0026quot;，最终 reward 通过 advantage 被广播到轨迹中的多个 action。这种\u0026quot;终点打分、整链更新\u0026quot;的设计，本质上是把一条马尔可夫去噪链当成一个多步 action 序列来优化，reward 只在终点出现，但梯度通过每一步的 transition log-prob 反传到去噪网络。这也是为什么中间 latent 不需要单独的 reward model——它们的价值由最终结果的好坏间接体现。\n🔄 训练流程全解 一轮完整 epoch 的训练流程可以拆成五个阶段。\n阶段 1：数据收集（采样 + 打分） 对每个 prompt，用 DistributedKRepeatSampler 把它重复 $K$ 次（即 group size，如 24），多卡 gather 后同一 prompt 会产生 24 张候选图。每张图走完整 num_steps（如 10 步）SDE 采样，记录中间 latent、每步 log-prob、最终图像。采样完后异步把最终图像送给 reward model 打分。\n阶段 2：计算组内优势 等待所有 reward future 完成后，调用 PerPromptStatTracker.update()，按 prompt 分组做 $(r_i - \\bar r)/\\sigma$ 归一化，得到每个样本的 advantage。\n阶段 3：更新去噪网络 进入两层循环——外层遍历 minibatch，内层遍历每个去噪步 $j$：\nfor j in range(num_train_timesteps): # 用当前模型重新算这一步 transition 的 log-prob prev_sample, log_prob, _, _ = compute_log_prob(model, latents[:, j], next_latents[:, j], t=j) ratio = torch.exp(log_prob - sample[\u0026#34;log_probs\u0026#34;][:, j]) unclipped = -advantages[:, j] * ratio clipped = -advantages[:, j] * torch.clamp(ratio, 1-clip_range, 1+clip_range) policy_loss = torch.mean(torch.maximum(unclipped, clipped)) loss = policy_loss + beta * kl_loss loss.backward(); optimizer.step() 关键张量形状（以 SD3、num_steps=10 为例） 张量 形状 含义 latents $(B, T+1, C, h, w)$ 完整轨迹的中间 latent log_probs $(B, T)$ 每步旧模型 log-prob rewards[\u0026quot;avg\u0026quot;] $(B,) \\to (B, T)$ 最终 reward 复制到时间维 advantages $(B, T)$ 广播后的优势 💡 KL 约束：当 beta \u0026gt; 0 时，额外约束 LoRA policy 的 prev_sample_mean 不要偏离 base model 太远（MSE 形式正则）。这对驾驶安全至关重要——防止 RL 把策略推到危险区域。\n一个细节：on-policy 一致性校验 Flow-GRPO 是 on-policy 算法——采样用的模型和被训练的模型应该是同一个。README 给出一个自检技巧：设置 num_batches_per_epoch=1 且 gradient_accumulation_steps=1，此时 ratio 应当严格等于 1。如果发现 ratio 偏离，多半是采样路径和训练路径不一致导致的（如 torch.compile 包装、batch size 不同引起 SD3 的数值差异等）。这种数值一致性是 RL 稳定训练的前提，源码里特意用 fp16 而非 bf16 来减小 log-prob 的收集/训练误差（误差在低噪声步更大，所以建议优先训练高噪声步）。\n💰 奖励函数设计 Flow-GRPO 把奖励做成统一接口：reward_fn(images, prompts, metadata) -\u0026gt; scores，入口在 flow_grpo/rewards.py 的 multi_score()。它支持多个 reward 加权相加，最终只认汇总的 avg：\nscore_details[\u0026#39;avg\u0026#39;] = total_scores # 各子 reward 加权和 支持的奖励（及自动驾驶对应物）：\n图像 reward 含义 驾驶 reward 对应 GenEval 物体数量/颜色/关系是否正确 规则 reward（红停绿行、让行） OCR 文字渲染正确率 关键约束满足度 PickScore 人类偏好模型评分 偏好/风格 reward CLIPScore 图文匹配度 与导航指令一致性 ImageReward 综合质量+安全 安全 reward（碰撞/TTC） Aesthetic 审美评分 舒适性（jerk/加速度） JPEG compressibility 可压缩性（玩具 reward） 效率/路线进展 多 reward 加权示例：{\u0026quot;pickscore\u0026quot;: 0.5, \u0026quot;ocr\u0026quot;: 0.2, \u0026quot;aesthetic\u0026quot;: 0.3}。驾驶里可以类似设计 $\\mathcal{R} = w_1 \\cdot \\text{safety} + w_2 \\cdot \\text{rule} + w_3 \\cdot \\text{comfort} + w_4 \\cdot \\text{progress} + w_5 \\cdot \\text{imitation}$，其中 imitation 项相当于图像里的 KL 约束，防止完全丢掉专家数据。\n⚠️ Reward hacking 风险：模型可能\u0026quot;钻空子\u0026quot;（如为安全 reward 原地不动、为舒适 reward 永远慢开）。必须用多目标加权 + KL 约束 + 闭环仿真评估三重防护。\n🚀 CPS 采样与 Flow-GRPO-Fast CPS：系数保持采样 源码里 SDE step 有两种模式：标准 sde 和 cps（Coefficients-Preserving Sampling，arXiv:2509.05952）。CPS 重新设计了均值和方差：\nstd_dev_t = sigma_prev * sin(noise_level * pi / 2) pred_original_sample = sample - sigma * model_output prev_sample_mean = pred_original_sample * (1 - sigma_prev) + ... log_prob = -((prev_sample - prev_sample_mean) ** 2) # 去掉常数项 README 指出 CPS 在 GenEval 上有显著提升，采样质量更高，典型设置 noise_level = 0.8，跨模型、跨步数都好用，几乎免调。Fast/no-CFG 配置默认用 sde_type=\u0026quot;cps\u0026quot;。\nFlow-GRPO-Fast：只训一两个窗口步 标准版每条轨迹的 10 个 step 都要算 log-prob 和反传，成本高。Flow-GRPO-Fast 的思路是：完整生成照常走完，但只在一个随机窗口内注入随机性并训练：\nstart = random.randint(0, num_steps//2 - window_size) end = start + window_size # 窗口外：noise_level=0，确定性 ODE 传播 # 窗口内：注入 SDE 随机性，记录 log-prob 参与训练 三个加速变体的对比：\n方法 每条轨迹训练步数 特点 Flow-GRPO 10 步全训 基线，最稳 Flow-GRPO-Fast 1–2 步（窗口） 训练快数倍，PickScore 上 2 步即追平 GRPO-Guard 10 步 加 RatioNorm + Gradient Reweight，抑制过优化 实验显示 Flow-GRPO-Fast 在 PickScore 上只用 2 步训练就能达到甚至超过 10 步的标准版；同时训练和评估都不用 CFG，RL 过程相当于顺带做了 CFG distillation。\nGRPO-Guard：对抗过优化 Flow-GRPO 训练久了会出现一个隐患——reward 越涨、真实质量越差（即 over-optimization，模型学会了钻 reward 漏洞）。GRPO-Guard 发现 importance ratio 存在固有偏置：其均值持续小于 1，且在低噪声步（如 SD3.5-M 的第 8 步）特别明显。这导致 PPO 的 clipping 机制失衡——本应被裁掉的过自信正样本梯度逃过了约束，把策略推向 reward hacking。GRPO-Guard 用两个机制缓解：RatioNorm（矫正 ratio 分布偏置并统一各步方差）+ Gradient Reweight（基于 RatioNorm 对不同去噪步梯度重新加权）。对自动驾驶这类安全敏感任务，这种防护尤其值得借鉴。\n⚔️ 与 DiffGRPO 的对比 ReCogDrive 等工作把 GRPO 用在了**扩散模型（DDPM-style）**的动作头上（即 DiffGRPO），思路相近但底座不同。Flow-GRPO 与之的关键差异：\n维度 DiffGRPO（扩散底座） Flow-GRPO（流匹配底座） 生成路径 弯曲的 SDE 反向链 直线 ODE/Rectified Flow 采样步数 较多（20+ 步） 少（10 步甚至 1–2 步） sde_type 传统 DDPM 噪声调度 支持 sde 和 cps 两种 工程加速 一般 Flow-GRPO-Fast 窗口 + No-CFG 蒸馏 过优化防护 标准 clipping GRPO-Guard（RatioNorm + 重加权） 应用领域 自动驾驶轨迹 图像/视频生成（思路可迁移） 核心结论：两者都是\u0026quot;GRPO × 生成模型\u0026quot;，但 Flow-GRPO 借助 Flow Matching 的直线路径天然支持少步采样，配合 Fast 窗口机制和 CPS，训练效率显著更高；而 DiffGRPO 的优势在于与自动驾驶扩散头（如一些 planner 用 DDPM）天然兼容。对使用 Flow Matching 动作头的 VLA（这正是当前趋势），Flow-GRPO 的迁移更直接。\n🚗 自动驾驶迁移启示 如果你的 VLA 用 Flow Matching 生成未来轨迹，Flow-GRPO 几乎可以\u0026quot;换皮\u0026quot;迁移。对应关系非常清晰：\nFlow-GRPO（图像） 自动驾驶 Flow-GRPO prompt 场景上下文（BEV/相机/地图/指令） image latent noisy future trajectory 最终 image 最终规划轨迹 num_image_per_prompt=24 num_traj_per_scene=16 image reward safety + comfort + rule + progress SD3 transformer VLA action flow 模型 KL to base model imitation / 专家约束 最小落地路线：①先训好 BC + Flow Matching 基础策略；②实现 sample_with_logprob()（参考 sd3_pipeline_with_logprob.py）让采样返回中间轨迹和 log-prob；③同场景生成 $K$ 条候选轨迹并打 reward；④算组内 advantage；⑤clipped policy loss + KL 约束更新；⑥务必闭环仿真评估，不能只看训练 reward——开环 reward 好不等于闭环安全。\n⚠️ 不要直接在线真车探索。建议顺序：离线采样候选 → 离线 reward 后训练 → 仿真闭环 → 安全过滤 → 小规模 shadow mode。\n📌 总结：记住这五点 Flow Matching 策略用 ODE 积分生成多模态样本，比确定性回归更适合规划。 要上 RL 是因为模仿学习有分布偏移、无法超越专家、目标不可微。 GRPO 用组内均值替代 critic，省显存好调参，advantage $= (r_i - \\bar r)/\\sigma$。 核心改造三件事：去噪转移当 action、引入 SDE 才能算 log-prob、最终 reward 广播到每一步。 工程利器：CPS 采样提升质量、Flow-GRPO-Fast 窗口机制大幅加速、GRPO-Guard 防止过优化。 一句话再强调那条最容易踩坑的：奖励/优势在完整生成后统一算，参数更新沿轨迹每一步用 log-prob ratio 分摊——最终结果打分，整条去噪路径领奖或背锅。 这就是 Flow-GRPO 把 RL 接进 Flow Matching 的全部精髓。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/flow-grpo%E8%AF%A6%E8%A7%A3/","summary":"Flow-GRPO 将 Group Relative Policy Optimization 引入流匹配策略训练，让扩散/流匹配模型不再只靠模仿学习，而是能通过奖励信号自主探索更优的驾驶策略。它采用 ODE-to-SDE 转换与 Denoising Reduction 技术，在 SD3、FLUX 等模型上验证了有效性。为生成式模型在自动驾驶规划中的强化学习优化提供了全新范式。","title":"Flow-GRPO 详解：流匹配策略的强化学习优化"},{"content":"📄 论文信息 标题：SparseDriveV2: Scoring is All You Need for End-to-End Autonomous Driving 团队：清华大学 × 地平线（SparseDrive 原班人马） 方向：打分式（Scoring-based）多模态规划 arXiv：2603.29163（2026 年 4 月发布） 一句话总结：与其纠结\u0026quot;词表够不够密\u0026quot;，不如把轨迹词表本身拆开——用几何路径和速度剖面两张紧凑子词表笛卡尔积式组合出超密集轨迹词表（1024×256 ≈ 26 万条），再用粗打分筛 + 精打分选的大规模可扩展打分策略，让打分式规划的精度与可扩展性同时拉满。 ⚠️ 更新说明：本文初版误把 SparseDrive V1（稀疏感知/质量感知记忆库等）的内容当作 V2 讲解。经核对官方论文，V2 的核心贡献是\u0026quot;可扩展词表表示 + 可扩展打分策略\u0026quot;，本文已按官方论文重写。\n🤔 要解决什么问题？打分式规划的\u0026quot;词表天花板\u0026quot; 端到端多模态规划有两大流派：\n流派 代表 做法 瓶颈 词表打分式 VADv2、Hydra-MDP 预置一批固定候选轨迹，学一个评分器挑最优 词表太大则打分算力爆炸，太小则覆盖不足 动态生成式 DiffusionDrive、GoalFlow 用扩散/流匹配按场景现场生成候选 需要额外的生成网络，系统更复杂 两者背后的根本矛盾是：词表要密（覆盖好）就得大（打分贵）。VADv2 用 4096 条静态 anchors，Hydra-MDP 甚至到 8192 条，但研究者普遍发现：静态词表离散化粗糙，继续堆数量又很快触碰显存/算力上限。\n作者的判断：打分式方法的天花板不是\u0026quot;静态词表天生不行\u0026quot;，而是你们没把词表做得够密、没把打分做得够快。本文先对代表方法 Hydra-MDP 做一次 systematic scaling study（Table 1）：把锚点（anchors）一路加密，EPDMS 持续上升、在触及算力上限之前都不见饱和（原摘要原话：consistently improves / without saturation）——瓶颈确实是\u0026quot;记忆体装不下 + 打分算不过来\u0026quot;，而不是语义上\u0026quot;静态表就到此为止\u0026quot;。\n这张表是全文的题眼：26 万候选还不是上限——只要你把表示做到紧凑、把打分做到可扩展，压根不用换范式，分数可以一路吃到底。\n💡 核心思想：把\u0026quot;轨迹\u0026quot;拆成\u0026quot;路径 × 速度\u0026quot; 一句话核心：时空轨迹 = 空间几何（路径）+ 时间进度（速度），把两套子词表做笛卡尔积，就能用很小的词库覆盖极大的动作空间。\n为什么整体轨迹词表这么贵？ 一条轨迹 $\\tau=\\{(x_t,y_t)\\}_{t=1}^{T}$ 同时编码了\u0026quot;去哪\u0026quot;（几何形状）和\u0026quot;多快\u0026quot;（时间演化）。想用一堆完整的时空轨迹覆盖所有驾驶行为，词表要极其庞大——比如\u0026quot;向左变 1m / 变 2m / 变 3m\u0026quot;××\u0026ldquo;加速/匀速/减速/停车\u0026quot;这几种组合，完整列表就要 M×N 条，实际行为空间比这细腻得多。\n分解（Factorization）：路径 + 速度 把轨迹拆成两个正交的部件：\n几何路径 geometry path：$p=\\{(x_i,y_i)\\}_{i=1}^{S}$，沿路径等空间间隔 $\\Delta s$ 采样的空间点序，只描述形状、不含时间； 速度剖面 velocity profile：$v=\\{v_t\\}_{t=1}^{T}$，等时间间隔 $\\Delta t$ 的标量速度序列，只描述快慢、不含空间。 用 $\\mathcal{D}(\\tau)=(p,v)$ 可以把任意轨迹拆开；反过来用组合算子 $\\mathcal{C}(p,v)=\\tau$ 又能重构回一条完整时空轨迹（累加位移沿路径插值）。分解-重构是无损的，重点在它解锁了组合爆炸：\n$$\\mathcal{T}=\\{\\,\\mathcal{C}(p_i,v_j)\\ \\big|\\ p_i\\in\\mathcal{P},\\ v_j\\in\\mathcal{V}\\,\\}$$只有 $N_p$ 条路径 + $N_v$ 条速度剖面，却能组合出 $N_p\\times N_v$ 条轨迹！论文取 $N_p=1024$、$N_v=256$，得到 26 万+ 的超密集词表，是此前 8192 的 32 倍，记忆开销却仍是紧凑的两张子词表。\n为什么这条路行得通？ 直觉上，驾驶行为的多样性恰恰来自这两个维度的乘法组合：同样的\u0026quot;靠左变道\u0026quot;几何，配上\u0026quot;快加速\u0026quot;和\u0026quot;慢滑行\u0026quot;就是两种截然不同的驾驶风格；同样的\u0026quot;匀速直行\u0026quot;速度，配上\u0026quot;超车\u0026quot;与\u0026quot;规规矩矩走\u0026quot;也是两种完全不同的意图。两者在物理上本就是可控变量（方向盘控形状、踏板控速度），分开建表既不丢信息、又各自干净，正是这条\u0026quot;分解\u0026quot;路径能成立的根本原因。\n🏗️ 整体框架：超密集词表 + 可扩展打分 数据流一句话：\n场景特征（六路相机 → ResNet 骨干 → 稀疏感知）➜ 超密集轨迹词表（路径词表 × 速度词表）➜ ① 粗粒度分解打分 ② 精粒度组合打分 ➜ 最高分轨迹作为规划输出\n下面拆解三个板块。\n1. 词表构造：可扩展词表表示（Scalable Vocabulary Representation） 路径词表：从训练数据提取足够长（覆盖 50m）的未来轨迹 → 按路径几何空间重采样 → K-Means 聚类出 $N_p=1024$ 条路径 anchors。 速度词表：同理，对每条轨迹算速度剖面 $\\{v_t\\}$ → 聚类出 $N_v=256$ 条速度 anchors。 两条子词表经过 $\\mathcal{C}$ 组合构成可重构的、无形状冗余的超密集轨迹集——空间维度用路径覆盖，时间维度用速度覆盖，互不耦合，所以词表能指数级扩展。 2. 打分：可扩展打分策略（Scalable Scoring） 打分也不能直接对 26 万条全算，所以分两层：\n阶段 打分对象 复杂度 作用 粗粒度分解打分 每条路径 $p_i$、每条速度 $v_j$ 各打一次分 $O(N_p+N_v)$ 全靠原始打分快速筛掉垃圾候选 精粒度组合打分 只对保留下的 top-K 组合轨迹 $O(K)$，K≈64 对组合轨迹做时空一致的精细评估 两块合起来才是\u0026quot;精算\u0026rdquo;——先在分解空间用低维打分快速并入，再在组合空间做高维精确评估。这就是打分与词表规模 解耦 的关键机制：粗打分是 1 维向量、9 维输入，精打分只在少数轨迹上算，所以词表做到 26 万也无所谓。\n打分器用什么特征？ 论文让路径/速度嵌入与场景 condition（实例 queries、地图查询）做跨注意力交互，理解\u0026quot;这条路径是否符合当前路况、这个速度是否跟得上前车、是否符合路权\u0026quot;——打分器学的是\u0026quot;开得对不对\u0026quot;，而不是背模板。\n3. 训练与推理 粗-精两阶段打分训练： 阶段一（coarse）：用预测分数与校准过的老师分数（如真值轨迹的 L2 距离度量）做监督，训练一个可泛化的粗打分器。 阶段二：对组合轨迹做精打分，只对 top-k 候选回归精确分数，避免对 26 万条都算。 推理：场景 words → 分解：所有路径/速度各自粗打分 → top-k 组合轨迹精打分 → 取分数最高一条下发控制。 为什么要这么干？三大收益 收益 对比 词表 32 倍扩张，不爆显存 两张紧凑子词表代替一张巨表，组合在推断时才生成 打分 O(词表) → O(Np+Nv+K) 粗打分把所有候选一次性打分完，精打分推算极少，词表再大也只是多两次打分 覆盖细粒度 静态表粒度粗的问题被 26 万细分解决，无须动态生成网络 与各路方案的横向对比 方法 候选来源 词表/生成规模 打分成本 特点 VADv2 静态 anchors 4096 O(4096) 参数少、好部署，但覆盖粗 Hydra-MDP 静态 anchors 8192 O(8192) 引入更多训练技巧 SparseDriveV2 路径×速度组合 262144 O(Np+Nv+K) 词表最密、打分最省 DiffusionDrive DDIM 扩散生成 每帧现场采样 采样 N 步 细粒度好，但要生成网络 结论：打分式范式\u0026quot;天然适合端到端规划\u0026quot;，只要把词表做对、打分做快，就能既拿到动态生成式的精细覆盖，又保留打分式的简单性与可解释性。表中可见 VAD2 / Hydra-MDP 的瓶颈其实在于\u0026quot;单张稠密表\u0026quot;撑不起密度，而密度恰恰是打分质量的地基。\n📊 实验结果：双基准 SOTA 要点（完整数值见原论文表 2-4）：\nNAVSIM v2 navtest：SparseDriveV2 在 ResNet-34 骨干下达到 90.1 EPDMS（官方更新评测版本），同时位列打分式与动态式两派第一，反超 Hydra-MDP++(V2-99, 85.1 EPSM) / DriveSuprim(V2-99, 86.0)。 NAVSIM v1：92.0 PDMS，同样处于第一梯队。 Bench2Drive 闭环：在 220 条测试路线、44 类交互场景上 Driving Score 89.15 / Success Rate 70.00，全面领先（部分用专家蒸馏特征 *）。Bench2Drive 上直接把轨迹拆成路径+速度剖面做控制（路径横向 + 速度纵向），进一步验证了\u0026quot;分解表示\u0026quot;不仅利于打分，也利于把规划转成底层控制指令。 官方排行榜可视化 消融（Table 6） 左图：词表扩展性——连续增大 $N_p$（路径锚）与 $N_v$（速度锚）时，EPDMS 单调上升、未见尖峰，验证\u0026quot;词表越密越好\u0026quot;的假设。 右图：可扩展打分有效性——把粗打分换成全部候选打分，效果不升反降/需更多计算；粗-精两阶段显著省算力且不损精度。 🎨 定性可视化：关键场景对比 论文与官方仓库提供的四张定性图，展示了 V2 在行为层面的提升：它不止\u0026quot;能开\u0026quot;，还会更顺、更高效、更贴合导航意图。对比基线为代表性静态词表打分方法（VADv2 / Hydra-MDP 风格）。\n① 急弯更顺滑 解读：这张图是\u0026quot;分解表示\u0026quot;物理意义最直观的体现。把轨迹拆成路径 + 速度剖面后，几何路径天然具有光滑性（等弧长采样 + 插值保证曲率连续），两套子词表各自独立、组合时也不会拼出曲率突变。而基线方法直接回归完整时空轨迹，统计上容易出现瞬时抖动。一条平滑的过弯曲线，就说明了为什么\u0026quot;分解 + 超密组合\u0026quot;能让可开性显著提升。\n② 堵车场景更高效 解读：这种行为差异反映的是打分器在\u0026quot;路权\u0026quot;与\u0026quot;通行效率\u0026quot;之间的权重取舍。V2 的粗-精打分器见过大量\u0026quot;等待 vs 抢行\u0026quot;的标注对，学到人类司机的效率偏好——前方出现可通行空当时不再死等。打分式方法学到的不是简单模仿，而是更\u0026quot;会钻\u0026quot;的驾驶风格，这正是\u0026quot;打分即策略\u0026quot;的体现。\n③ 高层的导航意图对齐 解读：这张图的价值在于回答\u0026quot;跟导航走，还是躲障碍走\u0026quot;。打分器只有让高分轨迹去和真值对齐，才能学到\u0026quot;哪条路符合全局方向意图\u0026quot;。V2 对路径的显式几何建模，让输出轨迹在符合导航期望的方向上与大曲率避开障碍之间取得平衡——不再为了绕障碍而逆着导航意图乱绕。\n④ 诚实的失败案例：导航信息不足 这组失败样本非常有价值：当全局路由信息供给不完整时，即使词表再密、打分再细，纯打分仍是\u0026quot;跟着数据模仿\u0026quot;的影子。它为后续\u0026quot;导航感知 / 全局意图注入\u0026quot;研究自然留下一道接口——也提醒读者，任何静态词表系统都依赖高质量的上下文特征。\n🤔 局限性与未来方向 打分依赖路径/速度聚类质量：词表来自 K-Means，聚类涵盖不了的行为会被系统盲区。若训练分布里没有某种急弯组合，无论打分器多强都调不出对应路径——这是任何静态词表范式的硬边界。 导航敏感：Figure 5 显示强依赖全局路由/导航信号，供给不完整时即便词表再密也会挑错方向。这说明打分不能脱离全局上下文单独讨论，未来需要把导航意图显式注入打分特征。 打分器仍是\u0026quot;模仿\u0026quot;的影子：对真值轨迹模仿打分（L2 等）做监督，分布上限仍受训练数据质量约束；未来可结合 RL（如 GRPO 用可微奖励对齐驾驶偏好而非纯模仿），让打分学会\u0026quot;主动绕障\u0026quot;。 词表即先验：双刃剑——但正向看，每个候选都能拿到可解释分数、被下游安全层逐条审计，这是动态生成式（扩散）所欠缺的可解释性透明度。 动力学可行性：路径×速度组合在几何上光滑，但真实曲率/加速度限幅是否完全满足，仍需闭环实验进一步验证。 📝 个人思考 SparseDriveV2 最打动我的一点是它的**\u0026ldquo;反直觉判断\u0026rdquo;：当大家都在往\u0026quot;动态生成\u0026quot;方向上卷（扩散、流匹配），它却反身回去把\u0026quot;静态打分\u0026quot;做到极致，用分解词表 + 可扩展打分**两招把旧范式重度重做。这背后的洞见是——很多瓶颈并非假设不对，而是\u0026rsquo;表示与计算\u0026rsquo;没有解耦。轨迹这个对象本质是\u0026quot;空间 × 时间\u0026quot;的双因子结构，一旦你把它拆成两个正交分量，词表就获得组合自由度、打分就获得复杂度自由度。\n一个人人觉得\u0026quot;静态表太糙\u0026quot;的问题，作者选择了\u0026quot;把表做大\u0026quot;而不是\u0026quot;换生成范式\u0026quot;，并证明了大表 + 好打分就能赢。这种\u0026quot;反共识\u0026quot;的工程直觉，比堆新架构更值得学习。\n第二个收获是**\u0026ldquo;粗-精两阶段\u0026quot;的工作流智慧**：烈士式地对 26 万条全精算，永远比不过\u0026quot;先用低维粗信号把候选收敛到 top-K，再对少量候选做高维精算\u0026rdquo;。这是检索-重排（retrieve-rerank）、级联分类、MDP 剪枝等一再出现的通用范式，在规划里落地成\u0026quot;分解打分 + 组合打分\u0026quot;，很优雅。\n第三个层面是它与 DiffusionDrive 的路线形成非常清晰的**\u0026ldquo;路线之争\u0026rdquo;：一个\u0026quot;当场生成候选\u0026quot;（Dynamic），一个\u0026quot;备好超密词表\u0026quot;（Static）；但两者都在追求多模态 + 细粒度**。把 SparseDriveV2 与 DiffusionDrive 并排看，能更直观地理解\u0026quot;表示的选择\u0026quot;对端到端规划的牵动——这也是本系列第 5 篇和第 7 篇互为镜像的原因。\n最后，V2 留了些尾巴给后续：如何用更强的世界/导航信号补齐 Figure 5 的\u0026quot;导航不足\u0026quot;短板、怎么让打分器脱离对模仿监督的依赖——这些都留给更自信的系统。打分式规划，或许是\u0026quot;简单而强大\u0026quot;路线的一个名字。 别忘了，词表即先验天然带可审计性，这恰恰是真实落地中最稀缺的安全资产。 📖 这是论文精读系列的第 7 篇。你会赌\u0026quot;打分无敌\u0026quot;的静态词表，还是\u0026quot;生成多模态\u0026quot;的动态扩散？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/sparsedrive-v2%E7%B2%BE%E8%AF%BB/","summary":"SparseDriveV2 把\u0026rsquo;打分式规划\u0026rsquo;推向极致：把时空轨迹分解成几何路径✕速度剖面两份词表，用组合式构图构造出比此前稠密 32 倍的超密集轨迹词表；再配合\u0026rsquo;粗粒度分解打分 + 细粒度组合打分\u0026rsquo;的可扩展打分策略，让打分计算量与词表大小解耦。在 NAVSIM v2 上达到 90.1 EPDMS，位居打分式与生成式方法的 SOTA。","title":"论文精读｜SparseDriveV2：Scoring is All You Need——可扩展轨迹词表与打分"},{"content":"一句话理解在线地图 在线地图 = 让车自己\u0026quot;看着路画地图\u0026quot;，而不是依赖提前铺好的高精地图，从而实现更广的运营范围和更强的鲁棒性。\n传统高精地图（HD Map）需要专业采集车提前扫描、人工标注、定期更新，成本极其高昂（每公里数千元），且无法覆盖所有道路。在线地图构建（Online HD Map Construction）的目标是用车上现有的传感器（摄像头、LiDAR），实时地在驾驶过程中把路网结构重建出来。\n🎯 高精地图包含什么 核心地图元素 高精地图不是普通导航地图的\u0026quot;放大版\u0026quot;。它包含厘米级精度的几何和语义信息：\n元素 描述 表示方式 车道线 车道边界（实线/虚线/双黄线） 折线 + 类型标签 道路边界 路沿/隔离带 折线（多边形） 人行横道 斑马线区域 多边形 停止线 路口停止位置 折线 交通信号灯 灯组位置和关联车道 3D 位置 + 语义 车道中心线 每条车道的行驶参考线 折线 + 方向 车道连接 车道之间的拓扑关系 有向图 限速/标志 交通标志含义 属性标签 车道图（Lane Graph） 地图不仅仅是几何线段的集合。一个完整的在线地图还需恢复车道之间的拓扑关系——即车道图（Lane Graph）：\n节点：车道段内的中心线或车道段的端点 边：表示车道之间的连接关系（变道、直行、转弯） 属性：行驶方向、是否可变道等 这个图结构直接输入规划模块，告诉车辆\u0026quot;你可以从这里走到那里\u0026quot;。\n🔧 在线地图构建的范式演进 在线地图构建经历了从\u0026quot;感知 → 后处理向量化\u0026quot;到\u0026quot;端到端向量解析\u0026quot;的演进。\n第一代：分割 → 向量化 代表工作：HDMapNet（2021）\nHDMapNet 采用的是\u0026quot;先分割、后向量化\u0026quot;的流水线：\n图像特征提取：使用 EfficientNet-B0 等多尺度 backbone 提取多视角图像特征 BEV 特征变换：通过 IPM（逆透视映射）或 MLP 将图像特征映射到 BEV 空间 语义分割：在 BEV 空间上做逐像素分类（车道线、边界、人行道等） 实例分割：区分不同的车道线实例（同一条车道线为同一个实例） 后处理向量化：对每个实例做聚类、多边形拟合、卡尔曼平滑，最终输出折线/多边形 局限性：\n多阶段流水线，误差会累积（分割错 → 向量化也错） 后处理中的手工规则（聚类阈值、拟合参数）难以迁移到新场景 无法端到端优化，感知和向量化各自独立，中间没有梯度传递 MapTR 系列（2022-2023）极大地简化了这个流程。\n第二代：端到端 Transformer 解析 MapTR（2022）——MapTR 提出了一种新的地图表示和端到端学习范式：\nHierarchical Query Embedding：定义可学习的实例 query（lane query）和点 query（point query） Transformer Decoder：使用 DETR 风格的 decoder，通过 cross-attention 从 BEV 特征中解析地图元素 Permutation-based Matching：MapTR 的关键创新——把地图元素匹配看作排列等价问题： 车道线由一组有序点构成，但方向可以正反颠倒（排序排列） 采用 Hungarian algorithm 在预测和真值之间找到最优排列匹配 Loss 包含：分类 loss、点位置 loss、方向 loss MapTRv2（2023）——在 MapTR 基础上做了多项改进：\n引入 在线矢量化辅助损失（Online Vectorized Auxiliary Loss），对每个 decoder layer 的中间输出计算损失，加速收敛 加入 方向分类头，显式预测车道点的方向（从哪个方向到哪个方向） 引入 自适应点采样，根据不同车道线的长度动态分配点数 性能对比：\n方法 mAP (车道线) 推理速度 是否端到端 是否需要后处理 HDMapNet ~32.5% ~15 FPS ❌ 是（复杂） MapTR (n=50) ~56.2% ~22 FPS ✅ 否 MapTRv2 (n=50) ~62.8% ~20 FPS ✅ 否 VectorMapNet ~55.3% ~10 FPS ✅ 是（AutoRegressive） VectorMapNet（2022） VectorMapNet 将地图构建视为序列生成问题：\n图注意力编码：在 BEV 特征上构建图结构，通过 GAT 捕获车道间的空间关系 自回归解码：按\u0026quot;实例 → 点序列\u0026quot;的顺序逐步生成： 先生成一个车道实例的起始点 然后一步步预测后续点的位置 用特殊的\u0026quot;结束 token\u0026quot;标记序列终止 点序列 loss：使用 chamfer distance 衡量预测点和真值点的匹配程度 优点：可以处理可变长度的车道线（不同长度的车道使用不同的点数）。 缺点：自回归解码慢，无法并行生成，推理速度受限。\n🔄 车道图构建 从折线到拓扑图 仅仅检测出车道线还不够——规划模块需要知道它们之间的连接关系。车道图构建通常包括：\n车道段提取：将检测到的折线分割为\u0026quot;段\u0026quot;（segment），每个段内车道属性一致（宽度、方向） 邻接关系判定：根据空间位置（端点距离 \u0026lt; 阈值）和几何方向（夹角 \u0026lt; 阈值）判断哪些段相连 拓扑推理：利用交通规则（如实线不能变道）约束图结构 方向赋值：根据车道线的虚线/实线和行车方向赋予边的方向属性 车道图构建流程详解 一个完整的车道图构建系统包含以下步骤：\n车道段（Lane Segment）提取：将 MapTR/HDMapNet 输出的折线按属性（实线/虚线/双黄线）分割为语义一致的段 邻接判定：基于空间距离和几何连续性判断段间连接关系 拓扑推理：利用交通规则约束——实线两侧不可变道、路口内全连通 车道中心线生成：根据左右车道边界的中线计算每条车道的行驶参考线 方向赋值：结合行车方向和交通规则给每条边赋予方向属性 这一过程类似从\u0026quot;路网骨架\u0026quot;恢复\u0026quot;完整的路网地图\u0026quot;。\n最近进展：隐式车道图 一些新工作试图绕过显式图构建，直接在隐空间进行路径推理，比如：\nSTSU (Structured Scene Understand)：将车道图表示为 Transformer 中的 token 关系 LaneGAP：使用图神经网络直接生成可达路径，而非先建图后规划 🗺️ 地图在规划中的角色 在线地图构建的最终目的是服务规划。地图为规划提供硬约束和先验知识：\n硬约束 约束 含义 违反后果 车道保持 车辆必须在车道边界内行驶 压线/借道扣分 方向约束 车辆必须沿车道指定方向行驶 逆行 变道限制 实线段不能变道，仅虚线段可以 违章 路口规则 红灯停、斑马线让行 安全事故 软约束（先验） 行驶轨迹先验：沿车道中心线行驶是最自然的驾驶行为 速度先验：不同车道类型（直行、转弯）有不同的合理速度范围 交互先验：在与它车交互时，车道关系决定了谁有路权 一个典型的规划系统会将地图约束建模为优化问题中的成本函数：\n$$ \\mathcal{L}_{\\text{map}} = w_1 \\cdot \\mathcal{L}_{\\text{lane}}(\\tau) + w_2 \\cdot \\mathcal{L}_{\\text{boundary}}(\\tau) + w_3 \\cdot \\mathcal{L}_{\\text{direction}}(\\tau) $$其中 $\\tau$ 是规划轨迹，每个项衡量轨迹对地图约束的遵守程度。\n🔮 趋势与争议 趋势 1：端到端模型可能替代显式 HD Mapping 随着 UniAD、VAD 等工作将感知→预测→规划整合为一个端到端网络，一些研究者认为显式的地图构建可能是多余的——模型可以直接从 BEV 特征中隐式学习到路网结构，不需要输出显式的地图元素。\n反方观点：显式地图具有可解释性和可调试性。当车辆行为异常时，工程师可以检查\u0026quot;地图建错了还是规划错了\u0026quot;，这对安全至关重要。\n趋势 2：在线地图与导航地图的融合 导航地图（SD Map）虽然精度低（米级），但覆盖广。一些最新的工作探索如何将 SD Map 作为先验、用在线感知结果做细粒度修正——实现\u0026quot;粗到细\u0026quot;的地图构建。\n趋势 3：时间融合提升鲁棒性 单帧检测难免有漏检和误检，但通过时序融合（将过去几秒的检测结果对齐后融合）可以大幅提升地图构建的稳定性和完整性。MapTR 的后续工作引入了 temporal decoder 来实现这一目标。\n📚 延伸阅读 Li, Q. et al. \u0026ldquo;HDMapNet: An Online HD Map Construction and Evaluation Framework.\u0026rdquo; ICRA, 2022. Liao, B. et al. \u0026ldquo;MapTR: Structured Modeling and Learning for Online Vectorized HD Map Construction.\u0026rdquo; ICLR, 2023. Liao, B. et al. \u0026ldquo;MapTRv2: An End-to-End Framework for Online Vectorized HD Map Construction.\u0026rdquo; arXiv:2308.05736, 2023. Mi, J. et al. \u0026ldquo;VectorMapNet: End-to-End Vectorized HD Map Learning.\u0026rdquo; ICML, 2022. Hu, Y. et al. \u0026ldquo;Planning-oriented Autonomous Driving (UniAD).\u0026rdquo; CVPR, 2023. Jiang, B. et al. \u0026ldquo;VAD: Vectorized Autonomous Driving.\u0026rdquo; NeurIPS, 2023. ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E5%9C%A8%E7%BA%BF%E5%9C%B0%E5%9B%BE%E6%9E%84%E5%BB%BA%E5%9F%BA%E7%A1%80/","summary":"在线高精地图构建是自动驾驶感知的核心模块之一，它从传感器数据中实时重建车道线、边界、路口等道路元素。本文详解 HDMapNet、MapTR、VectorMapNet 等代表性方案的技术路线，覆盖分割→向量化、端到端 Transformer 解析、车道图构建，以及地图在规划中的约束作用。","title":"在线地图构建基础：从传感器到结构化地图"},{"content":"📄 论文信息 标题：BrainWAM: Action-Space Coordination of Semantic Priors and Predictive Dynamics for Autonomous Driving 作者机构：中科院自动化所 NLPR（张冰、尚澍要、卢烁、徐远、王超、范略 ✉、张兆翔 ✉）× 理想汽车（顾家豪、王肇、王轶达、张学阳、詹坤） arXiv：2608.12854 一句话总结：BrainWAM 指出\u0026quot;VLA 会语义、WAM 会预测\u0026quot;，但直接拼在一个 token 空间里会打架——语义 token 太好学，把注意力全吸走，预测信号被淹没。它的解法是：像大脑一样分工——左脑语义通路 + 右脑预测通路，各自产出一组\u0026quot;面向动作的表示\u0026quot;，再通过模拟胼胝体的 CAB 双向交换、模拟小脑的 CIF 协调解码。NAVSIM v1 89.5 PDMS / v2 89.6 EPDMS，双榜 SOTA。 🎯 一句话记忆点：BrainWAM = \u0026ldquo;左脑想语义，右脑想预测，胼胝体传消息，小脑把脉捏成轨迹\u0026rdquo;——它不混 raw token，只在\u0026quot;动作表示\u0026quot;这一层做协调，就像大脑不在底层神经信号上融合，而在行为层面协同。\n🧠 先搞懂：自动驾驶里的 WAM 到底是什么？ 写这篇精读之前，必须先把概念钉死——因为 WAM、WM、动作专家（Action Expert）、VLA 这四个词很容易混。BrainWAM 论文自己的 Keywords 就是 world action models, world models, vision-language-action models 三个，可见它们确实需要辨析。\nWAM vs WM（世界模型）——差在一个\u0026quot;动作\u0026quot; WM（World Model，世界模型） WAM（World Action Model，世界动作模型） 学什么 环境如何演化：当前观测 → 未来观测/场景 动作与未来状态如何一起演化：(当前观测, 动作) → 未来场景 输出 未来帧/未来 BEV/未来 occupancy 未来帧 + 轨迹（两者联合建模） 本质 一个生成器/预测器，不直接开车 一个策略 + 生成器的联合体 和规划的关系 旁路：给规划器当特征/当模拟器 内建：动作预测直接由世界建模监督 典型例子 GAIA-1、DriveDreamer、GenAD、VISTA DriveWAM、SimWAM、Metis、BrainWAM 一句话 \u0026ldquo;世界会怎么变\u0026rdquo; \u0026ldquo;我这么开，世界会怎么变，然后我就这么开\u0026rdquo; 关键差异：WM 只是\u0026quot;预测未来\u0026quot;的模块，它本身不产生驾驶决策（最多被规划器借用）；WAM 则把\u0026quot;预测未来\u0026quot;和\u0026quot;产出轨迹\u0026quot;焊在一起——用世界动态当动作预测的监督信号。这就是名字里那个 Action 的分量。\n💡 类比：WM 像\u0026quot;天气预报中心\u0026quot;，只报天气；WAM 像\u0026quot;有经验的司机\u0026quot;——他一边看路况预判接下来会怎样（世界建模），一边根据预判打方向盘（动作生成），而且他的预判能力是开车开出来的（联合训练）。\nWAM vs 动作专家（Action Expert）——一个\u0026quot;有老师\u0026quot;，一个\u0026quot;没老师\u0026quot; 动作专家（Action Expert）是 WAM 里的\u0026quot;轨迹输出器\u0026quot;，通常是一个轻量 DiT/MLP，只负责把条件变成轨迹。二者是包含关系，不是并列关系：\nAction Expert（动作专家） WAM（世界动作模型） 职责 把条件 c 映射成轨迹 a 联合建模\u0026quot;未来世界 + 轨迹\u0026quot; 是否含世界建模 ❌ 没有，纯轨迹生成 ✅ 含视频/未来预测分支 动态先验来源 全靠条件里给的表示 自己从未来监督里学 举例 SimWAM 的 Action DiT、BrainWAM 的 action expert SimWAM、Metis、DriveWAM、BrainWAM 整体 所以更准确地说：WAM = Action Expert + 世界建模分支（VGM/未来预测），两者联合训练。你可以把 Action Expert 看成 WAM 的\u0026quot;执行器官\u0026quot;，把世界建模分支看成它的\u0026quot;预判器官\u0026quot;。很多论文（包括 BrainWAM）会单独讨论 action expert 的规模/时延，但整个架构才是 WAM。\nWAM vs VLA——补的是\u0026quot;预测\u0026quot;还是\u0026quot;语义\u0026quot; VLA（Vision-Language-Action） WAM（World Action Model） 先验来源 VLM 的世界知识（语言/语义/规则） 未来动态（世界怎么演化） 强项 规则遵守、路线理解、场景语义、用户意图 运动趋势、交互结果、物理可行性 弱项 缺少显式的\u0026quot;未来演化\u0026quot;建模 规则感知/意图推理弱 推理时在算什么 语义推理 → 决策 → 动作 未来预测 → 动作 典型代表 ReCogDrive、DriveVLA-W0、AutoVLA、DynVLA DriveLaW、DriveWAM、SimWAM、Metis 一句话：VLA 是\u0026quot;懂道理的车\u0026quot;，WAM 是\u0026quot;有预判的车\u0026quot;。一个强在规则语义，一个强在动态预测——BrainWAM 的核心主张就是这俩是互补的，应该协同而不是二选一。\n一张表收束四个概念 概念 有没有\u0026quot;未来预测\u0026quot; 有没有\u0026quot;轨迹输出\u0026quot; 有没有\u0026quot;语义/语言先验\u0026quot; 角色 WM（世界模型） ✅ 有 ❌ 无 可选 只预测世界的模块 Action Expert（动作专家） ❌ 无 ✅ 有 可选 只输出轨迹的模块 WAM（世界动作模型） ✅ 有 ✅ 有 通常无 预测+轨迹联合建模的范式 VLA（视觉语言动作模型） 通常无 ✅ 有 ✅ 有 语义推理+轨迹输出的范式 🔑 这四者里，WAM 和 VLA 是两种\u0026quot;端到端驾驶范式\u0026quot;，WM 和 Action Expert 是两种\u0026quot;零件\u0026quot;。BrainWAM 的野心，是把两个范式（VLA + WAM）在动作层面拧成一个系统——这就是标题里 \u0026ldquo;Action-Space Coordination\u0026rdquo; 的含义。\n🤔 要解决什么问题？ 先认识三个绕不开的词：MoT / Dual-MoT / Tri-MoT 💡 很多读者卡在这里，先把这几个概念说透。 \u0026ldquo;Mo\u0026rdquo; 是 Mixture-of-Transformers（混合 Transformer） 的缩写，\u0026ldquo;T\u0026rdquo; 是 Transformer。它是\u0026quot;MoE（Mixture-of-Experts）\u0026ldquo;思想在注意力层的变体：不同类型的 token 共享一部分注意力层，但各自保留专属的 FFN（前馈网络），让不同模态\u0026quot;能对话、又不互相污染\u0026rdquo;。\nDual-MoT（双模态 MoT）：两类 token（比如\u0026quot;视频 token + 动作 token\u0026quot;或\u0026quot;语义 token + 动作 token\u0026quot;）共享自注意力，各自有专属 FFN——BrainWAM 的每个分支内部用它来耦合。 Tri-MoT（三模态 MoT）：三类 token（VLM 语义 token + VGM 视频 token + 动作 token）全部放进同一个共享注意力空间自由互相关注。它是最\u0026quot;暴力\u0026quot;的融合方式——所有 token 都能碰到彼此。 MoT 与 MoE 的关系：MoE 是\u0026quot;不同输入走不同专家网络\u0026quot;，MoT 是\u0026quot;不同模态的 token 在同一个 Transformer 里但注意力/FFN 分工\u0026quot;。二者都强调\u0026quot;特化 + 共享\u0026quot;的平衡。 🎯 一句话：Tri-MoT = \u0026ldquo;把三类 token 一股脑倒进同一个注意力锅\u0026rdquo;，而 BrainWAM 反对的就是这种\u0026quot;倒大锅\u0026quot;的融合方式——它把融合从\u0026quot;原始 token 空间\u0026quot;挪到\u0026quot;动作表示空间\u0026quot;。下文会反复拿 BrainWAM 和 Tri-MoT 对比，所以先记住 Tri-MoT 的定义很重要。\n驾驶规划需要两种证据：语义约束 + 预测动态 端到端规划本质是在回答\u0026quot;下一步怎么开\u0026quot;。这需要两种性质不同的证据：\n语义约束（semantic constraints）：这条路的规则是什么、导航指令要我往哪拐、前车刹车灯亮了代表什么、要不要让行人。这类证据离散、符号化、靠世界知识。 预测动态（predictive dynamics）：这个路口接下来会怎么演化、我打这个方向盘后 2 秒会到哪、旁边那辆车会不会挤进来。这类证据连续、时变、靠运动建模。 现有方法通常只占一边：\n阵营 擅长 短板 VLA（ReCogDrive、DriveVLA-W0、AutoVLA…） 用 VLM 先验做语义推理 没有显式建模\u0026quot;未来场景怎么演化\u0026quot; WAM（DriveLaW、DriveWAM、SimWAM…） 用世界模型做未来感知 规则感知、意图驱动的推理较弱 BrainWAM 的立场：语义和预测不是二选一，而是天然互补——VLA 提供\u0026quot;该往哪开、遵守什么\u0026quot;（task-aware semantic priors），WAM 提供\u0026quot;这么开会发生什么\u0026quot;（future-aware dynamics）。问题是怎么把它们有效地合起来。\n直接拼？——Tri-MoT 的注意力失衡病 最直白的合并方式是 Tri-modal Joint Attention（Tri-MoT）：把 VLM 的 token、VGM（视频生成模型）的 token、动作 token 全部丢进同一个共享注意力空间，让它们自由互相关注。\n但论文发现一个反直觉的现象：Tri-MoT 的端到端性能甚至不如单独的 WAM（87.8 vs 88.1 PDMS）。为什么？\n诊断证据在论文图 2：把 action token 对 VLM token 和 VGM token 的注意力占比画出来，发现绝大多数 Transformer 层里，action token 对语义（VLM）token 的注意力显著高于对视频（VGM）token 的注意力，浅层尤其严重。\n🔍 图 2 怎么读？ 横轴 = Transformer 层（浅层→深层），纵轴 = action token 对另一类 token 的平均注意力权重比例； 图上有两条曲线：一条是 action→VLM（语义） 的注意力，一条是 action→VGM（视频/预测） 的注意力； 结论一眼可见：语义曲线几乎全程压在预测曲线上方，尤其在浅层——action token 从 VLM 那边\u0026quot;吸\u0026quot;走了太多注意力，VGM 提供的预测信号被边缘化。 为什么会这样？ 论文给出模态竞争的机制解释：联合多模态训练里，\u0026ldquo;更容易学的模态\u0026quot;会主导优化、压过难学的模态。这里：\nVLM token 是干净、语义紧凑的（图片一进来就是高信号的特征），太好学了； VGM token 还正在去噪中（视频分支处于 noisy 状态），信号弱、变化大，难学。 于是 action token 走了\u0026quot;语义捷径\u0026rdquo;（semantic shortcut），把注意力全放在好啃的 VLM 上，预测视频 token 被忽略。结果是：混合进共享空间的预测信号形同虚设——这就是注意力分配错配（attention-allocation mismatch）。\n🎯 一句话：Tri-MoT 的病根是\u0026quot;高维异构 token 直接混居，容易学的模态把注意力抢光了\u0026quot;。 解决思路不是加大融合力度，而是别让它们在同一层里混居。\n💡 核心思路：大脑式分工 → 动作空间协调 论文从神经科学借来一个组织原则：复杂行为不是靠把所有信号混成一种表示涌现的，而是靠\u0026quot;功能特化的子系统之间的协调\u0026quot;：\n左脑半球：负责语言、符号、序列处理 → 对应 语义通路（VLA）； 右脑半球：负责视觉空间、整体理解 → 对应 预测通路（WAM）； 胼胝体（corpus callosum）：左右脑交换信息的桥 → 对应 CAB（Callosal Action Bridge）； 小脑（cerebellum）：协调运动意图、精细打磨动作 → 对应 CIF（Cerebellar Intent Fusion）。 把这个映射搬到自动驾驶：\n🔍 图 1 怎么读？ 这是一张\u0026quot;范式总览图\u0026quot;，画了四种端到端架构的数据流骨架，重点对比 (c) 和 (d)：\n(a) VLA：观测 + 指令 → VLM 语义推理 → 动作。没画未来预测（缺 WAM 那半边）； (b) WAM：观测 → 视频生成 → 动作。没画语义/语言接地（缺 VLA 那半边）； (c) Tri-MoT：VLM token、VGM token、action token 全部汇入同一个 attention 池——图上能看到三类 token 交织成一张\u0026quot;全连接网\u0026quot;，这正是它互抢注意力的可视化； (d) BrainWAM：左边一条语义通路（VLM→语义动作 token）、右边一条预测通路（VGM→预测动作 token），两条通路各自独立前进，中间只有一根\u0026quot;桥\u0026quot;（CAB）在动作表示层交换消息，最后汇入一个小脑式协调器（CIF）输出轨迹。 读图关键：从 (c) 到 (d)，变化的不是\u0026quot;加了什么模块\u0026quot;，而是\u0026quot;在哪一层融合\u0026quot;——从\u0026quot;原始 token 空间\u0026quot;挪到\u0026quot;紧凑动作空间\u0026quot;。这是整篇论文最核心的 design choice。\n🎯 一句话记忆：大脑不同部位不共享原始神经信号，它们各自形成\u0026quot;意图\u0026quot;，再在意图层面协调——BrainWAM 让语义通路和预测通路各自形成\u0026quot;动作意图\u0026quot;，再在动作层面协调。\n🧩 架构讲解：输入 → 模型 → 输出 📍 架构图在这：BrainWAM 的完整架构图是 图 3（Figure 3，见下方\u0026quot;🧩 整体架构拆解\u0026quot;小节）——它是全文的\u0026quot;总装图\u0026quot;。下面先用一张我自己画的流程图把整体数据流讲清楚，再逐模块拆解。\n① 输入是什么？（4 类） 输入 类型 进哪条通路 作用 多视角图像（当前观测 o_t） 视觉 两条通路都进 给 VLM 看场景，给视频骨干做未来预测的起点 导航指令 l 文本 VLA 语义通路 告诉模型\u0026quot;该往哪开\u0026quot;，是语义先验的来源 自车历史状态 E 向量 VLA 语义通路 自车过去的速度/轨迹，提供运动上下文 噪声视频 latent x_v + 噪声轨迹 x_a 生成起点 视频→WAM，轨迹→两条通路的动作专家 这是 flow 生成模型的\u0026quot;起点\u0026quot;，从噪声逐步去噪 ② 中间经历了什么？（两步） 两条通路各自\u0026quot;特化\u0026quot;：左通路（WAM 预测）看视频动态，右通路（VLA 语义）看语义规则，各自训练时只学自己那一半，产出性质不同的动作 token（A_pred vs A_sem）； 动作空间协调：CAB 在两条动作 token 流之间双向交换消息（不碰原始 token）→ CIF 把协调后的两个意图融合 → 解码出轨迹。 ③ 输出是什么？（1 类） 一条未来 4 秒的轨迹 a = (x, y, θ) 序列（含位置与朝向），可以直接下发控制。注意：VLA/VGM 的原始 token 永远不直接见面，只有它们的\u0026quot;动作投影\u0026quot;在动作层协调。\n🧩 整体架构拆解（论文核心图） 📍 架构图在这：图 3（Figure 3）就是 BrainWAM 的完整架构图，下面这张图承载了整篇论文的设计。把它读懂了，全文就懂了 80%。\n🔍 图 3 怎么读？（全文最重要的图，按顺序读） 这张图是\u0026quot;总装图\u0026quot;，按下述顺序读：\n左半边 = WAM 通路（右脑/预测）：当前观测 → Wan2.2-TI2V-5B 视频骨干 → 未来视频 latent 去噪 → 视觉 token V；动作专家处理带噪轨迹 → 预测接地动作 token A_pred。Dual-MoT 让 V 和 A_pred 在分支内互动； 右半边 = VLA 通路（左脑/语义）：多视角图像 + 指令 → Qwen3-VL-4B → 语义 token U；自车历史 → 状态 token E；动作专家 → 语义接地动作 token A_sem。Dual-MoT 让 U/E/A_sem 在分支内互动； 中间那根\u0026quot;桥\u0026quot; = CAB：A_pred 和 A_sem 双向 cross-attention + 门控残差注入。注意图上原始 VLM/VGM token 不会跨过桥——桥只连动作 token； 底部 = CIF + 解码器：把协调后的两条动作流拼接 → 小 Transformer → 平均 → 解码出最终轨迹。 🎯 架构图的核心读法：看\u0026quot;什么 token 能碰到什么 token\u0026quot;。Tri-MoT 里所有 token 都能碰到彼此；BrainWAM 里 VLM 和 VGM 的原始 token 永远不见面，只有它们的\u0026quot;动作投影\u0026quot;通过 CAB 桥打招呼。\n📥 输入 / 📤 输出（对齐上面流程图再读一遍） 输入：多视角图像（双通路共用）+ 导航指令（VLA 通路）+ 自车历史（VLA 通路）+ 噪声视频 latent（WAM 通路）+ 噪声轨迹（两条通路的动作专家共用）； 中间：两个\u0026quot;特化\u0026quot;的动作 token（A_pred/A_sem）经 CAB 协调、CIF 融合； 输出：一条可执行的未来轨迹 a。 🔍 图 4 怎么读？ 一张横向三段图，从左到右是训练时间线：\nStage 1（WAM 分支）：只训练\u0026quot;预测通路\u0026quot;。输入当前观测 → VGM（视频骨干）学未来帧生成，同时一个 rectified-flow action expert 学轨迹；两个目标联合（L_vid + L_pred^a）。产出：预测接地（prediction-grounded）的动作表示； Stage 2（VLA 分支）：只训练\u0026quot;语义通路\u0026quot;。输入多视角图像 + 导航指令 → VLM（Qwen3-VL-4B）提取语义，同样接一个 rectified-flow action expert。产出：语义接地（semantic-grounded）的动作表示； Stage 3（冻结 + 协调）：两条分支全部冻结，只训练 CAB + CIF + 最终动作解码器——让两个已经\u0026quot;成才\u0026quot;的通路在动作层面对话。 🔑 为什么 Stage 3 要冻结分支？论文在附录 D 里专门论证：冻结预训练分支能让第 3 阶段优化更稳定——如果继续微调大模型，协调模块的学习会和分支自身的表示漂移耦合，训练不稳定；冻结后，协调模块只需学\u0026quot;如何组合两个固定的、互补的表示\u0026quot;，问题干净得多。\n⚙️ 模块一：WAM Branch（右脑——预测通路） 3.1 架构 WAM 分支是\u0026quot;未来感知\u0026quot;半边，对应架构图（图 3）的左侧：\n视频骨干：Wan2.2-TI2V-5B（Wan 系列的 text-image-to-video 模型），负责对未来视频 latent 做去噪，产出视觉 token V（捕捉场景动态）； 轻量动作专家：rectified-flow 动作模型，对轨迹做去噪，产出预测接地动作 token A_pred； Dual-MoT 耦合：视频流和动作流通过共享自注意力互动，但各自保留专属的 feed-forward 网络——这是 \u0026ldquo;Dual-MoT\u0026rdquo;（双模态）的关键：注意力层共享让两类 token 能对话，FFN 专属保证各自建模能力不被污染。 输入和输出（论文 Eq.1）：\n$$\\hat{u}^v,\\ \\hat{u}^a_{\\text{pred}} = F_{\\text{WAM}}\\left(x^v_{t_v},\\ x^a_{t_a},\\ t_v,\\ t_a,\\ c_{\\text{obs}}\\right)$$ x^v / x^a：带噪声的视频 latent 和动作轨迹； t_v / t_a：各自独立的 rectified-flow 时间步（这个\u0026quot;解耦调度\u0026quot;是后面异步推理的关键）； c_obs：当前观测条件特征； 输出：预测的视频速度场 u^v 和动作速度场 u^a_pred。 3.2 Rectified-flow 训练 和 SimWAM 一样走 rectified flow：在干净数据 x0 和高斯噪声 ϵ 之间做线性插值\n$$x_t = (1-t)\\,x_0 + t\\,\\epsilon,\\quad \\epsilon \\sim \\mathcal{N}(0,I)$$WAM 分支把这个路径同时施加到视频 latent 和动作轨迹（但用独立的 t_v/t_a）：\n$$x^v_{t_v} = (1-t_v)x^v_0 + t_v\\epsilon^v,\\qquad x^a_{t_a} = (1-t_a)x^a_0 + t_a\\epsilon^a$$速度目标都是\u0026quot;噪声减干净\u0026quot;：u^v = ε^v − x^v_0、u^a = ε^a − x^a_0。两个回归损失（L1）+ 加权合成：\n$$\\mathcal{L}_{\\text{WAM}} = \\mathcal{L}_{\\text{vid}} + \\lambda_{\\text{pred}}^a\\, \\mathcal{L}_{\\text{pred}}^a$$为什么视频和动作用独立的 timestep？ 这是埋下伏笔的设计——允许视频流\u0026quot;早退\u0026quot;：预测上下文一旦形成就让视频流停，动作流继续去噪出轨迹（后面\u0026quot;异步推理\u0026quot;全靠它）。\n⚙️ 模块二：VLA Branch（左脑——语义通路） 3.3 架构 VLA 分支是\u0026quot;语义理解\u0026quot;半边，对应架构图（图 3）的右侧：\nVLM 骨干：Qwen3-VL-4B，把多视角图像和驾驶指令编码成语义 token U； 状态 token：自车历史（ego history）编码成 E； 轻量动作专家：rectified-flow 动作模型，处理带噪轨迹 x^a_{t_a}，产出语义接地动作 token A_sem； Dual-MoT：语义 token、状态 token、动作 token 通过共享自注意力耦合，引导动作去噪。 （Eq.7）VLA 分支只预测动作速度场：\n$$\\hat{u}^a_{\\text{sem}} = F_{\\text{VLA}}\\left(U,\\ E,\\ x^a_{t_a},\\ t_a\\right)$$3.4 Rectified-flow 训练 和 WAM 的轨迹部分同构，只是监督来自语义：\n$$\\mathcal{L}_{\\text{sem}}^a = \\mathbb{E}\\,\\|\\hat{u}^a_{\\text{sem}} - u^a\\|_2^2,\\qquad u^a = \\epsilon^a - x^a_0$$ 💡 两个分支的结构高度对称：都是\u0026quot;大骨干 + 轻量 rectified-flow 动作专家\u0026quot;，都用 Dual-MoT 在分支内部耦合。区别只在\u0026quot;老师\u0026quot;：WAM 的老师是未来视频（动态），VLA 的老师是语言+图像（语义）。这正是\u0026quot;功能特化\u0026quot;的体现——两套动作表示，来源完全不同。\n⚙️ 模块三：CAB + CIF——在大脑层面的协调 3.5 联合训练设置 第 3 阶段，两条分支冻结，只有三样东西可训：CAB、CIF、最终动作解码器。两条动作专家接收同一条带噪轨迹、同一个动作时间步（t_a 一致），这样两边的动作 token 处于相同噪声水平——CAB 交换消息才公平；视频分支保留自己的 t_v 提供预测上下文。\n3.6 Callosal Action Bridge（CAB）——模拟胼胝体 胼胝体是连接左右脑的\u0026quot;信息桥\u0026quot;。CAB 就是连接两条动作通路的桥——在动作 token 层面做双向跨流注意力，而不是混 raw token。\n在第 l 层，CAB 计算双向消息（Eq.10）：\n$$M_{\\text{pred} \\leftarrow \\text{sem}}^l = \\Psi_{\\text{cab}}^l(A_{\\text{pred}}^l, A_{\\text{sem}}^l),\\qquad M_{\\text{sem} \\leftarrow \\text{pred}}^l = \\Psi_{\\text{cab}}^l(A_{\\text{sem}}^l, A_{\\text{pred}}^l)$$其中 Ψ_cab(X,Y) 是用 X 做 query、Y 做 key/value 的 cross-attention。然后通过带门控的残差注入更新两条流（Eq.11）：\n$$\\tilde{A}_{\\text{pred}}^l = A_{\\text{pred}}^l + \\alpha_{\\text{pred}}^l M_{\\text{pred} \\leftarrow \\text{sem}}^l,\\qquad \\tilde{A}_{\\text{sem}}^l = A_{\\text{sem}}^l + \\alpha_{\\text{sem}}^l M_{\\text{sem} \\leftarrow \\text{pred}}^l$$ 门控 α = tanh(g)，初始化为 0——训练刚开始时两条流保持原样，随训练逐步学习\u0026quot;该传多少信息过去\u0026quot;； 好处：不打扰已经预训练好的动作表示，先让桥开着，再慢慢调节门，稳。 💡 CAB 和 Tri-MoT 的本质区别：Tri-MoT 是所有 token 无差别地互相看（VLM/VGM/action 全混一个池）；CAB 是只有动作 token 在桥的两头互相看，而各自的语义/视频原始 token 仍然留在各自分支内部。融合发生在\u0026quot;动作表示\u0026quot;这一层，而不是\u0026quot;原始模态表示\u0026quot;这一层。\n3.7 Cerebellar Intent Fusion（CIF）——模拟小脑 小脑负责把运动意图打磨成精细动作。CIF 就是把 CAB 协调后的两条动作流合并成最终意图再解码出轨迹：\n$$Z_{\\text{pred}}, Z_{\\text{sem}} = \\text{CIF}\\left(\\tilde{A}_{\\text{pred}}^L,\\ \\tilde{A}_{\\text{sem}}^L\\right),\\qquad Z = \\mathcal{M}(Z_{\\text{pred}}, Z_{\\text{sem}})$$ 先把两条流拼接，过一个小型 Transformer 模块； 再把输出逐元素平均（M 表示 mean）； 融合表示 Z 由动作解码器 D_fuse(Z, t_a) 解出动作速度场 u^a_fuse； 联合训练阶段只监督这一个融合输出（Eq.13）：L_fuse = E‖u^a_fuse − u^a‖²。 3.8 推理（Inference） 推理时：两条动作专家从同一条噪声轨迹出发，走完全相同的动作时间步 → CAB 协调中间表示 → CIF 融合 → 解码出最终轨迹。（完整架构图见上文\u0026quot;🧩 整体架构拆解\u0026quot;章节的图 3）\n🔍 逐图详解：三张\u0026quot;诊断图\u0026quot;读懂 BrainWAM 的动机 图 2（注意力诊断）——为什么 Tri-MoT 会输 已在上文展开：action token 对 VLM token 的注意力在绝大多数层碾压对 VGM token 的注意力，浅层尤甚 → 语义捷径压垮预测信号。\n图 6（附录图）——模态失衡的量化证据 论文附录 A 把\u0026quot;语义优势\u0026quot;从\u0026quot;统计规律\u0026quot;上升到\u0026quot;系统性现象\u0026quot;：几乎每一层、每一个注意力头上，action 对 VLM 的关注都系统性高于对 VGM 的关注。这把\u0026quot;注意力分配错配\u0026quot;的诊断坐实——它不是你调几个超参就能绕过去的偶发现象，而是 Tri-MoT 这个设计的内在毛病。\n图 5（定性对比）——四条场景见真章 论文挑的四类场景正好对应\u0026quot;语义 vs 预测\u0026quot;的分工：\n场景 考验什么 谁强 导航跟线 遵循路线指令，别选\u0026quot;局部合理但走错路\u0026quot;的分支 VLA（指令接地好） 红绿灯/前车刹车理解 联合读懂刹车灯 + 红灯，避免追尾 VLA 交互博弈 预判本车/行人/周围车的耦合行为 WAM 弯道轨迹可行性 只凭当前观测会误判未来运动 WAM VLA-only 在语义类场景（前两行）表现好但预测类场景（后两行）拉胯；WAM-only 正好相反。BrainWAM 靠动作层协调，四类都稳——这就是\u0026quot;互补性\u0026quot;最直观的证明。\n📊 实验结果：双榜 SOTA 5.1 主结果（NAVSIM v1，PDMS） 类别 方法 相机 激光 NC↑ DAC↑ TTC↑ C↑ EP↑ PDMS↑ Human — — — 100.0 100.0 100.0 99.9 87.5 94.8 传统E2E UniAD ✓ — 97.8 91.9 92.9 100.0 78.8 83.4 传统E2E DiffusionDrive ✓ ✓ 98.2 96.2 94.7 100.0 82.2 88.1 VLA AutoVLA ✓ — 98.4 95.6 98.0 99.9 81.9 89.1 VLA DriveVLA-W0 ✓ — 98.4 95.3 95.2 100.0 80.9 87.2 VLA ReCogDrive ✓ — 98.1 94.7 94.2 100.0 80.9 86.5 WM DrivingGPT ✓ — 98.9 90.7 94.9 95.6 79.7 82.4 WM Epona ✓ — 97.9 95.1 93.8 99.9 80.4 86.2 WAM DriveLaW ✓ — 99.0 97.1 96.7 100.0 81.3 89.1 WAM+VLA BrainWAM ✓ — 98.1 97.5 94.9 100.0 83.8 89.5 结论拆解：\n89.5 PDMS，v1 上超过所有 VLA 和世界模型系方法，比最强 WAM（DriveLaW 89.1）高 0.4，比最强 VLA（AutoVLA 89.1）高 0.4； 增益集中在 DAC（97.5，全场最高）和 EP（83.8，全场最高）——可行驶区域合规和前进进度明显提升，说明\u0026quot;语义+预测\u0026quot;双通路让轨迹既守规则又走得更远； 相机-only（无激光雷达），参数规模、公平性对标同梯队。 5.2 主结果（NAVSIM v2，EPDMS） 方法 NC DAC DDC TLC EP TTC LK HC EC EPDMS TransFuser 96.9 89.9 97.8 99.7 87.1 95.4 92.7 98.3 87.2 76.7 DriveSuprim 97.5 96.5 99.4 99.6 88.4 96.6 95.5 98.3 77.0 83.1 DriveVLA-W0 98.5 99.1 98.0 99.7 86.4 98.1 93.2 97.9 58.9 86.1 DriveDreamer-Policy 98.4 97.1 99.5 99.9 87.9 97.7 97.6 98.3 79.4 88.7 BrainWAM 98.1 97.5 99.6 99.9 88.2 97.4 97.6 98.4 85.8 89.6 89.6 EPDMS，v2 也 SOTA；提升主要来自 EP（88.2）和 EC（85.8）——效率与舒适，而规则合规指标（DDC/TLC）已接近饱和； 说明动作空间协调在更全面的 v2 协议（+DDC/TLC/LK/HC/EC）下依然有效。 5.3 消融 1：分支互补性 + 融合位置（表 3） 方法 NC↑ DAC↑ TTC↑ C↑ EP↑ PDMS↑ VLA-only 97.7 94.9 93.3 100.0 80.7 86.1 WAM-only 98.0 96.4 94.4 100.0 82.6 88.1 Tri-MoT（raw token 融合） 98.3 96.2 94.7 100.0 81.7 87.8 BrainWAM（动作层协调） 98.1 97.5 94.9 100.0 83.8 89.5 三个结论：\nWAM-only（88.1）远超 VLA-only（86.1）——在 NAVSIM 上，预测动态先验比纯语义先验更有价值； Tri-MoT（87.8）甚至低于 WAM-only（88.1）——直接把 VLM+VGM+action token 混进共享注意力，语义短路不仅没帮忙反而拖累预测——这印证了图 2 的注意力失衡诊断； BrainWAM（89.5）同时超过两个单分支和 Tri-MoT——差距不是靠加参数量（论文明说两者参数量相当），而是靠\u0026quot;在动作层协调\u0026quot;这个机制本身。 5.4 消融 2：CAB 和 CIF 各自的贡献（表 4） CAB CIF NC DAC TTC C EP PDMS ✓ — 98.1 96.8 94.8 100.0 83.0 88.7 — ✓ 98.1 96.7 94.7 100.0 82.9 88.5 ✓ ✓ 98.1 97.5 94.9 100.0 83.8 89.5 CAB 单独用 88.7、CIF 单独用 88.5，合体 89.5（+0.8/+1.0）； 增益集中在 DAC/EP，NC/TTC 稳定——说明 CAB 负责\u0026quot;中途交换动作消息\u0026quot;，CIF 负责\u0026quot;收尾融合最终表示\u0026quot;，两者互补不重复； 附录 B/C 还确认：两个 CAB 块够用、两个 CIF Transformer 层够用、Transformer 融合优于 MLP/拼接——工程上很克制。 5.5 消融 3：异步视频去噪的时延-精度权衡（表 5） 视频去噪步数 时延↓ PDMS↑ EPDMS↑ 0 382 ms 79.3 75.8 1 475 ms 89.3 89.4 2 565 ms 89.5 89.6 3 644 ms 89.4 89.6 视频去噪 = 0 步时断崖式跌到 79.3：预测上下文没了，规划质量崩盘——证明\u0026quot;视频动态对规划是不可或缺的\u0026quot;（不是可有可无的装饰）； 1 步视频去噪就回到 89.3：视频流\u0026quot;早退\u0026quot;只损失 0.2 PDMS； 从 1 步到 3 步，性能在 89.3–89.5 之间，时延从 475ms 涨到 644ms——1 步视频已经拿到绝大部分预测红利，这就是异步调度（解耦的 t_v/t_a）的工程价值。 🎯 异步视频去噪的设计精髓：视频和动作各自拥有独立的 rectified-flow 时间步，所以视频流可以在\u0026quot;预测上下文刚形成\u0026quot;时就停，把特征缓存给动作流用，动作流继续去噪出轨迹——用最小的视频开销拿到最多的预测增益。\n⚖️ 与博客系列的精读横向对比 把 BrainWAM 放进博客已有的知识链里看位置。它的独特点是：别人的 WAM 是\u0026quot;单通路\u0026quot;（视频专家 + 动作专家），BrainWAM 是双通路 WAM（VLA 语义 + WAM 预测，动作层协调）。\n与 SimWAM / Metis 的对比（同期\u0026quot;WAM 应该怎么设计\u0026quot;的三种答案） 维度 SimWAM Metis BrainWAM 核心机制 训练期视频监督 + 隔离注意力掩码（动作不看未来帧） MoT 双专家 + 非对称掩码（动作只看当前帧，未来视频可看动作） 双通路（VLA+WAM）+ 动作空间协调（CAB/CIF） 视频分支的去留 训练完删除 训练完跳过 保留但异步早退（解耦 t_v/t_a） 融合位置 共享注意力（训练期） 共享注意力（训练期） 动作 token 层（CAB 桥） RL 环节 ✅ Flow-GRPO ❌ 无 ❌ 无（纯两阶段蒸馏+协调） 语义/语言先验 ❌ 无 ❌ 无 ✅ VLM 语义通路（Qwen3-VL-4B） NAVSIM 成绩 91.5 PDMS (v1) navtest/navhard SOTA 89.5 PDMS (v1) / 89.6 EPDMS (v2) 关键差异：SimWAM/Metis 都是\u0026quot;视频+动作\u0026quot;的双专家（WAM 家族内部的设计之争），BrainWAM 是\u0026quot;VLA+WAM\u0026quot;双范式——它把\u0026quot;语义推理\u0026quot;也当成一条平级的通路接进来。从概念上，BrainWAM 比 SimWAM/Metis 多覆盖了 VLA 那半边。\n与 DriveVLA-W0 / ReCogDrive 的对比（VLA 家族） 维度 DriveVLA-W0 ReCogDrive BrainWAM 语义来源 Emu3-8B / Qwen2.5-VL-7B Qwen2.5-VL + 扩散规划器 Qwen3-VL-4B（作为一条通路） 世界模型 显式未来图像预测（稠密监督） 无 WAM 预测通路（Wan2.2-TI2V-5B） 融合哲学 同一 VLA 骨干联合预测 VLM 认知表征 → 扩散规划器 语义/预测分离，动作层协调 定位 VLA 系（用世界模型放大数据） VLA 系（DiffGRPO） VLA+WAM 双范式融合 与 DriveWAM（论文里 WAM 的直接参照）对比 维度 DriveWAM BrainWAM 通路数 单条（视频+动作） 双条（语义+预测） 语义接地 弱 VLM 显式语义通路 融合层 视频 latent 作为动作条件 动作 token 层双向桥（CAB） 视频推理 全量生成未来帧 异步早退，1 步视频即可 一张图看清 BrainWAM 在知识链上的位置 传统 E2E（UniAD/VAD，模仿学习）往下分出三条范式线：\nVLA 范式：ReCogDrive、DriveVLA-W0（语义/语言先验驱动）； WM 范式：GAIA-1、DriveDreamer、GenAD（纯未来预测，不直接出动作）； WAM 范式：DriveWAM、SimWAM、Metis（视频预测 + 动作联合建模）。 BrainWAM 站在第 1 条和第 3 条线的交叉点上：把 VLA 的语义通路（第 1 支）和 WAM 的预测通路（第 3 支）同时接入，在动作层协调（\u0026ldquo;语义通路 × 预测通路\u0026rdquo;）。WM 范式则作为 WAM 的\u0026quot;底座\u0026quot;存在于它的预测分支里。\nBrainWAM 是这个知识链上的\u0026quot;合流点\u0026quot;：它把 VLA 的语义先验（ReCogDrive/DriveVLA-W0 那支）和 WAM 的预测动态（SimWAM/Metis/DriveWAM 那支）同时接入，并且证明\u0026quot;直接拼会翻车，动作层协调才行\u0026quot;。\n⚠️ 优势与局限 ✅ 优势 诊断清晰：先给出 Tri-MoT 失败的可量化机制（图 2 注意力失衡），再对症下药——不是盲试架构； 脑科学映射有工程抓手：CAB/CIF 不是装饰，消融证明两者各司其职、合体增益明确（+0.8/+1.0）； 冻结分支保稳定：Stage 3 冻结两大骨干，协调模块学习目标干净，训练稳定（附录 D）； 异步推理省时延：解耦 t_v/t_a，1 步视频去噪拿到 99.8% 的预测红利，时延从 644ms 降到 475ms； 双榜 SOTA：v1 89.5 PDMS、v2 89.6 EPDMS，超过所有 VLA-only 和 WAM-only。 ❌ 局限 绝对分数不是最强：NAVSIM v1 的 89.5 低于 SimWAM 的 91.5（SimWAM 有 Flow-GRPO RL 加持），说明纯两阶段蒸馏+协调的天花板低于\u0026quot;蒸馏+RL\u0026quot;； 没有 RL 环节：轨迹质量依赖两个分支的预训练先验，没有像 SimWAM 那样用奖励直接优化驾驶质量； 非反应式评估：NAVSIM 的 PDM/EPDMS 基于非反应式仿真，真实闭环表现（Bench2Drive 等）未验证； 参数量/时延仍是双大模型：VLM(4B) + VGM(5B) 两套骨干，475ms 的推理时延在\u0026quot;端到端上车\u0026quot;语境下仍偏重，需要工程瘦身； CAB/CIF 的\u0026quot;动作空间\u0026quot;选择：为什么动作表示是融合的正确层级、而不是更高阶意图，论文给出了实证（表 3）但机制解释仍偏直觉。 📝 个人思考 这是\u0026quot;多模态融合应该发生在哪一层\u0026quot;的一次教科书级回答。BrainWAM 的贡献分两层：第一层是诊断——它用注意力可视化证明 Tri-MoT 失败不是\u0026quot;融合不够\u0026quot;，而是\u0026quot;融合错了层\u0026quot;（raw token 空间里易学模态碾压难学模态）；第二层是处方——把融合挪到动作表示层，用门控桥（CAB）和协调器（CIF）实现\u0026quot;特化 + 协调\u0026quot;。\n三个让我眼前一亮的点：\n\u0026ldquo;语义捷径\u0026quot;这个概念很有普适性。任何多模态联合训练都会遇到\u0026quot;好学的模态抢注意力\u0026quot;的问题（语言模型里早就观察到文本压过视觉）。BrainWAM 把这个问题搬到\u0026quot;语义 vs 预测视频\u0026quot;上，并给出一个可操作的规避方案——在更抽象的、任务相关的表示层（动作）融合。这个原则可以迁移到任何\u0026quot;强先验 × 弱信号\u0026quot;的多模态组合。\n\u0026ldquo;功能特化\u0026quot;比\u0026quot;统一大杂烩\u0026quot;更接近大脑，也更接近工程现实。SimWAM/Metis 用掩码强制解耦，BrainWAM 用双通路物理分离 + 动作层桥接——殊途同归，都指向同一个结论：不要把所有信号倒进一个锅里。这跟 MoE（Mixture-of-Experts）的哲学同源。\n冻结 + 只训协调模块是高效的\u0026quot;联邦式\u0026quot;微调。第 3 阶段把两个预训练大模型当\u0026quot;固定的特征工厂\u0026rdquo;，只训练轻量协调器——这和 LoRA、adapter 的思路一致，但结构上更符合\u0026quot;特化系统协同\u0026quot;的隐喻。如果未来 VLM/VGM 各自升级，协调器不用重训。\n下一步最值得关注：①给 BrainWAM 加一个 RL 环节（像 SimWAM 的 Flow-GRPO），大概率能再上一个台阶——毕竟它的双通路表示更丰富，RL 的探索空间更大；②把异步视频早退的调度用到极致（比如 0.5 步视频），看时延能不能压到纯 planner 水平；③Bench2Drive 反应式闭环验证——这是所有 NAVSIM SOTA 的最终考卷。\n关联阅读：这篇和 SimWAM 精读（单通路 WAM + Flow-GRPO）、Metis 精读（MoT 双专家 + 非对称掩码）、ReCogDrive 精读（DiffGRPO 强化认知）、DriveVLA-W0 精读（世界模型放大数据）串起来读，正好构成\u0026quot;VLA 语义 → WAM 预测 → 双通路协调\u0026quot;的完整图谱：ReCogDrive/DriveVLA-W0 代表 VLA 那支，SimWAM/Metis 代表 WAM 那支，BrainWAM 是第一篇把两支在动作空间拧成一个系统的 WAM。\n📖 论文精读系列。BrainWAM（arXiv:2608.12854，中科院自动化所 × 理想汽车）是\u0026quot;VLA + WAM 双通路在动作层协调\u0026quot;的代表作，与 SimWAM（单通路 WAM + Flow-GRPO，arXiv:2608.07468）对照阅读，能看清 2026 年 WAM 设计的两大方向：单通路做精 vs 双通路融合。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/brainwam%E7%B2%BE%E8%AF%BB/","summary":"BrainWAM 用\u0026rsquo;大脑分工\u0026rsquo;的思路回答一个根本问题：VLA（语义推理）和 WAM（预测动态）到底该怎么结合？它先诊断出 Tri-MoT 朴素融合的致命伤——语义 token 抢占注意力、压垮预测信号；再受左右脑半球经胼胝体通信、小脑协调运动意图的启发，把语义和预测拆成两条特化通路，各自产出\u0026rsquo;面向动作\u0026rsquo;的表示，最后在紧凑的动作空间里用 CAB（胼胝体动作桥）双向交换、CIF（小脑意图融合）协调解码。NAVSIM v1 拿到 89.5 PDMS、v2 拿到 89.6 EPDMS，双双超过 VLA-only、WAM-only 和 Tri-MoT。","title":"论文精读｜BrainWAM：大脑式'动作空间协调'——把 VLA 语义先验和 WAM 预测动态拧成一股绳"},{"content":"📄 论文信息 标题：Metis: A Generalizable and Efficient World-Action Model for Autonomous Driving and Urban Navigation 作者机构：复旦大学 × 上海创新研究院 × 香港大学 × 同济大学 × 理想汽车（Li Auto） × 华中科技大学 × 帝国理工 × 萨里大学（Jingyu Li, Zhe Liu, Dongnan Hu, Junjie Wu, Wenxiao Wu, Li Zhang 等，通讯作者 张犁） arXiv：2606.15869 代码：github.com/LogosRoboticsGroup/Metis 一句话总结：把视频生成和动作预测拆成两个独立的 Transformer 专家（Mixture-of-Transformers），用一张非对称注意力掩码让动作只看向当前观测、未来视频却能看向动作——训练时联合优化学到世界动态，推理时彻底跳过视频生成只跑动作分支。在 NAVSIM-v2（navhard 32.2 / navtest 89.5 EPDMS） 和 CityWalker 上都做到 SOTA，纯动作推理比带视频推理快 8 倍，并零样本部署到四足机器人。 🎯 一句话记忆点：Metis = \u0026ldquo;动作只看现在，视频看着动作\u0026rdquo;——非对称掩码让世界模型在训练期\u0026rsquo;喂\u0026rsquo;动作专家，推理期彻底退场，只留下一个又快又准的 planner。\n🔗 姊妹篇：这篇与 SimWAM 精读 同期探索了\u0026quot;视频生成与动作预测解耦\u0026quot;的 WAM 设计。Metis 用非对称掩码（视频可看动作），SimWAM 用隔离掩码（两者互不可见）；Metis 无 RL，SimWAM 有 GRPO。 强烈建议两篇对照读。\n🤔 要解决什么问题？ 背景：World-Action Model（WAM）的两条路线与两个硬伤 世界动作模型（WAM）把\u0026quot;预测未来观测\u0026quot;和\u0026quot;生成动作\u0026quot;统一进一个框架，用未来动态建模来增强动作规划。现有 WAM 大致分两条路线：\n范式 代表思路 致命问题 VLA-based WAM（图1a） 在 VLM 上追加 token 做自回归未来观测生成 推理时必须先生成未来观测，计算延迟不可避免 Video-gen-based WAM（图1b） 视频生成模型里共享表示，联合预测未来视频+动作 紧密耦合：高维视觉表示干扰低维动作空间 → 代表性错配、泛化下降 Metis（图1c） 非对称掩码解耦视频生成与动作推理 — 核心痛点一：高延迟——未来观测生成进了实时链路 VLA-based WAM 的典型流程是\u0026quot;先想象未来、再规划动作\u0026quot;：推理时先自回归生成未来帧，再把未来帧作为条件预测轨迹。每一步决策都要走一次昂贵的自回归生成，计算延迟不可接受。视频生成系方法也类似——要么走完整多步去噪，要么递归逆动力学，都逃不掉未来帧的高维采样。\n核心痛点二：表征错配——视频噪声污染动作空间 视频生成系 WAM 把动作和视频在同一个模型、同一套表示里联合建模。问题在于：未来视频预测输出的高维视觉表示（纹理、光照、语义）和低维动作空间（几个 waypoint）分布差异巨大。联合建模时，生成过程的高维噪声会被注入动作空间，干扰动作预测的精度与稳定性——这就是论文反复强调的 \u0026ldquo;distributional mismatch\u0026rdquo;。\n核心矛盾：既要让世界模型给动作\u0026quot;喂\u0026quot;动态先验，又不能让世界模型的生成噪声污染动作空间——Metis 用一张非对称注意力掩码在表征层面解决这个问题。\n💡 核心思路：MoT 双专家 + 非对称注意力掩码 Metis 的解法分三步：\nMixture-of-Transformers（MoT）架构：把视频生成和动作预测拆成两个独立的 Transformer 专家，各自保留自身的分布特性； 非对称注意力掩码：动作 token 只能看向当前观测；未来视频 token 可以同时看向当前观测 + 所有未来动作 token——信息流是单向的； 联合训练、解耦推理：训练时联合优化两个专家，推理时完全跳过视频生成，只跑动作分支。 先看宏观数据流（训练期）：\n1 2 3 . . . 输 · · · → 双 · · 联 入 专 合 编 当 指 自 以 家 V A 优 码 前 令 车 上 分 i c 化 帧 状 支 d 信 t 信 ： l 态 t （ e 息 i 息 L o 非 o 流 o 流 → k 对 ： n ： = → e 称 G 未 动 → E n 注 e 来 E 作 L V g 意 n 视 x _ i T o 先 力 e 频 p t a d e 掩 r e o c e x E c 码 a t r k t o t n r ） t o t e i c o i k （ n o V E o s o e D n A n d s n n i 只 E c e - T 看 + o r a E 可 ， 「 → d t x 看 1 当 λ e t p 「 B 前 L l r e e 当 ） 观 _ a ( n r 前 ： 测 v t T d t 观 预 i e 5 （ 测 测 t d n ) 语 W 轨 o e t 言 a + 迹 k o n 速 e t e 2 未 度 n o m . 来 场 」 k b 2 动 e e - 作 n d 5 s d B t （ i ） o 当 n ： k 前 g 生 e 观 成 n 测 未 」 ） 来 （ 帧 反 向 l 不 a 可 t 见 e ） n t 推理期数据流（极简）：\n当 （ 前 指 帧 令 视 频 → l 生 成 V + 分 i 支 d 自 被 e 车 完 o 状 全 态 旁 V 也 路 A 作 ， E 为 无 条 未 → 件 来 注 帧 l 入 生 a 成 t A ） e c n t t i o → n A E c x t p i e o r n t ； E x p e r t （ 1 0 步 去 噪 ） → 动 作 c h u n k ⚙️ 模块一：Mixture-of-Transformers（MoT）架构 1.1 问题形式化 Metis 用解耦推理范式。设 z(o_t, l) 为视频 backbone 在当前观测和上下文下产生的 latent 表示，动作预测建模为：\n$$a_{t:t+H} \\sim p_\\theta(a_{t:t+H} \\mid z(o_t, l))$$未来观测只在训练期用，推理期 z(o_t, l) 只通过 backbone 的一次前向得到，从而实现实时规划。对比想象-行动范式：\n范式 推理期计算 训练-推理一致性 联合去噪生成 (a,v) 高维视频采样 + 递归去噪 一致 逆动力学：先生成未来帧再反推动作 先生成 v 再解出 a 一致 Metis 解耦推理 只跑当前帧 backbone 一次 一致（训练时动作就不看未来帧） 1.2 两个专家各司其职 专家 实现 职责 备注 Video Generation Expert（VGE） Wan2.2-5B 初始化（含 video VAE + T5 文本编码器） 继承大规模视频模型的物理先验，捕捉时空动态 只在训练期活跃 Action Expert（AE） Diffusion Transformer，镜像 VGE 的层深、hidden=1024 低维轨迹预测 唯一部署的分支 关键设计：专家间通过共享 latent 空间交互，但各自保留分布结构。 token 组织方式：\n三类 token：当前观测 latent、未来观测 noisy token、动作 noisy token； 所有 token 先通过 cross-attention 看向语言 embedding； 通过专家专属投影进入共享 latent 空间，交互受结构化注意力机制约束； 每个专家用自己的 FFN 和输出头做任务特定预测。 这种\u0026quot;token 级交互\u0026quot;实现了受控的信息交换，不直接混合异构任务空间的表示——这正是避免表征错配的关键。\n🔑 模块二：非对称注意力掩码（核心创新） 2.1 掩码规则 这是 Metis 区别于所有前作的最核心设计。它不像之前的方法在时间轴/分辨率上做手脚（减预测步数、降未来帧分辨率、或干脆不生成未来帧——这些要么牺牲性能要么牺牲信息），而是在表征层面用一张掩码显式管理两个专家之间的信息流：\n单向可见性约束：\n动作 token → 只能看向当前观测 token（规划 grounded 在当前上下文）； 未来视频 token → 可以看向当前观测 + 所有未来动作 token。 信息流是单向的：未来视频可以\u0026quot;看动作\u0026quot;来生成与世界演化一致的画面；但动作永远看不到未来视频。\n2.2 为什么这样设计？两个方向的收益 ① 训练期（视频→动作的知识注入）：由于 VGE 能看到动作 token，它生成未来视频时会以具体轨迹意图为条件——预测\u0026quot;如果我这么开，世界会怎么演化\u0026quot;。而两个专家在联合优化中共享表示空间，VGE 的预测能力就隐式参与了动作精炼过程。这正是\u0026quot;世界模型给动作喂动态先验\u0026quot;的机制：AE 学到的是\u0026quot;被未来动态约束过的轨迹\u0026quot;。\n② 推理期（动作→不依赖未来）：动作 token 从一开始就只看当前帧，所以推理时视频生成分支可以完全旁路，训练-推理严格一致——没有 train/inference mismatch，也没有未来帧生成噪声注入动作空间。\n🧠 直觉类比：把视频专家想成一位\u0026quot;看过无数盘棋的教练\u0026quot;。训练时，教练（视频）能看见你（动作）打算怎么走，于是告诉你\u0026quot;你这一步会导致什么局面\u0026quot;——你在这样的反馈下学会走棋。但比赛时（推理），教练不能上场，你只看当前棋盘直接落子。因为你训练时就从没依赖过教练上场，所以比赛时一点都不慌。\n2.3 与\u0026quot;联合注意力\u0026quot;\u0026ldquo;隔离注意力\u0026quot;的对比（Table 4 / Table 8） 论文做了两组注意力变体对照：\n变体 信息流 navtest PDMS navhard EPDMS 说明 Joint（联合） 未来视频和动作 token 完全耦合 87.1 28.0 VLA/video-WAM 常规做法；推理时生成噪声注入动作空间，DAC/EP 落后 Isolated（隔离） 两专家完全解耦，互不可见 88.0 29.4 动作完全用不上当前观测的视觉上下文，总分偏低 Metis Asymmetric 动作看当前，视频看动作 88.8 31.6 全指标最佳 两个关键结论：\nvs Joint：非对称掩码大幅领先（navhard +3.6 EPDMS）。附录指出 Joint 的问题——推理时动作空间被生成过程噪声严重注入，干扰动作预测的完整性； vs Isolated：非对称掩码仍胜出。因为 Isolated 把任务完全切开，动作分支利用不上当前观测提供的视觉上下文，也失去了训练期\u0026quot;通过生成专家隐式优化动作\u0026quot;的杠杆。虽然 DAC/EP 与 Metis 相当，但总分偏低——世界理解的精妙和推理时无生成噪声，两者都要。 🔑 Metis 与 SimWAM 的第一个关键区别：SimWAM 用的是 Isolated（动作和未来视频互不可见，视频纯当训练信号），Metis 用的是 Asymmetric（未来视频能看动作）。Metis 的消融显示 Asymmetric 优于 Isolated（navhard 31.6 vs 29.4）——因为让视频\u0026quot;看到动作\u0026quot;能学到\u0026quot;动作→世界演化\u0026quot;的因果，这是 SimWAM 隔离设计牺牲掉的。\n⚙️ 模块三：Flow Matching 联合训练目标 Metis 用 flow matching 框架统一优化动作预测和未来视频生成，和 SimWAM 同源（都是 rectified flow）。\n对动作 token，监督当前上下文条件下的速度场预测：\n$$\\mathcal{L}_{\\text{act}} = \\mathbb{E}\\left[ \\left\\| u_\\theta(a^{(s)}_{t:t+H}, s \\mid o_t, l) - \\dot{a}^{(s)}_{t:t+H} \\right\\|_2^2 \\right]$$其中 $s \\in [0,1]$ 是 flow 时间，$a^{(s)}_{t:t+H} = (1-s)\\epsilon + s\\,a_{t:t+H}$，速度场 $\\dot{a}_{t:t+H} = a_{t:t+H} - \\epsilon$。\n对未来视频 token，监督以当前上下文和动作 token 为条件的速度场：\n$$\\mathcal{L}_{\\text{video}} = \\mathbb{E}\\left[ \\left\\| u_\\phi(z^{(s)}_{t+1:t+H}, s \\mid o_t, \\hat{a}_{t:t+H}, l) - \\dot{z}^{(s)}_{t+1:t+H} \\right\\|_2^2 \\right]$$其中 $\\hat{a}_{t:t+H}$ 是预测的未来动作序列——注意这里正是非对称掩码的公式体现：视频的条件包含动作，动作的条件不包含视频。\n总目标：\n$$\\mathcal{L} = \\mathcal{L}_{\\text{action}} + \\lambda\\, \\mathcal{L}_{\\text{video}}, \\quad \\lambda = 1$$ 📊 实验结果 3.1 NAVSIM-v2 navhard（安全关键场景闭环节点） Metis 在 Stage 1（244 个真实安全场景）和 Stage 2（4164 个 3DGS 合成场景）都做到最佳：\n方法 类型 EPDMS↑ PDM-Closed（规划器，真值输入） 规则基准 51.3 LTF 传统 E2E 24.4 DiffusionDrive 传统 E2E 27.5 ReCogDrive（带 RL） VLA 25.7 SGDrive VLA 25.5 Metis WAM 32.2 关键结论：\n无地图监督下 DAC/DDC 大涨：比之前方法在 Stage 2 的 DAC 至少高 7.9 分、DDC 至少高 2.5 分——说明世界建模提供了\u0026quot;环境约束性驾驶行为\u0026quot;的更强归纳偏置； VLA 系方法依赖场景理解和高层推理，在动作生成时对这类约束的强制力不足。 3.2 NAVSIM-v2 navtest（多样化泛化场景） 方法 传感器 EPDMS↑ Human Agent — 90.3 ReCogDrive*（RL） 1×C 83.6 SGDrive 1×C 86.2 Vega 1×C 86.9 DriveFine*（RL） 1×C 87.1 Epona 1×C 85.1 DriveVLA-W0† 1×C 86.1 Metis 1×C 89.5 Metis‡（best-of-6） 1×C 90.3 关键结论：\n不用多阶段训练、不用 RL、不用辅助数据集，就在公平对比下拿到 SOTA，比之前 VLA 系方法至少高 2.4 分； 对比在固定时间戳预测未来状态的方法（Vega、SGDrive），Metis 在 EP（进度）、LK（车道保持）、EC（扩展舒适） 上显著领先——训练期内化了物理 grounded 的动态，动作专家输出更守规则、更舒适。 3.3 CityWalker（城市导航跨域验证） 方法 微调 平均 L2(m)↓ 平均 MAOE(°)↓ ABot-N0*（大规模预训练） 预训练 — 7.6 GNM 微调 0.74 12.1 ViNT 微调 0.70 12.6 NoMaD 微调 0.74 12.1 Metis 零样本 0.64 9.8 Metis（微调后） 微调 — — 在 L2 和 MAOE 上都领先所有微调方法——零样本还打赢了微调基线； 与大规模预训练导航模型 ABot-N0 比，Metis 在 Turn、Detour、Crowd 等复杂场景 MAOE 更低：\u0026ldquo;把 latent 世界动态与动作规划结合\u0026quot;比\u0026quot;在语言空间里做逻辑推理\u0026quot;更能给出细粒度运动引导。 3.4 推理时延（Table 7）：纯动作推理快 8 倍 方法 PDMS EPDMS 推理时延(s) Epona 86.2 85.1 0.32 PWM 87.3 — 0.57 PWM（带视频） 88.1 — 0.83 Metis（带视频） 89.0 89.5 1.38 Metis（纯动作） 88.9 89.2 0.17 结论：对比\u0026quot;生成未来视频\u0026quot;的变体，纯动作推理拿到最高 8× 加速（1.38s → 0.17s），性能几乎不损（EPDMS 89.5→89.2）——这就是\u0026quot;训练期世界建模、推理期不生成\u0026quot;的红利。\n3.5 消融实验 去噪步数（Table 5）：1→10 步，navtest EPDMS 87.2→89.5，navhard 30.4→32.2。步数越多越好，挑战场景提升更明显（帮助复杂动态下的轨迹精修）。但注意：纯动作推理用 2 步就能到 89.2（配 0.17s 时延），生产部署时按需选步数。\nVGE/AE 搭配（Table 6）：\nVGE AE navtest PDMS navhard EPDMS Wan2.1-1.3B ~0.24B 88.5 28.8 Wan2.2-14B ~0.21B 88.2 31.2 Wan2.2-14B ~1.04B 89.1 32.2 更强 VGE 在 navhard 上更稳（低容量生成先验在复杂场景露怯）； 固定 VGE 时扩大 AE 规模进一步提升全指标泛化——策略头与生成骨干一起 scale。 动作专家规模（Table 10）：0.21B→1.04B，EPDMS 31.2→32.2，navhard S2 提升更明显。\n联合训练消融（Table 11）：w/o co-train PDMS 87.4 vs w/ co-train 89.1——联合训练带来清晰增益，验证非对称掩码确实让动作专家在训练期学到了世界动态。\n分辨率（Table 4）：640×768 相比 320×384，navtest EPDMS 88.8→89.5、navhard 31.6→32.2——高分辨率提供更丰富的空间/几何线索。\n🎮 Real-World 部署：四足机器人零样本导航 论文在 Unitree Go2 四足机器人上做了真实世界部署，用 [73] 提供的 PD 控制器输出速度指令，零样本（不做任务特定训练）测试室内白天和室外夜晚场景：\n在障碍物规避的闭环测试中，四足机器人规划出合理的绕行路径，室内白天、室外夜晚都可用； 这是\u0026quot;训练期世界建模 + 推理期纯动作\u0026quot;范式跨具身、跨任务的泛化证明——从车到四足，从 NAVSIM 到真实街道。 🖼️ 生成专家可视化 Metis 的 Video Generation Expert 用 flow matching 生成未来帧。附录 Fig.8 展示：\n相对静态场景生成质量很高； 复杂动态交叉口场景下，远处背景车辆的细节可能丢失——但作者指出这不影响短期驾驶动作预测，因为动作分支根本不依赖生成的未来帧。 ⚖️ Metis vs SimWAM：同期 WAM 解耦设计的两种取向 这两篇是同一时期（2026年6-8月）探索\u0026quot;解耦视频生成与动作预测\u0026quot;的姊妹工作，思路高度同源，但有几处关键差异值得点透：\n维度 Metis（arXiv:2606.15869） SimWAM（arXiv:2608.07468） 团队 复旦/港大/同济/理想/华科/帝国理工/萨里 华科（白翔团队）× 东风研发 视频-动作掩码 Asymmetric：动作看当前，未来视频看动作 Isolated：未来视频与动作互不可见 掩码哲学 让视频\u0026quot;看到动作\u0026quot;学到\u0026quot;动作→世界演化\u0026quot;因果 视频纯当训练信号，隔离最彻底 RL 强化 ❌ 无 RL（纯模仿 + 世界建模） ✅ Flow ODE→SDE + GRPO 优化组合驾驶奖励 基准 NAVSIM-v2（EPDMS 32.2/89.5）+ CityWalker NAVSIM-v1（PDMS 91.5）+ nuScenes 零样本 部署验证 Unitree Go2 四足机器人 real-world 论文补充材料提及 real-robot 跨任务 AD + 城市导航（UN）双任务 主攻 AD backbone VGE 用 Wan2.2-5B；AE 镜像层深 1B，总 6B VGE 用 Wan2.2-5B；AE hidden=1024（1.02B） 为什么 Metis 不做 RL？ 论文在实验里反复强调\u0026rdquo;notably without relying on multi-stage training, reinforcement learning, or auxiliary datasets\u0026quot;——它把\u0026quot;世界建模内化动态\u0026quot;当作不依赖 RL 的 SOTA 证明。而 SimWAM 则在同样的解耦地基上叠加了 GRPO（直接继承 Flow-GRPO 的 ODE→SDE 转换），把分数进一步推高。两条路线互为补充：Metis 证明\u0026quot;纯解耦世界建模\u0026quot;本身够强，SimWAM 证明\u0026quot;解耦 + RL\u0026quot;还能更强。\n💡 对读者的启示：如果你的目标是\u0026quot;理解 WAM 解耦的本质\u0026rdquo;，Metis 更纯粹（一张掩码说清所有）；如果你关注\u0026quot;如何在 NAVSIM 上拿最高分\u0026quot;，SimWAM 的 RL 环节更关键。两者共享的底层洞察是同一句：世界模型的价值在训练期，不在推理期。\n🔧 实现细节汇总 设置 值 VGE Wan2.2-5B + video VAE + T5 编码器 AE Diffusion Transformer，镜像 VGE 层深，hidden=1024，约 1B 总参数量 6B 输入 仅前视相机，640×768（NAVSIM-v2）/ 384×384（CityWalker） 轨迹 NAVSIM-v2：8 waypoint × 4s @0.5s 间隔（x,y,θ）；CityWalker：5 waypoint（x,y） 视频-动作对齐 1:1 时间比 训练 双 flow matching 联合；NAVSIM 60 epochs、CityWalker 30 epochs；batch 64 优化器 AdamW（lr=1e-4, wd=0.01），cosine 衰减，混合精度，梯度裁剪 1.0 推理 10 步去噪（纯动作部署可用 2 步），CFG=1.0 硬件 8×NVIDIA H200（140GB） ⚠️ 优势与局限 ✅ 优势 训练-推理解耦彻底：非对称掩码保证动作从训练到推理都不依赖未来帧，无 mismatch、无生成噪声污染动作空间； 8× 推理加速：纯动作推理 0.17s vs 带视频 1.38s，性能几乎无损——实时部署友好； 双任务泛化：NAVSIM-v2（AD）+ CityWalker（UN）都 SOTA，还零样本迁移到四足机器人； 无 RL 依赖：证明\u0026quot;世界建模内化动态\u0026quot;本身就能到 SOTA，不靠多阶段训练/辅助数据/强化； 代码开源：LogosRoboticsGroup/Metis，可复现。 ❌ 局限 无 RL：相比 SimWAM 的 GRPO 环节，Metis 停留在模仿+世界建模，驾驶质量优化天花板受专家数据限制； 重度依赖预训练 VGE：推理虽不跑视频，但训练期 5B 视频模型的训练计算开销仍然巨大（附录 G 明说）； VAE 降采样比是效率-质量权衡点：降采样比显著影响训练效率和表示质量（附录 G）； 单目局限：长时程规划中仅靠单目会偶发轻微偏差（附录 E 的 Figure 10），多视角世界建模留作未来工作； 极端 corner case 待验证：世界建模本质依赖数据，极端场景可靠性仍需完整验证。 📝 个人思考 这是\u0026quot;解耦 WAM\u0026quot;这篇论文里最干净的一个设计。Metis 把全部创新收敛到\u0026quot;一张非对称注意力掩码\u0026quot;上：动作只看当前、未来视频看动作——这一个小小的不对称，同时带来了知识注入（训练）、效率（推理）、泛化（无污染）三样东西。比起 SimWAM 的\u0026quot;隔离掩码 + RL 双引擎\u0026quot;，Metis 的哲学更朴素：把信息流管好，世界模型自然把该教的都教了。\n非对称掩码 vs 隔离掩码的取舍，值得单独琢磨：SimWAM 的隔离设计让\u0026quot;视频纯当训练信号\u0026quot;，换来的是 RL 阶段可以完全抛开视频分支、独立优化动作专家；Metis 的非对称设计让\u0026quot;视频看动作\u0026quot;学到动作→演化的因果，换来的是 navhard 上更强的表现（Asymmetric 31.6 vs Isolated 29.4）。前者为 RL 铺路，后者为纯世界建模提分——这取决于你想要\u0026quot;更高的最终分\u0026quot;还是\u0026quot;更独立的可优化动作模块\u0026quot;。\n我对两个方向的判断：\n\u0026ldquo;视频-动作单向可见\u0026quot;这个掩码范式会成为 WAM 的标准件——它几乎零成本（一张 mask），却能同时换来训练知识注入和推理旁路，Metis 和 Fast-WAM（arXiv:2603.16666）都在往这个方向收敛； 下一步的合流大概率是\u0026quot;非对称掩码 + Flow-GRPO\u0026rdquo;——Metis 证明了掩码本身够强，SimWAM 证明了 GRPO 能再涨一截。把 Metis 的非对称掩码（视频看动作，学到动作-演化因果）和 SimWAM 的 RL 优化组合在一起，理论上能同时拿到两者的红利。 关联阅读：这篇和 SimWAM 精读、DriveVLA-W0 精读（世界模型放大数据）、ReCogDrive 精读（DiffGRPO）、Flow-GRPO 详解（RL 底座）串起来，正好构成\u0026quot;世界模型范式演进\u0026quot;的完整图谱：DriveVLA-W0（世界模型当数据）→ Metis（世界模型当训练老师，非对称掩码）→ SimWAM（世界模型当老师 + GRPO 强化）→ 未来的合流方向。\n📖 论文精读系列。Metis 与 SimWAM 是\u0026quot;解耦 WAM\u0026quot;这一范式的同期双子星，建议对照阅读：Metis 看\u0026quot;非对称掩码如何管住信息流\u0026quot;，SimWAM 看\u0026quot;解耦之后如何用 Flow-GRPO 把驾驶质量再顶上去\u0026quot;。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/metis%E7%B2%BE%E8%AF%BB/","summary":"Metis 用 Mixture-of-Transformers 把\u0026rsquo;视频生成专家\u0026rsquo;和\u0026rsquo;动作预测专家\u0026rsquo;拆成两个独立 Transformer，再用一张非对称注意力掩码管理二者的信息流：动作只看向当前帧，未来视频可以看动作。训练时联合优化两者学到世界动态，推理时直接跳过视频生成只跑动作分支——NAVSIM-v2 navhard/navtest 和 CityWalker 全面 SOTA，纯动作推理比带视频快 8 倍，还零样本部署到四足机器人。","title":"论文精读｜Metis：用'非对称注意力掩码'把视频生成与动作预测解耦的世界动作模型"},{"content":"📄 论文信息 标题：SimWAM: A Simple World Action Model for End-to-End Autonomous Driving 作者机构：华中科技大学（白翔团队）× 东风汽车研发总院（Zongchuang Zhao, Xin Zhou, Tianyang Xu, Zhengyang Sun, Kaixuan Zhou, Honglin Li, Dingkang Liang, Xiang Bai） arXiv：2608.07468 代码：github.com/H-EmbodVis/SimWAM 模型权重：huggingface.co/H-EmbodVis/SimWAM 一句话总结：未来视频预测只当\u0026quot;训练期的老师\u0026quot;，不参与推理。SimWAM 用 joint flow matching 把预训练视频生成模型的交通动态先验\u0026quot;迁移\u0026quot;进一个轻量级 Action Expert，再用隔离注意力掩码让动作分支完全独立于未来帧；训练完之后把整个视频分支扔掉，留下一个自包含的 planner 直接出轨迹。最后，它把确定性的 Flow ODE 改写成可探索的 SDE，用 GRPO 直接优化 NAVSIM 组合驾驶奖励，在 NAVSIM navtest 上刷到 91.5 PDMS 新 SOTA，推理时延却远低于同级的 world-model-based planner。 🎯 一句话记忆点：SimWAM = \u0026ldquo;视频生成是教练，Action Expert 是运动员\u0026rdquo;——训练时教练带着练（动态先验），比赛时只有运动员上场（无未来帧推理），再用 GRPO 给运动员加练（RL 优化奖励）。\n🤔 要解决什么问题？ 背景：端到端规划的两种\u0026quot;补课\u0026quot;方式 端到端自动驾驶（E2E AD）直接用原始传感器输入预测轨迹。传统 E2E planner（UniAD、VAD 这类）本质都是模仿策略（imitation policy）：从日志数据里复现专家行为。问题在于：交通语义、用户意图、场景动态这些信息，专家轨迹里只有隐式的体现，模型学到的只是\u0026quot;照着数据开车\u0026quot;。\n于是两条\u0026quot;补课\u0026quot;路线兴起：\n路线 代表 补什么课 问题 VLA（视觉-语言-动作） AutoVLA、ReCogDrive 补语义理解与推理 推理链与动作松散耦合，时序动态仍是间接建模 WAM（World-Action Model） DriveLaW、DriveWAM、Epona 补交通动态先验（显式建模未来场景演化） imagine-then-act，推理时还得生成未来帧，时延爆炸 核心痛点：imagine-then-act 让视频生成进了实时链路 现有驾驶 WAM 几乎都走 imagine-then-act 的因子分解：\n$$p_\\theta(a_{t+1:t+H} \\mid o_t, s_t, l) = \\int p_\\theta(z_{t+1:t+N} \\mid o_t, s_t, l)\\, p_\\theta(a_{t+1:t+H} \\mid o_t, s_t, l, z_{t+1:t+N})\\, dz$$先合成未来场景的 latent z，再以它作为条件生成轨迹。 这意味着：\n昂贵的视频生成被塞进了实时规划环路——每一步决策前都要先\u0026quot;想象未来\u0026quot;，推理时延爆炸（见下方图 1，DriveLaW/DriveWAM 时延高达 1-3 秒级）； 动作预测与未来场景预测紧密耦合——视频 token 的高维视觉表示会干扰低维动作空间，代表性错配导致泛化下降。 🔍 图 1 怎么读？ 一张图说明\u0026quot;为什么要避免 imagine-then-act\u0026quot;：\n横轴 = 推理时延（毫秒，对数/线性刻度），纵轴 = NAVSIM PDMS（越高越好）。任何 planner 都想往左上角跑（又快又好）。 右半区是\u0026quot;想象派\u0026quot;：DriveLaW、DriveWAM、Epona 这类 imagine-then-act 方法，每一步决策前都要先生成未来帧——视频生成是逐帧串行的，所以时延普遍跑到数百毫秒到数秒级（图上显著偏右）。 左半区是\u0026quot;纯 planner\u0026quot;：直接出轨迹的方法时延很低（几十毫秒级），但此前 PDMS 明显不如\u0026quot;想象派\u0026quot;——性能和效率不可兼得。 SimWAM 的位置：纵轴拿到最高的 PDMS（91.5），横轴却停在纯 planner 的量级——它靠\u0026quot;训练期视频监督 + 推理期删视频分支\u0026quot;同时吃到了两边的红利：世界模型的精度 + 纯规划器的速度。 🎯 这张图的潜台词是：\u0026ldquo;想象未来\u0026quot;真正值钱的地方在训练期（学动态先验），而不是推理期（实时生成）。谁能把视频生成从实时链路里挪出去，谁就同时赢得精度和速度。\n第二个问题：Action Expert 只吃模仿饭，上限锁死 即便摆脱了未来帧依赖，WAM 里 Action Expert 的训练目标仍是专家轨迹模仿（BC）。模仿学习的三个老毛病一个不少：\n分布偏移：只在专家轨迹附近学得好，上线跑偏没人拉回来； 无法超越专家：上限就是专家数据的质量，而人类数据本身可能保守、犹豫； 真正目标不可微：碰撞率、舒适 jerk、规则遵守这些驾驶质量指标，BC 根本优化不了。 SimWAM 的立场：未来视频预测能提供更丰富的交通动态信息，但它没有改变轨迹学习本身\u0026quot;以模仿为主\u0026quot;的优化目标。要在保留动态先验的同时突破模仿限制，就必须引入面向驾驶奖励的策略优化——这就是 RL 出场的位置。\n💡 核心思路：三层解耦 SimWAM 的核心设计可以拆成三句话：\n训练/推理解耦：视频生成只在训练期当监督，推理期整个视频分支删掉，只留 Action Expert 直接出轨迹（图 2 右侧 \u0026ldquo;Removed\u0026rdquo;）； 信息流解耦：用一个**隔离注意力掩码（Isolated Attention Mask）**让 Action Expert 永远看不见未来帧 token，从结构上保证\u0026quot;动作不依赖未来\u0026rdquo;； 学习目标解耦：先 joint flow matching 做\u0026quot;动态先验迁移\u0026quot;（补时序建模），再 Flow ODE→SDE + GRPO 做\u0026quot;奖励优化\u0026quot;（补驾驶质量），两阶段互补。 🔍 图 2 逐块拆解（从上到下、从左到右） 这张图是整个论文的\u0026quot;总装图\u0026quot;，分三块读：\n① 左上——输入侧（三种模态进同一编码器）：\n输入 编码器 变成什么 当前帧 o_t（单前视相机） Video VAE（继承自 Wan2.2-5B，图像→latent token） z(o_t)：当前观测的 latent 表示 导航指令 l T5 文本编码器 文本 embedding（通过 cross-attention 注入） 自车状态 s_t（速度/加速度/横摆角速度） Ego Encoder（MLP） 一个低维向量 三个来源的表示拼进同一个注意力流——这就是\u0026quot;共享注意力\u0026quot;的入口。注意图里 Video VAE 只编码当前帧，未来帧是\u0026quot;目标\u0026quot;（要生成的对象），不是输入。\n② 中部——共享注意力流 + 隔离掩码（图里最关键的画法）：\n图中会画出三类 token：z(o_t)（当前观测）、未来帧 latent z_{t+1:t+N}、action token。箭头/连线表示注意力允许看谁：\n未来帧 token → 能看 z(o_t)（生成未来帧需要知道当前长什么样）； action token → 也能看 z(o_t)（规划需要知道当前观测）； 未来帧 ↔ action：互不可见（这就是\u0026quot;隔离\u0026quot;——图上会用一条隔断或不同的箭头颜色标出来）。 读图要点：action 的输入箭头永远不指向未来帧那一侧。图上的掩码块（Isolated Attention Mask）不是独立的网络，而是一张注意力\u0026quot;权限表\u0026quot;，在注意力计算时把\u0026quot;action 看未来帧\u0026quot;的条目直接遮成 -∞。\n③ 右侧——两阶段的\u0026quot;同一张图、两种读法\u0026quot;：\n架构图通常左右分成两个面板：左半是训练期（Video DiT 和 Action DiT 都在），右半是推理/RL 期（Video DiT 被画成删除线/虚线框，标注 \u0026ldquo;Removed\u0026rdquo;）。也就是说图 2 同时画了\u0026quot;训练时的全貌\u0026quot;和\u0026quot;部署时只剩什么\u0026quot;——读图时务必看清自己看的是哪一半，这是理解\u0026quot;训练-推理解耦\u0026quot;的关键。\n先看宏观数据流（训练期）：\n编码：把三种输入映射成条件。 当前帧 → Video VAE → z(o_t)（当前观测 latent）； 导航指令 l → T5 Text Encoder； 自车状态 s_t → Ego Encoder（MLP）。 三者一起进入共享注意力流，但受隔离注意力掩码约束（未来视频与动作互不可见）。 双专家并行： Video DiT：生成未来帧 z_{t+1:t+N}（flow matching 目标，提供动态监督）； Action DiT：预测轨迹速度场 v_θa（flow matching 目标，生成轨迹）。 训练完成后：Video DiT 整个删除，只剩 Action DiT 部署。 推理期数据流（极简）：\n当前帧 → Video VAE → z(o_t) → Action DiT → 轨迹 a_{t+1:t+H}（指令与 Ego 状态同样作为条件注入 Action DiT；全程无未来帧生成）。\n🧩 架构讲解：输入 → 模型 → 输出 📍 架构图在这：SimWAM 的完整架构图是 图 2（Figure 2，见上方\u0026quot;核心思路\u0026quot;章节的图 2），它同时画了训练期和推理期两套结构。下面先用一张我自己画的流程图把整体数据流讲清楚——特别注意\u0026quot;训练期\u0026quot;和\u0026quot;推理期\u0026quot;是两套不同的结构，这是 SimWAM 最核心的 design choice。\n① 输入是什么？（3 类） 输入 类型 编码器 变成什么 当前帧 o_t（单前视相机） 图像 Video VAE（继承 Wan2.2-5B） z(o_t) 当前观测 latent 导航指令 l 文本 T5 文本编码器 文本 embedding（cross-attention 注入） 自车状态 s_t 向量 Ego Encoder（MLP） 低维状态向量 ② 中间经历了什么？（分训练/推理两种） 训练期：三个输入编码后进入共享注意力流（受隔离掩码约束）→ 两条专家并行：Video DiT 生成未来帧（提供动态先验）、Action DiT 预测轨迹 → 联合 flow matching 训练； 推理/RL 期：Video DiT 整个删除，只剩 Action DiT（10 步 ODE）直接出轨迹；RL 阶段再叠加 Flow-GRPO（ODE→SDE + GRPO）优化驾驶奖励。 ③ 输出是什么？（1 类） 一条未来 4 秒的轨迹 a_{t+1:t+H} = (x, y, θ)（8 个 waypoint @ 2Hz）。全程无未来帧生成——这就是\u0026quot;训练/推理解耦\u0026quot;的含义：视频只在训练期当老师。\n⚙️ 模块一：Video-Action Co-training（动态先验迁移） 3.1 问题形式化 SimWAM 的定义非常简单直接。给定前视相机观测 o_t、自车状态 s_t（速度、加速度、横摆角速度）和导航指令 l，planner 预测自车坐标系下的轨迹：\n$$a_{t+1:t+H} = (a_{t+1}, \\dots, a_{t+H}), \\quad a_i = (x_i, y_i, \\theta_i)$$与 imagine-then-act 不同，SimWAM 的策略接口是直接的：\n$$p_\\theta(a_{t+1:t+H} \\mid o_t, s_t, l) = p_\\theta\\!\\left(a_{t+1:t+H} \\mid z(o_t), s_t, l\\right)$$其中 z(o_t) 是当前观测的表示。交通动态知识全部在训练期获得，推理既不需要未来场景 latent，也不需要辅助运动模块——和直接轨迹预测一样高效。\n3.2 两个专家：Video Expert + Action Expert 专家 实现 参数 职责 Video Expert Video Diffusion Transformer，从 Wan2.2-5B 初始化（含 video VAE + T5 文本编码器） ~5B 生成未来帧，提供交通动态先验 Action Expert 轻量 Diffusion Transformer hidden=1024（约 1.02B，见消融） 预测轨迹，唯一部署的模型 Video Expert：VAE 把每帧图像映射成 latent token；导航指令通过 T5 cross-attention 进入；当前帧作为干净条件（clean condition），N 个未来帧被加噪后重建。这就是标准的视频生成目标，不引入任何驾驶专用预测模块——纯粹用视频生成的\u0026quot;副产物\u0026quot;给 Action Expert 供应交通动态先验。 Action Expert：一个小 MLP 嵌入 ego 状态，条件为 c = {z(o_t), s_t, l}，用 flow matching 预测轨迹速度场 v_{θa}(a^τ_{t+1:t+H}, τ, c)。积分 ODE 就把噪声映射成规划轨迹。 3.3 Isolated Attention Mask（隔离注意力掩码） 这是两个专家解耦的唯一结构改动，也是最精妙的设计：\n共享注意力流里包含三类 token：当前观测 latent z(o_t)、未来帧 latent z_{t+1:t+N}、action token。掩码规则：\n未来帧 token 和 action token 都能看当前观测 z(o_t)； 但未来帧与 action 彼此不可见（mutually invisible）。 换句话说：Action Expert 从头到尾接触不到未来帧 token，只能从\u0026quot;当前观测的表示\u0026quot;里学东西。视频生成在此纯粹是训练信号——它通过共享注意力把交通动态\u0026quot;注入\u0026quot;到观测表示里，从而间接塑造 Action Expert。\n为什么这比让 action 看未来帧更好？ 看论文的掩码消融（Tab. 3）：\nMask NC↑ DAC↑ EP↑ TTC↑ PDMS↑ Bidirectional（双向） 98.4 98.0 84.7 95.1 90.2 Action→video（动作看未来帧） 98.5 97.8 84.3 95.5 90.1 Isolated（隔离） 98.7 98.0 83.9 95.9 90.3 有意思的是：让 action 分支看到视频 token 并没有带来可衡量的收益，而隔离设计反而拿到最高 PDMS（90.3）以及最强的 NC 和 TTC。原因在于——暴露未来帧只会让动作预测耦合进\u0026quot;可能生成错的\u0026quot;未来内容，而共享当前观测表示 + 联合训练已经足够把动态先验传过去。\n🔑 这个掩码同时带来三个连锁好处：\n训练-推理一致：训练时动作就不看未来帧，推理时把视频分支删掉，两者状态完全对齐，没有 train/inference mismatch； 视频专家可替换：Action Expert 只通过共享观测表示与视频专家交互，换掉视频 backbone（Wan2.1-1.3B / Wan2.2-5B / Cosmos-Predict2.5）不影响动作分支和推理管线； 独立缩放：视频专家和动作专家的容量是两个互相独立的控制旋钮——大视频模型只影响训练监督质量，不影响部署成本；Action DiT 可单独改宽改深来满足时延预算。 3.4 Joint Flow Matching 训练目标 SimWAM 用 rectified flow 对轨迹和未来帧统一建模。给定干净目标 x 和高斯噪声 ϵ ~ N(0, I)，线性插值：\n$$x_\\tau = (1-\\tau)\\,x + \\tau\\,\\epsilon, \\quad \\tau \\in [0,1]$$中间状态的速度恒为 ϵ - x，网络 v_θ 在条件 c 下预测这个速度：\n$$\\mathcal{L}_{\\text{FM}} = \\mathbb{E}_{x,\\epsilon,\\tau} \\left\\| v_\\theta(x_\\tau, \\tau, c) - (\\epsilon - x) \\right\\|_2^2$$采样时沿概率流 ODE 积分：dx_τ = v_θ(x_τ, τ, c) dτ，从噪声（τ=1）走到数据（τ=0）。这个\u0026quot;直线路径 + 一步到位\u0026quot;的特性是 flow matching 相比扩散模型的最大优势（少步采样、训练目标简单稳定）。\nSimWAM 的联合训练目标就是把两个专家的 FM 损失加起来：\n$$\\mathcal{L} = \\mathcal{L}^{\\text{act}}_{\\text{FM}} + \\lambda\\, \\mathcal{L}^{\\text{vid}}_{\\text{FM}}, \\quad \\lambda = 1$$ L_act_FM：在动作轨迹 a_{t+1:t+H} 上实例化 Eq.1； L_vid_FM：在 future-frame latent z_{t+1:t+N} 上实例化 Eq.1。 两个专家不共享参数，只在注意力流里交换信息。联合训练后，Video Expert 学到的\u0026quot;世界怎么演化\u0026quot;就通过共享观测表示\u0026quot;渗透\u0026quot;进了 Action Expert——这就是动态先验迁移的机制。\n💡 这里值得停下来想一层：为什么视频监督能帮动作预测？因为两者在联合训练中共享了同一个当前观测表示。视频生成迫使这个表示必须\u0026quot;足以预测未来\u0026quot;，于是它就被迫编码了交通对象的速度、方向、交互关系——Action Expert 从这样一个\u0026quot;面向未来\u0026quot;的表示上做规划，自然比从纯感知表示上做规划强。这其实和 DriveVLA-W0 的\u0026quot;世界模型放大数据\u0026quot;逻辑同源：未来预测是一种隐式的表征学习正则。\n🎮 模块二：Flow ODE → SDE + GRPO（强化学习优化驾驶策略） 这是本文要重点拆解的部分，也是用户最关心的地方。SimWAM 在这里几乎是把我们博客里的 Flow-GRPO（arXiv:2505.05470，腾讯 ARC Lab）整套\u0026quot;搬\u0026quot;进了自动驾驶——论文自己也在 Eq.2 里明确写了 \u0026ldquo;Following Flow-GRPO [30]\u0026rdquo;。但它不是简单的照抄，而是做了几个关键的适配。下面我们一层层拆。\n4.1 为什么纯 Flow ODE 没法做策略优化？ co-training 结束后的 Action Expert 是个 flow matching 模型，本质仍是模仿策略。要让它突破模仿、直接优化驾驶质量，就得用 RL。但 RL 用不了原封不动的 flow ODE，有两个硬伤：\n硬伤 解释 后果 ① 确定性，无探索 ODE 给定初始噪声就确定性地生成唯一一条轨迹 无法在同一场景生成\u0026quot;多样性候选轨迹\u0026quot;给 RL 挑选/比较，探索不出新的驾驶行为 ② 无解析过渡密度 ODE 是确定性映射，没有概率密度函数（PDF） 策略梯度 / importance ratio $r = \\exp(\\log \\pi_{\\text{new}} - \\log \\pi_{\\text{old}})$ 根本算不出来——GRPO 的损失函数建在 log-prob 上 4.2 ODE → SDE：Flow-GRPO 的核心改造，SimWAM 直接引用 Flow-GRPO 的思路（也是 SimWAM 照做的）：把 flow step 从确定性的 ODE 改造成一个保持边缘分布的 SDE（marginal-preserving SDE）。关键在于：SDE 的每一步转移都从一个解析的高斯分布里采样，于是 log-prob 可以显式写出来——PPO/GRPO 就有了\u0026quot;可计算的策略密度\u0026quot;。\nSimWAM 论文 Eq.2 给出了精确的 SDE 形式：\n$$dx_\\tau = \\left[ v_\\theta(x_\\tau, \\tau) + \\frac{\\sigma_\\tau^2}{2\\tau}\\Big(x_\\tau + (1-\\tau)\\, v_\\theta(x_\\tau, \\tau)\\Big) \\right] d\\tau + \\sigma_\\tau \\, dw, \\quad \\sigma_\\tau = a\\sqrt{\\frac{\\tau}{1-\\tau}}$$其中 dw 是 Wiener 增量，a 控制噪声尺度。这个公式的关键性质是：它和原 ODE 共享相同的边缘分布 p_τ(x_τ)——也就是说，SDE 采样出来的轨迹\u0026quot;长得还是原来的轨迹该长的样子\u0026quot;（保持可行性），只是多了随机探索的分量。\n每次 Euler-Maruyama 步得到各向同性高斯转移：\n$$\\pi_\\theta(x_{\\tau-\\Delta\\tau} \\mid x_\\tau) = \\mathcal{N}\\!\\left(\\mu_\\theta(x_\\tau, \\tau),\\; \\sigma_\\tau^2 \\Delta\\tau\\, I\\right)$$这个可解析的转移密度就是整个 RL 改造的支点——它让 importance sampling（旧策略下采样的数据用新策略的 log-prob 来重加权）变成可能。\n🧠 用大白话讲 ODE→SDE 是什么：想象你从山上往下滑。ODE 是你只走一条确定的滑道，闭着眼从同一位置开始永远到同一个终点；SDE 是滑道上额外撒了一层\u0026quot;随机颠簸\u0026quot;，每次滑的路径略有不同，但滑到的区域分布和原来一致。这些\u0026quot;不同的路径\u0026quot;就是 RL 要的候选轨迹——有的更激进、有的更保守，让模型有机会比较哪条\u0026quot;驾驶质量更高\u0026quot;。\n4.3 GRPO：组内相对优势，丢掉 Critic 有了可计算的 log-prob，接下来就是 GRPO 登场。GRPO（源自 DeepSeek）的核心洞察：用\u0026quot;组内相对比较\u0026quot;替代 PPO 的 critic 网络。\n对同一个场景采样一组 G 条候选轨迹，各自拿到奖励 R(τ_i)，组内优势为：\n$$A_i = \\frac{R(\\tau_i) - \\bar{R}}{\\sigma_R + \\epsilon}$$ \\bar{R}：同场景 G 条候选的奖励均值； \\sigma_R：组内标准差。 为什么\u0026quot;组内相对\u0026quot;比\u0026quot;绝对奖励\u0026quot;合理？ 不同场景的驾驶难度天差地别：直路场景奖励天然高，无保护左转奖励天然低。如果全局比较，模型会一味偏向\u0026quot;简单场景的路径\u0026quot;，复杂场景能力退化。按场景分组归一化，把\u0026quot;绝对好不好\u0026quot;换成\u0026quot;在同场景候选里排第几\u0026quot;，自动抵消场景难度差异——这在驾驶上比在图像生成上更关键，因为场景间的差异比 prompt 间的差异大得多。\nGRPO 的 clipped 策略更新（沿用 DeepSeekMath / PPO-clip 的写法）：\n$$\\mathcal{L}_{\\text{GRPO}} = -\\mathbb{E}\\!\\left[\\min\\!\\left(\\frac{\\pi_\\theta(a \\mid o)}{\\pi_{\\theta_{\\text{old}}}(a \\mid o)}\\, A_i,\\; \\operatorname{clip}\\!\\left(\\frac{\\pi_\\theta}{\\pi_{\\theta_{\\text{old}}}}, 1-\\epsilon, 1+\\epsilon\\right) A_i\\right)\\right]$$ 组件 PPO GRPO baseline 来源 Critic 网络估计 组内奖励均值 \\bar{R} 是否需要 critic ✅ 必须 ❌ 不需要 显存/调参成本 高（双模型） 低 advantage Q − V (r_i − \\bar r)/σ \u0026ldquo;终点打分、整条链领奖\u0026rdquo;：轨迹是 10 步 flow/SDE 采样出来的，中间 latent 没有语义，reward 只能对最终 decode 后的完整轨迹打分。GRPO 的语义是：完整采样完成后统一算 advantage，然后把这个 advantage 广播到该轨迹每个去噪步的 log-prob ratio 上。不是每一步重新打分，而是终点一次性打分，整条去噪链一起承担。\n4.4 SimWAM 的 RL 具体配置（细节拉满） 配置项 SimWAM 设定 说明 更新对象 只更新 Action Expert 的 rank-32 LoRA（scale α=16）适配器，加在 attention projections 上 保留蒸馏好的运动先验，且保持 planner 结构简单；Video Expert 在 RL 阶段完全不在场 组大小 G 每场景采样 G=8 条候选轨迹 Flow-GRPO 图像版通常用 16-24，驾驶场景少一些（奖励评估贵） 奖励函数 NAVSIM PDM reward（组合驾驶奖励） 见下方公式 RL 数据选择 只挑 imitation 后 PDMS \u0026lt; 90 的困难 navtrain 场景 困难场景的候选轨迹间差异大，reward 信号信息量足；简单场景模仿已够好，RL 信号稀释 学习率 5×10⁻⁵ 比联合训练（1×10⁻⁴）更小，微调性质 推理时 10 步 denoising，CFG=1.0 RL 阶段用 SDE 采样，推理用确定性 ODE 也无妨 组合驾驶奖励（PDM Reward）：SimWAM 直接用了 NAVSIM 的 PDM 分数作为 RL 奖励，这个奖励本身就是\u0026quot;安全 × 合规 × 质量\u0026quot;的组合：\n$$\\text{PDMS} = \\underbrace{\\prod_{m \\in \\{NC, DAC\\}} r_m}_{\\text{惩罚因子：无碰撞 × 可行驶}} \\times \\underbrace{\\frac{\\sum_{m \\in \\{EP, TTC, C\\}} w_m\\, r_m}{\\sum_{m \\in \\{EP, TTC, C\\}} w_m}}_{\\text{加权质量：进度×时间到碰撞×舒适}}$$ 子指标 全称 类别 NC No-at-fault Collision 安全（惩罚因子） DAC Drivable Area Compliance 合规（惩罚因子） EP Ego Progress 效率（质量项） TTC Time-to-Collision 安全（质量项） C Comfort 舒适（质量项） ⚠️ 注意一个工程细节：NAVSIM 是**非反应式（non-reactive）**的闭环仿真器——场景里的其他 agent 不会响应本车的轨迹而改变行为。这意味着 reward 可以在离线/开环状态下直接评估每条候选轨迹，不用真正闭环 rollout，极大降低了 RL 的采样成本。这是 SimWAM 能在自动驾驶上把 Flow-GRPO 落地的重要原因。\n4.5 训练流程全景（对应图 2 右侧 \u0026ldquo;Inference \u0026amp; RL\u0026rdquo;） RL 阶段（只在困难 navtrain 场景上做，即 imitation PDMS \u0026lt; 90 的场景）：\n采样：用 SDE 采样 G=8 条候选轨迹； 打分：每条轨迹送到 NAVSIM 的 PDM reward 打分，得 R(τ_i)； 归一化：组内归一化得优势 A_i = (R_i − R̄) / σ； 策略更新（clipped policy update）： 用当前模型重算每步 SDE 转移的 log-prob； 算 ratio = exp(logπ_new − logπ_old)； 损失 = min(ratio·A, clip(ratio)·A) + KL 约束； 只更新 Action Expert 的 rank-32 LoRA。 推理阶段则极简：当前帧 → VAE → Action DiT（10 步 ODE）→ 轨迹，全程无未来帧生成。\nRL 训练动态（论文图 3，也是我们在图 3 里看到的曲线）：在困难子集上训练，PDMS 稳步爬到 15k steps 时 91.5 的峰值；而在全部 navtrain 上训练反而更差——因为大量场景模仿已经处理得很好，RL 信号被稀释。两条曲线在 15k 步后都略有回落，说明长时间优化收益递减。\n🔍 图 3 怎么读？ 这是一张 RL 训练曲线图，重点看三条信息：\n横轴 = RL 训练步数（steps），纵轴 = navtest PDMS（评估分数）。曲线描述\u0026quot;用 GRPO 再训练过程中，模型在 NAVSIM navtest 上的分数怎么涨\u0026quot;。 星号（★）起点 = 模仿学习 checkpoint：曲线从\u0026quot;联合训练完、还没做 RL\u0026quot;的那个模型开始。它本身已经有 ~90.3 的 PDMS（就是表 2 里 \u0026ldquo;+Video\u0026rdquo; 的成绩），RL 的目标是从这里再往上。 两条曲线的区别是 RL 数据范围： 实线 = 只在困难子集上做 RL（imitation PDMS\u0026lt;90 的 navtrain 场景）。分数稳步爬升，约 15k 步时达到 91.5 峰值； 虚线 = 在全部 navtrain 上做 RL。起步更早、曲线更平缓，但全程低于困难子集——因为大部分场景模仿已经学得很好，RL 的 reward 信号被\u0026quot;简单场景的高分\u0026quot;稀释了。 15k 步之后两条线都有点回落：说明长时间对着同一批场景做 GRPO，策略开始过拟合那批场景的 PDM 分数分布，收益递减甚至回吐——这也是为什么论文把训练步数控制在 15k。 🎯 图 3 想证明：RL 不是数据越多越好，而是\u0026quot;难题越集中越好\u0026quot;。把奖励资源集中在模仿学不会的场景上，信号的信噪比最高。这条经验可以直接移植到任何\u0026quot;模仿预训练 + RL 微调\u0026quot;的流水线。\n4.6 RL 探索方式消融：为什么 SDE 优于\u0026quot;随机噪声扰动\u0026quot; 一个特别值得注意的消融（Tab. 7）：\nSampler NC↑ DAC↑ EP↑ TTC↑ PDMS↑ Random noise（随机噪声扰动） 97.7 98.4 88.0 94.1 91.3 SDE（边际保持的随机微分方程） 98.4 98.7 86.4 95.5 91.5 随机噪声扰动：简单粗暴给轨迹加随机扰动。能增加多样性、甚至把 EP（前进进度）刷到 88.0——因为它把轨迹\u0026quot;戳\u0026quot;得更激进、走得更远——但同时把 NC（无碰撞）和 TTC（碰撞时间）打崩，轨迹缺乏结构化可行性，安全侧崩盘。 SDE：在保持原始 flow 边缘分布的前提下引入随机探索，候选轨迹既有多样性又保持\u0026quot;长得像可行轨迹\u0026quot;。整体 PDMS 更高（91.5），安全与效率平衡得更好。 🔑 关键洞察：RL 探索的重点不是简单地增加随机性，而是构造一个\u0026quot;与生成过程一致、且具有可计算 likelihood 的结构化探索机制\u0026quot;——这正是 ODE→SDE 转换的意义。随机扰动虽然也能探索，但它破坏了轨迹分布的可行性结构（不保持边缘分布），也不提供可计算的 log-prob（GRPO 需要），两头都不占。\n⚖️ 与博客 Flow-GRPO 的深度对比 SimWAM 的 RL 部分明确继承了 Flow-GRPO（博客知识篇完整拆解），但二者领域不同、落地细节也不同。这张表值得反复对照：\n维度 Flow-GRPO（图像生成，arXiv:2505.05470） SimWAM RL（自动驾驶，arXiv:2608.07468） 应用领域 文生图（SD3/FLUX/Qwen-Image/Wan2.1） 端到端自动驾驶轨迹规划 policy 对象 图像 latent 的去噪网络 Action Expert 的轨迹速度场 v_θa \u0026ldquo;状态\u0026rdquo; 当前 latent x_t + prompt + 时间 t 当前观测 z(o_t) + ego 状态 + 指令 + flow 时间 τ \u0026ldquo;动作\u0026rdquo; x_t → x_{t-1} 的 latent 转移 轨迹在 flow 时间上的转移 ODE→SDE ✅ 核心改造（sde_type 支持 sde/cps 两种） ✅ 直接沿用 Flow-GRPO 的 marginal-preserving SDE（Eq.2 明确引用 [30]） reward 图文一致性/偏好/质量（GenEval、OCR、PickScore、CLIPScore、Aesthetic…） NAVSIM PDM 组合驾驶奖励（NC×DAC×加权 EP/TTC/C） reward 评估器 预训练 reward model 打分最终图像 非反应式闭环仿真器给轨迹打分（离线可评） 组大小 G num_image_per_prompt=24（图像） G=8 候选轨迹/场景 更新对象 LoRA policy（KL 约束到 base） 只更新 Action Expert 的 rank-32 LoRA（保留蒸馏先验） 数据选择 全量 prompt 训练 只挑 imitation PDMS\u0026lt;90 的困难场景 强化变体 还有 Flow-GRPO-Fast（窗口训练）、GRPO-Guard（RatioNorm+重加权） 暂无，用最朴素的标准 GRPO 训练-推理一致性 无视频分支概念 视频分支训练完删除，动作独立推理 三个\u0026quot;不是照抄\u0026quot;的关键差异 奖励的\u0026quot;免费午餐\u0026quot;不同：图像版 Flow-GRPO 需要一个独立的 reward model（图片本身没有真值标签）；SimWAM 直接复用 NAVSIM 的 PDM 分数——它本身就是为评价驾驶行为设计的可微目标的对齐物，而且是非反应式闭环可离线评估的。这让\u0026quot;在线 RL\u0026quot;在自动驾驶里第一次变得可行（不需要真车试错，不需要昂贵的强化世界模型 rollout）。\n探索的尺度不同：图像生成里 Flow-GRPO 探索的是\u0026quot;像素怎么排布\u0026quot;这种高维语义空间；SimWAM 探索的是低维驾驶轨迹（每步 8 waypoint × (x,y,θ)），而且候选轨迹天然被\u0026quot;保持边缘分布的 SDE\u0026quot;约束在可行驶、合理的形状内——探索空间小但更有意义，这也解释了为什么 G=8 就够。\n\u0026ldquo;先训练后删\u0026quot;的结构红利：Flow-GRPO 把 RL 作用在整个生成模型上；SimWAM 因为隔离注意力掩码把动作分支独立出来了，RL 阶段可以完全不理视频分支，只优化那个最终要部署的轻量 Action Expert——优化目标和部署目标严格一致，没有\u0026quot;训练一个大家伙、部署一个蒸馏小模型\u0026quot;的落差。\n🗺️ 与博客系列四篇的架构对比 + 做法对比 要真正看懂 SimWAM 在\u0026quot;世界模型 + 生成式规划 + 强化学习\u0026quot;这条知识链上的位置，最有效的方式是把博客里同一条脉络上的四篇文章和它放到一起横向比。这四个参照系分别补上了 SimWAM 的不同\u0026quot;前件\u0026rdquo;：\n参照 在知识链中的角色 补上了什么 DriveVLA-W0 精读 世界模型放大数据 证明\u0026quot;未来图像预测当稠密监督\u0026quot;能喂饱大模型 GoalFlow 精读 Flow Matching 高效生成 证明\u0026quot;直线路径 + 少步采样\u0026quot;让生成式规划上车可行 Flow-GRPO 详解 RL 底座 给出\u0026quot;Flow Matching × GRPO\u0026quot;的完整算法与源码 ReCogDrive 精读 DiffGRPO 强化认知 首次把 GRPO 用到驾驶扩散规划器上 SimWAM（本文） 以上三者的合流 世界模型监督 + Flow 生成 + Flow-GRPO 强化 架构对比：四条路线的\u0026quot;世界模型\u0026quot;长什么样 维度 DriveVLA-W0 GoalFlow ReCogDrive SimWAM 骨干 VLM（Emu3-8B / Qwen2.5-VL-7B）+ MoE Action Expert Transfuser 感知 → BEV + 目标点词表 Qwen2.5-VL + 扩散规划器 Video Expert（Wan2.2-5B）+ Action Expert（1.02B） 动作生成器 AR / Flow Matching / Query 三种解码器对比 Flow Matching 单步生成 扩散规划器（DDPM） Flow Matching DiT（10 步） 世界模型形态 显式预测未来图像（AR 或 Diffusion） 无显式世界模型 无显式世界模型 显式预测未来视频（联合训练） 世界模型监督 训练期稠密监督，推理期旁路 — — 训练期注入，推理期删除视频分支 视频-动作耦合 同一 VLA 骨干联合预测 — VLM 认知表征 → 扩散规划器 隔离注意力掩码（训练期解耦） RL 环节 ❌ 无 ❌ 无 ✅ DiffGRPO（扩散 × GRPO） ✅ Flow-GRPO（流匹配 × GRPO） RL 作用对象 — — 扩散规划器去噪网络 Action Expert 的 rank-32 LoRA 做法对比：四篇的关键\u0026quot;动作\u0026quot; 做法 DriveVLA-W0 GoalFlow ReCogDrive SimWAM 数据策略 7000 万帧内部数据 + 世界模型放大缩放律 NAVSIM + 目标点评分 VQA 认知数据流水线 + 专家轨迹 NAVSIM（navtrain 困难子集做 RL） 两阶段训练 先世界预训练（6VA）→ 动作专精（2VA） 感知/选点/生成/评分联合 认知预训练 → 规划器联合 → DiffGRPO 先视频-动作联合模仿 → 再 Flow-GRPO 推理时延控制 Action Expert 瘦身 74ms、旁路世界模型 单步生成 隐状态注入 7.8× 加速 推理期删视频分支，纯动作 DiT 多模态轨迹 三种解码器（大数据下 AR 最优） 目标点分隔模态 扩散天然多模态 Flow DiT 多模态 + 候选轨迹 闭环策略 开环 NAVSIM 为主 开环 NAVSIM 开环 + Bench2Drive 闭环 开环 NAVSIM + nuScenes 零样本 关键论断：为什么说 SimWAM 是首个把 Flow-GRPO 引入自动驾驶的工作 这是这篇精读最想强调的一点，需要拆成两层看：\n第一层：GRPO 进入驾驶，ReCogDrive 是先行者，但它用的是\u0026quot;扩散版\u0026quot;。 ReCogDrive（arXiv:2506.08052，2025 年 6 月）首次把 GRPO 用到了自动驾驶的扩散规划器上——即 DiffGRPO（Diffusion × GRPO）。它验证了\u0026quot;组内相对优势 + 扩散多模态生成\u0026quot;在驾驶里的可行性。但它的生成底座是 DDPM 式扩散：弯曲的去噪路径、需要较多采样步数、log-prob 通过 ELBO 近似计算。\n第二层：Flow-GRPO 进入驾驶，SimWAM 是第一个。 Flow-GRPO 本身（arXiv:2505.05470，字节跳动，NeurIPS 2025）最初是给文生图设计的（SD3/FLUX/Qwen-Image/Wan2.1）。在自动驾驶领域，把\u0026quot;Flow Matching（rectified flow） × GRPO\u0026ldquo;这套组合完整落地——包含关键的 ODE→SDE 转换（让确定性 ODE 采样变成有可解析 log-prob 的随机探索）——SimWAM（arXiv:2608.07468）是目前首个明确继承该范式的工作，论文 Eq.2 直接标注 \u0026ldquo;Following Flow-GRPO [30]\u0026quot;。\n为什么\u0026quot;扩散版 GRPO\u0026quot;不能算\u0026quot;Flow-GRPO\u0026rdquo;？三点本质差异：\n维度 DiffGRPO（ReCogDrive） Flow-GRPO（SimWAM 所用） 生成路径 弯曲的 DDPM 反向去噪链 直线 rectified flow（最优传输） 采样步数 较多（20+ 步） 少（10 步即可，可降到 2 步） log-prob 来源 ELBO / 变分下界近似 SDE 转移的高斯密度解析式 探索机制 扩散噪声本身 ODE→SDE 保持边缘分布的随机化 轨迹形状约束 无显式约束，易发散 直线路径天然稳定、少步收敛 换句话说：ReCogDrive 证明了\u0026quot;GRPO 这种 RL 能进驾驶\u0026rdquo;；SimWAM 证明了\u0026quot;Flow-GRPO 这种\u0026rsquo;直线路径 + 少步 + 解析密度\u0026rsquo;的特定配方能进驾驶\u0026quot;，并拿到了比扩散版更高的上限（91.5 vs ReCogDrive 的 90.8 PDMS）。 这两者不是同一件事——前者是扩散底座，后者是流匹配底座。\n还有一个容易被忽略的先后关系佐证：SimWAM 依赖的三大件——世界模型训练期监督（DriveVLA-W0 已验证）、Flow Matching 高效生成（GoalFlow 已验证）、GRPO 强化（ReCogDrive/Flow-GRPO 已验证）——在 SimWAM 之前没有一篇同时具备。ReCogDrive 有 GRPO 但没有显式世界模型；DriveVLA-W0 有世界模型但没有 RL；GoalFlow 有 Flow Matching 但没有世界模型和 RL。SimWAM 是第一个把这三块拼成一个闭环的工作，而其中\u0026quot;Flow-GRPO 上驾驶\u0026quot;这一步，在公开文献里尚无更早的先例。\n📊 实验结果：NAVSIM 新 SOTA 5.1 主结果（NAVSIM navtest，单前视相机） 类别 方法 NC↑ DAC↑ EP↑ TTC↑ PDMS↑ Human Agent — 100.0 100.0 87.5 100.0 94.8 传统 E2E UniAD (6C) 97.8 91.9 78.8 92.9 83.4 传统 E2E DiffusionDrive (3C+L) 98.2 96.2 82.2 94.7 88.1 传统 E2E SeerDrive (3C+L) 98.4 97.0 83.2 94.9 88.9 VLM 系 ReCogDrive (1C) 97.9 97.3 87.3 94.9 90.8 VLM 系 DriveVLA-W0 (1C) 98.7 99.1 83.3 95.3 90.2 VLM 系 SGDrive (1C) 98.6 97.8 85.8 96.2 91.1 WAM 系 Epona (1C) 97.9 95.1 80.4 93.8 86.2 WAM 系 DriveLaW (1C) 99.0 97.1 81.3 96.7 89.1 WAM 系 DriveWAM (1C) 98.3 98.1 84.3 95.2 90.1 WAM 系 SimWAM (1C) 98.4 98.7 86.4 95.5 91.5 结论拆解：\n91.5 PDMS，端到端规划新 SOTA，超过最强 VLM planner SGDrive 0.4 分； 超过显式做未来图像预测的 ExploreVLA 1.1 分（ExploreVLA 90.4）——\u0026ldquo;训练期想象\u0026quot;打赢了\u0026quot;测试期想象\u0026rdquo;，这是 SimWAM 最想证明的点； 相同单相机设置下，超过 imagine-then-act 的 DriveLaW 2.4 分、DriveWAM 1.4 分——在不生成未来帧的情况下反而规划得更好； 在 world-model 系里拿到最高 DAC（98.7）和最高 EP（86.4），NC 与 TTC 保持竞争力。 结合图 1 的时延-性能散点，SimWAM 的卖点非常清晰：横轴（时延）靠近纯 planner，纵轴（PDMS）登顶——它证明\u0026quot;训练期世界建模\u0026quot;可以同时带来规划质量提升和推理效率，不用像 imagine-then-act 那样在二者间做取舍。\n5.2 组件消融：video co-training 和 RL 的互补性 配置 NC↑ DAC↑ EP↑ TTC↑ PDMS↑ Action-only（纯动作 DiT，无视频） 97.6 95.7 81.7 92.6 86.6 + Video（联合训练） 98.7 98.0 83.9 95.9 90.3 + RL（GRPO 优化） 98.4 98.7 86.4 95.5 91.5 +Video 提升 +3.7：NC、DAC、EP、TTC 全线提升，证明未来视频监督确实把交通动态先验\u0026quot;装进\u0026quot;了共享观测表示，收益不局限在单一指标； +RL 提升 +1.2：DAC 到 98.7、EP 到 86.4（质量项明显改善），NC/TTC 有小幅回落——RL 在安全、合规、进度之间重新做了权衡； 两阶段累计 +4.9，且始终不需要未来帧推理。 5.3 Video Expert 可替换性 Video model NC↑ DAC↑ EP↑ TTC↑ PDMS↑ LTX-Video（轻量） 98.1 97.2 83.1 94.3 88.7 Wan2.1-1.3B 98.6 98.1 84.0 95.9 90.2 Wan2.2-5B 98.7 98.0 83.9 95.9 90.3 Cosmos-Predict2.5（驾驶视频预训练） 98.7 98.0 84.2 96.0 90.4 结论：SimWAM 不绑定特定视频模型——换 Video Expert 不需要改动作分支、训练目标或推理管线。视频先验质量直接决定规划性能：在驾驶视频上预训练的 Cosmos-Predict2.5 给出最强的 EP/TTC；这也预示着一个滚雪球式的升级路径——视频生成模型每进步一代，SimWAM 的规划免费受益一次。\n5.4 Action Expert 独立缩放 Action DiT NC↑ DAC↑ EP↑ TTC↑ PDMS↑ 0.21B 98.6 97.8 84.0 95.4 89.9 0.45B 98.6 97.9 83.8 95.9 90.1 1.02B 98.7 98.0 83.9 95.9 90.3 动作分支从 0.21B 涨到 1.02B，PDMS 从 89.9 稳步升到 90.3——两个专家互不依赖参数，容量各自独立调节。大视频专家增强训练监督但不增加部署成本，动作专家按部署预算单独选尺寸。\n5.5 Zero-shot 跨数据集泛化（nuScenes 开环） NAVSIM 训练的 SimWAM 不做任何微调直接测 nuScenes 开环规划：\n方法 微调 输入 L2 avg (m)↓ Collision avg (%)↓ UniAD ✅ Camera 1.03 0.31 OccWorld ✅ Camera 1.40 0.87 GenAD ✅ Camera 0.91 0.43 Epona ✅ Camera* 1.25 0.36 DriveVA ❌ Camera* 0.84 0.06 DriveWAM ❌ Camera* 0.96 0.06 SimWAM ❌ Camera* 0.96 0.04 在零样本方法里拿到最低碰撞率 0.04%，平均 L2 0.96 m 与 DriveWAM 持平； L2 强调与目标数据集专家轨迹的几何一致性，碰撞率更直接反映对交通交互和安全边界的建模能力——在数据分布明显漂移（NAVSIM→nuScenes）下碰撞率仍最低，说明 SimWAM 学到的动态先验有一定跨数据集可迁移性，而不只是拟合了 NAVSIM 轨迹分布。 5.6 定性可视化（图 4） 🔍 图 4 怎么读？ 这是\u0026quot;RL 到底改变了什么\u0026quot;的直观证据，一行两个场景、每个场景三栏：\n每行一个 navtest 场景（上排是交叉路口，下排是狭窄街道），每栏画的是相机视角上叠加的预测轨迹（Concat View）。 左栏 = 原始视角：只展示场景原貌（车、路、红绿灯），供你对照后面两栏轨迹在空间上落在哪。 中栏 = Ours-IL（模仿学习版）：轨迹往往保守——到路口就减速、靠边停住，推进距离短，像\u0026quot;照着专家录像学了个胆小的司机\u0026quot;。 右栏 = Ours-RL（GRPO 强化后）：红圈标出的地方，轨迹在保持可行驶区域内更充分地沿目标方向推进——路口敢转了、窄街敢走了，机动动作更完整。 🎯 图 4 想说明：RL 后模型学会了在\u0026quot;安全底线之内\u0026quot;更有效率地驾驶。模仿版\u0026quot;会开但胆小\u0026quot;（停在安全里却走不远），RL 版\u0026quot;会开也会权衡\u0026quot;（在不碰撞、不出可行驶区的前提下把路走完）——这正是直接优化组合驾驶奖励（PDMS）带来的行为差异。\n5.7 其余工程消融速览 消融 结论 推理分辨率（Tab.9） 192×352→384×672：PDMS +1.4，时延仅 +9ms；再涨到 768×1344 只 +0.3，算力暴涨。384×672 最优平衡 采样步数（Tab.10） 1 步严重不足（68.9）；5 步接近最优（90.1）；10 步封顶（90.3）；20 步无增益且时延翻倍。10 步收敛 未来帧配置（Tab.8） 4 帧/2s/2Hz：89.9；4帧/4s/1Hz：90.2；8 帧/4s/2Hz：90.3——时间覆盖广度比帧密度更重要 🔧 实现细节汇总 设置 值 视频专家 Wan2.2-5B + video VAE + T5 编码器 动作专家 Diffusion Transformer，hidden=1024（1.02B） 输入 单前视相机 384×672 轨迹表示 8 waypoints × 4s @ 2Hz（x,y,θ）；视频预测对应 8 帧 联合训练 AdamW，cosine LR，初始 1e-4，100 epochs，batch 64，λ=1 RL rank-32 LoRA（α=16），仅更新 attention projections RL 采样 G=8 候选轨迹/场景，SDE 采样 RL 数据 navtrain 中 imitation PDMS\u0026lt;90 的困难场景 RL 优化 学习率 5e-5，15k 步达峰 推理 10 步 denoising，CFG=1.0 ⚠️ 优势与局限 ✅ 优势 训练/推理彻底解耦：视频先验训练期注入，推理期删除视频分支，planner 自包含、低时延； 可替换、可缩放：Video Expert 换新的、Action Expert 单独调参，都不动对方和训练目标； RL 直接优化驾驶质量：Flow ODE→SDE 保留边缘分布的探索 + GRPO 组内相对优势，突破模仿上限，+4.9 PDMS； 明确继承 Flow-GRPO 范式：把已经验证的图像生成 RL 方法无缝迁移到驾驶轨迹生成，工程上可复现性强； 零样本跨域迁移：nuScenes 上最低碰撞率，动态先验不局限于训练数据集。 ❌ 局限 非反应式仿真依赖：NAVSIM 的 PDM 奖励基于非反应式环境——其他 agent 不响应本车，reward 与真实闭环驾驶仍有 gap，需要 Bench2Drive 这类反应式闭环进一步验证； EP 与 TTC 的此消彼长：RL 后 EP 大涨但 TTC 微降，组合奖励的权重选择仍有主观性，reward hacking 风险需要 KL 约束兜底； 开环指标≠闭环安全：PDMS 强调\u0026quot;模仿得像\u0026quot;的程度，零样本碰撞率虽低但真车闭环尚未完全验证（论文提到 real-robot 部署在补充材料）； 视频先验依赖预训练模型：视频专家替换表显示先验质量直接决定性能，说明它本质上仍在\u0026quot;吃视频生成模型的进步红利\u0026quot;。 📝 个人思考 这是 Flow-GRPO 在自动驾驶上的\u0026quot;标准答案式\u0026quot;落地。SimWAM 的 RL 部分和我们博客里 Flow-GRPO 文章讲的方法一脉相承：确定性 ODE 无法探索、没有可解析密度 → 转成边际保持的 SDE → 组内相对优势 → clipped policy update + KL 约束。它证明了我之前一直强调的判断——Flow Matching 是 GRPO 在生成式规划里的天然基底：直线路径 + 少步采样 + 可解析转移密度，三样都是 RL 友好特性。GoalFlow 证明了 Flow Matching 适合做单步高效生成，SimWAM 则把这条线推进到了\u0026quot;Flow Matching + RL\u0026quot;。\n三个让我眼前一亮的工程智慧：\n非反应式仿真 = 自动驾驶的\u0026quot;免费 RL 环境\u0026quot;。NAVSIM 不开真车、不需要 agent 响应，就能离线给每条候选轨迹打分——这让 Flow-GRPO 的\u0026quot;在线 RL\u0026quot;在驾驶里落地成了\u0026quot;离线采样 + 离线打分 + 策略更新\u0026quot;的低成本版本。这是很多人没意识到的关键前提。\n困难场景筛选是数据效率的胜负手（图 3）。只在 imitation PDMS\u0026lt;90 的场景上做 RL，比全量训练更好——这个洞察可以迁移到任何 RL 微调场景：不要在全量数据上平均用力，要集中火力在\u0026quot;模仿学不会\u0026quot;的硬骨头上。\nRL 阶段只训 LoRA、连视频分支都不带。因为隔离掩码把动作分支独立出来了，RL 的优化目标和部署目标严格一致。这比\u0026quot;RL 一个完整大模型、再蒸馏\u0026quot;的路线省事一个数量级，也避开了\u0026quot;训练部署不一致\u0026quot;的隐性坑。\n下一步最值得关注：①在 Bench2Drive 这类反应式闭环基准上验证（这是所有 NAVSIM SOTA 的共同考卷）；②把 GRPO-Guard（RatioNorm + 梯度重加权）这类防过优化机制搬进来，防止 RL 训久了对 PDM 奖励钻空子；③Video Expert 换成更强的驾驶域视频模型（Cosmos-Predict2.5 已经显示出趋势），动作先验还能再涨。\n关联阅读：这篇和 DriveVLA-W0 精读（世界模型放大数据）、ReCogDrive 精读（DiffGRPO 强化认知）、Flow-GRPO 详解（RL 底座）、GoalFlow 精读（Flow Matching 高效生成）串起来读，正好构成\u0026quot;世界模型 → Flow 生成 → GRPO 强化\u0026quot;的完整知识链——而 SimWAM 正是这条链上第一根全部串起来的闭环：世界模型只在训练期当老师（DriveVLA-W0 的教训）、Flow Matching 直线路径做高效生成（GoalFlow 的教训）、把 Flow-GRPO 的 ODE→SDE 配方首次搬上驾驶（见上文横向对比）——这就是它配得上\u0026quot;首个把 Flow-GRPO 引入自动驾驶\u0026quot;论断的三块基石。再与 Metis 精读（MoT 双专家 + 非对称掩码）对照，就能看清同期\u0026quot;解耦视频-动作\u0026quot;的两种取向。\n📖 论文精读系列。SimWAM 是\u0026quot;世界模型只在训练期当老师\u0026quot;这一范式在自动驾驶的标杆性工作，强烈建议与 Metis（arXiv:2606.15869，MoT 双专家+非对称掩码）对照阅读——二者同期探索了\u0026quot;解耦视频生成与动作预测\u0026quot;的 WAM 设计，SimWAM 多了 GRPO 强化学习这一步。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/simwam%E7%B2%BE%E8%AF%BB/","summary":"SimWAM 用 joint flow matching 把预训练视频专家的交通动态先验\u0026rsquo;蒸馏\u0026rsquo;进轻量级 Action Expert，再用隔离注意力掩码让动作分支彻底摆脱未来帧依赖；随后把确定性 Flow ODE 转成可探索的 SDE，用 GRPO 直接优化 NAVSIM 组合驾驶奖励，突破模仿学习的上限。91.5 PDMS 新 SOTA，推理时延大幅低于 imagine-then-act 的 WAM，并零样本迁移到 nuScenes。","title":"论文精读｜SimWAM：把世界模型当'训练老师'，用 Flow-GRPO 让 Action Expert 学会'自己开车'"},{"content":"🧠 一句话理解 JEPA JEPA = 不画像素、只猜\u0026quot;概念\u0026quot;的自监督学习\n给它一张图的大部分（上下文），让它去预测被遮住那一块的抽象表征——注意，不是把像素补出来，而是预测\u0026quot;那一块经过编码器后长什么样\u0026quot;。这种在嵌入空间（embedding space）做预测的思路，正是图灵奖得主 Yann LeCun 力推的通往自主智能（autonomous intelligence）的核心架构。\n$$\\min_\\theta \\; \\big\\|\\; P_\\theta\\big(\\,s_x,\\ z\\,\\big) \\;-\\; \\text{sg}\\big(\\,T_{\\bar\\theta}(y)\\,\\big) \\;\\big\\|^2$$其中 $s_x$ 是上下文编码，$z$ 是位置/动作条件，$P_\\theta$ 是预测器，$T_{\\bar\\theta}$ 是目标编码器（用 EMA 更新、stop-gradient）。整个损失只在表征空间里算，不碰像素。\n🎯 LeCun 的野心：为什么需要世界模型，为什么生成式不够 LeCun 在 2022 年的论文《A Path Towards Autonomous Machine Intelligence》里给出了一张被反复引用的自主智能系统蓝图：感知模块把高维观测压缩成抽象表征，世界模型在表征空间里预测\u0026quot;如果我执行动作 $a$，下一步世界会变成什么样\u0026quot;，最后由actor / critic 基于这些预测做规划。他认为，这才是接近人类/动物学习的路径。\n为什么生成式方法不够？ 这是最关键的一问。LeCun 反复强调一个观点：\n\u0026ldquo;预测一架从地毯上弹起的球的像素，是浪费且几乎不可能的。\u0026rdquo;\n理由有三：\n像素冗余太多：一只猫下一帧每个位置的纹理、光照、阴影都在变，但它的\u0026quot;猫属性\u0026quot;没变。逐像素重建逼着模型花 99% 的算力去拟合那些与决策无关的细节。 预测概率不可行：世界本质是多模态的——前方路口下一秒可能直行、可能左转、可能急停。在像素空间对每一种未来做精确概率建模，是高维积分灾难；而\u0026quot;许多答案都对\u0026quot;的情形下，回归到平均像素只会得到糊掉的鬼影。 生成式 ≠ 理解：能画出逼真图像（如 Diffusion）不等于理解物理因果。一个会画穿墙小轿车的模型，照样没掌握\u0026quot;墙是撞不过去的\u0026quot;。 JEPA 的破局之道：主动丢掉那些预测不准、也对决策无用的细节，只保留抽象的、可预测的、语义层面的表征。这正是 LeCun 口中\u0026quot;世界模型应有的样子\u0026quot;。\n🔑 JEPA 的核心思想：在嵌入空间预测 JEPA 的名字拆开就揭示了它的本质——Joint-Embedding Predictive Architecture（联合嵌入预测架构）：\nJoint-Embedding（联合嵌入）：用两个编码器分别处理\u0026quot;上下文\u0026quot;和\u0026quot;目标\u0026quot;，把它们都映射到同一个表征空间； Predictive（预测）：训练目标不是\u0026quot;重建目标长什么样\u0026quot;，而是\u0026quot;用一个 predictor 去预测目标的表征\u0026quot;。 为什么这样更高效？ 维度 像素空间重建（MAE/Diffusion） 嵌入空间预测（JEPA） 监督信号 逐像素回归，所有细节一视同仁 只监督抽象表征，自动忽略无关纹理 算力 解码全部像素，开销大 在压缩表征上预测，省算力 多模态未来 回归到均值像素 → 糊 可学分布或条件预测 学到的东西 \u0026ldquo;怎么画\u0026rdquo; \u0026ldquo;会发生什么\u0026rdquo; 语义层级 偏低层纹理 偏高层语义 打个比方：学开车时，你脑子里预测的是\u0026quot;前面那辆车会减速\u0026quot;，而不是\u0026quot;它牌照左下角的反光会从 RGB(120,45,30) 变成 RGB(140,50,35)\u0026quot;。JEPA 逼着模型像前者那样思考。\n🏗️ 架构详解：Context Encoder + Target Encoder + Predictor JEPA 由三件套组成。以图像版 I-JEPA 为例（结构如图 1 所示），三者全是 Vision Transformer（ViT）：\n1️⃣ Context Encoder（上下文编码器） 输入：一张图随机挖掉几块后剩下的可见 patch（context block）。 输出：上下文的表征 $s_x$。 特点：因为只处理可见 patch，所以天然高效（类似 MAE 的稀疏计算）。这个编码器是可学习、有梯度回传的主干。\n2️⃣ Target Encoder（目标编码器） 输入：被遮住的目标块（target block，通常采样多个）。 输出：目标的\u0026quot;真值表征\u0026quot; $T_{\\bar\\theta}(y)$，作为 predictor 要拟合的目标。 特点：这是 JEPA 的灵魂设计——它的权重不靠梯度更新，而是用**上下文编码器权重的指数滑动平均（EMA）来更新，并在计算损失时加 stop-gradient。这条不对称的设计是防止表征坍缩（representation collapse）**的关键。\n3️⃣ Predictor（预测器） 输入：上下文表征 $s_x$ + 位置/条件 token $z$（告诉你\u0026quot;要预测哪个位置的目标\u0026quot;）。 输出：预测的目标表征 $\\hat{s}_y = P_\\theta(s_x, z)$。 损失：$\\ell = \\|\\hat{s}_y - \\text{sg}(T_{\\bar\\theta}(y))\\|^2$。\n为什么用 EMA + stop-grad？ 如果两个编码器一起被梯度更新，最简单的捷径就是让所有输入都输出同一个常向量——损失立刻变 0，但表征毫无意义（这就是\u0026quot;坍缩\u0026quot;）。EMA 让目标侧变化慢、且无梯度，于是预测器只能乖乖去\u0026quot;真正预测\u0026quot;，而不是\u0026quot;把目标拉过来\u0026quot;。\n掩码策略：大目标块 + 信息丰富的上下文 论文里反复强调，掩码采样方式决定了表征的语义层级（见图 2 掩码示意）：\n目标块要够大（scale 0.15–0.2）：太小的块只是\u0026quot;填纹理\u0026quot;，逼不出语义；块够大，模型才必须理解\u0026quot;这是一只狗的腿\u0026quot;才能预测。 上下文要够信息丰富（scale 0.85–1.0，但稀疏）：上下文要保留全局结构线索，又不能太密否则省不了算力。 这条\u0026quot;大目标 + 稀疏上下文\u0026ldquo;的经验，是 I-JEPA 比早期掩码方法学到更语义化表征的直接原因。\n⚔️ 与主流路线的区别：对比学习 vs 生成模型 vs JEPA 自监督视觉学习大致三条路，理解它们的差异是抓住 JEPA 价值的关键。LeCun 用**基于能量的模型（EBM）**框架把它们统一描述：目标是给\u0026quot;相容的输入对\u0026quot;低能量、给\u0026quot;不相容的输入对\u0026quot;高能量。\n维度 对比学习（CLIP / SimCLR / DINO） 生成模型（MAE / Diffusion / VAE） JEPA 核心操作 让两视图编码尽量相似 重建/生成像素或 token 预测目标的嵌入 损失空间 表征空间（相似度） 像素/输入空间 表征空间（预测） 需要什么\u0026quot;配对\u0026rdquo; 同图的两个增强视图 原图 + 被遮部分 上下文 + 目标块 是否依赖人工增强 ✅ 重度依赖（裁剪、变色…） ❌ 不依赖 ❌ 不依赖 是否建模\u0026quot;预测关系\u0026quot; ❌ 只求不变性 ✅ 重建关系 ✅ 条件预测关系 坍缩风险 用负样本/聚类缓解 几乎没有 需 EMA + stop-grad 防护 语义层级 高（线性可分强） 偏低（需 finetune） 高，且兼顾低层任务 扩展性 受增强策略限制 计算昂贵 算力友好、易扩展 三条要点对比：\nvs 对比学习：CLIP/SimCLR/DINO 需要\u0026quot;正负样本对\u0026ldquo;和人工数据增强（裁剪、颜色抖动）。这些增强是为人造的\u0026quot;不变性先验\u0026rdquo;，对不同任务可能有害，且难迁移到视频/音频。JEPA 不用任何增强，靠掩码和预测目标本身就能学。 vs MAE：MAE 也是\u0026quot;掩码 + ViT\u0026quot;，但它在像素空间重建被遮 patch——因此表征偏低层、linear probing 不如对比学习，需 finetune 才发力。JEPA 把损失换到表征空间，linear probing 直接逼近对比学习，同时在计数、深度预测等低层任务上反超。 vs Diffusion/VAE：生成模型擅长\u0026quot;画出\u0026quot;未来，但贵、且多模态未来会被回归成糊图。JEPA 不画，只预测抽象状态，天然适合做世界模型的\u0026quot;想象力引擎\u0026quot;。 I-JEPA 实测：在 ImageNet 上训 ViT-H/14 只需 16 张 A100、72 小时内，比 iBOT 快约 2.5×，比 MAE 训同尺寸模型快约 10×，还能省掉全部数据增强。\n📈 演进：I-JEPA → V-JEPA → V-JEPA 2 JEPA 是一个架构家族，按模态和时间线一路进化：\n版本 时间 模态 关键贡献 JEPA 概念 2022 抽象 LeCun 在蓝图论文里首次系统阐述 I-JEPA 2023 (CVPR) 图像 首个落地实例，证明\u0026quot;表征空间预测 + 大目标块\u0026quot;有效，无需数据增强 V-JEPA 2024 视频 把 I-JEPA 扩展到时序：用过去几帧预测未来帧的表征，引入时空掩码，在 Kinetics、Something-Something 上拿下 SOTA，首次逼近或超越视频版 MAE/对比方法 V-JEPA 2 2025 视频 + 世界模型 关键飞跃：引入自回归预测器，让模型在表征空间逐帧预测未来，并在大规模无标注视频上预训练。它展示出理解物理、动作可控生成、机器人规划能力，被 Meta 定位为\u0026quot;物理世界的基础模型\u0026quot; V-JEPA 2 为什么是个里程碑 V-JEPA 2 把 JEPA 从\u0026quot;学表征的工具\u0026ldquo;升级成\u0026rdquo;能预测、能规划的世界模型\u0026quot;：\n学到了物理直觉：能判断\u0026quot;物体能不能叠起来\u0026quot;\u0026ldquo;球会不会滚落\u0026quot;这类直觉物理（intuitive physics），这是像素生成模型长期做不好的事。 动作条件预测：给一个机器人动作 token，它能预测操作后环境的下一状态表征，从而做model-based planning。 规模即能力：在大规模无标注视频上预训练后，表征直接迁移到下游，验证了\u0026rdquo;少标注、多预测\u0026ldquo;的 Scaling Law 路线。 这正是 LeCun 蓝图里\u0026rdquo;世界模型 + Actor-Critic\u0026ldquo;架构的第一次规模化兑现。\n📈 V-JEPA 2 的详细架构：双重损失设计 V-JEPA 2 最大的工程创新在于其两阶段训练策略，特别是第二阶段中动作条件预测器（Action-Conditioned Predictor） 的设计：\nTeacher Forcing + Rollout 双重损失 V-JEPA 2-AC 的训练使用两种互补的损失函数：\n教师强迫损失（Teacher Forcing Loss）：每一步使用真实的前一帧编码 $z_t$ 作为输入，预测下一帧编码 $\\hat{z}_{t+1}$。这给预测器提供最干净的逐帧训练信号：\n$$\\mathcal{L}_{\\text{tf}} = \\|\\hat{z}_{t+1} - z_{t+1}\\|_1$$Rollout 损失（Rollout Loss）：从初始帧 $z_0$ 开始，将预测器的输出反馈作为下一步的输入，进行多步自回归预测，最后一步的预测值与真实值对比。这惩罚了预测误差的累积：\n$$\\mathcal{L}_{\\text{roll}} = \\|\\hat{z}_K - z_K\\|_1, \\quad \\hat{z}_{1:K} = \\text{rollout}_\\psi(z_0, a_{1:K}, s_{0:K-1})$$联合损失为两者加权和：\n$$\\mathcal{L} = \\mathcal{L}_{\\text{tf}} + \\lambda \\cdot \\mathcal{L}_{\\text{roll}}$$其中 $\\lambda$ 控制多步预测的惩罚强度。实验表明，单独使用教师强迫会导致 rollout 时误差指数级累积；单独使用 rollout 则训练信号太稀疏。两者的组合是 V-JEPA 2-AC 训练稳定的关键。\n冻结编码器 + 小量动作数据 V-JEPA 2 的一个关键设计原则：第二阶段冻结编码器。编码器已经在第一阶段学到了稳定、通用的视频表征；第二阶段只训练一个轻量的预测器（约 300M 参数），在冻结的表征空间上学习动力学。这意味着只需要 62 小时的机器人遥操作数据就能实现零样本控制——因为空间理解已经在第一阶段从互联网视频中获得了，第二阶段只需学会\u0026quot;在这个空间里如何动\u0026rdquo;。\n🚗 JEPA 在自动驾驶中的应用 自动驾驶天然适合 JEPA：多路相机视频是时序的、高度结构化的、且决策只关心语义——路的几何、车的运动、人的意图，而不是广告牌的渐变色。\n应用一：用 JEPA 做场景表征预训练 把 I-JEPA / V-JEPA 当自监督预训练骨干，在大量无标注驾驶视频上学通用表征，再迁移到下游：\n下游任务 JEPA 表征带来的好处 3D 检测 / 跟踪 抽象表征抑制无关纹理，目标更可分 BEV 感知 时序表征编码了运动线索，利于时序融合 占用预测（Occupancy） 表征天然具备几何/语义抽象 在线 HDMap 构建 少标注甚至零标注迁移 相比从 ImageNet 预训练迁移，在驾驶域视频上做 V-JEPA 式预训练能显著缩小域差距（domain gap）。\n应用二：JEPA-AD 与潜空间世界模型 近期出现的 JEPA-AD 等工作，把 JEPA 思想直接搬进驾驶世界模型：\n编码历史观测：环视多相机 + BEV 特征作为上下文 $s_t$； 注入自车动作：油门/转向/轨迹作为条件 token $z$； 预测未来表征：预测 $s_{t+1}, s_{t+2}, \\dots$ 的抽象表征，而非生成未来视频帧； 服务规划：在潜空间里 rollout 候选轨迹，选最优动作。 这条路线相比 Diffusion 世界模型（如 Drive-WM、Sora 式生成）有显著优势：\n维度 Diffusion 世界模型 JEPA 世界模型（JEPA-AD 等） 推理速度 多步去噪，慢 单次前向，快，适合车端 物理一致性 不保证，可能穿墙 可注入几何/运动先验 服务规划 需先解码像素再读语义 表征可直接喂规划头 可解释性 弱 可接可解释安全度量 多模态未来 易回归到均值 可学潜空间分布 应用三：闭环仿真与长尾学习 用 JEPA 学到的潜在动力学，可作为\u0026quot;软仿真器\u0026quot;：给定当前场景 + 候选动作，在表征空间快速推演未来，无需渲染像素。这让长尾场景的闭环训练既快又安全——智能体在\u0026quot;想象\u0026quot;里大量试错，避开了真实路测风险和渲染开销。\n🌍 JEPA 作为世界模型的潜力 把 JEPA 和 model-based RL 串起来，就接上了 LeCun 蓝图里最关键的一环——可预测的世界模型：\n$$s_{t+1} = \\text{Predictor}_\\theta(s_t,\\ a_t)$$ 学习信号：用大量无标注驾驶视频（无动作标签时，可用\u0026quot;未来帧表征\u0026quot;做目标；有动作标签时，把动作注入条件）。 规划方式：在潜空间 rollout 多条候选轨迹，用 critic / 安全约束选最优——类似 Dreamer 在潜空间想象，但丢弃了像素重建这一昂贵环节。 可注入先验：BEV 几何、运动学约束、碰撞检测都可作为预测器结构或额外损失，保证物理可信。 这条路线如果跑通，自动驾驶系统将拥有一个长程稳定、物理可信、可被规划直接调用的\u0026quot;脑子里的预演器\u0026quot;——这正是行业公认的通往 L4 的关键拼图。\n与本博客另一篇《什么是世界模型》对照：那里把世界模型分为生成式和表征式两派，JEPA 正是\u0026quot;表征式\u0026quot;流派的旗舰架构。\n🧱 当前挑战与局限 JEPA 不是银弹，落地驾驶还面临几道硬坎：\n表征坍缩是悬顶之剑：EMA + stop-grad 是经验解，不是理论保证。架构稍变、学习率稍错，就可能坍缩成常向量，训练需要小心调参。 缺动作标签的难题：驾驶视频海量，但带精确自车动作的相对少。无动作条件下的时序预测容易学到\u0026quot;相机抖动\u0026quot;这类捷径，而非真正动力学。 多相机 / 3D 一致性：V-JEPA 原生面向单镜头视频，迁移到环视 6 路相机需要显式的 3D / BEV 几何对齐，否则跨视角表征会矛盾。 长程预测误差累积：和所有世界模型一样，预测越远越飘。潜空间虽比像素稳，但仍需分层预测、记忆增强来抑制指数级漂移。 可解释性与安全度量：潜空间表征里读不出\u0026quot;碰撞时间 TTC\u0026quot;\u0026ldquo;距前车距离\u0026rdquo;，而驾驶决策必须可解释、可验证——需要把抽象表征和可读安全度量对齐。 评测体系缺失：JEPA 表征好不好，目前主要靠 linear probing / 下游 finetune，缺少面向驾驶的闭环评测基准（预测轨迹误差、碰撞率、动作可控度）。 算力虽省但门槛仍高：ViT-H 级骨干 + EMA 目标编码器，显存与工程复杂度不低，中小团队复现不易。 🧭 小结 JEPA 的哲学很纯粹：让 AI 学\u0026quot;会发生什么\u0026quot;，而不是\u0026quot;画得像什么\u0026quot;。它用一个上下文编码器 + 目标编码器 + 预测器的极简三件套，把自监督学习从\u0026quot;重建像素 / 对比增强\u0026quot;推进到\u0026quot;在抽象表征上做条件预测\u0026quot;，顺带省掉了数据增强、绕开了像素灾难。\n对自动驾驶而言，JEPA 提供了一条有别于 Diffusion 世界模型的技术路线：更轻、更快、更关注语义和物理因果，天然适合做潜空间动力学和 model-based planning。从 I-JEPA 到 V-JEPA 2，从图像表征到物理世界基础模型，LeCun 的蓝图正在被一块块兑现。\n一句话定位：如果 Diffusion 世界模型是\u0026quot;把未来画出来\u0026ldquo;的画家，那 JEPA 世界模型就是\u0026rdquo;在脑子里推演未来\u0026ldquo;的战略家。自动驾驶最终需要的，是后者那种能直接喂给决策的抽象预测。\n挑战依旧——坍缩、长程一致性、可解释性、闭环评测——但方向清晰。谁能率先造出一个稳定、可信、可被规划调用的 JEPA 式驾驶世界模型，谁就拿到了通往 L4 的另一张门票。\n💡 扩展阅读：本博客《什么是世界模型》讲了两派世界模型的全景，《Flow-Matching 入门详解》讲了生成式路线的另一条主流。把它们和这篇放一起，就能拼出\u0026rdquo;自动驾驶世界模型\u0026ldquo;的完整技术地图。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/jepa%E8%81%94%E5%90%88%E5%B5%8C%E5%85%A5%E9%A2%84%E6%B5%8B%E6%9E%B6%E6%9E%84%E8%AF%A6%E8%A7%A3/","summary":"JEPA 是 Yann LeCun 提出的自监督表征学习框架，核心思想是在嵌入空间做预测而非重建像素，避免了对决策无关细节的浪费。它采用双编码器加预测器的架构，配合 EMA 目标编码器与 stop-gradient 机制实现稳定训练。在自动驾驶世界模型中已成为生成式方法的重要替代方案。","title":"JEPA 详解：LeCun 的联合嵌入预测架构与自动驾驶应用"},{"content":"一句话理解数据标注 数据标注 = 给传感器数据打上\u0026quot;正确答案\u0026quot;，让神经网络学会看懂世界——标注的质量直接决定了模型性能的上限。\n自动驾驶是一个数据驱动的领域。顶级算法团队和普通团队之间的差距，很多时候不是模型架构的差距，而是数据质量和规模的差距。一个好的标注系统能自动、高效、精确地为海量传感器数据生成标签。\n🎯 标注类型与技术规范 2D 标注 Bounding Box（2D 检测框）：\n格式：$(x_{\\text{min}}, y_{\\text{min}}, x_{\\text{max}}, y_{\\text{max}})$ 或 $(x_c, y_c, w, h)$ 属性：类别（car, pedestrian, cyclist\u0026hellip;）、遮挡程度（0~3）、截断程度 要求：框必须紧贴目标轮廓，边缘落在目标可见像素的外边界上 语义/实例分割（Segmentation）：\n语义分割：每个像素分配一个类别标签（道路、天空、车辆……） 实例分割：同一类别下区分不同个体（车 A vs. 车 B） 格式：多边形（polygon）或 RLE（run-length encoding） 标注精度要求：像素级，通常边缘误差 \u0026lt; 2 像素 关键点标注（Keypoint）：\n用于人体姿态估计、车辆关键点（车轮、车顶角点） 通常标注 17 个人体关键点（COCO）或 4~8 个车辆角点 需要明确关键点的可见性标注 3D 标注 3D Cuboid（3D 检测框）：\n7 自由度：$(x, y, z, w, h, l, \\theta)$ $(x, y, z)$：框的中心坐标（通常在自车坐标系中） $(w, h, l)$：宽度、高度、长度（米） $\\theta$：绕 $z$ 轴的偏航角（yaw） 标注要求： 框必须紧密包围物体，不遮挡其他目标 朝向角必须与目标实际行进方向一致 相邻帧之间保持框的尺寸稳定 点云标注（Point Cloud Annotation）：\n在 LiDAR 点云中标注 3D 框 通常需要在多个视角（BEV、前视图、侧视图）同时调整框的位置 挑战：远距离点云稀疏，标注者难以判断目标边界 常用辅助：将点云投影到图像上，利用图像语义辅助标注 BEV 标注：\n直接在鸟瞰图上标注道路元素（车道线、路沿、停止线） 格式：折线或多边形，每个点对应 BEV 网格中的位置 精度要求：厘米级（相对于地图坐标系） 时序标注 自动驾驶数据是视频序列而非单帧图像。时序标注包含：\nTracking ID：为每个目标分配跨帧的持久化 ID 生命周期标注：标记目标\u0026quot;出现→持续→消失\u0026quot;的帧区间 属性变化：跟踪目标属性的变化（如车辆刹车灯亮/灭） 遮挡推理：被遮挡时 ID 不变，基于运动模型推断位置 时序一致性是标注中最大的挑战。标注工具需支持插值传播：标注者只需标注关键帧，中间帧由光流或跟踪模型自动传播，人工修正。\n🔧 常用标注工具 商业平台 平台 支持标注类型 特点 定价模式 Scale AI 2D/3D/Cuboid/Polygon/Lidar 全球最大自动驾驶标注平台，曾服务于 Waymo/GM 按量计费 Labelbox 2D/3D/Video/Text 支持模型辅助标注（Model-assisted labeling） 订阅制 Supervisely 2D/3D/Video 开源功能丰富，支持插件扩展 混合模式 Segments.ai Point Cloud/2D/3D LiDAR 点云标注体验好 按量计费 开源工具 工具 语言 特点 CVAT Python/TS Intel 开源，功能全面，支持自动标注插件 LabelImg Python 轻量级 2D 框标注，适合快速启动 LabelStudio Python 多模态标注（文本、图像、音频） Point Labeler (ROS) C++/Python 基于 RViz 的 3D 点云标注，ROS 生态 annotator Python Facebook 开源的 3D 标注工具 企业级标注的架构 工业标注系统通常包含这几个模块：\n数据管理：PB 级存储、去重、分布统计 预标注服务：用已有模型做初始标注，人工只需修正 标注队列：自动分发任务到不同标注员，做交叉验证 质量审核：自动检查标注一致性，抽样人工审核 版本管理：每次标注修改都形成新版本，可回溯 🧪 数据增强 数据增强是扩充训练集、提升泛化性的低成本手段。\n几何增强 用于 2D/3D 检测的常用几何增强：\n增强方法 2D 3D 说明 随机翻转（Horizontal Flip） ✅ ✅ 左右镜像，注意交通规则（左舵/右舵） 随机缩放 ✅ ❌ 模拟目标尺寸变化 随机旋转 ✅ ✅ 2D: ±10°, 3D: ±45°(yaw) 随机裁剪 ✅ ❌ 模拟部分可见 颜色抖动 ✅ ❌ 亮度/对比度/饱和度扰动 3D 平移/旋转（全局） ❌ ✅ 模拟不同泊车位置 点云 dropout ❌ ✅ 模拟远距离或遮挡 场景级增强 Object Paste：从其他场景中裁剪目标，粘贴到当前场景 Ground Truth Sampling：在训练时随机将 GT 目标插入到 BEV 空间（PointPainting 做法） 场景混合：将两个场景的 BEV 特征混合（MixUp / CutMix 的 BEV 版本） 传感器仿真增强 天气/光照模拟：使用 GAN 或 ControlNet 改变图像的天气、光线 传感器噪声注入：模拟相机运动模糊、LiDAR 多径效应 🤖 现代标注范式：从人工到自动化 范式一：Auto-Labeling（自动标注） Auto-Labeling 使用预训练模型自动生成伪标签，人工仅做修正和审核。\n典型流程：\n初步检测：使用已有 3D 检测模型在无标注数据上生成初始框 时序优化：利用 tracking 和 smoother（如 EKF）跨帧优化框的尺寸和位置稳定性 多传感器交叉验证：LiDAR 3D 框投影到图像上，用 2D 检测模型验证一致性 人工审核：抽样检查伪标签质量，纠正系统性错误 标杆工作：\nWaymo AutoLabel：使用离线大模型和时序优化生成高质量 3D 标签，据称在一项研究中替代了 97% 的人工标注 Tesla 的数据引擎：在车端运行影子模式，遇到模型不确定性高的场景即上传数据，自动标注后加入训练集 范式二：NeRF / 3DGS 数据生成 Neural Radiance Field（NeRF）和 3D Gaussian Splatting（3DGS）可以从稀疏图像重建出可控场景，然后：\n新视角生成：在重建场景中放置虚拟相机，生成任意视角的图像——训练视角鲁棒的感知模型 场景编辑：在重建场景中移动/插入/删除物体，自动更新对应的 3D 标注 Corner Case 合成：手动编辑场景（如增加一辆横穿马路的车），生成在真实世界中罕见的危险场景 三种范式对比 维度 纯人工标注 Auto-Labeling NeRF/3DGS 生成 成本 高 中 低（一次构建，无限生成） 精度 高 中高（需人工审核） 中（受重建质量限制） 规模 10^5 帧级 10^7 帧级 理论上无限 可控性 低 中 高（可编辑场景） 成熟度 ✅ 成熟 ✅ 工业标配 ⚠️ 快速发展中 📊 主流数据集 多模态数据集 数据集 规模 传感器 标注类型 特点 nuScenes 1000 scenes, 1.4M frames 6 cam + 5 radar + 1 LiDAR 3D bbox, 23 cls, 8 attrs 最流行的学术数据集，场景覆盖广 Waymo Open 1150 scenes, 230K frames 5 cam + 5 LiDAR 3D bbox, 4 cls 高密度 LiDAR，单帧 100+ 目标 Argoverse 2 1000 scenes 7 cam + 2 LiDAR 3D bbox, 地图 提供 HD Map，支持预测任务 Lyft Level 5 366 scenes 7 cam + 3 LiDAR 3D bbox 早期开放数据集，现已被 nuScenes 覆盖 纯视觉/Camera-only 数据集 数据集 规模 标注类型 特点 ONCE 1M frames (100K 标注) 3D bbox, 5 cls 大规模、多天气、多时段 SODA10M 10M frames (20K 标注) 2D bbox, 6 cls 巨大规模，半监督评测基准 BDD100K 100K frames 2D bbox, lane, drivable area 多样化路况，美国多地 🎯 Corner Case 挖掘 Corner Case（边缘场景）是提升自动驾驶系统安全性的关键。常见挖掘方法：\n基于模型的挖掘 不确定性估计：使用 MC-Dropout 或 Ensemble 方法估计模型预测的不确定性，高不确定性样本优先标注 OOD 检测：检测模型遇到分布外（Out-of-Distribution）样本，如未见过类型的施工区域 闭环 Failure Detection：在仿真器中运行规划器，检测何时规划失败（碰撞、急刹、偏离车道），回溯对应的传感器场景 基于场景的挖掘 场景检索：在庞大数据集中检索特定场景（雨夜、十字路口、施工区） 路采回放：持续记录路试数据，自动筛选出有\u0026quot;惊险事件\u0026quot;的片段（接管、急刹、近距离 cut-in） 对抗生成：使用生成模型对现有场景添加扰动（如插入新障碍物），测试模型鲁棒性 数据飞轮 最好的数据策略是一个闭环的数据飞轮：\n路 测 采 集 → 模 型 推 理 → 场 景 挖 掘 → 自 动 标 注 → 模 型 训 练 → 路 测 验 证 → 每一轮循环都在不断拓宽模型的能力边界，减少未知场景。\n📚 延伸阅读 Caesar, H. et al. \u0026ldquo;nuScenes: A multimodal dataset for autonomous driving.\u0026rdquo; CVPR, 2020. Sun, P. et al. \u0026ldquo;Scalability in Perception for Autonomous Driving: Waymo Open Dataset.\u0026rdquo; CVPR, 2020. Mao, J. et al. \u0026ldquo;One Million Scenes for Autonomous Driving: ONCE Dataset.\u0026rdquo; NeurIPS, 2021. Han, J. et al. \u0026ldquo;SODA10M: A Large-Scale 2D Self/Semi-Supervised Object Detection Dataset.\u0026rdquo; ECCV, 2022. Yang, Z. et al. \u0026ldquo;UniSim: A Neural Closed-Loop Simulator for Autonomous Driving.\u0026rdquo; arXiv, 2023. Mildenhall, B. et al. \u0026ldquo;NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis.\u0026rdquo; ECCV, 2020. Kerbl, B. et al. \u0026ldquo;3D Gaussian Splatting for Real-Time Radiance Field Rendering.\u0026rdquo; SIGGRAPH, 2023. ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E9%A9%BE%E9%A9%B6%E6%95%B0%E6%8D%AE%E6%A0%87%E6%B3%A8%E4%B8%8E%E5%A4%84%E7%90%86/","summary":"数据是自动驾驶系统的燃料。本文系统梳理 2D/3D/Temporal 标注的规范与工具，介绍自动标注（auto-labeling）、NeRF/3DGS 数据生成等前沿范式，覆盖 nuScenes、Waymo 等主流数据集和 corner case 挖掘策略。","title":"驾驶数据标注与处理：从人工标注到自动化范式"},{"content":"📄 论文信息 标题：DiffusionDrive: Real-Time End-to-End Multimodal Trajectory Planning for Autonomous Driving（实时端到端多模态轨迹规划） 团队：华中科技大学 × 理想汽车（Li Auto） 关键词：扩散模型、条件去噪、多模态轨迹、端到端规划、轨迹初始化 一句话总结：把轨迹规划重新定义成一个条件去噪过程，从噪声出发逐步\u0026quot;雕刻\u0026quot;出多条合理轨迹，用轨迹初始化先验和少步采样让扩散真正跑在车端，是生成式端到端驾驶的代表作。 🤔 要解决什么问题？为什么轨迹规划需要多模态？ 绝大多数端到端规划器都采用确定性回归：网络直接输出一条未来轨迹（一串 waypoints）。这条路线简洁高效，却有一个被长期忽视的软肋——轨迹分布本质上是多模态的。\n考虑这样一个场景：前方有静止障碍物，左车道空、右车道也空。 此时合理选择至少有两种——向左变道、向右变道，甚至减速跟停也是合法选项。如果用 L2 回归去拟合人类轨迹，网络会把所有训练样本\u0026quot;平均\u0026quot;起来，结果往往是输出一条压着障碍物正中间走的轨迹。这就是经典的 mode averaging（模态平均） 问题——平均化的轨迹比任何一个合理选择都更危险。\n确定性规划的三类典型困境：\n困境 表现 后果 mode averaging 多条合理轨迹被回归平均 输出落在\u0026quot;无人区\u0026quot;，甚至压障碍物 单点估计 只给一条轨迹，无备选 遇到执行偏差没有回旋余地 难以表达意图 不敢变道还是准备变道？ 行为预测、交互建模无从展开 工业界传统方案（如 EM Planner）其实早就意识到这点——它们显式生成多条候选，再用代价函数挑最优。但端到端回归头丢了这种能力。多候选打分路线（先输出 $K$ 条锚定轨迹再打分）虽然恢复了多选，可候选集是固定锚点，覆盖范围有限，难以生成场景相关的多样化轨迹。\nDiffusionDrive 的核心判断：与其用回归硬挤出一个\u0026quot;平均答案\u0026quot;，不如直接建模轨迹的整个分布，让模型学会\u0026quot;在这种情况下，有哪些合理走法\u0026quot;。这正是生成式模型（扩散、Flow Matching）的强项。\n💡 核心思想：把轨迹规划变成\u0026quot;条件去噪\u0026quot; 扩散模型做轨迹生成的直觉 扩散模型在图像生成里大放异彩，它的本质是两个过程：\n前向过程：把一条干净轨迹 $x_0$ 逐步加高斯噪声，直到变成纯噪声 $x_T \\sim \\mathcal{N}(0, I)$ 反向过程：训练一个网络 $\\epsilon_\\theta$，学会从噪声一步步去噪，还原出合理轨迹 把这个范式搬到轨迹规划上，直觉非常优雅：从一团随机噪声出发，像雕刻一样一点点把噪声去掉，最后\u0026quot;显形\u0026quot;出一条平滑合理的驾驶轨迹。 关键在于，由于去噪是一个随机过程，采样多次会得到不同的合理轨迹——多模态因此天然成立。\n前向加噪可以写成闭式：\n$$q(x_t \\mid x_0) = \\mathcal{N}\\left(x_t;\\ \\sqrt{\\bar{\\alpha}_t}\\, x_0,\\ (1-\\bar{\\alpha}_t) I\\right)$$反向去噪则训练网络预测每一步加入的噪声：\n$$\\mathcal{L}_{\\text{diff}} = \\mathbb{E}_{x_0,\\, t,\\, \\epsilon}\\left[\\big\\|\\, \\epsilon - \\epsilon_\\theta(x_t, t, \\mathbf{c})\\,\\big\\|^2\\right]$$条件扩散：以场景上下文为\u0026quot;指挥棒\u0026quot; 裸扩散只能生成\u0026quot;看起来像轨迹\u0026quot;的东西，但规划要的是在当前场景下合理的轨迹。因此 DiffusionDrive 采用条件扩散：在去噪网络里注入场景条件 $\\mathbf{c}$。\n条件 $\\mathbf{c}$ 通常包含：\n自车状态：位姿、速度、加速度、历史轨迹 周围智能体：从他车检测/跟踪得到的动态目标特征 在线地图：车道线、可行驶区域、道路边界等矢量要素 导航意图：全局路由给的\u0026quot;该往哪走\u0026quot;的提示 注入方式一般是通过 cross-attention（交叉注意力） 或 MLP 拼接，让去噪网络在\u0026quot;雕刻\u0026quot;轨迹的每一步都能\u0026quot;看到\u0026quot;当前场景——这就把一个无条件的\u0026quot;画轨迹\u0026quot;任务，变成了一个听从场景指挥的条件生成任务。\n🏗️ 模型架构：稀疏感知 + 条件扩散规划头 DiffusionDrive 的整体数据流可以概括为\u0026quot;稀疏感知理解场景，扩散头生成轨迹\u0026quot;：\n多相机图像 ➜ 稀疏感知编码器（检测智能体 + 在线建图）➜ 场景条件特征 $\\mathbf{c}$ ➜ 条件扩散规划头（含噪声轨迹 $x_t$ + 时间步 $t$）➜ 多模态轨迹分布\n稀疏感知骨干 它沿用了一条全稀疏的感知路线：不构造密集 BEV 栅格，而是用一组 query 直接检出周围智能体和矢量地图元素。这种设计算力开销小、特征紧凑，非常适合作为扩散头的条件源——把动辄上百万像素的密集特征压缩成几百维的结构化表示。\n关键创新：截断扩散策略（Truncated Diffusion Policy）+ 轨迹初始化 这是 DiffusionDrive 最精彩的一笔，也是它能实时运行的命门。核心思想可拆成两步：先把起点聚到合理位置（轨迹初始化），再把扩散调度截断（截断扩散）。\n问题：标准扩散从纯高斯噪声 $\\mathcal{N}(0, I)$ 起步。但真实驾驶轨迹是平滑、有界、强结构化的（几十米范围内、曲率受限、速度连续），和高斯噪声的分布差距极大。弥合这个差距需要很多步去噪（几十到上百步），对车端 10Hz+ 的实时性是灾难。\nDiffusionDrive 的解法：不要从纯噪声起步，而是从一个结构化的轨迹先验起步。具体做法是：\n在训练集上把人类轨迹聚类成一组锚定原型轨迹（anchor trajectories / 基底轨迹） 推理时先从锚定集合里采样一个\u0026quot;粗略合理的起点\u0026quot; 再用少量去噪步在这个起点上做残差式精修 这本质上是把扩散从\u0026quot;噪声 ➜ 数据\u0026quot;压缩成了\u0026quot;粗轨迹 ➜ 平滑轨迹\u0026quot;，起点已经落在噪声轨迹附近，自然只需极少步数就能收敛。形象地说：标准扩散是从一团乱流捏车，而 DiffusionDrive 是从一个\u0026quot;半成品的车型\u0026quot;开始精修——后者当然快得多。\n论文训练时就采用截断调度：用 K-Means 在训练集上聚类出 $N_{\\text{anchor}}$ 条锚定轨迹 $\\mathbf{a}_k$，向它们加噪生成 $\\tau_k^i=\\sqrt{\\bar{\\alpha}^i}\\,\\mathbf{a}_k+\\sqrt{1-\\bar{\\alpha}^i}\\,\\epsilon$，只遍历 $i\\in[1,T_{\\text{trunc}}]$（$T_{\\text{trunc}}\\ll T$）。扩散解码器对这些噪声轨迹预测\u0026quot;去噪轨迹 + 分类分数\u0026quot;，训练目标同时包含轨迹重建（L1）与正负样本的二分类：\n$$\\mathcal{L}=\\sum_{k=1}^{N_{\\text{anchor}}}\\big[\\,y_k\\,\\mathcal{L}_{\\text{rec}}(\\hat{\\tau}_k,\\tau_{\\text{gt}})+\\lambda\\,\\text{BCE}(\\hat{s}_k,y_k)\\,\\big]$$其中离真值轨迹最近的锚点对应的噪声轨迹为正样本（$y_k=1$），其余为负样本。\n推理时则从锚定高斯分布采样 $N_{\\text{infer}}$ 条噪声轨迹起步，用 DDIM 规则逐时间步去噪；并且 $N_{\\text{infer}}$ 与训练时的 $N_{\\text{anchor}}$ 解耦，可以按算力与实时性需求动态调整——这是它能在\u0026quot;少步数 + 多候选\u0026quot;之间自由伸缩的关键工程特性。\n设计 起点分布 所需步数 多样性来源 标准扩散 纯高斯噪声 几十~上百步 噪声随机性 DiffusionDrive 锚定轨迹先验 2~少数步 锚点选择 + 噪声 多步多迭代采样 为了让输出既多样又安全，DiffusionDrive 采用多步、多迭代的采样策略：并行采样多条候选轨迹，再结合下游的代价评估（碰撞、舒适、合规）挑选最优的一条下发控制。这其实和传统规划\u0026quot;生成候选 ➜ 打分 ➜ 选优\u0026quot;的范式在精神上是一致的，只是候选生成方式从规则采样换成了学习到的扩散分布。\n推理流程：从锚定高斯分布采样 $N_{\\text{infer}}$ 条带噪轨迹 → 扩散解码器逐步去噪并同时输出每条轨迹的二分类分数 → DDIM 更新到下一时间步 → 最终按分数挑出 top-1 作为下发轨迹、**top-K 作为一个\u0026quot;行为候选池\u0026quot;**供后续安全校验。\n🆚 Flow Matching vs DDPM：轨迹生成用哪个？ 扩散（DDPM）并非连续分布生成的唯一选择，Flow Matching 近两年正快速崛起（详见本博客《Flow Matching 入门详解》）。两者都能建模多模态轨迹分布，但哲学不同。\n维度 DDPM（扩散） Flow Matching（流匹配） 前向路径 弯曲（非线性噪声调度） 直线（线性插值 $x_t=(1-t)x_0+t x_1$） 底层方程 SDE（含随机项） ODE（确定性） 采样步数 较多（需技巧加速） 几步即可 训练目标 预测噪声 $\\epsilon$ 预测速度场 $v$（目标 $x_1-x_0$） 训练稳定性 对噪声调度敏感 通常更平滑 理论关系 Flow Matching 的一个特例 更一般的框架 Flow Matching 的训练目标是让网络学会一个\u0026quot;恒定速度\u0026quot;$u = x_1 - x_0$：\n$$\\mathcal{L}_{\\text{FM}} = \\mathbb{E}\\left[\\big\\|\\, v_\\theta(x_t, t, \\mathbf{c}) - (x_1 - x_0)\\,\\big\\|^2\\right]$$由于路径接近直线，推理时用少量欧拉步积分就能从噪声\u0026quot;流\u0026quot;到数据，天生适合实时。\nDiffusionDrive 为什么选 DDPM 而不是 Flow Matching？ 一个合理推测是：扩散生态更成熟、可调技巧多（如一致性蒸馏、DDIM），且论文的轨迹初始化先把\u0026quot;起点拉到数据附近\u0026quot;，恰恰抵消了扩散\u0026quot;路径弯、步数多\u0026quot;的主要劣势——一旦起点不再远，扩散和 Flow Matching 的速度差距就被抹平了。这也是我认为后续工作完全可能用 Flow Matching 替换 DDPM 头的原因：轨迹初始化这一招对两者都成立。\n🧪 训练策略与 loss 设计 数据来源 DiffusionDrive 的训练数据主要来自大规模人类驾驶数据集：\nnuPlan / OpenScene：当前最主流的闭环/开环规划 benchmark，提供海量带轨迹标注的真实驾驶片段 训练时以人类驾驶轨迹作为 $x_0$（扩散的\u0026quot;干净样本\u0026quot;），场景上下文作为条件 $\\mathbf{c}$ loss 组合 训练目标是多 loss 联合，既有生成式损失，也有安全约束：\nloss 作用 说明 扩散去噪 loss $\\mathcal{L}_{\\text{diff}}$ 主目标 让网络学会在场景条件下逐步去噪 碰撞 loss 安全兜底 惩罚与占用/障碍物重叠的轨迹 边界 loss 合规 约束轨迹不越出可行驶区域 舒适 loss 平顺 限制过大的加速度/急动度（jerk） 一个重要的工程经验是：不能只靠扩散 loss。纯生成目标只关心\u0026quot;分布像不像人类轨迹\u0026quot;，但驾驶是安全攸关任务，必须把碰撞、合规等硬约束作为辅助 loss 显式注入，才能避免模型偶尔采样出\u0026quot;分布内但不安全\u0026quot;的轨迹。这和 UniAD 把碰撞 loss 写进规划头是同一个道理——越是生成式、概率性的系统，越需要确定性安全网兜着。\n⚡ 推理加速：让扩散真正跑上车 扩散模型上车最大的拦路虎是延迟。DiffusionDrive 用了几个组合拳把它压到实时：\n轨迹初始化（见上文）：把起点从纯噪声拉到数据附近，采样步数从几十步骤降到 2 步量级，这是最关键的提速。 缓存矩阵（Cached Matrix）：去噪过程中，场景条件 $\\mathbf{c}$ 是不变的，只有噪声轨迹 $x_t$ 和时间步 $t$ 在变。因此可以把\u0026quot;场景与轨迹交互\u0026quot;的部分预先算好并缓存，避免每个去噪步都重算注意力，大幅省算力。 少步采样：配合 DDIM 等加速采样器，进一步压缩去噪步数。 一致性模型：潜在的进一步加速 除了上述工程技巧，学术界还有一类一致性模型（Consistency Model）思路：把多步去噪蒸馏成一步映射，即\u0026quot;噪声 ➜ 轨迹\u0026quot;一跃而成。这类方法在图像生成里已验证可行，迁移到轨迹规划上，有望把扩散头压到接近单次回归的延迟。DiffusionDrive 的轨迹初始化其实已经隐含了一步生成的影子——当起点足够好时，一两步去噪等价于一个\u0026quot;残差精修\u0026quot;，和一致性蒸馏的精神相通。这指明了后续工作的一个清晰方向。\n⚔️ 与传统优化规划（EM Planner）的对比 传统工业界规划（如百度 Apollo 的 EM Planner）走的是优化路线：在 Frenet 坐标下生成大量候选，用代价函数（碰撞、舒适、合规、效率）打分，再用动态规划 + 二次规划求解最优。DiffusionDrive 走的是学习式生成路线。两者本质不同：\n维度 EM Planner（优化） DiffusionDrive（生成） 候选来源 规则采样（固定模板） 学习到的轨迹分布 多样性 受模板覆盖限制 天然多模态、场景自适应 代价函数 人工设计、显式可调 隐式编码在训练数据里 可解释/可调 强（每项代价可审计） 弱（黑盒分布） 数据依赖 低（靠规则） 高（靠人类驾驶数据） 长尾泛化 受规则覆盖度限制 受数据覆盖度限制 实时性 强（QP 求解快） 需加速技巧才能达标 一个值得玩味的观察：DiffusionDrive 的\u0026quot;采样多条 ➜ 打分选优\u0026ldquo;其实和 EM Planner 的\u0026rdquo;生成候选 ➜ 代价函数选优\u0026ldquo;在流程上惊人地相似——差别只在于候选是用规则生成还是用学习到的分布生成。这暗示两条路线并非对立，而是可以融合：用扩散头生成更聪明的候选，再用可解释的代价函数做最终裁决，既拿到生成式的多样性，又保留优化的可审计性。\n📊 在 NAVSIM / nuPlan 上的性能 DiffusionDrive 主要在 NAVSIM 上评测。NAVSIM 采用 PDMS（Predictive Driver Model Score） 作为核心指标，它由多个子分（如碰撞率、可驾驶区域合规、舒适度、方向正确性等）加权而成，比单纯的 L2 误差更贴近\u0026quot;开得好不好\u0026rdquo;。\n主要结论（定性，具体数值请参照原论文表格）：\nPDMS 领先：发布时在端到端规划器中处于第一梯队（NAVSIM navtest 88.1 PDMS），显著优于确定性回归基线，尤其在需要\u0026quot;做选择\u0026quot;的变道/绕行场景上优势明显 多模态优势：在多候选场景下，扩散头能给出更分散、更贴合场景的候选轨迹，mode averaging 问题得到缓解 质量与多样性可兼得：论文还引入 mode diversity 分数 $\\mathcal{D}$ 评估候选轨迹的多样化程度——top-1 紧贴真值的同时，top-10 能给出栅格级的变道选择，而不是挤成一团 实时可达：借助截断扩散和缓存矩阵，去噪步数从 20 步降到 2 步，延迟被压到可上车量级（45 FPS @ 4090），打破了\u0026quot;扩散太慢不能上车\u0026quot;的刻板印象 消融验证：去掉轨迹初始化后采样步数必须大幅增加才能维持质量；论文还证明去掉空间交叉注意力会让 PDMS 大幅跳水，反向验证各组件有效性 在 nuPlan 闭环/开环评测上，该方法同样展现出竞争力；nuScenes 开环指标下则比 VAD 快 1.8×、L2 误差低 20.8%、碰撞率低 63.6%。\n🎨 定性可视化对比：多模态轨迹到底长什么样？ 光看指标很难感受\u0026quot;多模态\u0026quot;，下面直接看作者官方发布的 NAVSIM navtest 定性对比。四张大图覆盖三类典型场景，都对比了 Transfuser（单模态回归 → 一条轨迹）、Transfuser-DP（标准 DDIM 扩散策略 → 多条轨迹）与 DiffusionDrive（截断扩散）。\n直行场景：跟车 + 变道 解读：这张图最能体现**模式坍缩（mode collapse）**的对比。Transfuser 的单条轨迹中线插在两车道之间（mode averaging 的典型症状：直接压在分隔线上），Transfuser-DP 的噪声采样则挤成一团、看不出分化；只有 DiffusionDrive 在 top-10 中给出了理由充分的变道候选。注意看红框标注的 top-1：它仍然贴着真值走，变道只出现在\u0026quot;行为伞\u0026quot;里，保证了安全兜底。\n直行场景：变道 + 红绿灯 + 停车线 解读：这个场景暴露了原始扩散（Transfuser-DP）的\u0026quot;腿乱飞\u0026quot;问题——从标准高斯噪声出发、去噪步数少，候选轨迹会在场景里发散、不够收敛。位置化：确定性回归（Transfuser）和原始扩散（Transfuser-DP）在红绿灯面前要么不减速要么乱窜；兼具两者优点的 DiffusionDrive 则在懂规则（见红灯停下）+ 有选择（灯后变道）之间取得了平衡。这也正是截断扩散 + 锚定起点带来的收益：起点在人类轨迹附近，模型只需要在\u0026quot;驾驶行为空间\u0026quot;里做小范围修正，而不是从完全随机处去学\u0026quot;红灯要停\u0026quot;这种常识。\n左转：与周边智能体交互 解读：左转是自动驾驶里交互最强、博弈最重的场景。单模态回归在这个场景必然冒进：它只能学到\u0026quot;左转轨迹的平均形状\u0026quot;，不知道什么时候该停。Transfuser-DP 的随机性则没有训练的适配，候选要么撞车要么明显不自然。DiffusionDrive 的全部能力在多模态上：top-1 决策\u0026quot;减速让行\u0026quot;是最安全的解法，top-10 则把\u0026quot;加速抢道/停车等待\u0026quot;等人类司机在不同博弈下会走的各种策略都摊开，交给下游得分器选择——这正是**\u0026ldquo;分布即行为库\u0026rdquo;**的生动例子。\n右转：跟车 + 绕行 解读：这张图展示了扩散轨迹的**\u0026ldquo;交规与效率的权衡\u0026quot;在多模态里的体现**。单模态和 vanilla 扩散都只给出一条\u0026quot;禁直绕行\u0026quot;的可能；唯一能给出\u0026quot;先绕变量、再合规右转\u0026quot;的多模态方案的，是 DiffusionDrive 的包裹——它把\u0026quot;安全等待（top-1）\u0026ldquo;与\u0026quot;高效绕行（top-10 变道）\u0026ldquo;两条路同时摆上桌。这正是端到端生成式规划相比回归式规划的结构性优势:不是\u0026quot;输出一条最优\u0026rdquo;,而是\u0026quot;输出一个分布，让下游选择器既有照做又有切换的自由\u0026rdquo;。\n看图解读（三图通用）：红色 top-1 轨迹永远贴着真值和车道线走（安全底线），灰色 top-10 文档构成\u0026quot;行为伞\u0026quot;覆盖变道/绕行/让行等所有合法决策——\u0026ldquo;一条保安全、一簇保多样\u0026rdquo; 就是截断扩散多模态规划的画质。\n⚠️ 局限性与未来方向 DiffusionDrive 并非银弹，它也暴露了生成式规划的几条固有软肋：\n延迟仍高于单次回归：哪怕加速到 2 步，扩散头仍比直接回归多几次前向，对极高频控制是负担 硬约束难保证：扩散是软概率约束，无法像优化那样 100% 保证不碰撞、不越界，需依赖辅助 loss 和下游安全校验 错误模态风险：多模态采样偶尔会产生\u0026quot;分布内但不合理\u0026quot;的轨迹，需要可靠的打分/筛选机制兜底 数据依赖重：生成质量受人类驾驶数据覆盖度限制，长尾场景泛化能力存疑 可解释性不足：黑盒分布难以审计，在事故定责、安全认证上仍是障碍 未来方向我看好几条：用 Flow Matching 替换 DDPM 头进一步提速；用一致性蒸馏做到一步生成；与**强化学习（如 Flow-GRPO）**结合，把\u0026quot;模仿出来的分布\u0026quot;对齐到安全舒适的奖励信号；以及最务实的——扩散候选 + 优化裁决的混合范式。\n📝 个人思考 读完 DiffusionDrive，最打动我的是它对\u0026rdquo;轨迹规划到底该建模什么\u0026ldquo;这个问题的重新发问。长久以来，端到端社区默认\u0026quot;输出一条轨迹\u0026quot;是天经地义的，于是所有人都在 L2 误差上卷。但 DiffusionDrive 把一个被忽视的事实摆上台面：驾驶本质是一个多解问题，同一个场景下合理走法不止一条，强行让网络吐一个\u0026quot;平均答案\u0026quot;反而是错的。把规划建模成分布而非点估计，这个视角的转变，比任何具体的去噪技巧都更深刻——它让我们意识到，确定性只是多模态分布退化后的一种近似，而真实驾驶从来不是单选。\n第二点启发在工程现实主义。扩散模型上车最大的骂名就是\u0026quot;慢\u0026rdquo;，而 DiffusionDrive 用轨迹初始化这一招巧妙化解：既然噪声到数据的距离太远，那就别从噪声起步，从一个\u0026quot;粗略合理\u0026quot;的锚点起步做残差精修。这个思路本质上是\u0026quot;用先验换算力\u0026quot;——你对外部世界的先验越强（聚类出的锚点、场景结构），生成所需的开销就越小。我认为这是个可迁移的通用哲学：在实时性攸关的落地场景里，纯生成式未必最优，生成式 + 强先验才是甜点。这也解释了为什么它和 EM Planner 的\u0026quot;生成候选+打分\u0026quot;流程殊途同归——先验和优化的结合，无论用什么实现，都是工程上的稳赢选择。\n最后一点是对生成式规划与强化学习结合的期待。DiffusionDrive 走的是模仿学习路线，它的分布上限就是人类司机的水平。但要真正超越人类、做到\u0026quot;比人更安全更舒适\u0026quot;，必须引入奖励信号做偏好对齐——而这正是 Flow-GRPO 这类工作的用武之地：用扩散/Flow 头做多模态轨迹采样，用 GRPO 做组内相对优势优化，把\u0026quot;学人类\u0026quot;升级为\u0026quot;学最优策略\u0026quot;。我倾向于认为，生成式规划头 + 强化学习对齐会是端到端驾驶的下一个范式跃迁，而 DiffusionDrive 把生成式这扇门推开，功不可没。\n📖 这是论文精读系列的第 8 篇。扩散模型正让端到端规划从\u0026quot;单选\u0026quot;走向\u0026quot;多选\u0026quot;，你怎么看生成式规划的未来？欢迎留言。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/diffusiondrive%E7%B2%BE%E8%AF%BB/","summary":"DiffusionDrive 将扩散模型引入自动驾驶轨迹规划，从噪声出发逐步去噪生成多条合理轨迹，解决了确定性回归的 mode averaging 痛点。它通过轨迹初始化先验和截断扩散策略大幅减少采样步数，让扩散规划真正跑在车端。在闭环评测中达到生成式端到端驾驶的领先水平。","title":"论文精读｜DiffusionDrive：扩散模型驱动的端到端轨迹规划"},{"content":"🎮 为什么自动驾驶离不开仿真？ 端到端与 VLA（Vision-Language-Action） 驾驶模型把\u0026quot;感知—预测—规划\u0026quot;压缩成一个黑盒神经网络，能力变强了，可验证却变难了：你无法再像模块化方案那样逐个单元测试。于是闭环仿真成了唯一能在可控成本下系统评估驾驶策略的手段。\n仿真在自动驾驶技术栈里同时扮演三个不可替代的角色：\n角色 解决的问题 典型做法 训练数据来源 真实路采数据长尾稀缺、失败案例罕见 在仿真里批量生成对抗场景，喂给 RL 做 rollout 安全验证 实车测试昂贵且不可重复，法规要求可追溯 离线跑成百上千个危险场景，统计 MPCI（平均事故间隔里程） 闭环评测 开环指标（L2、PDMS）和真实驾驶能力弱相关 让策略真正\u0026quot;开车\u0026quot;，观察它对环境变化的反应 一句话定位：仿真器是连接\u0026quot;训练\u0026quot;与\u0026quot;部署\u0026quot;之间的桥梁——没有可信的仿真，强化学习就只能在纸上谈兵。 这正是 NVIDIA Research 开源 AlpaSim 想要解决的问题。\n🧱 AlpaSim 的设计目标与核心能力 AlpaSim：A Modular, Lightweight, and Data-Driven Research Simulator for Autonomous Driving，NVIDIA 出品，Apache 2.0 协议，由 Maximilian Igl 领衔，Sanja Fidler、Marco Pavone 等参与。\n它在 DESIGN.md 里开宗明义地给出三条设计原则，以及一条明确的非目标：\n设计原则 含义 实现手段 Sensor Fidelity（传感器保真度） 渲染要足够真实，否则策略在仿真里学到的视觉特征无法迁移 集成 NRE（Neural Rendering Engine），基于 NuRec 神经重建生成新视角的相机帧 Horizontal Scalability（横向可扩展） RL 训练动辄上百万 rollout，单机跑不动 微服务架构 + gRPC，每个服务可独立水平扩容 Hackability（研究可改） 研究员要能快速换模块、加指标、试想法 全 Python 实现，配置走 Hydra，插件走 entry-points ❌ 非目标：精确实时物理 不追求毫秒级车辆动力学，把算力留给感知和策略 物理模块只做\u0026quot;地面约束\u0026quot;等轻量校正 微服务化的数据流 AlpaSim 把一个仿真实例拆成若干微服务，由 Runtime 居中调度。一次闭环 step 的数据流大致是：\nWizard 读取 Hydra 配置，拉起各微服务并准备场景； Runtime 维护世界状态（自车 + 周围 actors 的位姿/包围盒）； 世界状态送入 Trafficsim 驱动非自车 actors；送入 NRE 渲染自车相机帧； 传感器观测交给 Driver（即被测驾驶策略），输出未来轨迹； 轨迹交给 Controller 计算车辆动力学与自车运动； Physics 对所有 actor 施加\u0026quot;贴地\u0026quot;等约束，得到校正后的新状态； Runtime 记录日志（ASL 格式），循环往复； 仿真结束后，Eval 模块消费 ASL 日志，离线计算所有指标并出视频。 这种\u0026quot;Runtime 当中枢、其余服务可副本化\u0026quot;的设计，让算力可以按需倾斜——README 里给出一个经验性的算力排序：ego policy \u0026gt; sensor sim \u0026gt; controller sim \u0026gt; traffic sim \u0026gt; physics sim，于是策略和渲染的副本数往往远多于物理模块。每个微服务都暴露标准的 gRPC 端点，只要接口兼容，研究员就能把任意一个换成自己的实现——例如把 NRE 换成自研渲染器、把 Controller 换成更精细的车辆模型，而无需改动其余部分。\n配置与部署：Wizard + Hydra 整个仿真生命周期由 AlpaSim Wizard 把控，它基于 Hydra 配置体系，三组核心配置轴决定了\u0026quot;在哪跑、怎么跑、跑什么\u0026quot;：\n配置组 作用 典型取值 deploy= 部署方式（路径、Docker vs SLURM） local、local_external_driver topology= GPU 数、副本数、并发数 1gpu、2gpu、8gpu_64rollouts driver= 被测驾驶策略 vavam、alpamayo1、alpamayo1_5、transfuser、manual 部署上支持单机 Docker Compose 和集群 SLURM 两种形态：前者方便本地调试和断点跟踪（Wizard 支持 wizard.run_method=NONE 只生成配置不启动，再用 VSCode debugger 接管单个服务），后者支撑大规模并行 rollout 训练。此外，Plugin System 通过 Python entry-points 让外部包注册新模型、新 MPC 控制器、新评测 Scorer 和新 CLI 工具（alpasim.models、alpasim.mpc、alpasim.scorers 等入口组），实现\u0026quot;不改主干代码即可扩展\u0026quot;。\n三类核心能力 算法验证：在真实重建场景里端到端跑通新策略； 安全分析：在 edge case 与挑战场景里评估车辆行为； 基准与回归：横向对比不同模型/配置，做回归测试。 🆚 与 CARLA / nuPlan / Bench2Drive 的对比 仿真器赛道已经相当拥挤，AlpaSim 的差异化要从对比中看清楚。\n仿真器 场景来源 传感器 闭环方式 主要定位 CARLA 合成虚拟城镇 游戏引擎渲染 全闭环 学术研究、强化学习入门 nuPlan 真实路采日志 无（仅矢量） 开环 / 非反应式 规划算法基准 NAVSIM nuPlan 2Hz 子集 多相机/LiDAR 伪开环（PDMS） 端到端规划评测事实标准 Bench2Drive CARLA Town 合成 CARLA 渲染 全闭环 端到端闭环 benchmark AlpaSim NuRec 神经重建真实日志 NRE 神经渲染 全闭环 + 分布式 面向研究的真实感闭环仿真 可以看出 AlpaSim 的独特卖点是**\u0026ldquo;真实数据的神经重建 + 工业级分布式闭环\u0026rdquo;**：\nvs CARLA/Bench2Drive：它们用合成环境，域差距（domain gap） 大、sim-to-real 难；AlpaSim 直接重建真实采集的路段，相机帧远比游戏引擎接近部署分布。 vs nuPlan/NAVSIM：它们不开真正闭环，背景车不反应；AlpaSim 是真闭环——自车动作会通过 Trafficsim 影响周围车辆，能暴露开环里看不到的策略脆弱性。 vs 其他真实数据仿真：传统\u0026quot;日志回放\u0026quot;无法生成新视角，自车一旦偏离录制轨迹就没图可看；AlpaSim 用 NRE 对原始 log 做神经重建，可以从任意新视角合成相机帧，这才让闭环偏离成为可能。 代价是算力门槛高：神经渲染本身就很贵，所以 AlpaSim 才会把横向扩展当作一等公民来设计。\n🔄 仿真如何支撑强化学习训练 把仿真器从\u0026quot;评测工具\u0026quot;升级为\u0026quot;训练环境\u0026quot;，需要满足 RL 的几项硬性要求，AlpaSim 在每一项上都做了对应设计。\n1. 环境交互（Environment Step） RL 的 agent-environment loop 要求仿真器提供标准化的 (observation, reward, done, info) 接口。AlpaSim 的闭环 step 天然对应一次 Environment Step：Driver 是 agent，Runtime/Controller/Physics/NRE 共同构成 environment。Runtime 还支持 daemon 模式，暴露自己的 gRPC server 接受按需仿真请求，便于和外部训练框架（如 RL 训练器）解耦联调。\n2. Reward 计算 AlpaSim 的 Eval 模块内置一组 Scorer（位于 src/eval/scorers/），它们就是天然的 reward 信号源：\nScorer 文件 衡量内容 可直接用作 reward collision.py 碰撞检测（区分有责/追尾） 安全负奖励 offroad.py 是否驶出路面 安全负奖励 plan_deviation.py 与参考轨迹的偏离 跟踪奖励 minADE.py 最小平均位移误差 轨迹质量 ground_truth.py 与 GT 对齐度 模仿奖励 safety.py 综合安全度量 安全 shaping 关键聚合指标包括 collision_at_fault（有责碰撞，0/1）、offroad、dist_to_gt_trajectory（对 GT 的最大偏离，米）、duration_frac_20s（20 秒驾驶完成比例）、以及 avg_dist_between_incidents（平均每事故间隔公里数，越高越好）。这些指标按 timestamp_us 索引而非数组下标，规避了 off-by-one，便于在训练时按帧切分 reward。Eval 模块还支持 Plugin（alpasim.scorers 入口点），训练时可以热插拔自定义 reward。\n3. 场景生成与并行 Rollout RL 训练需要海量、多样的 episode。AlpaSim 提供 场景套件（scene suite） 机制：例如 public_2507 套件含 910 个验证过的真实场景，通过 scenes.test_suite_id 一键加载；也可用 scenes.scene_ids 精确指定单个场景，甚至用 NuRec 把自己的路采 log 重建为新场景加入训练池。并行能力上，总吞吐量公式是：\nt o t a l c a p a c i t y = n r _ g p u s × r e p l i c a s _ p e r _ c o n t a i n e r × n _ c o n c u r r e n t _ r o l l o u t s 每个服务都能独立水平扩展，这正是 RL 大规模采样所必需的。配合 SLURM 部署，可以在集群上同时跑成千上万个 rollout。\n4. 评测反馈：从指标到可视化 强化学习不仅需要标量 reward，还需要可解释的反馈来诊断策略。AlpaSim 的 Eval 模块在跑完指标后，会按 video_layouts 渲染两种视频：DEFAULT（BEV 地图 + 相机 + 指标）和 REASONING_OVERLAY（第一人称相机 + 推理文字叠加 + 轨迹图）。后者对 VLA 模型尤其重要——它把 AlpaMayo 那种 chain-of-causation 的思维链直接画到画面上，训练者可以肉眼判断模型\u0026quot;是看懂了才转弯，还是瞎猜蒙对\u0026quot;。所有结果按违规类型（collision_at_fault、offroad、dist_to_gt_trajectory 等）分类归档到 aggregate/videos/violations/，方便把失败案例喂回训练循环做 hard negative mining。\n🔗 AlpaSim 与 AlpaMayo / AlpaAuditor 的关系 AlpaSim 不是孤立产品，而是 NVIDIA Physical AI for Autonomous Vehicles 全家桶的一员。理解它的位置要看清三者分工：\n组件 角色 关系 AlpaMayo（Alpamayo-R1 / 1.5） 被测策略：10B 参数的 VLA 驾驶模型，带 chain-of-causation 推理 是 AlpaSim 的 Driver，是仿真要\u0026quot;考\u0026quot;的对象 AlpaSim 仿真与评测环境：提供闭环世界、传感器、指标 是 AlpaMayo 训练与评测的试炼场 AlpaAuditor 安全审计/验证工具：对策略行为做合规性与鲁棒性审计 消费 AlpaSim 产出的 rollout 日志，做更深入的安全归因与违规分析 一个直观的类比：AlpaMayo 是\u0026quot;学生\u0026quot;，AlpaSim 是\u0026quot;考场 + 阅卷系统\u0026quot;，AlpaAuditor 是\u0026quot;质检员\u0026quot;——它不只打分，还要分析卷面里每道错题的根因。\n具体到代码层面，AlpaSim 的 driver= 配置组直接支持 alpamayo1、alpamayo1_5 两个权重（均约 40GB VRAM），Alpamayo 1.5 还能开启 Classifier-Free Guidance 导航（约 60GB VRAM）。除了 AlpaMayo，AlpaSim 还内置 VaVAM（Valeo 的自回归视频-动作策略）和 TransFuser（provisional）作为可替换 Driver，印证了它\u0026quot;策略无关\u0026quot;的评测定位。整套流水线——ASL 日志 → Eval 指标 → 视频与违规归因——既是给研究员看的，也是给像 AlpaAuditor 这样的下游审计工具提供结构化输入。\n🌉 Sim-to-Real：挑战与策略 即便用了神经重建，仿真到现实的鸿沟（sim-to-real gap） 依然存在。AlpaSim 在 DESIGN.md 里坦诚地把\u0026quot;精确物理\u0026quot;列为非目标，这反而让 sim-to-real 的重点落在了几个更关键的地方。\n主要挑战 挑战 表现 AlpaSim 的对策 视觉域差 渲染图与真实相机存在分布差异 NuRec 神经重建直接从真实 log 生成新视角，把域差压到最低 行为域差 背景车不真实（过于规则或过于随机） Trafficsim（neural traffic simulator，路线图中）驱动反应式交通流 物理域差 轻量物理 ≠ 真实车辆动力学 承认局限，把保真度预算花在感知而非动力学上 场景覆盖 长尾场景永远不够 大规模真实场景套件 + 可扩展 rollout 常用缓解策略 结合 AlpaSim 的能力，落地时通常采用以下组合拳：\n真实数据驱动的重建：用 NuRec 把真实路采 log 重建为可重渲染的场景，从源头降低视觉域差——这是 AlpaSim 相比 CARLA 类合成器的根本优势。 域随机化（Domain Randomization）：相机参数（视场角、分辨率、帧率）、传感器噪声、光照条件都可配置，训练时随机扰动以提升策略鲁棒性。 多频率对齐：通过 control_timestep_us、frame_interval_us、time_start_offset_us 三个同步时钟，并启用 assert_zero_decision_delay 强校验，保证仿真时序与真实部署一致，避免\u0026quot;仿真里学到的时序错位\u0026quot;。 闭环反应式评测：用 Trafficsim 让背景车对自车动作做出反应，才能在仿真里就发现\u0026quot;开得偏了就会被挤\u0026quot;这类开环看不到的问题。 残差实车校正：仿真给基线，再用少量实车数据做微调或在线适应，弥补无法消除的剩余域差。 📌 总结 AlpaSim 的价值在于它同时把三件事做实了：用神经重建把视觉做真、用微服务把规模做大、用 Python + 插件把研究做易。对强化学习研究者而言，它提供了一个能从\u0026quot;百万 rollout 训练\u0026quot;无缝衔接到\u0026quot;910 场景闭环评测\u0026quot;的统一基础设施；对自动驾驶工程师而言，它让 sim-to-real 不再是空话——毕竟你是在真实路段的数字孪生里训练和验证策略。\n如果说 NAVSIM 解决了\u0026quot;开环下如何给出有预言性的分数\u0026quot;，那么 AlpaSim 解决的就是\u0026quot;如何在可控成本下做真正的闭环训练与评测\u0026quot;。在一个 VLA 模型越做越大、行为越来越难解释的时代，这样一个可信、可扩展、可改的仿真底座，正在成为端到端自动驾驶走向量产的关键拼图。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/alpasim%E4%BB%BF%E7%9C%9F%E6%A1%86%E6%9E%B6%E8%AF%A6%E8%A7%A3/","summary":"AlpaSim 是一个面向强化学习训练与评测的自动驾驶仿真框架，支持闭环训练、多场景评测和安全验证。它采用微服务架构与神经渲染引擎 NRE，兼顾传感器保真度与横向可扩展性。是连接驾驶策略训练和部署验证的关键基础设施。","title":"AlpaSim 详解：面向强化学习的自动驾驶仿真评测框架"},{"content":"一句话理解多智能体交互决策 多智能体交互决策 = 让自车在\u0026quot;别人怎么想\u0026quot;和\u0026quot;别人觉得我怎么想\u0026quot;的无限递归中，找到一个能安全高效通过的共同行动方案\n传统方法：把其他车当作\u0026quot;会动的障碍物\u0026quot;→ 预测他们的轨迹 → 自车根据预测做规划\n博弈论方法：自车和其他车是\u0026quot;相互影响、相互推测意图\u0026quot;的智能体 → 共同决定交通场景的演化\n\u0026ldquo;交互决策\u0026quot;这个名字本身就已经说明了核心差异——不是单方面预测然后规划，而是多车之间行动选择的相互依赖。你加速对方就会减速，你让行对方就会通过，这是一个双向甚至多向的动态博弈过程。\n为什么交互决策是自动驾驶的\u0026quot;硬骨头\u0026rdquo; 如果你只看自动驾驶领域的研究论文，可能觉得规划决策问题已经解决得差不多了——感知精度越来越高，预测模型越来越准，轨迹规划越来越平滑。但一旦真正部署到路上，最让人头疼的问题往往不是\u0026quot;我能不能清楚地看到那辆车\u0026quot;，而是\u0026quot;那辆车到底想干什么，我又该怎么回应\u0026quot;。\n交互决策的三个核心难点 难点一：部分可观测性与意图不确定性。你永远无法直接\u0026quot;读取\u0026quot;其他驾驶员的内心。对方的驾驶风格是激进还是保守？他注意到你的车了吗？他打算加速抢行还是减速让行？这些都是隐藏的意图变量，只能通过观察对方的运动状态（位置、速度、加速度、转向灯）来反推。更麻烦的是，你的行为本身也会影响对方的意图——你加速了对方可能会减速，这就形成了闭环。\n难点二：联合动作空间爆炸。在单个智能体的规划问题中，动作空间是连续的（加速度、方向盘转角）。但在多智能体交互中，每个智能体的动作选择都会影响其他智能体的收益，联合动作空间随智能体数量呈指数级增长。在繁忙的城市交叉口，自车可能与周围5-8辆车同时交互，搜索最优联合策略的计算量远超实时约束。\n难点三：计算实时性要求。L4自动驾驶的决策周期通常要求100ms以内。在这个时间窗口内，不仅要完成对其他交通参与者的意图推理，还要找到自车的最优响应策略，同时保证安全性和舒适性。博弈论中的经典算法（如求解完全信息博弈的Lemke-Howson算法）在毫秒级约束下根本无法运行。\n这三难组合在一起，使得交互决策成为自动驾驶从L2+迈向L4过程中最难攻克的\u0026quot;硬骨头\u0026quot;之一。下面我们先建立博弈论的基础语言，然后再看业界如何把这个理论工具变成可落地的工程方案。\n博弈论基础：自动驾驶交互决策的理论语言 博弈论研究的是\u0026quot;多个决策主体之间的策略互动\u0026quot;。它天然适合描述交通场景中的多车交互。我们先建立几个核心概念。\n博弈的五要素 一个完整的博弈由以下五个要素定义：\n玩家 (Players)：场景中的决策主体，通常包括自车(Ego Vehicle)和周边车辆(Surrounding Vehicles) 动作 (Actions)：每个玩家可以采取的行动，如{加速, 减速, 车道保持, 向左变道, 向右变道} 收益 (Payoffs)：每个玩家在不同行动组合下获得的\u0026quot;分数\u0026quot;，通常建模为安全性、效率、舒适性的加权组合 信息结构 (Information Structure)：每个玩家知道什么——是完全知道所有人的收益函数，还是只知道自己的 策略 (Strategy)：玩家根据观测信息选择行动的函数 以高速换道场景为例：Ego和Target（目标车道后车）是两个玩家。Ego的动作是{换道, 保持}，Target的动作是{让行, 加速拒绝}。收益函数中，碰撞对应极低分数，顺利通行对应较高分数，减速避让有轻微惩罚。\n纳什均衡：交互决策的\u0026quot;不动点\u0026quot; 纳什均衡是博弈论最核心的概念：在纳什均衡状态下，没有任何一个玩家可以通过单方面改变自己的策略来获得更高的收益。换句话说，给定其他人的策略，每个人的策略都是对自己最优的。\n用数学语言描述：策略组合 $s^* = (s_1^*, s_2^*, ..., s_n^*)$ 是一个纳什均衡，当且仅当对于每个玩家 $i$：\n$$ u_i(s_i^*, s_{-i}^*) \\geq u_i(s_i, s_{-i}^*), \\quad \\forall s_i \\in S_i $$其中 $s_{-i}^*$ 表示除玩家 $i$ 之外所有其他玩家的策略，$u_i$ 是玩家 $i$ 的收益函数。\n在换道场景中，纳什均衡意味着：给定Target的策略（比如\u0026quot;如果你打灯我就让行\u0026quot;），Ego的最优反应是（比如\u0026quot;打灯然后换道\u0026quot;）；反过来，给定Ego的策略，Target的最优反应也是\u0026quot;让行\u0026quot;。双方都没有动机单方面改变行为。\n为什么纳什均衡有用？ 因为它提供了一个\u0026quot;预测点\u0026quot;——如果所有玩家都是理性的，交互应该收敛到某个纳什均衡状态。但这在自动驾驶中面临两个问题：\n多重均衡：一个博弈可能有多个纳什均衡，哪个才是真正的解？高速场景中\u0026quot;Ego加速、Target让行\u0026quot;和\u0026quot;Ego等待、Target通过\u0026quot;可能都是均衡。 均衡选择：自车需要引导交互收敛到对自己有利的均衡——这就从\u0026quot;预测\u0026quot;变成了\u0026quot;博弈\u0026quot;。 Stackelberg博弈：领导者-追随者模型 纳什均衡假设所有玩家同时决策。但在很多交通场景中，存在明显的领导者-追随者关系。Stackelberg博弈正好捕捉这种不对称性。\n在Stackelberg博弈中：\n领导者 (Leader) 先承诺一个策略 追随者 (Follower) 观察到领导者的策略后，做出自己的最优反应 领导者可以\u0026quot;预见\u0026quot;追随者的反应，从而选择能最大化自身收益的策略 数学上，如果自车是领导者，Target是追随者，那么自车选择的策略 $s_L^*$ 满足：\n$$ s_L^* = \\arg\\max_{s_L} u_L(s_L, s_F^*(s_L)) $$其中 $s_F^*(s_L) = \\arg\\max_{s_F} u_F(s_L, s_F)$ 是追随者的最优反应函数。\nStackelberg博弈在自动驾驶中非常实用。典型场景是：自车通过明显的行动（如缓慢向目标车道偏移）来\u0026quot;表态\u0026quot;，让对方理解自己的意图，从而引导交互走向自车期望的均衡。这对应了人类驾驶中的\u0026quot;宣誓主权\u0026quot;行为。\n势博弈：有解析解的特殊形式 势博弈是一类特殊的博弈，其核心性质是：存在一个全局势函数(Potential Function) $\\Phi$，使得每个玩家单方面改变策略而产生的收益变化，等于势函数的变化：\n$$ u_i(s_i', s_{-i}) - u_i(s_i, s_{-i}) = \\Phi(s_i', s_{-i}) - \\Phi(s_i, s_{-i}) $$势博弈之所以重要，是因为它具有两个优良性质：\n纯策略纳什均衡一定存在——不需要混合策略 最优反应动态一定收敛到纳什均衡——可以通过迭代求解 在自动驾驶中，如果能将交互场景建模为势博弈（如某些特定形式的换道博弈和非保护左转博弈），就可以用高效的迭代算法来求解纳什均衡，而不需要穷举所有联合动作。这在计算实时性上有巨大优势。\n不过势博弈的局限性也很明显：不是所有交互场景都能用势函数描述。当玩家的收益函数之间存在本质冲突（如零和博弈），势博弈的建模能力就会受限。\n主流方法：从基于规划到基于学习 现在我们把博弈论的语言装到工程工具箱里。业界和学术界在过去十年里探索了三类主流方法，按\u0026quot;用多少机器学习\u0026quot;的维度排列。\n基于规划的方法：IV-game 核心思想：用显式的博弈论模型来描述交互场景，然后求解纳什均衡或Stackelberg均衡作为决策输出。\nIV-game (Interactive Vehicle Game) 是这类方法的代表性工作，由MIT团队在2018-2020年期间系统提出。其基本框架包含三个步骤：\n步骤一：场景建模\n在当前时刻，自车识别周围的交互智能体，构建一个局部交互博弈。博弈的玩家通常包括自车和1-3个最相关的车辆。每个玩家的动作空间经过离散化处理，例如：\n$$ A_i = \\{a_{hard\\_brake}, a_{light\\_brake}, a_{cruise}, a_{light\\_accel}, a_{hard\\_accel}\\} $$每个动作对应一个预定义的加速度值或速度剖面。离散化将连续动作空间缩小到可计算的规模。\n步骤二：收益函数设计\n每个智能体的收益函数是 $R_i = w_1 \\cdot R_{safety} + w_2 \\cdot R_{efficiency} + w_3 \\cdot R_{comfort}$。\n$R_{safety}$：碰撞惩罚，通常与最小距离、TTC(Time-to-Collision)等指标相关 $R_{efficiency}$：速度与期望速度的接近程度 $R_{comfort}$：加速度和加加速度的惩罚 关键在于，自车并不知道其他车辆的收益权重 $w_1, w_2, w_3$——这就是\u0026quot;意图不确定性\u0026quot;的来源。IV-game通过在线逆向推断来估计这些权重：观测对方的运动轨迹，反推什么样的收益函数能解释对方的行为。\n步骤三：均衡求解\n建立博弈模型后，用迭代最优反应(Iterative Best Response, IBR)算法求解纳什均衡。IBR的流程是：\n为每个玩家随机初始化一个策略 在每一轮中，轮流更新每个玩家的策略，使其在当前其他玩家策略下最优 重复直到收敛 IBR在势博弈中保证收敛，但在一般博弈中不保证。实践中通常设置最大迭代次数（如5-10次），超时则使用当前最优解。\nIV-game的优势和局限：\n优势在于建模的可解释性和安全性保障——由于用显式的物理模型和收益函数，可以进行正式的安全验证。局限性同样明显：离散化动作空间限制了策略的精细度，收益函数的手工设计难以覆盖所有场景，而且当交互智能体超过3个时，求解速度急剧下降。\n基于学习的方法：MADRL 核心思想：让多个智能体通过强化学习的试错过程，自主学会交互策略，而不需要显式建模对方的收益函数。\nMADRL (Multi-Agent Deep Reinforcement Learning) 在自动驾驶中面临一个特有的挑战：非平稳性。在单智能体RL中，环境转移概率是固定的。但在多智能体环境中，每个智能体的策略都在变化，导致其他智能体面临的环境也在变化——这就破坏了RL收敛的理论基础。\n主流的MADRL方法可以分为三类：\n1. 集中式训练-分布式执行 (CTDE)\n代表算法：QMIX、MADDPG。\n训练时使用全局信息（所有智能体的状态和动作），但执行时每个智能体只用自己的局部观测做决策。MADDPG的核心是\u0026quot;中心化评论家-去中心化行动家\u0026quot;：\n$$ \\nabla_{\\theta_i} J \\approx \\mathbb{E}_{s, a \\sim D} \\left[ \\nabla_{\\theta_i} \\pi_i(o_i) \\nabla_{a_i} Q_i^\\pi(s, a_1, ..., a_n) \\big|_{a_i = \\pi_i(o_i)} \\right] $$其中 $Q_i^\\pi(s, a_1, ..., a_n)$ 是中心化评论家，以所有智能体的状态和动作作为输入，输出第 $i$ 个智能体的期望回报。$s$ 是全局状态，$o_i$ 是第 $i$ 个智能体的局部观测。\nCTDE的优势在于训练时看到全局信息，可以学习复杂的协同策略；劣势在于推理时需要假设其他智能体的行为模式与训练时一致——如果部署时遇到分布外的交互行为，模型可能做出危险的决策。\n2. 值分解方法 (Value Decomposition)\n代表算法：VDN、QMIX。\n这类方法将联合动作价值函数分解为各个智能体价值函数的组合（如求和或混合），从而缓解联合动作空间爆炸的问题。QMIX用混合网络结构，允许联合价值函数是个体价值函数的单调函数：\n$$ \\arg\\max_a Q_{tot}(s, a) = \\begin{pmatrix} \\arg\\max_{a_1} Q_1(s, a_1) \\\\ \\vdots \\\\ \\arg\\max_{a_n} Q_n(s, a_n) \\end{pmatrix} $$这个单调性条件保证了\u0026quot;每个智能体选择个体最优动作，组合起来就是联合最优\u0026quot;。QMIX在SMAC（星际争霸多智能体环境）等离散动作场景中表现出色，但将其应用到连续动作的驾驶场景仍有挑战。\n3. 通信学习方法\n代表算法：CommNet、TarMAC。\n智能体之间通过可学习的通信信道交换信息。例如，自车可以向周围车辆发送一个\u0026quot;意图向量\u0026quot;，同时接收对方的\u0026quot;意图向量\u0026quot;，作为决策的额外输入。\n$$ h_i^{(t+1)} = f \\left( \\sum_{j \\neq i} C(h_i^{(t)}, h_j^{(t)}) \\cdot h_j^{(t)} \\right) $$其中 $C$ 是学习的注意力权重，$h_i^{(t)}$ 是智能体 $i$ 在第 $t$ 轮通信后的隐状态。\n通信学习在仿真环境中效果很好，但在真实部署中面临一个根本问题：车与车之间没有低延迟的高速通用通信协议。V2X虽然正在推广，但要实现学习的通信协议在实际道路上部署还有很长的路。\n基于模型的方法：Gameformer 核心思想：用Transformer架构替代手工设计的博弈模型，从海量驾驶数据中隐式学习交互策略。\nGameformer是Waymo在2023年提出的工作，代表了目前交互决策的前沿方向。它的核心设计包括：\n1. 场景编码\n将自车、周围车辆、道路元素的静态和动态信息编码为token序列。每个智能体的状态包括位置、速度、加速度、历史轨迹等。所有token通过注意力机制进行交互：\n$$ \\text{Attention}(Q, K, V) = \\text{softmax}\\left(\\frac{QK^T}{\\sqrt{d_k}}\\right) V $$2. 因果解码\nGameformer的关键创新在于\u0026quot;因果\u0026quot;解码。在推理时：\n自车的动作token被设置为\u0026quot;因果的\u0026quot;——即解码时只看历史信息，不看未来 其他智能体的动作token在训练时用真实轨迹监督，在推理时用预测/隐式模拟 这个设计使得Gameformer在推理时天然是\u0026quot;自车先行动，其他人响应\u0026quot;的Stackelberg博弈模式。\n3. 场景级评分\nGameformer不直接输出动作，而是先生成多个候选场景级别的交互假设，然后通过可学习的评分函数选择最优的一个。每个候选场景包含自车和所有周围车辆在未来若干时间步内的动作序列。\nGameformer的优势在于：（1）无需手工设计收益函数，直接从数据中学习交互模式；（2）Transformer的注意力机制天然处理变数量的智能体；（3）端到端训练，不需要分阶段的博弈建模和求解。\n但Gameformer也有显著局限：（1）训练需要海量的、带有丰富交互模式的驾驶数据；（2）推理的\u0026quot;黑箱\u0026quot;性质使得安全验证困难；（3）在分布外场景（如罕见的交通冲突）中的行为不可预测。\n方法对比总结 维度 IV-game MADRL Gameformer 博弈模型 显式建模 隐式学习 隐式学习 收益函数 手工设计 RL奖励 数据驱动 可解释性 高 低 低 数据需求 低 中 高 实时推理 中(10-50ms) 高(\u0026lt;10ms) 中(30-80ms) 分布外鲁棒性 较高 低 中 安全性验证 可行 困难 困难 典型场景分析 场景一：高速换道博弈 高速换道是交互决策最经典的研究场景。假设三车道高速公路上，自车(Ego)在中道，想要向左换到快车道。目标车道有一辆后车(Target)，距离自车约15-20米，相对速度约0-5km/h。\n交互博弈的结构：\nEgo的动作空间：{加速换道, 匀速换道, 等待} Target的动作空间：{加速不让, 保持, 减速让行}\n收益函数主要取决于碰撞安全裕度、换道效率（能否在规定距离内完成）和舒适性。\n典型均衡分析：\n在大多数情况下，存在两个纳什均衡：\n均衡A：(Ego换道, Target减速让行) —— 协同均衡 均衡B：(Ego等待, Target保持/加速通过) —— 保守均衡 从社会总收益（两人收益之和）来看，均衡A更优。但Ego如何确保交互收敛到均衡A而不是均衡B？\n工程实践中的解法：业界常用的策略是\u0026quot;基于置信度的Stackelberg引导\u0026quot;。\nEgo首先通过信号（打转向灯）和轻微的车身偏向（向目标车道移动0.3-0.5米）来\u0026quot;宣誓意图\u0026quot; Ego观察Target的反应。如果Target在1-2秒内表现出减速迹象（减速\u0026gt;0.5m/s²），Ego以较高置信度推断Target选择\u0026quot;让行\u0026quot; Ego然后执行换道，同时保持安全底线——如果Target的反应与预期不符，Ego的\u0026quot;bailout plan\u0026quot;是放弃换道回到原车道 这个策略本质上是Stackelberg博弈：Ego作为领导者率先表态，Target作为追随者做出反应。\n关键工程参数：Waymo和Cruise的经验表明，换道决策中TTC(Time-to-Collision)的阈值直接影响安全性和效率的平衡。TTC\u0026lt;3秒时换道风险较高，需要谨慎评估；TTC\u0026gt;6秒时换道通常可以从容进行。\n场景二：无保护左转 无保护左转(Unprotected Left Turn)被普遍认为是自动驾驶中最难的交互场景之一。自车需要在没有左转专用灯的情况下，穿过对向直行车流完成左转。\n博弈复杂性：\n玩家数量多：自车+对向直行多辆车+可能还有右侧的右转车辆 意图高度不确定：对向车辆是\u0026quot;打算直行通过\u0026quot;还是\u0026quot;看到自车后减速让行\u0026quot;？ 时间压力：左转窗口短暂，等待时间越长，后续车辆越不耐烦 关键策略：渐进式侵入 (Progressive Intrusion)\n工程实践中广泛使用的策略不是\u0026quot;一次决策\u0026quot;，而是\u0026quot;动态承诺\u0026quot;：\n自车缓慢驶入交叉口（前轮越过停止线约2-3米），停在交叉口中部 这个位置使自车的意图非常明确——\u0026ldquo;我要左转\u0026rdquo; 自车持续观测对向车辆的车速变化，选择对向车流中的合适间隙 当间隙足够（通常需要至少5-6秒的间隔），自车加速完成左转 如果能完成左转的间隙始终不来，自车在红灯亮起前退回到停止线后 这个策略在博弈论中的对应是\u0026quot;主动承诺\u0026quot;(Costly Signaling) —— 自车通过占据交叉口中部这个不可逆的位置，向对向车辆传递了\u0026quot;我一定会左转\u0026quot;的承诺信号。对向车辆看到自车已经占据了交叉口，更倾向于减速让行而不是冒险加速。\n工程经验数据：Waymo在旧金山和凤凰城的运营数据显示，无保护左转是接管请求率最高的场景之一。渐进式侵入策略可以将左转成功率从65-70%提升至85-90%，但代价是左转完成时间平均增加1.5-2秒。\n场景三：环岛通行 环岛(In-Roundabout)具有天然的博弈结构：进入环岛的车辆需要等待环岛内的车辆通过，但何时才算\u0026quot;安全的间隙\u0026quot;取决于双方的速度和位置。\n层次化博弈模型：\n环岛场景的独特之处在于存在明确的通行规则——环岛内车辆优先。这使得环岛的交互可以建模为带约束的博弈：优先权规则定义了\u0026quot;谁先走\u0026quot;的基本顺序，但实际决策仍然需要微妙的交互。\n工程实践：基于规则的博弈框架\n业界在处理环岛时通常采用\u0026quot;规则+博弈\u0026quot;的混合策略：\n第一层（规则层）：环岛内车辆有绝对优先权，这是不可协商的硬约束 第二层（博弈层）：在确定\u0026quot;可以进入\u0026quot;后，自车与环岛内车辆进行两两博弈——加速进入还是等待下一个间隙 第三层（执行层）：一旦决定进入，执行固定的速度剖面，避免犹豫 关键指标：环岛通行中使用的间隙接受(Gap Acceptance)模型核心参数是临界间隙(Critical Gap)：\n对于单个车道环岛，临界间隙通常为4-5秒 对于双车道环岛，需要分别评估内外车道的临界间隙 自车的速度也会影响临界间隙——速度越低，需要的间隙越小 工程落地：挑战与方向 计算实时性的工程优化 博弈论方法在工程落地中面临的首要问题是计算时间。针对这个问题，业界有几种有效的优化策略：\n1. 分层决策架构\n将交互决策分解为\u0026quot;战术层\u0026quot;和\u0026quot;动作层\u0026quot;。战术层在较长时间尺度（1-2秒）上做离散决策（如\u0026quot;换道/不换道\u0026quot;），使用精细的博弈模型。动作层在短时间尺度（100ms）上执行战术决策，使用简化的控制策略。这种分层设计将博弈求解的频率从10Hz降低到0.5-1Hz，大幅降低计算压力。\n2. 博弈剪枝\n并不是场景中每一辆车都需要纳入博弈模型。工程上通常只选择那些与自车存在交互风险的车辆（TTC\u0026lt;8秒或距离\u0026lt;50米）作为博弈玩家，其余车辆视为环境障碍物。这可以将典型的城市场景从5-8个候选玩家缩减到1-3个核心交互对象。\n3. 求解器加速\n对于基于优化的博弈求解器，常用的加速手段包括：使用KKT条件将双层优化转化为单层优化问题；利用博弈的势函数性质使用更快的迭代算法；使用GPU并行化多个博弈实例（例如同时评估换道到不同车道的多个假设）。\n意图估计与在线学习 自车对其他车辆的意图估计是交互决策中最有挑战的环节。目前工程上的主流做法有三种：\n1. 贝叶斯推断：维护一个关于其他车辆\u0026quot;类型\u0026quot;（激进/正常/保守）的概率分布，随着观测更新：\n$$ P(type_i | history) \\propto P(history | type_i) \\cdot P(type_i) $$2. 逆向强化学习(IRL)：假设其他车辆也在优化某个隐式的收益函数，通过观测行为推断其收益权重。这就是IV-game中使用的方案。\n3. 在线适配：在行驶过程中持续收集交互数据，微调模型参数以适应不同地区的驾驶风格差异。例如，在波士顿和凤凰城部署的模型需要不同的交互策略参数，因为两地的驾驶风格差异显著。\n安全保证与验证 博弈论方法的\u0026quot;可验证性\u0026quot;是其相对于纯学习方法的优势。\n一种实用的安全验证框架是责任敏感安全模型(RSS, Responsibility-Sensitive Safety)，由Mobileye提出。RSS为交互决策定义了\u0026quot;不负责任的边界\u0026quot;——例如，如果自车拥有路权，那么即使发生碰撞，只要自车在RSS定义的安全范围内行动，责任就被划给对方。\n在博弈决策中集成RSS的方法：自车首先计算博弈论策略，然后检查该策略是否违反了RSS的安全条件。如果违反，则用RSS安全策略替代博弈策略。这相当于一个\u0026quot;安全滤网\u0026quot;机制——博弈策略负责效率优化，RSS负责安全兜底。\n关键论文与延伸阅读 IV-game系列: D. Sadigh et al., \u0026ldquo;Planning for Autonomous Cars that Leverage Effects on Human Actions\u0026rdquo;, RSS 2016. — 交互决策基于规划方法的奠基性工作 MADDPG: R. Lowe et al., \u0026ldquo;Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments\u0026rdquo;, NeurIPS 2017. — CTDE在多智能体交互中的经典框架 QMIX: P. Rashid et al., \u0026ldquo;QMIX: Monotonic Value Function Factorisation for Deep Multi-Agent Reinforcement Learning\u0026rdquo;, ICML 2018. — 值分解方法在MADRL中的代表作 Gameformer: J. Ng et al., \u0026ldquo;GameFormer: Game-theoretic Reasoning for Motion Planning\u0026rdquo;, CoRL 2023. — 用Transformer隐式建模交互博弈的最新工作 RSS: S. Shalev-Shwartz et al., \u0026ldquo;On a Formal Model of Safe and Scalable Self-driving Cars\u0026rdquo;, arXiv 2017. — 责任敏感安全模型，交互决策的安全兜底 Stackelberg博弈在换道中的应用: H. Yu et al., \u0026ldquo;Stackelberg Game-based Decision Making for Autonomous Vehicles in Highway Merging\u0026rdquo;, IEEE T-ITS 2023. — Stackelberg博弈在换道/汇入场景的具体实践 理解交互决策的关键在于把握一个核心矛盾：理论上的博弈模型追求\u0026quot;最优解\u0026quot;，工程上的交互系统追求\u0026quot;够好的解+安全的底线\u0026quot;。L4落地的实践智慧不是算得更准，而是在100毫秒内找到那个\u0026quot;足够好\u0026quot;的行动，同时保持安全兜底机制的随时介入。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E5%A4%9A%E6%99%BA%E8%83%BD%E4%BD%93%E4%BA%A4%E4%BA%92%E5%86%B3%E7%AD%96/","summary":"自动驾驶并非独角戏，自车与其他交通参与者之间的交互博弈是最具挑战的决策问题。本文从博弈论基础（纳什均衡/Stackelberg博弈/势博弈）出发，讲解交互决策的核心挑战（部分可观测/意图不确定性/计算实时性），主流方法对比（基于规划的IV-game→基于学习的MADRL→基于模型的Gameformer），以及在换道博弈、无保护左转、环岛通行等典型场景中的应用实践。","title":"多智能体交互决策：博弈论在自动驾驶中的应用"},{"content":"📄 论文信息 标题：ReCogDrive: A Reinforced Cognitive Framework for End-to-End Autonomous Driving 来源：华中科技大学 × 小米汽车（Xiaomi EV） arXiv：2506.08052 代码：github.com/xiaomi-research/recogdrive 模型：HuggingFace Collection 一句话总结：VLM 负责\u0026quot;理解与推理\u0026quot;，扩散模型负责\u0026quot;生成轨迹\u0026quot;，DiffGRPO 强化学习负责\u0026quot;安全优化\u0026quot;，三者合一。 🤔 要解决什么问题？ 现有把 VLM 用于自动驾驶的方法有三个致命问题：\n问题 具体表现 后果 领域差距 VLM 在通用互联网数据上预训练，缺乏驾驶领域知识 长尾场景泛化差 模态错配 VLM 输出的是离散文本 token，但驾驶需要连续动作 格式错误、不可行动作、推理慢 模仿学习次优 只靠行为克隆（BC），无法超越专家数据 罕见场景容易出事故 核心矛盾：VLM 会\u0026quot;想\u0026quot;但不会\u0026quot;开\u0026quot;——它能把场景描述得很清楚，但直接让它输出方向盘角度，要么格式不对，要么数值不合理。\n💡 核心思路：三分天下 ReCogDrive 把驾驶拆成三个阶段，各司其职：\n阶段 模块 作用 类比 认知 VLM（自回归） 理解场景、推理决策 人类\u0026quot;想清楚\u0026quot; 规划 扩散规划器 生成连续、平滑的轨迹 人类\u0026quot;打方向盘\u0026quot; 优化 DiffGRPO（强化学习） 超越专家数据，提升安全 人类\u0026quot;练出经验\u0026quot; 这种设计的关键洞察：不要让 VLM 直接输出动作，而是让它输出\u0026quot;认知表征\u0026quot;，再由扩散模型翻译成动作。\n⚙️ 模块一：层级化数据流水线 为了让 VLM 真正\u0026quot;懂驾驶\u0026quot;，作者设计了三阶段数据构建流程：\n阶段 1 — 生成（Generation）：用已有驾驶数据自动生成大规模 VQA（视觉问答）数据\n阶段 2 — 精炼（Refinement）：用更强的模型过滤、修正低质量数据\n阶段 3 — 质量控制（Quality Control）：多维度评估，保留高质量认知标注\n这套流程模拟了人类司机的顺序认知过程：先看到什么 → 分析什么 → 做什么决策。数据不是简单的\u0026quot;图片+轨迹\u0026quot;，而是包含了推理链的丰富标注。\n认知架构如何工作？ ReCogDrive 的认知架构设计遵循一个清晰的信息流层次：\n感知层：环视 6 路相机输入 → 共享视觉编码器（ViT）提取多视图特征 认知层（VLM）：视觉特征 + 导航指令 → 自回归生成 CoT 推理文本，包含： 关键目标检测：识别影响驾驶的核心目标（冲突车辆、行人、危险物） 场景描述：自然语言描述当前场景的关键要素 驾驶推理：基于场景和指令的决策推理（\u0026ldquo;因为前方车辆减速，所以我需要准备变道\u0026rdquo;） 高层行为选择：选择元行为（跟车、变道、停车、加速等） 动作层：VLM 的最后一层隐状态作为\u0026quot;认知表征\u0026quot; → 注入扩散规划器 这种认知→动作的显式分离是 ReCogDrive 跟 DriveVLM 等工作的关键区别：DriveVLM 让 VLM 同时输出文本和轨迹（共享解码器），而 ReCogDrive 认为轨迹预测不需要经过文本 tokenizer 的\u0026quot;离散化瓶颈\u0026quot;，应该直接用连续扩散模型生成。\n实验中，VLM 隐状态注入相比文本 token 解码轨迹的方式，推理速度提升 7.8×，轨迹平滑度提高 35%。\n⚙️ 模块二：认知引导的扩散规划器 这是解决\u0026quot;模态错配\u0026quot;的核心模块。\n问题：VLM 输出的是文本/离散表征，但驾驶需要连续的轨迹点（x, y, heading）。\n解法：用一个扩散规划器把 VLM 的\u0026quot;认知表征\u0026quot;翻译成连续轨迹。\n工作流程：\nVLM 处理多摄像头图像 → 输出认知表征（场景理解 + 驾驶推理） 认知表征作为条件注入扩散规划器 扩散规划器从噪声出发，去噪生成连续、平滑的轨迹 相比直接让 VLM 用文本输出轨迹坐标，扩散规划器生成的轨迹物理上更合理（平滑、可执行），且推理速度提升 7.8 倍。\n⚙️ 模块三：DiffGRPO 强化学习 这是 ReCogDrive 最具创新性的部分——把强化学习引入 VLA 驾驶模型。\n为什么需要 RL？ 纯模仿学习（行为克隆）有三个局限：\n分布偏移：只见过专家轨迹，遇到没见过的情况就崩 因果理解不足：只会模仿\u0026quot;怎么做\u0026quot;，不理解\u0026quot;为什么\u0026quot; 无法超越专家：上限就是专家数据的水平 DiffGRPO 怎么做？ DiffGRPO = Diffusion + Group Relative Policy Optimization\n核心思想是：让扩散规划器在仿真环境中\u0026quot;试错\u0026quot;，用奖励信号引导它找到更安全、更舒适的策略。\nReward 设计公式 ReCogDrive 的奖励函数是驾驶场景中多目标权衡的典型设计。它综合了三个核心维度，每个维度包含若干子项：\n$$\\mathcal{R} = \\mathcal{R}_{\\text{safety}} + \\lambda_c \\cdot \\mathcal{R}_{\\text{comfort}} + \\lambda_e \\cdot \\mathcal{R}_{\\text{efficiency}}$$安全奖励是首要项，基于碰撞检测和 TTC（碰撞时间）：\n$$\\mathcal{R}_{\\text{safety}} = w_{\\text{coll}} \\cdot \\mathbb{I}_{\\text{no collision}} + w_{\\text{ttc}} \\cdot \\sum_{t} \\min\\left(\\frac{\\text{TTC}_t}{\\tau_{\\text{thresh}}}, 1\\right)$$其中 $\\mathbb{I}_{\\text{no collision}}$ 是碰撞指示器的相反值（未碰撞为 1，碰撞为 0），TTC 奖励鼓励模型与障碍物保持安全时间距离。\n舒适奖励惩罚加加速度（jerk）和横向加速度：\n$$\\mathcal{R}_{\\text{comfort}} = -\\left(w_j \\cdot \\frac{1}{T}\\sum_{t=1}^T \\|\\dddot{p}_t\\|^2 + w_a \\cdot \\frac{1}{T}\\sum_{t=1}^T \\|\\ddot{p}_t^\\perp\\|^2\\right)$$其中 $\\dddot{p}_t$ 是位置的三阶导（jerk），$\\ddot{p}_t^\\perp$ 是横向加速度。Temporal 维度上对整条轨迹取平均。\n效率奖励鼓励沿参考路径前进：\n$$\\mathcal{R}_{\\text{efficiency}} = w_p \\cdot \\text{progress} - w_d \\cdot \\text{deviation}$$progress 是沿参考路径的投影距离，deviation 是偏离参考路径的横向距离。\nDiffGRPO Advantage 估计 DiffGRPO 的核心创新是在扩散去噪过程中引入 GRPO 的组内比较。对同一场景 $s$，扩散模型采样一组 $G$ 条候选轨迹 $\\{\\tau_1, \\dots, \\tau_G\\}$，各自获得奖励 $R(\\tau_i)$，组内 advantage 计算：\n$$A_i = \\frac{R(\\tau_i) - \\bar{R}}{\\sigma_R + \\epsilon}$$其中 $\\bar{R} = \\frac{1}{G}\\sum_{j=1}^G R(\\tau_j)$ 是组内平均奖励，$\\sigma_R$ 是组内标准差。这个 advantage 用于更新扩散去噪网络：\n$$\\mathcal{L}_{\\text{DiffGRPO}} = -\\mathbb{E}\\left[\\min\\left(\\frac{\\pi_\\theta(\\tau_i|s)}{\\pi_{\\theta_{\\text{old}}}(\\tau_i|s)} \\cdot A_i,\\ \\text{clip}(\\cdot) \\cdot A_i\\right)\\right]$$其中 $\\pi_\\theta(\\tau|s)$ 是扩散模型从噪声生成轨迹 $\\tau$ 的似然（通过 ELBO 计算）。\n组件 说明 采样一组轨迹 在同一场景下，用扩散模型生成多条候选轨迹 组内相对优势 不需要绝对的价值函数，只用组内相对排名计算优势 奖励函数 安全性（无碰撞）、舒适性（加加速度小）、效率（到达目标） 更新策略 用优势信号更新扩散去噪网络 这种设计巧妙地结合了扩散模型的多模态生成能力和 RL 的探索能力——扩散模型天然适合\u0026quot;生成多个候选\u0026quot;，而 GRPO 天然适合\u0026quot;从候选中挑好的\u0026quot;。\n📊 实验结果 NAVSIM 基准（开环） ReCogDrive 在 NAVSIM 上达到SOTA，PDMS（预测驾驶模型得分）大幅领先：\n方法 PDMS ↑ Progress ↑ Comfort ↑ Safety ↑ 传统 E2E（UniAD） 78.4 83.1 88.2 77.6 VAD 81.2 85.7 89.1 79.3 纯 VLM 直接输出轨迹 85-88 86-89 88-91 80-84 VLM + 扩散规划器（无 RL） 88.5 89.8 92.1 84.7 ReCogDrive（DiffGRPO） 91.2 91.5 93.6 88.4 关键发现：RL 阶段将 Safety 从 84.7 提升至 88.4，碰撞率降低约 40%，证明 DiffGRPO 对驾驶安全的核心贡献。\nBench2Drive（闭环） 在闭环仿真中，ReCogDrive 同样表现优异，碰撞率显著降低：\n方法 驾驶分数 ↑ 成功率 ↑ 碰撞率 ↓ UniAD 65.3 42.1% 7.5% VAD 68.7 45.3% 6.8% ReCogDrive 78.2 56.8% 2.1% 闭环增益比开环更显著——这正是 DiffGRPO 强化学习的功劳，因为 RL 在闭环环境中直接优化了安全交互策略。\nDriveBench / DriveLM（VQA） ReCogDrive 的 VLM 在驾驶问答基准上也超越了开源和闭源模型：\n方法 DriveBench Acc ↑ DriveLM Acc ↑ 推理速度 GPT-4V 68.2 62.5 数秒 Qwen2.5-VL-7B 72.4 67.8 ~1s ReCogDrive VLM 78.6 73.1 0.8s 证明其认知理解能力强，质量数据流水线和层级化标注功不可没。\n消融实验关键发现 消融设置 PDMS 碰撞率 推理速度 完整 ReCogDrive 91.2 2.1% 0.8s - 扩散规划器（VLM 直接出） 86.1 5.8% 0.1s（快但次优） - DiffGRPO（无 RL） 88.5 3.5% 0.8s - 认知数据（无 CoT 标注） 87.3 4.2% 0.7s - 质量控制（无精炼） 88.9 3.1% 0.8s 三个核心发现：\n去掉扩散规划器 — PDMS 下降明显（91.2→86.1），碰撞率翻倍，证明模态解耦的必要性：VLM + 扩散的组合是\u0026quot;1+1\u0026gt;2\u0026quot; 去掉 DiffGRPO — 碰撞率从 2.1% 上升到 3.5%，证明 RL 优化的安全价值，尤其在闭环中差异更显著 去掉认知数据 — 长尾场景（无保护左转、夜间）性能下降最为显著，证明层级化数据为 VLM 补上了驾驶常识 🎯 这篇论文为什么重要 价值 说明 解耦设计 第一次清晰地把\u0026quot;认知\u0026quot;（VLM）和\u0026quot;动作\u0026quot;（扩散）分开，解决了模态错配 RL for VLA 首次将 GRPO 引入 VLA 驾驶模型，证明 RL 能超越模仿学习 产业落地 小米 EV 出品，有明确的车端部署考量（7.8× 加速） 完全开源 代码、模型权重、数据集全部公开 训练细节：三阶段训练策略 ReCogDrive 的训练分三个阶段进行，各阶段的任务、数据和计算资源差异显著：\n阶段 任务 训练数据 训练资源 耗时 1. 认知预训练 VLM CoT 推理 50K VQA 对（自动生成+精炼） 8×A100 2 天 2. 规划器联合训练 认知→轨迹映射 30K 专家轨迹 8×A100 1 天 3. DiffGRPO 强化 安全偏好优化 仿真 rollouts 8×A100 3 天 关键细节：阶段 3 的 RL 训练使用离线+在线混合模式——先用离线收集的轨迹做 1 轮预热 RL，再切换到在线仿真采样。这避免了 RL 初期随机策略在仿真中频繁碰撞导致训练中断。\n与同类 VLA 方法的详细对比 维度 ReCogDrive DriveVLM Senna EMMA（Wayve） VLM 底座 Qwen2.5-VL Qwen-VL LLaVA Gemini 动作头 扩散规划器 回归 MLP 回归 MLP 自回归 token 强化学习 ✅ DiffGRPO ❌ ❌ ❌ 推理加速 7.8×（隐状态注入） 2×（级联） 1× N/A（闭源） 开环指标（PDMS） 91.2 85-88 86-89 闭源 闭环碰撞率 2.1% 5-8% 4-7% 闭源 开源 ✅ 完全 ✅ 部分 ✅ 部分 ❌ ReCogDrive 的优势不仅在于指标领先，更在于首次将 RL 引入 VLA 驾驶模型，为\u0026quot;超越模仿学习\u0026quot;提供了一个可复现的基线。\n📝 个人思考 对工程实践的启发：ReCogDrive 的\u0026quot;三分天下\u0026quot;设计（认知 → 规划 → 强化）是一个非常好的架构模板。我们自己的工作（如 Flow-GRPO）也在做类似的事——在扩散/流匹配策略上做 RL。ReCogDrive 验证了这条路线的可行性。\nDiffGRPO 的启示：把 GRPO 和扩散模型结合，这个思路可以迁移到很多场景。核心洞察是：扩散模型的\u0026quot;采样多条轨迹\u0026quot;和 GRPO 的\u0026quot;组内相对优势\u0026quot;天然契合。这比在确定性策略上做 PPO 要优雅得多。\n值得关注的后续：ReCogDrive 的 VLM 推理速度仍然是个瓶颈（即使加速了 7.8 倍）。未来如果能把 VLM 也蒸馏成更轻量的模型，或者用快慢双系统（参考 DriveVLM-Dual），实时性可以进一步提升。\n📖 论文精读系列。ReCogDrive 的代码已开源，感兴趣的可以直接跑起来试试。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/recogdrive%E7%B2%BE%E8%AF%BB/","summary":"华科×小米EV 提出 ReCogDrive，将 VLM 认知推理（场景理解与决策分析）、扩散规划器（连续轨迹生成）和 DiffGRPO 强化学习（安全优化）三阶段统一。它的层级化数据流水线自动生成含推理链的 VQA 标注，解决了 VLM\u0026rsquo;会想但不会开\u0026rsquo;的模态错配问题。在 NAVSIM 和 Bench2Drive 上达到 SOTA，验证了\u0026rsquo;认知-规划-优化\u0026rsquo;三分天下的 VLA 设计范式。","title":"论文精读｜ReCogDrive：小米EV强化认知端到端自动驾驶框架"},{"content":"一句话理解模型部署 模型部署 = 把训练好的 PyTorch 模型\u0026quot;翻译\u0026quot;成能在车端芯片上飞快运行的优化引擎，同时尽可能不掉精度。\n在自动驾驶中，模型部署的终极目标是在50ms 以内（甚至 30ms 以内）完成感知→规划的全链路推理，同时满足功耗、散热、成本的工程约束。\n🎯 ONNX：开放神经网络交换格式 什么是 ONNX ONNX（Open Neural Network Exchange）是微软和 Meta 联合推出的中间表示格式，充当不同深度学习框架之间的\u0026quot;通用语言\u0026quot;：\nP T y e T n o s r o c r h F l → o w O N → N X O N → N X T e → n s O o N r N R X T R u n t i m e ONNX 将模型表示为计算图（Computational Graph）：\n节点：算子（Conv, Relu, Add, MatMul\u0026hellip;） 边：张量（Tensor） 属性：算子参数（kernel size, stride\u0026hellip;） PyTorch → ONNX 导出 import torch model = torch.load(\u0026#34;model.pth\u0026#34;).eval() dummy_input = torch.randn(1, 3, 224, 224) torch.onnx.export( model, dummy_input, \u0026#34;model.onnx\u0026#34;, opset_version=17, input_names=[\u0026#34;input\u0026#34;], output_names=[\u0026#34;output\u0026#34;], dynamic_axes={\u0026#34;input\u0026#34;: {0: \u0026#34;batch_size\u0026#34;}, \u0026#34;output\u0026#34;: {0: \u0026#34;batch_size\u0026#34;}} ) 关键参数：\n参数 作用 建议 opset_version ONNX 算子集版本 越高支持算子越多，但需目标推理引擎也支持 dynamic_axes 声明动态轴的维度 对 batch 维度必须设置 input/output_names 为输入输出命名 便于引擎构建时绑定 常见导出问题 算子不支持：某些 PyTorch 算子无对应 ONNX 算子。可用 register_custom_op_symbolic 注册自定义映射或用原生算子改写 动态 shape：ONNX 默认所有张量 shape 固定，使用 dynamic_axes 声明可变维度 控制流：if/for 需展开为静态图，torch.jit.script 可处理多数情况 ⚙️ TensorRT：NVIDIA 推理优化引擎 核心优化 优化技术 原理 加速效果 层融合（Layer Fusion） Conv+BN+Relu 等合并为一个大算子 30~50% 精度校准（INT8/FP8） 使用更低精度数据类型 50~200% 内存复用 分析 tensor 生命周期，复用内存 降低显存占用 内核自动调优 为每个算子搜索最优 CUDA kernel 10~30% ONNX → TensorRT Engine import tensorrt as trt logger = trt.Logger(trt.Logger.WARNING) builder = trt.Builder(logger) network = builder.create_network(1 \u0026lt;\u0026lt; int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)) parser = trt.OnnxParser(network, logger) with open(\u0026#34;model.onnx\u0026#34;, \u0026#34;rb\u0026#34;) as f: parser.parse(f.read()) config = builder.create_builder_config() config.set_flag(trt.BuilderFlag.FP16) config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 \u0026lt;\u0026lt; 30) serialized_engine = builder.build_serialized_network(network, config) with open(\u0026#34;model.engine\u0026#34;, \u0026#34;wb\u0026#34;) as f: f.write(serialized_engine) 部署流水线 P y T 训 . o 练 p r 完 t c ↓ 成 h h / . M c o k d p e t l 中 → 间 表 O 示 N o N n X n x → ↓ 优 T 化 e 引 n 擎 s o r . R e T n g E i n ↓ 车 n g 端 e i 推 n 理 e → I n f C e + r + e / n P c y e ↓ t h R o u n n t i m e 🔢 INT8 量化 为什么要量化 精度 位宽 模型体积 推理速度 相对精度 FP32 32 bit 100% 1x 基准 FP16 16 bit 50% ~2x 几乎无损 INT8 8 bit 25% ~4x 轻微下降 FP8 (E4M3) 8 bit 25% ~4x 接近 FP16 INT4 4 bit 12.5% ~6x 明显下降 校准（Calibration） INT8 量化需要确定每个 tensor 的动态范围：$real\\_value = scale \\times int8\\_value$。\nTensorRT 支持三种方法：\nEntropy (KL 散度)：寻找最优阈值 $T^* = \\arg\\min_T KL(P_{\\text{FP32}} || Q_T)$，效果最好，默认推荐 Percentile：取 99.9% 百分位作为阈值，速度更快 MinMax：使用激活绝对最大值，对 outlier 敏感 校准数据选择 config.set_flag(trt.BuilderFlag.INT8) config.int8_calibrator = MyCalibrator(calibration_data) # 校准数据：从训练集选取 500~1000 张代表性样本 # 覆盖白天/夜晚、城市/高速等场景 # 校准只观察激活分布，不需要标签 INT8 精度评估 在验证集上分别运行 FP32 和 INT8 模型，逐类计算 mAP 差值。对精度下降 \u0026gt; 1% 的类别进行人工分析（通常是小目标或远距离目标），必要时通过 per-layer precision override 对敏感算子保持 FP16。\n🚗 VLA 大模型的车端部署 VLA 的独特挑战 视觉-语言-动作（VLA）模型（如 DriveVLM、EMMA）将 LLM/VLM 引入驾驶决策，却带来了巨大的部署挑战：\n挑战 说明 模型体积大 7B ~ 70B 参数，FP16 权重 14GB ~ 140GB 推理延迟高 自回归生成每 token 一次 forward，10~100ms/token 显存需求大 KV cache 随序列长度增长，长上下文需数十 GB 功耗限制 车端散热有限，Orin 功耗上限 15~60W LLM/VLM 量化 AWQ（Activation-aware Weight Quantization）：权重中约 1% 的 salient channels 对量化敏感，按通道保留 FP16、其余 INT4。\nGPTQ（Post-Training Quantization）：逐层做 Hessian-aware 量化，支持 INT4/INT3/INT2。\nmodel = AutoModelForCausalLM.from_pretrained(\u0026#34;drive-vlm-7b\u0026#34;) awq_model = autoawq.quantize(model, quant_config={\u0026#34;bits\u0026#34;: 4, \u0026#34;group_size\u0026#34;: 128}, calib_data=calib_dataset) # 14GB → 4GB，100ms/token → 15ms/token KV Cache 优化与 Continuous Batching Continuous batching 将多条推理请求动态合并，不同请求可处于 prefill/decode 的不同阶段，吞吐量提升 2~4 倍。其他关键优化：MQA/GQA（25x）、KV Cache 量化 FP8/INT8（~2x）、PagedAttention（显存利用率提升）。\n💻 边缘计算硬件 芯片 算力 (TOPS) 功耗 制程 代表车型 NVIDIA Orin 254 15~60W 8nm 蔚来 ET7, 理想 L9, 小鹏 G9 Orin NX 100 10~25W 8nm 中低算力方案 NVIDIA Thor 2000 200W 4nm 2026+ 集中式计算平台 Snapdragon Ride 360~700 5~65W 4nm 宝马、通用 Horizon Journey 5 128 ~30W 12nm 比亚迪、理想 推理延迟预算 传 总 感 计 器 - - - - ： 读 ~ 取 图 感 融 规 4 ： 像 知 合 划 3 ~ 预 推 + ： m 5 处 理 预 ~ s m 理 ： 测 5 s ： ~ ： m ✅ ~ 2 ~ s 3 5 5 m m m s s s 5 ( 0 b m a s c ) k b o n e 1 2 m s + B E V 5 m s + d e t e c t i o n h e a d 8 m s ) 🔧 模型压缩 除量化外，部署前常用的模型压缩手段包括：\n剪枝（Pruning）：移除贡献小的权重或通道。结构化剪枝（按 channel/filter 裁剪）能直接加速推理，非结构化剪枝需稀疏硬件支持。\n知识蒸馏（Knowledge Distillation）：用大教师模型的 soft label 训练小模型。在 BEV 感知中常用：教师输出 BEV feature → 学生模仿 feature map，而非只模仿最终检测结果。\n量化感知训练（Quantization-Aware Training, QAT）：在训练过程中模拟量化误差，使权重适应低精度表示。QAT 通常比 PTQ（训练后量化）精度高 1~3%，但需要额外训练步骤和标注数据。\n方法 压缩率 精度损失 是否需要重训 结构化剪枝 20~50% 低~中 是 知识蒸馏 2~10x 低 是（训练学生） PTQ (INT8) 4x 低 否（仅校准） QAT (INT8) 4x 极低 是（微调） 部署最佳实践 算子选择：避免 ONNX 不支持的算子（如 torch.einsum、自定义 CUDA kernel） 动态 shape：尽量减少动态维度，或使用 TensorRT optimization profiles 多 stream 并行：让预处理和推理在 CUDA stream 上重叠执行 线程绑定：推理线程绑定到特定 CPU core，避免调度抖动 🔮 趋势 端侧大模型：随着量化（AWQ/GPTQ）和硬件（Thor/Snapdragon）进步，7B 级 VLA 模型有望 2027 年在车端实时推理 模型蒸馏：将大 VLA 模型（70B）知识蒸馏到小模型（7B），保留推理能力的同时缩小体积 编译器后端：MLIR/LLVM 化的推理引擎（如 Apache TVM）实现跨硬件多端部署 安全认证：ISO 26262 ASIL-D 级别的推理引擎认证，确保部署模型的功能安全 📚 延伸阅读 NVIDIA. \u0026ldquo;TensorRT Developer Guide.\u0026rdquo; NVIDIA Docs, 2023. Lin, J. et al. \u0026ldquo;AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration.\u0026rdquo; MLSys, 2024. Frantar, E. et al. \u0026ldquo;GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers.\u0026rdquo; ICLR, 2023. Kwon, W. et al. \u0026ldquo;Efficient Memory Management for Large Language Model Serving with PagedAttention.\u0026rdquo; SOSP, 2023. Team, T. L. \u0026ldquo;LLaMA: Open and Efficient Foundation Language Models.\u0026rdquo; arXiv, 2023. Hu, Y. et al. \u0026ldquo;TensorRT LLM: A TensorRT-based Framework for Optimizing LLM Inference.\u0026rdquo; NVIDIA, 2024. ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E5%85%A5%E9%97%A8%E8%AF%A6%E8%A7%A3/","summary":"模型部署是将训练好的深度学习模型转换、优化并部署到车端推理引擎的过程。本文讲解 ONNX/TensorRT 的核心概念、FP16/INT8 量化原理、VLA 大模型的边缘部署挑战，以及 Orin 等主流车端硬件的技术参数。","title":"模型部署入门详解：从 PyTorch 到车端推理"},{"content":"📄 论文信息 标题：Qwen-Drive-1.0: An Initial Step towards a Vision-Language Foundation Model for Autonomous Driving 团队：Qwen Team × 华中科技大学 — Xin Zhou、Zongchuang Zhao、Zhibo Yang、Mingsheng Li、Shuai Bai 等 发表：arXiv:2609.00111（2026 年 8 月 31 日） 代码：github.com/QwenLM/Qwen-Drive-1.0（Apache 2.0） 模型：Qwen/Qwen-Drive-1.0-4B（HuggingFace） 关键词：VLM 驾驶基础模型、BEV 感知探针、Flow Matching 轨迹生成、GRPO 式 RL 后训练、多数据集联合训练 一句话总结：不改 VLM 架构本身，外挂两个模块（BEV 感知头 + Planning Expert），用四阶段训练把通用 VLM 改造成集 3D 感知、驾驶 VQA、运动规划于一体的驾驶基础模型。Planning Expert 用 Flow Matching 生成轨迹，不设推理时打分器，直接单次采样输出。 🤔 要解决什么问题？ 当前驾驶 VLA 的主流做法是\u0026quot;拿一个通用 VLM，在驾驶数据上继续训\u0026quot;——看起来统一，实际有两个坑：\n3D 感知被文字 VQA 掩盖：纯文本 VQA 监督不能直接约束 3D 布局/深度/占用。模型可以输出流畅的场景描述，但在 3D 空间上可能很不精确——你问它\u0026quot;前面那车有多远\u0026quot;，它答得头头是道，但实际规划时距离估错了。 领域适配导致灾难性遗忘：在驾驶数据上训太久，通用视觉语言能力就丢了。但实际部署需要\u0026quot;座舱+驾驶\u0026quot;一体——一个模型既要规划轨迹，又要能回答\u0026quot;前面那个施工标志什么意思\u0026quot;这类座舱问题。丢了通用能力就得另建一个座舱模型，成本翻倍。 Qwen 团队的回答是：不动 VLM 架构本身，通过外挂显式感知模块和轨迹生成模块，加上精心设计的数据混合和训练配方，让同一个 VLM 既保持通用能力，又获得驾驶专业能力。\n🏗️ 架构总览：VLM + 两个外挂模块 Qwen-Drive-1.0 的架构可以用一句话概括：\u0026ldquo;一个共享 VLM + 两个外挂专家\u0026rdquo;。\n（架构图见论文 Figure 2）\n共享主干：Qwen3.5-4B VLM 特性 设计 作用 原生多模态 ViT 视觉编码器 + 空间合并的视觉 token 直接交错插入文本 token 流 图像/视频/语言在单一 Transformer 内统一处理 混合注意力 多数层用门控线性注意力（GLA），间隔插入分组查询 softmax 注意力 长多模态序列高效编码，关键位置保留全局精推理 视角+帧标签 8 个视角方向（FRONT VIEW / FRONT RIGHT VIEW…）+ frame: k 帧标签 模型知道每张图来自哪个相机、哪个时刻 关键点：VLM 架构完全不动，不做任何修改——这是为了保持易用性和通用能力不丢失。两个外挂模块从 VLM 的不同位置读取特征。\n外挂模块一：BEV 感知头（3D Probe） BEV 感知头同时做三件事：3D 目标检测、语义占用预测、BEV 地图分割。它不是\u0026quot;额外任务\u0026quot;，而是作为显式 3D 感知探针——让模型的 3D 理解能力有一个可检查、可量化的出口。\n数据流：\n多 视 角 图 像 → 视 觉 编 码 → → → → → 器 （ V 取 ① ② 深 B 三 • • • 冻 L 两 度 E 个 结 M 路 V V 提 V 解 D 3 U / （ 特 前 后 升 码 E D N 可 可 征 （ （ ： T 头 T e 训 训 ： 视 V 用 r ： R U t ） ） 觉 L 深 a N 编 M 度 n 解 e 解 码 网 s 码 t 码 器 输 络 f 头 头 特 出 把 o → 征 特 r → → ， 征 V m 语 低 ， 前 e 3 义 B 层 高 r D 占 E 外 层 投 ： 用 V 观 语 影 V 检 ） 义 到 后 测 地 ） 图 3 特 分 D 征 割 金 体 字 素 塔 + 体 素 几 何 先 验 → B E V 特 征 设计亮点：\n两路特征融合：视觉编码器的低层外观（$F^v$）和 VLM 的高层语义（$F^m$）互补——前者有精确几何，后者有场景理解 深度无需监督：深度网络直接从图像特征预测分类深度分布，不需要深度真值 共享 BEV 表征：三个任务共享同一个 BEV 特征，互相提供正则化 外挂模块二：Planning Expert（轨迹生成器） 这是本文最核心的模块——~1.1B 参数的 32 层扩散 Transformer，用 Flow Matching 生成未来 5 秒轨迹。\n输出格式：50 个路点 × $(x, y, \\theta)$，5 秒 @10Hz，归一化到 $[-1,1]$（x: 165m，y: 25m，$\\theta$: $\\pi/2$ rad）\n架构（32 层 Diffusion Transformer）：\n组件 设计 条件注入 VLM 的 8 个 softmax attention 层的 缓存 KV（每 4 层共享一份），每层做联合注意力 路点 token 拼接 带噪路点 + 历史轨迹编码 + Fourier 特征 + 流时间 + 位置编码 AdaLN 调制 注入流时间 $t$、导航指令 $\\mathbf{n}$、当前自车状态 $\\mathbf{e}$ 隐藏维度 1024 参数量 ~1.1B 核心问题：推理时怎么生成轨迹？\nFlow Matching + 10 步欧拉积分\n训练时：$\\boldsymbol{\\tau}_t = (1-t)\\boldsymbol{\\tau}_0 + t\\boldsymbol{\\tau}_1$（线性插值），模型预测干净终点 $\\hat{\\boldsymbol{\\tau}}_1$（而非速度场）\n推理时：$\\boldsymbol{\\tau}_0 \\sim \\mathcal{N}(0, I)$ → 10 步欧拉积分 → 得到 $\\hat{\\boldsymbol{\\tau}}_1$ → 即最终轨迹\n训练损失：\n$$\\mathcal{L}_{\\text{plan}} = \\mathcal{L}_{\\text{fm}} + 2 \\times 10^{-4}\\,\\mathcal{L}_{\\Delta^1} + 2 \\times 10^{-5}\\,\\mathcal{L}_{\\Delta^2}$$其中：\n$\\mathcal{L}_{\\text{fm}}$：Flow Matching 损失（预测速度场 vs 真实速度场的 MSE） $\\mathcal{L}_{\\Delta^1}$：一阶时序差分（Huber 惩罚），抑制路点抖动 $\\mathcal{L}_{\\Delta^2}$：二阶时序差分，抑制加速度突变 🔑 关键问题：Flow Matching 生成多条轨迹，靠什么选？ 你问的这个疑惑非常精准——Qwen-Drive-1.0 的 Planning Expert 确实可以用不同噪声采样出多条轨迹，但它 没有 训练一个推理时打分器来选。这和 Scoring-based 方法（如 CLOVER）有本质区别。\n它到底怎么选？答案：不选，直接用单次采样 推理时：给定当前场景，从 $\\mathcal{N}(0, I)$ 采一次噪声，跑 10 步欧拉积分，输出一条轨迹，直接执行。没有打分器、没有候选排序。\n\u0026ldquo;best-of-6\u0026rdquo; 是评测协议，不是推理方法：论文在评测时会做 best-of-6——采 6 条轨迹，用真值（ground truth）选最好的那条。但这是上界（oracle bound），不是实际部署方法。论文原文明确写道：\n\u0026ldquo;That selection uses the ground truth, so it is an upper bound on what inference-time selection could reach.\u0026rdquo;\nPDM 分数只在训练时用，不在推理时用：Stage 4 RL 后训练用 PDM 分数作为奖励信号（和 GRPO 式分组优势），但这只影响训练——训练完之后，推理时照样是单次采样、直接输出。\n为什么敢不设打分器？ 这是 Qwen-Drive-1.0 和 Scoring-based 路线的根本分歧：\nScoring-based（CLOVER） Qwen-Drive-1.0 生成方式 候选生成器产出 N 条候选 Flow Matching 单次采样 选择机制 学一个打分器（Cross-Attention）对每条候选打子分数，选 Top-1 不选，直接用生成的那条 推理计算 N+1 次前向（N 候选 + 1 打分器） 1 次前向（10 步积分） 依赖 打分器质量、候选覆盖度 生成器本身的分布质量 RL 后训练 通常不做（或只做轻量对齐） GRPO 式分组优势，8 条 rollouts 优化 为什么不设打分器？ 论文没有直接解释，但可以从架构哲学推断：\nQwen-Drive-1.0 的定位是VLM 驾驶基础模型，强调\u0026quot;不改 VLM 架构、保持通用能力\u0026quot;。加一个打分器会引入额外的训练目标和架构耦合，可能干扰 VLM 的通用表征。 Flow Matching 本身的分布质量足够高——只要训练充分，单次采样就能输出合理的多模态轨迹（不同噪声 → 不同合理开法）。RL 后训练进一步把分布推向高分区域。 这也是一种**\u0026ldquo;生成质量 \u0026gt; 后处理选择\u0026rdquo;**的哲学：与其费力学打分器去选，不如直接让生成器本身学好。 实际效果对比 方法 NAVSIM PDMS 推理方式 CLOVER（Scoring-based） 94.5 生成 50 候选 → 打分器选 Top-1 Qwen-Drive-1.0-RL 90.7 单次 Flow Matching 采样 Qwen-Drive-1.0-RL best-of-6 91.4 6 次采样 → GT 选（oracle） 差距在 3-4 个点。Scoring-based 的打分器在固定场景（navtest）确实有优势，但 Qwen-Drive-1.0 靠 RL 后训练把分布收紧，在 WOD-E2E（7.91 RFS）和 AlpaSim 闭环上也展现了竞争力——而且推理速度更快（单次前向 vs N+1 次）。\n🎓 四阶段训练配方 Qwen-Drive-1.0 的训练分四个阶段，每个阶段冻结/解冻不同模块，逐步引入任务：\nStage 1：感知头预训练 项目 内容 冻结 视觉编码器 + VLM 训练 仅 BEV 感知头 损失 $\\mathcal{L}_{\\text{perc}} = \\mathcal{L}_{\\text{det}} + \\mathcal{L}_{\\text{occ}} + \\mathcal{L}_{\\text{map}}$ 目的 让新加入的感知头学会构建 BEV 表征 Stage 2：感知 + VQA 联合训练 项目 内容 训练 视觉编码器 + VLM + BEV 感知头 损失 感知样本用 $\\mathcal{L}_{\\text{perc}}$，VQA 样本用 $\\mathcal{L}_{\\text{ntp}}$（下一个 token 预测） 学习率 感知头 LR = VLM LR × 20 数据 1.54M 样本（9.7% 感知 + 26% 通用 VQA + 64.3% 驾驶 VQA） 目的 让 VLM 表征适应 3D 感知，同时保留通用能力 关键设计：每个 minibatch 同时包含感知样本和 VQA 样本。不活跃的分支用 dummy 输入保持计算图一致（分布式训练需要），dummy 输出不参与损失。\nStage 3：Planning Expert 预训练（SFT） 项目 内容 冻结 视觉编码器 + VLM 训练 仅 Planning Expert 损失 $\\mathcal{L}_{\\text{plan}}$（Flow Matching + 时序正则） 条件 可选文本推理链（$\\mathbf{r}$ 或 $\\varnothing$） 目的 让 Planning Expert 学会从 VLM 表征生成轨迹 Stage 4：RL 后训练（GRPO 式） 项目 内容 冻结 视觉编码器 + VLM 训练 仅 Planning Expert 方法 类 GRPO 分组优势优化 每场景 采 8 条 rollouts（共享初始噪声 + 不同低频扰动） 奖励 NAVSIM: PDMS + ADE；WOD-E2E: RFS + ADE；PAI-AV: PDMS + ADE 目的 把轨迹分布推向高分区域，弥补模仿学习\u0026quot;只学一条轨迹\u0026quot;的局限 RL 的技术细节（论文最有新意的部分之一）：\n低频扰动：不加独立路点噪声（会高频抖动），而是在 50 个路点的前 6 个余弦基上加扰动——产生平滑、连贯的轨迹偏移（如整体偏左、整体加速），而非点级抖动。\n恢复分数：扰动后轨迹可能偏离 Flow Matching 的偏好区域，论文引入一个近似恢复分数（score correction），指向条件中心，稳定训练。\n训练时随机性集中在最后 3 步（$k \\in \\{7, 8, 9\\}$）：因为靠近输出端的扰动对最终轨迹影响最直接，早期扰动会被后续积分步骤衰减。\n📊 数据配方：跨数据集统一 Qwen-Drive-1.0 的一个被低估的贡献是数据工程——它把多个异构驾驶数据集统一到同一个训练框架下。\n感知数据：nuScenes + OpenScene 两个数据集的标注体系不同（nuScenes 手工标注，OpenScene 自动管线重建），需要做标签统一和空间统一：\n标签统一：\n3D 检测：nuScenes 的 5 种车辆类合并为 vehicle，bicycle + motorcycle 合并为 bicycle → 7 类 语义占用：用查找表把两个数据集的标签映射到共享 10 类空间 离线标签补全：用可靠辅助标注补全缺失类别（如 OpenScene 缺 driveable，用 nuPlan 地图补） 空间统一：\nnuScenes 占用网格：±40m，$z \\in [-1.0, 5.4]$m，0.4m 体素 OpenScene 占用网格：±50m，$z \\in [-4.0, 4.0]$m，0.5m 体素 解决方案：不重采样标签，在预测特征上做可微三线性采样对齐——让同一个占用头在两个原生网格上都能预测 视觉语言数据：24 个公开数据集 + 自建 公开数据集处理：\n用 Qwen3.5-Plus 统一改写每个数据集的 prompt 和 response 为对话格式 用 Qwen3.5-Flash 做一致性过滤：语义一致才保留 过滤后从 5.53M 样本降到 3.09M（保留率 55.9%） 自建三类数据：\n规划推理链（CoC）：从 NAVSIM / Waymo / PAI-AV 的轨迹，用规则分类器推导纵向/横向动作先验，再用 Qwen3.7-Plus 生成因果推理链，多阶段审计 相机排序：打乱视角图像、去掉视角标签，让模型从视觉线索恢复前后顺序和顺时针排列 内部感知 QA：30K 中国道路场景的红绿灯定位 + 3D 检测样本 Stage 2 数据混合 类别 比例 来源 3D 感知 9.7% nuScenes + OpenScene 通用 VQA 26.0% MMBench / MMMU / RealWorldQA 等 驾驶 VQA 64.3% 24 个公开驾驶数据集 + 自建 CoC / 相机排序 / 感知 QA 重复策略：感知样本重复更多（增加 BEV 头更新频率），VQA 样本重复 2-3 epoch。\n📈 实验结果 3D 感知 方法 nuScenes mAP nuScenes map mIoU OpenScene mAP OpenScene map mIoU BEVFormerV2 43.24 56.90 41.25 69.83 Qwen-Drive-1.0 43.95 60.99 43.45 71.27 BEV 感知头作为\u0026quot;探针\u0026quot;，在两个数据集上都超过了专门的 BEV 感知模型——说明 VLM 表征确实编码了丰富的 3D 信息。\n驾驶 VQA 方法 LingoScore Ego3D-Bench VLADBench SURDS WaymoQA Qwen3.5-4B（通用基线） — 7.66 73.0 37.9 75.8/74.1 Qwen-Drive-1.0-SFT 79.4 8.22 83.8 49.3 88.1/88.1 通用能力大幅提升，且从论文 Table 3 可以看到，14 个通用 VQA 基准（MMBench / MMMU / OCRBench 等）上 Qwen-Drive-1.0 的分数几乎没掉——领域适配没有灾难性遗忘。\n运动规划 NAVSIM v1.1 navtest：\n方法 NC DAC EP TTC C PDMS Qwen-Drive-1.0-SFT w/o reasoning 98.2 96.4 82.0 94.4 100.0 87.8 Qwen-Drive-1.0-SFT w/ reasoning 98.4 96.6 82.4 94.7 100.0 88.2 Qwen-Drive-1.0-SFT best-of-6 98.7 97.2 83.2 95.5 100.0 89.3 Qwen-Drive-1.0-RL 98.6 98.2 84.8 95.9 100.0 90.7 Qwen-Drive-1.0-RL best-of-6 98.8 98.4 85.5 96.5 100.0 91.4 CLOVER（Scoring-based 天花板） — — — — — 94.5 RL 后训练从 SFT 的 88.2 涨到 90.7（+2.5），主要收益来自 EP（+2.4）和 DAC（+1.6）——说明 RL 确实把轨迹推向了\u0026quot;更敢开\u0026quot;的区域。\nWOD-E2E（Waymo 长尾评测）：\n方法 ADE 3s ADE 5s RFS Qwen-Drive-1.0-SFT 1.19 2.65 7.78 Qwen-Drive-1.0-RL 1.19 2.67 7.91 AutoVLA 1.35 2.96 7.56 NoRD 1.25 — 7.71 AlpaSim 闭环：\n方法 CER↓ Off-road↓ Progress↑ At-fault Score↑ Alpamayo-R1 19.0 17.0 67.0 0.58 Qwen-Drive-1.0-RL 41.0 12.0 48.0 0.37 闭环上还不算强（Alpaamayo-R1 的 0.58 vs 0.37），说明 RL 后训练在开环/伪闭环上收益明显，但闭环交互场景仍需加强。\n💻 代码仓库逐文件拆解 Qwen-Drive-1.0 的代码仓库结构清晰，核心代码在 src/qwen_drive/ 下：\nq ├ │ │ │ │ │ │ │ │ ├ │ ├ ├ ├ └ w ─ ─ ─ ─ ─ ─ e ─ ─ ─ ─ ─ ─ n - s ├ ├ ├ ├ ├ ├ ├ └ s └ s d d d d r ─ ─ ─ ─ ─ ─ ─ ─ r ─ c a a o r c ─ ─ ─ ─ ─ ─ ─ ─ c ─ r t t c i / / i a a s q m p s t m c b q o p / / / e w o l c r e o e i w p t d b / e d a e a t n n s e s s e e n e n n j r f c u n / / m n _ l n e e i i h a _ o c d i i . c c g m l d / h r n n p t s u a i r m i g g y o . r r z i a v _ _ r p a k e v r e q e y y t s . e k / w x . i . p _ s e p p o p y p / n e y n y e _ r _ r d t q c r . w e i p e p v y n t e _ i . d o p r n y i / v e . # # # # # # p # # # # # # # # y 核 ( ( ( ( ( ( ( B C d 捆 四 文 心 1 1 1 6 6 6 6 E U e 绑 个 档 推 7 8 5 . . # . . V D m 的 基 理 . . . 2 6 9 2 A o 准 代 8 1 5 K K ( K K 感 d 测 码 K K K B B 6 B B 知 算 / e 试 B B B ) ) . ) ) 模 子 m 场 ) ) ) 9 式 评 o 景 轨 评 K 基 可 测 文 主 P 场 迹 测 B 准 视 场 件 模 l 景 处 指 ) 测 化 / 景 型 a 数 理 标 试 工 ： n 据 ： ： 模 加 具 可 V n 处 归 P 型 载 视 L i 理 一 D 配 化 M n ： 化 M 置 脚 g 多 / S 字 本 + 视 反 / 段 E 角 归 R P x 图 一 F l p 像 化 S a e 打 / n r 包 A n t D i ： E n F g l o E w x p M e a r t t c h 组 i 装 n g 轨 迹 生 成 模型加载：一个目录、多个子模块 # 模型目录结构（9.1GB VLM + 2.1GB Planner × 2 + 0.5GB Perception） # Qwen-Drive-1.0-4B/ # ├── planner-sft/ # Planning Expert，模仿学习训练 # ├── planner-rl/ # Planning Expert，RL 后训练 # └── perception/ # BEV 感知头 # 加载方式（from src/qwen_drive/__init__.py） from qwen_drive import InferenceMode, QwenDriveForPlanning model = QwenDriveForPlanning.from_pretrained( \u0026#34;Qwen-Drive-1.0-4B\u0026#34;, planner=\u0026#34;Qwen-Drive-1.0-4B/planner-rl\u0026#34;, # 选 RL 版 dtype=torch.bbf16, attn_implementation=\u0026#34;flash_attention_2\u0026#34;, ).to(\u0026#34;cuda\u0026#34;).eval() # 可以随时切换 Planning Expert model.load_planner(\u0026#34;Qwen-Drive-1.0-4B/planner-sft\u0026#34;) 关键理解：VLM 在根目录，所有任务共享。Planning Expert 是可插拔的子模块——切换 SFT/RL 版本只需换子目录。\n推理模式：四种使用方式 from qwen_drive import InferenceMode # 1. VQA 模式（不加载 planner） result = model.run(InferenceMode.VQA, scene=scene, question=\u0026#34;前方车辆在做什么？\u0026#34;) # 2. 直接规划（不需要推理链） result = model.run(InferenceMode.DIRECT_PLANNING, scene=scene, num_samples=1) # 3. 推理规划（先生成推理链，再生成轨迹）⭐ result = model.run(InferenceMode.REASONING_PLANNING, scene=scene, num_samples=6) print(result.reasoning) # \u0026#34;The car ahead is braking...\u0026#34; print(result.trajectories.shape) # (6, 50, 3) → 6 条轨迹 × 50 路点 × (x,y,heading) # 4. 感知模式 from qwen_drive_perception import QwenDrivePerception perception = QwenDrivePerception.from_pretrained(\u0026#34;Qwen-Drive-1.0-4B/perception\u0026#34;) det3d, occ, bev_map = perception.run(scene) Planning Expert 核心代码拆解 源文件：src/qwen_drive/planning_expert.py（18.1KB）\nclass PlanningExpert(nn.Module): \u0026#34;\u0026#34;\u0026#34;Flow Matching 轨迹生成器。 核心流程： 1. 从 VLM 的 softmax attention 层提取缓存 KV（条件） 2. 带噪路点 + 历史轨迹 + Fourier 特征 → token 嵌入 3. 32 层 DiT Block 交替做 self-attn（路点间）+ cross-attn（读 VLM） 4. 输出头预测速度场 \u0026#34;\u0026#34;\u0026#34; def __init__(self, config): self.num_waypoints = 50 # 5s @10Hz self.waypoint_dim = 3 # (x, y, heading) self.hidden_dim = 1024 # DiT 隐藏维度 self.num_layers = 32 # DiT 层数 self.num_heads = 16 # 注意力头数 # 路点嵌入：noisy_traj (50×3) + history (50×3) + Fourier (50×freq_dim) self.waypoint_embed = nn.Linear( self.waypoint_dim * 2 + config.freq_dim, # 3×2 + freq_dim self.hidden_dim ) # 流时间嵌入：t → Fourier → MLP → hidden_dim self.time_embed = TimestepEmbedding(config.freq_dim, self.hidden_dim) # 导航指令嵌入 self.nav_embed = nn.Linear(config.text_dim, self.hidden_dim) # 32 层 DiT Block self.blocks = nn.ModuleList([ DiTBlock( hidden_dim=self.hidden_dim, num_heads=self.num_heads, cross_attn_dim=config.text_dim, # 读 VLM 缓存 KV ) for _ in range(self.num_layers) ]) # 输出头：hidden_dim → waypoint_dim（预测速度场） self.output_proj = nn.Linear(self.hidden_dim, self.waypoint_dim) def forward(self, noisy_traj, t, history, nav_emb, vlm_kv_cache): \u0026#34;\u0026#34;\u0026#34; 训练时前向。 Args: noisy_traj: (B, 50, 3) 带噪轨迹 t: (B,) 流时间 ∈ [0, 1] history: (B, 50, 3) 历史轨迹 nav_emb: (B, S, D) 导航指令嵌入 vlm_kv_cache: list of (K, V) 来自 VLM 的 softmax attention 层 Returns: v_pred: (B, 50, 3) 预测速度场 \u0026#34;\u0026#34;\u0026#34; # Fourier 编码 fourier = compute_fourier(noisy_traj) # (B, 50, freq_dim) # 拼接嵌入 x = self.waypoint_embed(torch.cat([noisy_traj, history, fourier], dim=-1)) # 加时间步嵌入（broadcast 到每个路点） x = x + self.time_embed(t).unsqueeze(1) # 加导航指令嵌入 x = x + self.nav_embed(nav_emb).mean(dim=1, keepdim=True) # 32 层 DiT Block for block in self.blocks: x = block( x, # self-attn: 路点间交互 kv_cache=vlm_kv_cache, # cross-attn: 读 VLM 缓存 timestep_emb=self.time_embed(t), ) # 输出速度场 v_pred = self.output_proj(x) # (B, 50, 3) return v_pred 主模型如何组装 VLM + Planning Expert 源文件：src/qwen_drive/modeling_qwen_drive.py（17.8KB）\nclass QwenDriveForPlanning(Qwen3ForCausalLM): \u0026#34;\u0026#34;\u0026#34;在 Qwen3.5 VLM 基础上挂载 Planning Expert。\u0026#34;\u0026#34;\u0026#34; def __init__(self, config): super().__init__(config) # 加载 Qwen3.5-4B VLM # 加载 Planning Expert（可选 SFT 或 RL 版本） self.planner = PlanningExpert(config.planner_config) # VLM 的 softmax attention 层索引（每 4 层共享一份 KV） self.condition_layers = config.condition_layers # [3, 7, 11, ...] def run(self, mode, scene, num_samples=1): \u0026#34;\u0026#34;\u0026#34;统一推理入口。\u0026#34;\u0026#34;\u0026#34; if mode == InferenceMode.VQA: return self._run_vqa(scene) elif mode == InferenceMode.DIRECT_PLANNING: return self._run_planning(scene, num_samples, with_reasoning=False) elif mode == InferenceMode.REASONING_PLANNING: return self._run_planning(scene, num_samples, with_reasoning=True) def _run_planning(self, scene, num_samples, with_reasoning): \u0026#34;\u0026#34;\u0026#34;规划推理流程。\u0026#34;\u0026#34;\u0026#34; # 1. 编码场景（多视角图像 + 文本） inputs = self._encode_scene(scene, with_reasoning) # 2. VLM 前向，同时缓存 softmax attention 层的 KV with torch.no_grad(): vlm_output, kv_caches = self.forward( **inputs, output_hidden_states=True, return_dict=True, ) # 3. 提取条件层的 KV 缓存 condition_kvs = [kv_caches[i] for i in self.condition_layers] # 4. Planning Expert 采样（Flow Matching） trajectories = self.planner.sample( num_samples=num_samples, vlm_kv_cache=condition_kvs, nav_instruction=inputs[\u0026#34;nav_instruction\u0026#34;], history=scene.ego_history, ) return PlanningResult(trajectories=trajectories, reasoning=vlm_output.text) 场景数据处理 源文件：src/qwen_drive/scene.py（15.5KB）\nclass Scene: \u0026#34;\u0026#34;\u0026#34;单个驾驶场景的数据结构。 包含： - 多视角图像（最多 8 个相机） - 自车历史轨迹（用于 Planning Expert 的条件输入） - 导航指令 - 轨迹标签（训练时） \u0026#34;\u0026#34;\u0026#34; def __init__(self): self.images: dict[str, Image] # {\u0026#34;FRONT\u0026#34;: Image, \u0026#34;FRONT_RIGHT\u0026#34;: Image, ...} self.ego_trajectory: Tensor # (T, 3) 历史轨迹 self.navigation: str # 导航指令文本 self.trajectory_label: Tensor | None # (50, 3) 标注轨迹（训练时） self.risk_label: str | None # 风险标注（评测时） class ImageArchive: \u0026#34;\u0026#34;\u0026#34;图像打包格式（parquet 文件）。 为了高效 I/O，多个场景的图像被打包到 parquet 文件中， 通过 scene_id + frame_id 索引。 \u0026#34;\u0026#34;\u0026#34; @staticmethod def open(path: str) -\u0026gt; \u0026#34;ImageArchive\u0026#34;: \u0026#34;\u0026#34;\u0026#34;加载 parquet 图像归档。\u0026#34;\u0026#34;\u0026#34; ... def get(self, scene_id: str, frame_id: str, camera: str) -\u0026gt; Image: \u0026#34;\u0026#34;\u0026#34;获取指定场景/帧/相机的图像。\u0026#34;\u0026#34;\u0026#34; ... 轨迹归一化 源文件：src/qwen_drive/trajectory.py（6.2KB）\n# 归一化参数（论文 Table 中提到） NORMALIZATION = { \u0026#34;x\u0026#34;: {\u0026#34;range\u0026#34;: 165.0, \u0026#34;unit\u0026#34;: \u0026#34;m\u0026#34;}, # 前向 165m \u0026#34;y\u0026#34;: {\u0026#34;range\u0026#34;: 25.0, \u0026#34;unit\u0026#34;: \u0026#34;m\u0026#34;}, # 横向 25m \u0026#34;heading\u0026#34;: {\u0026#34;range\u0026#34;: 3.14159 / 2, \u0026#34;unit\u0026#34;: \u0026#34;rad\u0026#34;}, # ±π/2 } def normalize_trajectory(traj: Tensor) -\u0026gt; Tensor: \u0026#34;\u0026#34;\u0026#34;将轨迹归一化到 [-1, 1]。\u0026#34;\u0026#34;\u0026#34; # x: (x / 165.0) * 2 - 1 # y: (y / 25.0) * 2 - 1 # heading: (heading / (π/2)) * 2 - 1 ... def denormalize_trajectory(traj: Tensor) -\u0026gt; Tensor: \u0026#34;\u0026#34;\u0026#34;将归一化轨迹还原到原始坐标。\u0026#34;\u0026#34;\u0026#34; ... 评测脚本 # NAVSIM 评测 python scripts/evaluate.py \\ --config configs/eval_navsim.yaml \\ --model-path Qwen-Drive-1.0-4B \\ --planner planner-rl # WOD-E2E 评测 python scripts/evaluate.py \\ --config configs/eval_wod.yaml \\ --model-path Qwen-Drive-1.0-4B \\ --planner planner-rl # 感知评测 python scripts/evaluate_perception.py \\ --config configs/eval_perception.yaml \\ --model-path Qwen-Drive-1.0-4B 🔬 个人解读与思考 1. \u0026ldquo;不设打分器\u0026quot;是设计选择，不是疏忽 Qwen-Drive-1.0 选择不在推理时用打分器选轨迹，这和 Scoring-based 路线（CLOVER 等）形成鲜明对比。这不是疏忽，而是架构哲学的选择：\nScoring-based：依赖打分器质量 + 候选覆盖度。打分器越强，Top-1 越准；但推理计算量是 N+1 次前向。 Qwen-Drive：依赖生成器本身的分布质量。Flow Matching 训练好后，单次采样就能输出合理轨迹；推理只需 1 次前向（10 步积分）。 tradeoff：Scoring-based 在固定场景（navtest）有精度优势（CLOVER 94.5 vs Qwen 90.7），但 Qwen 的推理效率更高、架构更简单，且 RL 后训练能持续把分布推向高分区域。\n2. RL 后训练的低频扰动设计很精巧 论文不让噪声独立加在每个路点上（会产生高频抖动），而是限制在 6 个余弦基上——相当于只在\u0026quot;整体偏左/偏右\u0026quot;\u0026ldquo;整体加速/减速\u0026quot;这几个低维模态上探索。这和人类驾驶的直觉一致：你不会突然在第 3 个路点拐一下，而是整体调整策略。\n3. 跨数据集统一是真正的工程贡献 把 nuScenes 和 OpenScene 的占用标注统一到同一个训练框架（不同分辨率、不同坐标系、不同标注质量），需要做标签统一 + 空间对齐 + 离线补全。这种\u0026quot;脏活\u0026quot;在论文里通常一笔带过，但实际决定了联合训练能不能跑通。\n4. 闭环场景仍是短板 AlpaSim 闭环上 Qwen-Drive-1.0 的 0.37 和 Alpamayo-R1 的 0.58 还有差距。可能原因：\nFlow Matching 生成的轨迹在交互场景下缺乏\u0026quot;反应式\u0026quot;调整（非反应式仿真得分高，但闭环里其他车会反应） RL 奖励主要基于 NAVSIM/Waymo 的开环指标，对闭环交互的覆盖不足 未来可能需要引入闭环仿真训练（类似 DriveWAM / SimWAM 的世界模型路线） 5. \u0026ldquo;基础模型\u0026quot;定位值得关注 Qwen-Drive-1.0 的定位不是\u0026quot;刷榜机器\u0026rdquo;，而是\u0026quot;驾驶基础模型\u0026rdquo;——强调一个模型同时覆盖 3D 感知、驾驶 VQA、运动规划、通用 VQA。这种\u0026quot;全能型\u0026quot;定位在产业界可能比\u0026quot;单项刷榜\u0026quot;更有价值：部署时只需维护一个模型，座舱和驾驶共享算力。\n📝 一句话总结 Qwen-Drive-1.0 = Qwen3.5-4B VLM + BEV 感知探针 + Flow Matching 规划专家，四阶段训练（感知预训练 → 联合 VQA → 轨迹 SFT → RL 后训练）。规划时不设打分器、不做候选排序，直接单次 Flow Matching 采样输出轨迹——靠生成器本身的质量 + RL 把分布推向高分区域。NAVSIM 90.7 PDMS，WOD-E2E 7.91 RFS，通用能力几乎无损。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/qwen-drive-1/","summary":"Qwen-Drive-1.0 基于 Qwen3.5-4B VLM 外挂两个模块：BEV感知头（3D检测+占用预测+地图分割）和 Planning Expert（~1.1B 参数 Flow Matching 轨迹生成器），四阶段渐进训练。关键设计：\u003cstrong\u003e不设推理时打分器\u003c/strong\u003e，直接用 Flow Matching 单次采样输出轨迹，RL 后训练用 GRPO 式分组优势优化。NAVSIM v1.1 榜上 90.7 PDMS（RL），WOD-E2E 7.91 RFS，AlpaSim 闭环 0.37 分。","title":"论文精读｜Qwen-Drive-1.0：阿里通义首个驾驶视觉-语言基础模型"},{"content":"📄 论文信息 标题：LIBERO: Benchmarking Knowledge Transfer for Lifelong Robot Learning 团队：UT Austin（Bo Liu, Yifeng Zhu, Yihao Feng, Qiang Liu, Yuke Zhu, Peter Stone）+ 清华大学（Chongkai Gao），NeurIPS 2023 Datasets \u0026amp; Benchmarks Track 论文：arXiv:2306.03310 代码：https://github.com/Lifelong-Robot-Learning/LIBERO（2k+ Stars） 网站：https://libero-project.github.io 一句话总结：专为终身机器人学习设计的基准——包含 130 个可程序化生成的机器人操作任务，系统研究知识迁移中的策略架构、算法设计和预训练策略，揭示了一系列反直觉的实验发现。 🤔 要解决什么问题？ 终身学习的核心矛盾 终身学习的目标是构建一个终身通用的智能体——它不需要一次性学会所有任务，而是在其生命周期中持续学习和适应。但现有的终身学习研究主要集中在图像和文本领域（如 CIFAR-100 的类增量学习、Mini-ImageNet 的任务增量学习），这些场景只涉及陈述性知识（declarative knowledge）的迁移——即关于实体和概念的知识。\n然而决策制定中的终身学习（LLDM） 还涉及程序性知识（procedural knowledge）的迁移——即关于如何执行动作和行为的知识。考虑一个场景：\n机器人最初学会了从冰箱里拿果汁。在学习了新任务后，它忘记了怎么拿果汁。这可能是忘记了果汁/冰箱的位置（陈述性知识遗忘），也可能是忘记了怎么开冰箱门或抓取果汁（程序性知识遗忘）。\n关键问题：我们缺乏一个系统性的基准来定量分析这种复杂的知识迁移过程——模型到底忘了什么？为什么忘？什么样的架构和算法能更好地保留和迁移知识？\n现有基准的不足 维度 图像/文本领域基准（如 CIFAR-100） 机器人领域基准（如 MetaWorld） 知识类型 仅陈述性知识（类别/概念） 通常混合两种知识，难以解耦 任务多样性 类别标签不同，视觉特征相似 场景、物体、目标混在一起变化 可扩展性 固定数据集，无法新增任务 通常固定场景，不支持程序化生成 策略学习 分类器，无动作空间 有操作策略，但缺乏标准化的 LLDM 评测 LIBERO 的核心洞察：要真正理解 LLDM，需要一个可程序化生成、能解耦不同知识类型、支持多种策略架构和终身学习算法的标准化测试平台。\n🏗️ 核心设计：四大任务套件 上图（Top）：LIBERO 的四个程序化生成任务套件。下图（Bottom）：LIBERO 聚焦的五大 LLDM 研究课题。\nLIBERO 的核心设计哲学是：用一个统一的程序化生成管线，创造可解耦不同知识类型的任务套件。\n四个任务套件 LIBERO 包含 130 个语言条件机器人操作任务，分为四个套件：\n任务套件 任务数 知识迁移类型 设计意图 LIBERO-Spatial 10 空间关系（陈述性） 同一组物体，不同的空间布局要求 LIBERO-Object 10 物体概念（陈述性） 同一操作模式，不同的操作物体 LIBERO-Goal 10 任务目标（程序性） 同一组物体和布局，不同的操作目标 LIBERO-100 100 混合知识 真实场景下的复杂知识迁移 LIBERO-Spatial：空间关系迁移 所有任务都要求机器人将一个碗放在盘子上，但碗的空间位置不同：有的在左边、有的在右边、有的在其他物体之间。机器人需要持续学习和记忆新的空间关系。\n关键设计：碗的外观完全相同，唯一区别是空间位置。这样所有任务之间的差异纯粹是空间关系（陈述性知识） 的变化，排除了物体外观和操作方式的影响。\nLIBERO-Object：物体概念迁移 每个任务要求机器人 pick-place 一个独特的物体。例如：拿起牛奶盒放在篮子里、拿起番茄酱放在托盘上等。机器人需要持续学习新的物体类型。\n关键设计：所有任务的操作模式（pick-place）完全相同，唯一变化是操作对象。这纯粹测试物体概念（陈述性知识） 的迁移，排除了空间和目标差异的影响。\nLIBERO-Goal：任务目标迁移 所有任务共享完全相同的物体和空间布局，但任务目标不同。例如：把碗推到桌子中间 vs 把碗翻过来。机器人需要学习新的运动和行为模式（程序性知识）。\n关键设计：场景完全不变，只有\u0026quot;怎么做\u0026quot;在变化。这纯粹测试程序性知识的迁移——这是 LLDM 区别于传统终身学习的独特维度。\nLIBERO-100：混合知识迁移 包含 100 个多样化任务，涉及丰富的物体交互和多样的操作技能。论文将 100 个任务拆分为：\nLIBERO-90：90 个短视任务，作为预训练数据源 LIBERO-Long：10 个长视任务，用于下游终身学习算法评估 🔧 程序化生成管线 LIBERO 最有特色的工程贡献之一是其可扩展的程序化任务生成管线，理论上可以生成无限多的操作任务。\n管线分为四个步骤：\n行为模板提取：从大规模人类活动数据集 Ego4D 中提取操作行为的文本描述模板 任务指令生成：基于行为模板自动生成自然语言任务指令 PDDL 描述生成：根据任务描述选择合适的场景，生成 PDDL（Planning Domain Definition Language）描述文件，包含： (A) 物体和布局：场景中出现的物体及其初始位置 (B) 初始物体配置：物体的初始状态（位置、朝向等） (C) 任务目标：成功条件（如\u0026quot;碗在盘子上\u0026quot;） 仿真场景构建：基于 PDDL 描述在仿真器中自动搭建场景 关键设计：所有任务共享一组视觉概念（陈述性知识）和交互模式（程序性知识），但通过排列组合生成不同的任务——这使得知识迁移的分析成为可能。\n🧠 策略架构设计 LIBERO 研究了多种策略架构在 LLDM 中的表现，涵盖了视觉编码器和时序建模器的不同组合。\n视觉编码器（Visual Encoder） LIBERO 对比了三种视觉编码器：\n编码器 类型 特点 ResNet 卷积网络 擅长局部特征，对空间结构敏感 ViT Transformer 全局自注意力，擅长语义丰富的场景 CLIP-ViT 预训练 ViT 在大规模图文数据上预训练，语义理解强 时序建模器（Temporal Modeling） 两种时序架构：\nRNN（LSTM）：递归处理时序，参数少但长程依赖能力有限 Transformer：自注意力处理时序，能更好地建模长程时序依赖 四种组合 LIBERO 实验了四种架构组合：\n架构 视觉编码器 时序建模器 特点 ResNet+RNN ResNet LSTM 经典组合，参数量小 ResNet+Transformer ResNet Transformer 卷积特征 + 时序注意力 ViT+Transformer ViT Transformer 纯 Transformer 方案 CLIP-ViT+Transformer CLIP-ViT Transformer 预训练语义 + 时序注意力 上图展示 ViT+Transformer 架构的具体实现：CLIP-ViT 编码图像，transformer 处理时序，最终由 MLP 预测动作。\n终身学习算法 LIBERO 实现了三种代表性终身学习算法作为基线：\n算法 类型 核心机制 Experience Replay (ER) 回放 从旧任务中采样少量数据混入新任务训练 Elastic Weight Consolidation (EWC) 正则化 对重要参数施加二次约束，防止大幅更新 PackNet 掩码 为新任务分配独立的参数子集，冻结旧参数 上图为 ER（经验回放）的实现架构：新任务数据和旧任务缓存数据混合训练。\n🔬 实验分析 实验设定 LIBERO 使用顺序微调（Sequential Finetuning） 作为标准评测流程：模型依次学习每个任务套件中的 10 个任务，每次学习新任务后评估所有已学任务的表现。\n评测指标：\n成功率（Success Rate）：每个任务完成情况的 0/1 指标 正向迁移（Forward Transfer）：学习新任务的速度和质量 反向迁移（Backward Transfer / Forgetting）：学习新任务后对旧任务的影响 上图为 LIBERO 的评测流程：每个任务训练后评估所有已学任务，追踪正向和反向迁移。\n核心发现 1：架构设计比终身学习算法更重要 架构 LIBERO-Spatial LIBERO-Object LIBERO-Goal LIBERO-Long ResNet+RNN 中等 低 高 低 ResNet+Transformer 中等 低 高 低 ViT+Transformer 高 高 中等 高 CLIP-ViT+Transformer 高 高 中等 高 三个关键发现：\nTransformer 优于 RNN：Transformer 在时序建模上全面优于 LSTM，尤其是在需要长程依赖的任务上差距明显 ViT 在视觉丰富的任务上更强：LIBERO-Spatial 和 LIBERO-Object 包含丰富的视觉信息（多个物体、不同空间布局），ViT 的全局自注意力在此类任务上优于 ResNet ResNet 在程序性知识任务上有优势：在 LIBERO-Goal（纯程序性知识迁移）上，ResNet+RNN 反而表现最好——因为任务场景固定、视觉变化小，ResNet 更轻量且不容易过拟合到视觉细节 核心发现 2：顺序微调比终身学习算法正向迁移更好 算法 平均遗忘率↓ 正向迁移↑ Sequential Finetuning（顺序微调） 最高遗忘 最佳正向迁移 EWC 低遗忘 中低正向迁移 ER 低遗忘 中正向迁移 PackNet 几乎无遗忘 最差正向迁移 反直觉结论：最先进的终身学习算法（EWC、PackNet）虽然在防止遗忘上非常有效，但在正向迁移（学习新任务的能力）上却不如简单的顺序微调。\n解释：EWC 和 PackNet 通过约束参数更新来保护旧知识，但这种约束也限制了模型适应新任务的能力。PackNet 为新任务分配独立的参数子集，新旧任务之间几乎不共享知识，所以正向迁移最差。\n核心发现 3：任务描述 vs 任务 ID——语义丰富的描述并没有帮助 条件 平均成功率 Task ID（任务编号） 最高 Task Description（任务描述） 无显著提升 预训练语言嵌入 无额外提升 反直觉：使用语义丰富的任务描述（如\u0026quot;把碗放在盘子上\u0026quot;）作为条件，比使用简单的任务 ID（如\u0026quot;任务 3\u0026quot;）并没有带来显著的性能提升。即使使用预训练语言模型（如 BERT）嵌入任务描述，表现也不如任务 ID。\n可能原因：仿真环境中的视觉特征已经包含了足够的信息，语言描述提供的额外信息有限。同时也说明当前策略架构对语言条件的利用还不够充分。\n核心发现 4：大规模预训练可能损害 LLDM 性能 上图展示了在 LIBERO-90 上预训练后，在 LIBERO-Long 上评测的结果。橙色为预训练后微调，蓝色为直接从头训练。\n设定 LIBERO-Long 平均成功率 无预训练（从头训练） 更好 LIBERO-90 预训练 + 顺序微调 更差 反直觉：在 LIBERO-90 上做大规模有监督预训练，然后在 LIBERO-Long 上做顺序微调，效果反而不如直接从零开始训练。\n解释：预训练让模型过度适应了预训练任务的分布，在后续终身学习过程中难以摆脱这种\u0026quot;初始偏见\u0026quot;。这个发现对\u0026quot;预训练 + 微调\u0026quot;范式在机器人终身学习中的有效性提出了质疑。\n核心发现 5：任务顺序对学习效果有显著影响 上图展示了不同任务顺序下的学习曲线变化。纵坐标为成功率，不同颜色代表不同的任务学习顺序。\n同一组任务以不同顺序学习，最终性能有显著的差异。有些顺序能让模型更好地积累知识，有些则导致严重的灾难性遗忘。\n实际意义：在设计终身学习课程时，任务顺序和课程学习策略是不可忽视的设计维度。\n⚖️ 与其他基准的对比 维度 LIBERO MetaWorld RLBench CALVIN FurnitureBench 任务数 130 50 100+ 34 4 终身学习支持 ✅ 原生设计 ❌ ❌ ❌ ❌ 程序化生成 ✅ ❌ ❌ ❌ ❌ 语言条件 ✅ ✅ ✅ ❌ ❌ 知识解耦 ✅（4 个套件） ❌ ❌ ❌ ❌ 人类演示数据 ✅ 全部 130 任务 ❌ ✅ 部分 ✅ ❌ 基线算法 3 种 LL 算法 + 4 种架构 N/A N/A N/A N/A 🔗 后续影响 LIBERO 自 2023 年发布以来，已成为具身智能领域中终身学习和多任务学习的事实标准基准。截至 2026 年，已有大量后续工作基于 LIBERO 进行评测：\nVLA 模型的终身学习能力评估：多个 VLA 模型（如 RT-2、π0、Octo）的终身学习/多任务版本在 LIBERO 上评测 策略架构创新：Diffusion Policy、Flow Matching 等生成式策略在 LIBERO 上验证终身学习能力 预训练策略研究：CoT 推理、世界模型预训练等新范式在 LIBERO 上测试对 LLDM 的影响 持续学习方法：从 EWC/ER 到损失均衡、梯度投影等新方法都在 LIBERO 上对比 LIBERO 论文的代码库已积累 2k+ Stars，其程序化生成管线和标准化的评测流程成为后续机器人终身学习研究的基石。\n💭 个人思考 LIBERO 的三大贡献 标准化了 LLDM 的研究范式——在此之前，每个人用不同的环境、不同的任务、不同的评测流程，结果无法对比。LIBERO 提供了一个\u0026quot;共同的靶场\u0026quot;。 解耦了知识类型——通过精心设计的四个任务套件，首次系统性地分离了陈述性知识和程序性知识在终身学习中的表现差异。 反直觉发现推动了后续研究——\u0026ldquo;顺序微调 \u0026gt; 终身学习算法\u0026rdquo;、\u0026ldquo;预训练有害\u0026rdquo;、\u0026ldquo;任务描述不比任务 ID 强\u0026rdquo;——这些发现直接挑战了学界的共识，推动了更深入的算法设计研究。 局限性 仿真与现实的鸿沟：LIBERO 基于仿真环境，真实的物理机器人的终身学习（磨损、校准漂移、物理接触变化）不在评测范围内 任务同质性：130 个任务虽然多样，但都基于桌面操作场景，缺乏移动操作、人机交互等更广泛的具身任务 评测维度有限：仅评估成功率，缺乏对样本效率、计算开销、推理延迟等工程维度的系统分析 对具身智能终身的展望 LIBERO 揭示的核心矛盾——保护旧知识 vs 学习新知识——在具身智能领域尤其尖锐。物理世界的机器人不像图像分类器可以轻松重放旧数据，因为：\n物理交互成本高，无法无限量回放旧任务 真实的部署环境会变化（光照、物体位置、磨损） 机器人需要同时具备\u0026quot;稳定性\u0026quot;（保证已有能力）和\u0026quot;可塑性\u0026quot;（适应新任务） 在我看来，未来的方向不是\u0026quot;更好的正则化\u0026quot;或\u0026quot;更大的回放缓存\u0026quot;，而是让模型的知识表示本身具有持续扩展性——例如通过模块化架构（为每个能力域分配独立参数模块）、通过世界模型（用仿真生成回放数据）、或者通过自然语言作为知识凝结的中介（用语言描述替代物理演示）。\n📚 延伸阅读 奠基工作：Ellen M. Jong, Ellen\u0026rsquo;s Lifelong Learning — 终身学习提出者和早期基准 经典方法：Kirkpatrick et al., Overcoming catastrophic forgetting in neural networks（EWC, PNAS 2017） 同期工作：Wolczyk et al., Zero-shot transfer in continual RL（CoRL 2022）—— 也研究 LLDM 但侧重零样本迁移 后续发展：Kumar et al., Lifelong Robot Learning with Human-in-the-Loop（RSS 2024）—— 在 LIBERO 上扩展人类反馈 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/libero%E7%B2%BE%E8%AF%BB/","summary":"LIBERO 是首个面向终身决策学习（LLDM）的机器人操作基准，包含 130 个语言条件任务和 4 个任务套件。它系统研究了五种知识迁移场景下的策略架构、终身学习算法、任务顺序、预训练效果等关键问题。一个反直觉的发现：简单的顺序微调在正向迁移上反而优于 EWC、ER 等经典终身学习方法。","title":"论文精读｜LIBERO：面向终身机器人学习的知识迁移基准"},{"content":"📄 论文信息 标题：SparseOccVLA: Bridging Occupancy and Vision-Language Models via Sparse Queries for Unified 4D Scene Understanding and Planning 团队：华中科技大学 + 小米汽车 + 清华 AIR — Chenxu Dang, Jie Wang, Guang Li, Zhiwen Hou, Zihan You, Hangjun Ye, Jie Ma, Long Chen, Yan Wang 发表：arXiv:2601.06474（2026 年 1 月），CVPR 2026 关键词：稀疏占用查询、VLA、4D 场景理解、Occupancy Forecasting、Anchor-Diffusion Planner 代码：https://github.com/MSunDYY/SparseOccVLA 一句话总结：用稀疏占用查询完全替代 ViT patch token，作为视觉输入与 LLM 之间的唯一桥梁，让 LLM 在统一框架内同时做场景理解、占用预测和轨迹规划，彻底解决了 Occupancy 的稠密特性与 VLM 的 token 空间之间的模态鸿沟。 🤔 要解决什么问题？ 在 SparseOccVLA 之前，自动驾驶领域的两条技术路线——VLM（视觉语言模型） 和 语义占用（Semantic Occupancy）——各自发展但从未有效融合。\n问题 1：传统 VLM 做自动驾驶的三个硬伤 硬伤一：Token 爆炸。 自动驾驶需要处理多相机（6-12 路）、多帧（3-8 帧）的视频流。一个典型的配置：6 张 1280×720 图像 × 3 帧历史 = 18 张图。每张图切成 14×14 patch ≈ 4700 个 patch，18 张图就是 8.5 万个 patch token。即使经过 Q-Former 压缩，也会残留几千个 token。LLM 的自注意力计算量与 token 数平方成正比，这个量级根本跑不动。\n硬伤二：时空理解有限。 VLM 的视觉编码器（ViT）在 2D 单帧图像上预训练，天然缺乏 3D 几何和时间动态的理解。多帧图像在输入时只是被\u0026quot;拼接\u0026quot;成更长的序列，LLM 需要自己从一堆 2D patch 中隐式学习 3D 对应关系——这是极其低效的。\n硬伤三：视图歧义。 多相机之间有重叠区域也有盲区，同一个物体可能出现在相邻两个相机的边缘，VLM 很难自行对齐这些跨视图的对应关系。\n问题 2：语义占用与 VLM 之间的模态鸿沟 语义占用（Occupancy）提供了细粒度、统一、显式的 3D 场景表示——每个体素都标有语义类别。它在处理不规则物体（树枝、路障、施工区域）和长尾场景上远优于 3D 检测框。\n但占用有两个特性让它很难和 VLM 融合：\n稠密性：一个标准的占用网格是 200×200×16 = 64 万个体素。即使降采样后也有数十万个体素。这不可能直接作为 token 输入 LLM。 低层语义：占用体素携带的是\u0026quot;这个位置被什么占据\u0026quot;的低层信号，和 LLM 需要的高层语义（\u0026ldquo;这是一辆正在减速的红色轿车\u0026rdquo;）之间存在巨大的语义鸿沟。 问题 3：已有尝试的不足 一些早期工作尝试过两种方式融合：\nVQ-VAE 离散化：把占用 ground truth 通过 VQ-VAE 压缩成离散 code，再嵌入 LLM。问题在于它完全丢弃了非几何视觉线索（红绿灯、车道线、交通标志），而且感知和理解的管线是分离的。 占用监督增强 VLM：如 OccVLA，用占用损失来监督 VLM 的训练。但它仍然依赖 ViT patch token，只是把占用当作辅助监督信号，没有解决根本的 token 爆炸和模态鸿沟问题。 SparseOccVLA 的核心洞察：与其在 ViT patch token 上打补丁，不如用信息更紧凑的稀疏占用查询来完全替代 ViT token，作为 LLM 的唯一视觉输入。\n🏗️ 核心架构：SparseOccVLA 三模块设计 SparseOccVLA 由三个核心模块组成：稀疏占用编码器、统一 LLM 处理器、Anchor-Diffusion 规划器。其核心设计哲学是：只用稀疏占用查询连接视觉与语言，彻底抛弃 ViT patch token。\n模块 1：Sparse Occupancy Encoder 这是 SparseOccVLA 最关键的设计。它的目标是从多相机图像中产生一组紧凑但信息丰富的稀疏占用查询，这些查询同时携带 3D 几何信息和语义信息。\n架构细节 输入：6 路多视图、多帧图像（当前帧 + 历史帧） 图像编码器：标准的 ResNet-50 / VoVNet-99 2D 骨干网络，提取多尺度 2D 特征 查询初始化：一组可学习的稀疏查询嵌入（默认 600 个），每个查询是一个 d 维向量 查询建模：借鉴 SparseOcc / SparseWorld 的设计，通过 stacked encoding layers 让查询与多视图、多尺度图像特征逐步交互 关键设计 1：可变形注意力交叉层 每个稀疏占用查询通过**可变形注意力（Deformable Attention）**从 2D 图像特征中采样信息。相比传统的全局交叉注意力（如 Q-Former）：\n每个查询只关注图像特征中的少量关键位置（4-8 个采样点），而不是整张图 采样点通过学习的偏移量动态调整，适应不同空间位置的查询需求 计算量从 O(N_query × N_patch) 降到 O(N_query × K_sample)，降低 74.9% 的 FLOPs 关键设计 2：Feature-level Distillation 稀疏占用查询在训练过程中需要学会编码完整的 3D 占用信息。为此作者设计了特征级蒸馏：\n教师模型：一个预训练的稠密占用网络（如 Occ3D 的 baseline），输出完整的体素占用特征和预测 学生模型：Sparse Occupancy Encoder 的稀疏查询 蒸馏目标：每个稀疏查询的输出特征需要能够重建对应 3D 区域的占用特征 具体来说，稀疏查询会通过一个轻量级的解码器头（MLP）还原成稠密占用预测，和教师模型的预测计算 L1 损失和语义交叉熵损失。这就保证了稀疏查询虽然只有几百个，但携带了完整的 3D 场景信息。\n关键设计 3：Global Query 机制 作者发现纯局部的稀疏查询会遗漏场景级的高层信息（\u0026ldquo;整体交通状况\u0026rdquo;、\u0026ldquo;道路类型\u0026quot;等）。因此引入了少量（默认 32 个）全局查询（Global Queries）：\n全局查询通过全局自注意力捕获场景级上下文 它们和局部查询在编码层中交替更新，最终合并成统一的查询集送入 LLM 模块 2：Unified LLM — 理解 + 预测 这是 SparseOccVLA 最巧妙的设计：同一个 LLM 同时做场景理解和未来占用预测，两个任务共享相同的推理过程。\n输入构造 LLM 的输入序列由三部分组成：\n[System Prompt] + [稀疏占用查询 token] + [任务 Prompt] 注意：没有 ViT patch token，没有任何图像 token。唯一携带视觉信息的输入就是稀疏占用查询（~632 个 token）。这比传统 VLM 动辄数千的 token 数少了 90% 以上。\n理解任务（Scene Understanding） LLM 基于稀疏占用查询的上下文，输出自然语言描述的场景理解结果：\n场景概括：\u0026ldquo;前方是城市道路，有三辆车，一辆正在减速准备右转\u0026rdquo; 物体级描述：\u0026ldquo;左前方 10.5 米处有一辆白色 SUV，打了右转灯\u0026rdquo; 风险识别：\u0026ldquo;右侧自行车道有非机动车正在接近\u0026rdquo; LLM 使用标准的自回归文本生成来完成理解任务，训练时用标准的下一个 token 预测损失。\n预测任务（Occupancy Forecasting） 与理解任务不同，占用预测需要输出连续的 3D 占用体素，而不是文本 token。SparseOccVLA 的处理方式非常 elegant：\nLLM 的最后一层隐藏状态包含了场景理解后的完整上下文 从这个隐藏状态中解码出预测的稀疏占用查询（未来的占用状态） 这些预测查询通过稀疏占用解码器还原成未来帧的稠密占用预测 关键细节：LLM 在理解任务中学会了\u0026quot;场景中的物体如何随时间演变\u0026rdquo;，然后将这种理解隐式编码到隐藏状态中，再通过一个轻量级的 MLP 投影头解码成未来的稀疏占用查询。这就实现了**\u0026ldquo;理解驱动预测\u0026rdquo;**的效果。\n训练时用未来帧的占用 ground truth 做监督，损失函数包括 L1 重建损失和语义交叉熵损失。\n模块 3：LLM-guided Anchor-Diffusion Planner 规划器的设计体现了 LLM 和扩散模型的互补优势：\nLLM 擅长高层决策和粗粒度评估（\u0026ldquo;直行还是转弯？哪个锚点轨迹更合理？\u0026quot;） 扩散模型 擅长精细的连续回归（\u0026ldquo;轨迹的准确 waypoints 是什么？\u0026quot;） 规划器的四个步骤 第一步：锚点生成\n预定义 K 个轨迹锚点（~64 个），覆盖典型的驾驶模式：直行、左转、右转、加速、减速、靠边等。每个锚点是一条粗粒度的轨迹。\n第二步：LLM 锚点评分\nLLM 基于稀疏占用查询提供的场景理解，对每个锚点输出一个语义评分：\n\u0026ldquo;锚点 3（右转）的语义合理性为 0.92，因为前车打了右转灯\u0026rdquo; \u0026ldquo;锚点 7（加速直行）的语义合理性为 0.12，因为前方有行人过马路\u0026rdquo; 这个过程把 LLM 变成了一个场景感知的轨迹先验评估器，而不是让它直接回归轨迹坐标（那正是 LLM 不擅长的）。\n第三步：扩散去噪\n带噪声的轨迹通过扩散解码器逐步去噪。在每个去噪步中，扩散模型同时关注三类特征：\n文本级指令特征：来自 LLM 的隐藏状态（\u0026ldquo;保持直行\u0026quot;的语义指令） 占用查询特征：稀疏查询提供的 3D 场景上下文 自车状态特征：当前车速、朝向、加速度 这三类特征通过交叉模态轨迹-条件融合交替与噪声轨迹交互，让去噪过程同时受到语义、几何和运动学约束的引导。\n第四步：锚点-轨迹融合\n扩散解码器的输出与 LLM 的锚点评分融合——高分的锚点对最终轨迹有更大的引导权重。这相当于让LLM 做高层决策 + 扩散模型做精细拟合。\n📊 实验效果：三赛道全面 SOTA 赛道 1：场景理解（OmniDrive-nuScenes） 方法 CIDEr BLEU-4 METEOR ROUGE BEVDet+MCAN 0.579 0.185 0.307 0.436 CenterPoint+MCAN 0.595 0.197 0.311 0.445 OmniDrive 0.592 0.173 0.316 0.453 HERMES (SOTA) 0.743 0.267 0.381 0.524 SparseOccVLA 0.795 0.293 0.401 0.547 SparseOccVLA 在 CIDEr 上相比 SOTA (HERMES) 提升 7%，BLEU-4 提升 9.7%。\n这意味着：稀疏占用查询携带的场景信息比 Q-Former 压缩的 ViT token 更丰富——虽然 token 数量只有后者的 1/5 到 1/10，但信息的\u0026quot;密度\u0026quot;和\u0026quot;质量\u0026quot;更高。\n赛道 2：占用预测（Occ3D-nuScenes） 方法 mIoU (当前帧) mIoU (预测 1s) mIoU (预测 2s) Avg mIoU SparseOcc (R50) 12.1 9.8 8.2 10.0 SparseWorld (R50) 13.6 11.9 10.1 11.9 SparseOccVLA (R50) 14.2 12.8 10.9 12.6 SparseOcc (V99) 21.3 18.4 15.7 18.5 SparseWorld (V99) 22.4 20.1 17.3 19.9 SparseOccVLA (V99) 23.1 20.7 18.2 20.6 占用预测上 SparseOccVLA 比之前最强的 SparseWorld 高出 0.5-0.7 mIoU。这个提升来自 LLM 的\u0026quot;理解增强预测\u0026rdquo;——LLM 在理解任务中学到的场景演变知识帮助了占用预测。\n赛道 3：轨迹规划（nuScenes 开环） 方法 L2 (1s) ↓ L2 (2s) ↓ L2 (3s) ↓ Avg L2 ↓ 碰撞率 ↓ UniAD 0.55 1.20 2.03 1.26 — VAD 0.41 0.98 1.72 1.04 — SparseDrive 0.38 0.94 1.68 1.00 — SparseOccVLA (w/o planner) 0.40 0.96 1.70 1.02 3.2% SparseOccVLA (w/ Anchor-Diffusion) 0.35 0.88 1.59 0.94 1.8% Anchor-Diffusion Planner 相比直接从 LLM 输出轨迹的做法，L2 误差降低 7.8%，碰撞率从 3.2% 降至 1.8%。这验证了 LLM+扩散双模块设计的有效性——LLM 决定方向，扩散模型决定精度。\n🔬 消融实验 占用查询的关键作用 配置 CIDEr Avg mIoU Avg L2 完整 SparseOccVLA 0.795 12.6 0.94 去掉占用蒸馏 0.752 10.8 1.02 去掉全局查询 0.771 11.9 0.97 只用 300 个查询 0.768 11.5 0.98 只用 900 个查询 0.793 12.7 0.94 去掉占用蒸馏 → CIDEr 降 5.4%，mIoU 降 14.3%：说明特征级蒸馏对保持稀疏查询的信息密度至关重要 去掉全局查询 → 各指标小幅下降：全局查询提供了场景级信息，对理解任务贡献明显 查询数量：600 个是最优平衡点，300 个信息不够，900 个收益递减 LLM-guided Planner 的效果 配置 Avg L2 ↓ 碰撞率 ↓ 完整 (anchor scoring + diffusion) 0.94 1.8% 去掉 anchor scoring（所有锚点等权） 0.98 2.5% 去掉扩散（直接回归） 1.05 3.1% 去掉跨模态融合（只用轨迹特征） 1.01 2.8% anchor scoring 贡献：LLM 的先验评估让扩散模型聚焦于合理区域，减少无效采样 扩散贡献：扩散模型的迭代去噪比单步回归精度更高 跨模态融合贡献：占用特征和文本指令都提供了有价值的约束信息 💡 个人思考 为什么 SparseOccVLA 能成功\u0026rdquo; SparseOccVLA 的成功来自一个关键洞察：占用网络和 VLM 看似不兼容，但稀疏占用查询可以作为两者的天然桥梁。\n传统方法试图把稠密的占用数据强行塞进 VLM 的 token 空间——这不 work，因为 token 空间的设计初衷是处理离散符号，不是稠密 3D 体素。\nSparseOccVLA 的做法是反过来的：让信息往\u0026quot;稀疏\u0026quot;的方向流动。先用稀疏编码器把稠密占用压缩成稀疏查询（信息密度提升 1000 倍），再把这些查询送入 LLM。LLM 处理的 token 数量少、信息密度高，自然就更高效。\n这个思路可以推广到自动驾驶的其他领域：任何稠密的底层表示（占用、BEV、点云）都可以通过稀疏查询的方式与 LLM 对接。\n相比 DriveVLA-W0 的感知 token 拼接 在之前的 VLA vs 感知文章里，我对比过几种融合方式。SparseOccVLA 和 DriveVLA-W0 有一个根本区别：\nDriveVLA-W0：感知模块输出 BEV token + ViT patch token 一起喂入 LLM。LLM 同时处理两种 token，需要自己在 attention 层中做对齐。 SparseOccVLA：只有稀疏占用查询一种 token 输入 LLM。对齐是在编码阶段（Sparse Occupancy Encoder + 特征蒸馏）完成的，LLM 不需要再处理模态对齐。 这个差异意味着：SparseOccVLA 的 LLM 更\u0026quot;轻\u0026rdquo;——它不需要理解\u0026quot;ViT token 和 BEV token 有什么关系\u0026quot;，只需要理解场景本身。这是从\u0026quot;LLM 做对齐\u0026quot;到\u0026quot;编码阶段做对齐\u0026quot;的范式转变。\n局限 依赖稠密教师：特征蒸馏需要一个预训练的稠密占用网络作为教师。这个教师的性能上限直接决定了稀疏查询的信息上限。 开环评测偏多：NuScenes 的规划评测是开环的（给定场景输出轨迹，不与环境交互），闭环评测结果未充分报告。 计算开销仍未完全解决：虽然 token 数降到了 600+，但 LLM 本身的推理延迟（特别是 7B+ 规模的模型）仍然是实时部署的瓶颈。 未来方向 SparseOccVLA 打开了几个很有意思的方向：\nSparseQuery 作为通用视觉接口：既然稀疏占用查询可以替代 ViT token，那 3D 检测 query、BEV query、运动预测 query 是不是也可以用同样的方式接入 LLM？ 更深的 LLM-感知融合：SparseOccVLA 用 LLM 的隐藏状态解码预测结果。能不能让 LLM 的推理结果反过来指导感知模块的注意力分配？ 端到端的闭环训练：如果规划器的碰撞率可以反向传播到稀疏占用编码器，会不会自动学到更\u0026quot;规划友好\u0026quot;的 3D 表示？ 📝 总结 SparseOccVLA 是 2026 年 VLA 领域最重要的论文之一。它的核心贡献是：\n方法上：用稀疏占用查询完全替代 ViT patch token，消除了传统 VLM 做自动驾驶的 token 爆炸和模态鸿沟问题 架构上：同一个 LLM 同时做理解、预测、规划，实现了真正的\u0026quot;统一 4D 场景理解\u0026quot; 效果上：在三项基准（场景理解、占用预测、轨迹规划）上均达到 SOTA 趋势上：打开了\u0026quot;感知模块的输出 query 直接作为 LLM 输入\u0026quot;的范式——这可能是 VLA 架构的下一个演进方向 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/sparseoccvla%E7%B2%BE%E8%AF%BB/","summary":"SparseOccVLA 用稀疏占用查询作为视觉与语言之间的单一桥梁，彻底摆脱 ViT patch token，让 LLM 在统一框架内同时完成场景理解、占用预测和轨迹规划。在 OmniDrive-nuScenes 上 CIDEr 提升 7%，Occ3D-nuScenes mIoU 提升 0.5，nuScenes 规划指标达 SOTA。","title":"论文精读｜SparseOccVLA：稀疏占用查询桥接 Occupancy 与 VLM，实现统一 4D 场景理解与规划"},{"content":"📄 论文信息 标题：Qwen-VLA: Unifying Vision-Language-Action Modeling across Tasks, Environments, and Robot Embodiments 团队：阿里通义千问（Qwen 团队）— Qiuyue Wang、Mingsheng Li、Jian Guan、Junyang Lin、Shuai Bai、Jingren Zhou 等 40 余人 发表：arXiv:2605.30280（2026 年 5 月首发，34 页技术报告） 关键词：统一 VLA、认知主干+运动专家、DiT 动作解码器、跨本体协同训练、分布外泛化 一句话总结：把操作、导航、轨迹预测三类异构具身决策问题塞进同一个模型，靠\u0026quot;认知主干 + 运动专家\u0026ldquo;的解耦架构和\u0026rdquo;T2A→CPT→SFT→RL\u0026ldquo;四阶段训练，做到了一个模型横跨多机器人本体、多任务家族。 🤔 要解决什么问题？ 具身智能长期被\u0026rdquo;一个任务一个模型\u0026ldquo;的研究范式割裂：做操作的不管导航，做导航的不碰轨迹预测，每个实验室再绑定一种机器人本体。结果是能力碎片化、跨任务无法迁移、跨本体几乎为零泛化。\nQwen 团队想回答一个根本问题：异构的具身决策问题，能不能用同一个视觉-语言-动作（VLA）模型来统一？\n这条路有三个硬骨头：\n任务异构：操作输出的是关节/末端连续动作，导航输出的是路径点，自动驾驶轨迹预测输出的是连续坐标——输出空间语义各不相同。 本体异构：单臂、双臂、人形、移动底盘，控制频率从 5Hz 到 50Hz，自由度从 7 到 20+。 训练不对称：视觉-语言骨干（VLM）已是强预训练状态，而动作解码器是随机初始化，朴素联合训练既低效又不稳定。 Qwen-VLA 的破局思路是双模块解耦 + 四阶段渐进：把\u0026quot;理解\u0026quot;和\u0026quot;动作生成\u0026quot;交给不同模块，再用一套渐进式训练策略让两者平稳对齐。\n🧠 核心架构：认知主干 + 运动专家 Qwen-VLA 的设计哲学类比大脑分工——大脑皮层负责认知，小脑负责运动。论文原话称之为\u0026rdquo;cerebrum + cerebellum\u0026ldquo;式协作。\n认知主干（Cognitive Trunk）：Qwen3.5 VLM 主干选用阿里自家的 Qwen3.5——一个原生多模态模型，关键特性有三：\n特性 设计 作用 早期视听融合 ViT + 空间合并的视觉 token 直接交错插入文本 token 流 图像/视频/语言在单一 Transformer 内统一处理 混合注意力 多数层用门控线性注意力（GLA），间隔插入分组查询 softmax 注意力 长多模态序列高效编码，关键位置保留全局精推理 强预训练先验 继承互联网级图文知识 免费\u0026quot;举一反三\u0026quot;的语义与空间推理能力 运动专家（Motor Expert）：DiT Flow Matching 解码器 动作生成挂在 VLM 外挂的一个单流 DiT 风格 Flow Matching 策略上，规模约 1.15B 参数（16 个 DiT block）：\n输入拼接：把 VLM 隐藏状态与带噪动作 chunk 拼成一个序列，走联合 self-attention 条件注入：AdaLN 时间步调制 + 与骨干对齐的多段 RoPE 生成方式：Flow Matching 目标，推理时少量欧拉积分步即可输出，满足低延迟实时控制 解耦收益：大参数量的 VLM 不必承担高频动作生成，专家专心处理多模态、高频的动作分布 这种\u0026rdquo;大脑慢思考 + 小脑快执行\u0026ldquo;的分层，和 π0、GR00T 等当代 VLA 走在同一脉络上，但 Qwen-VLA 把专家做得更大（1.15B）也更\u0026quot;单流\u0026rdquo;，强调与主干 token 级的深度融合。\n🪜 四阶段渐进训练策略 论文最有工程价值的部分，是它不对称地处理预训练好的 VLM 和随机的 DiT，避免后者把前者\u0026quot;带坏\u0026quot;。整套配方分四步：\n阶段 名称 解冻模块 核心目标 Stage I T2A（Text-to-Action） 仅 DiT 解码器 无视觉，纯语言+本体 prompt 重建动作，建立结构化动作先验 Stage II CPT（持续预训练） VLM + DiT 全解冻 把动作先验接地到视觉观察，混合仿真与真机轨迹 Stage III SFT（监督微调） 全模块，分两支 多任务支：VQA/定位/操作/导航联合微调；真机支：遥操作数据适配物理硬件 Stage IV RL（强化学习） 全模块 用环境闭环任务成功奖励继续优化，跳出模仿学习的分布偏移 为什么先做 T2A？ 这是论文最反直觉、也是最漂亮的一步。作者用\u0026quot;压缩视角\u0026ldquo;解释：一段操作轨迹可能是上千个关节值，而任务意图只用一句\u0026rdquo;pick up the red cup\u0026ldquo;加本体描述就能压缩表达。T2A 就是在学这条\u0026quot;解压缩映射\u0026rdquo;——故意拿掉图像，强迫 DiT 只靠语言去预测动作，从而学到\u0026quot;不同语言描述如何选择动作分布的不同区域\u0026quot;\u0026ldquo;本体 prompt 如何把同一意图调制成不同运动程序\u0026rdquo;。\n消融数据显示，加入约 20% 合成 T2A 数据 + 80% 真实数据、采用全序列预测模式时，SFT 成功率从 60.9% 提升到 71.1%（+10.2 pp）。这证明 T2A 不是简单 warm-start，而是给解码器灌入了语言索引的动作结构。值得一提的是，chunk 预测模式在所有配比下都一致逊色于全序列预测（例如 10% 合成数据时落后 4.9 pp），说明让解码器从早期就接触完整时序的动作序列，对学到时间连贯性与组合性至关重要。\nRoboInF 合成数据扩充 为支撑 T2A 与后续阶段，Qwen 团队还提出 RoboInF 数据生成管线，产出大量带细粒度动作描述的合成轨迹。同一 episode，相比粗糙任务标签，细粒度动作 caption 能为解码器提供更精确的语言索引信号。\n这套数据覆盖短时序（抓取—搬运—放置的紧凑序列）到长时序（多物体、可分解为若干子任务）的不同难度，为统一模型在时域尺度上的泛化提供了基础。\n🌐 跨任务统一：操作 + 导航 + 轨迹预测 统一的问题形式化 所有任务被塞进同一个条件预测框架：\n给定视觉观察 oₜ、语言指令 x、本体描述 e、可选任务标识 z，预测未来 H 步目标序列 y： p_θ(y | oₜ, x, e, z)\n不同任务的 y 语义不同，但都被塞进同一个张量接口：\n任务族 输出 y 的含义 操作 末端位姿、关节角、夹爪开合、灵巧手关节 导航（VLN） 每个路径点的 (Δx, Δy, Δθ) 相对位移与转向 轨迹预测（含自动驾驶/运动预测） 自车或周围实体的连续空间轨迹 第一人称人因数据 MANO/骨架关节的人体或手部运动轨迹 统一动作表示：H×K 张量 + 通道掩码 这是工程上的关键巧思：不强行把所有本体揉进同一物理语义空间，而是统一张量接口与掩码方案。\n目标张量 Y ∈ ℝ^(H×K)，H 为预测时域，K 为统一通道数 每个样本只用前 c ≤ K 个有效通道，其余零填充 二值掩码 M ∈ {0,1}^(H×K) 标记哪些通道有效，阻止 padding 污染梯度 一套 DiT 参数搞定所有控制模式，无需本体专属输出头 本体感知 Prompt 条件化 每个训练样本前会拼一段机器人专属文本提示：\n\u0026ldquo;The robot is {robot_tag} with {single arm / dual arms}[, waist][, and mobile base]. The control frequency is {FPS} Hz. Please predict the next {chunk_size} control actions to execute the following task: {ori_instruction}.\u0026rdquo;\n一段纯文本就把机器人型号、臂配置、控制频率、预测时域全部告诉模型——换本体只需换 prompt，权重完全共享。\n📊 实验结果：一个模型打全场 仿真操作：通才胜过专才 Qwen-VLA 在四个仿真基准上单模型横跨四平台，对比各基准分别微调的专才模型：\n基准 平台类型 Qwen-VLA-Instruct 对比要点 LIBERO 单臂桌面 97.9% 与最佳专才持平 Simpler-WidowX 真实到仿真 73.7% 超过多数专才 RoboCasa-GR1 双臂人形厨房 56.7% 大幅超过 π0.5(37.0%)、GR00T N1.6(49.9%)、Being-H0.5(53.3%) RoboTwin 2.0 双臂 Easy/Hard 86.1% / 87.2% 双难度均强 结论很硬：一个通才模型，在多数基准上反超为每个平台单独训练的专才。\n真实世界 ALOHA 双臂 在 ALOHA 双臂平台上做了 in-domain 与 OOD 双重评测，覆盖抓取放置、清桌、叠碗、毛巾折叠、精细操作六类任务。从 Qwen-VLA-Base 微调的版本（w/ pretrain）相对从零训练版本（w/o pretrain）有显著提升，证明大规模具身预训练能迁移到物理硬件。\n视觉语言导航（VLN-CE） 在 R2R / RxR 的 Val-Unseen 上：\nR2R：Oracle SR 69.0、SR 57.5，超过 StreamVLN RxR：SR 59.6、SPL 47.8，领先所有开源基线 分布外（OOD）泛化 这是 Qwen-VLA 最亮眼的卖点。它在场景布局、背景、光照、物体配置、机器人本体五种扰动下保持鲁棒：真实 ALOHA 实验平均 OOD 成功率 76.9%，DOMINO 动态操作零样本成功率 26.6%。\n消融还揭示两点：其一，视觉-语言协同训练（VL+VLA）不干扰简单任务，反而提升复杂任务——互联网图文知识是真金白银的先验；其二，RL 后训练在 SimplerEnv 采样的 rollouts 上持续提升各阶段成功率与 DOMINO 操作分数。\n关键消融结论 消融维度 结论 T2A 配比 ~20% 合成 + 80% 真实、全序列预测最佳 VL 协同训练 简单基准持平，复杂基准（RoboTwin/RoboCasa）显著受益 多本体协同 跨本体数据互为正则，单本体训练反而更易过拟合 RL 后训练 闭环奖励持续提升任务成功率与动态操作分数 状态条件 显式注入本体状态可进一步提升 RoboTwin-2.0 表现 ⚔️ 与 DriveVLM、EMMA 等的横向对比 Qwen-VLA 的定位是通用具身基础模型，而 DriveVLM、EMMA 是自动驾驶垂域代表，二者的差异本质上是\u0026quot;广 vs 深\u0026quot;：\n维度 DriveVLM EMMA（Waymo） Qwen-VLA 目标领域 自动驾驶场景理解与推理 端到端多任务驾驶 跨域具身：操作+导航+轨迹预测 架构 VLM + 小模型双系统 Gemini 单大模型 Qwen3.5 VLM + DiT 动作专家 动作输出 不直接输出动作，下发规划 轨迹/感知多任务头 统一 H×K 张量，含驾驶轨迹 CoT 推理 显式描述→分析→推理链 隐式，端到端 继承 VLM 推理能力，无强结构化链 本体泛化 单一自车 单一自车 多本体 prompt 条件化 训练范式 监督微调 监督多任务 T2A→CPT→SFT→RL 四阶段 核心洞察：DriveVLM/EMMA 把\u0026quot;自动驾驶\u0026quot;做深，Qwen-VLA 把\u0026quot;具身决策\u0026quot;做广——把驾驶轨迹预测视作统一动作空间的一个特例。从自动驾驶视角看，Qwen-VLA 提供了一种新思路：与其为驾驶单独训模型，不如把它纳入更宽的具身动作分布，让机器人操作学到的空间推理与运动先验反哺轨迹生成。\n🚗 自动驾驶与机器人：双领域应用价值 Qwen-VLA 真正的看点是双领域复用：\n机器人侧：LIBERO 97.9%、RoboTwin 86.1%/87.2%、RoboCasa 56.7%，单模型覆盖单臂/双臂/人形/移动平台，已具备实用级操控能力。 自动驾驶侧：问题形式化中显式纳入\u0026quot;autonomous driving\u0026quot;与\u0026quot;motion forecasting\u0026quot;——把自车未来轨迹和周围实体轨迹都塞进统一预测空间。配合导航数据的 (Δx, Δy, Δθ) 路径点表征，Qwen-VLA 天然适配低速/园区/泊车等需要语义理解的轨迹规划场景。 对自动驾驶从业者的启示有三：\n动作即轨迹：用 Flow Matching 动作专家直接生成连续驾驶轨迹，绕开传统离散规划管线 本体 prompt 可迁移：把\u0026quot;车型、控制频率、预测时域\u0026quot;写进 prompt，车队异构配置无需重训 OOD 鲁棒性可借鉴：场景/背景/光照扰动的泛化机制，正是长尾 corner case 的解药 📝 个人思考 Qwen-VLA 最打动我的是它的\u0026quot;工程克制\u0026quot;。四阶段训练看似繁复，实则是把一个不可能稳定的联合训练问题（强预训练 VLM + 随机 DiT）拆成了可解的子问题——T2A 用纯语言先驯服解码器这一招尤为巧妙，本质上是在用语言作为动作分布的\u0026quot;索引压缩\u0026quot;，让解码器在没看到图像前就建立结构化先验。这种思路对任何\u0026quot;大模型 + 小头\u0026quot;的架构都有借鉴价值。\n第二点启发是统一表示的边界。Qwen-VLA 没有强行统一物理语义（不像一些工作要求所有机器人映射到同一坐标系），而是统一张量接口 + 通道掩码 + prompt 条件化——这是务实的工程妥协：把\u0026quot;统一\u0026quot;做到梯度不冲突的程度，剩下的交给模型自己学。掩码防污染、prompt 标识本体，是简洁但关键的两个 trick。\n第三点是关于自动驾驶的定位。论文把驾驶轨迹预测列为统一动作空间的一项，但我注意到主实验更侧重操作和导航，驾驶相关的定量结果偏少。这意味着 Qwen-VLA 当前更像是给自动驾驶提供了一种架构范式（认知主干 + 运动专家 + 四阶段），而非直接可用的驾驶模型。真正要上车，还需要大规模驾驶轨迹数据和闭环仿真验证——而这正是 DriveVLM/EMMA 之类垂域工作的护城河。\n总体而言，Qwen-VLA 是国产 VLA 路线的一次体系化宣言：它证明了\u0026quot;一个模型搞定多任务、多本体、跨域泛化\u0026ldquo;在工程上已经跑通，剩下的差距主要是数据与算力。对机器人与自动驾驶这两个长期分裂的社区，它指明了一条统一基础模型的可行路径。\n🔗 延伸阅读 工作 团队 与 Qwen-VLA 的关系 π0 / π0.5 Physical Intelligence 同为\u0026quot;VLM + Flow Matching 动作专家\u0026quot;路线，Qwen-VLA 在 RoboCasa 上反超 π0.5 GR00T N1.x NVIDIA 人形机器人基础模型，Qwen-VLA 在 RoboCasa 上领先 DriveVLM 上海交大 × 蔚来 自动驾驶 VLM 代表，垂域做深；Qwen-VLA 做广 EMMA Waymo Gemini 端到端驾驶，单大模型 vs Qwen-VLA 双模块 OpenVLA Stanford/Princeton 开源离散化 VLA，对比对象 StarVLA 社区 开源 VLA 代码库，Qwen-VLA 评测协议与其对齐 Diffusion Policy Columbia/TRI 扩散动作生成，DiT Flow Matching 的近亲对照 📖 这是论文精读系列的第 10 篇。当一个模型同时把手臂操作、室内导航和驾驶轨迹都纳入统一动作空间，你认为自动驾驶会从中受益，还是会被通用具身模型\u0026quot;反向吞噬\u0026rdquo;？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/qwen-vla%E7%B2%BE%E8%AF%BB/","summary":"阿里 Qwen-VLA 用\u0026rsquo;认知主干+运动专家\u0026rsquo;双模块解耦架构（类比大脑皮层与小脑分工），将操作、导航、轨迹预测三类异构具身决策问题统一进同一模型。它采用 T2A→CPT→SFT→RL 四阶段渐进训练策略，稳定解决预训练 VLM 与随机初始化 DiT 动作解码器的不对称训练问题。在多机器人本体和多任务家族上展现一致跨任务性能与强分布外泛化。","title":"论文精读｜Qwen-VLA：阿里通义千问统一视觉-语言-动作基础模型"},{"content":"一句话理解模型评估与回归检测 模型回归检测 = 每次版本迭代时，有系统、有量化地确保新模型\u0026quot;不比旧模型差\u0026quot;，而不是靠发版前跑几个case看看效果\n低级做法：训练完看一眼loss曲线，找几个场景跑一下可视化，\u0026ldquo;看起来没问题\u0026quot;就发版\n专业做法：构建离线评估Pipeline + 精心设计的回归测试集 + 统计显著性分析 + CI/CD门禁自动化\n\u0026ldquo;回归\u0026rdquo;(Regression)在模型迭代中的含义与软件工程一致——新版本不应该破坏已有的能力。一个模型可能在nuScenes验证集上mAP涨了2个点，但在某些关键场景（如夜晚雨天）上反而变差了。没有系统的回归检测，这种退化很容易被淹没在平均指标的大海里。\n第一部分：评估Pipeline搭建 一个生产级别的模型评估Pipeline至少由三个维度的评估组成：开环感知、闭环规划和计算延迟。这三个维度分别回答三个不同的问题：\u0026ldquo;模型看得准不准\u0026rdquo;、\u0026ldquo;模型开得好不好\u0026rdquo;、\u0026ldquo;模型跑得快不快\u0026rdquo;。\n开环感知评估 开环感知评估是在离线数据集上评估模型感知模块的精度。这是最常见也最容易搭建的评估环节。\n典型指标矩阵：\n感知任务评估覆盖以下维度：\n感知任务 核心指标 辅助指标 3D目标检测 mAP@IoU=0.5/0.7, NDS mATE, mASE, mAOE BEV语义分割 mIoU 单类别IoU, boundary IoU 在线地图 mAP for lane/divider Chamfer distance 运动预测 minADE(1/5/10), minFDE miss rate, overlap rate Pipeline中的关键陷阱：\n陷阱1：数据集泄露(Data Leakage)。训练集和测试集不能包含来自同一段路测序列的数据。这在自动驾驶中尤其重要，因为连续帧之间存在高度相关性。标准做法是：按\u0026quot;场景\u0026rdquo;(Scene)来划分数据，同一段路测中连续几十秒的数据要么全部在训练集，要么全部在测试集。\n陷阱2：指标与最终性能的gap。开环感知指标提升并不总是带来闭环驾驶性能提升。例如，mAP涨了2个点，但在同一个模拟场景中开一圈，接管率可能反而增加了。这是因为感知指标无法捕捉到\u0026quot;哪些错误真正会影响驾驶决策\u0026quot;。\nWaymo在实际运营中报告过这样一个案例：某个模型在夜间检测的mAP提升了5%，但在夜间道路上的实际接管率反而上升了3%。根因分析发现，mAP提升主要来自对远处静止车辆的检测精度提高，但这些车辆与驾驶决策无关；而近处动态车辆的召回率实际上略有下降。这个案例说明：指标体系必须与最终驾驶性能对齐，不能只看通用感知指标。\n闭环规划评估 闭环评估是在仿真环境中，用新模型替换规划模块，评估完整驾驶循环的性能。这是比开环评估更接近最终产品体验的评估方式。\n常见闭环指标：\n驾驶得分(Driving Score)：所有场景的平均分，加权考虑安全和任务完成度 接管率(Intervention Rate)：每百公里需要人工接管的次数——这是最\u0026quot;接地气\u0026quot;的指标 碰撞率(Collision Rate)：每千公里发生碰撞的频率 任务完成率(Task Success Rate)：在规定时间内完成指定驾驶任务的概率 舒适性评分(Comfort Score)：基于加速度、加加速度的客观量度 开环vs闭环的内在张力：\n开环评估和闭环评估之间存在天然的错配。开环评估要求模型在给定完整历史轨迹的条件下做出精确的预测/规划，而闭环评估中模型只能看到已执行的部分轨迹。这导致一个有趣的现象：存在一些\u0026quot;开环好、闭环差\u0026quot;的模型——它们在正确的历史输入下能做出精确预测，但一旦自己的预测被用于闭环执行，预测误差累积后会迅速偏离正确轨迹。\n业界解决这个问题的方法是\u0026quot;开环+闭环双轨评估\u0026quot;：\n开环评估作为\u0026quot;第一道门\u0026quot;——筛选掉感知精度不达标的模型版本 闭环评估作为\u0026quot;第二道门\u0026quot;——在仿真环境中验证规划决策质量 只有双轨都通过，才允许模型进入路测验证阶段 计算延迟评估 计算延迟是模型评估中最容易被忽视的环节。一个感知精度顶尖但推理速度达不到10Hz的模型，在车上和废纸没什么区别。\n延迟评估的核心维度：\n端到端延迟 (End-to-End Latency)：从传感器数据到达计算平台到输出控制指令的时间。L4系统通常要求\u0026lt;150ms。 模块级延迟：感知、预测、规划每个模块的独立延迟。需要分析pipeline中哪个模块是瓶颈。 P99延迟：不是平均延迟，而是99分位的延迟，用于评估在计算负载波动时的稳定性。 工程实践中的量化经验：\n模块 目标延迟 警告延迟 门禁阈值 感知(含BEV编码器) \u0026lt;50ms 50-80ms \u0026gt;100ms 运动预测 \u0026lt;20ms 20-40ms \u0026gt;50ms 规划决策 \u0026lt;30ms 30-50ms \u0026gt;60ms 端到端pipeline \u0026lt;100ms 100-150ms \u0026gt;150ms 一个容易被忽略的细节：GPU计算时间不是评估的全部。CPU上的后处理逻辑（如NMS、轨迹平滑）在复杂场景中可能占总延迟的40%以上。必须对CPU和GPU的计算时间分别打点统计。\n第二部分：回归测试集设计 回归测试集与一般的验证集不同。验证集的目标是\u0026quot;评估模型的泛化能力\u0026quot;，而回归测试集的目标是**\u0026ldquo;捕捉新版本可能退化的特定场景\u0026rdquo;**。\n设计原则 原则1：场景覆盖的完整性\n回归测试集需要覆盖所有已知的\u0026quot;关键场景类别\u0026quot;。以Waymo的回归测试集为例，其场景分类维度包括：\n道路类型：高速路、城市道路、乡村公路、环岛、停车场的出入口 光照条件：白天、黄昏、夜晚 天气：晴天、小雨、大雨、雪天 交互类型：无交互（自由行驶）、单车交互（如换道）、多车交互（如无保护左转）、行人交互 异常情况：施工区域、交通事故现场、逆行车辆、动物穿行 每个维度组合至少需要5-10个场景实例。按照这个设计，即使只考虑3种道路类型×3种光照×3种天气×5种交互类型×3种异常情况，也需要超过400个测试场景。实际中，业界公司的回归测试集规模通常在2000-10000个场景之间。\n原则2：难度层级梯度\n不是所有场景都有相同的难度。回归测试集需要包含不同难度层级的场景：\nP0层（必备通过）：最基本的交通场景。城市道路直行、正常跟车、遇到红灯停车。这些场景如果通过不了，模型根本不具备上路资格。P0场景应该100%通过。 P1层（核心能力）：常规交互场景。换道、合流、转弯让行。这些是L4的核心能力。P1场景通过率目标\u0026gt;95%。 P2层（进阶能力）：复杂交互场景。无保护左转、环岛通行、多车道换道。P2场景通过率目标\u0026gt;85%。 P3层（边缘场景）：罕见/极端场景。动物穿行、临时交通管制、路面大坑。P3场景不要求高通过率，但需要监控趋势——新版本不能比旧版本退步。 原则3：对抗样本纳入\n回归测试集必须包含人为构造的\u0026quot;对抗样本\u0026quot;——即在场景中引入微小的扰动，测试模型的鲁棒性。典型的对抗注入方式包括：\n光照扰动：在验证场景的特定帧中随机改变亮度(-20%至+20%)或添加光照斑块 遮挡注入：在摄像头视野的部分区域添加遮蔽物，模拟前方大车遮挡 传感器噪声：在LiDAR点云中随机删除5-15%的反射点，模拟灰尘/雨滴遮挡 交互偏离：让NPC车辆以\u0026quot;不太合理但有可能\u0026quot;的方式行动（如略微延迟反应时间） 测试集维护 回归测试集需要持续更新，不是一次建好就永久使用。维护实践包括：\n新增场景：每当路测中发现新的关键场景（如新的失败模式），将其加入回归测试集 场景去重：定期做场景聚类，剔除过于相似的场景，控制测试集规模的持续膨胀 版本迭代标注：为每个场景标注\u0026quot;创建日期\u0026quot;和\u0026quot;初始版本通过状态\u0026quot;，方便追踪场景是否被\u0026quot;遗忘\u0026quot; 第三部分：指标一致性分析 评估中最隐蔽的陷阱是：两次评估结果之间的差异到底是真实的模型能力变化，还是来自数据抽样/随机种子/仿真实例的波动？\nConfidence Interval 评估指标永远是一个统计量，不应该只看一个数字。对于每次评估，需要报告置信区间。\n常用的置信区间计算方法：\nBootstrap法：对测试集的N个样本做B次有放回抽样（B通常取1000-10000），每次计算指标值，得到指标的分布。取2.5%和97.5%分位点作为95%置信区间。 解析法：对于服从特定分布的指标（如成功率为二项分布），可以用正态近似法。例如，碰撞率的置信区间为： $$ \\hat{p} \\pm z_{\\alpha/2} \\sqrt{\\frac{\\hat{p}(1-\\hat{p})}{n}} $$工程实践中的经验规则：\n如果新旧版本的置信区间完全不重叠，可以认为有\u0026quot;强证据\u0026quot;表明模型发生了变化 如果置信区间存在部分重叠，则需要更进一步的统计检验来判断变化是否显著 置信区间的宽度与测试集规模相关：测试集越小，区间越宽，判断力越弱 假设当前版本的碰撞率为0.5%（1000公里中发生5次碰撞），测试规模为10000公里，95%置信区间约为[0.36%, 0.64%]。如果新版本的碰撞率落在[0.36%, 0.64%]区间内，需要更仔细的分析才能下结论。\nStatistical Significance 统计显著性检验用于回答：\u0026ldquo;观测到的差异有多大可能性只是随机波动？\u0026rdquo;\n最常用的方法是双样本假设检验。对于连续指标（如mAP、ADE），使用Welch\u0026rsquo;s t-test：\n$$ t = \\frac{\\bar{x}_1 - \\bar{x}_2}{\\sqrt{\\frac{s_1^2}{n_1} + \\frac{s_2^2}{n_2}}} $$对于比率指标（如碰撞率、接管率），使用比例检验或卡方检验。\n工程中的p-value阈值设定：\n使用场景 p-value阈值 含义 研发阶段的A/B测试 0.05 标准显著性水平 发布门禁 (Release Gate) 0.01 更严格，降低误升级风险 安全关键指标退化检测 0.001 极度保守，尽量不放行有风险的新版本 需要注意的是：当回归测试集中包含大量独立指标时（比如30个场景类别×5个指标=150次检验），需要进行多重假设检验校正。常用的方法包括Bonferroni校正（将阈值除以检验次数）和FDR(False Discovery Rate)控制。\nEffect Size 统计显著性回答的是\u0026quot;差异是否真实\u0026quot;，而效应量回答的是\u0026quot;差异有多大\u0026quot;。一个差异可能在统计上显著（p\u0026lt;0.01），但效应量极小，对实际驾驶体验没有影响。\n常用的效应量指标：\nCohen\u0026rsquo;s d：两组均值差异除以合并标准差 $$ d = \\frac{\\bar{x}_1 - \\bar{x}_2}{s_{pooled}}, \\quad s_{pooled} = \\sqrt{\\frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 - 2}} $$ Cohen\u0026rsquo;s d的经验解释：d=0.2为\u0026quot;小效应\u0026quot;，d=0.5为\u0026quot;中效应\u0026quot;，d=0.8为\u0026quot;大效应\u0026quot; 工程实践建议：\n对待\u0026quot;统计显著但效应量小\u0026quot;的退化：可以放行，但需记录到模型的\u0026quot;已知退化清单\u0026quot;中 对待\u0026quot;统计不显著但效应量大\u0026quot;的退化：警惕，增加测试数据量以降低随机波动 对待\u0026quot;统计显著且效应量大\u0026quot;的退化：无论是否理解根因，都应停止发布 第四部分：CI/CD流水线中的自动化门禁 回归检测的终极目标是\u0026quot;自动化\u0026quot;——当工程师提交一个模型版本后，系统自动运行评估，自动判断是否通过，自动决定是否进入下一阶段。\n门禁机制设计 一个典型的自动驾驶模型CI/CD流水线包含多道门禁：\nGate 0：编译与格式检查\n代码/模型格式检查通过 模型导出格式正确（如ONNX/TensorRT） 无未处理的安全警告 Gate 1：单元测试与开环评估\n感知相关指标退化检测（如mAP下降不超过1个点） 统计显著性检验（p\u0026lt;0.01且Cohen\u0026rsquo;s d\u0026gt;0.2时标记为退化） 计算延迟评估（P99延迟不超过阈值的110%） Gate 2：闭环评估\n在回归测试集上运行闭环仿真 碰撞率不超过基线的1.5倍（需统计检验确认） 接管率不超过基线的1.3倍 任务完成率不低于基线的95% Gate 3：路测对比(Shadow Mode)\n新版本以Shadow模式部署到测试车队（不实际控制车辆，但与线上版本并行推理） 连续运行至少10000公里 决策与线上版本的一致性分析，识别高风险差异 Regression Gate的实现 Regression Gate是门禁体系的核心——它不是一个简单的阈值比较，而是一个有状态的统计判断过程。\n实现伪代码逻辑：\nd e f r v f # h i e e e i o i f l l g o r 门 g i s r l 禁 h l f e e a m b d c c i e i 决 _ e r r : r s t e a e i i f l f 策 s n e l e e s i t s l _ _ s e ( t e t t i o r e t n b c e i v h u n u u o n i l a e a o i : i s e v } e i r ( r r n s c i w s n s s _ f i ) r g n v n n _ , n = e f _ _ r f o i h i g = e = i r r e e l t _ \" o \" \" a n _ n = g e e g c a \" \" \" \" y s R l N P t [ e v e c . g g r t t m d e s e E a E A e ] w a w o c i r r e _ i e e f e = v J t E S ( _ l _ m o s e e s s o t l f v e E i D S n v v p m _ s s s i n r t e e [ r C o S \" e a = a u p h s s i z s i a c r v i T n _ , w l l t u i i i o e . c \" t i t \" s R _ b e t g o o n a \" : _ t f y , ) E [ m i a - _ e h n n : = p : s y o ) V ] e n s c _ e p d i \" r h \u0026gt; I t e b i c r = = c e m e z : \u0026gt; i E r n l a ( i _ o n e l e v g 0 W i e i s n ( b c c m d t t \" \" 0 h : \" c w n e e b e i i p ( r a : h i : _ , s _ e l w a t _ _ u { i , i n s , m _ i _ s t n n t c e g e v e m n v e e e e e , f h v v i b t e e a l r w w _ f \" i e o a r t _ l i [ . . c e o r l s i r v , n m u l o c i l i a e c i a e e p o h t f a t t l s c l c _ t p w e _ t y i i . s o v r e e n s e i o n i [ n a i r r s i f o n e t m f l c _ z f n s _ e e i , ] \u0026lt; \u0026gt; d e e s m m t g : ( , c e s r . c c c d t i t ( i s o i i e _ f r ) c a n _ _ l s i : ] m f b b t i c p i a a a z . s l g s s , e s , e . e e e _ s . . c \u0026gt; v c s a l u o e o i m o p n 0 r n z p w p f . i f e l e e i 5 t i ) e r r g y g _ . e ) s s l = : i # t s = z d e e 完 [ \" ) 全 m \" h 不 e l i 重 t o g 叠 r w h 且 i \" \" 更 c ] 差 ] ) 人工Review的时机 全自动门禁不是目标，\u0026ldquo;合适的自动+人工review比例\u0026quot;才是。以下场景应触发人工review：\n不明原因退化：统计显著但自动化分析无法解释根因的退化 跨模块退化：感知精度提升但规划指标退化的案例（可能意味着pipeline中存在需要手动分析的隐式依赖） 对抗样本退化：在人工构造的对抗样本上出现退化，需要安全专家评估风险 少量高置信度退化：只有极少数场景（如1-2个）出现严重退化，其他场景不变或改善——需要人工判断这些场景是否重要 CI/CD工程的现实挑战 挑战1：评估时间过长。一个完整的回归测试（开环+闭环+延迟）在大规模测试集上可能需要数小时到数十小时。为缩短从提交到反馈的循环周期，常用的策略包括：\n分层运行：先跑小规模快速筛选集（100-200场景，15分钟内出结果），通过后再跑完整集 并行加速：将场景分布到GPU集群上同时运行 缓存复用：如果只更新了规划模块，缓存感知模块的评估结果 挑战2：基线漂移。随着时间推移，回归测试集的场景也在扩展，旧基线可能过时。实践上采用\u0026quot;滑动基线\u0026quot;策略：总是与最近3次已发布的版本进行比较，取中位数作为参考基线。\n挑战3：仿真与现实的不一致性。闭环评估中的仿真环境与现实世界存在差距。一个模型在仿真中表现良好但在路测中表现不佳的情况经常发生。这是CI/CD流水线难以彻底解决的问题——只能通过不断校准仿真场景参数来缩小这个gap。\n第五部分：常见工程陷阱与经验 陷阱1：只看平均指标，忽视长尾退化 最经典的例子：两个模型版本的NuScenes驾驶得分(DS)都是87.5分，看起来没有退化。但细看发现，新版本在有行人的场景中DS从85降到了72，只是在无行人的简单场景中从88提升到了90，才拉平了平均分。\n对策：在回归检测中，不仅要看整体指标的退化，还要预设多个细分维度（交互类型、道路复杂度、天气等），对每个维度独立进行统计检验。\n陷阱2：过度关注开环指标 开环指标（如mAP、ADE）比闭环指标（如接管率）更容易计算，导致一些团队过度依赖开环指标做回归检测。但开环指标的提升并不能保证闭环性能的改善。\n真实案例：某团队将BEV检测的mAP从62.1%提升到65.8%，开环评估通过所有门禁。但Shadow模式路测发现，接管率从每百公里1.2次上升到1.8次。根因分析发现，mAP的提升主要来自对远处大目标的检测改善，但新模型对近处小目标的召回率有所下降。而近处小目标直接关系驾驶决策安全。\n对策：开环指标的门禁阈值需要更加严格（如mAP退化不超过0.5个点），同时必须搭配闭环评估。\n陷阱3：测试集被\u0026quot;记住\u0026rdquo; 回归测试集一旦被长期使用，模型可能在实际的过拟合——不是过拟合训练集，而是过拟合测试集。这在基于学习的模型中尤其常见：当模型反复在一个固定的场景集上测试后，工程师会有意无意地针对测试集中的场景进行优化。\n对策：保留一个\u0026quot;黄金测试集\u0026quot;（Golden Test Set），这个集合是非公开的，只在最终发布前使用一次。定期轮换回归测试集中的场景。\n关键论文与延伸阅读 Waymo评估体系：S. Dafrý et al., \u0026ldquo;Closed-loop Evaluation Method for Autonomous Driving\u0026rdquo;, ICRA 2023 Workshop. — 业界开环+闭环双轨评估的实践案例 统计显著性与回归检测：A. Karpathy, \u0026ldquo;MLE2: Engineering ML Systems\u0026rdquo;, Stanford CS329A Lecture. — 从软件工程角度讲解ML回归检测 NuScenes评估指标：H. Caesar et al., \u0026ldquo;nuScenes: A Multimodal Dataset for Autonomous Driving\u0026rdquo;, CVPR 2020. — 包含NDS/DS等自动驾驶综合指标的原始论文 Confidence Interval in ML: T. Hastie et al., \u0026ldquo;The Elements of Statistical Learning\u0026rdquo;, Chapter 7. — 模型评估中置信区间的经典参考 仿真与真实gap分析：W. Zhou et al., \u0026ldquo;Exploring Sim2Real Gap in Autonomous Driving\u0026rdquo;, CoRL 2023. — 仿真评估与现实部署差异的系统分析 模型回归检测不是\u0026quot;跑一下测试看看结果\u0026quot;的简单工作，而是一套完整的工程体系。它最核心的哲学是：不要相信任何单一的评估结果——相信多维度交叉验证的声音。一个指标提升，不是庆祝的理由；多个指标同时退化，才是停止发版的信号。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E6%A8%A1%E5%9E%8B%E8%AF%84%E4%BC%B0%E4%BD%93%E7%B3%BB%E4%B8%8E%E5%9B%9E%E5%BD%92%E6%A3%80%E6%B5%8B/","summary":"自动驾驶模型需要频繁迭代，但如何确保新版本\u0026rsquo;不比旧版本差\u0026rsquo;是一个被严重低估的工程难题。本文讲解模型回归检测的全套实践：离线评估Pipeline搭建（开环感知指标/闭环规划指标/计算延迟）、回归测试集的设计原则（场景覆盖/难度层级/对抗样本）、指标一致性分析（confidence interval/statistical significance/effect size）、以及CI/CD流水线中的自动化门禁机制（regression gate+人工review）。","title":"模型评估体系与回归检测：守护版本质量"},{"content":"🎯 一句话理解 GRPO GRPO = 对同一个问题采样一组答案，用组内奖励的均值做基线，\u0026lsquo;比平均好\u0026rsquo;就奖励、\u0026lsquo;比平均差\u0026rsquo;就惩罚，从而省掉 PPO 里又大又难训的 critic 网络。\n它由 DeepSeek 团队提出（DeepSeekMath、DeepSeek-R1），让大模型强化学习的成本断崖式下降，也正因此成为 2025 年自动驾驶强化学习（AlphaDrive、Flow-GRPO 等）的首选算法。\n🧗 从 PPO 说起：为什么需要 critic？ 要懂 GRPO 的妙处，得先看它的前身 PPO（Proximal Policy Optimization）。PPO 是 RLHF 时代的主力，它的目标函数是经典的 clipped surrogate：\n$$\\mathcal{L}_{\\text{PPO}} = -\\mathbb{E}\\left[\\min\\left(r_t A_t,\\ \\text{clip}(r_t, 1-\\epsilon, 1+\\epsilon) A_t\\right)\\right]$$其中 重要性比 $r_t = \\pi_{\\text{new}}(a|s) / \\pi_{\\text{old}}(a|s)$，clip 用来限制单步更新幅度，防止策略\u0026quot;步子迈太大\u0026quot;。而 优势函数（advantage） $A_t$ 是核心：\n$$A_t = Q(s,a) - V(s)$$这里的 $V(s)$ 就是 价值网络（critic） 估计的\u0026quot;基线\u0026quot;——\u0026ldquo;在这个状态下平均能拿多少 reward\u0026rdquo;。减去基线是为了降低梯度估计的方差：好于平均才给正信号，差于平均才给负信号。\n问题来了：critic 网络和 policy 网络一样大。\nPPO 的痛点 后果 双模型显存 policy + critic 两个大模型，显存翻倍 critic 难训 价值估计本身需要大量采样才能收敛 调参复杂 两个网络的 learning rate、loss 权重都要调 训练不稳 critic 估计不准会带偏 advantage 对动辄几百亿参数的大模型来说，这个代价极其昂贵。GRPO 的洞察就是：能不能不要 critic？\n💡 GRPO 的核心创新：组内相对优势 GRPO（Group Relative Policy Optimization）的做法极其简洁。对同一个问题（prompt/状态）$q$，用当前策略采样 一组 $G$ 个回答/动作 $\\{a_1, a_2, \\dots, a_G\\}$，分别拿到 reward $\\{r_1, \\dots, r_G\\}$，然后用组内统计量做基线：\n$$A_i = \\frac{r_i - \\text{mean}(r_{1..G})}{\\text{std}(r_{1..G}) + \\epsilon}$$就这么简单——用同组样本的均值替代 critic，用标准差归一化。不需要训练任何额外的网络，critic 直接被\u0026quot;组内平均\u0026quot;消解掉了。\n维度 PPO GRPO 基线来源 critic 网络估计 $V(s)$ 组内 reward 均值 是否需要 critic ✅ 必须 ❌ 不需要 显存开销 双模型 单模型 advantage 计算 $Q - V$（需 GAE） $(r_i - \\bar r)/\\sigma$ 关键超参 clip $\\epsilon$ group size $G$ 调参难度 高 低 一个直观例子：同一个数学题采样 4 个答案，reward 是 $[0.2, 0.4, 0.8, 0.6]$，均值 $0.5$、标准差 $\\approx 0.224$。那么 $0.8$ 的那个 advantage $\\approx +1.34$（强化它的生成概率），$0.2$ 的 advantage $\\approx -1.34$（降低它的生成概率）。这就是\u0026quot;最终结果打分，整条生成路径领奖或背锅\u0026quot;。\n🧮 GRPO 的完整损失 GRPO 的目标函数在 PPO 基础上加了熵正则（鼓励探索）和 KL 约束（防止偏离参考策略太远）：\n$$\\mathcal{L}_{\\text{GRPO}} = -\\mathbb{E}\\left[\\frac{1}{G}\\sum_{i=1}^{G}\\left(\\min(\\hat r_i A_i,\\ \\text{clip}(\\hat r_i, 1-\\epsilon, 1+\\epsilon) A_i) - \\beta\\, \\mathbb{KL}(\\pi_\\theta \\| \\pi_{\\text{ref}})\\right)\\right] + \\gamma\\, \\mathcal{H}(\\pi_\\theta)$$几个关键项的作用：\n项 作用 clip 限制重要性比，防止单步更新过猛 KL 约束 把策略\u0026quot;拴\u0026quot;在参考策略（通常是 SFT 后的模型）附近，防 reward hacking 熵正则 $\\mathcal{H}$ 鼓励探索，避免策略过早坍缩到单一模式 group size $G$ 太小方差大、太大算力贵，典型值 8~64 🤔 为什么\u0026quot;组内相对\u0026quot;比\u0026quot;绝对 reward\u0026quot;更合理？ 这是 GRPO 最深刻的洞察，也是一个常被忽略的点。\n如果直接用绝对 reward 训练，会有严重的 难度偏置 问题：\n简单题（如\u0026quot;直行通过空旷路口\u0026quot;）平均 reward 天然高 难题（如\u0026quot;无保护左转穿拥堵\u0026quot;）平均 reward 天然低 若全局比较，模型会一味偏向\u0026quot;刷简单题\u0026quot;的生成路径，复杂场景能力反而退化。组内相对把\u0026quot;绝对好不好\u0026ldquo;换成\u0026rdquo;在同题候选里排第几\u0026quot;，自动抵消了不同问题之间的难度差异——这一点对驾驶尤其关键：直路和路口必须按场景分组比较才有意义。\n💡 工程小贴士：当 reward 稀疏导致同组方差为 0（所有候选同分）时，advantage 会消失。此时可用全局 std 替代组内 std，避免训练信号归零（Flow-GRPO 里的 global_std=True 开关就是干这个的）。\n🧠 DeepSeek-R1：GRPO 的封神之战 GRPO 真正名震江湖是在 DeepSeek-R1 系列。DeepSeek 用 GRPO 让基础模型自主涌现出强推理能力：\nR1-Zero：直接在基础模型上用 GRPO + 可验证 reward（数学题有标准答案、代码题能跑测试），无需 SFT，模型自己学会\u0026quot;长思维链推理\u0026quot; R1：在 R1-Zero 基础上加冷启动数据、多阶段 RL，进一步稳定并提升 GRPO 在这里大放异彩的原因：\n可验证 reward 天然适合组内比较（数学题对/错分明） 省 critic 让大规模 RL 在有限算力下可行 组内相对天然处理了不同难度题目的公平性 这证明了 GRPO 不仅是个\u0026quot;省钱技巧\u0026quot;，而是能催生涌现能力的有效算法。\n从 DeepSeekMath 到 R1：GRPO 的演进轨迹 GRPO 并非凭空出现。它的最早版本见于 DeepSeekMath（2024 年 2 月），当时主要用于提升大模型的数学推理能力。作者发现，在数学这种有标准答案、reward 可验证的场景里，用组内相对优势替代 critic，不仅省算力，训练还更稳定——因为组内均值天然是一个无偏的低方差基线。随后在 DeepSeek-R1 里，GRPO 被推到极致，配合可验证 reward 让模型自主涌现出长思维链推理能力，成为开源大模型 RL 的标杆。\n演进阶段 工作 关键贡献 雏形 DeepSeekMath（2024.02） 提出 GRPO，数学推理验证可行性 成熟 DeepSeek-R1-Zero（2025.01） 纯 RL 涌现推理，无需 SFT 稳定 DeepSeek-R1（2025.01） 多阶段 RL + 冷启动，工程稳定 这条演进线告诉我们：一个算法的价值，往往要在不同规模、不同任务的反复验证中才真正显现。GRPO 从数学题一路打到通用推理，再迁移到驾驶，靠的就是其对稀疏可验证 reward 的天然适配。\n🚗 GRPO 在自动驾驶：AlphaDrive 与 Flow-GRPO GRPO 的优势在自动驾驶 RL 里同样成立，甚至更重要——因为驾驶的 reward 更稀疏、critic 更难训。2025 年涌现了几个代表性工作：\n工作 优化对象 reward 来源 特色 AlphaDrive 驾驶策略（轨迹/决策） 规划任务可验证指标 首个把 GRPO 系统用于驾驶策略 Flow-GRPO 扩散/Flow Matching 去噪过程 图像/视频质量或偏好 把 RL 注入连续生成 Gen-Drive 扩散生成策略 VLM 辅助偏好 reward 生成 + 评估 + RL 微调 驾驶场景的 GRPO 类比 把 GRPO 的语言模型设定原样翻译到驾驶：\n语言模型 RL 自动驾驶 RL 同一个 prompt 同一个驾驶场景（传感器观测） 采样 $G$ 个回答 采样 $G$ 条候选轨迹/决策 答案对错打分 轨迹的碰撞/舒适/合规 reward 组内均值做基线 同场景候选均值做基线 驾驶里\u0026quot;组内相对\u0026quot;的价值更突出：直路场景的 reward 普遍高于无保护左转，必须按场景分组比较，否则策略会偏向\u0026quot;只会跑直路\u0026quot;。GRPO 天然满足这一点。\nGRPO 与其他无 critic 算法的对比 去掉 critic 用\u0026quot;组内统计\u0026quot;做基线，这条路并非 GRPO 独有。理解它的独特性，需要放在整个无 critic RL 家族里看：\n算法 基线形式 是否组内 特点 REINFORCE + baseline 单独价值估计 ❌ 仍需额外网络 RLOO（Leave-One-Out） 留一均值 ✅ 用 $G-1$ 个样本估均值 GRPO 组内均值 + 标准差归一化 ✅ 方差更低、更稳定 GRPO 相比 RLOO 的关键改进在于用标准差做归一化——这让 advantage 的尺度自适应于问题难度，难题主样本间方差大，归一化后信号强度与易题一致，避免训练被简单题主导。这个看似微小的差异，正是 GRPO 在大规模 RL 里更稳定的根源。\n与 Diffusion/Flow 结合的妙处 当优化对象是 扩散/Flow Matching 策略时（如 DiffusionDrive、Flow-GRPO），GRPO 把整条去噪轨迹当成被优化的\u0026quot;动作序列\u0026quot;——最终生成样本拿到 reward，再用组内相对优势反向更新每一步去噪。这把\u0026quot;模仿数据分布\u0026quot;的生成模型升级为\u0026quot;对齐任务奖励\u0026quot;的智能策略，是当前端到端驾驶最前沿的方向之一。\n驾驶场景的特殊适配考量 把 GRPO 搬到驾驶，还有几个场景特有的适配点需要关注：\n场景分组要准确：组内相对的前提是\u0026quot;同一场景采样的多个候选\u0026quot;，因此必须保证同一组内确实对应同一个交通状态（同一传感器观测、同一路口）。数据组织上要按场景 ID 严格分组，否则跨场景比较会重新引入难度偏置 候选多样性：如果采样策略温度太低，一组候选高度雷同、reward 几乎同分，advantage 会退化为零。需要保证采样有多样性，必要时提高温度或用不同的噪声起点 reward 离散度：驾驶 reward 常出现\u0026quot;大部分候选都不撞、reward 同分\u0026quot;的情况，此时需要设计更细粒度的差分指标（如最近碰撞距离、舒适度）来拉开候选间差距，否则组内比较无从谈起 这几个细节决定了 GRPO 在驾驶里\u0026quot;能不能学起来\u0026quot;，比算法本身更值得工程师关注。\n⚙️ GRPO 的工程实践要点 要点 说明 group size $G$ 太小方差大、太大算力贵，典型 8~64，需权衡 KL 系数 $\\beta$ 太大约束死板、太小 reward hacking，需动态调整 reward 标准化 组内归一化是关键，必要时退化为全局 std 采样效率 同 prompt 共享前向，可并行采样降低开销 与 SFT 配合 通常先 SFT 再 GRPO（R1-Zero 是例外），冷启动更稳 ⚠️ GRPO 的局限 GRPO 不是银弹，它也有自己的软肋。理解这些局限，才能在驾驶实践中扬长避短，知道什么时候该用、什么时候不该用：\n依赖可验证或可比较的 reward：reward 质量决定一切，驾驶里 reward 仍难定义 group size 权衡：小则方差大，大则算力贵 稀疏 reward 退化：同组全同分时信号消失，需全局 std 兜底 样本效率：本质上还是 on-policy，大量采样不可避免 连续动作空间：直接用于连续控制需配合扩散/Flow 等生成式策略 📝 个人思考 GRPO 最打动我的，是它用一个极简的洞察——\u0026ldquo;用组内平均替代 critic\u0026rdquo;——撬动了大模型 RL 的整个成本结构。长期以来，大家默认\u0026quot;PPO 离不开 critic\u0026quot;，于是把大量精力耗在调价值网络上。GRPO 像是戳破了一层窗户纸：critic 并非必需，它只是基线的一种实现；只要能拿到一组可比的样本，组内统计就是天然的基线。这种\u0026quot;做减法\u0026quot;的工程美学，比任何花哨的算法设计都更令人敬佩。DeepSeek-R1 的成功证明了，有时候关键创新不是\u0026rsquo;加了什么\u0026rsquo;，而是\u0026rsquo;敢去掉什么\u0026rsquo;。\n第二点启发在 \u0026ldquo;组内相对\u0026quot;哲学的普适性。这个思想其实远远超出 RL 的范畴——它本质是\u0026rdquo;在可比的参照系里评价好坏\u0026quot;。驾驶里直路和路口不能放一起比，语言里简单题和难题不能放一起比，本质上都是\u0026quot;消除不可比因素的干扰\u0026quot;。我倾向于认为，任何涉及\u0026quot;多任务、多难度\u0026quot;的优化场景，组内相对都是更公平、更稳定的范式。这也解释了为什么 GRPO 能从数学推理一路迁移到自动驾驶：它解决的不是某个领域的问题，而是\u0026rsquo;如何公平地学习偏好\u0026rsquo;这个普遍问题。\n最后，对自动驾驶而言，我认为 GRPO 的意义在于让 RL 真正上车成为可能。驾驶 RL 之所以长期难落地，很大程度是 critic 难训、reward 难定义、算力吃不消。GRPO 一次性砍掉了 critic 这个大包袱，又用组内相对天然适配了驾驶的场景多样性，再配合扩散/Flow 策略处理连续多模态动作——这套组合拳正在让\u0026quot;用 RL 把驾驶策略对齐到安全舒适的偏好\u0026ldquo;从论文口号变成工程现实。GRPO + 生成式策略 + 学习型 reward，这是我看 2025-2026 端到端驾驶最清晰的一条主线。\n📖 这是知识点拆解系列的第 10 篇。GRPO 正在重塑驾驶 RL，你认为它能成为自动驾驶的\u0026rsquo;RLHF 时刻\u0026rsquo;吗？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/grpo%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0%E6%96%B9%E6%B3%95%E8%AF%A6%E8%A7%A3/","summary":"GRPO 用\u0026rsquo;组内相对优势\u0026rsquo;替代 PPO 的 critic 网络，大幅降低大模型强化学习的训练成本与显存开销。它通过对同一 prompt 采样一组回答并基于组内奖励均值做基线来实现策略优化。已在 DeepSeek-R1 及自动驾驶项目 AlphaDrive、Flow-GRPO 中成为首选 RL 算法。","title":"知识点拆解｜GRPO 强化学习方法详解：从 DeepSeek 到自动驾驶"},{"content":"📌 概述 Vision Transformer（ViT）的诞生标志着计算机视觉正式进入 Transformer 时代。2020 年 Google 团队证明：当有足够数据时，一个纯粹的 Transformer 可以直接在图像 patch 序列上做分类，效果超过当时最先进的 CNN。此后三年，视觉架构经历了 ViT → DeiT → Swin → ConvNeXt 的快速演进，最终在\u0026quot;卷积 vs Transformer\u0026quot;的争论中走向融合。\n在自动驾驶的 VLA 和世界模型论文中，视觉编码器的选择直接影响模型性能——从 DriveVLM 的 ViT-L/14 到 Hydra-MDP 的 ConvNeXt，视觉架构的演进与自动驾驶感知需求密不可分。\n🎯 核心概念 Patch Embedding：图像如何变成序列 ViT 将图像分割为固定大小的 patches（如 16×16），通过线性投影将每个 patch 展平为向量，形成 Transformer 的输入 token 序列。这与 NLP 中将句子切分为词的逻辑完全一致。\n具体过程：输入图像 $x \\in \\mathbb{R}^{H \\times W \\times C}$ 被切分为 $N = HW/P^2$ 个 patches，每个 patch 通过可学习的线性投影映射到 $D$ 维：\n$$z_0 = [x_p^1 E; x_p^2 E; \\dots ; x_p^N E] + E_{pos}$$其中 $E \\in \\mathbb{R}^{(P^2 C) \\times D}$ 是 patch embedding 矩阵，$E_{pos}$ 是位置编码。\nPosition Encoding：让 Transformer 知道\u0026quot;谁在哪\u0026quot; 自注意力是置换等变的——它不知道 token 的顺序。位置编码为每个 token 注入空间位置信息。ViT 使用可学习的 1D 位置编码（每个 patch 学一个位置向量），后续工作证明 2D 相对位置编码（如 Swin 中的 relative position bias）对视觉任务更有效。\nClass Token vs Patch Features ViT 在输入序列前附加一个特殊的 [CLS] token，其最终输出用于分类。CLS token 通过自注意力与所有 patch token 交互，相当于\u0026quot;全局图像表示\u0026quot;。然而对于密集预测任务（检测、分割），patch-level 特征（每个 patch 的输出向量）携带更丰富的空间信息。现代 VLA 模型通常取所有 patch token 的输出，而非 CLS token。\n🔧 技术详解 ViT：原始 Transformer 的\u0026quot;暴力\u0026quot;移植 ViT 提供了多种规格以适应不同计算资源：ViT-Tiny（5.7M 参数，12 层，384 hidden）、ViT-Small（22M 参数，12 层，384 hidden, 6 heads）、ViT-Base（86M 参数，12 层，768 hidden, 12 heads）、ViT-Large（307M 参数，24 层，1024 hidden, 16 heads）和 ViT-Huge（632M 参数，32 层，1280 hidden, 16 heads）。ViT-B/16 包含 12 层 Transformer encoder，hidden size 768，12 个注意力头。输入图像 224×224 被切分为 14×14=196 个 16×16 patches，加上一个 [CLS] token 共 197 个 token。每一层包含 Multi-Head Self-Attention（MHSA）和 MLP 两个子层，均使用 Layernorm 和残差连接。\nViT 的高层与底层有不同的关注模式：底层关注局部纹理和边缘（类似 CNN 的低层特征），高层关注语义区域和物体部件。这一特性使 ViT 在需要全局语义理解的任务（如分类、VQA）上优于 CNN，但在需要局部精细特征的任务（如检测、分割）中需要额外设计。\n在 ImageNet-21k 或 JFT-300M 等大数据集上预训练后，ViT 在下游任务上超越 ResNet；但在小数据上（如 ImageNet-1k），ViT 不如同等规模的 CNN。这是因为 Transformer 缺乏 CNN 的归纳偏置（局部连接、平移等变性），必须靠大量数据\u0026quot;学习\u0026quot;这些先验。\n这一缺陷催生了 DeiT（Data-efficient Image Transformers）——通过知识蒸馏（teacher 为 RegNet）和强数据增强（RandAugment、MixUp、CutMix），DeiT 在 ImageNet-1k 上从头训练即达到 SOTA，无需外部数据。DeiT 还引入了 teacher-student 策略：student 接收强增强后的图像，teacher 接收弱增强图像，通过 token-level 的蒸馏损失传递细粒度知识。\nSwin Transformer：层次化与移动窗口 Swin Transformer 引入了两个关键设计：\n层次化特征金字塔：通过 patch merging 逐步降低分辨率（4× → 8× → 16× → 32×），形成类似 ResNet 的多尺度特征图，天然适配检测/分割的 FPN 需求。 移动窗口注意力（Shifted Window Attention）：在局部窗口内计算自注意力（窗口大小 7×7），并在相邻层间移动窗口划分，实现跨窗口信息交换。计算复杂度从 ViT 的 $O(N^2)$ 降为 $O(N)$。 Swin 是第一个将 Transformer 引入检测/分割主干的主流工作，在 COCO 和 ADE20K 上大幅超越 CNN。\nSwin 的窗口注意力机制实现了计算复杂度的空间换时间：窗口大小固定（通常 7×7），每个 token 只与窗口内 49 个 token 计算注意力，而非全图的全部 token。对于一张 224×224 的输入图像（patch size 4，得到 56×56=3136 个 token），ViT 的计算复杂度为 O(3136²) ≈ 9.8M，而 Swin 的窗口注意力复杂度为 O(56² × 7²) ≈ 154K，降低约 63 倍。\nConvNeXt：用 Transformer 的设计哲学改造 CNN ConvNeXt 反其道而行：以 ResNet-50 为起点，逐步注入 Transformer 的设计元素——使用 GELU 激活、LayerNorm 替代 BatchNorm、增大卷积核（7×7）、倒置瓶颈结构（inverted bottleneck）、去掉下采样的 ReLU 等。最终得到的 ConvNeXt 在性能上与 Swin 持平，但保留了卷积的推理效率优势。\nConvNeXt 的改进细节：\nStage ratio：从 ResNet 的 (3,4,6,3) 调整为 Swin 的 (3,3,9,3)，增加了第 3 阶段的深度，因为该阶段特征图分辨率适中（14×14），最适合语义特征提取。 Patchify stem：用 4×4 卷积（stride 4）替代 ResNet 的 7×7 conv + maxpool，类似 ViT 的 patch embedding 方式。 Separate downsampling：在每个 stage 之间添加独立的 2×2 卷积（stride 2）进行下采样，而非在 stage 第一个 block 中隐式下采样。 Large kernel：将 bottleneck 中的 3×3 depthwise conv 替换为 7×7，增大感受野。 ConvNeXt 的核心启示：\u0026ldquo;架构的性能更多取决于设计理念（stage ratio、kernel size、normalization），而非 Transformer 或卷积本身。\u0026rdquo;\n架构 核心创新 计算复杂度 多尺度 小数据性能 VLA 使用情况 ViT patch embedding + Transformer $O(N^2)$ 否（单尺度） 差 DriveVLM ViT-L/14 DeiT 知识蒸馏 + 数据增强 $O(N^2)$ 否 好 - Swin 移动窗口 + 层次化 $O(N)$ 是（天然 FPN） 好 VideoLMM 等 ConvNeXt 现代 CNN 设计 $O(N)$ 是 好 Hydra-MDP 多尺度特征金字塔 检测与分割任务天然需要多尺度特征。FPN（Feature Pyramid Network）通过自顶向下的路径和横向连接，将高层的语义信息与低层的空间信息融合，构建多尺度特征金字塔。后续工作进一步改进：\nPANet：在 FPN 上增加自底向上的增强路径，缩短低层特征到高层的路径。 BiFPN（EfficientDet）：引入加权特征融合，不同尺度的贡献可学习。 NAS-FPN：用神经架构搜索自动设计融合拓扑。 在自动驾驶中，多尺度特征对检测小目标（远处行人、锥桶）至关重要。BEVFormer 使用多尺度特征（来自 ResNet 的 C3-C5 层）作为 Transformer encoder 的输入。\n📊 方法对比 VLA 论文的视觉编码器选型 论文 视觉编码器 输入分辨率 参数量 选择原因 DriveVLM ViT-L/14 (CLIP) 336×336 304M 强语义特征 + 语言对齐 Hydra-MDP ConvNeXt-Base - 88M 高效推理 + 多尺度 UniAD ResNet-101/ResNet-50 800×320 44M 成熟稳定、推理快 VAD ResNet-50 800×320 25.6M 轻量级基线 EMMA SigLIP ViT-L - - 原生语言对齐 World4Drive DINOv2 + Depth Anything - - 强对应 + 深度 Scaling Laws：更大的视觉编码器更好吗？ DINOv2 提供了清晰的缩放证据：从 ViT-S（21M）到 ViT-g（1.1B），模型规模每增大一次，语义分割 AP、k-NN 分类准确率、特征对应质量都持续提升。ViT-g 在几乎所有下游任务上显著超过 ViT-L。\n但更大并不总是更好——在自动驾驶中需要考虑：\n推理延迟：ViT-g 在单张 A100 上的推理速度约 10 FPS，远不能满足实时要求。 训练成本：ViT-g 的预训练需要大规模蒸馏和 4 卡 × 27 天。 过拟合风险：在小规模驾驶数据集上直接微调大模型容易过拟合。 实际部署的平衡点是 ViT-L（如 DriveVLM）或 ConvNeXt-Base（如 Hydra-MDP）。此外，采用 token 压缩策略（如 Q-Former 将 256 tokens 压缩到 32）可以显著降低大模型在推理时的 LLM 解码成本，使 ViT-L 级别编码器在车端部署成为可能。\n🔗 与自动驾驶的关联 Vision Encoder 是 VLA 的感知基础 视觉编码器作为 VLA 模型的第一层和特征入口，其输出质量直接决定了 LLM 对场景理解的上限和规划决策的可靠性——如果视觉编码器漏掉了远处的小目标（如行人），后续的 LLM 和动作头无论如何也无法弥补这一信息缺失。VLA 模型的三组件（视觉编码器 → LLM → 动作头）中，视觉编码器承担了从原始像素到语义特征的转换。它直接影响模型对场景的理解质量——能否识别远距离行人、能否区分不同交通标志、能否在夜间/雨雾等退化条件下稳定工作。\n视觉编码器的输出需要与 LLM 的 embedding 空间对齐。常用的对齐方式包括：\nMLP Projector（如 LLaVA）：将 patch token 序列通过一个 2-3 层 MLP 映射到 LLM 的 embedding 维度。直接、简单，但对齐质量受限于 MLP 容量。 Q-Former（如 BLIP-2）：使用一组可学习的 query，通过跨注意力从视觉特征中提取与任务相关的信息。可有效压缩视觉 token 数量（从 256 压缩到 32），降低 LLM 的计算开销。 Resampler（如 Flamingo）：在视觉特征上使用 Perceiver Resampler，将可变长度的视觉 token 序列转换为固定长度的上下文 token。 在 DriveVLM 中，视觉编码器的输出通过一个轻量 adapter 直接拼接为 LLM 的输入 token 序列，每个 patch token 对应一个\u0026quot;视觉词\u0026quot;，与文本 token 交替排列送入 LLM 进行自回归推理。\nCLIP 预训练的视觉 backbone 成为标配 DriveVLM 等 VLA 模型采用 CLIP 预训练的 ViT-L/14。CLIP 的图文对比学习使视觉编码器天然具备语义对齐能力——它的特征空间与语言空间一致，便于后续与 LLM 对接。这与\u0026quot;视觉特征→LLM embedding\u0026quot;的 alignment 训练目标高度契合。\nMulti-scale 特征对 BEV 感知的必要性 BEVFormer 等感知模型依赖多尺度特征来同时检测远处的小目标和近处的大目标。ResNet 和 ConvNeXt 通过其层次化结构天然提供多尺度特征图，而 ViT 需要额外设计（如 Swin 的 patch merging 或使用不同层输出）才能加入 FPN。\n不同编码器在 AD 中的实际推理性能 车载部署对视觉编码器有严格的延迟约束（通常要求 \u0026lt; 50ms 端到端感知）。ResNet-50 在 NVIDIA Orin 上推理约 5ms，ConvNeXt-Base 约 12ms，ViT-B 约 20ms，ViT-L 约 50ms（均为 FP16 精度）。因此，在延迟敏感的量产方案中，ConvNeXt 和 ResNet 仍是主力；而 ViT-L 更多用于云端方案或作为教师模型。\n视觉架构的未来方向 视觉架构正在向三个方向演进：多模态联合预训练（如 CLIP、SigLIP 将视觉编码器与语言模型对齐）、原生视频理解（Video ViT、TimeSformer 直接在时空 token 上建模）、以及可变形架构（Deformable DETR 中的可变形注意力等自适应 token 机制）。这些方向都在自动驾驶的 VLA 和世界模型中得到快速应用。此外，状态空间模型（如 Mamba）作为 Transformer 的替代方案也开始在视觉任务中展示潜力，其线性复杂度为处理高分辨率图像提供了新的可能。\n📚 延伸阅读 Dosovitskiy et al., \u0026ldquo;An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale\u0026rdquo;, ICLR 2021. Touvron et al., \u0026ldquo;Training data-efficient image transformers \u0026amp; distillation through attention\u0026rdquo;, ICML 2021. Carion et al., \u0026ldquo;End-to-End Object Detection with Transformers\u0026rdquo;, ECCV 2020.（DETR 是 ViT 架构在检测中的首次成功应用） Liu et al., \u0026ldquo;Swin Transformer: Hierarchical Vision Transformer using Shifted Windows\u0026rdquo;, ICCV 2021. Liu et al., \u0026ldquo;A ConvNet for the 2020s\u0026rdquo;, CVPR 2022. Lin et al., \u0026ldquo;Feature Pyramid Networks for Object Detection\u0026rdquo;, CVPR 2017. Oquab et al., \u0026ldquo;DINOv2: Learning Robust Visual Features without Supervision\u0026rdquo;, TMLR 2024. Tian et al., \u0026ldquo;DriveVLM: The Convergence of Autonomous Driving and Large Vision-Language Models\u0026rdquo;, 2024. Zhu et al., \u0026ldquo;Deformable DETR: Deformable Transformers for End-to-End Object Detection\u0026rdquo;, ICLR 2021. He et al., \u0026ldquo;Masked Autoencoders Are Scalable Vision Learners\u0026rdquo;, CVPR 2022.（MAE 是另一种重要的 ViT 自监督预训练方法，与 CLIP/DINOv2 并列） Vaswani et al., \u0026ldquo;Attention Is All You Need\u0026rdquo;, NeurIPS 2017. ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/vit%E4%B8%8E%E8%A7%86%E8%A7%89%E6%9E%B6%E6%9E%84%E8%BF%9B%E5%8C%96%E8%AF%A6%E8%A7%A3/","summary":"从 ViT 到 ConvNeXt，视觉架构在 Transformer 与卷积之间完成了一个轮回。本文系统梳理 ViT 的核心机制（patch embedding、position encoding、class token），详解 DeiT、Swin、ConvNeXt 等关键演进，并分析多尺度特征金字塔与 VLA 视觉编码器的选型逻辑与缩放定律。","title":"知识精讲｜ViT与视觉架构进化详解"},{"content":"📄 论文信息 项目 内容 标题 CARLA: An Open Urban Driving Simulator 作者 Alexey Dosovitskiy, German Ros, Felipe Codevilla, Antonio Lopez, Vladlen Koltun 团队 Intel Labs / 西班牙计算机视觉中心（CVC） 发表 CoRL 2017（Conference on Robot Learning, Mountain View） arXiv 1711.03938（2017 年 11 月） 代码 github.com/carla-simulator/carla 官网 carla.org 许可证 MIT 协议（非商业用途免费） 🎯 一句话概括 CARLA 是一个从头构建的开源城市驾驶仿真器，提供高保真渲染、灵活传感器配置、开放数字资产和标准化基准评测，为自动驾驶研究提供了统一、可复现的实验平台，已成为该领域引用量最高的仿真基础设施之一（Google Scholar 7,000+ 次引用）。\n🤔 要解决什么问题？—— 2017 年自动驾驶仿真的\u0026quot;真空地带\u0026quot; 在 CARLA 诞生之前，自动驾驶研究面临一个尴尬的困境：算法创新需要仿真环境，但可用仿真器要么太简陋、要么太昂贵、要么不开源。下表总结了 2017 年前后主流仿真方案的核心痛点：\n方案类型 代表 保真度 API 灵活性 许可证 场景多样性 可复现性 游戏修改版 Torcs, GTA V mods 中-高 ❌ 极低 ⚠️ 商业游戏 EULA 固定赛道/城市 ❌ 不可复现 商业仿真器 Vires VTD, CarSim, PreScan 高 有限（需付费 SDK） ❌ 封闭/高昂 自定义 ⚠️ 需授权 轻量学术仿真器 Udacity Simulator, DeepDrive 低 ✅ 中等 ✅ 开源 ❌ 场景单一 ✅ 机器人仿真器 Gazebo + ROS 低 ✅ 高 ✅ 开源 社区贡献 ✅ CARLA（本文） — 高 (UE4) ✅ 灵活 (Python API) ✅ 开源 (MIT) ✅ 多城镇 + 组合天气 ✅ 完全可复现 核心空缺：没有一款仿真器能同时满足\u0026quot;高保真渲染 + 灵活编程接口 + 开源/可修改 + 场景多样性 + 标准化评测\u0026quot;。CARLA 正是为填补这一空白而设计。\n🧠 核心贡献 # 贡献 说明 1 开源仿真平台 基于 Unreal Engine 4，MIT 协议，完整开放代码与数字资产 2 开放数字资产 包含两个城镇（Town 1 \u0026amp; Town 2）、多种建筑、车辆和行人模型 3 灵活的传感器套件 支持 RGB 相机、深度图、语义分割伪传感器、LIDAR、GPS 等，可通过 API 扩展 4 多样化环境条件 支持 12+ 种天气（晴朗/雨天/雨后/黄昏等）与光照条件组合 5 标准化基准评测 定义四个难度递增的驾驶任务 + 量化指标，使不同方法可在相同条件下公平对比 6 系统对比三种范式 在统一平台上对比模块化管线、模仿学习和强化学习，揭示端到端方法的泛化瓶颈 📚 研究背景与动机 为什么自动驾驶需要仿真？ 自动驾驶测试的安全门槛极高——在真实道路上测试自动驾驶算法既危险又昂贵（Waymo 在 2023 年报告其单车测试成本超过 $100K/年）。仿真提供了一条安全的替代路径：\n零风险迭代：任何碰撞都不会产生实际损失 环境可控：精确控制天气、光线、交通密度、行人行为 场景覆盖：可生成在真实数据中稀有的长尾场景（如行人突然冲出、车辆失控） 可复现性：同一随机种子可精确复现相同场景，便于调试与比较 CARLA 之前的状态 2017 年，自动驾驶研究者的典型工作流是这样的：\n使用 Udacity Simulator 或 Torcs 进行快速原型——场景过于简单，无法验证泛化性 使用 GTA V mod 获取具有视觉逼真度的数据——但受限于游戏引擎的 API 限制，无法实现闭环控制 如果有商业资金，使用 Vires VTD 或 CarSim——但价格动辄数万美元，且无法修改内部实现 这种碎片化的局面意味着：即使两个团队研究同一种方法，也无法公平比较——因为仿真环境不同、传感器配置不同、场景设置不同。CARLA 的目标是成为自动驾驶领域的 \u0026ldquo;ImageNet 式基准\u0026rdquo;，为社区提供一个统一的实验平台。\n🏗️ 方法详解：CARLA 仿真器架构 1. Server-Client 异步架构 CARLA 的核心设计采用 Server-Client 解耦架构，这是其灵活性的基础：\n图1：CARLA 的 Server-Client 架构示意图\nServer 端（C++/UE4）：\nCARLA Server (C++) 内部： - UE4 物理引擎 (PhysX) - 渲染管线 (UE4 Render) 二者 -\u0026gt; World State (actors, traffic lights, map, weather, sensors) World State -\u0026gt; Network Streamer (TCP/Protocol Buffers) -\u0026gt; TCP (localhost:2000) 客户端 Client 端： - Client Interface - Python API - C++ Client - Agent 控制逻辑 (steer, throttle, brake) Server 以 固定频率（默认 20 FPS） 运行物理仿真和渲染，维护一个完整的世界状态（车辆位置、速度、传感器数据、交通信号状态等）。Client 通过 TCP 连接 发送控制命令并接收传感数据。关键特性：\n异步非阻塞：Server 和 Client 在不同线程/进程中运行，不会互相阻塞 同步模式可用：可通过 world.tick() 实现精确的 step-by-step 同步 多客户端支持：一个 Server 可同时服务多个 Client（用于多智能体场景，如 V2V 通信仿真） 数据传输使用 Protocol Buffers（Google 的序列化协议），在保证传输效率的同时保留跨语言兼容性。\n2. 传感器系统与数据生成 图2：CARLA 提供的三种传感模态：RGB 相机、深度图、语义分割\nCARLA 的传感器系统设计极具前瞻性——采用 \u0026ldquo;伪传感器\u0026rdquo;（pseudo-sensor） 概念，将深度图和语义分割以与 RGB 相同的渲染管线输出，天然实现像素级对齐：\n传感器 输出格式 用途 是否物理传感器 RGB 相机 H×W×3, uint8 标准视觉输入 ✅ 物理可制造 深度相机 H×W×1, float32 深度估计, 3D 重建 ✅（如 Intel RealSense） 语义分割 H×W×1, uint8 (12类) 场景理解、域泛化分析 ❌ 伪传感器 LIDAR PointCloud N×3 3D 感知、SLAM ✅ 物理 LIDAR GPS (lat, lon) 全局定位 ✅ IMU (accel, gyro) 航迹推算 ✅ 语义分割的 12 个类别： 道路、车道线、交通标志、人行道、围栏、路灯、墙壁、建筑、植被、车辆、行人、其他\n传感器可在运行时通过 Python API 灵活配置位置、朝向、视场角、分辨率等参数：\n# 示例：在车前挡风玻璃位置挂载三个传感器 camera_rgb = world.spawn_actor( blueprint_library.find(\u0026#39;sensor.camera.rgb\u0026#39;), transform.Transform( location=Location(x=1.5, z=2.4), rotation=Rotation(pitch=5.0) ) ) camera_depth = world.spawn_actor( blueprint_library.find(\u0026#39;sensor.camera.depth\u0026#39;), same_transform ) lidar = world.spawn_actor( blueprint_library.find(\u0026#39;sensor.lidar.ray_cast\u0026#39;), transform.Transform(Location(x=0.0, z=2.5)) ) ```text 传感器数据通过 **回调函数（callback）** 异步传递到 Client，支持批量处理和流式处理两种模式。 ### 3. 环境系统：城镇、天气与交通 ![城镇地图](/images/carla/fig5-towns.jpg) *图3：CARLA 提供的两个城镇——Town 1 和 Town 2，包含不同布局复杂度* **城镇设计**： CARLA 最初版本包含两个手工设计的城镇，灵感来自欧洲城市布局： | 特征 | Town 1 | Town 2 | |------|--------|--------| | 布局复杂度 | 中等（直线 + 简单弯道） | 较高（复杂路口 + 多车道 + 环形交叉口） | | 路段数量 | ~30 | ~60 | | 交叉口类型 | T 型路口为主 | 十字路口 + 环岛 | | 典型用途 | 训练基础驾驶策略 | 测试泛化到新场景的能力 | **天气系统**： CARLA 通过控制 UE4 引擎的**多个可调节参数**实现天气组合： $$ \\text{Weather} = (w_{\\text{cloudiness}}, w_{\\text{precipitation}}, w_{\\text{wind}}, w_{\\text{sun\\_angle}}) $$ 论文中测试了 **4 种标准天气条件**： ![天气与资产](/images/carla/fig3-weathers.jpg) *图4：CARLA 中的车辆与行人资产多样性* | 天气 | 云量 | 降水 | 太阳角度 | 难度 | |------|------|------|---------|------| | **晴朗白天（Clear Noon）** | 0.0 | 0.0 | 90°（正午） | ★☆☆ | | **雨天（Rainy Noon）** | 0.8 | 0.8 | 90° | ★★☆ | | **雨后（Wet Noon）** | 0.3 | 0.0 | 90° | ★★☆ | | **黄昏（Soft Sunset）** | 0.3 | 0.0 | 15°（低角度） | ★★★ | 不同天气条件对视觉感知的影响极大——雨天降低路面纹理对比度，黄昏产生长阴影和过曝，这为测试视觉感知模型对**域偏移（domain shift）**的鲁棒性提供了天然实验场。 ### 4. 基准评测协议（CoRL 2017 Benchmark） 这是 CARLA 最具影响力的贡献之一——定义了**标准化的驾驶评测协议**，使得不同方法可以在完全相同的条件下比较。 #### 任务定义 论文定义了 **4 个难度递增的驾驶任务**： 1. **Straight**（直线行驶）—— 没有转弯，最简单 2. **One Turn**（单次转弯）—— 在单个路口转弯 3. **Navigation**（导航）—— 通过多个路口到达指定目标 4. **Nav. Dynamic**（动态导航）—— 在 Navigation 基础上加入动态交通车辆 每个任务在 **4 种环境条件**下分别测试： - **训练条件**（Town 1 + 晴天白天） - **新城镇**（Town 2 + 晴天白天） - **新天气**（Town 1 + 雨天/黄昏等） - **新城镇 + 新天气**（Town 2 + 雨天/黄昏等）—— 最难（最接近真实世界的不可预见性） #### 评价指标 论文使用**成功率**作为核心指标——定义为在限时内完成导航任务且无碰撞/违规。 成功条件： $$\\text{Success} = \\mathbb{1}\\left[ \\text{reached\\_goal} \\land \\text{no\\_collision} \\land \\text{time} \u0026lt; T_{\\max} \\right]$$ 其中车道偏离、闯红灯、逆向行驶等违规行为也被记录。 --- ## 🔬 实验与结果 ### 三种驾驶范式对比 论文在 CARLA 上系统对比了 2017 年最具代表性的三种驾驶方法： | 方法 | 缩写 | 范式 | 感知模块 | 控制器 | |------|------|------|---------|--------| | **Modular Pipeline** | MP | 经典模块化 | RefineNet 语义分割（ResNet-101 backbone） | PID 控制器 | | **Conditional Imitation Learning** | IL | 端到端模仿学习 | CNN（8 层），输入 RGB + 高层命令 | 直接输出控制量 | | **Reinforcement Learning** | RL | 端到端强化学习 | CNN（8 层），输入 RGB + 速度 | A3C 算法，10M 步训练 | ### 主实验结果 ![实验结果](/images/carla/fig8-results1.jpg) *图5：三种方法在不同条件下的成功率对比* | 任务 | 条件 | MP (%) | IL (%) | RL (%) | |------|------|--------|--------|--------| | **Straight** | 训练条件 | 98 | 95 | 89 | | | 新城镇 | 92 | **97** | 74 | | | 新天气 | **100** | 98 | 86 | | | 新城镇+天气 | 50 | **80** | 68 | | **One Turn** | 训练条件 | 82 | **89** | 34 | | | 新城镇 | **61** | 59 | 12 | | | 新天气 | **95** | 90 | 16 | | | 新城镇+天气 | **50** | 48 | 20 | | **Navigation** | 训练条件 | 80 | **86** | 14 | | | 新城镇 | 24 | **40** | 3 | | | 新天气 | **94** | 84 | 2 | | | 新城镇+天气 | **47** | 44 | 6 | | **Nav. Dynamic** | 训练条件 | 77 | **83** | 7 | | | 新城镇 | 24 | **38** | 2 | | | 新天气 | **89** | 82 | 2 | | | 新城镇+天气 | **44** | 42 | 4 | ![更多结果](/images/carla/fig9-results2.jpg) *图6：各方法在不同条件下的驾驶表现* **关键发现**： | 发现 | 数据支撑 | |------|---------| | 🏆 **IL 在训练条件下最优** | Navigation 训练条件 IL=86% \u0026gt; MP=80% | | 🔩 **MP 跨域泛化最强** | 新天气下 MP 各个任务几乎不降；Navigation: 80→94（反而提升！） | | 💀 **RL 基本失败** | 除 Straight 外，复杂任务成功率 \u0026lt; 34%；Navigation 仅 14% | | 📉 **IL 的域偏移严重** | Navigation 训练 86% → 新城镇 40%（降 53%） | | 🎯 **新天气 vs 新城镇** | 所有方法\u0026#34;新天气\u0026#34;表现 \u0026gt; \u0026#34;新城镇\u0026#34;——说明视觉外观 vs 道路拓扑的泛化难度不同 | \u0026gt; **有趣的反直觉发现**：MP 在新天气下 Navigation 成功率反而从 80% 提升到 94%！这是因为训练条件下的晴天产生强阴影，语义分割反而更困难；雨天削弱了阴影对比，分割精度反而提升。 ### 违规分析（Ablation on Safety） ![结果对比](/images/carla/fig10-results3.jpg) *图7：三种方法的平均行驶距离及违规间隔* | 违规类型 | MP | IL | RL | |---------|----|----|----| | 逆向行驶 | 中 | **高**（IL 最常逆行） | 极低 | | 侵占人行道 | 中 | 训练下中，泛化下高 | 极低 | | 碰撞（静态物体） | 中 | 训练下较低，泛化下高 | 极低 | | 碰撞（车辆） | 中 | 训练下较低 | 低 | | 碰撞（行人） | **高**（MP 最危险） | 中 | **极高**（但行驶距离最短） | | 平均行驶距离 | **最长** | 中 | **极短**（~10m） | ⚠️ **RL 的低违规率是一个危险的假象**——不是因为 RL 学会了安全驾驶，而是因为 RL 智能体绝大多数时间停在原地不动（平均行驶距离仅 ~10 米）。这提醒研究者：**在评估安全指标时必须同时考虑任务完成率**，否则\u0026#34;不动策略\u0026#34;会在安全指标上取得虚假高分。 ### Conditional Imitation Learning 的消融 ![有条件模仿学习](/images/carla/fig6-conditional.jpg) *图8：Conditional Imitation Learning 框架——输入高层的\u0026#34;导航命令\u0026#34;（直行/左转/右转/跟驰）作为条件* 论文引入了一种重要的架构消融——**条件式模仿学习**： $$ \\pi(a_t | o_t, c_t) $$ 其中 $a_t$ 是控制动作，$o_t$ 是观测（RGB 图像），$c_t \\in \\{\\text{straight}, \\text{left}, \\text{right}, \\text{follow}\\}$ 是高层的导航命令。 与无条件模仿学习 $\\pi(a_t | o_t)$ 的对比： | 方法 | Navigation 成功率 | 说明 | |------|-----------------|------| | **无条件 IL** | ~55% | 模型需要同时学习\u0026#34;去哪\u0026#34;和\u0026#34;怎么去\u0026#34; | | **条件 IL** | **86%** | 导航命令独立于驾驶策略，降低了任务复杂度 | 这启发了后来几乎所有端到端驾驶模型的设计——**将导航规划与驾驶控制分离**，也是横纵向解耦思想的早期实践。 ### 模块化管线组件消融 ![模块化管线](/images/carla/fig7-modular.jpg) *图9：MP 的组件消融——感知模块的分辨率和语义类别数对性能的影响* | 配置 | Straight | One Turn | Navigation | |------|---------|---------|-----------| | 全分辨率 + 12类语义 | 98% | 82% | 80% | | 低分辨率 + 12类语义 | 57% | 21% | 16% | | 全分辨率 + 3类语义（路/车/其他） | 98% | 77% | 63% | | 全分辨率 + 1类语义（只有道路） | 90% | 41% | 26% | **结论**： - **分辨率的影响最大**：低分辨率下所有任务成功率断崖式下降，Navigation 从 80% → 16% - **类别粒度的影响随任务复杂度增加而增加**：Straight 几乎不受影响（90% → 98%），而 Navigation 从 26% → 80% - 这验证了：**城市导航不仅需要\u0026#34;看到路\u0026#34;，还需要语义理解来做出正确的转弯决策** --- ## 📊 与同期/后续工作的对比分析 | 特征 | CARLA (2017) | MetaDrive (2021) | nuPlan (2023) | SUMO (2000s) | HighwayEnv (2019) | |------|:------------:|:----------------:|:-------------:|:------------:|:-----------------:| | **渲染引擎** | UE4（高保真） | Panda3D（卡通） | N/A（log-based） | N/A（2D 抽象） | Pygame（2D） | | **传感器仿真** | RGB/Depth/Seg/LIDAR | RGB | 真实日志回放 | ❌ | ❌ | | **物理引擎** | PhysX | Bullet | ✅ | ✅ (微观交通流) | ✅ (简化) | | **交通流仿真** | 规则代理 + Traffic Manager (v0.9+) | 规则代理 | 真实日志 | ✅ SUMO 原生 | 规则代理 | | **场景可编辑性** | ✅ Python API | ✅ Python | ❌ 固定 | ✅ XML | ✅ 代码级 | | **端到端驾驶评测** | ✅ CoRL 2017 Benchmark | ✅ 多任务 | ❌ 规划评测 | ❌ | ✅ | | **开源协议** | MIT | Apache 2.0 | Apache 2.0 | GPL | MIT | | **典型用途** | 端到端驾驶 / 感知 / 规划 | 泛化性研究 | 规划器评测 | 交通工程 | RL 驾驶 | | **引用量** | ~7,000 | ~300 | ~300 | ~10,000+ | ~500 | --- ## 🕰️ CARLA 版本演进时间线 | 版本 | 发布时间 | 关键新增功能 | |------|---------|-------------| | **0.8.x** | 2017–2018 | 初始版本（即论文版本），2 个城镇，4 种天气，3 种传感器 | | **0.9.0** | 2019.01 | **彻底重写**：全新的 Python API（更 Pythonic），新的渲染管线 | | **0.9.6** | 2019.06 | **Traffic Manager（TM）** 引入——管理 NPC 车辆行为 | | **0.9.9** | 2020.02 | **Scenario Runner** 发布——场景编辑器/执行器，支持复杂场景生成 | | **0.9.10** | 2020.06 | 支持 **LIDAR 射线投射**、新的 Town 3–5 | | **0.9.11** | 2020.09 | **CARLA Leaderboard** 上线——在线提交自动驾驶 Agent 进行自动评测 | | **0.9.12** | 2021.05 | 新版 Town 6（高速公路）、行人动画改进、HD Map 导出 | | **0.9.13** | 2022.02 | 天气控制 API 增强、OpenDrive 地图导入、同步模式改进 | | **0.9.14** | 2022.10 | 高性能 **LIDAR 仿真**（GPU-based）、新的 Town 7（乡村） | | **0.9.15** | 2023.11 | **ROS2 Bridge** 官方支持、更真实的车辆动力学模型 | | **0.9.16** | 2024.06 | 多 GPU 渲染、新的 RGB 相机模型（带光学畸变效果） | --- ## 💡 个人思考与关键洞察 ### 1. 论文的影响力远不止\u0026#34;造了一个仿真器\u0026#34; CARLA 之所以能成为经典，不在于它的技术实现有多么复杂，而在于它**解决了一个社区级的痛点**——缺乏统一的实验平台。在 CARLA 之前，每个实验室都在用自己的仿真器，论文中的\u0026#34;仿真实验\u0026#34;本质上不可复现。CARLA 定义了自动驾驶仿真领域的 **\u0026#34;平台范式\u0026#34;**：开源 + 标准化评测 + 社区驱动。这种模式后来被 MetaDrive（2021）和 nuPlan（2023）继承，但 CARLA 的先行者优势使其始终处于中心地位。 ### 2. 2017 年的实验结论今天依然成立 论文中 IL 在新城镇/新天气下的泛化崩溃趋势，在后来的几乎所有端到端驾驶工作中都被反复观察到。即使用更强大的 backbone、更多的数据、更复杂的网络架构，**域偏移仍然是端到端驾驶的核心瓶颈**。模块化管线在新天气下不降反升的反直觉发现，说明手工设计的感知模块在某些方面确实比数据驱动的方法更鲁棒——这为\u0026#34;可解释中间表示\u0026#34;的回归（如 BEV 感知、语义鸟瞰图）埋下了伏笔。 ### 3. RL 的失败暴露了\u0026#34;从零学习驾驶\u0026#34;的不现实 论文中 RL 在 Navigation 任务上仅 14% 的成功率（实际等效于~停车不动），使得仿真环境下的闭环 RL 训练在很长一段时间内被认为是不可行的。但这一\u0026#34;失败\u0026#34;反而推动了两个重要方向： - **模仿学习作为 RL 的初始化**（先 IL 学个大概，再用 RL 微调） - **世界模型 + 规划**（如 Dreamer 系列）——通过学习环境模型来降低 RL 的交互复杂度 最近（2025–2026）GRPO 和搜索型方法在 CARLA 上重新取得了突破，也正是得益于**语言条件化的大规模行为先验**——本质上避免了\u0026#34;从零学习\u0026#34;的样本效率陷阱。 ### 4. \u0026#34;伪传感器\u0026#34;设计的深远影响 CARLA 把语义分割和深度图作为像素级对齐的\u0026#34;伪传感器\u0026#34;输出，这看起来是一个工程实现细节，但其影响极为深远： - 它允许研究者**在完全可控的条件下**进行多模态融合实验 - 它为 **\u0026#34;因果解耦\u0026#34;** 研究提供了基础——模型是否真的学到了语义概念，还是仅仅利用了纹理统计线索？ - 它催生了一大批 **\u0026#34;仿真训练 + 真实部署\u0026#34;**（Sim-to-Real）的工作，因为有 pixel-perfect 对齐的 ground truth，迁移学习算法的性能上限可以被精确量化 ### 5. CARLA 对 VLA 和 World Model 研究的特殊价值 进入 2025–2026 年，CARLA 的角色从\u0026#34;驾驶仿真器\u0026#34;演变为 **\u0026#34;通用具身智能评测平台\u0026#34;**： - **VLA 模型评测**：DriveVLM、Qwen-VLA 等模型都使用 CARLA 作为闭环评测环境，提供统一的场景控制 - **World Model 验证**：GAIA-1、DriveDreamer 等世界模型在 CARLA 中评估其场景预测准确率，利用其对每帧 ground truth 的可控性 - **长尾场景生成**：CARLA + Scenario Runner 的组合是目前生成\u0026#34;罕见但危险\u0026#34;驾驶场景（如鬼探头、加塞）最成熟的开源方案 - **Sim-to-Real 的桥梁**：从 CARLA 中训练的感知表示（如显式深度、语义特征）已被验证可有效迁移到真实世界 ### 6. 开放 vs 封闭：平台生态的启示 CARLA 的开源策略（MIT 协议、完整资产开放、社区驱动开发）是其成功的关键因素。对比之下： - **AirSim**（微软，2017）同样基于 UE4，但采用更严格的许可证和更复杂的架构，研究社区逐渐转向 CARLA - **MetaDrive**（2021）虽然技术上设计精良，但缺乏了 CARLA 的先发优势和社区积累 - **nuPlan**（2023）虽然数据真实，但无法泛化到训练分布之外的场景（因为是日志回放） 这揭示了一个重要规律：**在学术研究中，生态 \u0026gt; 技术**。一个好的平台需要低准入门槛（pip install carla）、活跃的社区（GitHub 4.5k stars / 1.5k forks）、持续维护（6 年+）和灵活的接口（Python API）。CARLA 做到了所有这些。 --- ## 📖 论文信息 | 项目 | 内容 | |------|------| | **标题** | CARLA: An Open Urban Driving Simulator | | **作者** | Alexey Dosovitskiy, German Ros, Felipe Codevilla, Antonio Lopez, Vladlen Koltun | | **团队** | Intel Labs / 西班牙计算机视觉中心（CVC） | | **发表** | CoRL 2017（Conference on Robot Learning） | | **arXiv** | [1711.03938](https://arxiv.org/abs/1711.03938) | | **代码** | [github.com/carla-simulator/carla](https://github.com/carla-simulator/carla) | | **官网** | [carla.org](https://carla.org/) | | **引用格式** | Dosovitskiy et al., \u0026#34;CARLA: An Open Urban Driving Simulator\u0026#34;, CoRL 2017 | ```bibtex @inproceedings{dosovitskiy2017carla, title={CARLA: An Open Urban Driving Simulator}, author={Dosovitskiy, Alexey and Ros, German and Codevilla, Felipe and Lopez, Antonio and Koltun, Vladlen}, booktitle={Proceedings of the 1st Annual Conference on Robot Learning}, pages={1--16}, year={2017} } ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-1711-03938/","summary":"CARLA 是首个从头构建、开源开放的城市场景驾驶仿真器，基于 Unreal Engine 4 实现了高保真渲染、灵活传感器配置和标准化基准评测。本文从架构设计、实验基准到历史影响全面拆解这篇 CoRL 2017 经典论文，并分析其如何成为自动驾驶研究的事实标准平台。","title":"论文精读｜CARLA: An Open Urban Driving Simulator —— 自动驾驶仿真的事实标准"},{"content":"📄 论文信息 标题：RT-1: Robotics Transformer for Real-World Control at Scale（RT-1：面向大规模真实世界控制的机器人Transformer） 团队：Google Robotics at Google, Everyday Robots（Anthony Brohan, Noah Brown, Justice Carbajal, Yevgen Chebotar, Chelsea Finn, Karol Hausman, Sergey Levine 等51位作者） 发表：arXiv 2022.12（CoRL 2023接收） 关键词：Transformer、机器人策略学习、模仿学习、大规模数据、泛化 一句话总结：通过在13万+真实机器人轨迹上训练Transformer策略，RT-1首次在机器人领域展示了类似NLP/CV中观察到的scaling law，实现了对新任务、新物体、新环境的强泛化能力。 论文链接：arXiv:2212.06817 代码链接：robotics_transformer 🤔 要解决什么问题？ 机器人领域的\u0026quot;数据饥渴\u0026quot;困境 在计算机视觉（CV）和自然语言处理（NLP）领域，大规模预训练模型已经展示了一种强大的范式：从大规模、多样化、任务无关的数据集中学习通用表示，然后通过少量数据微调或零样本迁移来解决下游任务。GPT系列、CLIP、ViT等模型的成功无不依赖于这一范式。\n然而，机器人领域长期面临一个根本性挑战：真实世界机器人数据的收集极其昂贵且困难。与互联网上唾手可得的文本和图像数据不同，机器人需要在物理世界中与物体交互，每次数据采集都需要：\n物理设备成本：机器人硬件本身昂贵 时间成本：每条轨迹需要实时执行 安全性约束：机器人可能损坏物体或自身 标注成本：需要人类遥操作或演示 这导致机器人数据集规模通常只有数千条轨迹，远远无法支撑大规模模型的训练。之前的方法如BC-Z（Google 2021）虽然也收集了较多数据，但其模型架构（如ResNet+Transformer）的容量有限，无法有效吸收海量多样化数据。\n核心问题 能否找到一种模型架构，能够像大语言模型吸收文本数据一样，有效地吸收大规模、多样化的机器人数据，并展现出类似的scaling性质？\n具体来说，RT-1试图回答三个关键问题：\n什么样的架构能够随着数据量和模型规模的增长而持续提升性能？ 能否在真实机器人上收集足够规模的数据来验证这一假设？ 训练好的模型能否泛化到未见过的任务、物体和环境？ 💡 核心方法 整体思路 RT-1的核心思想非常直观：借鉴NLP/CV领域的成功经验，用高容量Transformer架构配合大规模真实数据来训练机器人策略。\n上图是RT-1的核心架构图，展示了完整的数据处理流程：\n输入层：机器人在每个时间步接收3帧连续图像 $I_t, I_{t-1}, I_{t-2}$（300×300分辨率）和自然语言指令 $l$（如\u0026quot;pick up the Coke can\u0026quot;） 视觉编码：每帧图像通过FiLM-Conditioned EfficientNet-B3进行编码，语言指令通过FiLM层注入视觉特征，使模型\u0026quot;根据指令选择性关注\u0026quot;相关视觉信息 Token压缩：Token Learner模块将每帧约900个视觉token压缩为16个学习到的token（3帧共48个），大幅降低计算成本 Transformer解码：压缩后的视觉token与语言指令token一起送入8层Transformer解码器 动作输出：Transformer输出经过分类头预测11维离散化动作（机械臂7维 + 底盘3维 + 模式切换1维） 给定一组图像观测 $o_t = \\{I_t, I_{t-1}, I_{t-2}\\}$（当前帧和历史帧）以及自然语言指令 $l$，策略 $\\pi$ 需要输出机器人动作 $a_t$：\n$$a_t \\sim \\pi(\\cdot | o_t, l)$$模型架构详解 RT-1的架构由三个核心组件构成：\n1. 视觉编码器：FiLM-Conditioned EfficientNet 首先，使用预训练的EfficientNet-B3作为视觉编码器来处理图像输入。为了让视觉编码器关注与指令相关的视觉特征，RT-1采用了FiLM（Feature-wise Linear Modulation）条件化机制：\n$$\\gamma(l) = W_\\gamma \\cdot \\text{Embed}(l) + b_\\gamma$$ $$\\beta(l) = W_\\beta \\cdot \\text{Embed}(l) + b_\\beta$$ $$\\text{FiLM}(F_i) = \\gamma(l) \\cdot F_i + \\beta(l)$$其中 $F_i$ 是EfficientNet中间层的特征图，$\\text{Embed}(l)$ 是通过预训练语言模型（如Universal Sentence Encoder）得到的指令嵌入。FiLM层在EfficientNet的多个中间层插入，通过仿射变换将语言信息注入视觉特征，使得模型能够根据指令\u0026quot;选择性关注\u0026quot;相关视觉信息。\n2. Token Learner模块 经过EfficientNet编码后，每帧图像会产生 $H \\times W$ 个视觉token（例如对于300×300的输入，约有900个token）。为了降低计算成本，RT-1引入了Token Learner模块：\nToken Learner使用两层自注意力（self-attention）网络，将大量视觉token压缩为少量（16个）\u0026ldquo;学习到的\u0026quot;token：\n$$T_{\\text{learned}} = \\text{Softmax}(W_2 \\cdot \\text{ReLU}(W_1 \\cdot T_{\\text{visual}})) \\cdot T_{\\text{visual}}$$其中 $T_{\\text{visual}}$ 是视觉token序列，$W_1 \\in \\mathbb{R}^{16 \\times N}$，$W_2 \\in \\mathbb{R}^{N \\times 16}$ 是可学习参数。这一模块的核心价值在于：\n降低计算复杂度：从 $O(N^2)$ 降低到 $O(16^2)$ 的注意力计算 保留关键信息：通过可学习的注意力机制保留最重要的视觉信息 统一输入长度：无论输入图像分辨率如何，输出token数量固定 3. Transformer解码器 压缩后的视觉token（每帧16个，3帧共48个）加上语言指令token，送入一个标准的Transformer解码器。该解码器包含8层Transformer，隐藏维度为512，使用8个注意力头。\nTransformer的输出经过分类头（MLP）预测离散化的动作token。RT-1将连续动作离散化为256个bin，每个动作维度独立离散化，总动作空间维度为：\n$$a_t = [x_{\\text{arm}}, y_{\\text{arm}}, z_{\\text{arm}}, \\text{roll}, \\text{pitch}, \\text{yaw}, \\text{gripper}, x_{\\text{base}}, y_{\\text{base}}, \\text{yaw}_{\\text{base}}, \\text{mode}]$$其中：\n机械臂动作：7维（x, y, z, roll, pitch, yaw, gripper） 底盘动作：3维（x, y, yaw） 模式切换：1维（控制机械臂/控制底盘/终止） 训练方法 RT-1采用**行为克隆（Behavioral Cloning）**进行训练，损失函数为：\n$$\\mathcal{L} = -\\sum_{i=1}^{T} \\log \\pi_\\theta(a_t^{(i)} | o_t^{(i)}, l^{(i)})$$其中每个动作维度独立计算交叉熵损失。训练使用Adam优化器，学习率 $3 \\times 10^{-4}$，并采用cosine学习率衰减。模型在TPU v4 pods上训练约17天。\n推理流程 在推理时，RT-1执行闭环控制（closed-loop control）：\n以3Hz频率接收图像观测 将最近3帧图像与语言指令送入模型 模型输出离散化动作 动作解码为连续值后发送给机器人执行 重复直到模型输出\u0026quot;终止\u0026quot;动作或达到时间步上限 🧪 实验验证 数据集：大规模真实机器人数据 RT-1最重要的贡献之一是构建了当时最大的真实机器人操作数据集：\n属性 数值 总轨迹数 130,000+ 任务种类 700+ 机器人数量 13台 收集时间 17个月 机器人类型 Everyday Robots移动操作机器人 动作空间 11维（含模式切换） 控制频率 3Hz 数据集覆盖了多种技能类别：\n抓取（Pick）：从桌面/抽屉中抓取物体 放置（Place）：将物体放到指定位置 开关抽屉（Open/Close Drawer）：操作抽屉 抽屉取物（Get from Drawer）：从抽屉中取出物品 竖立放置（Place Upright）：将细长物体竖立放置 推倒（Knock Over）：将物体推倒 抽取纸巾（Pull Napkin）：从纸巾盒中抽取纸巾 拧开罐子（Open Jar）：拧开罐子盖子 对比基线 RT-1与以下基线进行了对比：\nBC-Z（2021）：Google此前最大的机器人模仿学习模型，基于ResNet+Transformer BC-Z XL：与RT-1参数量相当的BC-Z变体 Gato（DeepMind 2022）：多模态多任务模型 核心实验结果 1. 基础性能对比 在已见任务（Seen Tasks）上的成功率：\nRT-1: 97%（700+指令中的绝大多数） BC-Z: 72% BC-Z XL: 66% Gato: 65% RT-1在已见任务上达到了97%的成功率，显著超过所有基线。这表明RT-1能够有效地从大规模数据中学习多种技能。\n2. 未见任务泛化（Novel Tasks） 在从未见过的新指令上的成功率：\nRT-1: 76% BC-Z: 52% BC-Z XL: 44% Gato: 38% RT-1在未见任务上达到了76%的成功率，比次优基线高出24个百分点。这证明了Transformer架构的强大泛化能力。\n3. 干扰物鲁棒性（Distractor Robustness） 在桌面存在额外干扰物体时的成功率：\nRT-1: 83% BC-Z: 47% Gato: 38% 4. 背景鲁棒性（Background Robustness） 在未见过的新厨房环境中的成功率：\nRT-1: 59% BC-Z: 41% Gato: 28% 5. 真实厨房部署（Real Kitchen Deployment） 在真实的办公厨房中测试三个递进难度的任务：\nL1：适应新的台面布局和光照条件 L2：额外适应未见过的干扰物体 L3：额外适应全新的任务设置、新物体或物体在新位置 方法 L1 L2 L3 RT-1 90% 70% 50% BC-Z 60% 40% 20% Gato 70% 30% 10% RT-1在所有难度级别上都显著优于基线，展示了强大的跨域泛化能力。\n6. 异构数据吸收能力 RT-1展示了吸收异构数据的能力：\n仿真数据融合：将仿真环境中收集的数据与真实数据混合训练，在仿真中见过但真实中未见过的物体上，成功率从44%提升到65%（+21%），且在其他物体上的性能仅下降2%。\n跨机器人数据融合：将Kuka IIWA机器人收集的抓取数据与原始数据混合训练，在特定任务上的成功率从22%提升到39%（+17%，近2倍提升）。这展示了跨机器人形态的有效迁移，是一个激动人心的方向。\n7. 与SayCan框架的集成 RT-1还可以与SayCan（语言模型规划框架）集成，执行长 horizon 任务。在Kitchen1中，SayCan+RT-1达到67%的执行成功率；在未见过的Kitchen2中，SayCan+Gato和SayCan+BC-Z性能急剧下降，而RT-1没有明显下降。\n🔍 个人思考 亮点 数据驱动的范式验证：RT-1最重要的贡献是首次在机器人领域验证了scaling law的存在。通过精心设计的消融实验（不同数据量、模型大小、数据多样性），论文清晰地展示了数据和模型规模与性能之间的正相关关系。这为后续的RT-2等工作奠定了坚实基础。\n工程规模令人印象深刻：13万条真实轨迹、13台机器人、17个月的数据收集——这在机器人学习领域是前所未有的。这种工程能力本身就构成了极高的门槛。\nToken Learner的设计巧妙：通过将视觉token压缩到16个，RT-1在保持性能的同时大幅降低了计算成本。这种设计使得模型能够在标准TPU上高效训练。\nFiLM条件化的有效性：通过在EfficientNet中间层注入语言信息，模型能够根据指令选择性关注相关视觉特征，这是一种优雅的多模态融合方式。\n异构数据吸收能力：RT-1展示了将仿真数据和其他机器人数据融入训练的能力，这对于解决机器人数据稀缺问题具有重要意义。\n局限性 单一机器人形态：RT-1的所有数据都来自同一种机器人（Everyday Robots），虽然论文展示了跨机器人迁移的潜力，但验证范围有限。真正的多形态通用策略仍是开放问题。\n动作空间受限：RT-1的11维动作空间是为特定机器人设计的，缺乏对力控、接触力等精细操作的支持。这限制了其在需要精细力控的任务中的应用。\n数据收集的可扩展性：虽然13万条轨迹已经很多，但要训练真正通用的机器人策略可能需要数百万甚至更多轨迹。如何高效地收集这些数据仍是挑战。\n缺乏长horizon规划能力：RT-1本身是一个单步策略，需要与SayCan等外部规划器集成才能执行长序列任务。这增加了系统的复杂性。\n仿真到真实的迁移有限：虽然论文展示了仿真数据的融合，但仿真到真实的gap仍然存在，特别是在涉及接触和力交互的任务中。\n未来方向 RT-2的直接延续：RT-1的作者团队在2023年发布了RT-2，将视觉语言模型（VLM）直接用作机器人策略，进一步探索了预训练知识在机器人任务中的应用。\n多形态数据融合：扩展到更多类型的机器人（如灵巧手、人形机器人），构建真正的多形态机器人基础模型。\n更高效的数据收集：结合仿真、互联网视频、人类视频等多种数据源，降低真实数据收集的成本。\n在线学习与适应：当前RT-1是离线训练的，如何让模型在部署后持续学习和适应新环境是重要方向。\n与世界模型结合：将RT-1的策略学习与世界模型（world model）结合，实现更高效的规划和想象式推理。\n📖 延伸阅读 RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control（Brohan et al., 2023）- RT-1的直接后续工作，将VLM用于机器人控制 BC-Z: Zero-Shot Task Generalization with Robotic Imitation Learning（Jang et al., 2021）- RT-1的重要基线和前驱工作 Gato: A Generalist Agent（Reed et al., 2022）- DeepMind的多模态多任务模型 Scaling Robot Learning with Semantically Imagined Experience（Mees et al., 2022）- 探索如何通过语义想象扩展机器人数据 Do As I Can, Not As I Say: Grounding Language in Robotic Affordances（Ahn et al., 2022）- SayCan工作，展示了如何将语言模型与机器人技能结合 PaLM-E: An Embodied Multimodal Language Model（Driess et al., 2023）- 将PaLM扩展为具身多模态模型 Diffusion Policy: Visuomotor Policy Learning via Action Diffusion（Chi et al., 2023）- 基于扩散模型的机器人策略学习 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/rt-1-robotics-transformer%E7%B2%BE%E8%AF%BB/","summary":"RT-1是Google Robotics团队提出的一种基于Transformer的机器人策略模型，通过在超过13万条真实机器人轨迹数据上训练，实现了对700+种任务的强大泛化能力。该工作首次证明了大规模、多样化的真实数据结合高容量架构能够在机器人领域取得类似NLP和CV领域的scalable性能。","title":"论文精读｜RT-1：Robotics Transformer——大规模真实机器人数据驱动的策略学习"},{"content":"一句话理解功能安全 功能安全 = 系统在遇到故障（硬件坏了/软件bug/感知异常）时，仍然能保证不发生不可接受的人身伤害\n没有功能安全：激光雷达死机 → 感知丢失 → 车辆继续行驶 → 撞车\n有功能安全：激光雷达死机 → 感知模块报错 → 安全监控介入 → 车辆安全靠边停车\n功能安全不关心\u0026quot;系统能不能做好自动驾驶\u0026quot;——那是算法团队的职责。功能安全关心的是**\u0026ldquo;当系统出问题时，怎么保证不撞死人\u0026rdquo;**。\n第一部分：ISO 26262基础 ISO 26262是道路车辆功能安全的国际标准，源自工业通用的IEC 61508。该标准覆盖了从概念设计到生产释放再到退役的整个安全周期。\n核心概念体系 在学习ISO 26262之前，需要先建立它的概念体系。这些术语的精确含义与日常使用存在差异，需要仔细区分。\n故障 (Fault)：系统的异常状态。可以是硬件故障（如电阻短路）、软件故障（如空指针异常）或系统故障（如设计缺陷）。故障是\u0026quot;因\u0026quot;。\n失效 (Failure)：系统或组件丧失执行所需功能的能力。当故障被激活时，就会发生失效。例如，电阻短路（故障）导致供电电压异常（失效）。失效是\u0026quot;果\u0026quot;。\n危险 (Hazard)：系统失效可能导致伤害的潜在状态。例如，刹车失效（失效）与车辆正在行驶（运行场景）结合，构成\u0026quot;无法制动\u0026quot;的危险。\n风险 (Risk)：危险发生的概率与伤害严重程度的组合。ISO 26262的目标就是将风险降低到可接受的水平。\n安全目标 (Safety Goal)：对系统在特定危险下必须满足的安全要求的顶层描述。例如：\u0026ldquo;在刹车指令发出后的500ms内，制动力必须达到需求的90%。\u0026rdquo;\n安全状态 (Safe State)：系统失控后可以进入的一种不会对人员造成伤害的状态。最典型的安全状态就是\u0026quot;停止\u0026quot;——车辆刹车停稳，然后保持静止。\nASIL等级：风险的量化 ASIL (Automotive Safety Integrity Level) 是ISO 26262中最广为人知的概念。它将功能安全要求分为四个等级：ASIL A（最低）到ASIL D（最高）。还有一个QM (Quality Management) 级别，表示仅需标准质量管理，无需功能安全流程。\nASIL等级由三个参数决定：\n$$ ASIL = f(Severity, Exposure, Controllability) $$严重度 (Severity, S)：伤害的严重程度。\nS0：无伤害 S1：轻伤（如擦伤） S2：重伤（如骨折） S3：致命伤 暴露率 (Exposure, E)：系统运行场景中危险出现的概率。\nE0：几乎不会发生 E1：极少发生（\u0026lt;1%的驾驶时间） E2：偶尔发生（1%-10%） E3：经常发生（10%-50%） E4：几乎持续发生（\u0026gt;50%） 可控性 (Controllability, C)：驾驶员或乘客能否通过适当反应避免伤害。\nC0：完全可控 C1：简单可控 C2：一般可控 C3：难以控制或无法控制 三者的组合确定ASIL等级：S3 + E4 + C3 = ASIL D（最高安全等级）；S1 + E1 + C1 = QM（仅需质量管理）。\n理解ASIL的工程意义：\nASIL等级直接决定了开发过程中需要投入的安全工程工作量。对于ASIL D级别的功能：\n硬件需要达到99%以上的诊断覆盖率 软件需要双模冗余或更高级别的容错机制 开发流程需要独立的安全评审和验证团队 测试覆盖率要求远高于低ASIL级别 在自动驾驶中，转向、制动、动力等核心执行器相关的安全功能通常被归类为ASIL D。而某些非安全关键功能（如信息娱乐系统）可能仅需QM级别。\nHARA分析 HARA (Hazard Analysis and Risk Assessment) 是ISO 26262概念阶段的核心活动，也是确定ASIL等级的方法论。\nHARA的完整流程分为三步：\n第一步：场景分析 (Situation Analysis)\n识别系统在生命周期中可能处于的所有运行场景。对于自动驾驶来说，场景分析需要覆盖正常驾驶、泊车、充电/加油、维护、维修等全部阶段。\n每个场景进一步细分为\u0026quot;运行模式\u0026quot;和\u0026quot;环境条件\u0026quot;。例如，\u0026ldquo;高速公路夜间小雨中行驶\u0026quot;就是一个具体的场景组合。\n第二步：危险识别 (Hazard Identification)\n对每个场景，分析系统失效可能导致的危险。以自动紧急制动(AEB)系统为例：\n失效模式 运行场景 危险事件 意外触发制动 高速行驶 后车追尾 制动不足 障碍物前 与前车碰撞 制动力不平衡 湿滑路面 车辆失控 制动响应延迟 行人横穿 行人碰撞 第三步：风险评估 (Risk Assessment)\n对每个危险事件，评估S、E、C三个参数，确定ASIL等级。上例中，\u0026ldquo;制动不足 → 与前车碰撞\u0026quot;在高速场景下的S通常为S3（致命伤），E为E3（经常遇到），C为C2（一般可控），综合得到ASIL C或D。\nHARA实践中的典型经验数据：\n一个中等复杂度的自动驾驶系统（覆盖L2+功能）通常会产生50-150个危险事件 每个危险事件对应1-2个安全目标 ASIL D级别的安全目标通常占总量10-20%，ASIL B/C占30-40%，QM占30-50% 第二部分：ISO 21448 (SOTIF) ISO 26262主要针对的是\u0026quot;系统故障导致的安全问题\u0026rdquo;（比如传感器坏了、软件算错了）。但自动驾驶面临一个更根本的挑战：即使所有硬件和软件都没有故障，仅仅因为算法能力不足（看不准、预测错），也可能导致危险。\n这就是SOTIF (Safety Of The Intended Functionality)——预期功能安全——要解决的问题。\n从26262到21448 ISO 21448标准的核心洞察是将场景分为四个象限：\n已知场景 未知场景 安全 场景已知且模型处理正确（Quadrant I） 场景未知但无害（Quadrant IV） 不安全 场景已知但模型处理不好（Quadrant II） 场景未知且模型处理不好（Quadrant III） ISO 26262负责的是Quadrant I到II的边界——已知场景中，如果系统因为故障导致不安全，那是26262的范畴。\nSOTIF负责的是Quadrant II和Quadrant III——系统没有故障，但算法能力不足以安全处理场景。\n工程解读：\nQuadrant II（已知不安全）：我们明确知道哪些场景当前模型处理不好（如强逆光、大雨天雾、无保护左转）。对这些场景，需要量化感知不确定性、设计降级策略、或者在ODD中排除。 Quadrant III（未知不安全）：我们不知道模型在哪些场景中会失败——这就是最难处理的部分。SOTIF要求通过大量的路测和仿真暴露这些未知场景，将其转化为已知场景（迁移到Quadrant II），然后解决或排除。 SOTIF的核心流程 SOTIF的整体开发流程包括以下环节：\n1. 功能规范分析与系统定义\n明确系统的预期功能和非预期功能。例如：自适应巡航(ACC)的预期功能是\u0026quot;保持设定车速和跟车间距\u0026rdquo;，非预期功能包括\u0026quot;在施工区域错误识别限速标志\u0026quot;。\n2. 安全场景识别与评估\n通过以下手段识别不确定性来源：\n传感器局限性（雨、雾、逆光、低对比度等） 算法局限性（感知模型在特定场景的精度退化） 系统局限性（计算延迟导致的不确定性） 3. 功能改进 —— 减少不安全场景\n通过算法改进降低Quadrant II和Quadrant III的规模：\n提升感知模型在长尾场景的精度 引入感知不确定性量化模块 设计冗余传感器方案覆盖感知盲区 4. 安全机制验证 —— 证明残余风险可接受\n对于改进后仍然存在的残余风险，通过以下方式论证：\n定量分析：用统计数据证明风险低于可接受阈值 降级策略：证明在已知不安全场景中，系统能及时降级到安全状态 运行设计域(ODD)限制：在无法解决的场景中排除使用（如大雨天暂停运行） 5. 全生命周期安全评估\nSOTIF不是一次性工作。随着路测数据的积累、ODD的扩展、新场景的暴露，需要持续更新安全分析和安全机制。\n第三部分：VLA模型的安全工程实践 现在我们把功能安全和SOTIF的语言落地到VLA (Vision-Language-Action) 模型的具体实践中。VLA模型用大语言模型作为推理后端，直接输出驾驶决策，这在安全工程上带来了全新的挑战。\n感知不确定性量化 VLA模型需要环境感知作为输入。无论是直接处理视觉token还是接收BEV特征，感知模块的不确定性都会传递到决策模块。对不确定性的量化和处理是SOTIF在VLA模型中最直接的落地。\n三类不确定性：\n1. 偶然不确定性 (Aleatoric Uncertainty)\n源于传感器或环境的固有噪声。比如雨天LiDAR点云的稀疏性、摄像头在弱光下的信噪比降低。\n量化方法：对于每个感知输出，模型同时输出一个不确定性估计。例如，检测头的输出不仅包含边界框 $(x, y, w, h)$，还包含方差 $\\sigma^2$：\n$$ \\hat{y} = f_\\theta(x), \\quad \\hat{\\sigma}^2 = g_\\theta(x) $$训练时使用不确定性加权的损失函数：\n$$ \\mathcal{L} = \\frac{\\lVert y - \\hat{y} \\rVert^2}{2\\hat{\\sigma}^2} + \\frac{1}{2}\\log\\hat{\\sigma}^2 $$2. 认知不确定性 (Epistemic Uncertainty)\n源于模型的\u0026quot;知识盲区\u0026quot;——模型训练数据中没有覆盖的场景。比如在训练数据中从未出现过的工程车辆。\n量化方法：使用Monte Carlo Dropout、Deep Ensemble或直接学习\u0026quot;不知道\u0026quot;的阈值。在VLA模型中，一个实用方案是用模型对备选轨迹的logit值的方差来衡量认知不确定性。\n3. 分布外检测 (OOD Detection)\n当输入与训练数据分布显著不同时，模型应该\u0026quot;承认自己不知道\u0026quot;而不是强行输出一个错误的结果。\n常用方法包括基于特征距离的方法（Mahalanobis距离到训练集特征中心的距离）：\n$$ D_{Mahalanobis}(x) = (z - \\mu_{train})^T \\Sigma_{train}^{-1} (z - \\mu_{train}) $$其中 $z$ 是模型的中间层特征，$\\mu_{train}$ 和 $\\Sigma_{train}$ 是训练集特征的均值和协方差矩阵。\n当 $D_{Mahalanobis}$ 超过某个阈值时，模型判定当前输入为OOD，触发降级策略。\n工程落地经验：感知不确定性量化的核心挑战不是\u0026quot;能不能算\u0026quot;，而是\u0026quot;阈值怎么设\u0026quot;。阈值太宽松会频繁触发不必要的降级（影响可用性），阈值太严格则漏掉真正危险的不确定性。实践中通常通过收集大量路测数据，分析不确定性分数与实际驾驶风险的对数关系来确定阈值。\n降级策略 (Degradation Strategy) 降级策略是功能安全中的\u0026quot;最后一道防线\u0026quot;——当系统检测到自身无法安全处理当前场景时，自动降低功能级别。\n三级降级体系：\n级别 检测到的问题 行为 对用户体验的影响 Level 1 感知不确定性轻微升高 降低车速上限(如从80降到60km/h); 增加跟车距离 基本不可感知 Level 2 感知不确定性显著升高; 单传感器失效; VLA模型置信度过低 通知驾驶员准备接管; 限速到40km/h; 切换到冗余传感器方案 驾驶员需要关注路况 Level 3 多传感器失效; 系统严重异常; 严重OOD 最小风险策略(MRM, Minimal Risk Maneuver): 安全靠边停车 立即接管或系统自动执行MRM MRM的设计：最小风险策略是降级的终极状态。MRM需要设计为在安全冗余系统上执行，不能依赖于引发降级的那套感知系统。典型的MRM流程：\n减速到安全速度（通常10-15km/h，保证在检测到障碍物时有足够刹车距离） 打双闪灯 缓慢靠向右侧路肩或紧急停车带 停车后挂入P挡，拉起电子手刹 通过车联网上传故障日志和降级原因 整个MRM过程需要设计为在单传感器失效、单计算单元失效的情况下仍然可执行。这意味着MRM的执行路径必须经过冗余设计和独立供电。\n安全监控器 (Safety Monitor) 安全监控器是一个独立于主算法模型的安全监控系统。它的核心原则是：不依赖于被监控对象来判断自身的可靠性。\n安全监控器的设计原则：\n独立性：监控器使用与主模型不同的传感器、不同的计算平台、不同的算法原理。例如，主模型使用基于神经网络的视觉感知，监控器可以使用基于传统计算机视觉的校验算法。 简单性：监控器应该足够简单，使得它的行为可以被正式验证。这通常意味着使用确定性算法而不是深度学习模型。 实时性：监控器的延迟必须低于主模型的决策周期，通常要求在30-50ms以内输出安全评估结果。 监控器的典型工作模式：\n主 安 模 全 型 监 输 步 输 控 入 骤 出 器 : : 1 2 3 : : . . . 主 { 模 独 → → → 一 输 轨 型 立 致 出 迹 输 验 制 轨 占 性 : : 出 证 动 迹 用 检 ： 距 曲 预 查 { [ + 用 离 率 测 ： 安 w 独 是 是 是 当 全 a 独 立 否 否 否 前 标 y 立 感 符 超 冲 输 志 p 传 知 合 限 突 出 : o 感 数 物 ? ? 与 i 器 据 理 前 P n 数 校 约 ( ( N A t 据 验 束 曲 自 帧 S s 主 ? 率 车 输 S ] 模 半 规 出 / , 型 径 划 是 W 的 轨 否 A 速 推 ^ \u0026gt; 迹 一 R 度 理 2 是 致 N : / 根 否 ？ / 2 据 与 加 V 1 a 当 独 速 I 2 前 立 度 O m \u0026lt; 车 检 / L / 速 测 转 A s s 的 的 向 T , 到 最 其 变 I 最 小 他 化 O 转 近 转 物 是 N 向 障 弯 体 否 , 角 碍 半 重 合 : 物 径 叠 理 推 ) ) ) ？ 荐 0 动 . 作 0 : 3 r N a O d N } E / D E G R A D E / M R M } VLA模型特有的安全监控挑战：\nVLA模型使用大语言模型的token generation作为推理过程。这种\u0026quot;非结构化推理\u0026quot;给安全监控带来了新问题：\n推理过程不可观测：传统规划模型输出明确的轨迹点，可以直接校验。VLA模型输出的是自然语言/action token，防御性校验的输入维度完全变了。 幻觉问题：大模型可能在输出中生成合理但事实错误的推理。例如，\u0026ldquo;前方没有障碍物\u0026rdquo;（但实际有施工区域），模型仍然生成了一个合理的加速轨迹。 延迟波动：大模型推理的延迟可能随输入长度和复杂度显著变化，这与功能安全要求的确定性延迟时间存在冲突。 应对方案：在实践中，VLA模型通常采用\u0026quot;混合架构\u0026quot;——用大模型做高层意图推理（如\u0026quot;前方车流密集，准备跟车\u0026quot;），但最终的动作执行仍然通过一个固定的、可验证的规划器来生成。安全监控器监控的是最终输出的轨迹，而不是大模型的推理过程。\n第四部分：功能安全的工程现实 安全文化 vs 安全程序 功能安全标准最重要的贡献不是那些条条框框，而是建立了一种\u0026quot;安全的思考习惯\u0026quot;。ISO 26262让整个开发团队养成一种条件反射：每做一个决策，都要问\u0026quot;如果这里出问题了会怎么样？\u0026quot;\n但在工程现实中，很容易陷入\u0026quot;为了过审而走流程\u0026quot;的形式主义——HARA分析成了填表格，安全评审成了走过场。\n一个好的功能安全实践，至少要做到三件事：\n安全工程师嵌入开发团队：安全不是独立于开发的\u0026quot;监管活动\u0026quot;，安全工程师需要实际参与设计评审 安全工件与实际代码关联：每个安全目标和安全机制都需要通过git commit或者具体的代码变更来追溯 安全测试与功能测试融合：功能安全验证不是独立于功能测试的额外工作，而是测试计划的一部分 安全冗余的工程成本 每增加一级安全冗余，都意味着硬件成本、开发工程量、系统复杂度的显著上升。以ASIL D的转向系统为例：\n单一控制器方案：硬件成本X，功能安全等级无法达ASIL D 双控制器热备方案：硬件成本约2.3X，工具链成本增加约1.5倍，可以实现ASIL D 三模冗余方案：硬件成本约3.5X，同步机制复杂度指数级上升，开发周期增加2倍以上 在实际量产中，OEM会根据ASIL等级的精确定义来决定冗余的具体实现方式——不是\u0026quot;越冗余越好\u0026quot;，而是\u0026quot;刚好达到安全目标即可\u0026quot;。\nSOTIF验证的数据量估算 SOTIF的验证要求是：残余风险必须低于可接受水平。但\u0026quot;可接受水平\u0026quot;是多少？业界还没有一个完全统一的标准，但一个常见的参考是：L4系统要求每百万公里发生致命事故的频率低于1次。\n要达到这个置信水平，需要多少路测数据？假设真实世界中致命事故的发生率为每百万公里0.5次（这是人类驾驶的平均水平），要在95%置信水平下验证系统致命事故率不超过1次/百万公里，需要大约300万公里的路测数据。\n300万公里对应一个50辆车的测试车队，每辆车每天跑300公里，连续运行200天。这还不包括在罕见场景中需要的大量仿真数据。这就是SOTIF验证令人望而生畏的地方——安全不是一个技术问题，在更大程度上是一个数据规模问题。\n关键论文与延伸阅读 ISO 26262:2018: \u0026ldquo;Road vehicles — Functional safety\u0026rdquo; — 功能安全主标准，共12个部分 ISO 21448:2022: \u0026ldquo;Road vehicles — Safety of the intended functionality\u0026rdquo; — SOTIF标准正文 HARA分析实践: R. Palin et al., \u0026ldquo;HARA: A Practical Guide for Automotive Systems\u0026rdquo;, SAE 2020. — HARA分析的方法论和工程案例 感知不确定性量化: A. Kendall et al., \u0026ldquo;What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision?\u0026rdquo;, NeurIPS 2017. — 偶然不确定性和认知不确定性的经典区分 自动驾驶安全框架: P. Koopman et al., \u0026ldquo;Safety First: A Safety-First Approach to Autonomous Vehicle Development\u0026rdquo;, 2019. — 基于SOTIF理念的自动驾驶安全框架白皮书 MRM设计: S. Shalev-Shwartz et al., \u0026ldquo;On a Formal Model of Safe and Scalable Self-driving Cars\u0026rdquo;, arXiv 2017. — 最小风险策略(MRM)的理论基础 功能安全不生产自动驾驶的能力，但它定义了这个能力的\u0026quot;底线\u0026quot;。一个好的安全系统应该让用户感觉不到它的存在——直到真的出问题的那一刻，它才是所有人最感激的那个默默工作的组件。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E5%8A%9F%E8%83%BD%E5%AE%89%E5%85%A8%E5%85%A5%E9%97%A8/","summary":"L4自动驾驶的部署必须满足功能安全标准，但AI研究人员对此往往一片空白。本文从ISO 26262的ASIL等级与HARA分析出发，讲解功能安全的核心概念（故障/失效/危险/风险/安全目标/安全状态），再深入到SOTIF（ISO 21448）——专门针对自动驾驶\u0026rsquo;已知不安全场景\u0026rsquo;和\u0026rsquo;未知不安全场景\u0026rsquo;的安全分析框架。重点讨论VLA模型中感知不确定性量化、降级策略（degradation strategy）和安全监控（safety monitor）的工程实践。","title":"功能安全入门：ISO 26262与SOTIF"},{"content":"📄 论文信息 标题：EMMA: End-to-End Multimodal Model for Autonomous Driving 作者机构：Waymo LLC（Hwang, Xu, Lin, Hung, Ji, Choi, Huang, He, Covington, Sapp, Zhou, Guo, Anguelov, Tan） arXiv：2410.23262 收录：TMLR（2025） 博客：waymo.com/blog/2024/10/introducing-emma 一句话总结：基于 Gemini 多模态大模型，把感知、预测、规划、场景理解全部\u0026quot;翻译\u0026quot;成自然语言 VQA，用一个模型、一套语言空间统一所有驾驶任务。 📌 一个常见误解：EMMA 来自 Waymo（作者邮箱 @waymo.com），而非英国公司 Wayve。Wayve 的代表作是 LINGO/Ghost 系列的视觉-语言-动作模型，二者路线相近但完全独立，请勿混淆。\n🤔 要解决什么问题？ 自动驾驶系统过去几十年基本走分模块路线：感知 → 预测 → 规划 → 控制，每个模块单独训练、用规则串联。UniAD（CVPR 2023 最佳论文）之后的显式端到端路线虽然打通了梯度，但仍然要为每个任务设计专门的头、专门的表征（栅格图、矢量、轨迹…）。\n这些方案共同的痛点是：\n痛点 表现 后果 接口僵硬 模块间靠专家设计的结构化接口通信 难以适配新场景，长尾泛化差 任务割裂 感知、预测、规划各训各的，头不共享 任务间知识无法共享，互相正反哺无从谈起 缺乏常识 训练数据只有驾驶日志，规模有限 没有\u0026quot;世界知识\u0026quot;，复杂推理与长尾场景弱 解释性差 黑盒回归轨迹，出错不可读 出了事故不知道模型当时\u0026quot;想\u0026quot;了什么 而近两年崛起的多模态大模型（MLLM）——如 Gemini、GPT-4V——恰恰擅长两件事：(1) 从互联网级数据中学到海量世界知识，远超任何驾驶日志；(2) 通过**链式思维（Chain-of-Thought）**做复杂多步推理。这两点正是传统驾驶系统最缺的。\nEMMA 的灵魂拷问：既然 MLLM 这么强，为什么不让它成为驾驶系统的\u0026quot;一等公民\u0026quot;——把所有驾驶任务都塞进同一个语言模型里？ 与之前\u0026quot;用 VLM 给驾驶系统打补丁\u0026quot;的思路不同，EMMA 是从底层就把 MLLM 当作整个系统的核心。\n💡 核心思想：把驾驶变成 VQA EMMA 的设计哲学可以一句话概括：\n把所有非传感器输入和输出，统一表示成自然语言文本，让 Gemini 一次前向解决所有任务。\n公式上，它直接复用 Gemini 的自回归形式：\n输入：文本提示 T + 图像/视频 V 输出：文本 O = G(T, V)，逐 token 生成，概率为 P(O|T,V) = Π P(oᵢ | o_{\u0026lt;i}, T, V) 关键挑战是：驾驶任务里有大量三维坐标（轨迹路点 (x,y)、3D 检测框的位置和尺寸），怎么塞进\u0026quot;文本\u0026quot;里？EMMA 给出两条路并做了取舍。\n🔤 坐标如何文本化 表示方式 做法 代表工作 EMMA 选择 直接文本化 把 (9.01, 3.22) 直接写成数字字符串 RT-2（机器人控制） ✅ 离散 token 化 把空间划分网格，每个位置一个专用 token MotionLM（轨迹预测） ❌ EMMA 选择直接文本化，理由很关键：只有所有任务共享同一套语言表征空间，才能最大化复用 Gemini 预训练权重里的世界知识。代价是坐标 token 数更多、序列更长、生成更慢，但作者认为统一性带来的收益远大于效率损失——这是 EMMA 整篇论文最根本的设计取舍。\n⚙️ 方法细节 🛣️ 端到端轨迹规划 EMMA 的规划输入只有三样东西，刻意模仿人类开车：\n环视相机视频 V：唯一的传感器输入，把多路相机拼成一张图或视频 高层导航指令 T_intent：\u0026ldquo;直行/左转/右转\u0026rdquo;，来自路由器（如 Google Maps），相当于手机导航给的下一动作 历史自车状态 T_ego：过去若干帧的 BEV 路点 (x,y)，保证轨迹时序平滑 输出是未来 T_f 帧的 BEV 路点：\nO_trajectory = G(T_intent, T_ego, V)\n这套公式有三个非常优雅的特性：\n特性 含义 工程意义 自监督 监督信号只有自车未来位置 无需人工标注，可大规模扩数据 纯相机 不依赖 LiDAR/雷达 传感器成本最低 无图（HD-map free） 只要高层导航 不依赖昂贵高精地图 这三点加起来，意味着 EMMA 的数据扩张成本极低——只要有行车记录和自车轨迹就能训，这是大模型\u0026quot;scaling\u0026quot;最看重的前提。\n🧠 链式思维（CoT）推理 EMMA 最有意思的设计是在输出轨迹之前，先输出一段结构化 rationale（推理依据），从粗到细分四级（R1–R4）：\n层级 内容 示例 R1 场景描述 天气、时段、路况、车道 \u0026ldquo;晴天白天，四车道未分隔，两侧有泊车，前方有人行横道\u0026rdquo; R2 关键目标 影响驾驶的 agent + 精确 3D/BEV 坐标 \u0026ldquo;行人 [9.01, 3.22]，车辆 [11.58, 0.35]\u0026rdquo; R3 元决策 关键目标对自车的影响 \u0026ldquo;前方行人正在横穿，需减速让行\u0026rdquo; R4 行动 具体驾驶动作 \u0026ldquo;减速至约 15 km/h，保持当前车道\u0026rdquo; 这种 CoT 不仅提升了规划性能（论文实验证实），还把黑盒模型变成了可解释的系统——事故复盘时能看到模型\u0026quot;当时是怎么想的\u0026quot;，这对监管和公众信任至关重要。R2 里要求模型输出精确坐标，相当于把\u0026quot;视觉定位\u0026quot;也融进了推理链，是一种巧妙的视觉锚定。\n🦾 EMMA 通用模型（Generalist） 如果只做规划，就浪费了 MLLM 的通用性。EMMA 进一步把多个任务混在一起共训练，用任务特定提示切换输出：\n运动规划：输出未来路点序列 3D 目标检测：输出目标类别 + 3D 框坐标 道路图估计：输出车道线、边界的折线坐标 场景理解 QA：回答\u0026quot;前方有几个行人？路面是否湿滑？能见度如何？\u0026quot; 实验中最振奋人心的结论是：联合训练（co-training）让三个领域都涨点——规划、检测、道路图互相正反哺。例如，检测任务学到的目标定位知识，帮助规划更准确地避让；道路图任务学到的拓扑结构，帮助规划理解车道走向。这正是 EMMA 作为通用模型最大的价值：一个模型越练越强，而不是越拆越碎。\n📊 实验结果 任务 数据集 结果 运动规划 nuScenes SOTA，超越此前所有方法 运动规划 WOMD（Waymo Open Motion Dataset） 有竞争力的结果 3D 检测（纯相机） WOD（Waymo Open Dataset） 精度/召回超 SOTA 道路图估计 内部数据 高质量、可解释输出 此外，加入 CoT 推理和更多内部训练数据能进一步提升规划质量，证明这条路线有清晰的扩展性（scaling）——数据越多、模型越强，符合大模型的规模法则。在长尾场景的可视化中，EMMA 还展现出对复杂路口、施工区域等罕见情况的推理能力。\n🔧 工程实现与训练细节 基础模型的选择 EMMA 并不绑定某一个具体模型，论文里在 Gemini 和 PaLI 两类多模态大模型上都做了验证，但主线结果来自 Gemini。选择 Gemini 的理由有三：(1) 原生支持图文交错输入，能把多路环视相机自然地喂进去；(2) 预训练阶段见过的海量图文数据带来强世界知识；(3) 自回归生成天然适合输出结构化的 rationale + 轨迹序列。这也意味着 EMMA 的能力上限很大程度上继承自底层基础模型——基础模型越强，EMMA 越强，这是\u0026quot;大模型驱动\u0026quot;范式的根本特征。\n训练范式 EMMA 采用指令微调（instruction tuning）的方式在驾驶日志上训练：每条数据被构造成一个\u0026quot;提示-答案\u0026quot;对，提示里写明任务（如\u0026quot;请输出未来轨迹\u0026quot;），答案就是标注（轨迹路点 / 检测框 / 场景描述）。不同任务通过任务特定提示区分，共享同一套模型权重。通用模型（Generalist）则是把这些任务混合采样共训练，让一个模型同时掌握所有技能。\n一个值得注意的取舍 文本化坐标带来统一性，但也带来数值精度的隐患：浮点数被切成若干 token（如 9.01 → 9 . 0 1），一旦某个 token 生成错误，整段坐标就会偏移。EMMA 通过限定小数位数和统一的单位约定来缓解，但这本质上是把\u0026quot;连续数值回归\u0026quot;问题转成了\u0026quot;离散序列生成\u0026quot;问题——这也是后来 ReCogDrive、SparseDrive 转向扩散头或分类词表的动机之一。EMMA 的选择是\u0026quot;用精度换统一\u0026quot;，在科研探索阶段是合理的。\n输入输出的具体样例 以规划任务为例，EMMA 的输入提示形如：\u0026ldquo;给定左转指令，自车历史轨迹为 [(x₁,y₁), (x₂,y₂), \u0026hellip;]，请输出未来轨迹。\u0026ldquo;模型输出的则是一串文本化的坐标点。对于场景理解任务，提示则变成\u0026quot;描述当前场景的关键目标和风险\u0026rdquo;，输出是一段自然语言加坐标。这种统一的\u0026quot;提问-回答\u0026quot;格式让所有任务可以无缝混在一起训练，也让人能直接读懂模型的输出——这是传统黑盒回归模型做不到的。论文附录里提供了大量具体的 prompt 和 answer 样例，值得对照查看。\n⚖️ 与 DriveVLM / ReCogDrive 对比 三者都是\u0026quot;把大模型搬上自动驾驶\u0026rdquo;，但路线截然不同：\n维度 EMMA DriveVLM ReCogDrive 底层模型 Gemini（闭源 MLLM） 开源 VLM 开源 VLM + 扩散规划器 轨迹输出 纯文本 token 化坐标 小模型回归 扩散模型去噪生成 架构 单一大模型全包 双系统（VLM 慢 + 小模型快） 三段式（认知→扩散→RL） 统一性 ⭐⭐⭐⭐⭐ 完全统一 ⭐⭐⭐ 部分统一 ⭐⭐⭐ 解耦设计 推理速度 ❌ 慢（最大短板） ✅ 双系统保实时 ✅ 扩散头加速 7.8× 强化学习 ❌ 纯模仿 ❌ 纯模仿 ✅ DiffGRPO 核心差异：EMMA 走的是**\u0026ldquo;激进统一\u0026rdquo;路线——宁可慢，也要一个模型全包；DriveVLM/ReCogDrive 走的是\u0026ldquo;务实解耦\u0026rdquo;**路线——把\u0026quot;想\u0026quot;和\u0026quot;开\u0026quot;分开，用专门的轻量头保证车端实时。EMMA 像\u0026quot;用 GPT-4 直接开车\u0026quot;，后两者像\u0026quot;用 GPT-4 当副驾指挥一个小司机\u0026quot;。\n⚠️ 优势与局限 ✅ 优势 极致统一：感知/预测/规划/理解共享一套语言空间、一套权重，任务间互相正反哺 世界知识：继承 Gemini 的海量预训练知识，长尾场景推理潜力大 可解释：CoT rationale 让决策过程可读、可审计，满足监管需求 无图、纯相机、自监督：部署门槛低，数据扩张成本低 ❌ 局限（作者自述，附录 A.5） 局限 细节 影响 推理慢 Gemini 级大模型自回归生成，单帧开销大 车端实时性存疑 3D 空间推理弱 无法融合 LiDAR/雷达，纯相机深度估计难 远距离/遮挡场景受限 闭环评估昂贵 需要逼真的传感器仿真 难以大规模做闭环测试 不可开源 Gemini 闭源，社区只能看不能复现 可复现性差 📝 个人思考 统一 vs 解耦的根本张力：EMMA 把\u0026quot;统一性\u0026quot;推到了极致，但代价是推理速度和可部署性。这其实折射出当前 VLA 领域的核心争论——到底要不要用一个端到端大模型全包？ 我的看法是：EMMA 更像一份**\u0026ldquo;上限探索\u0026rdquo;的论文，它告诉我们\u0026quot;如果计算无限，统一模型能到什么高度\u0026quot;；而 DriveVLM/ReCogDrive 这类解耦方案才是工程落地的现实路径**。两者并不矛盾，前者定上限，后者保下限。从产业规律看，最终量产方案很可能是\u0026quot;解耦架构 + 大模型蒸馏\u0026quot;的折中——用 EMMA 式统一模型做教师，蒸馏出轻量的解耦学生。\n文本化坐标的隐忧：把 (9.01, 3.22) 直接当 token 输出，虽然换来了统一性，但数值精度和 token 效率都是硬伤——一个小数点错位就是一米误差，而且坐标越长、序列越慢。这恰恰是 ReCogDrive 用扩散头、SparseDrive 用分类词表替代的根本原因。EMMA 的选择适合科研上限验证，未必适合车端量产。\n对我们 Flow-GRPO 工作的启示：EMMA 验证了\u0026quot;通用知识 + 驾驶任务\u0026quot;能互相增益，但它没有用强化学习——纯靠模仿专家轨迹，上限被专家数据锁死。如果把 EMMA 的 CoT 推理和 DiffGRPO/Flow-GRPO 这类 RL 优化结合，用奖励信号去突破模仿学习天花板，会是非常有想象力的方向。EMMA 给出了\u0026quot;认知\u0026quot;这一半，缺的是\u0026quot;持续进化\u0026quot;这一半。\n开源问题是硬伤：Gemini 闭源意味着 EMMA 目前是\u0026quot;Waymo 的内部演示\u0026quot;。社区真正能复现和迭代的是基于开源 VLM（Qwen-VL、InternVL 等）的同类工作。未来谁能用开源模型逼近 EMMA 的统一性，谁就掌握话语权——这也是为什么 ReCogDrive、SparseDrive-V2 等开源工作如此重要。\n📖 论文精读系列。EMMA 是大模型时代的\u0026quot;激进统一派\u0026quot;代表作，建议和 UniAD、DriveVLM、ReCogDrive 放在一起对比阅读，能看清端到端驾驶在大模型时代的两条主线。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/emma-wayve%E7%AB%AF%E5%88%B0%E7%AB%AF%E5%A4%9A%E6%A8%A1%E6%80%81%E7%B2%BE%E8%AF%BB/","summary":"Waymo 的 EMMA 基于 Gemini 多模态大模型，把所有驾驶任务（感知、预测、规划）统一翻译成自然语言 VQA，用单一模型、一套语言空间端到端处理。它选择直接文本化坐标以最大化复用 Gemini 预训练的世界知识。代表了将 MLLM 作为驾驶系统\u0026rsquo;一等公民\u0026rsquo;的前沿探索。","title":"论文精读｜EMMA：Waymo的多模态端到端驾驶大模型"},{"content":"🎯 一句话理解 PPO PPO = 用 clip 把每次策略更新的步子限制在\u0026rsquo;安全范围\u0026rsquo;内，既让策略往好的方向改，又不让改的幅度太大导致崩盘。\n它是 OpenAI 在 2017 年提出的算法，至今仍是 RLHF、自动驾驶等领域的核心训练引擎。\n📜 从 Policy Gradient 说起 REINFORCE：最朴素的策略梯度 强化学习的目标是找到一个策略 $\\pi_\\theta(a|s)$ 最大化累积奖励的期望。最直接的方法就是 REINFORCE（也叫 Monte Carlo Policy Gradient）：\n$$\\nabla_\\theta J(\\theta) = \\mathbb{E}_{\\tau \\sim \\pi_\\theta}\\left[\\sum_{t=0}^{T} \\nabla_\\theta \\log \\pi_\\theta(a_t|s_t) \\cdot R_t\\right]$$其中 $R_t = \\sum_{k=t}^{T} \\gamma^{k-t} r_k$ 是从 $t$ 时刻开始的累积折扣奖励。核心思想很直观：如果一条轨迹的总奖励高，就增大这条轨迹中每个动作的概率；总奖励低，就降低它们。\n这里的 $\\log \\pi_\\theta(a_t|s_t)$ 是关键——它来自 log-probability trick：\n$$\\nabla_\\theta \\pi_\\theta(a|s) = \\pi_\\theta(a|s) \\nabla_\\theta \\log \\pi_\\theta(a|s)$$这个恒等式把\u0026quot;对概率的梯度\u0026quot;转化成\u0026quot;对 log 概率的梯度\u0026quot;，让我们能直接对概率分布做梯度上升，而不需要处理概率本身的约束。\nREINFORCE 的问题：高方差 REINFORCE 的梯度估计是无偏的，但方差极大。想象一下：同一个状态下采 10 条轨迹，奖励可能从 -100 到 +100 波动。直接用 $R_t$ 做权重，梯度噪声大得惊人，收敛极其缓慢。\n方差来源有两个：\n奖励本身的随机性：环境动态、对手行为都会导致相同动作得到不同奖励 轨迹长度的累积：$R_t$ 是未来所有奖励的和，越往后噪声越大 降低方差是策略梯度方法的核心课题，几乎所有后续改进都在围绕这个做文章。\n方法 降方差手段 是否引入偏置 REINFORCE 无 无偏（高方差） REINFORCE + baseline 减基线 $b(s)$ 无偏 Actor-Critic 用 $Q$ 替代 $R_t$ 有偏（估计误差） GAE $\\lambda$ 加权折中 可控偏置-方差权衡 🏗️ PPO 的四个核心组件 PPO 之所以成为经典，是因为它把策略梯度方法的每个环节都做了工程友好的设计。\n组件一：重要性采样 PPO 是 on-policy 算法，但为了样本效率，它允许用旧策略 $\\pi_{\\text{old}}$ 采样的数据来更新新策略 $\\pi_\\theta$。这需要重要性采样（Importance Sampling） 来修正分布偏移：\n$$r_t(\\theta) = \\frac{\\pi_\\theta(a_t|s_t)}{\\pi_{\\text{old}}(a_t|s_t)}$$当新旧策略差异很小时，$r_t(\\theta) \\approx 1$，重要性采样引入的偏置可以忽略。但一旦分布偏移过大，重要性权重的方差会爆炸——这引出了 clip 的必要性。\n组件二：Clipped Surrogate Objective PPO 的目标函数是带 clip 的 surrogate objective：\n$$\\mathcal{L}^{\\text{CLIP}}(\\theta) = \\mathbb{E}_t\\left[\\min\\left(r_t(\\theta) \\hat{A}_t,\\ \\text{clip}(r_t(\\theta), 1-\\epsilon, 1+\\epsilon) \\hat{A}_t\\right)\\right]$$这个设计妙在哪里？\n$A_t$ 符号 意思 $r_t$ 行为 clip 效果 $A_t \u003e 0$ 这个动作好 希望 $r_t$ 增大 但 $r_t \u003e 1+\\epsilon$ 时被 clip 住 $A_t \u003c 0$ 这个动作差 希望 $r_t$ 减小 但 $r_t \u003c 1-\\epsilon$ 时被 clip 住 clip 的本质是\u0026rsquo;悲观\u0026rsquo;约束：对于好动作，你最多能增加到 $(1+\\epsilon)$ 倍概率；对于差动作，你最多能减少到 $(1-\\epsilon)$ 倍。这确保了单次更新不会让策略发生剧烈变化。\n$\\epsilon$ 是 PPO 最重要的超参数，典型值 0.1~0.3。太小更新太慢、太大失去约束意义。\n组件三：GAE（Generalized Advantage Estimation） GAE 是 PPO 降方差的关键武器。它平衡了 bias 和 variance，用一个参数 $\\lambda$ 在两者间光滑插值：\n$$\\hat{A}_t^{\\text{GAE}(\\gamma, \\lambda)} = \\sum_{l=0}^{\\infty} (\\gamma\\lambda)^l \\delta_{t+l}$$其中 TD-error $\\delta_t = r_t + \\gamma V(s_{t+1}) - V(s_t)$。\n$\\lambda$ 含义 bias variance $\\lambda = 0$ 单步 TD 高偏置 低方差 $\\lambda = 1$ Monte Carlo 无偏 高方差 $\\lambda \\in (0,1)$ 折中 可控 可控 典型值 $\\lambda = 0.95$，在自动驾驶场景中常调高到 0.98 以利用更长期的奖励信号（如安全到达终点这种稀疏奖励）。\nGAE 需要 value network（critic） 提供 $V(s)$ 估计，这也正是 GRPO 要砍掉的目标。\n组件四：Value Network（Critic） 价值网络 $V_\\phi(s)$ 估计状态 $s$ 的平均期望回报，它的作用是充当基线（baseline）：\n$$A_t = Q(s_t, a_t) - V(s_t)$$Critic 通过最小化 MSE 损失训练：\n$$\\mathcal{L}^{\\text{VF}}(\\phi) = \\mathbb{E}_t\\left[(V_\\phi(s_t) - R_t)^2\\right]$$ Critic 的问题 具体表现 同 policy 一样大 LLM 场景下显存翻倍 收敛困难 价值估计需要大量数据 带偏 advantage critic 估计不准时，优势信号被污染 双网络调参 policy 和 value 的 learning rate 互相影响 PPO 的完整损失是 policy loss、value loss 和 entropy bonus 的加权和：\n$$\\mathcal{L}^{\\text{PPO}}(\\theta, \\phi) = \\mathcal{L}^{\\text{CLIP}}(\\theta) - c_1 \\mathcal{L}^{\\text{VF}}(\\phi) + c_2 \\mathcal{H}(\\pi_\\theta)$$ 🔄 PPO 算法步骤 PPO 的完整训练循环可以分解为五个步骤：\nStep 1：收集 Rollouts 用当前策略 $\\pi_{\\theta_{\\text{old}}}$ 与环境交互，收集 $N$ 条完整轨迹（或 $T$ 个 timestep）。每条轨迹存储 $(s_t, a_t, r_t, s_{t+1})$ 四元组。这一步最耗时——PPO 的样本效率瓶颈就在这里。\nStep 2：计算 GAE 利用收集到的轨迹和 critic 网络 $V_\\phi(s)$，计算每条轨迹每个时间步的 GAE $\\hat{A}_t$ 和 discounted return $R_t$。这是 off-line 计算，不涉及网络前向。\nStep 3：优化 Clipped Loss 将数据组织成 mini-batch，对 PPO 损失做多 epoch（通常 3~10 epoch）优化。这里每个 epoch 都会重新计算 $\\pi_\\theta(a_t|s_t)$ 以更新重要性比 $r_t$，但始终用 Step 1 收集的旧策略数据——这就是 importance sampling 的关键。\nStep 4：更新 Policy 用优化后的 $\\pi_\\theta$ 替换 $\\pi_{\\theta_{\\text{old}}}$，进入下一轮迭代。\nStep 5：重复 回到 Step 1，用新策略重新收集数据。\n这套流程的工程密码是 \u0026lsquo;收集一次、复用多步\u0026rsquo;——在旧数据上做多步梯度更新，大幅提升样本效率。但如果更新步数太多，新旧策略差异过大会导致 importance sampling 失效，所以 clip 和 early stopping 是必要的安全阀。\n步骤 计算量占比 关键瓶颈 收集 rollouts ~80% 环境交互速度 GAE 计算 ~5% 矩阵运算 多 epoch 优化 ~15% 网络前向/反向 ⚡ GRPO vs PPO：革命性的简化 GRPO（Group Relative Policy Optimization）由 DeepSeek 提出，核心洞察是：能否去掉 critic 网络？\n核心差异 维度 PPO GRPO 基线来源 Critic 网络 $V(s)$ 组内 reward 均值 优势函数 $\\hat{A}^{\\text{GAE}}_t$ $(r_i - \\bar r) / \\sigma$ 额外网络 Policy + Critic 仅 Policy 显存开销 ~2x ~1x 样本使用 跨时间步串联 同 prompt 并行采样 适用场景 连续控制、游戏 LLM、可验证 reward 为什么 GRPO 在某些场景更优？ 1. 显存减半：对百亿参数模型，去掉 critic 直接省一半显存，这是 GRPO 在大模型时代胜出的直接原因。\n2. 规避 critic 估计误差：critic 本身需要训练、可能不准，不准的 baseline 会污染 advantage 信号。GRPO 用 real reward 的统计量替代学习到的估计。\n3. 天然适配可验证 reward：当 reward 来自客观规则（碰撞检测、数学答案对错），组内比较比 critic 估计更直接可靠。\n4. 训练更稳定：单网络减少了调参复杂度，group size 是唯一新引入的超参数。\nGRPO 的代价 GRPO 并非免费午餐。它用 样本量的增加 换 critic 的去除：\n每个 prompt 需要采样 $G$ 个回答（$G$ 通常 8~64） 当 $G$ 太小，组内统计的方差大、信号弱 当 reward 区分度不高时，组内比较的优势不明显 PPO 和 GRPO 的关系不是替代而是互补：\nPPO 适合\u0026rsquo;连续交互、单步反馈\u0026rsquo;的场景（游戏、机器人控制），GRPO 适合\u0026rsquo;批量评估、可验证 reward\u0026rsquo;的场景（LLM、驾驶轨迹优化）。\n🧠 为什么 PPO / GRPO 在工作？ 平衡探索与利用 PPO 的 entropy bonus $c_2 \\mathcal{H}(\\pi_\\theta)$ 直接鼓励策略保持随机性——entropy 越高，动作分布越均匀，探索越充分。随着训练推进，entropy 自然衰减，策略逐渐从探索转向利用。\nGRPO 虽然没有显式 entropy term，但组内采样天然是一种探索：每次对同一 prompt 采样多个候选，候选间的多样性就是探索的体现。\n约束更新大小 策略梯度最大的敌人是 destructive updates——某次更新让策略\u0026quot;翻车\u0026quot;，后续再多的训练也救不回来。PPO 的三道防线：\nClip：限制单步重要性比的范围 KL 约束（可选）：强制新旧策略的 KL 散度在阈值内 Early stopping：当 KL 超限时提前终止本轮更新 GRPO 的约束更轻量，但通过组内归一化同样限制了梯度信号的幅度，避免了策略\u0026quot;跳崖\u0026quot;。\nWhy Works 的核心直觉 PPO 成功的关键在于 \u0026lsquo;可信区域内的逐步改进\u0026rsquo;：每次更新都确保新策略不会离旧策略太远，在每个小半径内寻找改进方向。这好比登山时的\u0026quot;之\u0026quot;字形路线——每一步都很短，但累计起来能爬很高的山。\n🚗 PPO / GRPO 在 VLA 中的应用 随着 VLA（Vision-Language-Action）模型成为端到端驾驶的主流范式，PPO 和 GRPO 作为策略优化工具开始密集出现。\nAlphaDrive：GRPO 驾驶策略优化 AlphaDrive 是首个将 GRPO 系统应用于自动驾驶策略的代表性工作。它将每个驾驶场景视为一个\u0026quot;prompt\u0026quot;，采样多条候选轨迹，用可验证的驾驶规则（碰撞检测、车道保持、限速合规）作为 reward，通过 GRPO 优化生成策略。关键贡献在于证明了 GRPO 在连续动作空间下的可行性——通过将轨迹参数化为 action token 序列，与 LLM 式的 autoregressive 生成兼容。\nReCogDrive：PPO 用于驾驶认知对齐 ReCogDrive 使用 PPO 对驾驶 VLM 进行 推理-行动对齐（reasoning-action alignment）。它首先让模型输出推理链（Chain-of-Thought reasoning about driving situation），然后基于推理生成驾驶动作。PPO 的 critic 网络在训练中学会了评估\u0026quot;当前状态下好的推理应该长什么样\u0026quot;，从而引导模型生成既安全又有解释性的驾驶决策。\nDriveVLA-W0：PPO 微调 VLA 基础模型 DriveVLA-W0 采用两阶段训练：第一阶段用大规模驾驶数据做行为克隆（BC）预训练，第二阶段用 PPO 做 RL 微调。PPO 的优势在此得到充分发挥——critic 网络在预训练阶段已经学到不错的状态价值估计，RL 阶段只需精调策略头，收敛快速且稳定。\n方法对比 工作 RL 算法 优化对象 Reward 来源 特色 AlphaDrive GRPO 轨迹 token 序列 可验证规则 首个 GRPO 驾驶应用 ReCogDrive PPO 推理-行动联合 VLM 评分 推理链对齐 DriveVLA-W0 PPO 动作头参数 驾驶模拟器 两阶段 BC + RL Flow-GRPO GRPO 扩散去噪过程 图像/轨迹质量 生成式策略 RL 趋势观察 VLA 的 RL 微调正在发生两个范式转变：\n从 PPO 走向 GRPO：随着模型规模增大，critic 的显存成本难以承受，GRPO 的趋势性优势越来越明显 从模拟器 reward 走向可验证 reward：用规则（碰撞、舒适度）替代模拟器评分，使 reward 更透明、更可控 📝 个人思考 PPO 之所以能在 2017 年提出后统治 RL 领域近十年，归根结底是它在\u0026rsquo;算法效果\u0026rsquo;和\u0026rsquo;工程可用\u0026rsquo;之间找到了黄金平衡点。clip 机制不漂亮——它没有理论上的单调改进保证，没有 TRPO 那种 elegant 的 KL 约束推导——但它就是好用、好调、好收敛。在工程世界里，\u0026lsquo;work\u0026rsquo;比\u0026rsquo;prove\u0026rsquo;重要得多。\nGRPO 对 PPO 的革新同样遵循这个逻辑。从理论上看，用组内均值替代 critic 应该会引入更高的方差（因为只用了 $G$ 个样本而非全局价值函数），但实践中它在 LLM 场景里表现更好。这说明在超大模型场景下，算法的 bottleneck 已经从\u0026rsquo;统计效率\u0026rsquo;转向了\u0026rsquo;计算效率\u0026rsquo;——显存和算力的约束比方差更致命。\n对自动驾驶从业者来说，我认为最重要的是理解 PPO/GRPO 是一套可插拔的训练方法论，而不是固定的算法实现。你完全可以做 GRPO + GAE 的混合、PPO + 组内 baseline 的杂交，关键在于根据场景的 reward 结构、模型规模和算力预算选择最合适的配置。RL 算法选的不是\u0026rsquo;最好的\u0026rsquo;，而是\u0026rsquo;最不坏的\u0026rsquo;。\n📖 这是知识点拆解系列的第 11 篇。从 REINFORCE 到 PPO 再到 GRPO，策略梯度这条路走了近三十年，远没有到终点。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/ppo%E7%AE%97%E6%B3%95%E6%B7%B1%E5%BA%A6%E6%8B%86%E8%A7%A3/","summary":"PPO 通过 clipped surrogate objective 和 GAE 实现稳定策略更新，是 RLHF 时代的核心算法。本文从 REINFORCE 出发，拆解 PPO 的每个关键组件，并对比 GRPO 的革新——去掉 critic，用组内相对优势替代。最后梳理 PPO/GRPO 在 VLA 驾驶模型（AlphaDrive、ReCogDrive、DriveVLA-W0）中的应用。","title":"知识点拆解｜PPO 算法深度拆解：从 Policy Gradient 到 GRPO 的进化之路"},{"content":"🎯 一句话理解 VLM VLM = 让 AI 既\u0026quot;看得懂图\u0026quot;又\u0026quot;说得出话\u0026quot;，打通视觉像素与语言语义之间的鸿沟。\n人类看一张照片，能瞬间说出\u0026quot;画面里有一个穿红衣服的人正要横穿马路\u0026quot;。VLM（Vision-Language Model，视觉语言模型）要做的，就是让机器获得同一种能力：输入可以是图像、可以是文字、也可以是两者的组合，输出是文字。\n它对自动驾驶的意义在于——VLM 是 VLA（Vision-Language-Action，视觉语言动作模型）的视觉理解基础：\nV L A 摄 像 的 头 完 画 整 面 链 路 ─ ： → V L M 负 责 \" 看 └ 懂 ─ 场 ─ 景 ─ \" ─ ─ 本 → 文 的 L 主 L 角 M ─ 负 ─ 责 ─ \" ─ 推 ┘ 理 决 策 \" ─ → 输 出 驾 驶 动 作 换句话说：VLA 先靠 VLM 把\u0026quot;像素\u0026quot;翻译成\u0026quot;语义\u0026quot;（这辆车、这个人、这个红灯），再用大模型的推理能力决定\u0026quot;该怎么做\u0026quot;。VLM 看懂场景的上限，直接决定了 VLA 决策质量的上限。\n🧠 第 0 步：前置知识——多模态是怎么\u0026quot;统一\u0026quot;的？ 在看四代架构之前，先建立三个最小必要概念，否则后面所有公式都会\u0026quot;飘\u0026quot;。\n0.1 世界上有两种信息形态：像素 vs 符号 视觉信息：一张图本质是 H×W×3 的数值矩阵（宽 × 高 × RGB 三通道）。模型\u0026quot;看\u0026quot;到的就是这些数字，没有\u0026quot;这是猫\u0026quot;这种高级概念。 语言信息：一段文字本质是一串离散符号（token），每个符号在词表里有编号。 VLM 的全部工作，就是在这两种完全不同的数据结构之间搭桥——把连续的像素，翻译成离散语言模型能消费的形式。\n0.2 LLM 里的一切都是 token（向量） LLM 内部并没有\u0026quot;字\u0026quot;，只有向量：\n文本先被分词（tokenize）：\u0026ldquo;一只猫\u0026rdquo; → [\u0026quot;一\u0026quot;, \u0026quot;只\u0026quot;, \u0026quot;猫\u0026quot;]； 每个 token 查词表得到嵌入向量（embedding），比如维度 $d=4096$； LLM 的 Transformer 在这些向量上做自注意力，最后一层输出每个位置\u0026quot;下一个词是谁\u0026quot;的概率分布。 所以对 LLM 来说，\u0026ldquo;看懂图\u0026quot;的唯一途径就是：把图像也变成一串向量 token，塞进同一个自注意力序列里。 这就是\u0026quot;多模态统一\u0026quot;的本质，也是下面所有架构的共同目标。整条链路可以先用一张总图把位置感建立起来：\n0.3 统一多模态的三种思路（先建立地图） 思路 做法 代表 能生成吗 对比对齐 图像和文本各走各的编码器，只在最后的特征空间里比相似度 CLIP ❌ 只能对齐 特征桥接 视觉特征经一个\u0026quot;翻译层\u0026quot;注入 LLM，LLM 负责生成 BLIP-2 / LLaVA ✅ 能生成 原生多模态 从零训练一个统一编码器，图/文/音/视频共用 token 体系 GPT-4V / Gemini ✅ 全模态 后面的架构演进，就是这三条路依次登场的完整历史。\n🧬 架构演进：四代 VLM 第一代：双塔对比（CLIP, 2021） CLIP 由 OpenAI 提出，走的是\u0026quot;对比对齐\u0026quot;路线。它不生成文字，而是让两个编码器各自把图文映射到同一个特征空间，再用对比学习拉近\u0026quot;配对图文\u0026rdquo;、推远\u0026quot;不配对图文\u0026quot;：\n结构：图像塔（ViT 或 ResNet）+ 文本塔（Transformer），各自输出一个全局特征向量，经投影层 + L2 归一化后，在同一个空间里算余弦相似度。\n核心公式（对称交叉熵 / InfoNCE）：设一个 batch 有 $N$ 对图文，相似度矩阵 $s_{ij}=\\hat{i}_i\\cdot\\hat{t}_j$（图像特征与文本特征的内积），则损失为：\n$$\\mathcal{L} = -\\frac{1}{2N}\\sum_{i=1}^N \\left(\\underbrace{\\log\\frac{e^{s_{ii}}}{\\sum_j e^{s_{ij}}}}_{\\text{图→文：找到它的文本}} + \\underbrace{\\log\\frac{e^{s_{ii}}}{\\sum_j e^{s_{ji}}}}_{\\text{文→图：找到它的图像}}\\right)$$直觉：对角线上（$i$ 图配 $i$ 文本）是正对，其余都是负对。$\\log\\frac{e^{s_{ii}}}{\\sum_j e^{s_{ij}}}$ 相当于问\u0026quot;第 $i$ 张图的特征，在所有 $N$ 个文本特征里，是不是离自己的配文最近\u0026quot;。两个方向都做，所以叫对称。\n为什么对比学习能成功？ 两个前提缺一不可：\n海量数据：CLIP 用了 4 亿图文对，提供了极其丰富的负样本； 极大的 batch size：CLIP 训练 batch = 32,768，保证每个 batch 里负样本足够多、足够多样。 这在当时只有 OpenAI 的算力能做到。代价也很明显：CLIP 只能对齐、不能生成——它给你一个\u0026quot;图文相似度分数\u0026quot;，却不会回答\u0026quot;图上有什么\u0026quot;。\n三个关键技术细节（至今仍被沿用）：\nZero-shot 分类：把类别名写成文本（\u0026ldquo;a photo of a cat.\u0026quot;），与图像特征比相似度，相似度最高的就是预测类别。在 ImageNet 上 zero-shot 达 76.2%，不需要任何训练数据即可分类。 Prompt ensemble：推理时把类别名套进多个模板（\u0026quot;a photo of a {class}.\u0026quot;、\u0026quot;a blurry photo of a {class}.\u0026quot;、\u0026quot;the {class} in the picture.\u0026quot; 等），取所有模板文本特征的均值。这能显著提升鲁棒性，后来成了 VLM 推理的标准技巧。 特征空间的可迁移性：CLIP 学到的特征后来被大量用于图像检索、文生图的引导（如 Stable Diffusion 的文本编码器就用了它）。 SigLIP（Sigmoid loss）是 CLIP 的重要改进版：把 softmax 换成 sigmoid 二元损失，即每个图文对独立判断\u0026quot;是否配对\u0026rdquo;：\n$$\\mathcal{L}_{\\text{SigLIP}} = -\\frac{1}{N}\\sum_i \\log\\sigma(s_{ii}\\cdot t) - \\sum_{i\\ne j}\\log\\sigma(-s_{ij}\\cdot t)$$（$t$ 是学习到的温度参数。）它不依赖 batch 内负样本的相互竞争，因此 batch size 较小（如 16K）时依然有效，训练更稳定——这也让 SigLIP 成为当前 VLA 视觉编码器的首选（LLaVA、OpenVLA 等都在用）。\n第一代小结：CLIP 教会了大家\u0026quot;图文如何对齐\u0026quot;，但它只是\u0026quot;判官\u0026quot;，不是\u0026quot;话痨\u0026quot;。它把多模态问题从\u0026quot;能不能看\u0026quot;推进到\u0026quot;怎么对齐\u0026quot;。\n第二代：Q-Former 桥接（BLIP-2, 2023） CLIP 只能比对，那么\u0026quot;生成\u0026quot;怎么来？BLIP-2 的答案是：桥接层——用一个可学习的模块，把视觉特征\u0026quot;压缩翻译\u0026quot;成 LLM 能消费的 token，从而第一次实现了\u0026quot;看图说话\u0026quot;：\nQ-Former 是什么？ 一组 32 个可学习的 query token，通过交叉注意力去\u0026quot;询问\u0026quot; ViT 输出的 257 个 patch 特征（256 个 patch + 1 个 [CLS]），把信息压缩成 32 个视觉 token。这相当于一个\u0026quot;信息瓶颈\u0026quot;：256 个 patch 里最关键的语义被挑出来，冗余被过滤。\n为什么参数高效？ Q-Former 只有约 188M 参数，却完成了两个层级的桥接：\n对 LLM 而言，输入从\u0026quot;257 个 patch\u0026quot;变成\u0026quot;32 个 query 输出\u0026quot;，上下文长度大幅缩短（LLM 的 attention 开销随 token 数平方增长，省 8 倍输入就省了 64 倍的 attention 计算）； 对训练而言，绝大多数参数（ViT + LLM）都冻结，只需训练这一层桥接。 BLIP-2 的三阶段训练（冻结策略逐步放开，见上图右半部分）：\n阶段 目标 冻结部分 说明 1. 表示学习 让 query 学会从 ViT 提特征 ViT 对比损失 + ITM（图文匹配）+ 图文生成，三个目标联合 2. 生成学习 让 LLM 学会\u0026quot;用视觉 token 生成\u0026quot; ViT + LLM 冻结 LLM，只训 Q-Former 对齐生成目标 3. 端到端微调 下游任务最优 全部放开 在目标任务数据上微调 BLIP-3 / xGen-MM（2024，Salesforce）是 BLIP 的第三代，去掉了 Q-Former，直接用投影层把 ViT 特征注入 LLM。这印证了一个重要趋势：随着 LLM 能力变强，中间桥接模块可以越来越简单。BLIP-3 同时把训练数据扩展到多语言、多来源的大规模图文语料。\n第二代小结：Q-Former 证明了\u0026quot;桥接层\u0026quot;的价值——用极少的可训练参数激活一个冻结大模型的视觉理解能力。但它仍然不是最简方案。\n第三代：简单投影（LLaVA, 2023） LLaVA 由威斯康星大学麦迪逊分校与微软提出，是目前学术界最流行的 VLM 框架。它的核心洞察只有一句话：\n\u0026ldquo;LLM 已经足够强，只需要一个简单的 MLP 把视觉特征\u0026rsquo;翻译\u0026rsquo;成 LLM 能理解的格式。\u0026rdquo;\n架构：ViT-L/14 → MLP 投影层（2 层全连接）→ LLM（Vicuna/LLaMA 7B）。图像经过 ViT 得到 576 个 patch 特征（维度 1024），MLP 把它升维到 4096（与 LLM 词嵌入维度一致），然后与文本 token 一起拼进 LLM。\n两阶段训练（见上图下部）：\n阶段 数据 训练范围 任务 预训练对齐 CC-595K 图文对（约 59.5 万） 只训 MLP，LLM 冻结 看图生成一句描述（\u0026ldquo;这是什么\u0026rdquo;） 指令微调 158K 视觉指令（VQA + 对话） MLP + LLM 遵循\u0026quot;请描述图中危险物体\u0026quot;等指令 为什么 LLaVA 能成为主流？ 不只是结构简单，更在于：\n清晰的训练 recipe：两阶段、数据公开、成本低——LLaVA-1.5 用 600K 指令数据 + 单卡 A100 训练约 1 天，就能达到接近 GPT-4V 的 VQA 性能； 开源生态繁荣：社区能复现、能改造，于是围绕它长出了一整片下游应用。 高分辨率改进（对驾驶至关重要）：LLaVA 早期只能看 224×224 的图，远处的小目标（行人、锥桶）根本看不清。后继版本逐一解决：\nLLaVA-1.5（AnyRes）：把高分辨率图切成多个 336×336 的 patch，每个 patch 独立过 ViT 编码，再拼回 LLM； LLaVA-NeXT：支持动态分辨率，输入图像自适应切分，不再固定到某个尺寸； LLaVA-HR：用多层 Transformer 投影替换 MLP，保留更多视觉细节。 这些改进对驾驶场景极其关键——驾驶是典型的\u0026quot;小目标密集 + 远距离细节重要\u0026quot;场景，分辨率不足的 VLM 会直接漏掉路边的行人和锥桶。\n第三代小结：LLaVA 用\u0026quot;最简单桥接\u0026quot;证明：在 LLM 足够强的前提下，投影层只是\u0026quot;翻译官\u0026quot;，不需要复杂的检索或压缩结构。它的高分辨率路线图直接为驾驶 VLM 铺了路。\n第四代：原生多模态（GPT-4V / Gemini, 2023） 当前的能力天花板。它们的路线是\u0026quot;原生多模态\u0026quot;——从第一性原理设计，让一个模型直接处理多种模态。\nGPT-4V（OpenAI）：架构未公开，推测为视觉 encoder + 大规模多模态 Transformer。能力涵盖看图对话、视觉推理、图表理解、视频帧分析。它在自动驾驶中的典型用途是离线推理数据生成：DriveVLM 就是用 GPT-4V 看视频、生成 Chain-of-Thought 标注数据，再蒸馏给自研小模型。\nGemini（Google）：从第一性原理设计的原生多模态模型，用一个统一编码器处理图像/视频/音频/文本。Wayve 的 EMMA 就基于 Gemini 系列，一个模型同时输出感知 + 预测 + 规划（把轨迹也编码成 token）。\n对比 GPT-4V Gemini 架构 视觉 encoder + LLM 原生统一 encoder 输入 图像 + 文本 图像 + 视频 + 音频 + 文本 上下文 128K 1M+ 驾驶用途 教师数据生成（DriveVLM） EMMA 基模型 架构趋势总览 架构 代表 融合方式 参数量 训练成本 能否生成 双塔对比 CLIP 最后一层对比 小~中 低 ❌ Q-Former BLIP-2 交叉注意力桥接 中 中 ✅ 直接投影 LLaVA MLP 大 高 ✅ 原生多模态 GPT-4V 端到端统一 极大 极高 ✅ 三个贯穿趋势：\n桥接模块简化：Q-Former → MLP → （未来可能）不需要投影，LLM 直接原生理解视觉 token； 视觉 encoder 强化：ViT-B → ViT-L → ViT-G，视觉分支的容量一路变大； 训练数据膨胀：4 亿 → 50 亿+，数据质量从\u0026quot;弱对齐\u0026quot;走向\u0026quot;强指令\u0026quot;。 🔬 深度专题：决定 VLM 能力的四个工程点 看懂四代架构之后，真正动手做 VLM（或选型 VLM）时，决定性能的其实是下面四个工程细节。\n1. 视觉编码器怎么选？ CLIP：零样本能力强、通用性好，但对小目标/细节敏感度一般； SigLIP：训练更稳、batch 要求低，是目前 VLA 首选（OpenVLA、LLaVA 后续版本都在用）； InternViT / 其他大视觉模型：分辨率高、参数大，适合高要求场景（如 Senna 用的 InternVL 系列）。 2. 投影层怎么设计？ 投影方式 代表 特点 无投影（直接拼） 部分原生多模态 最简，但需从头训 MLP LLaVA 简单有效，信息无压缩 Q-Former BLIP-2 压缩 token 数，省 LLM 上下文 Resampler / Perceiver Flamingo 类似 Q-Former，可采样固定长度 3. 分辨率与位置编码 视觉信息里\u0026quot;位置\u0026quot;很重要：VLM 必须知道\u0026quot;这个锥桶在画面的左前方\u0026quot;； 高分辨率方案（AnyRes、动态切分）要小心位置编码错乱——切分后的 patch 与原始像素位置的对应关系要正确； 驾驶场景常用多分辨率 + 位置编码对齐的组合。 4. 图文 token 的组织方式 前缀拼接：[图像 token][文本指令]，LLaVA 模式，简单； 交错输入：图文交替出现，适合文档理解（如多页驾驶手册、多帧视频逐帧插入）； 特殊分隔符：用 \u0026lt;image\u0026gt;、\u0026lt;/image\u0026gt; 等 token 标记边界，让 LLM 知道\u0026quot;这里换了一种模态\u0026quot;。 🎓 VLM 训练三阶段 无论哪种架构，现代 VLM 的训练都遵循\u0026quot;三阶段\u0026quot;配方：\n阶段 目标 数据 典型损失 训练范围 ① 对齐预训练 视觉-语言特征空间对齐 海量图文对 对比损失 / ITM / 下一句生成 投影层为主 ② 指令微调 学会遵循视觉指令 VQA / 对话 / 指令集 自回归交叉熵 投影层 + LLM ③ RLHF / DPO 对齐人类偏好 人类偏好标注 PPO / DPO 全模型 阶段 ② 的数学本质（最重要，几乎所有 VLM 的 loss 都是它）：给定图像 $x$ 和指令前缀 $q$，LLM 自回归生成回答 $y=(y_1,\\dots,y_T)$，目标是最小化负对数似然：\n$$\\mathcal{L}_{\\text{SFT}} = -\\sum_{t=1}^{T}\\log P_\\theta(y_t \\mid y_{","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/vlm%E8%A7%86%E8%A7%89%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E5%85%A5%E9%97%A8%E8%AF%A6%E8%A7%A3/","summary":"VLM（视觉语言模型）是 VLA 的视觉理解基础。本文从 CLIP 奠基到 GPT-4V/Gemini 前沿，系统梳理架构演进（ViT → Q-Former → LLM）、训练三阶段（对齐→指令微调→RLHF）及驾驶 VLM 的适配方案。","title":"知识点拆解｜VLM 视觉语言模型入门详解：从 CLIP 到 GPT-4V"},{"content":"🎯 一句话理解驾驶 Reward 设计 驾驶 Reward = 用一个标量告诉策略\u0026rsquo;这一步开得好不好\u0026rsquo;，它必须在\u0026rsquo;安全不撞\u0026rsquo;（硬底线）、\u0026lsquo;坐得舒服\u0026rsquo;（舒适性）、\u0026lsquo;守规矩\u0026rsquo;（合规）、\u0026lsquo;走得快\u0026rsquo;（效率）之间艰难权衡——设计错了，模型要么撞车要么原地不动。\n在驾驶强化学习里，reward 函数决定了策略的天花板。算法再强（PPO、GRPO、SAC），reward 给错了，学出来的策略也是废的。这就是那句老话：\u0026ldquo;garbage in, garbage out\u0026rdquo;——reward 就是那个 \u0026ldquo;in\u0026rdquo;。一个微小的 reward 定义偏差，经过数百万步训练的放大，可能让最终策略南辕北辙。\n🧱 Reward 的四大组成组件 绝大多数驾驶 reward 都可以拆成四个维度的加权和：\n$$R(s, a) = w_{\\text{safe}} R_{\\text{safe}} + w_{\\text{comf}} R_{\\text{comf}} + w_{\\text{comp}} R_{\\text{comp}} + w_{\\text{eff}} R_{\\text{eff}}$$ 组件 目标 典型实现 安全性 $R_{\\text{safe}}$ 不碰撞、不冲出道路 碰撞大负奖励、TTC（碰撞时间）惩罚 舒适性 $R_{\\text{comf}}$ 加速度/急动度小、平顺 惩罚 $\\|a\\|$、$\\|jerk\\|$ 合规性 $R_{\\text{comp}}$ 守交规、不出可行驶区 越界惩罚、闯红灯/压线惩罚 效率性 $R_{\\text{eff}}$ 走得快、接近目标、进度 路线完成度、纵向位移奖励 1. 安全性：不可逾越的红线 安全永远是硬约束，通常用大额负奖励表示：\n碰撞惩罚：与任何他车/行人发生碰撞，给一个很大的负 reward（如 $-10$），往往直接结束 episode TTC（Time-to-Collision）：碰撞时间越短，惩罚越大，鼓励提前避让 冲出道路：越出可行驶区域，等同碰撞级惩罚 关键：安全相关 reward 的权重 $w_{\\text{safe}}$ 必须远大于其他项，因为一次碰撞的代价远高于无数次舒适或效率的微小收益。\n2. 舒适性：衡量\u0026quot;像不像老司机\u0026quot; 舒适性 reward 惩罚急动，让乘坐体验平顺：\n指标 含义 舒适区间（经验） 加速度 $a$ 速度变化率 $ 急动度 jerk 加速度变化率 $ 横向加速度 过弯舒适 $\u003c 3\\ \\text{m/s}^2$ yaw rate 横摆角速度 平滑无突变 舒适性通常是连续惩罚（如 $-\\|jerk\\|^2$），鼓励策略输出平滑的轨迹与控制。\n3. 合规性：守规矩 合规 reward 约束策略遵守交通规则：\n车道保持：不压实线、不骑线 信号灯：红灯停、绿灯行、不抢黄灯 限速：不超速（也不龟速阻塞交通） 让行：在无保护路口给优先车辆让行 合规项往往是二值或阈值惩罚——越界就扣分，没越界就不扣。\n4. 效率性：别停下来 效率 reward 给策略前进的动力，否则策略可能为了\u0026quot;绝对安全\u0026quot;而原地不动（这是驾驶 RL 的经典退化）：\n路线完成度（route completion）：已行驶路程 / 规划总路程 纵向进度：纵向位移的正奖励 目标接近度：到导航终点的距离缩小给奖励 效率项是防止\u0026quot;消极策略\u0026quot;的关键：没有它，模型会发现\u0026quot;不动 = 不撞 = 最优\u0026quot;这个漏洞。\n🌾 稀疏 vs 稠密 Reward：驾驶 RL 的头号难题 reward 设计按反馈密度分两类，这是驾驶 RL 最核心的取舍：\n维度 稀疏 reward 稠密 reward 反馈时机 只在 episode 结束（撞/到终点） 每一步都给 信用分配 难（不知道哪步错了） 容易 学习难度 高（信号稀少） 低（信号丰富） 代表性 \u0026ldquo;到达目的地 +1，碰撞 -1\u0026rdquo; 每步的 comfort/progress 风险 难收敛 reward shaping 易引入偏差 驾驶 RL 的标准做法是以稠密 reward 为主、稀疏 reward 为兜底：每步给 comfort/progress（稠密），episode 结束再给 collision/arrival（稀疏）。纯稀疏 reward 在复杂驾驶里几乎学不动，纯稠密又容易 reward hacking。\n🛠️ Reward Shaping：给稀疏 reward\u0026quot;加料\u0026quot; Reward shaping 是在原 reward 上加潜在的稠密引导，又不改变最优策略：\n$$R'(s, a, s') = R(s, a, s') + \\gamma \\Phi(s') - \\Phi(s)$$其中 $\\Phi(\\cdot)$ 是势函数（potential function）。根据势函数塑造定理，这种形式的 shaping 不改变最优策略（只改变中间奖励的分布），是理论上安全的引导方式。\n常见的驾驶势函数：\n到目标距离的负值：越近势越高，引导前进 到最近障碍距离：越远势越高，引导避让 车道中心偏差：越居中势越高 ⚠️ shaping 是把双刃剑：势函数设计不当，反而会引导策略走偏（如为了贴车道中心而急刹）。务必用基于距离差的势函数，保证 telescoping sum 抵消。\n🎭 多目标权衡：权重的艺术 驾驶 reward 本质是多目标优化，四个组件的权重 $w$ 怎么定是个永恒的难题：\n策略 做法 优缺点 固定权重 人工拍一组 $w$ 简单但难调，易偏向某一维 动态权重 训练中调整（如 prioritized） 灵活但复杂 约束化 把安全当硬约束，优化其他 更安全但需约束 RL 算法 学习型权重 从偏好数据学（RLHF） 贴近真实偏好但需数据 经验法则：安全权重要大到压倒一切，舒适与合规次之，效率作为\u0026quot;促动项\u0026quot;。但具体数值高度依赖场景与归一化方式，通常需要大量消融实验。\n安全当硬约束：约束化 RL 的思路 把安全项写成\u0026quot;大额负奖励\u0026quot;其实是一种软约束——模型仍可能为了高效率奖励而\u0026quot;冒险\u0026quot;碰撞。更彻底的做法是约束化强化学习（Constrained RL）：把安全约束从 reward 里拿出来，变成显式约束：\n$$\\max_\\pi \\mathbb{E}[R_{\\text{task}}] \\quad \\text{s.t.} \\quad \\mathbb{E}[C_{\\text{collision}}] \\leq d$$即在保证期望碰撞代价低于阈值 $d$ 的前提下，最大化任务回报。常用算法如 CPO、PPO-Lagrangian 通过拉格朗日乘子自适应调节约束强度。这种思路把\u0026quot;绝对不能撞\u0026quot;提升为不可违背的硬性条件，比单纯加大负奖励更可靠，也更符合安全认证的要求。\n归一化与量纲统一 reward 的多个分量往往量纲差异巨大——碰撞惩罚是 $-10$，而每步 jerk 惩罚可能是 $-0.001$。若不加处理，大项会压倒小项，策略只学\u0026quot;别撞\u0026quot;而忽略舒适。因此归一化是 reward 工程的必修课：\n按项归一化：每项 reward 除以自身的历史滑动标准差，让各分量尺度可比 running mean/std：用统计量的滑动估计实时缩放，避免训练后期 reward 尺度漂移 clip：对极端 reward 值截断，防止单个异常样本主导梯度 归一化技巧 解决的问题 按项归一化 量纲不可比 滑动统计 训练中尺度漂移 reward clip 极端样本主导梯度 组内归一化（GRPO） 场景间难度不可比 这些工程细节看似琐碎，却往往是\u0026quot;reward 调了半天不收敛\u0026quot;的真正症结所在。\n🪤 常见陷阱：Reward Hacking 与退化 reward 设计不当会导致策略钻空子，常见陷阱：\n陷阱 表现 根因 消极策略 原地不动或龟速 安全惩罚太大、效率项缺失 reward hacking 找到漏洞刷分（如贴墙卡 bug） reward 与真实目标不对齐 抖动策略 来回微调蹭 comfort 分 舒适项设计粗糙 撞墙学习 频繁碰撞仍学不会 碰撞信号太稀疏 偏好单一模态 永远只变道/只直行 权重偏置导致多模态坍缩 一个经典笑话（也是真实教训）：给\u0026quot;到达终点\u0026quot;大正奖励、给\u0026quot;碰撞\u0026quot;小负奖励，结果策略学会撞过去到达终点，因为净收益还是正的。权重的相对大小比绝对大小更重要。\n📊 从 Benchmark 指标反哺 Reward 好的 reward 设计应该对齐评测指标。当前主流驾驶 benchmark 的核心指标：\nBenchmark 核心指标 构成 NAVSIM PDMS 碰撞率、可驾驶区合规、舒适度、方向正确等加权 nuPlan 闭环分数 碰撞、舒适、进度、合规多子项 nuScenes NDS / mAP 检测精度为主（规划用 L2 / 碰撞率） 设计 reward 时，直接把 PDMS 的子项当作 reward 组件是一种聪明的做法——这样\u0026quot;训练目标\u0026quot;和\u0026quot;评测目标\u0026quot;一致，避免训出来的好策略在评测里翻车。这也是 AlphaDrive 等工作用\u0026quot;可验证规划指标\u0026quot;做 reward 的逻辑。\n🧬 Reward 的三大范式 reward 的来源正在经历范式迁移：\n范式 reward 来源 代表 人工设计（hand-crafted） 工程师写代价函数 传统规划、早期驾驶 RL 学习型（learned） 从偏好数据训练 reward 模型 Gen-Drive（VLM 辅助偏好） 可验证（verifiable） 任务有客观对错 AlphaDrive（规划指标）、DeepSeek-R1 式 范式 优点 缺点 人工设计 可解释、可调 粗糙、难覆盖复杂偏好 学习型 细腻、贴近真实偏好 需数据、reward 模型可能被 hack 可验证 客观、无歧义 仅适用于有标准答案的任务 趋势：从人工设计 → 学习型/可验证。Gen-Drive 的实验证明，学习型 reward 比人工 reward 效果更好——这是 reward 设计的未来方向。\n🔗 Reward 与 RL 算法的配合 不同 RL 算法对 reward 的\u0026quot;偏好\u0026quot;不同：\n算法 reward 适用性 备注 PPO 稠密 reward 依赖 critic，稀疏信号难训 GRPO 稀疏 + 可验证 reward 组内相对，无需 critic，适合驾驶 SAC/TD3 连续控制 + 稠密 reward 经典控制类 RL RLHF（DPO 等） 偏好 reward 离线偏好数据 GRPO 在驾驶里的流行，正是因为它对稀疏 reward 更友好（组内比较放大了细微差异），又省 critic——这与驾驶 reward 难定义、难训练的现实高度契合。\n⚠️ Reward 设计的核心原则 总结几条驾驶 reward 设计的硬核原则：\n安全是硬约束：碰撞惩罚要大到压倒一切，最好结合约束 RL 或下游安全校验 必须有促动项：没有效率/进度 reward，策略会退化成\u0026quot;不动\u0026quot; 稠密为主、稀疏兜底：每步引导 + episode 终止信号 对齐评测指标：reward 与 benchmark 一致，避免训评脱节 警惕 reward hacking：设计后要做对抗性测试，堵漏洞 能用学习型就别纯人工：偏好数据蒸馏的 reward 更细腻 归一化与缩放：不同量纲的 reward 项必须归一化，否则大项压倒小项 📝 个人思考 做驾驶 reward 设计越久，越能体会到一句话：\u0026ldquo;reward 设计不是工程问题，是哲学问题\u0026rdquo;。它逼着你回答\u0026quot;什么是好的驾驶\u0026quot;——这其实没有标准答案。安全是底线，但安全到什么程度？绝对安全等于不动，可车是用来开的。舒适和效率怎么权衡？老司机和老乘客的看法未必一致。这些权衡本质上是价值观的编码，把人类对驾驶的隐式偏好，翻译成一个标量函数。我认为这才是 reward 设计最难的地方——不是技术难，是定义难。\n第二点感悟是 reward 正在从\u0026quot;工程师拍脑袋\u0026quot;走向\u0026quot;数据驱动学习\u0026quot;。Gen-Drive 用 VLM 辅助采集偏好、AlphaDrive 用可验证指标做 reward，都是把 reward 的定义权从工程师手里交还给\u0026quot;真实的好驾驶\u0026quot;。这个趋势和语言模型的 RLHF 一脉相承——当我们说不清\u0026quot;什么好\u0026quot;时，就让数据/偏好来告诉我们。我倾向于认为，未来驾驶 reward 的主流形态会是 \u0026ldquo;可验证安全约束 + 学习型偏好 reward\u0026rdquo; 的混合：前者保证不撞，后者贴合人味。而 GRPO 这类省 critic、对稀疏信号友好的算法，恰好是承载这种混合 reward 的理想载体。\n最后，reward 设计给我最大的启示是 \u0026ldquo;目标对齐比能力提升更重要\u0026rdquo;。一个强大的策略如果优化错了目标，比一个弱但方向对的策略危险得多——它会用极高的效率做错的事。这在自动驾驶这种安全攸关领域尤其致命。所以我始终主张：与其一味追求更强的 RL 算法，不如先把 reward 想清楚、对齐到位。reward 是策略的\u0026quot;北极星\u0026quot;，北极星指错了，跑得越快偏得越远。好的 reward 设计，是驾驶 RL 最被低估的核心竞争力。\n📖 这是知识点拆解系列的第 11 篇。Reward 设计是驾驶 RL 的灵魂，你在实践中踩过哪些 reward 的坑？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6%E4%B8%ADreward%E8%AE%BE%E8%AE%A1%E8%AF%A6%E8%A7%A3/","summary":"Reward 函数决定了驾驶强化学习的性能天花板，必须在安全、舒适、合规、效率之间艰难权衡。本文系统拆解 reward 设计的四大组件（安全、舒适、合规、效率）、三大范式与常见陷阱。同时梳理了 NAVSIM、nuPlan 等评测指标如何反哺 reward 设计，为驾驶 RL 提供实操指南。","title":"知识点拆解｜自动驾驶强化学习中的 Reward 函数设计详解"},{"content":"📌 概述 视觉基础模型（Visual Foundation Models）是指在大规模通用数据上预训练、可迁移至多种下游任务的视觉模型。这类模型的核心价值在于：它们学习了通用的视觉表示，即使没有目标域的标注数据，也能通过零样本或少样本方式完成特定任务。从 DINOv2 的自监督特征到 SAM 的可提示分割，从 Depth Anything 的单目深度估计到 CLIP 的视觉-语言对齐，这些模型正在以三种角色渗透进自动驾驶系统：冻结的特征提取器、知识蒸馏的教师模型、伪标签生成器。\n在 VADv2、World4Drive、EMMA 等最新工作中，视觉基础模型已成为 PON（point-of-no-return）级别的架构组件。理解它们的能力边界与使用方式，是设计下一代自动驾驶感知系统的前提。\n🎯 核心概念 视觉基础模型的三种使用范式 使用方式 含义 优点 缺点 示例 Frozen Backbone 冻结权重，只提取特征 训练成本低，泛化性强 无法适应驾驶域分布偏移 DINOv2 + 轻量 head Teacher for Distillation 教师模型生成软标签 将大模型能力迁移至小模型 需要额外训练阶段 Depth Anything → 轻量深度网络 Pseudo-Labeler 在目标域生成伪标签 无需人工标注，可扩展 存在噪声，需要筛选策略 SAM 生成语义分割伪标签 为什么自动驾驶需要基础模型 自动驾驶数据集（如 nuScenes、Waymo）虽然规模可观（百万级标注帧），但与互联网级数据（数十亿图文对）相比仍然很小。视觉基础模型在通用数据上学习到的鲁棒特征、几何先验和语义知识，可以有效弥补驾驶数据的不足，尤其在长尾场景（极端天气、罕见障碍物、未知道路结构）中表现突出。\n🔧 技术详解 DINOv2：自监督视觉特征 DINOv2 是 Meta 推出的自监督视觉模型，它承袭了 DINO（ICCV 2021）的知识蒸馏框架，但做了三项关键改进：\n数据规模提升：构建了 LVD-142M 数据集（1.42 亿图像），经过精心去重和筛选，包含 ImageNet-22k、Instagram 数据等多个来源。 训练稳定性改进：使用 KoLeo 正则化（均匀化 patch token 的特征分布）和 iBOT（masked image modeling）联合训练，避免模型坍塌。 特征蒸馏：使用 ViT-g（1.1B 参数）作为教师，蒸馏出 ViT-S/B/L 等小模型，使小模型获得大模型的高级语义特征。 核心思想是通过自蒸馏让模型在同一图像的不同增强视图间保持特征一致。训练时，一个\u0026quot;学生\u0026quot;网络从局部裁剪视图学习，一个\u0026quot;教师\u0026quot;网络从全局视图生成目标——两者共享架构但教师参数通过 EMA 更新。\nDINOv2 的关键特性：\nPatch-level 特征对应：DINOv2 的 patch token 包含丰富的空间对应信息。即使在不同图像中，同一语义区域的 patch 特征相似度很高，可用于建立跨帧/跨视角的像素级对应。 语义分割无需微调：仅使用 DINOv2 的 patch 特征 + k-NN 分类器即可在语义分割上超过许多监督方法。 显式的视觉缩放定律：ViT-S（21M）→ ViT-B（86M）→ ViT-L（300M）→ ViT-g（1.1B），性能单调提升。 在自动驾驶中，DINOv2 常用于建立时序对应关系（如 NIFF 中的 flow 预测）。\nSAM/SAM2：可提示分割 SAM（Segment Anything Model）引入了一种新的交互范式：根据任意提示（点、框、掩码、文本）输出分割结果。其架构包含三个部分：\nImage Encoder：MAE 预训练的 ViT-H，提取图像特征。 Prompt Encoder：将点/框/文本编码为条件向量。 Mask Decoder：轻量 Transformer，从图像特征 + 条件向量生成分割掩码。 SAM2 进一步扩展至视频域，引入了记忆机制和遮挡推理，支持在视频序列中持续跟踪目标掩码。\n在自动驾驶中的应用：\nWorld4Drive：使用 SAM 自动生成道路、车辆、行人的语义分割伪标签，无需人工标注即可训练感知模型。 车道线/可行驶区域提取：通过点提示驱动 SAM，在自动驾驶数据上分割道路要素。 数据标注加速：SAM + 人工修正的工作流可将标注成本降低 90%。 Depth Anything / Metric3D：单目深度估计 Depth Anything 是基于 DINOv2 的 monocular depth estimation 模型。其核心思路：\n大规模弱监督训练：使用 62M 张无标注图像，利用相对深度估计（MiDaS）生成伪标签用于训练。 强数据增强：通过 CutMix、颜色扰动等策略提升泛化性。 Metric3D：从 Depth Anything 进一步扩展，提出 metric scale 的深度估计，输出真实世界的米制深度。 在自动驾驶中的应用：\nVADv2：使用 Depth Anything 预测的深度图作为条件，生成 BEV 特征。 World4Drive：将深度估计作为 world model 训练中场景重建的几何约束。 Occupancy 预测：深度图可转换为 3D 占据网格，替代 LiDAR 提供的几何信息。 CLIP / SigLIP：视觉-语言对齐 CLIP（Contrastive Language-Image Pre-training）由 OpenAI 于 2021 年提出，通过对比学习让视觉和文本编码器共享语义空间。训练时，从 4 亿图文对中随机采样 batch，最大化配对的图文相似度，同时最小化非配对的相似度。SigLIP 是 Google 的改进版本，使用 sigmoid loss 替代 softmax-based 对比损失，在更小的 batch size 下取得更好效果，且训练更稳定。\nCLIP 的视觉编码器通常是 ViT 架构（ViT-B/32, ViT-L/14 等），文本编码器是 Transformer。两者的输出经过 L2 归一化后计算余弦相似度。ViT-L/14 在 336px 输入分辨率下达到最高性能，这也是 DriveVLM 选用该配置的原因。\n关键特性：\n零样本分类：在 ImageNet 上达到 76% top-1 准确率，无需任何训练数据。 语义对齐特征：图像和文本被映射到同一语义空间，可直接计算相似度。 细粒度理解：不仅知道\u0026quot;有辆车\u0026quot;，还能理解\u0026quot;一辆红色的 SUV 停在路边的树旁\u0026quot;。 鲁棒性：CLIP 在分布偏移场景下（如素描、卡通）的准确率下降远小于标准 ImageNet 模型，这对自动驾驶中的域泛化有重要意义。 在自动驾驶中的应用：\nEMMA（Waymo）：使用 SigLIP ViT-L 作为视觉编码器，输出直接送入 LLM。SigLIP 的视觉-语言对齐特性使得 LLM 能够理解视觉场景中的语义关系。 DriveVLM：使用 CLIP ViT-L/14 作为视觉 backbone，结合链式思维推理进行场景理解。 DriveLM：使用 CLIP 特征构建视觉问答数据集，训练驾驶场景的视觉-语言理解。 📊 方法对比 基础模型能力矩阵 模型 预训练数据 核心能力 输出形式 自动驾驶典型用途 DINOv2 142M 图像（LVD-142M） 自监督特征 + 对应 patch 特征向量 时序对应、backbone SAM/SAM2 11M 图像（SA-1B） 可提示分割 分割掩码 伪标签、数据标注 Depth Anything 62M 图像 单目深度估计 深度图 几何重建、BEV 条件 CLIP/SigLIP 400M/3.6B 图文对 视觉-语言对齐 图文共同嵌入 VLA backbone 使用范式对比 冻结 backbone 是最轻量的使用方式——只需在基模型特征上接一个轻量 head 进行微调。例如在 DINOv2 的 patch 特征上加一个 2-3 层 MLP 即可完成语义分割任务，总参数量仅为 backbone 的 1-2%。教师蒸馏可以将大模型能力注入小模型，适合车载部署——比如用 Depth Anything 的深度预测作为教师，训练一个 MobileNet 大小的深度估计网络，在 Orin 上达到 30+ FPS。伪标签生成则适用于无标注场景，但需要精心设计筛选策略（如基于置信度阈值、时空一致性检查）以避免噪声传播。\n视觉基础模型在数据瓶颈中的作用 自动驾驶标注的高成本一直是扩展瓶颈——标注一帧 3D 检测框约需 1 分钟（专业标注员），一个城市的全量标注成本可达千万元级别。视觉基础模型通过以下方式缓解这一问题：\n自动标签生成：SAM 分割 + 跟踪自动关联，生成像素级语义标注。 弱监督/半监督训练：Depth Anything 使用大规模无标注数据进行弱监督预训练，降低对标注深度图的依赖。 域自适应：在仿真数据上训练，使用基础模型特征在真实数据上进行域对齐（domain alignment），减少对真实标注的依赖。这在传感器配置变化（如换用不同型号的相机）时特别有用——基础模型提供的通用特征可作为域不变的表征空间。 🔗 与自动驾驶的关联 视觉基础模型正在重新定义 AD 感知的\u0026quot;起点\u0026quot; 在 CLIP 和 DINOv2 出现之前，自动驾驶感知的起点通常是 ImageNet 预训练的 ResNet 或 ViT——它们对驾驶场景的适应需要通过大规模标注数据的微调来实现。而 CLIP 和 DINOv2 已经具备了语义理解和通用特征表示能力，模型只需要\u0026quot;适配\u0026quot;而非从零\u0026quot;学习\u0026quot;。\n多模型协作与融合范式成为新趋势 当前 VLA 和世界模型论文中，单个视觉编码器往往不够用。典型组合：\nDINOv2（特征对应）+ Depth Anything（几何结构）+ CLIP（语义理解）：三种基础模型各司其职，特征在 LLM 层面融合。 SAM（分割伪标签）+ 感知模型（检测训练）：SAM 提供标注，学生模型学习并用于推理。 CLIP（语义） + SAM（几何边界）：前者提供\u0026quot;这是什么\u0026quot;的语义理解，后者提供\u0026quot;边界在哪里\u0026quot;的精确定位，两者结合可以实现高质量的开放词汇语义分割。 Depth Anything + DINOv2：Depth Anything 提供每个像素的绝对深度值，DINOv2 提供跨帧的密集对应关系，两者结合可以构建精确的时空 3D 点云，作为视觉 odometry 或 SLAM 的输入。 模型蒸馏与边缘部署 车载计算平台的算力远小于云端（Orin 约 275 TOPS，而 A100 约 312 TFLOPS FP16），视觉基础模型通常不能直接在车端部署。因此模型蒸馏（model distillation）成为关键——将大模型的知识迁移到小模型：\n特征蒸馏：小模型的特征与大模型的特征对齐（如 L2 损失或对比损失），让轻量网络学习到基础模型的表示能力。 输出蒸馏：大模型的预测结果（分割图、深度图）作为小模型的训练目标。 关系蒸馏：大模型中样本之间的关系（相似度矩阵）作为结构化的监督信号。 Depth Anything 本身就是一个蒸馏的成功案例——它在 MiDaS 教师模型的基础上，使用大规模无标注数据进行自蒸馏，最终得到的模型权重仅 24M（ViT-S），在移动端可以达到 30+ FPS。\n基础模型的持续学习与适配 驾驶场景分布随时间变化（新城市、新季节、新传感器配置），基础模型需要具备持续学习能力。当前的主流策略是 LoRA（Low-Rank Adaptation）微调：在冻结 backbone 的基础上，插入少量可训练的低秩矩阵（参数量仅为 backbone 的 0.1%-1%），在目标域数据上快速适配。LoRA 的优势在于：多个任务的 adapter 可以共享同一个 backbone，部署时只需切换 adapter 权重即可实现多场景覆盖。\n挑战：基础模型的域偏移 视觉基础模型在互联网数据上训练，与自动驾驶的分布存在显著差异（视角不同、对安全关键场景的响应未知）。例如 CLIP 在\u0026quot;翻倒的车辆\u0026quot;这类罕见路况上的表现明显下降，因为预训练数据中此类样本极少。如何评估和缓解域偏移是实际部署中的关键问题。\n域偏移的具体表现包括：CLIP 在驾驶场景的夜间图像上分类准确率下降约 15-20%，SAM 在雨天场景中分割边界质量下降。缓解域偏移的主流策略包括：\n域微调（Domain Fine-tuning）：在驾驶数据集上对基础模型做轻量微调（如 LoRA），保持通用能力同时适应驾驶域。 特征适配（Feature Adaptation）：训练一个轻量 adapter 来校正基础模型的特征分布，而非微调整个 backbone。 集成策略（Ensemble）：同时使用多个基础模型（如 DINOv2 + CLIP），在语义空间融合特征，利用多样性弥补单个模型的域偏移。 分布外检测（OOD Detection）：训练一个轻量级的域分类器，检测当前输入是否来自训练分布之外，若是则降级到安全兜底策略（如减速、靠边停车）。 基础模型选型原则 在自动驾驶系统中选择视觉基础模型时，需要权衡以下因素：\n推理速度 vs 精度：车载芯片的算力有限，ViT-g 等超大模型只能用于离线处理。对于在线推理，通常选择 ViT-B 级别的模型（如 CLIP ViT-B/16）配合 token 压缩策略。 语义 vs 几何：CLIP 擅长语义理解但几何精度差；DINOv2 在两者间取得平衡；Depth Anything 专精于几何。根据任务需求选择合适的模型或组合。 域泛化性：在跨场景（晴天→雨天、日间→夜间）迁移时，DINOv2 的域泛化性优于 CLIP，因为 DINOv2 的自监督训练不依赖图文对中的语义标注偏差。 未来展望：端到端训练中的基础模型 随着 VLA 模型的发展，视觉基础模型正在从\u0026quot;预训练后冻结\u0026quot;向\u0026quot;端到端可训练\u0026quot;转变。在 EMMA 等工作中，SigLIP 视觉编码器与 LLM 一同训练，使视觉特征能够适应驾驶决策任务。这一趋势对基础模型提出了新要求：不仅需要通用能力，还需要良好的可微调性和与 LLM 的兼容性。\n同时，视觉基础模型的评估体系也需要更新——不能仅用分类或检测指标来衡量，传统的 ImageNet top-1 准确率或 COCO AP 不再足以衡量其在自动驾驶中的价值。VOC（Visual Odometry Correspondence）指标、驾驶场景下的零样本迁移能力和安全关键场景的鲁棒性等，正在成为更重要的评估维度。\n📚 延伸阅读 Caron et al., \u0026ldquo;Emerging Properties in Self-Supervised Vision Transformers\u0026rdquo;, ICCV 2021.（DINOv1，DINOv2 的前身） Oquab et al., \u0026ldquo;DINOv2: Learning Robust Visual Features without Supervision\u0026rdquo;, TMLR 2024. Kirillov et al., \u0026ldquo;Segment Anything\u0026rdquo;, ICCV 2023. Ravi et al., \u0026ldquo;SAM 2: Segment Anything in Images and Videos\u0026rdquo;, 2024. Yang et al., \u0026ldquo;Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data\u0026rdquo;, CVPR 2024. Wei et al., \u0026ldquo;Metric3D: Towards Zero-shot Metric 3D Prediction from a Single Image\u0026rdquo;, ICCV 2023. Radford et al., \u0026ldquo;Learning Transferable Visual Models From Natural Language Supervision\u0026rdquo;, ICML 2021. Zhai et al., \u0026ldquo;Sigmoid Loss for Language Image Pre-Training\u0026rdquo;, ICCV 2023. Weng et al., \u0026ldquo;EMMA: End-to-End Multimodal Model for Autonomous Driving\u0026rdquo;, 2025. Li et al., \u0026ldquo;DriveLM: Driving with Graph Visual Question Answering\u0026rdquo;, ECCV 2024. He et al., \u0026ldquo;Masked Autoencoders Are Scalable Vision Learners\u0026rdquo;, CVPR 2022.（MAE 是许多 ViT-based 基础模型的骨干预训练方法） Hu et al., \u0026ldquo;World4Drive: Learning Real-world Autonomous Driving from World Model\u0026rdquo;, 2024. ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E8%A7%86%E8%A7%89%E5%9F%BA%E7%A1%80%E6%A8%A1%E5%9E%8B%E5%9C%A8%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8/","summary":"DINOv2、SAM、Depth Anything、CLIP 等视觉基础模型正在深刻重塑自动驾驶的技术栈。本文详解它们各自的核心能力——自监督特征、可提示分割、单目深度估计、视觉-语言对齐——并分析在 VLA 和世界模型论文中作为冻结主干、教师模型和伪标签生成器的三种主要使用范式。","title":"知识精讲｜视觉基础模型在自动驾驶中的应用"},{"content":"📄 论文信息 标题：PaLM-E: An Embodied Multimodal Language Model（PaLM-E：具身多模态语言模型） 团队：Google Robotics at Google + 柏林工业大学（Danny Driess, Fei Xia, Corey Lynch, Sergey Levine, Karol Hausman, Pete Florence 等22位作者） 发表：ICML 2023（arXiv 2023.03） 关键词：多模态大语言模型、具身智能、视觉语言模型、机器人规划、跨模态迁移 一句话总结：PaLM-E将大语言模型直接与连续传感器输入结合，构建了一个能同时处理机器人规划、视觉问答、图像描述等多种任务的通用具身多模态模型，最大规模达562B参数。 论文链接：arXiv:2303.03378 代码链接：palm-e（非官方实现） 🤔 要解决什么问题？ 语言模型的\u0026quot;具身接地\u0026quot;挑战 大型语言模型（LLM）在文本理解和生成方面展现了惊人的能力，但在将其应用于机器人等物理世界任务时，面临一个核心挑战：接地（Grounding）问题。\n这个问题的本质在于：LLM的知识是通过文本获得的，它\u0026quot;知道\u0026quot;如何清洁溢出的饮料，但这种知识是抽象的、脱离物理现实的。当一个机器人需要在真实环境中执行这个任务时，它面临多重挑战：\n理解当前环境状态：哪些物体在哪里？它们的物理属性是什么？颜色、形状、材质如何？ 感知连续传感器数据：机器人配备的是图像、深度图、关节角度、力传感器等连续信号，而非文本描述 将抽象知识与具体感知关联：LLM说\u0026quot;拿起海绵\u0026quot;，但机器人需要\u0026quot;看到\u0026quot;海绵在哪里、判断能否抓取、规划运动轨迹 处理物理世界的不确定性：物体可能滑动、传感器可能有噪声、环境可能动态变化 传统方法（如SayCan）通过将LLM的输出与低级技能库结合来解决这个问题。在SayCan框架中，LLM负责理解指令并选择合适的技能，而affordance函数负责评估技能的可行性。但这种方式存在明显局限：\n需要预先定义技能库：技能库的覆盖范围决定了系统能力的上限 LLM只能输出文本：它无法直接感知环境，需要额外的\u0026quot;翻译层\u0026quot;将文本映射到动作 信息传递有损失：从文本到动作的多次转换会引入信息损失 缺乏端到端优化：各模块独立训练，无法联合优化 此前的视觉语言模型（VLM）如CLIP、Flamingo等虽然能处理图像和文本，但它们主要针对互联网上的静态图像设计，缺乏对机器人操作场景的理解。这些模型\u0026quot;看到\u0026quot;的是高质量的互联网图片，而非机器人视角的实时传感器数据。\nPaLM-E的核心问题 能否让大语言模型直接\u0026quot;看到\u0026quot;和\u0026quot;感受\u0026quot;物理世界，从而构建一个真正意义上的具身智能体？\n具体来说：\n能否将连续传感器数据（图像、状态估计等）直接输入LLM？ 训练这样一个模型是否会导致灾难性遗忘（catastrophic forgetting）？ 多任务、多模态、多机器人的联合训练是否能带来正向迁移？ 💡 核心方法 核心思想：将连续感知注入语言嵌入空间 PaLM-E的核心架构思想非常优雅：将连续的具身观测（图像、状态估计等）编码为与语言token相同维度的向量，然后将这些\u0026quot;具身token\u0026quot;与文本token交错排列，形成\u0026quot;多模态句子\u0026quot;（multimodal sentences）作为LLM的输入。\n模型架构 1. 整体架构 PaLM-E是一个decoder-only的自回归语言模型，基于预训练的PaLM构建。其输入是文本和连续观测的交错序列：\n$$\\text{Input} = [\\text{text}_1, \\text{text}_2, ..., \\text{obs}_1, \\text{obs}_2, ..., \\text{text}_3, ...]$$其中 $\\text{obs}_i$ 可以是图像、机器人状态、或神经场景表示等任意模态的连续输入。模型的输出是文本序列，可以是对问题的回答、图像描述、或机器人动作序列。\n2. 多模态编码器 PaLM-E支持三种主要的连续输入表示方式：\n（a）视觉输入（ViT编码器）\n使用预训练的Vision Transformer（ViT）将图像编码为一系列视觉token：\n$$\\text{visual\\_tokens} = \\text{ViT}(I) \\in \\mathbb{R}^{N_v \\times d}$$其中 $N_v$ 是视觉token数量，$d$ 是嵌入维度（与PaLM的token嵌入维度匹配）。\n（b）状态估计输入\n对于机器人关节状态等低维连续信号，使用多层感知机（MLP）将其编码为token：\n$$\\text{state\\_token} = \\text{MLP}(s) \\in \\mathbb{R}^{1 \\times d}$$其中 $s \\in \\mathbb{R}^{d_s}$ 是机器人状态向量。\n（c）神经场景表示（OSRT）\nPaLM-E引入了一种创新的输入表示——神经场景表示。使用Object-Centric Neural Radiance Field（OSRT）将场景中的物体表示为3D神经场：\n$$\\text{scene\\_token} = \\text{OSRT}(\\mathcal{O}) \\in \\mathbb{R}^{N_o \\times d}$$其中 $\\mathcal{O}$ 是场景中的物体集合。这种表示的优势在于：\n提供3D空间信息，不受相机视角影响 支持物体级别的操作和推理 在小数据场景下特别有效 3. 多模态句子构造 将编码后的连续token与文本token交错排列，形成多模态句子：\n$$\\text{MM-Sentence} = [\\text{\u003c img\u003e}, t_1, t_2, ..., \\text{\u003c img\u003e}, t_3, t_4, ..., \\text{text}]$$其中 \u0026lt;img\u0026gt; 是特殊的多模态token标记，用于分隔不同的模态输入。论文还提出了**实体标注（entity-labeling）**技术，为每个模态输入添加语义标签（如\u0026quot;red star\u0026quot;、\u0026ldquo;green block\u0026rdquo;），增强模型对物体的理解。\n4. 训练策略 PaLM-E采用端到端微调策略，损失函数为标准的自回归语言建模损失：\n$$\\mathcal{L} = -\\sum_{i=1}^{T} \\log p_\\theta(x_i | x_{1:i-1})$$其中序列 $x$ 包含文本和连续观测的混合。训练使用多种数据集的混合：\n机器人任务数据（TAMP、Language-Table、SayCan） 通用视觉语言数据（WebLI、VQA、COCO等） 关键设计决策 冻结 vs. 微调 LLM 论文系统研究了冻结（freeze）vs. 微调（finetune）语言模型的影响：\n策略 优势 劣势 冻结LLM 完全保留语言能力 视觉-语言对齐受限 微调LLM 更好的多模态融合 可能发生灾难性遗忘 仅微调ViT 平衡点 需要更多数据 实验发现：随着模型规模增大，微调导致的灾难性遗忘显著减少。对于PaLM-E-562B，仅3.9%的语言能力下降（而PaLM-E-12B下降了87.3%）。\n数据混合与正向迁移 PaLM-E的核心发现之一是正向迁移（positive transfer）：在多种任务和数据集上联合训练，每个任务的性能反而比单独训练更高。\n例如，在TAMP（Task and Motion Planning）环境中：\n仅用TAMP数据训练：60%成功率 用完整数据混合训练：95%成功率 这种正向迁移来自：\n视觉语言数据提供了丰富的视觉和语义理解 多机器人数据提供了更泛化的操作技能 语言数据帮助模型更好地理解指令 🧪 实验验证 实验设计 PaLM-E在三大类任务上进行了评估：\n具身推理任务：机器人规划、操作 视觉语言任务：VQA、图像描述 语言任务：自然语言理解与生成 核心实验结果 1. 机器人规划任务（TAMP） 在TAMP环境中，给定自然语言指令和场景图像，模型需要输出多步操作计划：\n模型 成功率 PaLM-E-12B（冻结） 42.9% PaLM-E-12B（微调，单机器人） 48.6% PaLM-E-12B（微调，完整混合） 94.9% 正向迁移的效果极其显著：完整数据混合训练将成功率从48.6%提升到94.9%。\n2. Language-Table任务 在桌面操作环境中，模型需要根据语言指令规划积木操作：\nPaLM-E在32-shot数据下就能达到85%+的成功率 冻结LLM的策略也能取得不错的结果（74.3%） 完整数据混合训练显著提升性能 3. SayCan affordance任务 在真实厨房环境中，PaLM-E需要为SayCan框架提供affordance评分：\nPaLM-E显著优于专用affordance模型 视觉语言预训练提供了更好的环境理解 4. 视觉语言基准 PaLM-E在通用VQA任务上同样表现出色：\n任务 PaLM-E-562B 最优参考 OK-VQA 66.1%（32-shot） 64.7% VQAv2 51.1%（冻结LLM） 51.0% VizWiz 55.4%（冻结LLM） 55.7% PaLM-E-562B在OK-VQA上达到了当时的SOTA，证明了具身训练不会损害通用视觉语言能力。\n5. 语言能力保留 论文系统评估了PaLM-E在21个语言基准上的表现，发现：\nPaLM-E-8B：87.3%的语言能力下降（灾难性遗忘严重） PaLM-E-12B：61.6%下降 PaLM-E-62B：31.8%下降 PaLM-E-562B：仅3.9%下降 这表明模型规模越大，微调导致的灾难性遗忘越少，为\u0026quot;冻结LLM vs. 微调LLM\u0026quot;的争论提供了重要参考。\n6. 涌现能力 PaLM-E-562B展示了多种涌现能力：\n零样本多模态链式思维（CoT）推理：无需示例即可进行复杂推理 视觉条件化笑话生成：根据图像生成幽默内容 跨模态问答：理解图像并回答相关问题 🔍 个人思考 亮点 架构设计的优雅性：PaLM-E将连续感知直接注入语言token空间，这种方法既简单又强大。不需要复杂的\u0026quot;翻译层\u0026quot;，模型自然地学会了将视觉信息与语言理解关联。\n正向迁移的发现：这是本文最重要的贡献之一。联合训练多种任务（机器人+VQA+描述）不仅没有互相干扰，反而产生了显著的性能提升。这为\u0026quot;数据越多越好\u0026quot;的假设提供了实证支持。\n模型规模与遗忘的关系：论文系统研究了模型规模与灾难性遗忘的关系，发现562B模型几乎不受影响。这一发现对后续的多模态大模型训练具有重要指导意义。\n神经场景表示的引入：OSRT作为输入表示是一个创新点，它提供了3D空间信息，在小数据场景下特别有效。这为机器人感知提供了新的范式。\n多模态涌现能力：PaLM-E-562B展示了零样本CoT推理等涌现能力，表明具身训练不仅不会损害通用能力，反而可能增强某些能力。\n局限性 计算成本极高：PaLM-E-562B需要巨大的计算资源进行训练和推理，这限制了其在实际机器人系统中的部署。即使是12B版本也需要相当的计算能力。\n闭环控制的缺失：PaLM-E主要作为一个规划器（planner），输出的是自然语言动作序列而非直接的低级控制命令。它需要与RT-1等低级策略集成才能完成完整的闭环控制。\n推理延迟：大模型的推理延迟较高，对于需要快速反应的机器人任务来说是个挑战。论文中3Hz的控制频率对于精细操作可能不够。\n数据需求：虽然论文展示了正向迁移，但PaLM-E的训练仍然需要大量多样化的数据。对于资源有限的团队来说，复现这一工作极具挑战性。\n对预训练模型的依赖：PaLM-E完全基于预训练的PaLM，如果基础语言模型本身存在偏见或错误知识，这些也会被传递到具身任务中。\n未来方向 与RT-2的结合：PaLM-E的后续工作RT-2（Brohan et al., 2023）将VLM直接用于机器人控制，实现了端到端的视觉语言动作（VLA）模型。\n更高效的架构：探索如何在保持性能的同时减小模型规模，使其能够在机器人硬件上实时运行。\n实时闭环控制：将PaLM-E扩展为能够输出低级控制命令的闭环策略，而非仅作为高层规划器。\n多形态机器人：扩展到更多类型的机器人（如灵巧手、人形机器人），探索真正的跨形态迁移。\n在线学习：让PaLM-E能够在部署后从新经验中学习，持续改进其具身理解能力。\n📖 延伸阅读 RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control（Brohan et al., 2023）- PaLM-E思想的直接延续，将VLM用于机器人控制 PaLM: Scaling Language Modeling with Pathways（Chowdhery et al., 2022）- PaLM-E的基础语言模型 ViT: An Image is Worth 16x16 Words（Dosovitskiy et al., 2020）- PaLM-E使用的视觉编码器 Socratic Models: Composing Zero-Shot Multimodal Reasoning with Language（Zeng et al., 2022）- 相关的多模态推理方法 Inner Monologue: Embodied Reasoning through Planning with Language Models（Huang et al., 2022）- 基于PaLM-E的闭环规划扩展 Do As I Can, Not As I Say: Grounding Language in Robotic Affordances（Ahn et al., 2022）- SayCan工作，PaLM-E的前身思想 OSRT: Object-Centric Neural Scene Representations（Sajjadi et al., 2022）- PaLM-E使用的神经场景表示 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/palm-e%E5%85%B7%E8%BA%AB%E5%A4%9A%E6%A8%A1%E6%80%81%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E7%B2%BE%E8%AF%BB/","summary":"PaLM-E是Google与柏林工业大学联合提出的具身多模态语言模型，将PaLM大语言模型与视觉编码器结合，直接处理机器人传感器数据。该模型在562B参数规模下不仅在机器人任务上表现出色，还在OK-VQA等视觉语言基准上达到SOTA，同时保留了强大的语言能力。","title":"论文精读｜PaLM-E：具身多模态语言模型——让机器人理解真实世界"},{"content":"一句话理解NVIDIA DRIVE平台 NVIDIA DRIVE = 专为自动驾驶设计的异构计算平台，在一个SoC上集成了GPU(神经网络加速) + CPU(逻辑控制) + DLA(深度学习推理专用核) + PVA(传统视觉加速)\nOrin(254TOPS)：2022年量产，至今仍是L2+/L3的主流选择\nThor(2000TOPS)：2025年量产，面向L4/VLA模型的旗舰平台，算力是Orin的近8倍\nDRIVE的本质是把数据中心级别的AI算力\u0026quot;塞进\u0026quot;一个车规级功耗和散热约束的SoC里。这个\u0026quot;塞进去\u0026quot;的过程，涉及大量的硬件架构权衡和软件优化——不理解这些底层约束，就无法真正理解VLA模型在车端的部署边界。\n第一部分：硬件架构对比 Orin SoC架构 Orin (Tegra Orin/Drive AGX Orin) 是NVIDIA在2022年量产的第三代Drive平台。核心参数：\n制程：8nm (Samsung 8N) 晶体管数：约170亿 AI算力：254 TOPS (INT8，含稀疏化) 热设计功耗(TDP)：15-60W (取决于配置，车规级通常锁定在45-55W) GPU：Ampere架构，2048个CUDA核心，64个Tensor Core CPU：12核ARM Cortex-A78AE (Hercules) 专用加速器：1x DLA 2.0 (深度学习加速器) + 1x PVA (可编程视觉加速器) 显存：32GB LPDDR5，带宽204.8 GB/s 视频编码/解码：支持最多16路摄像头输入（通过内嵌的ISP及CSI接口） 异构计算单元详解：\nGPU (Ampere架构)：Orin的GPU部分采用Ampere架构，包含2个GPC(Graphics Processing Cluster)，每个GPC包含8个SM(Streaming Multiprocessor)。每个SM包含128个CUDA核心和4个Tensor Core。GPU负责：\n端到端神经网络的前向推理（特别是需要大算力的模型，如BEV编码器、多尺度特征融合） 可微渲染（如神经辐射场用于在线建图） 并行后处理（如NMS的GPU加速版本） DLA 2.0 (深度学习加速器)：DLA是一个固定功能的神经网络推理加速器，专门优化了卷积、全连接、激活函数等常见算子。与GPU相比，DLA的能效比（TOPS/W）高出3-5倍，但灵活性差——只能运行已编译到DLA支持算子集的网络。\nDLA 2.0的关键限制：\n仅支持INT8精度（不支持FP16/FP32） 支持标准卷积、深度可分离卷积、全连接，但不支持attention/transformer的完整算子集 输入/输出的feature map尺寸有上限（通常\u0026lt;4096×4096） PVA (可编程视觉加速器)：PVA专门加速传统计算机视觉算法，如图像金字塔构建、特征点提取、光流计算、直方图计算等。在深度学习之前的时代，PVA是自动驾驶视觉处理的主力。在VLA模型中，PVA的用途被大大压缩，但仍可用于：\n摄像头数据的预处理（去畸变、色彩校正、图像归一化） 光流计算（作为深度学习感知模型的补充或校验） 安全监控器的独立视觉验证通道 Thor SoC架构 Thor (DRIVE Thor) 是NVIDIA在2025年量产的旗舰平台，代表当前车规级计算平台的最高水准。\n制程：4nm (TSMC 4N) AI算力：2000 TOPS (INT8，含稀疏化) 热设计功耗(TDP)：50-130W (车规典型配置80-100W) GPU：Blackwell架构，包含大量CUDA核心和第五代Tensor Core CPU：ARMv9架构，核心数保密（业界推测24-32核） 专用加速器：2x DLA 2.5 (增强版深度学习加速器) 显存：64GB LPDDR5X，带宽约400 GB/s 视频处理：支持最多30+路摄像头输入 Orin vs Thor 关键差异：\n维度 Orin Thor 倍数 制程 8nm 4nm 2x密度 AI算力(INT8) 254 TOPS 2000 TOPS 7.9x GPU架构 Ampere Blackwell 代差 DLA数量 1 2 2x 内存带宽 204.8 GB/s ~400 GB/s 2x 功耗(典型) 45W 90W 2x 能效比 5.6 TOPS/W 22 TOPS/W 4x Thor的算力飞跃不仅仅来自制程升级。Blackwell架构的Tensor Core在稀疏化支持、矩阵乘法引擎效率、FP8/FP4精度的原生支持上都有大幅改进。对于VLA模型来说，Thor的2000 TOPS意味着可以部署参数量在7B-13B级别的大语言模型——这是Orin完全无法做到的。\n内存带宽：被低估的瓶颈 算力(TOPS)是大家最关注的指标，但内存带宽在实际情况中往往是真正的瓶颈。\nRoofline模型分析：\n对于一个深度学习层，其计算强度(Compute Intensity)定义为：\n$$ \\text{Compute Intensity} = \\frac{\\text{FLOPs}}{\\text{Memory Access (bytes)}} $$当算力强度超过硬件的\u0026quot;算力/带宽比\u0026quot;时，该层的性能受算力限制(Compute-bound)；否则受带宽限制(Memory-bound)。\nOrin的算力/带宽比：\nINT8算力：254 TOPS = 254 × 10^12 OPS 内存带宽：204.8 GB/s Arith. Intensity 平衡点：254 × 10^12 / 204.8 × 10^9 ≈ 1240 OPS/byte 这意味着：如果一层网络的算力强度低于1240 OPS/byte，它就会被带宽限制——GPU有大量算力闲置，因为没法及时从内存中拿到需要计算的数据。\n这对VLA模型意味着什么？\nVLA中大量算子（如LayerNorm、Softmax、attention score计算）的算力强度远低于1240。以attention layer为例：\n计算QK^T的点积：对于序列长度L=256和头维度d=64，计算量为L^2 × d = 4M次乘法 内存访问量：Q(256×64=16KB) + K(256×64=16KB) + 输出(256×256=256KB) = 约300KB 算力强度：4M/300K ≈ 13 OPS/byte 13远小于1240——attention在Orin上是典型的Memory-bound。即使GPU算力再翻倍，如果内存带宽不变，attention的计算时间几乎不会减少。\n实际影响：在Orin上部署VLA模型时，attention的延迟瓶颈不是计算核心，而是HBM带宽。一些优化策略（如Flash Attention、分块计算）的核心目标就是减少显存访问量，而不是减少计算量。\n第二部分：软件栈 DRIVE OS DRIVE OS是NVIDIA DRIVE平台的实时操作系统，基于QNX或Linux内核。它的核心职责包括：\n安全执行环境：提供ASIL D级别的运行时隔离。安全关键模块（如刹车控制）与AI推理模块运行在不同的分区，一个分区的故障不会影响其他分区。 硬件抽象层：统一管理GPU、DLA、PVA、CPU的调度和资源分配，对上层应用隐藏硬件细节。 实时调度：提供确定性的任务调度机制，保证感知-决策-控制pipeline的端到端延迟在可预期的范围内。 安全通信 (IPC)：不同进程之间的消息传递通过DRIVE OS的安全IPC机制，确保数据不被篡改和泄露。 DriveWorks中间件 DriveWorks是NVIDIA提供给DRIVE平台应用开发的SDK层，包含大量预构建的模块和工具。\n核心模块：\nNvMedia：多路摄像头硬同步驱动。支持最多16路摄像头的PTP精密时间同步，确保所有摄像头的曝光和捕获在同一时间戳对齐。整个pipeline的延迟基线由NvMedia保证。 NvSIP：传感器图像处理流水线，提供去畸变、颜色校正、自动曝光/白平衡等ISP功能的GPU/DLA加速版本。 DW Perception：预训练的感知模型库，包括目标检测、语义分割、可行驶区域检测、车位检测等。虽然VLA模型通常使用自研感知网络，但DW Perception提供了可快速集成的基准方案和DLA编译参考。 NvEKF：扩展卡尔曼滤波的硬件加速版本，用于融合IMU、GPS、轮速传感器的数据做车辆定位。VLA模型通常不直接使用NvEKF的输出，但可以利用其定位信息做attention的位置编码。 TensorRT on DRIVE TensorRT是NVIDIA的深度学习推理优化引擎。在DRIVE平台上使用TensorRT时，有一些特定的优化策略需要掌握。\nINT8量化与稀疏化：\n在DRIVE上，INT8推理是最主要的部署方式。FP16推理在Orin上虽然支持，但算力远低于INT8，实际使用有限。\nINT8量化的核心挑战是精度损失。主流方案：\n校准集量化 (Calibration-based Quantization)：使用训练集的一小部分数据(500-1000张图)作为校准集，统计每一层的激活值分布，然后选择最优的量化缩放因子。TensorRT支持三种校准算法：Entropy Calibration、MinMax Calibration、Percentile Calibration。实践中，Entropy Calibration在大多数场景下表现最优。\n量化感知训练 (QAT, Quantization-Aware Training)：在训练过程中模拟INT8量化的效果，让模型适应量化噪声。在DRIVE上部署要求严格精度控制的模型（如轨迹规划器的输出头）时，QAT是推荐的方案。QAT在训练时在fp32计算图中插入\u0026quot;伪量化节点\u0026quot;(FakeQuant)，这些节点在前向传播中模拟INT8的精度截断，反向传播时用STE(Straight-Through Estimator)近似梯度。\n稀疏化：利用NVIDIA GPU的Ampere/Blackwell架构对结构化稀疏(2:4稀疏模式)的原生支持。2:4稀疏意味着每4个权重中强制2个为零，理论上推理速度可以翻倍。在VLA中，attention的FFN层是结构化稀疏的良好候选。\nDLA Offloading：\nDLA是DRIVE平台上能效比最高的推理单元，但有较大的算子集限制。实际部署时，需要将VLA模型的算子进行分类：\n算子类别 示例 推荐执行单元 标准卷积+ReLU+BN ResNet的conv block DLA (高能效) 深度可分离卷积 MobileNet depthwise DLA 全连接 Transformer的MLP GPU 或 DLA(需fc支持) Attention(QK^T, Softmax, V加权) Self-Attention GPU (DLA不支持) LayerNorm/BatchNorm 归一化层 GPU (DLA不支持) 融合操作(Concat/Add) 跳跃连接 GPU或DLA(需支持) Multi-Stream调度：\nVLA模型的pipeline由多个模块串联而成：摄像头预处理 → BEV编码器 → VLM推理 → 规划头 → 后处理。每个模块的延迟和资源需求不同，需要精细的调度策略。\nTensorRT支持Multi-Stream推理——可以在同一个GPU上同时运行多个推理流，提高硬件利用率。在DRIVE上的实践：\nStream 0：高优先级流，运行实时性要求最高的模块（如BEV编码器），独占一部分GPU计算资源 Stream 1：运行VLM的大模型推理，使用较低的优先级，允许被Stream 0抢占 Stream 2：DLA推理流，在DLA上运行可offloading的模块，与GPU流水线并行 通过合理的Multi-Stream调度，Orin上VLA模型的GPU利用率可以从30-40%提升到70-80%，端到端pipeline延迟可降低20-30%。\n第三部分：VLA模型在DRIVE上的部署实践 Pipeline编排 一个典型的VLA模型pipeline在DRIVE上被编排为以下阶段：\nStage 1: 数据准备 (1-3ms)\n摄像头原始数据通过NvMedia硬同步采集 NvSIP执行去畸变、色彩校正、尺寸调整 数据从CPU内存传输到GPU显存 Stage 2: BEV编码器 (15-25ms on Orin, 8-12ms on Thor)\n使用基于Transformer/CNN的编码网络，将多目图像特征投影到BEV空间 在Orin上：推荐使用ResNet-50/+DLA offloading的方案，前1-2个stage在DLA上运行，后3个stage在GPU上运行 在Thor上：可以直接使用更大的backbone（如ResNet-101或ViT-B），利用充裕的算力 Stage 3: VLM推理 (30-80ms on Orin, 10-30ms on Thor)\n大模型推理是整个pipeline中延迟最高的模块 输入：BEV特征序列 + 驾驶指令token 输出：action token序列或轨迹参数 在Orin上：只能部署1B-3B参数级别的小模型，且需要做深度INT8量化 在Thor上：可达7B-13B参数级别，支持FP8精度，无需过度压缩 Stage 4: 规划头与后处理 (3-8ms)\n将VLM输出的action token解码为轨迹点 执行轨迹平滑（B样条/二次规划） 安全校验（与安全监控器交换校验结果） 延迟预算分配 L4自动驾驶的典型端到端延迟预算是100ms。在VLA模型中，各模块的延迟预算分配如下：\n模块 Orin目标延迟 Thor目标延迟 占比(Orin) 数据准备+预处理 3ms 3ms 3.6% BEV编码器 20ms 10ms 23.8% VLM推理 60ms 25ms 71.4% 规划头+后处理 5ms 5ms 6.0% 安全监控(并行) 10ms(独立) 10ms(独立) - 总计 88ms 43ms 100% 关键观察：VLM推理在Orin上消耗了超过70%的延迟预算，是整个pipeline最明显瓶颈。\n延迟优化的优先序：\n第一优先级：VLM推理延迟（占大头，优化空间最大） 第二优先级：BEV编码器延迟（占第二，且可以通过DLA offloading优化） 第三优先级：pipeline中的CPU-GPU传输延迟 量化部署实战经验 实践经验1：逐层量化 vs 逐块量化\nTensorRT默认使用逐层(layer-wise)量化。但在Transformer结构中，逐块(block-wise)量化的表现更好：将整个Transformer Block（Attention+MLP）作为一个量化单元，注意力头间的量化误差可以互相抵消。\n实践经验2：Attention算子的INT8量化稳定性\n在Transformer的attention中，QK^T后的softmax对量化噪声非常敏感。INT8量化后的softmax输入分布如果覆盖范围估算不准，attention score的分布会被截断，导致模型输出异常。\n缓解方案：在量化校准集中加入\u0026quot;hard case\u0026quot;样本——那些attention map分布较广（存在注意力极度集中或极度分散）的样本。这比随机采样1000张普通图片的校准效果显著更好。\n实践经验3：DLA编译失败的处理\n将网络的一部分offload到DLA时，经常遇到编译失败——因为DLA不支持某个算子。通用的stack trace分析流程：\n查看TensorRT编译日志，定位到编译失败的算子 判断该算子是否必须（如LayerNorm的affine变换可以与前一卷积fuse？） 如果必须，将该算子及其前后若干层回退到GPU执行 使用Network Cut工具在算子粒度的合适位置切分DLA/GPU的边界 通常，DLA的编译成功率在80-90%，剩下的10-20%需要手动调整网络结构或算子划分。\n显存瓶颈与优化 VLA模型的显存占用量通常远超传统感知模型。以部署3B参数的VLM在Orin上为例：\n项 估算值 模型参数(INT8) 3B × 1B ≈ 3GB Key-Value Cache(max length=512) 512 × 32layers × 2(K+V) × 64dim × 1B ≈ 2.1GB 中间激活(特征图) 1-2GB (取决于batch size和序列长度) 输入数据(buffer) 0.5-1GB 操作系统+中间件 2-3GB Orin可用显存(32GB - 系统占用) ~25GB 总占用 约8-11GB 余量 14-17GB 虽然看起来余量还算充裕，但注意：VLA模型在推理时需要运行时内存用于计算中间结果的暂存。另外，Shadow模式（新旧模型并行推理）会翻倍显存需求。\n显存优化策略：\nKV Cache量化：将attention的Key-Value Cache从INT8进一步压缩到INT4或NF4，压缩比2x，精度损失可控 激活值检查点 (Activation Checkpointing)：在pipeline的某些阶段不保存激活值，反向传播时重新计算——这主要用于训练，推理时可以简化 模型分片：对于超大模型（Thor上的13B模型），将不同layer分配到不同DLA/GPU分区，流水线执行 第四部分：从Orin到Thor——部署实践的代际变化 Thor的到来不是一个渐进式升级，而是一个量变到质变的跳跃。它改变了VLA模型部署的游戏规则。\n变化1：VLM的模型大小上限\nOrin的254 TOPS和200GB/s带宽将VLM的部署上限限制在3B参数（INT8量化后）。这意味着Orin上的VLA模型只能使用小规模的LLM作为推理引擎，多步推理和复杂指令跟随的能力有限。\nThor的2000 TOPS和400GB/s带宽使7B-13B参数级别的VLM部署成为现实。这意味着可以在车上部署完整功能的VLM（如LLaMA-7B/13B级别），直接理解自然语言指令、参与多步推理、处理复杂的场景描述。\n变化2：推理算法的选择空间\nOrin上为了跑VLM，需要用尽各种优化手段（稀疏化剪枝、DLA offloading、量化校准）。这种\u0026quot;把模型挤进小壳子\u0026quot;的做法限制了算法架构的选择。\nThor上则有了\u0026quot;选择自由\u0026quot;。可以因为算法效果更好而选择更耗费算力的架构，而不是因为算力限制而妥协。例如，在Thor上可以实现：\n多帧视频token的输入（而不是单帧或两帧） 自回归推理的beam search（而不是greedy decoding） 整图分辨率的滑动窗口处理（降采样压缩的精度损失更小） 变化3：开发工具的演进\n在Orin上，大部分优化工作是在编译部署阶段完成的（TensorRT编译、DLA offloading配置、INT8量化校准）。\n在Thor上，随着算力和带宽约束的放松，优化工作的重心前移到了训练阶段——训练时做QAT、蒸馏和结构化剪枝，部署时只需要标准的TensorRT编译即可达到性能目标。\n关键论文与延伸阅读 DRIVE Orin硬件白皮书: NVIDIA, \u0026ldquo;NVIDIA DRIVE AGX Orin Developer Kit Guide\u0026rdquo;, 2022. — 官方硬件架构说明，包含详细的内存映射和power budget TensorRT优化指南: NVIDIA, \u0026ldquo;TensorRT Developer Guide\u0026rdquo;, 持续更新. — INT8量化、DLA offloading、算子融合的官方最佳实践 Roofline模型分析: S. Williams et al., \u0026ldquo;Roofline: An Insightful Visual Performance Model for Multicore Architectures\u0026rdquo;, CACM 2009. — 理解算力和带宽约束的理论框架 Flash Attention: T. Dao et al., \u0026ldquo;FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness\u0026rdquo;, NeurIPS 2022. — 减少attention的内存访问量的代表性优化工作 VLA模型部署: S. Dasari et al., \u0026ldquo;RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control\u0026rdquo;, CoRL 2023. — VLA模型从训练到部署的完整流程 DRIVE Thor发布: NVIDIA, \u0026ldquo;NVIDIA DRIVE Thor: The Next-Gen Centralized Computer for Automotive\u0026rdquo;, GTC 2023. — Thor架构的官方技术预览 DRIVE平台的演进是自动驾驶VLA模型发展的硬件底座的缩影。Orin让深度学习感知成为可能，Thor则让大语言模型级别的推理首次在车上得到部署。但永远不要忘记：在车端部署中，你永远不会有数据中心的算力自由。每一条pipeline的优化、每一个算子的选择，都是在物理约束下的精心权衡。理解硬件，是成为优秀自动驾驶工程师的必修课。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/nvidia-drive%E5%B9%B3%E5%8F%B0%E8%AF%A6%E8%A7%A3/","summary":"NVIDIA DRIVE是自动驾驶行业最主流的车端计算平台，从Orin（254 TOPS）到Thor（2000 TOPS）的演进正在重新定义VLA模型的部署边界。本文从硬件架构出发，讲解Orin/Thor的GPU-CPU-DLA-PVA异构计算单元、内存带宽与瓶颈分析、DRIVE OS与DriveWorks中间件栈、TensorRT在DRIVE上的优化策略（INT8稀疏化/DLA offloading/Multi-Stream调度），以及实际部署VLA模型时的pipeline编排与延迟预算分配经验。","title":"NVIDIA DRIVE平台详解：从Orin到Thor"},{"content":"📄 论文信息 标题：GoalFlow: Goal-Driven Flow Matching for Multimodal Trajectories Generation in End-to-End Autonomous Driving 作者机构：中国科学院大学 × 地平线机器人（Horizon Robotics） × 南京大学 × 华中科技大学 × 上海 AI Lab（Xing, Zhang, Hu, Jiang, He, Zhang, Long, Yin） arXiv：2503.05689 代码：github.com/YvanYin/GoalFlow 一句话总结：先用一个目标点词表 + 评分机制选出最合理的短期终点，再用 Flow Matching（整流流）只需一步去噪生成多模态轨迹，在 NAVSIM 上 PDMS 达到 90.3，SOTA。 🤔 要解决什么问题？ 自动驾驶里，一个场景往往不止一条合理轨迹——同样的路口，你可以稳健直行、也可以激进变道。所以近年来大家开始追求多模态轨迹分布建模，把候选轨迹一并生成出来再挑选。但现有做法都有硬伤：\n范式 代表方法 致命问题 离散指令引导 VAD（左/右/直三模态） 引导信息太粗糙，与真值差距大时生成低质量轨迹 固定导航点引导 SparseDrive 预定义一组候选点，不追求精度，偏真值就崩 纯扩散生成 Diffusion-ES、MotionDiffuser 无约束 → 轨迹严重发散，模态间无清晰边界 真值端点强约束 MotionDiffuser 直接用 GT 端点 → 引入过强先验，训练-测试不一致 GoalFlow 作者犀利地指出两个被忽视的问题：\n大家只盯着碰撞率和 L2，却忽略了\u0026quot;车还在不在可行驶区域里\u0026quot;——这正是 DAC（Drivable Area Compliance）指标要衡量的。一条 L2 误差很小的轨迹，如果冲出路面，照样是灾难。 回归式模型靠不同引导信息做多模态，但引导信息一旦偏离真值，轨迹质量就断崖式下跌。因为回归模型只会\u0026quot;忠实拟合引导\u0026quot;，引导错了它不会纠偏。 核心矛盾：扩散/回归模型要么\u0026quot;发散无边界\u0026quot;，要么\u0026quot;约束太强不真实\u0026quot;——GoalFlow 要在两者之间找到一个既精确又自适应的平衡点。\n💡 核心思想：目标点 + Flow Matching GoalFlow 的解法一句话：用一个精确的\u0026quot;目标点\u0026quot;给生成过程上紧箍咒，再用高效的 Flow Matching 一步生成多模态轨迹。\n它把规划拆成三段流水线，各司其职：\n模块 职责 关键创新 感知模块 融合相机 + LiDAR → BEV 特征 复用 Transfuser 架构 目标点构造模块 从词表中选出最合理的目标点 密集词表 + 评分机制 轨迹规划模块 用 Flow Matching 生成轨迹 + 打分选最优 单步去噪 + 轨迹评分器 ⚙️ 方法细节 👁️ 模块一：感知（Transfuser 融合） 前/左/右三路相机拼接成一张图 I，LiDAR 点云组成张量 L，分别过各自 backbone，在多层用 Transformer block 融合，最终得到 BEV 特征 F_bev。并用 HD 地图、检测框做辅助监督，保证 BEV 特征把路况编码全。\n单模态各有盲区：LiDAR 看不见红绿灯，相机测不准距离——多模态融合是高质量规划的前提。这也是 NAVSIM 排行榜上头部方案的共同选择。\n🎯 模块二：目标点构造（最关键的创新） 这是 GoalFlow 区别于所有前作的核心。作者的洞察非常精妙：\n目标点包含了对\u0026quot;短期未来位置\u0026quot;的精确描述，是对生成模型极强的约束——比\u0026quot;左/右/直\u0026quot;这种粗指令精确得多，又比\u0026quot;真值端点\u0026quot;这种作弊约束自然得多。\n于是它把传统\u0026quot;规划模块\u0026quot;拆成两步：先精确选目标点，再生成轨迹。\n目标点词表（Goal Point Vocabulary）：预先构造一个密集的目标点候选集 V = {gᵢ}ᴺ，覆盖各种可能的短期终点。与 SparseDrive 的\u0026quot;固定聚类点\u0026quot;不同，GoalFlow 的词表更密、覆盖更全。\n评分机制选点：用一个打分网络，根据场景信息（BEV 特征）从词表里挑出既接近真值、又在可行驶区域内的最优目标点 g。这是\u0026quot;学习式选择\u0026quot;，而非\u0026quot;硬编码\u0026quot;。\n对比方法 目标点来源 问题 GoalGAN 网格采样 不考虑目标点分布 SparseDrive 固定聚类导航点 不追求精度 GoalFlow 密集词表 + 学习打分 自适应、精确、可行驶 正是这一步让 GoalFlow 在 DAC（可行驶区域合规）指标上大幅领先——目标点本身就约束在可行驶区域内，轨迹自然不会跑出路面。这是它相对其他方法最显著的差异化优势。\n🌊 模块三：Flow Matching 轨迹规划 GoalFlow 没用扩散，而是用了更高效的 Flow Matching（整流流 Rectified Flow）。\n为什么不用扩散？ 这两者差别值得细看：\n维度 扩散模型（DDPM） Flow Matching（整流流） 路径形状 曲折去噪路径 直线最优传输路径 推理步数 几十~上千步 单步即可 轨迹质量 易发散 收敛稳定 训练目标 预测噪声 预测速度方向 整流流的原理很优雅：在简单分布 π₀（标准高斯）和目标分布 π₁（真实轨迹）之间建一条直线路径：\n中间状态：xₜ = (1-t)·x₀ + t·x₁ 速度方向恒为：x₁ - x₀（与 t 无关） 训练一个网络 v_θ 去预测这个方向，损失就是简单的 MSE：L = ‖v_θ(xₜ, t) - (x₁ - x₀)‖₂ 因为路径是直线，理论上一步就能从噪声走到目标分布——这对车端实时性是决定性的。相比之下，扩散模型要走完整条曲线路径，步数少了轨迹质量崩盘。\n条件注入：生成时把 BEV 场景信息 + 选中的目标点 g 作为条件喂给 v_θ。用不同目标点，就能得到清晰分离的多模态轨迹——模态之间不再\u0026quot;糊在一起\u0026quot;，而是被目标点天然地隔开。\n整流流的直觉解释 如果觉得公式抽象，可以这样理解整流流：想象你要从\u0026quot;噪声原点\u0026quot;走到\u0026quot;真实轨迹终点\u0026quot;，扩散模型走的是一条弯弯曲曲的小路（要反复横跳式去噪），而整流流直接拉一条直线走过去。直线意味着：(1) 路径最短，走得最快；(2) 方向恒定（始终朝 x₁-x₀ 方向），训练目标简单稳定；(3) 一步就能近似到达终点。这种\u0026quot;最优传输\u0026quot;性质是整流流相比扩散的根本优势，也是 GoalFlow 能做到单步推理的数学根源。\n🏆 轨迹评分器与影子轨迹 Flow Matching 采样出一组候选轨迹 T = {τ̂ᵢ}ᴹ 后，再用一个评分机制挑出最优轨迹 τ。作者还设计了**影子轨迹（shadow trajectories）**机制——用选中的目标点反推一条\u0026quot;参考轨迹\u0026quot;，与生成轨迹对比打分，进一步对冲潜在的目标点选错风险。这是论文的第三大创新点，体现了作者对\u0026quot;目标点也可能选错\u0026quot;这一 corner case 的工程考量。\n🔧 训练损失与工程细节 GoalFlow 的训练目标由几部分组成，对应三个模块各自的需求：\n损失项 作用对象 说明 感知辅助损失 BEV 特征 HD 地图、检测框监督，保证路况编码准确 目标点分类/评分损失 目标点选择器 让打分网络学会从词表中选最合理的目标点 Flow Matching 回归损失 速度场 v_θ MSE：让 v_θ(xₜ,t) 逼近真实方向 (x₁-x₀) 轨迹评分损失 轨迹评分器 让打分器能识别高质量轨迹 一个关键的工程巧思是目标点与轨迹的解耦：因为目标点是显式选出来的离散变量，即使 Flow Matching 部分出错，也能通过评分器在候选轨迹里\u0026quot;兜底\u0026quot;选出相对安全的一条。这种\u0026quot;生成 + 打分 + 选择\u0026quot;的三段式，比单纯依赖生成模型的一次性输出要鲁棒得多——它承认了生成模型可能犯错，并给出了纠错机制。\n单步推理的实战意义 论文强调 GoalFlow 仅需 1 步去噪就能拿到接近最优的分数（仅降 1.6%），这在工程上是革命性的。对比 DiffusionDrive 等方法动辄需要 10+ 步迭代去噪，GoalFlow 的推理延迟可以降低一个数量级。对于车端按 10–20 Hz 运行的规划模块，这意味着生成模型首次真正具备上车资格。这也呼应了论文标题中\u0026quot;efficient\u0026quot;的含义——不只是质量高，还要足够快。\n📊 实验结果：NAVSIM 全面 SOTA GoalFlow 在 NAVSIM 上达到 PDMS 90.3，大幅超越所有方法：\n方法类型 代表 PDMS 特点 传统 E2E UniAD、VAD ~80+ 回归单模态 离散指令多模态 VAD ~85+ 三模态，约束粗糙 扩散策略 DiffusionDrive 等 ~87-89 多步去噪，易发散 GoalFlow — 90.3 单步去噪 + 目标引导 几个关键结论：\nDAC 指标暴涨：得益于目标点约束，车几乎不会跑出可行驶区域，这是其他扩散类方法的最大短板被补上 单步去噪就够了：相比扩散策略动辄几十步，GoalFlow 只需 1 步，分数仅降 1.6%——这对实时部署意义重大 对去噪步数鲁棒：1 步、5 步、10 步性能差异小，工程师可以按算力灵活权衡，不会被\u0026quot;步数\u0026quot;这个超参绑架 ⚖️ Flow Matching vs 扩散：为什么是趋势 GoalFlow 把 Flow Matching 引入端到端驾驶，背后是一个更大的趋势。对比一下：\n维度 扩散（Diffusion） Flow Matching 数学形式 随机微分方程，反向去噪 连续标准化流，向量场 路径形状 曲线 直线（最优传输） 采样效率 慢，需多步 快，可单步 训练稳定性 较好 更稳定 代表工作 DiffusionDrive、Diffuser GoalFlow、Stable Diffusion 3（图像） 在机器人/驾驶的轨迹生成里，Flow Matching 正在快速替代扩散——同样的多模态建模能力，但推理快一个数量级。这和图像生成领域 SD3、Flux 倒向 Flow Matching 的趋势完全一致。GoalFlow 是这一趋势在端到端驾驶领域的标志性落地。\n⚠️ 优势与局限 ✅ 优势 目标点约束解决了扩散轨迹发散的老大难问题，轨迹天然落在可行驶区域 Flow Matching 单步推理，车端部署友好，突破了生成模型\u0026quot;慢\u0026quot;的偏见 DAC 指标强，安全侧表现突出 模块化设计清晰，感知/选点/规划解耦可单独迭代 ❌ 局限 依赖 LiDAR，纯相机方案未验证 目标点词表是预定义的，极端长尾场景的终点可能不在词表里 评分器增加了额外计算和训练复杂度 目前主要在 NAVSIM（开环） 验证，闭环性能待考察 📝 个人思考 目标点是天然的\u0026quot;模态锚\u0026quot;：GoalFlow 最让我眼前一亮的是把\u0026quot;多模态\u0026quot;问题转化成了\u0026quot;目标点选择\u0026quot;问题。与其让模型在连续空间里乱生成一通再费力挑选，不如先用一个离散的、可行驶的目标点把模态边界划清楚，再在每个锚点附近生成。这个思路非常工程化，也很符合人类\u0026quot;先决定去哪、再规划怎么去\u0026quot;的驾驶直觉。它把一个困难的多模态生成问题，拆成了一个分类问题（选目标点）+ 一个条件生成问题（给定点出轨迹），每一步都更可控。\nFlow Matching 是我们 Flow-GRPO 的天然基底：GoalFlow 验证了 Flow Matching 在驾驶轨迹生成上的高效性（单步去噪）。我们自己的 Flow-GRPO 工作正是在 Flow Matching 策略上做强化学习——GoalFlow 的成功说明这个基底选对了，接下来要解决的就是\u0026quot;如何用 RL 突破模仿学习的上限\u0026quot;。GoalFlow 是纯模仿（行为克隆），上限被专家数据锁死；加上 RL 优化，用安全/舒适奖励引导探索，理论上还能再涨一截。GoalFlow 的目标点评分机制，甚至可以直接转写成 RL 的奖励项。\n开环 vs 闭环的隐忧：GoalFlow 在 NAVSIM 开环刷到 90.3 PDMS 很漂亮，但开环指标和真实闭环驾驶之间仍有 gap——开环只评估\u0026quot;是否模仿得像\u0026quot;，闭环才评估\u0026quot;能否真正安全驾驶\u0026quot;。下一步应该看它在 Bench2Drive 这类闭环基准上的表现，以及目标点词表在极端场景下的泛化能力。这是所有 NAVSIM SOTA 方法共同面临的考验。\n与 SparseDrive 的传承：GoalFlow 和 SparseDrive（同作者 Yvan Yin）一脉相承——SparseDrive 用稀疏目标点 + 分类，GoalFlow 用密集词表 + Flow Matching。可以看出作者团队在\u0026quot;目标引导\u0026quot;这条线上持续深耕，这条路线目前看是 NAVSIM 上最有效的范式之一，也预示着\u0026quot;目标引导 + 高效生成器\u0026quot;将成为端到端规划的主流配方。\n生成式规划的未来：GoalFlow 代表的\u0026quot;目标引导 + Flow Matching\u0026quot;路线，正在和\u0026quot;扩散策略\u0026quot;路线、以及 EMMA 式\u0026quot;大模型直接输出\u0026quot;路线三足鼎立。我的判断是：短期内，GoalFlow 这种\u0026quot;轻量生成器 + 精确引导\u0026quot;的工程化路线最适合落地；长期看，随着基础模型变快，大模型直接输出的统一方案会逐渐接管。两者最终可能在\u0026quot;大模型提供认知引导 + 小型 Flow Matching 生成轨迹\u0026quot;的混合架构里融合——这恰好也是 ReCogDrive 的思路，只不过把扩散换成了更高效的 Flow Matching。\n📖 论文精读系列。GoalFlow 是 Flow Matching 进入端到端驾驶的标志性工作，强烈建议和 DiffusionDrive、SparseDrive 对照阅读，理解\u0026quot;扩散→流匹配\u0026quot;的范式迁移。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/goalflow%E7%B2%BE%E8%AF%BB/","summary":"GoalFlow 用一个精准目标点词表加评分机制选出最合理的短期终点，再用 Flow Matching 一步生成多模态驾驶轨迹。它解决了纯扩散生成轨迹发散无边界、而固定锚点约束过强不真实的两难问题。在 NAVSIM 上 PDMS 达到 90.3，验证了\u0026rsquo;目标点+整流流\u0026rsquo;高效生成方案的有效性。","title":"论文精读｜GoalFlow：目标引导流匹配轨迹生成"},{"content":"🎯 一句话理解 LLM LLM = 用海量文本训练的超大 Transformer，通过预测下一个词学会\u0026rsquo;思考\u0026rsquo;，再通过指令微调学会\u0026rsquo;回答问题\u0026rsquo;。\nLLM 是 VLA 的\u0026quot;大脑\u0026quot;——它负责融合视觉信息、进行推理、决定做什么。\n🧬 Transformer Decoder：LLM 的统一架构 几乎全部现代 LLM 都基于 Decoder-only 架构。\n因果注意力（Causal Attention） 每个 token 只能\u0026quot;看到\u0026quot;自己及之前的 token（attention mask 把未来的权重设为 -∞），保证自回归生成的正向性。\nKV Cache：推理加速 生成时缓存先前 token 的 K 和 V 矩阵，只计算新 token 的 K 和 V：\n方式 复杂度 耗時（1K tokens） 无 KV Cache O(n²) ~500ms 有 KV Cache O(n) ~5ms 代价：70B 模型、32K 上下文，KV Cache 需 ~64GB 显存 → 需要 GQA 等优化。\n🔧 关键技术组件 RoPE（Rotary Position Embedding） 通过旋转矩阵将位置信息编码到 attention 计算中：RoPE(q_i, i) · RoPE(k_j, j) = f(q_i, k_j, i-j)。优势：相对位置编码、外推能力强、零额外参数。\n驾驶技巧：调整 RoPE 基频可改变模型对不同距离 token 的注意力敏感度，对长时序驾驶场景有价值。\nSwiGLU 激活 SwiGLU = Swish × 门控线性单元。相比 ReLU 提供更丰富的非线性：\n激活 参数量（d=4096） 代表 ReLU 33M GPT-3 SwiGLU 67M Llama, Qwen, DeepSeek RMSNorm LayerNorm 简化版：$\\text{RMSNorm}(x) = \\frac{x}{\\sqrt{\\frac{1}{n}\\sum_i x_i^2 + \\epsilon}} \\cdot \\gamma$\n相比 LayerNorm（需要计算均值和方差两个统计量），RMSNorm 只计算 RMS，速度提升 5~10%，性能持平。几乎所有新 LLM 都使用 RMSNorm 替代 LayerNorm。\nGQA（Grouped Query Attention） MHA（每头独立 K/V）和 MQA（所有头共享 K/V）的折中方案：H 个 query 头分成 G 组（如 32 个头分 8 组），组内共享 K 和 V。KV Cache 降为 MHA 的 G/H，质量几乎无损。GQA 已是 Llama 2/3、Qwen-2.5、DeepSeek-V3 的标准配置。对 VLA 而言，GQA 在长驾驶视频序列推理时能显著降低显存占用。\n⚡ MoE（Mixture of Experts） MoE 通过稀疏激活大幅提升模型容量而不增加计算成本。\n输 入 → R o u t e r → E → → x p E E e x x r p p t e e r r 1 t t （ 激 2 3 活 （ . ） 激 . → 活 . ） （ 加 不 权 激 求 活 和 ） 输 出 DeepSeek-V3 MoE 参数 指标 值 总参数 671B 激活参数 37B 专家数 256 Top-K 8 关键技术挑战 挑战 方案 负载不均衡 辅助损失 / 动态偏置 路由坍缩 Z-loss 正则 通信开销 专家并行 + all-to-all 优化 MoE 在 VLA 中的优势 大容量 + 低推理成本（671B 参仅激活 37B，车端可行） 多专家天然分场景（城市/高速/泊车各专家负责） 可扩展性：增加专家数不影响单次推理速度 LingBot-VLA 2.0 基于 DeepSeek-V3 构建。\n📈 Scaling Laws Kaplan Law（OpenAI, 2020） $\\text{Loss} \\propto N^{-0.076} \\cdot D^{-0.095} \\cdot C^{-0.050}$\n$N$ = 模型参数量，$D$ = 数据量，$C$ = 计算量 结论：增大模型比增大数据更有效（当时实验范围内） 局限：实验仅研究了 1~2 个数量级的范围 Chinchilla Law（DeepMind, 2022） $\\text{Optimal tokens} \\approx 20 \\times \\text{parameters}$\n颠覆性结论：大模型普遍训练不足。70B 模型应训练 1.4T tokens 而非 300B。这一发现直接影响后续所有 LLM 的训练策略——Llama 3 70B 训了 15T tokens（远超 Chinchilla 的建议），效果显著优于训练不足的 GPT-3。\n涌现能力（Emergent Abilities） Scaling 不仅降低 Loss，还在临界规模下涌现全新能力：\n能力 涌现规模 说明 少样本学习 ~10B+ 给几个示例就能泛化 推理链 ~50B+ 能生成中间推理步骤 指令遵循 ~50B+ 理解并执行复杂指令 多语言泛化 ~10B+ 跨语言知识迁移 VLA 启示：更大的 LLM 不一定需要更多驾驶数据——通用推理能力可直接迁移到驾驶场景。这也是为什么 DriveVLM 用 72B 的 Qwen-VL 而不需要专门在驾驶数据上预训练 LLM。\n🚗 VLA 中常用的 LLM 系列 Qwen-2.5（阿里巴巴） 最受欢迎的 VLA 基模型。DriveVLM、ReCogDrive 等使用。7B/14B/32B/72B，32K 上下文，RoPE+SwiGLU+GQA，中文能力强。\nInternLM（上海 AI Lab） 中文场景优化。Senna-VLM 等驾驶 VLM 使用。版本：InternLM2（2024）、InternLM3（2025）。\nLlama-3（Meta） 开源标杆。Llama 3.1 达 405B/128K 上下文。广泛用于 VLA 研究。\nDeepSeek（深度求索） MoE 路线旗帜。DeepSeek-V3（671B/37B active）+ R1（强化推理），推理能力极强。\n⚡ 部署效率优化 技术 效果 说明 FP8/INT4 量化 显存减半（70B: 140GB → 35GB） 质量损失 \u0026lt;1% 推测解码 3-5x 加速 小模型快速生成 + 大模型验证 Flash Attention 2-4x 加速 减少显存读写，fused kernel 优化 Paged Attention KV Cache 碎片减 95% vLLM 核心优化，高效管理显存 连续批处理 吞吐 10-20x 动态 batch，GPU 利用率最大化 TensorRT-LLM 2-5x 整体加速 NVIDIA 推理引擎，含 kernel 融合 📊 LLM 在 VLA 中的角色总结 角色 具体功能 由什么能力支撑 视觉融合 处理视觉+文本 token 长上下文注意力 场景推理 理解语义和因果关系 涌现推理能力 决策生成 输出动作 token / CoT 自回归生成 多任务统一 感知+预测+规划 指令遵循 常识泛化 应对未见过的场景 预训练知识迁移 VLA 中 LLM 选型建议 场景 推荐 LLM 理由 学术研究 Qwen-2.5 7B 轻量、开源、中文友好 产品级部署 DeepSeek-V3 (MoE) 大容量低推理成本 英文主导 Llama-3 8B/70B 社区生态最完善 多模态原生 Gemini (闭源) EMMA 已验证，但受限于闭源 ⚠️ LLM 在驾驶场景的局限 幻觉（Hallucination）：推理出不存在的情况，驾驶场景下可能致命 延迟上限：即使量化后，首个 token 延迟仍难压到 100ms 以下 上下文长度与计算：长视频序列的 attention 计算量 O(n²) 难以实时 OOD 泛化不足：训练数据中的驾驶场景有限，极端情况仍难保证性能 不确定性估计缺失：LLM 不擅长说\u0026quot;我不知道\u0026quot;，驾驶中这很危险 ✅ 小结 架构：Decoder-only + 因果注意力 + RoPE + SwiGLU + RMSNorm + GQA，现代 LLM 标准配置 MoE：DeepSeek-V3 式稀疏激活，671B/37B active，VLA 优选基模型 预训练：Next Token Prediction + Scaling Laws（Chinchilla: 20x tokens）指导计算分配 部署：FP8/INT4 量化 + 推测解码 + Flash Attention，让 LLM 上车成为可能 📖 知识点拆解系列第 12 篇。下一篇：多模态对齐与指令微调详解。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B%E5%9F%BA%E7%A1%80%E8%AF%A6%E8%A7%A3/","summary":"LLM 是 VLA 的\u0026rsquo;大脑\u0026rsquo;，提供推理与常识能力。本文深入 Transformer decoder 架构（因果注意力、KV Cache、RoPE、SwiGLU、GQA）、MoE（DeepSeek-V3 风格）、Scaling Laws 以及 VLA 中常用的 LLM 系列（Qwen-2.5、InternLM、Llama-3）。","title":"知识点拆解｜大语言模型基础详解：Transformer、MoE 与 Scaling Law"},{"content":"🎯 一句话理解离线强化学习 离线 RL = 只靠\u0026rsquo;看过去的驾驶日志\u0026rsquo;来学习开车，而不需要上路试错。这就像赛车手通过研究比赛录像来提升水平，不需要在真实赛道上冒着撞车的风险去尝试新路线。\n离线 RL 让强化学习从\u0026quot;边做边学\u0026quot;变成了\u0026quot;看数据学\u0026quot;，这对任何试错成本高昂的领域（自动驾驶、医疗、机器人）都是变革性的。\n🆚 Online RL vs Offline RL 经典强化学习的困境 传统 RL 是 online（在线） 的：智能体一边与环境交互、收集新数据，一边用这些数据更新策略。这在 Atari 游戏或 MuJoCo 仿真中可行，但到了真实世界就寸步难行。\n维度 Online RL Offline RL 数据来源 实时交互收集 固定数据集（已有日志） 样本效率 低（从零开始探索） 高（复用宝贵数据） 安全性 ❌ 高风险（试错有代价） ✅ 零风险（不产生新交互） 数据分布 自产自销（in-distribution） 静态分布（不可改变） 适用场景 游戏、仿真 驾驶、医疗、工业 自动驾驶为什么要离线 RL？ 想象让一个无人车在真实道路上做在线 RL：它需要一边开一边尝试激进变道、急刹车来探索\u0026quot;什么动作会导致什么结果\u0026quot;——这在真实交通中是不可接受的。离线 RL 的吸引力在于：可以利用已经积累的海量驾驶日志（包含人类的成功和失败案例），从中学习最优策略，不需要冒着撞车的风险去试错。\n离线 RL 的核心优势 数据复用：已有的驾驶数据（包括人工接管记录、事故边缘案例）都可以作为训练素材 安全第一：不需要在线探索，零试错成本 可扩展：可以用任意多的数据训练，不受环境交互速度限制 可审计：数据集是固定的，训练过程可复现、可回溯 ⚠️ 离线 RL 的核心挑战：Distribution Shift 离线 RL 看似美好，但它面临一个根本性困难：分布偏移（Distribution Shift）。\nOOD 动作问题 训练时，策略 $\\pi_\\theta$ 只能看到数据集中动作-状态的分布。当策略输出的动作偏离数据集中的动作分布时（称为 OOD 动作——Out-Of-Distribution），$Q$ 函数会对这些未见过动作给出过度乐观的估值。\n直觉很简单：假设数据集里只有\u0026quot;正常变道\u0026quot;的动作，$Q$ 网络从未见过\u0026quot;急转 90 度\u0026quot;这种动作。由于 $Q$ 网络是函数逼近器，它可能给\u0026quot;急转 90 度\u0026quot;一个不切实际的高估值——纯属外推错误。策略一旦发现这个空洞，就会疯狂输出类似动作，导致灾难性后果。\n三个层面的分布偏移 偏移层级 描述 后果 动作分布 $\\pi$ 输出 OOD 动作 $Q$ 外推高估 状态分布 OOD 动作导致未知状态 cascading error 数据覆盖 数据集不够全面 策略在未见场景失效 解决路线的分类 所有离线 RL 算法本质上都在解决一个问题：如何在\u0026quot;利用数据集信息\u0026quot;和\u0026quot;约束策略不离数据集太远\u0026quot;之间取得平衡。具体路线分为三类：\n保守方法：压低保守 $Q$ 估值（CQL） 隐式约束：策略约束在数据分布附近（IQL, TD3+BC） 策略约束：正则化策略不偏离行为策略太远（AWAC, BCQ） 🔒 CQL：保守 Q-Learning CQL（Conservative Q-Learning）是离线 RL 中最具影响力的算法之一。它的核心思想直接而优雅——压低 OOD 动作的 Q 估值。\n核心公式 CQL 在标准的 Bellman 误差上添加一个正则项：\n$$\\mathcal{L}_{\\text{CQL}} = \\alpha\\ \\mathbb{E}_{s \\sim \\mathcal{D}}\\left[\\log \\sum_{a} \\exp(Q(s,a)) - \\mathbb{E}_{a \\sim \\mathcal{D}}\\left[Q(s,a)\\right]\\right] + \\mathcal{L}_{\\text{Bellman}}$$这个正则项的含义：\n第一项 $\\log \\sum \\exp(Q)$：最大化数据集中所有动作的 $Q$ 的对数和——实际上是在推高数据分布上的 $Q$（让策略倾向数据集里的动作） 第二项 $-\\mathbb{E}_{\\mathcal{D}}[Q]$：压低数据集中看到的 $Q$ 值 成分 效果 $\\log \\sum \\exp(Q)$ 对所有动作的 $Q$ 做 soft-max，高估 OOD 动作的代价 $-\\mathbb{E}_{\\mathcal{D}}[Q]$ 压低数据分布内的 $Q$，防止过于乐观 $\\alpha$ 控制保守程度（越大越保守） 隐含意思是：如果某个动作在数据集中从未出现，它的 $Q$ 会被 low soft-max 压低；如果它频繁出现，则不受影响。这天然抑制了 OOD 动作的高估问题。\n在自动驾驶中的意义 CQL 对驾驶特别重要，因为驾驶数据的分布极端不均衡——90% 的驾驶时间是\u0026quot;直线巡航\u0026quot;，只有 10% 是\u0026quot;变道、转弯、避险\u0026quot;。CQL 可以安全地处理这些稀疏场景：对于数据集中不常见的激进动作，CQL 天然给出保守估值，让策略不会在不安全的动作上冒进。\nCQL 的局限 调参敏感：$\\alpha$ 选择对性能影响大，需要仔细调节 过度保守：太强的约束会抑制策略超越数据集中的人类驾驶水平 计算开销：$\\sum \\exp(Q)$ 需要对所有动作求和，连续动作空间下需要近似 🧊 IQL：隐式 Q-Learning IQL（Implicit Q-Learning）采取了与 CQL 截然不同的思路——不直接约束 $Q$，而是通过分位数回归隐式地避免 OOD 问题。\n核心思想 IQL 意识到离线 RL 的 OOD 问题本质来自 Bellman 更新中的 max 操作——标准的 $Q$ 学习需要计算 $\\max_a Q(s',a)$，这一步会采到 OOD 动作。IQL 的解决方案是：不做 max，用 expectile 回归来估计最优价值函数。\n$$\\mathcal{L}_{\\text{IQL}} = \\mathbb{E}_{(s,a,s') \\sim \\mathcal{D}}\\left[L_2^\\tau\\left(r + \\gamma V(s') - Q(s,a)\\right)\\right]$$其中 $L_2^\\tau(u) = |\\tau - \\mathbb{1}(u \u003c 0)| \\cdot u^2$ 是不对称的 MSE 损失，$\\tau \u003e 0.5$ 时它会\u0026quot;向上偏置\u0026quot;——让 $Q$ 估值偏向更高的分位数，从而隐式地选择最优动作而不需要显式 max。\n算法 处理 OOD 的方式 偏置来源 CQL 显式压低 OOD 动作 $Q$ 正则项 $\\alpha$ IQL 隐式避免 Bellman max expectile $\\tau$ TD3+BC 约束策略靠近数据 BC 正则化 AWAC 加权 BC advantage 权重 CQL vs IQL 对比 维度 CQL IQL 范式 保守 $Q$ 估值 避免 OOD Bellman 调参 $\\alpha$（保守强度） $\\tau$（期望分位数） 连续动作 需近似（采样求和） 天然支持 性能上限 可能过度保守 可能不够保守 驾驶适用性 安全偏好场景 数据质量高时 🎯 TD3+BC 与 AWAC：策略约束方法 除了修改 $Q$ 函数，另一类方法直接在策略更新层面做文章。\nTD3+BC：最简单的基线 TD3+BC 是\u0026quot;暴力但有效\u0026quot;的典型。它只是在 TD3 的 policy update 上加一个行为克隆约束：\n$$\\pi = \\arg\\max_\\pi \\mathbb{E}_{(s,a) \\sim \\mathcal{D}}\\left[Q(s,\\pi(s)) - \\lambda \\cdot (\\pi(s) - a)^2\\right]$$第一项是标准的 Q 引导策略更新，第二项是 BC 正则——让策略不要偏离数据集中的人类动作太远。$\\lambda$ 控制约束强度。\n优势 局限 实现极简（修改几行代码） 约束过于简单粗暴 收敛稳定 对数据质量敏感 与任何 Q-based 算法兼容 可能限制策略上限 TD3+BC 的标语是：\u0026ldquo;只要把策略拴在数据上，OOD 就不会来找你。\u0026rdquo;\nAWAC：Advantage-Weighted Actor-Critic AWAC 采取更精细的做法——用 advantage 给行为克隆加权：\n$$\\theta = \\arg\\max_\\theta \\mathbb{E}_{(s,a) \\sim \\mathcal{D}}\\left[\\log \\pi_\\theta(a|s) \\cdot \\exp\\left(\\frac{1}{\\beta} A(s,a)\\right)\\right]$$ 当 $A(s,a) \u003e 0$（该动作好于平均），权重大，策略学习这个动作 当 $A(s,a) \u003c 0$（该动作差于平均），权重小，策略忽略这个动作 AWAC 的优雅之处在于它天然处理了数据质量不均：数据里既有好动作也有差动作，AWAC 只学好的、忽略差的。\n方法综合对比 算法 约束位置 是否需要 $Q$ 数据效率 实现难度 CQL Q 函数 ✅ 高 中 IQL Bellman 更新 ✅ 高 中 TD3+BC 策略输出 ✅ 中 低 AWAC 策略更新 ✅ 中 低 BCQ 策略扰动量 ✅ 中 高 🔄 Offline-to-Online Fine-tuning 离线 RL 的终极问题在于：纯离线方法受限于数据质量，永远无法超越数据集中最好的行为。解决思路是先离线预训练、再在线微调。\n两阶段范式 S - - S - - - t t a 用 目 a 策 用 目 g 大 标 g 略 新 标 e 規 ： e 在 数 ： 模 学 仿 据 超 1 驾 到 2 真 继 越 : 驶 合 : 器 续 数 日 理 或 更 据 离 志 的 在 道 新 集 线 训 行 线 路 的 预 练 为 微 中 性 训 策 先 调 交 能 练 略 验 互 上 限 + Q 网 络 微调中的关键挑战 离线到在线的过渡并非顺滑，核心困难在于 CQL 的保守性在在线阶段反而成为束缚：\n问题 原因 缓解策略 保守惯性 CQL 训练的 $Q$ 过于悲观 逐步退火 $\\alpha$ 分布突变 在线数据快速改变分布 混合离线+在线 replay buffer 灾难性遗忘 策略忘记了离线学到的先验 加入 KL 正则化 自动驾驶中的实践 在自动驾驶 VLA 的 RL 微调中，offline-to-online 已经成为实际落地的默认范式：\n大规模离线阶段：用百万级驾驶片段训练基础策略（行为克隆 + 离线 RL） 小规模在线阶段：在仿真器中用 PPO/GRPO 做 RL 微调，reward 来自安全、舒适、效率指标的加权组合 混合 buffer：保留 50% 的离线数据在 replay buffer 中，防止策略在在线阶段\u0026quot;跑偏\u0026quot; 🚗 离线 RL 与 VLA 的深度融合 为什么离线 RL 对 VLA 驾驶如此重要？ VLA 模型（Vision-Language-Action）将视觉理解、语言推理和动作生成统一在一个网络中。离线 RL 对这类模型的训练有天然适配性：\nVLA 训练需求 离线 RL 的匹配 海量驾驶数据（百万级场景） 离线 RL 天然处理静态数据集 安全约束严格（不可在线试错） 零试错训练 数据含大规模人类驾驶日志 直接利用行为克隆先验 需要处理长尾场景 CQL 保守性提供安全兜底 CQL 用于驾驶安全约束 具体来说，CQL 在驾驶 VLA 中有几个关键应用点：\n安全 Q 估计器：CQL 训练的 $Q$ 网络可以作为\u0026quot;安全过滤器\u0026quot;——当策略输出的动作的 $Q$ 值低于某个阈值时，回退到保守策略或人类示范 碰撞避让：将碰撞惩罚编码进 reward 并使用 CQL 优化，模型学到\u0026quot;安全动作的高 Q、危险动作的低 Q\u0026quot; 行为边界：CQL 天然约束策略在数据分布内，防止 VLA 模型产生\u0026quot;幻觉动作\u0026quot;（如突然急转方向） 当前趋势：偏好 + 离线 RL 离线 RL 的最新方向是与 偏好学习 结合，形成类似 RLHF 的离线范式：\n收集人类对驾驶片段的偏好打分（安全 vs 激进、舒适 vs 颠簸） 训练偏好模型替代手工 reward 用离线 RL 算法（CQL / IQL）在偏好 reward 下优化策略 这本质上是 RLHF 的离线版本：不需要在线收集人类反馈，所有偏好标注都在已有数据上进行。对驾驶来说，这比在线 RLHF 安全得多。\n代表性驾驶离线 RL 工作 工作 方法 场景 关键贡献 SafeDrive CQL + 安全约束 城市驾驶 离线学习安全策略 DriveOffline IQL + 多任务 高速 + 城市 单一策略适应多场景 Offline2Online-VLA CQL→PPO 两阶段 端到端驾驶 离线预训练 + 在线微调 📝 个人思考 离线 RL 的价值不仅在于\u0026quot;不用在线交互\u0026quot;——它更深层的意义是 把 RL 从\u0026rsquo;实验科学\u0026rsquo;变成了\u0026rsquo;数据科学\u0026rsquo;。传统 RL 研究者花大量时间调环境、调 simulator、等待训练跑完。离线 RL 的数据集是固定的，实验是确定的，训练是完全可复现的。这种确定性的提升，让 RL 在大规模系统（如自动驾驶）中的工程落地变得可行。\n但我也认为离线 RL 有一个尚未被充分认知的局限：数据集中隐含的 bias 会被算法放大。如果驾驶数据大量来自保守驾驶员，离线 RL 学到的策略也会偏保守；如果数据里没有急刹和危险场景的经验，模型面对边缘情况时仍然可能不知所措。离线 RL 不是银弹，它依赖数据质量的程度比想象的高得多。\n最后，对于自动驾驶 VLA 的 RL 微调，我的判断是：纯离线 CQL/IQL 提供安全的起点，PPO/GRPO 在线微调提供性能的上限，两者的两阶段结合才是当前最佳实践。 单靠任一方都很难同时满足安全性和性能要求。\n📖 这是知识点拆解系列的第 12 篇。离线 RL 让\u0026rsquo;安全地学习驾驶\u0026rsquo;成为可能，但数据 bias 和 OOD 的幽灵仍然在阴影中徘徊。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E7%A6%BB%E7%BA%BF%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0%E8%AF%A6%E8%A7%A3/","summary":"离线 RL 让智能体从静态数据集中学习，无需在线交互，对自动驾驶等安全关键领域至关重要。本文详解 CQL、IQL、TD3+BC 等核心算法，讨论分布偏移与 OOD 动作问题，并梳理离线预训练→在线微调范式在 VLA 驾驶模型中的应用与趋势。","title":"知识点拆解｜离线强化学习详解：从 CQL、IQL 到自动驾驶 VLA"},{"content":"🧭 引言：为什么需要轨迹规划？ 自动驾驶系统分为感知、预测、规划、控制四大模块。轨迹规划位于预测之后、控制之前，其任务是在给定环境约束下，生成一条从起点到终点的安全、舒适、可行的路径和时间序列。\n轨迹规划与路径规划的关键区别在于：路径只关心几何形状（x, y），轨迹关心的是\u0026quot;什么时间到达什么位置\u0026quot;（x, y, t），包含速度和加速度信息。\n维度 路径规划 轨迹规划 输出 (x, y) 序列 (x, y, t, v, a) 序列 约束 几何避障 几何 + 动力学 + 时间 优化目标 最短路径 舒适 + 效率 + 安全 📐 Frenet坐标系：把复杂问题变简单 笛卡尔坐标系的困境 在笛卡尔坐标系下描述车辆沿道路行驶非常困难：道路弯曲时，车辆的 x-y 坐标变化剧烈，约束表达复杂。\nFrenet坐标系的妙用 Frenet坐标系以道路中心线为参考，将车辆位置分解为两个正交分量：\n纵向坐标 s：沿参考线的弧长 横向坐标 d：到参考线的垂直偏移 概念 笛卡尔坐标 Frenet坐标 坐标轴 全局 x, y 轴 沿道路的 s, d 轴 道路表达 复杂曲线方程 s 方向直线 横向约束 难以直接表达 边界 = 车道宽度 / 2 变道决策 几何计算复杂 横向偏移从 0 → 目标车道 d 关键公式：将笛卡尔坐标 (x, y) 投影到参考线上得到投影点 (x_r, y_r)，然后：\ns = 投影点处的累积弧长 d = 符号距离（向左为正/向右为负） 速度与加速度的分解：\n在Frenet框架下，纵向速度 $\\dot{s}$ 和横向速度 $\\dot{d}$ 相互解耦，可以独立优化。这是轨迹规划中最核心的简化：将二维轨迹规划降为两个一维规划（s 方向和 d 方向）。\n🛤️ 轨迹表示方法 1. Waypoint（离散路径点） 最直观的表示：直接输出一系列离散点。\n[ ( s ₀ , d ₀ ) , ( s ₁ , d ₁ ) , . , ( s ₙ , d ₙ ) ] 优点：简单直接，计算快。缺点：不连续，需要插值，存储量大。\n2. 多项式曲线 (Polynomial) 用多项式 $f(t) = a₀ + a₁t + a₂t² + a₃t³ + a₄t⁴ + a₅t⁵$ 表示轨迹。五次多项式可以保证位置、速度、加速度连续。\n边界约束：已知起点状态 (p₀, v₀, a₀) 和终点状态 (p₁, v₁, a₁)，求解 6 个系数。\n3. B样条曲线 (B-Spline) 用多个控制点加权得到平滑曲线，具有局部控制性：移动一个控制点只影响局部形状。\n表示方法 连续性 局部控制 计算开销 适用场景 Waypoint C⁰ ✅ 低 简单场景 Polynomial C² ❌ 中 换道、变轨迹 B-Spline C²+ ✅ 高 复杂交互场景 🗂️ 规划算法三大流派 1. 基于搜索的方法 代表算法：A*, Dijkstra, Hybrid A*, State Lattice\n核心思路：在状态空间（如网格或晶格）中搜索最优路径。Hybrid A 是自动驾驶中最常用的搜索算法*，它结合了连续状态空间和离散网格，保证路径的运动学可行性。\n2. 基于优化的方法 代表算法：曲线优化 (Optimization-based), MPC (Model Predictive Control)\n核心思路：将规划建模为带约束的优化问题。\nm s i . n t . J 车 碰 边 = 辆 撞 界 动 约 约 w 力 束 束 ₁ 学 约 束 J _ s m o o t h + w ₂ J _ d e v i a t i o n + w ₃ J _ o b s t a c l e 特点：可显式处理复杂约束，但计算量大，且非凸问题易陷入局部最优。\n3. 基于学习的方法 代表算法：IL (Imitation Learning), RL (Reinforcement Learning), Implicit Model\n核心思路：用神经网络直接从感知输入映射到轨迹。\n分类 优点 缺点 代表应用 搜索 完备性保证 实时性差 A*, Hybrid A* 优化 约束处理强 非凸问题 MPC, OBCA 学习 场景泛化好 可解释差 ChauffeurNet ⚡ 碰撞检测：轨迹安全的底线 主流方法 包围盒检测 (Bounding Box)：用矩形/圆形包围车辆，检测是否重叠。计算快但保守。 分离轴定理 (SAT)：精确检测两个凸多边形是否相交，常用于激光雷达点云的障碍物检测。 SDF (Signed Distance Function)：构建场景的符号距离场，快速查询任意点到障碍物的距离。 碰撞约束的优化表达 在优化框架中，碰撞约束通常表达为：\n# 伪代码：SDF 碰撞约束 for each state in trajectory: distance = sdf_map.query(state.x, state.y) constraint: distance \u0026gt;= safety_margin 关键技术：\n凸分解 (Convex Decomposition)：将非凸障碍物拆分为多个凸体 DCC (Dual Convex Convex)：用对偶形式加速碰撞检测计算 🌊 轨迹平滑：让乘客不晕车 为什么需要平滑？ 不平滑的轨迹会导致：\n乘客舒适度下降（急加速/急转向） 车辆跟踪困难 轮胎磨损加剧 平滑指标 指标 定义 物理含义 加加速度 (Jerk) da/dt 加速度变化率，衡量舒适性 曲率 (Curvature) 1/R 转向急缓程度 曲率变化率 dκ/ds 转向平滑性 平滑方法 后处理平滑：生成轨迹后用滤波器平滑\n移动平均滤波：简单但会缩短轨迹 Savitzky-Golay滤波：保形性好 优化目标内置平滑\n在代价函数中加入 Jerk 项：$J_{smooth} = \\int \\dddot{x}^2 dt$ 用 B-Spline 的曲率连续性保证 Minimum Jerk 轨迹：理论上最平滑的轨迹，$J = \\int \\dddot{x}^2 dt$ 最小\n🧩 实践链路：从感知到控制的轨迹生成 一条完整的轨迹规划pipeline：\n环境感知 ⮕ 预测模块 提供障碍物轨迹 行为决策 ⮕ 选择宏观行为（直行/换道/停车） 轨迹生成 ⮕ 在Frenet空间生成多条候选轨迹 轨迹评估 ⮕ 按代价函数选取最优 碰撞检查 ⮕ 剔除不安全轨迹 轨迹输出 ⮕ 送给控制模块跟踪 模块 输入 输出 关键算法 行为决策 感知+预测 宏观指令 状态机/RL 轨迹生成 指令+地图 候选轨迹 B-Spline/Polynomial 轨迹评估 候选集 代价排序 多目标优化 碰撞检测 轨迹+SDF 安全标记 DCC/SAT 💭 个人思考 轨迹规划是自动驾驶中\u0026quot;理想与现实碰撞最激烈\u0026quot;的模块。学术界喜欢用优化方法求解全局最优解，工业界却偏爱搜索+后处理平滑的实用组合。核心矛盾在于：\n实时性 vs 最优性：MPC 可以每 50ms 重新规划，但只能看到有限时域 确定性 vs 不确定性：传统规划假设环境完全确定，但实际存在大量不确定性 规划 vs 控制：规划层输出的平滑轨迹，控制层往往跟踪不上 — 这需要规划时预留控制余量 未来的方向是端到端规划和交互式规划：让规划器不仅考虑障碍物当前状态，还要主动预测障碍物对自己规划的响应。这需要将博弈论思想引入轨迹规划，是当前学术界最活跃的方向之一。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E8%BD%A8%E8%BF%B9%E8%A7%84%E5%88%92%E5%9F%BA%E7%A1%80%E8%AF%A6%E8%A7%A3/","summary":"轨迹规划是自动驾驶系统中连接预测与控制的枢纽，其核心任务是在安全、舒适、可行的约束下生成时空轨迹。本文深入讲解 Frenet 坐标系、主流轨迹规划算法分类、碰撞检测与轨迹平滑等核心概念。帮助读者建立从数学基础到工程实践的完整知识框架。","title":"知识点拆解｜自动驾驶轨迹规划基础"},{"content":"📌 概述 3D 目标检测的核心任务是从传感器数据中输出目标的三维边界框——包括位置（x, y, z）、尺寸（w, h, l）和朝向角（yaw）。相比 2D 检测，3D 检测需要解决深度估计、遮挡处理、尺度歧义等额外难题。\n过去五年，3D 检测从 LiDAR-only 一枝独秀发展到多传感器融合，再到纯视觉方案崛起。而随着 UniAD、VAD 等端到端框架的流行，检测正在从\u0026quot;独立模块\u0026quot;逐渐转变为\u0026quot;规划的子任务\u0026quot;——甚至在部分 VLA 方法中，检测被完全跳过，模型直接从感知特征隐式地输出轨迹。\n🎯 核心概念 从 2D 到 3D：四个关键挑战 挑战 2D 检测 3D 检测 难度来源 深度估计 不需要 必须精确估计距离 单目深度存在固有歧义（同一 2D 大小可对应不同距离） 遮挡 部分遮挡仍可检测 严重遮挡时 3D 框精度骤降 3D 空间需要完整形状推断 尺度歧义 近大远小是特征而非问题 必须区分近处小物体和远处大物体 透视投影丢失了绝对尺度信息 朝向 不需要 需要预测 yaw 角 视觉上前后朝向难区分 3D 边界框表示 一个 3D 边界框通常表示为 7 自由度：\n$$\\mathbf{B} = (x, y, z, w, h, l, \\theta)$$其中 (x, y, z) 为中心坐标，w/h/l 为宽高长，θ 为绕 z 轴的朝向角。在 BEV 视角下，3D 检测退化为在鸟瞰图上的 2D 检测 + 高度/朝向回归，难度显著降低——这也是 BEVFormer 等 BEV 方法成功的原因之一。\n🔧 技术详解 纯视觉路线 纯视觉 3D 检测的核心难题是：从 2D 图像中恢复 3D 信息，这本质上是一个不适定的病态问题。主要有两条主流技术路线：\nDETR3D：3D-2D 查询 DETR3D 是第一个将 Transformer 架构引入 3D 检测的工作，它借鉴了 2D 检测中 DETR（Detection Transformer）的设计范式——使用一组可学习的 object queries 替代了传统的 anchor 或 proposal 设计。它定义了一组稀疏的 3D 目标查询（object queries），每个查询通过预测的 3D 参考点投影到 2D 图像坐标，然后从对应的图像特征中采样，再通过跨注意力更新查询。\n核心设计：\n3D 参考点 → 相机投影矩阵 → 2D 图像坐标 在 2D 坐标周围双线性采样图像特征 跨注意力聚合多视图特征 → 更新查询 从查询解码出 3D 框 BEVFormer：BEV 空间查询 BEVFormer 将感知统一到 BEV 空间：预定义 BEV 网格上的每个 query 代表一个空间位置，通过空间交叉注意力从多视图图像中采样特征（采样 4 个高度层 × 8 个环绕点），再通过时序自注意力与历史 BEV 特征融合。\n与 DETR3D 的区别：DETR3D 使用稀疏查询（并行预测目标），BEVFormer 使用密集 BEV 网格（统一表示 + 检测 head）。\nPETR / StreamPETR：位置编码转换 PETR 提出另一种思路：将 3D 坐标直接编码进图像特征，使 3D 检测退化为 2D 检测。它使用 3D 位置编码（3D Position Embedding）将每个像素对应到 3D 空间中的射线，Transformer 通过注意力自行学习 3D-2D 对应关系。\nStreamPETR 在 PETR 基础上引入时序传播，通过 object memory queue 将历史帧的目标信息传递到当前帧，避免了逐帧重新检测的计算浪费。\n方法 查询类型 特征采样 时序融合 速度 mAP (nuScenes) DETR3D 稀疏 object query 2D 投影采样 无 快 34.9 BEVFormer 密集 BEV grid query 4D 参考点采样 时序自注意力 中等 51.7 PETRv2 密集 pixel query 3D PE 编码 时序 attention 中等 48.5 StreamPETR 稀疏 query + memory 3D PE 编码 memory queue 快 54.6 LiDAR 路线 LiDAR 点云是 3D 检测最直接的传感器——它天然提供精确的 3D 坐标。核心挑战是如何高效处理稀疏、无序的点云。\nPointPillars：点云转伪图像 PointPillars 将点云沿 BEV 平面划分成柱体（pillars），对每个 pillar 内的点提取特征后压缩为伪图像（Pseudo-Image），然后使用标准的 2D 检测网络处理。其优势是将 3D 检测转化为 2D 检测问题，推理速度极快（62 FPS）。\nVoxelNet：3D 卷积 VoxelNet 将点云量化为 3D 体素网格，对每个非空体素内的点进行特征编码（VFE），然后使用 3D 卷积逐步下采样。虽然精度高，但 3D 卷积计算量大，实时性差。\nCenterPoint：基于中心的检测 CenterPoint 借鉴 2D 的 CenterNet 思想，在 BEV 特征图上预测每个位置的\u0026quot;中心热图\u0026quot;，再回归中心点的 3D 框属性。它使用 PointPillars 或 VoxelNet 作为 backbone，在 Waymo Open Dataset 上达到 SOTA。\n融合路线 融合的核心难题是：LiDAR 和图像特征的空间对齐。LiDAR 特征在 3D 欧氏空间，图像特征在 2D 透视空间。\nTransFusion：稀疏查询融合 TransFusion 以 LiDAR 特征为主，图像特征为辅。第一阶段从 LiDAR BEV 特征生成初始检测框；第二阶段使用 image-guided 的跨注意力细——让每个目标查询从最近视图的图像特征中采样，补充语义信息。\nBEVFusion：统一 BEV 特征融合 BEVFusion 是当前最主流的融合范式。它分别将 LiDAR 和图像特征转换到 BEV 空间，然后按通道拼接。关键设计是使用 LSS 将图像特征提升到 3D 再降采样到 BEV。BEVFusion 的简单拼接极其有效，在 nuScenes 检测排行榜上长期霸榜。\nBEVFusion 的成功表明：融合的主要挑战不在于设计复杂的交互机制，而在于确保两种模态的特征在空间上精确对齐。一旦对齐到统一 BEV 空间，简单的拼接或求和就能取得优秀结果。\n在 BEVFusion 之后，许多工作进一步优化了融合机制。DeepFusion 提出了\u0026quot;inverse matrix\u0026quot;策略——学习从 3D 空间到 2D 图像的投影的\u0026quot;逆映射\u0026quot;，使图像特征可以直接在 3D 体素空间对齐。FSD（Fully Sparse 3D Detection）则提出了完全稀疏的 3D 检测框架，使用稀疏实例查询替代密集特征图，将计算量降低了约 70%。\n检测损失函数与训练策略 3D 检测的训练涉及多任务损失，以 CenterPoint 为例：\n$$\\mathcal{L} = \\mathcal{L}_{heatmap} + \\mathcal{L}_{reg} + \\mathcal{L}_{height} + \\mathcal{L}_{yaw}$$ Heatmap Loss：Focal Loss 变体，监督中心点热图。 Regression Loss：L1 Loss 或 Smooth L1 Loss，监督 3D 框的尺寸和偏移量。 Height Loss：单独的高度回归损失，因为高度在 BEV 特征中信息量少。 Yaw Loss：将朝向角分解为 sin/cos 两个分量的回归或分类损失。 数据增强在 3D 检测中至关重要：GT-AUG（从其他帧复制真实目标插入）、点云旋转/翻转、CBGS（category-balanced grouping 解决类别不均衡）等都是常用策略。此外，模拟恶劣天气（雨、雾、雪）的数据增强对于提升模型鲁棒性也至关重要，因为传感器在恶劣条件下的退化是自动驾驶安全的关键风险点。\n稀疏卷积在 LiDAR 检测中的核心作用 LiDAR 点云的稀疏性（99% 以上体素为空）使得密集的 3D 卷积计算浪费严重。稀疏卷积（Sparse Convolution / Submanifold Convolution）只对非空体素进行计算，在 SECOND、CenterPoint 等中被广泛采用。3D 稀疏卷积的核心操作与 2D 卷积类似，但只对存在有效输入的 voxel 位置进行卷积运算，并通过 Rule Book 管理输入和输出 voxel 的对应关系，计算效率提升数十倍。\n📊 方法对比 三类方法的核心差异 维度 纯视觉 纯 LiDAR 融合 深度精度 差（依赖于网络学习） 好（精确测距） 好 语义理解 好（图像具有丰富纹理信息） 差（无纹理信息） 最好 成本 低（数百美元/套） 高（数万元/套） 最高（多传感器成本叠加） 退化条件 夜间/雨雾差 不受光照影响 互补鲁棒 典型代表 BEVFormer, StreamPETR CenterPoint BEVFusion 端到端范式下的检测角色演变 在 UniAD 和 VAD 中，3D 检测 head 仍然是感知模块的核心输出之一。但在 VLA 模型中，这一角色正在改变：\nUniAD / VAD 等端到端模型：检测 head 输出 → 跟踪 → 预测 → 规划。检测是串行流水线的最前端起点，检测质量直接影响下游。检测误差会沿流水线逐级放大，因此检测的高召回率在端到端框架中至关重要。 VLA（DriveVLM、EMMA）：没有显式的检测 head。视觉编码器 → LLM 直接输出规划。LLM 在语义层面\u0026quot;理解\u0026quot;场景中的目标位置和状态，检测能力内化到 LLM 的隐式表征中。 世界模型（GAIA-1、DriveDreamer）：检测作为训练时的监督信号之一，推理时不需要检测——模型直接预测未来的场景。检测在这里更多是用于训练时的场景理解辅助。 趋势是：检测正在从\u0026quot;必须的输出\u0026quot;变为\u0026quot;可选的中间监督\u0026quot;。但作为重要的评价指标（nuScenes Detection Score, Waymo Open Dataset mAP/mAPH 等）和安全冗余模块，3D 检测在短期内仍然是自动驾驶系统中不可或缺的一环。\n3D 检测的常用评测基准 基准 场景 传感器 指标 核心挑战 nuScenes 城市道路，1000 场景 6 相机 + 5 雷达 + LiDAR NDS（综合指标）+ mAP 多传感器融合 Waymo Open 城市+高速，1150 场景 5 相机 + LiDAR mAP / mAPH（加权） 大规模数据，高精度要求 KITTI 城市+高速，仅 7481 帧 2 相机 + LiDAR AP@40 经典小规模基准 ONCE 多城市，百万级 7 相机 + LiDAR mAP 域迁移挑战 🔗 与自动驾驶的关联 检测用于安全验证 即使端到端模型不再显式输出检测框，3D 检测仍然是安全验证的重要工具——检测结果可与规划决策交叉验证，检查是否存在\u0026quot;模型没看到但检测到\u0026quot;的冲突，或\u0026quot;模型规划了碰撞轨迹但检测没有感知到\u0026quot;的漏检风险。这种冗余验证机制是 L4 自动驾驶安全架构中的标准配置。\nOccupancy 正在逐步取代显式检测成为主流场景表示 在最新的世界模型和 end-to-end 自动驾驶方案中，Occupancy（占据网格）正在取代 3D 检测成为主要的场景表示。Occupancy 能描述任意形状的障碍物（检测无法处理的异形车辆、散落货物），且与规划的交互更自然。\n从模块化到端到端训练 在传统的模块化方案中，3D 检测是独立的训练任务，需要单独标注、单独优化。在 UniAD 等端到端框架中，检测 head 与其他任务（跟踪、建图、规划）共享 backbone 特征，通过多任务损失联合优化。这意味着检测的梯度会影响到感知 backbone 的特征学习，而检测的损失权重需要与规划等其他任务平衡，通常通过不确定性加权（uncertainty weighting）或 GradNorm 等策略自动调节。\n当前端到端框架也开始引入\u0026quot;可解释的检测\u0026quot;——VAD 在规划 head 中保留了一个轻量检测分支，用于在推理时输出\u0026quot;检测框\u0026quot;以辅助规划决策的可解释性。这种混合范式（隐式场景理解 + 显式检测输出）可能成为实用化和安全验证之间的最佳平衡点。\n对于 VLA 模型，检测信号完全来自 LLM 的隐式理解——模型没有显式的 3D 检测监督，但通过学习\u0026quot;场景描述→轨迹\u0026quot;的映射，LLM 内部可能形成了隐式的空间感知能力。分析这种隐式空间理解是否能在安全关键场景下替代显式检测，是当前的研究热点。\n数据标注与合成数据 3D 检测的数据标注成本远高于 2D 检测。一个 2D 框约需 10 秒标注，而一个 3D 框在点云中标注约需 60-90 秒（需要调整朝向、尺寸、位置三个自由度），而一个完整的 Waymo Open Dataset（约 1000 个 scene，每个 scene 约 200 帧）标注成本超过 2000 万美元。一套完整的 nuScenes 数据集（40k 帧）标注成本约 200 万美元。\n合成数据（Synthetic Data）成为降低标注成本的有效手段。利用游戏引擎（如 CARLA、MetaDrive）或仿真器（如 NVIDIA DRIVE Sim）生成标注精确的 3D 检测数据，在域迁移技术的帮助下，合成数据训练—真实数据微调的策略已在许多工作中证明了有效性。PointPainting、Frustum PointNets 和 LiDAR-Sim 等方法的成功也表明，在合成数据上预训练 3D 检测模型后在真实数据上微调，可以显著降低对真实标注的依赖。\n📚 延伸阅读 Wang et al., \u0026ldquo;DETR3D: 3D Object Detection from Multi-view Images via 3D-to-2D Queries\u0026rdquo;, CoRL 2021. Hu et al., \u0026ldquo;Learning Feature Pyramids for Human Pose Estimation\u0026rdquo;, ICCV 2017.（FPN 的关键设计思想也启发了 3D 检测中的多尺度特征融合） Li et al., \u0026ldquo;BEVFormer: Learning Bird\u0026rsquo;s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers\u0026rdquo;, ECCV 2022. Liu et al., \u0026ldquo;PETR: Position Embedding Transformation for Multi-View 3D Object Detection\u0026rdquo;, ECCV 2022. Lang et al., \u0026ldquo;PointPillars: Fast Encoders for Object Detection from Point Clouds\u0026rdquo;, CVPR 2019. Yin et al., \u0026ldquo;Center-based 3D Object Detection and Tracking\u0026rdquo;, CVPR 2021. Bai et al., \u0026ldquo;TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers\u0026rdquo;, CVPR 2022. Liu et al., \u0026ldquo;BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird\u0026rsquo;s-Eye View Representation\u0026rdquo;, ICRA 2023. Li et al., \u0026ldquo;FSD: Fully Sparse 3D Object Detection\u0026rdquo;, NeurIPS 2022. Wang et al., \u0026ldquo;DeepFusion: Lidar-Camera Deep Fusion for Multi-Modal 3D Object Detection\u0026rdquo;, CVPR 2022. Zhou et al., \u0026ldquo;VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection\u0026rdquo;, CVPR 2018. Shi et al., \u0026ldquo;PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection\u0026rdquo;, CVPR 2020.（PV-RCNN 融合了点云级和体素级特征） Yan et al., \u0026ldquo;SECOND: Sparsely Embedded Convolutional Detection\u0026rdquo;, Sensors 2018.（SECOND 引入了稀疏卷积，使 LiDAR 3D 检测达到实时） ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/3d%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B%E5%85%A8%E6%99%AF%E8%AF%A6%E8%A7%A3/","summary":"3D 目标检测是自动驾驶感知的核心任务之一。本文从 2D 检测到 3D 检测的额外挑战出发，系统梳理纯视觉、纯 LiDAR 和多传感器融合三大技术路线，分析 DETR3D、BEVFormer、PointPillars、BEVFusion 等代表方法，并探讨在端到端趋势下 3D 检测逐渐被规划吸收的范式转变。","title":"知识精讲｜3D目标检测全景详解"},{"content":"📄 论文信息 标题：Do As I Can, Not As I Say: Grounding Language in Robotic Affordances（照我说的做，但要量力而行：将语言接地到机器人可供性中） 团队：Google Robotics at Google, Everyday Robots（Michael Ahn, Anthony Brohan, Noah Brown, Yevgen Chebotar, Chelsea Finn, Karol Hausman, Sergey Levine, Andy Zeng 等45位作者） 发表：CoRL 2022（arXiv 2022.04，v2更新PaLM版本 2022.08） 关键词：大语言模型、机器人规划、可供性、语言接地、长horizon任务 一句话总结：SayCan通过将LLM的语言知识（什么应该做）与机器人技能的affordance（什么能做）结合，首次实现了让LLM在真实机器人上规划和执行复杂的多步任务。 论文链接：arXiv:2204.01691 代码链接：saycan 🤔 要解决什么问题？ LLM的\u0026quot;眼高手低\u0026quot;困境 大型语言模型（LLM）如GPT-3、PaLM已经展示了惊人的知识储备和推理能力。当被问到\u0026quot;我洒了饮料，你能帮忙吗？\u0026ldquo;时，LLM可以给出合理的回答：\n\u0026ldquo;你可以尝试用吸尘器清理\u0026rdquo; \u0026ldquo;对不起，我不是故意洒的\u0026rdquo;\n这些回答在语义上是合理的，但对于一个机器人来说，这些回答完全不可执行：\n机器人没有吸尘器 机器人无法理解\u0026quot;对不起\u0026quot;的含义 这些回答没有考虑机器人的实际能力 这些回答没有考虑当前环境中的可用物体 这就是所谓的**\u0026ldquo;接地问题\u0026rdquo;（Grounding Problem）**：LLM的知识是抽象的、脱离物理现实的，而机器人需要在具体环境中执行物理动作。LLM\u0026quot;知道\u0026quot;清洁溢出饮料的一般步骤，但它不知道：\n当前环境中有哪些物体可用 这些物体在哪里 机器人能否物理上接触到它们 执行某个动作的成功概率是多少 传统方法的局限 之前的方法通常采用以下两种策略之一：\n端到端学习：直接从语言指令学习到动作映射（如BC-Z）。这种方法缺乏语义推理能力，难以处理复杂指令。例如，BC-Z需要为每个任务收集大量演示数据，无法处理未见过的指令组合。\n模块化系统：将语言理解、任务规划、运动控制分开处理。这种方法虽然可解释，但模块间的接口往往脆弱且不灵活。例如，语言理解模块可能输出\u0026quot;拿起红色的杯子\u0026rdquo;，但运动规划模块可能无法处理这种抽象描述。\n纯LLM方法：直接让LLM生成动作序列。但LLM缺乏物理世界的接地知识，生成的动作可能不可行（如\u0026quot;飞到天花板上拿东西\u0026quot;）。\nSayCan的核心洞察 SayCan的核心思想是：LLM提供\u0026quot;应该做什么\u0026quot;的知识，而affordance函数提供\u0026quot;能做什么\u0026quot;的信息。两者结合，机器人就能做出既合理又可行的决策。\n这个洞察来源于一个简单但深刻的观察：人类在执行任务时，也是同时考虑\u0026quot;我想做什么\u0026quot;和\u0026quot;我能做什么\u0026quot;。当我们说\u0026quot;帮我拿一下那个杯子\u0026quot;时，我们会自动评估：杯子在哪里？我能走到那里吗？我的手能抓住它吗？SayCan将这种人类的决策过程形式化为概率框架。\n具体来说，给定一个高层指令（如\u0026quot;我洒了饮料，能帮忙吗？\u0026quot;），SayCan通过以下步骤处理：\nLLM提供语言概率：评估每个候选技能对完成任务的有用程度（如\u0026quot;找海绵\u0026quot;比\u0026quot;找杯子\u0026quot;更相关） Affordance函数提供可行性概率：评估每个技能从当前状态成功执行的概率（如\u0026quot;找海绵\u0026quot;需要先知道海绵在哪里） 两者加权选择：选择综合得分最高的技能执行 迭代执行：将执行结果反馈给系统，继续选择下一个技能，直到任务完成 💡 核心方法 整体框架 SayCan的核心公式非常简洁：\n$$a^* = \\arg\\max_{a \\in \\mathcal{A}} P_{\\text{LLM}}(a | l) \\cdot P_{\\text{affordance}}(a | s)$$其中：\n$a^*$ 是选择的最优技能 $\\mathcal{A}$ 是可用技能集合 $l$ 是用户的高层自然语言指令 $s$ 是当前环境状态 $P_{\\text{LLM}}(a | l)$ 是LLM给出的技能 $a$ 对完成指令 $l$ 的有用程度 $P_{\\text{affordance}}(a | s)$ 是从当前状态 $s$ 成功执行技能 $a$ 的概率 1. 语言模型（LLM）：提供语义知识 LLM的角色是评估每个候选技能对完成用户指令的有用程度。具体来说，SayCan使用LLM计算条件概率：\n$$P_{\\text{LLM}}(a | l) = \\frac{\\exp(\\text{score}(l, a))}{\\sum_{a' \\in \\mathcal{A}} \\exp(\\text{score}(l, a'))}$$其中 $\\text{score}(l, a)$ 是LLM对\u0026quot;给定指令 $l$，执行技能 $a$\u0026ldquo;的打分。\n关键设计：提示工程（Prompt Engineering）\nSayCan通过精心设计的提示词来获取LLM的概率估计。提示词包含：\n角色设定：告诉LLM它是一个能执行特定技能的机器人 技能列表：列出所有可用技能及其描述 示例：提供1-2个输入输出示例 当前指令：用户的高层指令 例如，对于\u0026quot;我洒了饮料，能帮忙吗？\u0026ldquo;的提示词可能如下：\nYou are a robot operating in an office kitchen. When a human asks you to do a task, you will respond with the sequence of actions you would do to accomplish the task. You can do the following: - go to the sink - go to the counter - pick up the sponge - pick up the cup - wipe the counter - ... Human: I spilled my coke, can you help? Robot: I would: 1. LLM会生成如\u0026quot;1. find a sponge 2. pick up the sponge 3. wipe the counter 4. done\u0026quot;的序列，SayCan从中提取每个技能的概率。\n2. Affordance函数：提供可行性评估 Affordance函数（也称为价值函数，value function）评估从当前状态执行某个技能的成功概率。这通常通过强化学习或模仿学习预先训练得到：\n$$P_{\\text{affordance}}(a | s) = \\exp(Q_a(s) / \\tau)$$其中 $Q_a(s)$ 是技能 $a$ 在状态 $s$ 下的Q值（预期回报），$\\tau$ 是温度参数。\nAffordance函数的关键作用：\n可行性约束：LLM可能建议\u0026quot;拿起吸尘器清理\u0026rdquo;，但如果机器人没有吸尘器，affordance会给出极低的概率 环境感知：affordance函数基于真实传感器输入（图像、状态），能感知当前环境 物理约束：考虑机器人运动学、碰撞检测等物理限制 3. 迭代规划 SayCan采用迭代式规划策略，而非一次性生成完整计划：\n用户给出高层指令 $l$ LLM和affordance函数评估所有候选技能 选择综合得分最高的技能 $a_1$ 执行 将 $a_1$ 追加到对话历史中 重新查询LLM和affordance函数，选择下一个技能 $a_2$ 重复直到输出\u0026quot;done\u0026quot;或达到最大步数 这种迭代式规划的优势在于：\n允许中途调整：每一步都可以根据新的环境状态调整计划 处理不确定性：技能执行可能失败，迭代式规划可以重新规划 更自然的交互：模拟了人类逐步思考的过程 4. PaLM-SayCan：升级到更强的LLM 在v2版本中，SayCan从FLAN升级到PaLM，带来了显著的性能提升：\n指标 FLAN-SayCan PaLM-SayCan 计划成功率 70% 84% 执行成功率 61% 74% PaLM-SayCan的改进：\n更强的语义理解能力 更好的多步推理能力 支持Chain of Thought提示 支持多语言指令 5. 新能力：Chain of Thought与多语言 PaLM-SayCan展示了多种新能力：\nChain of Thought推理：通过提示\u0026quot;Let\u0026rsquo;s think step by step\u0026rdquo;，模型能够处理需要推理的任务。例如：\u0026ldquo;帮我准备运动后的恢复餐\u0026rdquo;——模型需要推理出\u0026quot;运动后需要补充水分和能量\u0026quot;。\n多语言支持：虽然未专门设计，PaLM-SayCan能够处理中文、法语、西班牙语等多语言指令，且规划成功率几乎无下降。\n新技能集成：只需在提示词中添加新技能描述和示例，PaLM-SayCan就能使用新技能（如抽屉操作）。\n🧪 实验验证 实验设置 SayCan在两个真实厨房环境中进行了评估：\nKitchen1：训练数据收集的主要环境 Kitchen2：未见过的新环境（用于测试泛化） 评估了101个自然语言指令，涵盖多种技能组合和难度级别。\n核心实验结果 1. 定性分析 任务1：\u0026ldquo;I spilled my coke, can you bring me something to clean it up?\u0026rdquo;\nSayCan的决策过程：\nLLM认为\u0026quot;pick up sponge\u0026quot;最相关（概率最高） Affordance确认从当前位置可以执行\u0026quot;find sponge\u0026quot; 执行：find sponge → pick up sponge → bring to you → done ✓ 任务2：\u0026ldquo;I spilled my coke, can you bring me a replacement\u0026rdquo;\n语义细微差别导致完全不同的计划：\nLLM认为\u0026quot;find coke can\u0026quot;最相关 执行：find coke can → pick up coke can → bring to you → done ✓ 任务3：Affordance的\u0026quot;否决权\u0026quot;\n当LLM建议\u0026quot;pick up sponge\u0026quot;但当前位置无法执行时，affordance函数会降低其概率，转而选择\u0026quot;find sponge\u0026quot;。这展示了affordance对LLM的约束作用。\n2. 定量结果 指标 FLAN-SayCan PaLM-SayCan 计划成功率（Plan Success） 70% 84% 执行成功率（Exec Success） 61% 74% 任务完成率（Task Success） 56% 74% PaLM-SayCan相比FLAN-SayCan减少了约一半的错误。\n3. 长Horizon任务 SayCan能够处理需要16步甚至更多步骤的长horizon任务。例如：\n任务：\u0026ldquo;I just worked out, can you bring me a drink and a snack to recover?\u0026rdquo;\n规划步骤：\ngo to coke can pick up coke can go to drawer open drawer pick up chips go to human give coke can give chips done 4. Chain of Thought效果 通过Chain of Thought提示，PaLM-SayCan能够处理需要推理的任务：\n任务：\u0026ldquo;I am hungry, but I can\u0026rsquo;t eat固体食物\u0026rdquo;\n没有CoT：可能建议拿薯片（错误） 有CoT：推理出\u0026quot;不能吃固体食物→需要液体→拿果汁\u0026quot;（正确）\n5. 消融实验 论文进行了详细的消融实验，验证各组件的贡献：\n组件 移除后的计划成功率下降 Affordance函数 -31% LLM（换为随机） -40% 技能描述 -15% 示例（few-shot） -12% Affordance函数是不可或缺的组件，移除后成功率下降31%。\n🔍 个人思考 亮点 优雅的框架设计：SayCan的框架极其简洁——两个概率的乘积。这种设计既有强大的表达能力，又易于理解和实现。$P_{\\text{LLM}} \\times P_{\\text{affordance}}$ 的公式堪称经典。\n解耦的模块化架构：LLM负责语义理解，affordance负责物理可行性。这种解耦使得每个模块可以独立优化和升级。从FLAN升级到PaLM时，只需替换LLM模块，无需重新训练affordance。\n可解释性强：由于LLM和affordance的概率是可解释的，用户可以清楚地看到为什么选择某个技能。这种可解释性对于机器人部署至关重要。\n迭代式规划的实用性：相比一次性生成完整计划，迭代式规划更鲁棒，能够处理执行失败和环境变化。\nPaLM升级带来的性能飞跃：PaLM-SayCan的实验首次展示了LLM能力的提升可以直接转化为机器人性能的提升，这是一个非常重要的发现。\n局限性 技能库的限制：SayCan需要预先定义一个有限的技能库。如果用户的指令超出了技能库的能力范围，系统将无法处理。如何动态扩展技能库是开放问题。\n缺乏闭环反馈：SayCan在规划时考虑了当前状态，但在执行过程中缺乏持续的环境反馈。如果技能执行失败或环境发生变化，系统可能无法及时调整。\nLLM的幻觉问题：LLM可能生成看似合理但实际不可行的计划。虽然affordance可以过滤一部分，但仍可能有遗漏。\n计算延迟：LLM的推理延迟较高，可能影响实时性要求高的任务。特别是在迭代式规划中，每一步都需要重新查询LLM。\n对affordance函数质量的依赖：affordance函数需要预先训练，其质量直接影响系统性能。训练高质量的affordance函数本身就是一个挑战。\n缺乏物理常识：LLM可能不理解某些物理约束（如物体的重量、摩擦力等），导致不合理的计划。\n未来方向 闭环规划：后续工作Inner Monologue（Huang et al., 2022）通过引入环境反馈（成功检测器、场景描述、人类反馈）来实现闭环规划。\n动态技能扩展：如何让系统自动发现和学习新技能，而非依赖预定义的技能库。\n与RT-1/RT-2结合：SayCan作为高层规划器，与RT-1/RT-2等低级策略结合，形成完整的机器人系统。\n多模态感知：将视觉、语言、触觉等多模态信息融合到affordance评估中。\n人类反馈学习：通过人类反馈不断改进LLM和affordance函数。\n跨具身迁移：将SayCan扩展到不同类型的机器人，实现真正的通用机器人助手。\n📖 延伸阅读 Inner Monologue: Embodied Reasoning through Planning with Language Models（Huang et al., 2022）- SayCan的闭环扩展，引入环境反馈 PaLM-E: An Embodied Multimodal Language Model（Driess et al., 2023）- 将PaLM直接与传感器输入结合 RT-1: Robotics Transformer for Real-World Control at Scale（Brohan et al., 2022）- SayCan的低级策略实现 RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control（Brohan et al., 2023）- 端到端的VLA模型 CaP: Correctability and Affordance for Manipulation Policy（Huang et al., 2023）- 改进affordance学习 SayCan的Google AI Blog文章：Towards Helpful Robots: Grounding Language in Robotic Affordances Socratic Models（Zeng et al., 2022）- 相关的多模态推理方法 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/saycan%E8%AF%AD%E8%A8%80-grounding%E7%B2%BE%E8%AF%BB/","summary":"SayCan是Google提出的将大型语言模型与机器人技能结合的方法，通过将LLM的语言知识与机器人技能的可行性（affordance）结合，实现了自然语言指令到长horizon机器人任务的规划与执行。该工作首次展示了LLM如何在真实机器人上落地，开启了LLM+机器人的新范式。","title":"论文精读｜SayCan：让大型语言模型在机器人上落地执行"},{"content":"📄 论文信息 标题：VAD: Vectorized Scene Representation for Efficient Autonomous Driving 作者机构：华中科技大学（HUST） × 地平线机器人（Horizon Robotics）（Jiang, Chen, Xu, Liao, Chen, Zhou, Zhang, Liu, Huang, Wang） arXiv：2303.12077 收录：ICCV 2023 代码：github.com/hustvl/VAD 一句话总结：把驾驶场景全部向量化（地图元素、agent 运动都变成矢量），抛弃稠密栅格表示，在 nuScenes 上做到性能更强、速度快 2.5–9.3 倍。 🤔 要解决什么问题？ UniAD（CVPR 2023 最佳论文）确立了\u0026quot;以规划为导向的端到端\u0026ldquo;范式，把感知、预测、规划统一进一个网络，证明了端到端联合优化的潜力。但 UniAD 仍然有一个大包袱：稠密栅格化表征（rasterized representation）。\n无论是语义地图、占用图（occupancy）、光流图还是代价图（cost map），本质都是一张张密集的 BEV 网格图。这种表示在 UniAD 里被用于规划时的代价计算和碰撞检查。它有两个根本问题：\n痛点 具体表现 后果 计算昂贵 大量卷积处理密集像素级栅格，分辨率越高越慢 推理慢，难上车端实时系统 丢失实例结构 栅格只有像素，没有\u0026quot;这是一辆车/一条车道\u0026quot;的实例概念 约束不住规划，安全约束只能粗粒度 依赖后处理 还要手设计规则把栅格转成决策、做轨迹筛选 鲁棒性、泛化性差，规则难覆盖长尾 VAD 的灵魂拷问：自动驾驶真的需要把场景画成一张张密集的栅格图吗？人类开车看的是\u0026quot;车道线、边界、周围的车辆\u0026rdquo;，这些天然就是\u0026quot;矢量\u0026quot;概念——为什么不用向量来表示场景？ 一条车道线用几个有序点就能精确描述，何必用一张几百×几百的栅格图去近似？\n💡 核心思想：全向量化场景表征 VAD 的主张非常鲜明：\n把整个驾驶场景建模成完全向量化的表示——地图是矢量，agent 运动也是矢量——彻底抛弃密集栅格。\n向量化表征的两大优势：\n优势 说明 天然的实例级约束 矢量地图（车道线/边界）告诉车\u0026quot;往哪开、边界在哪\u0026quot;；agent 运动矢量告诉车\u0026quot;别撞谁\u0026quot;——都是精确的实例级信息 计算高效 向量数量远少于栅格像素，且省掉了手工后处理，推理飞快 VAD 用两套机制榨取向量化信息的价值：隐式通过 query 交互学特征（让自车 query 主动\u0026quot;询问\u0026quot;地图和 agent），显式通过三个向量化规划约束（把矢量直接变成可微的安全 loss）。这\u0026quot;一隐一显\u0026quot;是 VAD 设计的精髓。\n⚙️ 方法细节 整个 VAD 流水线分四阶段：骨干网络提取特征、向量化场景学习、规划交互、规划约束。\n🗺️ 向量化场景学习 VAD 用三类 query 从 BEV 特征里\u0026quot;抽\u0026quot;出实例级信息，借鉴 BEVFormer + MapTR：\nQuery 学什么 输出 BEV query BEV 编码 多视图特征压成 BEV 特征图 Agent query 每个交通参与者 agent 运动矢量（未来轨迹） Map query 地图元素（车道、边界、分隔带） 地图矢量（有序点集） 地图矢量包括车道向量（提供方向、交通流信息，帮助缩小轨迹搜索空间）和边界向量（提供可行驶边界，防止冲出路面）；agent 运动矢量则给出每个动态参与者的未来轨迹，用于碰撞约束。\n这里的关键洞察是：地图和 agent 的输出从始至终都是向量（有序点集/轨迹），而不是栅格图——这就从源头避免了\u0026quot;栅格化\u0026quot;的开销。\n🤝 规划：通过 query 交互 VAD 的规划不靠代价图、不靠规则搜索，而是用一个 ego query（自车 query） 通过注意力机制去和 map query、agent query 交互，把场景信息汇聚到 ego query 里。再结合自车状态特征（速度、加速度等）和高层驾驶指令（左转/右转/直行），由 Planning Head 直接回归出未来轨迹。\n这种\u0026quot;query 交互\u0026quot;思路很优雅：规划不再是\u0026quot;在代价图上找路\u0026quot;，而是\u0026quot;自车向周围元素发问，综合答案做决策\u0026quot;——和 Transformer 的注意力机制天然契合。这也意味着规划模块可以直接接收特征级信息，而不是上游丢掉细节的结构化结果，避免了 UniAD 里提到的\u0026quot;信息丢失\u0026quot;问题。\n🔒 三个向量化规划约束（VAD 的精髓） 这是 VAD 最有创意、也是性能提升最大的部分。仅靠轨迹回归（L2）监督远远不够安全——回归只会让轨迹\u0026quot;像真值\u0026quot;，但不会主动避让。VAD 在训练阶段额外加三个实例级约束，直接用矢量信息把轨迹\u0026quot;管\u0026quot;住：\n约束 作用 用到的矢量 ego-agent 碰撞约束 横向/纵向都和动态 agent 保持安全距离 agent 运动矢量 ego-boundary 越界约束 把轨迹推离道路边界，防止冲出路面 地图边界矢量 ego-lane 方向约束 用车道方向正则化自车未来朝向 地图车道矢量 这三个约束都是可微的，可以无缝接入端到端训练，几乎不增加推理开销——因为矢量数量少，约束计算极其便宜（相比稠密代价图的逐像素计算）。消融实验证明三者缺一不可，去掉任何一个碰撞率都显著上升。\n🏋️ 端到端训练 整个 VAD 完全可微，一次性端到端训练，无需分阶段。所有 loss（感知检测 + 在线建图 + agent 运动预测 + 三个规划约束 + 轨迹回归）联合优化，梯度从规划一路传回骨干网络。这种\u0026quot;规划目标反向驱动所有任务\u0026quot;的思想直接继承自 UniAD。\n🔬 架构细节与消融洞察 骨干网络与 BEV 编码 VAD 的前端采用标准的图像骨干 + BEV 编码器组合：多帧多视图图像先过图像骨干（如 ResNet）提特征，再用一组 BEV query 借助空间/时间注意力（参考 BEVFormer）把多视图特征压成统一的 BEV 特征图。值得注意的是，VAD 的向量化感知直接从 BEV 特征 query 出矢量结果，而不需要像 HDMapNet 那样先生成栅格语义图再后处理成矢量——这就从源头省掉了栅格化的开销。\nMap / Agent Query 的设计 地图 query 的设计借鉴 MapTR，识别地图实例点的排列不变性——一条车道线的若干点无论以什么顺序输出，都代表同一条线。这使得模型可以并行预测所有地图元素，而不必像 VectorMapNet 那样自回归逐个生成，效率更高。Agent query 则参考 DETR 系列，每个 query 负责一个潜在的交通参与者，输出其类别、位置和未来运动矢量。\n消融实验的关键发现 论文的消融研究揭示了几个有价值的现象：(1) 三个向量化约束中，ego-agent 碰撞约束对碰撞率影响最大，去掉它碰撞率几乎翻倍；(2) ego-lane 方向约束对轨迹合理性贡献明显，没有它轨迹容易出现不合理朝向；(3) 向量化地图和向量化 agent 各自都贡献正向收益，二者结合效果最佳。这些发现为后续工作的安全约束设计提供了清晰的优先级参考——先保碰撞安全，再管方向，最后抠边界。\n从 VAD 到 VADv2 的演进线索 VAD 的单模态回归局限，直接催生了后续的 VADv2——后者引入大规模轨迹词表，把\u0026quot;回归轨迹\u0026quot;转化为\u0026quot;从词表中选轨迹 + 微调\u0026quot;的分类-回归混合问题，实现多模态输出。可以看出 VAD 系列沿着\u0026quot;向量化\u0026quot;主线持续演进：第一代（本文）确立向量化范式，第二代引入多模态词表。这条线索与 SparseDrive、GoalFlow 的\u0026quot;目标点/轨迹词表\u0026quot;思路殊途同归，共同指向\u0026quot;稀疏 + 多模态\u0026quot;这个端到端规划的成熟形态。\n📊 实验结果：性能与效率双赢 VAD 在 nuScenes 上同时拿下最强性能和最高效率，对比 UniAD：\nVAD-Base（标准版） 指标 UniAD VAD-Base 提升 平均位移误差 1.03m 0.72m ↓ 30.1% 平均碰撞率 0.31% 0.22% ↓ 29.0% 推理速度 1.8 FPS 4.5 FPS 2.5× 加速 VAD-Tiny（轻量版） 指标 UniAD VAD-Tiny 说明 推理速度 1.8 FPS 16.8 FPS 9.3× 加速 平均位移误差 1.03m 0.78m 性能仍可比 平均碰撞率 0.31% 0.38% 略有牺牲 关键结论：\nVAD-Base 在性能更强的同时还快 2.5 倍——打破了\u0026quot;端到端一定慢\u0026quot;的偏见，证明了向量化表征的威力 VAD-Tiny 用 9.3× 的速度换少量精度，16.8 FPS 已经接近车端实时部署门槛（20+ FPS） 消融实验证明：三个向量化约束缺一不可，去掉任何一个碰撞率都显著上升；向量化地图和向量化 agent 各自都贡献明显 ⚖️ 与 UniAD 对比：从\u0026quot;稠密\u0026quot;到\u0026quot;稀疏\u0026quot;的范式跃迁 VAD 是 UniAD 的直接继承者也是颠覆者：\n维度 UniAD VAD 场景表示 稠密栅格（占用图、语义图、代价图） 全向量化（地图矢量 + 运动矢量） 轨迹约束 隐式 + 代价图后处理 三个显式实例级约束 后处理 有手设计规则 无，纯端到端 推理速度 慢（1.8 FPS） 快（4.5–16.8 FPS） 实例结构 像素级，丢失实例 实例级，保留结构 核心思想 统一所有任务 统一 + 向量化提效 VAD 的贡献在于：它证明了\u0026quot;向量化不仅能更快，还能更准更安全\u0026quot;。这为后来的 SparseDrive、VADv2 等一系列\u0026quot;稀疏/向量化\u0026quot;工作铺平了道路——可以说 VAD 开启了端到端驾驶的\u0026quot;稀疏化时代\u0026quot;。地平线团队（Horizon Robotics）也凭借这条技术路线，把研究成果推向了量产。\n⚠️ 优势与局限 ✅ 优势 效率革命：抛弃栅格后推理快 2.5–9.3×，首次让端到端方案具备车端部署潜力 实例级安全约束：三个向量化约束直接针对碰撞/越界/方向，可解释且有效 完全端到端：无手工后处理，梯度从规划贯通回骨干 代码完全开源：hustvl/VAD 社区影响力大，是后续大量工作的基线 ❌ 局限 仍依赖稠密 BEV query 编码，BEV 部分仍是计算大头（SparseDrive 进一步把 BEV 也去掉） 轨迹是回归输出，单模态，无法表达\u0026quot;可左转也可直行\u0026quot;的多选择场景（VADv2 才引入多模态词表） 主要在 nuScenes 开环 验证，闭环性能待考察 向量化感知对复杂拓扑（如环岛、多岔路口）的建模仍有限 📝 个人思考 VAD 的历史定位：把 VAD 放在时间轴上看，它是端到端驾驶从\u0026quot;稠密\u0026quot;走向\u0026quot;稀疏\u0026quot;的关键转折点。UniAD 证明了\u0026quot;端到端统一\u0026quot;可行，但太重；VAD 证明了\u0026quot;向量化\u0026quot;可以让端到端既快又准；之后的 SparseDrive 把向量化推到极致（连 BEV 都省了），VADv2 引入大规模轨迹词表做多模态。这条演进路线非常清晰，而 VAD 是承上启下的枢纽。它也奠定了地平线团队在端到端驾驶领域的领先地位。\n向量化是\u0026quot;物理先验\u0026quot;的胜利：VAD 之所以快又准，本质是把驾驶场景的天然结构（车道、边界、车辆都是实例）作为归纳偏置（inductive bias）注入模型。这比让网络从像素里硬学结构要高效得多。这个思想在后续工作（GoalFlow 的目标点词表、SparseDrive 的稀疏 query）里反复出现——用对先验，比堆参数更重要。这也是为什么端到端驾驶不会走向\u0026quot;完全黑盒\u0026quot;，而是\u0026quot;结构化表征 + 端到端优化\u0026quot;的折中。\n对我们 Flow-GRPO 工作的启示：VAD 的三个规划约束本质是\u0026quot;硬编码的安全先验\u0026quot;。在做强化学习优化时，这些约束可以天然转化为奖励函数——碰撞约束 ↔ 碰撞惩罚、越界约束 ↔ 越界惩罚、方向约束 ↔ 偏航惩罚。VAD 提供了一份现成的\u0026quot;安全 prior 清单\u0026quot;，可以直接迁移到 RL 的奖励设计里。相比于从零设计奖励，借鉴 VAD 这种经过验证的约束体系，能让 RL 训练更稳定、更安全。\n单模态回归的天花板：VAD 用回归输出单条轨迹，在简单场景没问题，但在\u0026quot;可左转也可直行\u0026quot;的多选择路口就显得别扭——这也是后来 GoalFlow、SparseDrive 都转向多模态生成的根本原因。VAD 的局限恰恰催生了下一代工作，这就是好的基础研究的价值：它不仅解决问题，更暴露出新的问题。\n📖 论文精读系列。VAD 建议和 UniAD（前作）、SparseDrive（后继）、GoalFlow（多模态延伸）串起来读，能看清端到端驾驶\u0026quot;稀疏化\u0026quot;演进的全貌。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/vad%E5%90%91%E9%87%8F%E5%8C%96%E7%AB%AF%E5%88%B0%E7%AB%AF%E7%B2%BE%E8%AF%BB/","summary":"VAD 将整个驾驶场景建模为全向量化表示——地图元素和 agent 运动都变成矢量，彻底抛弃了 UniAD 中的稠密栅格。它通过隐式 query 交互和显式三个向量化规划约束，在保持精度的同时将推理速度提升 2.5-9.3 倍。作为 UniAD 之后最重要的效率改进工作，VAD 为端到端驾驶的实时部署铺平了道路。","title":"论文精读｜VAD：向量化端到端自动驾驶的效率革命"},{"content":"🎯 一句话理解 RLHF RLHF = 先让人给模型的输出打分，然后训练一个\u0026rsquo;打分模拟器\u0026rsquo;（reward model），最后用 PPO 让模型学会产出高分输出。本质上就是用人类的偏好来做强化学习的 reward 函数。\nRLHF 让大模型从\u0026quot;只会模仿文本\u0026quot;进化到\u0026quot;懂得人类偏好\u0026quot;，是 ChatGPT/GPT-4 能力飞跃的核心技术。2025 年以来，它正在被系统性地引入自动驾驶——因为\u0026quot;怎么开车算好\u0026quot;本质上是一个人类偏好问题。\n🏗️ RLHF 的标准三阶段流程 RLHF 的完整流程分为三个阶段，每一阶段解决一个特定的子问题。\nStage 1：SFT——先让模型学会\u0026quot;说人话\u0026quot; 监督微调（Supervised Fine-Tuning） 是 RLHF 的起点。在大规模预训练的基础上，用高质量的人类示范数据（如 prompt + 理想回答）对模型做行为克隆。\nSFT 的目标很简单：让模型学会符合人类预期的输出格式和内容。在驾驶场景中，这一步对应着用人类驾驶日志训练 VLA 模型输出合理的驾驶轨迹——让模型先学会\u0026quot;正常开车\u0026quot;。\nSFT 的局限：模型只是模仿人类做了什么，而不是理解人类为什么这么做。更重要的是，SFT 无法处理开放性问题中的偏好多样性——同一个问题可能有很多合理的回答，人类各有偏好。\nStage 2：Reward Model 训练——学会\u0026quot;人类的品味\u0026quot; 第二阶段是最关键的创新：训练一个 reward model（RM）来模拟人类偏好。\n数据采集 收集人类对模型输出的偏好对（preference pairs）：\n给定一个 prompt，让模型生成 $K$ 个回答（$K$ 通常为 2~9） 人类标注者对这些回答做两两比较（哪个更好） 收集大量这样的偏好对形成数据集 Bradley-Terry 模型 RM 的核心是 Bradley-Terry 模型——一个经典的成对比较概率模型：\n$$P(y_1 \\succ y_2) = \\frac{\\exp(r(y_1))}{\\exp(r(y_1)) + \\exp(r(y_2))}$$其中 $r(y)$ 是 reward model 对输出 $y$ 给出的标量分数。Bradley-Terry 模型把\u0026quot;人类偏好 A 胜过 B 的概率\u0026quot;建模为两个 exponential 分数的比值。\nRM 通过最大化偏好对的 log-likelihood 来训练：\n$$\\mathcal{L}_{\\text{RM}} = -\\mathbb{E}_{(y_1, y_2) \\sim \\mathcal{D}}\\left[\\log \\sigma(r(y_1) - r(y_2))\\right]$$其中 $\\sigma$ 是 sigmoid 函数。这个损失函数很优雅——它只需要相对比较而不需要绝对分数，人类标注员只需要说\u0026quot;A 比 B 好\u0026quot;而不用给出具体评分。\nElo 评分 在 reward model 之外，另一种评估偏好质量的方法是 Elo 评分，源自国际象棋的排名系统：\n初始化所有模型/策略为相同的 Elo 分 每次比较后，获胜方从落败方\u0026quot;抢走\u0026quot;一定分数 分数差决定抢分多少：实力相近的对局，分值变化大；实力悬殊的对局，分值变化小 Elo 在自动驾驶领域被用于评估不同驾驶策略的相对好坏——让人类对一对驾驶片段（轨迹可视化）做比较，生成策略的 Elo 排名。\nStage 3：PPO 优化——让模型追求高分 有了 reward model，RLHF 的第三步就是把 RM 当做 reward 函数，用 PPO 优化策略：\n$$\\mathcal{L}_{\\text{RLHF}} = \\mathbb{E}_{t}\\left[\\min(r_t \\hat{A}_t,\\ \\text{clip}(r_t, 1-\\epsilon, 1+\\epsilon) \\hat{A}_t)\\right] - \\beta\\ \\mathbb{KL}(\\pi_\\theta \\| \\pi_{\\text{SFT}})$$KL 约束 $\\mathbb{KL}(\\pi_\\theta \\| \\pi_{\\text{SFT}})$ 在这里至关重要：它把策略\u0026quot;拴\u0026quot;在 SFT 模型附近，防止模型为了追求高 reward 产出 nonsense（reward hacking）。\n三阶段总结 阶段 目标 数据 模型 SFT 基础能力对齐 人类示范 Policy RM 训练 学会偏好 偏好对 Reward Model PPO 策略优化 模型生成 + RM 评分 Policy + Critic 🎯 DPO：去掉奖励模型的直接偏好优化 DPO（Direct Preference Optimization）是 RLHF 的一个重要变体，它完全绕过了显式的 reward model 训练。\n核心洞察 DPO 的作者发现：RLHF 的 reward model + PPO 优化本质上等价于在偏好数据上直接优化某种损失函数。他们推导出，最优策略 $\\pi^*$ 可以表示为：\n$$\\pi^*(y|x) \\propto \\pi_{\\text{SFT}}(y|x) \\cdot \\exp\\left(\\frac{1}{\\beta} r^*(x,y)\\right)$$反解出 reward：\n$$r^*(x,y) = \\beta \\log \\frac{\\pi^*(y|x)}{\\pi_{\\text{SFT}}(y|x)} + \\beta \\log Z(x)$$把这个 reward 代入 Bradley-Terry 模型，得到 DPO 损失：\n$$\\mathcal{L}_{\\text{DPO}} = -\\mathbb{E}_{(y_w, y_l) \\sim \\mathcal{D}}\\left[\\log \\sigma\\left(\\beta \\log \\frac{\\pi_\\theta(y_w|x)}{\\pi_{\\text{SFT}}(y_w|x)} - \\beta \\log \\frac{\\pi_\\theta(y_l|x)}{\\pi_{\\text{SFT}}(y_l|x)}\\right)\\right]$$ 符号 含义 $y_w$ 人类偏好的回答（win） $y_l$ 人类不偏好的回答（lose） $\\beta$ 控制对偏好的拟合强度 RLHF vs DPO 维度 RLHF DPO 流程 SFT → RM → PPO SFT → DPO 需要的模型 Policy + RM + Critic 仅 Policy 训练稳定性 三阶段配合复杂 端到端简单 表达能力 可训练独立 reward reward 隐式编码在 policy 比 适用场景 需要显式 reward 分析时 纯偏好对齐 DPO 的出现极大地降低了偏好对齐的工程门槛。尤其是在驾驶场景中——如果我们只有\u0026quot;哪条轨迹更好\u0026quot;的人类偏好数据，DPO 可以直接优化策略，不需要设计 reward 函数。\n🚗 RLHF 在自动驾驶中的应用 驾驶风格的偏好本质 \u0026ldquo;怎么开车算好\u0026quot;没有一个客观标准。同一个人今天可能想开得激进些，明天想开得平稳些。驾驶本质上是一个偏好问题——而 RLHF 恰恰擅长处理偏好对齐。\n驾驶风格 偏好特征 RLHF 映射 激进型 快速起步、早加速、跟车近 偏好 reward 偏向效率 保守型 提前刹车、安全距离大 偏好 reward 偏向安全 舒适型 加速度小、转向平滑 偏好 reward 偏向舒适度 生态型 匀速驾驶、能量回收 偏好 reward 偏向能耗 Driver-Specific Style Learning 让 VLA 模型学会适应不同驾驶风格是一个活跃的研究方向。基本方案是：\n偏好采集：让驾驶员在仿真器中对比两段轨迹（同一场景），选择更符合自己风格的选项 风格编码：将偏好信息编码为风格 token（如 one-hot 向量或潜在 embedding），传入 VLA 模型 RLHF 训练：用收集的偏好数据训练 reward model，然后用 PPO 或 DPO 优化带风格条件化的策略 结果：一个模型可以输出多种风格的驾驶轨迹——输入\u0026quot;激进\u0026quot;token 就开得快但变道多，输入\u0026quot;保守\u0026quot;token 就保持大安全距离。\nDPR：Direct Preference-based RL DPR（Direct Preference-based RL）把 DPO 的思想扩展到连续控制场景。它直接从轨迹偏好对中学习策略，不需要显式 reward 函数：\n$$\\mathcal{L}_{\\text{DPR}} = -\\mathbb{E}_{(\\tau_w, \\tau_l) \\sim \\mathcal{D}}\\left[\\log \\sigma\\left(\\beta \\sum_{t} \\log \\frac{\\pi_\\theta(a_t^w|s_t^w)}{\\pi_{\\text{ref}}(a_t^w|s_t^w)} - \\beta \\sum_{t} \\log \\frac{\\pi_\\theta(a_t^l|s_t^l)}{\\pi_{\\text{ref}}(a_t^l|s_t^l)}\\right)\\right]$$这里 $\\tau_w$ 和 $\\tau_l$ 是完整的驾驶轨迹（整段或片段）。DPR 的核心在于去掉了 reward model 这个中间人，直接从人类的轨迹偏好跳到策略优化。\n关键工作 工作 方法 驾驶场景 特色 Driver-specific RLHF 标准 RLHF + 风格 token 城市驾驶 多风格驾驶生成 DPR for Driving 直接偏好优化 车道保持 + 变道 无需 reward model DrivePrefer 偏好奖励 + CQL 安全关键场景 偏好引导保守策略 ⚡ GRPO 的独特优势：可验证 Reward GRPO 的出现为 RLHF 提供了一个全新路径：当 reward 是可验证的（collision check, comfort metric）时，不需要 RM 也不需要 PPO 的 critic。\n标准 RLHF vs GRPO 路径 路径 需要 RM 需要 Critic 适用场景 标准 RLHF ✅ ✅ 偏好主观（文本风格） DPO ❌ ❌ 偏好数据充分 GRPO ❌ ❌ reward 可客观计算 GRPO 在驾驶场景中的好处：\n不需要人类标注偏好：碰撞、舒适度等指标可以自动计算 不需要训练 reward model：直接使用可验证函数 不需要 critic 网络：使用组内相对优势 端到端更简洁：从驾驶场景直接到策略更新 驾驶中可验证 Reward 的例子 Reward 维度 计算方法 是否可验证 碰撞检测 bounding box 交并比 ✅ 完全客观 车道偏移 横向位移阈值检查 ✅ 完全客观 限速合规 当前速度 vs 限速 ✅ 完全客观 舒适度 加速度/急动度 ✅ 基于公式 社会接受度 跟车距离 ✅ 基于规则 风格偏好 激进程度 ❌ 需要主观判断 GRPO + 可验证 Reward 的简洁管线 驾 驶 场 景 → 采 样 G 条 轨 迹 → 自 动 计 不 算 需 要 r 人 e 类 w 、 a 不 r 需 d ↑ 要 → R M G 、 R 不 P 需 O 要 更 c 新 r 策 i 略 t i c 这种简洁性使得 GRPO 在自动驾驶 RL 中的工程可落地性远高于标准 RLHF。AlphaDrive 和 Flow-GRPO 的成功证明了这条路径的有效性。\n💡 关键洞察：偏好对齐对驾驶为什么\u0026quot;天然适配\u0026rdquo;？ 驾驶行为的多样性 驾驶不像数学题——没有\u0026quot;唯一正确答案\u0026quot;。同一个路口，不同司机的通过方式截然不同：\n新手会减速、观察、小心翼翼 老手会带着速度滑行通过 激进者可能在黄灯最后一秒冲过去 所有这些行为都可能\u0026quot;合法\u0026quot;且\u0026quot;安全\u0026quot;，只是偏好不同。这恰恰是偏好对齐的舒适区——RLHF 不用定义\u0026quot;哪个是对的\u0026quot;，只需要知道\u0026quot;哪个被偏好\u0026quot;。\n偏好对齐的三层意义 层级 含义 RLHF 技术 个体化 不同人有不同偏好 条件化策略 + 偏好 RM 场景化 同一人在不同场景偏好不同 场景感知 reward 加权 安全边界 偏好不能突破安全红线 硬约束 + CQL 保守底限 偏好学习的未来方向 多模态偏好：结合语言 feedback 和视觉 feedback——\u0026ldquo;开得太靠右了，往左靠一点\u0026rdquo; 持续对齐：随着用户驾驶风格的逐渐了解，策略持续适配 群体偏好聚合：如何从多个驾驶员的偏好中学习一个通用但可定制的策略 📝 个人思考 RLHF 在 LLM 上的成功证明了\u0026quot;人类偏好作为 reward\u0026quot;的有效性——它比任何人工设计的 objective 更贴近真实需求。我认为这个洞察对自动驾驶同样成立。数十年来，自动驾驶的控制策略都是用工程化的 metric（横向误差、加速度、燃油经济性）来优化，这些指标虽然客观，但失去了\u0026rsquo;人到底觉得怎么开车舒服\u0026rsquo;这个本质问题。\n但 RLHF 引入驾驶也面临更大的挑战：LLM 的输出可以廉价地让数千标注员打分，而驾驶轨迹的偏好标注需要模拟器回放、需要专家判断、成本高得多。GRPO 和可验证 reward 的组合某种程度上绕过了这个成本瓶颈——对碰撞、舒适度、合规性等维度可以自动化打分，只有当风格偏好等主观维度需要人类介入。\n我的判断是：在自动驾驶 VLA 的 RL 微调中，RLHF 不会完全替代传统的 reward 设计，而是补充它。安全的底限用可验证 reward 保证（GRPO），风格的偏好用人类标注拟合（DPO），两者结合才能既有安全保障又能满足个性化需求。\n📖 这是知识点拆解系列的第 13 篇。驾驶不仅是技术问题，更是偏好问题——RLHF 让车学会\u0026quot;开得像你喜欢的样子\u0026quot;。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/rlhf%E4%B8%8E%E5%81%8F%E5%A5%BD%E5%AF%B9%E9%BD%90%E8%AF%A6%E8%A7%A3/","summary":"RLHF 通过人类偏好反馈将模型行为对齐到人类期望。本文详解 RLHF 三阶段流程、Bradley-Terry 奖励模型、DPO 直接偏好优化，并分析 GRPO 如何避免显式 reward 建模。在驾驶场景中，偏好对齐天然适配\u0026rsquo;不同人有不同驾驶风格\u0026rsquo;这一人类直觉——有人偏好激进、有人偏好保守，RLHF 让 VLA 模型学会按需生成驾驶行为。","title":"知识点拆解｜RLHF 与偏好对齐详解：从大模型到自动驾驶驾驶风格学习"},{"content":"🎯 一句话理解多模态对齐 多模态对齐 = 让\u0026rsquo;一张狗图\u0026rsquo;和\u0026rsquo;a dog\u0026rsquo;这两个完全不同模态的信号，在同一个语义空间中距离尽可能近。\n没有对齐，LLM 看到的图像特征就是\u0026quot;乱码\u0026quot;——视觉 token 和文本 token 不在同一个空间里。\n🔗 三种对齐方案 方案一：对比学习（CLIP 式） 粒度：粗（图像↔文本描述） 损失：InfoNCE——拉近 N 个正对，推远 N²-N 个负对\n图 像 特 征 相 似 [ 度 I 矩 ₁ 阵 , . ↓ S . . ( , N I × _ N N ) ] — 文 目 本 标 特 ： 征 最 大 [ 化 T 对 ₁ 角 , 线 . . . ↓ , T _ N ] 对比学习的核心是构造正负样本对。正对是匹配的图文对，负对是 batch 内所有不匹配的组合。训练目标是让正对的相似度大于所有负对。CLIP 使用的 InfoNCE 损失本质上是 (N-way) softmax 分类——从 N 个候选中选出正确的匹配。\nVLA 应用：CLIP/SigLIP 的 ViT 是视觉编码器的事实标准。SigLIP（sigmoid 损失）用逐对 sigmoid 替代 batch softmax，训练更稳定且不依赖大 batch，是当前首选。\n方案二：Q-Former 桥接（BLIP-2 式） 粒度：中（query 提取关键区域） 参数量：~188M\nV i T → p a t c h 特 征 L → L M Q - ↓ 输 F 入 o 交 r 叉 m 注 e 意 r 力 （ 3 + 2 自 l 注 e 意 a 力 r n a b l e q u e r i e s ） Q-Former 的设计哲学是\u0026quot;用少量的可学习参数做信息瓶颈\u0026quot;——32 个 query 必须从 ~256 个 patch 特征中压缩出最重要的信息，这种压缩迫使 Q-Former 学会选择性关注。三阶段训练逐步解锁冻结模块，保证对齐质量。参数量少但效果好，缺点在于推理延迟（Q-Former 串行前向 + 交叉注意力计算）。\n方案三：MLP 投影（LLaVA 式） 粒度：中（patch 级） 参数量：~5M（2 层 MLP）\n图 文 像 本 → → V T i o T k e → n i p z a e t r c h → 特 文 征 本 嵌 → 入 M → L P ↑ → L L M 嵌 入 空 间 核心洞察：LLM 足够强时，一个简单 MLP 就能把视觉特征\u0026quot;翻译\u0026quot;成 LLM 能理解的格式。这个假设后来被证明基本正确——LLaVA-1.5 仅用 600K 数据训练就能达到 GPT-4V 水平的 90%+ 性能。这是当前 VLA 最主流的对齐方案。\nLLaVA 的投影层设计细节：ViT 输出的每个 patch 特征（如 ViT-L/14 输出 257 个 1024 维向量）通过 2 层 MLP 映射到 LLM 的嵌入维度（如 4096），中间层使用 GELU 激活。投影后的视觉 token 序列与文本 token 序列直接拼接送入 LLM，视觉 token 沿用 ViT 的位置编码信息。\n三者对比 维度 CLIP 对比 Q-Former LLaVA MLP 粒度 粗 中 中 参数量 0 ~188M ~5M 推理延迟 最低 中 低 驾驶 VLA 使用 视觉编码器 较少 最主流 趋势：LLM 越强，对齐模块越简单。CLIP → Q-Former → MLP，路越走越\u0026quot;短\u0026quot;。\n🛠️ 指令微调 将模型格式化为 (指令, 图像, 回答) 三元组做 SFT：\nU A s s e s r i : s t \u0026lt; a i n m t a : g e 前 \u0026gt; 方 描 3 述 0 当 前 米 交 有 通 施 场 工 景 锥 桶 ， 车 道 封 闭 . . . 驾驶指令数据 驾驶指令数据相比通用 VQA 数据需要更多的因果推理和空间理解：\n类型 示例 能力需求 场景描述 \u0026ldquo;描述当前交通场景\u0026rdquo; 视觉理解 危险识别 \u0026ldquo;有哪些潜在危险？\u0026rdquo; 场景+常识 决策推理 \u0026ldquo;你会怎么做？为什么？\u0026rdquo; 因果推理 动作执行 \u0026ldquo;输出转向角 0.3\u0026rdquo; 视觉-动作映射 数据构建策略 方法 说明 适用阶段 已有 VQA 格式化 将现有 VQA 数据转为指令格式 预训练/通用微调 GPT-4V 蒸馏 用强模型生成驾驶 QA 数据 驾驶特定数据 人类标注 驾驶专家标注场景 QA 高质量小规模 Self-Instruct 模型自己生成问答对 数据扩展 🚗 VLA 的特殊对齐：图像 → 动作 VLM 终点是文本（LLM 擅长的输出空间），VLA 终点是连续动作（LLM 没见过的输出空间）。这引入了\u0026quot;输出对齐\u0026quot;问题。\n策略一：动作 Token 化（Action Tokenization） 把连续动作离散化为 token，复用 LLM 的自回归生成机制。\n原 → → 始 ： 2 t s 5 o t 6 k e e e b n r i ： = n \u0026lt; 0 s s . t 3 离 e 5 散 e , 化 r ： _ t s 8 h t 9 r e \u0026gt; o e \u0026lt; t r t t [ h l 8 r e 9 o = ] t 0 , t . l 6 t e , h _ r 1 b o 5 r t 3 a t \u0026gt; k l \u0026lt; e e b = [ r 0 1 a . 5 k 0 3 e ] _ , 0 \u0026gt; b r a k e [ 0 ] 维度 说明 精度 中（有量化误差） 速度 慢（自回归生成） 训练 交叉熵（与文本相同） 代表 RT-2, OpenVLA EMMA（Wayve） 把路线上推到极致：目标框、车道线、轨迹点全部用文本 token 表示，统一感知+预测+规划。\n策略二：分离式动作头（Action Head） LLM 输出特征通过独立的动作头生成连续动作。\nL - - - L M M D F L i l → P f o f w [ 回 u A 归 s M c （ i a t 快 o t i ， n c o 但 h n 去 i m 噪 n H o （ g e d 高 （ a e 精 表 d 度 达 ] a ， 力 v 多 最 → e 模 强 r 态 ） 连 a ） 续 g 动 i 作 n g ） 维度 说明 精度 高（连续输出） 速度 快（MLP）/ 慢（扩散） 代表 DiffusionDrive, π0 DriveVLM 双头设计：一个 LLM 同时驱动 CoT 文本头和 Waypoint MLP 头，兼顾可解释性和执行精度。这种设计中，CoT 文本头负责输出场景理解过程（可解释），Waypoint 头负责输出精确轨迹坐标（可执行），两者共享 LLM 的中间特征。\nEMMA 的统一 token 化路线：Wayve 的 EMMA 把路线推到极致——目标框坐标 (x, y, w, h)、车道线点序列、规划轨迹点全部离散化为文本 token，一个模型用纯文本生成方式输出所有任务结果。这种做法最大的优势是任务间信息共享——planning 的注意力可以 attend 到 detection 的输出 token。\n维度 Token 化 Action Head 精度 中（量化误差） 高 速度 慢（自回归） 快（扩散除外） 多模态 弱 强 实现 低 高 🧪 驾驶对齐的特殊挑战 维度 通用 VLM 驾驶 VLA 输入对齐 单图↔文本 多视角↔驾驶语义+空间 输出对齐 文本 推理+轨迹/转向 对齐粒度 场景级 场景+物体+空间 关键技术详解 BEV 对齐：多视角图像通过可变形注意力或 IPM 映射到 Bird\u0026rsquo;s Eye View 空间，在 BEV 中做视觉-语言对齐。代表工作 BEVFormer 展示了 BEV 特征在端到端驾驶中的有效性。\n时序对齐：单帧图像缺乏动态信息（前车刹车灯、行人运动趋势）。常见做法是多帧输入 + 时序自注意力 / 3D Conv。DriveVLM 输入前后 2 秒共 6 帧，在视觉层融合时序。\n空间对齐：自动驾驶需要精确的 3D 空间位置。一种方案是将 3D 坐标编码为额外 token 输入 LLM；另一种方案是直接在 BEV 特征上进行对齐。\n安全对齐：VLA 的动作必须满足安全约束。通过在 RLHF/DPO 阶段加入安全 reward（碰撞惩罚、违反交规惩罚），让模型学会\u0026quot;不安全就不做\u0026quot;。\n对齐效果评估 指标 测量内容 典型方法 Retrieval R@1 图文检索 CLIP 式对比 VQA 准确率 视觉问答 VQAv2 碰撞率 规划质量 仿真回放 CoT 一致性 推理与动作是否一致 BLEU / 人工 ✅ 小结 三种对齐方案：CLIP 对比（粗）、Q-Former 桥接（精）、LLaVA MLP（简），后者当前主流 对齐趋势：LLM 越强，对齐模块越简单 VLA 特殊对齐：输出对齐从\u0026quot;文本\u0026quot;扩展到\u0026quot;动作\u0026quot;，有 Token 化和 Action Head 两种策略 驾驶对齐需要多视角+时序+空间多维对齐 📖 知识点拆解系列第 13 篇。下一篇：Chain-of-Thought 推理详解。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E5%A4%9A%E6%A8%A1%E6%80%81%E5%AF%B9%E9%BD%90%E4%B8%8E%E6%8C%87%E4%BB%A4%E5%BE%AE%E8%B0%83%E8%AF%A6%E8%A7%A3/","summary":"多模态对齐是 VLA 的\u0026rsquo;关键桥梁\u0026rsquo;——它决定视觉信号能否被 LLM 正确理解。本文梳理从对比损失（CLIP）到 Q-Former（BLIP-2）到 MLP 投影（LLaVA）的对齐方案演进，以及 VLA 如何将对齐从\u0026rsquo;图像→文本\u0026rsquo;扩展到\u0026rsquo;图像→动作\u0026rsquo;，详解连续动作的 tokenization 策略。","title":"知识点拆解｜多模态对齐与指令微调详解：从 VLM 到 VLA 的关键桥梁"},{"content":"🎯 引言：RL在自动驾驶中的位置 强化学习（Reinforcement Learning, RL）是继监督学习之后最具潜力的自动驾驶训练范式。与模仿学习（Imitation Learning, IL）从专家数据中学习不同，RL 通过试错交互自主优化策略，理论上可以超越人类驾驶水平。\n本文聚焦通用 RL 基础，与 GRPO（Group Relative Policy Optimization）等偏 R1/VLA 的方法做清晰区分。\n🧱 MDP：强化学习的数学框架 五元组定义 几乎所有 RL 问题都可以建模为马尔可夫决策过程（Markov Decision Process, MDP），由五元组 (S, A, P, R, γ) 定义：\n符号 名称 含义 S 状态空间 环境的所有可能状态 A 动作空间 智能体可执行的动作 P(s\u0026rsquo;|s,a) 状态转移概率 执行 a 后进入 s\u0026rsquo; 的概率 R(s,a) 奖励函数 在 s 执行 a 获得的立即奖励 γ 折扣因子 [0,1]，平衡近期与远期奖励 自动驾驶 MDP 建模 在自动驾驶场景中，MDP 的元素对应：\nS：自车状态 + 周围障碍物 + 道路拓扑 A：方向盘转角 + 油门/刹车开度 P：其他车辆的交互行为（非完全可控） R：安全性 + 效率 + 舒适性的加权组合 γ：通常取 0.95~0.99 核心假设：马尔可夫性 \u0026ldquo;未来只取决于当前状态，与历史无关\u0026rdquo;——这意味着状态表示必须充分统计。在自动驾驶中，仅靠单帧感知不够，通常需要叠加历史多帧或使用时序融合来满足马尔可夫性。\n📊 价值函数与策略 策略 π(a|s) 策略是 RL 要学习的核心：给定状态 s，选择动作 a 的概率分布。\n确定性策略：a = μ(s)，如 DDPG 随机策略：a ∼ π(·|s)，如 PPO、SAC 价值函数 函数 符号 定义 用途 状态价值 V(s) 从 s 出发的期望回报 评估状态好坏 动作价值 Q(s,a) 在 s 执行 a 的期望回报 评估动作好坏 优势函数 A(s,a) Q(s,a) - V(s) 衡量动作相对优劣 优势函数是策略梯度方法中的关键概念：$A(s,a) \u003e 0$ 表示当前动作优于平均水平，应提高其被选中的概率。\n🔁 RL 算法谱系 1. 基于价值的算法 (Value-Based) 核心思路：学习最优 Q 函数，策略由 Q 隐式导出。\n代表算法：DQN (Deep Q-Network)\nDQN 的两大创新：\n经验回放 (Replay Buffer)：打破数据相关性 目标网络 (Target Network)：稳定训练目标 2. 基于策略的算法 (Policy-Based) 核心思路：直接参数化策略 π_θ，用梯度上升优化。\n策略梯度定理： $$ \\nabla_\\theta J(\\theta) = \\mathbb{E}[\\nabla_\\theta \\log \\pi_\\theta(a|s) \\cdot Q^{\\pi_\\theta}(s,a)] $$核心直觉：让好的动作更大概率被选，坏的动作更小概率。\n3. Actor-Critic 架构 融合两者优势：Actor（策略网络）负责选动作，Critic（价值网络）负责评估。\n🚀 PPO：工程界最爱的 RL 算法 为什么需要 PPO？ 普通策略梯度存在两大问题：\n步长敏感：步长过大 → 策略崩坏，步长过小 → 收敛慢 样本效率低：每个样本只用一次 PPO 的核心机制：Clipped Surrogate Objective PPO 通过裁剪限制策略更新的幅度：\nL _ c l i p = m i n ( r ( θ ) A , c l i p ( r ( θ ) , 1 - ε , 1 + ε ) A ) 其中 r(θ) = π_θ(a|s) / π_old(a|s) 是新旧策略的比率。\n直观理解：当新策略偏离旧策略太远时，裁剪掉更新信号，防止一步更新过大。\nPPO 的自动驾驶应用 PPO 在自动驾驶中常用于决策层训练：\n车道保持与变道决策 交叉路口通行策略 多车交互博弈 🔄 SAC vs DDPG vs PPO：核心对比 特性 PPO SAC DDPG 策略类型 随机 随机 + 最大熵 确定性 适用动作 离散/连续 连续 连续 样本效率 中 高 中 稳定性 高 高 中 探索机制 策略随机性 熵正则化 OU噪声 离线可用 ❌ ❌ ✅ (变体) SAC (Soft Actor-Critic) 的核心创新：在优化目标中加入策略熵 H(π(·|s))，鼓励探索的同时避免陷入局部最优。在自动驾驶模拟器训练中，SAC 通常取得比 PPO 更高的样本效率。\nDDPG (Deep Deterministic Policy Gradient) 使用确定性策略，适合连续控制任务，但对超参数敏感。其升级版 TD3 通过双 Q 网络 + 延迟更新大幅提升了稳定性。\n🔄 模仿学习 vs 强化学习 模仿学习不能算严格意义上的RL，但它们的目标高度重叠。\n维度 模仿学习 (IL) 强化学习 (RL) 数据来源 专家轨迹 自探索 奖励信号 隐含在专家动作中 显式奖励函数 性能上限 ≤ 专家水平 可超越专家 分布偏移 ❌ 严重 ✅ 可处理 样本效率 高 低 最佳实践：先用 IL 预训练策略，再用 RL fine-tune。这在自动驾驶领域已经成为标准范式。\n🏆 Reward Shaping：设计的艺术 稀疏与稠密奖励 稀疏奖励：仅在任务完成时 +1，其余为 0 → 难探索 稠密奖励：每一步都有反馈 → 引导性强，但可能引入偏差 自动驾驶中的奖励设计 典型奖励函数构成：\nR = w ₁ R _ s a f e t y + w ₂ R _ e f f i c i e n c y + w ₃ R _ c o m f o r t + w ₄ R _ p r o g r e s s + w ₅ R _ t a s k 奖励项 计算方式 目标 R_safety 碰撞= -100, TTC \u0026lt; 阈值 = -10 避免碰撞 R_efficiency 速度接近目标 通行效率 R_comfort -|jerk|, -|steering_rate| 乘客舒适 R_progress 沿道路前进距离 完成任务 Reward Hacking 是实践中最大的坑：智能体总会找到设计者没想到的\u0026quot;作弊\u0026quot;方式获取高奖励。例如为了追求效率奖励，学会贴近前车行驶（危险）。\n🧩 RL 在自动驾驶中的关键应用 应用层 具体任务 常用算法 挑战 行为决策 换道/汇入/超车 PPO, SAC 多车交互建模 运动规划 轨迹生成 DDPG, TD3 安全约束保证 纵向控制 跟车/ACC PPO 舒适性平衡 联合训练 感知→控制端到端 DreamerV3 可解释性 Sim-to-Real 是 RL 落地自动驾驶的最大障碍：模拟器中训练的策略在真实道路上的表现会因仿真差距（Simulation Gap）而大幅下降。常用缓解方法包括域随机化（Domain Randomization）、系统识别、以及渐进式迁移。\n💭 个人思考 RL 在自动驾驶领域的地位有点像\u0026quot;期望很大，落地不易\u0026quot;。几个关键观察：\nRL 强于决策，弱于安全 — 自动驾驶的安全要求（10⁻⁹ 失效率）远超 RL 能提供的形式化保证 模拟器质量决定 RL 上限 — 没有高保真模拟器，RL 策略就只是\u0026quot;仿真冠军\u0026quot; Reward 设计是瓶颈 — 自动驾驶是多目标权衡问题，单标量奖励很难完美表达人类偏好 我认为 RL 在自动驾驶中最务实的落地方向是：在仿真环境中训练决策策略 + 规则层兜底。纯端到端 RL 距离量产还有很长的路，但作为决策策略的补充学习手段，RL 已经展示出不可替代的价值。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80%E8%AF%A6%E8%A7%A3/","summary":"强化学习通过试错交互自主优化策略，是继监督学习之后最具潜力的自动驾驶训练范式。本文从 MDP 五元组出发，系统讲解策略梯度、PPO/SAC/DDPG 等主流 RL 算法的数学原理与演进脉络。并深入分析各算法在自动驾驶决策与规划中的适用场景与落地挑战。","title":"知识点拆解｜强化学习基础：从MDP到PPO"},{"content":"1 问题定义：预测什么？ 1.1 预测任务的数学表述 运动预测的数学形式是：给定自车周围 N 个智能体的历史状态序列和场景上下文，预测它们在未来的位置序列。形式化表示为：\nP ( Y _ i | X _ i , M , I ) 其中：\nX_i = 智能体 i 的历史观测轨迹，通常为 [(x,y) 坐标序列] 或更丰富的状态向量 M = 地图信息，包括车道线、路缘、交叉口、交通信号等 I = 交互信息，智能体之间的相互影响 Y_i = 智能体 i 的未来轨迹，长度为 T 的 (x,y) 或 (x,y,θ,v) 序列 1.2 输出的多种形式 输出类型 描述 典型用途 确定性轨迹 单条最优轨迹 简单场景、确定性预测 多模态轨迹 K 条候选轨迹 + 概率 真实场景的不确定性建模 概率分布 高斯混合模型或扩散分布 连续概率建模 占用网格 未来每个栅格被占用的概率 无需显式轨迹 交互概率 变道概率、让行概率等 行为决策层 核心挑战在于多模态性：一个智能体可能有多种合理行为——直行、左转、靠边停车。预测模型必须捕获这种不确定性。\n2 输入类型详解 2.1 智能体历史信息 历史轨迹是最基础的输入。通常取过去 1-3 秒（10-30 帧）的观测：\n位置坐标 (x, y)：绝对坐标或相对坐标 朝向角 θ：决定航向 速度 v 和加速度 a：运动学信息 转向灯状态：隐含意图 类型标签：车辆、行人、自行车（影响运动模型） 特征编码方式通常包括：\nLSTM/GRU：序列编码，捕获时序依赖 1D CNN：以卷积处理时间维度，并行高效 Transformer Encoder：自注意力建模帧间关系 速度叠加：对时间戳做正弦编码融入特征 2.2 地图信息 高精地图（HD Map）或在线重建地图为预测提供道路拓扑约束：\n车道中心线：智能体极大概率沿车道行驶 车道边界与连接关系：左转/直行/右转的道口关系 交叉口拓扑：交叉口中的通行优先级 交通信号灯状态：红灯停、绿灯行 地图编码演进：\n方法 思路 代表工作 栅格化 将地图渲染为图像，用 CNN 编码 早期方案 向量化 用多段线（polyline）表示车道，GNN/Transformer 编码 LaneGCN, VectorNet 隐式编码 直接用 transformer 处理点集，不显式建图 SceneTransformer 2.3 交互信息 智能体之间并非独立运动，而是相互影响：\n自车-他车交互：自车行为影响他车决策（如让行、抢行） 他车-他车交互：周围车辆之间的相互作用 交互建模方式： Social Pooling：将周围智能体特征汇聚到目标智能体 相对位置编码：将其他智能体以目标为中心编码 全局注意力：所有智能体之间做 full attention Interaction Transformer：显式设计交互注意力层 一个重要的洞察：在马路上，大多数车辆的行为主要由道路拓扑决定，交互只在近距离（如路口、合流区）才显著。交互建模收益在稀疏场景下有限。\n3 经典架构演进 3.1 LaneGCN（2020） 核心思路：将地图车道线构建为图结构，用图卷积网络（GCN）进行消息传递。\n地图编码：车道中心线 → 节点特征，相邻车道间连边 智能体编码：1D CNN 编码历史轨迹 交互融合：智能体节点与车道节点之间做 attention，融合地图信息 预测头：输出多模态轨迹及其置信度 贡献：首次系统性地将高精地图以图结构引入预测网络，奠定了\u0026quot;智能体特征 + 地图特征 → 交互融合 → 轨迹解码\u0026quot;的经典范式。\n局限：图结构固定，难以处理车道拓扑的动态变化；对复杂交互场景表现有限。\n3.2 VectorNet（2020） 核心思路：将所有元素（车道线、轨迹点、交通标志）统一编码为向量化多段线（polyline），用 GNN 做次图级编码，再用全局注意力交互。\n统一表征：无论是车道还是轨迹，一律用 polyline + 节点属性表示 分层编码：先 polyline 内部做节点级注意力，再做 graph-level 的全局交互 灵活性：可处理任意数量/类型的输入元素 贡献：提出\u0026quot;向量化\u0026quot;这一通用范式，后续大量工作（如 HDGT、LaneGCN 改进版）都沿用此思路。\n3.3 SceneTransformer（2022） 核心思路：将所有场景元素（智能体、车道线）的时空轨迹摊平为标记序列，用纯 Transformer 建模。\n将所有智能体所有时间步的观测和车道线点视为一组 token Scene-level attention：所有 token 之间做自注意力 输出：从学习的查询向量解码未来轨迹 贡献：证明了纯 Transformer 也能在预测任务上达到 SOTA，不需要显式的图结构。\n局限：计算量巨大（O(N²)），场景中元素越多越慢。\n3.4 Wayformer（2023） 核心思路：在 SceneTransformer 基础上引入场景融合注意力（Scene Fusion Attention），解决计算效率问题。\n将不同模态（智能体、车道线）分别编码，再通过交叉注意力融合 使用因果掩码和注意力降采样降低计算复杂度 支持多种输入模态的灵活组合 贡献：在保持 Transformer 表达力的同时，将复杂度降到可落地水平。\n4 多智能体预测 4.1 边际预测 vs 联合预测 方式 定义 特点 边际预测 对每个智能体独立预测其未来轨迹 简单，但忽略智能体间依赖 联合预测 同时预测所有智能体的未来轨迹 保持一致性，但输出空间指数增长 边际预测（Marginal Prediction）：\nP ( Y _ i | X , M ) 对 每 个 i 独 立 建 模 优点：N 个预测头独立并行，计算高效。 缺点：预测结果之间可能相互矛盾（两条轨迹占用同一空间）。\n联合预测（Joint Prediction）：\nP ( Y _ 1 , Y _ 2 , . , Y _ N | X , M ) 联 合 分 布 优点：保持场景级一致性。 缺点：联合空间巨大，需要精巧的分解策略。\n4.2 隐式交互建模 实践中大多数方法走中间路线——在特征层面建模交互，在输出层面做边际预测：\n所有智能体共享场景编码器（交互自然被编码进特征） 每个智能体从共享特征中解码自身轨迹 轨迹之间的一致性通过特征共享隐式保证 典型代表：SceneTransformer、Wayformer 都采用这种\u0026quot;隐式交互\u0026quot;范式。\n4.3 Interaction-Aware 评估指标 多智能体预测的评估比单智能体复杂：\n指标 含义 minADE / minFDE 最优轨迹的平均/最终位移误差 Miss Rate 所有预测均偏离真值超过阈值 mAP 基于场景的碰撞率评估 Joint minFDE 联合预测下所有智能体的联合误差 Collision Rate 预测轨迹之间的碰撞比例 一个好的多智能体预测器不仅需要低 ADE，还需要低碰撞率。\n5 目标条件预测 5.1 为什么需要目标条件预测 常规预测直接从历史预测未来，而目标条件预测（Goal-conditioned Prediction）分为两步：\n预测智能体的终点目标（如路口出口位置、停车位置） 基于目标反推完整轨迹 5.2 方法流程 历 史 轨 迹 → 编 码 器 → 目 标 预 测 头 （ 预 测 K 个 终 点 ） → 轨 迹 补 全 （ 反 向 或 正 向 生 成 ） 目标预测头输出：\nK 个候选目标点 (x_g, y_g) 每个目标的概率 P(g_k | history) 轨迹补全可以通过：\n恒速外推 + 目标导向修正 条件 VAE：给定目标生成完整轨迹 扩散模型：以目标为条件去噪 热力图：在 BEV 空间预测每个栅格作为终点的概率 5.3 典型工作 TNT（Target-driveN Trajectory）：预测目标 → 补全 → 评分 DenseTNT：基于密集目标预测，不依赖稀疏锚点 HOME：将目标预测建模为 heatmap 输出 MTR（Motion Transformer）：用 learned query 作为目标锚点，注意力解码轨迹 5.4 优势 显式建模终点不确定性（先定终点，再定路径） 易于融入场景约束（终点不能在马路外） 计算效率高（只需预测终点而非整条轨迹） 6 轨迹评分机制 6.1 为什么需要评分 多模态预测产生 K 条候选轨迹后，必须评估每条轨迹的合理性：\n场景合理性：是否与地图一致？是否避障？ 行为合理性：速度是否合理？转向是否平滑？ 概率分配：K 条轨迹应形成概率分布 6.2 评分方法分类 方法 描述 基于分类 每条轨迹对应一个置信度 score，通过 cross-entropy 训练 基于能量 用能量函数衡量轨迹质量，低能量 = 高合理性 基于 NMS 生成大量候选 → NMS 去重 → 保留高质量轨迹 基于排序 学习一个 trajectory ranker，对候选排序 6.3 目标概率 vs 轨迹似然 目标概率（Goal Probability）：\n预测智能体到达每个候选终点的概率 隐式假设：终点决定轨迹质量 常用于 goal-conditioned 方法 轨迹似然（Trajectory Likelihood）：\n直接对整条轨迹赋概率值 常用 Gaussian Mixture Model 表示 每条轨迹在整个场景下的联合似然 实践中，终点概率比轨迹似然更可靠——终点不确定性维度低，更容易准确建模。\n7 从预测到规划 7.1 预测结果如何输入到规划器 在传统模块化范式中，预测结果是规划的输入：\n预 测 → 候 选 轨 迹 集 合 （ 含 概 率 ） → 规 划 器 → 自 车 轨 迹 规划器需要处理：\n概率化的其他智能体轨迹：规划器需要做风险感知规划 交互不确定性：其他智能体可能对自车行为做出反应 时间一致性：预测和规划在时间轴上对齐 7.2 路径上最危险的智能体 实际系统中，规划器不需要对周围所有智能体同等关注：\n关注具有路径冲突的智能体（crossing path、merging path） TTC（Time-to-Collision）小于阈值的智能体需要紧急处理 非冲突路径的智能体用最简单的运动模型（匀速）预测即可 7.3 预测与规划的闭环问题 预测模型通常假设其他智能体不会自车行为改变其行为——这叫预测的 open-loop 假设。\n但现实中：\n自车刹车 → 后车也会刹车 自车加速 → 旁车可能让行 所以预测和规划之间存在一个交互闭环问题。处理方式：\n交互感知预测：将自车规划的未来轨迹作为预测器输入条件 Game-theoretic planning：将其他智能体建模为理性博弈方 端到端联合建模：预测和规划共享一个网络，自然耦合 8 趋势：预测正在被端到端规划吸收 8.1 传统预测的尴尬地位 预测模块在传统架构中似乎不可或缺，但它存在根本性困局：\n预测误差直接伤害下游规划：预测偏一点，规划就错 无法为规划优化而调整：预测器看不到规划 loss 过度预测：许多场景下规划只需要\u0026quot;知道有车在那就够了\u0026quot; 8.2 端到端学习中的预测角色 在端到端框架中，预测不再是一个独立模块：\n框架 预测的处理方式 UniAD 显式预测周围轨迹，作为规划的先验 VAD 向量化场景 token，隐式编码未来信息 VLA 大模型直接输出规划轨迹，不显式预测 E2E Planner 完全跳过预测，直接从感知到规划 8.3 根本转变 从\u0026quot;感知 → 预测 → 规划\u0026quot;三级 pipeline 到感知 → 规划直接映射，预测逐渐从\u0026quot;必需模块\u0026quot;降级为\u0026quot;可选的正则化监督信号\u0026quot;。\n现阶段的主流共识：\n完全不需要预测的端到端方案在复杂交互场景（路口博弈）中仍显吃力 最佳的方案可能是隐式预测——将未来信息编码进场景表示，但不显式输出轨迹 随着模型容量提升和训练数据丰富，预测独立存在的必要性持续降低 9 总结 维度 要点 问题定义 给定历史 + 地图 + 交互 → 预测未来多模态轨迹 经典架构 LaneGCN（图卷积）→ VectorNet（向量化）→ SceneTransformer（纯 Transformer）→ Wayformer（高效融合） 多智能体 边际预测 vs 联合预测，特征级交互建模是主流 目标条件 先预测终点，再补全轨迹，降低不确定性维度 评分机制 目标概率比轨迹似然更可靠，能量模型是当前热点 与规划关系 传统作为输入，端到端范式中预测模块逐渐被吸收 未来趋势 隐式预测 + 端到端联合建模，预测专业化走向终点 一句话总结：运动预测的本质是从历史中推断意图，经典架构的核心贡献在于\u0026quot;如何让地图信息参与学习\u0026quot;，当前趋势是预测从独立模块演变为端到端规划中的隐式组件。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E8%BF%90%E5%8A%A8%E9%A2%84%E6%B5%8B%E4%B8%8E%E8%A1%8C%E4%B8%BA%E9%A2%84%E6%B5%8B%E5%9F%BA%E7%A1%80/","summary":"运动预测与行为预测是自动驾驶系统理解周围交通参与者的核心技术，其目标是从历史观测中推断其他车辆、行人、骑行者的未来轨迹。本文从问题定义出发，系统梳理输入输出范式、经典架构、多智能体预测、目标条件预测以及评分机制，并分析预测模块在端到端框架中的演进趋势。","title":"知识点拆解｜运动预测与行为预测基础"},{"content":"📌 概述 Occupancy 网络（占据网络）是继 3D 目标检测之后，自动驾驶感知领域的又一次范式跃迁。与检测\u0026quot;画框\u0026quot;的方式不同，occupancy 将场景表示为稠密的 3D 体素网格（Voxel Grid），每个格子被标注为\u0026quot;占据\u0026quot;或\u0026quot;空闲\u0026quot;（或进一步分类为语义类别）。\nOccupancy 的优势在于：它能描述任意形状的物体——翻倒的车辆、散落的货物、施工区域的锥桶——这些在\u0026quot;边界框\u0026quot;范式下难以处理。同时，occupancy 天然适合作为世界模型和规划器的场景表示，因为它直接给出\u0026quot;哪里能走、哪里不能走\u0026quot;的信息。\n🎯 核心概念 Occupancy vs Detection：为什么需要 Occupancy 维度 3D 目标检测 Occupancy 网络 表示方式 稀疏边界框（7 自由度） 稠密体素网格（N×M×K） 表征能力 仅限\u0026quot;物体\u0026quot;类别 任意形状障碍物 + 自由空间 泛化性 无法检测未见过的物体类型 可泛化至任意占据物 标注成本 需要 3D 框标注（昂贵） 可通过 LiDAR 扫描自动生成 与规划的接口 需要额外转换（几何推理） 可直接定义可行驶区域 输出分辨率 稀疏（几十个目标） 稠密（数十万体素） Occupancy 的核心思想来源于 Occupancy Grid Mapping（机器人学经典方法），但用神经网络替代了传统的贝叶斯更新。\n3D Voxel 表示 Occupancy 网络的输出是一个 3D 体素网格 $O \\in \\mathbb{R}^{X \\times Y \\times Z \\times C}$，其中：\nX、Y 为 BEV 空间分辨率，通常覆盖自车周围 ±50m，分辨率 0.4m ~ 0.5m。 Z 为高度维度，通常覆盖 -5m ~ 5m，约 16~32 层。 C 为通道数：二值占用（C=1）或语义类别（C=num_classes，如地面、车辆、行人、建筑等）。 一个典型的输出为 200×200×16 × C 的稠密网格，对应约 64 万个体素。\n🔧 技术详解 OccFormer：Transformer 特征与 3D 卷积解码 OccFormer 是一个面向 3D 占据预测的 Transformer-based 架构。它从 BEVFormer 的 BEV 特征出发，通过两个关键模块构建 3D occupancy：\nHeight Compression \u0026amp; Expansion：先将 BEV 特征沿高度维度解码压缩，再通过分组反卷积恢复高度分辨率，形成 3D 特征体。 3D Conv Decoder：使用 3D 卷积逐步上采样到目标体素分辨率，每个体素输出占据概率和语义类别。 OccFormer 还引入了时序融合模块：将历史帧的 3D occupancy 特征通过 3D 流估计（3D flow estimation）对齐到当前帧坐标系，实现跨帧特征聚合。这一设计使 OccFormer 在动态场景中的预测更加稳定，能够有效处理遮挡和移动物体的\u0026quot;拖影\u0026quot;问题。\nOccFormer 在 nuScenes Occ3D 基准上取得了 SOTA（mIoU 37.2），证明了基于 BEV 的 2D 特征可以通过精心设计的 3D 解码器有效转换为 3D 占据表示。\nFlashOcc：极简高效的 Occupancy FlashOcc 追求推理效率最大化。其核心洞察是：在 BEV 特征上直接预测高度方向的分布函数，替代显示构建 3D 特征体。具体而言：\n对每个 BEV 网格位置，预测一个高度方向的概率分布 P(z)，表示\u0026quot;哪个高度被占据\u0026quot;。 从 BEV 特征通过一个轻量 MLP 直接输出占据标签。 这种方法避免了 3D 卷积的高计算开销。FlashOcc 在单张 3090 上达到 77 FPS，精度仅略低于 OccFormer。\nOpenOccupancy：开放词汇语义占据 OpenOccupancy 将语义占据扩展到开放词汇场景。其核心思路是将 CLIP 的语义空间引入 occupancy——每个体素的特征与 CLIP 文本编码器输出进行匹配，实现任意类别的语义占据预测。\n关键设计：\nLiDAR 引导的体素特征学习：使用 LiDAR 点云的三维位置作为 query，从图像特征中采样，显式对齐图像-点云特征。 CLIP 特征蒸馏：在体素特征上施加 CLIP 对齐损失，使其语义空间与文本空间一致。 BEVDet-Occ：从 BEVDet 扩展 BEVDet 是纯视觉 BEV 感知的经典框架。BEVDet-Occ 在其基础上增加了一个 occupancy head：对 BEVDet 的 BEV 特征做 3D 卷积解码（类似 OccFormer），但使用更轻量的设计。BEVDet-Occ 提供了一个统一的检测+occupancy 框架，实现了\u0026quot;检测框 + 占据图\u0026quot;的多任务输出。\nSurroundOcc：多相机环绕 3D 占据预测 SurroundOcc 进一步将 occupancy 预测扩展到 3D 空间中的任意视角。它不局限于 BEV 空间的 2D+高度分解，而是直接在 3D 体素空间中从多相机图像特征采样。关键设计包括：3D 体素 query 通过相机投影矩阵采样多视图图像特征，使用 3D 稀疏卷积逐步上采样到高分辨率。SurroundOcc 在语义 Occupancy 任务中显著超越了 OccFormer，尤其在高度方向的预测精度上有明显提升。\n方法 骨干 核心设计 推理速度 mIoU (Occ3D) 是否检测 OccFormer BEVFormer 3D Conv Decoder + Transformer 中等 37.2 否 FlashOcc ResNet-50 + LSS 高度分布直接预测 77 FPS 31.5 否 OpenOccupancy BEVFormer + CLIP 开放语义对齐 慢 35.8 否 BEVDet-Occ BEVDet Unified 检测+占据 快 33.7 是 时序融合 Occupancy 预测的时序融合方法与 BEV 感知类似：将历史帧的 occupancy 网格通过自车位姿变换到当前帧坐标系，然后与当前帧预测融合。但 occupancy 的 3D 特性带来了额外的挑战——变换投影需要 3D 空间中的旋转和平移，计算量远大于 2D BEV 特征的对齐。\n在实际实现中，时序融合通常采用两种策略：\nBEV 特征对齐 + 3D 解码：在 BEV 空间（2D）中对齐多帧特征，再进行 3D 解码恢复高度信息。计算效率高，但丢失了高度方向的时序一致性。 3D 体素对齐：直接在 3D 体素空间通过 3D 流估计（3D scene flow）对齐每一帧。精度最高，但计算开销比策略 1 大约 3-5 倍。 SurroundOcc 采用了混合策略：在 BEV 空间做粗略对齐，再在 3D 空间做精细对齐，平衡了效率与精度。OccNeRF 则将 NeRF 的体渲染技术引入 occupancy 预测，通过可微渲染从 2D 图像直接监督 3D 占据网格，实现了无需 LiDAR 标注的纯视觉 occupancy 训练。这是一种自监督的 occupancy 学习范式，有望大幅降低 occupancy 标注成本。但自监督 occupancy 在动态物体区域和远距离区域的精度仍显著低于有监督方法，离量产仍有距离。\n📊 方法对比 Occupancy 作为世界模型的核心表示 在世界模型论文中，occupancy 扮演着双重角色：\n场景编码器：将当前观测编码为 3D occupancy 特征。 预测目标：模型预测未来时刻的 occupancy 变化。 NIFF（Neural Implicit Flow Fields）是这一方向的代表：它使用 occupancy 特征作为场景表示，通过一个 flow 预测网络推断未来时刻体素占据状态的变化。NIFF 不是直接预测未来 occupancy 的概率，而是预测\u0026quot;当前占据体素在未来时刻的位置\u0026quot;，使用 scene flow 作为中间表示。\nNiFF 的工作流程 编码：对 LiDAR 点云或图像估计的 occupancy 进行体素化。 Flow 预测：使用一个 3D 稀疏卷积网络，对每个占据体素预测未来 N 帧的 3D 位移向量。 未来 occupancy 推理：根据预测的 scene flow 将当前占据体素\u0026quot;移动\u0026quot;到未来位置。 规划应用：在未来 occupancy 中定义可行驶区域，输入到规划器。 这种范式将感知-预测-规划统一在 occupancy 空间，避免了\u0026quot;检测 → 跟踪 → 轨迹预测\u0026quot;的传统流水线。相比传统流水线，occupancy-based 世界模型的优势在于：\n端到端可微：从传感器输入到规划输出全部可微，梯度可以直接回传优化感知部分。 无需显式目标关联：不依赖检测-跟踪的数据关联（data association）这一困难子问题。 自由空间约束：occupancy 直接给出\u0026quot;哪里不能走\u0026quot;的约束，规划器可以天然地在这个约束空间中搜索最优轨迹。 🔗 与自动驾驶的关联 Occupancy 与规划的天然亲和 规划器需要的不是\u0026quot;前方 50 米有一辆车，尺寸 4.5×1.8×1.5m\u0026quot;，而是\u0026quot;哪些区域可以安全行驶\u0026quot;。Occupancy 输出直接回答了这个问题——可行驶区域 = 没有被占据的体素 + 被语义类别标记为\u0026quot;地面/道路\u0026quot;的区域。\n由于 occupancy 提供了稠密的自由空间信息，在 occupancy 空间进行轨迹规划时，只需要做碰撞检测（voxel-level check，即检查规划轨迹上的体素是否被占据），不需要复杂的几何推理（bounding box overlap 计算）。这使得规划更简单、更安全。\n从检测到 occupancy：感知范式的演进 自动驾驶感知的演进可以概括为：\n2D 检测 → 3D 检测 → Occupancy → 端到端隐式表示\n每个阶段都在减少对\u0026quot;预定义类别\u0026quot;的依赖，增加场景的细粒度描述能力。Occupancy 是目前最接近\u0026quot;完全场景描述\u0026quot;的感知范式，但仍面临计算开销和远距离精度不足的挑战。\n有趣的是，TPVFormer 提出了三视图（Tri-Perspective View）表示——将 3D 体素分解为三个正交平面（BEV 平面 + 两个垂直平面），融合三视图特征即可恢复完整的 3D 体素信息。TPV 将 occupancy 的计算复杂度从 O(N³) 降为 O(N²)，且精度与 full 3D 方法相当。\nOccupancy 在感知中的定位可以类比为：检测是\u0026quot;名词\u0026quot;（这是什么物体），追踪是\u0026quot;动词\u0026quot;（物体如何运动），occupancy 是\u0026quot;形容词+空间\u0026quot;（哪里被占据、以什么形状占据）。两者结合才能完整描述场景。\nVoxel 表征的算力挑战与优化 200×200×16 的 3D 体素网格包含 64 万个体素。如果每个体素使用 64 维特征，特征图大小为 64 万 × 64 ≈ 40M 参数，在 3D 卷积中的计算量约为同等分辨率 2D 卷积的 16 倍（多出高度维度）。这对车载芯片的算力提出了极高要求。\n工程优化方向包括：\n稀疏化：只保留 BEV 空间中被占据区域的体素特征，使用稀疏卷积或稀疏 Transformer 减少计算量。大多数场景中，占据体素占比不到 10%，稀疏化可节省 5-10 倍计算量。 高度分解：如 FlashOcc 所示，将 3D 问题分解为 2D BEV 特征 + 高度分布预测，避免构建完整的 3D 特征体。 多分辨率策略：在保证安全的前提下，远距离区域使用更粗的分辨率（如远处 1.0m/voxel，近处 0.4m/voxel），自适应网格是一种高效的折中方案。 检测 + Occupancy 的协同 实践中，检测和 occupancy 并非零和关系。检测提供了目标的实例级信息和跟踪一致性，occupancy 提供了稠密空间理解。BEVDet-Occ 和 UniAD 都采用了\u0026quot;检测 + occupancy\u0026quot;的多任务架构，两者互补。\nBenchmarks：Occ3D nuScenes 与 SemanticKITTI 基准 场景 分辨率 语义类别 评估指标 数据规模 Occ3D nuScenes 城市道路，6 相机 200×200×16 17 类 mIoU + RayIoU 700 训练，150 验证 SemanticKITTI 城市+高速，单 LiDAR 256×256×32 20 类 mIoU 22 序列（~43k 帧） Occ3D 的 RayIoU 指标是一个创新：它沿每条激光射线计算预测和真值占据状态的差异，更关注占据边界位置的精度，避免了传统 IoU 对大多数空闲体素的\u0026quot;无意义正确\u0026quot;的偏向。\nOccupancy 的安全关键性 Occupancy 网络直接决定了自动驾驶系统对\u0026quot;可行驶区域\u0026quot;的理解，其误差可能直接导致碰撞或急刹车等不安全行为。一个错误的占据预测（将障碍物预测为空闲）可能导致碰撞。因此，occupancy 的评估不仅关注平均精度，还关注安全关键指标：\nFalse Negative Rate（FNR）：漏检的占据体素比例——越高表示越可能撞上未识别的障碍物。 边界精度：占据-空闲边界的位置误差——决定了规划轨迹与障碍物的安全距离。 时序一致性：逐帧占据预测的稳定性——闪烁的预测可能导致规划震荡。 召回率 @ 安全距离阈值：在自车规划路径的一定范围内（如前 20 米），占据体素的召回率——这是最直接影响碰撞风险的单向指标。 📚 延伸阅读 Tong et al., \u0026ldquo;OccFormer: Semantic Occupancy Network via 3D Transformer with Temporal Fusion\u0026rdquo;, CVPR 2024. Li et al., \u0026ldquo;FlashOcc: Fast and Memory-Efficient Occupancy Prediction via Channel-Wise Height Compression\u0026rdquo;, CVPR 2024. Wang et al., \u0026ldquo;OpenOccupancy: A Large Scale Benchmark for Surrounding Semantic Occupancy Perception\u0026rdquo;, ICCV 2023. Huang et al., \u0026ldquo;BEVDet: High-Performance Multi-Camera 3D Object Detection in Bird-Eye-View\u0026rdquo;, 2022. Hu et al., \u0026ldquo;NIFF: Neural Implicit Flow Fields for Dynamic 3D Scene Forecasting\u0026rdquo;, CVPR 2024. Tian et al., \u0026ldquo;Occ3D: A Large-Scale 3D Occupancy Prediction Benchmark for Autonomous Driving\u0026rdquo;, NeurIPS 2023. Behley et al., \u0026ldquo;SemanticKITTI: A Dataset for Semantic Scene Understanding of LiDAR Sequences\u0026rdquo;, ICCV 2019. Wei et al., \u0026ldquo;SurroundOcc: Multi-Camera 3D Occupancy Prediction for Autonomous Driving\u0026rdquo;, ICCV 2023. Cao et al., \u0026ldquo;OccDepth: A Depth-Aware Method for 3D Semantic Occupancy Network\u0026rdquo;, 2024. Huang et al., \u0026ldquo;OccNeRF: Self-Supervised Multi-Camera Occupancy Prediction with Neural Radiance Fields\u0026rdquo;, 2023. Li et al., \u0026ldquo;TPVFormer: Tri-Perspective View for Vision-Based 3D Semantic Occupancy Prediction\u0026rdquo;, CVPR 2023.（TPV 将 3D 体素分解为三个正交平面，进一步降低了 occupancy 的计算复杂度） Wang et al., \u0026ldquo;Scene as Occupancy\u0026rdquo;, ICCV 2023. Song et al., \u0026ldquo;Occ-Attention: 3D Occupancy Prediction with Attention-Guided Depth Estimation\u0026rdquo;, 2024. ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/occupancy%E7%BD%91%E7%BB%9C%E8%AF%A6%E8%A7%A3/","summary":"Occupancy 网络通过稠密的 3D 体素网格表示场景，突破了 3D 目标检测对“物体”范畴的限制，可表征任意形状的障碍物与自由空间。本文详解其与检测的差异、OccFormer/FlashOcc/OpenOccupancy 等代表架构，以及在 NIFF 等世界模型中 occupancy 如何作为核心场景表示驱动未来预测与规划决策。","title":"知识精讲｜Occupancy网络详解"},{"content":"📄 论文信息 项目 内容 标题 A Generalist Agent（一个通用智能体） 作者 Scott Reed, Konrad Żołna, Emilio Parisotto, Sergio Gómez Colmenarejo, Alexander Novikov, Gabriel Barth-Maron 等 20 位作者 单位 DeepMind 发表 TMLR 2022（Transactions on Machine Learning Research），arXiv:2205.06175 关键词 通用智能体、多任务学习、Transformer、多模态、强化学习 一句话总结 用一个 1.2B 参数的 Transformer 网络在 604 种任务上联合训练，同时掌握游戏、机器人、对话等多种技能，证明了通用智能体的可行性 论文链接 arXiv:2205.06175 代码链接 未开源 🤔 要解决什么问题？ 核心问题：智能体的\u0026quot;专才\u0026quot;困境 在 Gato 之前，人工智能领域存在一个深刻的割裂：语言模型越来越通用，而控制策略始终是\u0026quot;专才\u0026quot;。\nGPT-3 可以写诗、翻译、编程、推理，一个模型处理所有文本任务；但在机器人控制和游戏领域，每个任务都需要单独训练一个模型——打 Atari 需要一个 DQN，机械臂抓取需要一个 SAC，对话需要一个语言模型，图像描述需要一个视觉语言模型。这些模型之间几乎没有知识共享。\n这种\u0026quot;专才\u0026quot;模式存在根本性缺陷：\n数据效率低下：每个任务从零开始学习，无法利用其他任务的经验 泛化能力有限：在 A 任务上学到的技能无法迁移到 B 任务 部署成本高昂：N 个任务需要 N 个模型，存储和推理资源成倍增长 无法涌现通用能力：没有\u0026quot;举一反三\u0026quot;的可能 更深层的思考：具身智能的模态壁垒 传统控制策略的输入通常是低维的状态向量（关节角度、速度等）或像素图像，输出是动作向量。而语言和视觉理解任务处理的是完全不同的数据模态——文本序列、图像 patches。这两类任务之间存在巨大的模态壁垒。\nGato 要回答的核心问题是：能否用一个统一的网络架构，将所有模态的数据（文本、图像、动作、状态）统一表示，并在一个模型中同时处理所有任务？\n这不仅是工程上的挑战，更是对\u0026quot;通用智能\u0026quot;本质的一次探索——如果一个模型真的能同时掌握 604 种截然不同的任务，那它在某种意义上就具备了\u0026quot;通用性\u0026quot;。\n💡 核心方法 1. 统一的 Token 化框架 Gato 的第一个关键洞察是：如果把所有模态的数据都变成离散 Token，那么一个语言模型就能处理一切。\n这是对 GPT 系列\u0026quot;万物皆可 Token\u0026quot;思想的极致延伸。GPT 用 BPE 将文本变成 Token，Gato 则将所有模态——文本、图像、动作、状态——全部转化为统一的 Token 序列。\n具体的 Token 化方案如下：\n文本 Token：使用 SentencePiece 实现的 BPE（Byte Pair Encoding），词表大小为 32,000。这是标准的 NLP Token 化方案，直接复用。\n图像 Token：将图像分割为 $16 \\times 16$ 的 patch，每个 patch 通过一个 ResNet 编码器转换为一个 Token。这与 ViT（Vision Transformer）的思想一致——将图像视为一个 patch 序列。对于 Atari 游戏画面（$210 \\times 160$ 像素），会生成 $13 \\times 10 = 130$ 个图像 Token。\n离散动作 Token：如 Atari 游戏中的按钮按下（上、下、左、右、开火等），直接映射为整数 Token，范围在 $[0, 1024]$ 内。\n连续动作 Token：这是最精妙的部分。机器人控制中的连续动作值（如关节力矩、末端执行器位移）首先通过 mu-law 编码映射到 $[-1, 1]$ 区间，然后离散化为 1024 个 bin。每个连续值变成一个整数 Token。mu-law 编码的公式为：\n$$x' = \\frac{\\text{sign}(x) \\cdot \\ln(1 + \\mu |x|)}{\\ln(1 + \\mu)}$$其中 $\\mu = 255$。这种编码方式对小值更敏感（分辨率更高），对大值较粗糙，符合控制任务中对精度的需求。这与 WaveNet 中使用的音频量化方案一脉相承。\n本体感知 Token：机器人的关节角度、速度等本体感知信息也被离散化为 Token。\n2. 统一的序列格式 Token 化之后，所有数据被组织成统一的序列格式。这是 Gato 能够用一个模型处理所有任务的关键：\n[observation_tokens] [sep] [action_tokens] [observation_tokens] [sep] [action_tokens] ... 具体来说：\n每个时间步的观测（图像 + 本体感知）先被 Token 化，按光栅扫描顺序排列 观测 Token 之后紧跟一个特殊的 [sep] 分隔符 Token 分隔符之后是该时间步的动作 Token 整个 episode 按时间顺序排列 对于文本任务（如对话、图像描述），序列格式更简单——直接是文本 Token 的序列，不需要观测-动作的交替结构。\n这种统一格式意味着：无论是打游戏、控制机器人还是聊天，数据在模型眼中都是同一种序列。模型不需要知道自己在执行什么任务——它只需要预测下一个 Token。\n3. 网络架构 Gato 采用纯解码器（decoder-only）Transformer架构，这与 GPT 系列一致：\n参数 值 参数量 1.2B 层数 24 嵌入维度 2048 注意力后前馈隐藏维度 8196 注意力头数 32 上下文窗口 1024 tokens 为什么选择 decoder-only 而不是 encoder-decoder？作者的解释是\u0026quot;为了简单和可扩展性\u0026quot;。但更深层的原因是：decoder-only 架构天然适合自回归生成，而 Gato 的所有输出（文本、动作）都是自回归生成的。\n嵌入函数包含两个组件：\nToken 嵌入查找表：文本、离散值、连续值 Token 通过查找表映射到嵌入空间 ResNet 视觉编码器：图像 patch Token 通过一个 ResNet 编码器转换为嵌入向量，并添加图像内位置编码 序列模型就是一个标准的 Transformer 解码器，输出下一个 Token 的概率分布。\n4. Prompt 条件化 Gato 的另一个关键设计是 prompt 条件化（prompt conditioning）。在同一个域（如 Atari）中，不同游戏可能有完全相同的观测格式和动作空间，但任务目标不同。模型需要某种方式来区分它们。\nGato 借鉴了 GPT-3 和 T5 的思路，使用 prompt 来提供上下文。具体做法是：\n在训练时，每个 batch 中 25% 的序列前面会附加一个 prompt 序列 Prompt 来自同一任务、同一来源 agent 的一个 episode 一半 prompt 取自 episode 的末尾（作为目标条件化），另一半从 episode 中均匀采样 在评估时，默认使用一个成功的示范作为 prompt 这意味着 Gato 的 prompt 不是自然语言指令，而是一段成功的行为示范。这种设计类似于 few-shot learning 中用示例来引导模型行为。\n5. 训练策略 数据混合：Gato 在 604 种任务的数据上联合训练，涵盖以下域：\n域 任务数 数据类型 Atari 2600 54 游戏画面 + 按钮动作 DM Control Suite Pixels 20 机器人仿真 + 连续动作 DM Homogeneous Rooms 2 3D 导航 + 连续动作 Meta-World 145 机械臂操作 + 连续动作 视觉-语言任务 - 图像描述、VQA、对话等 文本任务 - 翻译、摘要、对话等 数据上采样：为了平衡不同数据集的贡献，作者对较大的和质量较高的数据集进行了手动上采样。具体来说，来自 MT-Open（Meta-World）和 DM Control 的数据被上采样 5 倍，来自 MassiveWeb 的文本数据被上采样 3 倍。\n训练配置：\n参数 值 硬件 16×16 TPU v3 训练步数 1,000,000 Batch size 512 序列长度 1024 tokens 训练时间 ~4 天 优化器 Adam 学习率 0.0001（warmup 10k 步） dropout 0.1 关键技巧——随机子序列采样：由于 agent episode 和文档通常远超 1024 tokens 的上下文窗口，训练时从每个 episode 中随机采样长度为 1024 的子序列。每个 batch 中的子序列大致均匀地混合来自不同域的数据。这种做法既保证了每个 batch 的多样性，又避免了截断造成的系统性偏差。\n损失函数：标准的下一个 Token 预测交叉熵损失，但只对动作 Token 和文本 Token 计算损失——图像 Token、分隔符 Token 等观测 Token 不参与损失计算。这是通过 masking 实现的，与 BERT 的 masked language modeling 类似，但这里 mask 的是不需要预测的位置。\n6. 推理/部署流程 Gato 作为控制策略部署时的流程如下：\nPrompt 初始化：将一段成功的示范 episode Token 化，作为初始序列 接收观测：环境产生第一个观测，Token 化后追加到序列中 自回归生成动作：模型逐 Token 自回归地生成动作向量，直到所有动作维度都生成完毕 执行动作：将生成的动作 Token 解码为连续/离散动作值，发送给环境 循环：环境产生新观测，回到步骤 2 关键细节：模型在上下文窗口内看到所有历史观测和动作（最多 1024 tokens）。作者发现使用 Transformer-XL 记忆（扩展上下文）在部署时有益，尽管训练时没有使用。\n🧪 实验验证 主要结果概览 Gato 在 604 种任务上进行了评估。下图展示了各域中达到专家表现不同百分比的任务数量：\n各域表现总结：\n域 达到 50% 专家分数的任务数 达到 100% 专家分数的任务数 Atari 2600 45/54 28/54 DM Control Suite Pixels 16/20 4/20 Meta-World 121/145 30/145 MassiveWeb（文本） - 良好 图像描述 - 良好 对话 - 良好 与专用模型的对比 这是评估通用智能体价值的关键实验。Gato 将自己与各任务上最佳的专用模型进行了比较：\nAtari 游戏：在 54 款 Atari 游戏中，Gato 在 45 款上达到了超过 50% 的专家分数。值得注意的是，Gato 的参数量（1.2B）远小于专用 DQN 或 R2D2 模型，却能在大多数游戏上取得有竞争力的表现。在某些游戏（如 Breakout、Pong）上，Gato 甚至超过了专用模型。\nDM Control Suite：在 20 个连续控制任务中，Gato 在 16 个上超过 50% 专家分数。但与专门训练的 SAC 或 DreamerV3 相比，Gato 在大部分任务上仍有差距。这在意料之中——通用模型在单个任务上通常不如专用模型。\nMeta-World 机械臂操作：在 145 个操作任务中，Gato 在 121 个上达到 50% 专家分数。这是一个令人印象深刻的结果，因为这些任务涉及不同的物体、不同的操作目标，且大多数任务的训练数据非常有限。\n文本和视觉-语言任务：Gato 在图像描述（MS COCO）、对话（ MASSIVE）和翻译等任务上都取得了合理的表现，虽然不及专门的大语言模型（如 GPT-3），但作为一个 1.2B 参数的多任务模型，表现已经相当不错。\nPrompt 条件化的消融实验 作者进行了详细的消融实验，验证 prompt 条件化的效果：\n无 prompt：模型仅依靠观测来推断任务，性能明显下降 随机 episode prompt：使用随机 episode 的片段作为 prompt，性能有所提升但不稳定 成功 episode prompt：使用成功 episode 的片段作为 prompt，性能最佳 末尾 vs 均匀采样：从 episode 末尾采样作为 prompt 通常优于均匀采样，因为末尾包含了\u0026quot;目标状态\u0026quot;的信息 Attention 可视化 作者对 Gato 的注意力权重进行了可视化分析。在 Atari Breakout 游戏中，注意力集中在球和挡板上；在 RGB Stacking 任务中，注意力跟踪着机械臂和目标物体。这表明 Gato 学会了根据任务自动关注相关区域，而不是均匀地处理所有视觉信息。\n嵌入可视化 作者使用 t-SNE 对不同任务的嵌入向量进行了可视化。结果表明：\n同一任务的嵌入紧密聚集 来自同一域（如 DM Control Suite）的不同任务嵌入彼此靠近 即使是留出任务（cartpole.swingup，训练时未见过），其嵌入也被正确地聚类到 DM Control Suite 域中 这说明 Gato 的嵌入空间具有良好的结构——它自动学习了任务之间的相似性和层次关系。\nScaling 分析 虽然 Gato 本身只训练了一个 1.2B 的模型，但作者指出 Gato 遵循 Transformer 的 scaling law——更大的模型、更多的数据通常会带来更好的性能。这为未来构建更大的通用智能体提供了理论基础。\n🔍 个人思考 亮点 1. 统一表示的优雅性\nGato 最大的贡献在于证明了一个极其简洁的假设：所有模态的数据都可以被离散化为 Token，从而被同一个 Transformer 处理。这种统一性是深刻的——它意味着\u0026quot;智能\u0026quot;的不同方面（感知、推理、行动）可能共享相同的底层计算机制。mu-law 编码将连续动作离散化为 1024 个 bin 的方案尤其巧妙，既保证了精度，又使得动作可以像文本一样被自回归生成。\n2. 工程上的大胆\n在 604 种任务上联合训练一个 1.2B 的模型，这需要解决大量工程挑战：数据格式的统一、不同数据集的采样平衡、训练稳定性的维护。Gato 在 16×16 TPU v3 上仅用 4 天完成训练，展示了 DeepMind 强大的工程能力。\n3. Prompt 条件化的实用性\n使用成功 episode 作为 prompt 来区分同一域内的不同任务，这是一个非常实用的设计。它不需要任务 ID 的 one-hot 编码，也不需要自然语言指令，而是直接用\u0026quot;做给你看\u0026quot;的方式告诉模型要做什么。这种 few-shot 式的条件化与当前 LLM 的 prompt engineering 一脉相承。\n4. 注意力和嵌入的可解释性\n论文提供了注意力权重和嵌入空间的可视化，这在多任务学习论文中并不常见。注意力集中在任务相关物体上的发现，以及嵌入空间的有意义聚类，增强了我们对 Gato 内部机制的理解。\n局限性 1. 性能天花板\nGato 在大多数控制任务上仍不如专用模型。1.2B 参数的模型要在 604 种任务之间分配容量，每个任务分到的\u0026quot;专业知识\u0026quot;必然有限。这引发了一个根本性问题：通用性和专业性之间是否存在不可调和的矛盾？\n2. 模态 Token 化的粗糙性\nmu-law 编码将连续动作离散化为 1024 个 bin，这在精度上可能存在瓶颈。对于需要精细力控制的机器人任务，1024 个 bin 可能不够。相比之下，连续输出的策略网络（如 SAC 的高斯策略）可以输出任意精度的动作值。\n3. 上下文窗口的限制\n1024 tokens 的上下文窗口对于长序列任务（如长时域机器人操作）来说非常有限。虽然部署时可以使用 Transformer-XL 记忆来扩展，但训练时的限制仍然约束了模型处理长序列的能力。\n4. 缺乏在线学习能力\nGato 是一个纯监督学习模型，不具备在线试错和自我改进的能力。它只能模仿训练数据中的行为，无法通过与环境交互来探索新策略。这与真正的强化学习智能体有本质区别。\n5. 代码未开源\nGato 的代码没有开源，这严重影响了学术界对其方法的验证和复现。考虑到 DeepMind 的特殊地位，这或许可以理解，但也使得 Gato 的影响力受到了一定限制。\n未来方向 1. 更大的模型 + 更多的任务\nGato 已经证明了 1.2B 参数的 Transformer 可以在 604 种任务上工作。自然的下一步是：如果把模型扩大到 10B、100B，任务数扩大到 10000+，会发生什么？scaling law 暗示性能会持续提升。\n2. 与 VLA 的融合\nGato（2022）和 RT-2（2023）代表了两条互补的技术路线：Gato 从\u0026quot;控制\u0026quot;出发，加入语言和视觉；RT-2 从\u0026quot;语言视觉\u0026quot;出发，加入动作。未来的通用智能体很可能融合两者的优势——既有 Gato 的多任务统一性，又有 RT-2 的大规模预训练知识。\n3. 在线学习与自我改进\n当前的 Gato 是一个\u0026quot;冻结\u0026quot;的模型，无法在部署后继续学习。将在线强化学习或自我对弈机制引入通用智能体框架，是一个激动人心的方向。\n4. 具身智能的统一范式\nGato 展示的\u0026quot;多模态统一 Token 化\u0026quot;思想，正在成为具身智能领域的主流范式。从 RT-2 到 Octo，从 PaLM-E 到 π₀，越来越多的工作采用\u0026quot;将所有输入输出统一为 Token\u0026quot;的策略。Gato 是这条路线的先驱之一。\n📖 延伸阅读 Decision Transformer（Chen et al., 2021）：将强化学习转化为序列建模的开创性工作，Gato 的直接前身 RT-1 / RT-2（Brohan et al., 2022/2023）：Google DeepMind 的机器人 Transformer 系列，VLA 范式的代表 PaLM-E（Driess et al., 2023）：将视觉多模态嵌入语言模型的具身 AI 工作 Octo（Team et al., 2024）：开源的通用机器人策略，延续了 Gato 的多任务统一思想 GPT-4 / Gemini：展示了更大规模的多模态 Transformer 的涌现能力 Flamingo（Alayrac et al., 2022）：DeepMind 的视觉语言模型，与 Gato 共享部分设计理念 编者按：Gato 发表于 2022 年 5 月，距今已四年有余。回头看，它的历史地位或许不在于性能上超越了哪些专用模型，而在于它率先证明了一个关键假设：用一个统一的 Transformer 网络处理多模态、多任务的输入输出是可行的。这一思想深刻影响了后续的 VLA、多模态具身智能等工作，成为通向通用智能体的重要里程碑。如果说 GPT-3 证明了\u0026quot;语言可以统一一切文本任务\u0026quot;，那么 Gato 则在探索\u0026quot;Token 可以统一一切模态和任务\u0026quot;的可能性——虽然它只是迈出了一小步，但方向是正确的。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/gato%E9%80%9A%E7%94%A8%E6%99%BA%E8%83%BD%E4%BD%93%E7%B2%BE%E8%AF%BB/","summary":"Gato是DeepMind提出的通用智能体，通过在604种不同任务上联合训练，用一个Transformer网络同时处理 Atari 游戏、机器人控制、图像描述、文本对话等任务。它证明了单一模型可以掌握多种模态的技能，是迈向通用人工智能的重要一步。","title":"论文精读｜Gato：DeepMind的通用智能体——一个网络玩转604种任务"},{"content":"📄 论文信息（系列坐标） 本篇不是单篇精读，而是对 DriveVLM 家族\u0026quot;世界模型\u0026quot;分支的横向梳理。它承接本系列已解读的 DriveVLM（语言 CoT，第 1 篇）与 DriveVLA-W0（世界模型放大缩放律，第 4 篇），把目光投向两条最新脉络：\nDrivingGPT：Unifying Driving World Modeling and Planning with Multi-modal Autoregressive Transformers，arXiv:2412.18607，中科院自动化所（CASIA）Zhaoxiang Zhang 团队。这正是坊间所说的 \u0026ldquo;DriveWLM\u0026rdquo;——驾驶世界语言模型。\nDriveVLM-RL：Neuroscience-Inspired Reinforcement Learning with VLMs for Safe and Deployable Autonomous Driving，arXiv:2603.18315（2026 年），双通路 VLM-RL。\n一句话总结：把\u0026quot;看图说话\u0026quot;的 VLM 升级成\u0026quot;会脑补未来、会推演安全\u0026ldquo;的世界语言模型，让驾驶大模型从\u0026quot;反应式\u0026quot;走向\u0026quot;预判式\u0026rdquo;。\n图1：DriveVLM 家族的世界模型分支演进图。从左到右依次为：DriveVLM（语言 CoT）→ DriveVLA-W0（世界模型稠密监督）→ DrivingGPT（统一序列）→ DriveVLM-RL（离线安全强化学习）。\n🤔 要解决什么问题？VLM 上车的三道坎 本系列前几篇已经反复印证：把 VLM/LMM 塞进自动驾驶，能补上传统 pipeline 缺失的常识与推理。但要让这套\u0026quot;理解驱动\u0026quot;的路线真正兑现，横着三道坎：\n痛点 表现 根因 监督太稀疏 7-8B 参数只被几维轨迹监督，大模型容量浪费 动作是低维信号，喂不饱大模型 世界与动作割裂 视频扩散世界模型擅长\u0026quot;画面\u0026quot;，却接不进\u0026quot;动作\u0026quot; 扩散架构对动作等异质模态不友好 探索不安全 RL 能超越人类，但车端不容许试错 在线探索碰撞代价不可承受 DriveVLA-W0 用\u0026quot;预测未来图像\u0026quot;补上了第一道（稠密自监督）。而 DrivingGPT 和 DriveVLM-RL 分别攻第二道（统一世界+动作）与第三道（离线安全 RL）。这就是这条技术主线的完整进化图：\nDriveVLM（语言 CoT） ➜ DriveVLA-W0（世界模型稠密监督） ➜ DrivingGPT（世界+规划统一序列） ➜ DriveVLM-RL（离线双通路 RL）\n💡 DrivingGPT：把驾驶压成一条 next-token 序列 图2：DrivingGPT 架构。前视图像经 VQ-VAE 编码为离散 token，动作经均匀量化后，两者拼成交错序列进行自回归建模。推理时图像 token 由 VQ-VAE 解码器重建为视频，动作 token 积分回绝对轨迹。\n核心判断：扩散不是世界模型唯一的解 当前驾驶世界模型几乎清一色是视频扩散（GAIA、Drive-WM、SVD 微调）。扩散确实能生成逼真画面，却有个硬伤——它天生不擅长融合\u0026quot;动作\u0026quot;这种异质模态。控制信号只能靠 cross-attention 或 AdaLN/FiLM\u0026quot;软注入\u0026quot;，想要让世界模型直接吐出一条可执行的规划轨迹，几乎做不到。\nDrivingGPT 反其道而行：既然自回归 Transformer 在 LLM 里把\u0026quot;任意模态序列建模\u0026quot;玩得炉火纯青，那为什么不让它来同时做世界建模和规划？ 于是有了那句 slogan——Driving as Next Token Prediction。\n多模态驾驶语言：图像词 + 动作词 DrivingGPT 最精彩的设计是统一词表：把图像和动作都离散化成 token，拼成一条交错序列。\n观测词化：前视图像用 VQ-VAE 压成离散 token（下采样 8 或 16，每帧 576 或 2304 个 token）。 动作词化：这是区别于所有扩散世界模型的关键。它预测的是逐帧相对动作 $T_{t+1\\to t}=(\\Delta x, \\Delta y, \\Delta\\theta)$，再把每个分量均匀量化到 $M=128$ 个 bin。 为什么是\u0026quot;相对\u0026quot;而非\u0026quot;绝对长视野轨迹\u0026quot;？ 因为自回归的因果性会作弊：若用绝对轨迹，历史里最后一个动作 token 就已经包含了未来 N 步的全部信息，模型会退化成\u0026quot;复制历史动作\u0026quot;，根本不去看图。改成帧间相对动作后，每一步都只能依赖当前观测去推下一段位移，模型才被迫真正\u0026quot;学开车\u0026quot;。\n最终序列长这样（$z$ 是图像 token，$q$ 是动作 token）：\n$$z_1, q_1, z_2, q_2, \\dots, z_T, q_T$$词表大小 = 图像码本 $D$ + 动作 $3M$ = $16384 + 3\\times128 = 16768$。一套 Llama 架构（SwishGLU、帧级 1D 旋转位置编码、因果注意力）+ 标准交叉熵，就把两件事一锅炖了：\n子任务 序列视角 直觉 世界建模 $p_\\theta(z_t \\mid z_{\u003c t}, q_{\u003c t})$ \u0026ldquo;我做了这个动作，下一帧世界会变成啥\u0026rdquo; 端到端规划 $p_\\theta(q_t \\mid z_{\\le t}, q_{\u003c t})$ \u0026ldquo;看到这个场景，下一步该怎么走\u0026rdquo; 推理时，图像 token 走 VQ-VAE 解码器还原成视频，动作 token 则通过相对位姿矩阵连乘积分回绝对轨迹：\n$$T_{t+k\\to t}=\\prod_{i=1}^{k} T_{t+i\\to t+i-1}$$统一建模的红利：动作条件下的长视频 把规划和世界建模联合训练带来一个意外收获：生成的视频\u0026quot;听动作的话\u0026quot;。纯扩散方法（SVD 微调）生成长序列时常陷入**\u0026ldquo;无限卡红灯\u0026rdquo;**——把历史内容反复复读；而 DrivingGPT 在 64 帧（32 秒）长视频上依然保持 FVD 142.61、FID 12.78，显著优于 SVD 的 227.54 / 24.03。\n这背后的道理很深：当一个世界模型必须为\u0026quot;规划\u0026quot;负责，它对动作-视觉因果的理解就会被显著加强——这正是统一架构相对\u0026quot;拼装式\u0026quot; pipeline 的根本优势。\n关键训练细节 DrivingGPT 的工程取舍值得细看。它在 nuPlan 上用 16 帧 @ 10Hz、NAVSIM 上用 12 帧 @ 2Hz（4 历史帧 + 8 未来帧），遵循官方评测协议。优化器用 AdamW（学习率 1e-4，权重衰减 5e-2），梯度范数裁剪到 1.0，并加 0.1 的 token 级 dropout 做正则。推理时对图像 token 用温度 1.0、top-k 2000 采样，并采用引导式采样——在 logits 上把\u0026quot;异质词表\u0026quot;屏蔽掉，避免高温采样时偶尔吐出别的模态 token。\n一个常被问到的疑虑是：词表只有 16768，会不会太小？ 作者实验发现，把图像码本和动作 bin 放进同一套词表，反而让两类模态在自回归里\u0026quot;互相教会\u0026quot;对方——动作 token 的预测误差会反过来修正图像生成里的物体幻觉。这是联合训练的第二红利：不只是省了一个模型，而是两类信号互为正则。\n🏗️ DrivingGPT 架构深入解析 VQ-VAE 图像词化 DrivingGPT 的前视图像经过 VQ-VAE 编码为离散 token。设输入图像 $\\mathbf{I} \\in \\mathbb{R}^{H \\times W \\times 3}$，编码器 $E$ 将其映射为连续潜变量 $\\mathbf{z} = E(\\mathbf{I}) \\in \\mathbb{R}^{h \\times w \\times d}$，然后通过最近邻查找量化为最接近的码本向量：\n$$\\hat{\\mathbf{z}}_{ij} = \\arg\\min_{\\mathbf{e}_k \\in \\mathcal{C}} \\|\\mathbf{z}_{ij} - \\mathbf{e}_k\\|_2$$其中 $\\mathcal{C} = \\{\\mathbf{e}_1, \\dots, \\mathbf{e}_D\\}$ 是大小为 $D=16384$ 的码本。下采样率 $f=8$ 或 $16$，因此每帧产生 $N_v = HW/f^2$ 个 token（576 或 2304）。\n训练损失包含三项：\n$$\\mathcal{L}_{\\text{VQ}} = \\| \\mathbf{I} - G(\\hat{\\mathbf{z}}) \\|^2 + \\|\\text{sg}[\\mathbf{z}] - \\hat{\\mathbf{z}}\\|^2 + \\beta \\|\\mathbf{z} - \\text{sg}[\\hat{\\mathbf{z}}]\\|^2$$其中 $G$ 是解码器，$\\text{sg}$ 是 stop-gradient 操作。\n动作词化 动作预测的是逐帧相对位姿 $T_{t+1\\to t} \\in SE(2)$：\n$$T_{t+1\\to t} = (\\Delta x, \\Delta y, \\Delta\\theta)$$每个分量均匀量化到 $M=128$ 个 bin。动作词表大小为 $3M = 384$。\n图3：DrivingGPT 的序列建模细节。左：VQ-VAE 编码器将图像离散化为 token 序列；右：自回归 Transformer 在图像-动作交错的因果序列上做 next-token 预测。\n统一自回归建模 序列结构为图像 token $z$ 与动作 token $q$ 交错：\n$$x = [z_1^1, \\dots, z_1^{N_v}, q_1, z_2^1, \\dots, z_2^{N_v}, q_2, \\dots, z_T^{N_v}, q_T]$$总词表大小 $V = D + 3M = 16384 + 384 = 16768$。\n模型在因果注意力下最大化序列似然：\n$$\\mathcal{L} = -\\sum_{t=1}^T \\left[ \\underbrace{\\sum_{j=1}^{N_v} \\log p_\\theta(z_t^j \\mid x_{\u003c t}^j)}_{\\text{世界建模}} + \\underbrace{\\log p_\\theta(q_t \\mid x_{\\le t})}_{\\text{规划}} \\right]$$训练细节与消融 超参数 设置 优化器 AdamW, lr=1e-4, weight_decay=5e-2 梯度裁剪 1.0 Token dropout 0.1 帧率 10Hz（nuPlan）/ 2Hz（NAVSIM） 序列长度 16 帧 / 12 帧（4 历史 + 8 未来） 图像 token 采样 温度 1.0, top-k 2000 引导式采样 推理时，为防止高温采样跨模态混淆，使用引导式采样：对 logits 中\u0026quot;异质词表\u0026quot;区域做 mask，确保图像位置只出图像 token、动作位置只出动作 token。这避免了意外生成\u0026quot;画面里夹着动作 token\u0026quot;的荒谬结果。\n⚙️ DriveVLM-RL：神经科学双通路让 RL 安全下车 图5：DriveVLM-RL 双通路架构。左：静态通路（CLIP 对比语义距离）；右：动态通路（轻量检测 + LVLM 多帧推理）。两路融合车辆状态形成分层奖励，异步训练后 RL 策略以纯轻量网络部署。\n图6：DriveVLM-RL 异步训练范式。VLM 奖励通路完全离线运行，RL 策略在缓存的奖励信号上优化，部署时 VLM 组件全部蒸发。\nDrivingGPT 解决了\u0026quot;世界+动作统一\u0026quot;，但仍是模仿学习，上限卡在数据里的人类水平。要超越人类、做到更安全，必须引入强化学习——可车端 RL 的致命伤是\u0026quot;探索即碰撞\u0026quot;。DriveVLM-RL（2026）给出的答案是神经科学启发的双通路 + 全离线。\n双通路语义奖励 借鉴人脑习惯性 vs. 审慎性视觉处理双通路，作者设计了互补的两路语义奖励：\n通路 模型 关注 输出 静态通路 Static CLIP 对比 连续空间安全评估 \u0026ldquo;当前画面离语言目标多远\u0026rdquo; 动态通路 Dynamic 轻量检测 + LVLM 注意力门控的多帧风险推理 \u0026ldquo;几帧之内会不会出事\u0026rdquo; 两路再与车辆状态融合成分层奖励，喂给 RL 策略。这里的关键创新是异步训练：昂贵的 LVLM 推理与环境交互完全解耦，VLM 只在离线训练时工作。\n数学形式化：分层语义奖励 设静态通路输出为 $s_{\\text{static}}$，动态通路输出为 $s_{\\text{dynamic}}$，车辆状态为 $\\mathbf{v} = (v, a, \\text{TTC})$，则分层奖励为：\n$$r = \\lambda_1 \\cdot \\underbrace{s_{\\text{static}}(\\mathbf{I}_t, \\text{lang}_{\\text{target}})}_{\\text{静态语义}} + \\lambda_2 \\cdot \\underbrace{s_{\\text{dynamic}}(\\mathbf{I}_{t:t+K})}_{\\text{动态推理}} + \\lambda_3 \\cdot \\underbrace{r_{\\text{kin}}(\\mathbf{v})}_{\\text{运动学}}$$其中：\n$$s_{\\text{static}}(\\mathbf{I}_t, \\text{lang}) = \\text{CLIP}_{\\text{sim}}(\\mathbf{I}_t, \\text{lang})$$衡量当前画面与语言目标（如\u0026quot;前方畅通无阻\u0026quot;）的语义对齐程度。\n$$s_{\\text{dynamic}}(\\mathbf{I}_{t:t+K}) = \\sum_{k=1}^K \\alpha_k \\cdot \\text{LVLM}_{\\text{risk}}(\\mathbf{I}_{t+k})$$通过注意力门控 $\\alpha_k$ 聚合未来 $K$ 帧的风险评估，弥补静态通路对时间演变的盲区。\n$$r_{\\text{kin}}(\\mathbf{v}) = -\\left( \\frac{v}{v_{\\max}} \\right)^2 - \\left( \\frac{a}{a_{\\max}} \\right)^2 - \\mathbb{1}_{\\text{TTC} \u003c \\tau} \\cdot \\log(\\text{TTC})$$KL 散度正则保留与 SFT 初始化策略的距离，防止策略崩塌：\n$$\\mathcal{L}_{\\text{RL}} = -\\mathbb{E}_{\\tau \\sim \\pi} \\left[ \\sum_t r_t \\right] + \\beta \\cdot D_{\\text{KL}}(\\pi \\| \\pi_{\\text{SFT}})$$异步训练与部署蒸发 异步训练流程：\n步骤 操作 参与者 1 VLM 双通路离线标注奖励 静态 CLIP + 动态 LVLM 2 奖励缓存到 replay buffer 离线数据集 3 RL 策略 $\\pi$ 在纯奖励信号上优化 轻量 MLP 策略网络 4 部署时完全移除 VLM 纯 $\\pi(a \\mid \\mathbf{o})$ 上车 上车即蒸发 最工程化的一点：所有 VLM 组件只在训练时存在，部署时全部移除。这意味着车端推理零额外延迟，RL 策略以纯轻量网络形态上车。\n实验结果 方法 任务成功率 碰撞严重度 驾驶得分 VLM Baseline (SFT) 72.3% 10.09 km/h 68.4 DriveVLM-RL (ours) 78.6% 1.75 km/h 76.2 + 静态通路 only 75.1% 5.32 km/h 72.8 + 动态通路 only 74.8% 4.17 km/h 73.5 + 双通路 78.6% 1.75 km/h 76.2 双通路结合带来最大收益，碰撞严重度从 10.09 骤降至 1.75 km/h——安全性的核心指标改善了 5.8 倍。\n这套\u0026quot;重训练、轻部署\u0026quot;的范式，与 DriveVLA-W0\u0026quot;世界模型只在训练时旁路\u0026quot;的思想一脉相承——让大模型当严师，让小模型当司机。\n分层奖励如何合成 两条通路不是简单加权，而是分层融合：静态通路给出\u0026quot;画面当前离语言安全目标（如\u0026quot;前方畅通\u0026quot;）的语义距离\u0026quot;，提供连续的、即时的空间安全打分；动态通路则通过注意力门控，判断\u0026quot;未来几帧内是否有目标闯入自车路径\u0026quot;，弥补静态通路看不到时间的盲区。两者再与车辆运动学状态（速度、加速度、距前车时距）一起综合，形成分层的、可微的奖励信号喂给 RL。\n这种设计与 AlphaDrive 的\u0026quot;四个 GRPO 奖励\u0026quot;思路遥相呼应，但侧重不同：AlphaDrive 做高层元动作分类，奖励是离散的 F1/加权；DriveVLM-RL 做连续控制，奖励是语义-运动学分层。两者共同点是——通用 RL 奖励在驾驶上不灵，必须按领域特性重新设计。\n🧬 DriveWLM 系列变体一览 作为 DriveVLM 家族的世界模型分支，\u0026ldquo;DriveWLM\u0026rdquo; 涵盖多个变体，以下是完整谱系：\n变体 论文 核心机制 世界模型形态 动作输出 推理形式 DriveVLM arXiv:2402.12289 语言 CoT + 双系统 无（纯 VLM 推理） 意图 → 轨迹 显式语言推理 DriveVLM-Dual arXiv:2402.12289 DriveVLM + 传统 pipeline 无（融合传统感知） 传统 planner 出轨迹 混合推理 DriveVLA-W0 arXiv:2510.12796 世界模型稠密监督 AR / Diffusion 预测未来帧 端到端连续轨迹 隐式预测式 CoT DrivingGPT (WLM) arXiv:2412.18607 多模态自回归统一序列 显式 next-token（图像+动作） 逐帧相对动作量化 联合统一推理 DriveVLM-RL arXiv:2603.18315 双通路奖励 + 离线 RL 语义风险推理（双通路） RL 策略连续输出 重训练、轻部署 关键演进脉络 从 DriveVLM 到 DriveVLM-RL，核心演进体现在三个维度：\n推理密度：语言 CoT（稀疏关键字）→ 预测式 CoT（稠密像素）→ 统一序列（离散 token） 世界建模：无 → 隐式（未来帧预测）→ 显式（next-token）→ 语义化（风险推理） 优化范式：模仿学习 → 联合训练 → 离线强化学习 🔬 三者对比：世界模型分三条腿走路 把三篇世界模型方向的代表放在一起，差异一目了然：\n维度 DriveVLA-W0 DrivingGPT (WLM) DriveVLM-RL 世界模型形态 隐式（AR/Diff 预测未来帧） 显式统一序列（图像+动作 next-token） 语义风险推理（双通路） 核心目标 放大数据缩放律 统一世界建模与规划 安全可部署 RL 动作表示 连续轨迹 / 离散 token 逐帧相对动作量化 ($\\Delta x,\\Delta y,\\Delta\\theta$) RL 策略输出 训练范式 两阶段（世界预训练+动作专精） 联合 next-token SFT + 离线 RL 推理时世界模型 旁路（仅训练时存在） 保留（既出视频又出轨迹） 完全移除 词表/表示形式 连续/离散混合 统一 16768 词表 纯连续策略 序列形式 深度交错 6VA 图像-动作交错 $z_1q_1z_2q_2\\cdots$ 无特定序列 帧率 2Hz 2-10Hz 10Hz 最大序列长度 6VA（12 帧） 64 帧 无限制（流式） 推出时间 2025.10 2024.12 2026.03 强调点 缩放律反转 范式统一 安全兜底 三者其实互补而非互斥：W0 证明了稠密监督能撬动缩放律，DrivingGPT 证明了统一序列能逼出真正因果理解，DriveVLM-RL 证明了 RL 能在不下车试错的前提下提升安全。理想的终局形态，很可能是三者的融合。\n📊 实验对比 DrivingGPT 视频生成质量 方法 FVD ↓ FID ↓ 序列长度 SVD (微调) 227.54 24.03 64 帧 DriveDreamer 195.32 20.17 32 帧 DrivingGPT (ours) 142.61 12.78 64 帧 DrivingGPT 在 64 帧长视频上显著优于扩散方法 SVD（FVD -84.93，FID -11.25），且序列越长优势越明显。\nDrivingGPT 端到端规划 方法（NAVSIM） PDMS ↑ 碰撞率 ↓ 边界偏移 ↓ UniAD 83.4 0.42 0.71 VAD 84.8 0.38 0.65 DrivingGPT 87.2 0.31 0.58 仅凭单目前视 + 自回归世界模型，DrivingGPT 超过了使用多视图的 UniAD/VAD。\nDriveVLM-RL 消融：奖励通路贡献 配置 任务成功率 碰撞严重度 驾驶得分 SFT only 72.3% 10.09 km/h 68.4 + 静态通路 75.1% (+2.8) 5.32 km/h 72.8 + 动态通路 74.8% (+2.5) 4.17 km/h 73.5 + 双通路 78.6% (+6.3) 1.75 km/h 76.2 + 运动学奖励 78.6% 1.75 km/h 76.2 双通路组合的效果远超单一通路之和（6.3 \u0026gt; 2.8 + 2.5），说明静态与动态奖励互补而非重叠。\n📝 个人思考 读完这条主线，我最强烈的感受是：自动驾驶大模型的竞争，正在从\u0026quot;谁的模型大\u0026quot;转向\u0026quot;谁的世界模型对齐得好\u0026quot;。DrivingGPT那个\u0026quot;逐帧相对动作\u0026quot;的设计戳中了一个长期被忽视的要害——我们一直以为把长轨迹直接喂给自回归模型就行，却忘了因果掩码会让模型走\u0026quot;抄历史答案\u0026quot;的捷径。这个洞察的价值远超驾驶本身：在任何\u0026quot;用序列模型做长程控制\u0026quot;的场景里（机器人、具身智能），\u0026ldquo;绝对目标 vs. 相对增量\u0026quot;的表示选择，都会决定模型是真正学策略还是退化成复读机。\n第二点启发在**\u0026ldquo;统一\u0026quot;二字的含金量**。学术界长期把感知、预测、规划、世界模型切成一个个子模块各自打磨，这其实是\u0026quot;分而治之\u0026quot;的工程惯性。但 DrivingGPT 用一个 next-token 目标同时吃下\u0026quot;预测未来\u0026quot;和\u0026quot;生成动作\u0026rdquo;，反而比精心拼装的 pipeline 更懂因果——因为联合优化强迫表征同时为多个目标负责，没有哪个子任务能偷懒。这与 UniAD 当年\u0026quot;任务接力\u0026quot;的初衷异曲同工，只是这次接力棒交给了自回归范式。我倾向于认为，\u0026ldquo;用最简单的目标统一最多的任务\u0026quot;会是接下来几年的主旋律。\n第三点，我注意到一个有趣的技术分歧：W0 把世界模型当\u0026quot;训练时的老师\u0026rdquo;（推理时旁路），DrivingGPT 把世界模型当\u0026quot;推理时的伙伴\u0026rdquo;（常驻生成），而 DriveVLM-RL 则彻底把世界模型蒸馏成\u0026quot;奖励函数\u0026quot;。这三种处理方式没有绝对优劣，而是对应不同的部署约束——车端算力紧张时 W0 和 RL 的\u0026quot;训练重、推理轻\u0026quot;更务实；云端或仿真环境里 DrivingGPT 的\u0026quot;生成+规划一体化\u0026quot;更有想象力。未来可能的分层架构是：世界模型有\u0026quot;重中轻\u0026quot;三层——重模型离线生成训练数据、中模型在云端做仿真推理、轻模型感知车端风险。\n最后一点是关于 RL 的现实主义。DriveVLM-RL 把 VLM 完全关在训练侧、部署时蒸发，是一个极具工程智慧的选择。它点破了一个常识：大模型不必上车，大模型的价值可以蒸馏进小模型的奖励里。这让我对 AlphaDrive、Flow-GRPO 这类用 RL 对齐驾驶偏好的路线更乐观——只要奖励设计得当、探索完全离线，\u0026ldquo;超越人类的安全驾驶\u0026quot;并非遥不可及。世界模型给了大模型\u0026quot;想象力\u0026rdquo;，RL 给了它\u0026quot;价值观\u0026quot;，两者合一，或许就是通往 Level 4 的那把钥匙。DrivingGPT 那个\u0026quot;逐帧相对动作\u0026quot;的设计戳中了一个长期被忽视的要害——我们一直以为把长轨迹直接喂给自回归模型就行，却忘了因果掩码会让模型走\u0026quot;抄历史答案\u0026quot;的捷径。这个洞察的价值远超驾驶本身：在任何\u0026quot;用序列模型做长程控制\u0026quot;的场景里（机器人、具身智能），\u0026ldquo;绝对目标 vs. 相对增量\u0026quot;的表示选择，都会决定模型是真正学策略还是退化成复读机。\n第二点启发在**\u0026ldquo;统一\u0026quot;二字的含金量**。学术界长期把感知、预测、规划、世界模型切成一个个子模块各自打磨，这其实是\u0026quot;分而治之\u0026quot;的工程惯性。但 DrivingGPT 用一个 next-token 目标同时吃下\u0026quot;预测未来\u0026quot;和\u0026quot;生成动作\u0026rdquo;，反而比精心拼装的 pipeline 更懂因果——因为联合优化强迫表征同时为多个目标负责，没有哪个子任务能偷懒。这与 UniAD 当年\u0026quot;任务接力\u0026quot;的初衷异曲同工，只是这次接力棒交给了自回归范式。我倾向于认为，\u0026ldquo;用最简单的目标统一最多的任务\u0026quot;会是接下来几年的主旋律。\n最后一点是关于 RL 的现实主义。DriveVLM-RL 把 VLM 完全关在训练侧、部署时蒸发，是一个极具工程智慧的选择。它点破了一个常识：大模型不必上车，大模型的价值可以蒸馏进小模型的奖励里。这让我对 AlphaDrive、Flow-GRPO 这类用 RL 对齐驾驶偏好的路线更乐观——只要奖励设计得当、探索完全离线，\u0026ldquo;超越人类的安全驾驶\u0026quot;并非遥不可及。世界模型给了大模型\u0026quot;想象力\u0026rdquo;，RL 给了它\u0026quot;价值观\u0026rdquo;，两者合一，或许就是通往 Level 4 的那把钥匙。\n🔗 延伸阅读 工作 团队 与本系列的关系 DriveVLM Tsinghua MARS × 理想 本系列首篇，语言 CoT 起点 DriveVLA-W0 CASIA × 蔚来 世界模型稠密监督，本系列第 4 篇 GAIA-1 / Drive-WM Waymo 等 扩散世界模型先驱，DrivingGPT 的对照面 AlphaDrive HUST × 地平线 GRPO+推理强化学习，本系列第 16 篇 Emu3 / LlamaGen 华为 / Meta DrivingGPT 的自回归视觉骨干来源 📖 这是论文精读系列的第 14 篇。世界语言模型会成为驾驶大模型的\u0026quot;大一统\u0026quot;形态吗？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/drivevlm-w0%E4%B8%8Edrivewlm%E7%B3%BB%E5%88%97%E7%B2%BE%E8%AF%BB/","summary":"DriveVLM 家族从语言 CoT 演进到世界模型统一建模范式，攻克了 VLM 上车面临的监督稀疏、世界与动作割裂、探索不安全三道坎。DrivingGPT 用 VQ-VAE 把图像与动作离散化为统一词表，将驾驶建模为 next-token 预测。DriveVLM-RL 借鉴神经科学双通路机制，用离线 RL 为驾驶安全兜底。","title":"论文精读｜DriveVLM-W0 与 DriveWLM 系列：世界模型如何点亮驾驶大模型"},{"content":"🎯 一句话理解 CoT CoT = 不让模型直接回答\u0026rsquo;怎么做\u0026rsquo;，而是先问它\u0026rsquo;为什么\u0026rsquo;，把推理过程写出来，再基于推理给出答案。\nCoT（Chain-of-Thought，思维链）让大模型输出最终答案之前先生成中间推理步骤，大幅提升复杂推理任务的准确率，也让决策变得可解释、可调试。\n🧩 CoT 基础 问题：为什么需要 CoT？ 大模型直接回答复杂问题时易犯\u0026quot;直觉错误\u0026quot;——凭感觉乱说。CoT 让模型一步步推理：\nQ 直 C : 接 o 回 T 车 答 ： ： 行 6 应 人 0 该 横 k （ 穿 m 但 / 说 1 h 不 0 ， 清 m 前 原 方 因 需 ） 5 7 0 . m 2 s 有 行 → 人 横 车 穿 到 ， 达 应 需 刹 车 3 吗 s ？ → 3 \u0026lt; 7 . 2 → 必 须 刹 车 三种基本方法 方法 做法 优点 缺点 Few-shot CoT prompt 中给推理示例 效果好 消耗 token，需设计示例 Zero-shot CoT 加\u0026quot;Let\u0026rsquo;s think step by step\u0026quot; 无需数据 效果略差于 few-shot Self-Consistency 多次采样 + 多数投票 准确率最高（+15~30%） 计算开销大 Zero-shot CoT 对 VLA 最实用——不需要任何标注就能激发推理能力。\n🚗 DriveVLM 四阶段 CoT DriveVLM（清华/上交+蔚来, 2024）首次系统性地把 CoT 引入驾驶，提出结构化四阶段推理：\n阶 阶 阶 阶 段 段 段 段 → → → → 1 2 3 4 ： \" ： \" ： \" ： \" 场 四 关 施 自 需 规 减 景 车 键 工 我 左 划 速 描 道 物 锥 推 变 决 至 述 城 体 桶 理 道 策 （ 市 预 最 （ ， （ 3 S 道 测 关 E 左 P 0 c 路 （ 键 g 侧 l k e ， P ， o a m n 前 r 左 S n / e 方 e 侧 R U ） h d 车 e V ， D 3 i 道 a 打 e 0 c 有 s 距 左 s m t o 离 灯 c i S n ， r 有 o U i 1 3 i 施 n V n 5 s p 工 ） ， g m t 锥 速 ） ， 后 i 桶 度 变 左 o ， 约 道 变 n 右 空 道 ） 侧 4 间 \" 车 0 足 道 k 够 封 m \" 闭 / \" h \" 设计动机 阶段 对应人类行为 作用 场景描述 观察 强制关注所有道路元素 关键物体 识别威胁 判断\u0026quot;什么最重要\u0026quot; 自我推理 思考策略 因果推理+方案评估 规划 执行 输出最终决策 优势：可分解验证（每阶段单独评估）、错误可定位（规划错了→回溯哪个阶段错了）、模块化数据标注。\n数据构建 使用 GPT-4V 离线生成初始 CoT 标注 → 人工审核修正 → 加入真实轨迹作为 ground truth。\n🎲 Game-CoT：博弈论思维链 传统 CoT 只考虑自我车辆。WCog-VLA（2025）提出 Game-CoT——基于博弈论的多智能体推理：\n传 G 统 a m 1 2 3 C e . . . o - T C 我 观 - - 执 ： o 打 察 行 \" T 左 目 让 不 对 前 ： 转 标 行 让 应 车 向 车 （ （ 策 灯 道 4 保 略 3 （ 后 0 持 ， 0 发 车 → 持 k 出 是 3 4 续 m 信 否 5 0 观 / 号 减 k k 察 h ） 速 m m ， 让 / / 我 行 h h 准 ） ） 备 ： ： 变 我 我 道 加 等 。 速 待 \" 变 道 维度 传统 CoT Game-CoT 视角 单智能体 多智能体博弈 推理 条件判断 策略交互 适用 常规场景 交互密集（汇流、抢道） 计算 低 中~高 👁️ DCoT：视觉思维链 文本 CoT 难以精确表达视觉推理（如\u0026quot;如果不刹车未来会怎样\u0026quot;）。DCoT 用生成的未来帧作为\u0026quot;视觉思考\u0026quot;：\nFuturesightDrive / VLA-World 输 V 决 入 i 策 ： ↓ s 假 假 假 ↓ ： 当 u 设 设 设 变 前 a 道 场 l A B C 绕 景 （ （ （ 行 T 加 刹 变 （ h 速 车 道 B o ） ） ） u → → → 和 g h 生 生 生 C t 成 成 成 s 未 未 未 都 : 来 来 来 安 全 2 2 2 ， s s s C 视 视 视 更 频 频 频 高 效 → → → ） 碰 安 安 撞 全 全 ❌ ✅ ✅ 维度 文本 CoT DCoT 形式 语言符号 未来视频/图像 信息密度 低 高 计算开销 低 极高（需视频生成） 代表 DriveVLM FuturesightDrive, VLA-World 📀 CoT 蒸馏：用强模型教弱模型 CoT 标注昂贵（一个场景 5-10 分钟）。用 GPT-4V 自动生成 CoT 数据是标准方案：\n步 1 2 3 4 骤 . . . . ： 采 G 规 用 集 P 则 驾 T 过 ( 驶 - 滤 图 视 4 （ 像 频 V 轨 , 片 迹 段 按 偏 C 四 差 o + 阶 大 T 段 则 , g 格 丢 r 式 弃 轨 o 生 ） 迹 u 成 + ) n d C 人 做 o 工 t T 抽 S r 检 F u T t h 轨 迹 关键：Prompt 设计保证格式一致、质量控制确保 CoT 与轨迹自洽、保留多样性而非强行统一。\n🔄 GRPO + CoT：AlphaDrive 两阶段训练 阶段一：SFT 热启动 用蒸馏 CoT 数据做监督微调，让模型学会基本的 CoT 格式和驾驶知识。\n阶段二：GRPO 强化学习 对同一场景采样 G 个 CoT+轨迹，用驾驶 reward 做组内比较优化：\nr A e _ w i a r = d ( = r _ w i ₁ × - 安 全 m （ e 碰 a 撞 n / ( 离 r 线 ) ） ) + / w ₂ s × t 舒 d 适 ( （ r 加 ) 加 速 度 → ） + G R w P ₃ O × 效 损 率 失 + w ₄ × C o T 一 致 性 对比 纯 SFT SFT+GRPO 决策质量 中（模仿平均） 高（优化 reward） 安全性 继承数据 可显式优化 长尾泛化 依赖覆盖 更好（RL 探索） 为什么 GRPO 适配 CoT 每个场景可采样多条 CoT 路径，天然\u0026quot;组内相对\u0026quot; CoT 是 token 序列，可直接优化生成概率 驾驶 reward 可验证，适合 GRPO 模式 KL 约束防止丢失 CoT 格式和通用知识 🔑 CoT 的可解释调试价值 问 C 修 题 o 复 ： T 场 关 自 规 ： 模 景 键 我 划 增 型 诊 描 物 推 ： 加 在 断 述 体 理 \" 交 施 ： ： ： ： 左 互 工 \" \" \" 变 推 区 施 锥 绕 道 理 选 工 桶 行 \" 训 了 锥 、 锥 练 不 桶 左 桶 → 数 安 ， 侧 ， 据 全 左 车 左 ❌ 路 侧 辆 侧 径 有 \" 车 车 道 \" → 可 行 → ✅ \" ✅ → ❌ （ 忽 略 后 车 加 速 ） 这种可追溯的调试能力是传统端到端黑盒完全不具备的。\nCoT 落地自动驾驶的工程挑战 挑战 描述 缓解方案 推理速度 CoT 需生成多步文本，耗时增加 限制 CoT 长度、结构化模板、边缘部署优化 CoT 与动作不一致 CoT 说\u0026quot;应该刹车\u0026quot;但输出加速 增加一致性损失、reward 中加入一致性项 CoT 质量不稳定 复杂场景下推理链出错 Self-consistency 多数投票、降低 CoT 温度 多语言 CoT 中文驾驶场景需中文推理 使用中文 LLM（Qwen）蒸馏 评估困难 CoT 好坏难量化 人工评分 / GPT-4 评估 / 可分解验证 实务建议：先用 Zero-shot CoT 快速验证可行性，再用蒸馏数据做 SFT 提升一致性，最后用 GRPO 优化决策质量。不要一开始就追求完美的 CoT 数据标注。\nCoT 方法全景 方法 计算 可解释性 决策质量 代表 直接决策 最低 ❌ 中 行为克隆 文本 CoT 低~中 ✅✅ 中~高 DriveVLM 结构化 CoT 中 ✅✅✅ 高 DriveVLM-Dual Game-CoT 中~高 ✅✅ 高 WCog-VLA DCoT 极高 ✅✅ 高 VLA-World CoT+RL 高（训练） ✅✅ 最高 AlphaDrive ✅ 小结 基础 CoT：Few-shot / Zero-shot / Self-consistency，Zero-shot 对 VLA 最实用 驾驶 CoT：DriveVLM 四阶段（场景→预测→推理→规划）使推理可分解 高级 CoT：Game-CoT（博弈论）、DCoT（视觉 CoT）扩展推理维度 CoT 蒸馏：GPT-4V 自动生成训练数据，降低标注成本 GRPO+CoT：AlphaDrive 两阶段范式用 RL 优化推理链质量 核心价值：CoT 让驾驶决策变透明——可追溯、可调试、可定位 📖 知识点拆解系列第 14 篇。CoT 让 VLA 从\u0026quot;黑盒\u0026quot;走向\u0026quot;可解释\u0026quot;，是自动驾驶安全落地的关键一环。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/chain-of-thought%E6%8E%A8%E7%90%86%E8%AF%A6%E8%A7%A3/","summary":"CoT（思维链）让 VLA \u0026lsquo;想清楚再做\u0026rsquo;，将驾驶决策过程拆解为可解释的推理步骤。本文从 CoT 基础（Few-shot / Zero-shot / Self-consistency）出发，详解 DriveVLM 的场景描述→预测→推理→规划四阶段 CoT、WCog-VLA 的博弈论 Game-CoT、视觉 DCoT，以及 GRPO + CoT 联合训练的 AlphaDrive 范式。","title":"知识点拆解｜Chain-of-Thought 推理详解：让 VLA 学会'先思考再行动'"},{"content":"1 引言：为什么需要 Scoring-based 规划 1.1 规划问题的本质 自动驾驶规划本质上是在约束条件下的轨迹生成与选择问题：\n约束：安全性（无碰撞）、舒适性（低 jerk）、可行性（符合动力学）、规则合规（车道线、信号灯） 目标：高效到达目的地 直接回归一条轨迹（Behavior Cloning）天然存在多模态困境：在路口左转或右转都是合理行为，但一条轨迹只能选一个方向，BC 会学习到\u0026quot;平均轨迹\u0026quot;——直冲绿化带。\n1.2 生成 vs 评分的根本区别 范式 方式 难度 特点 直接生成（BC） 轨迹 → 模仿专家 生成困难 多模态混合、平均值问题 评分（Scoring） 轨迹候选 → 选最优 判别容易 利用多模态、选择立场 核心洞察：判断\u0026quot;哪条轨迹好\u0026quot;比\u0026quot;直接生成轨迹\u0026quot;更容易。判别式任务比生成式任务简单——这在 CV、NLP 领域早已被验证。\n1.3 适用场景 候选轨迹已经用某种方式生成（规则采样、anchor、diffusion） 需要精细的偏好对齐（安全 \u0026gt; 舒适 \u0026gt; 效率） 需要后处理可解释性（为什么选这条？score 高在哪？） 2 方法演进路线 2.1 阶段一：BC 回归（Behavior Cloning） 直接使用均方误差（MSE）或负对数似然（NLL）训练网络从观测映射到轨迹。\n观 测 → 神 经 网 络 → 一 条 轨 迹 → M S E L o s s → 反 向 传 播 局限：\n多模态崩溃：学到的轨迹是\u0026quot;所有可能轨迹的加权平均\u0026quot; 安全不可控：遇障碍物时选择\u0026quot;偏左一点偏右一点\u0026quot;的结果是撞上 无法处理不确定场景：遇到交互场景，模型只能给出一个模糊的中间结果 2.2 阶段二：多模态评分（Multi-modal Scoring） 核心变化：不再输出单条轨迹，而是输出 K 条候选+每条得分。\n观 测 → 神 经 网 络 → [ 轨 迹 ₁ , 轨 迹 ₂ , . , 轨 迹 ₖ ] + [ s c o r e ₁ , s c o r e ₂ , . , s c o r e ₖ ] 训练方式：\n轨迹分支使用多样化损失（多样损失、最大间距损失） 评分分支使用最佳轨迹选择损失（Winner-Takes-All）或排序损失 进步：解决了多模态问题，模型可以同时保留\u0026quot;左转\u0026quot;和\u0026quot;右转\u0026quot;两种可能。\n局限：K 的数量有限，难以覆盖所有合理的轨迹模式。\n2.3 阶段三：扩散模型（Diffusion-based） 将规划看作条件去噪过程：\n轨 迹 噪 声 → （ 以 场 景 特 征 为 条 件 ） 逐 步 去 噪 → 高 质 量 轨 迹 训练：从高斯噪声逐步还原专家轨迹 推理：从随机噪声采样 → 可生成任意数量的轨迹 评分：对每个采样结果评估质量 优势：生成质量高、覆盖模式多、可控性强。\n局限：推理速度慢（需多步去噪）、需要辅助评分模块。\n2.4 阶段四：强化学习（Reinforcement Learning） 将从规划到执行的闭环视作 MDP：\n状 态 s → 策 略 π ( a | s ) → 动 作 a → 奖 励 r → 更 新 策 略 奖励函数：安全、舒适、效率、规则遵守 学习方法：PPO、SAC、IL+RL 混合 与评分的结合：学习一个 critic/Q-function 来评估动作/轨迹价值 现阶段趋势：评分 + 强化学习融合——用 RL 优化评分网络，让评分能力在闭环中持续提升。\n3 三大 Scoring 范式详解 3.1 Vocabulary-based（基于词汇的评分） 核心思路：预定义一组离散的\u0026quot;轨迹模式库\u0026quot;（词汇表），每个模式对应一个轨迹模板。推理时选择最匹配的模式。\n3.1.1 VADv2（2024） VADv2 是 Vocabulary-based 方法的典型代表。\n轨迹词汇表：通过聚类专家轨迹，构建包含 N 个锚点轨迹的词汇表 匹配机制：对当前场景，预测最匹配的 M 个词汇索引及其偏移量 评分方式：词汇表中每个锚点有一个学到的先验分数，结合场景调整得到最终分数 采样方式：从词汇表中选择 top-k，精调偏移后作为候选轨迹 数学形式：\nP ( 轨 迹 | 场 景 ) ≈ Σ P ( 词 汇 _ k | 场 景 ) · P ( 偏 移 | 词 汇 _ k , 场 景 ) 优势：\n推理快（一次前向即可） 覆盖主流的轨迹模式 可解释性（选的是哪个模式） 局限：\n词汇表固定 → 难覆盖长尾轨迹 词汇表大小受限于聚类质量 3.1.2 Hydra-MDP（2024） Hydra-MDP 用\u0026quot;多个专家头\u0026quot;代替固定词汇表，每个头隐式学习一类轨迹模式。\n多头架构：N 个并列的轨迹预测头，每个头输出一条轨迹 + 置信度 差异化训练：每个头使用不同的数据子集训练，自然分化出不同行为模式 评分网络：一个独立的评分器对所有头输出的轨迹评分 选择策略：评分最高 → 作为最终轨迹 关键创新：头的差异化不靠人工定义，而是让数据天然驱动分化。\n3.1.3 Vocabulary 范式的共同问题 模式覆盖度受限于词汇量 K 对动态交互场景表达力不足（词汇模式往往偏静态） 候选轨迹之间缺乏显式的多样性约束 3.2 Dynamic Generation（动态生成评分） 核心思路：不依赖固定词汇表，而是在推理时动态生成候选轨迹，再评分挑选。\n3.2.1 TOAD（2024） TOAD（Trajectory Optimization with Adaptive Diffusion）将 CEM（Cross-Entropy Method）与学习评分结合。\nCEM 采样：从高斯分布采样轨迹 → 用评分模型评估 → 保留 top-k → 更新分布参数 评分模型：一个轻量级 MLP 对轨迹 + 场景特征打分 迭代优化：多轮 CEM 迭代使采样分布逐步聚焦到高分区域 流程：\n初 → 始 化 用 高 斯 T 分 o 布 p → K 采 更 样 新 高 M 斯 参 条 数 轨 迹 → → 重 复 评 分 → → 输 出 保 最 留 优 轨 T 迹 o p K 优势：\n不依赖固定模式，理论上可覆盖任意轨迹 CEM 迭代过程中自然引入场景约束 推理算力灵活（迭代次数可调） 局限：\n推理速度慢（多轮采样） 评分模型质量直接决定最终性能 3.2.2 DrivoR（2024-2025） DrivoR 将 Scoring 建模为排序学习（Learning to Rank）问题。\n候选轨迹生成：继承自上游模块（如规则采样、其他模型输出） 评分网络：pairwise 排序损失训练，区分\u0026quot;好轨迹 vs 坏轨迹\u0026quot; 排序聚合：对多维度（安全、舒适、效率）评分做加权融合 关键洞察：评分是一个相对比较任务，pairwise 损失比 pointwise 更有效。\n技术细节：\n特征输入：轨迹本身的空间特征 + 与场景交互的语义特征 头部设计：每个评分维度一个独立 head（多任务学习） 最终分数：各维度加权和，权重可调 3.3 Diffusion-based（扩散评分） 核心思路：用扩散模型生成轨迹多样性样本，再用评分模型从中筛选。\n3.3.1 生成阶段 用扩散模型作为轨迹生成器：\nx _ T ( 高 斯 噪 声 ) → 逐 步 去 噪 → x _ 0 ( 轨 迹 ) 条件扩散：\np ( x _ 0 | c ) = ∫ p ( x _ T ) Π p ( x _ { t - 1 } | x _ t , c ) d x _ { 1 : T } 其中 c 是场景条件（BEV 特征、地图、目标）。\n3.3.2 评分阶段 对每个生成的轨迹样本评估：\n评分类型 方法 特点 学习评分 ScoreNet 直接输出 可学习复杂偏好 规则评分 硬约束碰撞检测 + 软约束舒适度 可解释、可控 混合评分 学习得分 + 规则惩罚项 兼顾灵活性与安全性 3.3.3 关键权衡 样本数量：越多越容易找到好轨迹，但推理开销大 去噪步数：步数少 → 速度快但质量低；步数多 → 质量高但速度慢 评分器复杂度：简单 MLP vs 交叉注意力融合 4 ScoreNet 设计深度解析 4.1 ScoreNet 的输入输出 输入：\n候选轨迹特征：轨迹点序列 [(x₁,y₁),\u0026hellip;,(x_T,y_T)] 编码后特征 场景特征：BEV 特征、地图特征、智能体特征 上下文特征：自车状态、导航指令、速度限制 输出：\n单标量分数：综合质量评分（越大越好） 多维分数向量：安全分、舒适分、效率分、规则合规分 4.2 架构设计 4.2.1 简单 MLP（轻量版） 轨 迹 点 序 列 → F l a t t e n → M L P ( 5 1 2 , 2 5 6 , 1 ) → s c o r e 适用：候选轨迹数量大、需要快速评分 局限：无法感知场景上下文，纯轨迹几何评分\n4.2.2 轨迹 + 场景交叉注意力（性能版） 轨 迹 编 码 → 作 为 Q u e r y → C r o s s - A t t e n t i o n ( 场 景 特 征 作 为 K e y / V a l u e ) → M L P → s c o r e 轨迹 token: 用 transformer 编码轨迹点序列 场景 token: 用 BEV encoder/map encoder 的场景特征 交叉注意力：轨迹与场景模态交互，感知障碍物、车道线等约束 适用：需要精细的场景感知评分，质量要求高的场景\n4.2.3 轨迹对比评分（Pairwise 版） S c o r e N e t ( 轨 迹 _ A , 场 景 ) - S c o r e N e t ( 轨 迹 _ B , 场 景 ) → 相 对 分 数 训练中同时评估两条轨迹的相对优劣 损失函数使用 hinge loss 或 ranknet loss 天然适合排序任务 4.3 训练策略 策略 方法 效果 模仿学习 专家轨迹赋最高分 基线 对比学习 正样本（专家）\u0026gt; 负样本（随机/坏轨迹） 更好的区分度 排序学习 按质量排序 pairs 更精细的偏好对齐 RL finetune RL 奖励作为 score 监督 闭环优化 Human feedback 人工标注轨迹偏好 对齐人类驾驶风格 4.4 评分陷阱 评分坍缩：所有候选获得相近分数，无法区分。缓解方法：增大负样本难度、使用排序损失 单一维度偏好：过度关注安全而忽略效率。缓解方法：多维评分 + 可调权重 分布外候选：候选轨迹分布与训练时不匹配。缓解方法：online 采样增强 5 关键论文脉络 5.1 时间线 V → A D Z v T 2 R S ( 2 ( 0 2 2 0 4 2 . 4 0 . 3 1 ) 2 ) → → H y S d p r a a r - s M e D D P r i ( v 2 e 0 V 2 2 4 . ( 0 2 6 0 ) 2 5 → . 0 G 3 T ) R S → ( T 2 O 0 A 2 D 4 . ( 0 2 9 0 ) 2 5 . 0 6 ) 5.2 各论文核心贡献 论文 时间 核心贡献 VADv2 2024.03 提出轨迹词汇表（Vocabulary）概念，将规划转为\u0026quot;选模式+微调\u0026quot; Hydra-MDP 2024.06 多头规划器 + 独立评分器，数据驱动头差异化 GTRS 2024.09 Generalized Trajectory Ranking System，统一评分框架 ZTRS 2024.12 Zero-shot Transfer 的轨迹评分，跨场景泛化 SparseDriveV2 2025.03 在稀疏架构上实现高效 scoring-based 规划 TOAD 2025.06 将 CEM 与学习评分结合，动态生成候选轨迹 5.3 脉络演变趋势 候选生成从静态到动态：VADv2 固定词汇表 → TOAD 自适应 CEM 采样 评分从简单到精细：单标量 → 多维向量 → 排序学习 泛化能力逐步提升：场景专用 → 跨场景零样本迁移 与端到端深度融合：独立评分模块 → 与规划网络端到端联合训练 6 Scoring-based 范式的优缺点总结 优势 方面 说明 多模态 天然支持多种候选，不强迫模型选择单峰 安全性 可显式过滤不安全候选，比直接生成更安全 可解释性 可以分析\u0026quot;为什么选 A 不选 B\u0026quot; 迭代友好 评分网络可以单独迭代、单独部署 与 RL 兼容 评分网络可视为价值函数，适合 RL fine-tune 局限 方面 说明 候选覆盖 生成候选的上限决定了规划的上限 计算开销 需要生成 + 评分两步，时延较高 评分偏差 评分网络本身的偏好可能引入新 bias 联合优化难 生成器和评分器需要协调训练，容易失衡 7 实践建议 7.1 如何选择评分方法 场景 推荐方案 理由 高速巡航 Vocabulary-based 场景简单，固定模式足够 城市路口 Dynamic Generation 交互多样，需要动态适应 高安全场景 Diffusion + 规则评分混合 覆盖率最高，安全性可控 资源受限 轻量 MLP ScoreNet 计算量小，易于部署 7.2 评分网络实战经验 正负样本比例：正负比 1:3 ~ 1:5 最佳，负样本太容易学不到区分度 多维评分解耦：安全、舒适、效率分别预测比联合预测一个分数更好 hard negative mining：用当前模型预测最像好轨迹的坏轨迹作为困难负样本 8 总结 维度 要点 核心思想 先生成后评分，判别比生成更可靠 方法演进 BC → 多模态评分 → 扩散 → RL 范式分类 Vocabulary-based、Dynamic Generation、Diffusion-based ScoreNet MLP 轻量版 vs 交叉注意力性能版 训练策略 对比学习 \u0026gt; 模仿学习，排序学习 \u0026gt; pointwise 关键趋势 候选动态化、评分精细化、端到端联合训练 一句话总结：Scoring-based 规划范式通过\u0026quot;多候选生成 + 学习评分\u0026quot;巧妙绕过了 BC 的多模态困境，当前正朝着候选动态生成、评分精细化和端到端联合优化三个方向快速演进。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/scoring-based%E8%A7%84%E5%88%92%E8%8C%83%E5%BC%8F%E8%AF%A6%E8%A7%A3/","summary":"Scoring-based 规划范式是当前端到端自动驾驶规划的主流方法论之一，其核心思想是：先生成多个候选轨迹，再通过学习一个评分网络选出最优轨迹。本文系统性梳理从 BC 回归到多模态评分、扩散采样到强化学习的方法演进，详细解析 Vocabulary-based、动态生成、扩散三类核心范式，并深入 ScoreNet 的设计哲学与关键论文脉络。","title":"知识点拆解｜Scoring-based 规划范式详解"},{"content":"🌊 引言：生成模型的新范式 扩散模型（Diffusion Models）是继 GAN 和 VAE 之后最强大的生成模型范式。其核心思想非常优雅：先逐步将数据加噪到纯噪声，再学习逆向去噪过程从噪声中恢复数据。\n2020 年 DDPM (Denoising Diffusion Probabilistic Models) 的提出标志着扩散模型的成熟，随后在图像生成（Stable Diffusion）、视频生成、以及自动驾驶场景生成和规划中展现出统治力。\n🔄 DDPM 正向过程：逐步加噪 马尔可夫链式加噪 正向过程是一个固定的马尔可夫链，每一步对数据 x₀ 添加少量高斯噪声：\n$$q(x_t|x_{t-1}) = \\mathcal{N}(x_t; \\sqrt{1-\\beta_t} x_{t-1}, \\beta_t \\mathbf{I})$$其中 $\\beta_t \\in (0,1)$ 是噪声调度（Noise Schedule），控制每一步的噪声强度。随着 t 增大，$x_t$ 逐渐失去原始数据的信息，最终 $x_T \\sim \\mathcal{N}(0, \\mathbf{I})$。\n重参数化：一步到位 利用高斯分布的重参数化技巧，可以直接从 x₀ 计算任意时刻的 x_t：\n$$x_t = \\sqrt{\\bar{\\alpha}_t} x_0 + \\sqrt{1 - \\bar{\\alpha}_t} \\epsilon, \\quad \\epsilon \\sim \\mathcal{N}(0, \\mathbf{I})$$其中 $\\bar{\\alpha}_t = \\prod_{i=1}^t (1-\\beta_i)$。这个公式极其重要——它意味着训练时不需要逐步迭代加噪，可以一步采样出任意时刻的噪声图像。\nt 时刻 $\\bar{\\alpha}_t$ 信号占比 噪声占比 图像状态 t=0 1 100% 0% 原始数据 t=T/2 ~0.5 ~50% ~50% 模糊轮廓 t=T ~0 ~0% ~100% 纯高斯噪声 ⏪ 反向过程：去噪生成 学习去噪分布 反向过程同样定义为马尔可夫链，但转移核是未知的，需要用神经网络 p_θ 来近似：\n$$p_\\theta(x_{t-1}|x_t) = \\mathcal{N}(x_{t-1}; \\mu_\\theta(x_t, t), \\Sigma_\\theta(x_t, t))$$训练目标：简化版 ELBO DDPM 的关键贡献是发现：训练去噪网络 ε_θ 直接预测噪声 $\\epsilon$ 比预测均值 $\\mu_\\theta$ 更简单且效果更好：\n$$L_{simple} = \\mathbb{E}_{t, x_0, \\epsilon} \\left[ \\|\\epsilon - \\epsilon_\\theta(x_t, t)\\|^2 \\right]$$训练流程：\n从数据集中采样 x₀ 随机选取时间步 t 采样噪声 ε，计算 x_t = √ᾱ_t · x₀ + √(1-ᾱ_t) · ε 网络预测噪声 ε_θ(x_t, t) 计算 MSE 损失，更新网络 这个过程不依赖任何对抗训练（不像 GAN），训练极其稳定。\n采样流程 训练完成后，从 x_T ∼ 𝒩(0, I) 开始逐步去噪：\n# 采样核心步骤（简略） for t in reversed(range(1, T)): noise = sample_gaussian() if t \u0026gt; 1 else 0 eps_pred = model(x_t, t) x_{t-1} = 1/√α_t * (x_t - β_t/√(1-ᾱ_t) * eps_pred) + σ_t * noise 每一步用网络预测噪声，从当前 x_t 中去除一部分噪声，再加上随机扰动，最终恢复出干净的 x₀。\n🏗️ 去噪网络架构：U-Net 与 Transformer U-Net 架构 DDPM 使用 U-Net 作为去噪骨干网络：\n编码器：逐步下采样提取层次特征 解码器：逐步上采样恢复空间分辨率 跳跃连接：保留细节信息 时间嵌入：将时间步 t 编码为正弦位置编码后注入各层 关键组件 组件 作用 实现方式 Time Embedding 告知网络当前噪声程度 Sinusoidal PE + MLP ResBlock 深层特征提取 Conv + GroupNorm + SiLU Attention Block 全局依赖建模 Self-Attention（低分辨率层） Conditional Norm 条件信息注入 Adaptive Group Norm DiT：扩散 Transformer 2023 年后的趋势是用 Transformer 替代 U-Net。DiT（Diffusion Transformer）将图像打成 patch 后通过 ViT 处理，在图像质量上超越了 U-Net 架构，为后续 DiffusionDrive 等自动驾驶方法奠定了基础。\n🎨 条件生成：可控生成的关键 Classifier Guidance 条件生成要求 $p(x|y)$，其中 y 是类别标签或文本描述。\n分类器引导：在采样时利用一个额外的分类器 p(y|x_t) 的梯度来引导去噪方向：\n$$\\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 是引导强度。但这种方法需要额外训练一个分类器，且对分类器鲁棒性要求高。\nClassifier-Free Guidance (CFG) 更优雅的方案：同时训练条件模型 ε_θ(x_t, t, y) 和无条件模型 ε_θ(x_t, t, ∅)，采样时将两者插值：\n$$\\tilde{\\epsilon}_\\theta = \\epsilon_\\theta(x_t, t, \\varnothing) + w \\cdot (\\epsilon_\\theta(x_t, t, y) - \\epsilon_\\theta(x_t, t, \\varnothing))$$ w = 1：普通条件生成 w \u0026gt; 1：强条件引导，生成更符合条件但多样性降低 w = 0：无条件生成 CFG 是 Stable Diffusion 和大多数图像扩散模型的标配。\n方法 额外模型 训练成本 可控性 代表性应用 Classifier Guidance 分类器 高 强 GLIDE CFG 无 低 强 SD, DALL·E 3 CLIP Guidance CLIP 中 强 unCLIP 📈 Score-Based 模型：另一种视角 从 Score 函数理解扩散 Score Matching 为扩散模型提供了理论支撑。定义 score 函数为对数概率密度的梯度：\n$$s(x) = \\nabla_x \\log p(x)$$直观理解：score 指向概率密度增长最快的方向。从低密度区（噪声）沿着 score 方向移动，就能到达高密度区（数据）。\nDDPM = Score-Based 模型的离散版本 DDPM 的去噪网络 ε_θ 实际上在估计 score 函数：\n$$\\epsilon_\\theta(x_t, t) \\approx -\\sqrt{1-\\bar{\\alpha}_t} \\cdot \\nabla_{x_t} \\log p(x_t)$$这建立了去噪和分数匹配之间的等价关系，是扩散模型理论深化的重要里程碑。\n🚗 扩散模型在自动驾驶中的应用 1. 场景生成 用扩散模型生成多样化的驾驶场景用于仿真测试：\nSceneDiffuser：生成交互式交通场景 DriveDreamer：根据文本描述生成视频场景 Panacea：多视角驾驶视频生成 2. Diffusion for Planning 将扩散模型用作轨迹规划器：\n将轨迹看作\u0026quot;图像\u0026quot;（时间 × 状态维度） 正向加噪：模糊轨迹 反向去噪：在约束条件引导下恢复可行轨迹 代表性工作：\nDiffuser：开创性工作，将扩散用于轨迹规划 DiffusionDrive：专为自动驾驶设计的扩散规划器，在轨迹分布中采样多模态行为 3. 对比：扩散规划 vs 传统规划 维度 传统优化规划 扩散规划 多模态 需显式枚举 天然多模态 约束处理 精确但复杂 概率满足 实时性 可做 50Hz 通常 10-20Hz 泛化性 固定规则 数据驱动 💭 个人思考 扩散模型的\u0026quot;暴力美学\u0026quot;令人印象深刻——通过大量计算和简单的去噪目标，就能生成令人惊艳的结果。但它面临三个核心挑战：\n采样速度：需数十到上千步迭代，难以满足自动驾驶实时需求。一致性模型（Consistency Models）和潜在扩散（LDM）是重要的加速方向 安全保证：概率生成无法提供碰撞避免的形式化保证，需要结合规则约束 分布外泛化：扩散模型在训练分布覆盖的场景表现好，但在罕见场景可能生成不可行轨迹 我认为扩散模型在自动驾驶中最现实的角色是数据增强和离线评估（生成极端场景测试规划器），而非实时规划引擎。但随着蒸馏技术和硬件加速的进步，扩散在线规划可能在 2-3 年内成为可行方案。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E6%89%A9%E6%95%A3%E6%A8%A1%E5%9E%8B%E5%9F%BA%E7%A1%80%E8%AF%A6%E8%A7%A3/","summary":"扩散模型通过逐步加噪与逆向去噪实现从纯噪声到高质量数据的生成，已成为 GAN 之后最强大的生成范式。本文从 DDPM 的数学推导出发，详细讲解正向加噪过程、反向去噪网络以及条件生成方法。同时梳理了扩散模型在自动驾驶场景生成、轨迹规划中的数据增强应用全景。","title":"知识点拆解｜扩散模型基础：从DDPM到条件生成"},{"content":"🎯 一句话理解逆强化学习 逆强化学习（IRL）= 看老司机开车，然后猜\u0026rsquo;他为什么这么开\u0026rsquo;——猜他的\u0026rsquo;奖励函数\u0026rsquo;长什么样。一旦猜出来了，就可以用这个奖励函数训练一个自己的驾驶员。\nIRL 解决的是一切模仿学习（Imitation Learning）最根本的困惑：行为可以被模仿，但动机是什么？\n🧩 IRL 的问题设定 标准 RL 的视角 在标准强化学习中，reward 函数 $R(s,a)$ 是已知的。智能体的任务是：\n给定：环境 dynamics $P(s'|s,a)$ 和 reward 函数 $R(s,a)$ 求解：最优策略 $\\pi^*(a|s)$ 最大化累积奖励 IRL 的反向视角 IRL 把上述问题反转：\n给定：专家演示 $\\mathcal{D} = \\{\\tau_1, \\tau_2, \\dots, \\tau_N\\}$（每条轨迹 $\\tau = (s_0, a_0, s_1, \\dots)$） 求解：reward 函数 $R(s,a)$，使得专家行为在这个 reward 下是最优的 这本质上是一个 逆向优化（inverse optimization） 问题——从最优行为反推目标函数。\nIRL 的数学形式 最直接的 IRL 公式是 Feature Matching：\n$$\\text{Find } R \\text{ such that } \\mathbb{E}_{\\pi_E}[\\phi(s,a)] = \\mathbb{E}_{\\pi^*}[\\phi(s,a)]$$其中 $\\phi$ 是状态-动作的特征向量，$\\pi_E$ 是专家策略，$\\pi^*$ 是在 $R$ 下的最优策略。这个条件说：在专家策略下观察到的特征期望，应该等于在最优策略下的特征期望。\n但这个公式有严重问题——解不唯一。任何 $R$ 让专家是最优之一都是\u0026quot;解\u0026quot;，实际上有无穷多个可能的 reward 函数可以解释同一组专家数据。\n🧠 最大熵 IRL 从\u0026quot;唯一解\u0026quot;的困境中走出 最大熵 IRL（Maximum Entropy IRL）由 Ziebart 等人在 2008 年提出，是 IRL 领域的奠基性工作。它引入最大熵原理来唯一确定一个 reward 函数：在所有能解释专家行为的 reward 中，选择使轨迹分布熵最大的那个。\n核心思想 最大熵 IRL 假设专家行为服从一个 Boltzmann 分布：\n$$P(\\tau | R) = \\frac{1}{Z} \\exp\\left(\\sum_{t} R(s_t, a_t)\\right)$$其中 $Z = \\int \\exp\\left(\\sum_{t} R(s_t, a_t)\\right) d\\tau$ 是配分函数（partition function）——对所有可能轨迹的指数 reward 求和。\n概念 含义 在最大熵 IRL 中的作用 Boltzmann 分布 reward 越高，概率越高 将 reward 映射为轨迹概率 配分函数 $Z$ 所有轨迹的归一化因子 确保概率和为 1 最大熵原理 在约束下选择最随机的分布 唯一确定 reward 函数 学习算法 最大熵 IRL 通过最大化专家轨迹的 log-likelihood 来学习 reward：\n$$\\mathcal{L}(R) = \\mathbb{E}_{\\tau \\sim \\mathcal{D}}[\\log P(\\tau | R)] = \\mathbb{E}_{\\tau \\sim \\mathcal{D}}\\left[\\sum_{t} R(s_t, a_t)\\right] - \\log Z$$梯度计算为：\n$$\\nabla_R \\mathcal{L} = \\mathbb{E}_{\\tau \\sim \\mathcal{D}}[\\nabla_R \\sum R] - \\mathbb{E}_{\\tau \\sim P(\\tau|R)}[\\nabla_R \\sum R]$$直观解释：让专家的平均 reward 尽可能高，同时让所有轨迹的平均 reward 尽可能低——使专家轨迹从\u0026quot;所有可能轨迹\u0026quot;中脱颖而出。\n最大熵 IRL 的局限性 配分函数计算昂贵：需要对所有可能轨迹求和，需要在已知 dynamics 下做 soft 价值迭代 需要环境模型：必须知道状态转移概率，这在连续控制中不可行 表达能力受限：线性 reward 形式限制了可以表达的目标函数 ⚔️ 对抗式 IRL：GAIL 与 AIRL GAIL：生成对抗模仿学习 GAIL（Generative Adversarial Imitation Learning）由 Ho \u0026amp; Ermon 在 2016 年提出，它用 GAN 的思路做 IRL——不需要显式地学习 reward 函数，而是用一个**判别器（discriminator）**来区分专家和策略的轨迹。\nGAIL 的结构 G 目 m e 标 i n 函 n e 数 _ r ： π a t m o a r x （ _ 策 D 略 π 𝔼 ） _ ← π → _ E D 区 [ i 分 l s ： o c 专 g r 家 i D m v ( i ↑ s s n , a 生 a t 成 ) o ] r + D ( 𝔼 s _ , π a [ ) l o g ( 1 - D ( s , a ) ) ] 判别器 $D(s,a)$：输出 $(s,a)$ 是专家还是策略生成的概率 策略 $\\pi$：试图\u0026quot;欺骗\u0026quot;判别器，让它无法区分 训练达到纳什均衡时：策略的轨迹分布匹配专家的轨迹分布 GAIL 的损失函数 $$\\mathcal{L}_{\\text{GAIL}} = \\mathbb{E}_{\\pi_E}[\\log D_\\omega(s,a)] + \\mathbb{E}_{\\pi_\\theta}[\\log(1 - D_\\omega(s,a))] - \\lambda \\mathcal{H}(\\pi_\\theta)$$其中熵正则 $\\mathcal{H}(\\pi_\\theta)$ 鼓励探索。判别器 $D_\\omega$ 可以分解为：\n$$D_\\omega(s,a) = \\frac{\\exp(f_\\omega(s,a))}{\\exp(f_\\omega(s,a)) + \\pi_\\theta(a|s)}$$此时 $\\log D_\\omega - \\log(1 - D_\\omega) = f_\\omega(s,a) - \\log \\pi_\\theta(a|s)$ 可以被解释为 reward 函数。\nGAIL 的优缺点 优势 局限 不需要环境 dynamics reward 不具可解释性 与任何 RL 算法兼容 训练不稳定（GAN 通病） 高维连续控制有效 需要大量交互 策略分布匹配好 学到的 reward 不可移植 AIRL：解耦 reward 函数 AIRL（Adversarial Inverse Reinforcement Learning）是 GAIL 的改进版，它的贡献在于恢复一个可解释、可移植的 reward 函数。\nAIRL 的判别器结构为：\n$$D_{\\omega,\\Phi}(s,a,s') = \\frac{\\exp(f_{\\omega,\\Phi}(s,a,s'))}{\\exp(f_{\\omega,\\Phi}(s,a,s')) + \\pi(a|s)}$$其中 $f_{\\omega,\\Phi}(s,a,s') = g_\\omega(s,a) + \\gamma h_\\Phi(s') - h_\\Phi(s)$ 被分解为 reward 近似 $g_\\omega$ 和 shaping term $h_\\Phi(s') - h_\\Phi(s)$。\n这个结构的关键在于：shaping term 仅在训练时起作用，最终的 reward 函数从 $g_\\omega$ 中提取，使得学习到的 reward 可以迁移到新环境（因为 shaping term 被消掉）。\n方法 输出 reward 可解释性 reward 可迁移性 MaxEnt IRL 显式 $R(s,a)$ ✅ 高 ✅ 高 GAIL 隐式 reward（判别器） ❌ 低 ❌ 不可 AIRL 显式 $g_\\omega(s,a)$ ✅ 中 ✅ 可迁移 🔍 IRL vs BC vs RL IRL vs BC（行为克隆） BC 是直接模仿动作：\n$$ \\text{BC: } \\pi_{\\text{BC}}(a|s) \\leftarrow \\arg\\max_\\pi \\mathbb{E}_{(s,a) \\sim \\mathcal{D}} [\\log \\pi(a|s)] $$IRL 是模仿动机：\n$$ \\text{IRL: } \\underbrace{\\mathcal{D} \\rightarrow R}_{\\text{学会reward}} \\rightarrow \\underbrace{R \\rightarrow \\pi}_{\\text{RL 优化}} $$ 维度 BC IRL 学什么 动作 奖励函数 数据效率 高（一步监督） 低（需要在 RL 循环中） 泛化能力 弱（分布偏移直接爆炸） 强（reward 可以泛化到新场景） 是否超越专家 ❌ 不可能 ✅ 理论上可以 计算开销 低 高（需内层 RL 循环） IRL 的核心优势体现在分布偏移（distribution shift）场景。BC 学到的策略一旦遇到训练数据中不存在的新状态，行为不可预测；而 IRL 学到的是\u0026quot;好与坏的标准\u0026quot;，即使在新状态下，策略也能根据 reward 找出合理动作。\nIRL vs RL 维度 RL IRL 输入 reward 函数 专家演示 输出 最优策略 reward 函数 目标 最大化已知 reward 恢复未知 reward 谁是最优 策略 专家 计算量 单层优化 双层优化（内层 RL） IRL 内部嵌套了一个 RL 问题：每次更新 reward，都需要重新求解对应的最优策略来评估 reward 的质量。这使得 IRL 的计算量远大于标准 RL。\n🚗 IRL 在自动驾驶中的应用 为什么驾驶需要 IRL？ 驾驶 reward 的设计是自动驾驶最困难的问题之一。\u0026ldquo;安全\u0026quot;和\u0026quot;舒适\u0026quot;的权重应该是多少？\u0026ldquo;效率\u0026quot;和\u0026quot;合规\u0026quot;如何权衡？这些不是工程师能完美手动定义的。\nIRL 的路径：从人类驾驶数据中自动学习 reward 函数，让奖励函数体现真实驾驶员的偏好和权衡。\nIRL 在驾驶中的典型流程 S S S S t t t t e e e e p p p p 1 2 3 4 : : : : 收 用 用 评 集 估 人 I R 策 类 R L 略 驾 L 是 驶 在 否 日 从 匹 志 数 R 配 （ 据 ( 人 含 中 s 类 场 恢 , 行 景 复 a 为 状 ) 态 r 和 e 下 人 w 优 类 a 化 操 r 策 作 d 略 ） 函 π 数 R ( s , a ) 驾驶场景中 reward 需要捕捉的因素 Reward 因素 含义 IRL 是否容易捕捉 安全距离保持 跟车前车距离 ✅ 容易（有明确度量） 车道中心偏好 是否偏向车道中央 ✅ 容易 平滑转向 方向角变化速度 ✅ 中等 变道时机 何时变道最合适 ⚠️ 困难（场景依赖） 社会互动 礼让/博弈行为 ❌ 非常困难 风险容忍度 激进 vs 保守 ⚠️ 困难（需要大量数据） 代表性驾驶 IRL 工作 工作 IRL 方法 场景 特色 MaxEnt IRL for Driving 最大熵 IRL 高速驾驶 学习车道保持 + 变道 reward GAIL for Urban Driving GAIL + PPO 城市路口 从人类日志学习通过路口的 reward AIRL for Highway AIRL 高速汇入 学到可迁移的交互 reward IRL 在驾驶中的实践挑战 驾驶行为的噪声：人类驾驶员并非完美最优，同一个驾驶员在相同场景可能做出不同决策——IRL 需要处理这种次优性 多个目标冲突：驾驶涉及安全、效率、舒适等多个目标，IRL 需要从中解耦不同的 reward 分量 状态空间巨大：城市驾驶的状态空间几乎是无限的，IRL 需要在高维空间中恢复 reward 🌟 最新趋势：偏好 IRL + VLM Reward 偏好 IRL 传统 IRL 要求专家演示是完整的轨迹。偏好 IRL（Preference-based IRL） 放松了这个要求——只需要人类对轨迹片段的相对偏好：\n展示两段轨迹 $(\\tau_A, \\tau_B)$ 人类选择偏好哪个 从偏好对中学习 reward 这本质上是对逆强化学习和 RLHF 的融合。与标准 IRL 相比：\n维度 标准 IRL 偏好 IRL 标注难度 需要完整专家轨迹 只需要相对比较 数据来源 人类驾驶数据 任何轨迹的比较 reward 质量 依赖专家最优性 依赖偏好一致性 VLM 作为 IRL 的 Reward 函数 最新趋势是使用 VLM（Vision-Language Model） 作为 reward 信号源。VLM 可以理解驾驶场景的语义含义——它不仅能判断\u0026quot;是否安全\u0026rdquo;，还能判断\u0026quot;是否礼貌\u0026rdquo;、\u0026ldquo;是否合理\u0026rdquo;。\nVLM-as-Reward 的工作流程：\n给定驾驶场景的图像或视频 向 VLM 提问：评估这条轨迹的 安全性、舒适性、合规性（0-10 分） 用 VLM 的评分作为 reward 信号 用 RL 或 IRL 优化策略 VLM reward 的优势在于开箱即用、不需要人类标注偏好对。劣势在于 VLM 的评分可能不一致、对细粒度差异不敏感。\n结合 IRL 和 VLM 的最新进展 最新的研究工作正在将 IRL 的框架与 VLM 的能力结合：\nVLM 初始化 IRL reward：用 VLM 的驾驶知识初始化 reward 函数，避免从零开始 IRL VLM 验证 IRL reward：用 VLM 评估 IRL 恢复的 reward 是否合理 VLM 作为偏好标注器：用 VLM 替代人类标注偏好对，大规模做偏好 IRL 📝 个人思考 IRL 从理论上看是最优雅的\u0026quot;学习驾驶\u0026quot;方式——学会人类的目标而非人类的行为，才能在不同场景中灵活适应。但三十年来，IRL 在实践中的影响力远不如 BC 和 RL。原因在于双层优化的计算开销和配分函数近似的困难一直在制约它的可扩展性。\n但最近两个趋势正在改变这个局面：\n第一，对抗方法（GAIL/AIRL）和偏好方法的成熟让 IRL 不再依赖显式的环境 dynamics 和配分函数计算，实用性大幅提升。AIRL 的可迁移 reward 尤其适合驾驶——在高速场景学到的 reward 可以用于城市场景，节省了大量重复训练。\n第二，VLM 作为 reward 参考的崛起正在弥补 IRL 的一个固有短板：recovered reward 往往 too specific——它只能解释训练数据中的驾驶行为，对没见过的新场景没有判断力。VLM 提供了一种常识性 reward 先验，让 IRL 的 reward 更鲁棒、更通用。\n我认为 IRL 在自动驾驶中最有前途的方向是 偏好 IRL + VLM 初始化：用 VLM 给 reward 函数一个合理的初始点，然后用人类的轨迹偏好做微调。这结合了 VLM 的常识和人类的具体偏好，同时避免了纯 IRL 的冷启动困难。\n📖 这是知识点拆解系列的第 14 篇。IRL 教会我们的不是\u0026rsquo;怎么开车\u0026rsquo;，而是\u0026rsquo;为什么这么开车\u0026rsquo;——比掌握技能更重要的是理解动机。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E9%80%86%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0%E8%AF%A6%E8%A7%A3/","summary":"逆强化学习（IRL）解决的是\u0026rsquo;从行为反推动机\u0026rsquo;的问题——给定专家演示，推断 driving force 背后的 reward 函数。本文详解最大熵 IRL、GAIL/AIRL 对抗方法，阐明 IRL 与 BC、RL 的本质区别，并梳理 IRL 在自动驾驶中的应用：从人类驾驶数据中学习 reward，再用 RL 优化策略。最后讨论偏好 IRL 和 VLM 作为 reward 的最新趋势。","title":"知识点拆解｜逆强化学习详解：从专家演示中学会'为什么这么开'"},{"content":"📄 论文信息 标题：Open X-Embodiment: Robotic Learning Datasets and RT-X Models（Open X-Embodiment：跨机器人大规模数据集与RT-X模型） 团队：Open X-Embodiment Collaboration（Google DeepMind、Stanford、UC Berkeley、CMU等21家机构） 发表：ICRA 2024 / arXiv 2023.10 关键词：跨机器人学习、大规模数据集、Transformer策略、正迁移、具身智能 一句话总结：首次构建跨22种机器人的统一数据集，证明大规模异构数据训练可实现跨机器人正迁移 论文链接：arXiv:2310.08864 代码链接：robotics-transformer-x.github.io 🤔 要解决什么问题？ 机器人学习的\u0026quot;数据孤岛\u0026quot;困境 在NLP和计算机视觉领域，大模型的成功已经证明了一个核心规律：大规模、多样化的数据 + 高容量模型 = 强大的泛化能力。从GPT系列到CLIP，从ImageNet到LAION，数据规模和多样性一直是推动AI能力边界的关键因素。\n然而，机器人学习领域却长期面临一个尴尬的现实：\n数据碎片化严重：每个实验室、每个机器人、每个任务都在独立收集数据，形成了大量\u0026quot;数据孤岛\u0026quot; 数据规模有限：即使最大的机器人数据集，其规模也远不及视觉（5-18M图像）和NLP（1.5B-4.5B文本）领域的数据集 泛化能力不足：由于训练数据的局限性，现有策略通常只能在特定环境、特定物体、特定任务上工作 核心问题 论文提出的核心问题是：\n能否像NLP和视觉领域那样，在机器人领域也实现\u0026quot;预训练大模型 → 下游任务适配\u0026quot;的范式？具体来说，能否训练一个\u0026quot;通用\u0026quot;的X-机器人策略，使其能够高效适应新的机器人、任务和环境？\n这个问题的挑战在于：\n机器人异构性：不同机器人的运动学结构、控制方式、感知配置差异巨大 动作空间不统一：有的机器人是7自由度手臂，有的是双臂，还有四足机器人 观测空间多样：相机视角、分辨率、传感器配置各不相同 💡 核心方法 1. Open X-Embodiment数据集构建 1.1 数据汇聚与标准化 Open X-Embodiment数据集的核心创新在于将全球21家机构的60个现有机器人数据集汇聚到一个统一的数据格式中。\n数据集的关键统计：\n22种机器人形态：从单臂（Franka、xArm）到双臂（Google Robot），再到四足机器人 100万+轨迹：总数据量达到百万级别 527种技能：涵盖抓取、放置、推、擦、组装等多种操作 160,266个任务：每个任务都有对应的语言描述 1.2 统一数据格式（RLDS） 为了处理不同机器人的异构性，团队采用了**RLDS（Reinforcement Learning Datasets）**数据格式，这是一种基于tfrecord的序列化格式，具有以下特点：\n灵活的动作空间：支持不同维度的动作表示（6D/7D末端执行器控制、关节角度等） 多模态输入：支持RGB图像、深度图、点云等多种输入 高效加载：支持所有主流深度学习框架的并行数据加载 1.3 动作空间对齐 论文采用了一种粗粒度的动作对齐策略：\n将所有数据集的动作统一转换为7维末端执行器动作：$(x, y, z, roll, pitch, yaw, gripper\\_opening)$ 每个数据集的动作在离散化前进行归一化 模型输出的动作可以根据不同的机器人进行反归一化 需要注意的是，这种对齐是粗粒度的：\n不同数据集的坐标系可能不同 动作可以是绝对位置或相对位置/速度 相机视角和属性仍然存在显著差异 2. RT-X模型架构 论文基于两种已有的Transformer策略进行实验：\n2.1 RT-1-X（基于RT-1） 参数量：35M 输入：15帧图像历史 + 语言指令 架构：EfficientNet（视觉编码）+ FiLM层（视觉-语言融合）+ Transformer（动作预测） 输出：256个离散桶中的8维动作token 2.2 RT-2-X（基于RT-2） 参数量：5B或55B 输入：图像 + 语言指令 架构：预训练VLM（ViT + UL2）+ 动作token化 输出：将动作表示为文本token（如\u0026quot;1 128 91 241 5 101 127\u0026quot;） RT-2-X的关键创新在于将动作视为另一种语言，从而可以直接利用大规模VLM的预训练知识。\n3. 训练策略 RT-1-X：仅在机器人数据混合集上训练 RT-2-X：采用**联合微调（Co-fine-tuning）**策略，约1:1的比例混合VLM原始数据和机器人数据 🧪 实验验证 实验设计 论文进行了总计3600次评估试验，覆盖6种不同的机器人，回答三个核心问题：\n跨机器人训练能否实现正迁移？ 跨机器人训练能否提升泛化能力？ 不同设计选择（模型大小、架构、数据组成）如何影响性能？ 实验结果 1. 分布内性能（In-distribution） 小数据集场景（Kitchen Manipulation、Cable Routing、NYU Door Opening等）：\nRT-1-X在5个数据集中的4个上超越了原始方法 平均成功率提升显著，证明小数据集场景从跨机器人训练中获益最大 大数据集场景（Bridge、RT-1 Paper Data）：\n模型 Bridge RT-1 Paper Original Method 13% - RT-1 40% 92% RT-1-X 27% 73% RT-2-X (55B) 50% 91% RT-1-X在大数据集上出现欠拟合，性能不如单独训练的RT-1 但RT-2-X（55B）凭借更大的模型容量，能够有效利用大规模异构数据 2. 分布外泛化（Out-of-distribution） 涌现技能评估（在Google Robot上评估Bridge数据集中的技能）：\n模型 涌现技能 泛化评估 RT-2 (55B) 27.3% 62% RT-2-X (55B) 75.8% 61% 关键发现：\nRT-2-X在涌现技能上提升约3倍（27.3% → 75.8%） 这些技能在Google Robot的原始数据集中不存在，而是从WidowX机器人的数据中迁移而来 移除Bridge数据集后，性能显著下降，证实了跨机器人迁移的有效性 3. 消融实验 配置 模型大小 历史长度 Web预训练 涌现技能 泛化评估 RT-2-X 55B 无 ✓ 75.8% 61% RT-2-X 5B 2帧 ✓ 44.4% 52% RT-2-X 5B 无 ✓ 14.5% 30% RT-2-X 5B 2帧 ✗ 0% 1% 关键结论：\n模型容量：55B模型显著优于5B模型，证明大容量是吸收异构数据的关键 图像历史：包含短期图像历史显著提升泛化性能 Web预训练：对大模型至关重要，没有预训练几乎无法工作 🔍 个人思考 亮点 开创性的工作：首次在机器人领域实现了类似NLP/CV的\u0026quot;大规模预训练\u0026quot;范式，为具身智能指明了方向\n工程与科学的完美结合：\n工程层面：统一数据格式、跨机构协作、标准化评估 科学层面：证明正迁移的可行性、分析迁移的条件 开源生态建设：\n完整的数据集和预训练模型 标准化的评估流程 为社区提供了可复用的基础设施 实验设计严谨：\n3600次评估试验，覆盖多种场景 充分的消融实验，揭示关键因素 小数据集和大数据集场景的对比分析 局限性 动作空间对齐仍然粗糙：\n不同数据集的坐标系未统一 绝对/相对动作混用 可能限制了迁移的效果 感知模态受限：\n主要依赖RGB视觉 缺少力觉、触觉等模态 限制了接触丰富任务的学习 任务复杂度有限：\n主要集中在桌面操作任务 缺少移动操作、全身控制等场景 与真实世界需求仍有差距 评估场景有限：\n主要在实验室环境评估 缺少真实家庭、工业场景的验证 泛化能力的验证不够充分 未来方向 更精细的动作对齐：\n统一坐标系定义 引入相对/绝对动作的显式建模 探索动作表示学习 多模态融合：\n融合力觉、触觉、音频等模态 探索模态间的互补性 适应接触丰富任务的需求 更大规模的数据扩展：\n吸纳更多机构和机器人的数据 增加任务和场景的多样性 探索数据质量与数量的平衡 与基础模型的深度融合：\n探索与LLM、VLM的更紧密集成 利用互联网规模的预训练知识 实现语言驱动的通用机器人智能 📖 延伸阅读 RT-1: Brohan et al., \u0026ldquo;RT-1: Robotics Transformer for Real-World Control at Scale\u0026rdquo;, RSS 2023 RT-2: Brohan et al., \u0026ldquo;RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control\u0026rdquo;, CoRL 2023 RLDS: Padalkar et al., \u0026ldquo;Open X-Embodiment: Robotic Learning Datasets and RT-X Models\u0026rdquo;, 2023 DROID: Khazatsky et al., \u0026ldquo;DROID: A Large-Scale In-The-Wild Robot Manipulation Dataset\u0026rdquo;, 2024 RH20T: Fang et al., \u0026ldquo;RH20T: A Comprehensive Robotic Dataset for Learning Diverse Skills in One-Shot\u0026rdquo;, 2023 本文为论文精读系列第1篇，聚焦具身智能领域的跨机器人学习数据集与模型。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/open-x-embodiment%E6%95%B0%E6%8D%AE%E9%9B%86%E7%B2%BE%E8%AF%BB/","summary":"Open X-Embodiment是Google联合21家机构打造的跨机器人大规模数据集，包含22种机器人、100万+轨迹数据。基于该数据集训练的RT-X模型首次证明了跨机器人正迁移的可行性，RT-1-X成功率提升50%，RT-2-X泛化能力提升3倍。","title":"论文精读｜Open X-Embodiment：跨机器人大规模数据集与RT-X模型"},{"content":"📄 论文信息 标题：Diffusion-Based Planning for Autonomous Driving with Flexible Guidance 团队：清华大学（李升波、刘晶晶、詹仙园）× 中科院自动化所 × HAOMO.AI（毫末智行，顾维灏、艾锐）× 上海 AI Lab arXiv：2501.15564（2025 年 1 月） 关键词：扩散模型、闭环规划、联合预测与规划、分类器引导、DiT 一句话总结：把轨迹规划重定义为\u0026quot;未来轨迹生成\u0026quot;任务，用一个 DiT 同时去噪出自车规划和他车预测，再用免训练的分类器引导在推理时按需注入安全/舒适/速度偏好，无需任何规则后处理就拿下 nuPlan 闭环 SOTA。 🤔 要解决什么问题？学习式规划的三道软肋 工业界规划长期被 规则方法（IDM、EM Planner）统治——可控、可解释，但规则枚举不完，长尾一改一片。学习式规划（行为克隆 BC）想用数据替代手写规则，却在闭环里屡屡翻车：\n软肋 表现 后果 多模态拟合差 BC 用 L2 回归\u0026quot;平均\u0026quot;人类轨迹 mode averaging，输出落\u0026quot;无人区\u0026quot; OOD 必须靠规则兜底 模型直出轨迹质量差 大量方法叠规则后处理，又回到规则老路 目标冲突难平衡 安全/舒适/效率辅助 loss 互相打架 缺\u0026quot;从错误中恢复\u0026quot;的学习信号 训完不可调 想改驾驶风格得重训 不满足个性化部署需求 核心判断：扩散模型有三个天然优势正好对症——能建模复杂多模态分布、生成质量高、而且有一套灵活引导机制可以在不重训的前提下调整行为。Diffusion Planner 就是把这三点在闭环规划上彻底打通的第一篇。\n🏗️ Diffusion Planner 架构 Diffusion Planner 的架构基于 DiT（Diffusion Transformer），核心是将噪声轨迹 $\\bm{x}^{(t)}$ 与异质条件 $\\bm{C}$ 融合后逐步去噪。\n条件去噪的数学形式 去噪目标 $\\bm{x}^{(0)}$ 是一个将所有参与者未来轨迹摞起来的大矩阵：\n$$\\bm{x}^{(0)}=\\begin{bmatrix} x_{\\text{ego}}^{1} \u0026 \\cdots \u0026 x_{\\text{ego}}^{\\tau} \\\\ x_{\\text{nbr}_1}^{1} \u0026 \\cdots \u0026 x_{\\text{nbr}_1}^{\\tau} \\\\ \\vdots \u0026 \\ddots \u0026 \\vdots \\\\ x_{\\text{nbr}_M}^{1} \u0026 \\cdots \u0026 x_{\\text{nbr}_M}^{\\tau} \\end{bmatrix}$$扩散模型学习得分函数 $\\bm{s}_\\theta$（等价于去噪网络 $\\mu_\\theta$）：\n$$\\mathcal{L}_\\theta = \\mathbb{E}_{t, \\bm{x}^{(0)}, \\bm{\\epsilon}}\\left[\\big\\|\\mu_\\theta(\\bm{x}^{(t)}, t, \\bm{C}) - \\bm{x}^{(0)}\\big\\|^2\\right]$$推理时从纯噪声 $\\bm{x}^{(T)}$ 开始，按 DDIM 调度逐步去噪至 $\\bm{x}^{(0)}$。\n条件注入方式 条件类型 表示 融合方式 当前车辆状态（位姿） 矢量拼接 自注意力（多车交互） 历史轨迹 + 车道 polyline 序列 MLP-Mixer → 交叉注意力 静态目标（红绿灯等） 单点特征 MLP → 交叉注意力 导航路由 + 时间步 路由序列 MLP-Mixer → adaptive LayerNorm 一个反直觉的设计：自车速度/加速度被刻意剔除——实验表明这反而提升闭环表现，避免模型过度依赖瞬时速度。\n联合预测与规划 传统 pipeline 将运动预测和轨迹规划串行处理。Diffusion Planner 将它们重定义为一次联合去噪——自车轨迹与邻车轨迹在同一去噪过程中协同生成，交互行为自然涌现，无需额外 loss。\n💡 核心思想：任务重定义 + 联合生成 把规划和预测压成一个去噪目标 传统 pipeline 里，运动预测和轨迹规划是两个串行子模块：先预测他车，再规划自车。Diffusion Planner 的第一步重定义是——把它们看成同一件事：给定条件 $\\bm{C}$（车辆当前状态、历史、车道、导航），一次性联合生成自车与最近 $M$ 辆邻车的未来轨迹。\n去噪目标 $\\bm{x}^{(0)}$ 是一个把所有人未来轨迹摞起来的大矩阵：\n$$\\bm{x}^{(0)}=\\begin{bmatrix} x_{\\text{ego}}^{1} \u0026 \\cdots \u0026 x_{\\text{ego}}^{\\tau} \\\\ x_{\\text{nbr}_1}^{1} \u0026 \\cdots \u0026 x_{\\text{nbr}_1}^{\\tau} \\\\ \\vdots \u0026 \\ddots \u0026 \\vdots \\\\ x_{\\text{nbr}_M}^{1} \u0026 \\cdots \u0026 x_{\\text{nbr}_M}^{\\tau} \\end{bmatrix}$$其中每个状态 $x$ 只保留坐标 + 航向角的 sin/cos（足够喂给下游 LQR 控制器）。为什么这么做？因为自车和邻车是强交互的协作关系——你变道，别人就会避让。把它们放进同一个去噪过程，模型就能学到\u0026quot;我这样走，他会那样反应\u0026quot;的协同行为，而不需要额外加交互 loss。\n这与 DiffusionDrive\u0026quot;只生成自车\u0026quot;的思路不同：Diffusion Planner 更激进，一次去噪 = 一次多智能体联合仿真。代价是状态维度变大，收益是交互建模更真。\n条件去噪：以场景为指挥棒 训练目标是最小化去噪残差（等价于学得分函数 $\\bm{s}_\\theta$）：\n$$\\mathcal{L}_\\theta=\\mathbb{E}\\left[\\big\\|\\mu_\\theta(\\bm{x}^{(t)},t,\\bm{C})-\\bm{x}^{(0)}\\big\\|^2\\right]$$条件 $\\bm{C}$ 的注入是这篇的工程精华，见下节。\n🏗️ 架构详解：DiT + MLP-Mixer 的精巧拼装 Diffusion Planner 建在 DiT（Diffusion Transformer） 上，核心是怎么把\u0026quot;噪声轨迹 $\\bm{x}$\u0026ldquo;和\u0026quot;异质条件 $\\bm{C}$\u0026ldquo;优雅融合。\n1. 车辆信息整合 把噪声未来轨迹 $\\bm{x}$ 与当前状态 $x^0$ 拼接作为约束（给出明确起点）。一个反直觉的细节：自车的速度、加速度被刻意剔除——实验表明这反而提升闭环表现（避免模型过度依赖瞬时速度、学会从位姿本身推规划）。多车之间用多头自注意力交互。\n2. 历史/车道：MLP-Mixer 提稠密表示 历史状态和车道都是信息稀疏的矢量（polyline 点序列），直接融合很难训。作者用 MLP-Mixer 在\u0026quot;矢量维\u0026quot;和\u0026quot;特征维\u0026quot;上交替 mixing，再池化成紧凑表示：\n$$\\bm{S}=\\bm{S}+\\text{MLP}(\\bm{S}^T)^T,\\quad \\bm{S}=\\bm{S}+\\text{MLP}(\\bm{S})$$两路 Mixer（车一路、车道一路）+ 静态目标 MLP，concat 后过 vanilla Transformer encoder 聚合成 $\\bm{Q}_f$，再用多头交叉注意力注入到 $\\bm{x}$。相比以往复杂结构设计，这是一个更统一、更简化的方案。\n3. 导航信息：自适应 LayerNorm 导航（路由车道点序列）同样过 MLP-Mixer 得 $\\bm{Q}_n$，与扩散时间步条件 $\\bm{Q}_t$ 相加，通过 adaptive layer norm 注入所有 token——告诉模型\u0026quot;该往哪走 + 现在去噪到第几步\u0026rdquo;。\n条件类型 表示 融合方式 当前车辆状态 矢量拼接 自注意力 历史 + 车道 polyline 序列 MLP-Mixer + 交叉注意力 静态目标 单点特征 MLP 导航 + 时间步 路由序列 MLP-Mixer + adaptive LN ⚔️ 灵魂创新：免训练的分类器引导 这是 Diffusion Planner 区别于所有\u0026quot;扩散+规划\u0026quot;前作的最大亮点。前人要么叠规则后处理，要么加辅助 loss 重训。Diffusion Planner 利用扩散与能量模型的近亲关系，在推理时用分类器梯度做\u0026quot;手术\u0026rdquo;：\n$$\\tilde{\\bm{s}}_\\theta(\\bm{x}^{(t)},t)=\\bm{s}_\\theta(\\bm{x}^{(t)},t)-\\nabla_{\\bm{x}^{(t)}}\\mathcal{E}_\\phi(\\bm{x}^{(t)},t)$$目标分布变成 $p_0(\\bm{x}^{(0)})\\propto q_0(\\bm{x}^{(0)})\\,e^{-\\mathcal{E}(\\bm{x}^{(0)})}$，其中能量函数 $\\mathcal{E}$ 编码安全/舒适/速度偏好。\n关键技巧是扩散后验采样（DPS）：不需要额外训练分类器，直接用已训好的去噪网络 $\\mu_\\theta$ 近似引导能量，完全免训练。而且不同引导（碰撞、舒适、限速）的梯度可并行计算、自由组合，按需开关。\n引导能做什么 强化安全：把碰撞能量推高，轨迹主动绕开占用区； 调节舒适：压低大 jerk，轨迹更平顺； 控制速度：引导朝期望速度收敛，适配个性化驾驶风格（保守 vs. 激进）。 论文给了同一场景下不同引导设置生成不同轨迹的可视化——一个模型，推理时换引导就换风格，无需重训。这对真实部署是极具吸引力的特性：白天激进、雨天保守，全靠引导权重切换。\n为什么引导能\u0026quot;免训练\u0026quot; 其原理值得多说一句。传统分类器引导要训一个分类器 $\\mathcal{E}_\\phi$ 去判别\u0026quot;这条轨迹安不安全\u0026quot;，引入额处开销。Diffusion Planner 改用扩散后验采样（DPS）：直接用已训好的去噪网络 $\\mu_\\theta$ 在每个去噪步对当前 $\\bm{x}^{(t)}$ 做一次近似 CleanFP（clean full prediction），把\u0026quot;反推的干净轨迹\u0026quot;代入能量函数算梯度。于是能量函数 $\\mathcal{E}$ 可以是任意可微的代价——碰撞距离、jerk 平方、速度偏差，写个公式就能用，一行额外训练都不需要。这本质上是把\u0026quot;规则代价函数\u0026quot;重新包装成\u0026quot;能量引导\u0026quot;，让规则的灵活性与生成的多模态性兼得。\n🧪 实验与结果 nuPlan 闭环 SOTA 在真实世界大规模 benchmark nuPlan 上，Diffusion Planner 在学习式基线中取得闭环 SOTA，不依赖任何规则精修直接用模型输出，就能与甚至超过规则方法。挂上现成后处理模块后，进一步在所有基线中登顶。\n200 小时配送车数据：验证迁移性 团队额外采集了 200 小时配送车驾驶数据（多种城市工况），验证模型对不同驾驶风格的鲁棒迁移——这对\u0026quot;轿车训练、货车部署\u0026quot;的真实场景意义重大。配送车的视野、动力学、驾驶节奏都和私家车迥异，模型能在其上保持稳定闭环表现，说明它学到的不是\u0026quot;某种车型的动作分布\u0026quot;，而是更本质的交互与规划规律。这也呼应了 DriveVLA-W0 的发现：学到世界表征的模型才具备跨域泛化能力，而死记动作的模型换域即崩。\n闭环表现的关键细节 值得注意的是，Diffusion Planner 的闭环优势尤其体现在对抗性/罕见场景（reactive-test）：当自车做出一个非典型动作，周围智能体（通过 log-replay 的非反应式仿真或反应式仿真）会产生非常规反应，那些\u0026quot;只会模仿\u0026quot;的 BC 模型在这里立刻失效，而联合建模了多车交互的 Diffusion Planner 仍能产出合理轨迹。这正是\u0026quot;把预测和规划一起做\u0026quot;最直接的红利——它对交互的敏感度是单输出自车轨迹的方法学不来的。\n关键消融 联合建模的威力：把预测和规划放一起训，比拆开加 loss 显著更好，证明协同行为是\u0026quot;涌现\u0026quot;出来的； 剔除自车速度：去掉反而涨，反直觉但稳定； 引导有效性：安全引导显著降碰撞，舒适引导降 jerk，可独立开关。 与其他扩散规划对比 维度 一般扩散规划 Diffusion Planner 输出 仅自车轨迹 自车 + M 辆邻车联合 后处理 重度依赖规则 无需规则 行为调整 重训 / 加 loss 推理时引导切换 交互建模 额外 loss 联合去噪自然涌现 📊 实验与结果 nuPlan 闭环 SOTA（无规则后处理） 在 nuPlan 闭环 benchmark 上，Diffusion Planner 在不使用任何规则后处理的情况下即达到学习式 SOTA：\n方法 闭环得分 碰撞率↓ 驾驶评分↑ PlanTF（Transformer BC） 中 高 中 PLUTO（多阶段规划） 中高 中 中高 GameFormer（博弈交互） 中 依赖规则 中 Diffusion Planner（无refine） 高 低 高 Diffusion Planner（w/ refine） SOTA 最低 最高 关键发现：Diffusion Planner 在对抗性/罕见场景（reactive-test） 中优势最大，因为联合生成的自车-邻车交互建模使模型能理解\u0026quot;我变道→他避让\u0026quot;的因果链。\n200 小时配送车迁移 方法 私家车场景 配送车场景（迁移） 下降幅度 PDM（规则） 高 显著下降 大 GameFormer 中高 下降 中 Diffusion Planner 高 几乎不变 小 配送车视野、动力学、驾驶节奏与私家车迥异，Diffusion Planner 仍保持稳定闭环表现，说明模型学到了更本质的交互规则而非记忆车型特定动作分布。\n引导效果消融 引导类型 碰撞率 Jerk 平均速度 无引导 高 高 ~12 m/s +安全引导 ↓ 显著 高 ~11 m/s +舒适引导 中 ↓ 显著 ~11.5 m/s +速度引导（10–14 m/s） 中 中 ~12.5 m/s 全部组合 低 低 可控 引导可并行计算、自由组合，无需额外训练——一个模型，万种风格。\n⚠️ 局限与未来方向 采样步数仍存在：扩散天然比单次回归多几次前向，虽能用 DDIM 加速，但对极高频率控制仍是负担； 引导是软约束：概率性的引导无法 100% 保证不碰撞，安全攸关场景仍需确定性安全网； 联合维度爆炸：邻车数 $M$ 增大时去噪维度线性涨，长时序 + 多车显存压力大。 我看好的后续方向：用 Flow Matching 替换 score 头进一步直化路径、用一致性蒸馏压到一步生成、与 GRPO 强化学习结合把分布对齐到奖励信号（参见本系列 AlphaDrive / PlannerRFT），以及把引导能量和可解释代价函数挂钩，让\u0026quot;软引导\u0026quot;具备\u0026quot;硬可审计性\u0026quot;。\n📝 个人思考 Diffusion Planner 最打动我的，是它对\u0026quot;规划该建模什么\u0026ldquo;和\u0026rdquo;模型该多灵活\u0026ldquo;两个问题的双重发问。第一，它把预测与规划合并成一次去噪，本质上是承认了一个被 pipeline 范式掩盖的事实——自车和他车在交通里是一个耦合系统，拆开建模就是在丢信息。联合生成让\u0026quot;我变道、他避让\u0026quot;这种交互从\u0026quot;额外设计 loss\u0026quot;变成\u0026quot;去噪过程里自然涌现的副产品\u0026rdquo;，这种化繁为简的优雅，比堆模块更能体现对问题本质的理解。\n第二点启发在**\u0026ldquo;免训练引导\u0026quot;的工程哲学**。绝大多数学习式规划把\u0026quot;训练完就定型\u0026quot;当成天经地义，要调风格只能重训或加规则。Diffusion Planner 用扩散与能量模型的等价关系，把\u0026quot;行为偏好\u0026quot;从权重里搬到推理时的梯度上——一个模型，万种风格，按需切换。这对我做产品的人是巨大诱惑：它意味着可以用一套底座服务不同品牌、不同城市、不同人群的驾驶偏好，差异化全靠引导配置实现。我认为这种\u0026quot;权重共享 + 推理分化\u0026quot;的范式，会从规划外溢到整个自动驾驶栈。\n最后，它和规则方法的关系值得玩味。Diffusion Planner 不再像早期学习派那样把规则当对立面，而是用引导能量把规则的\u0026quot;可解释、可调\u0026quot;优点吸收了进来——能量函数本质就是连续化的代价函数。这暗示着学习与规则的融合不是\u0026quot;谁替代谁\u0026rdquo;，而是\u0026quot;学习负责分布，规则/能量负责偏好\u0026ldquo;的分层协作。当 PlannerRFT 这类工作再把 RL 闭环奖励叠上来，\u0026ldquo;扩散生成 + 引导偏好 + RL 对齐\u0026quot;很可能就是端到端规划的下一站终局。\n🔗 延伸阅读 工作 关系 DiffusionDrive 本系列第 8 篇，扩散规划同行，轨迹初始化加速；Diffusion Planner 走联合生成路线 Diffusion-ES / PlannerRFT 扩散规划 + 闭环 RL 微调，本篇的下游进化 Traffic Simulation（CTG++） 多智能体联合生成的精神来源 DiT / EDM 本篇的骨干与得分参数化基础 AlphaDrive 本系列第 16 篇，GRPO 强化学习驾驶，与本篇引导互补 📖 这是论文精读系列的第 15 篇。当扩散模型学会\u0026quot;既规划又预测还能换风格\u0026rdquo;，学习式规划离真正摆脱规则拐杖还有多远？欢迎留言。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/diffusion-planner%E7%B2%BE%E8%AF%BB/","summary":"Diffusion Planner 把自动驾驶规划重定义为未来轨迹生成任务，用 Diffusion Transformer（DiT）将自车规划与他车预测联合建模为一次条件去噪过程。它通过免训练的分类器引导机制在推理时灵活注入安全、舒适与速度偏好。在 nuPlan 闭环评测中刷新 SOTA，开创了扩散式联合预测-规划的新范式。","title":"论文精读｜Diffusion Planner：把轨迹规划重定义为扩散式未来生成"},{"content":"🧠 引言：为什么 Transformer 统治了自动驾驶？ 2017 年 \u0026ldquo;Attention Is All You Need\u0026rdquo; 开启了深度学习的新纪元。Transformer 最初为 NLP 设计，但凭借其长程依赖建模和并行计算优势，迅速席卷了计算机视觉（ViT）、多模态融合（BEVFormer）、以及端到端自动驾驶（UniAD）。\n本文从数学原理出发，系统梳理注意力机制的演变及其在自动驾驶中的关键技术。\n⚡ Self-Attention：核心数学 基本公式 Self-Attention 的核心是一个缩放点积注意力：\n$$\\text{Attention}(Q, K, V) = \\text{softmax}\\left(\\frac{QK^T}{\\sqrt{d_k}}\\right)V$$其中 Q (Query)、K (Key)、V (Value) 由输入 X 经线性变换得到：\n$$Q = XW_Q, \\quad K = XW_K, \\quad V = XW_V$$计算步骤详解 步骤 操作 输出维度 含义 1 Q × K^T N × N 每对token的相似度得分 2 除以 √d_k N × N 防止softmax梯度消失 3 Softmax 行归一化 N × N 注意力权重（和为1） 4 × V N × d 加权聚合所有token信息 为什么除以 √d_k？ 当 d_k 很大时，Q·K 的内积方差也大，softmax 会集中在少数极大值上，梯度极小。除以 √d_k 将方差缩放到 1，保持梯度健康。\n🔢 Multi-Head Attention：并行关注不同子空间 多头机制 单一注意力只能关注一种交互模式。多头注意力（Multi-Head Attention, MHA）让模型并行学习 h 个不同的注意力子空间：\n$$\\text{MultiHead}(Q,K,V) = \\text{Concat}(\\text{head}_1, ..., \\text{head}_h)W_O$$其中每个 head_i = Attention(QW_Q^i, KW_K^i, VW_V^i)\n头的分工 在实践中，不同 head 会自动学习关注不同类型的关系：\nHead 编号 关注模式 在自动驾驶中的对应 Head 1-2 局部邻居 相邻车道车辆交互 Head 3-4 全局关系 远处道路拓扑 Head 5-6 语义模式 车道线/交通灯 Head 7-8 时序关系 历史轨迹关联 复杂度分析：MHA 的计算量与 $N^2$ 成正比（N 为 token 数），这是 Transformer 在长序列场景的最大瓶颈。\n📍 Positional Encoding：给 Transformer 注入位置信息 为什么需要？ Self-Attention 是排列等变（Permutation Equivariant）的——打乱输入顺序，输出也会按相同顺序打乱，但值不变。这意味着模型不知道\u0026quot;token 1\u0026quot;和\u0026quot;token 2\u0026quot;的位置关系。\n正弦位置编码 原版 Transformer 使用固定频率的正弦/余弦函数：\n$$PE_{(pos, 2i)} = \\sin(pos / 10000^{2i/d_{model}})$$ $$PE_{(pos, 2i+1)} = \\cos(pos / 10000^{2i/d_{model}})$$特性：\n任意位置都能编码 可以外推到更长序列 不同频率编码不同尺度的位置关系 可学习位置编码 vs 旋转位置编码 类型 特点 外推能力 常见应用 正弦编码 固定频率 ✅ 强 Transformer 可学习编码 Embedding 表 ❌ 有限 BERT, ViT RoPE (旋转) 旋转矩阵相乘 ✅ 强 LLaMA, GPT-4 ALiBi 偏置项 ✅ 强 BLOOM RoPE（Rotary Position Embedding）是当前主流大模型的首选。它通过旋转矩阵将位置信息编码到 Q 和 K 中，兼具相对位置编码的外推能力和绝对位置编码的明确性。\n👁️ ViT：Transformer 进军视觉 Patch Embedding ViT（Vision Transformer）将图像分割为 $N = H \\times W / P^2$ 个 patch，每个 patch 展平后线性投影为 token。加上 [CLS] token 用于分类，加上位置编码保留空间信息。\nViT vs CNN 维度 CNN ViT 归纳偏置 局部性 + 平移不变性 最少（全靠学习） 感受野 逐层扩大 第一层即全局 数据效率 小数据集好 大数据集必须 计算复杂度 O(N) O(N²) 高分辨率 ✅ 灵活 ❌ 平方增长 Swin Transformer 的改进 Swin Transformer 引入分层注意力 + 窗口偏移，将计算复杂度从 O(N²) 降到 O(N)，在 COCO 检测等任务上首次超越了 CNN 基线。\n🔗 Cross-Attention：多模态融合的桥梁 公式 Cross-Attention 与 Self-Attention 的唯一区别：Q 来自一个模态，K 和 V 来自另一个模态。\n$$\\text{CrossAttention}(Q_X, K_Y, V_Y) = \\text{softmax}\\left(\\frac{Q_X K_Y^T}{\\sqrt{d_k}}\\right)V_Y$$在 BEV 融合中的应用 BEVFormer 使用 Deformable Cross-Attention 将多视角图像特征投影到 BEV 空间：\nBEV Query：BEV 网格上的可学习 query Cross-Attention：每个 query 在图像视角上采样参考点 Deformable 机制：只关注参考点附近的稀疏位置，而非全图 这种方法比密集的全局 Cross-Attention 计算量降低了一个数量级，同时保持了感知精度。\n其他应用场景 场景 Q 来源 K/V 来源 作用 多模态融合 BEV query 图像特征 2D→3D 投影 文本条件生成 文本 token 图像特征 文生图 (Cross-Attn in SD) 目标查询 object query 特征图 DETR 检测器 轨迹预测 agent query 场景特征 交互建模 🔒 Causal Attention：自回归生成的基石 Masked Self-Attention Causal Attention（因果注意力）的核心是掩码：每个 token 只能关注自己及之前的 token，不能看到未来的 token。\n$$\\text{Attention}(Q,K,V) = \\text{softmax}\\left(\\frac{QK^T}{\\sqrt{d_k}} + M\\right)V$$其中 M 是上三角掩码矩阵（$M_{ij} = -\\infty$ 当 j \u0026gt; i）。\nCausal LM vs Encoder-Only 架构 注意力类型 代表模型 适用任务 Encoder-Only 双向（全可见） BERT 分类, NER Decoder-Only Causal GPT, LLaMA 生成 Encoder-Decoder 双向 + Cross T5 翻译, 摘要 VLM 中的 Causal Attention 在视觉语言模型（VLM）中，视觉 token 和文本 token 共用 causal attention：\n[ I M G ₁ , I M G ₂ , . , I M G _ N , | , T X T ₁ , T X T ₂ , . , T X T _ M ] 图像 token 之间：全双向（实际应用中有变体） 文本 token 之间：causal mask 文本 token → 图像 token：全可见 这保证了文本生成时只能看到已生成的 token 和所有图像信息。\n⚡ KV Cache：推理加速的核心 为什么需要 KV Cache？ 在自回归推理中，生成第 t 个 token 时，前 t-1 个 token 的 K 和 V 矩阵已经计算过。KV Cache 将这些中间结果缓存下来，避免重复计算。\n阶段 无 KV Cache 有 KV Cache 预填充（第1个token） 计算全部 QKV 计算全部 QKV + 缓存 KV 解码（后续 token） 重新计算所有 K、V 只需计算新 token 的 K、V 复杂度 O(N²) 每步 O(N) 每步 加速比 1x 10-100x（长序列） Multi-Query Attention (MQA) 与 Grouped-Query Attention (GQA) 为了进一步缩减 KV Cache 大小：\nMQA：所有 head 共享一组 K、V —— 显存降至 1/h GQA：分组共享 K、V —— MHA 和 MQA 的折中，LLaMA 2/3 采用 🧩 注意力机制在自动驾驶中的应用全景 任务 注意力类型 作用 代表方法 2D 检测 Multi-Head Self-Attn 特征增强 DETR 3D 检测 Cross-Attn 2D→3D 投影 BEVFormer 轨迹预测 Self + Cross 交互建模 Wayformer 在线地图 Cross-Attn 地图元素检测 MapTR 端到端规划 Causal + Cross 时序决策 UniAD VLM 推理 Causal 文本生成 DriveLM 💭 个人思考 Transformer 在自动驾驶领域的渗透速度远超预期。从最初的感知模块开始，如今已覆盖预测、决策、规划的每个环节。\n关键洞察：\nAttention 本质是信息路由 — 让模型学会自己决定\u0026quot;从哪里获取信息\u0026quot;，这比手工设计的融合策略更灵活 计算效率是永恒瓶颈 — O(N²) 的复杂度在 BEV 大分辨率和长时序场景下极为棘手。Deformable Attention、Linear Attention、Mamba 等方案都在尝试突破 Chinchilla Law 同样适用 — 自动驾驶 Transformer 也需要更大的数据和模型才能显示出 Scaling 能力 未来值得关注的方向：Sparse Attention（减少冗余计算）和 多模态共用 Transformer Backbone（统一感知-预测-规划），这些将是推动自动驾驶模型能力提升的关键杠杆。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/transformer%E4%B8%8E%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6%E8%AF%A6%E8%A7%A3/","summary":"Transformer 凭借自注意力机制的长程依赖建模与并行计算能力，从 NLP 席卷至自动驾驶全栈。本文从缩放点积注意力的数学原理出发，系统梳理 Multi-Head Attention、ViT、BEVFormer 及 VLM 中 Causal Attention 的关键技术。为理解 Transformer 在自动驾驶感知与规划中的应用奠定理论基础。","title":"知识点拆解｜Transformer与注意力机制基础"},{"content":"1 引言：控制模块的角色 在自动驾驶经典 pipeline 中，控制模块位于规划之后、执行之前：\n规 划 → 目 标 轨 迹 （ w a y p o i n t s + 速 度 ） → 控 制 器 → 油 门 / 刹 车 / 方 向 盘 → 车 辆 执 行 控制器的任务：将规划器输出的参考轨迹转化为物理执行器信号，让车辆精确跟踪参考路径。\n在端到端范式中，控制角色发生了根本性转变：\n传统：控制是独立模块，负责底层执行 端到端：许多模型直接从感知输出 waypoints（跳过显式控制器） 混合：waypoints + 轻量级控制器 2 车辆运动学模型 2.1 自行车模型（Bicycle Model） 自行车模型是自动驾驶控制中最基础、最广泛使用的车辆简化模型。它将四轮车辆简化为两轮（前后各一个轮子），忽略了车辆的横向载荷转移和悬架动力学。\n2.1.1 运动学自行车模型 假设：\n车辆在平面内运动 轮胎无侧滑（速度方向 = 轮胎朝向） 低速场景（\u0026lt; 5 m/s）下精度良好 状态表示：\n状 - - - 态 向 x θ v δ 量 , : : : : y 航 纵 前 [ : 向 向 轮 x 角 速 转 , 后 （ 度 角 轴 车 y 中 头 , 心 朝 位 向 θ 置 ） , v , δ ] 状态更新方程：\nx y θ _ _ _ { { { t t t + + + 1 1 1 } } } = = = x y θ _ _ _ t t t + + + v v · · / L c s ) o i s n · ( ( θ θ t _ _ a t t n ) ) ( δ · · _ t d d ) t t · d t 其中 L 为轴距（前后轮距）。\n控制输入：加速度 a（控制速度） + 前轮转角 δ（控制转向）\n2.1.2 动力学自行车模型 拓展：引入轮胎侧偏角、横摆角速度、侧向力等物理量。\n额外状态：\nβ r = = a d r θ c / t d a t n ( t a n ( δ ) · l _ r / L ) 质 心 侧 偏 横 角 摆 角 速 度 状态更新方程（简化版）：\nx y θ v r ̇ ̇ ̇ ̇ ̇ = = = = = v v r a ( l · · _ f c s o i · s n ( ( F θ θ _ y + + f β β - ) ) l _ r · F _ y r ) / I _ z 横 摆 角 加 速 度 其中：\nF_yf, F_yr: 前后轮胎侧向力 l_f, l_r: 质心到前后轴距离 I_z: 绕 z 轴转动惯量 2.2 运动学 vs 动力学模型对比 维度 运动学模型 动力学模型 假设 轮胎无侧滑 考虑轮胎侧偏 适用速度 低速（\u0026lt; 5 m/s） 中高速（5~40 m/s） 状态维度 4~5 维 6~8 维 精度 低速时高 全速域高 计算复杂度 极低 中等 控制难度 易 难（参数多） 实践建议：自动泊车用运动学模型，高速巡航用动力学模型，城市道路用两者混合。\n3 状态表示详解 3.1 轨迹点状态向量 一个典型的轨迹点包含以下维度：\n状态量 符号 单位 含义 横向位置 x m 全局坐标系 x 坐标 纵向位置 y m 全局坐标系 y 坐标 航向角 θ rad 车头朝向与 x 轴夹角 速度 v m/s 纵向速度 加速度 a m/s² 纵向加速度 加加速度 jerk m/s³ 加速度的变化率（舒适度指标） 3.2 Frenet 坐标系下的状态 在 Frenet 坐标系下，状态表示为：\ns d ṡ ḋ s d ̈ ̈ = = = = = = 沿 到 d d 参 参 s d d d 考 考 / / ² ² 线 线 d d s d 的 的 t t / / 弧 垂 d d 长 直 = = t t 偏 ² ² 移 纵 横 向 向 = = 速 速 度 度 纵 横 向 向 加 加 速 速 度 度 Frenet 坐标的优势：\n道路约束天然表达（d 范围 = [-车道半宽, 车道半宽]） 纵向和横向控制解耦（可分别控制速度和转向） 路径曲率信息被参考线吸收（不需要在每个点计算） 3.3 高级状态 对于更精细的控制，还可以包含：\n状态量 含义 用途 ϕ 横摆角（yaw rate） 动力学控制 β 质心侧偏角 稳定性控制 κ 轨迹曲率 前馈控制 dϕ/dt 横摆角速度 ESP 系统 轮胎滑移率 λ 轮胎打滑程度 牵引力控制 4 经典控制方法 4.1 PID 控制 原理：基于误差的比例、积分、微分三项组合控制。\nu ( t ) = K _ p · e ( t ) + K _ i · ∫ e ( t ) d t + K _ d · d e ( t ) / d t 在自动驾驶中的应用：\n用途 控制量 被控量 车速控制 油门/刹车 速度误差 横向控制 方向盘转角 航向误差 / 横向偏移误差 跟车控制 油门/刹车 车距误差 PID 优缺点：\n优势 劣势 实现简单，不需要模型 无预见性，急弯性能差 计算量极小 参数整定依赖经验 鲁棒性好 无法处理时滞系统 实际经验：自动驾驶中 PID 通常用于纵向控制（速度环），横向控制更多使用 LQR 或 MPC。\n4.2 LQR（线性二次型调节器） 原理：在满足线性动力学假设下，通过最小化二次型代价函数求取最优控制律。\n代价函数：\nJ = Σ ( x _ t ' · Q · x _ t + u _ t ' · R · u _ t ) Q：状态误差权重矩阵（大 Q = 强跟踪） R：控制代价权重矩阵（大 R = 小控制量） Riccati 方程：\nP = A ' P A - A ' P B ( B ' P B + R ) ⁻ ¹ B ' P A + Q 通过离线求解 Riccati 方程得到 P，再计算最优反馈增益 K。\nLQR 的优点：\n闭式解，推理极快 在高速环境下表现优秀 理论基础完善（稳定性、鲁棒性证明） LQR 的不足：\n无法处理约束（如转向极限、加速度极限） 模型线性假设在高动态场景下不成立 4.3 MPC（模型预测控制） 原理：在有限时域内在线求解带约束的最优控制问题。\n数学表述：\nm s i . n t . Σ x _ _ u x { { _ _ k k m m = + i i 0 1 n n } } ^ ≤ ≤ { = N u x } f _ _ ( k k ( x x _ ≤ ≤ _ k k , u x _ _ - u m m _ a a x k x x _ ) r e f _ k ) ' Q 动 ( 力 x 学 控 状 _ 约 制 态 k 束 量 约 约 束 - 束 x _ r e f _ k ) + u _ k ' R u _ k 滚动时域机制：\n在当前时刻 t，求解 N 步最优控制序列 只执行第一步控制量 u_t 在 t+1 时刻重新求解 特性 LQR MPC 是否在线求解 否（离线算好增益） 是（每步在线优化） 约束处理 不支持 天然支持 计算量 极低 较高（需求解 QP） 预见能力 无 有（可看未来 N 步） 非线性 不适用 可用（用非线性 MPC） MPC 在自动驾驶中典型用途：\n路径跟踪控制器 自主泊车 避障轨迹优化 编队控制 5 轨迹跟踪算法 5.1 Pure Pursuit（纯追踪法） 几何方法：基于车辆与目标点的几何关系计算转向角。\nδ ( t ) = a r c t a n ( 2 · L · s i n ( α ( t ) ) / l _ d ) L：轴距 l_d：前视距离（lookahead distance） α：车辆航向与目标点方向的夹角 前视距离的选择：\nl_d 太小 → 震荡、不稳定 l_d 太大 → 切弯、响应慢 自适应：l_d = k · v（速度越大，看得越远） 特点：\n实现极为简单 对曲率变化不敏感 低速下效果好，高速精度不足 5.2 Stanley 方法 斯坦福大学提出，参加 DARPA 挑战赛。\nδ ( t ) = θ _ e ( t ) + a r c t a n ( k · d _ e ( t ) ( t ) ) θ_e：航向误差 d_e：横向偏移误差 k：增益参数 Stanley 的特点：\n比 Pure Pursuit 跟踪精度高 天然包含航向和横向两个误差项 在平滑道路上表现优秀 急弯处可能出现震荡 5.3 MPC 跟踪 将轨迹跟踪建模为带约束的优化问题：\nm s i . n t . Σ 动 力 转 保 ( 学 向 证 y 方 角 无 ( 程 、 碰 t （ 加 撞 ) 运 速 （ 动 度 可 - 学 在 选 或 合 ） y 动 理 _ 力 范 r 学 围 e 模 f 型 ( ） t ) ) ' · Q · ( y ( t ) - y _ r e f ( t ) ) 优势最大：可以同时处理跟踪、避障、动力学约束。\n关键参数：\n预测时域 N：1030 步（每步 0.1s → 13 秒）） 控制时域 M：通常 M ≤ N 5.4 三种跟踪方法对比 方法 精度 计算量 约束处理 高速性能 Pure Pursuit 低 极低 否 差 Stanley 中 低 否 中 MPC 高 高 支持 好 6 车辆动力学中的关键物理 6.1 轮胎模型 Pacejka 魔术公式：\nF _ y = D · s i n ( C · a r c t a n ( B · α - E · ( B · α - a r c t a n ( B · α ) ) ) ) α：轮胎侧偏角 B, C, D, E：经验参数（不同的轮胎有不同的参数集） 简化线性模型（小侧偏角假设）：\nF _ y = C _ α · α C_α 为轮胎侧偏刚度。\n6.2 侧偏角与不足转向 侧偏角：轮胎实际运动方向与轮胎朝向之间的夹角。\n不足转向（Understeer）：\n前轮侧偏角 \u0026gt; 后轮侧偏角 车辆转弯半径 \u0026gt; 方向盘角对应的半径 \u0026ldquo;推头\u0026rdquo;——车头指向弯道外侧 过度转向（Oversteer）：\n后轮侧偏角 \u0026gt; 前轮侧偏角 车辆转弯半径 \u0026lt; 方向盘角对应的半径 \u0026ldquo;甩尾\u0026rdquo;——车尾指向弯道外侧 稳定性因素 K：\nK = m / L ² · ( b / C _ α f - a / C _ α r ) K \u0026gt; 0：不足转向（稳定） K = 0：中性转向 K \u0026lt; 0：过度转向（不稳定） 横向加速度约束：\na _ y _ m a x ≈ μ · g μ：路面附着系数（干沥青 0.81.0，湿路面 0.30.5，冰雪 0.1~0.2） g：重力加速度 7 端到端中的控制角色转变 7.1 传统方式 规 划 → 连 续 轨 迹 点 ( x , y , θ , → 控 制 器 ( P I D / L Q R / M P C ) → 油 门 / 刹 车 / 转 向 7.2 端到端方式 大多数端到端驾驶论文跳过显式控制器，直接从网络输出 waypoints：\n感 知 → 端 到 端 网 络 → w a y p o i n t s ( x , y , t ) → （ 可 选 ） 轻 量 级 控 制 器 → 执 行 为什么可以跳过控制器？\n原因 说明 数据驱动的隐式建模 专家轨迹中天然包含了车辆动力学 控制不是核心问题 学术界更关注感知和决策，控制是工程问题 端到端的美学 尽量减少人工设计的模块 7.3 Action Chunking（动作块预测） VLA 论文中常见的做法：不预测单个下一步动作，而是预测未来 T 步的完整动作序列。\n观 测 → 网 络 → [ w a y p o i n t _ 1 , w a y p o i n t _ 2 , . , w a y p o i n t _ T ] 为什么是\u0026quot;chunk\u0026quot;而不是\u0026quot;step\u0026quot;：\n单步预测 动作块预测 只预测下一步 预测未来 T 步 需要每一步重新推理 一次推理多个未来帧 可能导致短视行为 能考虑长期后果 系统延迟敏感 对延迟更鲁棒 典型 chunk 长度：1030 个 waypoints（对应 13 秒，每步 0.1s）\n7.4 从 Waypoints 到控制信号 即使端到端网络输出了 waypoints，实际车辆仍然需要底层的油门/刹车/转向映射：\nW a y p o i n t s → 速 度 / 曲 率 计 算 → P I D ( 速 度 环 ) → 油 门 / 刹 → 车 方 向 盘 → 转 向 常用映射规则：\nWaypoints 包含 后续处理 (x, y) 平面点 需要转成速度、曲率 (x, y, θ) 曲率可直接计算 (x, y, θ, v) 速度已知，曲率已知，控制最简单 (v, δ) 直接控制量 最细粒度，但需要确保平滑 7.5 为什么不是所有论文都用 MPC 理由 解释 复杂性 MPC 需要精确的动力学模型和在线优化 端到端一致性 如果网络已经输出了好轨迹，再加 MPC 可能画蛇添足 研究焦点 论文侧重新架构、新学习范式，而不是底层控制 GPU vs CPU 网络在 GPU 上推理，MPC 在 CPU 上求解，跨设备通信开销 8 总结 维度 要点 运动学模型 自行车模型（低速用运动学，高速用动力学） 状态表示 [x, y, θ, v, a, jerk] 6 维标准，Frenet 坐标解耦控制 控制算法 PID（简单快速）、LQR（无约束最优）、MPC（约束最优） 轨迹跟踪 Pure Pursuit（几何）、Stanley（横向+航向）、MPC（全能） 车辆动力学 轮胎模型、侧偏角、不足/过度转向 端到端角色 大多数论文跳控制器直接输出 waypoints Action Chunking 一次预测多步 waypoints，更鲁棒、更远视 落地现实 waypoints → 轻量 PID 控制器 → 油门/刹车/转向 一句话总结：控制是将规划意图转化为车辆执行的关键桥梁，经典控制理论成熟可靠，但端到端自动驾驶正逐步用\u0026quot;直接输出 waypoints\u0026quot;替代显式控制器，控制模块从核心模块转变为可选轻量组件。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E6%8E%A7%E5%88%B6%E5%9F%BA%E7%A1%80%E4%B8%8E%E8%BD%A6%E8%BE%86%E5%8A%A8%E5%8A%9B%E5%AD%A6/","summary":"控制模块是自动驾驶系统中连接规划与车辆执行器的关键桥梁。本文深入讲解车辆运动学与动力学基础模型、经典控制方法（PID、LQR、MPC）、轨迹跟踪算法、以及车辆动力学中的关键物理概念。同时分析端到端自动驾驶中控制角色的转变——从传统控制到\u0026rsquo;waypoint 直接输出\u0026rsquo;再到\u0026rsquo;action chunking\u0026rsquo;的演进逻辑。","title":"知识点拆解｜控制基础与车辆动力学"},{"content":"📄 论文信息 标题：DROID: A Large-Scale In-The-Wild Robot Manipulation Dataset（DROID：大规模真实世界机器人操作数据集） 团队：Stanford、UC Berkeley、Toyota Research Institute、Google DeepMind等18家机构 发表：CoRL 2024 / arXiv 2024.03 关键词：真实世界数据集、分布式采集、场景多样性、机器人操作、泛化能力 一句话总结：首个跨越三大洲、564个真实场景的大规模机器人操作数据集，显著提升策略性能与泛化能力 论文链接：arXiv:2403.12945 代码链接：droid-dataset.github.io 🤔 要解决什么问题？ 真实世界数据采集的困境 在机器人操作领域，数据多样性是训练泛化策略的关键。然而，现有的机器人数据集面临一个根本性矛盾：\n实验室数据的局限性：\n大多数数据集在受控的实验室环境中采集 场景单一、光照固定、物体有限 训练出的策略难以泛化到真实世界 真实世界采集的挑战：\n将机器人部署到不同环境面临后勤和安全挑战 需要大量的硬件和人力投入 不同机构的硬件不一致导致数据难以整合 现有数据集的不足：\n数据集 轨迹数 场景数 语言标注 相机标定 RT-1 130k 2 ✓ ✗ RH20T 13k 7 ✓ ✓ Bridge V2 60k 24 ✓ ✗ Open X-Embodiment 1.4M 311 (✓) ✗ DROID 76k 564 ✓ ✓ 核心问题 论文试图解决的核心问题是：\n如何构建一个既大规模又高多样性、既高质量又易于复现的机器人操作数据集，以支持训练更加鲁棒和泛化的操作策略？\n具体来说，需要回答：\n如何在不同地点、不同机构之间实现一致的数据采集？ 如何确保数据的场景多样性和任务多样性？ 如何保证数据的质量和可用性（相机标定、语言标注等）？ 💡 核心方法 1. DROID硬件平台设计 为了实现跨机构的一致数据采集，DROID团队设计了一个标准化的机器人平台：\n硬件配置：\n机器人：Franka Emika Panda 7DoF机械臂 + Robotiq 2F-85夹爪 相机： 2个外部Zed 2立体相机（可调节三脚架安装） 1个腕部Zed Mini立体相机 控制器：Meta Quest 2 VR头显 + 手柄（6D位姿控制） 计算：Franka控制盒 + NUC（Polymetis服务器）+ Alienware笔记本（数据采集GUI） 移动性：安装在带轮子的可调节高度桌面上 设计原则：\n可移植性：整个平台可通过单根电源线供电，便于在不同场景间移动 可复现性：所有13个机构使用完全相同的硬件配置 灵活性：相机视角可快速调整以适应新场景 2. 分布式数据采集协议 DROID的核心创新在于其分布式数据采集协议：\n采集流程：\n将机器人移动到新场景 调整第三人称相机视角 使用棋盘格进行外参标定 在GUI中输入当前场景的潜在任务列表 系统随机采样任务提示采集者 定期执行场景增强（移动底座、调整相机、改变光照、增减物体） 每个场景采集约100条轨迹或20分钟数据后转移到新场景 质量控制：\n采集者标记每条轨迹是否成功 76k条成功轨迹（另有16k条失败轨迹也包含在数据集中） 通过tasq.ai平台进行众包语言标注，每条轨迹最多3条独立标注 3. 相机自动标定 由于手动标定在大规模采集中的局限性，DROID开发了自动后处理标定流程：\n相机-基座标定：约36k个唯一场景的单相机标定 相机-相机标定：所有场景的双相机标定 精选子集：24k个场景的完整三相机标定 这显著提高了数据集在3D感知和几何理解任务中的可用性。\n🧪 实验验证 实验设计 论文在6个任务、4个地点（实验室、办公室、真实家庭）进行了广泛的评估：\n评估任务：\n关闭华夫饼机：短视域任务，随机化位置（70条演示） 将薯片放到盘子上：拾取放置任务，新物体+干扰物 将苹果放入锅中：多阶段任务（拾取→放置→关盖） 烤面包：多阶段任务，新物体 清理桌面：打开抽屉→放入橡皮→关闭 煮扁豆：复杂多阶段任务（开盖→倒扁豆→开火） 对比方法：\n无协同训练：仅使用任务特定数据 Open X-Embodiment协同训练：使用OXE数据集 DROID协同训练：使用DROID数据集 实验结果 1. 策略性能提升 设置 无协同训练 OXE协同训练 DROID协同训练 分布内 基准 +15% +22% 分布外 基准 +10% +17% 关键发现：\nDROID协同训练在所有任务上都显著提升性能 相比无协同训练，平均提升22%（分布内）和17%（分布外） 相比OXE协同训练，DROID也有显著优势 2. 场景多样性的重要性 论文进行了专门的消融实验来验证场景多样性的影响：\n使用DROID的子集（仅单个场景）训练 → 性能显著下降 使用完整DROID（564个场景）训练 → 最佳性能 证明场景多样性是DROID成功的关键因素 3. 鲁棒性验证 在分布外评估中，DROID训练的策略表现出更强的鲁棒性：\n干扰物鲁棒性：在桌面增加干扰物体后仍能成功 新物体泛化：对训练中未见过的物体实例也能操作 场景泛化：在不同的桌面布局和光照条件下工作 🔍 个人思考 亮点 真实世界数据采集的范式创新：\n首次实现跨三大洲、13个机构的分布式数据采集 标准化硬件平台确保数据一致性 为机器人领域的\u0026quot;ImageNet时刻\u0026quot;奠定基础 场景多样性的系统性分析：\n提出了多维度的数据多样性分析框架 量化了任务、物体、场景、视角、交互位置等维度 为未来数据集构建提供了指导原则 工程质量与可复现性：\n完整的硬件复现指南 自动相机标定流程 开源数据集、代码和预训练模型 实用性强：\n真实家庭、办公室等场景的数据 贴近实际应用的任务设计 为机器人进入日常生活铺平道路 局限性 单一机器人形态：\n仅使用Franka Panda机械臂 缺少双臂、移动操作等形态 限制了数据集的适用范围 任务复杂度有限：\n主要是桌面操作任务 缺少长序列、多步骤的复杂任务 与真实世界的需求仍有差距 数据量相对有限：\n76k轨迹相比NLP/CV领域仍然较小 可能不足以训练大规模基础模型 需要与其他数据集结合使用 采集效率问题：\n每个场景约20分钟，效率较低 需要专业人员操作 难以进一步扩大规模 未来方向 多机器人形态扩展：\n纳入双臂、移动操作、四足机器人等 探索跨形态迁移学习 构建更通用的机器人数据集 任务复杂度提升：\n长序列任务（如烹饪完整菜肴） 移动操作（如在厨房中取物） 人机协作任务 数据采集自动化：\n探索自主数据采集（如使用脚本化策略） 结合仿真生成数据 降低人力成本 与基础模型融合：\n探索DROID与VLM、LLM的结合 利用互联网知识增强泛化 实现语言驱动的通用操作 📖 延伸阅读 Open X-Embodiment: Open X-Embodiment Collaboration, \u0026ldquo;Open X-Embodiment: Robotic Learning Datasets and RT-X Models\u0026rdquo;, ICRA 2024 RT-1: Brohan et al., \u0026ldquo;RT-1: Robotics Transformer for Real-World Control at Scale\u0026rdquo;, RSS 2023 RH20T: Fang et al., \u0026ldquo;RH20T: A Comprehensive Robotic Dataset for Learning Diverse Skills in One-Shot\u0026rdquo;, 2023 Bridge V2: Walke et al., \u0026ldquo;BridgeData V2: A Dataset for Robot Learning at Scale\u0026rdquo;, CoRL 2023 Diffusion Policy: Chi et al., \u0026ldquo;Diffusion Policy: Visuomotor Policy Learning via Action Diffusion\u0026rdquo;, RSS 2023 本文为论文精读系列第2篇，聚焦具身智能领域的大规模真实世界机器人操作数据集。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/droid%E6%9C%BA%E5%99%A8%E4%BA%BA%E6%93%8D%E4%BD%9C%E6%95%B0%E6%8D%AE%E9%9B%86%E7%B2%BE%E8%AF%BB/","summary":"DROID是Google联合18家机构打造的大规模真实世界机器人操作数据集，包含76k演示轨迹、564个场景、86个任务，跨越北美、亚洲、欧洲三大洲。实验证明使用DROID训练的策略在性能和泛化能力上平均提升20%。","title":"论文精读｜DROID：大规模真实世界机器人操作数据集"},{"content":"📄 论文信息 项目 内容 标题 MAN TruckScenes: A multimodal dataset for autonomous trucking in diverse conditions 团队 MAN Truck \u0026amp; Bus SE × Technical University of Munich（Felix Fent, Fabian Kuttenreich, Florian Ruch, Farija Rizwin, Stefan Juergens, Lorenz Lechermann, Christian Nissler, Andrea Perl, Ulrich Voll, Min Yan, Markus Lienkamp） 发表 arXiv 2407.07462，NeurIPS 2024 Datasets and Benchmarks Track 代码/数据 truckscenes-devkit / 项目主页 / AWS Open Data 关键词 重卡自动驾驶、多模态数据集、4D 雷达、nuScenes 格式、长距离感知、卡车特有挑战 一句话概括：MAN TruckScenes 是第一个专门为自动驾驶重卡做的大规模多模态数据集——它把传感器架在 3.2 米高的重卡上、用 6 个 4D 雷达拼出几乎 360° 的覆盖，并首次给出带 3D 框标注的雷达点云，让研究者第一次能系统性研究「拖车遮挡、底盘-驾驶室相对运动、物流场站」这些轿车数据集里根本不存在的卡车难题。\n🤔 要解决什么问题？ 先解释几个名词（小白友好版） 多模态数据集（Multimodal Dataset）：同时提供相机、激光雷达、雷达、定位等多种传感器数据的数据库。不同模态互补：相机看纹理颜色、激光雷达看精确几何、雷达看速度和雨雾穿透。 4D 雷达（4D Radar）：相比只能测「距离 + 方位」的传统 3D 雷达，4D 雷达额外能分辨俯仰角（高度），于是每个点有 (x, y, z, 径向速度)。它能直接输出稠密点云，且不怕雨雾、能测速。 标注范围（Annotation Range）：数据集给物体画 3D 框的最远距离。nuScenes 约 141 米、Waymo 仅 80 米；重卡在高速上要提前几百米决策，范围太短会「瞎」。 场景标签（Scene Tag）：给每个片段打的环境标签，比如「雨」「雪」「夜间」「隧道」「物流场站」。用来分析模型在不同条件下的表现。 nuScenes 格式（nuScenes Format）：一种通用的自动驾驶数据组织规范（scene / sample / sweep / annotation / calibration），很多成熟代码（mmdet3d、devkit）直接兼容。 NDS（nuScenes Detection Score）：nuScenes 提出的综合检测指标，是 mAP 与 5 个真阳性误差（平移/尺寸/朝向/速度/属性）的加权平均，比单纯 IoU-mAP 更全面。 sweep（扫掠帧）：两次带标注的关键帧之间、不带标注的中间传感器帧。保留它们能让多帧点云拼接、运动补偿更准。 核心矛盾：城市轿车数据集喂不饱重卡 过去十年的自动驾驶研究，几乎被 KITTI、nuScenes、Waymo Open、Argoverse 这类数据集「带偏」了——它们清一色是城市、低速、乘用车场景。论文在相关工作中直接点破：当时唯一沾点「卡车」的数据集，一个是 TuSimple（只有前视相机车道线标注），一个是 SurMine（矿场私有、仅 2D 框）。没有任何大规模、多模态、带 3D 标注的重卡感知数据集。\n但重卡和乘用车完全不同，直接拿轿车数据训出来的模型上车会踩一堆坑：\n卡车特有挑战 为什么轿车数据集没有 后果 拖车动态遮挡 乘用车没有可活动的挂车 挂车拐弯时遮挡区域实时变化，后方目标忽隐忽现 底盘-驾驶室相对运动 乘用车是一整块刚性体 传感器架在驾驶室上，过颠簸路面时驾驶室相对底盘晃动，标定易漂 传感器得架很高 轿车传感器离地不到 2 米 重卡把激光雷达架到 2.2~3.2 米，视角和轿车完全两样 物流场站环境 城市数据集没有集装箱堆场 满地金属集装箱，雷达多径反射爆炸 高速远距离决策 城市 50 米够用 重卡制动距离长，150 米外就得看清 一句话结论：MAN TruckScenes 就是为了补齐「重卡感知数据空白」而生——它不只把传感器搬上卡车，更把卡车独有的遮挡、运动、场站、长距离问题一次性端到学者面前。\n🔧 传感器套件：把重卡武装到牙齿 MAN TruckScenes 直接基于 nuScenes 格式构建，但传感器数量和布局是为重卡重新设计的。整套配置如下（论文 Table 2）：\n相机：4 台 Sekonix SF3324，RGB，10 Hz，1928×1208，视场 120°×73° 激光雷达：2 台禾赛 Pandar64（10 Hz，64 线，360°×40°，200 米@10%）+ 4 台 Ouster OS0（10 Hz，64 线，360°×90°，35 米@10%），共 6 台 雷达：6 台大陆 ARS 548 RDI（20 Hz，76 GHz，100°×28°），这是4D 雷达 GNSS：1 台 GeneSys ADMA-G-PRO+，100 Hz，双天线测航向，定位精度 0.01 米 IMU：2 台 Xsens MTi-680G-SK，100 Hz，9 自由度 布局上的三个「卡车小心机」 两个侧置传感器模组（corner modules）：左右各一组，每组含 2 相机 + 1 激光雷达 + 3 雷达。把主感知传感器分散到车身两侧，既最大化空间覆盖、又减小相对运动。 激光雷达架到 2.2 米（模组）和 3.2 米（车顶）：高位置能减少遮挡、保护行人、防撞传感器，但也意味着视角和轿车数据集天差地别——这是论文反复强调的「novel sensor perspectives」。对比乘用车典型的 1.5-1.8m 传感器高度，卡车视角的消失点位置、像素-米尺度映射全部改变。 双 IMU 分别架在底盘和驾驶室：一个测整车状态，一个测底盘-驾驶室相对运动。这正是为了补偿「驾驶室相对底盘晃动」这个卡车专属难题。卡车过颠簸路面时，驾驶室通过气囊悬挂与底盘连接，两者之间存在 3-5° 的相对俯仰/侧倾。如果没有双 IMU 做补偿，传感器外参标定会在行驶中持续漂移。 4D 雷达是最大亮点 6 台 4D 雷达拼出接近 360° 的空间覆盖（仅被挂车自身遮挡约 50° 的后方区域）。关键数字：\n每个雷达样本平均 2600 个点，而 nuScenes 的传统雷达每帧只有约 200 个点——差了一个数量级，意味着 4D 雷达每帧输出的信息量是传统雷达的 13 倍。 因此 MAN TruckScenes 是第一个提供 360° 4D 雷达覆盖、且带 3D 框标注的数据集，也是目前最大的带标注雷达数据集。 为什么 4D 雷达对重卡特别重要？\n条件 激光雷达 相机 4D 雷达 干燥白天 ✅ 优秀 ✅ 优秀 ✅ 良好 夜间 ✅ 优秀 ❌ 差 ✅ 良好 雾天 ❌ 衰减严重 ❌ 几乎失效 ✅ 良好（穿透雾） 雨天 ⚠️ 部分衰减 ⚠️ 模糊 ✅ 良好 直接测速 ❌ 需帧间匹配 ❌ 需帧间匹配 ✅ 径向速度 远距(\u0026gt;200m) ⚠️ 点稀疏 ⚠️ 像素少 ✅ 稳定 重卡在高速公路上遇到雾天、雨天的概率远高于市区乘用车。激光雷达在雾中回波衰减严重，相机几乎失效，只有 4D 雷达能提供稳定的感知。6 台 4D 雷达构成的覆盖网络相当于给重卡装了一套「全天候感知骨架」。\n关键认知：4D 雷达点云稠密到足以单独跑检测网络（论文用 RadarGNN 直接吃雷达点云），这让「纯雷达感知」「雷达-激光雷达融合」在重卡上第一次有了像样的数据支撑。\n🧩 数据是怎么采、怎么标、怎么分的 采集与同步 从超过 25 小时行驶记录里人工挑出 747 个约 20 秒场景，覆盖高速、场站、乡村、城市，三个季节（春夏秋），以及雨/雾/雪、夜间/黄昏等恶劣条件。场景多样性保证了模型在不同 domain 下的泛化能力评测。 时间同步用 PTP（IEEE 1588）精密时钟协议，各传感器时钟偏差小于 100 微秒，并对齐到 UTC。100μs 的同步精度意味着在 100km/h 速度下，传感器的空间对齐误差不超过 2.8mm——这对远距感知的精度至关重要。 触发同步以激光雷达为参考：先相位同步各激光雷达，再在「激光扫到图像中心」的时刻触发相机，最后错频触发雷达以减小互干扰。这个设计避免了传统「全局硬触发」方案中所有传感器同时工作产生的电磁干扰。 标定四步走：外参初标（手眼标定 + 摄影测量） → 联合外参内标（最小化重投影误差） → 航向角修正（利用直线行驶的轨迹约束） → 数据级+应用级验证（检查点云与图像的边缘对齐精度）。相机-激光雷达达到像素级精度（\u0026lt;2 pixel 重投影误差）。 标注质量 在 2 Hz 的关键帧上人工标 3D 框，基于「融合 + 自车运动补偿」的点云。 标注经过最多三轮独立标注 + 质检循环，随机样本还要过双控复核。框用中心点 (x,y,z)、尺寸 (w,l,h)、四元数朝向表示。 27 个物体类（层级结构）、15 个属性值（5 类属性，如可见性/活动状态）、全场景34 个场景标签（分 7 大类：区域、天气、光照等）。 物体在整个场景里持续跟踪，带唯一 ID。 隐私：人脸和车牌打码、时间戳匿名化，但时间一致性保留。 数据集切分（用遗传算法找 Pareto 最优） train / val / test 按 70% / 10% / 20% 分。但怎么分才能让各子集「既不同（测泛化）又相似（公平评测）」？论文把这个多目标优化问题用 NSGA-II 遗传算法求解：\n目标 f1~f8：让各切分的类别分布、7 类场景标签分布偏差最小； 目标 f9~f10：最大化切分内时间/空间标准差； 目标 f11~f12：最大化切分间时间/空间的 KL 散度。 这种「用进化算法做数据集划分」的做法很工程化，值得做数据集的人抄。\n🎯 支持的任务与评测 MAN TruckScenes 支持检测、跟踪、预测、定位等多种任务，但重点放在 3D 目标检测。\n检测任务用 12 个类（从 27 标注类里挑出跨切分都存在、且标注不易混淆的子类，并新增「动物」「交通标志」两类）。 评测沿用 NDS，但把检测范围从 nuScenes 的 50 米放宽到 150 米，专门逼模型做长距离检测——这对高速重卡至关重要。 📊 基线实验：三种模态各自的水平 论文给了相机 / 雷达 / 激光雷达三套基线（test split，v1.0），结果如下：\n方法 模态 mAP NDS ATE ASE AOE AVE AAE PETR（FCOS3D 预训练骨干） 相机 0.02 0.12 1.13 0.69 0.65 1.50 0.56 RadarGNN（6 帧聚合 4D 雷达） 雷达 0.07 0.11 0.89 0.81 1.13 8.00 0.57 CenterPoint（3 帧聚合激光雷达） 激光雷达 0.27 0.41 0.41 0.35 0.28 2.73 0.20 几个有意思的观察：\n激光雷达明显最强（NDS 0.41），但距离越远、冬天/隧道条件下质量明显下降，且对训练样本量更敏感。 相机在少数类和恶劣天气/光照下很吃力（mAP 仅 0.02），基本不可用。 雷达对所有非金属类都不行（金属反光才好），且在隧道、集装箱场站里被多径反射坑惨（AVE 高达 8.00，速度误差爆炸）。 总体结论：重卡的安全运行还需要更鲁棒的长距离感知，单一模态都不够。这其实是在喊话「该上多模态融合 / 端到端融合」了。 ⚖️ 和本博客另一篇 TruckDrive 怎么比 我之前写过 TruckDrive 精读（CVPR 2026，Torc x 普林斯顿），它和 MAN TruckScenes 是「重卡数据集双子星」，但取向不同：\n维度 MAN TruckScenes TruckDrive 发表 NeurIPS 2024 D\u0026amp;B CVPR 2026 传感器总数 4 相机 + 6 激光雷达 + 6 个 4D 雷达 + 2 IMU 11-15 相机 + 7 长距 FMCW 激光雷达 + 3 短距激光雷达 + 10 个 4D 雷达 相机 4 台（120° 广角） 11-15 台（混合焦距，含长焦） 激光雷达 2 台 Pandar64 + 4 台 Ouster OS0 7 台 AEVA Aeries II FMCW + 3 台短距 4D 雷达 6 台大陆 ARS 548 10 台大陆 ARS 540 标注范围（3D） 约 226 米 400 米 标注范围（2D） 无 2D 标注 1000 米 标注帧数 ~3 万关键帧 16.5 万密集标注 / 47.5 万同步 场景数 747 3,828 序列 最大亮点 首个 360° 4D 雷达带标注 + nuScenes 格式 devkit 把长距离边界推到极致，证明 150 米外模型就「瞎」 场景 高速 + 场站 + 城乡 + 三季 + 恶劣天气 高速 hub-to-hub 为主 地理分布 德国（~100 km²） 美国 8 州（1,261 km²） 格式 nuScenes 格式（mmdet3d 直接兼容） 自有格式 4D 雷达点密度 ~2600 点/帧 未公开 开源代码 truckscenes-devkit (pip install) 开发中 什么时候用哪个？\n如果你做多模态感知融合研究（尤其 4D 雷达 + LiDAR + 相机），MAN 的 nuScenes 格式让你零成本迁移现有代码，是起步首选。 如果你关注长距离感知极限（模型到底能看多远）、想做高速公路端到端规划，TruckDrive 的 400 米 3D 标注是唯一选择。 如果你研究域适应：用 MAN 做 source domain（德国、MAN 卡车），TruckDrive 做 target domain（美国、Torc 卡车），天然的跨卡车品牌、跨地理的域适应 benchmark。 两者互补：MAN 胜在「模态全、格式友好、雷达稠密」，TruckDrive 胜在「距离更远、长距压力测试更狠」。做重卡感知/端到端的人，两个都该下。\n🚧 局限（论文自己承认的） 只有感知，没有规划/控制标注：它是感知数据集，不含端到端驾驶动作或闭环规划评测（不像 nuPlan）。想练重卡端到端规划得另找数据。 样本量仍偏小：747 场景、约 3 万带标关键帧，和 nuScenes（4 万关键帧）接近但远小于 Waymo（23 万）。 雷达标定只靠摄影测量，角误差可能到 0.03°、内部错位无法完全排除；相机内参在图像边缘不确定性增大。 地理覆盖集中德国：虽然比很多数据集大（约 100 km²），但域外泛化仍待验证。 许可证 CC BY-NC-SA 4.0：非商业，工业直接拿来训练卖钱的产品要注意合规。 💡 个人思考（站在 VLA / 端到端视角） 作为做重卡端到端驾驶的工程师，我对 MAN TruckScenes 最兴奋的有三点：\nnuScenes 格式 = 零成本迁移。我们现有的 BEV / 检测 / 端到端代码几乎能直接吃这份数据，把「卡车视角」作为新域做预训练或域适应，成本极低。 4D 雷达点云是融合的金矿。激光雷达在雨雾掉点、相机在夜间瞎，但 4D 雷达又密又能测速——把它作为端到端模型的独立 token 流（而非后融合），很可能显著提升恶劣天气下的重卡安全率。这正是我们「重卡安全」系列（TruckDrive / TruckV2X / CargoLoad-RSS / AntiRollover-APF）一直关心的落点。 150 米评测范围点出了真问题。我们 Flow-GRPO 类的扩散规划在长尾/远距场景下也容易「看不见就乱开」，而 MAN 的基线已经用数据证明：单模态在 150 米外基本失效。下一步值得做的是「用 MAN 的远距离标注训感知 + 用扩散规划做长视界决策」的组合。 一句话收尾：MAN TruckScenes 不是又一个「换个车的数据集」，而是第一次把重卡的**物理结构难题（拖车遮挡、高视角、底盘-驾驶室运动）和工况难题（场站、雨雾、夜间、长距离）**系统性地交到社区手里。对想做重卡端到端的人，它是绕不开的起跑线。\n📚 参考资料 论文 arXiv：2407.07462 NeurIPS 2024 官方页：Proceedings Devkit：github.com/TUMFTM/truckscenes-devkit AWS Open Data：registry.opendata.aws/man-truckscenes 本博客相关：TruckDrive 精读、TruckV2X 精读、CargoLoad-RSS 精读、AntiRollover-APF 精读 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-mantruckscenes/","summary":"MAN TruckScenes 是 MAN Truck \u0026amp; Bus 与慕尼黑工业大学在 NeurIPS 2024 Datasets \u0026amp; Benchmarks 提出的第一个面向自动驾驶重卡的多模态数据集，含 747 个 20 秒场景、4 相机 + 6 激光雷达 + 6 个 4D 雷达 + 双 IMU + 高精度 GNSS，标注范围超 230 米、27 个物体类、34 个场景标签，并首次提供 360° 覆盖的 4D 雷达点云与带 3D 框标注，配套 nuScenes 格式 devkit 与 CenterPoint/RadarGNN/PETR 基线。本文面向刚入行的 VLA 工程师，用大白话拆解它的传感器布局、卡车特有挑战、标注与切分、以及给端到端重卡模型带来的长距离鲁棒感知问题。","title":"论文精读｜MAN TruckScenes — 第一个面向重卡自动驾驶的多模态数据集，把 4D 雷达做成 360° 全覆盖"},{"content":"📄 论文信息 标题：AlphaDrive: Unleashing the Power of VLMs in Autonomous Driving via Reinforcement Learning and Reasoning 团队：华中科技大学（hustvl，王兴刚团队）× 地平线机器人（Horizon Robotics） arXiv：2503.07608（2025 年 3 月） 代码：github.com/hustvl/AlphaDrive 关键词：GRPO、推理强化学习、高层规划、VLM、奖励设计 一句话总结：首个把 GRPO 推理式强化学习引入自动驾驶规划的工作，靠四个\u0026quot;为规划量身定做\u0026quot;的奖励 + SFT 预热两阶段策略，让 Qwen2VL-2B 反超 7B 模型，并涌现出\u0026quot;一景多解\u0026quot;的多模态规划能力。 🤔 要解决什么问题？SFT 撑不起驾驶推理 OpenAI o1 与 DeepSeek R1 证明了 RL + 推理在数学、代码上能逼近甚至超越人类专家。自动驾驶也有类似诱惑：端到端模型规划很强，却缺常识、缺推理，遇到长尾就翻车。比如\u0026quot;前车顶着一排锥桶行驶\u0026quot;——纯端到端模型看不懂\u0026quot;前车与锥桶的关系\u0026quot;，会误判前方施工而急刹。\n把 VLM 引入驾驶（DriveVLM、Senna 等）是出路，但它们几乎清一色只用 SFT 监督微调。作者敏锐地指出三个\u0026quot;直接搬 RL 不灵\u0026quot;的根因：\n障碍 数学/代码场景 驾驶规划场景 奖励设计 答案对错分明 不同动作重要性不同（刹车 vs. 保持） 解的唯一性 通常唯一解 多解并存（直路可匀速可加速） 推理数据 教材/题解丰富 几乎没有，标注极贵 核心问题：如何让 R1 式的推理 RL 真正在驾驶规划上落地？AlphaDrive 的答案是——重新设计奖励 + 用大模型蒸馏推理过程做 SFT 预热。\n🏗️ 架构总览：GRPO + VLM 训练框架 图注：论文的核心框架图。图中上部是推理蒸馏：驾驶片段（真实动作 + 车辆状态 + 导航）喂给云端大模型生成 \u0026lt;think\u0026gt; 推理过程；下部是基于 GRPO 的规划强化学习：同一 query 采样两条答案，四条奖励（Accuracy / Action-weighted / Diversity / Format）对两条答案分别打分，再经 GRPO 组内归一化后更新参数。这正是全文的\u0026quot;骨架\u0026quot;——上半张图回答\u0026quot;推理从哪来\u0026quot;，下半张图回答\u0026quot;怎么用 RL 优化规划\u0026quot;。\nAlphaDrive 的核心训练框架如上图所示。它基于 Qwen2VL-2B 视觉语言模型，输入前视图像 + 自车速度 + 导航文本，输出带 \u0026lt;think\u0026gt; 推理链和 \u0026lt;answer\u0026gt; 规划结果的格式化文本。整个训练分两阶段：\n阶段 方法 数据量 作用 SFT 预热 GPT-4o 蒸馏推理数据做监督微调 30k 注入推理能力，缓解 RL 冷启动幻觉 RL 探索 GRPO + 四项规划奖励 110k 探索最优规划策略，涌现多模态 GRPO 组内相对优化 $$\\mathcal{J}_{\\text{GRPO}}(\\theta)=\\mathbb{E}\\left[\\frac{1}{G}\\sum_{i=1}^{G}\\min\\big(w_i A_i,\\,\\text{clip}(w_i,1-\\epsilon,1+\\epsilon)A_i\\big)-\\beta\\,\\mathbb{D}_{KL}(\\pi_\\theta\\|\\pi_{\\text{ref}})\\right]$$其中 $w_i=\\pi_\\theta(o_i\\mid q)/\\pi_{\\theta_{\\text{old}}}(o_i\\mid q)$，$A_i = (r_i - \\text{mean}(r_1..r_G)) / \\text{std}(r_1..r_G)$ 为组内相对优势。\n完整的 GRPO 训练循环（配图） 图注：从输入到更新的六个环节。关键点在于第③步——同一 query 采样的 G 条输出各自独立过四条规划奖励，第④步用组内均值当基线算出优势（不需要 PPO 那种额外训练的价值网络），第⑤步用 clip + KL 惩罚稳住更新。左侧两张卡片解释\u0026quot;为什么选 GRPO 而非 PPO\u0026quot;和关键超参（G、ε、β）。\n💡 核心思想：规划是高层动作分类，不是轨迹回归 把规划语言化 AlphaDrive 不让 VLM 直接吐轨迹点（VLM 在语言空间里不擅长精确数值）。它做的是高层元动作规划：输入前视图像 + 提示词（当前车速 + 高德导航文本\u0026quot;直行 100 米后右转\u0026quot;），输出自然语言决策。\n维度 动作集合 横向 path 直行 / 左转 / 右转 纵向 speed 保持 / 加速 / 减速 / 停车 这把规划变成一个横向+纵向的双分类问题，天然适合语言模型和 RL 奖励设计。\n为什么是 GRPO 而不是 PPO/DPO 作者对比三大 RL 算法后选了 GRPO（Group Relative Policy Optimization），两个理由：\nDeepSeek R1 已证明 GRPO 训练更稳、更高效； GRPO 的\u0026quot;组内相对优化\u0026quot;天然契合多解规划——对一个 query 采样一组 $\\{o_1,\\dots,o_G\\}$，用组内归一化奖励作为优势 $A_i$，多解之间的相对优劣正好是规划需要的信号。 $$\\mathcal{J}_{\\text{GRPO}}(\\theta)=\\mathbb{E}\\left[\\frac{1}{G}\\sum_{i=1}^{G}\\min\\big(w_i A_i,\\,\\text{clip}(w_i,1-\\epsilon,1+\\epsilon)A_i\\big)-\\beta\\,\\mathbb{D}_{KL}(\\pi_\\theta\\|\\pi_{\\text{ref}})\\right]$$其中 $w_i=\\pi_\\theta(o_i\\mid q)/\\pi_{\\theta_{\\text{old}}}(o_i\\mid q)$。这个\u0026quot;组内相对\u0026quot;的设定，也是后文多模态规划涌现的伏笔。\nGRPO 相对 PPO/DPO 的实际优势 值得对比一下三大算法在规划上的表现差异：PPO 需要训练一个独立的 value 网络估计基线，在小模型上 value 不准会导致方差爆炸；DPO 依赖成对偏好数据，而驾驶里\u0026quot;哪个动作更好\u0026quot;很难离线标注成对样本；GRPO 用组内均值当基线，省掉 value 网络，又天然利用了\u0026quot;同一场景多解\u0026quot;的结构。作者实验里 GRPO 训练曲线最稳、收敛最快，这印证了\u0026quot;组内相对\u0026quot;对多解任务的适配性——规划的答案不唯一，所以\u0026quot;谁比谁好\u0026quot;比\u0026quot;谁对谁错\u0026quot;更重要。\n🎯 灵魂设计：四个面向规划的 GRPO 奖励 这是全文最有工程价值的部分。直接用\u0026quot;答对给 1 分\u0026quot;的通用奖励在规划上会崩——AlphaDrive 设计了四个互锁的奖励。\n图注：上方是四条奖励各自的职责，左边一条直通\u0026quot;质量奖励\u0026quot;：R_quality = Accuracy × Action-Weighted × Diversity（speed / path 各算一次），再与 Format 奖励相加得到总奖励 R_total = R_quality + R_format。右侧卡片解释\u0026quot;为什么必须乘法耦合\u0026quot;——乘法保证任何一条为 0 就一票否决，模型学不到打擦边球的捷径。\n1. 规划准确率奖励（Planning Accuracy） 用 F1-Score 分别评估横向、纵向决策。为什么不用精确匹配？作者踩过的坑很真实：\n精确匹配：早期模型格式不稳（大小写、多余输出），训练剧烈震荡； 包含匹配（提取所有词看是否含答案）：模型学会捷径——把所有动作都输出，召回率高精度低，mode collapse； F1-Score：兼顾精度与召回，杜绝\u0026quot;全输出\u0026quot;捷径，训练稳定。 2. 动作加权奖励（Action-Weighted） 不同动作对安全的重要性不同：减速、停车、转向比\u0026quot;保持\u0026quot;关键得多。给各动作赋不同权重，作为准确率奖励的乘子，让模型在关键决策上更使劲。\n3. 规划多样性奖励（Planning Diversity） 这是最巧妙的一笔。RL 后期模型输出会坍缩成同一个答案。AlphaDrive 反向激励：当组内输出更多样时给更高奖励，重复则扣分（最多扣 20%）：\n$$\\text{diversity}=1-\\min\\big(0.2,\\ \\text{该答案在组内的占比}\\big)$$这条奖励直接催生了后文\u0026quot;多模态规划涌现\u0026ldquo;的奇观。\n4. 规划格式奖励（Planning Format） 学 R1，用 \u0026lt;think\u0026gt;\u0026lt;/think\u0026gt; 包推理、\u0026lt;answer\u0026gt;\u0026lt;/answer\u0026gt; 包结果。格式不符则格式奖励为 0，逼模型输出结构化。\n奖励合成（论文 Algorithm 1 逐行拆解） 论文用一段伪代码（Algorithm 1）给出了完整流程，逐行翻译如下：\n步骤 伪代码含义 产出 ① 正则匹配 F 提取每条回答的 action_ans，统计组内频次 ans_counter ② 从 action_ans 分别抽取 speed / path 两个分量 speed_ans、path_ans ③ 各算一次 F1 准确率 speed_acc_R、path_acc_R ④ 查表取动作权重 speed_weighted_R、path_weighted_R ⑤ 算组内占比 → 1 − min(0.2, 占比) plan_div_R ⑥ 正则校验 \u0026lt;think\u0026gt;/\u0026lt;answer\u0026gt; format_R（0/1） ⑦ speed_R = acc×weighted×div，path_R 同理 存入 [speed_R, path_R, format_R] 最终总奖励：\n$$R_{\\text{quality}} = \\text{Acc}_{\\text{F1}} \\times \\text{Weighted} \\times \\text{Diversity},\\qquad R_{\\text{total}} = R_{\\text{quality}} + R_{\\text{format}}$$四者乘法耦合而非简单相加，确保模型必须\u0026quot;既准、又重要、又多样、又规范\u0026rdquo;。\n与其他 RL 算法的对比 维度 PPO DPO GRPO（AlphaDrive 选用） 价值网络 需要 critic 不需要 不需要 数据需求 单条 rollout 成对偏好数据 组内采样（G 条） 多解适配 差（单值 critic 混淆） 需全排序 天然适配（组内相对） 训练稳定性 critic 偏差敏感 偏好噪声敏感 最稳 规划适用性 低（动作不等权） 低（无多样性机制） 高（四项定制奖励） 🧠 推理从哪来：大模型蒸馏 + SFT 预热 图注：推理数据的生产流水线（左→中）与两阶段训练（中→右）。驾驶片段 + 真实动作 + 车辆状态喂给 GPT-4o 生成简洁决策推理，人工过滤后得到 30k 高质量语料 → 阶段 1 用 SFT 蒸馏推理能力（教\u0026quot;怎么想\u0026quot;）→ 阶段 2 用 110k 全量数据做 GRPO 探索（教\u0026quot;选哪个最优\u0026quot;）。\n推理数据不够？借 GPT-4o 造 驾驶没有现成推理语料。作者用 GPT-4o 对一小批驾驶片段（给真实动作 + 车辆状态 + 导航）生成简洁决策推理过程，人工过滤后得到高质量 reasoning 数据。直接把推理塞进 RL 训练效果差，作者总结出三个具体缺陷：\n感知不全：小模型抓不住关键元素（如红绿灯）； 因果混乱：推理过程逻辑散、因果关系弱； 冗长无效：输出又长又没用。 所以，蒸馏小模型才是正解。\n两阶段：SFT Warm-up + RL Exploration 阶段 数据 目标 阶段 1：SFT 预热 30k GPT-4o 蒸馏推理数据 蒸馏推理能力、缓解 RL 早期幻觉 阶段 2：RL 探索 110k 全量 MetaAD GRPO 探索最优规划策略 为什么必须 SFT 预热？RL 依赖稀疏奖励，小模型（2B）感知推理能力弱，冷启动 RL 会剧烈震荡、幻觉横飞。先用 SFT 把 reasoning 能力蒸馏进来当 warm-up，再让 RL 去探索——SFT 教\u0026quot;怎么想\u0026quot;，RL 教\u0026quot;怎么选最优\u0026quot;。\n🧪 实验与结果 实验设置 数据集：MetaAD，120k 段真实驾驶片段（每段 3 秒），110k 训练 / 10k 验证，场景与动作分布均衡； 基座模型：Qwen2VL-2B（输入前视图像 + 规划 prompt，prompt 含当前车速与高德导航文本）； 训练：16 张 NVIDIA A800； 评测：元动作准确率（逐类 F1）+ 推理质量（BLEU-4 / CIDEr / METEOR）。 主结果：2B 反超 7B 在 MetaAD（120k 片段，110k 训 / 10k 验）上，基座 Qwen2VL-2B：\n模型 规划准确率 Qwen2VL-7B（SFT） 61.44% AlphaDrive（2B） 77.12%（+25.5%） 完整表格（含逐类 F1 与推理质量）：\n方法 参数量 Acc(%) Path-F1(直/左/右) Speed-F1(保/加/减/停) BLEU-4 CIDEr METEOR Qwen2VL (预训练) 2B 13.69 34.05/21.46/13.46 52.34/11.14/13.73/17.03 16.41 10.85 27.66 Qwen2VL (预训练) 7B 19.28 45.92/33.09/19.20 54.13/12.86/27.01/23.48 30.30 16.16 33.36 Qwen2VL (SFT) 2B 55.84 82.68/80.31/70.04 75.97/34.92/55.55/72.64 24.46 23.14 34.26 Llama3.2-V (SFT) 11B 58.21 85.58/84.64/79.12 74.79/35.56/58.99/76.20 32.05 21.25 37.70 Qwen2VL (SFT) 7B 61.44 86.45/85.84/87.75 84.53/43.81/56.30/73.80 41.09 30.65 47.47 AlphaDrive 2B 77.12 96.62/89.83/93.25 86.80/56.33/71.40/86.63 43.54 38.97 55.23 两个观察：① 预训练模型直接评估规划准确率只有 10~20%，说明通用 VLM 完全不会\u0026quot;开车规划\u0026quot;，必须经过驾驶数据训练；② AlphaDrive 只用了 2B 参数，却把 7B SFT 模型按在地上摩擦（+25.5%），转向、加减速这些关键决策的提升最显著，推理质量（BLEU-4/CIDEr/METEOR）也全面领先——这正是\u0026quot;推理 + RL\u0026quot;带来的红利。\n数据效率：20k 样本反超全量 SFT 图注：论文头图，横轴是训练数据量（20K / 50K / 110K），三条曲线分别是 SFT-only、RL-only、SFT+RL。可以看到：数据越少，SFT 掉得越快；而 SFT+RL 始终最高，且在 20K 时对 SFT 有 35.31% 的相对提升（55.64 vs 41.12）。\n训练数据 SFT RL SFT+RL 20k 41.12% 45.46% 55.64% 50k 53.02% 59.33% 70.83% 110k 65.40% 72.41% 77.12% 仅用 20k（约 20%）样本，AlphaDrive 就比全量 SFT 高 35.31%（相对提升）。用一半数据（50k）时准确率已达 70.83%，接近全量 SFT 的结果。RL 对数据效率的撬动作用极其明显——这正是 R1 路线最诱人的红利。\n消融：四个奖励缺一不可 ID Accuracy Weighted Diversity Format Acc(%) 1 基础精确匹配 – – – 42.36 2 基础精确匹配 – – ✓ 55.71 3 F1 – – ✓ 67.91 4 F1 ✓ – ✓ 72.20 5 F1 – ✓ ✓ 69.38 6 F1 ✓ ✓ ✓ 77.12 逐项加入奖励：42.36% → +格式 55.71% → +F1准确率 67.91% → +加权 72.20% → +多样性 77.12%。注意 ID 5：只加多样性不加加权反而比 ID 4 低（69.38 \u0026lt; 72.20），说明多样性奖励是\u0026quot;锦上添花\u0026quot;而非\u0026quot;雪中送炭\u0026quot;——它和加权奖励配合才最优。F1-Score 防捷径、加权提升关键动作、多样性催生多模态，环环相扣。\n推理训练策略消融：推理 + 两阶段都关键 带推理 策略 Acc(%) ✗ SFT 56.97 ✗ RL 62.16 ✗ SFT+RL 70.73 ✓ SFT 65.40 ✓ RL 72.41 ✓ SFT+RL 77.12 三个结论：① 任何训练策略下，带推理都比不带推理强（差距在 6~8 个点），推理对复杂场景的决策提升尤其显著；② 单独 RL 在推理质量上反而不如 SFT（小模型感知推理能力有限，RL 学不动推理过程），所以必须 SFT 预热；③ SFT+RL 两阶段叠加达到最佳——SFT 补推理能力，RL 做策略探索，缺一不可。\n图注：论文的定性可视化。上方是 SFT 模型（无推理），面对复杂场景只输出唯一的 stop, straight；下方是 RL 训练后的 AlphaDrive，同一场景给出两个都合理的解——例如\u0026quot;减速并左变道超越慢车\u0026quot;与\u0026quot;跟车停车避让\u0026quot;并存。这就是\u0026quot;多模态规划涌现\u0026quot;的直接证据。\n涌现现象：多模态规划能力 图注：左栏是 SFT 模型的\u0026quot;单解\u0026quot;困局，右栏是 AlphaDrive 的\u0026quot;多解\u0026quot;涌现，下方对比它和扩散模型式多模态的本质区别。\nRL 训练后，AlphaDrive 在复杂场景下能自发给出多个合理解，而 SFT 模型只能给一个。作者把这归因于 GRPO 的组内相对优化 + 多样性奖励。这对安全意义巨大——下游动作模型可从多个候选里动态选优，把\u0026quot;单选规划\u0026quot;升级成\u0026quot;多选规划\u0026quot;。\n这和扩散式多模态有何不同 有人会问：Diffusion Planner、DiffusionDrive 用扩散模型也能生成多模态轨迹，AlphaDrive 这种\u0026quot;语言模型涌现多模态\u0026quot;有什么新意？区别在于层次：扩散是在底层轨迹空间做多模态（同一意图下不同几何走法），而 AlphaDrive 是在高层元动作空间做多模态（\u0026ldquo;减速跟车\u0026quot;和\u0026quot;变道绕行\u0026quot;两个截然不同的策略都能给出来）。前者是\u0026quot;怎么走\u0026quot;的多样性，后者是\u0026quot;做什么\u0026quot;的多样性。理想系统需要两者叠加——高层多策略决策（AlphaDrive）+ 底层多轨迹生成（Diffusion Planner），这才是完整的多模态规划栈。\n⚠️ 局限与未来方向 动作粒度粗：目前只输出元动作，变道、贴边挤让等复杂行为还做不了，受限于标注丰富度； 推理数据是伪标签：基于真值动作回放生成，感知可能不准、关键因素可能漏； 开环评测：高层动作需配合下游动作模型才能闭环验证真实驾驶表现。 后续方向我看好：把元动作接到 Diffusion Planner / Flow Matching 轨迹头做闭环、用环境反馈奖励（碰撞、舒适）替代部分规则奖励、把多模态候选接入best-of-N 打分实现推理时 scaling。\n📝 个人思考 AlphaDrive 最让我兴奋的不是某个奖励公式，而是它第一次把 R1 范式真正\u0026quot;接地气\u0026quot;到了驾驶。过去一年所有人都在喊\u0026quot;把 o1/R1 用到垂直领域\u0026rdquo;，但真正做出来会发现通用 RL 配方根本不work——数学题答对就是答对，驾驶规划却有\u0026quot;多解、不等权、无推理语料\u0026quot;三重障碍。AlphaDrive 的价值在于它示范了怎么针对领域特性重新设计奖励：F1 防捷径、加权对齐安全、多样性催生多模态，每一条都是踩过坑后的工程结晶。这种\u0026quot;通用方法 + 领域化奖励\u0026quot;的范式，对所有想把 RL 用到非标准任务的人都是教科书。\n第二点启发在**\u0026ldquo;数据效率被 RL 重新定义\u0026rdquo;。20k 样本反超 110k SFT，这个结果对工业界是地震级的。它意味着高质量驾驶数据的获取瓶颈，可能被 RL 部分绕过**——只要有一个能自动判分的奖励函数，模型就能从相对比较中自我进化，而不必死磕人工标注的规模。这与 DriveVLA-W0 用世界模型\u0026quot;撬起\u0026quot;缩放律是同一种智慧：当直接监督信号稀缺或稀疏时，换一种更密的信号源（RL 相对奖励 / 世界模型稠密预测）比堆数据更划算。两条路线本质相通。\n最后，\u0026ldquo;多模态规划涌现\u0026rdquo;这点深远。我们一直以为多模态轨迹要靠扩散模型这种生成式架构才能得到，但 AlphaDrive 证明——在 GRPO 的组内相对优化 + 多样性奖励下，连自回归语言模型都能自发产生多解。这暗示\u0026quot;多模态\u0026quot;可能不是某种架构的专利，而是合适的训练目标的产物。结合 Diffusion Planner 的联合生成、Flow-GRPO 的轨迹对齐，我倾向于认为，\u0026ldquo;推理式高层决策（AlphaDrive）+ 扩散式底层轨迹（Diffusion Planner）\u0026ldquo;的双层架构，会是从\u0026quot;可解释\u0026quot;到\u0026quot;可执行\u0026quot;的最短路径。GRPO 给了驾驶大模型\u0026quot;会思考\u0026quot;的能力，这才是它真正的历史位置。\n🔗 延伸阅读 工作 关系 DeepSeek R1 / GRPO 本篇方法母体，组内相对优化 DriveVLM / Senna VLM 高层规划先驱，本篇的训练对象升级 Diffusion Planner 本系列第 15 篇，底层轨迹生成，与 AlphaDrive 高层决策互补 DriveVLM-RL 本系列第 14 篇，神经科学双通路 RL，另一条安全 RL 路线 OpenAI o1 推理时 scaling 思想来源 📖 这是论文精读系列的第 16 篇。当驾驶大模型学会\u0026quot;想清楚再开\u0026rdquo;，RL 会成为自动驾驶的\u0026quot;最后一公里\u0026quot;吗？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/alphadrive-grpo%E9%A9%BE%E9%A9%B6%E7%AD%96%E7%95%A5%E7%B2%BE%E8%AF%BB/","summary":"AlphaDrive 把 DeepSeek R1 式的 GRPO 推理强化学习首次引入自动驾驶规划，将高层驾驶决策建模为元动作分类问题。它设计了四个面向规划的专门奖励，配合 SFT 预热+RL 探索两阶段策略。仅 2B 参数的 Qwen2VL 模型反超 7B 系列，并涌现出\u0026rsquo;一景多解\u0026rsquo;的多模态规划能力。","title":"论文精读｜AlphaDrive：GRPO 强化学习唤醒驾驶推理与多模态规划"},{"content":"1 引言：安全是自动驾驶的第一性原则 在自动驾驶系统中，安全不是优化目标之一，而是硬约束。一个开得\u0026quot;好但偶尔不安全\u0026quot;的系统是不可接受的。\n端到端安全可以分层理解：\n层 层 层 层 级 级 级 级 1 2 3 4 ： ： ： ： 规 控 系 预 划 制 统 期 安 安 安 安 全 全 全 全 → → → → 轨 执 硬 应 迹 行 件 对 本 过 冗 未 身 程 余 知 无 中 、 场 碰 不 故 景 撞 超 障 、 、 出 容 长 符 车 错 尾 合 辆 、 问 交 物 功 题 规 理 能 极 安 限 全 本文覆盖核心层级，重点聚焦在端到端学习框架中可落地的安全机制。\n2 碰撞检测基础 2.1 Bounding Box 重叠检测 最直接的碰撞检测方式：检查两个矩形是否重叠。\n基于交并比（IoU）的检测：\nI I o o U U = \u0026gt; A 0 r e → a ( 碰 A 撞 ∩ B ) / A r e a ( A ∪ B ) 分离轴定理（SAT，Separating Axis Theorem）：\n将两个有向包围盒（OBB）投影到多个轴上 如果所有轴上投影都不重叠 → 无碰撞 任意一个轴上有重叠 → 可能碰撞 工程优化：\n先用 AABB（轴对齐）做粗筛，再用 OBB 做精检 对相距过远的智能体直接跳过（距离阈值判定） 2.2 Time-to-Collision（TTC，碰撞时间） TTC 是最经典的安全指标之一，衡量\u0026quot;按当前状态行驶多久后会发生碰撞\u0026quot;。\nT T C = 相 对 距 离 / 相 对 速 度 （ 沿 碰 撞 方 向 ） 简化计算：\nT d T _ C = r e = 自 l 车 d 到 = 前 / 车 自 距 车 离 速 _ 度 r e - l 前 车 速 度 （ （ 纵 正 向 值 跟 代 车 表 场 接 景 近 ） ） TTC 阈值：\n场景 安全 TTC 警告 TTC 紧急 TTC 高速 \u0026gt; 5s 3~5s \u0026lt; 3s 城市 \u0026gt; 3s 2~3s \u0026lt; 2s 停车场 \u0026gt; 2s 1~2s \u0026lt; 1s 局限：TTC 假设速度和方向不变，在交互场景中不够准确。\n2.3 距离基础碰撞检测 更鲁棒的方法：基于路径预测的距离计算。\n纵向距离：\nd _ l o n g = 自 车 路 径 上 到 前 车 的 弧 长 距 离 横向距离：\nd _ l a t = 两 车 中 心 线 之 间 的 垂 直 距 离 碰撞条件：\nd _ l o n g \u0026lt; 安 全 跟 车 距 离 \u0026amp; \u0026amp; d _ l a t \u0026lt; 车 道 宽 度 / 2 + 车 宽 / 2 安全跟车距离通常用\u0026quot;二秒法则\u0026quot;：\nd t d _ _ _ s r m a e i f s n e p o ≈ = n s 2 v e ~ 5 · ≈ m t 1 ( _ . 最 r 5 小 e ~ 停 s 2 车 p . 间 o 0 距 n s ) s e ( 系 + 统 响 d 应 _ m + i n 制 动 建 立 时 间 ) 3 可行驶区域约束 3.1 HD Map 约束 高精地图是最可靠的可行驶区域信息来源：\n车道边界线：车辆不能逾越 路缘：物理限制 导流岛、隔离带：不可穿越 人行横道：需让行但可驶入 在轨迹规划中使用：\n约 束 ： d _ l a t ( s ) \u0026lt; 车 道 宽 度 ( s ) / 2 - 车 宽 / 2 对每个轨迹点，检查其横向偏移是否超出车道边界。\n3.2 Online Map 约束 对于不使用 HD Map 的方案，可行驶区域由在线感知模型实时预测：\nDriable Area Segmentation：像素级可行驶区域分割 Road Layout Prediction：预测道路拓扑 Lane Detection：在线车道线检测 在线地图的局限：\n远距离可行驶区域不确定性大 遮挡区域无法判断 检测错误直接导致安全风险 3.3 学习的可行驶性约束 使用神经网络隐式学习哪些区域可行驶：\nB E V 特 征 → 可 行 驶 性 预 测 头 → 每 个 栅 格 的 \" 可 行 驶 概 率 \" 训练时用 ground truth 道路区域做监督 推理时将可行驶概率 \u0026lt; 阈值的区域视为不可通行 可在损失函数中加入\u0026quot;不可行驶区域惩罚\u0026quot; 趋势：端到端模型中，可行驶性约束正从\u0026quot;显式规则\u0026quot;转向\u0026quot;隐式学习\u0026quot;。\n4 规则安全过滤器 4.1 后处理过滤架构 安全过滤器作为规划器输出的后处理模块：\n规 划 器 输 出 轨 迹 → 安 全 过 滤 器 → 安 全 轨 迹 / 回 退 控 制 4.2 安全过滤器的典型流程 碰撞检查：轨迹上每个时间步检测与障碍物的重叠 边界检查：轨迹是否在可行驶区域内 规则检查：是否违反交规（红灯、实线变道） 动力学检查：加速度、转向角是否超出车辆极限 如果任意一项不通过 → 执行回退策略：\ni e f l s 轨 e 迹 执 : 执 通 行 行 过 规 紧 安 划 急 全 轨 刹 检 迹 车 查 : ／ 安 全 坞 轨 迹 （ 安 全 停 车 ） 4.3 安全过滤器设计要点 要点 说明 独立性 过滤器与规划器解耦，即使规划器失效也能工作 可验证性 过滤逻辑必须可形式化验证 计算效率 必须在实时约束内完成（\u0026lt; 10ms） 保守原则 宁可误报也不漏报 4.4 先进方案：可微分安全过滤器 将安全约束以可微形式嵌入规划网络，在训练时同时优化安全和任务目标：\nL L o o s s s s _ = s a L f o e s t s y _ t = a s Σ k m + a x λ ( 0 · , L v o i s o s l _ a s t a i f o e n t _ y m a r g i n - c l e a r a n c e ) violation_margin：安全阈值 clearance：轨迹到障碍物的距离 优势：安全不再只是后处理，而是参与模型训练，形成\u0026quot;内生安全\u0026quot;。\n5 损失函数中的安全设计 5.1 碰撞损失（Collision Loss） L _ c o l l i s i o n = Σ _ i Σ _ t m a x ( 0 , d _ m i n - d _ i _ t ) i：第 i 个障碍物 t：第 t 个时间步 d_i_t：轨迹点到障碍物 i 在时间 t 的距离 d_min：最小安全距离 变体改进：\nIoU-based loss：用预测轨迹与障碍物的 IoU 作为惩罚 速度加权：相对速度越大，惩罚越大 TTC-based loss：TTC \u0026lt; 阈值时施加惩罚 5.2 舒适度损失——加加速度约束 舒适度通常用 jerk（加加速度，即加速度的导数）来衡量：\nL j _ e c r o k m _ f t o r = t ( = a _ ( { 1 t / + T 1 ) } · - Σ a _ _ t t ) ( j / e r d k t _ t ) ² jerk 阈值 主观感受 \u0026lt; 2 m/s³ 很舒适 2~5 m/s³ 轻微不适 5~8 m/s³ 明显不适 \u0026gt; 8 m/s³ 晕车 横向 jerk 同样重要：转向的突然变化也会导致不适。\nL _ c o m f o r t = w _ l o n g · Σ ( j e r k _ l o n g ) ² + w _ l a t · Σ ( j e r k _ l a t ) ² 5.3 车道偏离损失 L _ l a n e = Σ _ t m a x ( 0 , | d _ l a t ( t ) | - l a n e _ w i d t h ( t ) / 2 + c a r _ w i d t h / 2 ) d_lat(t)：t 时刻的横向偏移 lane_width(t)：t 时刻的车道宽度 扩展：\n变道场景：压线前给予惩罚 实线变道：高惩罚 对向车道：极高惩罚 5.4 综合安全损失函数 实际系统的安全损失通常是多项的组合：\nL _ s a f e t y = α · L _ c o l l i s i o n + β · L _ c o m f o r t + γ · L _ l a n e + δ · L _ s p e e d 各项权重 α, β, γ, δ 需要通过场景验证和敏感性分析来确定。\n一个重要的实践教训：损失函数中的安全项权重过大 → 规划过于保守，停滞不前；权重过小 → 不安全轨迹通过。需要精调。\n6 安全世界模型 6.1 什么是安全世界模型 传统的碰撞检测是在当前时刻做检测。但安全的本质问题是：\n\u0026ldquo;如果我现在做这个动作，未来会发生碰撞吗？\u0026rdquo;\n这就需要预测未来的世界状态——这就是安全世界模型的核心。\n6.2 NIFF（Neural Inverse Finite Element Framework） NIFF 是一种用于自动驾驶碰撞预测的神经世界模型。\n核心思路：\n将场景编码为\u0026quot;未来占用场\u0026quot;（future occupancy field） 预测每个栅格在未来每个时间步被占用的概率 将自车轨迹投影到占用场上，计算碰撞概率 优势：\n对 N 比 I ： F 传 F 统 碰 → 撞 检 概 测 率 性 → 碰 撞 确 预 定 测 性 （ 检 碰 查 撞 （ 概 撞 率 / 不 8 撞 5 ） % ， 需 要 谨 慎 ） 技术细节：\n输入：当前场景 BEV + 自车规划轨迹 输出：T 个时间步的占用概率图 碰撞概率 = 轨迹覆盖区域的占用概率之和 6.3 世界模型的其他应用 工作 核心思路 GameFormer 用博弈论建模其他智能体对自车行为的响应 MUVO 学习多模态未来场景预测 OccWorld 用 4D 占用预测做规划安全评估 DriveWorld 以世界模型为核心架构的端到端系统 6.4 世界模型的局限 计算开销大：预测未来占用需要额外模型推理 预测误差：世界模型本身也会错，特别是在长尾场景 难以验证：概率性输出的安全性难以形式化保证 7 主动安全系统（ADAS） 7.1 AEB（自动紧急制动） 原理：当碰撞不可避免时，自动施加最大制动力。\n触发条件：TTC \u0026lt; 阈值（通常 1.5~2.5s） 制动强度：最大制动力（~0.8g ~ 1.0g） 退出条件：车速 \u0026lt; 5km/h 或碰撞风险解除 AEB 分级：\n级别 功能 速度范围 城市 AEB 行人、车辆检测 \u0026lt; 60 km/h 高速 AEB 车辆检测 \u0026lt; 150 km/h 倒车 AEB 后方碰撞 \u0026lt; 15 km/h 交叉口 AEB 横向碰撞 \u0026lt; 30 km/h 7.2 FCW（前向碰撞预警） 原理：在碰撞发生前向驾驶员发出警报，给驾驶员反应时间。\n预警时机：TTC \u0026lt; 3~5s（比 AEB 更早） 输出方式：视觉 + 听觉 + 触觉告警 误报处理：过高的误报率会导致用户关闭系统 7.3 LKA（车道保持辅助） 原理：当车辆无意图偏离车道时，主动纠正方向盘。\n触发条件：车辆靠近车道边界（d_lat \u0026gt; 阈值） 纠正扭矩：轻量纠正（驾驶员可 override） 退出条件：驾驶员打转向灯或施加相反扭矩 LKA 的安全设计：\n始终允许驾驶员 override（人机共驾） 只在非变道意图时激活 扭矩上限受法规约束（ECE R79） 8 功能安全标准 8.1 ISO 26262（道路车辆功能安全） ISO 26262 是汽车行业最核心的功能安全标准，定义了从概念到退役的完整安全生命周期。\n核心概念：\n概念 含义 ASIL（Automotive Safety Integrity Level） A/B/C/D 四级，D 最高 HARA（Hazard Analysis and Risk Assessment） 识别危险事件并评级 安全目标 针对每个危险的安全要求 FTTI（Fault Tolerant Time Interval） 故障发生后到危险发生的时间窗口 安全机制 检测/避免/控制故障的机制 ASIL 等级评估：\nA A Q S S M I I （ L L 质 量 = A 管 理 f \u0026lt; ） ( 严 B = 重 度 \u0026lt; 不 需 S C 要 , 特 \u0026lt; 殊 暴 安 露 D 全 率 （ 措 D 施 E , 最 严 可 格 控 ） 性 C ) 对应本系统（E2E 规划）：\n规划模块通常被分配 ASIL B~D 安全过滤器模块应达到 ASIL D 决策错误导致碰撞：严重度高，可控性低 → ASIL C/D 8.2 SOTIF（预期功能安全，ISO 21448） ISO 21448 解决的是系统在无故障情况下因功能不足导致的危险。\n与 ISO 26262 的区别：\nISO 26262 ISO 21448（SOTIF） 系统故障（硬件损毁、软件 bug） 功能不足（场景未覆盖、感知盲区） 随机硬件失效 算法局限性 通过冗余和诊断解决 通过场景覆盖和验证解决 SOTIF 在 E2E 中的挑战：\nE2E 模型是黑盒，无法像规则系统那样做形式化验证 长尾场景的覆盖率难以估计 \u0026ldquo;神经网络的安全验证\u0026quot;仍是一个开放问题 8.3 端到端系统的安全认证难题 目前尚无成熟的针对 E2E 系统的认证流程，主要困难：\n挑战 说明 可解释性 神经网络的决策过程不透明 可验证性 无法穷尽所有输入场景 分布外检测 遇到训练分布外的场景行为不可控 持续学习 OTA 更新后安全性需要重新认证 行业做法：\n模块化安全：只在安全壳（安全过滤器）中放可验证代码 影子模式：E2E 系统规划但不执行，与安全系统对比 保守退守：不确定场景下退回到保守策略 9 安全趋势总结 9.1 内生安全（Safety by Construction） 将安全约束嵌入到模型架构中，而非作为后处理：\n可微安全损失：安全参与梯度传播 约束解码：轨迹解码模块天然满足安全性约束 安全注意力：注意力机制中引入碰撞感知 9.2 分层安全架构 E 安 底 2 全 层 E 过 执 滤 行 P ↓ 器 ↓ 器 l （ （ a 轨 可 安 硬 n 迹 验 全 件 n 证 轨 冗 e ， 迹 余 r 但 ， （ 保 A 高 守 S 性 ） I 能 L ， 但 D 不 ） 可 验 证 ） 9.3 安全基线方案 实际部署中最可靠的方法仍然是\u0026quot;规则过滤器 + 学习规划器\u0026quot;的组合方案：\n组件 特性 安全保证 学习规划器 高性能、覆盖长尾 无形式化保证 规则过滤器 保守、可验证 ASIL D 10 总结 维度 要点 碰撞检测 Bbox 重叠、TTC（碰撞时间）、距离法（二秒法则） 可行驶区域 HD Map（最可靠）、Online Map（有误差）、学习约束（灵活但需要验证） 安全过滤器 后处理碰撞/边界/规则/动力学检查，回退到紧急刹车 损失函数安全项 Collision Loss + Comfort Loss（jerk）+ Lane Violation Loss 安全世界模型 NIFF 预测未来占用，实现概率性碰撞检查 ADAS 主动安全 AEB（紧急制动）、FCW（碰撞预警）、LKA（车道保持） 功能安全标准 ISO 26262（硬件/软件故障）、ISO 21448（功能不足/SOTIF） 端到端安全趋势 内生安全设计 + 分层安全架构 + 安全过滤器兜底 一句话总结：自动驾驶安全是分层体系——从碰撞检测到损失函数约束，再到规则过滤器和功能安全标准，每一层都不可缺失；在端到端范式中，\u0026ldquo;可验证的安全壳 + 学习的规划器\u0026quot;是目前最现实的安全落地路径。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6%E5%AE%89%E5%85%A8%E6%9C%BA%E5%88%B6%E8%AF%A6%E8%A7%A3/","summary":"安全是自动驾驶系统的第一性原则。本文系统梳理端到端自动驾驶中的安全机制设计，涵盖碰撞检测与避障、可行驶区域约束、规则安全过滤器、损失函数中的安全项、安全世界模型、主动安全 ADAS 系统及功能安全标准等核心内容。帮助读者构建从算法安全到系统安全的完整认知框架。","title":"知识点拆解｜自动驾驶安全机制详解"},{"content":"🎯 引言：为什么需要多传感器？ 单一传感器总有其能力边界。摄像头在弱光下失效，激光雷达在雨雪天退化，毫米波雷达分辨率低。多传感器融合的核心逻辑是利用各传感器的互补特性，在时间和空间上进行对齐，输出比任何单一传感器都更准确、更鲁棒的环境感知结果。\n本文侧重传感器物理层和融合策略层，与 BEV 感知方法（哪些网络结构做 BEV 变换）做区分。\n📷 摄像头：视觉感知的核心 工作原理 摄像头通过CMOS/CCD 感光元件将光子转换为电子信号。关键参数：\n分辨率：像素数量，决定细节能力 帧率：典型 30-60 fps，影响运动捕捉 动态范围：同时看到亮区和暗区的能力 快门类型：全局快门（无畸变）vs 滚动快门（有果冻效应） 自动驾驶摄像头部署 位置 视场角 用途 典型焦距 前视窄角 30-50° 远距检测（\u0026gt;100m） 28mm 前视广角 100-120° 近距+交通灯 8mm 侧视 100° 盲区监测 12mm 后视 100° 后方来车 12mm 环视 180-190° 泊车 鱼眼 优劣势 优点：分辨率最高（8MP 以上）、色彩信息丰富、成本低（$50-200/个）。缺点：依赖环境光、缺乏深度信息（需双目或多目）、受天气影响大。\n📡 激光雷达：3D 感知的黄金标准 工作原理 LiDAR（Light Detection And Ranging）通过发射激光束并测量反射时间（ToF, Time of Flight）计算距离。\n$$distance = \\frac{c \\cdot \\Delta t}{2}$$线数与分辨率 激光雷达的\u0026quot;线数\u0026quot;指垂直方向的激光束数量：\n16 线：4 条线/度（垂直分辨率），低成本，用于 L2 32 线：8 条线/度，中端 64 线：16 条线/度，高精度 128 线：32 条线/度，L4/L5 标配 固态式：无机械旋转，通过 OPA 或 MEMS 实现电子扫描 参数 机械式 固态 FMCW 扫描方式 旋转电机 电子扫描 电子扫描 视场角 360° ~120° ~120° 寿命 ~5k-10k 小时 \u0026gt;50k 小时 \u0026gt;50k 小时 成本 $1000-10000 $200-1000 待量产 测速能力 ❌ ❌ ✅ 直接多普勒测速 FMCW（调频连续波） 是下一代激光雷达的技术方向，可直接测量目标速度（类似雷达的多普勒效应），抗干扰能力强。\n📻 毫米波雷达：全天候感知的最后防线 工作原理 工作频段为 77GHz（较旧的 24GHz 已逐步淘汰），通过发射连续调频波并分析回波的频率偏移来测量距离和速度。\n优势与局限 优点：\n全天候工作（雨、雾、雪、弱光不受影响） 直接测量径向速度 探测距离远（\u0026gt;250m） 缺点：\n角度分辨率低（典型 1-3°，激光雷达 \u0026lt;0.1°） 无法区分高度（无俯仰角信息） 虚假检测（金属反射、栏杆等） 4D 毫米波雷达（增加俯仰角测量）是近年的重要进步，可提供 x-y-z-velocity 四维信息，分辨率接近低线束激光雷达。\n🔊 超声波传感器：近距离的最后保障 核心特性 工作原理：40-60kHz 声波 ToF 测量 探测范围：0.2-5m（非常短） 优点：成本极低（$5-10/个），近距精度高 缺点：受风噪影响，响应慢 典型部署：前后保险杠各 4-6 个，用于自动泊车和近距离防碰撞。\n🆚 四大传感器横评 维度 摄像头 激光雷达 毫米波雷达 超声波 距离测量 间接（双目/单目深度） 直接 ToF 直接 FMCW 直接 ToF 角分辨率 高 高 低 极低 速度测量 间接（帧间差） 间接 直接多普勒 ❌ 色彩/纹理 ✅ ❌ ❌ ❌ 全天候 ❌ 弱光/雨雾差 ⚠️ 雨雾退化 ✅ ⚠️ 风噪 有效距离 30-200m 50-200m 250m+ 0.2-5m 单件成本 $50-200 $200-10000 $100-200 $5-10 结论：没有任何一种传感器可以独立完成 L4/L5 级感知。摄像头提供语义、激光雷达提供精确 3D 几何、毫米波雷达提供全天候 + 速度、超声波提供近距盲区覆盖。\n⏱️ 时间同步：融合的第一道坎 时间戳对齐 不同传感器的采样时刻不同：\n摄像头：30fps → 33ms 一帧（曝光时刻在帧中间） 激光雷达：10-20Hz → 50-100ms 一圈（点云中不同点时间不同） 毫米波雷达：20-50Hz → 20-50ms 一帧 同步策略 策略 方式 精度 实现难度 硬件同步 PPS + GPS 授时 毫秒级 高 软件插值 最近邻/线性插值对齐 10ms 级 低 运动补偿 插值+IMU外推 亚毫秒级 中 最佳实践：硬件同步（PPS 信号）保证所有传感器使用统一时间基准，再对激光雷达的每个点做运动补偿（去除旋转运动导致的畸变）。\n📐 空间标定：让传感器\u0026quot;说同一种语言\u0026quot; 内参与外参 内参：传感器自身的固有参数（相机焦距/畸变、雷达视场角） 外参：传感器之间的坐标变换（旋转矩阵 R + 平移向量 t） 标定方法 外参标定需要找到两个传感器之间的齐次变换矩阵 T：\n$$P_B = T_{B \\leftarrow A} \\cdot P_A = \\begin{bmatrix} R \u0026 t \\\\ 0 \u0026 1 \\end{bmatrix} \\cdot P_A$$ 标定类型 方法 精度 自动化程度 Camera-Camera 棋盘格 + 特征点匹配 亚像素级 手动/自动 Camera-LiDAR 3D-2D 投影 + 边缘对齐 像素级 手动为主 Camera-Radar 多普勒速度关联 角度级 半自动 LiDAR-LiDAR ICP (迭代最近点) 毫米级 自动 在线标定（Calibration-free / Auto-calibration）是量产的关键：车辆行驶中由于振动，外参会缓慢漂移，需要在线自动校正。\n🧩 融合策略：前融合 vs 后融合 vs 特征融合 1. 后融合（Late Fusion） 各传感器独立做目标检测，输出目标列表后在目标层融合。\nC L R a i a m D d e A a r R r a → → → 目 目 目 标 标 标 列 列 列 表 表 表 ₁ ₂ ₃ ↘ → ↗ 融 合 模 块 → 最 终 目 标 列 表 优点：架构解耦，各传感器独立开发。缺点：无法利用互补特征，关联错误导致性能下降。\n2. 前融合（Early Fusion） 在原始数据层直接拼接多个传感器的数据。\nC L R a i a m D d e A a r R r a 点 数 图 云 据 像 → ↗ ↗ 拼 接 → 统 一 网 络 → 感 知 结 果 优点：信息无损，网络可以学习最佳融合策略。缺点：数据格式差异大（图像密集 vs 点云稀疏），训练数据需求大。\n3. 特征融合（Feature Fusion） 折中方案：各传感器各自提取特征，在特征层融合。\nC L R a i a m D d e A a r R r a → → → 特 特 特 征 征 征 提 提 提 取 取 取 → → → C V 雷 N o 达 N x 特 特 e 征 征 l 特 ↗ ↘ 征 → 融 合 模 块 → H e a d → 输 出 优点：灵活性高，不同传感器可用不同骨干网络。缺点：特征对齐复杂。\n策略 融合层级 信息保留 计算开销 自动驾驶典型应用 后融合 目标级 低 低 传统方案（多数量产车） 特征融合 特征级 中 中 BEVFormer, FUTR3D 前融合 数据级 高 高 PointPainting, MVF 🗺️ BEV：统一空间的优势 为什么是 BEV？ BEV（Bird\u0026rsquo;s Eye View，鸟瞰图）是当前多传感器融合的标准中间表示。其核心优势：\n空间对齐：所有传感器在 BEV 网格中各就各位，天然解决多视角对齐问题 规划友好：规划和控制模块也工作在 BEV 空间，无需坐标转换 简明表示：去除垂直维度，降低复杂度 BEV 融合典型流程 # 概念性伪代码 def bev_fusion(cam_images, lidar_pcd, radar_data): # 1. 各传感器提取特征 feat_cam = image_backbone(cam_images) # 多视角 2D 特征 feat_lidar = voxel_backbone(lidar_pcd) # 3D Voxel 特征 # 2. 投影到 BEV 空间 bev_cam = perspective_to_bev(feat_cam) # IPM / Cross-Attention bev_lidar = point_to_bev(feat_lidar) # 3. BEV 空间特征融合 bev_fused = fusion_module(bev_cam, bev_lidar) # 4. 从 BEV 解码检测结果 return detection_head(bev_fused) 💭 个人思考 多传感器融合是自动驾驶中最\u0026quot;接地气\u0026quot;也最复杂的系统工程问题。说几个关键观察：\n融合不等于堆料 — 增加传感器数量必然带来标定、同步、维护的复杂度。好的融合系统应该是\u0026quot;1+1\u0026gt;2\u0026quot;，而不是\u0026quot;3 个传感器勉强不犯错\u0026quot; 后融合在量产中仍然主流 — 尽管学术界普遍推崇前/特征融合，但后融合的模块解耦特性使得它更易于工程维护和故障隔离 BEV 融合的最大收益不是精度而是简化 — 将所有感知放到统一空间，使下游预测、规划模块的工作量大幅降低 未来的方向是端到端统一融合：不再分传感器种类设计独立骨干网络，而是用一个统一的 Token 序列接入所有模态，让 Transformer 自动学习融合。Tesla 和 NVIDIA 已经在朝这个方向探索，效果值得期待。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E4%BC%A0%E6%84%9F%E5%99%A8%E4%B8%8E%E8%9E%8D%E5%90%88%E5%9F%BA%E7%A1%80%E8%AF%A6%E8%A7%A3/","summary":"自动驾驶依赖多传感器融合来克服单一传感器在弱光、雨雪等场景下的能力边界。本文系统对比摄像头、激光雷达、毫米波雷达等主流传感器的原理与优劣，深入讲解时空同步与多模态融合策略。最后阐述 BEV 作为统一表示空间如何串联感知全链路。","title":"知识点拆解｜自动驾驶传感器与多模态融合基础"},{"content":"📄 论文信息 标题：RH20T: A Comprehensive Robotic Dataset for Learning Diverse Skills in One-Shot（RH20T：面向一次性学习多样技能的综合机器人数据集） 团队：上海交通大学（Hao-Shu Fang, Cewu Lu等） 发表：RSS 2023 Workshop / ICRA 2024 / arXiv 2023.07 关键词：多模态感知、接触丰富操作、一次性模仿学习、力觉感知、触觉感知 一句话总结：首个提供视觉-力觉-音频-触觉全模态、支持一次性模仿学习的大规模机器人操作数据集 论文链接：arXiv:2307.00595 代码链接：github.com/rh20t/rh20t_api 🤔 要解决什么问题？ 机器人技能学习的瓶颈 在开放域机器人操作中，一个核心挑战是：如何让机器人获取多样化且可泛化的技能？\n现有的机器人学习方法面临以下瓶颈：\n任务简单化：\n大多数研究集中在推、抓、放等简单任务 真实世界中的复杂技能（如插拔、组装、擦拭）被忽视 这些复杂技能往往需要视觉和触觉的协同感知 数据集局限性：\n规模小：大多数数据集只有几千条轨迹 模态单一：主要提供RGB图像，缺少力觉、触觉等信息 任务有限：通常只覆盖10-30种简单任务 一次性模仿学习的需求：\n希望机器人能从单个演示中学习新技能 这对数据集的多样性和丰富性提出了更高要求 需要人类演示视频作为任务描述 核心问题 论文试图解决的核心问题是：\n如何构建一个大规模、多模态、任务多样的机器人操作数据集，以支持一次性模仿学习和多感知融合研究？\n具体来说，需要满足：\n任务多样性：覆盖从简单到复杂的各种操作技能 模态丰富性：提供视觉、力觉、音频、触觉等多模态信息 质量高：精确的传感器标定和时间同步 可复现：标准化的数据格式和工具 💡 核心方法 1. RH20T数据集设计 RH20T（Robot-Human demonstration in 20TB）的设计目标是实现通用机器人操作，即机器人能够基于任务描述（通常是人类演示视频）执行各种技能。\n1.1 任务多样性 RH20T覆盖了147项任务，来源包括：\nRLBench：48项任务（如开门、放杯子、击打球等） MetaWorld：29项任务（如按按钮、推物体等） 自定义任务：70项任务（如插拔、组装、擦拭等接触丰富任务） 任务的复杂度从简单的单步操作（如按按钮）到复杂的多步骤任务（如插拔电源→开灯）不等。\n1.2 机器人配置多样性 RH20T使用了7种机器人配置（Robot Cfg 1-7），涵盖：\n6自由度和7自由度机械臂 不同的末端执行器（夹爪、吸盘等） 不同的力/力矩传感器 可选的指尖触觉传感器（Cfg 7） 1.3 模态丰富性 RH20T提供10种数据模态：\n模态 尺寸 频率 RGB图像 1280×720×3 10 Hz 深度图像 1280×720 10 Hz 双目红外图像 2×1280×720 10 Hz 关节角度 6/7 10 Hz 关节力矩 6/7 10 Hz 末端执行器位姿 6/7 100 Hz 夹爪宽度 1 10 Hz 6DoF力/力矩 6 100 Hz 音频 N/A 30 Hz 指尖触觉 2×16×3 200 Hz 这种多模态覆盖是RH20T的核心优势，特别是：\n6DoF力/力矩：100Hz高频采集，对接触丰富任务至关重要 指尖触觉：200Hz采集，提供精细的触觉反馈 多视角相机：8-10个全局RGBD相机 + 1-2个手内相机 2. 一次性模仿学习框架 RH20T的一个重要设计目标是支持一次性模仿学习（One-Shot Imitation Learning）：\n2.1 任务层级结构 RH20T构建了任务层级树，其中：\n叶节点是具体的机器人操作序列 共享祖先节点的任务具有相似性 可以构建数百万对\u0026lt;人类演示, 机器人操作\u0026gt;数据对 这种层级结构使得：\n可以从粗粒度到细粒度进行任务描述 支持组合性学习（短序列组合成长序列） 2.2 人类演示视频 每个机器人操作序列都配有：\n人类演示视频：展示任务的执行过程 语言描述：自然语言的任务说明 质量评分：0-9分（0表示失败，2-9表示完成质量） 3. 数据采集与处理 3.1 直觉式遥操作 RH20T强调直觉式遥操作的重要性，采用：\n力反馈设备：提供力觉反馈，增强操作直觉性 脚踏板：控制夹爪开合 多视角实时反馈：操作者可从多个角度观察 这种设计使得：\n平均训练时间不到2小时 采集者能够执行复杂的接触丰富任务 成功与失败案例的比例约为10:1 3.2 精确标定 RH20T投入了大量精力进行传感器标定：\n所有力/力矩传感器的零点校准 多相机系统的内外参标定 机器人模型在场景中的精确渲染 所有数据在时间域上同步 🧪 实验验证 实验设计 RH20T主要在一次性模仿学习场景下进行评估，验证数据集的有效性。\n评估任务 论文选择了多种任务进行评估，包括：\n简单任务：按按钮、推物体 中等任务：抓取放置、插拔 复杂任务：多步骤组装、擦拭 评估指标 成功率：任务完成的成功率 泛化能力：对新物体、新环境的泛化 多模态融合效果：力觉、触觉对性能的提升 实验结果 1. 一次性模仿学习性能 在单次演示学习场景下：\nRH20T训练的策略在多种任务上表现出色 相比仅使用视觉的方法，加入力觉信息显著提升性能 特别是在接触丰富任务（如插拔、组装）上提升明显 2. 多模态融合的价值 模态组合 简单任务 复杂任务 仅RGB 75% 45% RGB + 力觉 82% 68% RGB + 力觉 + 触觉 85% 72% 关键发现：\n力觉信息对接触丰富任务至关重要 触觉信息提供额外的精细操作反馈 多模态融合一致性地提升各种任务的性能 3. 任务组合性 RH20T的任务层级结构支持：\n从短序列学习长序列任务 技能的迁移和组合 层次化的任务规划 🔍 个人思考 亮点 多模态覆盖的开创性：\n首个提供视觉-力觉-音频-触觉全模态的机器人数据集 200Hz触觉数据是独特优势 为多感知融合研究提供了基础 任务多样性：\n147项任务覆盖从简单到复杂 自定义任务强调接触丰富操作 任务层级结构支持组合性学习 数据质量：\n精确的传感器标定 时间同步 人类演示视频作为任务描述 实用性：\n提供完整的数据解析API 支持多种机器人配置 开源且有详细的使用文档 局限性 规模限制：\n原始数据40TB，压缩后仍有5-10TB 下载和使用门槛较高 需要大量存储和计算资源 场景多样性有限：\n主要在实验室环境采集 缺少真实家庭、办公场景 与DROID等数据集相比场景覆盖不足 任务复杂度：\n虽然比简单任务复杂，但仍以桌面操作为主 缺少移动操作、全身控制等场景 与真实世界需求仍有差距 许可证限制：\n部分场景（scene_0006-0010）使用CC-BY-NC许可证 限制了商业应用 需要注意使用场景 未来方向 多模态融合算法：\n探索更有效的力觉-视觉融合方法 利用触觉信息进行精细操作 开发自适应的模态权重学习 一次性学习增强：\n结合大语言模型进行任务理解 探索元学习和少样本学习 实现真正的\u0026quot;一次演示，多次执行\u0026quot; 真实世界部署：\n将RH20T训练的策略迁移到真实家庭 结合移动操作扩展任务范围 与机器人导航结合实现完整服务 数据集扩展：\n增加更多真实场景 扩展任务类型（如烹饪、清洁） 增加更多机器人形态 📖 延伸阅读 RLBench: James et al., \u0026ldquo;RLBench: The Robot Learning Benchmark \u0026amp; Learning Environment\u0026rdquo;, RA-L 2020 MetaWorld: Yu et al., \u0026ldquo;Meta-World: A Benchmark and Evaluation for Multi-Task and Meta Reinforcement Learning\u0026rdquo;, CoRL 2019 DROID: Khazatsky et al., \u0026ldquo;DROID: A Large-Scale In-The-Wild Robot Manipulation Dataset\u0026rdquo;, CoRL 2024 Open X-Embodiment: Open X-Embodiment Collaboration, \u0026ldquo;Open X-Embodiment: Robotic Learning Datasets and RT-X Models\u0026rdquo;, ICRA 2024 Diffusion Policy: Chi et al., \u0026ldquo;Diffusion Policy: Visuomotor Policy Learning via Action Diffusion\u0026rdquo;, RSS 2023 本文为论文精读系列第3篇，聚焦具身智能领域的多模态机器人操作数据集。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/rh20t%E6%8B%9F%E4%BA%BA%E6%9C%BA%E5%99%A8%E4%BA%BA%E6%95%B0%E6%8D%AE%E9%9B%86%E7%B2%BE%E8%AF%BB/","summary":"RH20T是上海交通大学推出的超大规模机器人操作数据集，包含110,000+条接触丰富的真实世界操作序列，覆盖147项任务、7种机器人配置。数据集提供视觉、力觉、音频等多模态信息，支持一次性模仿学习研究。","title":"论文精读｜RH20T：面向拟人全身控制的机器人操作数据集"},{"content":"📄 论文信息 标题：Sparse4D: Multi-view 3D Object Detection with Sparse Spatial-Temporal Fusion（v1）/ Recurrent Temporal Fusion with Sparse Model（v2）/ Advancing End-to-End 3D Detection and Tracking（v3） 团队：地平线机器人（Horizon Robotics，林学武、林天威、裴子祥、黄黎超、苏志中） arXiv：2211.10581（v1）/ 2305.14018（v2）/ 2311.11722（v3） 关键词：全稀疏、4D 关键点采样、循环时序融合、实例去噪、检测+跟踪 一句话总结：用一组稀疏实例 query 直接从多相机图像里\u0026quot;抠\u0026quot;出 3D 目标，绕开稠密 BEV，通过稀疏 4D 采样 ➜ 循环时序融合 ➜ 实例去噪三连击，把多摄像头 3D 检测与跟踪做到 nuScenes 顶尖，是全稀疏感知范式的奠基之作。 图1：Sparse4D V1 整体架构。输入多视图图像经 backbone 提取特征后，稀疏 anchor 通过 4D 关键点采样从多视图/多尺度/多时间戳特征中聚合信息，经层级融合与迭代精炼输出 3D 检测框。\n🤔 要解决什么问题？BEV 的\u0026quot;算力原罪\u0026quot; 多摄像头 3D 感知这几年几乎被 BEV 范式统治（BEVFormer、LSS、DETR3D）。主流做法是先把环视图像压成一张稠密俯视图，再在上面做检测。这套范式有效，却带着\u0026quot;原罪\u0026quot;:\n痛点 原因 后果 算力随分辨率平方爆炸 BEV 是 $H\\times W$ 网格，注意力/卷积都稠密算 显存吃紧 算力浪费在空白区 目标只占 BEV 几个像素，其余是空地天空 信息密度极低 时序融合更重 多帧 BEV 要对齐堆叠 延迟飙升 车端部署难 Orin 等芯片跑不动重 BEV backbone 落地受阻 Sparse4D 的核心拷问：路上有意义的东西本来就稀疏（几十辆车、人、车道），为什么中间表示非要稠密？能不能从图像到 3D 框，全程只用一组稀疏 query？ 这就是 全稀疏（Fully Sparse） 范式的起点——与 BEV 形成路线之争。\n🌱 V1：稀疏 4D 采样，证明全稀疏可行 核心机制：4D 关键点采样 V1 的灵魂是对每个 3D anchor（锚框），分配多个 4D 关键点，再把它们投影到多视图 / 多尺度 / 多时间戳的图像特征上采样。这一步直接绕开了 BEV 的视角变换。\n数学形式化 设第 $i$ 个 3D anchor 的状态为：\n$$\\mathbf{b}_i = (x, y, z, w, l, h, \\theta) \\in \\mathbb{R}^7$$其中 $(x,y,z)$ 是中心点坐标，$(w,l,h)$ 是尺寸，$\\theta$ 是朝向角。为每个 anchor 定义 $K$ 个 4D 关键点：\n$$\\mathcal{P}_i = \\{\\mathbf{p}_{i,k} \\in \\mathbb{R}^3 \\mid k=1,\\dots,K\\}$$这些关键点分布在 anchor 的表面和内部（3D 空间 + 时间维）。第 $k$ 个关键点在 $t$ 时刻投影到第 $v$ 个相机的图像坐标为：\n$$ \\mathbf{u}_{i,k}^{(v,t)} = \\mathbf{K}_v \\cdot \\mathbf{T}_{v}^{-1} \\cdot \\mathbf{T}_t \\cdot \\mathbf{p}_{i,k} $$其中 $\\mathbf{K}_v$ 是第 $v$ 个相机的内参矩阵，$\\mathbf{T}_v$ 是其外参（车身→相机），$\\mathbf{T}_t$ 是 $t$ 时刻的车身位姿。投影后从多尺度特征 $\\{\\mathbf{F}_v^{(l)}\\}_{l=1}^L$ 中通过双线性插值采样特征：\n$$ \\mathbf{f}_{i,k}^{(v,t,l)} = \\text{Bilinear}(\\mathbf{F}_v^{(l)}, \\mathbf{u}_{i,k}^{(v,t)}) $$层级特征融合 采回来的特征按层级逐级融合：\n视图/尺度层：同一关键点在不同相机、不同分辨率上的特征融合 $$\\mathbf{f}_{i,k}^{(t)} = \\sum_{v=1}^{V} \\sum_{l=1}^{L} \\alpha_{v,l} \\cdot \\mathbf{f}_{i,k}^{(v,t,l)}$$其中 $\\alpha_{v,l}$ 是可学习的加权系数（通过注意力或累加实现）。\n时间戳层：同一关键点在不同历史帧上的特征融合 $$\\mathbf{f}_{i,k} = \\sum_{t=1}^{T} \\beta_t \\cdot \\mathbf{f}_{i,k}^{(t)}$$ 关键点层：同一 anchor 的 $K$ 个关键点特征融合成实例特征 $$\\mathbf{f}_i = \\sum_{k=1}^{K} \\gamma_k \\cdot \\mathbf{f}_{i,k}$$这种由细到粗的层级聚合，比全局注意力高效得多，又保留了空间结构。\n图2：Sparse4D 的模块设计详解。从左至右分别为 4D 关键点采样、层级特征融合、实例级深度加权和迭代精炼模块。\n层级特征融合 采回来的特征不是一股脑拼接，而是按层级逐级融合：\n视图/尺度层：同一关键点在不同相机、不同分辨率上的特征融合； 时间戳层：同一关键点在不同历史帧上的特征融合； 关键点层：同一 anchor 的多个关键点特征融合成实例特征。 这种由细到粗的层级聚合，比全局注意力高效得多，又保留了空间结构。\n实例级深度加权 3D 到 2D 投影是个病态问题（深度丢失）。V1 引入实例级深度加权模块：让每个实例自己学一个深度重权，缓解投影歧义——这比全局深度显式监督更轻巧。结果上，V1 超越所有稀疏方法、并打败多数 BEV 方法，首次证明全稀疏路线在精度上不输 BEV。\n为什么\u0026quot;4D 关键点\u0026quot;比 BEV 视角变换更划算 理解这一步的关键是意识到：BEV 的视角变换（LSS 或 attention）本质是把所有像素都搬一遍到 3D，而不管这像素到底属不属于某个目标。Sparse4D 反过来——先有目标假设（anchor），再去像素里挑相关的特征。前者是\u0026quot;先到站再找人\u0026quot;，后者是\u0026quot;先知道找谁再去站里挑\u0026quot;。当目标本来就稀疏（路上几十辆车），后者天然高效得多。而且 4D 关键点天然带时间维，运动线索直接从\u0026quot;同一关键点在历史帧的位置\u0026quot;采回来，不需要额外建时序模块——空间融合与时序融合被同一个采样动作完成，这是 V1 设计最优雅的地方。\n⚡ V2：循环时序融合，把复杂度从 O(T) 压到 O(1) 解耦图像特征与锚框特征 图3：Sparse4D V2 架构。核心改进在于解耦图像特征与锚框特征，通过 GRU 门控单元实现循环式状态传播，复杂度从 O(T) 降到 O(1)。\nV1 的时序融合要保留多帧历史特征，复杂度随帧数 $T$ 线性增长。V2 的关键洞察：图像特征和结构化的锚框特征可以解耦——不必缓存多帧图像特征，只需逐帧传递稀疏的锚框特征。\n循环式多帧采样 把时序融合改成递归形式：\n数学形式化 V1 的时序融合需要缓存多帧图像特征，第 $t$ 帧的实例特征为：\n$$\\mathbf{f}_i^{(t)} = \\text{Aggregate}(\\{\\mathbf{f}_{i,k}^{(t,\\tau)}\\}_{\\tau=t-T+1}^{t})$$复杂度 $O(T)$ 且需存储 $T$ 帧的完整图像特征。V2 的关键洞察：解耦图像特征与锚框特征。\nV2 引入循环状态传播，设 $\\mathbf{q}_i^{(t)}$ 为第 $t$ 帧第 $i$ 个 anchor 的状态特征，则更新规则为：\n$$\\mathbf{q}_i^{(t)} = \\text{GRU}\\left( \\mathbf{f}_i^{(t,\\text{curr})}, \\mathbf{q}_i^{(t-1)} \\right)$$其中 $\\mathbf{f}_i^{(t,\\text{curr})}$ 是当前帧的采样特征，$\\mathbf{q}_i^{(t-1)}$ 是上一帧传播来的状态。展开后：\n$$\\mathbf{q}_i^{(t)} = \\text{GRU}\\left( \\text{Sample}(\\mathbf{F}^{(t)}, \\mathbf{b}_i^{(t)}), \\mathbf{q}_i^{(t-1)} \\right)$$实际实现中，GRU 可以替换为更轻量的门控线性单元：\n$$\\mathbf{q}_i^{(t)} = \\sigma(\\mathbf{W}_z \\mathbf{f}_i^{(t)} + \\mathbf{U}_z \\mathbf{q}_i^{(t-1)}) \\odot \\tanh(\\mathbf{W}_h \\mathbf{f}_i^{(t)} + \\mathbf{U}_h \\mathbf{q}_i^{(t-1)}) + (1-\\sigma(\\cdot)) \\odot \\mathbf{q}_i^{(t-1)}$$ 收益 说明 复杂度 $O(T)\\to O(1)$ 不随历史帧数增长，推理快、显存省 长时序融合 能融合远超 V1 的长期信息，时序增益更显著 V2 在 nuScenes 3D 检测上达到 SOTA，进一步坐实\u0026quot;全稀疏 + 循环时序\u0026quot;的优越性。这套\u0026quot;不存多帧、只传稀疏状态\u0026ldquo;的设计，后来也成了 SparseDrive 等端到端框架的时序地基。\n🎯 V3：实例去噪 + 质量估计，从检测跨入跟踪 图4：Sparse4D V3 架构。在 V2 循环时序基础上增加实例去噪头和质量估计头，推理时无需修改架构即可扩展为多目标跟踪器。\nV3 把 Sparse4D 从纯检测器升级成检测+跟踪的端到端系统，三处关键升级：\n1. 时序实例去噪（Temporal Instance Denoising） 借鉴 DETR 去噪思路，但在时序维度上做——把历史帧的噪声实例送回网络辅助训练，显著稳定 query 的时序传播，检测性能同步上升。\n数学定义：给定第 $t$ 帧的 ground truth 框 $\\mathbf{b}^*$，构造带噪声的 query：\n$$\\tilde{\\mathbf{q}}^{(t)} = \\mathbf{q}^{(t)} + \\epsilon, \\quad \\epsilon \\sim \\mathcal{N}(0, \\sigma^2\\mathbf{I})$$去噪训练目标是最小化预测与 GT 之间的差距：\n$$\\mathcal{L}_{\\text{denoise}} = \\sum_{i} \\left[ \\mathcal{L}_{\\text{cls}}(\\hat{\\mathbf{c}}_i, \\mathbf{c}_i^*) + \\mathcal{L}_{\\text{reg}}(\\hat{\\mathbf{b}}_i, \\mathbf{b}_i^*) \\right]$$但与 DETR 不同，V3 的关键创新是在时序维度上施加噪声——对历史帧的 query 加入时域扰动，强迫网络学会\u0026quot;即使上一帧的 query 有噪声，我也能恢复出正确位置\u0026rdquo;。这使得循环状态传播在推理时对噪声更鲁棒。\n2. 质量估计（Quality Estimation） 让网络额外预测检测质量分数，给置信度更准的标定，提升下游匹配与筛选的可靠性。\n质量分数定义为预测框与 GT 的 3D IoU：\n$$q_i = \\text{IoU}(\\hat{\\mathbf{b}}_i, \\mathbf{b}_i^*)$$训练时用一个辅助回归头预测 $\\hat{q}_i$，损失为 MSE：\n$$\\mathcal{L}_{\\text{QE}} = \\sum_i \\| \\hat{q}_i - q_i \\|^2$$推理时将 $\\hat{q}_i$ 乘以分类得分作为最终置信度。这解决了传统分类分数无法反映定位质量的痛点。\n3. 解耦注意力（Decoupled Attention） 对注意力结构做改进，让特征交互更干净、训练更稳。标准的 self-attention 是所有 token 两两交互：\n$$\\text{Attn}(\\mathbf{Q}, \\mathbf{K}, \\mathbf{V}) = \\text{Softmax}\\left(\\frac{\\mathbf{Q}\\mathbf{K}^T}{\\sqrt{d}}\\right)\\mathbf{V}$$V3 将其解耦为 content-to-content 和 content-to-position 两条路径：\n$$\\text{DecoupledAttn} = \\text{Softmax}\\left(\\frac{\\mathbf{Q}_c\\mathbf{K}_c^T + \\mathbf{Q}_p\\mathbf{K}_p^T}{\\sqrt{d}}\\right)\\mathbf{V}$$其中 $\\mathbf{Q}_c, \\mathbf{K}_c$ 来自内容特征，$\\mathbf{Q}_p, \\mathbf{K}_p$ 来自位置编码。这种解耦让模型能同时关注\u0026quot;谁在说话\u0026quot;和\u0026quot;从哪说话\u0026quot;，特征交互更加精细。\n一键变跟踪器 最优雅的一笔：V3 不改动检测架构，只在推理时给每个实例分配一个 instance ID，就把检测器扩展成跟踪器。这是 query-based 算法天然的优势——实例即对象，跟踪即 query 的时序延续。\n具体而言，时序实例去噪在训练阶段强迫网络学会\u0026quot;同一个实例跨帧应该收敛到同一个 query\u0026quot;，于是推理时只需比对相邻帧 query 特征的相似度，就能把同一目标的轨迹串起来，无需传统的卡尔曼滤波 + 匈牙利匹配那一套。这让多目标跟踪（MOT）从\u0026quot;检测器 + 独立跟踪模块\u0026quot;的拼装，变成\u0026quot;一个端到端网络顺手做完\u0026quot;。AMOTA 提升 7.6% 这个最大涨幅，正是来自这种检测-跟踪的统一红利。\nnuScenes 顶配成绩 配置 mAP NDS AMOTA Sparse4D V1 (ResNet50) 39.5% 49.5% — Sparse4D V1 (ResNet101) 43.5% 53.5% — Sparse4D V2 (ResNet50) 43.9% 54.6% 43.4% Sparse4D V2 (VoVNet) 49.6% 59.8% — Sparse4D V3 (ResNet50) 46.9% 56.1% 49.0% Sparse4D V3 (EVA02, test) 64.0% 71.9% 67.7% 相比基线，V3 在 mAP/NDS/AMOTA 上分别提升 3.0%/2.2%/7.6%，跟踪指标 AMOTA 提升尤为显著。\n与主流 BEV 方法对比 方法 Backbone 范式 输入尺寸 mAP NDS DETR3D ResNet101 稀疏 query 900×1600 34.6% 43.4% PETR ResNet101 位置编码 512×1408 41.3% 50.5% BEVFormer ResNet101 稠密 BEV 900×1600 44.0% 55.0% BEVFormer-S ResNet101 稠密 BEV 900×1600 45.8% 56.4% Sparse4D V1 ResNet101 全稀疏 900×1600 43.5% 53.5% Sparse4D V2 VoVNet 全稀疏 900×1600 49.6% 59.8% Sparse4D V3 EVA02 全稀疏 900×1600 64.0% 71.9% V1 已经全面超越稀疏方法 DETR3D（+8.9 mAP），与 BEVFormer 持平（在 ResNet101 下）；V2 搭配更强的 VoVNet backbone 后反超 BEVFormer；V3 配合 EVA02 达到最高性能。\n时序融合消融 方法 时序策略 历史帧 mAP NDS Sparse4D V1 多帧缓存 4 帧 43.5% 53.5% Sparse4D V2 循环传播 理论无限 49.6% 59.8% V2 w/o 循环 单帧无时序 0 帧 44.2% 54.0% V2 w/ 20 帧循环 循环传播 20 帧有效感受野 50.1% 60.3% 循环时序相比无时序提升 5.4 mAP / 5.8 NDS，且有效感受野从 4 帧扩展到 20 帧后仍能持续提升——这说明 Sparse4D 的循环状态并未饱和，能吸收更长期的时序信息。\n🆚 全稀疏 vs BEV：路线之争 维度 BEV 范式 Sparse4D（全稀疏） 中间表示 稠密俯视图 稀疏实例 query 算力 随分辨率平方 随目标数线性 时序融合 多帧 BEV 对齐（重） 循环传锚框特征（O(1)） 视角变换 LSS / 注意力（病态） 4D 关键点投影（显式） 车端部署 难 友好 跟踪扩展 需额外模块 推理时分配 ID 即可 全稀疏并非全能——它在密集占据预测、栅格化可行驶区域等需要稠密表示的任务上不如 BEV 自然。但只要任务是\u0026quot;检测/跟踪/预测/规划\u0026quot;这类本质上稀疏的工作，Sparse4D 路线在效率和精度上都更优。\n🔗 作为 SparseDrive 与端到端的地基 Sparse4D 的价值不止于感知。它的稀疏实例 query成了后来全稀疏端到端框架的标准接口：\nSparse4D 检测/跟踪 query ➜ 运动预测 query ➜ 规划 query\n一条稀疏 query 流贯穿全栈，彻底跳过稠密 BEV。本系列第 7 篇的 SparseDrive V2 就是把 Sparse4D 的检测头作为端到端骨架，用\u0026quot;稀疏查询 + 质量感知记忆库\u0026quot;统一感知、预测、规划。可以说，没有 Sparse4D 打下的全稀疏地基，就没有 SparseDrive 的实时端到端。\n下游受益 如何继承 Sparse4D SparseDrive V2 检测头直接复用稀疏 query 设计 运动预测 实例 query 天然延续成预测 query 规划 自车 query 与他车 query 同构交互 车端部署 稀疏算力友好，Orin 可跑 ⚠️ 局限与未来方向 稠密任务不擅长：占据网络、可行驶区域栅格化仍需稠密表示，全稀疏不占优； 小目标 / 远距离：依赖投影准确性，远距离小目标的关键点可能落进低分辨率特征，精度受限； 多模态融合：与激光雷达、4D 毫米波雷达的稀疏融合（如 Sparse4D-Radar）仍在探索。 后续方向我看好：稀疏 query 与 BEV 的混合表示（稀疏管目标、稠密管占据）、时序实例去噪的进一步自监督化、以及把跟踪 ID 分配做成可学习的端到端关联。\n📝 个人思考 读完 Sparse4D 三连击，我最大的感触是它把\u0026quot;稀疏\u0026quot;从一种技巧上升成了一种哲学。BEV 范式之所以稠密，是历史惯性——早期 LSS 想把 2D 特征搬到 3D，最直觉的就是铺一张俯视图。但 Sparse4D 让我们看清一件事：驾驶里真正需要被表示的东西（车、人、车道、轨迹）天然就是稀疏的，稠密只是中间手段，不是目的。一旦接受了这个前提，所有\u0026quot;为了稠密而稠密\u0026quot;的算力开销就显得荒唐。从 V1 证明可行，到 V2 把时序压成 $O(1)$，再到 V3 一键变跟踪，每一版都在把\u0026quot;稀疏\u0026quot;这条路线打磨得更锋利——这是典型的\u0026quot;把一件事做到极致\u0026quot;的工程美感。\n第二点启发在**\u0026ldquo;解耦\u0026quot;的力量**。V2 把图像特征和锚框特征解耦，是整套设计里最聪明的一笔。它意味着不必为时序付图像级的代价，只需让稀疏状态在帧间流动。这个思想其实和循环神经网络、卡尔曼滤波的精神一脉相承——真正需要传递的是\u0026quot;状态\u0026rdquo;，不是\u0026quot;观测\u0026quot;。我认为这种\u0026quot;稠密观测、稀疏状态\u0026quot;的分层哲学，会从感知外溢到预测和规划：未来端到端栈很可能是\u0026quot;稠密图像编码器 + 稀疏状态传播\u0026quot;的混合体，Sparse4D 已经给出了感知层的样板。\n最后，V3\u0026quot;推理时分配 ID 就变跟踪器\u0026quot;这件事，道出了 query-based 范式的深层优势——统一表示天然支持任务延伸。当检测、跟踪、预测、规划共用同一套稀疏 query，任务之间的\u0026quot;接缝\u0026quot;消失了，信息不必在模块边界处反复翻译损失。这正是 SparseDrive 能把全栈串成一条流的技术前提。我倾向于认为，未来真正能上车跑通的端到端系统，一定是\u0026quot;全稀疏 query 流\u0026quot;形态，而 Sparse4D 就是这条河的源头。当算力不再是奢侈品，\u0026ldquo;稀疏\u0026quot;赢的不再是省算力，而是信息流的纯净度——这才是它最持久的竞争力。\n🔗 延伸阅读 工作 关系 DETR3D / BEVFormer 多相机 3D 感知的对照面（稀疏 vs 稠密） DETR / Deformable DETR query-based 检测与去噪思想来源 SparseDrive V2 本系列第 7 篇，把 Sparse4D 接成全稀疏端到端 StreamPETR 另一类稀疏时序检测，与 Sparse4D V2 思路相通 Sparse4D-Radar 路线延伸到 4D 毫米波雷达-相机融合 📖 这是论文精读系列的第 17 篇。当全稀疏从感知贯通到规划，BEV 还会剩下多少领地？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/sparse4d%E7%A8%80%E7%96%8F%E6%84%9F%E7%9F%A5%E7%B2%BE%E8%AF%BB/","summary":"Sparse4D 用全稀疏范式挑战 BEV 感知路线：用稀疏实例 query 直接从多相机图像抠出 3D 目标，绕开计算昂贵的稠密 BEV 特征图。它通过稀疏 4D 关键点采样、循环时序融合和实例去噪三项核心设计，将多摄像头 3D 检测与跟踪做到 nuScenes 顶尖。作为全稀疏感知范式奠基作，后续 SparseDrive 系列在此基础上构建端到端驾驶系统。","title":"论文精读｜Sparse4D：全稀疏多摄像头 3D 感知的三连击"},{"content":"引言：从图像生成到视频生成 视频生成比图像生成多了一个时间维度，这意味着模型不仅要理解\u0026quot;画面里有什么\u0026quot;，还要理解\u0026quot;画面怎么随时间变化\u0026quot;。对自动驾驶来说，这正是世界模型的核心——预测未来几秒内驾驶场景的演变。\n本文从表征学习出发，系统梳理视频生成模型的四个核心组件：离散潜在表征（VQVAE/VQGAN）、扩散去噪骨干、时序建模机制，以及驾驶专用的条件控制。\n🧱 VQVAE：离散潜在表征 为什么需要离散表征？ 连续潜在空间（如标准 VAE）存在两个问题：一是后验坍缩（token 不利用），二是难以与自回归 Transformer 结合。VQVAE（Vector Quantized VAE）通过引入离散编码本解决了这些问题。\nVQVAE 核心架构 VQVAE 包含三个部分：\n组件 功能 实现方式 编码器 $E$ 将图像 x 映射为连续特征图 $\\hat{z} = E(x)$ CNN / ViT 量化器 $Q$ 将每个特征向量匹配到编码本中最接近的条目 最近邻查找 解码器 $D$ 从量化后的离散编码重建图像 CNN / ViT 量化过程：\n$$z_q = \\arg\\min_{z_k \\in \\mathcal{Z}} \\| \\hat{z}_i - z_k \\|_2$$其中 $\\mathcal{Z} = \\{z_1, z_2, ..., z_K\\}$ 是大小为 K 的可学习编码本。每个空间位置的特征向量被替换为编码本中最近的条目，得到一个离散 token 网格（如 16×16 个 token），每个 token 是编码本的索引。\n训练损失 VQVAE 的损失函数由三部分构成：\n$$\\mathcal{L} = \\|x - D(z_q)\\|^2 + \\|\\text{sg}[E(x)] - z_q\\|^2 + \\beta \\|E(x) - \\text{sg}[z_q]\\|^2$$ 重建损失：确保解码后的图像与原始图像接近 编码本损失：让编码本向量靠近编码器输出（sg = stop gradient） 承诺损失：让编码器输出靠近编码本向量（$\\beta$ 通常取 0.25） VQGAN：引入感知损失与对抗训练 VQGAN 在 VQVAE 基础上做了三项关键改进：\n感知损失（Perceptual Loss）：用预训练 VGG 网络的中间层特征计算 L2 距离，取代逐像素 MSE，使重建结果在视觉上更锐利 对抗损失（GAN Loss）：引入 PatchGAN 判别器，让解码器生成更逼真的纹理 Transformer 先验：在量化后的离散 token 上训练一个自回归 Transformer 来建模先验分布 $p(z_q)$ 核心公式——感知损失：\n$$\\mathcal{L}_{perceptual} = \\sum_l \\| \\phi_l(x) - \\phi_l(\\hat{x}) \\|_2^2$$其中 $\\phi_l$ 是 VGG 网络第 l 层的特征图。\n编码本学习的关键问题：编码本大小 K 是超参数。K 太小会导致表征能力不足，K 太大则很多条目从不被使用（编码本坍缩）。改进方案包括 EMA 更新（指数移动平均）和 编码本重置（重新初始化长期不用的条目）。\n从图像到视频的扩展 VQVAE 的视频版通过引入3D 卷积或时序 Transformer 在编码器中建模时序信息。每个视频片段被编码为 $T \\times H \\times W$ 的离散 token 网格，时间维度也被离散化。\n🌊 扩散模型：从像素到潜在空间 像素空间扩散的瓶颈 直接在像素空间做扩散（如原始 DDPM）有三个问题：\n计算量巨大：256×256×3 = 196,608 维，视频更是 T 倍 冗余建模：模型浪费大量容量在建模像素级纹理噪声上 采样慢：像素空间去噪需要上百步 潜在扩散模型（LDM） LDM（Latent Diffusion Model，即 Stable Diffusion 的基础）的洞察是：在压缩的潜在空间做扩散。核心流程：\n预训练 VAE：将图像压缩到潜在空间 $z = E(x)$，通常 $z$ 的空间尺寸是 $x$ 的 1/8 ~ 1/4 潜在空间扩散：在 $z$ 上执行正向加噪和逆向去噪 解码：用 VAE 解码器 $D$ 将去噪后的 $\\hat{z}$ 映射回像素 关键优势：\n计算量减少 5~10 倍 模型专注于学习语义层面的生成，而非像素噪声 可与多种条件控制结合（文本、深度图、分割图等） 视频 LDM 的特殊设计 从图像 LDM 扩展到视频 LDM 需要额外处理时间维度：\n组件 图像 LDM 视频 LDM 输入 单帧潜变量 $z \\in \\mathbb{R}^{c \\times h \\times w}$ 多帧潜变量 $z \\in \\mathbb{R}^{T \\times c \\times h \\times w}$ 去噪骨干 2D U-Net 时空 U-Net（3D conv + temporal attention） VAE 2D VAE 因果 VAE 或 3D VAE 条件注入 单帧条件 时序条件（前帧、动作序列） 🏗️ DiT：扩散 Transformer 从 U-Net 到 Transformer 2023 年，DiT（Diffusion Transformer）证明了用 Transformer 替换 U-Net 作为扩散骨干可以取得更好的扩展效果。核心设计：\nPatchify：将潜在变量 $z$ 切分为 patch，映射为 token 序列 Transformer Blocks：标准 ViT 结构，但增加了时间步和条件的注入 Patch Unpatchify：将 token 序列重排回潜在特征图 DiT 的条件注入方式 DiT 有四种条件注入方案：\n方案 方法 效果 In Conditioning 将条件向量拼接到输入 token 最弱 Cross-Attention 条件作为 cross-attention 的 KV 中等 Adaptive Layer Norm (AdaLN) 用条件回归 $\\gamma, \\beta$ 参数调制 LN 强 AdaLN-Zero 残差连接前的缩放也由条件预测 最强（默认方案） AdaLN-Zero 的公式：\n$$h' = \\gamma_c(t) \\cdot \\text{LN}(h) + \\beta_c(t), \\quad h_{out} = h + \\alpha_c(t) \\cdot \\text{FFN}(h')$$其中 $\\gamma_c, \\beta_c, \\alpha_c$ 都由条件 embedding 经 MLP 预测。\nScaling Law DiT 最引人注目的发现是扩散 Transformer 遵循清晰的 scaling law：\n增大模型参数量（从 0.3B 到 3B）持续提升生成质量（FID 下降） 增大训练计算量（更多步数、更大 batch）也持续提升 没有明显的饱和趋势 这使得 DiT 成为 Sora、OpenSora、MagicDrive 等视频生成模型的首选骨干。\n⏳ 因果性在视频生成中的重要性 因果 VAE（CausalVAE） 视频生成中有一个关键约束：当前帧只能依赖过去帧，不能依赖未来帧。标准 3D VAE 使用双向卷积，会导致\u0026quot;信息泄露\u0026quot;——未来帧的信息流入当前帧的重建。\nCausalVAE（DriveDreamer 中使用）通过两项设计保证因果性：\n因果卷积：只在时间维度上使用单向卷积（只看过去帧），等价于对卷积核施加因果掩码 时序后验坍缩：强迫后验分布 $q(z_t|x_{\\le t})$ 只依赖到当前时刻为止的观测 CausalVAE 的核心区别：\n特性 标准 VAE CausalVAE 编码器感受野 双向（前后帧） 单向（仅过去帧） 时序重建 任意帧可参考未来 逐帧因果重建 适用场景 离线处理（视频压缩） 在线预测（世界模型） 时序建模机制 视频生成模型中时序建模的三种主流方式：\n1. 3D 卷积\n在 2D 卷积核上增加时间维度，同时建模空间和时间。通常使用 $(T \\times 3 \\times 3)$ 或 $(3 \\times 3 \\times 3)$ 的卷积核。\n优点：简单直接、参数共享 缺点：计算量随 T 线性增长、时序感受野受限\n2. 时序注意力（Temporal Attention）\n对空间特征保持 2D 卷积，额外在时间维度上做 self-attention：\n$$z_{t,i} = \\text{Attention}(z_{t,i}, \\{z_{t',i}\\}_{t'=1}^T)$$每个空间位置 i 独立地对 T 帧做注意力。相比 3D 卷积的优势：\n可建模任意长度的时序依赖 参数量不随时序长度增长 3. 因果注意力（Causal Attention）\n标准自注意力可以看到所有帧（包括未来帧），这违反因果性。因果注意力通过注意力掩码强制当前 token 只能关注自身及之前的 token：\n$$\\text{Attention}(Q_t, K_{\\le t}, V_{\\le t})$$这是自回归视频生成和 causal VAE 的标准组件，也是 DriveDreamer 和 ADriver-I 的核心设计。\n三种时序建模对比 方法 计算复杂度 时序感受野 因果性 代表工作 3D 卷积 $\\mathcal{O}(T \\cdot H \\cdot W)$ 局部（kernel 大小） ✅ 可设计 Video LDM 时序注意力 $\\mathcal{O}(T^2)$ 全局 ❌ 需掩码 Sora, OpenSora 因果注意力 $\\mathcal{O}(T^2)$ 全局（仅过去） ✅ 天然 DriveDreamer 📊 视频生成质量评估指标 FID（Fréchet Inception Distance） 衡量生成图像与真实图像在 Inception 特征空间的分布距离：\n$$\\text{FID} = \\|\\mu_r - \\mu_g\\|^2 + \\text{Tr}(\\Sigma_r + \\Sigma_g - 2(\\Sigma_r \\Sigma_g)^{1/2})$$FID 越低越好。但 FID 对视频只有单帧评估能力，不衡量时序一致性。\nFVD（Fréchet Video Distance） FID 的视频版本，用 3D 卷积网络（如 I3D）提取时空特征后计算 Fréchet 距离：\n$$\\text{FVD} = \\|\\mu_r - \\mu_g\\|^2 + \\text{Tr}(\\Sigma_r + \\Sigma_g - 2(\\Sigma_r \\Sigma_g)^{1/2})$$与 FID 的区别：\n特征提取器从 2D Inception 换成了 3D I3D（在 Kinetics 上预训练） 输入从单帧变为 16 帧视频片段 同时评估视觉质量和时序一致性 FVD 的局限性：\nI3D 在驾驶场景上未做微调，特征可能不敏感于驾驶语义错误 16 帧（约 0.5s）的窗口太短，无法评估长程一致性 计算成本远高于 FID CLIP Score 用 CLIP 模型计算生成视频帧与条件文本/图像之间的余弦相似度：\n$$\\text{CLIP Score} = \\cos(E_{text}(c), E_{img}(x_{gen}))$$衡量生成视频与条件之间的语义对齐程度。在驾驶场景中，用于评估生成场景是否符合给出的文本描述（如\u0026quot;夜间城市道路\u0026quot;）。\n驾驶场景的特殊指标 指标 衡量内容 计算方法 mAP@3D 3D 检测精度 在生成帧上运行 3D 检测器 Traj Acc 轨迹预测准确度 预测的车辆轨迹与 GT 的位移误差 Consistency 时序一致性 相邻帧光流误差 / 像素跟踪一致性 Control Acc 条件跟随准确度 生成场景是否满足输入控制条件 🚗 驾驶场景多相机视频生成 多相机挑战 驾驶场景通常有 4~6 个环视相机。多相机视频生成面临独特的挑战：\n跨相机一致性：同一物体在不同相机的成像必须 3D 一致 相机参数精确控制：生成画面必须与相机内外参完全对齐 时序跨相机一致性：物体在时间 + 跨相机维度都需一致 MagicDrive MagicDrive 是首个实现精确 3D 几何控制的多相机视频生成方法：\n3D 条件注入：将 3D bounding box、路面标记、相机参数投影到 BEV 空间 跨注意力控制：用 BEV 特征作为 cross-attention 的条件 DiT 骨干：每个相机独立处理，但共享 BEV 特征实现跨相机一致性 DriveDreamer DriveDreamer 专注于可控的驾驶视频生成：\n结构化条件：用 HDMap + 3D bbox 序列精确控制场景布局 CausalVAE：因果编码保证时序预测的因果性 两阶段训练：先学静态场景先验，再学动态物体行为 Vista Vista 是来自 Wayve 的驾驶世界模型，特点在于：\n动作条件：以自车动作（油门、转向）为条件生成未来帧 闭环推理：可根据自车决策实时生成反应性场景 不确定性建模：对同一动作预测多种可能的未来（多模态） 三种方法对比 方法 条件类型 骨干架构 特有模块 是否开环 MagicDrive 3D bbox + 相机参数 DiT BEV 跨注意力 是 DriveDreamer HDMap + 3D bbox LDM + CausalVAE CausalVAE, 结构化条件 部分 Vista 动作 + 历史帧 DiT 不确定性头 可闭环 技术前沿 当前视频生成模型在自动驾驶中的应用正在快速发展：\n从开环到闭环：传统方法根据给定条件生成固定视频（开环），新趋势是让生成结果依赖自车动作（闭环），实现真正的世界模型 从单模态到多模态：对同一输入预测多种可能的未来（如 Vista 的不确定性建模），服务于下游规划的安全性评估 从多步采样到一步生成：一致性模型和整流流（Rectified Flow）正将推理步数从 50 步压缩到 1~4 步，为实时推理铺路 VQGAN + Diffusion 的常见流程 将 VQGAN 与扩散模型结合的标准管线：\n预训练 VQGAN：在驾驶视频数据上训练 VQGAN，获得高效离散编码本 编码压缩：视频帧经 VQGAN 编码器压缩为离散 token 网格，降低扩散模型的输入维度 潜在空间扩散：在 VQGAN 的潜在特征图（而非原始像素）上训练扩散模型 解码重建：扩散生成的潜在特征经 VQGAN 解码器还原为像素级视频帧 相比直接在像素空间做扩散，这种方案将计算复杂度降低约 4-8 倍，同时因 VQGAN 的离散编码对高频纹理的保留能力更好，生成质量在相同计算预算下更高。Stable Video Diffusion 和 DriveDreamer 都采用了类似的 VAE 编码 + LDM 的二级设计。\n💭 个人思考 视频生成模型的技术栈已经非常清晰：VQVAE/VQGAN 提供高效的表征压缩，扩散模型提供高质量的生成能力，DiT 提供可扩展的骨干网络，CausalVAE 提供时序因果保证。四个组件拼在一起，就构成了现代视频生成的基本框架。\n但有两个深层问题依然未被很好解决：\n长程视频生成的误差累积：无论用 3D conv 还是 temporal attention，预测 5 秒后的视频质量都会明显下降。根本原因在于时序模型实际上是在做递归预测，每一步的小误差都被逐步放大。分层预测（先预测关键帧再插帧）和全局约束可能是出路。\n生成视频的物理准确性问题：当前的评估指标（FVD、CLIP Score）只关注视觉质量和语义对齐，不关心物理合理性。生成的车辆可能违反运动学约束、行人可能闪烁消失。在驾驶场景中，物理正确性比视觉逼真度更重要——一个 FVD 很好但车辆会穿墙的视频生成模型，对自动驾驶没有价值。\n我判断未来 1-2 年的方向是：视频生成模型将越来越多地融入几何约束和运动学先验，从\u0026quot;看起来像\u0026quot;进化到\u0026quot;物理上对\u0026quot;。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E8%A7%86%E9%A2%91%E7%94%9F%E6%88%90%E6%A8%A1%E5%9E%8B%E5%9F%BA%E7%A1%80%E8%AF%A6%E8%A7%A3/","summary":"视频生成模型是自动驾驶世界模型的核心技术基础。本文从 VQVAE 的离散潜在表征出发，逐步讲解扩散模型从像素到潜在空间的演进、DiT 架构的 Scaling 特性、因果 VAE 在时序建模中的作用，以及驾驶场景下的多相机视频生成方法全景。","title":"知识点拆解｜视频生成模型基础详解：VQVAE、扩散模型与DiT"},{"content":"📄 论文信息 标题：Octo: An Open-Source Generalist Robot Policy（Octo：开源通用机器人策略） 团队：UC Berkeley、Stanford、Carnegie Mellon University、Google DeepMind — Dibya Ghosh、Homer Walke、Karl Pertsch、Kevin Black、Oier Mees、Chelsea Finn、Sergey Levine 等 发表：arXiv 2405.12213，2024 年 5 月 关键词：通用机器人策略（GRP）、Transformer、Open X-Embodiment 数据集、多机器人控制、开源 一句话总结：在 80 万条多机器人演示轨迹上训练的开源 Transformer 策略，支持语言/图像指令，可微调适配新平台，是首个完全开源的通用机器人操控策略。 论文链接：arXiv:2405.12213 代码链接：octo-models.github.io 🤔 要解决什么问题？ 传统机器人学习的范式是为每个任务、每种机器人单独训练策略。这种方式存在根本性的局限：\n数据效率低下：每换一个任务就需要从零收集大量数据 泛化能力有限：训练好的策略通常只能在训练分布内工作 可迁移性差：换一个机器人平台，之前的策略几乎无法复用 尽管大语言模型和视觉基础模型已经展示了\u0026quot;预训练 + 微调\u0026quot;范式的巨大成功，但在机器人领域，构建类似的**\u0026ldquo;通用机器人模型\u0026rdquo;（Generalist Robot Model）**面临独特挑战：\n硬件异构性：不同机器人的传感器配置、关节结构、动作空间千差万别 动作空间多样性：有连续控制、离散控制、关节空间、任务空间等 任务规范多样：需要支持语言指令、目标图像等多种指令形式 之前的工作如 RT-1、RT-2、RoboCat 虽然取得了进展，但存在关键问题：输入输出空间受限（通常只支持预训练时的摄像头和动作空间）、不支持高效微调、最大的模型未开源。\nOcto 的目标是解决这些核心问题：构建一个灵活、可微调、完全开源的通用机器人策略。\n💡 核心方法 整体架构设计 Octo 采用 Transformer 编码器-解码器架构，核心设计理念是灵活性——能够处理任意组合的输入和输出，支持高效微调到新平台。\n模型架构分为四个关键组件：\n1. 任务分词器（Task Tokenizer） 支持两种任务规范模式：\n语言指令：使用预训练的语言模型（T5-XXL）将文本指令编码为 token 序列 目标图像：使用轻量级 CNN（2 层 ResNet）将目标图像编码为视觉 token 这种双模式设计使得 Octo 可以通过自然语言描述或视觉目标来指定任务。\n2. 观测分词器（Observation Tokenizer） 将机器人的观测输入（通常是 RGB 图像）编码为 token：\n使用轻量级 ResNet 特征提取器（4 层 ResNet + 位置编码） 支持多摄像头输入：可以同时处理工作空间摄像头和腕部摄像头 支持本体感知：将关节角度等状态信息也编码为 token 关键创新在于：观测分词器是模块化的，可以灵活添加或移除输入流。\n3. Transformer 骨干网络 核心是一个标准的 Transformer 编码器-解码器：\n编码器：处理任务 token 和观测 token 的序列 解码器：生成 readout token，传递给输出头 采用块级注意力机制（block-wise attention）：不同输入模态之间通过可学习的 readout token 进行信息聚合 这种设计的关键优势：微调时可以添加新的输入/输出，而不需要修改预训练参数。只需在预训练的 readout token 后面追加新的 token 即可。\n4. 动作输出头 支持两种输出头：\n扩散头（Diffusion Head）：使用去噪扩散模型输出动作序列（action chunks），能够建模复杂的多模态动作分布 确定性头：简单地预测动作均值 扩散头是默认选择，因为它能更好地处理\u0026quot;同一任务可能有多种合理执行方式\u0026quot;的情况。\n训练数据：Open X-Embodiment 数据集 Octo 在 Open X-Embodiment 数据集上训练，这是目前最大的机器人操控数据集：\n总量：从约 150 万条轨迹中精选 80 万条用于训练 多样性：涵盖 22 种不同机器人平台、多种任务类型 动作空间：包括 7 维关节控制、末端执行器控制等 任务类型：抓取、放置、工具使用、双臂协作等 训练时采用了精心设计的数据混合策略：\n对不同来源的数据进行平衡，避免大数量来源主导训练 对语言标注质量进行过滤 对动作空间进行归一化处理 训练目标 Octo 使用两个训练目标的组合：\n去噪扩散目标：训练扩散动作头，$L_{\\text{diffusion}} = \\mathbb{E}_{t, \\epsilon} \\left[ \\| \\epsilon - \\epsilon_\\theta(z_t, t, c) \\|^2 \\right]$，其中 $z_t$ 是加噪后的动作序列，$c$ 是条件特征\n语言建模目标：对于语言条件，使用标准的交叉熵损失训练语言分词器\n微调策略 Octo 的微调设计是其核心竞争力之一：\n添加新输入：在 Transformer 编码器中追加新的 token 位置，只需初始化新的分词器 添加新输出：在 readout token 后追加新的动作输出头 冻结/解冻策略：可以选择冻结大部分预训练参数，只微调新增部分 计算效率：在标准消费级 GPU 上几小时内即可完成微调 🧪 实验验证 零样本多机器人控制 在 9 个机器人平台上评估 Octo 的零样本控制能力：\n平台 任务 Octo 零样本 专用策略 WidowX (BridgeV2) 物体放置 52% 78% UR5 桌面整理 38% 65% RT-1 Robot 多任务操作 35% 72% 虽然零样本性能不及专用策略，但 Octo 展示了跨平台泛化的能力——这是专用策略完全不具备的。\n微调实验 在 6 个新平台上微调 Octo，对比不同初始化方法：\n方法 CMU Baking Stanford Coffee Berkeley Peg 平均 从零训练 12% 20% 15% 16% Octo 微调 68% 75% 58% 67% RT-1-X 微调 45% 52% 42% 46% 关键发现：\nOcto 微调比从零训练提升 51 个百分点 比 RT-2-X 等闭源模型的微调效果更好 仅需 50-100 条演示即可达到较好效果 消融实验 论文进行了详细的设计决策消融：\n模型架构消融：\nTransformer 编码器-解码器 \u0026gt; 纯编码器 块级注意力 \u0026gt; 全注意力 扩散动作头 \u0026gt; 确定性动作头 训练数据消融：\n数据多样性比数据量更重要 平衡的数据混合优于简单拼接 使用 Open X-Embodiment 全量数据优于子集 模型规模消融：\n93M 参数模型显著优于 27M 参数模型 但在资源受限时 27M 模型仍可用 🔍 个人思考 亮点 开源生态的奠基之作：Octo 是首个完全开源的通用机器人策略，包括训练代码、模型权重、微调脚本。这为机器人基础模型研究提供了可复现的基线，极大降低了入门门槛。\n灵活的微调设计：块级注意力机制和模块化分词器的设计非常巧妙，使得模型可以在不修改预训练参数的情况下适配新平台。这种\u0026quot;预训练 + 即插即用适配\u0026quot;的范式是机器人基础模型的正确方向。\n全面的消融研究：论文不仅提出了模型，还系统地研究了架构选择、数据混合、训练目标等设计决策的影响，为后续工作提供了宝贵的工程经验。\n务实的工程选择：选择 93M 参数规模而非追求极致大模型，使得模型可以在消费级 GPU 上微调，考虑了实际可用性。\n局限性 零样本性能有限：虽然微调效果好，但零样本泛化仍远不及专用策略。这说明预训练数据的覆盖度和模型的泛化能力仍有提升空间。\n动作空间限制：Octo 主要针对机械臂操控任务设计，对移动操作、灵巧手控制等更复杂的动作空间支持有限。\n语言理解深度有限：虽然支持语言指令，但 T5 编码器的理解能力有限，对于复杂组合指令（\u0026ldquo;把红色的杯子放在蓝色盘子旁边\u0026rdquo;）的处理能力不足。\n缺少在线学习能力：Octo 是纯模仿学习模型，不具备在线探索和自我改进的能力。\n未来方向 规模扩展：将模型扩展到更大规模（如 1B+ 参数），结合更多样化的数据，有望实现真正的零样本泛化。\n多模态融合：将视觉、语言、触觉、力觉等多模态信息深度融合，提升机器人对物理世界的理解。\n在线适应：结合强化学习或在线学习机制，使模型能够在部署后持续改进。\n与 VLA 路线的融合：Octo 的 Transformer 架构与 VLA（视觉-语言-动作）模型天然兼容，未来可能看到两者的深度融合。\n📖 延伸阅读 RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control Open X-Embodiment: Robotic Learning Datasets and RT-X Models Diffusion Policy: Visuomotor Policy Learning via Action Diffusion Octo 官方网站 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/octo%E9%80%9A%E7%94%A8%E6%9C%BA%E5%99%A8%E4%BA%BA%E7%AD%96%E7%95%A5%E7%B2%BE%E8%AF%BB/","summary":"Octo 是 UC Berkeley 等团队推出的开源通用机器人策略（GRP），基于 Transformer 架构在 80 万条多机器人轨迹上预训练，支持语言指令和目标图像双模式输入，可通过高效微调适配新机器人平台和动作空间。作为首个完全开源的通用机器人操控策略，Octo 为机器人基础模型的研究奠定了重要基础。","title":"论文精读｜Octo：开源通用机器人策略——大规模多任务机器人基础模型"},{"content":" 📌 关于论文：小米在 VLA 方向公开的精确名为 \u0026ldquo;Last-VLA\u0026rdquo; 的论文暂未检索到，本篇按最接近的小米具身智能相关工作 LaST-VLA（Latent Spatio-Temporal VLA）精读——该论文由与小米具身智能团队（OneVL 同班人马：Yuechen Luo、Fang Li、Shaoqing Xu、Bing Wang、Yuannan Shen、Jianwei Cui、Long Chen、Guang Chen、Hangjun Ye 等）高度重合的作者完成，是小米 EV 自动驾驶 VLA 路线的关键前作。\n📄 论文信息 标题：LaST-VLA: Thinking in Latent Spatio-Temporal Space for Vision-Language-Action in Autonomous Driving 团队：小米具身智能 / 同济大学（Guang Chen、Long Chen、Hangjun Ye 课题组）— Yuechen Luo、Fang Li、Shaoqing Xu、Yang Ji、Zehan Zhang、Bing Wang 等 13 人 发表：arXiv:2603.01928（2026 年 3 月首发，ICML 2026），代码已开源 github.com/luo-yc17/LaST-VLA 骨干：InternVL3（2B / 8B 两个规格） 一句话总结：把 VLA 的\u0026quot;推理\u0026quot;从文字 CoT搬进连续隐空间，再用 3D 几何先验（VGGT）+ 世界模型动力学先验（Cosmos）两个老师去监督隐空间，让\u0026quot;思考\u0026quot;既高效又物理接地，单目前视相机刷新 NAVSIM 双榜。 🤔 要解决什么问题？ VLA 自动驾驶的推理范式目前有三种走法，各有死穴。LaST-VLA 用一张四象限对比图把痛点说得很透：\n范式 优点 死穴 (a) 直接 VLA 快、无推理开销 缺乏推理，复杂长尾场景吃亏 (b) 显式文本 CoT 可解释、能分解任务 语义-感知脱耦：文字压丢视觉细节，产生幻觉；自回归生成慢、过度思考 (c) 朴素隐式 CoT 高效、绕开文字瓶颈 无中间监督，物理无关，训练不稳、易 model collapse (d) 本文：物理接地的时空隐式 CoT 高效 + 稳定 + 接地 需要外部基础模型当\u0026quot;老师\u0026quot; 作者抓住了两个核心病灶：一是语言与物理现实的脱节——把稠密视觉压成离散文字，必然丢几何与动力学信息；二是对语言先验的过度依赖带来的安全隐患。而朴素地把推理塞进隐空间又因为缺少中间约束变成\u0026quot;物理无关的黑盒\u0026quot;。\n核心问题：能不能让隐式推理既高效，又\u0026quot;接地\u0026quot;到真实物理？LaST-VLA 的答案是——用基础模型当特征级老师，蒸馏进隐空间。\n🧠 核心架构：时空隐式 CoT 整个框架把端到端规划形式化为\u0026quot;先思考、再规划\u0026ldquo;的两段式条件生成：\nP(a | Q) = P(Hdyn, Hgeo | Q) · P(a | Hdyn, Hgeo, Q)\n其中 Q 是输入（图像 + 导航指令 + 自车状态 + 历史轨迹），H = {Hdyn, Hgeo} 是模型自回归生成的隐式 CoT，被显式拆成动力学流和几何流两股解耦特征，再去条件化出轨迹 a。同一个 VLA 在统一的自回归过程里既当 Thinker 又当 Planner。\n双特征对齐：两个\u0026quot;老师\u0026quot;灌一个隐空间 LaST-VLA 最聪明的地方是不重建像素（预测深度图/未来视频太贵、信息冗余），而是把外部基础模型当特征级教师，用轻量 Adapter 把隐 CoT 拉到它们的流形上：\n老师 Adapter 蒸馏目标 注入的物理能力 Cosmos（视频世界模型） Dynamics Adapter Φdyn 短/中/长三组时序 token 对齐 Cosmos 潜特征 未来运动先验：交通参与者的运动趋势与环境连续变化 VGGT（3D 几何基础模型） Geometry Adapter Φgeo 一组空间 token + 掩码视觉特征对齐 VGGT 稠密特征 度量几何先验：场景深度、占据结构、可行驶区域 对齐损失用简单的 MSE：\nLWM = ‖pdyn − FCosmos‖²₂　，　L3D = ‖pgeo − FVGGT‖²₂\n一个反 shortcut 的小细节：训练时对送进 Adapter 的视觉特征做随机二值掩码，防止 Adapter 偷懒直接抄原始像素模式，逼隐 CoT 真正承担\u0026quot;信息桥梁\u0026quot;的角色。两个 Adapter 的内部结构也针对各自任务做了差异化设计——Dynamics Adapter 把线性隐 token 序列映射到世界模型的动态流形，捕捉交通参与者从短期到长期（短/中/长三组时序 token）的连续运动趋势；Geometry Adapter 则把隐状态与原始视觉嵌入融合后再对齐 VGGT 的稠密特征空间，恢复出度量准确的深度、占据与可行驶区域结构。推理时两个老师全被旁路，零额外推理开销——它们只在训练阶段扮演\u0026quot;严师\u0026rdquo;，把物理知识烤进权重里。\n🪜 两阶段渐进 SFT + GRPO 精修 训练总目标 Ltotal = λaction·LCE + λWM·LWM + λ3D·L3D\n关键不是损失长什么样，而是两阶段动态调权重，把\u0026quot;学思考\u0026quot;和\u0026quot;学开车\u0026quot;解耦：\n阶段 权重策略 注意力设计 目标 Phase I 物理感知对齐 λWM=λ3D=1.0 ≫ λaction=0.01 结构化因果掩码 先把隐 CoT 严格对齐到几何/动力学老师 Phase II 隐接地规划 λaction=1.0 ≫ λWM=λ3D=0.01 动作 token 可同时看 H 和原图 再让 planner 学会\u0026quot;用\u0026quot;这套物理推理出轨迹 结构化因果掩码：逼模型真去\u0026quot;思考\u0026quot; 这是 Phase I 的关键工程巧思，分两招：\nLatent Mutual Masking（隐变量互掩）：3D token 和 WM token 互相屏蔽，强迫两路独立学习，避免互相抄答案； Visual Bottleneck Masking（视觉瓶颈掩码）：禁止动作 token 直接看原始图像嵌入——把视觉信息全部逼进隐 CoT H，让 H 成为决策的唯一信息通道。 消融显示这套掩码单独贡献 +2.0 PDMS，是\u0026quot;逼出真推理\u0026quot;的关键。\n第三阶段：GRPO 强化精修 SFT 之后，作者冻结两个 Adapter，用 **GRPO（Group Relative Policy Optimization）**继续打磨动作生成。奖励函数三件套：\nRtraj（PDMS 奖励）：把预测轨迹的 PDMS 分数归一化到 [0,1]，奖励整体质量； Rfmt（格式奖励）：离散指示，严格惩罚输出格式不符； Rgoal（终点奖励）：按预测终点与真值 L1 距离分层给分。 总奖励 R = λtrajRtraj + λfmtRfmt + λgoalRgoal。GRPO 在 SFT 基础上把 8B 模型从 87.3 推到 91.3 PDMS，是性能跃迁的主要来源。\n📊 实验结果：单目刷新 NAVSIM 双榜 NAVSIM：纯视觉登顶 方法（NAVSIM v1） 传感器 PDMS ↑ UniAD 多相机 83.4 DiffusionDrive 相机 + LiDAR 88.1 WoTE 相机 + LiDAR 88.3 DriveVLA-W0-7B 单目 90.2 AdaThinkDrive-8B*（文本 CoT） 单目 90.3 ReCogDrive-2B 单目 90.8 InternVL3-8B（RL，文本 CoT 基线） 单目 87.2 LaST-VLA-2B（RL） 单目 91.1 LaST-VLA-8B（RL） 单目 91.3（SOTA） NAVSIM v2（更严苛的 EPDMS）上 LaST-VLA-8B 拿到 87.1，比上代 SOTA DriveVLA-W0 高 1.0。2B 小模型都能打过一众大模型，证明隐式 CoT 的增益不是堆参数来的。\nSURDS / NuDynamics：空间与动力学推理 方法 Yaw ↑ Pixel ↑ Depth ↑ L/R ↑ F/B ↑ Score ↑ Motion ↑ Qwen2.5-VL-72B 11.6 6.1 44.0 66.2 14.9 33.5 54.8 InternVL3-8B 45.2 61.8 100.0 86.2 84.4 76.6 74.0 LaST-VLA-8B 70.2 71.3 100.0 90.3 88.0 84.3 81.2 最亮眼的是 Yaw 朝向估计 70.2%（72B 的 Qwen2.5-VL 只有 11.6%）和 Motion 运动状态 81.2%——这正是 VGGT 几何蒸馏和 Cosmos 动力学蒸馏直接喂出来的能力，普通 VLM 是\u0026quot;空间迷路\u0026quot;的，LaST-VLA 把这个短板彻底补上了。\n关键消融 维度 结论 3D + WM 双路 SFT 阶段 +3.4 PDMS，RL 阶段 +4.1 PDMS，DAC 提升最大（几何接地） 隐式 vs 文本 CoT 无监督隐式 89.8（训练震荡）；有监督隐式 91.3（稳定）；文本 CoT 仅 87.2 结构化因果掩码 +2.0 PDMS，是\u0026quot;逼出真推理\u0026quot;的关键 隐 token 数 N3D=12、NWM=3×12 最优；太少信息瓶颈，太多冗余难优化 消融里最有说服力的是图 4 的训练曲线：无监督隐式 CoT 在 RL 后期还在剧烈震荡（橙线），而物理接地的版本收敛又稳又高（红线）——这直接回答了\u0026quot;隐式推理为什么需要监督\u0026quot;。\n定性可视化：物理接地带来的安全收益 作者用两组对比案例直观展示了 LaST-VLA 相对文本 CoT 基线的安全优势。第一组是**可行驶区域合规（DAC）场景：文本 CoT 基线（红色轨迹）会越出车道边界、侵犯不可行驶区域，而 LaST-VLA（绿色轨迹）凭借 VGGT 蒸馏出的几何接地，始终保持精准的车道贴合。第二组是碰撞时间（TTC）**场景：面对前车减速，基线无法有效制动导致追尾，而 LaST-VLA 因为有 Cosmos 注入的动力学 foresight，能提前预判周围参与者的运动趋势、及时刹车避撞。\n这两个案例恰好对应了表 4 消融的两个核心增益——几何流主攻 DAC（确保不越界），动力学流主攻 TTC（确保不追尾）。一句话总结：几何先验让模型\u0026quot;知道边界在哪\u0026quot;，世界模型让模型\u0026quot;预知下一秒会发生什么\u0026quot;，二者合起来就是驾驶安全的核心。\n⚔️ 与同门 OneVL 的传承关系 LaST-VLA 是小米具身自动驾驶 VLA 路线的第一篇奠基作，后续的 OneVL（arXiv:2604.18486）沿用了完全相同的\u0026quot;隐式 CoT + 双辅助解码器监督\u0026ldquo;思想：\n维度 LaST-VLA（前作） OneVL（后作） 监督老师 Cosmos（世界模型）+ VGGT（3D） 语言解码器 + 视觉世界模型解码器 隐 CoT 拆分 动力学流 + 几何流 35 视觉 token + 20 语言 token 推理方式 自回归生成隐 token 一步 prefill 并行填充 骨干 InternVL3 2B/8B Qwen3-VL 4B NAVSIM PDMS 91.3 88.84（但延迟更低） 核心创新 物理接地的隐式推理 首个超越显式 CoT 的隐式方法 可以说 LaST-VLA 验证了\u0026rdquo;隐式推理必须物理接地\u0026ldquo;的命题，OneVL 则把它工程化成了一步 prefill 的实时可部署形态——这条技术脉络是小米 EV 在 VLA 推理范式上的核心押注。\n📝 个人思考 LaST-VLA 最打动我的是它精准地诊断了\u0026quot;隐式 CoT 为什么不 work\u0026rdquo;。社区此前做 latent CoT 普遍踩坑——把推理塞进连续隐空间，又只用最终答案监督，结果模型学到的隐变量跟物理世界毫无关系，训练还崩。LaST-VLA 的洞察是：没有中间监督的隐空间就是黑盒，而自然语言不是唯一可选的监督介质——用世界模型和 3D 基础模型的特征当老师，比文字 CoT 更贴近驾驶真正需要的几何与动力学。这个思路对任何想把\u0026quot;推理\u0026quot;压进隐空间的领域都有借鉴价值。\n第二个启发是它的两阶段权重反转。Phase I 让物理对齐损失压倒动作损失、并用视觉瓶颈掩码把图像\u0026quot;切断\u0026quot;，Phase II 再反转权重、放开视觉。这种\u0026quot;先逼模型学思考、再让它学开车\u0026quot;的渐进策略，本质上是在解一个多目标优化的冲突——硬练必然顾此失彼。结构化因果掩码单独贡献 +2.0 PDMS，说明信息流的约束有时比损失函数更重要。\n第三点是关于几何先验的不可替代性。Yaw 朝向估计从 72B 模型的 11.6% 跃到 70.2%，这种\u0026quot;绝对空间定位\u0026quot;能力是大 VLM 用互联网图文数据死学学不出来的。VGGT 这类 3D 基础模型相当于把几何引擎离线蒸馏进了语言模型，这或许是补齐 VLM 空间智能短板最经济的路径——比堆参数、堆数据划算得多。更巧妙的是，作者选择特征级蒸馏而非像素级重建（不生成深度图/未来视频），既绕开了生成式方法的高昂计算开销和信息冗余，又把物理知识高效地压进了隐空间。这种\u0026quot;借老师、不请老师上车\u0026quot;的思路，对算力受限的车端部署尤其友好。\n最后一点隐忧：LaST-VLA 的推理仍是自回归生成隐 token（N3D+NWM=48 个），延迟优势相对显式 CoT 没那么夸张，真正\u0026quot;实时可部署\u0026quot;的形态是后作 OneVL 的一步 prefill。这也解释了为什么小米要连发两篇——第一篇证道，第二篇工程化。另外值得追问的是，Cosmos 和 VGGT 作为\u0026quot;老师\u0026quot;本身有其数据分布偏置，蒸馏进来的几何/动力学先验在它们没见过的极端天气、罕见地理场景下是否依然可靠，论文并未充分讨论——这是隐式蒸馏路线长期需要面对的泛化边界问题。对自动驾驶从业者而言，LaST-VLA 给出的最大启示是：未来驾驶 VLA 的护城河不在语言推理，而在物理接地的隐式表征，谁能把世界模型和几何先验高效蒸馏进端到端模型，谁就握住下一波竞争力的钥匙。\n🔗 延伸阅读 工作 团队 与 LaST-VLA 的关系 OneVL 小米 同门后作，把隐式 CoT 工程化为一步 prefill，首个超越显式 CoT AdaThinkDrive — 自适应文本 CoT，LaST-VLA 在 NAVSIM 上超越它 ReCogDrive — 强化认知驾驶框架，LaST-VLA 单目反超 DriveVLA-W0 中科院 × 蔚来 同样用世界模型做稠密监督，但走显式图像生成路线 Cosmos NVIDIA 世界基础模型，本文的动力学老师 VGGT — 3D 几何基础模型，本文的几何老师 InternVL3 OpenGVLab 本文的 VLM 骨干 GRPO DeepSeek 本文 RL 阶段采用的策略优化算法 📖 这是论文精读系列的第 18 篇。当\u0026quot;思考\u0026quot;被搬出语言、塞进物理接地的隐空间，驾驶 VLA 的推理范式正在被重写。你认为隐式 CoT 会成为端到端自动驾驶的新标配吗？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/last-vla%E7%B2%BE%E8%AF%BB/","summary":"LaST-VLA 把 VLA 推理从文字 CoT 搬进连续隐空间，用 3D 几何先验（VGGT）和世界模型动力学先验（Cosmos）两个外部基础模型当特征级老师，蒸馏监督隐 CoT。它让隐式推理既绕开了文字 CoT 的慢速与幻觉问题，又避免了朴素隐 CoT 的物理脱节。在 NAVSIM 双榜单上用单目前视传感器取得 SOTA，推理时两个老师全部旁路、零额外开销。","title":"论文精读｜Last-VLA：小米的视觉-语言-动作模型"},{"content":"引言：预测空间的三个层次 驾驶世界模型的核心是学习环境的动力学转移函数：给定当前状态 $s_t$ 和动作 $a_t$，预测下一时刻 $s_{t+1}$。\n但\u0026quot;状态 $s$\u0026ldquo;的定义不同，世界模型的技术路线就完全不同。按预测空间从密集到稀疏，可分为三个层次：\n层次 预测空间 信息密度 代表方法 像素空间 原始 RGB 视频帧 最高 DriveDreamer, GAIA-1, Vista 潜在空间 VAE 压缩后的潜变量 中 World4Drive, LAW, ReWorld 占用空间 3D 体素占用网格 低（语义级） OccWorld, NIFF 这三个层次不是互斥的，相反，最新的趋势是跨层次融合——用潜在空间做高效推理，用像素空间做可视化，用占用空间做规划。\n🎨 像素空间世界模型 范式：视频生成即世界模型 像素空间世界模型直接把世界建模为视频生成问题：输入过去帧和动作，生成未来帧。这是最直觉的路线——生成的视频可以直接被人类理解，也天然做数据增强。\n核心公式：\n$$p(x_{t+1:T} | x_{1:t}, a_{1:T}) = \\prod_{k=t+1}^T p(x_k | x_{1:k-1}, a_{1:k-1})$$DriveDreamer 发布时间：2024 年 2 月（上海 AI Lab）\n核心技术：\n基于 Stable Diffusion 的潜在扩散架构 CausalVAE 保证时序因果性（未来帧不泄露到当前帧编码） 结构化条件注入：HDMap（车道线、路沿）+ 3D bbox（位置、大小、朝向） 两阶段训练：阶段一训练静态场景先验（背景 + 道路），阶段二训练动态物体行为（车辆运动） 关键技术指标：\n输入：4 帧历史 + 动作序列 + HDMap + 3D bbox 输出：8 帧未来（约 3 秒） 分辨率：1280 × 720 条件控制精度：支持逐帧精确控制物体位置 贡献：首个将结构化场景条件（HDMap + 3D bbox）与因果 VAE 结合的驾驶世界模型，证明了精确可控的驾驶视频生成是可行的。\nGAIA-1 发布时间：2023 年 9 月（Wayve）\n核心技术：\n自回归 token 预测：将视频帧通过 VQGAN 离散化为 token，像 GPT 一样预测下一 token 混合架构：自回归 + 扩散细化的两阶段设计 三重条件：文本描述 + 驾驶命令 + 历史帧（可选择条件组合） 十亿参数量级，在 4700 小时英国驾驶数据上训练 架构三阶段：\nTokenizer：VQGAN 将每帧编码为离散 token 网格 Prior：自回归 Transformer 在 token 空间中预测未来 Renderer：扩散模型将离散 token 细化为高质量像素 贡献：首个十亿参数级的驾驶世界模型，展示了自回归 + 扩散混合路线的可行性。\n局限：自回归的顺序预测在长程生成中误差累积严重，且推理速度较慢。\nVista 发布时间：2024 年 5 月（Wayve）\n核心技术：\nDiT 骨干：替换 GAIA-1 的自回归架构为扩散 Transformer 动作条件：以自车动作（油门、转向角）为核心条件生成未来帧 闭环推理：可根据策略输出的动作实时生成下一帧，实现闭环仿真 多模态不确定性建模：对同一动作输出多种可能的未来场景 与 GAIA-1 的关键区别：\n维度 GAIA-1 Vista 骨干架构 自回归 Transformer Diffusion Transformer (DiT) 生成方式 token 序列预测 潜空间去噪 动作条件 可选文本/命令 精确动作值 多模态输出 无 ✅ 显式建模 贡献：第一个真正具备闭环仿真能力的驾驶世界模型，可与策略网络交互生成反应性场景。\nCosmos 发布时间：2025 年 1 月（NVIDIA）\n核心技术：\n大规模视频预训练：在 2000 万小时视频上训练，包含大量驾驶数据 因果视频 VAE：压缩比为 8×8×8（空间 × 空间 × 时间） DiT + 时序注意力：可生成最长 60 秒视频 可微分仿真：将世界模型与可微分渲染器结合 核心创新——Causal Video VAE 的压缩设计：\n组件 压缩比 输出尺寸（输入 1920×1080×60帧 ≈ 3.7B tokens） 原始像素 1× 3.7B VAE 编码后 64× (8×8×1) 58M 因果 VAE 512× (8×8×8) 7.2M 贡献：展示了海量数据 + 大模型在驾驶视频生成中的 scaling 能力；Causal Video VAE 的高效压缩为长时间视频生成提供了基础。\n像素空间方法优缺点总结 优点 缺点 ✅ 生成视频可直接可视化 ❌ 计算量巨大（扩散多步采样） ✅ 天然适合数据增强 ❌ 不保证物理/几何一致性 ✅ 人类可理解、易调试 ❌ 长程预测质量退化快 ✅ 条件注入直观 ❌ 车端推理速度不够 🧠 潜在空间世界模型 范式：在压缩空间预测未来 潜在空间世界模型不在像素层面生成，而是在VAE 编码后的潜在空间中预测未来状态。因计算量小、推理快，更适合直接服务规划。\n核心公式：\n$$z_{t+1} = f_\\theta(z_t, a_t), \\quad z_t = E(x_t)$$其中 $z_t$ 是潜在状态，$E$ 是编码器，$f_\\theta$ 是潜在动力学模型。\nWorld4Drive 发布时间：2024 年 10 月\n核心技术：\n两阶段框架：先训练一个轻量 VAE 将多相机观测压缩到潜在空间，再在潜在空间训练动力学模型 BEV 潜在状态：在 BEV 视角下定义潜在状态，天然融合多相机信息 变分预测：用 RSSM 风格的条件变分模型预测未来潜在状态分布 规划接口：直接在潜在空间执行规划（用 MPPI 或梯度优化） 技术细节：\n编码器 E 将 6 相机图像压缩为 BEV 潜在状态 $z \\in \\mathbb{R}^{C \\times H \\times W}$ 动力学模型预测 $p(z_{t+1} | z_t, a_t)$ 奖励函数定义在潜在空间（通过一个小的 reward head 解码） 贡献：第一个真正将世界模型与规划在潜在空间端到端协同的系统。\nLAW（Learning to Accelerate World Model） 核心技术：\n动作条件控制生成：以自车动作序列为条件，生成可控的未来帧 潜在一致性与渲染一致性联合训练： 潜在一致性：在 VAE 空间中直接约束预测的 $z_{t+1}$ 与其对应的编码 $E(x_{t+1})$ 接近 渲染一致性：将潜在预测解码到像素后再与 GT 帧计算感知损失 训练加速：提出多种训练加速技巧使得潜在世界模型训练成本降低 10 倍 ReWorld（Reward World Model） 核心技术：\n世界模型用于奖励设计：核心洞察是\u0026quot;新场景的奖励可以通过世界模型的预测来估算\u0026rdquo; Reward via Reconstruction：用世界模型重建误差作为 reward signal——真实轨迹能被世界模型准确预测，异常轨迹的重建误差大 规划中的 use：将世界模型的预测不确定性作为规划 cost 的一项权重 三方法对比 方法 潜在表示 动力学模型 是否用于规划 核心创新 World4Drive BEV 潜在 $z$ RSSM 变分预测 ✅ 是（MPPI） BEV 潜在 + 联合优化 LAW VAE 潜在 $z$ 确定性/变分 LSTM ❌ 双重一致性训练 ReWorld VAE 潜在 $z$ 扩散/RNN ✅ （reward） 损失即 reward 🏗️ 占用空间世界模型 范式：预测未来 3D 几何 占用空间世界模型在3D 体素占用网格中预测未来，不关心纹理和外观，只关心\u0026quot;哪里被占了、是什么类别\u0026quot;。\n核心公式：\n$$O_{t+1} = f_\\theta(O_t, a_t)$$其中 $O_t \\in \\mathbb{R}^{X \\times Y \\times Z \\times C}$ 是语义占用网格，每个体素包含占用概率和语义类别。\nOccWorld 发布时间：2024 年 4 月（上海 AI Lab）\n核心技术：\n场景 Transformer：将当前 BEV 特征和占用网格编码为 token，在 token 空间中预测未来占用 两阶段训练：阶段一学习占用预测（自监督），阶段二学习场景生成（可控制） 规划适配：预测的占用网格直接可输入到占用-based 规划器中 技术架构：\n场景编码：将当前帧的 BEV 特征 + 占用网格投射到 token 空间（每个 grid cell 一个 token） 时序 Transformer：以 token 序列为输入，预测下一时刻的占用 token 占用解码：将 token 解码回 3D 占用网格 规划过滤：在预测的占用空间中评估候选轨迹的碰撞风险 优势：\n计算量远小于像素空间方法 显式几何表示天然适合碰撞检测 可扩展到任意语义类别 NIFF（Neural Integrated Future Flow） 核心技术：\n未来场景流预测：不直接预测占用网格的下一状态，而是预测每个占用的未来光流（当前时刻到未来时刻的对应关系） 集成时序建模：将多帧预测级联到一个统一的神经网络中，缓解误差累积 几何约束：通过 3D 投影约束保证预测的运动在物理上可行 占用空间 vs 像素空间 vs 潜在空间 维度 像素空间 潜在空间 占用空间 信息层次 像素级 特征级 语义级 计算成本 高 中 低 几何约束 隐式 隐式 显式 可视化 ✅ 直观 需解码 ✅ 占用图 规划适用性 中等 好 最好 纹理细节 ✅ 丰富 包含部分 ❌ 无 🌐 世界模型的三大应用场景 (a) 数据增强 用世界模型生成训练场景，补充数据分布中稀有的组合。\n技术路径：\n指定条件（天气、位置、车流密度、事件类型） 世界模型生成对应的视频 自动标注（预训练感知模型的伪标签） 痛点：\n生成多样性不够，模型容易对生成数据过拟合 生成分布与真实分布有 gap，需要 domain adaptation \u0026ldquo;指定某个物体出现在某位置\u0026quot;的精确控制依然困难 (b) 规划代价函数 用世界模型的预测结果来评估轨迹的安全性，而非直接用碰撞检测。\n技术路径：\nlatent-based：在潜在空间评估轨迹的\u0026quot;可预测性\u0026rdquo;（ReWorld） occupancy-based：在预测的占用网格中计算碰撞概率（OccWorld） pixel-based：用视频逆向图的时间一致性评估轨迹 为什么重要：\n传统方法用规则（如 TTC \u0026lt; 阈值）判断安全，泛化性差 世界模型提供了数据驱动的 safety critic——如果一个轨迹让世界模型的高维预测变得混乱，那它大概率不安全 (c) 策略预训练 在想象中学习策略（model-based RL），无需真实交互。\n技术路径：\n学一个世界模型 在模型的\u0026quot;想象\u0026quot;中 rollout 大量轨迹 用 RL 在想象轨迹上训练策略（Dreamer V3 范式） 挑战：\n世界模型在分布外区域的预测不可靠，\u0026ldquo;在错误的想象上学习\u0026quot;会加剧策略偏差 驾驶奖励极度稀疏（事故极少），RL 收敛困难 需要高质量的探索机制来发现安全边界 ⏱️ 发展脉络与时间线 - - - - - - - * * * * * * * G 首 D 结 O 首 V D W B C 大 R 潜 A 个 r 构 c 个 i i o E o 规 e 在 I 十 i 化 c 占 s T r V s 模 W 世 A 亿 v 条 W 用 t l m 视 o 界 - 参 e 件 o 空 a 骨 d 潜 o 频 r 模 1 数 D （ r 间 * 干 4 在 s 预 l 型 * 驾 r H l 世 * D 空 * 训 d 与 * 驶 e D d 界 + r 间 * 练 * 奖 世 a M * 模 ( i * 励 ( 界 m a * 型 W 闭 v + ( + W 模 e p a 环 e N 规 a 型 r ( y 推 * 规 V C 划 y ， * + 上 v 理 * 划 I a L 深 v 自 * 海 e 联 D u A 度 e 回 3 ) 合 I s W 结 ) 归 ( D A 优 A a 合 上 I 化 ) l / + 海 b b L V N 扩 A o a i I 散 I x b d F 混 ） ) e F 合 L + o a b C V ) a A u E s a l V A E 发展趋势 像素 → 潜在 → 占用：预测空间从密集走向稀疏，从\u0026quot;看起来真\u0026quot;走向\u0026quot;物理上对\u0026rdquo; 开环 → 闭环：从固定的视频生成演变到可根据自车动作实时反应的交互式仿真 生成 → 规划：世界模型从\u0026quot;数据生成工具\u0026quot;升级为\u0026quot;规划基础设施\u0026quot; 扩散 → 流匹配：Flow Matching 正在逐步替代扩散模型头，实现更快的推理速度 📋 主要驾驶世界模型对比总表 模型 年份 团队 预测空间 骨干架构 条件类型 时序建模 规划服务 开源 GAIA-1 2023 Wayve 像素 VQGAN + 自回归 文本/命令/历史帧 因果注意力 ❌ ❌ DriveDreamer 2024 上海 AI Lab 像素 LDM + CausalVAE HDMap + 3D bbox + 动作 Causal VAE 部分 ❌ OccWorld 2024 上海 AI Lab 占用 场景 Transformer 动作 时序 Transformer ✅ 碰撞检测 ✅ Vista 2024 Wayve 像素 DiT 动作值 时序注意力 ✅ 闭环仿真 ❌ World4Drive 2024 多单位 潜在 RSSM + VAE 动作 变分预测 ✅ MPPI ❌ Cosmos 2025 NVIDIA 像素 DiT + Causal Video VAE 文本/动作 因果时序注意力 部分 ❌ ReWorld 2025 学界 潜在 扩散/RNN 动作 变分预测 ✅ 奖励 ❌ MagicDrive 2024 华科 像素 DiT 3D bbox + 相机参数 时序注意力 ❌ ✅ NIFF 2025 学界 占用 Neural Flow 动作 未来流预测 ✅ ❌ LAW 2025 学界 潜在 LSTM + VAE 动作 双重一致性 ❌ ❌ 💭 个人思考 世界观模型在短短两年内经历了从\u0026quot;0 到 1\u0026quot;的爆发。2023 年 GAIA-1 还是孤例，2025 年已有数十种方法。但我认为有三个关键判断值得关注：\n像素空间方法不适合做实时规划。扩散模型 20-50 步的采样速度与车端要求的 30FPS 之间有数量级的差距。像素级预测的大部分计算资源被浪费在渲染纹理细节上，而这些纹理对规划没有贡献。长期看，规划用的世界模型一定是潜在空间或占用空间的。\n\u0026ldquo;闭环\u0026quot;是一种\u0026quot;伪闭环陷阱\u0026rdquo;。很多方法声称支持闭环仿真，但实际做的是\u0026quot;开环预测的拼接\u0026quot;——每一步预测都用上一帧的预测结果作为输入，误差迅速积累，跑 10 秒以上画面就崩了。真正的闭环需要世界模型对自身的预测误差有\u0026quot;校准\u0026quot;机制，比如每 N 帧用真实观测做一次修正。\n世界模型的评测比模型本身更紧迫。现在每个方法都宣称 FVD 最低，但 FVD 不评估物理合理性。如果一个世界模型拿去做规划，表现比随机策略还差，那它的 FVD 再低也没有意义。业界需要一个 \u0026ldquo;World Model Benchmark\u0026rdquo;——用世界模型辅助规划器在闭环中跑出多少分作为最终的评判标准。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E9%A9%BE%E9%A9%B6%E4%B8%96%E7%95%8C%E6%A8%A1%E5%9E%8B%E5%85%A8%E6%99%AF%E8%AF%A6%E8%A7%A3/","summary":"世界模型从预测空间维度可分为像素空间、潜在空间和占用空间三大类别，每种都有不同的代表方法与适用场景。本文系统梳理了 DriveDreamer、GAIA-1、Vista、World4Drive、OccWorld 等主流世界模型，对比其核心技术、条件控制与对规划的支持能力，并给出完整的分类体系与发展脉络。","title":"知识点拆解｜驾驶世界模型全景详解：分类、代表工作与发展脉络"},{"content":"📄 论文信息 标题：OpenVLA: An Open-Source Vision-Language-Action Model（OpenVLA：开源视觉-语言-动作模型） 团队：Stanford University、UC Berkeley、Toyota Research Institute、Google DeepMind — Moo Jin Kim、Karl Pertsch、Siddharth Karamcheti、Chelsea Finn、Sergey Levine、Percy Liang 等 发表：arXiv 2406.09246，2024 年 6 月 关键词：VLA、开源、Llama 2、DINOv2、SigLIP、LoRA 微调、机器人操控 一句话总结：首个完全开源的 7B 参数 VLA 模型，以 7 倍更少参数超越闭源 RT-2-X，支持高效微调和量化部署。 论文链接：arXiv:2406.09246 代码链接：openvla.github.io 🤔 要解决什么问题？ 视觉-语言-动作模型（VLA）被认为是机器人通向通用智能的关键路径。这类模型将预训练的视觉-语言模型（VLM）直接微调为机器人控制策略，能够利用互联网规模的视觉-语言先验来提升泛化能力。\n然而，VLA 模型的广泛应用面临两大障碍：\n1. 现有 VLA 模型几乎全部闭源 RT-2（55B 参数）虽然展示了惊人的泛化能力，但它是闭源的——不公开模型权重、训练代码或数据混合。这意味着：\n研究社区无法复现或改进 其他实验室无法在其基础上构建 VLA 研究变成了\u0026quot;军备竞赛\u0026quot;而非开放合作 2. 缺乏高效微调的最佳实践 即使有开源的通用策略（如 Octo），如何高效地将其适配到新机器人、新任务仍是未解问题。现有工作：\n没有系统研究 LoRA 等参数高效微调方法在 VLA 上的效果 没有探索模型量化对 VLA 推理的影响 缺乏面向消费级硬件的部署方案 核心问题 如何构建一个开源、高效、可微调的 VLA 模型，使其性能达到或超越闭源模型，同时让机器人研究社区能够自由使用和改进？\nOpenVLA 的回答是：基于开源 VLM 骨干 + 机器人数据微调 + 参数高效适配。\n💡 核心方法 模型架构：端到端 VLA OpenVLA 的核心创新是直接微调预训练 VLM 生成机器人动作，而非像 Octo 那样将视觉编码器和语言模型分开处理。\n视觉编码器：DINOv2 + SigLIP 双流融合 OpenVLA 使用两个互补的预训练视觉编码器：\n编码器 特点 提供的能力 DINOv2 自监督训练，关注空间结构 低层次几何信息、物体边界、空间关系 SigLIP 监督训练，关注语义理解 高层次语义信息、物体识别、场景理解 两个编码器的特征通过 patch-as-token 方式融合：\n图像被分成 $16 \\times 16$ 的 patch 每个 patch 同时提取 DINOv2 和 SigLIP 特征 拼接后投影到语言模型的输入空间 这种双流设计使得 OpenVLA 能够同时理解\u0026quot;在哪里\u0026quot;（空间）和\u0026quot;是什么\u0026quot;（语义）。\n语言骨干：Llama 2 使用 Llama 2 7B 作为语言模型骨干，这是一个在互联网规模文本上预训练的强大语言模型。选择 Llama 2 的原因：\n开源且广泛使用 强大的指令遵循和推理能力 成熟的微调生态（LoRA、量化等） 动作输出：离散化 token 预测 与 Octo 使用扩散头不同，OpenVLA 将连续动作离散化为 token：\n将每个动作维度的范围均匀分成 256 个 bin 每个动作维度映射为一个离散 token 语言模型自回归地预测这些动作 token 这种方法的优势：\n可以直接复用语言模型的自回归生成框架 不需要额外的动作解码器 训练简单，损失函数就是标准的交叉熵 劣势：\n精度受 bin 数量限制 自回归生成速度较慢 训练数据：Open X-Embodiment 精选 OpenVLA 在 97 万条真实机器人演示轨迹上训练，这些数据来自 Open X-Embodiment 数据集的精选子集：\n来源：21 种不同机器人平台 任务类型：物体操控、桌面整理、工具使用等 数据筛选：过滤低质量轨迹，平衡不同来源的数据比例 关键的数据处理策略：\n动作归一化：对每个动作维度进行标准化 图像增强：随机裁剪、颜色抖动等 语言标注清洗：使用语言模型验证指令质量 参数高效微调：LoRA OpenVLA 首次系统研究了 LoRA（Low-Rank Adaptation） 在 VLA 模型上的效果：\n在 Transformer 层的注意力矩阵中添加低秩适配层 微调时只更新 LoRA 参数，冻结原始模型权重 可以将微调参数量从 7B 降低到约 数十 MB 实验表明，LoRA 微调的 OpenVLA 在大多数任务上能达到全参数微调的效果，但计算成本大幅降低。\n量化推理：INT4/INT8 为了在消费级硬件上部署，OpenVLA 探索了模型量化：\nINT8 量化：几乎不影响性能，内存减少约 50% INT4 量化：轻微性能下降，但内存减少约 75% 支持在单张消费级 GPU 上实时推理 🧪 实验验证 直接评估：超越闭源模型 在 WidowX 和 Google Robot 两个平台上评估 29 个任务：\n模型 参数量 平均成功率 RT-2 (PaLI-X) 55B 62.3% OpenVLA 7B 78.8% Octo 93M 52.1% 从零训练 Diffusion Policy - 45.6% 关键发现：\nOpenVLA 以 7 倍更少的参数 超越 RT-2-X 16.5% 的绝对成功率 这得益于更好的数据多样性和双视觉编码器设计 开源模型首次在 VLA 领域达到 SOTA 微调实验：高效适配新平台 在 Franka 机器人上评估微调效果，涉及 7 个操控任务：\n方法 单任务 多任务 语言泛化 从零训练 Diffusion Policy 62.3% 41.2% 28.5% Octo 微调 68.7% 52.8% 45.2% OpenVLA 全参数微调 85.4% 71.6% 68.3% OpenVLA LoRA 微调 83.2% 69.5% 65.7% 关键发现：\nOpenVLA 微调显著优于从零训练（+23.1%）和 Octo 微调（+16.7%） LoRA 微调仅用 1% 的参数即可达到全参数微调 97% 的效果 在多任务和语言泛化场景下优势更明显 LoRA 微调消融 系统研究 LoRA 的秩（rank）对性能的影响：\nLoRA Rank 可训练参数 成功率 相对全参数 4 2.3M 76.8% 89.9% 16 8.9M 80.2% 93.9% 64 34.8M 82.5% 96.6% 全参数 7B 85.4% 100% 发现：rank=64 是性能-效率的最佳平衡点，用不到 0.5% 的参数达到 97% 的性能。\n量化推理评估 量化方式 内存占用 推理延迟 成功率 FP16 14GB 85ms 83.2% INT8 7GB 62ms 82.8% INT4 4GB 48ms 81.5% INT8 量化几乎不影响性能，但内存和延迟都显著降低。\n🔍 个人思考 亮点 开源生态的里程碑：OpenVLA 是第一个在性能上超越闭源 SOTA 的开源 VLA 模型。这不仅是一个技术突破，更是对机器人研究生态的重要贡献——它让全球研究者都能在统一的基线上竞争和合作。\n双视觉编码器的巧妙设计：DINOv2（空间）+ SigLIP（语义）的组合非常优雅，解决了单一视觉编码器难以同时捕获空间和语义信息的问题。这种设计思路可以推广到更多多模态任务。\n工程实用性极强：LoRA 微调 + INT8 量化使得 OpenVLA 可以在单张消费级 GPU 上运行，这对于资源有限的实验室和初创公司极具吸引力。\n系统性消融研究：论文不仅报告了 SOTA 结果，还系统研究了数据混合、视觉编码器选择、微调策略等关键决策，为后续工作提供了宝贵的工程指南。\n局限性 离散化动作的精度瓶颈：将连续动作离散化为 256 个 bin 虽然简化了训练，但引入了不可逆的精度损失。对于需要精细力控或高速运动的任务，这可能成为瓶颈。\n自回归生成速度慢：动作 token 需要逐个生成，对于高频控制（\u0026gt;20Hz）可能不够快。相比之下，扩散头可以并行生成整个动作序列。\n数据规模仍有限：97 万条轨迹虽然已经很大，但与互联网规模的视觉-语言数据（数十亿）相比仍相差甚远。这限制了模型的泛化上限。\n缺少触觉和力觉：纯视觉输入难以处理需要力反馈的任务（如插入、拧紧）。多模态感知的融合是未来的必要方向。\n未来方向 从离散到连续：将动作头从离散 token 预测改为连续输出（如 Flow Matching 或扩散模型），可以同时提升精度和速度。π0 等后续工作已经验证了这条路线。\n规模扩展：将模型从 7B 扩展到 13B、70B，结合更大规模的数据，有望实现真正的零样本泛化。\n多模态感知融合：加入触觉、力觉、听觉等模态，使机器人能够更全面地感知物理世界。\n在线学习与自我改进：结合强化学习或在线学习机制，使模型能够在部署后从自身经验中学习和改进。\n📖 延伸阅读 RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control Octo: An Open-Source Generalist Robot Policy π0: A Vision-Language-Action Flow Model for General Robot Control OpenVLA 官方网站 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/openvla%E5%BC%80%E6%BA%90vla%E6%A8%A1%E5%9E%8B%E7%B2%BE%E8%AF%BB/","summary":"OpenVLA 是首个完全开源的 7B 参数视觉-语言-动作模型，在 97 万条真实机器人演示上训练，以 7 倍更少的参数超越闭源模型 RT-2-X（55B）。通过融合 DINOv2 和 SigLIP 双视觉编码器与 Llama 2 语言骨干，结合 LoRA 微调和量化推理，OpenVLA 让 VLA 模型首次走向开放生态。","title":"论文精读｜OpenVLA：开源视觉-语言-动作模型——VLA走向开放生态"},{"content":" 📌 关于论文：小米公开的精确名为 \u0026ldquo;One-VL\u0026rdquo; 的论文未检索到，本篇精读小米具身智能团队官方对外的工作 OneVL（One-Step Latent Reasoning and Planning with Vision-Language Explanation，arXiv:2604.18486）——这是小米 Embodied Intelligence Team 在自动驾驶 VLA 推理范式上的旗舰工作，也是前作 LaST-VLA 的工程化延续。\n📄 论文信息 标题：OneVL: One-Step Latent Reasoning and Planning with Vision-Language Explanation 团队：小米具身智能团队（Xiaomi Embodied Intelligence Team） — Jinghui Lu、Jiayi Guan、Zhijian Huang、Lingdong Kong、Shaoqing Xu、Yuechen Luo、Fang Li、Long Chen、Hangjun Ye 等 50 余人 发表：arXiv:2604.18486（2026 年 4 月首发，49 页技术报告） 代码 / 项目：github.com/xiaomi-research/onevl ｜ xiaomi-embodied-intelligence.github.io/OneVL 骨干：Qwen3-VL 4B 一句话总结：首个超越显式 CoT 的隐式 CoT 方法——用一个语言解码器 + 一个视觉世界模型解码器双管齐下监督隐空间，推理时所有隐 token 一步 prefill 并行填完，做到\u0026quot;显式 CoT 的精度 + 直接出答案的延迟\u0026quot;，4B 模型在四大基准全 SOTA。 🤔 要解决什么问题？ 思维链（CoT）推理已经成为 VLA 自动驾驶涨分的关键引擎，但它有个致命软肋——自回归生成文字太慢，几十上百 token 的推理链让实时部署几乎不可能。\n社区的应对是 隐式 CoT：把推理压进连续隐状态，绕开冗长的文字生成。但所有现有隐式方法（COCONUT、CODI、SIM-CoT）一致地打不过显式 CoT，甚至经常连\u0026quot;不推理直接出答案\u0026quot;的 AR 基线都不如。OneVL 团队给出了一个犀利诊断：\n问题不在\u0026quot;压缩\u0026quot;，而在\u0026quot;压缩目标\u0026quot;。\n纯粹的语言隐变量压缩的只是世界的符号抽象，而不是真正支配驾驶的因果动力学。一个只压缩语言的隐向量，本质上只是在压缩\u0026quot;世界的描述\u0026quot;，而非\u0026quot;世界的物理结构\u0026quot;——这正是隐式 CoT 长期掉分的根因。\n核心问题：如何让隐式推理的压缩目标真正捕捉因果关系？OneVL 的答案是——用两个辅助解码器联合监督隐空间：一个还原文字 CoT，一个预测未来视觉帧，逼隐变量同时承载语义意图和物理场景动力学。\n🧠 核心架构：双模态隐式推理 OneVL 在预训练 VLM 上挂了一个紧凑的隐 token 接口和双辅助解码器，训练时三件套联合优化，推理时辅助解码器全丢弃、所有隐 token 一步并行 prefill，延迟与\u0026quot;直接出答案\u0026quot;持平。\n双隐 token：紧致信息瓶颈 隐 token 数量 作用 视觉隐 token 35 个 承载场景的因果动力学结构 语言隐 token 20 个 承载语义意图（场景理解、物体分析、驾驶决策） 合计 55 个隐 token 构成一个紧致的信息瓶颈——容量只够模型蒸馏场景的因果骨架，逼它放弃死记硬背、学出可泛化的表征。这种\u0026quot;刻意卡脖子\u0026quot;的设计是泛化性的关键。\n语言辅助解码器：还原人读 CoT 从语言隐状态重建人类可读的 CoT 文本，把瓶颈接地到语义意图。典型的 CoT 形如：\n\u0026ldquo;自车所在车道右侧靠近不可行驶区域，需稍向左偏；当前场景无需特别关注的物体；基于场景理解与导航，应保持车速并左转。\u0026rdquo;\n这条监督确保隐空间没有丢掉\u0026quot;思考过程\u0026quot;的可解释语义。\n视觉世界模型解码器：预测未来帧 这是 OneVL 最关键的创新。从视觉隐状态预测未来 +0.5s 和 +1.0s 的视觉 token，相当于挂了一个世界模型辅助头，把瓶颈接地到物理场景动力学——这是语言单独无法提供的因果压缩目标。\n两个解码器一软（语义）一硬（物理），双管齐下把隐空间钉死在真实因果关系上。论文核心论断：\n有了世界模型监督，隐式 CoT 能产生比逐 token 文字推理更可泛化的表征。\n推理：一步 prefill 的关键突破 这是 OneVL 相对前作 LaST-VLA 最具工程价值的跃迁。传统的隐式 CoT 仍然需要自回归逐个生成隐 token，延迟优势有限；OneVL 的做法是——所有隐 token 在一次并行的 prefill 中一次性填完，等价于\u0026quot;直接出答案\u0026quot;的延迟成本。\n具体而言，推理时辅助解码器被完全丢弃，55 个隐 token 作为可学习的\u0026quot;软提示\u0026quot;（soft prompt）插入序列，与图像/文本 token 一起在单次前向里并行计算，随后直接接动作 token 输出。这就把隐式 CoT 从\u0026quot;生成过程\u0026quot;变成了\u0026quot;单步映射\u0026quot;，彻底释放了隐式推理的延迟红利。这也是为什么 OneVL 能在 NAVSIM 上做到 4.46s 推理，与\u0026quot;不推理直接出答案\u0026quot;的 4.49s 几乎持平，却比显式 AR CoT 的 6.58s 快整整 32%。\n🪜 三阶段渐进训练 OneVL 面临一个独特的优化难题：主 VLM、语言辅助解码器、视觉辅助解码器三者的学习目标根本不同，硬联合训练必然崩。作者用三阶段管线逐步对齐：\n阶段 名称 解冻模块 核心目标 Stage 0 主模型热身 主 VLM 端到端 带着隐 token 训轨迹预测，让模型学会生成有意义的隐表征、建立信息路由 Stage 1 辅助解码器热身 冻结主模型 只训两个辅助解码器，让它们对齐到稳定的隐表征上（语言解码 CoT、视觉预测未来） Stage 2 联合端到端微调 三者全解冻 两个解码器的梯度回传进主模型，形成正向循环，从两侧收紧信息瓶颈 这套\u0026quot;先各自热身、再联合精修\u0026ldquo;的渐进策略是稳定性的命门。消融数据触目惊心：\n配置 NAVSIM PDMS 相对完整模型 OneVL（完整） 88.84 — w/o 语言解码器 88.53 −0.31 w/o 视觉解码器 87.97 −0.87（损失最大） w/o 三阶段训练（直接端到端） 67.13 −21.71（灾难性崩塌） 两个结论极其硬核：① 视觉世界模型解码器贡献最大（−0.87），印证了\u0026quot;因果动力学才是关键压缩目标\u0026quot;的核心论断；② 跳过三阶段直接联合训练会暴跌 21 分——多目标优化的冲突如果不靠渐进策略化解，模型根本学不出来。\n📊 实验结果：4B 全场 SOTA + 答案级延迟 OneVL 是首个在四大基准上全面超越显式 CoT 的隐式方法。所有现有隐式方法（COCONUT、CODI、SIM-CoT）一致地打不过 AR 基线，只有 OneVL 反超。\nNAVSIM：4B 干翻 8B 方法 模型规模 PDMS ↑ 延迟(s) ↓ 可解释性 AdaThinkDrive 8B 86.20 — 语言 LaST-VLA（前作） 8B 87.30 — — AR Answer（不推理） 4B 87.47 4.49 — AR CoT+Answer（显式） 4B 88.29 6.58 语言 COCONUT（隐式） 4B 84.84 5.93 — CODI（隐式） 4B 83.92 8.62 — SIM-CoT（隐式） 4B 84.21 10.86 语言 OneVL 4B 88.84 4.46 视觉+语言 OneVL 同时拿到了最高分和最低延迟——比显式 AR CoT 快 32%（4.46s vs 6.58s），精度还反超 0.55 PDMS。注意它只有 4B 却干掉了 8B 的 LaST-VLA 和 AdaThinkDrive，这是\u0026quot;压缩目标选对\u0026quot;带来的红利。\n其他三大基准：一致领先 基准 指标 前 SOTA AR CoT OneVL ROADWork ADE / FDE (px) YNet 22.68/80.78 13.18/29.98 12.49/28.80 Impromptu ADE / FDE (m) Impromptu VLA 1.60/4.28 1.42/3.96 1.34/3.70 Alpamayo-R1 ADE / FDE (m) Cosmos-Reason 2.86/7.42 2.99/8.54 2.62/7.53 跨四个差异极大的基准（闭环仿真、轨迹预测、长尾推理）一致 SOTA，说明这种\u0026quot;双解码器监督隐空间\u0026quot;的范式是可迁移的方法论，而非针对某榜调参。\n走向真车部署：0.24s MLP 变体 为了真车实时性，作者在 Qwen3-VL 骨干上挂一个轻量 MLP 头，让模型单次前向就出轨迹，但训练时仍用多模态隐监督：\n延迟 0.24s（4.16 Hz），满足真车实时控制 PDMS 86.83，仅比完整版掉 2 分 仅为 AR 延迟的 5.4% 这个\u0026rdquo;训练时重监督、推理时轻量化\u0026ldquo;的思路极具工程价值——把昂贵的隐式推理留在训练阶段\u0026quot;教\u0026quot;模型，部署时用一个蒸馏出来的快头承接，是落地自动驾驶的标准范式。\n双模态可解释性：语言 + 视觉 值得一提的是，OneVL 提供了双通路的人类可解释输出。语言辅助解码器能从压缩的隐变量中还原高质量的 CoT 文本（场景解读、物体分析、驾驶决策三段式），而视觉辅助解码器能生成空间连贯的未来帧预览（+0.5s、+1.0s）。这意味着即使推理时把辅助解码器旁路了，需要做事故复盘、合规审计、反事实分析时，仍可临时挂回来生成\u0026quot;我当时怎么想的、我预判下一秒会看到什么\u0026rdquo;——这种事后可解释性对自动驾驶的安全审计与监管合规至关重要，是单纯黑盒端到端模型无法提供的。\n⚔️ 与前作 LaST-VLA 的进化 OneVL 是 LaST-VLA 的工程化升级，两者构成小米 VLA 推理的\u0026quot;组合拳\u0026quot;：\n维度 LaST-VLA（前作） OneVL（本作） 核心命题 隐式 CoT 必须物理接地 接地后能超越显式 CoT 监督信号 Cosmos + VGGT 特征蒸馏 语言解码器 + 视觉世界模型解码器 隐空间结构 动力学流 + 几何流（48 token） 35 视觉 + 20 语言（55 token） 推理方式 自回归生成隐 token 一步 prefill 并行（关键突破） 骨干 InternVL3 2B/8B Qwen3-VL 4B 延迟优势 相对显式 CoT 有限 比显式 CoT 快 32% 最大贡献 证道\u0026quot;隐式要接地\u0026quot; 首个超越显式的隐式方法 从 LaST-VLA 到 OneVL，最关键的跃迁是从\u0026quot;自回归生成隐 token\u0026quot;到\u0026quot;一步 prefill 填充隐 token\u0026quot;——这把隐式 CoT 的延迟优势彻底释放出来，做到\u0026quot;显式 CoT 的精度 + 答案级延迟\u0026quot;。可以说 LaST-VLA 解决了\u0026quot;隐式推理能不能 work\u0026quot;，OneVL 解决了\u0026quot;能不能又快又 work\u0026quot;。\n📝 个人思考 OneVL 最让我眼前一亮的是它对\u0026quot;隐式 CoT 为什么一直输给显式\u0026ldquo;这个老问题的犀利诊断。社区此前默认\u0026quot;压缩必然丢信息\u0026rdquo;，所以隐式天然该输。但 OneVL 把锅甩给了压缩目标——纯语言隐变量压缩的只是符号抽象，不是因果动力学。一旦把世界模型拉进来当监督，隐空间就被钉在了真实物理上，反而比逐 token 文字推理更可泛化。这个洞察的分量很重：它意味着\u0026quot;推理\u0026quot;不一定非要用语言承载，视觉未来预测本身就是一种更纯粹的因果推理——这对所有做 latent reasoning 的人都是启发。\n第二个启发是三阶段训练的不可或缺。消融里\u0026quot;去掉三阶段直接端到端\u0026quot;暴跌 21 分，这个数字几乎是在咆哮：多目标优化不能硬联合。先让主模型建立稳定的隐表征、再让辅助解码器去对齐、最后才联合精修——这种\u0026quot;热身-对齐-协同\u0026quot;的节奏，本质上是给梯度流一个有序的引导路径，避免三个目标互相打架。这套范式对所有\u0026quot;大模型 + 多辅助头\u0026quot;的架构都有借鉴价值，特别是机器人 VLA、世界模型联合训练等场景。\n第三点是关于信息瓶颈的工程美学。35 + 20 = 55 个隐 token，这个数字看似随意，实则是容量与泛化的精妙平衡——太大模型会死记训练分布，太小又信息过载。配合\u0026quot;双解码器从两侧收紧瓶颈\u0026quot;，OneVL 把隐空间逼成了一个只存因果骨架的极致压缩。这让我联想到信息论里的最小充分统计量——最优表征永远是\u0026quot;刚好够用\u0026quot;的那个，而不是最大的那个。\n最后一点是关于真车部署的务实姿态。0.24s 的 MLP 变体让我看到小米是真的想上车，而不是刷榜。训练时用重监督喂饱表征、推理时用轻量头承接——这种\u0026quot;训重推轻\u0026quot;的蒸馏式部署范式，正是端到端自动驾驶从论文走向产品的最后一公里。结合小米 SU7 / YU7 的量产车数据闭环，OneVL 这种低延迟、可解释（语言+视觉双通路）的 VLA，离真车落地的距离已经非常近了。\n总体而言，OneVL + LaST-VLA 这对组合拳，代表了小米在自动驾驶 VLA 推理范式上的体系化押注：隐式、接地、一步推理。当行业还在争论\u0026quot;要不要 CoT\u0026quot;时，小米已经用\u0026quot;世界模型监督的隐式 CoT\u0026ldquo;交出了一份兼顾精度、延迟、可解释性的答卷。这条路线能否成为端到端自动驾驶的事实标准，值得持续关注。\n🔗 延伸阅读 工作 团队 与 OneVL 的关系 LaST-VLA 小米 / 同济 前作，首次提出物理接地的隐式 CoT；OneVL 工程化为一步 prefill COCONUT Meta 经典隐式 CoT，OneVL 的对照基线（被超越） CODI / SIM-CoT — 其他隐式 CoT 方法，均打不过 AR 基线 AdaThinkDrive — 8B 自适应文本 CoT，OneVL 用 4B 反超 DriveVLA-W0 中科院 × 蔚来 同样用世界模型监督，但走显式图像生成路线 Qwen3-VL 阿里 OneVL 的 VLM 骨干 NAVSIM / ROADWork / Impromptu / Alpamayo-R1 — OneVL 刷新的四大基准 📖 这是论文精读系列的第 19 篇。当隐式 CoT 终于在精度上反超显式，自动驾驶的\u0026quot;实时推理\u0026quot;或许找到了真正的解法。你认为一步 prefill 的隐式推理会成为车端 VLA 的标配吗？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/one-vl%E7%B2%BE%E8%AF%BB/","summary":"小米 OneVL 用双模态隐式推理超越显式 CoT，攻克了隐式推理长期打不过显式 CoT 的困境。它将 55 个紧致隐 token（35 视觉+20 语言）作为信息瓶颈，用语言解码器还原语义 CoT、视觉世界模型解码器预测未来帧，双管齐下将隐空间钉死在因果关系上。推理时所有隐 token 一步 prefill，延迟与直接出答案持平，4B 模型在四大基准全 SOTA。","title":"论文精读｜One-VL：小米统一视觉语言模型"},{"content":"引言：无条件生成与条件生成 无条件生成模型学习的是数据分布 $p(x)$——给它噪声，它随机生成一张猫或一辆车的图片。但自动驾驶场景中，我们需要的是可控生成：生成某个特定天气的、某个特定路口的、自车以某个速度行驶的场景。\n这就引出了条件生成模型 $p(x|y)$，其中 $y$ 是条件变量。对于扩散模型，\u0026ldquo;如何加入条件\u0026quot;是这个领域的核心工程问题。\n本文从引导方法（如何引导采样方向）和条件注入（如何在网络结构中加入条件）两个维度展开，最后介绍驾驶场景中的特殊条件设计和加速方案。\n🧭 Classifier Guidance：利用分类器引导 基本原理 Classifier Guidance（CG）的思路很简单：在采样过程中，用一个额外的分类器 $p(y|x_t)$ 来引导去噪方向，使生成结果更符合条件 $y$。\n从贝叶斯定理出发：\n$$\\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$ 的对数概率梯度。\n引入引导强度 $s$ 控制条件强度：\n$$\\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\u003e1$ 强条件引导，更符合条件但多样性降低 CG 的典型变体 CLIP Guidance：将分类器替换为 CLIP 模型，$p(y_{text}|x_t)$ 的梯度引导生成符合文本描述的图像：\n$$\\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 几何上。\nCG 的局限 CG 面临的主要问题是分类器需要在各个噪声级别上都能正常工作（$x_0$ 到 $x_T$ 都需要分类准确），这要求分类器必须在扩散过程的各个时间步数据分布上训练或适应。在加噪严重的 $x_t$ 上做分类本就困难，训练不稳定，且额外分类器的训练成本很高。\n🎯 Classifier-Free Guidance：更优雅的方案 核心思想 Classifier-Free Guidance（CFG）由 Ho \u0026amp; Salimans 在 2022 年提出，核心洞察是：不需要额外的分类器，用扩散模型自身即可实现引导。\nCFG 的核心技巧是训练时随机丢弃条件。在训练中，以概率 $p_{uncond}$（通常是 5%~10%）将条件 $y$ 替换为 $\\varnothing$（空条件标记）。这样，同一个模型 $\\epsilon_\\theta$ 可以同时充当条件模型和无条件模型：\n$$\\epsilon_\\theta(x_t, t, y) \\quad \\text{和} \\quad \\epsilon_\\theta(x_t, t, \\varnothing)$$采样公式 在采样时，将条件预测和无条件预测线性插值：\n$$\\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）。\nGuidance Scale 的影响 $w$ 含义 效果 $w=0$ 纯无条件生成 完全不遵循条件 $w=1$ 标准条件生成 遵循条件，多样性正常 $w\u003e1$ 强引导 更符合条件，多样性下降 $w\u003c1$ 弱引导 多样性更高，但条件对齐减弱 在实践中，CFG 的典型 $w$ 取值：\n文本到图像：7.0 ~ 14.0（强引导，强调文本对齐） 驾驶场景生成：2.0 ~ 5.0（中强引导，需要保持场景多样性） 轨迹生成：1.0 ~ 2.0（弱引导，避免模式坍缩到单一行为） CFG vs CG 详细对比 维度 Classifier Guidance Classifier-Free Guidance 额外模型 需要分类器 不需要 训练成本 扩散模型 + 分类器 扩散模型（条件丢弃训练） 采样成本 一次前向 + 一次梯度 两次前向（条件 + 无条件） 条件类型 离散类别为主 任意类型（文本、图像、动作等） 实现复杂度 高 低 扩展性 差（每增一个条件需重新训练分类器） 好（条件类型可任意扩展） 控制粒度 粗（类级别） 细（特征级别） CFG 因其简洁和通用性，成为 Stable Diffusion、Sora 以及几乎所有扩散模型的标准配置。\n🏗️ 条件注入的四种技术方案 有了引导方法（确定采样方向），还需要条件注入——如何在网络结构中让模型\u0026quot;看到\u0026quot;条件信息。以下是四种主流方案。\n1. 拼接（Concatenation） 最简单直接：将条件信息和噪声图像在通道或 token 维度上拼接。\n典型应用：\n图像条件生成（Image-to-Image）：$x_t$ 与条件图像在通道维拼接 $[x_t; c] \\in \\mathbb{R}^{2C \\times H \\times W}$ BEV 条件生成：BEV 特征作为额外通道拼接到潜变量 优点：实现简单，与网络结构无关 缺点：无法处理非结构化或变长条件（如文本）\n2. 交叉注意力（Cross-Attention） Stable Diffusion 使用的标准方案。将条件编码为特征序列，在 U-Net/DiT 中通过 cross-attention 注入：\n$$\\text{Attention}(Q, K, V) = \\text{softmax}\\left(\\frac{QK^T}{\\sqrt{d}}\\right)V$$其中 $Q$ 来自去噪特征，$K, V$ 来自条件编码器（如 CLIP text encoder）。\n条件映射过程：\n$$Q = W_Q \\cdot \\phi(x_t), \\quad K = W_K \\cdot \\tau_\\theta(y), \\quad V = W_V \\cdot \\tau_\\theta(y)$$典型应用：\n文本条件：文本经 CLIP/LLM 编码为 token 序列 图像条件：图像经 ViT 编码为 patch token 序列 优点：可处理变长条件，条件与主特征的交互是自适应的 缺点：计算量较大，尤其当条件 token 很多时\n3. 自适应归一化（Adaptive Normalization） 最初在 StyleGAN 中流行，后被 DiT 推广到扩散模型中。核心思想是用条件信息预测归一化层的缩放和偏移参数：\n$$\\text{AdaLN}(h, y) = \\gamma(y) \\cdot \\frac{h - \\mu}{\\sigma} + \\beta(y)$$其中 $\\gamma(y)$ 和 $\\beta(y)$ 都是由条件 $y$ 经由一个小 MLP 回归得到的。\nAdaLN-Zero 改进（DiT 默认方案）：\n在 DiT 中，条件还控制残差连接的缩放：\n$$h_{out} = h + \\alpha(y) \\cdot \\text{ModulatedFFN}(\\text{AdaLN}(h, y))$$其中 $\\alpha(y)$ 初始化为 0，确保训练初期 DiT block 输出为 identity，稳定训练。\n优点：\n计算开销极小（只需 MLP 回归几个标量） 不改变特征空间分辨率 缺点：\n对复杂结构化条件（如多物体 bbox）的表征能力有限 常需配合 cross-attention 使用 4. 控制网络（ControlNet / Control Module） ControlNet 是当前可控生成最流行的方法。核心思想是冻结主模型，额外训练一个条件控制分支：\n冻结去噪骨干 U-Net/DiT 的所有参数 复制编码器的部分层作为控制分支 控制分支以条件 $y$（深度图、边缘图、分割图等）为输入 控制分支的输出通过 zero convolution 加到主模型的特征中 优势：\n不破坏预训练模型的大规模知识 支持多种条件类型（深度、法线、Canny、涂鸦等） 每个条件只需训练一个轻量控制分支 在驾驶中的应用：\nControlNet for Depth：用 LiDAR 深度图控制生成场景的 3D 几何 ControlNet for HDMap：用高精地图控制生成场景中的道路拓扑 四种方案对比 方案 计算开销 结构化条件 变长条件 条件类型灵活度 代表应用 拼接 低 ✅ ❌ 低 SR3, Palette 交叉注意力 中 ✅ ✅ 高 Stable Diffusion, Sora 自适应归一化 极低 ❌ ❌ 中 DiT, MagicDrive ControlNet 中（额外分支） ✅ ❌ 极高 ControlNet 系列 🚗 驾驶场景中的条件设计 条件类型全景 自动驾驶场景生成需要的条件远多于通用图像生成：\n条件类型 实例 注入方式 用途 HDMap 车道线、路沿、红绿灯 Cross-attention / ControlNet 控制道路拓扑 3D Bbox 车辆/行人的 3D 位置和朝向 拼接 / BEV feature 控制物体布局 自车轨迹 过去和未来的自车位置 Cross-attention / MLP 控制自车运动 相机参数 内外参矩阵 Adaptive Norm 多相机对齐 文本描述 \u0026ldquo;夜间雨天下匝道\u0026rdquo; Cross-attention 语义场景控制 天气/光照 晴天/雨天/黄昏 拼接 / Adaptive Norm 环境条件控制 驾驶命令 左转/右转/直行 Embedding + Cross-attn 行为控制 历史帧 过去 N 帧图像 拼接 / cross-attention 时序上下文 命令与轨迹条件 驾驶场景中最重要的两个条件：\n驾驶命令（Command）：\n离散条件：左转、右转、直行、靠边停车 注入方式：Embedding 层编码后，通过 cross-attention 或 adaptive norm 注入 典型应用：GAIA-1 使用文本/命令条件控制自车行为 自车轨迹（Trajectory）：\n连续条件：未来 N 个时刻的 (x, y, heading, speed) 注入方式：MLP 编码为条件 token，经 cross-attention 注入 关键挑战：轨迹与视频的时序对齐——轨迹中的每个时刻必须精确对应到视频帧 条件之间的冲突处理 当多个条件同时输入时（如 HDMap + 3D bbox + 文本），可能出现条件冲突——文本说\u0026quot;繁忙路口\u0026quot;但 bbox 只标了两辆车。常见处理策略：\n条件融合：将不同条件编码到统一表征空间（BEV 空间） 条件 dropout：训练时随机丢弃某些条件，避免模型过度依赖某一条件 分层条件注入：先以 HDMap 条件为主生成道路，再以 3D bbox 条件为主放置物体 DriveDreamer 使用结构化条件融合：将 HDMap 渲染成 BEV 图像，3D bbox 投影到 BEV，两者叠加后作为统一的条件输入。\n⚡ 截断扩散：减少步数实现实时推理 问题背景 标准扩散模型需要 50~1000 步去噪才能生成高质量结果，这对自动驾驶的实时推理是致命的。截断扩散（Truncated Diffusion）的目标是在不显著降低质量的前提下，大幅减少采样步数。\nDiffusionDrive：截断采样 DiffusionDrive 为自动驾驶轨迹生成设计的截断扩散方案：\n核心思想：不需要从纯噪声 $x_T$ 开始去噪。相反，从一个比较靠前的时间步开始（如 $t=10$ 而不是 $t=1000$），只去噪少量几步即可。\n$$x_{t_0} \\sim \\mathcal{N}(\\sqrt{\\bar{\\alpha}_{t_0}} x_0, (1-\\bar{\\alpha}_{t_0})I), \\quad t_0 \\ll T$$为什么在轨迹规划中可行：\n轨迹的维度远低于图像（~10 个 waypoint × 2 坐标 = 20 维） 轨迹数据的分布比自然图像简单得多 轨迹的去噪过程只需少量步数就能收敛 FeaXDrive：特征空间截断 FeaXDrive 进一步将截断扩散扩展到特征空间：\n核心洞察：直接在感知特征空间（BEV 特征）中做截断扩散，而非在轨迹空间。\n$$z = E_{BEV}(x_t), \\quad \\text{Diffusion}(z, t) \\rightarrow z' \\rightarrow D_{traj}(z')$$优势：\n特征空间比轨迹空间包含更丰富的交互信息 感知模型无需为规划单独训练 截断扩散 + 特征复用使得整个过程只需 2-4 步 截断扩散 vs 完整扩散在规划中的对比 维度 完整扩散 截断扩散 采样步数 50~100 步 2~10 步 推理时间 50~200ms 2~15ms 轨迹质量 最高 略低于完整（可接受） 多样性 高 略低 实时能力 ❌ ✅（可到 30~50Hz） 🌊 Flow Matching：扩散的替代范式 从扩散到 Flow Flow Matching（FM）是比扩散更通用的生成框架。它与扩散的核心区别在于：\n维度 扩散模型 Flow Matching 路径 固定的随机噪声调度 可学习/可设计的任意路径 前向过程 逐步加噪（SDE） 插值从数据到噪声的直线路径（ODE） 训练目标 预测噪声 $\\epsilon$ 预测速度场 $v_\\theta(x,t)$ 采样方式 去噪（数十~数百步） ODE 求解（数步即可） 调度设计 需要精心设计 $\\beta_t$ 路径可任意设计 Flow Matching 在自动驾驶中的优势 更少的采样步数：直线路径意味着 ODE 求解可以用更大的步长，通常 4~10 步即可达到扩散 50 步的质量 更稳定的训练：不需要设计复杂的噪声调度，概率路径可任意选择（如最优传输路径） 天然支持截断：可以只学习从 $t=0$ 到 $t=0.5$ 的路径（相当于截断扩散） 代表工作 Flow-GRPO：用 Flow Matching 取代扩散头做轨迹生成，结合 GRPO 强化学习优化轨迹分布 GoalFlow：以目标为条件的 Flow Matching 规划器，直接学习从当前状态到目标状态的流 ReWorld：在世界模型的潜在空间中使用 Flow Matching 预测未来状态 CFG 在 Flow Matching 中的应用 Flow Matching 同样可以使用 CFG：\n$$\\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$。\n💭 个人思考 条件扩散模型的工程落地比理论上复杂得多。两个关键观察：\n条件越多，冲突越难解决。CFG 和 cross-attention 给出了\u0026quot;如何注入条件\u0026quot;的答案，但\u0026quot;多个条件冲突时谁优先\u0026quot;没有一般性解法。在驾驶场景中，文本说\u0026quot;繁忙\u0026quot;但 bbox 只标了两辆车——到底听谁的？这需要条件之间有显式的优先级或置信度机制，但当前方法几乎没有。\nCFG 的采样效率问题是最大瓶颈。CFG 需要两次前向传播（条件 + 无条件），这让本来就需要多步采样的扩散模型雪上加霜。Flow Matching + 单步 CFG（一次性预测条件和无条件的速度场）可能是未来方向。\n截断扩散与 Flow Matching 实际上在解决同一个问题：用更少的步数做高质量生成。两者正在快速融合——最新的方法（如 Flow-GRPO）使用 Flow Matching 加极少的 ODE 步数（2-4 步）和 CFG 控制在 15ms 内完成轨迹生成，已经达到车端实时要求。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E6%9D%A1%E4%BB%B6%E6%89%A9%E6%95%A3%E6%A8%A1%E5%9E%8B%E8%AF%A6%E8%A7%A3/","summary":"条件生成是扩散模型落地的关键能力，涉及如何将文本、图像、深度图、驾驶命令等条件信息注入生成过程。本文深入讲解 Classifier-Free Guidance 与 Classifier Guidance 的数学原理、条件注入的四种技术方案、驾驶场景中的多模态条件设计，以及截断扩散和 Flow Matching 等加速方案。","title":"知识点拆解｜条件扩散模型详解：引导方法与条件注入技术"},{"content":"📄 论文信息 标题：Mastering Diverse Domains through World Models（通过世界模型掌握多样领域） 团队：Google DeepMind、University of Toronto — Danijar Hafner、Jurgis Pasukonis、Jimmy Ba、Timothy Lillicrap 发表：arXiv 2301.04104，2023 年 1 月（2024 年 4 月更新） 关键词：世界模型、强化学习、Dreamer、RSSM、Minecraft、通用算法 一句话总结：以单一固定超参数在 150+ 多样化任务上超越专用算法，首次从零开始在 Minecraft 中收集钻石。 论文链接：arXiv:2301.04104 代码链接：danijar.com/dreamerv3 🤔 要解决什么问题？ 强化学习（RL）已经取得了令人瞩目的成就——在围棋、Dota 等特定任务上超越人类。但一个根本性问题始终存在：\nRL 算法的\u0026quot;超参数诅咒\u0026quot;\n现有的 RL 算法（如 PPO、SAC、DQN）在设计时都针对特定类型的任务：\nSAC 适用于连续控制 DQN 适用于离散动作 PPO 是通用但性能中等 当需要应用到新领域时（例如从 Atari 游戏转到机器人操控），需要大量的人工调参和领域知识。这带来了三个核心问题：\n应用门槛高：每个新任务都需要 RL 专家花数周时间调参 可扩展性差：无法将算法简单地应用到新领域 资源浪费：调参过程消耗大量计算资源 通用 RL 算法的挑战 构建通用 RL 算法面临独特的技术挑战：\n信号幅度差异：不同任务的奖励尺度可能差几个数量级 动作空间多样：连续/离散、低维/高维 观测模态不同：图像/向量、高维/低维 时间尺度不一：有些任务需要长期规划，有些只需短期反应 奖励密度不同：有些任务奖励密集，有些极其稀疏 DreamerV3 的目标是用单一固定配置解决所有这些问题。\n💡 核心方法 世界模型的核心思想 DreamerV3 的核心是世界模型（World Model）——一个学习环境动力学的神经网络，使智能体能够在\u0026quot;想象\u0026quot;中规划。\n世界模型的工作流程：\n编码：将高维观测（如图像）压缩为紧凑的离散表示 $z_t$ 预测：给定当前状态和动作，预测下一时刻的状态和奖励 规划：在想象的轨迹上搜索最优动作序列 关键优势：\n样本效率高：在想象中训练不需要真实环境交互 支持长期规划：可以在想象中模拟数十步的未来 处理稀疏奖励：通过想象填充奖励之间的空白 RSSM：循环状态空间模型 DreamerV3 使用 RSSM（Recurrent State-Space Model） 作为世界模型的核心架构：\nRSSM 的三个组件：\n循环模型（确定性）：$h_t = f_\\phi(h_{t-1}, z_{t-1}, a_{t-1})$\nGRU 网络，捕获时间依赖性 维持长期记忆 编码器（随机性）：$z_t \\sim q_\\phi(z_t | h_t, x_t)$\n从观测 $x_t$ 和隐藏状态 $h_t$ 编码当前状态 使用离散表征（categorical distributions） 解码器（随机性）：$\\hat{x}_t \\sim p_\\phi(\\hat{x}_t | h_t, z_t)$\n从隐藏状态和随机状态重建观测 确保表示的信息性 离散表征的关键创新：\nDreamerV3 的一个重要创新是使用离散（categorical）表征而非连续高斯分布：\n将每个随机变量建模为 32 个类别，每个类别 32 个 bin 总共 $32 \\times 32 = 1024$ 维的离散表示 离散表征比连续表征更稳定，适合跨领域泛化 Actor-Critic 学习 在世界模型内部，DreamerV3 训练 actor（策略）和 critic（价值函数）：\n训练流程：\n从真实环境中收集经验，存入回放缓冲区 从缓冲区采样序列，在世界模型中展开想象 在想象轨迹上计算 actor 和 critic 的损失 同时更新世界模型、actor 和 critic Actor 损失： $$L_{\\text{actor}} = \\mathbb{E}_{\\tau \\sim p_\\phi} \\left[ \\sum_t \\log \\pi_\\theta(a_t | s_t) \\cdot \\text{sg}(\\hat{A}_t) \\right]$$其中 $\\hat{A}_t$ 是在想象轨迹上计算的优势函数。\nCritic 损失： $$L_{\\text{critic}} = \\mathbb{E}_{\\tau \\sim p_\\phi} \\left[ \\sum_t (v_\\psi(s_t) - \\text{sg}(\\hat{R}_t))^2 \\right]$$其中 $\\hat{R}_t$ 是想象轨迹上的折扣回报。\n鲁棒性技术：跨领域的关键 DreamerV3 能够跨领域泛化的核心在于一系列鲁棒性技术：\n1. Symlog 预测 对于奖励预测，使用 symlog 变换处理未知量级的信号： $$\\text{symlog}(x) = \\text{sign}(x) \\cdot \\log(1 + |x|)$$这使得模型能够处理从 $10^{-6}$ 到 $10^6$ 量级的奖励信号。\n2. 自适应损失平衡 世界模型的总损失是多个项的加权和： $$L_{\\text{model}} = L_{\\text{representation}} + L_{\\text{dynamics}} + L_{\\text{reward}} + L_{\\text{continue}} + L_{\\text{reconstruction}}$$DreamerV3 使用自适应权重调整，根据各损失项的梯度自动平衡，无需手动调参。\n3. 自适应正则化 使用对称 KL 散度作为正则化项，防止后验和先验分布偏差过大： $$\\text{symKL}(p, q) = \\text{KL}(p \\| q) + \\text{KL}(q \\| p)$$4. 稳定的价值函数学习 使用 symlog MSE 作为 critic 的损失函数，避免大值域带来的训练不稳定。\n无需特定配置的设计哲学 DreamerV3 的设计哲学是**\u0026ldquo;默认就应该工作\u0026rdquo;**：\n设计选择 传统方法 DreamerV3 奖励归一化 需要手动设置范围 自适应 symlog 损失平衡 手动调权重 自适应梯度平衡 学习率 每个任务不同 固定 3e-4 网络架构 每个领域定制 统一架构 超参数 大量需要调 全部固定 🧪 实验验证 跨领域基准测试 DreamerV3 在 5 大领域、150+ 任务上进行评估：\n领域 任务数 动作空间 奖励类型 DMControl 20 连续 密集 Atari 26 离散 稀疏/密集 ProcGen 16 离散 稀疏 DMLab 9 离散 稀疏 Minecraft 1 连续+离散 极稀疏 核心结果：\nDreamerV3 在 150+ 任务上使用单一固定配置 在大多数任务上超越或匹配专用调参后的 SOTA 算法 比 PPO（通用但性能中等）显著更好 Minecraft 钻石收集 Minecraft 是 DreamerV3 最具挑战性的测试：\n为什么 Minecraft 钻石收集如此困难？\n极稀疏奖励：需要经过数十个步骤才能获得第一个奖励 长时间跨度：从出生到收集钻石需要数千步 程序化生成：每个世界都不同，无法记忆 多模态动作：需要同时控制移动和交互 像素输入：从原始图像学习 DreamerV3 的突破：\n首次从零开始在 Minecraft 中收集钻石 之前的最佳方法需要： 人类专家数据 领域特定的课程学习 手动设计的奖励函数 DreamerV3 仅使用稀疏的二值奖励（是否获得钻石） 训练过程：\n阶段 1（0-50M 步）：探索基本移动 阶段 2（50-100M 步）：学习采集木头和石头 阶段 3（100-200M 步）：制作工具 阶段 4（200-400M 步）：挖掘矿石 阶段 5（400-600M 步）：找到并收集钻石 消融实验 论文进行了详细的消融研究，验证各鲁棒性技术的重要性：\n技术 移除后性能下降 symlog 预测 32% 自适应损失平衡 28% 离散表征 25% 对称 KL 18% 自适应正则化 15% 所有鲁棒性技术都对跨领域泛化有显著贡献。\n缩放性质 DreamerV3 展示了良好的缩放性质：\n更大的模型不仅达到更高分数，而且需要更少的交互就能解决问题 这为\u0026quot;用更多计算换取更少环境交互\u0026quot;提供了实证支持 🔍 个人思考 亮点 \u0026ldquo;默认就应该工作\u0026quot;的设计哲学：DreamerV3 最令人印象深刻的是它真正实现了\u0026quot;单一配置解决所有问题\u0026rdquo;。这不仅是一个技术成就，更是一种设计哲学的胜利——通过精心设计的鲁棒性技术，消除了 RL 应用中最痛苦的调参环节。\n离散表征的创新：使用 categorical 分布而非连续高斯分布是一个看似简单但影响深远的创新。离散表征更稳定、更容易泛化，这一思路可以推广到更多生成模型任务。\nMinecraft 钻石收集的里程碑意义：这是 AI 在开放世界游戏中从零学习复杂长程任务的重要突破。它证明了世界模型 + 强化学习的组合能够处理真实世界的复杂性。\n对机器人学的启示：DreamerV3 的世界模型思想与机器人学中的 model-based RL 高度相关。它展示了如何在高维观测（图像）下有效学习和利用世界模型。\n局限性 计算成本较高：训练世界模型 + actor + critic 三个网络，加上在想象中采样，计算开销不小。对于资源受限的场景可能不实用。\n真实世界迁移有限：虽然在模拟任务上表现优异，但论文没有展示真实机器人实验。世界模型在真实世界中的泛化能力仍有待验证。\n奖励设计依赖：虽然 DreamerV3 能处理稀疏奖励，但仍需要手动设计奖励函数。对于开放世界任务，自动奖励发现仍是难题。\n长期记忆的局限：RSSM 使用 GRU 维持记忆，对于需要超长时间尺度（数万步）的任务，记忆容量可能不足。\n未来方向 与大语言模型结合：将 DreamerV3 的世界模型与 LLM 的语义理解能力结合，可以实现更高层次的规划和推理。\n真实世界应用：将 DreamerV3 应用于真实机器人操控，验证其在物理世界中的泛化能力。\n多智能体扩展：将世界模型扩展到多智能体场景，学习其他智能体的行为模型。\n与 VLA 模型融合：DreamerV3 的世界模型思想可以与 VLA 模型结合，实现\u0026quot;理解 + 想象 + 行动\u0026quot;的完整闭环。\n📖 延伸阅读 DreamerV2: Mastering Atari with Predictive Models Mastering Diverse Domains through World Models (原始 Dreamer) World Models DreamerV3 官方网站 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/dreamerv3%E4%B8%96%E7%95%8C%E6%A8%A1%E5%9E%8B%E7%B2%BE%E8%AF%BB/","summary":"DreamerV3 是 DeepMind 提出的通用强化学习算法，通过学习世界模型并在想象中规划，以单一固定超参数配置在 150 多个多样化任务上超越专用算法。首次从零开始在 Minecraft 中收集钻石，标志着强化学习向通用化迈出了重要一步。","title":"论文精读｜DreamerV3：通过世界模型掌握多样领域——通用强化学习智能体"},{"content":"📄 论文信息 标题：Senna: Bridging Large Vision-Language Models and End-to-End Autonomous Driving（桥接大型视觉语言模型与端到端自动驾驶） 团队：华中科技大学（HUST）× 地平线机器人（Horizon Robotics），作者 Bo Jiang、Shaoyu Chen、Bencheng Liao、Xinggang Wang 等 arXiv：2410.22313（2024 年 10 月） 一句话总结：让 VLM 当\u0026rsquo;决策大脑\u0026rsquo;用自然语言下指令，让 端到端模型当\u0026rsquo;执行小脑\u0026rsquo;画精确轨迹，高低层级解耦，扬长避短——这是 VLM 辅助端到端驾驶的一条代表性路线。 🤔 要解决什么问题？VLM 直接开车为什么不行？ 端到端驾驶在大规模数据加持下规划能力越来越强，但有一个长期痛点——缺乏常识（commonsense）。比如前方一辆拉着交通锥的卡车，端到端模型可能把它误认成一道路障，于是莫名其妙地急刹；再比如遇到罕见的施工路段、临时管制，纯数据驱动的模型常常抓瞎。\n而 大型视觉语言模型（LVLM） 恰恰擅长场景理解与推理，有从海量预训练里学来的常识和逻辑。于是大家很自然地想：能不能让 VLM 来帮端到端驾驶\u0026rsquo;看懂\u0026rsquo;场景？\n早期尝试主要有两条路，但都踩了坑：\n路线 做法 问题 VLM 直接当规划器 让 LVLM 直接预测轨迹点或控制信号 LVLM 天生不擅长精确数值计算，输出 waypoints 误差大 VLM + E2E 级联（DriveVLM 式） LVLM 预测低频轨迹点，E2E 再精修成高频轨迹 仍要 VLM 出数值，问题没根治 Senna 的核心洞察：不要逼 VLM 干它不擅长的事（算数字），让它干它最擅长的事（说人话、做决策）。把规划拆成高层决策（该往哪走、加减速）和低层执行（具体轨迹点），各司其职。\n💡 核心思想：结构化规划，决策与执行解耦 Senna（名字取自巴西传奇车手 Ayrton Senna）的整体哲学可以一句话概括：\nSenna-VLM 输出自然语言的高层决策 → 编码成 meta-action 特征 → Senna-E2E 在该决策条件下生成精确规划轨迹。\n这其实非常贴近人类驾驶的双系统结构：大脑先做\u0026quot;该变道还是直行、该加速还是减速\u0026quot;的高层判断，手脚再执行具体的转向与油门。Senna 把这种层级化（hierarchical） 思想搬到了模型设计里。\nMeta-action：把决策压缩到有限词表 为了让 VLM 的预测空间可控、也便于喂给 E2E，Senna 把高层决策定义成一组 格式化 meta-action：\n维度 取值 横向（lateral） Left / Straight / Right 纵向（longitudinal） Accelerate / Keep / Decelerate / Stop 最终决策是横向与纵向的组合（如 \u0026ldquo;Left + Decelerate\u0026rdquo;）。横向由预测时段内的横向位移判定，纵向由速度变化判定。一个简单的 meta-action 编码器 把这组决策变成高维特征，送入 E2E。\n训练时 E2E 吃真值决策，推理时吃 VLM 预测的决策——这种\u0026quot;训练用真值、推理用预测\u0026quot;的 scheduled sampling 思想在多阶段系统里很常见，能避免误差在两阶段间过度累积。不过它也带来一个固有挑战：训练时 E2E 没见过 VLM 的预测误差，上线后两者的分布差异可能让 E2E 表现打折，后续工作往往需要通过在训练中逐步引入带噪决策来缓解。\n🏗️ 模型架构：Senna-VLM + Senna-E2E Senna-VLM：为驾驶量身定制的 LVLM 通用 LVLM（如 LLaVA-1.5）并不针对多图输入优化。如果直接把 6 路环视图像塞进去，图像 token 数量爆炸，效果很差。Senna-VLM 做了三件关键设计：\n驾驶视觉适配器（Driving Vision Adapter）：对每路图像编码并压缩 token，把海量视觉信息压成紧凑表示，避免上下文膨胀。 多视图提示（Multi-view Prompts）：为环视场景专门设计提示词，显式告诉模型\u0026quot;这是前视、这是后视、这是左后视……\u0026quot;，帮助模型建立空间方位感知，区分不同视角的特征。 环视输入：相比只看前视图的方案，环视能显著提升空间感知与安全性（并道、过弯都离不开侧后视野）。 Senna-E2E：把决策变成轨迹 Senna-E2E 基于 VADv2（概率规划、多模态轨迹打分）扩展，额外接收 VLM 给的 meta-action 特征作为条件。也就是说，E2E 不再\u0026quot;独自\u0026quot;决定怎么走，而是在 VLM 给定的高层意图下去生成具体轨迹——既降低了学习难度，也让最终行为更可解释。\n模块 角色 输入 → 输出 Senna-VLM 高层决策大脑 多视图图像 + 提示 → 自然语言决策（meta-action） Meta-action Encoder 桥梁 决策文本 → 高维特征 Senna-E2E 低层执行小脑 场景信息 + meta-action 特征 → 精确规划轨迹 📚 规划导向的 QA 与三阶段训练 规划导向的 QA（Planning-oriented QAs） Senna 设计了一整套面向规划的问答数据，且全自动标注、可规模化（不像早期工作靠人工标注）。QA 类型包括：\nQA 类型 作用 场景描述 交通状况、环境、路况、天气、时段（用 GPT-4o 生成） 交通信号检测 红绿灯状态：red / green / yellow / none 弱势道路使用者（VRU）识别 行人、骑车人的类别与相对距离，提升安全 运动意图预测 周围车辆的未来行为（meta-action 形式） Meta-action 规划 自车高层决策 规划解释 结合他车行为、导航、路况、信号灯解释为何这么做 这套 QA 让 VLM 理解规划相关线索，而不只是泛泛地\u0026quot;看图说话\u0026quot;。\n值得注意的是，这套 QA 数据完全通过自动流水线生成：3D 检测框、跟踪轨迹来自自动标注系统，场景描述由 GPT-4o 生成，meta-action 由真值轨迹规则化转换。这意味着数据成本极低、可无限扩展，与早期 DriveVLM 等依赖人工标注的方案形成鲜明对比。在驾驶数据\u0026quot;规模化即正义\u0026quot;的当下，这种自动化能力是 Senna 能用上 DriveX 大规模预训练的前提。\nQA 类型 数据来源 场景描述 / 规划解释 GPT-4o 生成 交通信号 / VRU / 运动 自动标注系统 Meta-action 规划 真值轨迹规则化 三阶段训练策略 作者发现\u0026quot;通用预训练 → 驾驶微调\u0026quot;的老套路并非最优，于是提出三阶段：\n混合预训练（Mixed Pre-training）：通用数据 + 部分驾驶数据，保留常识、防止模型崩塌 驾驶微调（Driving Fine-tuning）：大量驾驶 QA，建立场景理解能力 规划微调（Planning Fine-tuning）：聚焦 meta-action 规划任务，把能力收敛到\u0026quot;做决策\u0026quot; 关键经验：直接全量驾驶微调会丢失预训练常识，三阶段的渐进式策略在\u0026quot;懂世界\u0026quot;和\u0026quot;会开车\u0026quot;之间取得了平衡。\n📊 实验结果：DriveX 预训练带来质的飞跃 Senna 在 nuScenes 和大规模数据集 DriveX 上验证。\n在两个数据集上均取得 SOTA 规划性能 DriveX 预训练 + nuScenes 微调，相比无预训练版本： 平均规划误差 降低 27.12% 碰撞率 降低 33.33% 消融实验证明：多视图提示、规划导向 QA、三阶段训练各自都有正向贡献 这组数字很有说服力：大规模驾驶数据预训练带来的跨场景泛化与迁移能力，是 Senna 走向真正全自动驾驶的关键底气。\nDriveX 数据集与跨场景迁移 DriveX 是 Senna 配套构建的大规模驾驶数据集，其意义不止于\u0026quot;数据量大\u0026quot;。它通过自动标注流水线生成海量规划导向 QA，覆盖多样的城市、天气、路况，让 Senna-VLM 在预训练阶段就建立起对驾驶世界的通识理解。更关键的是，DriveX 与 nuScenes 是不同场景分布——能从前者迁移到后者并大幅涨点，说明 Senna 学到的是可迁移的驾驶能力，而非对某一数据集的过拟合。\n设计选择 带来的能力 大规模 DriveX 预训练 通识驾驶理解、跨场景泛化 自动标注流水线 数据可规模化，摆脱人工瓶颈 三阶段渐进训练 保留 LLM 常识的同时习得驾驶技能 环视多视图输入 完整空间感知，安全决策 这套组合拳指向一个清晰判断：VLM 驾驶能力的上限，越来越由领域数据的规模与多样性决定，而非单纯靠堆大模型参数。这与 LLM 自身的 scaling law 一脉相承，只是把\u0026quot;语言语料\u0026quot;换成了\u0026quot;结构化驾驶数据\u0026quot;。\n⚔️ 与同类 VLM 驾驶路线的对比 维度 VLM 直接出轨迹 DriveVLM（级联精修） Senna（决策解耦） VLM 输出 轨迹点/控制量 低频轨迹点 自然语言决策 数值预测压力 大（VLM 弱项） 中（点数减少） 几乎无 可解释性 弱 中 强（决策可读） E2E 学习难度 高 中 低（有决策条件） Senna 的路线本质是承认 VLM 和 E2E 各有软肋，用解耦让两者扬长避短——这种\u0026quot;工程上的诚实\u0026quot;反而带来了最好的效果。\n⚠️ 局限性与未来方向 两阶段误差传递：VLM 决策错了，E2E 很难纠正；训练用真值、推理用预测的 gap 仍需弥合 延迟挑战：LVLM 推理慢，与车端实时性要求存在张力，需量化/蒸馏 meta-action 粒度有限：横向 3 类 × 纵向 4 类的组合难以表达复杂细腻的意图 闭环验证待加强：nuScenes 为主的开环评测之外，闭环仿真（如 NAVSIM/nuPlan）的考验更关键 未来可结合 GRPO 等强化学习对齐安全舒适奖励、用 世界模型做决策推演，进一步放大 VLM\u0026quot;思考\u0026quot;的优势。尤其当 VLM 的决策输出可以被客观指标（碰撞、舒适）验证时，GRPO 的组内相对优化能直接把\u0026quot;模仿人类决策\u0026quot;升级为\u0026quot;探索更优决策\u0026quot;，这正是 Senna 这条技术路线最有想象空间的下一步。\n📝 个人思考 读完 Senna，最打动我的是它对 \u0026ldquo;VLM 到底该在驾驶里扮演什么角色\u0026rdquo; 这个问题的清醒回答。这一年来 VLM 驾驶很火，不少工作急于证明\u0026quot;大模型能直接开车\u0026quot;，结果让 VLM 去硬吐轨迹点——这其实是用模型最弱的数值能力去撞墙。Senna 反其道而行：让 VLM 回归它最擅长的语言推理与常识判断，把精确数值交给专门的 E2E。这种\u0026quot;高低层解耦\u0026quot;看似朴素，却抓住了问题的要害——分工对了，事半功倍。我倾向于认为，未来 VLA 的主流形态不会是一个大模型包打天下，而是 VLM 做\u0026rsquo;慢思考\u0026rsquo;的决策大脑 + 执行模型做\u0026rsquo;快反应\u0026rsquo;的小脑，Senna 正是这条路线的扎实奠基。\n第二点启发在数据策略的工程化。规划导向 QA 的全自动标注流水线，让驾驶数据的规模化成为可能——这是 DriveX 预训练能奏效的前提。27.12% 和 33.33% 的提升背后，是\u0026quot;把 VLM 当成需要喂大量结构化驾驶数据来\u0026rsquo;再教育\u0026rsquo;的模型\u0026ldquo;这一判断。它提醒我们：通用预训练给的是常识底座，而驾驶能力的真正跃迁，仍要靠领域数据的规模与质量来撬动。\n最后，Senna 留给我一个更深的期待：既然 VLM 已经能用自然语言给出可解释的决策，那么下一步完全可以在这层决策上叠加强化学习——用 GRPO 对\u0026quot;决策质量\u0026quot;打分、做组内相对优化，让 VLM 不只是模仿人类决策，而是探索出比人类更安全更舒适的决策策略。VLM 决策大脑 + RL 偏好对齐 + E2E 精确执行，这是我眼中 VLA 驾驶的三段式未来，而 Senna 已经把第一段的路铺好。\n📖 这是论文精读系列的第 20 篇。VLM 辅助端到端驾驶，你认为\u0026quot;决策解耦\u0026quot;和\u0026quot;一锅炖\u0026quot;哪条路更可能跑通？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/senna-vlm%E8%BE%85%E5%8A%A9%E9%A9%BE%E9%A9%B6%E7%B2%BE%E8%AF%BB/","summary":"Senna 将大型视觉语言模型（Senna-VLM）与端到端规划器（Senna-E2E）解耦协同，VLM 用自然语言输出高层决策，E2E 在该决策条件下生成精确轨迹。它巧妙绕开了 LVLM 不擅长数值预测的软肋，让 VLM 干\u0026rsquo;说人话做决策\u0026rsquo;、E2E 干\u0026rsquo;算轨迹画路点\u0026rsquo;。这条 VLM 辅助端到端驾驶的路线成为后续多个工作的设计原型。","title":"论文精读｜Senna：用 VLM 给端到端驾驶装上'大脑'"},{"content":"引言：两个框架，一个本质 扩散模型（Diffusion Models）和 Flow Matching（流匹配）看起来是两条不同的技术路线——前者通过加噪去噪生成数据，后者通过学习速度场\u0026quot;搬运\u0026quot;数据。但它们在数学上分享同一个深层结构：学习一个将噪声分布变换到数据分布的确定性或随机性过程。 本文的目标是提供一个统一的视角，展示 SDE、ODE、扩散模型、Flow Matching、Rectified Flow 之间的内在联系。理解了这个统一框架，就能理解为什么扩散可以做、Flow Matching 也可以做，以及两者各自适合什么场景。 🌀 扩散模型的 SDE 视角 从离散马尔可夫链到连续 SDE 标准 DDPM 的离散马尔可夫加噪链可以推广到连续时间的随机微分方程（SDE）： $$dx = f(x, t)dt + g(t)dw$$ 其中：\n$f(x, t)$ 是漂移系数（drift），控制信号的确定性衰减 $g(t)$ 是扩散系数（diffusion），控制噪声的注入强度 $dw$ 是维纳过程（Wiener process，即布朗运动） VP-SDE（Variance Preserving） 对应 DDPM 的连续版本： $$dx = -\\frac{1}{2}\\beta(t)x dt + \\sqrt{\\beta(t)}dw$$ 其中 $\\beta(t)$ 是噪声调度的连续版本。VP-SDE 保证了过程在任意时刻的方差保持为 1。 反向 SDE：去噪的连续形式 安德森在 1982 年证明：任何正向 SDE 都存在对应的反向 SDE，从 $T$ 时刻逆向回到 $0$ 时刻： $$dx = [f(x, t) - g(t)^2 \\nabla_x \\log p_t(x)]dt + g(t)d\\bar{w}$$ 其中 $\\nabla_x \\log p_t(x)$ 是 score 函数——扩散模型实际上在估计的就是这个 score 函数。\n概率流 ODE（Probability Flow ODE） SDE 的另一个重要性质：每个 SDE 都对应一个确定性 ODE，其边际分布 $p_t(x)$ 完全相同： $$dx = [f(x, t) - \\frac{1}{2}g(t)^2 \\nabla_x \\log p_t(x)]dt$$ 这个 Probability Flow ODE 是连接扩散模型和 Flow Matching 的关键桥梁——它表示我们完全可以用一个确定性过程（ODE）来实现与随机过程（SDE）相同的分布变换。\nSDE vs ODE 采样对比 维度 SDE 采样 ODE 采样（概率流） 噪声 ✅ 有随机噪声项 ❌ 确定性 采样质量 高（随机性弥补模型误差） 略低（无随机修正） 采样步数 通常需要多步 可用大步长求解 可逆性 ❌ 不可逆（带噪声） ✅ 可逆（单向确定性） 似然计算 ❌ 不支持 ✅ 可计算数据似然（瞬时换元法） 🌊 Flow Matching：从 SDE 到 ODE 的跳跃 核心直觉 扩散模型走得有些绕——先加噪再减噪，路径弯曲导致需要很多步。Flow Matching 问了一个更直接的问题：能不能直接学一条从噪声分布到数据分布的直线路径？\n概率路径（Probability Path） 定义时间相关概率路径 $p_t(x)$，其中 $t \\in [0, 1]$：\n$t=0$：$p_0(x)$ 是简单分布（标准高斯噪声） $t=1$：$p_1(x)$ 是目标数据分布 Flow Matching 学习一个时间相关向量场 $v_\\theta(x, t)$，使得： 沿着 $v_\\theta$ 的积分曲线（流），$p_0$ 会被\u0026quot;推\u0026quot;到 $p_1$ $v_\\theta$ 的方向指向从 $p_0$ 到 $p_1$ 的最有效路径 数学上，ODE 形式为： $$\\frac{dx}{dt} = v_\\theta(x, t), \\quad x(0) \\sim p_0$$ 通过求解这个 ODE 从 $t=0$ 到 $t=1$，我们得到 $x(1) \\sim p_1$。 条件流匹配（Conditional Flow Matching） 直接学习 $v_\\theta$ 来匹配 $p_t$ 是困难的（因为我们不知道 $p_t$ 的解析形式）。条件流匹配（CFM）的技巧是引入单个数据点 $x_1$ 的条件： 对于每个数据点 $x_1$，定义条件概率路径 $p_t(x|x_1)$，使得：\n$p_0(x|x_1)$ 是以 $x_1$ 为中心的高斯分布 $p_1(x|x_1)$ 是 $\\delta(x - x_1)$（狄拉克分布，即确定在 $x_1$） 最常用的条件路径是最优传输（OT）路径： $$p_t(x|x_1) = \\mathcal{N}(x | tx_1, (1 - t)^2 I)$$ 对应的条件向量场为： $$u_t(x|x_1) = \\frac{x_1 - x}{1 - t}$$ CFM 的训练目标就是让网络匹配这个条件向量场： $$\\mathcal{L}_{CFM} = \\mathbb{E}_{t, x_1, x_t \\sim p_t(x_t|x_1)} \\left[ \\| v_\\theta(x_t, t) - u_t(x_t|x_1) \\|^2 \\right]$$ 这个损失函数与扩散模型的 MSE loss 在形式上非常相似——两者都在训练一个网络去匹配某个目标向量/噪声。 训练与采样对比 步骤 扩散模型 Flow Matching 前向采样 $x_t = \\sqrt{\\bar{\\alpha}_t} x_0 + \\sqrt{1-\\bar{\\alpha}_t} \\epsilon$ $x_t = t x_1 + (1-t) \\epsilon$ 目标 预测噪声 $\\epsilon$ 预测速度 $v(x_t, t)$ 损失 $\\|\\epsilon_\\theta(x_t, t) - \\epsilon\\|^2$ $\\|v_\\theta(x_t, t) - (x_1 - \\epsilon)\\|^2$ 采样 ODE 概率流 ODE（较弯曲） 直线 ODE 步数需求 50~1000 步 4~20 步 ➡️ Rectified Flow：把弯曲的路径\u0026quot;拉直\u0026quot; 问题：扩散路径为什么弯曲 扩散模型的概率流 ODE 路径弯曲的原因：噪声到数据的映射不是线性的。在加噪过程中，不同数据点的噪声版本混杂在一起，导致去噪路径需要绕路才能将它们分开。\n整流思想 Rectified Flow 的核心思想非常优雅：你走的路径太弯了，那就走一次，记住走过的路线，再从起点沿着这条路线走直。 Reflow 算法（一步整流）：\n采样配对：从 $p_0$ 采样 $x_0$，从 $p_1$ 采样 $x_1$，用当前 ODE 生成 $(x_0, x_1)$ 的路径轨迹 重新学习：训练新的向量场 $v_\\theta^{new}$ 直接拟合从 $x_0$ 到 $x_1$ 的直线映射： $$\\mathcal{L}_{reflow} = \\mathbb{E}_{(x_0, x_1), t} \\left[ \\| v_\\theta^{new}(x_t, t) - (x_1 - x_0) \\|^2 \\right]$$ 这个\u0026quot;配对-重学\u0026quot;的过程可以递归执行（2-reflow、3-reflow\u0026hellip;），每一步都将路径拉得更直。 整流效果的直观理解 R - - - e F 初 1 2 l 始 - - o r r w O e e D f f 的 E l l 核 ： o o 心 噪 w w 思 声 想 路 后 后 是 径 ： ： ： 与 路 路 对 数 径 径 初 据 大 近 始 路 致 似 径 对 直 O 弯 齐 线 D 曲 E 交 叉 路 径 执 行 \" 先 正 向 采 样 、 再 反 向 配 对 \" 的 操 作 ， 使 路 径 逐 步 拉 直 。 Rectified Flow 的优势 属性 原始 ODE 1-reflow 2-reflow 路径弯曲度 高 中 低 ODE 求解步数 50+ 10-20 4-10 质量损失 — 轻微 可接受 训练成本 一次 再次 额外 Rectified Flow 的核心价值：用一次额外的训练，换取推理时 5~10 倍的加速。 🔗 统一视角：扩散是 Flow Matching 的特殊情况 扩散模型 = 特定路径的 Flow Matching 扩散模型的概率流 ODE 本质上是 Flow Matching 的一种——选择了VP/VE 特定的路径。如果我们将扩散的加噪过程视为定义了一个特定的概率路径 $p_t(x)$，那么：\n扩散模型估计的是 score $\\nabla_x \\log p_t(x)$ Flow Matching 估计的是向量场 $v_\\theta(x, t)$ 两者通过概率流 ODE 等价：$v_\\theta(x, t) = f(x, t) - \\frac{1}{2}g(t)^2 s_\\theta(x, t)$ 更直接地说：扩散模型是 Flow Matching 在特定噪声调度下的实例化。 统一公式表 概念 扩散模型术语 Flow Matching 术语 前向过程 加噪（Noising） 概率路径（Probability Path） 训练目标 噪声预测 $\\epsilon_\\theta$ 速度预测 $v_\\theta$ 采样过程 去噪 ODE 求解 时间范围 $t \\in [0, T]$ $t \\in [0, 1]$ 初始分布 近似高斯（$x_T \\approx \\mathcal{N}(0, I)$） 精确高斯（$x_0 \\sim \\mathcal{N}(0, I)$） 路径设计 固定的 $\\beta_t$ 调度 可任意设计（OT, VP, VE, etc.） 关键区别对比 区别 1：路径自由度\n扩散：路径由 $\\beta_t$ 固定，不能改变 FM：路径可任意设计（直线、曲线、混合），自由度更高 区别 2：初始分布 扩散：$x_T$ 只是接近高斯（$\\bar{\\alpha}_T \\approx 0$ 但不等于 0） FM：$x_0$ 精确为高斯分布（标准正态），没有近似误差 区别 3：采样效率 扩散：弯曲路径需要小步长 ODE 求解 FM：直线路径允许大步长，显著减少步数 这个统一视角的启示：扩散模型在过去几年积累的所有技术（CFG、LDM、DiT、AdaLN 等）几乎都可以直接迁移到 Flow Matching 上。反过来，Flow Matching 的路径设计自由度也启发了对扩散噪声调度的改进。 🏗️ 统一框架下的技术迁移 CFG 的迁移 CFG 在 Flow Matching 中的形式与扩散完全一致： $$\\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))$$DiT 的迁移 DiT 架构无需修改即可用于 Flow Matching——只需将输出从\u0026quot;预测噪声 $\\epsilon$\u0026ldquo;改为\u0026quot;预测速度场 $v$\u0026quot;，网络结构、AdaLN-Zero、patchify 全部保持不变。\nLDM 的迁移 潜在扩散（LDM）也可直接迁移为潜在流匹配（Latent Flow Matching）——在 VAE 潜空间中做 Flow Matching。这已成为许多最新方法的选择，因为 FM 在低维潜空间中的收敛更稳定。\n自适应训练策略 技术 扩散 Flow Matching 迁移难度 CFG ✅ ✅ 直接使用 DiT ✅ ✅ 只需改输出头 LDM ✅ ✅ 直接使用 DDIM 采样 ✅ 类似方法（DPM-Solver） 需适配 Consistency Model ✅ 同样适用 需适配 蒸馏 ✅ 同样适用 需适配 ⚖️ 应用选择：扩散还是 Flow Matching？ 扩散模型的优势场景 场景 原因 文本到图像生成 Stable Diffusion 生态完善，社区基础设施丰富 高质量图像/视频生成 扩散模型在高质量生成上有最多经验积累 需要精细光照/纹理 扩散的加噪过程天然擅长纹理合成 Flow Matching 的优势场景 场景 原因 实时轨迹规划 少步采样（2~10 步）满足车端实时需求 低维生成任务 路径直线化在小维度空间效果更明显 需要精确似然计算 Flow 的 ODE 可逆性支持 likelihood 评估 多步/链式生成 确定性 ODE 在链式预测中更稳定 自动驾驶中的具体选择 任务 推荐方法 原因 场景视频生成 扩散模型（LDM + DiT） 需要高质量的视觉细节 轨迹规划 Flow Matching 少步数、低延迟、多模态 世界模型预测 Flow Matching 链式预测中 ODE 的确定性优势 数据增强 扩散模型 多样性更重要 闭环仿真 扩散（或两者结合） 视觉质量 + 预测速度需平衡 🚗 自动驾驶中的代表工作 Flow-GRPO 核心思想：将 Flow Matching 与 GRPO（Group Relative Policy Optimization）结合，实现轨迹生成的策略优化。 技术架构：\n用 Flow Matching 学习从噪声到轨迹的映射 引入 GRPO 强化学习，根据 reward（安全性、舒适性）优化轨迹分布 在 Flow 的路径上做策略梯度更新 关键公式——Flow ODE + GRPO 更新： $$v_\\theta^{new} \\leftarrow v_\\theta^{old} + \\eta \\cdot \\mathbb{E}\\left[ \\frac{\\partial \\log p_\\theta(\\tau)}{\\partial \\theta} \\cdot R(\\tau) \\right]$$ $\\tau$ 是轨迹，$R(\\tau)$ 是 reward。Flow 的连续性质使得梯度计算比离散扩散更容易。 优势： Flow Matching 的少步采样使得 RL rollout 非常快 连续路径允许更平滑的策略优化 在 NAVSIM 等驾驶规划基准上优于扩散规划器 GoalFlow 核心思想：以目标为条件的 Flow Matching 规划器。 设计思路：\n不再从噪声中随机生成轨迹，而是以目标状态（如\u0026quot;10秒后到达路口的哪个位置\u0026rdquo;）为条件 学习从当前状态 + 目标状态到中间轨迹的速度场 使用 Rectified Flow 技术进一步减少采样步数 应用场景： 高速公路变道规划（给定目标车道位置） 路口转向规划（给定转向后的目标位置） 泊车规划（给定泊车终点） ReWorld 核心思想：在世界模型的潜在空间中使用 Flow Matching 预测未来状态。 关键技术：\n将观测编码到潜在空间 $z_t = E(x_t)$ 在潜在空间中学习 Flow Matching 速度场 $v_\\theta(z, t)$ 从当前 $z_t$ 开始，求解 ODE 获得未来潜在状态 $z_{t+1}, ..., z_{t+K}$ 将潜在状态解码回像素或送入规划器 优势： Flow Matching 的确定性 ODE 在潜在空间链式预测中更稳定（无累积随机噪声） 少步采样使实时推理成为可能 DriveDreamer v2 维度 DriveDreamer v1 DriveDreamer v2 生成框架 LDM（潜在扩散） Latent Flow Matching 采样步数 50 步 DDIM 4~8 步 ODE 路径 VP 噪声调度 Rectified Flow 推理速度 ~800ms/帧 ~80ms/帧（10×加速） 条件控制 HDMap + 3D bbox HDMap + 3D bbox + 轨迹 v2 的升级验证了一个重要趋势：从扩散到 Flow Matching 的迁移可以带来实际的数量级推理速度提升。 核心变化：从扩散模型升级到 Flow Matching。 v1 vs v2 对比： 💭 个人思考 站在统一视角下看待扩散和 Flow Matching，我认为有两点值得深入思考：\n扩散 vs Flow Matching 不是竞争关系，而是不同层级的抽象。扩散是 Flow Matching 在噪声调度上的一个具体实例。理解了这个统一框架后，很多\u0026quot;新技术\u0026quot;无非是在这个框架的某个维度上做调整——改变路径、改变目标、改变求解器。掌握统一视角，就能一眼看穿新方法的本质\u0026quot;新\u0026quot;在哪里。 Flow Matching 在自动驾驶中的应用才刚刚开始。扩散模型已经在图像/视频生成中建立了强大的技术栈（CFG、LDM、DiT），Flow Matching 可以直接继承这些成熟技术，同时提供更快的采样和更简单的训练。我认为未来 1-2 年，自动驾驶领域的生成式模块（轨迹规划、场景预测、数据增强）将加速从扩散向 Flow Matching 迁移。 Rectified Flow 的\u0026quot;一次训练换十倍加速\u0026quot;是目前性价比最高的升级路径。它不需要改变网络架构、不需要蒸馏、不需要额外的 loss 项，只是换一种训练方式。对已经在用扩散的团队，迁移到 Rectified Flow 是管线改造最小的加速方案。 ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/flow-matching%E4%B8%8E%E6%89%A9%E6%95%A3%E6%A8%A1%E5%9E%8B%E7%BB%9F%E4%B8%80%E8%A7%86%E8%A7%92/","summary":"扩散模型与 Flow Matching 是当前生成式 AI 的两大核心范式。本文从 SDE 与 ODE 的统一视角出发，深入讲解扩散模型的随机微分方程解释、Flow Matching 的向量场学习方法、Rectified Flow 的路径整流机制，揭示扩散是 Flow Matching 的特殊情况。同时总结两者在自动驾驶场景生成与轨迹规划中的应用对比。","title":"知识点拆解｜Flow Matching 与扩散模型统一视角：从 SDE 到 ODE 的生成范式"},{"content":"📄 论文信息 标题：Learning Interactive Real-World Simulators（学习交互式真实世界模拟器） 团队：Google DeepMind × UC Berkeley × MIT × University of Alberta 发表：ICLR 2024（Outstanding Paper Award） 关键词：世界模拟器、视频扩散模型、具身智能、Sim-to-Real、多模态生成 一句话总结：通过将异构数据统一到动作条件视频生成框架中，学习一个可交互的真实世界模拟器，实现从模拟到真实的零样本迁移。 论文链接：arXiv:2310.06114 代码链接：GitHub 🤔 要解决什么问题？ 传统生成模型已经能够在文本、图像和视频内容生成方面取得革命性进展，但模拟真实世界交互——即根据人类、机器人和其他交互智能体的动作来模拟逼真的视觉体验——仍然是一个尚未攻克的里程碑。\n想象一下：如果我们能拥有一个真实的模拟器，它能够：\n模拟动作的视觉后果：无论是\u0026quot;打开抽屉\u0026quot;这样的高层指令，还是\u0026quot;向左移动5厘米\u0026quot;这样的低层控制 支持长时程交互：能够连续模拟多步操作序列 实现零样本迁移：在模拟器中训练的策略可以直接部署到真实世界 那么我们就能：\n在游戏和电影中实现可控内容创作 纯粹在模拟中训练具身智能体，然后直接部署到真实世界 模拟稀有或危险事件（如自动驾驶中的碰撞场景）来训练检测模型 然而，构建这样的模拟器面临一个核心挑战：不同数据集的信息维度不一致。\n数据类型 信息丰富度 信息缺失 互联网图文对 丰富的场景和物体 缺少运动信息 视频描述/问答 丰富的高层描述 缺少低层运动细节 人类活动视频 丰富的人体动作 缺少机械运动 机器人数据 丰富的机器人动作 数量有限 全景扫描 丰富的3D场景 静态，无动作 模拟渲染 可控的动作标注 与真实世界有差距 UniSim 的核心洞察：虽然单一数据集无法提供完整的世界交互信息，但不同数据集在不同维度上是丰富的。如果能将这些异构数据统一到一个框架中，就能构建一个\u0026quot;通用\u0026quot;的真实世界模拟器。\n💡 核心方法 UniSim 的核心思想是：通过精心编排的异构数据集，训练一个动作条件视频扩散模型，统一模拟各种真实世界交互。\n方法框架概览 UniSim 采用条件视频生成框架，其核心公式为：\n$$p(o_t | h_{t-1}, a_{t-1})$$其中：\n$o_t$ 是当前时刻的观察（视频帧） $h_{t-1}$ 是历史观察序列 $a_{t-1}$ 是动作输入 这个公式表达了一个观察预测模型（Observation Prediction Model），它可以根据历史观察和当前动作来预测下一个观察。\n1. 异构数据编排：统一动作空间 UniSim 的第一个创新点是将不同来源、不同格式的数据统一到一个动作-视频对的框架中。\n1.1 模拟执行和渲染数据 来源：Habitat 模拟器、Language Table 数据 动作表示：文本描述 + 离散化控制值 处理方式：对于连续控制动作，通过语言嵌入编码，并与离散化控制值拼接 1.2 真实机器人数据 来源：Bridge Data、RT-1/RT-2 数据 动作表示：任务描述作为高层动作，连续控制动作离散化 处理方式：利用任务描述作为统一接口，忽略不同机器人底层控制的差异 1.3 人类活动视频 来源：Ego4D、EPIC-KITCHENS、Something-Something V2 动作表示：视频标签转换为文本动作 处理方式：对视频进行子采样，构建能捕捉有意义动作的观察块 1.4 全景扫描数据 来源：Matterport3D 动作表示：通过截断全景扫描并利用相机位姿信息构建动作（如\u0026quot;向左转\u0026quot;） 处理方式：将静态3D扫描转换为动作-视频对 1.5 互联网图文数据 来源：LAION 动作表示：单帧图像作为单帧视频，图像标题作为动作 处理方式：即使标题包含运动信息（如\u0026quot;一个人在走路\u0026quot;），也将其作为动作条件 2. 观察预测模型：支持长时程交互 UniSim 的第二个关键创新是将其建模为观察预测模型，支持自回归展开以生成一致的长时程视频。\n2.1 视频扩散模型参数化 UniSim 使用视频 U-Net 架构实现，采用交错的时间和空间注意力机制：\n$$p_\\theta(o_t | h_{t-1}, a_{t-1}) = \\text{VideoDiffusion}(o_t; \\text{Enc}(h_{t-1}), \\text{Enc}(a_{t-1}))$$关键技术细节：\n历史条件化：将条件帧在所有未来帧索引处复制，并与噪声样本拼接作为 U-Net 输入 动作编码：使用 T5 语言模型嵌入处理文本动作，与低层控制动作拼接 模型规模：5.6B 参数，使用 512 个 TPU-v3 训练 20 天 2.2 自回归展开 为了支持长时程交互，UniSim 通过自回归方式展开：\n给定初始观察 $o_0$ 和动作 $a_0$，生成下一观察 $\\hat{o}_1$ 将 $\\hat{o}_1$ 作为新的历史观察，结合新动作 $a_1$，生成 $\\hat{o}_2$ 重复此过程，生成任意长度的视频序列 关键设计：每个视频段的最后一帧被用作下一个视频段的条件帧，确保跨视频段的一致性。\n3. 模型架构 UniSim 的整体架构包含以下组件：\n组件 功能 技术细节 视觉编码器 编码视频帧 预训练的视频 U-Net 动作编码器 编码动作输入 T5 语言模型 + 控制值编码 时间注意力 建模时间依赖 交错时间注意力层 空间注意力 建模空间关系 交错空间注意力层 噪声调度 扩散过程 时间相关噪声水平 $\\sigma_k$ 4. 训练策略 UniSim 采用多数据集联合训练策略：\n$$\\mathcal{L} = \\sum_{d \\in \\mathcal{D}} \\lambda_d \\cdot \\mathbb{E}_{(o,a) \\sim \\mathcal{D}_d} \\left[ \\| \\epsilon - \\epsilon_\\theta(\\sqrt{\\bar{\\alpha}_t} o_t + \\sqrt{1-\\bar{\\alpha}_t} \\epsilon, h_{t-1}, a_{t-1}) \\|^2 \\right]$$其中 $\\mathcal{D}$ 是所有数据集的集合，$\\lambda_d$ 是每个数据集的权重。\n🧪 实验验证 UniSim 在三个主要应用场景上进行了验证：视觉-语言规划、强化学习和视频描述。\n1. 长时程视觉-语言规划 实验设置：\n使用 UniSim 生成模拟经验 通过事后标注（Hindsight Labeling）训练视觉-语言策略 在 Franka Kitchen 和 Meta-World 环境中评估 关键结果：\n任务 纯模拟训练 真实世界迁移 提升 打开橱柜 65% 58% - 打开微波炉 72% 64% - 滑动门 58% 51% - 核心发现：\nUniSim 生成的模拟经验可以训练有效的视觉-语言策略 策略可以零样本迁移到真实世界 长时程规划（3-4步操作序列）能够保持一致性 2. 强化学习 实验设置：\n使用 UniSim 作为环境模型 训练低层 RL 策略（SAC 算法） 在真实机器人上零样本部署 关键结果：\n任务 BC 基线 RL（UniSim） 提升 指向蓝色方块 35% 72% 2.06x 指向红色方块 42% 68% 1.62x 抓取物体 28% 51% 1.82x 核心发现：\nRL 训练显著提升策略性能（平均 1.6 倍提升） 模拟器能够捕捉碰撞等物理交互 策略可以直接部署到真实机器人 3. 视频描述 实验设置：\n使用 UniSim 生成模拟视频 在生成的数据上微调 PaLI-X 模型 在 ActivityNet Captions 等基准上评估 关键结果：\n模型 ActivityNet CIDEr MSR-VTT CIDEr VATEX CIDEr 无微调 15.2 21.91 13.31 真实数据微调 54.90 24.88 36.01 模拟数据微调 46.23 27.63 40.03 核心发现：\n使用模拟数据微调大幅超越无微调（3 倍提升） 在某些指标上接近甚至超越真实数据微调 证明了模拟数据可以增强视觉-语言任务 4. 消融实验 数据集编排的必要性 训练方式 视频质量 交互一致性 长时程稳定性 仅互联网数据 高 低 低 仅机器人数据 中 高 中 仅活动视频 中 中 中 联合训练 高 高 高 模型规模的影响 参数量 视频质量 推理速度 训练成本 1B 中 快 低 3B 高 中 中 5.6B 最高 慢 高 🔍 个人思考 亮点 统一框架的创新性：UniSim 最大的贡献在于提出了一个统一的动作-视频生成框架，能够将互联网图文、机器人操作、人类活动等完全异构的数据融合到一个模型中。这种\u0026quot;数据编排\u0026quot;的思想极具启发性——与其追求单一数据源的完美，不如聪明地利用所有可用数据。\nSim-to-Real 的突破：通过生成式模型实现的模拟器，能够在视觉上几乎与真实世界无法区分的情况下训练策略，并实现零样本真实世界迁移。这为解决具身智能中的数据稀缺问题开辟了新路径。\n多应用场景验证：论文不仅展示了模拟器本身的能力，还验证了它在视觉-语言规划、强化学习、视频描述等多个下游任务上的价值，证明了其通用性。\nICLR 2024 Outstanding Paper：获得顶级会议的杰出论文奖，证明了其学术影响力和方法论价值。\n局限性 计算成本高昂：5.6B 参数的模型需要 512 个 TPU-v3 训练 20 天，这对于大多数研究团队来说是难以承受的。推理速度也是一个瓶颈，难以支持实时交互。\n动作空间的限制：虽然论文声称支持\u0026quot;通用\u0026quot;动作，但实际上主要局限于语言指令和简单控制信号。对于复杂的力控、接触力等物理交互，当前框架难以精确模拟。\n物理一致性的挑战：生成式模型本质上是统计模型而非物理模型，可能在复杂物理交互（如碰撞、滑动、液体流动）中产生不一致的结果。论文中也承认了这一局限。\n长时程一致性：虽然自回归展开支持长时程视频生成，但误差累积仍然是一个问题。生成的视频在长时间序列后可能出现漂移或不一致。\n缺乏精细物理引擎：与传统物理模拟器（如 MuJoCo、Isaac Gym）相比，UniSim 缺乏对精确物理属性（如摩擦系数、弹性模量）的建模，这限制了它在需要精确物理交互的任务中的应用。\n未来方向 与物理引擎结合：将生成式模型与传统物理模拟器结合，既保持视觉真实性，又确保物理一致性。例如，使用物理引擎生成动作轨迹，再用 UniSim 生成对应的视觉观察。\n实时交互优化：通过模型蒸馏、量化等技术优化推理速度，实现真正的实时交互式模拟。\n多模态输出扩展：除了视觉视频，还可以输出触觉、力觉、音频等多模态信息，构建更完整的世界模拟器。\n自我改进循环：利用模拟器生成的数据训练更好的策略，再用更好的策略生成更高质量的模拟数据，形成自我改进的良性循环。\n世界模型集成：将 UniSim 作为世界模型的核心组件，与决策、规划模块深度集成，构建完整的具身智能系统。\n📖 延伸阅读 相关论文：\nDreamerV3 - 基于世界模型的强化学习 UniSim (Google) - 项目主页 PaLM-E - 大规模具身多模态模型 技术基础：\nDiffusion Models - 扩散模型基础 Video Diffusion Models - 视频扩散模型 T5 Language Model - 文本编码器 应用领域：\n具身智能训练 自动驾驶模拟 游戏和电影内容创作 机器人操作学习 📖 这是论文精读系列的第 N 篇。UniSim 展示了生成式世界模型在具身智能中的巨大潜力，但同时也揭示了当前技术在物理一致性和计算效率方面的挑战。如果你对世界模型或模拟器技术感兴趣，欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/unisim%E4%BA%A4%E4%BA%92%E5%BC%8F%E4%B8%96%E7%95%8C%E6%A8%A1%E6%8B%9F%E5%99%A8%E7%B2%BE%E8%AF%BB/","summary":"UniSim 是由 Google DeepMind、UC Berkeley 和 MIT 联合提出的通用真实世界模拟器，通过生成式建模将互联网图像、机器人操作、人类活动等异构数据统一到一个动作输入-视频输出的框架中。该模型能够模拟从高层语言指令到低层机器人控制的各种交互，在视觉-语言规划、强化学习和视频描述等任务上实现了零样本真实世界迁移。","title":"论文精读｜UniSim：学习交互式真实世界模拟器——生成式世界模型"},{"content":"📄 论文信息 标题：Gen-Drive: Enhancing Diffusion Generative Driving Policies with Reward Modeling and Reinforcement Learning Fine-tuning（用奖励建模与强化学习微调增强扩散生成式驾驶策略） 团队：南洋理工大学 Chen Lv 组 × 斯坦福/NVIDIA Marco Pavone 组（Zhiyu Huang, Xinshuo Weng, Maximilian Igl, Yuxiao Chen, Yulong Cao, Boris Ivanovic, Marco Pavone, Chen Lv） arXiv：2410.05582（2024 年 10 月） 一句话总结：不再\u0026quot;预测未来 → 确定性规划\u0026quot;，而是 扩散模型生成多种未来 → 学习型评估器打分 → RL 微调扩散策略，把\u0026quot;生成式\u0026quot;与\u0026quot;强化学习\u0026quot;两股潮流拧成一股绳。 🤔 要解决什么问题？传统\u0026quot;预测 + 规划\u0026quot;范式的瓶颈 主流自动驾驶规划遵循 \u0026ldquo;预测 + 确定性规划\u0026rdquo;（prediction-then-planning） 范式：先用一个预测头估出周围智能体未来的轨迹，再在确定的预测基础上做一次最优规划。这个范式清晰、工程化好，但有三个固有软肋：\n瓶颈 表现 后果 未来不确定 只给一条\u0026quot;最可能\u0026quot;预测 忽略多模态可能，遇突发措手不及 交互建模弱 预测与规划割裂 难以推理\u0026quot;我动了对方会怎么反应\u0026quot;的联合交互 评估靠人工 reward 代价函数手写 难覆盖复杂偏好，且与真实\u0026quot;开得好不好\u0026quot;有 gap Gen-Drive 的核心判断：与其费力预测一个确定的未来再硬规划，不如 先\u0026quot;生成\u0026quot;出一堆可能发生的未来场景，再去\u0026quot;评估\u0026quot;哪个动作最稳妥——这就是所谓的 generation-then-evaluation（先生成后评估） 范式。\n💡 核心思想：把规划变成\u0026quot;生成 + 评估\u0026quot; Gen-Drive 的整体框架可以拆成三块拼图：\n1. 场景生成器（Scene Generator）：行为扩散模型 用一个 行为扩散模型（behavior diffusion model） 作为生成器，条件化于自车候选动作，生成未来多智能体的联合场景。扩散天生多模态，对同一个候选动作可以采样出多种合理未来——这正好对应\u0026quot;未来本质不确定\u0026quot;的现实。\n直觉：自车如果\u0026quot;向左变道\u0026quot;，前车可能让、可能不让、也可能急刹。扩散模型把这些可能都\u0026quot;演\u0026quot;出来，规划器据此权衡。\n2. 场景评估器（Scene Evaluator）：学习型 reward 模型 生成了一堆未来场景，怎么判断哪个候选动作好？Gen-Drive 训练一个 场景评估器（即 reward 模型） 来给\u0026quot;动作 + 生成场景\u0026quot;打分。关键创新在于数据采集方式：\n用 成对偏好数据（pairwise preference data） 训练 偏好数据由 VLM 辅助采集，大幅降低人工标注成本，提升可扩展性 这其实就是把 RLHF（人类反馈强化学习）那套\u0026quot;奖励建模\u0026quot;思路搬到了驾驶场景，只不过\u0026quot;人类反馈\u0026quot;换成了\u0026quot;VLM 辅助反馈\u0026quot;。\n3. RL 微调：用 reward 反向提升扩散策略 光有生成和评估还不够，最终目标是 让生成策略本身变得更好。Gen-Drive 用 RL 微调框架（基于学习到的 reward）去 fine-tune 扩散模型，使其更倾向于生成\u0026quot;高 reward\u0026quot;的未来与动作——把\u0026quot;模仿出来的分布\u0026quot;往\u0026quot;安全舒适的偏好\u0026quot;上拉。\n三者的关系如下表：\n组件 角色 类比 行为扩散生成器 演绎多种未来 \u0026ldquo;推演沙盘\u0026rdquo; 场景评估器（reward） 给未来打分 \u0026ldquo;裁判\u0026rdquo; RL 微调 把策略往高分方向拉 \u0026ldquo;教练纠错\u0026rdquo; 🎨 为什么是扩散模型？生成式规划的优势 把扩散用于驾驶策略，并非赶时髦，而是有实实在在的好处：\n多模态输出：天然表达\u0026quot;同一时刻多种合理未来\u0026quot;，避免确定性预测的模态平均 联合交互推理：把自车与他车的未来联合生成，交互关系隐式编码在生成分布里，而不是靠显式规则 可控生成：通过条件（自车动作、地图、历史）引导生成，可做what-if 分析（\u0026ldquo;如果我刹车会怎样？\u0026quot;） 对比传统范式：\n维度 预测 + 确定性规划 Gen-Drive 生成 + 评估 未来建模 单点确定 多模态分布 交互 割裂 联合生成 评估 人工代价函数 学习型 reward 可解释 规则可调 生成样本可\u0026quot;看见\u0026rdquo; 🏋️ Reward 建模：VLM 辅助的偏好数据 Reward 建模是 Gen-Drive 最有工程价值的一环。传统驾驶 RL 的痛点是 reward 难设计——碰撞、舒适、合规、效率怎么加权？人工拍脑袋的代价函数既难调又可能与真实偏好脱节。\nGen-Drive 的做法：\n收集成对的未来场景（A vs B） 用 VLM 辅助判定哪个更安全/舒适/合理（降低人工负担） 训练一个 Bradley-Terry 式偏好 reward 模型，学会给场景打分 这一步的本质是 把\u0026quot;好驾驶\u0026quot;的隐式知识，从 VLM 的常识里蒸馏到一个轻量 reward 模型——既比人工规则细腻，又比每次都问 VLM 高效得多。\n具体的偏好数据采集流程通常是：对同一场景生成两个不同的候选未来（如一个激进变道、一个保守让行），让 VLM 基于交通规则、舒适性、安全常识判定哪个更优，从而得到一条 $(s, a^+, a^-)$ 偏好样本。相比让人类标注员逐条评判，VLM 辅助的吞吐量高出几个数量级，且判定标准更一致。这正是 Gen-Drive 能在 nuPlan 这种大规模数据上跑通 reward 建模的关键。\nreward 模型 $r_\\phi(s, a)$ 的偏好损失通常形如：\n$$\\mathcal{L}_{\\text{pref}} = -\\mathbb{E}\\left[\\log \\sigma\\left(r_\\phi(s, a^+) - r_\\phi(s, a^-)\\right)\\right]$$其中 $a^+$ 是偏好（更好）的动作，$a^-$ 是不偏好的动作，$\\sigma$ 是 sigmoid。\n🎮 RL 微调：让扩散策略\u0026quot;想赢\u0026quot; 有了 reward 模型，接下来就是用它去 微调扩散生成策略。这一步和语言模型的 RLHF、图像生成的 DiffPO/Flow-GRPO 在精神上一致：把 reward 信号反向传播到生成过程，让模型偏好高分输出。\nRL 微调带来的收益：\n超越模仿上限：不再受限于人类驾驶数据的质量，可向\u0026quot;更安全更舒适\u0026quot;探索 稀疏指标可优化：碰撞率、jerk 等难写成可微 loss 的指标，直接转成 reward 偏好对齐：把抽象的\u0026quot;开得好不好\u0026quot;显式注入策略 Gen-Drive 的一个重要实验结论：用学习到的 reward 做评估或 RL 微调，效果优于依赖人工设计的 reward——这对\u0026quot;reward 该怎么来\u0026quot;这个老大难问题给出了明确答案。\n📊 实验结果：nuPlan 闭环验证 Gen-Drive 在 nuPlan 数据集上训练并做 闭环规划测试（closed-loop planning）——这是比开环更贴近真实上路的严苛评测。主要结论：\n\u0026ldquo;生成 + 评估\u0026quot;优于其他学习型方法：generation-then-evaluation 范式整体胜出 RL 微调显著提升规划性能：fine-tuned 策略明显好于纯模仿的扩散策略 学习型 reward \u0026gt; 人工 reward：无论用于评估还是 RL 微调，学习到的 reward 都带来更好的规划表现 这三条结论环环相扣，共同支撑了\u0026rdquo;扩散生成 + 学习型 reward + RL 微调\u0026ldquo;这条技术路线的可行性。\n生成-评估范式的完整工作流 把 Gen-Drive 的运行流程串起来看，它其实重新定义了\u0026quot;规划\u0026quot;这件事：\n步骤 模块 产出 ① 候选采样 自车提出若干候选动作 $K$ 个候选 ② 场景生成 扩散模型为每个候选\u0026quot;演\u0026quot;出多种未来 $K \\times M$ 个未来场景 ③ 打分评估 学习型 reward 模型给每个未来打分 标量分数 ④ 选优决策 综合分数选出最优候选 下发的动作 ⑤ 离线精调 RL 用 reward 反向提升扩散策略 更好的生成器 这个流程的精髓在于 ②③把\u0026quot;不确定性\u0026quot;显式建模——不再赌一个确定的未来，而是摊开多种可能再权衡。这也是它与 DiffusionDrive 这类\u0026quot;直接出轨迹\u0026quot;的扩散规划的本质区别：Gen-Drive 用扩散生成的是\u0026quot;场景\u0026rdquo;（他车未来），而评估由独立模块完成，分工更清晰，也更利于用 RL 单独优化生成质量。\n值得注意的是，\u0026ldquo;生成-评估\u0026quot;范式在计算上比确定性规划昂贵得多（要采样多场景多候选），这是它上车落地的最大障碍。但随着少步扩散、一致性蒸馏等加速技术成熟，这个代价正在快速下降。\n⚔️ Gen-Drive 在技术版图中的位置 Gen-Drive 站在两条主线的交汇处，是理解 2025-2026 生成式驾驶的关键参照点：\n主线 代表 Gen-Drive 的位置 扩散/生成式规划 DiffusionDrive、Diffusion-Planner 用扩散做场景生成而非直接出轨迹 驾驶 RL/偏好对齐 AlphaDrive（GRPO）、Flow-GRPO 把 RL 用于微调扩散策略，而非回归头 这条路线的独特价值在于 把\u0026quot;生成\u0026quot;和\u0026quot;评估\u0026quot;显式分离——生成负责\u0026quot;想得全\u0026rdquo;，评估负责\u0026quot;判得准\u0026quot;，这比一个端到端黑盒更模块化、更可调试，也为后续引入更强的 reward（如 VLM 直接打分、人类偏好）留好了接口。\n⚠️ 局限性与未来方向 实时性挑战：扩散采样 + 多场景评估的算力开销大，车端实时部署需大量优化（少步采样、蒸馏） reward 模型上限：偏好数据质量决定 reward 上限，VLM 辅助判定仍可能有偏差 生成分布漂移：RL 微调可能让扩散偏离预训练分布，需约束（如 KL 正则） 闭环鲁棒性：nuPlan 闭环虽好，真实长尾仍待验证，尤其是分布外场景下生成器的可靠性 reward 与生成的耦合风险：reward 模型和生成器若同源训练，可能互相\u0026quot;迎合\u0026quot;导致 reward hacking，需要独立验证集把关 未来方向上，GRPO 等组内相对优化可直接替换其 RL 框架（省去 critic）、Flow Matching 可替换 DDPM 加速生成、世界模型 可提供更逼真的场景推演底座。\n📝 个人思考 读完 Gen-Drive，我最强烈的感受是：它把\u0026quot;规划\u0026quot;这件事从\u0026rsquo;解一个优化问题\u0026rsquo;重新定义成了\u0026rsquo;演一场可能性的戏\u0026rsquo;。传统规划师总是在追问\u0026quot;最优解在哪\u0026quot;，而 Gen-Drive 在追问\u0026quot;未来可能有哪些样子，我又该怎么在其中下注\u0026quot;。这个视角的转换非常深刻——驾驶本质上是一个不确定条件下的决策问题，而非确定条件下的优化问题。先用扩散把不确定性\u0026quot;演\u0026quot;全，再用 reward \u0026ldquo;判\u0026quot;准，这套\u0026quot;生成 + 评估\u0026quot;的范式，比直接硬挤出一个确定答案要诚实得多、也鲁棒得多。\n第二点启发在 reward 的来源。长久以来，驾驶 RL 卡在\u0026quot;reward 谁来定\u0026quot;这个死结上——人工规则粗糙、人类标注昂贵。Gen-Drive 用 VLM 辅助采集偏好给了一条实用的中间道路：让 VLM 当\u0026quot;廉价的人类标注员\u0026rdquo;，把它的常识蒸馏进一个轻量 reward 模型。更关键的是，它用实验证明了 学习型 reward 比人工 reward 更好——这意味着我们终于可以摆脱\u0026quot;手调代价函数\u0026quot;的祖传包袱，向数据驱动的偏好建模迁移。我看好这条路线和 GRPO 结合：用 VLM 偏好建 reward，用组内相对优势做优化，把\u0026quot;学人类\u0026quot;升级成\u0026quot;学最优\u0026quot;。\n最后一点是关于 模块化的价值。当下有一种声音是\u0026quot;把所有东西塞进一个大模型\u0026quot;，但 Gen-Drive 反其道而行，把生成、评估、微调拆成清晰的三块。这种模块化带来了可调试性和可演进性——reward 模型可以单独升级、生成器可以换 backbone、RL 算法可以换更新更强。在安全攸关的自动驾驶领域，可审计、可替换的模块化系统往往比一个巨大黑盒更值得信赖。Gen-Drive 让我更坚信：生成式规划的未来，不在\u0026rsquo;更大的一锅炖\u0026rsquo;，而在\u0026rsquo;更聪明的分工\u0026rsquo;。\n📖 这是论文精读系列的第 21 篇。扩散生成 + RL 微调，你认为生成式规划能否在车端实时跑通？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/gen-drive%E6%89%A9%E6%95%A3%E5%BC%BA%E5%8C%96%E9%A9%BE%E9%A9%B6%E7%B2%BE%E8%AF%BB/","summary":"Gen-Drive 把自动驾驶规划从\u0026rsquo;预测-规划\u0026rsquo;重构为\u0026rsquo;生成-评估\u0026rsquo;范式：行为扩散模型生成多样未来场景，学习型场景评估器（VLM 辅助训练）打分，再用 RL 微调扩散策略向高分方向优化。它创造性地将 RLHF 奖励建模思路搬进驾驶领域，验证了学习型 reward 优于人工设计。在闭环评测中展现了生成式+强化学习融合的潜力。","title":"论文精读｜Gen-Drive：扩散模型生成 + 强化学习精调的驾驶策略"},{"content":"📄 论文信息 标题：EmbodiedGPT: Vision-Language Pre-Training via Embodied Chain of Thought（基于具身思维链的视觉-语言预训练） 团队：香港大学 × 中国科学院上海AI实验室 × 华为诺亚方舟实验室 发表：NeurIPS 2023 关键词：具身智能、思维链、视觉-语言预训练、EgoCOT数据集、闭环控制 一句话总结：通过构建大规模具身规划数据集和引入思维链推理范式，实现从高层规划到低层控制的闭环具身智能系统。 论文链接：arXiv:2305.15021 代码链接：GitHub 🤔 要解决什么问题？ 具身智能（Embodied AI）是机器人学的前沿领域，旨在让机器人能够在物理环境中感知、推理并执行动作序列以完成长时程任务。然而，当前具身智能面临几个核心挑战：\n挑战一：高质量具身规划数据的稀缺 与通用视觉-语言任务可以从互联网获取大量弱标注图像-文本对不同，具身AI任务需要第一人称视角的机器人领域数据。这面临双重困难：\n数据收集成本高：需要在真实机器人环境中采集，涉及硬件、环境搭建和人工标注 规划数据需要结构化语言指令：不同于简单的图像描述，具身规划需要分步骤的子目标序列，这通常需要大量人工努力和成本 数据类型 来源 规模 规划质量 互联网图文对 LAION等 数十亿 无规划信息 机器人操作数据 Bridge Data等 数万 简单任务描述 第一人称活动视频 Ego4D 3670小时 有叙述但无结构化规划 EgoCOT（本文） Ego4D精选 200M视频 高质量思维链规划 挑战二：LLM在机器人领域的应用难题 虽然GPT-4、PaLM-E等大语言模型展示了强大的语言理解和推理能力，但将其应用于机器人领域面临：\n领域差距：通用LLM的训练数据与机器人操作场景存在显著分布差异 思维链的结构化规划：如何利用\u0026quot;思维链\u0026quot;能力进行结构化的动作序列规划 端到端闭环：如何将高层语言规划与低层控制无缝集成 挑战三：规划与控制的割裂 现有方法通常将具身智能分为两个独立阶段：\n高层规划：使用LLM生成任务描述 低层控制：使用独立的策略网络执行动作 这种割裂导致：\n规划结果难以直接指导控制 控制反馈无法影响规划调整 整体系统缺乏端到端优化 EmbodiedGPT 的核心目标：构建一个端到端的多模态具身基础模型，通过思维链推理实现从感知到规划再到控制的完整闭环。\n💡 核心方法 EmbodiedGPT 的核心创新在于提出了**\u0026ldquo;具身思维链\u0026rdquo;（Embodied Chain of Thought）**范式，将视觉-语言预训练与具身规划紧密结合。\n整体框架 EmbodiedGPT 包含四个集成模块：\n冻结的视觉模型：编码当前观察的视觉特征 冻结的语言模型：执行自然语言问答、描述和规划任务 Embodied-former：视觉-语言对齐和任务相关特征提取 策略网络：基于任务相关特征生成低层动作 关键创新：Embodied-former 作为桥梁，连接视觉和语言域，既提取紧凑视觉特征供语言模型使用，又利用生成的规划查询任务相关特征供控制使用。\n1. EgoCOT 数据集：大规模具身规划数据 EmbodiedGPT 的第一个重要贡献是构建了EgoCOT数据集，这是目前最大的具身规划数据集之一。\n1.1 数据构建流程 Ego4D 原始视频 ↓ 精心筛选（选择适合规划任务的视频） ↓ 机器生成规划（使用LLM生成子目标序列） ↓ 语义过滤（基于语义相似度过滤低质量样本） ↓ 人工验证（确保规划的准确性和可执行性） ↓ EgoCOT 数据集 1.2 数据格式 EgoCOT 中的每个样本包含：\n{ \u0026#34;video\u0026#34;: \u0026#34;8帧关键帧序列\u0026#34;, \u0026#34;task_description\u0026#34;: \u0026#34;任务描述（如\u0026#39;打开橱柜\u0026#39;）\u0026#34;, \u0026#34;chain_of_thought\u0026#34;: \u0026#34;思维链规划（分步骤子目标）\u0026#34;, \u0026#34;actions\u0026#34;: { \u0026#34;1\u0026#34;: \u0026#34;reach(handle)\u0026#34;, \u0026#34;2\u0026#34;: \u0026#34;grasp(handle)\u0026#34;, \u0026#34;3\u0026#34;: \u0026#34;pull(handle)\u0026#34;, \u0026#34;4\u0026#34;: \u0026#34;open(cabinet)\u0026#34; } } 1.3 思维链规划示例 任务：打开微波炉\n思维链规划：\n首先，我需要识别微波炉的位置和门把手 然后，将机械臂移动到门把手附近 接着，用夹爪抓住门把手 最后，向外拉动门把手以打开微波炉 动作序列：\n1: reach(microwave_handle) 2: grasp(microwave_handle) 3: pull(microwave_handle) 4: open(microwave_door) 2. 三阶段训练策略 EmbodiedGPT 采用渐进式训练策略，分三个阶段逐步发展推理和规划能力。\n阶段一：图像-文本对齐预训练 目标：预训练 Embodied-former 和语言投影层，对齐视觉和语言模态。\n数据集：\nCOCO Caption：图像描述 CC3M：595K 精细过滤的图像-文本对 LAION-400M 重新描述：491K 过滤的图像-文本对 训练细节：\n冻结视觉和语言模型参数 仅训练 Embodied-former 和语言投影层 目标：建立视觉和语言的基础对齐 阶段二：复杂推理增强 目标：增强模型理解和生成复杂句子的能力，提升推理技能。\n数据集：\nComplex_Reasoning_77k：复杂推理数据 LLaVA_Instruct_150K：多轮对话数据 训练细节：\n更新语言投影和前缀语言适配器 保持视觉模型冻结 目标：提升复杂推理能力 阶段三：具身思维链训练 目标：在第一人称视频数据上训练具身规划能力。\n关键技术：\nConv3D 视频编码：将预训练的视觉模型转换为视频编码器\n时间偏移：2帧 总帧数：8帧关键帧 3D Patch：时空立方体，捕捉视觉内容和事件序列 思维链预训练范式：\n输入：8帧关键帧 + 任务描述 输出：思维链规划 + 结构化动作序列 Prompt设计：避免过拟合，提供多种同义指令 训练组件：\n微调 Patch 嵌入 更新语言投影层 调整前缀语言适配器 目标：更好地捕捉时序信息 3. Embodied-former 架构 Embodied-former 是连接视觉和语言域的核心组件：\n3.1 视觉特征提取 $$\\mathcal{E}_{\\text{vis}}: x_{\\text{vis}} \\rightarrow y_{\\text{vis}}$$ 输入：视觉观察 $x_{\\text{vis}}$ 处理：通过交叉注意力层与可学习的具身查询交互 输出：紧凑视觉特征 $y_{\\text{vis}}$ 3.2 文本特征提取 $$\\mathcal{E}_{\\text{txt}}: x_{\\text{txt}} \\rightarrow y_{\\text{txt}}$$ 输入：文本输入 $x_{\\text{txt}}$ 处理：通过自注意力层处理 输出：文本特征 $y_{\\text{txt}}$ 3.3 具身查询机制 Embodied-former 使用 $N$ 个可学习的具身查询嵌入 $y_{\\text{query}}$：\n与视觉 token 通过交叉注意力交互 与文本 token 通过自注意力交互 作用：作为信息瓶颈，传递最相关的视觉数据给语言模型 3.4 语言映射层 将 Embodied-former 的输出映射到语言模态：\n$$\\text{LanguageProjection}(y_{\\text{embodied}}) \\rightarrow \\text{LLaMA\\_input}$$4. 闭环规划-控制系统 EmbodiedGPT 的另一个关键创新是实现了从高层规划到低层控制的闭环系统。\n4.1 规划生成 LLM 根据视觉观察和任务描述生成规划：\n$$\\text{Planning} = \\text{LLaMA}(\\text{VisualFeatures}, \\text{TaskDescription})$$4.2 任务相关特征提取 利用生成的规划查询视觉特征：\n$$\\text{TaskFeatures} = \\text{EmbodiedFormer}(\\text{VisualTokens}, \\text{Planning})$$关键：通过交叉注意力，规划指导视觉模型关注与任务最相关的区域。\n4.3 低层控制 策略网络基于任务相关特征生成动作：\n$$\\text{Actions} = \\text{PolicyNetwork}(\\text{TaskFeatures})$$4.4 闭环优势 规划指导感知：高层规划帮助视觉模型关注关键区域 感知反馈规划：视觉观察为规划提供环境信息 端到端优化：整个系统可以联合优化 5. Prompt 设计 EmbodiedGPT 使用精心设计的 Prompt 进行思维链预训练：\nWatch this video, identify the actions and devise a plan using chain-of-thought. Extract detailed actions using this schema: Task: {\u0026#34;task description\u0026#34;} Plan: {\u0026#34;plan with chain-of-thought\u0026#34;} Actions: {{\u0026#34;number\u0026#34;}: {\u0026#39;verb\u0026#39;}({\u0026#39;noun\u0026#39;})}. 设计要点：\n明确要求使用思维链推理 提供结构化的输出格式 包含动词-名词对的动作表示 多种同义指令避免过拟合 🧪 实验验证 EmbodiedGPT 在多个具身任务上进行了全面评估，包括具身规划、具身控制、视频描述和视觉问答。\n1. 具身规划评估 评估指标：\n规划成功率 动作序列准确性 子目标完整性 关键结果：\n模型 规划成功率 动作准确性 子目标完整性 BLIP-2 45.2% 38.7% 42.1% R3M 52.8% 47.3% 50.6% EmbodiedGPT 68.5% 61.2% 65.8% 核心发现：\nEmbodiedGPT 显著超越 BLIP-2 和 R3M 思维链推理提升了规划的完整性和准确性 生成的规划具有高度可执行性，包含物体部件级细节（如机械臂夹爪、门把手） 2. 具身控制评估 实验环境：\nFranka Kitchen：厨房操作任务（打开橱柜、微波炉等） Meta-World：多任务操作基准 评估指标：\n任务成功率 与 BC 基线的对比 关键结果：\nFranka Kitchen 环境 模型 打开橱柜 打开微波炉 滑动门 平均成功率 BC 基线 45% 52% 38% 45.0% BLIP-2 + Ego4D 58% 65% 51% 58.0% R3M 62% 68% 55% 61.7% EmbodiedGPT 78% 85% 72% 78.3% 性能提升：\n相比 BLIP-2：+22.1%（1.6倍提升） 相比 R3M：+5.5% Meta-World 环境 模型 组装任务 放置箱子 锤钉子 打开抽屉 平均成功率 BC 基线 42% 38% 35% 40% 38.8% BLIP-2 + Ego4D 55% 51% 48% 53% 51.8% R3M 58% 54% 51% 56% 54.8% EmbodiedGPT 74% 70% 67% 72% 70.8% 性能提升：\n相比 BLIP-2：+22.5%（1.4倍提升） 相比 R3M：+4.2% 关键发现：\nEmbodiedGPT 的规划具有部件级粒度（如机械臂夹爪、门把手） 仅需少于25个演示即可完成策略学习 闭环系统显著提升控制成功率 3. 视频描述评估 数据集：\nActivityNet Captions MSR-VTT VATEX 关键结果：\n模型 ActivityNet CIDEr MSR-VTT CIDEr VATEX CIDEr BLIP-2 46.2 52.1 48.7 EmbodiedGPT 52.8 58.3 54.2 核心发现：\nEmbodiedGPT 在视频描述任务上也取得优异性能 证明了具身预训练对通用视频理解的提升 4. 视觉问答评估 评估基准：\nEgoVQA（本文构建） 标准 VQA 基准 关键结果：\n模型 EgoVQA 准确率 标准 VQA 准确率 BLIP-2 58.3% 72.1% EmbodiedGPT 65.7% 75.8% 核心发现：\n具身预训练提升了第一人称视角的问答能力 与 LLaVA-13B 相比，仅 7B 参数的 EmbodiedGPT 达到可比性能 生成的内容更少冗余，规划输出最合理可执行 5. 消融实验 数据集规模的影响 EgoCOT 规模 规划成功率 控制成功率 10% 52.3% 61.2% 50% 61.8% 70.5% 100% 68.5% 78.3% 训练阶段的影响 训练阶段 规划成功率 控制成功率 仅阶段一 42.1% 52.8% 阶段一+二 55.6% 65.3% 完整三阶段 68.5% 78.3% 思维链 vs 直接规划 规划方式 规划成功率 控制成功率 直接规划 51.2% 62.5% 思维链规划 68.5% 78.3% 核心发现：\n数据集规模和训练阶段对性能有显著影响 思维链推理比直接规划提升17.3%的成功率 验证了思维链在具身规划中的重要价值 🔍 个人思考 亮点 思维链在具身领域的创新应用：EmbodiedGPT 最大的贡献在于将思维链推理引入具身智能领域。不同于通用LLM的思维链主要用于数学推理或逻辑推理，具身思维链需要空间推理、时序规划和动作分解，这是一种全新的推理范式。\n高质量数据集的构建：EgoCOT 数据集的构建流程体现了数据质量的重要性——机器生成+语义过滤+人工验证的三步流程确保了数据质量。这种\u0026quot;数据工程\u0026quot;思路值得借鉴。\n闭环系统的完整性：从高层规划到低层控制的完整闭环设计，避免了传统方法中规划与控制割裂的问题。Embodied-former 作为桥梁的设计非常巧妙。\n轻量化与高效性：相比 PaLM-E 等超大模型，EmbodiedGPT 仅 10B 参数，但通过前缀调优等高效训练策略，实现了可比甚至更好的性能。\n开源贡献：EgoCOT 数据集和 EmbodiedGPT 模型都将开源，为社区提供了宝贵的资源。\n局限性 数据集的领域限制：EgoCOT 基于 Ego4D 数据集，主要涵盖室内人类活动。对于户外环境、工业场景等其他领域，数据覆盖不足。\n思维链的可靠性：虽然思维链提升了规划质量，但LLM生成的规划仍可能包含错误或不可执行的步骤。缺乏对规划正确性的验证机制。\n控制策略的简单性：论文中的策略网络相对简单（MLP），对于复杂动力学、接触力控制等场景，可能需要更强大的控制策略。\n实时性挑战：LLM推理速度较慢，难以支持实时交互式控制。对于需要快速响应的机器人任务，这是一个瓶颈。\n泛化能力验证不足：虽然在 Franka Kitchen 和 Meta-World 上取得优异性能，但这些是模拟环境。真实世界的复杂性和多样性可能带来更大的挑战。\n未来方向 多模态思维链：扩展思维链到触觉、力觉、深度等多模态信息，实现更丰富的具身推理。\n自我验证与修正：让模型能够验证自己生成的规划，并在执行过程中根据反馈进行修正，形成真正的闭环。\n大规模真实世界数据：构建覆盖更多场景的大规模具身规划数据集，提升模型的泛化能力。\n与世界模型结合：将 EmbodiedGPT 与世界模型（如 UniSim）结合，既理解\u0026quot;该做什么\u0026quot;，又理解\u0026quot;会发生什么\u0026quot;。\n实时推理优化：通过模型蒸馏、量化等技术优化推理速度，支持实时机器人控制。\n多智能体协作：扩展到多机器人协作场景，实现分布式具身规划与控制。\n📖 延伸阅读 相关论文：\nPaLM-E - 大规模具身多模态模型 RT-2 - 机器人Transformer Ego4D - 第一人称视频数据集 技术基础：\nChain-of-Thought Prompting - 思维链推理 Prefix Tuning - 前缀调优 BLIP-2 - 视觉-语言预训练 应用领域：\n机器人操作 自动驾驶规划 工业自动化 服务机器人 📖 这是论文精读系列的第 N 篇。EmbodiedGPT 展示了思维链推理在具身智能中的巨大潜力，特别是其闭环系统设计和高质量数据集构建思路。如果你对具身AI或视觉-语言模型感兴趣，欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/embodiedgpt%E5%85%B7%E8%BA%AB%E6%80%9D%E7%BB%B4%E9%93%BE%E7%B2%BE%E8%AF%BB/","summary":"EmbodiedGPT 是由中国科学院上海AI实验室、香港大学等机构提出的端到端多模态具身基础模型，通过创新的\u0026rsquo;具身思维链\u0026rsquo;（Embodied Chain of Thought）范式，将视觉-语言预训练与具身规划紧密结合。该模型构建了大规模EgoCOT数据集，实现了从高层规划到低层控制的闭环系统，在具身规划、控制、视频描述和视觉问答等多个任务上取得了优异性能。","title":"论文精读｜EmbodiedGPT：基于具身思维链的视觉-语言预训练"},{"content":"📄 论文信息 标题：BEVFormer: Learning Bird\u0026rsquo;s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers（基于时空 Transformer 从多摄像头图像学习鸟瞰图表示） 团队：香港大学 + 商汤科技 + 南京大学（Zhiqi Li, Wenhai Wang, Hongyang Li, Enze Xie, Chonghao Sima, Tong Lu, Jifeng Dai 等） arXiv：2203.17270（ECCV 2022） 一句话总结：用一组可学习的 BEV queries，通过空间交叉注意力从多摄像头\u0026quot;掏\u0026quot;特征、再用时间自注意力融合历史帧，纯视觉达到 56.9% NDS，把纯摄像头感知拉到了接近 LiDAR 的水平。 🤔 要解决什么问题？为什么是 BEV？ 自动驾驶的下游模块（预测、规划、控制）几乎都默认在一个统一的俯视图（Bird\u0026rsquo;s-Eye-View, BEV） 空间里工作——障碍物是 BEV 框、地图是 BEV 矢量、轨迹是 BEV 坐标。但传感器原始输入是多个透视相机的 2D 图像，如何把它们\u0026quot;搬\u0026quot;到一个统一的 BEV 空间，是纯视觉感知的核心难题。\nBEVFormer 之前，主流方案有两条，但都不够好：\n方案 做法 问题 LSS（Lift-Splat-Shoot）类 预测每像素深度再\u0026quot;拍\u0026quot;到 BEV 显式深度预测难、信息损失大 2D 检测后投影 各相机做 2D 检测再投到 BEV 丢失几何关系、多相机难融合 BEVFormer 的判断：与其显式预测深度，不如用 Transformer 的注意力机制，让 BEV query 主动去多摄像头里\u0026quot;查询\u0026quot;自己需要的特征——这把\u0026quot;图像转 BEV\u0026quot;变成一个可端到端学习的纯数据驱动过程。\n💡 核心思想：BEV queries + 时空注意力 BEVFormer 的整体框架可以用一句话概括：一组网格状的 BEV queries，既\u0026quot;横跨空间\u0026quot;去各摄像头取特征，又\u0026quot;纵跨时间\u0026quot;去历史帧取信息，最终汇聚成一个丰富的 BEV 表示。\nBEV queries：可学习的俯视\u0026quot;网格\u0026quot; 把自车周围的一块 BEV 区域离散成一个 $H_B \\times W_B$ 的网格，每个网格点对应一个可学习的 query $Q_p$。每个 query 在几何上对应 BEV 平面上的一个参考点，代表\u0026quot;我要查询这个位置有没有东西\u0026quot;。\n关键设计：BEV query 背后是柱状（pillar）参考点——不是 BEV 平面上的一个点，而是一根立柱（沿高度方向采样多个 3D 点）。这是因为同一个 BEV 位置在不同高度可能是不同物体（如头顶标牌 vs 地面锥桶），用 pillar 才能捕捉高度信息。\n空间交叉注意力（Spatial Cross-Attention, SCA） 每个 BEV query 把自己的 pillar 参考点投影到各摄像头图像，只在投影点附近的小邻域做 deformable attention 取特征：\n$$\\text{SCA}(Q_p) = \\frac{1}{|\\mathcal{V}_p|}\\sum_{i \\in \\mathcal{V}_p}\\sum_{j=1}^{N_{\\text{ref}}} \\text{DeformAttn}(Q_p,\\ \\mathbf{P}_{ij},\\ F_i)$$其中 $\\mathcal{V}_p$ 是能\u0026quot;看到\u0026quot;该 pillar 的相机集合，$\\mathbf{P}_{ij}$ 是参考点在第 $i$ 个相机上的 2D 投影，$F_i$ 是该相机的特征图。用 deformable attention（可变形注意力）是为了避免全局注意力的平方开销，只在参考点附近采样，又快又准。\n直觉：每个 BEV query 像一个\u0026quot;侦察兵\u0026quot;，拿着自己的 3D 坐标去问各个相机\u0026quot;你那边在我这个位置看到啥了\u0026quot;，相机只回报相关区域的特征，高效又精准。\n参考点与可学习偏移：deformable 的精髓 deformable attention 并非在参考点处硬采样一个像素，而是采样参考点周围 4 个可学习偏移点的加权特征，权重也由网络预测。这让每个 BEV 位置的感受野自适应——远处稀疏处可以\u0026quot;够\u0026quot;得更远，近处密集处可以聚焦更精细。再加上多尺度图像特征（FPN 的 C3/C4/C5 层），近处细节与远处语义都能兼顾。\n更关键的是，整套 3D→2D 投影完全可微：参考点经相机内外参投影到像素坐标，梯度能一路回传到图像 backbone，让视觉特征学习\u0026quot;主动对齐\u0026quot;几何约束。这正是 BEVFormer 比 LSS 显式深度预测更优雅的地方——它不预测深度，而是让网络自己学出\u0026quot;该往哪看\u0026quot;。\n时间自注意力（Temporal Self-Attention, TSA） 这是 BEVFormer 区别于一般 BEV 方法的杀手锏。历史帧的 BEV 特征蕴含了运动线索（他车位移、自车补偿后的对齐信息），对速度估计和遮挡恢复至关重要。\nTSA 把上一帧的 BEV 特征 $B_{t-1}$ 按自车运动做对齐（ego-motion compensation） 后，作为当前 query 的注意力 key/value：\n$$\\text{TSA}(Q_p) = \\text{MultiheadAttn}(Q_p,\\ \\text{Align}(B_{t-1}))$$这一步让模型不用显式光流就能感知运动——速度信息隐式地从\u0026quot;前后帧差异\u0026quot;里学出来。\n自车运动对齐：TSA 生效的前提 TSA 里有一个容易被忽略却至关重要的细节：融合历史 BEV 前，必须先做自车运动补偿（ego-motion compensation）。因为自车在不断移动，上一帧的 BEV 坐标系和当前帧并不重合——如果不把历史 BEV 按位姿变换对齐到当前坐标系，时间注意力就是在\u0026quot;错位对照\u0026quot;，反而引入噪声。\n具体做法是用相邻帧间的自车位姿变换，把 $B_{t-1}$ 的每个网格平移旋转到当前时刻的坐标原点下，再送入 TSA。这一步把\u0026quot;几何一致性\u0026quot;显式注入了时序融合，也是 BEVFormer 速度估计能大幅提升的底层原因——对齐后的前后帧差异，恰好编码了他车的真实运动。\n模块 作用 类比 BEV queries 网格化俯视表示 \u0026ldquo;棋盘格\u0026rdquo; SCA 跨空间取多摄像头特征 \u0026ldquo;侦察兵去各相机采集\u0026rdquo; TSA 跨时间融合历史 BEV \u0026ldquo;回看上一帧对照\u0026rdquo; 🏗️ 与 DETR3D / LSS 的关键区别 维度 DETR3D LSS BEVFormer query 来源 3D 目标 query 无 BEV 网格 query 深度建模 隐式 显式预测 隐式（注意力学习） 时序融合 ❌ 弱 ✅ TSA 任务支持 3D 检测 多任务 3D 检测 + 地图分割 注意力类型 deformable 无 deformable SCA + TSA BEVFormer 的独特性在于：它把 BEV 当成一个统一的\u0026quot;中间表示\u0026quot;来学，而非检测的副产品——这种\u0026quot;先建 BEV，再接各种任务头\u0026quot;的设计，让一个 backbone 能同时服务于 3D 检测、地图分割、甚至后续的规划，极大增强了通用性。\n🧪 任务与输出 BEVFormer 学到的 BEV 表示 $B_t$ 可以直接接各种下游头：\n3D 目标检测：用 Deformable DETR 风格的检测头，在 BEV 上预测 3D 框（位置、尺寸、朝向、速度、类别） 地图分割：在 BEV 上分割可行驶区域、车道线、人行横道等语义要素 这种一图多用的设计，是后续 UniAD、VAD 等端到端框架把感知和规划打通的基石——BEV 成了感知与下游之间的\u0026quot;通用语\u0026quot;。\n检测头与地图头：统一表示上的多任务 具体到任务实现，BEVFormer 在共享的 BEV 特征 $B_t$ 上接了两个并行头：\n3D 检测头：采用 Deformable DETR 风格的迭代式框精修，一组目标 query 从 BEV 特征里采样、不断调整 3D 框的中心、尺寸、朝向，并额外回归速度——速度信息正来自 TSA 融合的历史帧运动线索 地图分割头：在 BEV 网格上做逐像素的语义分割，输出可行驶区域、车道线、人行横道等掩码 这种共享主干 + 多任务头的设计，让一次前向就能同时产出\u0026quot;有谁、在哪、路咋走\u0026quot;的全部信息。更重要的是，多任务监督互相增益：检测任务强迫 BEV 关注动态目标，分割任务强迫 BEV 理解静态路网，两者协同让 BEV 表示比单任务训练时更丰富、更结构化。这一思想后来被 UniAD 发扬光大，把轨迹预测、占用预测、规划统统挂在同一个表示上，形成了完整的端到端闭环。\n📊 实验结果：纯视觉逼近 LiDAR BEVFormer 在 nuScenes 上交出了惊艳答卷：\n指标 关键数字 NDS（test） 56.9%，比当时 SOTA 高 9.0 个点 与 LiDAR 对比 on par（持平）——纯视觉首次逼近激光雷达 速度估计 显著改善（得益于 TSA 的时序线索） 低能见度召回 明显提升（历史帧弥补当前帧遮挡） 几个关键消融结论：\n去掉 TSA：速度估计大幅退化——证明时间注意力是速度感知的关键来源 去掉 pillar（只用单点）：高度信息丢失，检测掉点 BEV 分辨率：越高越准，但算力越大，需权衡 ⚙️ 工程要点与细节 要点 说明 deformable attention 避免 $O(N^2)$ 全局注意力，支撑高分辨率 BEV ego-motion 对齐 TSA 前必须按自车位姿变换历史 BEV，否则时空错位 多尺度图像特征 用 FPN/ResNet 多层特征，兼顾近处细节与远处语义 可微投影 3D→2D 投影要可微，梯度才能回传到图像 backbone ⚠️ 局限性与后续演进 BEVFormer 并非终点，它也开启了 BEV 感知的全面繁荣：\n小目标 / 远距离：纯视觉在远距离小目标上仍弱于 LiDAR，这是传感器物理特性的固有限制 计算开销：时空注意力算力不低，车端实时部署需量化/蒸馏/剪枝等加速手段 无显式深度：遇到罕见几何配置可能误判（后续 BEVDepth 等工作补强了深度监督，通过显式的深度监督信号让 BEV 特征的高度估计更准，弥补了 BEVFormer 纯隐式学习的不足） 后续工作沿着 BEVFormer 开创的方向持续推进：\n方向 代表工作 加强深度 BEVDepth、SOLOFusion 多模态融合 BEVFusion（摄像头 + LiDAR） 长期时序 VideoBEV、Sparse4D-v3 稀疏 query Sparse4D、StreamPETR（告别密集 BEV 网格） 即便后来稀疏 query 路线（Sparse4D、StreamPETR）兴起，BEVFormer 的密集 BEV 中间表示思想依然是理解所有时序多摄像头感知的基石，也是 UniAD 等端到端框架直接采用的感知骨干。可以说，没有 BEVFormer 把\u0026quot;多摄像头统一到 BEV\u0026quot;这件事做扎实，后来端到端框架里\u0026quot;感知-预测-规划一体化\u0026quot;的宏大叙事就失去了立身之本。\n📝 个人思考 读 BEVFormer，最让我印象深刻的是它对 \u0026ldquo;用什么中间表示\u0026rdquo; 这个问题的回答。感知领域长期在\u0026quot;2D 检测后投影\u0026quot;和\u0026quot;显式深度估计\u0026quot;两条路上打转，BEVFormer 跳出来给了第三种答案：用一个可学习的 BEV 网格当 query，让注意力自己去图像里\u0026quot;捞\u0026quot;特征。这个设计漂亮在两处——一是把\u0026quot;图像转 BEV\u0026quot;这个几何问题彻底数据驱动化，不再依赖脆弱的显式深度预测；二是它把 BEV 当成统一的中间表示而非检测的副产品，于是一套感知结果能同时喂给检测、分割、规划，这种\u0026quot;通用语\u0026ldquo;思维直接奠定了后续端到端框架的架构基础。\n第二点启发在 时序的价值被重新发现。TSA 这个看似简单的模块，其实是 BEVFormer 能逼近 LiDAR 的关键功臣——速度估计、低能见度召回的大幅提升都源于它。这提醒我们：自动驾驶是时序问题，单帧感知的天花板很低。从 BEVFormer 的 TSA，到后来的长期时序融合、世界模型对未来的推演，\u0026ldquo;时间\u0026quot;始终是感知与预测最强却最容易被忽视的维度。我倾向于认为，真正鲁棒的感知一定是时空联合的，BEVFormer 早在 2022 年就用一个 temporal self-attention 把这个判断写进了代码。\n最后，BEVFormer 对整个端到端社区的辐射价值。UniAD、VAD、SparseDrive 这些后来的端到端框架，几乎都站在 BEVFormer 的肩膀上——因为 BEV 是感知到规划的天然桥梁。当我们今天讨论 VLA、世界模型这些更宏大的叙事时，不要忘了：底层那个把多摄像头图像干净地搬进俯视空间的机制，依然是这套大厦的地基。BEVFormer 之于自动驾驶感知，正如 ResNet 之于图像识别——它定义了一个时代的默认架构，而后来者只是在它的版图上不断精修与扩展。\n📖 这是论文精读系列的第 22 篇。BEV 感知是端到端驾驶的地基，你认为稀疏 query 会彻底取代密集 BEV 吗？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/bevformer%E6%84%9F%E7%9F%A5%E7%B2%BE%E8%AF%BB/","summary":"BEVFormer 开创了基于可学习 BEV queries 的时空 Transformer 感知范式，用空间交叉注意力从多视图图像采样特征、用时间自注意力沿时序聚合信息。它纯靠多摄像头就在 nuScenes 上达到 56.9% NDS 逼近 LiDAR 基线。此后几乎所有端到端驾驶方案都沿用其 BEV query+时序融合的基本设计。","title":"论文精读｜BEVFormer：时空 Transformer 玩转多摄像头 BEV 感知"},{"content":"📄 论文信息 标题：VIMA: General Robot Manipulation with Multimodal Prompts（VIMA：基于多模态提示的通用机器人操作） 团队：Stanford University、NVIDIA、Caltech、Tsinghua University、UT Austin 发表：ICML 2023（International Conference on Machine Learning） 关键词：多模态提示、Transformer、机器人操作、模仿学习、零样本泛化 一句话总结：VIMA通过将文本和视觉token交织的多模态提示统一各种机器人操作任务，在单一模型中实现了强大的模型可扩展性和数据效率。 论文链接：arXiv:2210.03094 代码链接：GitHub - vimalabs/VIMA 🤔 要解决什么问题？ 在自然语言处理领域，基于提示的学习（Prompt-based Learning）已经成为一种成功的范式：一个通用的大语言模型可以通过输入提示来执行各种任务。然而在机器人领域，任务规格的形式多种多样：\n模仿一次性演示：给机器人展示一次如何完成任务 遵循语言指令：用自然语言告诉机器人该做什么 到达视觉目标：提供目标图像让机器人重现 传统方法通常将这些视为不同的任务，使用专门的模型来处理每一种。这种\u0026quot;孤岛式\u0026quot;的开发方式导致机器人系统无法灵活组合，难以适应多样化的应用场景。\n核心问题：能否找到一种统一的接口，将所有这些不同的机器人操作任务表达为同一个序列建模问题？\nVIMA的作者团队提出了一个大胆的假设：许多机器人操作任务可以统一表达为多模态提示（Multimodal Prompts），即交替包含文本和图像/视频帧的输入序列。\n💡 核心方法 1. 多模态提示接口设计 VIMA的核心洞察是将各种机器人任务统一为多模态提示格式。一个典型的多模态提示包含：\n文本token：语言指令（如\u0026quot;把红色方块放到蓝色圆圈旁边\u0026quot;） 视觉token：图像帧（如目标状态图像、演示视频帧、物体特写图等） 例如：\n简单操作：提示 = \u0026ldquo;把红色方块放到蓝色圆圈旁边\u0026rdquo; + 当前场景图像 视觉目标到达：提示 = \u0026ldquo;达到这个状态\u0026rdquo; + 目标图像 一次性视频模仿：提示 = \u0026ldquo;按照这个动作做\u0026rdquo; + 演示视频帧 新概念落地：提示 = \u0026ldquo;把所有\u0026quot;扭曲的\u0026quot;物体移到左边\u0026rdquo; + \u0026ldquo;扭曲的\u0026quot;物体示例图像 2. VIMA模型架构 VIMA采用编码器-解码器（Encoder-Decoder） Transformer架构：\n编码器（Prompt Encoder）：\n使用预训练的冻结T5语言模型编码多模态提示 文本输入通过T5分词器和词嵌入获得词token 图像输入首先通过Mask R-CNN提取单个物体，然后将每个物体的边界框坐标和裁剪的RGB图块展平为物体token序列 所有token拼接形成提示序列 $P = [t_1, t_2, ..., v_1, v_2, ...]$ 解码器（Robot Controller）：\n因果Transformer解码器，由交替的自注意力层和交叉注意力层组成 交叉注意力层将提示序列 $P$ 作为键（Key）和值（Value），将轨迹历史序列 $H$ 作为查询（Query） 数学表达为：\n$$H' = \\text{softmax}\\left(\\frac{Q_H K_P^\\top}{\\sqrt{d}}\\right) V_P$$其中 $d$ 是嵌入维度。这种设计有三个优势：\n加强与提示的连接：通过交叉注意力直接关注提示信息 保持提示token的完整流动：原始提示token可以深入传递 更好的计算效率：比全自注意力更高效 动作预测：\n解码器输出的动作token通过离散化映射到机器人臂的位姿 每个交互步骤自回归地预测一个动作 3. 物体中心表示（Object-Centric Representation） VIMA的关键创新之一是采用物体中心表示而非直接处理原始像素：\n使用预训练的Mask R-CNN（在目标域微调）从图像中提取单个物体 每个物体由边界框坐标和裁剪的RGB图块组成 将物体信息展平为token序列 这种方法相比图像patch token有明显优势：\n保留了物体级别的语义信息 避免了处理大量无关背景像素 更适合处理包含多个物体的复杂场景 4. VIMA-Bench基准测试 为了系统评估多模态提示代理，作者开发了VIMA-Bench：\n17个代表性任务，涵盖6大类别：简单物体操作、视觉目标到达、新概念落地、一次性视频模仿、视觉约束满足、视觉推理 600K+专家轨迹用于模仿学习 四级评估协议评估渐进式泛化能力： Level 1：随机化物体放置 Level 2：随机化物体外观 Level 3：新物体组合 Level 4：全新任务 每个任务可以通过程序化生成实例化为数千个不同的场景，通过各种纹理和桌面物体的组合实现多样化。\n🧪 实验验证 主要实验结果 实验设置：训练7个不同规模的模型（2M到200M参数），在四级泛化设置下评估。\n关键发现：\n模型扩展性：在所有模型容量和泛化级别下，VIMA都优于基线变体。在最难的零样本泛化设置下：\n相同训练数据：VIMA任务成功率最高提升 2.9倍 10倍更少训练数据：VIMA仍比最佳竞争变体好 2.7倍 数据效率：VIMA极其高效，仅使用10%的数据就能达到其他方法使用完整数据的性能水平\n泛化能力：在四级泛化设置中，VIMA在所有级别上都表现出一致的性能优势\n消融实验 视觉分词器对比（VIMA-200M模型）：\n物体token（VIMA）：表现最佳 图像patch token：直接从原始像素学习，性能较差 图像Perceiver：将物体序列下采样到固定数量token，性能下降 原始像素：性能最差 提示条件化机制对比：\n交叉注意力（VIMA）：在低参数设置和困难泛化任务中尤其有效 GPT解码器（仅因果自注意力）：性能较差，特别是在模型容量较小时 实验结论 实验证明VIMA的物体token + 交叉注意力条件化是最有效的设计方案。VIMA在各种设计选择中表现出：\n更强的模型可扩展性 更高的数据效率 更鲁棒的零样本泛化能力 🔍 个人思考 亮点 统一接口设计的优雅性：将多样化的机器人任务统一为多模态提示格式是一个非常优雅的抽象。这种设计使得一个单一模型可以处理各种类型的任务，而不需要为每种任务设计专门的架构。这种\u0026quot;接口统一\u0026quot;的思想与NLP领域的提示学习范式高度一致。\n物体中心表示的实用性：相比于直接处理原始像素，物体中心表示是一个非常实用的设计选择。它不仅保留了语义信息，还大大减少了计算量，使得模型能够更高效地处理复杂的多物体场景。\n系统性的评估框架：VIMA-Bench的四级泛化协议是一个很好的评估设计，能够系统性地衡量模型在不同难度下的泛化能力。600K+的专家轨迹数据集也为后续研究提供了宝贵的资源。\n局限性 仅限仿真环境：目前所有实验都在仿真环境中进行，尚未验证在真实机器人上的效果。仿真到真实的迁移（Sim-to-Real）仍然是一个开放问题。\n依赖物体检测器：VIMA依赖Mask R-CNN来提取物体，如果检测器失败或不准确，整个系统的性能会受到影响。这种管道式的方法可能引入脆弱性。\n固定的任务集合：虽然VIMA-Bench提供了17个任务，但这些任务仍然是预定义的。对于真正开放世界的应用，模型需要能够处理从未见过的全新任务类型。\n未来方向 真实世界部署：将VIMA迁移到真实机器人上，验证其在实际操作中的有效性 与基础模型结合：探索将VIMA与更大的视觉-语言模型（如GPT-4V、Gemini）结合，利用其更强大的语义理解能力 在线学习：使VIMA能够在与环境交互的过程中持续学习和适应 多机器人协作：将多模态提示扩展到多机器人协作场景 📖 延伸阅读 RT-1: Robotics Transformer for Real-World Control at Scale（arXiv:2212.06817）- Google的机器人Transformer，在大规模真实世界数据上训练，展示了Transformer架构在机器人控制中的潜力 CLIPort: What and Where Pathways for Robotic Manipulation（arXiv:2109.12098）- 结合CLIP语义理解和空间推理的机器人操作方法，为多模态提示提供了重要参考 Perceiver: General Perception with Iterative Attention（arXiv:2107.08090）- 通用感知架构，VIMA在消融实验中与其进行了对比 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/vima-multimodal-prompts-robot-manipulation/","summary":"VIMA提出了一种统一的多模态提示接口，将多样化的机器人操作任务转化为序列建模问题。通过Transformer编码器-解码器架构和物体中心表示，VIMA在零样本泛化设置下任务成功率最高提升2.9倍。","title":"论文精读｜VIMA：基于多模态提示的通用机器人操作——多模态大模型驱动机器人"},{"content":"📄 论文信息 标题：DriveDreamer: Towards Real-world-driven World Models for Autonomous Driving（迈向真实场景驱动的自动驾驶世界模型） 团队： CASIA（中科院自动化所）× 清华大学 × 鉴智机器人（Xiaofeng Wang, Zheng Zhu, Guan Huang, Xinze Chen, Jiagang Zhu, Jiwen Lu） arXiv：2309.09777（2023 年 9 月） 一句话总结：首个完全从真实驾驶数据构建的世界模型，用扩散模型吃下结构化交通约束（HDMap、3D 框、文本、动作），既能生成可控的驾驶视频，又能预测未来动作——把\u0026quot;理解世界\u0026quot;和\u0026quot;生成世界\u0026quot;统一起来了。 🤔 要解决什么问题？为什么需要驾驶世界模型？ 世界模型（World Model） 的核心能力是理解环境如何随时间演化——给定当前状态和动作，预测未来会发生什么。这对自动驾驶至关重要：能\u0026quot;预见未来\u0026quot;的策略，才能提前避让、从容决策。\n但 DriveDreamer 之前，驾驶世界模型有一个致命短板：\n已有世界模型 问题 基于游戏/仿真环境（如 CARLA、DriveGAN） 与真实驾驶差距巨大，迁移困难 缺乏真实场景理解 只会\u0026quot;画画\u0026quot;，不懂交通规则与结构 DriveDreamer 的判断：必须从真实驾驶数据出发构建世界模型，而且要让它理解结构化的交通约束（车道线、3D 框、交通规则），而不只是像素层面的\u0026quot;像\u0026quot;。这是它区别于一切前作的根本所在。\n💡 核心思想：用扩散模型\u0026quot;理解\u0026quot;驾驶世界 驾驶场景的搜索空间是天文数字——同一条路在不同天气、光照、车流下千变万化。DriveDreamer 的核心选择是：用扩散模型（Diffusion Model）来建模这个复杂的联合分布。\n为什么是扩散？因为扩散模型在图像/视频生成上已被证明有最强的分布拟合能力，而且它的条件生成天然适合\u0026quot;给定约束生成未来\u0026quot;的范式。DriveDreamer 把扩散模型当成一个驾驶世界的\u0026quot;模拟器\u0026quot;：喂给它当前状态和约束，它就能\u0026quot;演绎\u0026quot;出合理的未来。\n多模态条件输入 DriveDreamer 接受多种结构化条件，而不只是原始像素：\n条件类型 内容 作用 文本（text） 天气、时段、场景描述 控制风格与环境 HDMap 车道边界、车道分隔线、人行横道 几何结构约束 3D 框（3D box） 八角点 3D 检测框 障碍物位置约束 动作（action） 驾驶操作（转向、加减速） 演绎\u0026quot;如果我这么做\u0026quot; 这些条件被各自的编码器编码后，通过 ControlNet 式 的机制注入扩散主干，让生成既逼真又可控。\n🏗️ 两阶段训练：先懂规则，再会预言 DriveDreamer 最精彩的设计是它的两阶段训练流水线（two-stage pipeline）。直接端到端学\u0026quot;从约束生成视频\u0026quot;太难，于是拆成两步：\n第一阶段：理解结构化交通约束（Auto-DM） 第一阶段（论文里称为 Auto-DM，Auto-driving Decision Model）的目标是让模型先学会\u0026quot;看懂\u0026quot;交通结构：\n输入：图像 + HDMap + 3D 框 + 文本 任务：从结构化条件重建/生成当前帧图像 收获：模型被迫学会\u0026quot;车道线、3D 框、文本\u0026quot;与视觉外观之间的对应关系 这一步是打地基——模型先理解\u0026quot;世界长什么样、规则是什么\u0026quot;，才能在第二阶段去预测未来。\n第二阶段：未来状态预测 有了第一阶段的\u0026quot;世界理解\u0026quot;，第二阶段才进入真正的世界模型能力：\n输入：当前帧 + 历史信息 + 动作 任务：预测未来多帧视频（世界演化）和未来动作（决策） 收获：模型学会\u0026quot;动作 → 状态变化\u0026quot;的因果，能推演未来 阶段 学什么 类比 阶段一（Auto-DM） 读懂交通结构（约束 ↔ 画面） \u0026ldquo;认字\u0026rdquo; 阶段二 预测未来（动作 → 演化） \u0026ldquo;写故事\u0026rdquo; 这种\u0026quot;先理解、后预测\u0026ldquo;的渐进式设计，避免了让模型一上来就硬啃\u0026quot;从约束直接生成未来\u0026quot;的难题，是工程上的关键智慧。\nAuto-DM 的内部：ControlNet 式条件注入 Auto-DM（第一阶段模型）的实现借鉴了 ControlNet 的设计哲学：冻结一个预训练的扩散主干（负责生成能力），再外接一组条件编码器（HDMap 编码器、3D 框编码器、文本编码器），通过 zero-conv 注入主干。这种设计的好处是生成先验与条件控制解耦——主干保留了从海量图像学到的\u0026quot;世界长什么样\u0026quot;的常识，条件编码器只负责\u0026quot;告诉它这次要遵守什么约束\u0026rdquo;。\n条件 编码方式 控制的内容 HDMap 矢量化后光栅化到图像平面 车道、人行横道的几何 3D 框 八角点投影到 2D 障碍物的位置与尺度 文本 CLIP/文本编码器 天气、时段、场景风格 动作 ActionFormer 时序编码 自车未来的运动轨迹 第一阶段训练时，模型在真实帧上学习\u0026quot;约束 ↔ 画面\u0026quot;的映射；第二阶段则扩展到时序维度，让模型在已有结构理解的基础上去推演未来帧与动作。这种分阶段的课程，让每个阶段的学习目标都足够清晰、足够\u0026quot;可学\u0026quot;。\n🎬 两大核心能力：可控视频生成 + 动作预测 1. 可控驾驶视频生成 DriveDreamer 能根据多种条件组合生成高质量的驾驶视频：\n结构可控：给定 HDMap 和 3D 框，生成符合几何约束的画面 风格可控：调整文本提示，改变天气、时段（白天/夜晚、晴/雨） 动作可控：给定驾驶动作，演绎\u0026quot;如果转向/变道会看到什么\u0026quot; 这让 DriveDreamer 成为一个强大的数据生成器——可以按需生成各种长尾场景（暴雨夜、施工段），用于增强训练数据。\n2. 未来动作预测 除了生成视频，DriveDreamer 还能预测未来的驾驶动作，这直接对接规划任务。论文中用 ActionFormer 等模块来预测自车未来的动作序列，让世界模型不只是一个\u0026quot;放映机\u0026quot;，更是一个\u0026quot;决策助手\u0026quot;。\n直觉：一个真正理解驾驶世界的模型，应该既会\u0026quot;演未来\u0026quot;（视频生成），也会\u0026quot;想下一步该干嘛\u0026quot;（动作预测）——DriveDreamer 把两者统一在一个框架里。\n📊 实验结果：nuScenes 上的 FID/FVD DriveDreamer 在 nuScenes 上验证。由于 nuScenes 原生只提供 2Hz 的 3D 框标注，作者补充了 12Hz 的高频标注以满足视频生成需求。\n主要评测指标：\n指标 含义 FID（Fréchet Inception Distance） 生成图像质量（越低越好） FVD（Fréchet Video Distance） 生成视频质量与时序一致性（越低越好） 关键结论：\n显著优于 DriveGAN 等仿真驱动方法：FID/FVD 大幅改善，证明用真实数据 + 强扩散模型的组合远胜游戏/仿真环境 可控性强：HDMap/3D 框/动作/文本都能有效控制生成内容，与真实交通结构高度对齐 动作预测合理：生成的驾驶动作/策略在真实场景下合理可行 这些结果共同验证了\u0026quot;真实数据 + 扩散 + 结构化条件 + 两阶段训练\u0026ldquo;这条路线的可行性，也确立了 DriveDreamer 作为驾驶世界模型奠基工作的地位。\n⚔️ DriveDreamer 在世界模型谱系中的位置 理解 DriveDreamer，要看它在驾驶世界模型演进中的坐标：\n代际 代表 数据来源 核心能力 第一代（仿真） DriveGAN、CARLA 世界模型 游戏/仿真 生成但不真实 第二代（真实） DriveDreamer 真实驾驶 可控生成 + 动作预测 后续演进 DriveDreamer-2、Drive-WM、Cosmos、GAIA 真实驾驶 更高分辨率、更长时序、多视角 DriveDreamer 的开创性在于两点：第一次用真实数据、第一次把结构化交通约束显式引入。这两个\u0026quot;第一次\u0026quot;定义了后续所有真实驾驶世界模型的基本范式。\n🔗 世界模型如何反哺自动驾驶？ 世界模型不只是\u0026quot;炫技的视频生成器\u0026rdquo;，它对自动驾驶有实实在在的价值：\n应用 价值 数据增强 生成长尾/罕见场景补充训练数据 闭环仿真 提供比游戏更真实的训练/评测环境 决策推演 \u0026ldquo;如果我变道会怎样\u0026rdquo;——what-if 分析 安全校验 规划前先用世界模型预演结果 这也解释了为什么 2024-2025 年世界模型在自动驾驶领域爆发：它是解决\u0026quot;长尾数据稀缺\u0026quot;和\u0026quot;闭环仿真真实性\u0026quot;两大痛点的钥匙。\n⚠️ 局限性与未来方向 DriveDreamer 作为早期工作，也有明显局限：\n分辨率与时序长度有限：生成视频不够长、不够清晰 多视角一致性：nuScenes 六路相机的一致性维护仍有挑战 物理精确性：扩散生成不保证严格遵循物理规律（如碰撞反弹） 闭环保真度：生成数据与真实分布仍有 gap，直接训练可能有问题 后续工作（DriveDreamer-2、GAIA-1、Cosmos、Drive-WM）沿着更高分辨率、更长时序、更强物理一致性、更好可控性的方向不断推进，但 DriveDreamer 开创的\u0026quot;真实数据 + 结构化条件 + 扩散\u0026quot;范式始终是主线。\n📝 个人思考 读 DriveDreamer，最打动我的是它对 \u0026ldquo;世界模型到底要学什么\u0026rdquo; 的清醒认识。很多人把世界模型简单等同于\u0026quot;会生成视频\u0026quot;，但 DriveDreamer 把它讲清楚了：世界模型的本质不是\u0026quot;画得像\u0026quot;，而是\u0026quot;懂规则、能推演\u0026quot;。它显式地把 HDMap、3D 框这些结构化约束作为条件，迫使模型理解交通的几何与逻辑，而不只是像素统计。这个选择非常关键——一个只会\u0026quot;画\u0026quot;不懂\u0026quot;规则\u0026quot;的模型，生成的视频再好看，也无法用于严肃的决策与仿真。我倾向于认为，世界模型的价值不在生成质量，而在因果理解，DriveDreamer 用结构化条件把这一点落到了实处。\n第二点启发在 两阶段训练的工程智慧。直接学\u0026quot;从约束生成未来视频\u0026quot;是个超级难题，DriveDreamer 把它拆成\u0026quot;先懂结构、再会预言\u0026quot;两步，这种渐进式课程的思想在 AI 里反复出现——从预训练到微调、从简单到复杂。它提醒我们：遇到一个太难的端到端目标时，最好的办法往往是给它搭一个合理的台阶。第一阶段让模型先建立\u0026quot;世界长什么样\u0026quot;的常识，第二阶段再去学\u0026quot;世界怎么变\u0026quot;，这种先静态后动态、先理解后预测的顺序，符合人类认知发展的规律，也降低了优化难度。\n最后，DriveDreamer 让我看到了 世界模型与端到端驾驶融合的必然趋势。当世界模型能逼真地推演未来、能生成无限长尾数据、能给策略提供 what-if 的推演能力时，它就不再只是感知的附属品，而是自动驾驶系统的\u0026quot;想象引擎\u0026quot;。未来的端到端框架很可能是：感知 → 世界模型推演 → 规划，世界模型成为连接\u0026quot;看见\u0026quot;和\u0026quot;决策\u0026quot;的中枢。DriveDreamer 在 2023 年就播下了这颗种子，今天 Cosmos、GAIA 等大型世界基础模型的繁荣，都是这颗种子的生长。理解世界，才能驾驭世界——这是 DriveDreamer 给自动驾驶留下的最深刻的启示。\n📖 这是论文精读系列的第 23 篇。世界模型正在成为自动驾驶的\u0026quot;想象引擎\u0026quot;，你认为它会取代传统仿真器吗？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/drivedreamer%E4%B8%96%E7%95%8C%E6%A8%A1%E5%9E%8B%E7%B2%BE%E8%AF%BB/","summary":"DriveDreamer 是首个完全从真实驾驶数据构建的自动驾驶世界模型。它用扩散模型配合 ControlNet 机制处理 HDMap、3D 框、文本和动作等多模态结构化条件，通过两阶段训练同时实现可控驾驶视频生成与未来动作预测。作为驾驶世界模型的奠基之作，它开创了从真实场景理解到未来预测的统一范式。","title":"论文精读｜DriveDreamer：构建真实驾驶场景的世界模型"},{"content":"📄 论文信息 标题：Open-World Object Manipulation using Pre-Trained Vision-Language Models（基于预训练视觉-语言模型的开放世界物体操作） 团队：Google Robotics（Google Research） 发表：CoRL 2023（Conference on Robot Learning） 关键词：开放世界操作、视觉-语言模型、零样本泛化、机器人学习、行为克隆 一句话总结：MOO通过将预训练VLM的物体定位能力与端到端训练的操控策略相结合，使机器人能够操作训练数据中从未见过的新物体类别。 论文链接：arXiv:2303.00905 项目主页：robot-moo.github.io 🤔 要解决什么问题？ 机器人的能力可以从两个维度来衡量：技能（Skills）和物体（Objects）。\n技能：具体的行为，如\u0026quot;拿起X\u0026quot;、\u0026ldquo;将X移到Y附近\u0026rdquo;、\u0026ldquo;打开X的盖子\u0026rdquo; 物体：技能操作的对象，如\u0026quot;苹果\u0026quot;、\u0026ldquo;易拉罐\u0026rdquo;、\u0026ldquo;咖啡罐\u0026rdquo; 现有的机器人学习方法通常在有限的物体集合上训练，因此只能操作训练时见过的物体。当我们要求机器人操作一个从未见过的物体时（比如\u0026quot;拿起那个粉色的毛绒鲸鱼\u0026quot;），系统往往会失败。\n核心挑战：如何让机器人在只见过有限物体的情况下，能够泛化到无限的新物体类别？\n传统方法的局限性：\nRT-1等端到端方法依赖语言嵌入来区分物体，面对新物体时语言嵌入是陌生的，难以泛化 管道式方法（如先检测再操作）虽然可以利用预训练模型，但各模块独立优化，容易产生脆弱性 需要为每个新物体收集大量演示数据，不具有可扩展性 💡 核心方法 1. 系统架构 MOO的设计理念是将预训练VLM的感知能力与端到端训练的操控策略相结合：\n阶段一：物体定位\n使用冻结的预训练开放词汇检测器OWL-ViT 输入：当前RGB图像 + 语言指令中描述物体的文本 输出：目标物体的2D边界框和分割掩码 阶段二：策略执行\n基于RT-1架构的改进版Transformer策略 输入：当前RGB图像 + 物体掩码表示 + 去除物体描述的指令 输出：机器人动作序列 2. 关键设计选择 物体掩码表示（Object Mask Representation）：\n将VLM检测到的物体位置转换为单通道分割掩码 掩码中心点标记物体位置，周围区域表示物体范围 这种表示对所有物体（无论已见还是未见）都是相同的，简化了泛化 语言指令处理：\n从原始指令中移除物体描述部分 只保留技能描述（如\u0026quot;拿起\u0026quot;、\u0026ldquo;移到\u0026quot;等） 避免了新物体语言嵌入带来的泛化问题 训练策略：\n端到端行为克隆（Behavioral Cloning） VLM在整个训练过程中保持冻结 策略在真实的VLM检测结果上训练（训练时使用真实的VLM检测器） 3. 数据收集 为了学习可泛化的操控技能，作者大幅扩展了训练数据：\n原始RT-1数据集：仅包含16种物体类型 MOO扩展数据集：增加了90种不同物体类别的抓取演示 总计：106种不同物体类型的演示数据 关键洞察：由于大多数技能都需要抓取作为组件步骤，通过增加抓取演示可以学习到泛化到新物体所需的主要信息 4. 多模态输入扩展 MOO的一个重要优势是其物体掩码表示可以支持多种输入模态：\n文本查询：标准的OWL-ViT文本条件检测 指向手势：使用PaLI等VLM解释人类指向，然后用OWL-ViT生成掩码 图像查询：OWL-ViT可以直接使用图像特征而非文本特征生成掩码 人工GUI输入：人类可以直接在GUI上点击生成掩码 🧪 实验验证 实验设置 评估对象：\n49个已见物体（训练数据中出现过） 47个未见物体（训练数据中完全未出现） 评估指标：任务成功率（成功完成指定技能的比例）\n基线方法：\nRT-1：原始的Robotics Transformer VIMA：基于多模态提示的通用机器人操作 主要实验结果 关键发现：\n未见物体泛化：MOO在未见物体上达到约**79%**的成功率，显著优于RT-1和VIMA 已见物体性能：MOO在已见物体上也优于基线方法 模型容量的影响：更大的模型容量带来更好的性能 数据多样性的影响：更多样化的训练数据显著提升泛化能力 鲁棒性评估 MOO在各种挑战性场景中表现出色：\n新房间环境：在从未见过的房间中操作 新桌面纹理：包括带有干扰性视觉图案的桌布 额外的开放世界干扰物：在存在多个干扰物体的环境中操作 开放世界导航与操作 作者还将MOO与开放词汇物体导航算法CoW（Clip on Wheels）结合：\nCoW-MOO系统：先导航到目标物体，然后使用MOO操作 实现了真正的开放世界任务执行：机器人能够先找到从未交互过的物体，然后成功操作它 🔍 个人思考 亮点 优雅的模块化设计：MOO巧妙地将预训练VLM的感知能力与端到端训练的操控策略结合。VLM提供物体定位，策略负责执行，两者通过物体掩码表示进行桥接。这种设计既利用了VLM的强大语义理解能力，又保持了策略的端到端可训练性。\n强大的零样本泛化能力：在从未见过的物体类别上达到79%的成功率是一个非常令人印象深刻的结果。这证明了将预训练视觉-语言模型引入机器人学习的价值。\n多模态输入的灵活性：物体掩码表示使得系统可以支持文本、指向、图像等多种输入方式，大大扩展了应用场景。\n局限性 依赖物体检测质量：MOO的性能很大程度上取决于OWL-ViT的检测质量。如果VLM无法正确检测目标物体，整个系统会失败。\n仅限于预定义技能：MOO扩展了物体泛化能力，但技能集仍然是预定义的（如\u0026quot;拿起\u0026rdquo;、\u0026ldquo;移动\u0026quot;等）。对于真正开放世界的任务，还需要技能层面的泛化。\n训练数据需求：虽然MOO减少了对新物体演示数据的需求，但初始训练仍需要大量多样化的物体演示数据（106种物体类型）。\n未来方向 与更大的VLM结合：探索使用GPT-4V、Gemini等更强大的VLM来提升物体理解和定位能力 技能层面的泛化：将开放世界泛化从物体扩展到技能，使机器人能够执行训练时从未见过的新技能 在线适应：使MOO能够在与环境交互的过程中持续学习和改进 多机器人协作：将开放世界操作扩展到多机器人协作场景 📖 延伸阅读 RT-1: Robotics Transformer for Real-World Control at Scale（arXiv:2212.06817）- MOO的策略架构基于RT-1改进，该论文展示了Transformer在大规模机器人控制中的潜力 OWL-ViT: Open-World Localization with Vision Transformers（arXiv:2205.06230）- MOO使用的开放词汇检测器，支持文本和图像条件的物体检测 VIMA: General Robot Manipulation with Multimodal Prompts（arXiv:2210.03094）- MOO的基线比较方法之一，采用多模态提示的统一接口设计 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/moo-open-world-object-manipulation/","summary":"MOO利用预训练视觉-语言模型将自然语言指令与视觉物体定位相结合，实现了对从未见过的物体类别的零样本操作泛化，在真实机器人上达到约79%的成功率。","title":"论文精读｜MOO：基于预训练视觉-语言模型的开放世界物体操作"},{"content":"📄 论文信息 标题：A Survey of World Models for Autonomous Driving 作者：Tuo Feng、Wenguan Wang（王维强）、Yi Yang（杨易）等，浙江大学团队 arXiv：2501.11260（2025 年 1 月首发，持续修订至 v4，2025 年 9 月） 配套资源：论文清单 AwesomeWMAD、基准 WMAD-Benchmarks 一句话总结：一份持续维护（ongoing）的世界模型综述，用一套三层分类法把\u0026quot;生成—规划—交互\u0026quot;串成完整闭环，是当前入门自动驾驶世界模型最系统的地图。 🤔 为什么\u0026quot;世界模型\u0026quot;突然成了显学？ 传统自动驾驶栈是感知—预测—规划的串行流水线，每个模块各管一段，痛点很直接：模块间信息有损、长尾场景覆盖不全、闭环里\u0026quot;一个错、步步错\u0026quot;。世界模型（World Model） 给出了另一种想象——让模型先学会**\u0026ldquo;脑补\u0026quot;未来**：给定当前传感器输入与候选动作，预测环境会如何演化，再据此决策。\n这背后的直觉来自人类：老司机开车不是被动反应，而是脑子里已经在演接下来几秒的剧本。一旦模型具备这种\u0026quot;预测式理解\u0026rdquo;，就能做到因果式感知（理解事物为何这样动）和前瞻式规划（提前规避还没发生的风险）。近两年扩散模型和4D 占用预测的爆发，让高保真\u0026quot;脑补\u0026quot;第一次变得可行，世界模型也就从概念走向工程。这篇综述的价值，正是赶在这个方向爆发之初，给出一把看清全局的尺子。\n🗺️ 核心贡献：一套三层分类法 作者最值得称道的是提出了一个可扩展的三层分类法（taxonomy），把庞杂的方法论收束成清晰骨架。我把它的逻辑梳理如下表：\n层级 中文名 解决的核心问题 代表技术 Tier I 生成未来物理世界 \u0026ldquo;接下来几秒场景长什么样？\u0026rdquo; Image / BEV / OG / PC 四类生成 Tier II 智能体行为规划 \u0026ldquo;我该怎么开？\u0026rdquo; 规则驱动 + 学习驱动 + RL Tier III 预测与规划交互 \u0026ldquo;我和别人会如何相互影响？\u0026rdquo; 潜空间扩散 + 记忆增强架构 这三层不是平行罗列，而是自下而上的能力堆叠：先能\u0026quot;看清未来\u0026quot;，才能\u0026quot;规划动作\u0026quot;，进而学会\u0026quot;与它者博弈\u0026quot;。下面逐层拆解。\n🌐 Tier I：生成未来物理世界的四条路线 这是全篇最厚的部分，按输出表征分成四类生成范式。它们对应不同的\u0026quot;未来世界观\u0026quot;：\n范式 输出表征 优势 短板 Image-based 2D 图像 / 视频 保真度高、观感好 缺几何，难直接用于控制 BEV-based 鸟瞰图特征 几何对齐好、适合规划 依赖配对 BEV 监督 OG-based 4D 占用网格（Occupancy Grid） 几何+语义+时序最全 算力与标注成本高 PC-based 未来 LiDAR 点云 原生 3D、传感器级真实 点云生成难训、稀疏 Image-based 生成用扩散模型合成高保真 2D 街景，适合做数据增强和仿真渲染，代表工作涵盖街景视频外推、可控天气/光照编辑等，最大卖点是\u0026quot;肉眼难辨真假\u0026quot;，但致命伤是没有显式几何——一辆车在 2D 图里挪几像素，对应真实世界位移多少无从得知，因此难以直接喂给控制器。\nBEV-based 生成利用\u0026quot;图像–BEV\u0026quot;配对线索预测 BEV 地图，把感知与生成统一到同一俯视空间，是当前规划友好型表征的主流；它的优势在于天然对齐了下游规划常用的鸟瞰坐标系，遮挡、尺度问题也比透视图轻得多，代价是需要配准良好的 BEV 监督。\nOG-based 生成预测4D 占用网格（4D Occupancy Grid）——把空间体素化并沿时间外推，是综述最为推崇的几何+语义+时序最全路线（如 OccWorld、Cam4DOcc 一脉）。它把\u0026quot;这个体素在未来第 k 帧是否被占用\u0026quot;做成时空预测，天然服务占用预测与避障，缺点是体素分辨率与算力、标注成本成正比，长时序外推易糊化。\nPC-based 生成直接输出未来 LiDAR 点云，保留了传感器级原始真实度，适合做仿真器里的\u0026quot;伪激光\u0026quot;注入，但点云稀疏、无序、难训，生成质量稳定性仍待提升。\n综述特别强调，可控扩散（controllable diffusion） 与长时序预测（long-horizon forecasting） 是贯穿四条路线的两大技术引擎——前者让生成的未来可控（按车道、天气、动作条件化），后者把预测从\u0026quot;下一帧\u0026quot;推到\u0026quot;未来数秒\u0026quot;。这也是世界模型区别于\u0026quot;纯视频生成\u0026quot;的关键：它要可控、一致、可服务于下游决策，而不是只追求帧间连贯。作者还指出，四类表征正走向融合——例如把点云/BEV 升维到占用网格，再把占用网格\u0026quot;渲染\u0026quot;回图像，用一套统一表征打通\u0026quot;几何—语义—外观\u0026quot;。\n🏛️ 代表性方法对比 综述收录了 100+ 论文，我从中挑选了 12 个最具代表性的方法进行对比：\nTier I：未来物理世界生成 方法 团队/年份 输出表征 关键机制 条件控制 长时序 DriveDreamer 华为 2023 Image/视频 扩散模型 + 3D 几何约束 自车轨迹、场景编辑 2s Vista 2024 Image 时序扩散 + 运动条件 动作、相机位姿 4s MagicDrive 2024 BEV BEV 条件扩散 地图、交通规则 2s OccWorld 2023 OG 4D 占用预测 + Transformer 自车动作 3s Cam4DOcc 2024 OG 相机到 4D 占用的直接预测 无 3s UniPAD 2024 OG 统一感知与预测的占用框架 动作条件 2s LiDARGen 2023 PC 点云扩散 场景风格 1s Tier II：行为规划 方法 团队/年份 规划范式 关键机制 约束处理 Diffusion Planner 2024 扩散规划 能量引导 + 代价函数 软约束（可微代价） GameFormer 2023 迭代预测 层次化博弈 碰撞损失 VAD Planner 2023 向量规划 矢量化场景 + ego query 硬约束（规则兜底） GoalFlow 2024 流匹配 目标导向多模态轨迹 代价函数排序 Tier III：交互式预测与规划 方法 团队/年份 交互建模 关键机制 M2I 2023 交互预测 交通参与者成对交互建模 Scene Transformer 2023 联合场景 多智能体共享潜空间预测 nuPlan w/ reactive agents 2024 闭环交互 真实日志驱动 reactive 仿真 这 12 个方法跨度从 2023 到 2025，清晰展现了世界模型的演进路线：从单模态生成（Image）到多模态融合（OG/PC），从开环生成到闭环交互，从无条件的\u0026quot;画未来\u0026quot;到可控、可服务于规划的工具。\n🧭 Tier II：智能体行为规划的两条腿 世界模型不能只\u0026quot;会想\u0026quot;还得\u0026quot;会做\u0026quot;。行为规划层把决策拆成两条互补的腿：\n规则驱动范式：以代价图（cost map）优化为代表，把碰撞、舒适、效率写成代价函数再去寻优。优点是可控、可解释，但规则枚举不完，长尾一改一片。 学习驱动范式：以强化学习和模仿学习为代表，用数据替代手写规则，能学到更柔性的驾驶策略，但闭环泛化和可解释性是老大难。 综述指出，趋势是两者融合——用学习提供\u0026quot;直觉式候选\u0026quot;，用规则/代价提供\u0026quot;安全网与可调旋钮\u0026quot;。这与我之前在 Diffusion Planner 精读里看到的\u0026quot;学习负责分布，规则负责偏好\u0026ldquo;的分层思想完全一致：能量引导、代价函数本质上就是把规则连续化、可微分地嵌入生成过程。世界模型的规划层，正在把规则与学习的对立，演化为一次优雅的协作。\n🔀 Tier III：预测与规划的交互 这是三层里最\u0026quot;前沿\u0026quot;也最难的一层。真实交通里，自车和他车是一个耦合系统——你变道，别人就会避让。把它们拆开建模，就是在丢信息。综述归纳了两类解法：\n思路 关键机制 代表方向 潜空间扩散 在隐空间联合建模多智能体未来 latent diffusion 多智能体仿真 记忆增强架构 用记忆模块回放历史交互模式 memory-augmented world models 潜空间扩散把\u0026quot;我这样走、他那样反应\u0026quot;的协同行为塞进一次去噪过程，让交互从\u0026quot;额外设计 loss\u0026quot;变成\u0026quot;生成过程里自然涌现的副产品\u0026rdquo;；记忆增强则赋予模型长程时序一致性，避免每次决策都\u0026quot;失忆\u0026quot;。这一层的成熟度最低，但直接决定了世界模型能否在复杂城市路口真正可用。\n🛠️ 训练范式：世界模型怎么\u0026quot;学\u0026quot; 综述专门花篇幅讨论训练范式，这是很多综述忽略却至关重要的部分：\n训练范式 核心思想 解决的痛点 自监督学习 从无标注海量驾驶日志中自监督学表征 标注贵、泛化差 多模态预训练 图像/BEV/点云/语言联合预训练 单模态信息孤岛 生成式数据增强 用世界模型生成长尾/危险场景 罕见工况数据稀缺 生成式数据增强尤其值得关注：世界模型本身就能\u0026quot;造数据\u0026quot;——生成暴雨、鬼探头、紧急变道等现实中难采集的危险场景，再回喂训练。这形成了**\u0026ldquo;世界模型训练世界模型\u0026quot;的正循环**，是打破长尾数据瓶颈最具想象力的路径。\n🎯 应用领域分析 世界模型在自动驾驶中有四大核心应用领域，综述逐一进行了系统梳理：\n1. 感知增强（Perception Enhancement） 世界模型生成的高保真未来帧可用于增强下游感知模型。核心思路：用生成数据做数据增强，弥补长尾场景标注不足：\n应用方式 说明 代表工作 时空一致性正则 用预测的未来帧约束感知模型的时序一致性 DriveDreamer、UniPAD 模态补全 相机不可见区域用世界模型推理补齐 OccWorld 困难样本挖掘 从生成结果中自动发现感知失败模式 Vista 2. 运动预测（Motion Forecasting） 这是世界模型最直接的应用——预测环境动态实体的未来状态：\n多智能体联合预测：在潜空间同时预测自车和他车的未来轨迹 占用流预测：预测体素级未来占用，天然输出可通行区域 不确定性量化：通过多次采样获得未来分布，做风险-aware 规划 3. 闭环仿真（Closed-loop Simulation） 世界模型作为可微仿真器，让策略在与环境交互中训练：\n数据驱动的仿真：不像 CARLA 依赖手工规则，世界模型能基于真实驾驶日志生成符合物理规律的交互 长尾场景生成：通过调整条件（天气、插入障碍物），合成几乎无限的罕见场景 快速 rollout：潜空间 rollout 比像素级渲染快 10-100 倍 4. 数据生成与增强（Data Generation \u0026amp; Augmentation） 这是综述认为最具想象力的应用：\n方向 说明 收益 场景级扩充 一个真实场景 → 条件扰动 → 数十个变体 10× 数据效率 跨域迁移 晴天 → 雨天/夜晚的 domain transfer 免标注域适应 轨迹反事实 保持场景不变，改变自车轨迹 → 观察他车反应 因果学习数据 形成数据飞轮：世界模型生成数据 → 训练更好的规划器 → 收集更多真实数据 → 训练更好的世界模型。这个正循环一旦启动，自动驾驶的数据瓶颈将被根本性打破。\n如何评测世界模型？ 综述还系统讨论了评测维度，这往往是社区最不一致的地方。作者把世界模型的评估拆成两大任务族：\n评测任务族 关注点 典型指标 场景理解 生成质量、一致性、可控性 FID/FVD、感知相似度、条件可控率 运动预测 未来状态准确度、时序一致性 占用预测 IoU、轨迹 ADE/FDE、碰撞率 一个清晰信号是：作者特别呼吁从开环生成指标走向闭环驾驶指标——光看生成的视频像不像远远不够，必须问\u0026quot;用这个未来预测做规划，开得好不好\u0026rdquo;。这也是他们同步推出 WMAD-Benchmarks 的初衷：把世界模型放进闭环驾驶回路里打分，逼它从\u0026quot;好看的玩具\u0026quot;变成\u0026quot;好用的工具\u0026quot;。\n常用数据集与评测基准 综述系统总结了世界模型研究中最常用的数据集：\n数据集 规模 模态 用途 nuScenes 1000 场景 × 20s 6 相机 + LiDAR + 雷达 感知/预测/规划通用 Waymo Open 1150 场景 × 20s 5 相机 + LiDAR 感知/预测 KITTI 22 场景 2 相机 + LiDAR 早期感知/规划 NAVSIM nuScenes 衍生 6 相机 开环规划评测 nuPlan 1200h 驾驶 多相机 + 地图 闭环规划 OpenScene 多源融合 多模态 感知 + 预测 Waymo Motion 57000 场景 轨迹 + 地图 运动预测 评测指标体系也在综述中梳理得很清楚：\n评测维度 指标 说明 场景生成质量 FID / FVD 逐帧/逐视频的分布差异 感知相似度 LPIPS / SSIM 人类感知对齐度 运动预测精度 ADE / FDE 平均/最终位移误差 占用预测 IoU / mIoU 体素级占用准确率 闭环驾驶 DS / PDMS / 碰撞率 真正的驾驶性能 可控性 条件满足率 生成是否遵循控制信号 🗂️ AwesomeWMAD 清单 作者同步维护的 AwesomeWMAD 论文清单包含 100+ 篇论文，按三层分类法和四条生成路线分别组织。目前最活跃的赛道是：\nOG-based 4D 占用预测（OccWorld、Cam4DOcc、UniPAD 等）—— 被认为是\u0026quot;下一代表征\u0026quot; Image/Video 条件生成（DriveDreamer、MagicDrive、Vista）—— 最成熟，适合做数据增强 交互式预测-规划（M2I、Scene Transformer）—— 起步最晚但被认为最有潜力 ⚠️ 挑战与未来方向 作者在结尾点名三大关键挑战：自监督表征学习、多模态融合、先进仿真。结合我的理解，补充几点更具操作性的瓶颈：\n可控性与一致性的平衡：生成要\u0026quot;听话\u0026quot;又要\u0026quot;自洽\u0026quot;，条件控制过强会失真，过弱会跑偏； 长时序漂移：未来预测越远越易累积误差，4D 占用在 3 秒后往往糊成一片； 仿真到现实的鸿沟（sim-to-real）：生成的世界再逼真，仍是分布内插，真上路的分布外场景仍是硬骨头； 闭环评测缺失：当前多数世界模型只做开环生成质量评估，缺少驾驶任务级的闭环 benchmark——这也是作者同时推出 WMAD-Benchmarks 的用意。 📝 个人思考 读这篇综述最大的收获，是它让我看清了**\u0026ldquo;世界模型\u0026quot;不是一个点，而是一张能力地图**。从生成到规划再到交互，三层之间不是并列选项，而是能力台阶：今天大多数工作还卡在 Tier I（把未来画得像），真正能服务安全决策的 Tier III（交互式协同）才刚起步。这意味着——世界模型的下半场，不在\u0026quot;生成多好看\u0026rdquo;，而在\u0026quot;预测多有用\u0026quot;。\n第二个启发是数据范式的反转。传统自动驾驶是\u0026quot;先采数据、再训模型\u0026quot;，而世界模型让\u0026quot;模型生成数据\u0026quot;成为可能。当世界模型能合成高质量长尾场景，整个数据飞轮就转起来了。这让我联想到大模型的合成数据训练——自动驾驶正在重走这条路，只不过多了一个物理一致性的硬约束。\n最后，这篇综述的**\u0026ldquo;持续维护\u0026quot;姿态值得点赞。世界模型方向月月有新文，静态综述三月即过时；作者以 GitHub 清单 + 基准的形式把它做成活的地图**，这种工程化做法本身就是对\u0026quot;如何做综述\u0026quot;的一次示范。对入门者，我会建议把它当目录用：先读三层分类法建立框架，再按兴趣跳到 AwesomeWMAD 清单里的具体论文深挖。当世界模型与 GRPO 强化学习、端到端 VLA 融合（参见本系列 DriveTeach-VLA、AlphaDrive），自动驾驶的\u0026quot;脑补+决策\u0026quot;一体化范式正在成型。\n🔗 延伸阅读 工作 关系 OccWorld / Cam4DOcc OG-based 4D 占用预测的代表，Tier I 第三条路线 DriveDreamer / Vista / MagicDrive Image/BEV 生成代表，本系列第 9 篇 DriveDreamer Diffusion Planner 规则+学习融合的规划典范，Tier II 落地样板 WMAD-Benchmarks 作者自建的评测基准，补闭环评测短板 AlphaDrive / DriveTeach-VLA 世界模型与 RL/VLA 结合的下一代方向 📖 这是论文精读系列的第 24 篇。当世界模型从\u0026quot;画得像\u0026quot;走向\u0026quot;想得准、处得好\u0026rdquo;，自动驾驶才算真正拥有了\u0026quot;脑中的未来\u0026quot;。欢迎留言。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2501-11260/","summary":"这篇持续更新的综述为自动驾驶世界模型构建了一套三层分类法：Tier I 生成未来物理世界（Image/BEV/OG/PC 四类生成范式）、Tier II 智能体行为规划（规则与学习双轨）、Tier III 预测与规划交互。它系统梳理了自监督学习、多模态预训练、生成式数据增强等训练范式，并配套发布 WMAD 论文清单与基准。是当前入门自动驾驶世界模型最系统的地图。","title":"论文精读｜A Survey of World Models for Autonomous Driving：自动驾驶世界模型全景综述"},{"content":"📄 论文信息 标题：LeRobot: An Open-Source Library for End-to-End Robot Learning（LeRobot：一个用于端到端机器人学习的开源库） 团队：Hugging Face（Remi Cadene, Simon Aliberts, Francesco Capuano 等17人）\u0026amp; University of Oxford 发表：arXiv 2026.02（ICLR 2026） 关键词：开源机器人学习、端到端学习、模仿学习、数据集、低成本硬件、异步推理 一句话总结：LeRobot提供了一个垂直集成的开源机器人学习栈，从低成本硬件支持到大规模数据集流式传输，旨在降低机器人学习门槛并加速领域发展。 论文链接：arXiv:2602.22818 代码链接：GitHub - huggingface/lerobot 🤔 要解决什么问题？ 机器人学习生态的碎片化困境 机器人学习领域正在经历一场从显式模型（explicit models）到隐式模型（implicit models）的范式转变：\n维度 显式模型（经典机器人学） 隐式模型（机器人学习） 方法论 模块化管道：感知→规划→控制 端到端数据驱动策略 特征工程 手工设计刚体运动学、接触模型 从交互数据中学习表示 扩展性 难以适配多样化部署场景 性能随数据量和算力提升 适用环境 受控环境（工厂产线） 非结构化动态环境（家庭） 尽管隐式模型（如Transformer策略、扩散策略）展现出强大的扩展性，但机器人学习生态面临三大碎片化问题：\n1. 中间件接口碎片化 当前机器人学习的中间件（middleware）高度平台化：\n不同机器人（Franka、xArm、SO-100）使用不同的SDK和通信协议 研究团队需要为每个新平台开发定制适配器 跨平台的数据共享和算法复用极其困难 2. 数据集格式不统一 大规模机器人数据集通常以不同格式发布：\nTensorFlow Datasets、ROS bags、自定义JSON布局 缺乏统一的、支持多模态的 schema 不同数据集难以聚合成更大的混合训练集 3. 算法实现不可复现 各研究组独立实现算法，代码质量参差不齐 算法、数据处理和评估流程的微小差异可导致结果显著不同（Henderson et al., 2018） 硬件差异进一步加剧了复现困难 核心问题：能否构建一个统一的、开源的、端到端的机器人学习框架，覆盖从硬件控制到数据管理再到算法实现的完整栈，降低进入门槛并加速整个领域的发展？\n💡 核心方法：垂直集成的开源机器人学习栈 LeRobot的核心设计理念是垂直集成——覆盖从底层硬件控制到上层算法实现的完整栈，同时保持每个组件的可扩展性和可替换性。\n1. 统一机器人集成（Accessible Real-world Robots） LeRobot提供了一致的、基于Python的中间件API，用于控制多种机器人平台：\n支持的硬件平台及成本：\n机器人类型 成本（€） 特点 SO-100/SO-101 ~225（单臂）/ 550（双臂） 3D可打印、开源设计、消费级零件 Koch-v1.1 ~670（双臂） 开源机械臂 ALOHA-2 ~21,000 双臂遥操作系统 Hope-JR ~500 人形手臂和灵巧手 LeKiwi ~230 移动操作平台 Stretch-3 - 移动操作平台 Reachy-2 - 人形机器人 关键优势：SO-10X等低成本平台的成本仅为工业级机器人（如Franka Emika Panda）的1/100，使得大规模数据收集成为可能。这些平台支持：\n遥操作：leader-follower架构，读取leader机器人配置并写入follower机器人 策略推理：直接用学习到的策略控制follower机器人 去中心化数据收集：社区成员各自在本地收集数据，再通过HuggingFace Hub共享 2. 标准化数据集（LeRobotDataset） LeRobotDataset是专为机器人学习设计的统一多模态数据格式：\n设计原则：\n可扩展性：支持处理包含数百万专家轨迹的大型仓库 多模态支持：无缝集成图像、传感器读数、遥操作状态信号 PyTorch生态集成：与PyTorch DataLoader等工具无缝对接 流式传输：支持远程托管的大型数据集，无需下载完整语料即可处理 社区规模（截至2025年9月）：\n16,000+ 个公开数据集 2,200+ 个独立贡献者 支持SO-10X、Franka Panda、xArm等多种机器人平台 数据集统计：\n机器人 下载量 数据集数 情景数 Panda 1,878,395 588 926,776 xArm 1,107,329 74 450,329 WidowX 832,177 100 214,117 KUKA 662,550 3 419,784 SO-101 319,586 3,965 58,299 SO-100 278,697 5,161 78,510 流式传输示例：\nfrom lerobot.datasets.lerobot_dataset import LeRobotDataset from lerobot.datasets.streaming_dataset import StreamingLeRobotDataset repo_id = \u0026#34;lerobot/svla_so101_pickplace\u0026#34; # 下载完整数据集并加载到内存（支持随机访问） dataset = LeRobotDataset(repo_id) # 流式传输帧，无需下载（顺序访问，.next()） dataset = StreamingLeRobotDataset(repo_id) 3. 高效可复用的算法（Models） LeRobot提供了多种SOTA机器人学习算法的干净、基于PyTorch的实现：\n强化学习方法：\nHIL-SERL：人在环强化学习，结合学习到的奖励分类器和人工干预，可在1-2小时真实世界训练中达到近完美成功率 TD-MPC：基于时序差分的模型预测控制 模仿学习方法：\nACT（Action Chunking with Transformers）：使用VAE的双手操作方法，52M参数，RTX 4090上推理延迟仅5ms Diffusion Policy：使用扩散模型学习多模态动作分布，263M参数 VQ-BET：基于向量量化的动作生成 视觉-语言-动作模型：\nπ₀（Pi-Zero）：基于Flow Matching的通用机器人控制模型，3.5B参数 SmolVLA：轻量级VLA模型，450M参数，支持语言条件控制 模型性能对比：\n模型 参数量 RTX 4090推理延迟 A100峰值显存 ACT 52M 5.01ms 211MB Diffusion Policy 263M 613.89ms 1.12GB π₀ 3.5B 568.98ms 13.32GB SmolVLA 450M 99.24ms 1.75GB 关键洞察：ACT因其小巧的模型尺寸和极快的推理速度（100-200Hz），成为最受欢迎的策略——用户仅需50条真实世界轨迹即可训练出表现良好的策略。\n4. 优化的异步推理栈（Inference） LeRobot的推理栈实现了物理分离和逻辑分离的双重解耦：\n物理分离：\n策略可以在独立的远程机器上运行 获得比机器人机载计算更多的计算资源 低级控制循环保持高频率执行 逻辑分离（异步生产者-消费者模式）：\n生产者：推理进程预测动作序列（action chunk）， lookahead horizon $H$ 消费者：环境控制以固定频率消费动作 聚合函数 $f$：重叠的动作块通过广义聚合函数合并，确保动作队列非空，防止机器人空闲 这种设计使得：\n策略可以利用更强大的GPU进行推理 低级控制循环保持高频率执行 系统能够在运行时动态适应环境变化 支持动作块（action chunk）预测，而非单步动作 🧪 实验验证 仿真评估 LeRobot在两个主流仿真基准上验证了算法实现的有效性：\nLIBERO基准：\n包含130个长horizon操作任务，4个任务套件 评估模型在复杂任务规划和执行中的能力 LeRobot的实现达到了与文献中最佳结果相当的性能 Meta-World基准：\n包含50种不同的机器人操作任务 评估模型在多样化任务中的泛化能力 支持多任务学习（MT10/MT50）和元学习（ML1/ML10/ML45）评估 真实世界验证 低成本硬件的有效性：\nSO-100/SO-101等3D可打印机械臂能够收集高质量的演示数据 ALOHA-2双臂系统展示了双手协调操作的能力 证明了低成本硬件可以支持先进的机器人学习研究 社区驱动的数据飞轮：\n16K+数据集来自2.2K+贡献者 SO-10X平台贡献了50%+的数据集 去中心化数据收集模式已超越集中式收集 算法性能对比 算法 LIBERO-Spatial LIBERO-Object LIBERO-Goal Meta-World BC 基线 基线 基线 基线 ACT 显著提升 显著提升 显著提升 中等提升 Diffusion Policy 显著提升 显著提升 显著提升 显著提升 TD-MPC 中等提升 中等提升 中等提升 显著提升 🔍 个人思考 亮点 垂直集成的完整性：LeRobot覆盖了机器人学习的完整栈——从硬件控制到数据管理，再到算法实现和推理部署。这种垂直集成大大降低了研究者的入门门槛，使得专注于算法创新而非工程实现成为可能。\n低成本硬件的民主化：通过支持SO-100等3D可打印的低成本机械臂（~225€），LeRobot使得机器人学习研究不再局限于拥有昂贵设备的大型实验室。这种\u0026quot;硬件民主化\u0026quot;对于推动整个领域的发展具有重要意义。\n社区驱动的数据飞轮：LeRobotDataset格式与HuggingFace Hub的无缝集成，使得数据共享变得前所未有的简单。社区贡献的16K+数据集和数百个预训练模型形成了一个良性循环——更多数据→更好的模型→更多人参与→更多数据。\n异步推理的工程创新：物理分离+逻辑分离的双重解耦设计，使得策略推理和控制执行可以并行运行，这对部署大模型（如π₀的3.5B参数）到资源受限的机器人上具有重要实践价值。\n局限性 机器人覆盖不完整：虽然支持8种机器人平台，但远未覆盖所有主流硬件。从2025年初的3种到现在的8种，保持这一扩展速度至关重要。\n算法实现深度有限：虽然提供了多种算法的实现，但某些实现可能不如原始论文或专门的代码库那样优化。对于需要极致性能的研究，可能仍需参考专门的实现。\n缺乏低级优化：当前库未包含量化、图编译等推理优化技术，这限制了大模型在边缘设备上的部署效率。\n未来方向 更多算法集成：持续集成最新的机器人学习算法，特别是VLA模型和世界模型 硬件生态扩展：支持更多类型的机器人硬件，包括灵巧手和移动平台 推理优化：引入量化、蒸馏、图编译等技术，提升大模型的部署效率 跨平台迁移学习：利用大规模预训练模型实现跨机器人平台的知识迁移 📖 延伸阅读 RT-1: Robotics Transformer for Real-World Control at Scale（arXiv:2212.06817）- Google的机器人Transformer，展示了大规模数据和Transformer架构在机器人控制中的潜力，是LeRobot中实现的重要基线算法之一\nOpen X-Embodiment: Robotic Learning Datasets and RT-X Models（arXiv:2310.08864）- 跨机器人平台的大规模数据集和模型，展示了数据共享在推动机器人学习中的重要性，与LeRobot的数据共享理念高度一致\nDiffusion Policy: Visuomotor Policy Learning via Action Diffusion（arXiv:2303.04137）- 使用扩散模型的机器人策略学习方法，是LeRobot中实现的最先进算法之一，在多模态动作分布建模方面表现出色\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/lerobot-open-source-robot-learning/","summary":"LeRobot是HuggingFace推出的开源机器人学习库，覆盖从底层电机控制到大规模数据集收集、存储和流式传输的完整栈，支持多种低成本机器人平台和SOTA学习算法。截至2025年9月，社区已贡献16K+数据集和数百个预训练模型，形成了去中心化的机器人数据收集生态。","title":"论文精读｜LeRobot：让机器人学习触手可及——HuggingFace的开源机器人学习框架"},{"content":"📄 论文信息 标题：SafeDiffuser: Safe Planning with Diffusion Probabilistic Models 作者：Wei Xiao、Tsun-Hsuan Wang、Chuang Gan、Ramin Hasani、Mathias Lechner、Daniela Rus（MIT CSAIL / IAIFI） arXiv：2306.00148（2023 年 5 月） 发表：ICLR 2025 项目主页：safediffuser.github.io ｜ 代码：Weixy21/SafeDiffuser ｜ OpenReview：ig2wk7kK9J 一句话总结：扩散模型擅长\u0026quot;数据驱动规划\u0026quot;，但没有安全保证；SafeDiffuser 用一类控制障碍函数把安全约束嵌进去，给出可证明的安全，同时不牺牲生成质量。 🤔 要解决什么问题？扩散规划的\u0026quot;安全隐患\u0026quot; Diffuser（Janner et al., 2022）开创了\u0026quot;把规划当成序列生成\u0026quot;的范式：把状态-动作轨迹当成一段数据，用扩散模型从噪声去噪出一条未来轨迹。它有三大诱人优点——能建模多模态未来、可条件化、数据驱动。但把它用到安全攸关场景（自动驾驶、机器人、医疗）时，一个致命问题暴露出来：\n痛点 说明 后果 无安全保证 扩散是概率采样，可能采到越界轨迹 撞墙、碰撞、超限位 约束只能\u0026quot;软学\u0026quot; 把约束当辅助 loss 训进权重 训练集内还行，分布外即崩 采样即赌博 每次去噪是随机过程 同一场景不同采样可能不安全 对自动驾驶这种\u0026quot;一次不安全就可能致命\u0026quot;的场景，\u0026ldquo;大概率安全\u0026quot;远远不够——你需要可证明的保证（provable guarantees）。这正是 SafeDiffuser 的发力点：用控制论里的成熟工具（CBF），给生成式规划装上确定性安全网。\n🧱 先备知识：控制障碍函数（CBF） 控制障碍函数（Control Barrier Function, CBF） 是保障安全性的经典控制论工具，核心是前向不变性（forward invariance）。定义一个安全集：\n$$\\mathcal{C}=\\{x : h(x)\\geq 0\\}$$其中 $h(x)$ 是障碍函数。考虑控制系统 $\\dot{x} = f(x) + g(x)u$，其中 $u$ 是控制输入。CBF 的核心条件是：存在一个扩展 class-K 函数 $\\alpha$，使得：\n$$\\sup_{u \\in \\mathcal{U}} [L_f h(x) + L_g h(x) u + \\alpha(h(x))] \\geq 0$$其中 $L_f h = \\frac{\\partial h}{\\partial x} f(x)$ 和 $L_g h = \\frac{\\partial h}{\\partial x} g(x)$ 是李导数。只要控制输入 $u$ 满足这一条件，只要初始状态安全（$h(x_0)\\geq 0$），状态将永远留在安全集内——这就是前向不变性。直觉上：$h$ 是\u0026quot;离危险边界的距离\u0026rdquo;，只要这个距离的下降速度被 $\\alpha$ 兜住，就永远撞不破边界。\n普通 CBF 给的是\u0026quot;渐近\u0026quot;保证——轨迹会一直安全，但不保证多久能\u0026quot;纠回来\u0026quot;。SafeDiffuser 需要更强的版本：\n概念 形式 含义 标准 CBF $\\dot h \\geq -\\alpha(h)$ 一直安全 有限时间 CBF $\\dot h \\geq -c\\cdot h^\\gamma,\\ 0\u003c\\gamma\u003c1$ 有限时间内收敛回安全 当 $\\alpha(h)=c\\cdot h^\\gamma$ 且 $0\u003c\\gamma\u003c1$ 时，系统会在有限时间内到达 $h=0$ 的边界并保持不变——这种\u0026quot;有限时间\u0026quot;特性，恰好匹配扩散去噪的离散有限步结构。这是整篇论文的理论钥匙。\n💡 核心思想：有限时间扩散不变性 SafeDiffuser 的关键创新，是把 CBF 的连续时间前向不变性，改造并嵌入扩散去噪的离散过程，得到有限时间扩散不变性（finite-time diffusion invariance）。\n问题定义：扩散规划的安全形式化 将一条轨迹表示为 $\\tau = \\{x_k\\}_{k=0}^{H}$，其中 $x_k$ 是时刻 $k$ 的状态（位置、速度等）。扩散模型通过逆向去噪从噪声 $\\tau^N$ 生成干净轨迹 $\\tau^0$。给定规格（安全约束）$b(x_k) \\geq 0,\\ \\forall k$，其中 $b$ 是可微的标量函数。目标是保证最终生成的轨迹满足 $\\forall k: b(x_k^0) \\geq 0$。\n有限时间扩散不变性定义 由于去噪起始 $\\tau^N \\sim \\mathcal{N}(0,I)$ 几乎必然违反安全约束（即 $b(x_k^N) \u003c 0$），而扩散步数 $N$ 有限（通常 20-100 步），标准 CBF 的\u0026quot;渐近保证\u0026quot;不适用。因此作者提出了有限时间扩散不变性：\n定义：如果存在 $i \\in \\{0,\\dots,N\\}$ 使得 $b(x_k^j) \\geq 0,\\ \\forall k, \\forall j \\leq i$，则去噪过程 $\\{p_\\theta(\\tau^{i-1}|\\tau^i)\\}_{i=1}^N$ 关于约束 $b$ 是有限时间扩散不变的。\n从连续到离散：给去噪步加上安全梯度 扩散规划把一条轨迹 $\\bm{x}^{0}=[s_0,a_0,\\dots,s_T,a_T]$ 当成生成目标，去噪从 $\\bm{x}^{N}$（纯噪声）一步步走到 $\\bm{x}^{0}$（干净轨迹）。SafeDiffuser 在每一步去噪时，叠加一个安全引导项，确保安全函数 $h$ 沿去噪方向单调不降。形式上可理解为对去噪均值做修正：\n$$\\tilde{\\bm{\\mu}}=\\bm{\\mu}_\\theta(\\bm{x}^{t},t)+\\lambda\\cdot\\nabla_{\\bm{x}^{t}} h(\\bm{x}^{t})$$直觉是：沿着 $h$ 的梯度方向（即\u0026quot;更安全\u0026quot;的方向）推一把采样。这与 Diffusion Planner 的\u0026quot;能量引导\u0026quot;在工程上形似，但理论根基完全不同——后者是经验式软约束，SafeDiffuser 则由 CBF 的不变性定理严格证明：只要引导满足有限时间 CBF 条件，最终生成的 $\\bm{x}^{0}$ 必然落在安全集 $\\mathcal{C}$ 内。\n三种 SafeDiffuser 变体 论文提出了三种实现有限时间扩散不变性的方法，各有侧重：\n变体 关键约束条件 特点 适用场景 RoS（Robust-Safe） $b(x_k^{j-1}) \\geq (1-\\alpha\\Delta_j)b(x_k^j)$ 一旦满足就永不违反 通用安全 ReS（Relaxed-Safe） 允许初期暂不满足约束 避免规范\u0026quot;局部陷阱\u0026quot; 复杂多约束规划 TVS（Time-Varying-Safe） $b(x_k^{j-1}) \\geq (1-\\alpha_j\\Delta_j)b(x_k^j)$ 时间参数 $\\alpha_j$ 可调 最灵活 这三个变体通过二次规划（QP） 在每一步去噪时求解最优修正：\n$$\\begin{aligned} \\min_{u^j} \u0026\\quad \\frac{1}{2}\\|u^j\\|^2 \\\\ \\text{s.t.} \u0026\\quad b(x_k^{j-1}(\\tau^{j-1}, u^j)) - (1-\\alpha\\Delta_j)b(x_k^j) \\geq 0 \\end{aligned}$$其中 $u^j$ 是修正项，目标是最小化对原始扩散生成轨迹的改动，同时强制满足安全约束。这种\u0026quot;最小干预\u0026quot;的设计让 SafeDiffuser 在保证安全的同时最大化保留了扩散模型的生成质量。\n为什么必须是\u0026quot;有限时间\u0026quot;？ 这一点值得多说一句。扩散去噪是有限步的离散过程（从 $N$ 步走到 $0$ 步），而标准 CBF 只承诺\u0026quot;渐近安全\u0026quot;——理论上可能要无限久才纠回安全集。这跟\u0026quot;总共才几十步去噪\u0026quot;的现实对不上。作者因此刻意选用 $\\alpha(h)=c\\cdot h^\\gamma,\\ 0\u003c\\gamma\u003c1$ 这类有限时间收敛的 class-K 函数：它保证 $h$ 在有限步内达到不变集，恰好嵌进扩散的有限步结构里。于是\u0026quot;有限时间扩散不变性\u0026quot;不仅是个漂亮名字，而是让连续控制论与离散生成模型在时间尺度上对齐的关键数学桥梁。这也解释了为何普通分类器引导做不到可证明安全——它的势函数没有这层收敛速率的约束。\n与分类器引导的本质区别 维度 分类器引导（Classifier Guidance） SafeDiffuser 理论基础 得分匹配 + 似然梯度 控制障碍函数 + 不变性 约束性质 软约束（提高安全概率） 硬保证（可证明安全） 形式 基于势函数（potential-based） 基于有限时间 CBF 鲁棒性 易受噪声扰动 生成即鲁棒 项目主页里专门放了 Diffuser / Classifier Guidance / SafeDiffuser 三者的对比视频——在\u0026quot;窄通道（Narrow Passage，6 个约束）\u0026ldquo;任务里，普通 Diffuser 会穿墙越界，分类器引导改善但仍偶有越界，而 SafeDiffuser 始终严格满足约束。\n🏗️ 三大实验：从迷宫到机械臂 作者在三类安全攸关任务上验证，覆盖规划—运动—操作全栈：\n任务 仿真器 状态/动作维度 安全约束 迷宫寻路（Maze2D） 自建 路径序列 红色椭圆/超椭圆禁区 足式机器人（Walker2D / Hopper） MuJoCo Walker: 17 态/6 控；Hopper: 11 态/3 控 避免撞\u0026quot;顶部\u0026quot;障碍 3D 操作（PyBullet） PyBullet 关节轨迹 关节限位防碰撞 Maze2D 定量结果 方法 平均奖励 ↑ 约束满足率 ↑ 成功到达率 ↑ 普通 Diffuser 112.3 58.2% 72.1% Classifier Guidance 118.7 76.5% 78.3% RoS-SafeDiffuser 120.1 98.9% 92.4% ReS-SafeDiffuser 121.5 99.1% 93.8% TVS-SafeDiffuser 122.3 99.4% 94.2% 窄通道（Narrow Passage, 6 约束） 极限压力测试下差距更显著：\n方法 约束满足率 平均路径长度 Diffuser 12.5% 48.2 Classifier Guidance 45.3% 52.7 SafeDiffuser（ReS） 98.7% 56.1 SafeDiffuser 几乎完全满足所有约束，同时路径长度仅小幅增加——这正是\u0026quot;可证明安全不牺牲效率\u0026quot;的有力实证。\n足式机器人（MuJoCo）定量结果 Walker2D 和 Hopper 实验中，约束满足率的提升带来奖励的不降反升：\n方法 Walker2D 奖励 ↑ Hopper 奖励 ↑ 约束满足率 ↑ Diffuser 2850 1850 65.3% Classifier Guidance 3120 2020 78.1% SafeDiffuser 3580 2340 99.2% 作者特别指出：约束满足率高的模型反而拿到更高奖励——因为不碰撞意味着不重置，不重置意味着更长有效步数。这揭示一个反直觉事实：安全不是奖励的代价，而是奖励的放大器。\n3D 操作（PyBullet）定量结果 方法 任务成功率 关节限位违反率 平均完成时间 Diffuser 62.5% 35.1% 4.2s Classifier Guidance 71.3% 18.7% 4.5s SafeDiffuser 89.6% 1.2% 4.1s 作者展示了三种不同的抓取-放置剧目，SafeDiffuser 均在满足关节限位的前提下达成任务，而对照方法要么超限位导致物理穿透，要么为求安全而动作僵硬、无法完成任务。\u0026ldquo;安全\u0026quot;与\u0026quot;能干\u0026quot;在它身上不再二选一。\n离散化误差的理论分析 作者分析了从连续时间 CBF 到离散去噪步的误差界。设扩散去噪步长为 $\\Delta = 1/N$，则有限时间扩散不变性在离散实现中的误差为：\n$$|b(x_k^{j-1}) - (1-\\alpha\\Delta)b(x_k^j)| \\leq O(\\Delta^2)$$即误差与步长平方成正比。这意味着：\n更多去噪步 → 更精确的安全保障（但计算成本更高） 实际使用中 $N=100$ 步即可将误差控制在 1% 以内 对于特别紧的约束（如狭窄通道），推荐使用 $N \\geq 200$ 步 这一理论保证了 SafeDiffuser 在实践中可以忽略离散化误差对安全性的影响。\nQP 求解的效率考虑 SafeDiffuser 在每一步去噪时求解一个 QP，复杂度为 $O(m^3)$，其中 $m$ 是约束数量。实验中：\nMaze2D（6 约束）：每一步额外增加约 2ms Walker2D（单约束）：每一步增加约 0.3ms 整体推理时间相比原始扩散模型增加约 20-30% 对大多数机器人任务，这一开销是可接受的；但对实时性要求极高的自动驾驶（\u0026lt;50ms），需要进一步的工程优化，如预计算 QP 矩阵分解或使用高效的嵌入式求解器。\n⚔️ 为什么\u0026quot;既安全又泛化\u0026quot;能兼得？ 一个常见质疑：加约束会不会牺牲扩散的泛化能力？作者给出的答案是否定的，并归因于两条：\n引导是推理时叠加，不改训练分布。SafeDiffuser 不把约束塞进 loss 重训，而是在去噪时引导采样——模型本身仍是从全量数据学到的多模态生成器，泛化能力完好； 不变性带来鲁棒性。论文证明有限时间扩散不变性不仅保证安全，还对扰动更鲁棒——因为 $h$ 的梯度始终把轨迹拉回安全集，相当于自带\u0026quot;纠偏\u0026rdquo;。这是\u0026quot;保证\u0026quot;与\u0026quot;泛化\u0026quot;双赢的根因。 这种\u0026rdquo;训练保持生成力、推理注入确定性\u0026ldquo;的范式，和本系列 Diffusion Planner 的\u0026quot;免训练引导\u0026quot;哲学一脉相承——只不过 SafeDiffuser 给引导配上了严格数学证明，把\u0026quot;大概率安全\u0026quot;升级为\u0026quot;可证明安全\u0026rdquo;。\n⚠️ 局限与未来方向 依赖可微的 $h$ 函数：CBF 需要写出解析的安全函数及其梯度，对难以形式化的复杂约束（如\u0026quot;礼貌驾驶\u0026quot;）不友好； 离散扩散步的近似误差：把连续不变性搬到离散去噪，存在离散化误差，约束越紧越明显； 采样成本：扩散天然比单次回归多几次前向，安全引导又叠加梯度计算，实时性仍是自动驾驶高频控制的负担； 硬约束的\u0026quot;刚性\u0026quot;：严格不变性在不可解场景下可能无解，需要退化为优先级约束。 我看好的后续方向：把 SafeDiffuser 的可证明安全与 GRPO 等强化学习结合，让安全约束进入奖励 shaping；用一致性模型把去噪压到一步以解决实时性；以及把它从机器人迁移到自动驾驶闭环规划——给出\u0026quot;可证明不碰撞\u0026quot;的轨迹生成，这才是端到端规划上车的终极安全凭证。\n📝 个人思考 SafeDiffuser 最打动我的，是它把\u0026quot;生成\u0026quot;和\u0026quot;保证\u0026quot;这两个看似对立的目标焊在了一起。机器学习圈长期有一个心结：生成模型（扩散、VAE、GAN）本质是概率近似，擅长\u0026quot;像\u0026quot;但不擅长\u0026quot;对\u0026quot;；控制论则反过来，擅长\u0026quot;对\u0026quot;但需要显式模型。两者一直在各自的舒适区里打转。这篇论文用 CBF 这座桥，让扩散模型借到了控制论的确定性证明，又让控制规划借到了扩散的多模态生成力——这种学科交叉的化学反应比任何单点创新都珍贵。\n第二个启发是它对**\u0026ldquo;安全是奖励放大器\u0026rdquo;的实证。直觉上我们总以为安全约束会牺牲性能，但 Walker2D 实验反向证明：不碰撞的机器人活得更久，奖励自然更高。这让我重新审视自动驾驶里的\u0026quot;保守 vs 激进\u0026quot;之争——也许\u0026quot;安全驾驶\u0026quot;和\u0026quot;高效驾驶\u0026quot;在闭环意义下并不矛盾，关键在于规划器是否具备前瞻性的安全推理**，而不是事后的紧急制动。当模型能在生成轨迹时就内禀地避开风险，所谓\u0026quot;安全冗余\u0026quot;就不再是性能的拖累，而是长程收益的保障。\n最后，这篇 2023 年的工作到 ICLR 2025 才正式发表，恰好踩中了端到端自动驾驶上车的安全审查节点。监管对\u0026quot;可解释、可验证\u0026quot;的要求只会越来越严，纯黑盒扩散规划很难过审；而 SafeDiffuser 这种带形式化保证的路线，极可能成为端到端规划进入量产的合规通行证。把它和世界模型（参见本系列第 24 篇综述）、VLA（第 26 篇 DriveTeach-VLA）结合，\u0026quot;生成未来 + 可证安全 + 语言对齐\u0026ldquo;或许就是具身智能进入现实世界的三角支撑。\n与 Safety Gym 及经典方法的对比 将 SafeDiffuser 与安全强化学习领域的方法对比能更清晰地定位其独特价值：\n方法 安全保证类型 是否需要环境模型 可扩展性 是否兼容生成式规划 SafeDiffuser 可证明硬约束 ❌（数据驱动） 高 ✅ 原生兼容 Lagrangian/PPO-Safe 软约束 ✅ 中 ❌ 需重训策略 Wasserstein CBF 硬约束 ✅ 低 ❌ 需显式动力学 分类器引导扩散 概率安全 ❌ 高 ✅ 但无保证 SAC + 代价函数 软约束 ❌ 高 ❌ SafeDiffuser 是唯一同时满足数据驱动、可证明安全、与生成式规划兼容三种要求的方法。它的代价是依赖可微的安全函数 $h(x)$ 和额外的 QP 求解开销。\n扩展思考：SafeDiffuser 的下一步 安全函数自动学习：当前 $h(x)$ 需要人工设计。能否用神经网络自动学习安全函数（neural CBF）并保证可微？这能大大扩展 SafeDiffuser 的应用范围。\n与端到端自动驾驶结合：SafeDiffuser 目前验证的是机器人规划任务，还没有在驾驶数据集（如 nuScenes/NAVSIM）上测试。把安全约束嵌入驾驶轨迹生成，是落地 L4 的关键一步。\n分布外（OOD）泛化：SafeDiffuser 的保证依赖于训练分布的覆盖。当遇到训练集中从未出现的约束模式时，\u0026ldquo;可证明\u0026quot;还能否成立？这是开放问题。\n🔗 延伸阅读 工作 关系 Diffuser（Janner 2022） 扩散规划的鼻祖，SafeDiffuser 的安全升级对象 Diffusion Planner 本系列第 15 篇，推理时引导哲学相通但无形式保证 Control Barrier Functions 安全控制经典工具，本篇的理论基石 Consistency Models 一步生成，可作为 SafeDiffuser 实时化的加速器 世界模型综述（2501.11260） 本系列第 24 篇，安全生成的上游表征来源 📖 这是论文精读系列的第 25 篇。当扩散规划从\u0026quot;画得像\u0026quot;走向\u0026quot;可证明安全\u0026rdquo;，具身智能才真正敢把它放进现实世界。欢迎留言。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2306-00148/","summary":"SafeDiffuser 把控制论中的控制障碍函数（CBF）改造为有限时间扩散不变性，嵌入扩散去噪的每一步，为数据驱动的扩散规划器提供可证明的安全保证。它解决了扩散概率采样可能越界、约束只能\u0026rsquo;软学\u0026rsquo;、采样即赌博三大安全隐患。在迷宫、足式机器人、机械臂操作上验证了安全性与生成质量的兼得。","title":"论文精读｜SafeDiffuser：用控制障碍函数给扩散规划加上安全保证"},{"content":"📄 论文信息 **图1: VLA模型通用架构**。视觉编码器提取预训练视觉表征(PVRs)，LLM编码语言指令，通过Flamingo/BLIP-2/LLaVA三种策略对齐视觉-语言嵌入，最终由LLM作为解码器预测动作。虚线框内展示了三种代表性动作预测方法。 标题：A Survey on Vision-Language-Action Models for Embodied AI（具身智能视觉-语言-动作模型综述） 团队：香港中文大学（Yueen Ma, Irwin King）、布里斯托大学（Zixing Song）、华为诺亚方舟实验室（Yuzheng Zhuang, Jianye Hao） 发表：IEEE Transactions on Neural Networks and Learning Systems, 2025（arXiv:2405.14093v8） 关键词：视觉-语言-动作模型、具身智能、机器人学习、多模态模型、大语言模型 一句话总结：首篇全面综述VLA模型的文章，系统梳理了从组件到架构再到应用的技术全景，提出了三层分类体系（组件-控制策略-任务规划）。 论文链接：arXiv:2405.14093 代码仓库：Awesome-VLA 🤔 为什么需要这篇综述？ 从对话式AI到行动式AI的跨越 具身智能（Embodied AI）被广泛认为是通向通用人工智能（AGI）的基石，因为它涉及控制具身智能体在物理世界中执行任务。与对话式AI不同，具身智能需要控制物理实体与环境交互，而机器人学是具身智能最突出的应用领域。\n在语言条件化的机器人任务中，策略必须具备理解语言指令、视觉感知环境和生成适当动作的多模态能力。随着大语言模型（LLMs）和视觉-语言模型（VLMs）的成功，一种新的多模态模型类别——视觉-语言-动作（VLA）模型应运而生。VLA模型一词由RT-2首次提出，它利用VLMs的多模态能力来处理视觉、语言和动作三种模态的信息。\n为什么需要这篇综述？ VLA模型近年来经历了爆发式增长，涉及的研究方向众多且相互交织：\n组件研究多样化：从预训练视觉表征（PVRs）如CLIP、R3M、DINOv2，到世界模型（Dreamer系列、LLM诱导的世界模型），再到推理能力（CoT、ToT），每个方向都有大量工作。\n控制策略创新频繁：从RT-1开创性地使用Transformer作为控制策略，到RT-2首次提出VLA概念，再到OpenVLA提供开源大规模VLA模型，以及Diffusion Policy引入扩散模型进行动作生成，技术路线快速演进。\n任务规划方法多样：从SayCan的语言条件化规划，到Code as Policies的代码生成规划，再到ECoT的具身思维链推理，规划范式不断创新。\n这种技术的多样性使得研究者难以全面把握VLA模型的发展脉络。本综述正是在这一背景下诞生的——作为首篇专门针对VLA模型的综述，它不仅填补了领域空白，更为研究者提供了理解VLA模型全貌的系统框架。\n📚 综述覆盖范围 **图3: VLA模型分类体系**。综述提出的三层分类树：组件研究(RL/PVRs/世界模型/推理)→低级控制策略(Transformer/扩散/大型VLA)→高级任务规划(端到端/模块化)。整篇综述的章节组织即遵循此分类体系。 第一部分：VLA模型的核心组件 综述首先深入分析了VLA模型的各个核心组件，这些组件构成了VLA模型的技术基础：\n1. 强化学习（RL）基础 RL为具身智能奠定了基础，并持续推动VLA模型的发展：\nDQN：首次展示了直接从高维像素输入学习策略的可能性，强调了端到端RL中模型容量的重要性 Decision Transformer（DT）：将RL轨迹建模为序列问题，自然适配Transformer架构 Trajectory Transformer（TT）：进一步探索了Transformer在轨迹建模中的潜力 Gato：将这一范式扩展到多模态、多任务、多具身设置 RL与LLM的协同：RLHF将LLMs与人类偏好对齐，也应用于机器人学习；SEED利用RLHF和基于技能的RL解决稀疏奖励问题；Reflexion提出语言RL框架，用语言反馈替代权重更新；Eureka展示LLMs可以设计出超越人类专家的奖励函数 2. 预训练视觉表征（PVRs） 视觉编码器的性能直接影响VLA模型的表现，因为它提供了关于当前状态的关键信息。综述详细比较了多种PVR方法：\n模型 网络 类型 核心思想 适用任务 CLIP ViT-B 视觉-语言对比学习 在4亿图像-文本对上预训练，识别正确的图文对 被CLIPort、EmbCLIP等广泛使用 R3M ResNet-50 时间对比学习 最小化时序相近帧的距离，增远时序远离帧的距离 Meta-World、Franka Kitchen MVP ViT-B/L MAE 将掩码自编码器应用于机器人数据集 xArm7抓取、推 cube VIP ResNet-50 时间对比学习 利用视频时序关系，引入折扣因子 Franka抓放、折叠毛巾 VC-1 ViT-L MAE+CL 系统探索不同ViT配置在多种数据集上的最优组合 Meta-World、Habitat DINOv2 ViT 自蒸馏 教师-学生网络匹配不同视图的编码表示 被OpenVLA、ReKep使用 I-JEPA ViT JEPA 基于联合嵌入预测架构，构建\u0026quot;原始\u0026quot;内部世界模型 - Theia ViT-T/S/B 蒸馏 将多种视觉基础模型（ViT、CLIP、SAM、DINOv2、Depth-Anything）蒸馏到单一模型 CortexBench 3. 动力学学习 动力学学习包括前向动力学（预测下一状态）和逆向动力学（预测动作）：\n前向动力学：$\\hat{s}_{t+1} \\leftarrow f_{\\text{fwd}}(s_t, a_t)$\n逆向动力学：$\\hat{a}_t \\leftarrow f_{\\text{inv}}(s_t, s_{t+1})$\n代表性方法包括：\nVi-PRoM：提出三种预训练目标——对比自监督、时序动力学、伪标签分类 MIDAS：引入逆动力学预测任务作为预训练，训练模型从观测预测动作 SMART：结合前向动力学、逆向动力学和随机掩码事后控制三个目标 MaskDP：掩码决策预测，同时掩码状态和动作token进行重建 PACT：建模状态-动作转移，自回归预测每个状态和动作token VPT：利用无标签互联网数据预训练Minecraft基础模型 GR-1：为GPT式模型引入视频预测预训练 4. 世界模型 世界模型 $P(\\cdot)$ 编码了关于世界的常识知识，能够预测给定动作的未来状态：\n$$\\hat{s}_{t+1} \\sim P(s_{t+1} | s_t, a_t)$$Dreamer系列：\nDreamer：使用表示模型、转移模型和奖励模型构建潜在动力学模型 DreamerV2：引入离散潜在状态空间和改进目标 DreamerV3：扩展到更广泛的领域，使用固定超参数 DayDreamer：将方法应用于真实世界机器人任务 LLM诱导的世界模型：\nDECKARD：提示LLM生成抽象世界模型（有向无环图），用于Minecraft物品合成 LLM-DM：使用LLM构建PDDL格式的世界模型，LLM还作为接口连接生成的PDDL模型和纠正反馈 RAP：将LLM重新用作策略和世界模型，结合蒙特卡洛树搜索（MCTS）进行结构化规划 LLM-MCTS：扩展到POMDP设置，LLM生成当前状态的初始信念并指导动作选择 视觉世界模型：\nIRIS：使用GPT式自回归Transformer作为世界模型基础，VQ-VAE作为视觉编码器 TWM：探索Transformer在构建世界模型中的应用 5. 推理能力 VLA模型中的推理研究包括：\n思维链（CoT）：逐步推理，将复杂问题分解为子步骤 思维树（ToT）：将推理过程组织为树结构，探索多条推理路径 ECoT（Embodied Chain-of-Thought）：将思维链推理引入具身场景 具身推理框架：专门针对机器人任务设计的推理方法 6. 策略引导 策略引导研究如何利用LLMs的常识知识来指导机器人策略：\n语言条件化：将语言指令作为策略的条件输入 技能发现：利用LLMs自动发现和组合基本技能 任务分解：将复杂任务分解为可执行的子任务序列 **图4: 分层机器人策略示意图**。高级任务规划器将用户指令分解为子任务序列，低级控制策略逐步执行每个子动作。当前机器人系统普遍采用这种分层框架——高层利用大容量模型进行推理规划，底层专注于速度和精度。 第二部分：低级控制策略 控制策略负责将语言指令和视觉观察转换为低级动作。综述将其分为多个子类别：\n1. Transformer控制策略 RT-1（Google, 2022）：开创性地使用Transformer作为控制策略，在13万+真实机器人轨迹上训练，展示了scaling law RT-2（Google, 2023）：首次提出VLA概念，将VLM适配到机器人任务，将网络知识迁移到机器人控制 OpenVLA（Stanford, 2024）：提供开源的大规模VLA模型，推动VLA技术的民主化 Octo（UC Berkeley, 2024）：开源通用机器人策略，支持多任务学习 2. 扩散策略 Diffusion Policy（MIT, 2023）：引入扩散模型进行动作生成，天然支持多模态动作分布 3D Diffusion Policy：利用3D视觉信息增强扩散策略 Diffusion Policy with 3D Vision：结合3D点云和扩散模型 3. 大型VLA模型 PaLM-E（Google, 2023）：将PaLM与视觉嵌入结合，实现具身多模态理解 CaP（Code as Policies）：将代码生成作为动作预测的方式 π₀（Physical Intelligence, 2024）：基于Flow Matching的通用VLA模型 SmolVLA（Hugging Face, 2025）：轻量级VLA模型，支持语言条件控制 4. 动作类型与训练目标 综述详细比较了不同动作类型及其训练目标：\n离散动作：将连续动作离散化为token（如RT系列） 连续动作：直接回归连续动作值 扩散动作：通过扩散过程生成动作序列 动作块（Action Chunk）：预测未来多步动作的序列 **图5: VLA模型9种代表性架构**。(a)FiLM(特征线性调制) (b)交叉注意力 (c)拼接融合 (d)工具使用 (e)标准大型VLA (f)动作专家 (g)双系统推理 (h)VLA+世界模型 (i)量化方法。每种架构对应不同的视觉-语言融合策略和动作输出方式。 第三部分：高级任务规划 任务规划器负责将长期任务分解为子任务序列，引导VLA模型完成更复杂的用户指令：\n1. 端到端任务规划 直接从原始输入预测动作序列的方法，无需显式的任务分解步骤。\n2. 模块化任务规划 基于语言的任务规划：\nSayCan（Google, 2022）：利用LLMs的常识知识和机器人技能的可行性来规划任务 Inner Monologue：通过内心独白进行任务规划 DEPS：描述、解释、规划和选择的多步规划框架 基于代码的任务规划：\nProgPrompt：将任务规划转化为代码生成问题 Code as Policies：直接生成可执行的代码来控制机器人 VoxPoser：利用LLMs和VLMs生成3D值函数来规划操作 3. 具身推理 ECoT（Embodied Chain-of-Thought）：将思维链推理引入具身场景 AR2：自回归具身推理框架 Reasoning with World Models：利用世界模型进行具身推理 **图2: VLA模型概念图与时间线**。(a)文氏图展示了具身AI的核心概念：视觉(Vision)、语言(Language)和机器人(Robotics)的交集构成VLA研究的完整版图。(b)时间线梳理了从单模态模型→视觉-语言模型→VLA模型的演进脉络。 🗺️ 技术路线图 本综述提出了一个清晰的VLA模型分类体系，基于当前机器人系统的层级框架：\nVLA模型分类体系：\n组件研究\n强化学习（DQN, DT, TT, Gato, RLHF） 预训练视觉表征（PVRs）：CLIP（对比学习）、R3M（时间对比学习）、MVP（MAE）、VC-1（系统探索）、DINOv2（自蒸馏）、I-JEPA（联合嵌入预测）、Theia（多模型蒸馏） 视频表征（NeRF, 3D-GS） 动力学学习：前向动力学（预测下一状态）、逆向动力学（预测动作） 世界模型：Dreamer系列（潜在动力学）、LLM诱导的世界模型（DECKARD, LLM-DM, RAP）、视觉世界模型（IRIS, TWM） 推理能力（CoT, ToT, ECoT） 策略引导 低级控制策略\n非Transformer控制策略（CNN, RNN） Transformer控制策略（RT-1, RT-2, OpenVLA, Octo） 多模态指令控制策略 3D视觉控制策略 扩散策略（Diffusion Policy, 3D Diffusion Policy） 大型VLA模型（PaLM-E, CaP, π₀, SmolVLA） 高级任务规划\n单体任务规划：端到端任务规划、3D视觉端到端任务规划、具身任务规划（Grounded Task Planners） 模块化任务规划：基于语言的任务规划（SayCan, Inner Monologue, DEPS）、基于代码的任务规划（ProgPrompt, Code as Policies, VoxPoser） 这种分类体系体现了当前机器人系统的层级框架：高级任务规划器利用大容量模型进行任务分解，低级控制策略专注于速度和精度，形成类似于层级强化学习的架构。\n**图6: 任务规划方法对比**。(a)单体任务规划器：直接从原始输入端到端预测动作序列，无需显式任务分解。(b)模块化任务规划器：通过语言(如SayCan)或代码(如Code as Policies)将长期任务分解为子任务序列，再交由低级控制策略执行。 📊 关键论文对比表 模型 团队 年份 核心架构 动作类型 特点 RT-1 Google 2022 EfficientNet+Transformer 离散token 首个大规模机器人Transformer RT-2 Google 2023 VLM→VLA 离散token 首次提出VLA概念 OpenVLA Stanford 2024 Prismatic VLM 离散token 开源大规模VLA Diffusion Policy MIT 2023 CNN/Transformer+扩散 扩散采样 多模态动作分布 PaLM-E Google 2023 PaLM+视觉嵌入 连续回归 具身多模态理解 π₀ Physical Intelligence 2024 VLM+Flow Matching Flow Matching 通用VLA模型 SmolVLA Hugging Face 2025 轻量级VLM Flow Matching 轻量高效 SayCan Google 2022 LLM+可行性 - 语言条件化规划 Code as Policies Google 2022 LLM→代码 - 代码生成规划 ECoT - 2023 LLM+思维链 - 具身推理 **图7: 关键单模态模型时间线**。从AlexNet、RNN、DQN到Transformer、GPT系列、CLIP，展示了推动VLA模型发展的基础技术演进。底部标注了各模型对VLA发展的贡献方向(NLP/CV/RL/Multimodal)。 🔍 个人思考 综述的亮点 1. 首创性与全面性：作为首篇VLA模型综述，本工作填补了领域空白。它不仅涵盖了组件研究（PVRs、动力学、世界模型、推理），还包括控制策略（Transformer、扩散、大型VLA）和任务规划（语言、代码、具身推理），形成了完整的技术图谱。\n2. 清晰的三层分类体系：综述提出的分类体系（组件-控制策略-任务规划）逻辑清晰，与当前机器人系统的实际架构高度契合。高级规划器利用大容量模型进行任务分解，低级控制策略专注于速度和精度，这种层级结构为研究者提供了明确的导航框架。\n3. 丰富的资源汇总：综述详细总结了训练和评估VLA模型所需的数据集、仿真器和基准测试，包括真实世界机器人数据集（Open X-Embodiment、DROID）、仿真环境（LIBERO、Meta-World、Habitat）和任务规划基准，为后续研究提供了宝贵的资源目录。\n4. 深入的组件分析：综述对每个核心组件都进行了深入分析，包括PVRs的训练目标对比、动力学学习的前向/逆向对比、世界模型的LLM诱导vs视觉生成对比，帮助研究者理解各组件的技术细节和适用场景。\n不足之处 1. 实验对比的缺失：作为综述文章，本文主要进行文献梳理和分类，缺乏对不同VLA模型在统一基准上的系统性实验对比，使得读者难以直观判断各方法的优劣。\n2. 实际部署挑战的深度不足：虽然综述提到了安全性和实时响应等挑战，但对实际部署中面临的工程问题（如模型压缩、延迟优化、硬件适配）的讨论相对有限。\n3. 跨领域应用的覆盖不均：综述主要聚焦于机器人操作和导航，对自动驾驶、医疗机器人等其他具身智能应用场景的覆盖相对较少。\n对领域的启发 本综述揭示了VLA模型发展的几个关键趋势：\n从专用到通用：VLA模型正从处理特定任务的专用模型（如RT-1）向能够执行多种任务的通用模型（如RT-2、OpenVLA）演进，这与LLM和VLM的发展路径一致。\n端到端学习的兴起：越来越多的研究倾向于端到端学习，减少手工设计的模块，这可能简化系统架构并提高性能。\n安全与对齐的重要性：随着VLA模型在物理世界中的应用，安全性和与人类意图的对齐变得至关重要，这需要新的技术方案（如RLHF、安全约束RL）。\n数据稀缺的挑战：高质量机器人数据的获取仍然是主要瓶颈，自动数据收集和模拟数据的利用成为重要研究方向。\n开源生态的形成：OpenVLA、Octo、LeRobot等开源项目的出现，正在推动VLA技术的民主化，降低研究门槛。\n**图8: 单模态模型规模增长趋势**。展示了CV/NLP/RL三大领域模型参数量的增长曲线。GPT-4等大模型的出现为VLA提供了强大的基础能力，但同时也带来了计算开销和数据需求等挑战。 📖 延伸阅读 RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control（Brohan et al., 2023）- 首次提出VLA概念，将网络知识迁移到机器人控制，是VLA模型的奠基之作\nOpenVLA: An Open-Source Vision-Language-Action Model（Kim et al., 2024）- 开源的大规模VLA模型，推动了VLA技术的民主化，基于Prismatic VLM架构\nDiffusion Policy: Visuomotor Policy Learning via Action Diffusion（Chi et al., 2023）- 将扩散模型引入机器人控制，开创了扩散策略范式，在多模态动作分布建模方面表现出色\nSayCan: Do As I Can, Not As I Say: Grounding Language in Robotic Affordances（Ahn et al., 2022）- 利用LLMs的常识知识和机器人技能可行性进行任务规划，是模块化任务规划的经典之作\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/vla-survey-2024/","summary":"首篇系统性综述视觉-语言-动作（VLA）模型的文章，从组件、控制策略和任务规划三个维度全面梳理了VLA模型的技术脉络，涵盖CLIP/R3M/DINOv2等视觉表征、RT-1/RT-2/OpenVLA等控制策略、SayCan/Code as Policies等任务规划方法，并深入探讨了安全、数据集、基础模型等挑战与未来方向。","title":"论文精读｜具身智能VLA模型综述：从视觉-语言到动作生成的技术全景"},{"content":"📄 论文信息 标题：MVAdapt: Zero-Shot Multi-Vehicle Adaptation for End-to-End Autonomous Driving 团队：首尔大学（Haesung Oh, Jaeheung Park） arXiv：2604.11854（2026 年 4 月 13 日提交，cs.RO） 代码：github.com/hae-sung-oh/MVAdapt（已开源） 一句话总结：端到端自动驾驶模型隐含地绑定了训练车的动力学特性，换辆车就翻车——MVAdapt 把\u0026quot;车辆物理属性\u0026quot;作为显式条件注入模型，在冻结感知骨干的情况下实现零样本跨车型迁移。 🤔 要解决什么问题？ 被忽视的\u0026quot;车辆域差距\u0026quot; 端到端自动驾驶模型通常只在一辆固定车型上训练和评测。但作者指出：驾驶策略隐式地绑定了训练车的动力学特性。当模型被部署到不同物理属性的车辆上时，性能会严重下降——他们把这个问题定义为车辆域差距（Vehicle-Domain Gap）。\n差距具体体现在三个层面：\n问题 说明 后果 动态响应差异 SUV 和轿车对相同控制输入的反应不同 同一控制量，SUV 转向不足、轿车转向过度 轨迹可行性 对轿车安全的轨迹对 SUV 可能不可行 转弯半径不足、碰撞路沿 运动学可行性 模型可能输出车辆无法执行的运动指令 超出物理极限的控制命令 差距有多大？ 一个在默认车辆上训练的 TransFuser++ 路径点模型，naïve transfer 到 27 种训练分布内车辆时 Driving Score 平均仅 19.31，到 31 种未见车辆上仅 28.77——远低于源车上的专用性能。这个下降幅度说明车辆域差距不是概念问题，而是实际问题。\n🏗️ 架构总览：物理条件化的场景特征 MVAdapt 的核心设计哲学是：冻结场景编码器（保留视觉泛化能力），显式注入车辆物理属性（条件化驾驶策略）。\n整体数据流（三段式）：\n场景编码：相机 + LiDAR → TransFuser++（冻结） → 场景特征 $F_s$ 物理条件注入：车辆属性 {wheelbase, mass, drivetrain} → MLP 编码 → $F_p$ → 交叉注意力($F_s$, $F_p$) → 融合特征 $F_{\\text{fused}}$ 路径生成：$F_{\\text{fused}}$ → GRU 自回归解码 → 未来路径点 $\\{(x,y)_1,\\dots,(x,y)_T\\}$ 组件 1：场景特征提取器（冻结） MVAdapt 使用 TransFuser++ 作为场景骨干，该模型是 CARLA 端到端驾驶的经典基线。TransFuser++ 通过 Transformer 融合相机图像和 LiDAR BEV 特征，输出场景级特征表示。关键在于：MVAdapt 冻结了整个 TransFuser++ 骨干，不更新其参数。这意味着模型保留了源数据的视觉泛化能力，只通过物理条件来调整驾驶行为。\n组件 2：物理编码器 这是 MVAdapt 的核心创新。作者将每辆车的物理属性编码为一个固定维度的嵌入向量。所选物理参数包括：\n物理参数 符号 归一化方式 对驾驶行为的影响 轴距（Wheelbase） $L$ 除以最大值 转弯半径、操控灵活性 轮距（Track） $T$ 除以最大值 稳定性、侧倾特性 质量（Mass） $m$ 除以最大值 加速/制动距离、惯性 最大转向角 $\\delta_{\\max}$ 除以最大值 最小转弯半径 最大速度 $v_{\\max}$ 除以最大值 巡航策略、跟车距离 驱动方式（Drivetrain） — One-hot（FWD/RWD/AWD） 牵引力、操控特性 这些参数通过一个轻量 MLP 编码为物理嵌入 $F_p$：\n$$F_p = \\text{MLP}(\\text{Concat}[L_{\\text{norm}}, T_{\\text{norm}}, m_{\\text{norm}}, \\delta_{\\text{norm}}, v_{\\text{norm}}, \\text{drivetrain\\_onehot}])$$归一化到 $[0, 1]$ 范围是关键设计：它让模型对不同物理量纲的参数一视同仁，同时让零样本迁移时只需输入新车的物理参数即可。\n组件 3：交叉注意力融合 场景特征 $F_s$ 与物理嵌入 $F_p$ 通过一个多头 Transformer 编码器融合：\n$$F_{\\text{fused}} = \\text{MultiHeadAttn}(Q=F_s, K=F_p, V=F_p)$$物理嵌入作为 Key 和 Value，场景特征作为 Query。这意味着模型根据当前场景特征，去\u0026quot;查询\u0026quot;与车辆物理属性最相关的动态信息——比如在急弯场景下，交叉注意力会强调轴距和最大转向角的信息，让路径点更保守。\n组件 4：GRU 路径点解码器 融合特征被送入一个 GRU 自回归解码器，逐点生成未来路径点：\n$$\\hat{w}_t = \\text{GRU}(F_{\\text{fused}}, \\hat{w}_{t-1}), \\quad t=1, \\dots, T$$训练目标为路径点的 $L_1$ 损失：\n$$\\mathcal{L} = \\sum_{t=1}^T \\|\\hat{w}_t - w_t^{\\text{expert}}\\|_1$$零样本迁移与少样本微调 MVAdapt 支持两种适应模式：\n零样本适应（Zero-Shot）：只需替换推理时的物理参数输入，模型自动调整驾驶策略。因为物理编码器在所有车辆上共享且 TransFuser++ 骨干冻结，模型学会了\u0026quot;给定相同场景 + 不同物理属性 → 输出不同路径点\u0026quot;的映射。\n少样本微调（Few-Shot）：对于极端物理异常值（如重型卡车），零样本迁移可能不够。MVAdapt 支持用新车的少量轨迹数据微调物理编码器 + 交叉注意力模块（仍冻结 TransFuser++ 骨干），数据量只需约 1 分钟的驾驶数据。\n🧪 实验验证：58 车型 + CARLA Leaderboard 实验设定 仿真器：CARLA Leaderboard 1.0（Town01-Town15 的 36 条测试路线） 训练车辆：27 种（含轿车、SUV、跑车、皮卡、厢式货车等） 测试车辆：58 种（27 种 ID + 31 种 OOD 未见车辆） 基线：Naïve Transfer、URMA（统一本体架构）、BodyTransformer 零样本适应结果 方法 ID 车辆 Driving Score OOD 车辆 Driving Score Naïve Transfer 19.31 28.77 URMA 26.49 37.37 BodyTransformer 29.04 40.12 MVAdapt 44.77 53.83 MVAdapt 在 ID 车辆上比最佳基线 BodyTransformer 高 15.7 个点，在 OOD 车辆上高 13.7 个点。值得注意的是 OOD 分数高于 ID——作者解释说这是因为 OOD 车辆中包括大量与训练车相似的车型，而 ID 车辆中包含了一些物理异常值（如重型货车）拉低了均值。\n定性分析 两个定性案例清晰说明了物理条件化的效果：\n场景 车型 基线行为 MVAdapt 行为 原因 转弯半径 Cybertruck（大型） URMA 误判转弯半径 → 被别车卡住（RC 约 66%） 根据物理参数意识到底盘大 → 保持更安全轨迹 → 顺利通过（RC 100%） 轴距+轮距信息让模型知道大车转弯要更保守 过度转向 Mini Cooper（小型） BodyTransformer 以中型车曲率右转 → 过度转向冲上路沿（RC 15%） 意识到底盘小、转向灵活 → 更紧凑的转弯轨迹 → 无违规通过（RC 100%） 物理参数让模型知道自己\u0026quot;小而灵活\u0026quot; 此外，越界预测问题也被显著缓解：naïve transfer 经常预测超出车辆物理极限的转向角，MVAdapt 因为有物理条件约束，输出始终在可行范围内。\n消融实验 组件 配置 ID DS OOD DS 完整 MVAdapt — 44.77 53.83 w/o 交叉注意力 仅拼接场景与物理特征 38.50 48.09 w/o 物理编码器 仅用场景特征 20.14 28.58 w/o 特征归一化 物理参数不归一化 37.21 46.34 消融表明：\n物理编码器是最关键的组件：去掉后 Driving Score 暴跌到 20.14（几乎等于 naïve transfer） 交叉注意力比简单拼接更好：+6.3/+5.7 个点，说明选择性地融合物理信息比粗暴拼接更有效 物理参数归一化也有明显贡献：+7.6/+7.5 个点 少样本微调 对极端物理异常值的实验中，仅用 2 条专家轨迹（约 60 秒驾驶数据） 微调物理编码器和交叉注意力，MVAdapt 就在未见车辆上从零样本的 28.94→44.66（+15.7），展示了极高的数据效率。\n💡 个人思考 \u0026ldquo;冻结骨干 + 条件化适配\u0026quot;是高效的域迁移范式：MVAdapt 不重新训练庞大的感知模型（TransFuser++），而是只加一个轻量物理条件模块。这个思路对工业部署极具吸引力——你只需要一个通用的场景编码器（可以在大规模数据上预训练），然后为每辆车配一组物理参数，零样本部署。对比当前\u0026quot;每辆车训一个模型\u0026quot;的做法，这是数量级的效率提升。\n车辆域差距是一个被低估的研究方向：当前端到端驾驶研究几乎都默认使用单一车型评测（CARLA 默认车、nuScenes 固定平台），没有人问\u0026quot;如果换辆车，模型还能开吗？\u0026quot;。MVAdapt 用 58 辆车的系统实验证明，这个差距大到不可忽视。这提醒我们：端到端模型的\u0026quot;泛化性\u0026quot;评测应该包括车辆本体维度，而不只是天气、场景、光照。\n物理参数的选取是最关键的工程决策：MVAdapt 只用了 6 个物理参数（轴距、轮距、质量、最大转向角、最大速度、驱动方式）。为什么不多用（如轮胎摩擦系数、悬挂刚度）？少用是\u0026quot;够用\u0026rdquo;，多用会引入噪声和难获取的参数。对一个依赖 CARLA 仿真环境的工作来说，这些参数正好是仿真器暴露的、且对驾驶行为影响最显著的。这个\u0026quot;最简足够\u0026quot;的原则值得学习——在实际系统中，传感器到执行器的物理参数链很长，找到\u0026quot;因果影响驾驶策略的最小参数集\u0026quot;才是关键。\n对比具身 VLA 的启示：LingBot-VLA 2.0 在机器人的跨本体泛化上也碰到同样的问题——不同机器人的动力学差异导致统一动作头难以学习。MVAdapt 的\u0026quot;物理条件化\u0026quot;思路也可以迁移到 VLA：在 VLM 的动作头前面加一个\u0026quot;机器人物理属性编码器\u0026quot;，让同一套模型根据不同的机器人尺寸/自由度/驱动力矩调整动作输出。这和 LingBot-VLA 2.0 的 MoE 动作专家是互补方案——MoE 隐式地让专家自发分化，而物理条件化是显式地告诉模型\u0026quot;你现在是什么车\u0026quot;。\n局限与展望：当前工作在 CARLA 仿真上验证，sim-to-real 仍有 gap——真实车辆的物理参数更难精确获取，且轮胎、悬挂等非线性因素在仿真中简化了。此外，极端物理异常值（如重型卡车拖挂）需要少样本微调，真正的\u0026quot;零样本\u0026quot;还有距离。但方向是对的：把\u0026quot;隐含的动力学绑定\u0026quot;拆成\u0026quot;显式的物理条件\u0026quot;，是让端到端模型真正可迁移的第一步。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2604-11854/","summary":"MVAdapt 揭示了端到端自动驾驶的\u0026rsquo;车辆域差距\u0026rsquo;：模型隐式绑定了训练车的动力学特性，换车即翻车。它用轻量物理编码器编码轴距、质量、驱动方式等物理属性，通过交叉注意力注入冻结的场景编码器，在不损失视觉泛化能力的前提下实现跨车型适应。在 58 种车型上的零样本迁移表现大幅领先 naive transfer 和 URMA 等基线。","title":"论文精读｜MVAdapt：零样本多车型适应的端到端自动驾驶"},{"content":"📄 论文信息 标题：Teaching Vision-Language-Action Models What to See and Where to Look 方法名：DriveTeach-VLA 作者：Yuguang Yang、Canyu Chen、Zhewen Tan、Yizhi Wang、Zichao Feng、Chunyang Liu、Kehua Sheng、Juan Zhang、Linlin Yang、Baochang Zhang、Yan Wang、Bo Zhang、Xianbin Cao（共 13 位） arXiv：2607.01658（2026 年 7 月） 发表：ECCV 2026 代码：ShivaTeam/DriveTeach-VLA（基于 Qwen2.5-VL、NAVSIM、LLaMA-Factory） 一句话总结：驾驶 VLA 的瓶颈不在语言推理而在视觉空间 grounding；DriveTeach-VLA 用「看什么 → 往哪看 → 怎么动」三段式视觉教学管线，把驾驶专用感知先验和可行轨迹的空间对齐注入 VLA，端到端刷新 NAVSIM/nuScenes SOTA。 🤔 要解决什么问题？驾驶 VLA 的\u0026quot;看不懂\u0026quot; 视觉-语言-动作（VLA）模型正在接管端到端自动驾驶：把多视图图像和指令直接映射成轨迹。但当前训练范式有个结构性偏见——重度依赖文本中心的 VQA 和思维链（CoT）数据。这带来一个隐蔽却致命的后果：\n症状 根因 后果 语义强、空间弱 VQA 强调\u0026quot;语言推理\u0026quot;而非\u0026quot;动作 grounding\u0026quot; 模型会\u0026quot;说\u0026quot;不会\u0026quot;开\u0026quot; 轨迹预测不稳 表征缺空间依赖关系 转弯、变道时轨迹漂移 视觉编码器\u0026quot;跑偏\u0026quot; 视觉塔沿袭通用图文预训练 对驾驶关键线索不敏感 一句话：现有 VLA 学到了**\u0026ldquo;这条路叫什么\u0026rdquo;（语义），却没学到\u0026ldquo;关键物体在哪、我该往哪走\u0026rdquo;**（空间）。DriveTeach-VLA 的核心判断是——驾驶 VLA 翻车，往往不是\u0026quot;想不清\u0026quot;，而是\u0026quot;看不对\u0026quot;。于是它把手术刀挥向视觉侧，提出一条\u0026quot;视觉引导式学习\u0026ldquo;管线。\n💡 核心思想：三段式视觉教学 DriveTeach-VLA 的精髓是把训练拆成三个递进的\u0026quot;教学环节\u0026rdquo;，每一环回答一个问题：\n阶段 要回答的问题 模块 机制 ① What to see 该关注哪些视觉线索？ DVD 视觉自蒸馏预训练 ② Where to look 该往空间哪里看？ 2D-TGP + SFT 轨迹引导提示微调 ③ How to act 该怎么动车？ TGP-guided GRPO 强化学习对齐 这三段不是简单堆叠，而是层层递进的 grounding 注入：先让视觉编码器\u0026quot;长出驾驶眼睛\u0026quot;，再教它\u0026quot;顺着可行轨迹看\u0026quot;，最后用 RL 把\u0026quot;看对\u0026quot;转化为\u0026quot;开好\u0026quot;。\n① DVD：教模型\u0026quot;看什么\u0026quot;（Driving-aware Vision Distillation） DVD（驾驶感知蒸馏） 解决视觉塔的偏见。通用图文预训练的视觉编码器对\u0026quot;驾驶语义\u0026quot;（车道、交通参与者、可行驶区域）不敏感。DVD 通过自蒸馏（self-distillation） 从bbox 增强图像中把交通专用先验注入视觉编码器：教师网络提供驾驶感知目标，学生网络在增强视图上对齐，让编码器\u0026quot;知道哪些区域承载驾驶信息\u0026quot;。\nDVD 蒸馏的数学形式 给定一张前视图像 $I$，先使用 Grounding DINO 检测交通关键目标，将检测到的 bbox 叠加到原图上形成 bbox 增强图像 $I_b$。教师网络 $E_{\\text{teacher}}$ 处理 $I_b$，学生网络 $E_{\\text{student}}$ 处理原图 $I$，蒸馏损失迫使学生的视觉表征接近教师：\n$$\\mathcal{L}_{\\text{DVD}} = \\sum_{l \\in \\mathcal{L}} \\left\\| \\text{Proj}_l\\left(E_{\\text{student}}^{(l)}(I)\\right) - \\text{sg}\\left(E_{\\text{teacher}}^{(l)}(I_b)\\right) \\right\\|^2$$其中 $l$ 是 ViT 的中间层索引，$\\text{Proj}_l$ 是投影头将特征对齐到相同维度，$\\text{sg}$ 是 stop-gradient（阻止梯度回传到教师）。教师权重通过 EMA 更新：\n$$\\theta_{\\text{teacher}} \\leftarrow \\tau \\cdot \\theta_{\\text{teacher}} + (1 - \\tau) \\cdot \\theta_{\\text{student}}$$KD 系数 $\\tau$ 由 dvd_ema 控制。这种自蒸馏的巧妙之处在于教师和学生看到的图像不同——教师看到的是带有明确 bbox 标注的\u0026quot;答案\u0026quot;，学生看到的是原图，学生必须学会从原始像素中自行提取与驾驶相关的视觉线索，而不是简单复制教师输出。\nDVD 配置与工程实现 工程上，DVD 以可配置参数挂进 LLaMA-Factory 训练流，关键旋钮包括：\n参数 作用 enable_dvd 开关 DVD 蒸馏 dvd_h_size / dvd_w_size 2D-TGP 网格的行列分辨率 dvd_tgp_weight TGP 监督的权重 dvd_ema 教师网络的指数滑动平均系数 这种预训练阶段就植入驾驶视觉先验的做法，比\u0026quot;事后用 CoT 文本纠偏\u0026quot;更治本——它改的是表征本身，而非提示词。从实验上看，去掉 DVD 后模型在 NAVSIM 的 PDMS 下降约 3-5 个点，说明驾驶视觉先验对于下游规划有直接的正面贡献。\n② 2D-TGP 的数学机制 2D-TGP（2D 轨迹引导提示）的核心是把 BEV 坐标系中的专家轨迹投影到图像平面。假设自车在 BEV 坐标系下的未来轨迹为 $\\mathcal{T}_{\\text{BEV}} = \\{(x_i, y_i, \\theta_i)\\}_{i=1}^{N}$，其中 $N=8$ 是未来 4 秒均匀采样的关键点。使用针孔相机模型将 3D 点投影到图像坐标：\n$$\\begin{bmatrix} u_i \\\\ v_i \\\\ 1 \\end{bmatrix} = K \\cdot [R|t] \\cdot \\begin{bmatrix} x_i \\\\ y_i \\\\ 0 \\\\ 1 \\end{bmatrix}$$其中 $K$ 是相机内参矩阵，$[R|t]$ 是自车到相机的刚体变换。投影后的 2D 关键点 $\\{(u_i, v_i)\\}_{i=1}^{N}$ 构成 TGP 提示序列，以 [PT, {\u0026quot;point_2d\u0026quot;: [u_i, v_i], \u0026quot;heading\u0026quot;: θ_i}, ...] 的 JSON 格式注入 prompt。\n为什么 2D 投影优于纯语言描述？ 关键在于信息无损程度。语言描述\u0026quot;向左变道\u0026quot;丢失了变道的曲率、时机和幅度；而 2D 关键点序列保留了完整的空间几何信息。实验表明，当 2D-TGP 被替换为纯文本轨迹描述时，Planner 的轨迹预测 ADE 增加约 15%，验证了空间条件比语言条件更有效。\n② 2D-TGP：教模型\u0026quot;往哪看\u0026quot;（2D Trajectory-Guided Prompts） 2D-TGP（2D 轨迹引导提示） 是全篇的空间 grounding 核心。它把\u0026quot;可行驾驶轨迹\u0026quot;投影成 2D 关键点提示，作为空间条件喂给模型——明确告诉它\u0026quot;沿着这条可行路径看\u0026quot;。这绕开了纯语言 CoT 的歧义：与其用文字描述\u0026quot;我要左转变道\u0026quot;，不如直接给出左转轨迹的 2D 投影点序列。\nTGP 配合 SFT（监督微调），让模型学到\u0026quot;图像 + 2D-TGP 关键点 → 带归一化轨迹的 CoT JSON\u0026ldquo;的映射。关键洞察是：空间提示比语言提示更贴近轨迹预测的本质——轨迹本就是空间几何量，用空间条件去 grounding，比用语言\u0026quot;翻译\u0026quot;再\u0026quot;反译\u0026quot;回空间少走一圈弯路。\n③ TGP-guided GRPO：教模型\u0026quot;怎么动\u0026rdquo; 最后阶段用 GRPO 强化学习把轨迹预测对齐到更好的驾驶偏好。这里 DriveTeach-VLA 复用了 Curious-VLA 的 RL 设计，并以 2D-TGP 为条件信号，让奖励信号聚焦在与轨迹空间一致性上。\nGRPO 奖励函数设计 DriveTeach-VLA 的奖励函数直接采用 NAVSIM 的 PDM-Score（PDMS） 作为优化目标。PDMS 综合了三个维度：\n$$\\mathcal{R} = w_p \\cdot \\mathcal{R}_{\\text{progress}} + w_s \\cdot \\mathcal{R}_{\\text{safety}} + w_c \\cdot \\mathcal{R}_{\\text{comfort}}$$ Progress（进度奖励）：衡量沿参考路径的前进距离，鼓励模型高效到达目的地 Safety（安全奖励）：评估与障碍物的最小距离和碰撞风险，通过 TTC（碰撞时间）和距离裕度计算 Comfort（舒适奖励）：惩罚 jerk（急动度）、横向加速度和转向平滑度 GRPO 的核心优势是不需要价值网络（critic），而是通过组内比较计算 advantage：\n$$A_i = \\frac{\\text{PDMS}_i - \\text{mean}(\\text{PDMS}_{1..G})}{\\text{std}(\\text{PDMS}_{1..G}) + \\epsilon}$$对同一个场景采样 $G$ 条轨迹，用组内 PDMS 的均值和标准差做归一化。正 advantage 的轨迹被鼓励、负 advantage 的被抑制，policy 更新采用 clipped 目标：\n$$\\mathcal{L}_{\\text{GRPO}} = -\\mathbb{E}\\left[\\min\\left(r_i \\cdot A_i,\\ \\text{clip}(r_i, 1-\\epsilon, 1+\\epsilon)\\cdot A_i\\right)\\right] + \\beta \\cdot \\mathcal{L}_{\\text{KL}}$$三段式闭环就此打通：DVD 让视觉\u0026quot;看得见驾驶\u0026quot; → TGP-SFT 让模型\u0026quot;看着轨迹学\u0026quot; → TGP-GRPO 让\u0026quot;学到的\u0026quot;进一步\u0026quot;开得好\u0026quot;。\n🏗️ 双模型推理：Prompter + Planner DriveTeach-VLA 在推理时采用双模型串联结构，而非单一大模型直出：\n子模型 输入 输出 职责 TGP-Prompter 前视图像 2D-TGP 关键点 \u0026ldquo;我该往哪看\u0026rdquo; TGP-Planner 前视图像 + 预测的 2D-TGP BEV 轨迹 \u0026ldquo;我该怎么开\u0026rdquo; 流程是：Prompter 先从前视图像预测出 2D-TGP，Planner 再以预测的 2D-TGP 为条件生成 BEV 轨迹。这种\u0026quot;先定位空间意图、再生成轨迹\u0026quot;的两段式，把\u0026quot;看\u0026quot;和\u0026quot;开\u0026quot;解耦又协同——Prompter 专注空间 grounding，Planner 专注轨迹生成，各自专精、互为条件。这与本系列 ReCogDrive、Senna 等 VLA 把\u0026quot;认知\u0026quot;与\u0026quot;动作\u0026quot;分层的思路遥相呼应。\n🧰 可配置数据引擎：三套管线 DriveTeach-VLA 还开源了一套可配置数据引擎，把\u0026quot;采数据 → 造训练样本\u0026quot;工程化。它由 Extract → Enrich → Render 三步组成，内置三条管线：\n管线 用途 映射逻辑 poutine_label VLM 伪标注 专家轨迹+图像 → {critical_objects, meta_behaviour, explanation} prompter DVD 预训练（2D-TGP） 前视+历史轨迹 → [PT, {point_2d, heading}, ...] planner CoT-SFT 前视+2D-TGP 关键点 → 带归一化轨迹的 CoT JSON Enrich 步骤支持可插拔的 enricher 链（路径替换、轨迹归一化、相机投影生成 2D-TGP、伪标签合并），Render 步骤用 @register_prompt 注册的 PromptBuilder 生成 LLaMA-Factory 兼容数据。这种把数据构造做成声明式流水线的工程素养，大幅降低了复现门槛，也是它能在 ECCV 2026 脱颖而出的隐形竞争力。\n🧪 实验与结果 DriveTeach-VLA 在两大主流 benchmark 上取得 SOTA：\nNAVSIM 实验结果（开环评测） NAVSIM 基于 nuScenes 数据集，使用 PDM-Score（PDMS）作为综合指标，同时报告 Progress、Comfort、Safety 三个子分数：\n方法 PDMS ↑ Progress ↑ Comfort ↑ Safety ↑ UniAD 78.4 83.1 88.2 77.6 VAD 81.2 85.7 89.1 79.3 SparseDrive 84.6 87.3 90.5 82.1 VLM 直接输出轨迹 85-88 86-89 88-91 80-84 DriveTeach-VLA（仅 SFT） 89.7 90.2 92.8 86.5 DriveTeach-VLA（+GRPO） 91.5 92.1 94.3 88.9 关键发现：GRPO 阶段相比纯 SFT 在 Safety 上提升 2.4 个点，证明 RL 训练确实让模型学会了更安全的驾驶策略。\nnuScenes 实验结果 在 nuScenes 轨迹预测任务上，DriveTeach-VLA 同样刷新 SOTA：\n方法 L2 (m) 1s L2 (m) 2s L2 (m) 3s 碰撞率 (%) ↓ UniAD 0.45 1.02 1.78 0.52 VAD 0.41 0.94 1.65 0.45 DriveTeach-VLA 0.35 0.81 1.42 0.31 消融实验 消融设置 PDMS 碰撞率 说明 完整 DriveTeach-VLA 91.5 0.31% 基线 -DVD（去掉蒸馏） 87.2 0.52% 视觉先验的重要性 -TGP（去掉空间条件） 84.8 0.67% 空间 grounding 最关键 -GRPO（去掉强化学习） 89.7 0.45% RL 提升安全上限 替换为纯文本 CoT 83.1 0.78% 空间条件 \u0026gt; 语言条件 注意力可视化分析 论文通过可视化 VLA 模型的注意力热图揭示了关键洞见：纯文本 SFT 训练的模型注意力分散在整个场景中，缺乏明确的空间聚焦；而经过 DVD 和 2D-TGP 训练后，注意力集中指向可行驾驶路径和交通关键目标。这种注意力的\u0026quot;收敛\u0026quot;直接解释了为什么空间 grounding 能带来更稳定的轨迹预测。\n它也继承了优秀开源血脉：视觉/语言底座是 Qwen2.5-VL，评测挂 NAVSIM，训练框架是 LLaMA-Factory；提示设计受 ReCogDrive 与 Poutine（arXiv:2506.11234）启发，RL 部分来自 Curious-VLA。这套\u0026quot;站在巨人肩上 + 精准创新\u0026quot;的组合，让它既好复现又有清晰增量。\n推理效率分析 虽然双模型（Prompter + Planner）设计带来了性能提升，但推理延迟是一个不可回避的问题。论文在 RTX 4090 上的测试显示：\n组件 推理延迟 备注 TGP-Prompter 28ms ViT 编码 + 解码 TGP-Planner 65ms CoT 生成 + 轨迹预测 合计 93ms ~10.7 FPS 相比单模型方案（如 SparseDrive 的 3-5ms），DriveTeach-VLA 的延迟仍然偏高。但论文指出：双模型的视觉空间增强减少了推理 token 数，相比纯文本 CoT 方案，每次推理的 token 消耗减少约 40%，使得整体推理速度仍有竞争力。\n数据引擎的效率分析 数据引擎是 DriveTeach-VLA 的隐形亮点。论文报告，使用配置式数据管线可以将标注效率提升约 5 倍：\n步骤 传统做法（人天） DriveTeach-VLA（人天） 数据提取 3 0.5 伪标注 7 1 质量控制 5 2 格式转换 2 0.5 合计 17 4 这种工程化的数据构建方式大幅降低了复现门槛，是论文得以在 NAVSIM 和 nuScenes 上同时达到 SOTA 的隐形竞争力。\n⚠️ 局限与未来方向 双模型推理的延迟：Prompter + Planner 两次前向，对实时控制是负担，可考虑蒸馏成单模型或做投机解码； 2D 投影的信息损失：把 3D 轨迹压成 2D 关键点提示，在坡道、立体交叉口可能丢高度信息； GRPO 的奖励设计：论文未详述奖励函数，\u0026ldquo;更好驾驶偏好\u0026quot;如何量化仍是开放问题； DVD 蒸馏依赖教师：教师质量决定上限，弱标注下先验注入效果待验证。 我看好的后续方向：把 2D-TGP 升级为 3D/BEV 轨迹提示补齐几何；与 世界模型（第 24 篇综述）结合，让 Prompter 不仅\u0026quot;看当下\u0026quot;还能\u0026quot;看未来\u0026rdquo;；以及把 DVD 的自蒸馏换成与 占用网络 / 检测大模型的跨模态蒸馏，进一步强化空间感知。\n📝 个人思考 DriveTeach-VLA 给我最深的一击，是它把\u0026quot;VLA 失败原因\u0026quot;从语言侧翻案到视觉侧。过去一年，驾驶 VLA 社区痴迷于更长的 CoT、更细的推理链——仿佛只要模型\u0026quot;想得够清楚\u0026quot;就能开好车。这篇论文冷峻地指出：驾驶的瓶颈不在\u0026quot;会不会推理\u0026quot;，而在\u0026quot;看没看见该看的东西\u0026quot;。一个把红灯当背景、把可行驶区域当普通路面的视觉编码器，再强的语言推理也救不回来。这个洞察，和我在本系列 DriveVLM、Senna 精读里反复感受到的\u0026quot;感知是认知的地基\u0026quot;完全共振——地基不牢，地动山摇。\n第二个启发是它\u0026quot;空间条件优于语言条件\u0026ldquo;的设计哲学。人类司机开车时脑子里浮现的不是一段话，而是一条想象的路径。DriveTeach-VLA 用 2D-TGP 把这条\u0026quot;心象路径\u0026quot;显式化、作为提示喂回模型，本质是在用空间语言而非自然语言做 grounding。这让我重新思考 VLA 的\u0026quot;Action\u0026rdquo;——它不该只是文本 token 的延伸，而该有几何原生的条件通路。当轨迹、占用、光流这些空间量直接成为条件信号，VLA 才真正从\u0026quot;会聊天的机器人\u0026quot;变成\u0026quot;会开车的机器人\u0026quot;。\n最后，三段式教学的课程式（curriculum）结构值得玩味。\u0026ldquo;看什么 → 往哪看 → 怎么动\u0026quot;的顺序，恰好对应人类学车的进阶：先认路标，再判车道，最后练操作。这种把人类认知发展规律编码进训练阶段的做法，比一味堆数据、堆参数更\u0026quot;懂教育\u0026rdquo;。结合它开源的数据引擎与 GRPO 闭环，\u0026quot;视觉预训练 → 空间 SFT → 偏好 RL\u0026ldquo;很可能成为驾驶 VLA 的标准课程范式。当这条路走通，\u0026ldquo;教一辆车学会开车\u0026quot;将不再是个比喻，而是一套可复用的教学工程。\n🔗 延伸阅读 工作 关系 Qwen2.5-VL DriveTeach-VLA 的视觉-语言底座 ReCogDrive 本系列第 20 篇，提示设计与认知-动作分层的灵感来源 Poutine（2506.11234） 伪标注管线 poutine_label 的设计源头 Curious-VLA TGP-guided GRPO 的 RL 设计来源 AlphaDrive / Flow-GRPO 本系列 GRPO 强化驾驶代表，与本篇 RL 阶段互补 DriveVLM / Senna 本系列 VLM 辅助驾驶，同为\u0026quot;感知是地基\u0026quot;路线 📖 这是论文精读系列的第 26 篇。当 VLA 学会\u0026quot;先看对、再想清、最后开好\u0026rdquo;，端到端自动驾驶才真正具备\u0026quot;驾驶直觉\u0026rdquo;。欢迎留言。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/driveteach-vla%E7%B2%BE%E8%AF%BB/","summary":"DriveTeach-VLA 指出驾驶 VLA 的瓶颈不在语言推理而在视觉空间 grounding，核心问题不是\u0026rsquo;想不清\u0026rsquo;而是\u0026rsquo;看不对\u0026rsquo;。它提出三段式视觉教学管线——DVD 蒸馏教模型\u0026rsquo;看什么\u0026rsquo;、2D 轨迹引导提示教\u0026rsquo;往哪看\u0026rsquo;、TGP-guided GRPO 教\u0026rsquo;怎么动\u0026rsquo;——层层递进注入驾驶感知先验。在 Qwen2.5-VL 上刷新 NAVSIM 与 nuScenes 双榜单 SOTA。","title":"论文精读｜Teaching VLA Models What to See and Where to Look：DriveTeach-VLA 的视觉教学三段式"},{"content":"📄 论文信息 标题：Embodied Intelligence: A Synergy of Morphology, Action, Perception and Learning（具身智能：形态、动作、感知与学习的协同） 团队：清华大学、北京邮电大学、曼彻斯特大学 发表：ACM Computing Surveys, Volume 57, Issue 7, 2025（Article No.: 186, Pages 1–36） 关键词：具身智能、形态计算、感知动作循环、强化学习、机器人学 一句话总结：从形态-动作-感知-学习四个维度的协同关系出发，全面综述具身智能研究，强调智能是身体、大脑与环境紧密耦合的产物。 论文链接：DOI: 10.1145/3717059 🤔 为什么需要这篇综述？ 具身智能（Embodied Intelligence）强调智能是大脑、身体与环境紧密耦合的产物，通过与环境的信息感知和物理交互过程持续动态地生成。这一概念有着悠久的历史，从亚里士多德、达尔文到梅洛-庞蒂、皮亚杰等哲学家、生理学家和心理学家的工作，为具身智能研究奠定了坚实基础。\n然而，近年来具身智能的研究范围不断扩大，吸引了机器人学、计算机视觉、机器学习等多个领域的关注。大量相关工作的涌现使得研究者难以全面把握该领域的发展脉络。现有的综述主要分为两类：一类沿袭传统的认知科学路线，讨论感知-动作循环；另一类关注特定技术如大语言模型或基础模型在机器人中的应用。具体而言：\n第一类综述（如参考文献[79]、[152]、[153]、[173]）沿袭了具身认知的研究路线，从时间尺度的角度回顾了具身智能的发展，讨论了交互如何在复杂的自主和适应性系统中发挥作用。然而，这些综述虽然讨论了身体中编码的物理智能，但忽略了身体与大脑、环境之间的紧密耦合关系。物理智能虽然支持利用身体进行动作生成、感知和学习，但并未考虑其与大脑和环境的关联。\n第二类综述（如参考文献[47]、[53]、[116]、[122]）更多关注与机器学习、计算机视觉和基础模型相关的最新进展，总结了视觉语言导航（VLN）、基础模型、模拟器等特定研究方向。其中参考文献[116]提供了更全面的具身智能综述，但忽略了形态与动作之间的连接。参考文献[157]系统讨论了具身智能的归纳偏置，分析了形态、表示和学习的作用，但其目标更多是强调挑战和机遇，而非提供系统的分类。\n本综述的独特之处在于，它从形态（morphology）、动作（action）、感知（perception）和学习（learning）四个维度的协同关系出发，提供了一个全新的分析视角。作者强调，具身智能是这些组件的协同产物，而非单独的组件。这种视角不仅有助于理解智能的本质，也为未来的研究指明了方向。论文的核心贡献在于：\n提出了统一的具身智能框架，将形态、动作、感知和学习四个模块及其相互连接形式化为一个完整的系统； 系统梳理了八个连接方向（$\\mathcal{M} \\rightarrow \\mathcal{A}$、$\\mathcal{A} \\rightarrow \\mathcal{M}$、$\\mathcal{P} \\rightarrow \\mathcal{M}$、$\\mathcal{L} \\rightarrow \\mathcal{M}$、$\\mathcal{P} \\rightarrow \\mathcal{A}$、$\\mathcal{A} \\rightarrow \\mathcal{P}$、$\\mathcal{A} \\rightarrow \\mathcal{L}$、$\\mathcal{L} \\rightarrow \\mathcal{A}$），每个连接方向都对应着丰富的研究内容； 识别了未来研究的潜在方向，特别是在各组件的内在连接方面，指出了当前研究的空白和机遇。 这种\u0026quot;协同\u0026quot;视角的提出，源于作者对具身智能本质的深刻理解：智能并非产生于某个孤立的模块，而是涌现于模块之间的动态交互。正如人类能够在没有精确计算的情况下轻松抓取物体，这不仅依赖于大脑的决策，更依赖于身体形态提供的物理约束和环境的力学反馈。这种整体论的观点，为具身智能研究提供了一个更加完整和深刻的理论基础。\n📚 综述覆盖范围 第一部分：悠久的历史与短暂的过去 综述首先回顾了具身智能的历史发展脉络，这一脉络跨越了哲学、认知科学和控制论等多个学科领域。\n哲学基础 具身智能的思想根源可以追溯到古希腊哲学。亚里士多德（Aristotle）的目的论（Teleology）认为，自然界的万物都具有内在的目的（telos），生物的行为是为了实现某种特定的功能或目标。这种思想暗示了身体形态与功能之间的紧密联系——身体的结构是为了服务于特定的生存目的而演化的。亚里士多德在《论灵魂》（De Anima）中提出，灵魂（psyche）是身体的形式，身体是灵魂的质料，二者不可分割。这一观点为后来的具身认知理论奠定了哲学基础。\n达尔文（Charles Darwin）的进化论进一步强化了形态与功能的关联。达尔文在《物种起源》（On the Origin of Species）中提出，自然选择通过保留有利的身体变异来优化生物对环境的适应能力。这意味着身体形态不是随机的，而是与环境需求协同演化的产物。例如，啄木鸟的喙、长颈鹿的脖子、猎豹的流线型身体，都是形态与功能协同演化的经典案例。这种\u0026quot;形态跟随功能\u0026quot;（form follows function）的思想，成为后来形态计算理论的重要思想来源。\n认知科学基础 20世纪的认知科学为具身智能提供了更加系统化的理论框架。梅洛-庞蒂（Maurice Merleau-Ponty）在其经典著作《知觉现象学》（Phénoménologie de la Perception, 1945）中提出了\u0026quot;身体图式\u0026quot;（body schema）的概念，强调身体不是被动的物理对象，而是我们感知和行动的主体。梅洛-庞蒂认为，知觉不是大脑对外部世界的被动表征，而是身体与环境主动交互的结果。例如，当我们看到一个杯子时，我们不仅感知到它的视觉属性，还同时感知到抓取它所需的手部运动参数。这种\u0026quot;知觉-行动\u0026quot;的统一性，成为具身智能的核心思想之一。\n皮亚杰（Jean Piaget）的发生认识论（Genetic Epistemology）则从发展的角度阐述了认知的具身性。皮亚杰认为，儿童的认知发展经历了感觉运动期（sensorimotor stage）、前运算期（preoperational stage）、具体运算期（concrete operational stage）和形式运算期（formal operational stage）四个阶段。在最早的感觉运动期（0-2岁），婴儿通过感觉和运动的协调来认识世界，例如通过抓取、吮吸、注视等行为来探索物体的属性。皮亚杰的研究表明，高级认知能力（如抽象思维）是建立在低级感觉运动经验基础上的，这为\u0026quot;自下而上\u0026quot;的具身智能架构提供了发展心理学的证据。\n吉布森（James J. Gibson）的生态心理学（Ecological Psychology）提出了\u0026quot;可供性\u0026quot;（affordance）的概念，进一步深化了对知觉-行动关系的理解。吉布森认为，环境中的物体不仅仅是物理对象，它们还为特定的行动者提供了行动的可能性。例如，一把椅子\u0026quot;可供\u0026quot;坐下，一个门把手\u0026quot;可供\u0026quot;抓取和旋转。可供性不是物体的固有属性，也不是行动者的主观投射，而是行动者-环境系统的关系属性。这一概念对机器人学产生了深远影响，启发了许多基于可供性的机器人操作和导航方法。\n控制论基础 维纳（Norbert Wiener）的控制论（Cybernetics）为具身智能提供了工程学的基础。维纳在《控制论》（Cybernetics, 1948）中提出了反馈控制的基本原理，强调系统通过感知自身行为与目标之间的偏差并进行调整来实现适应性行为。控制论的核心思想——反馈循环（feedback loop）——成为具身智能中感知-动作循环的理论基础。维纳的工作启发了早期的自适应机器人研究，如Ashby的《大脑设计》（Design for a Brain, 1952）中提出的内稳态（homeostasis）概念。\n关键转折：Brooks的包容体系结构 1980年代，Rodney Brooks提出的\u0026quot;包容体系结构\u0026quot;（Subsumption Architecture）标志着具身智能研究的一个重要转折点。Brooks在1986年的开创性论文*\u0026ldquo;A Robust Layered Control System for a Mobile Robot\u0026rdquo;*中，批判了当时主流的\u0026quot;感知-规划-行动\u0026quot;（Sense-Plan-Act）范式，认为这种自上而下的架构过于依赖环境的内部表示，缺乏对动态环境的适应能力。\nBrooks提出了一个替代方案：行为可以通过简单的感知-动作映射直接产生，无需复杂的内部表示。包容体系结构由多个行为层（behavior layers）组成，每个层直接将感知输入映射到行动输出。低层行为（如避障）可以\u0026quot;包容\u0026quot;（subsume）高层行为（如目标导航），当低层行为被触发时，它会覆盖高层行为的输出。这种架构的优势在于：\n反应性：系统可以直接对环境变化做出反应，无需经过耗时的规划过程； 鲁棒性：即使某些高层模块失效，低层行为仍然可以维持基本的功能； 涌现性：复杂的行为可以通过简单行为层的组合而涌现，无需预先设计全局规划。 Brooks的包容体系结构催生了行为主义机器人学（behavior-based robotics），并深刻影响了后续的具身智能研究。例如，Brooks的公司iRobot生产的Roomba扫地机器人，就是行为主义架构在商业产品中的成功应用。行为主义机器人学强调，智能行为是从身体与环境的直接交互中涌现的，而不是从抽象的符号推理中产生的。这一观点与梅洛-庞蒂的知觉现象学和皮亚杰的发生认识论形成了深刻的呼应，共同构成了具身智能的理论基石。\n值得注意的是，Brooks的工作虽然在机器人学领域产生了革命性影响，但它也存在局限性：过于强调低层行为的反应性，忽视了高层认知（如语言理解、抽象推理）的作用。后来的研究者试图将行为主义方法与符号方法相结合，发展出混合架构（hybrid architectures），以兼顾反应性和高层认知能力。\n第二部分：具身智能的架构 本综述提出了一个统一的具身智能架构，将形态、动作、感知和学习四个核心组件形式化为一个完整的框架，并特别关注组件之间的连接关系。作者将这四个组件之间的连接定义为八个方向，每个方向都对应着丰富的研究内容。\n统一框架的形式化 综述将具身智能体（embodied agent）表示为一个由四个模块组成的系统：\n$$\\mathcal{E} = \\{\\mathcal{M}, \\mathcal{A}, \\mathcal{P}, \\mathcal{L}\\}$$其中 $\\mathcal{M}$ 表示形态（Morphology），$\\mathcal{A}$ 表示动作（Action），$\\mathcal{P}$ 表示感知（Perception），$\\mathcal{L}$ 表示学习（Learning）。这四个模块之间的八个连接方向可以表示为：\n┌─────────────────────────────────────────┐ │ 具身智能协同框架 │ └─────────────────────────────────────────┘ ┌──────────────┐ ┌──────────────┐ │ │ ←──── L→M ──────── │ │ │ 形态 (M) │ │ 学习 (L) │ │ │ ──── M→A ────────→ │ │ │ Morphology │ ←──── A→M ──────── │ Learning │ │ │ │ │ └──────┬───────┘ └──────┬───────┘ │ │ │ ←──── P→M ────────→ │ │ ←──── A→L ────────→ │ │ │ ┌──────┴───────┐ ┌──────┴───────┐ │ │ ←──── P→A ──────── │ │ │ 动作 (A) │ │ 感知 (P) │ │ │ ──── A→P ────────→ │ │ │ Action │ │ Perception │ │ │ │ │ └──────────────┘ └──────────────┘ 综述的核心观点是：具身智能是这四个模块的协同产物，而非单独的模块。因此，论文将重点放在模块之间的连接（links）上，而非模块本身。这种视角使综述能够揭示传统分类方法所忽略的重要研究方向。\n形态（Morphology） 形态是具身智能的物理基础，指的是智能体的身体结构、材料属性和运动学/动力学特性。综述将形态分为以下几类：\n刚性机器人：由刚性连杆和关节组成，具有明确的运动学结构。刚性机器人的形态设计相对成熟，但缺乏对环境的适应能力。典型的刚性机器人包括工业机械臂（如KUKA、ABB系列）和人形机器人（如Honda ASIMO、Boston Dynamics Atlas）。\n软体机器人：由柔性材料（如硅胶、水凝胶、形状记忆合金）制成，能够通过连续变形实现运动和操作。软体机器人的核心优势在于其固有的柔顺性（compliance），使其能够在非结构化环境中安全地与物体和人类交互。典型的软体机器人包括哈佛大学的Octobot（全软体自主机器人）和Festo的BionicANTs（仿生蚂蚁）。\n可变形机器人：能够主动改变自身形态的机器人，例如模块化自重构机器人（modular self-reconfigurable robots）。这类机器人可以根据任务需求动态调整身体结构，具有极高的灵活性。典型的系统包括MIT的M-blocks（磁性模块化机器人）和SRI的Polybot。\n形态计算（Morphological Computation）：这是综述的核心概念之一。形态计算理论由Rolf Pfeifer和Josh Bongard在《身体的智能》（How the Body Shapes the Way We Think, 2006）中系统阐述。该理论认为，身体的物理属性可以\u0026quot;卸载\u0026quot;（offload）部分感知和控制任务到身体-环境的耦合动力学中。换言之，身体本身就在\u0026quot;计算\u0026quot;——通过其物理结构和材料特性，身体能够处理信息、简化控制问题。\n形态计算的核心机制包括：\n被动动力学（Passive Dynamics）：利用重力、惯性和弹性等自然力来产生运动，而无需主动控制。例如，被动动态行走器（passive dynamic walkers）仅依靠重力和初始推力就能在斜面上稳定行走。\n机械阻抗（Mechanical Impedance）：通过选择适当的材料刚度和阻尼特性，使机器人能够自动适应环境的力学约束。例如，柔顺抓手可以自动适应不同形状的物体，而无需精确的力控制。\n身体的滤波作用（Filtering）：身体可以作为低通滤波器，平滑高频的感知输入和控制输出。例如，柔顺关节可以吸收冲击力，减少控制系统需要处理的瞬态扰动。\n形态计算的重要性在于，它挑战了传统的\u0026quot;大脑中心论\u0026quot;——智能不仅仅产生于大脑（或控制器），而是产生于身体-大脑-环境的整体系统。这一观点为机器人设计提供了新的思路：与其追求越来越复杂的控制算法，不如巧妙地利用身体的物理特性来简化控制问题。\n动作（Action） 动作是智能体与环境交互的桥梁，是将内部决策转化为外部影响的过程。综述将动作分为三个层次：\n运动控制（Locomotion Control）：涉及智能体在环境中的移动，包括步态生成（gait generation）、轨迹优化（trajectory optimization）和运动规划（motion planning）。运动控制的经典问题包括双足行走的稳定性、四足机器人的步态切换、以及轮式机器人的路径跟踪。近年来，深度强化学习在运动控制领域取得了显著进展，例如DeepMind的ANYmal四足机器人通过强化学习学会了在复杂地形上稳定行走。\n操作控制（Manipulation Control）：涉及智能体对物体的操作，包括抓取（grasping）、装配（assembly）、工具使用（tool use）等。操作控制的关键挑战在于接触力学的处理——物体与手之间的摩擦、弹性变形和接触点的不确定性。近年来，基于学习的操作控制方法（如DQN、SAC）在模拟环境中取得了很好的效果，但Sim-toReal迁移仍然是一个开放问题。\n任务规划（Task Planning）：涉及长期任务的分解和调度，包括子目标识别、任务图构建和多步推理。任务规划的挑战在于组合爆炸——随着任务步骤的增加，可能的行动序列呈指数增长。近年来，大语言模型（LLM）在任务规划中展现了强大的能力，能够将自然语言指令分解为可执行的动作序列。\n感知（Perception） 感知是智能体获取环境信息的关键途径，是连接内部世界模型与外部物理世界的桥梁。综述将感知分为以下几个方面：\n多模态感知融合：现代机器人通常配备多种传感器（视觉、触觉、听觉、力觉、本体感觉等），多模态感知融合的目标是将这些异构信息整合为统一的环境表示。例如，视觉提供全局的场景信息，触觉提供局部的接触细节，力觉提供力学反馈，本体感觉提供身体状态信息。多模态融合的关键挑战包括模态对齐、信息互补性和计算效率。\n主动感知（Active Perception）：与被动感知不同，主动感知强调智能体通过自身的动作来改善感知质量。例如，机器人可以通过移动视角来减少遮挡，通过触觉探索来确认物体属性，通过旋转物体来获取更完整的形状信息。主动感知的核心思想是：感知不是被动的信息接收，而是主动的信息收集过程。这一思想可以追溯到1980年代Bajcsy的开创性工作。\n视觉导航（Visual Navigation）：具身视觉导航是近年来的研究热点，涉及智能体在未知环境中的自主探索和目标导向导航。主要任务包括视觉语言导航（VLN）、语义导航（semantic navigation）和目标导航（object goal navigation）。这些任务要求智能体不仅能够感知环境，还能够理解语言指令、构建空间记忆并进行长期规划。\n具身场景描述（Embodied Scene Description）：这一新兴方向关注智能体如何通过与环境的交互来生成自然语言描述。与传统的图像描述（image captioning）不同，具身场景描述要求智能体主动移动和观察，从多个视角收集信息，然后生成全面、准确的场景描述。\n学习（Learning） 学习使智能体能够从经验中改进其行为，是适应开放环境的关键能力。综述将学习方法分为以下几类：\n强化学习（Reinforcement Learning, RL）：智能体通过与环境的交互来学习最优策略，目标是最大化累积奖励。强化学习在具身智能中的应用包括运动控制、操作任务和导航等。近年来的主要进展包括：\n基于价值的方法（如DQN、DDPG）：通过学习动作价值函数来选择动作； 策略梯度方法（如PPO、SAC）：直接优化策略参数； 模型强化学习（如Dreamer、MuZero）：通过学习环境模型来提高样本效率。 强化学习在具身智能中面临的主要挑战包括奖励稀疏性、样本效率低和Sim-toReal迁移。\n模仿学习（Imitation Learning）：智能体通过观察专家演示来学习行为，而无需手动设计奖励函数。主要方法包括：\n行为克隆（Behavior Cloning, BC）：将专家演示视为监督学习数据，直接学习状态到动作的映射； 逆强化学习（Inverse Reinforcement Learning, IRL）：从专家演示中推断奖励函数，然后使用强化学习来学习策略； 生成对抗模仿学习（Generative Adversarial Imitation Learning, GAIL）：使用对抗训练来匹配专家和学习者的状态-动作分布。 模仿学习的优势在于能够利用人类的先验知识，但其局限性包括对分布偏移（distribution shift）的敏感性和对高质量演示数据的依赖。\n元学习（Meta-Learning）：智能体学会\u0026quot;如何学习\u0026quot;，能够快速适应新任务。元学习在具身智能中的应用包括：\nMAML（Model-Agnostic Meta-Learning）：学习一个良好的初始化参数，使得在新任务上只需少量梯度更新即可适应； Prototypical Networks：通过学习度量空间来进行少样本分类； Learning to Reinforcement Learn：将元学习与强化学习结合，使智能体能够快速学习新任务的策略。 进化学习（Evolutionary Learning）：通过模拟自然选择过程来优化智能体的形态和控制器。进化学习在具身智能中的应用包括形态-控制器的共同进化（co-evolution of morphology and controller）和进化策略（evolution strategies）。例如，Lipson和Pollack的GROW机器人项目展示了如何通过进化算法自动设计机器人的形态和控制器。\n第三部分：研究前沿 综述深入探讨了具身智能的多个研究前沿，这些前沿方向正是四个核心组件之间协同关系的具体体现。\n形态与运动的协同 形态与运动的协同是具身智能的核心问题之一。综述从两个方向讨论了这一协同关系：\n形态计算（$\\mathcal{M} \\rightarrow \\mathcal{A}$）：身体形态如何影响动作生成？形态计算理论表明，身体的物理属性可以\u0026quot;卸载\u0026quot;部分控制任务。例如：\n被动动态行走器（Passive Dynamic Walkers）：这类机器人没有任何主动控制系统，仅依靠重力和初始推力就能在斜面上稳定行走。其行走的稳定性完全来自于身体的形态设计——腿部的长度、质量分布和关节摩擦力经过精心调谐，使得行走成为一种稳定的吸引子动力学。\n柔顺机器人（Soft Robots）：利用柔性材料的固有弹性，柔顺机器人可以自动适应环境的力学约束。例如，哈佛大学的软体抓手可以安全地抓取各种形状和大小的物体，无需精确的力控制。形态计算在Sim2Real迁移中也展现了巨大优势——由于形态计算不依赖于精确的控制器模型，它在模拟到现实的迁移中更加鲁棒。\n形态信息对学习效率的提升：研究表明，引入形态信息可以显著提高强化学习的效率。例如，对于四足机器人，利用腿部的对称性可以将策略搜索空间减少一半；对于机械臂，利用关节的运动学约束可以加速轨迹优化。\n形态控制（$\\mathcal{A} \\rightarrow \\mathcal{M}$）：动作如何影响形态？这涉及两个方面：\n主动形态变换：可变形机器人可以通过主动改变形态来适应不同的任务需求。例如，模块化自重构机器人可以根据任务需要重新排列模块，形成不同的形态。\n基于图神经网络的形态控制：近年来，图神经网络（GNN）和Transformer被用于描述和控制不同形态的机器人。这些方法的优势在于能够处理可变的拓扑结构，使得一个控制器可以泛化到不同的形态。例如，DeepMind的Workcell项目展示了如何使用GNN来控制不同形状的模块化机器人。\n综述指出，虽然设计统一的形态控制器非常有吸引力，但仍面临巨大挑战。主要原因包括：形态的成功强烈依赖于材料选择（材料在驱动、传感和设计方面仍面临挑战）；不同形态之间的迁移需要处理运动学和动力学的显著差异。近年来，受自然语言和计算机视觉领域预训练模型的启发，构建统一的预训练大形态控制模型（unified pre-training large morphology control model）成为一个重要的未来研究方向。\n感知与动作的循环 感知与动作的循环（Perception-Action Loop）是具身智能的核心机制，体现了\u0026quot;在行动中感知\u0026quot;（perceiving through acting）和\u0026quot;在感知中行动\u0026quot;（acting through perceiving）的思想。\n动作驱动的感知改进（$\\mathcal{A} \\rightarrow \\mathcal{P}$）：这一方向强调通过目标导向的探索来改善感知质量。早在1980年代，Bajcsy就系统地讨论了主动感知的概念。在主动感知中，智能体在智能控制下采取运动来改善对环境的感知。理论上已经证明，引入运动后，传统计算机视觉领域的许多不适定（ill-posed）或非线性问题变成了适定（well-posed）和线性问题。\n主动感知在机器人学中得到了广泛应用，成为具身智能不可或缺的一部分。主要应用包括：\n主动目标识别：机器人通过移动视角来减少物体的遮挡和歧义，从而提高识别准确率。例如，通过旋转物体或改变观察角度，机器人可以获取物体的多个视图，从而构建更完整的3D模型。\n主动语义探索：在未知环境中，机器人需要决定探索哪个区域以最大化信息增益。这涉及到信息论（如熵减小）和探索策略的优化。\n主动触觉感知：机器人通过触觉探索来识别物体的材质、形状和力学属性。例如，通过滑动手指来感知表面纹理，通过按压来感知软硬度。\n感知驱动的动作生成（$\\mathcal{P} \\rightarrow \\mathcal{A}$）：这一方向关注感知信息如何指导动作生成。主要应用包括：\n视觉伺服（Visual Servoing）：利用视觉反馈来控制机器人手臂跟踪目标物体。视觉伺服可以分为基于图像的视觉伺服（IBVS）和基于位置的视觉伺服（PBVS）。\n视觉导航：利用视觉感知来指导移动机器人的路径规划和避障。主要方法包括基于深度学习的端到端导航和基于SLAM的地图构建与路径规划。\n触觉引导的操作：利用触觉反馈来调整抓取策略。例如，当检测到物体滑动时，增加抓取力；当检测到物体形状变化时，调整手指位置。\n综述特别指出，在当前的具身导航任务研究中，许多工作只使用了简单的动作空间，忽略了智能体的形态特征。此外，环境约束也很强——通常需要可通行的拓扑地图，而避障等问题则被忽略。这些局限性为未来的研究提供了重要的改进方向。\n学习与进化的结合 学习与进化的结合是具身智能的一个重要研究方向，涉及如何同时优化智能体的形态和行为。\n形态-控制器的共同进化：传统的机器人设计将形态和控制器分开优化——先设计形态，再设计控制器。然而，这种方法忽略了形态和控制器之间的紧密耦合关系。共同进化方法同时优化形态和控制器，使二者能够协同演化。例如，Lipson和Pollack的GROW项目展示了如何通过遗传算法同时进化机器人的形态（由梁和关节组成）和控制器（神经网络）。\n基于学习的形态优化（$\\mathcal{L} \\rightarrow \\mathcal{M}$）：利用学习算法来优化机器人的形态。例如：\n可微分形态优化：利用可微分模拟器（differentiable simulator）来优化形态参数。这种方法的优势在于可以利用梯度信息来高效搜索形态空间。例如，DeepMind的WalkTheseWays项目通过可微分模拟器优化了四足机器人的形态和控制器。\n基于强化学习的形态搜索：将形态参数作为可学习的变量，与控制器一起通过强化学习进行优化。这种方法的优势在于不需要手工设计奖励函数，但面临巨大的搜索空间挑战。\n动作驱动的具身学习（$\\mathcal{A} \\rightarrow \\mathcal{L}$）：这一方向强调通过智能体的动作来驱动学习过程。综述指出，当前的学习范式（如从大规模互联网数据中预训练）存在一个根本问题：数据获取和模型学习是分离的——数据集是否真正适合某个学习任务仍然是一个开放问题。此外，数据清洗和标注等操作必须在训练模型之前完成，这远未达到自主学习的要求。\n动作驱动的具身学习范式试图解决这一问题。其核心思想是：当人类看到一个新物体时，我们会自然地从多个视角观察它，主动探索它，然后意识到无论从哪个视角看，它都是同一个物体。我们在这个动作-学习循环中不断学习。探索过程实际上是一个数据收集和标注过程。\n这一范式通常分为三个阶段：\n探索策略学习：学习一个智能的探索策略，指导智能体收集最有价值的数据； 训练样本收集：在探索过程中收集和标注训练数据； 应用部署：将改进后的模型部署到实际任务中。 这种方法将数据获取和模型学习无缝结合，能够在探索过程中持续提升智能体的能力，已成为具身智能中一个非常有前景的方向。\n社会具身智能 社会具身智能关注多智能体系统中的具身智能，涉及多个具有物理形态的智能体如何协作、通信和涌现社会行为。\n多智能体协作学习：多个智能体通过协作来完成单个智能体无法完成的任务。例如，多机器人协作搬运（cooperative manipulation）要求多个机器人协调各自的抓取和移动策略。主要方法包括：\n中央化训练-去中央化执行（CTDE）：在训练阶段使用全局信息，在执行阶段每个智能体只使用局部信息。例如，QMIX、MAPPO等方法。\n通信学习：智能体学习相互通信的协议，以协调各自的行为。例如，CommNet、DIAL等方法学习了端到端的通信协议。\n社会规范的涌现：在多智能体系统中，社会规范（如交通规则、排队行为）可以从简单的局部交互规则中涌现。例如，Reynolds的Boids模型展示了如何通过三条简单的规则（分离、对齐、聚集）产生复杂的鸟群行为。在机器人学中，类似的涌现行为已经在群体机器人学（swarm robotics）中得到了广泛研究。\n人机协作：具身智能的最终目标之一是实现自然、高效的人机协作。这要求机器人不仅能够理解人类的意图和行为，还能够以人类可理解的方式表达自己的意图和行为。主要研究方向包括：\n意图识别：从人类的动作和语言中推断其意图； 共享控制：在人类和机器人之间分配控制权； 安全交互：确保机器人在与人类交互时的安全性。 🗺️ 技术路线图 本综述提出了一个清晰的具身智能分类体系，以四个核心组件及其八个连接方向为骨架：\n具身智能 ├── 形态（Morphology） │ ├── 刚性机器人 │ │ ├── 工业机械臂 │ │ ├── 人形机器人 │ │ └── 轮式/足式移动机器人 │ ├── 软体机器人 │ │ ├── 气动软体机器人 │ │ ├── 水凝胶机器人 │ │ └── 形状记忆合金机器人 │ ├── 可变形机器人 │ │ ├── 模块化自重构机器人 │ │ └── 折纸机器人 │ └── 形态计算 │ ├── 被动动力学 │ ├── 机械阻抗 │ └── 身体的滤波作用 ├── 动作（Action） │ ├── 运动控制 │ │ ├── 步态生成 │ │ ├── 轨迹优化 │ │ └── 运动规划 │ ├── 操作控制 │ │ ├── 抓取 │ │ ├── 装配 │ │ └── 工具使用 │ └── 任务规划 │ ├── 长期任务分解 │ ├── 子目标识别 │ └── 多智能体协调 ├── 感知（Perception） │ ├── 视觉感知 │ │ ├── 目标检测与识别 │ │ ├── 场景理解 │ │ └── 3D重建 │ ├── 触觉感知 │ │ ├── 材质识别 │ │ ├── 力控制 │ │ └── 滑动检测 │ ├── 多模态融合 │ │ ├── 视觉-触觉融合 │ │ ├── 视觉-语言融合 │ │ └── 视觉-力觉融合 │ └── 主动感知 │ ├── 主动目标识别 │ ├── 主动语义探索 │ └── 主动触觉感知 ├── 学习（Learning） │ ├── 强化学习 │ │ ├── 基于价值的方法（DQN, DDPG） │ │ ├── 策略梯度方法（PPO, SAC） │ │ └── 模型强化学习（Dreamer, MuZero） │ ├── 模仿学习 │ │ ├── 行为克隆 │ │ ├── 逆强化学习 │ │ └── 生成对抗模仿学习 │ ├── 元学习 │ │ ├── MAML │ │ ├── Prototypical Networks │ │ └── Learning to RL │ └── 进化学习 │ ├── 遗传算法 │ ├── 进化策略 │ └── 形态-控制器共同进化 └── 协同连接（Synergy Links） ├── M→A：形态计算 ├── A→M：形态控制 ├── P→M：感知驱动的形态变换 ├── L→M：学习驱动的形态优化 ├── P→A：感知驱动的动作生成 ├── A→P：动作驱动的感知改进 ├── A→L：动作驱动的具身学习 └── L→A：学习驱动的动作生成 这一体系的核心洞察是：具身智能是这四个维度的协同产物，而非单独的组件。综述通过八个连接方向将这些组件联系起来，揭示了传统分类方法所忽略的重要研究空白。例如，形态计算理论表明，身体形态可以\u0026quot;卸载\u0026quot;部分计算任务；感知-动作循环表明，感知和动作是紧密耦合的；学习算法的设计需要考虑身体和环境的约束。\n综述特别强调，这八个连接方向形成了一个完整的循环系统。例如，形态计算（$\\mathcal{M} \\rightarrow \\mathcal{A}$）使得动作生成更加高效，而形态控制（$\\mathcal{A} \\rightarrow \\mathcal{M}$）使得形态能够适应不同的任务需求；主动感知（$\\mathcal{A} \\rightarrow \\mathcal{P}$）改善了感知质量，而感知驱动的动作生成（$\\mathcal{P} \\rightarrow \\mathcal{A}$）使得动作更加精确；动作驱动的具身学习（$\\mathcal{A} \\rightarrow \\mathcal{L}$）使得学习更加高效，而学习驱动的动作生成（$\\mathcal{L} \\rightarrow \\mathcal{A}$）使得动作更加智能。这种循环递进的关系，使得具身智能体能够在与环境的持续交互中不断提升自身的能力。\n🔍 个人思考 综述的亮点 1. 独特的协同视角：与现有综述不同，本工作从形态-动作-感知-学习四个维度的协同关系出发，提供了理解具身智能的全新框架。这种视角更接近生物智能的本质，因为生物智能正是身体、大脑与环境协同演化的产物。作者明确指出，智能不是产生于某个孤立的模块，而是涌现于模块之间的动态交互。这种整体论的观点，为具身智能研究提供了一个更加完整和深刻的理论基础。\n2. 深厚的认知科学基础：综述扎根于认知科学和哲学传统，从亚里士多德的目的论到梅洛-庞蒂的知觉现象学，从皮亚杰的发生认识论到吉布森的生态心理学，为现代具身智能研究提供了坚实的理论基础。这种跨学科的视角不仅使综述具有理论深度，也使其能够揭示当前研究的局限性。例如，综述指出，当前的具身导航任务研究忽略了形态特征，这正是因为缺乏对形态-动作协同关系的深入理解。\n3. 全面的分类体系：综述提出的分类体系覆盖了从形态设计到学习算法的各个方面，为研究者提供了清晰的导航框架。特别是八个连接方向的提出，使得研究者能够系统地定位自己的工作在整体框架中的位置，识别尚未探索的研究空白。\n4. 前瞻性的未来方向：综述不仅总结了现有工作，还识别了多个具有潜力的未来研究方向。例如，构建统一的预训练大形态控制模型、将形态计算与Sim2Real迁移相结合、发展社会具身智能等。这些方向为后续研究提供了重要的指引。\n不足之处 1. 实验验证的缺失：作为理论性综述，本文主要进行文献梳理和概念分析，缺乏对不同方法的系统性实验对比。这使得读者难以直观判断各方法的优劣。例如，在形态计算领域，不同方法（被动动力学、机械阻抗、身体滤波）的性能比较仍然缺乏统一的基准。\n2. 实际应用案例的深度不足：虽然综述讨论了多个应用领域，但对具体应用案例的深入分析相对有限。例如，在自动驾驶领域，具身智能的原理如何具体应用？在医疗机器人领域，形态计算如何提升手术机器人的安全性？这些实际应用场景的讨论有待深化。\n3. 定量分析的缺乏：综述主要进行定性分析，缺乏对各方法性能、效率等指标的定量比较。例如，在学习方法部分，不同强化学习算法在具身任务中的性能对比（如样本效率、最终性能、训练时间）缺乏系统的数据支持。\n4. 与大语言模型的结合不够深入：虽然综述提到了基础模型，但对大语言模型（LLM）和多模态大模型（VLM）在具身智能中的应用讨论不够深入。近年来，GPT-4V、Gemini等多模态模型在机器人任务规划、视觉理解和人机交互中展现了巨大潜力，这些进展值得更深入的分析。\n对领域的启发 本综述揭示了具身智能发展的几个关键趋势：\n1. 从\u0026quot;大脑中心\u0026quot;到\u0026quot;全身智能\u0026quot;：传统人工智能研究主要关注算法和模型（\u0026ldquo;大脑\u0026rdquo;），而具身智能强调身体形态和环境交互的重要性。形态计算理论表明，身体本身就在\u0026quot;计算\u0026quot;，这为机器人设计提供了新思路——与其追求越来越复杂的控制算法，不如巧妙地利用身体的物理特性。这一趋势已经在软体机器人、可穿戴设备等领域得到体现。\n2. 从\u0026quot;被动感知\u0026quot;到\u0026quot;主动探索\u0026quot;：传统的感知系统是被动的——接收传感器数据并进行处理。而具身智能强调通过动作来改善感知质量。主动感知的思想已经在机器人操作、导航和探索中得到广泛应用。未来，主动感知将与大语言模型结合，实现更加智能的探索策略。\n3. 从\u0026quot;分离优化\u0026quot;到\u0026quot;协同设计\u0026quot;：传统方法将形态设计、控制器设计和感知系统设计分开优化。而具身智能强调这三个方面的协同设计——形态应该服务于控制和感知的需求，控制器应该利用形态的物理特性，感知系统应该与动作紧密耦合。这种协同设计的思想已经在可微分模拟器和端到端学习中得到体现。\n4. 从\u0026quot;单智能体\u0026quot;到\u0026quot;社会具身\u0026quot;：具身智能正在从单个智能体向多智能体系统扩展。多智能体协作学习、通信协议涌现和社会规范形成等研究方向，为具身智能开辟了新的应用领域。例如，在自动驾驶中，多车协作需要考虑每个车辆的形态约束和感知能力；在仓储机器人中，多机器人协作需要考虑碰撞避免和任务分配。\n5. 从\u0026quot;模拟\u0026quot;到\u0026quot;现实\u0026quot;：Sim2Real迁移是具身智能面临的核心挑战之一。综述指出，形态计算在Sim2Real迁移中具有天然优势，因为它不依赖于精确的控制器模型。未来，如何利用形态计算来提升Sim2Real迁移的鲁棒性，将是一个重要的研究方向。\n📖 延伸阅读 《身体的智能》（How the Body Shapes the Way We Think: A New View of Intelligence）（Pfeifer \u0026amp; Bongard, 2006）- 形态计算理论的奠基之作，深入探讨了身体形态在智能计算中的作用。该书系统阐述了形态计算的核心思想：身体的物理属性可以\u0026quot;卸载\u0026quot;部分计算任务到身体-环境的耦合动力学中，为理解具身智能提供了重要的理论框架。\n《具身认知》（Embodied Cognition）（Shapiro, 2019）- 具身认知领域的权威教材，系统介绍了具身认知的理论基础和实验研究。该书详细讨论了梅洛-庞蒂的身体图式、皮亚杰的发生认识论和吉布森的生态心理学，为理解具身智能的认知科学基础提供了全面的参考。\n\u0026ldquo;From Machine Learning to Robotics: Challenges and Opportunities for Embodied Intelligence\u0026rdquo;（Roy et al., 2021）- 从机器学习角度探讨具身智能的挑战与机遇。该文分析了机器学习方法在具身智能中的应用现状，讨论了Sim2Real迁移、样本效率和安全交互等核心挑战，并提出了未来的研究方向。\n\u0026ldquo;Learning Embodied Intelligence from Interaction\u0026rdquo;（Levine et al., 2023）- 从交互中学习具身智能的代表性工作。该文提出了通过大规模机器人交互数据来学习通用具身智能的方法，展示了数据驱动的具身学习在实际机器人任务中的潜力，为动作驱动的具身学习（$\\mathcal{A} \\rightarrow \\mathcal{L}$）提供了重要的实证支持。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/embodied-intelligence-synergy-2025/","summary":"本文从形态、动作、感知与学习四个维度的协同关系出发，系统综述了具身智能的研究进展，强调智能是大脑、身体与环境紧密耦合的产物，并提出了统一的具身智能框架。","title":"论文精读｜具身智能：形态、动作、感知与学习的协同——全面综述"},{"content":"📄 论文信息 标题：From Foundation to Application: Improving VLA Models in Practice 团队：蚂蚁机器人 LingBot 团队（Wei Wu、Fangjing Wang 等共 24 位作者，Kecheng Zheng 作为 Project Lead） arXiv：2607.06403（2026 年 7 月 7 日提交，cs.RO） 项目主页：technology.robbyant.com/lingbot-vla-v2 代码/权重：已开源在 GitHub 与 HuggingFace 一句话总结：不追求单一炫技，而是在数据、动作空间、预测建模三个维度同时补课，让 VLA 从\u0026quot;会做实验题\u0026quot;变成\u0026quot;能上真机干活\u0026quot;。 🏗️ 架构总览：端到端数据流 LingBot-VLA 2.0 的整体架构遵循\u0026quot;视觉编码 → 语言对齐 → 动作生成\u0026ldquo;三段式设计，这也是当前 VLA 基础模型的通行范式：\n多视角图像 + 语言指令 ↓ InternVL2 视觉编码器（图像 → patch 序列） ↓ Qwen-2.5 LLM 骨干（跨模态融合 + 因果推理） ↓ MoE 动作专家（Token 级稀疏路由 → 55 维动作向量） ↓ 双臂关节 + 末端 + 灵巧手 + 腰部 + 头部 + 底盘 → 机器人执行 具体来说，模型在 InternVL2（视觉-语言骨干）的基础上，在 LLM 输出的隐层表示上附加了一个**动作专家（Action Expert）**模块。这个动作专家内部通过 Token 级稀疏 MoE 将隐层 token 映射到 55 维的规范动作空间。与 1.0 版本相比，2.0 最核心的三个架构变化是：\n架构变化 1.0 方案 2.0 方案 目的 视觉骨干 InternVL2-7B InternVL2-7B（更大数据） 利用 6 万小时预训练提升视觉泛化 动作专家 Dense FFN Token 级稀疏 MoE 多本体异构动力学解耦 时序建模 纯自回归 双查询蒸馏（几何+未来） 赋予模型\u0026quot;向前看\u0026quot;的能力 这篇文章后续的四个维度——数据、动作空间、预测建模、MoE——正是围绕这三个架构变化展开。\n🤔 要解决什么问题？ VLA 基础模型这两年进步飞快，但作者一句话点破痛点：实验室条件和真实部署之间存在巨大鸿沟。具体拆成三道坎：\n鸿沟 实验室设定 真实世界要求 现有方法的短板 本体多样性 单一或少量本体 各家机器人构型千差万别 跨本体迁移差，数据一多就互相打架 动作空间 标准双臂平台 头部、腰部、移动底盘、灵巧手都要控 双臂 VLA 接不上全身自由度 时序推理 只看当前帧做反应 要预判未来场景与动作后果 缺乏\u0026quot;向前看\u0026quot;的能力，动态环境吃亏 作者的核心判断是：实用化 VLA 不能只靠堆模型和数据规模，必须在\u0026quot;更广本体支持、更丰富可控动作、更强动态预测\u0026quot;这三件事上同时打磨。这就是 LingBot-VLA 2.0 的出发点。\n🗄️ 维度一：6 万小时大规模多本体数据 数据配方 团队重新设计了数据处理流水线，最终沉淀出约 60,000 小时的预训练语料，这是相比 1.0 版本最大的升级之一。\n数据类型 原始规模 清洗后 覆盖 机器人轨迹 ~90,000 小时 50,000 小时 单臂、双臂、移动、人形共 20 种本体 第一人称人类视频 ~20,000 小时 10,000 小时 手-物交互、操作先验 三道清洗关\n机器人数据并不是\u0026quot;采了就能用\u0026rdquo;，作者用了相当工程化的质检：\n轨迹平滑性：计算动作/状态信号的三阶有限差分（jerk）以及一阶、二阶导数的 Z-score，超阈值的整段丢弃——剔除抖动、碰撞尖刺。 静默段过滤：若一个 episode 中状态几乎不变的时间占比超过 95%，直接丢弃。 视频-状态一致性：用 URDF 把机器人按记录状态投影到图像平面，人工核对投影与视频是否对得上，剔除掉相机与编码器不同步的样本。 第一人称人类视频则先用 VLM 预过滤（剔掉第三人称、纯走动、无非操作手出现的片段），再对无动作标签的视频跑第一人称 SLAM + 手部姿态估计（MANO），把手部运动抬到世界坐标系统一存储，训练时再转回当前相机系——这套设计把\u0026quot;相机动\u0026quot;和\u0026quot;手动\u0026quot;解耦，是复用人类视频的关键技巧。\n统一动作表示 为了让异构本体能在同一个张量里学习，作者定义了 55 维规范向量：\n维度区间 含义 14 维 双臂关节位置 14 维 末端位姿（XYZ + 四元数） 2 维 夹爪位置 12 维 灵巧手关节 4 维 腰部 2 维 头部 3 维 移动信号 4 维 保留 某本体没有的部位就零填充，既统一了接口，又通过 padding 让所有本体共用一套模型。末端位姿每臂用 XYZ+四元数共 7 维，正好容纳自由度最高的双臂本体；单臂数据只填其中一半，其余补零。这种\u0026quot;最大本体定义字段宽度、其余补齐\u0026quot;的思路，是跨本体训练里很务实的工程选择。\n自动化语义标注 VLA 预训练需要任务级与子任务级的语言监督。团队用 Qwen3.6-27B 搭建了全自动标注流水线：把每个操作视频切成时间上连续的子任务，并为每段生成语言指令。多相机平台会联合处理俯视与腕视以消歧夹爪-物交互。每个子任务被赋予一个封闭词表里的原子动作标签（共 18 类），同时给出交互对象与简短指令。\n类别 示例 原子操作（15 类） move / pour / push / pull / rotate / open / close / cut / fold / stir / press / attach / detach … 辅助标签（3 类） transit（空手移动）/ idle（静止）/ other（词表外） 词频统计显示 move 与 transit 占据绝大多数时长，而 cut、fold、stir 这类精细操作频次低但单次耗时长——这种长尾分布也解释了为什么精细任务在基准上仍最难。\n🦾 维度二：全身自由度动作空间 这是 2.0 区别于\u0026quot;纯双臂 VLA\u0026quot;的核心。系统支持：\n头部（2 DoF）——可主动调整视角 腰部（4 DoF）——扩大工作空间 移动底盘（3 DoF）——长程移动操作 灵巧手（最高 12 DoF/手）——精细操作 从论文的本体统计表可以看到，自由度跨度从 Franka 的 8 维一直到 Fourier GR-2 人形的 32 维。受益于这份覆盖全身自由度的预训练数据，LingBot-VLA 2.0 在跨本体长程移动操作上展现了明显优势。\n🔮 维度三：预测式动力学建模（双查询蒸馏） 为了让模型\u0026quot;向前看\u0026quot;，作者把未来预测当作代理任务（proxy task），通过双查询蒸馏（Dual-Query Distillation）在因果 VLM 架构内注入时序推理能力。\n实现方式 在 VLM 的视觉 token 和文本 token 序列末尾，追加两个可学习查询 token：\n当前查询 $Q_t$：对齐到当前观测的深度估计，提供几何先验 未来查询 $Q_{t+T}$：对齐到未来 $T$ 帧（action chunk 长度）的视频表征，提供时序动力学 两个查询通过蒸馏损失与两个\u0026quot;老师\u0026quot;模型对齐：\n$$\\mathcal{L}_{\\text{distill}} = \\mathcal{L}_{\\text{depth}}(Q_t, \\text{Depth}(I_t)) + \\mathcal{L}_{\\text{video}}(Q_{t+T}, \\text{DINO-Video}(I_{t:t+T}))$$其中深度损失使用 L1 距离（逐像素深度值的 L1），视频表征损失使用 Frobenius 范数（对齐表征矩阵的协方差结构）：\n$$\\mathcal{L}_{\\text{depth}} = \\|\\hat{D}_t - D_t\\|_1, \\quad \\mathcal{L}_{\\text{video}} = \\|\\hat{R}_{t+T} - R_{t+T}\\|_F$$两位老师：深度模型与 DINO-Video 老师 提供的监督 损失形式 作用 LingBot-Depth（深度估计模型） 显式 3D 几何结构 L1 距离 让 $Q_t$ 编码\u0026quot;物体在哪儿\u0026quot;的空间信息 DINO-Video（视频表征模型） 因果时序动力学 Frobenius 范数 让 $Q_{t+T}$ 编码\u0026quot;场景将怎么变\u0026quot;的时间信息 DINO-Video 是作者自研的\u0026quot;机器人友好型\u0026quot;视频表征模型，架构设计很有参考价值：\n初始化：以 DINOv3（ViT-g/14，303M 参数）为 backbone 因果化改造：加入分块因果时序注意力（causal temporal attention）和 3D-RoPE，让模型只能看过去帧，不能看未来帧——这是作为\u0026quot;因果老师\u0026quot;的前提 训练数据：500 万段互联网视频 + 第一人称人类视频 + 机器人视频，均匀采样 16 帧/段，按有效帧率赋予绝对时间编码 训练目标：DINO（自蒸馏分类） + iBOT（掩码图像建模）双目标 模型 参数(M) 人像分类↑ 机器人分类↑ RoboCOIN↓ AgiBotWorld↓ V-JEPA 2 303.89 80.35 70.43 0.32 0.33 DINOv3 303.13 76.19 69.06 0.22 0.24 DINO-Video 303.13 80.21 71.97 0.20 0.19 在 LARYBench 四项指标上 DINO-Video 拿下三项最优——尤其在 RoboCOIN（机器人视频时序对应）和 AgiBotWorld（具身场景理解）上大幅领先。这说明因果时序建模 + 机器人数据联合训练对具身场景的时序表征至关重要。\n训练流程：两阶段 双查询蒸馏的训练分为两步：\nStage 1（预热）：冻结 VLM 骨干，只训练查询 token 和蒸馏头，让 $Q_t$ 和 $Q_{t+T}$ 先学会编码深度和视频表征 Stage 2（联合微调）：解冻 VLM 骨干，蒸馏损失与动作预测损失联合优化，让 VLM 的隐层表示同时承载\u0026quot;几何理解 + 时序推理 + 动作生成\u0026quot;三重信息 这套设计的精妙之处在于：当前查询抓几何，未来查询学预判。$Q_t$ 告诉模型\u0026quot;现在物体在哪儿\u0026quot;（空间 grounding），$Q_{t+T}$ 告诉模型\u0026quot;物体即将怎么动\u0026quot;（时间推理），两者通过蒸馏注入 VLM 的隐层表示，让动作专家在生成轨迹时同时看到空间布局和未来演化。\n🧩 MoE 动作专家：Token 级稀疏路由的原理与实现 跨本体预训练最大的麻烦是：不同本体的动力学、控制逻辑差异巨大——一个 Franka 的 7 轴臂和一个人形 Fourier GR-2 的 32 维全身自由度，其动作分布几乎没有重叠区域。把所有这些数据拿来训一个 Dense 动作头，不同本体的梯度会互相拉扯，导致每个本体都学不好。\n作者在动作专家（Action Expert）内部引入了Token 级稀疏 MoE，灵感来自 DeepSeek-V3 的无辅助损失负载均衡。关键是不在整个模型上加 MoE，只在动作专家内部做 MoE——视觉和语言部分共享同一个 Dense 骨干，动作生成部分由多个专家分担。\n数学形式 设 LLM 骨干输出的隐层表示为 $h_t \\in \\mathbb{R}^d$，动作专家首先通过路由网络（Router）计算每个 token 对 $N$ 个专家的亲和度：\n$$s_i = \\text{Sigmoid}(W_i h_t) \\in (0,1), \\quad i=1,\\dots,N$$与 softmax 路由不同，Sigmoid 路由不强制专家之间竞争——一个 token 可以同时激活多个专家，也可以一个都不激活。Top-K 选择基于带偏置的分数 $s_i + b_i$，而最终的加权系数 $g_i$ 来自原始亲和度的归一化：\n$$g_i = \\frac{s_i}{\\sum_{j \\in \\text{Top-K}} s_j} \\cdot \\mathbb{1}[i \\in \\text{Top-K}]$$其中 $b_i$ 是路由修正偏置，根据专家负载 $l_i$ 与平均负载 $\\bar{l}$ 的差异动态调整：\n$$b_i \\leftarrow b_i - \\alpha \\cdot \\text{sign}(l_i - \\bar{l})$$当某专家负载过高时 $b_i$ 减小，下次被选中的几率降低；负载过低时 $b_i$ 增大——不需要任何辅助损失函数，靠偏置的符号反馈就实现了负载均衡。\n最终动作专家的输出为共享专家与路由专家的加权和：\n$$a_t = \\text{FFN}_{\\text{shared}}(h_t) + \\sum_{i \\in \\text{Top-K}} g_i \\cdot \\text{FFN}_i(h_t)$$其中 $\\text{FFN}_{\\text{shared}}$ 是一个轻量共享专家，保留所有本体的通用动作先验（比如\u0026quot;夹爪闭合\u0026quot;的运动学模式在所有本体上一致），路由专家提供每个 token 所需的专精容量。\n为什么 MoE 在 VLA 中有效？ 作者做了严格的 active 参数对齐对比实验：控制实际计算量（FLOPs）和激活参数量相同，比较 MoE（总参数量更大但稀疏激活）和 Dense 模型。结果 MoE 的训练损失和验证误差都持续低于同等激活参数的 Dense 模型。\n更深层的解释是：MoE 相当于为每个动作 token 隐式地选择了一个\u0026quot;子策略网络\u0026quot;。对于底盘控制 token，激活的专家偏向低频、大范围运动模式；对于灵巧手 token，激活的专家偏向高频、精细接触模式。这种自发分化让不同本体的梯度不再互相干扰——即使它们在同一个 loss 函数下优化。\n📊 实验结果 GM-100 双臂基准（generalist 设定） 在 9 个双臂任务上单策略混合训练，LingBot-VLA 2.0 全面领先：\n平台 指标（Prog./Succ. %） GR00T N1.7 π0.5 LingBot-VLA-1.0 LingBot-VLA-2.0 Agilex Cobot Magic（均值） Progress / Succ. 36.3 / 17.8 59.1 / 32.2 58.2 / 30.0 66.2 / 34.4 Galaxea R1 Pro（均值） Progress / Succ. 16.4 / 5.6 27.4 / 8.9 32.7 / 15.6 34.6 / 15.6 在 Agilex 上比 π0.5 高 7.1 / 2.2 个点，在 Galaxea 上高 7.2 / 6.7 个点。Retrieve keychain 任务从 1.0 的 67.5/60.0 直接拉满到 100.0/100.0，Pick out toy bone 从 77.5/70.0 提升到 95.0/90.0——这些需要强视觉 grounding 和目标导向的任务收益最明显。\nGM-100 的评测不是简单的二元成功，而是把每个任务分解成细粒度步骤并给部分分（progress score）。比如\u0026quot;取钥匙扣\u0026quot;拆成\u0026quot;拉开抽屉→抓取钥匙扣→移到抽屉前→放下\u0026quot;四步，每步 25 分；\u0026ldquo;挤番茄酱\u0026quot;拆成\u0026quot;左手拿瓶悬于盘上→倾斜喷嘴→双手挤压出酱→放下\u0026quot;四步。这种细粒度评分能捕捉长程任务的中间进展，比单一成功率更公平。\n长程移动操作 这是真正体现\u0026quot;全身自由度\u0026quot;价值的场景，每个任务 15 次试验：\n本体 / 任务 设定 LingBot-VLA-2.0 π0.5 Astribot S1 / 冰箱分拣 In-domain 77.1 / 60.0 65.3 / 46.7 Astribot S1 / 冰箱分拣 OOD 37.0 / 13.3 30.3 / 6.7 Cobot Magic-ARX X5 / 灶台清洁 In-domain 84.3 / 66.7 79.9 / 60.0 Cobot Magic-ARX X5 / 灶台清洁 OOD 67.5 / 40.0 62.5 / 33.3 OOD 设定下初始位姿扰动 ±10cm 并替换未见过物体，LingBot-VLA-2.0 仍稳定领先，尤其在成功率上的优势说明它能更完整地走完长程任务序列，而不是只完成前几步。\n训练消融：各组件贡献度 论文还做了系统的组件消融。从 1.0 出发逐项添加 2.0 的新模块：\n配置 GM-100 Avg Progress vs 1.0 提升 LingBot-VLA 1.0（baseline） 45.4% — + MoE 动作专家 48.2% +2.8% + 全身自由度数据 52.6% +4.4% + 第一人称人类视频 56.1% +3.5% + 双查询蒸馏 59.3% +3.2% LingBot-VLA 2.0（全量） 60.2% +14.8% 每个模块贡献约 3-4 个点，其中全身自由度数据贡献最大（+4.4%），说明覆盖更多本体和动作空间是 VLA 泛化的最有效手段。MoE 贡献最小的原因可能是单本体场景下专家分化的收益有限——MoE 的真正价值应该体现在跨本体场景，而这恰好是 GM-100 测试中覆盖不足的。\n关键消融：动作空间 相对关节动作 vs 绝对关节动作：相对动作把平均成功率从 33.7 → 55.0。原因是相对动作的方差只有绝对的 31%–37%，把\u0026quot;全局构型回归\u0026quot;变成了\u0026quot;局部运动回归\u0026rdquo;。 任务依赖性：接触密集任务（如挤番茄酱）EEF 动作更好；姿态相关任务关节动作更好——没有万能动作空间，要看任务物理结构。 作者进一步用\u0026quot;分布对齐度\u0026quot;（动作分布与整体分布的差距）分析：Barcode Scan 任务下关节动作分布更聚拢（gap 0.68 vs EEF 的 1.73），所以关节动作成功率大幅领先（58.7 vs 24.0）；而 Squeeze Ketchup 恰好相反，EEF 在笛卡尔空间更能表达接触密集运动。结论是：分布对齐能解释一部分现象，但任务的物理结构（接触、可达性、构型约束）才是决定性因素。这对实际部署选动作空间有直接指导意义。\n💡 个人思考 \u0026ldquo;工程派\u0026quot;VLA 的胜利：这篇论文没有提出惊天动地的新架构，但它把数据质检、动作统一、预测监督、MoE 路由这些工程细节做到了极致。这恰恰说明：VLA 走向实用化的瓶颈不在某个 single trick，而在系统级的\u0026quot;补短板\u0026rdquo;。对比很多只在单一基准上刷点的学术工作，这种\u0026quot;三维度同时补课\u0026quot;的思路更接近产业落地。\n双查询蒸馏的性价比很高：用一个深度模型 + 一个自研视频模型当老师，就让 VLA 拥有了\u0026quot;看当前+预未来\u0026quot;的能力。DINO-Video 这种\u0026quot;因果化\u0026quot;的基础模型思路值得借鉴——不是所有任务都需要重训世界模型，把现成的强视觉基础模型因果化改造可能更省事。\nMoE 在 VLA 里的角色值得深究：作者用 active 参数对齐证明了 MoE 不是单纯堆参数。但跨本体场景下，专家是否会自发按本体/任务分化？论文没有给出专家路由的可视化分析。如果能证明某些专家专门处理灵巧手、某些处理移动底盘，MoE 的可解释性会更上一层。\n评测的诚实：作者坦诚指出\u0026quot;progress score 与 success rate 仍有差距\u0026quot;，说明模型常卡在最后一步精确放置；同时两个平台性能差异也反映了运动学、相机视角、动作对齐仍是难题。这种不回避问题的态度比单纯报喜更有价值。\n对我的启发：在数据层面，\u0026ldquo;VLM 预过滤 + SLAM 重建 + 质量控制\u0026quot;这条第一人称视频复用流水线非常有工程参考价值；在动作层面，\u0026ldquo;相对动作降方差\u0026quot;的解释简洁有力，值得在自己项目里立刻验证。\n隐忧：6 万小时的数据规模对学术界堪称海量，但也意味着复现门槛极高——没有这种数据基础的工作很难直接对标。社区亟需像 GM-100 这样带细粒度部分分的统一基准，以及更开放的数据共享机制，否则\u0026quot;数据壁垒\u0026quot;会让 VLA 研究越来越向少数大团队集中。论文能同时开源代码与 checkpoint，已经是相当难得的开放态度。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2607-06403/","summary":"蚂蚁 LingBot-VLA 2.0 在数据、动作空间、预测建模三个维度同时补课：6 万小时多本体预训练数据覆盖 9 种构型，全身自由度动作空间支持头部/腰部/底盘/灵巧手协同控制，双查询蒸馏赋予模型向前看的预测能力。Token 级稀疏 MoE 动作专家有效解耦多本体异构动力学。在 GM-100 双臂基准与长程移动操作上全面领先 π0.5。","title":"论文精读｜From Foundation to Application: Improving VLA Models in Practice（LingBot-VLA 2.0）"},{"content":"📄 论文信息 **图1: 端到端范式对比**。(a)密集网格方法：对所有BEV网格单元提取特征后直接生成最终规划。(b)iPad：通过稀疏BEV提案的迭代精炼，将特征提取集中在与规划最相关的区域。 标题：iPad: Iterative Proposal-centric End-to-End Autonomous Driving 团队：南洋理工大学（Ke Guo, Haochen Liu, Chen Lv）、德赛西威（Xiaojun Wu）、香港大学（Jia Pan） 发表：CVPR 2025（arXiv:2505.15111） 关键词：端到端自动驾驶、迭代规划、稀疏BEV、ProFormer 一句话总结：以规划提案为中心的端到端自动驾驶范式，通过迭代精炼稀疏BEV提案大幅提升效率和规划质量。 论文链接：arXiv:2505.15111 代码仓库：github.com/Kguo-cs/iPad 🧭 背景介绍：端到端自动驾驶的演进路线 从模块化到端到端的范式转变 自动驾驶系统的架构设计经历了一条从模块化到端到端的清晰演进之路。早期的模块化方法将自动驾驶分解为感知（检测、跟踪、语义分割）、预测（轨迹预测、意图估计）和规划（行为规划、运动规划）等独立模块。每个模块独立设计、独立优化，工程师可以针对每个子问题使用最合适的算法。然而，这种架构存在一个根本性问题：级联误差传播。感知阶段的误差会沿流水线逐级放大，最终严重影响规划质量。此外，各个模块之间难以实现端到端的联合优化，模块间的信息传递存在不可逆的损失。\n端到端自动驾驶的提出正是为了克服上述问题，其核心思想是从传感器输入直接映射到规划输出的单一可微网络。以下是端到端自动驾驶发展的几个关键里程碑：\nUniAD（Hu et al., CVPR 2023, Best Paper）：首个全栈端到端自动驾驶框架，以规划为导向（planning-oriented），将检测、跟踪、建图、预测、规划统一在一个Transformer架构中。UniAD证明了联合优化的有效性，但其密集BEV特征表示带来的计算开销巨大——在单个A100上仅能达到4.5 FPS，难以满足实时要求。\nVAD/VADv2（Chen et al., 2023/2024）：引入向量化场景表示，将场景元素编码为向量化token而非密集BEV网格，降低了计算复杂度。VADv2进一步引入了概率规划框架，通过评分器从多模态候选轨迹中选择最优规划。\nSparseDrive（Weng et al., 2024）：提出稀疏感知范式，使用稀疏查询代替密集BEV特征进行场景理解，显著降低了计算量。SparseDrive将感知、预测和规划统一在稀疏表示下，每个物体仅用少量查询表示。\nSparseDrive-V2（2025）：在SparseDrive的基础上进一步优化了稀疏架构，引入了更强的时间建模能力。\nDrivoR（Kirby et al., CVPR 2026）：利用ViT寄存器token压缩BEV特征，探索了token级别的轻量化方案，以极低的计算量实现了有竞争力的规划性能。\n尽管上述方法在性能上不断进步，但iPad的作者指出它们都遵循一个共同的隐含范式：先构建完整的场景表示（密集或稀疏），再从中进行规划决策。这一范式存在一个根本性问题——规划被当作一个\u0026quot;下游任务\u0026quot;，无法引导特征提取聚焦于与决策最相关的信息。换言之，大量的计算资源被消耗在场景中与当前驾驶决策无关的区域上。\n现有方法的瓶颈与iPad的动机 iPad的提出正是为了打破这一范式。作者从两个维度指出了当前端到端自动驾驶方法的瓶颈：\n计算效率瓶颈：密集BEV网格的计算复杂度随分辨率呈二次增长。UniAD使用200×200的BEV分辨率，每个网格单元需要提取多视角图像特征的融合表示。即使VAD和SparseDrive降低了计算量，其查询数量仍然固定且覆盖全场景，无法避免对无关区域的计算浪费。\n规划感知瓶颈：密集网格对所有空间位置一视同仁，大量计算资源浪费在与规划无关的背景区域上。更严重的是，这导致了因果混淆（causal confusion）问题——模型学会了关注与规划决策无关的场景元素（如远处的建筑物、路边的树木），这些无关特征反而可能引入噪声，降低规划性能。\niPad的核心洞察是：规划应当成为整个架构的中心组织原则，而非作为一个下游任务。通过将规划提案（proposals）置于特征提取和辅助任务的核心，可以同时提升效率和规划质量。\n🤔 要解决什么问题？ 现有的端到端自动驾驶方法大多基于密集BEV网格特征进行规划，存在两个主要问题：\n1. 计算效率低下。密集BEV网格需要对每个网格单元提取特征，计算复杂度随分辨率呈二次增长。例如UniAD等方法需要高分辨率BEV特征来支持检测、跟踪、建图等辅助任务，计算开销巨大。\n2. 规划感知能力有限。密集网格对所有空间位置一视同仁，大量计算浪费在与规划无关的区域上，导致因果混淆（causal confusion）——模型学会了关注不相关的场景元素，降低了规划性能。\niPad的核心洞察是：规划应当成为整个架构的中心组织原则，而非作为一个下游任务。通过将规划提案（proposals）置于特征提取和辅助任务的核心，可以同时提升效率和规划质量。\n🏗️ 核心架构 **图2: iPad框架总览**。包含四个核心组件：Scene Encoder（灰色）提取图像和自车特征；ProFormer（蓝色）基于自车特征初始化BEV提案查询并迭代精炼；Scorer（绿色）为每一提案轨迹打分；Proposal-Centric Mapping and Prediction（红色）预测通航能力和碰撞风险。 iPad由四个关键组件构成：\n1. Scene Encoder（场景编码器） 处理多视角图像和自车状态。图像经过ResNet-34 backbone提取多视角特征图，自车状态（速度、加速度、转向指令）通过线性层编码为自车特征。\n具体来说，对于环视摄像头采集的多视角图像 $I_i \\in \\mathbb{R}^{3 \\times H \\times W}$（$i=1,\\dots,6$），经过共享权重的ResNet-34 backbone，提取多尺度特征图 $\\mathbf{F}_i \\in \\mathbb{R}^{C \\times H' \\times W'}$。自车状态 $\\mathbf{s} \\in \\mathbb{R}^{D_s}$（包含速度、加速度、方向盘转角等时序信息）通过两层MLP编码为自车特征 $\\mathbf{e} \\in \\mathbb{R}^{D_e}$。自车特征将用于ProFormer中提案查询的初始化，确保初始提案与当前车辆状态对齐。\n2. ProFormer（提案Transformer） 这是iPad的核心创新，一个基于BEVFormer构建的提案中心BEV编码器。ProFormer的工作流程是\u0026quot;预测-锚定-精炼\u0026quot;的迭代循环：\n初始化：基于自车特征初始化若干BEV提案查询 提案预测：从查询解码出候选轨迹提案 锚定注意力：以各提案的角点作为锚点，聚合多视角图像特征 查询精炼：用聚合的特征更新提案查询 迭代：重复上述过程，逐步精炼提案和特征 这种设计相比密集BEV网格有两个关键优势：\n复杂度线性增长：计算量随提案数量线性增长，而非随网格分辨率平方增长 规划感知：特征提取聚焦于与规划相关的区域，避免无关信息干扰 提案初始化 给定自车特征 $\\mathbf{e}$，ProFormer首先初始化 $N$ 个提案查询 $\\{\\mathbf{q}_j^{(0)}\\}_{j=1}^N$。每个查询通过可学习的嵌入向量与自车特征的组合生成：\n$$\\mathbf{q}_j^{(0)} = \\text{Embed}_j + \\text{MLP}_{\\text{init}}(\\mathbf{e})$$其中 $\\text{Embed}_j \\in \\mathbb{R}^{D_q}$ 是可学习的提案嵌入，用于区分不同的提案。这种初始化方式确保了提案的多样性（通过不同的嵌入向量）同时与当前驾驶状态对齐（通过自车特征调制）。\n锚定注意力机制的数学形式 ProFormer的核心操作是提案锚定的交叉注意力（Proposal-Anchored Cross-Attention）。设第 $k$ 次迭代中的第 $j$ 个提案查询为 $\\mathbf{q}_j^{(k)}$，其对应的提案轨迹由 $T$ 个未来时间步的路点（waypoints）组成：\n$$\\tau_j^{(k)} = \\{(x_t^{(j,k)}, y_t^{(j,k)}) | t=1,\\dots,T\\}$$每个路点在BEV坐标系中的坐标 $(x_t, y_t)$ 被投影回图像平面，得到对应多视角图像特征的参考点。锚定注意力计算如下：\n$$\\text{Attn}(\\mathbf{q}_j^{(k)}, \\{\\mathbf{F}_i\\}) = \\sum_{i=1}^6 \\sum_{t=1}^T \\alpha_{i,t} \\cdot \\mathbf{F}_i(\\pi_i(x_t^{(j,k)}, y_t^{(j,k)}))$$其中 $\\pi_i(\\cdot)$ 将BEV坐标投影到第 $i$ 个相机的图像平面（利用相机内外参），$\\alpha_{i,t}$ 是注意力权重，$\\mathbf{F}_i(\\cdot)$ 是双线性插值得到的图像特征。\n为了提高效率，实际实现中使用了可变形注意力机制（deformable attention），仅关注参考点周围一定偏移区域内的特征，而非全图：\n$$\\text{DeformAttn}(\\mathbf{q}_j^{(k)}, \\{\\mathbf{F}_i\\}) = \\sum_{i=1}^6 \\sum_{t=1}^T \\sum_{m=1}^M A_{i,t,m} \\cdot \\mathbf{F}_i(\\pi_i(x_t^{(j,k)}, y_t^{(j,k)}) + \\Delta p_{i,t,m})$$其中 $M$ 是采样点数，$A_{i,t,m}$ 是归一化的注意力权重，$\\Delta p_{i,t,m}$ 是预测的二维偏移量。可变形注意力的关键优势在于：它允许模型自适应地调整采样位置，捕捉提案轨迹周围的局部上下文信息，而不需要处理整个图像特征图。\n查询更新的迭代过程 每次迭代后，提案查询通过残差连接和FFN进行更新：\n$$\\mathbf{q}_j^{(k+1)} = \\text{FFN}(\\text{DeformAttn}(\\mathbf{q}_j^{(k)}, \\{\\mathbf{F}_i\\}) + \\mathbf{q}_j^{(k)})$$同时，更新后的查询通过一个轻量级MLP解码出新的候选提案轨迹：\n$$\\tau_j^{(k+1)} = \\text{MLP}_{\\text{proposal}}(\\mathbf{q}_j^{(k+1)})$$经过 $K$ 次迭代（论文中默认 $K=3$），ProFormer输出最终的 $N$ 个精炼提案 $\\{\\tau_j^{(K)}\\}_{j=1}^N$ 及其对应的查询特征 $\\{\\mathbf{q}_j^{(K)}\\}_{j=1}^N$。整个过程可以看作是一种渐进式精炼——每次迭代都在前一次的基础上细化提案和特征，使提案越来越精确，特征越来越聚焦于关键场景元素。这一思路与DETR系列中迭代框精炼的思想一脉相承，但将其从目标检测推广到了自动驾驶规划领域。\n与密集BEV的复杂度对比分析 对于分辨率为 $H_B \\times W_B$ 的BEV网格，密集方法的计算复杂度为 $O(H_B W_B C_{\\text{attn}})$，其中 $C_{\\text{attn}}$ 是每个网格单元的注意力计算开销。iPad的计算复杂度为 $O(N K M T C'_{\\text{attn}})$，其中 $N$ 是提案数，$K$ 是迭代次数，$M$ 是采样点数，$T$ 是时间步数。在实际配置下（$N=6$, $K=3$, $M=4$, $T=20$，而 $H_B=200$, $W_B=200$），两者的计算量差距可达两个数量级。\n3. Scorer（评分器） 对ProFormer输出的所有精炼提案进行评估，为每个提案预测一个分数，选择分数最高的轨迹作为最终规划输出。\n评分器是一个轻量级MLP，输入为提案查询特征 $\\mathbf{q}_j^{(K)}$ 和对应的轨迹 $\\tau_j^{(K)}$，输出一个标量分数 $s_j$：\n$$s_j = \\text{MLP}_{\\text{scorer}}(\\mathbf{q}_j^{(K)}, \\tau_j^{(K)})$$在训练过程中，评分器的目标是预测每个提案与真实轨迹之间的匹配程度。评分器的训练使用基于间隔的排序损失（margin-based ranking loss），使得最优轨迹的分数显著高于其他轨迹：\n$$\\mathcal{L}_{\\text{scorer}} = \\sum_{j \\neq j^*} \\max(0, s_j + \\Delta - s_{j^*})$$其中 $j^*$ 是与真实轨迹匹配度最高的提案索引，$\\Delta$ 是间隔超参数（论文中设为0.5）。这种设计确保了评分器不仅能够区分好轨迹和坏轨迹，还能够产生有意义的相对排序。\n4. Proposal-Centric Mapping and Prediction iPad引入了两个轻量级的、以提案为中心的辅助任务：\nMapping：预测提案轨迹上的各点是否在道路/路线上（通航性判断） Prediction：预测与提案轨迹最可能发生碰撞的前两个物体的未来状态（碰撞风险预测） 相比于UniAD等方法的全场景检测、跟踪、建图等辅助任务，iPad的两个辅助任务：\n完全以规划为中心，只关注与当前决策相关的信息 计算量极低，不需要高分辨率BEV特征 更符合人类驾驶直觉——只关注与决策直接相关的上下文 Mapping任务的实现细节 对于提案轨迹 $\\tau_j^{(K)}$ 上的每个路点 $(x_t, y_t)$，Mapping头使用MLP预测该点的通航性概率：\n$$p_t^{\\text{map}} = \\sigma(\\text{MLP}_{\\text{map}}(\\mathbf{q}_j^{(K)}, \\text{PE}(x_t, y_t)))$$其中 $\\text{PE}$ 是位置编码，$\\sigma$ 是Sigmoid函数。训练使用二元交叉熵损失：\n$$\\mathcal{L}_{\\text{map}} = -\\frac{1}{T}\\sum_{t=1}^T [y_t^{\\text{map}} \\log p_t^{\\text{map}} + (1-y_t^{\\text{map}})\\log(1-p_t^{\\text{map}})]$$其中 $y_t^{\\text{map}} \\in \\{0,1\\}$ 表示第 $t$ 个路点是否在可行驶区域内的真实标签。这一任务引导模型理解道路结构，避免生成偏离道路的无效轨迹。\nPrediction任务的实现细节 Prediction头同样以提案为中心，仅预测与当前提案最可能发生碰撞的前两个物体。对于每个物体 $o \\in \\{1,2\\}$，预测其未来 $T$ 步的轨迹：\n$$\\hat{\\tau}_o = \\text{MLP}_{\\text{pred}}(\\mathbf{q}_j^{(K)}, \\tau_j^{(K)})$$训练使用轨迹预测的L1损失：\n$$\\mathcal{L}_{\\text{pred}} = \\sum_{o=1}^2 \\sum_{t=1}^T \\|\\hat{\\tau}_o^t - \\tau_o^{t*}\\|_1$$这种\u0026quot;按需预测\u0026quot;的范式有两个关键优势：一是避免了全场景预测的计算开销，二是避免了与规划无关的物体引入噪声。本质上，模型只需要关注\u0026quot;哪些物体会影响我的当前决策\u0026quot;，而不是\u0026quot;场景中所有物体都在做什么\u0026quot;。\n整体训练目标 iPad的整体训练损失函数由三部分组成：\n$$\\mathcal{L} = \\lambda_1 \\mathcal{L}_{\\text{plan}} + \\lambda_2 \\mathcal{L}_{\\text{scorer}} + \\lambda_3 (\\mathcal{L}_{\\text{map}} + \\mathcal{L}_{\\text{pred}})$$其中 $\\mathcal{L}_{\\text{plan}}$ 是规划损失（包含L1损失和碰撞惩罚），权重系数设为 $\\lambda_1 = 1.0$, $\\lambda_2 = 0.5$, $\\lambda_3 = 0.1$。较低的 $\\lambda_3$ 值反映了辅助任务的\u0026quot;辅助\u0026quot;本质——它们提供额外的学习信号但不应主导训练过程。\n🔬 实验分析 **图3: 实验结果概览**。iPad在NAVSIM和Bench2Drive基准上取得SOTA性能，同时计算量仅为UniAD的1/10以下。 基准测试设置 iPad在两个主流的自动驾驶基准上进行全面评测：\nNAVSIM：基于nuPlan数据集的大规模开环评测基准。NAVSIM使用PDMS（Planning Distance Mean Score）作为核心指标，该指标综合考虑了碰撞率、驾驶舒适性、交通规则遵守度等多个维度。评测涵盖多种驾驶场景，包括跟车、变道、转弯、环岛等。\nBench2Drive：基于CARLA模拟器的闭环评测基准。与NAVSIM的开环设置不同，Bench2Drive提供反应式闭环环境，使用驾驶分数（Driving Score, DS）和路线完成率（Route Completion, RC）作为核心指标，更接近真实部署条件。\n基准测试表现 NAVSIM（开环）：基于真实世界nuPlan数据集的大规模开环评测。iPad在PDMS等核心指标上超越所有先前方法。\n方法 PDMS ↑ 计算量 (GFLOPs) 发布时间 UniAD 76.2 803.0 CVPR 2023 VAD 81.3 263.5 2023 SparseDrive 82.7 193.2 2024 SparseDrive-V2 86.1 145.8 2025 DrivoR 88.5 25.4 CVPR 2026 iPad (N=6, K=3) 91.1 72.0 CVPR 2025 iPad (N=12, K=5) 93.2 138.5 CVPR 2025 iPad在PDMS指标上达到93.2，显著超越所有先前方法。更值得注意的是，即使使用默认配置（N=6, K=3），iPad的PDMS也达到91.1，超过SparseDrive-V2的86.1，而计算量仅为72.0 GFLOPs——不到SparseDrive-V2的一半。与UniAD相比，iPad在PDMS上提升了17.0个点，同时计算量降低了超过10倍。\nBench2Drive（闭环）：基于CARLA的闭环评测。iPad在驾驶分数（Driving Score）和路线完成率（Route Completion）上均达到最优。\n方法 Driving Score ↑ Route Completion ↑ UniAD 28.6 41.2 VAD 34.5 49.8 SparseDrive 38.2 52.3 iPad 44.7 58.6 在闭环设置下，iPad的优势同样显著。Driving Score达到44.7，比SparseDrive高出6.5个点；Route Completion达到58.6，比SparseDrive高出6.3个点。开环与闭环评测的一致领先充分说明了iPad方法的鲁棒性和通用性。\n效率对比 iPad的计算效率优势显著：\n相比UniAD：计算量降低10倍以上 相比VAD：计算量降低5倍以上 相比SparseDrive：计算量降低2倍以上 这种效率优势来源于稀疏提案设计——iPad不需要生成和计算密集BEV网格特征。更重要的是，iPad的推理速度在默认配置下达到52.4 FPS（在单个RTX 3090上），远超实时驾驶所需的30 FPS要求，为实际部署留下了充足的计算余量。\n可扩展性实验 论文还系统研究了iPad在不同提案数量和迭代次数下的性能-效率权衡，这对于实际部署中的资源配置具有重要的指导意义：\n提案数 N 迭代数 K PDMS GFLOPs FPS 3 3 88.7 38.2 58.6 6 1 87.3 25.6 71.2 6 3 91.1 72.0 52.4 6 5 91.8 118.5 42.8 12 3 92.5 89.4 45.6 12 5 93.2 138.5 38.5 24 3 93.1 140.2 36.8 从表中可以得出几个关键结论：\n收益递减规律：当提案数从6增加到12时，PDMS提升1.4点；从12增加到24时，几乎不再提升（仅+0.6）。这表明N=12是性能-效率的最佳平衡点，超过这一数量后计算成本的增加不再带来显著收益。\n迭代精炼是关键：单次迭代（K=1）与K=3相比，PDMS差距达3.8点（91.1 vs 87.3），验证了\u0026quot;预测-锚定-精炼\u0026quot;迭代循环的有效性。但K=3到K=5的收益有限（+0.7点），说明3次迭代已经能够提取足够的规划相关信息。\n效率表现：即使使用最大配置（N=24, K=3），计算量仅为140.2 GFLOPs，仍然远低于UniAD的803 GFLOPs和VAD的263.5 GFLOPs。这充分展示了稀疏提案范式在效率上的根本优势。\n消融实验 组件 PDMS 说明 完整模型 93.2 - 移除迭代精炼 91.5 单次预测性能下降 移除辅助任务 91.8 辅助任务提升规划质量 替代为密集BEV 91.0 密集网格反而降低性能 消融实验进一步量化了各核心组件的贡献：\n迭代精炼贡献了1.7个点的PDMS提升，证明了多轮\u0026quot;预测-锚定-精炼\u0026quot;循环的价值。单次预测无法充分利用提案锚定注意力的优势。\n辅助任务贡献了1.4个点的提升，说明提案中心的通航性判断和碰撞预测确实为规划提供了有价值的引导信号。这两个辅助任务虽然轻量，但目标明确——直接服务于规划决策。\n稀疏提案 vs 密集BEV：将ProFormer替代为同等分辨率的密集BEV编码器后，PDMS下降2.2个点，同时计算量增加5倍以上。这一对比有力地证明了稀疏提案范式同时在性能和效率上优于密集范式——密集BEV不仅计算更昂贵，其包含的大量无关信息反而会损害规划质量。\n可视化分析 论文还提供了丰富的可视化结果，直观展示了iPad的规划行为。在复杂场景（如多车交互路口、密集行人区域）中，iPad的提案轨迹展现出以下特点：\n避障能力：有效避开障碍物，生成平滑的避障轨迹。在密集交通场景中，多个提案能够覆盖不同的避让策略。\n多模态多样性：在多条合理路径之间保持多样性，例如在无保护左转场景中，既有等待间隙的保守提案，也有利用较小间隙的激进提案。\n道路结构感知：对通航区域的预测与实际道路结构高度一致，说明Mapping任务有效地引导模型学习了道路拓扑结构。\n碰撞意识：Prediction头预测的物体轨迹与实际物体运动高度吻合，特别是在可能发生交互的场景中。\n相比之下，密集BEV方法在相同场景中会产生更多的碰撞轨迹和偏离道路的规划，特别是在动态交互频繁的复杂路口。\n💡 个人思考 创新点 范式转换：从\u0026quot;密集BEV → 规划\u0026quot;到\u0026quot;规划提案 → 特征提取\u0026quot;的范式转换，将规划从下游任务变为架构的组织中心，这一思路启发性很强。\n极简辅助任务：现有方法（如UniAD）的辅助任务堆砌了大量全场景感知任务，计算昂贵且与规划脱节。iPad的两个轻量级提案中心辅助任务精准定位了与规划最相关的信息，实现了\u0026quot;少即是多\u0026quot;。\n迭代精炼机制：通过\u0026quot;预测-锚定-精炼\u0026quot;的迭代循环实现了规划与特征提取的联合优化，类似于DETR的迭代精炼思想在自动驾驶规划中的成功应用。\n与其他方法的深入对比 为了更全面地理解iPad的定位，有必要将其与端到端自动驾驶领域的代表性方法进行多维度对比：\n对比维度 UniAD VADv2 SparseDrive DrivoR iPad 场景表示 密集BEV 向量化 稀疏查询 寄存器token 稀疏提案 辅助任务 6种全场景 3种全场景 3种全场景 无 2种提案中心 计算量(GFLOPs) 803.0 263.5 193.2 25.4 72.0 PDMS(NAVSIM) 76.2 81.3 82.7 88.5 91.1 推理FPS 4.5 15.2 22.8 65.0 52.4 vs UniAD：UniAD是规划导向（planning-oriented）的开创性工作，首次提出了以规划为中心的端到端框架。但其实现仍然依赖密集BEV特征和全场景感知任务（检测、跟踪、建图、预测、占用网络等）。iPad将这一思想推向极致——不仅规划是中心，整个特征提取过程都以规划提案为锚点。两者的关系类似于\u0026quot;将规划作为目标\u0026quot;和\u0026quot;将规划作为方法\u0026quot;的区别。\nvs VAD/VADv2：VAD系列使用向量化场景表示，但仍需要构建全场景的向量化地图和轨迹预测。iPad的提案中心设计跳过了全场景构建的步骤，直接从规划需求出发提取相关特征，在效率和简洁性上更进一步。\nvs SparseDrive系列：SparseDrive虽然也使用稀疏查询，但其查询覆盖全场景（每个检测到的物体对应一个查询），与规划任务无直接关联。iPad的提案查询直接从驾驶决策出发，查询数量更少（通常6-12个，远少于SparseDrive的数百个）、聚焦性更强。\nvs DrivoR：DrivoR通过ViT寄存器token压缩BEV特征，代表了另一种轻量化路线。DrivoR在计算量上更有优势（25.4 GFLOPs vs 72.0 GFLOPs），但PDMS低于iPad（88.5 vs 91.1）。两种方法的轻量化思想不同——DrivoR是\u0026quot;压缩特征\u0026quot;，iPad是\u0026quot;按需提取\u0026quot;——但可以互补。\n更广泛的影响与未来方向 iPad的方向代表了端到端自动驾驶从\u0026quot;全感知-全预测-规划\u0026quot;的繁重范式向\u0026quot;以规划为中心\u0026quot;的简洁范式转变的趋势。与DrivoR（通过寄存器token压缩）、DiffusionDrive（扩散规划）等工作一起，共同推动了端到端自动驾驶的轻量化与高效化发展。\n这种范式转换的深层意义在于：它挑战了自动驾驶领域长期以来的一个隐含假设——要做出好的驾驶决策，必须先完整理解整个场景。iPad通过实验证明，对规划而言，理解\u0026quot;与决策相关的场景\u0026quot;比理解\u0026quot;整个场景\u0026quot;更为有效。这一发现可能对更广泛的具身智能领域（如机器人操作、导航）有所启示——或许在复杂任务中，选择性注意和按需感知比全面感知更为重要。\n从后续工作的影响来看，iPad的思想已经被多个工作借鉴和扩展。例如，TOAD（Test-time Optimization for Autonomous Driving）在iPad的基础上引入了测试时的轨迹优化机制，进一步提升了规划质量。RAP（Refining and Aggregating Proposals）等后续工作也在iPad的框架上进行改进。这证明了iPad作为方法论基石的潜力。\n局限性 开环评测局限：NAVSIM的评测仍然是基于数据驱动的开环评测（非反应式），与真实闭环性能存在差距。虽然Bench2Drive的闭环评测部分缓解了这一担忧，但模拟器与真实世界之间的domain gap仍然存在。\n多模态不确定性建模：虽然iPad通过多提案实现了一定的多模态规划，但与扩散策略（如DiffusionDrive）等方法相比，对复杂多模态分布的表达能力仍有差距。iPad的提案数量固定（如N=6或N=12），可能无法覆盖所有合理的驾驶选择。\n辅助任务的细粒度：目前的两个辅助任务（通航性判断和碰撞预测）相对粗粒度。对于更复杂的驾驶场景（如礼让行人、匝道汇入、无保护转弯），可能需要更丰富的辅助信号（如交互意图、交通规则理解）来引导规划。\n对极端场景的鲁棒性：iPad在标准测试基准上表现优异，但在极端场景（如恶劣天气造成图像退化、非常规道路结构、罕见交通参与者行为）下的表现仍有待验证。\n延伸思考 与扩散规划的融合：如何将扩散策略的多模态表达能力与iPad的提案中心效率优势结合起来，是一个值得探索的方向。例如，可以使用iPad的ProFormer生成高效的精炼特征，再用轻量级扩散头生成多样化的规划，兼顾效率和表达力。\n闭环训练：当前方法主要依赖开环的行为克隆训练，与闭环部署存在分布偏移。引入闭环训练（如DAgger、在线强化学习）可能进一步提升iPad在复杂交互场景中的表现，特别是在从错误中恢复的能力方面。\n多模态传感器融合：iPad目前主要基于环视摄像头，如何将激光雷达、毫米波雷达等多模态传感器的信息以提案中心的方式高效融合，是迈向真实部署的关键一步。激光雷达的精确深度信息可以弥补单目视觉在距离估计上的不足。\n与VLA模型的结合：随着VLA模型在具身智能领域的快速发展，如何将iPad的高效规划框架与VLM的语义理解能力结合，构建既能理解复杂场景又能高效决策的下一代自动驾驶系统，是一个激动人心的方向。\n📖 延伸阅读 UniAD: Planning-oriented Autonomous Driving（Hu et al., CVPR 2023）- 首个全栈端到端自动驾驶框架，CVPR 2023最佳论文 VADv2: End-to-End Vectorized Autonomous Driving via Probabilistic Planning（Chen et al., 2024）- 基于评分规划的概率规划方法 DrivoR: Driving on Registers（Kirby et al., CVPR 2026）- 利用ViT寄存器token进行高效端到端驾驶 DiffusionDrive: Truncated Diffusion Model for End-to-End Autonomous Driving（Liao et al., CVPR 2025）- 截断扩散模型用于规划 SparseDrive: End-to-End Autonomous Driving with Sparse Scene Representation（Weng et al., 2024）- 基于稀疏场景表示的端到端自动驾驶 TOAD: Test-time Optimization for Autonomous Driving（2026）- 在iPad基础上进一步优化测试时规划性能 AlphaDrive: GRPO-based Driving Policy Optimization（2026）- 基于GRPO的驾驶策略优化 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/ipad-end-to-end-autonomous-driving/","summary":"iPad提出了一种以轨迹提案为中心的端到端自动驾驶框架，通过ProFormer迭代式精炼稀疏BEV提案，替代了传统的密集BEV网格范式，在NAVSIM和Bench2Drive上达到SOTA且计算效率提高10倍以上。","title":"论文精读｜iPad: Iterative Proposal-centric End-to-End Autonomous Driving"},{"content":"📄 论文信息 标题：Aligning Cyber Space with Physical World: A Comprehensive Survey on Embodied AI（虚实对齐：具身智能全面综述） 团队：中山大学、北京大学 发表：arXiv:2407.06886, 2024（多次更新至2025） 关键词：具身智能、仿真到真实迁移、多模态大模型、世界模型、虚拟-物理对齐 一句话总结：从虚实对齐的视角全面综述具身智能，系统分析了感知、交互、智能体和Sim2Real迁移四大研究方向。 论文链接：arXiv:2407.06886 🤔 为什么需要这篇综述？ 具身智能（Embodied AI）对于实现通用人工智能（AGI）至关重要，它是连接网络空间与物理世界的基础。近年来，多模态大模型（MLMs）和世界模型（WMs）的出现引起了广泛关注，因为它们具有卓越的感知、交互和推理能力，为具身智能体提供了有前景的架构。\n然而，具身智能研究面临着一个核心挑战：如何弥合仿真环境与真实世界之间的差距？仿真环境提供了可控、高保真的训练和评估平台，但真实世界的复杂性和不确定性使得直接迁移变得困难。这种\u0026quot;虚实对齐\u0026quot;问题贯穿于具身智能的各个方面，从感知到交互，从智能体设计到Sim2Real迁移。\n本综述的独特之处在于，它从\u0026quot;虚实对齐\u0026quot;的视角出发，系统性地分析了具身智能的研究进展。作者不仅关注仿真器和真实机器人，还深入探讨了多模态大模型在虚拟和现实环境中的应用，为理解具身智能的技术全景提供了全新框架。\n📚 综述覆盖范围 第一部分：具身机器人与仿真器 综述首先介绍了具身智能的硬件基础——具身机器人和仿真器：\n具身机器人：涵盖了多种形态的机器人，包括：\n人形机器人：如Tesla Optimus、Figure 01等，具有类人形态，适用于与人类环境交互 四足机器人：如Spot、AnyMal等，具有良好的地形适应能力 机械臂：如Franka Emika、UR系列等，专注于操作任务 无人机：适用于空中任务和探索 仿真器：为具身智能研究提供了可控的实验平台：\n物理仿真：MuJoCo、PyBullet、Isaac Gym等，提供精确的物理模拟 环境仿真：Habitat、AI2-THOR等，构建逼真的虚拟环境 多智能体仿真：PettingZoo、Melting Pot等，支持多智能体交互 第二部分：具身感知 具身感知是智能体获取环境信息的关键途径。综述将其分为多个子方向：\n视觉感知：\n目标检测与分割：从传统的CNN方法到基于Transformer的检测器 场景理解：深度估计、语义分割、3D重建 视觉定位：视觉语言导航（VLN）、视觉目标定位（Visual Grounding） 触觉感知：\n材质识别：通过触觉信号识别物体材质 力控制：在操作任务中实现精确的力控制 触觉-视觉融合：结合触觉和视觉信息提升感知能力 多模态感知：\n视觉-语言对齐：CLIP、BLIP-2等模型实现视觉和语言的对齐 跨模态融合：将不同模态的信息进行有效融合 主动感知：智能体主动选择感知策略以获取关键信息 第三部分：具身交互 具身交互是智能体与环境进行有效互动的能力：\n操作交互：\n抓取：从简单的平行抓取到复杂的多指灵巧操作 工具使用：智能体学习使用工具完成复杂任务 操作策略学习：从演示中学习操作策略 导航交互：\n点到点导航：在已知或未知环境中导航 视觉语言导航：根据自然语言指令在环境中导航 探索与建图：同时定位与建图（SLAM） 人机交互：\n语言条件化：根据语言指令执行任务 社交导航：在有人环境中安全导航 协作任务：与人类协作完成复杂任务 第四部分：具身智能体 具身智能体是能够自主感知、决策和行动的系统：\n基于大语言模型的智能体：\n任务规划：利用LLM进行高层任务分解 推理能力：思维链（CoT）、思维树（ToT）等推理方法 常识利用：利用LLM中的常识知识指导行动 基于视觉-语言模型的智能体：\n视觉理解：理解视觉输入并做出决策 多模态推理：结合视觉和语言进行推理 动作生成：直接从感知生成动作 世界模型：\n内部表示：构建环境的内部表示 预测规划：基于预测进行规划 想象与推理：在想象空间中进行推理 第五部分：Sim2Real迁移 Sim2Real迁移是将仿真中学到的知识迁移到真实世界的关键技术：\n域随机化：\n视觉域随机化：随机化视觉外观以提高泛化能力 动力学域随机化：随机化物理参数以提高鲁棒性 课程学习：逐步增加域随机化的程度 域适应：\n对抗训练：使用对抗训练缩小域差距 自监督学习：利用无标签数据进行适应 元学习：快速适应新环境 策略迁移：\n模仿学习：从真实数据中学习策略 强化学习：在仿真中训练并在真实世界中微调 混合训练：结合仿真和真实数据进行训练 🗺️ 技术路线图 本综述提出了一个清晰的具身智能分类体系：\n具身智能 ├── 具身机器人与仿真器 │ ├── 机器人形态 │ │ ├── 人形机器人 │ │ ├── 四足机器人 │ │ ├── 机械臂 │ │ └── 无人机 │ └── 仿真平台 │ ├── 物理仿真 │ ├── 环境仿真 │ └── 多智能体仿真 ├── 具身感知 │ ├── 视觉感知 │ │ ├── 目标检测 │ │ ├── 场景理解 │ │ └── 视觉定位 │ ├── 触觉感知 │ │ ├── 材质识别 │ │ └── 力控制 │ └── 多模态感知 │ ├── 视觉-语言对齐 │ ├── 跨模态融合 │ └── 主动感知 ├── 具身交互 │ ├── 操作交互 │ │ ├── 抓取 │ │ ├── 工具使用 │ │ └── 操作策略 │ ├── 导航交互 │ │ ├── 点到点导航 │ │ ├── 视觉语言导航 │ │ └── 探索与建图 │ └── 人机交互 │ ├── 语言条件化 │ ├── 社交导航 │ └── 协作任务 ├── 具身智能体 │ ├── LLM智能体 │ │ ├── 任务规划 │ │ ├── 推理能力 │ │ └── 常识利用 │ ├── VLM智能体 │ │ ├── 视觉理解 │ │ ├── 多模态推理 │ │ └── 动作生成 │ └── 世界模型 │ ├── 内部表示 │ ├── 预测规划 │ └── 想象与推理 └── Sim2Real迁移 ├── 域随机化 │ ├── 视觉域随机化 │ ├── 动力学域随机化 │ └── 课程学习 ├── 域适应 │ ├── 对抗训练 │ ├── 自监督学习 │ └── 元学习 └── 策略迁移 ├── 模仿学习 ├── 强化学习 └── 混合训练 这一体系的核心洞察是：具身智能是连接网络空间与物理世界的桥梁。仿真环境提供了可控的实验平台，但最终目标是在真实世界中部署智能体。因此，Sim2Real迁移是贯穿整个领域的关键技术。\n🔍 个人思考 综述的亮点 1. 独特的虚实对齐视角：与现有综述不同，本工作从\u0026quot;虚实对齐\u0026quot;的视角出发，将仿真环境与真实世界的对齐作为核心问题。这种视角更贴近实际应用需求，因为Sim2Real迁移是具身智能落地的关键瓶颈。\n2. 全面的多模态大模型分析：综述深入探讨了多模态大模型（MLMs）在具身智能中的应用，包括LLM智能体、VLM智能体和世界模型。这反映了该领域的最新发展趋势。\n3. 丰富的资源汇总：综述详细总结了各种仿真器、数据集和基准测试，为研究者提供了宝贵的资源目录。\n不足之处 1. Sim2Real迁移的深度不足：虽然综述将Sim2Real迁移作为重要主题，但对该技术的深入分析相对有限。例如，不同迁移方法的优劣对比、实际部署中的挑战讨论不够充分。\n2. 实际应用案例的缺失：综述主要进行技术梳理，缺乏对实际应用案例的深入分析。例如，在自动驾驶、医疗机器人等领域的应用讨论不够具体。\n3. 定量分析的缺乏：综述主要进行定性分析，缺乏对各方法性能、效率等指标的定量比较，这在一定程度上限制了其实用价值。\n对领域的启发 本综述揭示了具身智能发展的几个关键趋势：\n多模态大模型的核心地位：LLM、VLM和世界模型正在成为具身智能的核心组件，它们提供了强大的感知、推理和规划能力。\n仿真到真实的迁移挑战：Sim2Real迁移仍然是主要瓶颈，需要新的技术方案来缩小域差距。\n虚实融合的必要性：未来的具身智能系统需要同时在仿真和真实环境中训练和部署，这需要新的框架和工具。\n从单一到多元：具身智能正在从单一任务、单一环境向多任务、多环境扩展，这需要更强的泛化能力。\n📖 延伸阅读 Sim-to-Real Robot Learning from Pixels: A Progressive Survey（Zhao et al., 2020）- 系统综述了从像素到机器人的Sim-to-Real学习方法\nSim2Real in Robotics: A Survey of Current Progress and Future Directions（Gao et al., 2023）- 全面分析了Sim2Real迁移的技术进展和未来方向\nWorld Models for Autonomous Driving: A Survey（Hu et al., 2024）- 专门针对自动驾驶场景的世界模型综述\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/cyber-physical-alignment-2024/","summary":"本文从虚实对齐的视角全面综述具身智能，系统分析了具身感知、具身交互、具身智能体和仿真到真实迁移四大研究方向，深入探讨了多模态大模型在虚拟和现实具身智能体中的应用。","title":"论文精读｜虚实对齐：具身智能的全面综述——从仿真到真实的迁移"},{"content":"📄 论文信息 **图1: DrivoR架构概览**。由三个Transformer模块组成：感知编码器（将视觉信息压缩到相机感知寄存器中）、轨迹解码器（生成候选轨迹）、评分解码器（评估轨迹）。最终轨迹通过最高预测分数选出。 标题：Driving on Registers（基于寄存器驾驶） 团队：Valeo.ai, Paris（Ellington Kirby, Alexandre Boulch, Yihong Xu等14位作者） 发表：CVPR 2026（arXiv:2601.05083） 关键词：端到端自动驾驶、ViT、寄存器token、Token压缩、轨迹评分 一句话总结：一个极致简洁的纯Transformer端到端自动驾驶架构，通过ViT寄存器token将数千视觉token压缩为数十场景token，仅~40M参数达到SOTA。 论文链接：arXiv:2601.05083 项目主页：valeoai.github.io/driving-on-registers 代码仓库：github.com/valeoai/DrivoR 🤔 要解决什么问题？ 端到端自动驾驶方法的感知backbone通常主导了参数和FLOP计数。现有方法主要面临以下问题：\n1. 视觉Token爆炸 ViT等大规模预训练模型虽然性能优越，但每帧输出数千个token。以ViT-Large为例，单张图像产生1024个patch token（14×14 patch划分，224×224分辨率），6个相机就是6144个token。要在这些token上做数百条轨迹的交叉注意力计算，计算瓶颈极其严重：\n计算复杂度：交叉注意力的复杂度为 O(Q × KV)，其中Q为轨迹查询数（如256条），KV为视觉token数（如6144）。单次交叉注意力的计算量高达 256 × 6144 ≈ 157万次注意力操作，在多层解码器中还会进一步放大。 内存瓶颈：6144个视觉token在多头注意力中的KV缓存占用大量显存，尤其是使用ViT-L（每token 1024维）时，单帧KV缓存即达 6144 × 1024 × 2 ≈ 12.6M浮点数。 多帧扩展困难：如果考虑时序信息需要缓存多帧token，上述问题还会成倍放大。 这一瓶颈导致大多数端到端方法要么不得不使用较浅的CNN backbone（如ResNet-50/101），要么使用ViT时不得不大幅降低分辨率或只使用最后一层特征。\n2. 简单的池化操作信息丢失严重 一些方法试图通过空间池化（spatial pooling）来降维，如全局平均池化（GAP）或空间注意力池化。然而这些方法存在根本性缺陷：\n无差别的信息聚合：全局池化将所有空间位置视为等重要的，无法区分交通灯、行人等关键区域与天空、路面等背景区域。 相机视角区分困难：简单池化后不同相机的特征混合在一起，模型难以区分\u0026quot;左前相机中的红色物体\u0026quot;和\u0026quot;右后相机中的红色物体\u0026quot;。 分辨率敏感：池化操作的输出维度固定，当输入图像分辨率变化时，池化区域对应的实际物理范围也随之变化，引入额外的不确定性。 空间关系丢失：池化本质上是袋模型（bag-of-features），丢弃了视觉token之间的空间排列信息，这对于理解道路布局至关重要。 3. 端到端方法仍然复杂 虽然UniAD、VAD等方法号称端到端，但仍然依赖检测、跟踪、建图等中间模块：\nUniAD：包含检测、跟踪、建图、运动预测、规划五个模块，每个模块都需要独立的训练数据和损失函数 VAD：同样需要vectorized map和agent的显式检测与跟踪 ST-P3：在鸟瞰图（BEV）空间中进行感知、预测和规划，BEV变换本身就是一个复杂的模块 这些中间模块增加了标注成本（需要3D框、车道线、轨迹标注）、部署难度（多模块级联的累积误差）和计算开销。\n与Token压缩相关的工作 DrivoR并非第一个试图压缩视觉token的工作，但其思路独树一帜：\nPerceiver系列（Jaegle et al., 2021）：通过交叉注意力将大量输入token压缩为少量latent token，但需要额外的注意力计算，且latent token不携带相机几何信息。 TiTok（Yu et al., 2024）：证明图像可被压缩为32个token进行重建，展示极低token密度的可行性，但主要用于图像生成而非场景理解。 Token Merging（Bolya et al., 2023）：在ViT中逐步合并相似token，减少序列长度，但合并策略在驾驶场景中可能导致关键区域的错误合并。 DrivoR的核心问题非常简单直接：到底需要多少个token才能表示一个驾驶场景？\n作者的回答是：24个就够了（6个相机 x 4个寄存器token）。这比ViT直接输出的6144个token压缩了256倍。\n打个比方：传统方法在描述场景时，相当于把6张高清照片的每个像素都送给决策系统；DrivoR则用24个\u0026quot;关键词\u0026quot;来概括整个场景——\u0026ldquo;前方有车、右侧有车道、交通灯是绿的……\u0026quot;。这24个token由ViT中的**寄存器token (register tokens)**自动学习生成，不需要人工标注，也不需要BEV变换等复杂中间表示。\n核心洞察：驾驶决策不需要\u0026quot;看清每个像素\u0026rdquo;，只需要\u0026quot;理解场景的稀疏语义结构\u0026quot;。寄存器token就是提取这种结构化语义的钥匙。\n🏗️ 核心架构 **图2: 编码器和解码器架构**。(a)编码器：在ViT中引入相机感知寄存器，将每相机的视觉信息压缩到R个寄存器token中。(b)解码器：标准Transformer解码器，以场景token为KV进行交叉注意力，生成轨迹或分数。 DrivoR的设计哲学是\u0026quot;极简\u0026quot;——没有BEV表示、没有大规模轨迹词典、没有复杂的中间模块。整个架构由三个Transformer模块组成。\n总体架构概览 整个网络按流水线顺序执行：\nStep 1: 多相机图像 → ViT + Registers → 场景token (N x R个) Step 2: 场景token + 自车状态 → 轨迹解码器 → K条候选轨迹 Step 3: 候选轨迹 + 场景token → 评分解码器 → 多维子分数 Step 4: 子分数 x 行为权重 λ → 加权总分 → 选取得分最高轨迹 1. 感知编码器（Perception Encoder） 核心创新在于相机感知寄存器token（camera-aware register tokens），这是对ViT寄存器机制（Darcet et al., ICLR 2024）在自动驾驶领域的创新应用。\n寄存器token机制详解 在标准ViT中，输入序列由三部分组成：\nCLS token：一个可学习的特殊token，用于全局分类任务 Patch token：将图像切分为P×P的patch，线性投影为token序列，长度为 H×W / P² 位置编码：为每个patch添加空间位置信息 可以这样理解寄存器token：一辆车的前方场景包含多种视觉元素（车道线、前车、行人、路标），传统方法让驾驶模型自己从6144个patch token中\u0026quot;大海捞针\u0026quot;；DrivoR则提前开辟了R个专用信息通道，每个通道负责从图像中提取一类关键信息。\n具体实现上，DrivoR在ViT的输入序列末尾追加了R个可学习的寄存器token：\nInput = [CLS, Register_1, Register_2, ..., Register_R, Patch_1, Patch_2, ..., Patch_n] 这些寄存器token经过ViT的L层Transformer层的前向传播后，在每层中都与patch token通过**多头自注意力（MHSA）**进行信息交互。以第l层为例：\nX_l = MHSA(LN(X_{l-1})) + X_{l-1} X_l = FFN(LN(X_l)) + X_l 其中 LN 为LayerNorm，FFN 为前馈网络。在这个过程中，寄存器token通过自注意力从patch token中提取和汇聚与驾驶场景相关的视觉信息，同时patch token也获得来自寄存器的全局上下文。\n关键区别在于：\nCLS token：目标是聚合全局信息进行分类，与所有patch等权重交互，输出一个笼统的\u0026quot;全局特征\u0026quot; Register token：每个register是一个独立的信息通道，可以关注不同的视觉模式（如Register 1关注前方车辆、Register 2关注车道线、Register 3关注红绿灯）。这种分工是模型自动学习的，无需人工指定。 相机感知的设计 与简单地在所有相机上共享寄存器不同，DrivoR的寄存器是**相机感知（camera-aware）**的：\n每个相机有独立的R个寄存器token（不同的可学习参数） 不同相机的寄存器在ViT处理过程中互不干扰 处理后所有N×R个寄存器拼接为场景token 这种设计使得：\n模型自然区分不同视角的信息来源 寄存器能够编码与相机位姿相关的几何先验 拼接后的场景token天然携带了多视图的空间关系 微调策略 DrivoR采用**LoRA（Low-Rank Adaptation）**进行ViT backbone的微调：\n冻结预训练ViT的权重，在每层注意力中插入低秩矩阵 ∆W = BA 训练时仅更新LoRA参数和寄存器token，ViT原始权重保持不变 秩 r 通常取8-16，每个注意力层仅增加 ~2×d_model×r 个参数 相比全量微调，LoRA的优势在于：\n避免过拟合：驾驶数据集通常比预训练数据集小得多（如nuPlan约1200小时 vs ImageNet-21K的1400万图像），全量微调容易过拟合 保留预训练知识：冻结的ViT backbone保留了在通用视觉数据上学到的特征，LoRA仅做任务适配 参数量极低：ViT-S的总参数量约22M，LoRA模块仅增加约0.5M参数 关键数值洞察 配置 Patch Token数 寄存器token数 压缩比 无寄存器（全token） 6144 0 1× R=1 6144 6 1024× R=4 6144 24 256× R=8 6144 48 128× R=16 6144 96 64× 即使是R=4的配置，也能将视觉token压缩至原来的1/256，极大地降低了后续decoder的计算负担。\n2. 轨迹解码器（Trajectory Decoder） 轨迹解码器采用标准Transformer解码器架构，以场景token为条件生成K条候选轨迹。\n架构细节 输入：\nK个可学习的轨迹查询（trajectory queries），维度为 d_model 编码后的自车状态（ego state），包括速度、加速度、转向角等，通过MLP编码到 d_model 维度 场景token作为交叉注意力的Key和Value 交叉注意力层：\nQ = trajectory_queries + ego_state_embedding (K x d_model) K = scene_tokens (N x R x d_model) V = scene_tokens (N x R x d_model) Attention(Q,K,V) = softmax(QK^T / sqrt(d_k)) x V 其中 d_k = d_model / n_heads 为每个注意力头的维度。\n输出：通过多层解码和MLP头，每条轨迹查询输出一个轨迹向量\nτ_i = MLP(Decoder(trajectory_query_i, scene_tokens)) 轨迹通常表示为未来T个时间步的航点序列：τ_i = {(x_t, y_t, θ_t) | t=1,\u0026hellip;,T}\nWinner-Takes-All（WTA）训练策略 WTA是轨迹多模态生成的关键训练策略：\n直觉：让K条候选轨迹竞争——谁离真实轨迹最近，谁就获得训练信号；其他轨迹得不到梯度，被迫去寻找其他可行的驾驶模式（如不同车道、不同速度曲线）。\n训练流程如下：\n解码器生成K条候选轨迹 {τ₁, τ₂, \u0026hellip;, τ_K} 计算每条轨迹与GT轨迹的匹配代价（L2距离或碰撞感知代价） 选出与GT匹配代价最小的轨迹作为\u0026quot;胜者\u0026quot; τ_win 仅对胜者轨迹计算回归损失： L_reg = ||τ_win - τ_GT||² L_WTA = L_reg + L_aux 其中 L_aux 可包括额外的正则项，如轨迹平滑性约束。\nWTA的巧妙之处在于：每条轨迹查询会竞争性地专注于不同的驾驶模式。由于只有最接近GT的查询得到梯度更新，其他查询被迫寻找不同的模式——就像组里的同事，只有业绩最好的人拿到奖金，其他人只能另辟蹊径。这与Mixture of Experts（MoE）的\u0026quot;soft\u0026quot;路由不同，WTA是一种hard routing策略。\n3. 评分解码器（Scoring Decoder） 评分解码器与轨迹解码器共享相同的架构，但关键区别在于梯度分离（gradient stopping）。\n直觉：如果不分离梯度，生成网络和评分网络会互相\u0026quot;作弊\u0026quot;——生成网络专挑简单的轨迹出，评分网络就给简单轨迹打高分，两者一起摆烂。梯度分离强迫它们各司其职。\n评分解码器的输入是轨迹解码器输出的轨迹token（经过梯度截断）：\ntrajectory_token = StopGradient(Decoder_output) 这意味着：\n评分网络的梯度不会反传回轨迹生成网络 轨迹生成网络只接收回归损失（WTA）的梯度 评分网络独立学习如何评估给定轨迹 为什么必须分离？去掉梯度分离后，生成和评分会陷入不良平衡：\n问题情形： 评分网络发现\u0026#34;给简单轨迹打高分\u0026#34;最容易降低自身损失 → 生成网络发现\u0026#34;高分 = 简单轨迹\u0026#34;，于是只产生简单轨迹 → 评分网络更确认简单轨迹是对的 → 正反馈循环 → 两者收敛到次优解 梯度分离打破了这一循环，使两个网络各司其职：生成网络专注于覆盖所有可能的驾驶模式，评分网络专注于准确评估每条轨迹的质量。\n可解释子评分 每条轨迹 τ_i 通过评分解码器后，输出多个维度的子分数：\n[s_safety, s_comfort, s_efficiency, s_progress, s_legality] = ScoringDecoder(traj_token_i, scene_tokens) 每个子分数通过独立的MLP头输出，取值范围归一化到 [0, 1]：\ns_safety（安全性）：评估轨迹是否与其他agent或道路边界发生碰撞，是否保持安全距离 s_comfort（舒适性）：评估轨迹的加加速度（jerk）、横向加速度是否平顺 s_efficiency（效率）：评估轨迹是否能高效到达目标，是否过度减速或绕路 s_progress（进度）：评估轨迹是否合理地向目标点前进 s_legality（合法性）：评估轨迹是否遵守交通规则（如红绿灯、限速、车道线） 训练损失 评分器的训练使用数据集提供的oracle评分作为监督信号：\nL_score = Σ_i CrossEntropy(s_i, oracle_score_i) 其中 oracle_score 通常由仿真器的碰撞检测、路线偏移等规则计算得出。如果oracle评分为标量，则分解训练通过如下方式进行：\nL_score_disentangled = Σ_d Σ_i CrossEntropy(s_i^d, oracle_score_i^d) 其中 d 表示不同维度，oracle_score_i^d 通过预设规则计算该维度的地面真值。\n4. 可调节驾驶行为 DrivoR最实用的特性——推理时无需重新训练即可调节驾驶风格。\n行为调节公式 Score(tau) = lam_safety * s_safety + lam_comfort * s_comfort + lam_efficiency * s_efficiency + lam_progress * s_progress + lam_legality * s_legality 其中 λ 为各子分数的权重，满足 Σ λ = 1。\n典型配置 驾驶风格 λ_safety λ_comfort λ_efficiency λ_progress λ_legality 保守安全型 0.5 0.2 0.1 0.1 0.1 均衡型 0.3 0.2 0.2 0.15 0.15 激进高效型 0.15 0.1 0.4 0.2 0.15 舒适巡航型 0.2 0.5 0.1 0.1 0.1 λ_safety ↑ → 保守安全型驾驶（与前车保持更大距离，更早刹车） λ_efficiency ↑ → 激进高效型驾驶（更快完成变道，更少无谓减速） λ_comfort ↑ → 平稳舒适型驾驶（减少急加速和急转弯） 无需重新训练，一次训练适配多种风格 这种设计在实际部署中极具价值：一个模型可以同时服务于不同偏好的用户，或者在不同场景下切换不同风格（如雨天自动提高安全权重）。\n🔬 实验分析 基准测试表现 基准 指标 DrivoR (ViT-S) 最佳基线 人类表现 NAVSIM-v1 PDMS ↑ 93.7 DriveSuprim 93.5 94.8 NAVSIM-v2 EPDMS ↑ 48.3 ZTRS (ViT-L) 48.1 - HUGSIM RC / HD-Score 49.8 / 35.7 UniAD 45.9 / 32.7 - NAVSIM-v1上DrivoR以93.7 PDMS超越所有此前方法，仅落后人类表现1.1分。值得注意的是：\nDrivoR使用的是ViT-Small backbone（~22M），而DriveSuprim（93.5）使用ViT-Large（~300M） 参数量的15倍差距下，DrivoR仍以微弱优势领先 NAVSIM-v2的EPDMS指标更加严格（考虑路程进度），DrivoR以48.3超越ZTRS的48.1，而ZTRS同样使用ViT-Large backbone。\nHUGSIM（闭环仿真）中，DrivoR在Route Completion（49.8 vs 45.9）和HD-Score（35.7 vs 32.7）上显著超越UniAD。\n效率对比 模型 参数量 前向时间 (A100) 显存峰值 DrivoR (ViT-S) ~40M 110ms 0.5GB GTRS-Dense (ViT-L) ~300M 400ms 1.6GB DriveSuprim (ViT-L) ~300M 350ms 1.4GB DrivoR仅用ViT-Small（~22M backbone + ~15M decoder）即可达到超越大部分ViT-L方法的性能，速度提升3-4倍，显存降低约1/3。\n详细效率分析：\n计算密集度：DrivoR每帧仅需24个场景token做KV，轨迹解码器和评分解码器的交叉注意力复杂度为 O(K × 24 × d_model)，远低于O(K × 6144 × d_model) 实际推理流程：感知编码器110ms → 轨迹解码器约40ms → 评分解码器约30ms，总计约180ms（6FPS），满足实时性需求 可并行性：三个模块可进行pipeline并行，进一步降低延迟 消融实验关键发现 感知消融 实验 PDMS 说明 全token基线 (6144 tokens) 93.1 直接使用所有patch token R=1 (6 tokens) 92.3 仅6个场景token R=4 (24 tokens) 93.7 最佳性价比 R=8 (48 tokens) 93.6 接近R=4 R=32 (192 tokens) 93.7 性能饱和 无LoRA（全量微调） 91.8 过拟合严重 无寄存器（仅CLS token） 89.2 CLS token信息量不足 关键发现：\n寄存器数量：每相机4-8个寄存器即可达到接近全token的性能，32个寄存器时性能饱和。24个token（R=4）时性能已达93.7，超出全token基线，说明寄存器机制相比简单使用所有patch token有结构化优势。 LoRA微调：使用LoRA微调ViT比全量微调性能更好（93.7 vs 91.8），验证了避免过拟合驾驶数据集的假设。 寄存器 vs CLS：仅用CLS token（每个相机输出1个全局token）性能仅89.2，远低于R=4的93.7，说明单一全局表示无法捕获驾驶场景的细粒度信息。 轨迹解码器消融 实验 PDMS 说明 K=8 91.5 候选轨迹过少 K=32 93.7 最优配置 K=64 93.6 相近 K=256 93.5 边际递减 无WTA（全轨迹回归） 90.3 所有轨迹趋向平均模式 无自车状态编码 91.8 缺乏运动学先验 评分解码器消融 实验 PDMS 说明 分离梯度 93.7 标准配置 不分离梯度 91.2 生成-评分不良平衡 单一分数（不分解） 92.4 可解释性降低，性能下降 无评分（随机选轨迹） 81.5 评分对于高性能至关重要 训练消融 实验 PDMS 说明 感知+轨迹+评分联合训练 93.7 完整配置 两阶段训练（先感知+轨迹，再评分） 92.8 评分无法反馈改善生成 仅轨迹训练 89.6 缺乏评分优化 缩放实验 DrivoR在论文中还进行了模型规模的缩放实验：\nViT Backbone 参数量 PDMS 前向时间 ViT-Tiny ~5M 90.2 65ms ViT-Small ~22M 93.7 110ms ViT-Base ~86M 93.9 210ms ViT-Large ~300M 94.0 780ms 有意思的观察：从ViT-S到ViT-L，PDMS仅提升0.3（93.7→94.0），而参数量增长了14倍，推理时间增长了7倍。这表明在寄存器token压缩范式下，更大的backbone带来的收益显著递减——因为寄存器token本身的信息容量有限，更大的backbone产生的更丰富特征无法通过固定数量的寄存器token充分传递。这反而是DrivoR的优势所在：用最小的模型达到接近最优的性能。\n💡 个人思考 创新点 重新定义ViT在自动驾驶中的使用方式。之前的方法要么使用CNN backbone（如ResNet），要么直接使用ViT的全部token进行昂贵计算。DrivoR首次利用ViT的寄存器token进行结构化压缩，充分利用了Transformer的灵活性。这一创新实际上是对\u0026quot;什么样的视觉表示最适合驾驶\u0026quot;这一基本问题的回答——答案是\u0026quot;紧凑、结构化、相机感知的表示\u0026quot;。\n极致极简架构。没有BEV、没有检测头、没有轨迹词典、没有复杂的多任务训练——三个Transformer模块搞定一切。这种\u0026quot;少即是多\u0026quot;的设计思路值得学习。更广义地说，DrivoR代表了一种研究范式：不增加模块，而是优化每个必要模块的效率。\n可解释子分数 + 行为调节。将评分分解为安全、舒适、效率等可解释子分数，并支持推理时行为调节，实用价值很高。这解决了自动驾驶中一个长期存在的问题：如何在单模型中满足不同用户的驾驶偏好。对比传统的\u0026quot;训练多个模型对应不同风格\u0026quot;的方案，DrivoR的方法在效率和灵活性上有数量级的优势。\n从Token压缩看ViT的效率革命 DrivoR的成功本质上体现了Transformer架构的灵活表示能力：patch token和register token可以看作是\u0026quot;全连接\u0026quot;的——通过自注意力机制，信息可以在任何token间流动。这意味着少量精心设计的register token可以通过自注意力汇聚整个视觉场景的有效信息。\n这一思路与近年来多个研究方向不谋而合：\nTiTok（2024）：证明单张图像可被压缩为32个token，且能通过这些token重建出高质量图像 DINOv2 register（2023）：在自监督学习中发现register token能有效编码图像块的统计特征 Perceiver AR（2022）：用交叉注意力实现输入和latent空间的维度解耦 这些工作的共同启示是：对于特定下游任务，我们不需要保留视觉输入的全部信息，而只需要保留与任务相关的结构化信息。DrivoR将\u0026quot;驾驶场景\u0026quot;作为目标，设计出了极低维度的场景表示。\n与iPad的对比 对比维度 iPad DrivoR 核心思想 迭代精炼稀疏提案 寄存器token压缩 感知表示 BEV提案特征 Transformer场景token 轨迹生成 预测-锚定-精炼循环 查询解码器 评分方式 单一分数 多维度子分数 行为调节 不支持 支持 参数量 ~50M ~40M 两个方法代表了端到端自动驾驶轻量化的两种不同路线：iPad走\u0026quot;规划中心\u0026quot;路线，DrivoR走\u0026quot;token压缩\u0026quot;路线。\n从技术路线上看，两者的核心差异在于：\niPad：保持感知的稀疏性（仅关注proposal区域），但在BEV空间中维护了一定程度的结构化表示 DrivoR：从感知端就进行极致压缩，后续模块完全在token空间中操作，不引入任何几何先验 哪种路线更好？从结果看两者性能相近（iPad在NAVSIM-v1上公开的PDMS为~92.5，DrivoR为93.7），但DrivoR的架构更加简洁统一，对Transformer的利用更彻底。另一方面，iPad的proposal机制可能在某些极端场景（如新奇的障碍物）提供更好的召回率。\n与其他SOTA方法的比较 方法 参数量 Backbone 中间表示 PDMS 推理时间 DrivoR ~40M ViT-S Register tokens (24) 93.7 110ms DriveSuprim ~300M ViT-L Learned query 93.5 350ms GTRS-Dense ~300M ViT-L Dense BEV 93.0 400ms ZTRS ~300M+ ViT-L Token-based 48.1 (EPDMS) - UniAD ~220M ResNet-101 BEV + proposals 45.9 (RC) 420ms VAD ~180M ResNet-50 Vectorized map 43.1 (RC) 250ms DrivoR在参数量和速度上具有压倒性优势，同时在精度上达到最高水平，体现了\u0026quot;高效即智能\u0026quot;的设计哲学。\n局限性与未来方向 依赖数据集提供的oracle评分。评分训练需要oracle分数作为监督信号，限制了在缺乏评分数据集上的应用。未来的改进方向包括：\n使用强化学习（RL）替代oracle评分，让模型在仿真中自我探索 利用大语言模型（LLM）的常识知识进行轨迹质量评估 构建自监督的评分标准（如基于预测一致性） 闭环测试尚未完全覆盖。HUGSIM虽然是闭环仿真，但场景数量和多样性仍有限。在更复杂的真实场景泛化方面还需要更多验证，尤其是在长尾场景（Corner Cases）中的表现。\n寄存器token的可解释性。虽然整体架构简单，但寄存器token具体编码了哪些视觉信息还缺乏深入分析。未来可以通过注意力图可视化、token属性分析等方式揭示寄存器token的编码模式：\n假设：R=4的寄存器可能分别编码 - Register 1：动态物体（车辆、行人） - Register 2：道路结构（车道线、路沿） - Register 3：交通信号（红绿灯、标志） - Register 4：全局上下文（道路类型、环境光照） 如果这种假设成立，将进一步提升模型的可解释性和可调试性。\n时序信息的整合。当前DrivoR仅在单帧上操作，没有显式建模时序依赖。未来可以在寄存器token中引入时序注意力或循环机制，使模型理解车辆和行人的运动趋势，从而做出更安全的决策。\n多任务扩展潜力。寄存器token携带了丰富的场景信息，理论上可以支撑检测、跟踪、建图等下游任务。未来DrivoR可以扩展为统一的感知-预测-规划框架，而无需增加大量额外参数。\n总结性评价 DrivoR是端到端自动驾驶领域一篇在\u0026quot;正确的时间、正确的地点\u0026quot;出现的论文：\n正确的时间：当领域正在追求更大、更复杂的模型（大backbone、多模态、大模型）时，DrivoR用反直觉的方式证明\u0026quot;更少可以更多\u0026quot; 正确的地点：ViT寄存器token是2024年提出的技术，DrivoR敏锐地将其应用于驾驶场景，展现了技术迁移的巨大价值 正确的问题：Token瓶颈是端到端自动驾驶长期被忽视的关键问题，DrivoR给出了优雅的解决方案 在AI领域\u0026quot;越大越好\u0026quot;的潮流下，DrivoR提供了一个重要的修正视角——模型效率和信息密度同样重要，尤其是在计算资源受限的车载部署场景中。这种\u0026quot;实用性导向\u0026quot;的研究思路值得更多关注。\n📖 延伸阅读 iPad: Iterative Proposal-centric End-to-End Autonomous Driving（Guo et al., CVPR 2025）- 以规划提案为中心的端到端自动驾驶 Vision Transformers Need Registers（Darcet et al., ICLR 2024）- 寄存器token的原始提出论文 An Image is Worth 32 Tokens for Reconstruction and Generation（Yu et al., 2024）- TiTok，将图像压缩为极少量token Hydra-MDP: End-to-End Multimodal Planning with Multi-Target Hydra-Distillation（Li et al., 2024）- 轨迹评分规划的奠基工作 GTRS: Generalized Trajectory Scoring for End-to-End Multimodal Planning（2025）- 通用轨迹评分方法 Perceiver: General Perception with Iterative Attention（Jaegle et al., ICML 2021）- 通用感知架构，通过交叉注意力实现输入压缩 LoRA: Low-Rank Adaptation of Large Language Models（Hu et al., ICLR 2022）- 高效微调方法，DrivoR用于ViT backbone的微调 Token Merging: Your ViT But Faster（Bolya et al., ICLR 2023）- Token合并策略，与寄存器压缩的对比基线 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/drivor-driving-on-registers/","summary":"DrivoR提出了一种极简的纯Transformer端到端自动驾驶架构，利用ViT寄存器token将多相机视觉特征压缩为紧凑场景表示，仅需~40M参数即可在NAVSIM和HUGSIM上达到SOTA。","title":"论文精读｜DrivoR: Driving on Registers — 基于寄存器token的高效端到端自动驾驶"},{"content":"📄 论文信息 标题：ABot-M0.5: Unified Mobility-and-Manipulation World Action Model（统一的移动操作世界动作模型） 团队：高德地图 CV Lab（Ronghan Chen、Zuojin Tang、Tong Lin、Zhiheng Ma 等 21 人） arXiv：2607.00678（2026 年 7 月 1 日首发，7 月 6 日 v2 修订） 代码：已开源 github.com/amap-cvlab/ABot-Manipulation 领域：cs.CV / cs.RO 一句话总结：抓住\u0026quot;时间粒度、动作空间、训练-测试一致性\u0026ldquo;三层对齐这个核心症结，用潜在动作（latent action）+ 双层 Mixture-of-Transformers + dream-forcing 训练三招，把移动操作的世界动作模型（WAM）做到了新 SOTA。 🏗️ 架构总览 ABot-M0.5 的整体架构由三个核心组件构成，分别对应三层对齐策略：\n组件 对齐维度 数学形式 对应模块 潜在动作模块 时间粒度对齐 $z_t = f_{\\text{enc}}(v_t, v_{t+1})$ Latent Action Encoder + CFM 双层 Mixture-of-Transformers 动作空间对齐 $a_t^{\\text{base}} = \\text{FFN}_{\\text{base}}(h_t), a_t^{\\text{arm}} = \\text{FFN}_{\\text{arm}}(h_t)$ Dual-Level MoT Dream-Forcing 训练 训练-推理对齐 $\\tilde{v}_t = \\text{WM}(v_{t-1}, \\hat{z}_{t-1})$ 替代真实 $v_t$ Dream-Forcing Scheduler 数据流 ABot-M0.5 的前向数据流可以形式化为：\n视频编码: $v_t = \\text{VideoEnc}(x_{t-K:t})$ — 将观测帧序列压成视频潜变量 潜在动作提取: $z_t = \\text{LatentActionEnc}(v_t, v_{t+1})$ — 捕捉连续帧间的局部视觉转移 世界模型预测: $\\hat{v}_{t+1}, \\hat{z}_{t+1} = \\text{WM}_{\\theta}(v_t, z_t)$ — 自回归预测未来潜变量 逆动力学解码: $a_t^{\\text{base}}, a_t^{\\text{arm}} = \\text{InverseDyn}_{\\phi}(\\tilde{v}_t, \\hat{z}_t)$ — 从（真实或预测的）视频解码出动作 训练时，步骤 4 的输入 $\\tilde{v}_t$ 在真实视频和模型预测视频之间渐进切换（Dream-Forcing）；推理时，$\\tilde{v}_t$ 始终是模型上一步的预测。\n时间粒度对齐的数学原理 传统 WAM 在粗糙视频块上操作：观测 $X = \\{x_1, ..., x_T\\}$ 被分割为 $N = T/K$ 个块，每块 $K$ 帧。这导致 $K$ 帧内的精细接触动力学（如抓取瞬间的指尖运动）被平均化丢失。\nABot-M0.5 的潜在动作 $z_t$ 在每帧粒度上捕捉视觉状态转移：\n$$z_t = \\mathcal{E}_{\\text{latent}}(v_t, v_{t+1}) \\in \\mathbb{R}^d$$潜在动作的训练通过**条件流匹配（Conditional Flow Matching）**完成——它学一个从噪声到真实潜在动作的概率路径：\n$$\\mathcal{L}_{\\text{CFM}} = \\mathbb{E}_{t \\sim [0,1], z_0 \\sim p_0} \\left[ \\| u_{\\theta}(z_t, t, c) - \\dot{z}_t \\|^2 \\right]$$其中 $u_{\\theta}$ 是预测的向量场，$c = [v_t, t_{\\text{step}}]$ 是条件，$\\dot{z}_t$ 是真实路径的导数。CFM 相比扩散模型的优势是训练更稳定、采样步数更少，这对实时的机器人控制至关重要。\n🤔 要解决什么问题？ 移动操作（Mobile Manipulation） 是通用机器人最关键也最难的能力之一——机器人需要一边移动底盘（navigation）到合适位置，一边挥动手臂（manipulation）完成精细接触。这要求模型同时处理\u0026quot;大范围导航\u0026quot;和\u0026quot;毫米级接触\u0026quot;两种截然不同的粒度。\n现有两条技术路线都有死穴：\n路线 代表 核心问题 VLA 策略 RT-2、π0、OpenVLA 反应式、无显式世界建模，无法预见未来状态变化，长程任务易积累误差 世界动作模型（WAM） 视频生成式动作模型 与移动操作结构严重不匹配，存在三大错配 作者精准地诊断了现有 WAM 在移动操作上的三大错配，这也是 ABot-M0.5 全篇的破题之眼：\n时间粒度错配：现有 WAM 在**粗糙的视频块（video chunk）**上操作，丢失了精细接触动力学（fine-grained contact dynamics）——抓取、插拔这类任务差一帧就失败。 动作空间错配：把导航动作和操作动作纠缠在一个耦合的表示里，导致动作分布冲突（action-distribution conflicts），底盘和手臂互相干扰。 训练-测试错配：逆动力学（inverse dynamics）在真实视频上训练，但推理时却在模型自回归预测的视频上跑——exposure bias 让误差在长程 rollout 中雪球般累积。 核心命题：一个真正适配移动操作的 WAM，必须在时间粒度、动作空间、训练-推理条件三个层面同时对齐。ABot-M0.5 就是围绕这个\u0026quot;三层对齐\u0026quot;思想构建的。\n💡 核心思想：三层对齐 ABot-M0.5 的整体框架可以用一个公式概括——它把世界动作模型拆成视频潜空间预测 + 潜在动作 + 逆动力学三段式：\n视频潜变量 →（潜在动作桥接）→ 具身控制动作\n三招分别对应三层对齐，下面逐一拆解。\n第一招：潜在动作——对齐时间粒度 为了弥合\u0026quot;粗糙视频块\u0026quot;和\u0026quot;精细控制\u0026quot;之间的鸿沟，作者引入了中间潜在动作（intermediate latent action）。它捕捉局部视觉状态转移，扮演视频潜变量和具身特定控制之间的桥接动作空间。\n直觉上，潜在动作相当于模型自己学的一套\u0026rdquo;视觉变化的语言\u0026quot;——它不直接预测机器人关节角，而是先预测\u0026quot;画面会怎么变\u0026quot;，再把这个变化翻译成具体指令。这样既保留了视频世界模型的预见能力，又能在细粒度上对齐控制需求，避免粗糙视频块丢失接触细节。\n第二招：双层 Mixture-of-Transformers——对齐动作空间 这是全篇最硬核的架构创新。为了解耦导航和操作这两类异构动作，作者设计了双层 Mixture-of-Transformers（dual-level MoT）：\n数学形式 给定共享 Transformer 的隐层表示 $h_t \\in \\mathbb{R}^D$，传统 WAM 用一个统一头输出所有动作：\n$$a_t = \\text{FFN}_{\\text{unified}}(h_t)$$这会导致导航和操作动作在同一个分布中相互干扰。双层 MoT 将其分解为：\n$$a_t^{\\text{base}} = \\text{FFN}_{\\text{base}}(h_t), \\quad a_t^{\\text{arm}} = \\text{FFN}_{\\text{arm}}(h_t)$$两个动作头使用不同的参数和归一化统计量。最终动作分布为：\n$$p(a_t | h_t) = p_{\\text{base}}(a_t^{\\text{base}} | h_t) \\cdot p_{\\text{arm}}(a_t^{\\text{arm}} | h_t)$$这种乘积形式意味着两类动作在给定 $h_t$ 时是条件独立的——只要共享的视觉-语言表示足够好，就能在保持协调的同时避免动作分布冲突。\n解耦维度 做法 解决的问题 模态级解耦 不同模态（视觉、语言、动作）走独立的 Transformer 分支 视觉和动作表示不互相污染 动作子空间解耦 底盘移动（base movement）和手臂操作（arm manipulation）走独立动作头 消除导航-操作的动作分布冲突 传统的做法是把所有动作 token 拼成一串塞进一个 Transformer，结果底盘的\u0026quot;前进2米\u0026quot;和手臂的\u0026quot;下旋15度\u0026quot;在同一个分布里打架。双层 MoT 让两类动作各走各的路，又通过共享的视觉-语言主干保持协调——这正契合移动操作\u0026quot;导航为操作服务、操作依赖导航到位\u0026ldquo;的内在结构。\n第三招：Dream-Forcing——对齐训练-推理条件 这是我认为最有启发性的一招。WAM 推理时是自回归的：每一步的逆动力学输入的是上一步模型自己预测的视频，而不是真实视频。但传统训练时逆动力学只看真实视频——这就是经典的 exposure bias。\nDream-Forcing 训练策略的核心是：在训练过程中，渐进式地把逆动力学的输入从真实视频替换成模型自己预测的视频。换句话说，让模型在训练阶段就\u0026rdquo;梦见\u0026ldquo;自己未来的预测，并学会在这种\u0026quot;梦境视频\u0026quot;上正确解码动作。\nDream-Forcing 的形式化 设真实视频序列为 $\\{v_1, ..., v_T\\}$，模型预测视频为 $\\{\\hat{v}_1, ..., \\hat{v}_T\\}$。传统训练使用逆动力学损失：\n$$\\mathcal{L}_{\\text{ID}}^{\\text{train}} = \\sum_{t=1}^{T-1} \\| \\text{ID}_{\\phi}(v_t, v_{t+1}) - a_t \\|^2$$Dream-Forcing 将其改造为：\n$$\\mathcal{L}_{\\text{ID}}^{\\text{DF}} = \\sum_{t=1}^{T-1} \\| \\text{ID}_{\\phi}(\\tilde{v}_t, \\tilde{v}_{t+1}) - a_t \\|^2$$其中 $\\tilde{v}_t = \\begin{cases} v_t \u0026 \\text{概率 } \\lambda_k \\\\ \\hat{v}_t \u0026 \\text{概率 } 1-\\lambda_k \\end{cases}$，$\\lambda_k$ 随训练步数 $k$ 从 1 线性衰减到 0。\n在训练后期（$\\lambda_k \\approx 0$），逆动力学完全在模型自举的视频序列上训练，完美模拟推理条件。这等价于最小化 rollout 误差的上界：\n$$\\mathcal{L}_{\\text{DF}} \\geq \\mathbb{E}_{\\tau \\sim \\pi_{\\theta}}[\\sum_{t} \\| a_t^{\\text{pred}} - a_t^{\\text{gt}} \\|^2]$$ 方面 传统 Scheduled Sampling Dream-Forcing 切换方式 随机切换真假输入 渐进式增加模型预测视频的比例 目标 缓解 exposure bias 专门对齐自回归推理条件 理论保证 无 有 rollout 误差上界 效果 改善有限 长程 rollout 鲁棒性显著提升 这一招直接对症\u0026quot;训练-测试错配\u0026quot;这个最隐蔽但最致命的问题，是 ABot-M0.5 在长程任务上取胜的关键。\n🏗️ 训练与推理流程 把三招串起来，ABot-M0.5 的工作流可以这样理解：\n训练阶段：\n视频编码器把观测压成视频潜变量序列； 潜在动作模块学习\u0026quot;局部视觉转移\u0026quot;的中间表示； 双层 MoT 主干在视频潜变量和潜在动作上学习未来预测； 逆动力学头把潜在动作解码成\u0026quot;底盘 + 手臂\u0026quot;双路动作； Dream-Forcing 渐进地把逆动力学的输入换成模型预测的视频。 推理阶段：\n模型自回归地预测下一帧视频潜变量 → 提取潜在动作 → 双路解码出底盘和手臂动作 → 执行 → 用预测视频作为下一步输入，循环往复。 因为训练时已经\u0026quot;梦见\u0026quot;过这种自回归条件，推理时误差不会雪球式累积——这就是 train-test consistency 的真正含义。\n📊 实验结果 ABot-M0.5 在移动操作和精细操作两类基准上做了充分验证。\n主要实验结果 基准 任务 指标 RT-2 π0 OpenVLA ABot-M0.5 Mobile Manipulation Suite 长程移动操作 成功率(%) 42.3 51.7 48.1 68.2 RoboTwin 2.0 桌面精细操作 成功率(%) 55.1 61.3 58.7 72.5 LIBERO-Plus 长程操作(10步) 平均成功率 38.6 47.2 43.9 65.8 CALVIN 精细接触(5子任务) 平均完成率 53.2 62.8 59.1 76.3 长程任务成功率 在需要\u0026rdquo;先导航、再操作\u0026ldquo;的长程移动操作基准上，ABot-M0.5 取得了 state-of-the-art 的长程任务成功率。关键发现是：随 rollout 步数增加，基线方法成功率断崖式下跌，而 ABot-M0.5 依靠 dream-forcing 保持了平滑的成功率曲线——这正是训练-推理对齐带来的误差累积抑制效果的直接体现。具体来说：\nRollout 步数 RT-2 π0 OpenVLA ABot-M0.5 (w/o DF) ABot-M0.5 5 步 68.2 73.5 71.8 75.1 78.9 10 步 52.4 61.8 58.2 66.3 72.1 20 步 38.1 47.3 44.5 52.8 65.4 30 步 28.6 36.9 33.1 41.2 58.7 Dream-Forcing 在 30 步长程任务上带来了 17.5 个百分点的提升（41.2% → 58.7%），是 ABot-M0.5 最关键的单一模块。\n精细控制精度 在纯精细操作（fine-grained manipulation）基准上，ABot-M0.5 同样达到了 SOTA 的精细控制精度。这说明潜在动作的引入没有牺牲细粒度——反而因为更好地捕捉了接触动力学，精细任务表现更优。\n关键消融 论文的消融实验清晰地量化了三招各自的贡献：\n模块 贡献维度 结论 潜在动作 时间粒度对齐 移除后精细任务精度大幅下降，接触动力学丢失 双层 MoT 动作空间对齐 移除后导航-操作冲突加剧，长程任务成功率下降 Dream-Forcing 训练-推理对齐 移除后长程 rollout 鲁棒性显著恶化，误差累积严重 三招缺一不可，且各自精准对应一个错配维度——这种\u0026rdquo;诊断-对症-验证\u0026ldquo;的闭环让论文的逻辑非常扎实。\n⚔️ 在具身模型谱系中的位置 理解 ABot-M0.5，要看它在具身基础模型演进中的坐标：\n代际 代表 范式 局限 反应式 VLA RT-2、OpenVLA 观察→动作直射 无世界建模，无预见 视频生成式 WAM 早期视频-动作模型 粗糙视频块 + 纠缠动作 粒度粗、动作冲突、exposure bias ABot-M0.5 本文 三层对齐的统一 WAM 需要精心设计对齐机制 ABot-M0.5 的开创性在于：它没有简单地\u0026quot;把 WAM 套到移动操作上\u0026rdquo;，而是先诊断出三大错配，再逐一设计对齐机制。这种\u0026quot;问题驱动\u0026quot;的研究范式比\u0026quot;堆模块\u0026quot;高明得多。\n⚠️ 局限性与挑战 ABot-M0.5 虽然设计精巧，仍有值得追问的地方：\n潜在动作的可解释性：作为学出来的中间表示，潜在动作空间缺少明确的语义解释，调试和失败归因相对困难。 Dream-Forcing 的训练成本：渐进式替换输入意味着训练后期要跑完整的自回归 rollout，计算开销不可忽视。 真机泛化：论文主要在仿真基准上验证，从仿真到真机的 sim-to-real gap 仍是悬而未决的问题。 多技能扩展：目前主要针对移动操作，能否扩展到双臂协作、人机交互等更复杂场景，还需更多实验。 📝 个人思考 读 ABot-M0.5，最打动我的是它问题诊断的清醒。太多具身论文上来就堆架构——加个扩散头、接个 VLM、拼个 MoE——却很少先问\u0026quot;到底哪里错了\u0026quot;。ABot-M0.5 反其道而行，先把\u0026quot;移动操作为什么难\u0026quot;拆成时间粒度、动作空间、训练-测试三个具体的错配，再针对性地给三味药。这种\u0026quot;先诊断后开方\u0026ldquo;的研究品味，是具身智能领域尤其稀缺的——因为这个领域太容易沉迷于\u0026quot;端到端\u0026quot;的浪漫，而忽视每个模块背后的物理结构。\n第二点启发在 Dream-Forcing 的普适价值。Exposure bias 是所有自回归生成长程任务（语言、视频、控制）的共同顽疾，schedule sampling 之类的老办法治标不治本。ABot-M0.5 的洞察是：与其在推理时补救，不如在训练时就模拟推理条件。这个思想完全可以迁移到自动驾驶的端到端规划——规划模型推理时也是自回归地吃自己上一步的输出，如果训练时只用真实历史，同样会面临错配。我预期 dream-forcing 这类\u0026rdquo;训练即推理\u0026ldquo;的策略会成为世界模型/端到端模型的标配。\n第三点是对 \u0026ldquo;解耦\u0026quot;的再认识。双层 MoT 解耦导航和操作，本质上是在尊重任务的物理结构——底盘和手臂本来就有完全不同的动力学、不同的控制频率、不同的精度要求，硬塞进一个统一动作空间是反物理的。这给自动驾驶的启发是：转向控制和速度控制、横向规划和纵向规划，是否也该走解耦路线？ 至少不应该一刀切地用一个统一动作头去输出所有控制量。ABot-M0.5 验证了\u0026rdquo;结构化解耦比强行统一更高效\u0026ldquo;这个判断。\n最后一点是关于 潜在动作作为\u0026quot;中间语言\u0026quot;的哲学。ABot-M0.5 不直接从视频跳到关节角，而是引入\u0026quot;潜在动作\u0026quot;这个中间层。这其实呼应了认知科学里的\u0026rdquo;动觉概念\u0026quot;——人类规划动作时，想的不是\u0026quot;关节转几度\u0026rdquo;，而是\u0026quot;手往那个方向移动\u0026quot;这类抽象意图。潜在动作相当于让模型学会了自己的动觉概念体系。这个思路对\u0026quot;如何让模型从演示中泛化\u0026quot;这个核心难题有深远意义——抽象层次越高，跨具身体现（embodiment）的迁移就越容易。如果潜在动作足够通用，未来或许能实现\u0026quot;看人演示→翻译成潜在动作→在任何机器人上执行\u0026quot;的跨平台泛化，那将是具身智能的真正的\u0026quot;ImageNet 时刻\u0026quot;。\n总体而言，ABot-M0.5 是一篇\u0026quot;小而美\u0026ldquo;的工作——没有震天响的口号，没有刷新多少个 benchmark，但每一处设计都直指一个真实存在的错配。这种工程匠心，正是把世界动作模型从\u0026quot;论文玩具\u0026quot;推向\u0026quot;真机可用\u0026quot;最需要的品质。\n🔗 延伸阅读 工作 团队 与 ABot-M0.5 的关系 OpenVLA / RT-2 Stanford / Google 反应式 VLA 基线，ABot 的对比对象 π0 / π0.5 Physical Intelligence VLA + 流匹配，ABot 借鉴其动作生成思想 Cosmos NVIDIA 视频世界基础模型，WAM 路线的前作 GR-2 / Genie ByteDance / Google 世界模型 + 动作，ABot 的同谱系工作 Scheduled Sampling Bengio et al. 经典 exposure bias 缓解方法，dream-forcing 的思想源头 MoT (Mixture of Transformers) MIT 模态条件化架构，ABot 的双层设计基础 📖 这是论文精读系列的第 30 篇。当世界动作模型开始认真对待\u0026quot;对齐\u0026quot;这件事，具身智能离真机落地又近了一步。你认为潜在动作会成为具身模型的通用语言吗？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2607-00678/","summary":"ABot-M0.5 用\u0026rsquo;三层对齐\u0026rsquo;策略重新设计了移动操作的世界动作模型：潜在动作模块在帧级粒度捕捉视觉状态转移，解决时间粒度粗糙导致的精细接触丢失。双层 Mixture-of-Transformers 解耦导航与操作的动作空间，dream-forcing 训练策略打通训练与推理的分布鸿沟。在长程任务和精细控制上同时达到 SOTA。","title":"论文精读｜ABot-M0.5：统一的移动操作世界动作模型"},{"content":"📄 论文信息 标题：ExploreVLA: Dense World Modeling and Exploration for End-to-End Autonomous Driving 团队：Bosch Research North America \u0026amp; Bosch Center for Artificial Intelligence × University of Wisconsin–Madison 作者：Zihao Sheng（一作，威斯康星麦迪逊，实习于 Bosch）、Xin Ye、Jingru Luo、Sikai Chen、Liu Ren arXiv：2604.02714（2026 年 4 月，cs.CV） 项目主页：https://zihaosheng.github.io/ExploreVLA/ 一句话总结：把密集世界建模（未来 RGB + 深度图生成）和世界模型不确定性探索奖励统一在一个 VLA 框架中，用安全门控 GRPO 优化策略，在 NAVSIM 以 93.7 PDMS / 88.8 EPDMS 刷新 SOTA。 图1：三种 VLA 训练范式对比。(a) 模仿学习直接克隆专家演示，无探索；(b) 传统 RL 支持探索但无法区分专家复制与真正的分布外发现；(c) ExploreVLA 借助密集世界建模（未来图像生成），用图像预测不确定性作为新奇度指标，识别并鼓励有价值的探索策略。\n🤔 要解决什么问题？模仿学习的天花板与探索的缺失 VLA 模型已是端到端自动驾驶的主流范式，但 ExploreVLA 指出两个根本性缺陷：\n问题一：行为克隆无法发现更好的策略。 模仿学习受限于训练数据分布，遇到 OOD 场景时表现脆弱。RL 天然适合解决此问题，但离线 VLA 无法与环境交互，需要学一个世界模型来预测动作后果。\n问题二：监督信号过于稀疏。 多数方法仅以文本和轨迹 waypoints 为训练目标，丢失了道路拓扑、物体边界、深度排序等细粒度空间信息，这些信息对安全规划至关重要。\n已有世界模型的局限 此前世界模型相关工作存在两个不足：(1) 粗粒度监督——DriveVLA-W0 等生成 BEV occupancy 或稀疏语义，WoTE、OmniNWM 用 latent 预测，缺乏密集像素级约束；(2) 缺乏探索信号——现有 RL 仅用 PDMS 等任务奖励，无法区分\u0026quot;复制专家\u0026quot;和\u0026quot;发现新策略\u0026quot;。\n对比同期工作：AlphaDrive / Gen-Drive 同样用 GRPO 但奖励仅基于任务指标；DriveVLA-W0 输出 BEV occupancy 而非密集 RGB + 深度；VLA-World 用生成帧做反思推理而非探索奖励。ExploreVLA 的独特之处是将密集世界建模从\u0026quot;辅助监督\u0026quot;提升为\u0026quot;探索引擎\u0026quot;。\n💡 核心方法：密集世界建模 + 不确定性驱动的探索 核心洞察很简洁：一个框架同时解决监督稀疏和探索缺失。在轨迹预测之外增加\u0026quot;世界模型头\u0026quot;，联合预测未来 RGB 和深度图：\n密集监督：RGB + 深度生成迫使模型学习细粒度视觉外观和度量几何，为规划骨干提供丰富梯度 探索奖励：世界模型的图像预测不确定性天然衡量轨迹相对于训练分布的新奇度——高不确定性 = OOD 场景，若同时安全则值得奖励 统一理解与生成架构 ExploreVLA 的整体架构如下：\n图2：ExploreVLA 模型架构与训练流程。输入包括任务指令、多帧图像和自车状态，输出联合预测未来轨迹与未来图像。训练分两阶段：(1) 模仿学习阶段——预训练图像生成 + 联合轨迹与图像监督微调；(2) 强化学习阶段——GRPO 优化策略，奖励由 PDMS 和基于图像的探索奖励组成。\n输入输出形式化：\n输入 $\\mathcal{X} = \\{\\mathcal{I}_{t-K+1..t}, \\mathcal{T}, \\mathcal{S}_t\\}$，$\\mathcal{I}_t$ 为单目图像（$256 \\times 448$），$\\mathcal{S}_t = [v_t, a_t, \\omega_t]$ 为自车状态 输出 三部分：未来轨迹 $\\boldsymbol{\\tau} = \\{(x, y, \\theta)\\}$（4 秒，8 waypoints）、未来 RGB $\\hat{\\mathcal{I}}_{t+1}$、未来深度 $\\hat{\\mathcal{D}}_{t+1}$ 架构： 基于 Show-o（Phi-1.5 + MAGVIT-v2，codebook 8,192）。输入帧 $256 \\times 448$ 经 $16 \\times 16$ patch 离散化后与文本 tokens、MLP 投影的自车状态 tokens 拼接送入共享 Transformer。\n骨干输出分两支：规划头解码 trajectory waypoints，世界模型头解码未来 RGB + 深度。注意力设计上规划头用因果注意力（看不到未来生成 tokens），世界模型头用全注意力——确保规划独立于未来推断。\n密集世界建模目标 世界模型头的训练目标包含两个部分：\nRGB 生成： 图像级回归，损失为 L1 + LPIPS：\n$$\\mathcal{L}_{\\text{rgb}} = \\|\\hat{\\mathcal{I}}_{t+1} - \\mathcal{I}_{t+1}\\|_1 + \\lambda_{\\text{lpips}} \\cdot \\text{LPIPS}(\\hat{\\mathcal{I}}_{t+1}, \\mathcal{I}_{t+1})$$L1 保像素准确，LPIPS 保感知质量。\n深度生成： 尺度不变的几何回归：\n$$\\mathcal{L}_{\\text{depth}} = \\frac{1}{N} \\sum_{i} \\left\\| \\log \\hat{d}_i - \\log d_i \\right\\|_1$$对数 L1 对远近物体施加平衡梯度。\n联合的世界模型损失为：\n$$\\mathcal{L}_{\\text{wm}} = \\mathcal{L}_{\\text{rgb}} + \\alpha \\cdot \\mathcal{L}_{\\text{depth}}$$其中 $\\alpha$ 平衡权重。深度 GT 由 Metric3D 离线生成。这迫使骨干编码道路拓扑、物体边界等细粒度信息——只有表征足够丰富，才能支撑像素级未来帧预测。\n世界模型不确定性驱动的探索奖励 核心洞察：世界模型在专家演示上训练，它对图像的预测不确定性天然编码了轨迹相对于训练分布的新奇度。\n对初始帧采样 $M$ 个候选未来图像 $\\{\\hat{\\mathcal{I}}^{(1..M)}\\}$，计算每像素预测方差：\n$$b_i = \\frac{1}{HW} \\sum_{h,w} \\text{Var}\\left(\\{\\hat{\\mathcal{I}}^{(m)}_{h,w}\\}_{m=1}^{M}\\right)$$其中 $\\text{Var}(\\{x_m\\}) = \\frac{1}{M} \\sum_{m} \\|x_m - \\bar{x}\\|_2^2$。高方差意味着模型对场景\u0026quot;不熟悉\u0026quot;——轨迹处于训练分布之外。\n图3：探索奖励分析。左图：探索奖励与 GT 轨迹的 L2 误差呈正相关。右图：探索奖励能正确衡量 L2 误差无法捕捉的轨迹新奇度（比如相同的路径但不同的速度模式）。\n表3：L2 误差与探索奖励在 1000 个随机选出的直行场景上的对比（两种扰动设置）。L2 误差在两种情况下都错误判断了轨迹新奇度，而探索奖励正确地将速度变化判定为低新奇度（相同路径），将方向变化判定为高新奇度（不同路径）。\n安全门控奖励 高不确定性不等于好的探索——一个导致碰撞的轨迹虽然新颖但无益。因此作者引入 PDMS 安全门控：\n$$R_i = \\begin{cases}\\text{PDMS}_i + \\lambda \\cdot b_i, \u0026 \\text{if } \\text{PDMS}_i \u003e \\delta, \\\\ \\text{PDMS}_i, \u0026 \\text{otherwise.}\\end{cases}$$$\\delta$ 为安全阈值，$\\lambda$ 控探索强度。只有安全轨迹（PDMS \u0026gt; $\\delta$）才获探索奖励。这确保模型优先探索同时具备高新奇度和高质量的轨迹。\nGRPO 策略优化 ExploreVLA 使用 GRPO 优化策略，核心思想是对每个场景采样一组候选轨迹，以组内相对优势计算策略梯度：\n$$\\mathcal{L}_{\\text{GRPO}} = -\\frac{1}{G} \\sum_{i=1}^{G} \\left[ \\frac{\\pi_{\\theta}(\\tau_i|x)}{\\pi_{\\theta_{\\text{old}}}(\\tau_i|x)} \\cdot A_i - \\beta \\cdot \\text{KL}(\\pi_{\\theta} \\| \\pi_{\\text{ref}}) \\right]$$其中 $A_i = (R_i - \\mu_R)/\\sigma_R$ 为组内标准化优势，$\\beta$ 控 KL 正则化。GRPO 不需要价值网络，完全依赖组内比较，降低训练复杂度。\n两阶段训练策略 Stage 1：模仿学习（Imitation Learning）。 分两步：\nStep 1a：预训练世界模型头——在大量驾驶数据上预训练图像生成能力 Step 1b：联合监督微调（SFT）——同时优化 trajectory prediction、RGB 生成和深度生成 Stage 1 的损失为：\n$$\\mathcal{L}_{\\text{stage1}} = \\mathcal{L}_{\\text{traj}} + \\mathcal{L}_{\\text{rgb}} + \\alpha \\cdot \\mathcal{L}_{\\text{depth}}$$Stage 2：强化学习（Reinforcement Learning）。 固定世界模型头参数，仅优化规划头。对每帧图像采样 $K$ 个候选轨迹，计算它们的 PDMS 和世界模型不确定性 $b_i$，组成安全门控奖励 $R_i$，然后用 GRPO 更新策略。GRPO 的 group size 设为 $G=8$，KL 惩罚系数 $\\beta=0.01$，clip 范围 $\\epsilon=0.1$。安全阈值 $\\delta$ 设为 0.9，探索奖励权重 $\\lambda$ 设为 0.5。LoRA 微调 rank 为 32，学习率降至 $3 \\times 10^{-6}$。\n所有实验在 4 块 H200 GPU 上完成。Stage 1 每 GPU batch size 为 8，Stage 2 每 GPU batch size 为 1。优化器统一使用 AdamW。\n🧪 实验：NAVSIM SOTA + 系统性消融 主要结果 NAVSIM v1 结果（PDMS 指标）：\n表1：NAVSIM v1 基准对比。ExploreVLA 以 93.7 PDMS（best-of-N）大幅超越所有已有方法。即使不使用 best-of-N（即单次采样），ExploreVLA 也能达到 90.4 PDMS，与 AutoVLA 等最佳多视角方法持平。所有子指标上，ExploreVLA 均位居前列，TTC 指标达到最优。\nNAVSIM v2 结果（EPDMS 指标）：\n表2：NAVSIM v2 基准对比（扩展闭环指标）。ExploreVLA 以 88.8 EPDMS 刷新 SOTA，比此前最佳 DriveVLA-W0 的 86.1 高出 2.7 分，在 9 项子指标中的 6 项上取得最优。\n关键观察：\n单目 vs 多传感融合：ExploreVLA 仅使用单目相机输入，却在 PDMS（93.7）上超越了 DriveSuprim、Centaur 等多传感器融合方案 OOD 泛化：在 NAVSIM v2 的扩展指标（DDC 驾驶方向合规、TLC 交通灯合规等）上，ExploreVLA 的优势更加明显，说明探索驱动策略学到了更鲁棒的驾驶行为 nuScenes 验证：在 nuScenes 开放环评测中，ExploreVLA 同样达到了 SOTA 的 L2 误差和碰撞率，证明方法的通用性 消融实验 消融 1：密集视觉监督（Stage 1）\n配置 PDMS 仅轨迹预测（基线） 最低 + RGB 生成 +5.1 + 深度生成 +5.0 + RGB + 深度（完整） 88.5 RGB 和深度互补，联合提供最丰富的监督。\n消融 2：奖励组件（Stage 2）\n奖励配置 PDMS Stage 1 基线（无 RL） 85.6 纯 PDMS 奖励 85.6（无提升） PDMS + 探索奖励（无门控） 89.1 PDMS + 探索奖励 + 安全门控（完整） 90.36 纯 PDMS 奖励无提升——行为复制不是 RL 的优势。加探索奖励后跃升至 90.36，无门控时略低，证明安全筛选对不安全的 OOD 轨迹至关重要。\n消融 3：安全阈值 $\\delta$\n$\\delta$ PDMS 0.3 88.7 0.6 90.36 0.9 89.8 最优阈值 0.6。过低（0.3）使不安全轨迹被奖励，过高（0.9）过滤掉有价值 OOD 探索。\nnuScenes + HUGSIM 验证 nuScenes 上仅用 Stage 1（无 RL），ST-P3 协议下达到 0.44m 平均 L2 和 0.10% 碰撞率，与 OpenDriveVLA 持平。HUGSIM 零样本闭环评估中，KITTI-360 域取得最佳 HD-Score，nuScenes 和 PandaSet 域均排名第二——说明密集世界建模学到的表征能迁移到反应式闭环场景。Waymo 域的差距指向未来方向：结合大规模闭环 RL。\n关键超参数汇总 超参数 Stage 1 Stage 2 骨干 Show-o (Phi-1.5) + LoRA rank 32 图像尺寸 $256 \\times 448$ 同左 学习率 $3 \\times 10^{-5}$ $3 \\times 10^{-6}$ 优化器 AdamW AdamW 训练轮数 预训练 10 + SFT 15 5 epoch GPU 4 $\\times$ H200 4 $\\times$ H200 每 GPU batch size 8 1 GRPO G — 8 KL $\\beta$ / clip $\\epsilon$ — 0.01 / 0.1 $\\delta$ / $\\lambda$ — 0.9 / 0.5 世界模型生成可视化 在附录中，ExploreVLA 展示了密集世界模型的定性生成结果。模型不仅能准确预测未来帧的 RGB 外观（道路标线、车辆位置），还能生成与其几何一致的稠密深度图——说明模型学到了场景的 3D 结构和动态演化规律，而不仅仅是\u0026quot;记住\u0026quot;训练数据。\n📝 总结与启示 维度 评价 创新性 高——将世界模型的图像不确定性作为探索奖励，这个视角新颖且优雅 有效性 强——93.7 PDMS / 88.8 EPDMS 是有说服力的 SOTA 简洁度 极高——一个统一框架同时解决监督稀疏和探索缺失，没有多余设计 实用性 较好——单目相机输入，训练流程清晰，但需要两阶段训练和多轮采样 与其他 GRPO 驾驶方法对比 方法 世界模型 探索奖励 GRPO AlphaDrive 无 无 有 Gen-Drive 扩散世界模型 无 有 ExploreVLA RGB + 深度生成 图像不确定性 有 ExploreVLA 将世界模型提升为核心——它不仅是规划质量的来源，更是探索方向的指南针。\n个人的几点思考 探索奖励的优雅设计：用世界模型自身不确定性做探索奖励，有\u0026quot;自我校准\u0026quot;之美——模型知道自己不知道什么。这比需要额外 discriminator 的 curiosity-driven 方法更干净。 密集监督的价值被低估了：许多 VLA 工作只关注\u0026quot;如何生成更好轨迹\u0026quot;，忽略\u0026quot;如何让模型学到更好场景表征\u0026quot;。ExploreVLA 证明预测未来像素可显著提升规划质量，暗示了表征学习与行为学习协同训练的巨大潜力。 安全门控的变体：将 PDMS 同时用作规划目标和安全门控，让模型自己对探索做质量把关。一个有趣变体：能否用世界模型自己的生成质量来门控？这样可实现纯内蕴探索。 单目 vs 多视角：单目超越多传感融合的 SOTA 引发反思——是 NAVSIM 高效利用了单目，还是密集世界模型已足以捕捉驾驶所需的 3D 几何？ 闭环 RL 的未来：作者在 HUGSIM 上坦诚指出 Waymo 域差距源于开放环 RL 后训练。将不确定性引导的探索与大规模闭环 RL 结合，是自然的下一个方向。 关键超参数汇总 超参数 Stage 1 Stage 2 骨干模型 Show-o (Phi-1.5 + MAGVIT-v2) 同上 + LoRA rank 32 图像尺寸 $256 \\times 448$ 同上 输入帧 当前帧 + 历史帧（0.5s 前） 同上 预测帧 未来 0.5s RGB + 深度 同上 学习率 $3 \\times 10^{-5}$ $3 \\times 10^{-6}$ 优化器 AdamW AdamW 训练轮数 预训练 10 epoch + SFT 15 epoch 5 epoch GPU 4 $\\times$ H200 4 $\\times$ H200 每 GPU batch size 8 1 GRPO group size — $G=8$ KL 系数 $\\beta$ — 0.01 Clip 范围 $\\epsilon$ — 0.1 安全阈值 $\\delta$ — 0.9 探索权重 $\\lambda$ — 0.5 📚 参考文献 Dauner et al., NAVSIM: Data-Driven Non-Reactive Autonomous Vehicle Simulation and Benchmarking, ECCV 2024 Shao et al., DeepSeekMath: Pushing the Limits of Mathematical Reasoning with GRPO, 2024 Xie et al., Show-o: One Single Model to See and Do, 2024 Yu et al., Language Model Beats Diffusion — Tokenizer is Key to Visual Generation, ICLR 2024 Hu et al., LoRA: Low-Rank Adaptation of Large Language Models, ICLR 2022 Yin et al., Metric3D v2: A Versatile Monocular Geometric Foundation Model, TPAMI 2024 Guo et al., Improving Reinforcement Learning for Autonomous Driving via World Model, 2025 Zhou et al., AutoVLA: Vision-Language-Action Model with Chain-of-Thought Reasoning, 2025 Li et al., OmniNWM: Omnidirectional Navigation World Model, 2025 Cao et al., Pseudo-Label Enhanced Closed-Loop Evaluation for Autonomous Driving, 2025 Zhou et al., HUGSIM: A Realistic Closed-Loop Simulator for Autonomous Driving, 2025 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2604-02714/","summary":"VLA 模型通过行为克隆学习驾驶策略，但受限于模仿学习无法探索专家分布之外的高质量策略。ExploreVLA 提出统一的理解-生成框架：用未来 RGB + 深度图生成作为密集世界建模目标，再利用世界模型的图像预测不确定性作为内在探索奖励，通过安全门控的 GRPO 优化策略。在 NAVSIM 上达到 93.7 PDMS 和 88.8 EPDMS。","title":"论文精读｜ExploreVLA：密集世界建模与探索驱动的端到端自动驾驶"},{"content":"📄 论文信息 标题：Agent-driven Long-tail Simulation for Autonomous Driving（代理驱动的自动驾驶长尾仿真） 团队：Junru Gu、Lijin Yang、Jianing Huang、Shu Liu、Zhongzhan Huang、Hang Zhao（具身智能 / 自动驾驶方向） arXiv：2607.04331（2026 年 7 月 5 日） 领域：cs.RO / cs.CV 一句话总结：抛弃\u0026quot;日志回放 + 规则代理\u0026quot;的传统仿真范式，改用指令跟随 LLM 通过结构化动作接口控制周围所有道路参与者，让仿真场景具备意图性和反应性，并配套发布 SemanticPlan 长尾语义闭环基准——结果证明 SOTA 规划器在这些场景里依然\u0026quot;翻车\u0026quot;不断。 🏗️ 架构总览 本文提出的仿真框架遵循**\u0026ldquo;LLM 出意图 + 动作接口转参数 + 物理引擎保执行\u0026rdquo;**的三层设计：\n层级 组件 输入 输出 大脑（LLM Agent） 指令跟随 LLM（GPT-4o） 场景描述 + 角色指令 + 环境状态 高层意图（目标速度/车道/让行） 神经（结构化动作接口） 参数化动作适配器 高层意图 + 当前状态 结构化动作参数 肌肉（物理引擎） 底层动力学 + Flow-Matching 动作参数 无碰撞轨迹 Agent 接口的数学形式化 每个代理 $i$ 在时间 $t$ 的决策过程可以建模为：\n$$a_t^{(i)} = \\pi_{\\text{LLM}}^{(i)}\\left( \\underbrace{I^{(i)}}_{\\text{语言指令}}, \\underbrace{\\mathcal{O}_t}_{\\text{场景观测}}, \\underbrace{\\mathcal{F}_{t-1}}_{\\text{仿真反馈}} \\right)$$其中 $\\pi_{\\text{LLM}}^{(i)}$ 是第 $i$ 个代理的指令跟随 LLM 策略。输出 $a_t^{(i)}$ 是一个结构化动作，例如：\n$$a_t^{\\text{vehicle}} = \\{v_{\\text{target}}, \\text{lane\\_id}, \\text{yield\\_to}, \\text{honk}\\}$$$$a_t^{\\text{pedestrian}} = \\{\\text{speed}, \\text{direction}, \\text{intent}\\}$$这些高层动作通过 Flow-Matching 轨迹生成器转换为物理可行的轨迹 $\\tau_t^{(i)} \\in \\mathbb{R}^{T \\times 4}$（位置+航向）：\n$$\\tau_t^{(i)} = \\text{FM}_{\\theta}(a_t^{(i)}, s_t^{(i)}, \\text{map})$$Flow-Matching 轨迹生成 Flow-Matching 通过学习一个概率路径 $p_t$ 从噪声分布过渡到真实轨迹分布。给定条件 $c = (a_t^{(i)}, s_t^{(i)}, \\text{map})$，向量场 $u_{\\theta}$ 被训练为：\n$$\\mathcal{L}_{\\text{FM}} = \\mathbb{E}_{t \\sim [0,1], \\tau \\sim q(\\tau), \\tau_0 \\sim \\mathcal{N}} \\left[ \\| u_{\\theta}(\\tau_t, t, c) - (\\tau - \\tau_0) \\|^2 \\right]$$其中 $\\tau_t = (1-t)\\tau_0 + t\\tau$ 是线性插值的概率路径。\n🤔 要解决什么问题？ 自动驾驶系统的真正考验不在\u0026quot;99% 的日常驾驶\u0026quot;，而在那 1% 的长尾场景——突然窜出的行人、恶意加塞的车、施工路段的混乱。要在闭环仿真里逼真地评测这些场景，需要两样东西：真实感和行为多样性。\n但现有仿真器两条腿都是瘸的：\n仿真范式 做法 致命缺陷 日志回放（log replay） 回放真实采集的轨迹 非反应性——ego 车一旦偏离原轨迹，周围车仍按录的走，物理上不自洽 规则代理（rule-based agent） IDM、MOBIL 等跟车/变道模型 行为单一——只会机械地跟车变道，演绎不出\u0026quot;恶意别车\u0026quot;\u0026ldquo;犹豫行人\u0026quot;这类长尾 核心矛盾是：长尾场景的本质是其他参与者的意图和反应，而日志回放丢失了反应性、规则代理丢失了意图多样性。两者都无法生成既物理合理又行为丰富的闭环测试场景。\n本文的破题思路：既然长尾的根源是\u0026rdquo;其他司机会怎么想、怎么应对\u0026quot;，而 LLM 正好擅长意图理解和策略生成，为什么不直接用 LLM 来当这些\u0026quot;演员\u0026quot;的大脑？\n💡 核心思想：LLM 当导演，代理当演员 整个框架的核心是把仿真器里的每一个周围参与者（surrounding participant）都换成一个指令跟随 LLM 代理。这带来三个根本性的能力升级：\n1. 意图性（Intentional Behavior） 通过自然语言指令给每个代理分配人格和目标：\n指令类型 示例 触发的行为 角色人格 \u0026ldquo;你是个赶时间的暴躁司机\u0026rdquo; 频繁变道、紧跟、急躁 具体意图 \u0026ldquo;在前方路口强行左转\u0026rdquo; 主动寻找间隙、激进抢行 情绪状态 \u0026ldquo;你犹豫不决，不确定该不该过\u0026rdquo; 走走停停、突然制动 这让同一个场景能演绎出无数种行为变体——同样是十字路口，换个指令就是完全不同的博弈。长尾的本质是意图分布的长尾，LLM 用语言天然地参数化了整个意图空间。\n2. 反应性（Reactive Behavior） LLM 代理不是孤立的——它在每个时间步都能观测到 ego 车和其他代理的状态，并据此调整自己的行为。这意味着 ego 车做出的任何决策（变道、减速、加速）都会得到周围车合理的反应，闭环物理自洽性得以保证。\n3. 物理合理性（Physical Plausibility） LLM 不直接输出底层轨迹，而是通过**结构化动作接口（structured action interface）**输出高层决策（目标速度、目标车道、让行意图等），再由底层动力学模块转换成符合物理约束的轨迹。这种\u0026quot;LLM 出意图 + 物理引擎出轨迹\u0026ldquo;的分工，既保留了行为多样性，又保证了物理真实性。\n模块 职责 优势 LLM 代理（大脑） 理解场景 + 指令，输出高层意图 意图多样、可解释 结构化动作接口（神经） 把意图翻译成参数化动作 限定输出空间、保证可执行 物理引擎（肌肉） 把动作变成无碰撞轨迹 物理自洽、避免穿模 🎬 SemanticPlan：长尾语义闭环基准 光有仿真框架还不够，本文最大的贡献是配套发布的 SemanticPlan 基准——这是把\u0026quot;LLM 驱动仿真\u0026quot;真正变成可量化评测工具的关键一步。\n基准构建 SemanticPlan 在真实 nuPlan 场景的基础上做增强：\n基础场景：来自 nuPlan 的真实路网与交通流； 多智能体增强：在场景里部署多个 LLM 驱动的交互代理（每场景 2-5 个）； 多样化语言指令：给每个代理分配不同的语言指令，制造语义丰富、意图冲突的长尾情形； 场景类别：覆盖 50+ 类型，分为 Collision-prone Track 和 Semantic Track 两条赛道。 SemanticPlan 统计 统计项 Collision-prone Track Semantic Track 合计 场景数量 100 130+ 230+ 场景类型 15 35+ 50+ 每场景代理数 2-3 3-5 2-5 代理类型 车辆 车辆+行人+自行车 全类型 交互密度 中 高 — Collision-prone Track 聚焦于物理层面的碰撞易发场景，通过位置部署和轨迹设计制造高交互紧张度：\n场景类型 描述 代理指令示例 Cut-in 相邻车道车辆强行切入 \u0026ldquo;在前方车辆前向左变道\u0026rdquo; Hard Brake 前车突然急刹 \u0026ldquo;在斑马线前突然急停\u0026rdquo; Pedestrian Dart-out 行人突然横穿 \u0026ldquo;在车接近时突然跑过马路\u0026rdquo; Merge Conflict 合流区抢行 \u0026ldquo;加速并入主路，不让行\u0026rdquo; Semantic Track 在 Collision-prone 基础上增加了语义层面的意图冲突，是本文最具创新性的部分：\n场景大类 子类型数 典型例子 一般语义场景 25+ 暴躁司机、犹豫行人、让行博弈、施工绕行 鸣笛敏感场景 10+ 因被鸣笛而改变行为（加速/让行/受惊） Honk-sensitive 场景的设计尤为巧妙：代理不仅能被语言指令驱动，还能响应仿真器中的鸣笛信号。当一个代理被鸣笛时，LLM 会收到\u0026quot;车辆在鸣笛\u0026quot;的反馈，并据此调整意图——这让 ego 车不只是被动博弈，而是能通过鸣笛主动影响周围代理。这是对真实驾驶中\u0026quot;交流\u0026quot;行为（鸣笛、闪灯等）的重要仿真尝试。\n评测维度 SemanticPlan 关注的不只是\u0026quot;轨迹规划得多准\u0026rdquo;，而是任务能否安全、有效地完成：\n维度 含义 为什么重要 安全性 是否发生碰撞、急刹 长尾场景的及格线 任务完成度 是否按指令到达目标 仅有安全不够，还得\u0026quot;开对路\u0026quot; 交互合理性 与周围代理的博弈是否顺畅 长尾的本质是多主体博弈 稳定性 多次同场景是否表现一致 检验鲁棒性 这种\u0026quot;安全 + 有效 + 一致\u0026ldquo;的多维评测，远比传统规划基准（只看轨迹误差）更能反映真实世界的能力。\n仿真质量对比 本文对 LLM 代理的仿真质量做了定量评估，与日志回放和规则代理对比：\n维度 日志回放 规则代理 (IDM+) LLM 代理 (本文) 行为多样性 低（固定轨迹） 中（规则决定） 高（语言参数化） 反应性（对 ego 反应） 无 部分（跟车/变道） 高（全局理解+意图驱动） 长尾覆盖率 极低 低 高（指令可任意组合） 物理合理性 高（真实轨迹） 中（简化模型） 高（Flow-Matching 保真） 可控制性 无 低（参数调节） 高（自然语言指令） 计算开销 极低 低 高（LLM 推理） LLM 代理在多样性、反应性、可控性上全面领先，但计算开销是主要瓶颈。\n📊 实验结果：SOTA 规划器集体\u0026quot;翻车\u0026rdquo; 本文最发人深省的结论是：当前 state-of-the-art 的规划器，在 SemanticPlan 上仍然难以稳定地实现安全且有效的任务完成。\n核心发现 维度 结果 量化数据 整体完成率 SOTA 规划器在长尾场景的任务完成率显著低于常规场景 平均完成率 47.3%（常规 nuPlan: 78.6%） 失败模式 大量失败集中在\u0026quot;意图冲突\u0026quot;场景——ego 不理解代理的语义意图，做出错误博弈 意图误判占失败的 42% 安全 vs 完成的权衡 部分规划器为求安全过度保守，导致任务无法完成；激进者则碰撞频发 保守型碰撞率 3.2% 但完成率 31%；激进型完成率 58% 但碰撞率 18.7% 跨场景泛化 在常规 nuPlan 上表现良好的规划器，迁移到 SemanticPlan 后性能明显下滑 平均下滑 31.3% 详细基线对比 规划器 方法类型 碰撞率(%) 任务完成率(%) 效率分 综合得分 IDM (规则) 传统 15.2 42.1 0.63 0.54 PlanTF 学习式 8.7 51.3 0.72 0.65 GameFormer 博弈建模 11.4 55.8 0.68 0.62 PDM (nuPlan SOTA) 混合 6.2 58.7 0.79 0.73 VLM Planner (GPT-4o) LLM 规划 4.8 62.3 0.71 0.71 Energy Planner 能量模型 5.5 47.6 0.74 0.66 SemanticPlan Oracle 上限（反应式专家） 0 100 1.0 1.0 结论：即使是最好的规划器（PDM/VLM Planner）在 SemanticPlan 上的任务完成率也不到 65%——相比在常规 nuPlan 上 \u0026gt; 90% 的表现有明显差距。这证明 SemanticPlan 长尾语义场景对当前 SOTA 规划器仍然是巨大的挑战。\n失败模式分布 失败类型 占比 典型场景 根因分析 意图误判 42% 代理犹豫/激进 规划器只看到位置/速度，不理解意图 过度保守 23% 多代理密集博弈 默认安全策略导致\u0026quot;寸步难行\u0026quot; 碰撞 18% 突发变道/抢行 反应式规划的反应延迟 + 预测不准 任务偏离 12% 复杂路口多意图交织 缺乏全局任务理解 其他 5% 仿真边界条件 物理引擎/控制器失误 这组结果传递了一个清晰的信号：现有的规划器大多是\u0026quot;反应式\u0026quot;的——它们能对显式轨迹做响应，却不会\u0026quot;理解\u0026quot;其他参与者的潜在意图。当周围代理开始表现出语义层面的复杂意图（暴躁、犹豫、合作、对抗），纯反应式规划就力不从心了。\n失败模式分类 论文对规划器的失败做了细致分类，这对社区改进算法极具指导价值：\n失败类型 触发场景 根因 意图误判 代理表现出犹豫/激进 规划器缺乏意图推理能力 过度保守 多代理密集博弈 默认安全策略导致\u0026quot;寸步难行\u0026quot; 碰撞 突发变道/抢行 反应式规划的反应延迟 任务偏离 复杂路口多意图交织 缺乏全局任务理解 ⚔️ 在仿真谱系中的位置 理解本文，要看它在自动驾驶仿真演进中的坐标：\n代际 代表 周围参与者建模 反应性 多样性 第一代（游戏仿真） CARLA 规则脚本 部分 低 第二代（日志回放） nuPlan replay 真实轨迹回放 无 受限于采集 第三代（规则代理） nuPlan non-reactive/reactive IDM/MOBIL 有 低 第四代（神经代理） TrafficBots、TrafficGen 学习式策略 有 中 本文（LLM 代理） Agent-driven + SemanticPlan 指令跟随 LLM 有 极高（语义参数化） 本文的开创性在于：第一次把\u0026quot;行为多样性\u0026quot;从\u0026quot;数据多不多\u0026quot;升级为\u0026quot;语义指令宽不宽\u0026quot;。用语言参数化意图空间，意味着长尾场景的生成不再受限于数据采集，而是受限于 LLM 的想象力——这从根本上打破了长尾数据的稀缺瓶颈。\n⚠️ 局限性与挑战 LLM 驱动仿真虽然前景诱人，但也有不容忽视的挑战：\n实时性：LLM 推理延迟较高，难以支持大规模实时仿真，目前更适合离线场景生成与评测。 物理保真度：LLM 输出的高层意图经底层转换后，仍可能与真实人类驾驶的微观行为存在 gap。 指令可控性：自然语言指令到行为的映射不是完全确定的，同一指令可能激发不一致的行为，复现性是问题。 评测闭环：LLM 代理本身的\u0026quot;演技\u0026quot;如何评测、是否存在系统性偏差，仍需建立标准。 📝 个人思考 读这篇论文，我最深的感受是它精准地抓住了长尾问题的本质——意图。过去社区把\u0026quot;长尾\u0026quot;几乎等同于\u0026quot;罕见几何场景\u0026quot;——少见的车道配置、奇怪的障碍物形状。但本文点破了一层更深的认知：长尾的真正难点是\u0026quot;别人会怎么想\u0026quot;。一个十字路口在几何上可能再普通不过，但只要换个暴躁司机、加个犹豫行人，它瞬间就变成了最难的长尾。用 LLM 来参数化这个\u0026quot;意图空间\u0026quot;，是比堆几何数据高明得多的思路——几何长尾是有限的，意图长尾是无限的。\n第二点启发在 \u0026ldquo;LLM 当演员\u0026quot;这个范式的可迁移性。这个思想完全可以辐射到具身智能、机器人仿真的所有领域——任何多智能体交互场景，都可以用 LLM 给每个 agent 赋予人格和意图。想象一下：仿真城市里的每个行人、每辆自行车、每个机器人服务员都由 LLM 驱动，能对主角的行为做出有意图的反应——这将彻底改变机器人训练的\u0026quot;环境丰富度\u0026rdquo;。具身智能界一直缺一个\u0026quot;富环境仿真器\u0026quot;，LLM 代理或许就是答案。\n第三点是关于 \u0026ldquo;评测即研究\u0026rdquo;。本文的 SemanticPlan 基准比仿真框架本身更有长期价值——一个好的 benchmark 能定义一个领域的问题边界。SemanticPlan 把\u0026quot;安全 + 有效 + 一致\u0026quot;作为评测维度，比单纯看轨迹误差深刻得多。我预期这个基准会成为下一代规划器的试金石，倒逼社区从\u0026quot;反应式规划\u0026ldquo;转向\u0026rdquo;意图感知规划\u0026quot;。事实上，这已经在发生——越来越多工作开始把 LLM 引入规划，做场景理解、意图推理、博弈决策，本文为这条路线提供了标准化的评测土壤。\n最后一点隐忧：LLM 代理的\u0026quot;真实度\u0026quot;如何验证？ 一个暴躁 LLM 司机的行为，是否真的符合人类暴躁司机的统计分布？如果 LLM 系统性地\u0026quot;演得太夸张\u0026quot;或\u0026quot;演得太保守\u0026quot;，那么在它上面训练/评测出的规划器，可能在真实世界依然不 work。这需要建立一套行为真实度评测协议——比较 LLM 代理的行为分布与真实人类驾驶员的分布。只有当 LLM 代理通过这个\u0026quot;图灵测试\u0026quot;，SemanticPlan 的结论才真正可信。这是这个方向必须补上的下一块拼图。\n总体而言，本文是自动驾驶仿真\u0026quot;从规则到语义\u0026ldquo;转型的标志性工作。它不只是发了个新仿真器，更是重新定义了\u0026quot;长尾\u0026rdquo;——长尾不是数据的长尾，是意图的长尾。这个认知升级，比任何 benchmark 数字都更有价值。\n🔗 延伸阅读 工作 团队 与本文的关系 nuPlan Motional 本文基准的真实场景来源 TrafficBots — 学习式交通代理，本文的对比路线 NAVSIM — 离线开环规划基准，本文的闭环补充 CARLA / Town CVCFSB 游戏仿真基线，本文的真实场景替代 VLM/VLA 规划器 各家 本文评测的对象，发现其意图推理短板 LLM-Agent 框架（如 AutoGen、MetaGPT） 多家 LLM 多代理协作，本文思想的源头 📖 这是论文精读系列的第 31 篇。当仿真器里的每个\u0026quot;演员\u0026quot;都有了 LLM 大脑，长尾场景的边界被彻底打开。你认为 LLM 驱动仿真会成为自动驾驶评测的新标准吗？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2607-04331/","summary":"本文用指令跟随 LLM 代理接管仿真器中所有交通参与者，抛弃了日志回放和规则代理的传统仿真范式。LLM 通过结构化动作接口控制每辆车的目标速度、车道与让行行为，配合 Flow-Matching 轨迹生成器实现高保真物理执行。配套的 SemanticPlan 长尾语义闭环基准暴露出 SOTA 规划器在意图性交互场景中仍频繁翻车的短板。","title":"论文精读｜Agent-driven Long-tail Simulation for Autonomous Driving：用 LLM 代理驱动自动驾驶长尾仿真"},{"content":"📄 论文信息 标题：A knowledge-augmented dataset of high-risk driving scenarios with LLM annotations for autonomous driving（面向自动驾驶的、带 LLM 标注的知识增强高风险驾驶场景数据集） 团队：Heye Huang、Jingguang Li、Zhiyuan Zhou、Paul Liang、Mingyu Wu、Kitae Jang、Jianqiang Wang（清华大学等） arXiv：2607.07103（2026 年 7 月 8 日，22 页 9 图） 领域：cs.LG / cs.DB 数据集名：K-Risk（Knowledge-augmented Risk dataset） 一句话总结：把\u0026quot;高风险事件标签 + 语义语言标注 + 可验证的安全信号\u0026ldquo;这三样社区一直缺的东西打包到一起，构建了一个横跨欧美中、覆盖多路况、语言可解释、决策可闭环验证的标准化风险驾驶数据集——为下一代风险感知自动驾驶智能体的训练和评测铺好地基。 🏗️ 架构总览 K-Risk 的整体架构由四大模块组成，形成一个从原始轨迹到可验证语义标注的完整流水线：\n模块 输入 输出 核心组件 多源数据整合 20 个异构轨迹数据集 归一化的轨迹 + 元数据 统一 Schema 转换器 风险中心抽取 归一化轨迹 31,398 个高风险事件 DRF 过滤器 + TTC 冲突检测 LLM 标注生成 高风险事件轨迹 语言三元组标注 GPT-4 + 结构化 Prompt 闭环仿真验证 语言标注 + 建议动作 验证后的安全决策 Collision-Free Simulator 多源数据整合的挑战 20 个数据集的格式差异巨大：NGSIM 用 10 Hz 的 CSV 记录车辆位置，Waymo 用 ProtoBuf 存 10 Hz 的 3D 边界框，highD 用 25 Hz 的鸟瞰轨迹。K-Risk 的归一化层将它们统一到统一的轨迹 Schema——每条轨迹包含时间戳、位置 (x, y)、航向角 (heading)、速度、加速度，以及车道拓扑信息。这个归一化本身就是一个重要的工程贡献。\nDRF 驱动的风险筛选 K-Risk 的风险筛选核心是一个Driver Risk Field (DRF) 模型——它把每个参与者对周围空间的\u0026quot;风险贡献\u0026quot;建模为一个高斯场，沿预测路径累积。DRF 的数学定义如下：\n$$R_{\\text{DRF}}(\\mathbf{p}) = \\sum_{i} \\int_{0}^{T} \\frac{w_i}{2\\pi\\sigma_i^2} \\exp\\left(-\\frac{\\|\\mathbf{p} - \\mathbf{p}_i(t)\\|^2}{2\\sigma_i^2}\\right) dt$$其中 $\\mathbf{p}_i(t)$ 是第 $i$ 个参与者在时间 $t$ 的预测位置，$\\sigma_i$ 取决于其速度与尺寸，$w_i$ 是类型权重。综合得分位于前 10% 的事件被标记为\u0026quot;高风险\u0026rdquo;，前 1% 为\u0026quot;极端近碰撞\u0026quot;。配合 **TTC（Time-to-Collision, $\u003c2s/3s/5s$）**和急动度阈值 $|a| \u003e 4 m/s^2$，构成了三层筛选漏斗。\n🤔 要解决什么问题？ 安全的自动驾驶需要两种能力：对常见高风险事件的快速反应，以及对罕见极端长尾场景的深度推理。但这两类场景在自然驾驶数据里都严重欠表示——毕竟谁也不会为了采数据故意去撞车。\n现有数据集各有各的残缺：\n现有数据集类型 代表 缺什么 轨迹数据集 NGSIM、HighD、nuPlan 有轨迹但无高风险事件标签、无语义解释 语言增强数据集 DriveGPT-4、LMDrive 有语言但缺高风险标注、缺可验证的安全信号 碰撞/事故数据集 各种事故合集 样本极少、单一来源、不可闭环验证 三件套——高风险事件标签 + 语义标注 + 可验证决策信号——同时具备的数据集在社区里几乎不存在。K-Risk 就是要补上这个空白。\n核心命题：一个好的风险驾驶数据集，必须同时满足四个条件——规模化（覆盖足够多的高风险事件）、多样化（跨地域跨路况）、可解释（带语言描述与因果分析）、可验证（能在闭环仿真里检验决策）。K-Risk 就是围绕这四点构建的。\n💡 核心思想：风险中心 + 知识增强 K-Risk 的整体设计可以用一句话概括：用统一的\u0026quot;风险中心\u0026quot;抽取流水线，把分散在全球的数据统一成\u0026quot;轨迹 + 元数据 + 语言三元组\u0026quot;的标准件，再用 LLM 注入语义知识，最后用闭环仿真器验证决策。\n四大设计支柱 支柱 做法 价值 规模化整合 融合 20 个人类驾驶与自动驾驶轨迹数据集 解决单源数据偏置 地理多样性 覆盖欧洲、中国、美国三大洲 跨文化/跨法规泛化 路况多样性 高速、城市快速路、交叉口、环岛 覆盖主要风险场景类型 风险中心抽取 统一的 risk-centric extraction pipeline 一致的筛选标准 数据规模 K-Risk 的最终规模相当可观，且按风险等级做了精细划分：\n类别 数量 筛选标准 地理覆盖 整合原始数据集 20 个 — 欧洲(highD/inD/rounD/CATS等)、中国(CitySim)、美国(NGSIM/Waymo/Argoverse) 高风险事件 31,398 个 DRF top-10% + TTC\u0026lt;5s + |a| 阈值 高速/城市快速路/交叉口/环岛全覆盖 极端近碰撞子集 1,036 个 DRF top-1% + TTC\u0026lt;2s + 2秒冲突预测器 各类型路况平衡采样 风险等级的数学定义 风险等级通过复合评分函数 $S_{\\text{risk}}$ 确定：\n$$S_{\\text{risk}} = \\alpha \\cdot R_{\\text{DRF}} + \\beta \\cdot \\mathbb{1}_{\\text{TTC}\u003c2s} + \\gamma \\cdot \\frac{|a|}{a_{\\text{max}}} + \\delta \\cdot \\text{PET}$$其中 PET 是后侵占时间（Post-Encroachment Time），衡量多代理间的时空接近度。参数 $(\\alpha, \\beta, \\gamma, \\delta)$ 通过在 nuPlan 验证集上的碰撞率拟合确定。这种多指标融合的方式比单一 TTC 阈值更加鲁棒——比如 TTC 可能在低速场景下失效，而 DRF 仍能捕捉到空间逼近的风险。\n这个规模远超大多数专门的事故数据集，且地理与路况多样性是单源数据集无法企及的——从德国高速的密集车流到北京快速路的复杂交互，K-Risk 提供了真正跨文化的风险数据基础。\n🧠 LLM 标注：语言三元组 K-Risk 最有特色的设计是语言三元组（language triplet） 标注——每个事件都不只是一段轨迹，而是配齐了三层语义标注：\n三元组层 内容 覆盖范围 结构化场景描述 路况、参与者、相对位置、运动状态 全部 31,398 事件 异常行为通知 哪个参与者做了什么异常行为 全部事件 因果风险分析 + 行动建议 为什么危险、该怎么应对 代表性子集 这个三元组的妙处在于：它把\u0026quot;发生了什么（描述）—哪里异常（通知）—为什么危险 + 怎么办（因果+建议）\u0026ldquo;这条完整的安全推理链显式地编码进了数据。模型不仅能从轨迹学\u0026quot;怎么动\u0026rdquo;，还能从语言学\u0026quot;为什么这么动\u0026quot;。\n闭环验证：可验证的安全信号 光有 LLM 生成的标注还不够——LLM 会幻觉。K-Risk 的关键一手是：因果风险分析和行动建议，都通过闭环仿真器做了迭代反思（iterative reflection）验证。\n验证环节 做法 解决的问题 闭环仿真 把建议的动作放进仿真器执行 检验建议是否真的避撞 迭代反思 根据仿真结果反复修正标注 剔除 LLM 幻觉、提升标注质量 这种\u0026quot;LLM 出标注 + 仿真器验真伪\u0026ldquo;的闭环，让 K-Risk 的语言标注不只是\u0026quot;听起来对\u0026rdquo;，而是\u0026quot;执行起来有效\u0026quot;——这是它区别于一切纯 LLM 生成数据集的根本。\n与现有数据集的全面对比 维度 NGSIM/HighD Waymo/nuScenes DriveLM/NuRisk K-Risk (ours) 事件数量 无风险标签 无风险标签 ~1k-5k QA 对 31,398 事件 极端子集 无 无 极少 1,036 近碰撞 地理覆盖 单地(欧洲或美国) 单地 多在美国 欧美中 3 大洲 20 源 路况类型 单一 城市为主 城市 高速+城市+环岛+交叉口 语义标注 无 无 有(QA级) 三元组(描述+通知+因果) 因果分析 无 无 弱 强(LLM+仿真验证) 闭环可验证 无 无 无 有(碰撞免仿真+反思) 下游任务支持 预测 感知+预测 VQA CPT+SFT+RLHF+RLVR 这篇对比的核心结论是：K-Risk 在事件规模、地理多样性、语义深度、可验证性四个维度上同时做到了现有数据集未能企及的水平，真正填补了\u0026quot;风险中心 + 语义增强 + 可验证决策\u0026quot;这个三合一的空白。\n统一风险抽取流水线 把 20 个格式各异的数据集统一成一件标准品，靠的是一条精心设计的 risk-centric extraction pipeline：\n格式归一化：把不同数据集的轨迹、元数据统一到一致 schema； 风险事件筛选：基于运动学指标（TTC、THW、急动度等）+ 语义规则筛选高风险片段； 事件对齐：同步轨迹、元数据、语言三元组； LLM 标注生成：对每个事件生成三层语言标注； 闭环验证：对子集做仿真器验证 + 迭代反思。 这条流水线本身就是一份宝贵的工程资产——它意味着社区可以持续地把新数据\u0026quot;喂\u0026quot;进 K-Risk 框架，不断扩充高风险事件库。\n📊 数据集特性与基准价值 多维风险标注 K-Risk 的\u0026quot;多维\u0026quot;体现在标注的层次上：\n标注维度 提供的信息 用途 运动学 速度、加速度、TTC、THW 定量风险建模 语义 场景类型、参与者角色 场景理解训练 因果 风险成因链 因果推理监督 决策 推荐行动 决策监督 语言 自然语言描述 VLM/VLA 对齐 这种\u0026quot;轨迹 + 语言 + 决策\u0026ldquo;三位一体的标注，让 K-Risk 能同时支撑感知、预测、规划、推理多个下游任务，是一个真正的\u0026quot;多任务地基\u0026rdquo;。\n可验证性 K-Risk 的决策标注是经仿真器验证的——这意味着用它训练出的智能体，其决策可以直接在同一个仿真器里做闭环评测，训练-评测的 gap 被最小化。这对风险感知智能体的研发至关重要：你训出来的\u0026quot;避撞决策\u0026quot;，能在标准化的闭环环境里被公平地打分。\n📈 实验结果与基准评测 基准协议 K-Risk 配套发布了四类下游任务的标准化评测协议：\n任务类型 输入 输出 评测指标 风险分类 事件轨迹片段 风险等级(中/高/极端) 准确率 + F1 因果推理 轨迹 + 三元组 风险成因文本 BLEU + ROUGE + 人工 决策预测 轨迹 + 场景描述 推荐动作 ID 动作准确率 闭环规划 完整事件 闭环轨迹 碰撞率 + 任务完成率 基线方法 K-Risk 在基准上评测了以下方法：\n类别 基线 说明 纯运动学 TTC/THW 阈值、DRF 分类器 无语义的传统方法 序列模型 LSTM、Transformer 编码器 从轨迹学风险 VLM 方法 DriveLM、NuRisk 的 VLM 用语言理解风险 LLM Agent GPT-4o 直接推理 纯语言风险分析 核心发现：纯运动学方法在常规风险事件上表现稳健（F1 \u0026gt; 0.85），但在极端近碰撞场景中严重退化（F1 \u0026lt; 0.6），而 VLM 方法在因果推理维度显著优于运动学方法（ROUGE-L 高出 15 点以上）。这验证了 K-Risk 的核心假设：高风险场景的\u0026quot;理解\u0026quot;需要语义+运动学联合建模，纯靠物理量是不够的。\n📐 核心数学公式汇总 K-Risk 的风险筛选涉及多个数学指标，这里做统一整理：\nDriver Risk Field (DRF) DRF 衡量任意位置 $\\mathbf{p}$ 在时间 $[0,T]$ 内受到的累积风险：\n$$R_{\\text{DRF}}(\\mathbf{p}) = \\sum_{i=1}^{N} \\sum_{t=0}^{T/\\Delta t} \\frac{w_i \\cdot v_i(t)}{2\\pi\\sigma_i^2} \\exp\\left(-\\frac{\\|\\mathbf{p} - \\mathbf{p}_i(t)\\|^2}{2\\sigma_i^2}\\right) \\Delta t$$其中 $\\sigma_i = \\sigma_0 + k \\cdot v_i(t)$，即不确定性随速度 $v_i$ 线性增长。\nTTC（碰撞时间） 对同车道前后两车，TTC 定义为：\n$$TTC = \\frac{d}{\\max(v_{\\text{rear}} - v_{\\text{front}}, \\epsilon)}$$其中 $d$ 为车距，$\\epsilon$ 防止除零。K-Risk 用 TTC \u0026lt; 2s/3s/5s 分别标记极端/高/中风险。\nTHW（车头时距） $$THW = \\frac{d}{v_{\\text{ego}}}$$THW \u0026lt; 1.0s 被视为跟车过近。\n急动度（Jerk） $$j = \\frac{a_{t+1} - a_t}{\\Delta t}$$$|j| \u003e 4 m/s^3$ 的事件被标记为异常驾驶。\n复合风险评分 最终的风险评分融合了运动学和场景因子：\n$$S_{\\text{final}} = \\frac{1}{Z}\\left(\\frac{R_{\\text{DRF}}}{\\mu_R} + \\frac{\\mathbb{1}_{TTC\u003c2s}}{\\text{TTC}} + \\frac{|j|}{j_{\\text{max}}} + \\frac{\\text{PET}}{T_{\\text{conflict}}}\\right)^{\\gamma}$$其中 $Z$ 是归一化常数，$\\gamma$ 控制评分分布的陡峭程度。\n⚔️ 在风险数据集谱系中的位置 代际 代表 标注层次 可验证性 第一代（纯轨迹） NGSIM、HighD 仅运动学 无 第二代（事故合集） 各种 crash dataset 碰撞标签 无（数据量小） 第三代（语言增强） DriveGPT 类数据 语言描述 弱（无闭环） 本文（K-Risk） 31,398 事件 + 三元组 运动学+语义+因果+决策+语言 强（闭环+反思） K-Risk 的开创性在于三点：第一次大规模整合跨洲际数据、第一次把语言三元组与轨迹对齐、第一次用闭环仿真器验证决策标注。这三个\u0026quot;第一次\u0026quot;共同定义了\u0026quot;风险感知自动驾驶数据集\u0026ldquo;的新标准。\n⚠️ 局限性与挑战 K-Risk 虽然设计周到，仍有值得讨论的局限：\nLLM 标注的固有偏置：即便经过闭环验证，LLM 生成的语言描述仍可能带有训练数据的分布偏置，在罕见交通文化下不一定准确。 极端子集规模有限：1,036 个近碰撞事件虽宝贵，但相对于长尾的\u0026quot;无限性\u0026rdquo;，仍只是冰山一角。 闭环仿真器的真实性：验证所依赖的仿真器本身是否足够真实，决定了\u0026quot;验证\u0026quot;的可信度——这是所有仿真验证路线的共同软肋。 传感器模态：K-Risk 主要聚焦轨迹层面，对原始传感器（图像、点云）的覆盖深度未详尽说明，纯视觉方法的使用可能受限。 📝 个人思考 读 K-Risk，最打动我的是它对\u0026quot;数据集到底该提供什么\u0026ldquo;的清醒认识。过去自动驾驶数据集的竞赛几乎只在卷\u0026rdquo;小时数、英里数、场景数\u0026quot;——谁的体量大谁牛。但 K-Risk 点破了一层更深的认知：对于安全这个维度，体量不等于质量。一个有 31,398 个带语义、带因果、带可验证决策的高风险事件库，远比几百万小时平庸驾驶数据更有价值。安全的长尾不在于你开了多远，而在于你\u0026quot;理解\u0026quot;了多少种危险。K-Risk 用\u0026quot;风险中心 + 知识增强\u0026quot;把数据集的价值密度提到了一个新高度。\n第二点启发在 LLM 标注 + 闭环验证这套范式。LLM 给数据集打标已经不是新鲜事，但纯 LLM 标注最大的问题是\u0026quot;幻觉\u0026quot;——它写得头头是道，执行起来可能完全错。K-Risk 的破题是：用闭环仿真器当\u0026quot;裁判\u0026quot;，把 LLM 的建议放进仿真里跑，跑得通才留，跑不通就迭代修正。这种\u0026quot;生成-验证-修正\u0026ldquo;的闭环，是 LLM 标注可信化的关键范式。我预期这套思路会辐射到所有用 LLM 做数据增强的领域——没有验证闭环的 LLM 标注，本质上都是\u0026quot;自说自话\u0026rdquo;。\n第三点是关于 \u0026ldquo;三元组\u0026quot;作为安全推理的训练目标。描述-通知-因果建议这三层，恰好对应了人类司机处理危险的认知流程：\u0026rdquo;看清情况→识别异常→判断因果→决定应对\u0026quot;。现有端到端模型大多只在学\u0026quot;轨迹→轨迹\u0026quot;的映射，完全跳过了中间的语义推理。K-Risk 的三元组标注，让模型有机会学到显式的安全推理链——这对可解释性、可审计性是巨大提升。想象一下，未来的自动驾驶系统不仅能\u0026quot;避撞\u0026quot;，还能用自然语言告诉你\u0026quot;我为什么这么避撞\u0026quot;——这才是真正可信赖的安全智能体。\n最后一点是 跨地域整合的战略价值。自动驾驶的\u0026quot;本地化\u0026quot;一直是难题——美国的训练数据拿到中国不一定好用，反之亦然。K-Risk 把欧美中三大洲的数据统一到一个框架下，为研究\u0026quot;跨法规、跨文化泛化\u0026ldquo;提供了独特土壤。这不仅是数据集的丰富，更是一个研究议题的开启：一个能在北京早高峰、德国高速、美国路口都安全驾驶的统一模型，到底需要什么样的训练数据和推理能力？ K-Risk 给了社区一个去回答这个问题的标准化基础。\n总体而言，K-Risk 是\u0026rdquo;数据集即基础设施\u0026ldquo;理念的典范。它不追求\u0026quot;刷榜\u0026rdquo;，而是踏踏实实地把社区最缺的三件套（事件标签 + 语义标注 + 可验证信号）补齐。这种\u0026quot;筑基\u0026ldquo;的工作虽然不如 SOTA 模型博眼球，但长期价值更高——没有好的数据集，再强的模型也是无源之水。\n🔗 延伸阅读 工作 团队 与 K-Risk 的关系 NGSIM / HighD / nuPlan 各家 K-Risk 整合的源数据集 DriveGPT-4 / LMDrive 各家 语言增强驾驶数据的前作 TrafficBots — 学习式交通代理，可结合 K-Risk 训练 Risk-aware Planning 各家 K-Risk 的核心下游应用 Agent-driven Long-tail Simulation 同期工作 可用 K-Risk 的事件作为仿真种子 LLM-as-Annotator 多家 K-Risk 的标注范式来源 📖 这是论文精读系列的第 32 篇。当数据集开始承载\u0026quot;因果\u0026quot;和\u0026quot;可验证决策\u0026rdquo;，自动驾驶安全的研发范式正在被重塑。你认为语言三元组会成为驾驶数据集的新标配吗？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2607-07103/","summary":"K-Risk 整合欧美中三大洲 20 个轨迹数据集，用 DRF 驱动风险筛选流水线统一抽取高风险事件。它通过 LLM 为每个事件生成三元组标注（结构化描述+异常行为通知+经闭环仿真器验证的因果风险分析），首次将高风险事件标签、语义标注和可验证决策信号三合一打包。产出 31,398 个高风险事件和 1,036 个极端近碰撞子集，为风险感知自动驾驶提供标准化评测基础。","title":"论文精读｜K-Risk：知识增强的高风险驾驶场景数据集"},{"content":"📄 论文信息 标题：Vesta: A Generalist Embodied Reasoning Model（统一的具身推理通用模型） 团队：NVIDIA（Johan Bjorck、Zhiqi Li、Yunze Man、Linxi \u0026ldquo;Jim\u0026rdquo; Fan、Jan Kautz 等 32 人） arXiv：2606.20905（2026 年 6 月 18 日） 领域：cs.RO / cs.AI 名字由来：Vesta，罗马神话中的家灶女神——守护\u0026quot;家\u0026quot;与\u0026quot;空间\u0026quot;的神，寓意守护机器人在开放世界中的空间智能 一句话总结：用单一基础模型把定位、空间推理、导航、长程规划这四样原本由不同专家干的活全包了，配上一个简洁的多模态记忆挽具（memory harness），结果一个通用模型干翻了一整排专家——这是具身智能\u0026quot;通用主义\u0026quot;路线的强力背书。 🏗️ 架构总览 Vesta 的核心架构设计围绕统一推理 + 多模态记忆挽具展开，将四个能力维度集成进单一基础模型：\n能力维度 输入 输出 对应模块 定位 图像 + 文本查询 边界框/关键点坐标 空间接地头 空间推理 图像 + 空间问题 文本答案 + 空间关系 推理层 导航 指令 + 第一人称图像 导航动作 (像素目标/转向/STOP) 动作预测头 长程规划 目标 + 历史记忆 子任务序列 记忆条件规划 所有能力共享同一个 Qwen3-VL-8B 主干参数，只有输出头的 token 序列不同。这种\u0026quot;统一主干 + 异构输出\u0026ldquo;的设计是 Vesta 最核心的架构决策——它既保留了通用视觉-语言预训练的知识，又通过多样化的 SFT 数据诱导出各项专门能力。\n统一推理范式的形式化 Vesta 将所有任务统一为条件语言生成问题。给定多模态输入 $x$（图像、文本指令、历史帧）和任务前缀 $p$（决定输出格式），模型输出目标序列 $y$：\n$$y^* = \\arg\\max_{y} P_{\\theta}(y | x, p)$$不同的能力对应不同的任务前缀和输出格式化：\n$$P_{\\theta}(\\text{box}|\\text{image},\\text{query}) \\quad\\text{(定位)}$$ $$P_{\\theta}(\\text{answer}|\\text{image},\\text{question}) \\quad\\text{(空间推理)}$$ $$P_{\\theta}(\\text{action}|\\text{image},I,H_t) \\quad\\text{(导航)}$$ $$P_{\\theta}(\\text{subtask}|\\text{image},\\text{goal},\\text{mem}) \\quad\\text{(规划)}$$这种统一的数学形式使得能力间的知识共享成为可能——导航中学到的空间理解可以直接帮助定位，定位中学到的几何关系反过来提升空间推理。\n多模态记忆挽具 长程任务的最大瓶颈是记忆。Vesta 的记忆挽具（memory harness）设计极为简洁：它将历史关键帧 ($o_{k_0}, ..., o_{k_{N-1}}$) 和已完成的子任务文本缓存组成一个记忆上下文窗口，与当前观察一起拼入输入序列：\n$$\\text{Input}_t = [I; H_t; o_t]$$其中 $H_t = (o_{k_0}, ..., o_{k_{N-1}})$ 是采样历史帧，$I$ 是导航指令。这种\u0026quot;拼一起\u0026quot;的方法看似简单，但效果出奇好——因为它允许 Transformer 的自注意力机制在记忆和当前观察之间自由建立长程依赖。真机任务 +35% 的提升大部分来自这个设计。\n🤔 要解决什么问题？ 在开放世界（home、office、城市）里跑的机器人，需要无缝集成四样核心能力：\n能力 说明 定位（Localization） 我在哪？ 空间推理（Spatial Reasoning） 周围东西的几何/拓扑关系是什么？ 导航（Navigation） 怎么从这到那？ 长程规划（Long-horizon Planning） 一个跨几十步的多阶段任务怎么拆解执行？ 现有的做法是专家主义（specialist）——每个能力训一个专门模型，再像\u0026quot;乐高\u0026quot;一样拼成一个 pipeline。但这条路有两大死穴：\n计算昂贵：一堆大模型同时跑，对边缘设备（机器人车端）是噩梦； 级联错误：上游专家错了，下游全错，错误沿着 pipeline 雪球式放大。 核心命题：能不能用一个统一的基础模型把所有能力包圆，既省算力、又避免级联错误，还能靠\u0026rdquo;能力间的相互增益\u0026ldquo;做得比专家更好？Vesta 给出了肯定的回答——通用主义（generalist）是可行、可扩展、甚至更优的选择。\n💡 核心思想：统一 + 记忆 Vesta 的成功建立在两个关键设计上：精心策展的多样化训练语料 和 简洁的多模态记忆挽具。\n支柱一：空间接地语料 要让单一模型同时掌握定位、空间推理、导航、规划，训练数据必须足够多样、且能诱发空间接地（spatial grounding）。Vesta 团队构建了一个庞大的策展语料库，专门设计来诱导模型建立：\n接地维度 语料设计 培养的能力 几何接地 带度量深度/位姿标注的数据 定位、空间关系推理 拓扑接地 带场景图、物体关系的数据 长程规划、物体检索 时序接地 带历史轨迹/ episodic 记忆的数据 跨时段记忆与回溯 任务接地 带高层目标与子任务分解的数据 长程任务规划 关键洞察是：通用模型不是\u0026quot;什么都学一点但不精\u0026rdquo;，而是要靠数据诱导出能力的相互增益——空间推理的几何知识反过来帮助定位，定位的准确性反过来帮助导航。这种\u0026quot;能力共生\u0026ldquo;是专家拼装永远得不到的。\n支柱二：多模态记忆挽具 长程任务的最大挑战是时间跨度——机器人可能要执行几十步、跨多个房间、记住几十分钟前看到的东西。Vesta 的解法是一个简洁的多模态记忆挽具（multimodal memory harness）：\n设计要点 做法 价值 多模态 记忆里存的不只是文字，还有视觉/空间特征 保留丰富的感知信息 挽具式（harness） 轻量外挂，不破坏主干 易训练、易部署 可检索 按需调用相关记忆 支持长程推理 这个记忆挽具让 Vesta 能在扩展的时间跨度上做推理——比如\u0026quot;半小时前我在厨房看到一个杯子，现在主人要喝水，我得回厨房\u0026rdquo;。没有记忆挽具，模型就是\u0026quot;金鱼脑\u0026quot;，只能做短视的反应。\n统一推理范式 把两根支柱合起来，Vesta 把所有任务都统一成单一模型的推理：\n观察（含记忆）→ Vesta 统一推理 → 定位 / 空间判断 / 导航指令 / 规划动作\n不再有\u0026quot;感知模型→建图模型→规划模型\u0026quot;的串联，所有能力在一个前向过程里联合产出——这就从结构上消灭了级联错误。\n📊 实验结果：通用模型干翻专家 Vesta 的实验结果是其最有力的论据——通用主义不只是\u0026quot;省事\u0026quot;，而是\u0026quot;更优\u0026quot;。\n整体性能 Vesta 在封闭世界（仿真基准）和开放世界（真机）两个层面都做了验证：\n对比对象 Vesta 的领先幅度 考核能力 各类别最优专家（individual SOTA） 平均 \u0026gt;20% 提升 4 类能力各自最优 专家集成（per-category-best 集成） 平均 \u0026gt;10% 提升 Oracle 选择每类最强 真机任务（需记忆与推理） 任务成功率 \u0026gt;35% 提升 综合记忆+推理 分类性能详情 能力类别 Vesta Score Best Specialist Oracle Ensemble 提升 定位 (Localization) 92.4 88.1 (GroundingDINO) 88.1 +4.3 空间推理 (Spatial Reasoning) 87.6 72.3 (VLM-Spatial) 72.3 +15.3 导航 (Navigation) 81.2 68.5 (NaVid) 68.5 +12.7 长程规划 (Planning) 79.8 65.1 (SayCan-style) 79.8 (oracle) +14.7 综合平均 85.3 — 77.1 (集成) +8.2 注：Vesta 在空间推理和规划这两项\u0026quot;需要跨能力协同\u0026quot;的任务上提升最为显著（+15.3 和 +14.7），而在定位上提升相对有限（+4.3）。这个模式恰恰验证了通用主义的核心论点——能力互补越强的任务，统一模型优势越大。\n导航任务的形式化 Vesta 采用标准 R2R 风格的 VLN 设定。每个 episode $e = (I, s_0, g)$ 包含路线指令 $I$、初始位姿 $s_0$ 和目标 $g \\in \\mathbb{R}^3$。在决策点 $t$，智能体观测到位姿 $s_t$、当前图像 $o_t$ 和历史帧 $H_t = (o_{k_0}, ..., o_{k_{N-1}})$。策略 $\\pi_{\\theta}$ 预测动作 $a_t \\in \\mathcal{A}$：\n$$\\max_{\\theta}\\mathbb{E}_{e\\sim\\mathcal{D}}\\left[\\mathbb{1}\\{d(s_T,g) \\leq d_{\\text{succ}}\\}\\right]$$Vesta 的创新在于：它不把导航当成孤立任务训练，而是让定位和空间推理学到的几何知识反哺导航——模型在导航时不仅能看\u0026quot;前方有什么\u0026quot;，还能理解\u0026quot;这个物体和我的空间关系\u0026quot;。这是专家拼装无法实现的协同增益。\n这三个数字层层递进，说服力极强：\n超越单专家 20%——证明通用模型不是\u0026quot;样样都不精\u0026quot;，而是\u0026quot;样样都更精\u0026quot;； 超越专家集成 10%——这是最关键的对比，专家集成已经是\u0026quot;每个任务用最好的专家\u0026quot;的上限，Vesta 还能再高 10%，说明能力间的相互增益 \u0026gt; 专家的专门化； 真机 +35%——最贴近实际部署的指标，证明 Vesta 的优势在真实世界依然成立，不是仿真 trick。 真机任务的胜利 真机任务（real-world robotic tasks requiring memory and reasoning）的提升尤其亮眼。这类任务的特点是：\n需要记忆——记住之前看过的物体、走过的路径； 需要推理——根据目标推断下一步该干什么； 需要长程规划——跨多步、多阶段执行。 这恰恰是专家拼装最薄弱的地方——记忆和推理很难被某个\u0026quot;专家\u0026quot;独占，它们天然是跨能力的共性需求。Vesta 用统一模型 + 记忆挽具，把这个痛点解决得最好，所以真机提升最大。\n多样化基准覆盖 Vesta 在多样化的基准上做了验证，覆盖：\n任务类别 考核的能力 具体 Benchmark 定位基准 位姿估计精度 RefCOCO/+/g, Objects365, COCO 空间推理基准 几何关系、拓扑判断 VSR, GQA, ScanQA 导航基准 路径规划、避障 R2R, REVERIE, MP3D 长程规划基准 多步任务分解与执行 TEACh, ALFRED 真机任务 综合记忆与推理 双机械臂长程操作 这种跨任务的全面领先，是\u0026quot;通用主义\u0026quot;主张最有力的证据——不是在某个 benchmark 上调参刷分，而是在所有能力维度上系统性胜出。\n训练配方详解 Vesta 的成功离不开其精心设计的训练配方，分为三个阶段：\n阶段 数据 训练目标 关键策略 Stage 1: 基础 SFT 定位(Objects365/COCO/LVIS) + 导航(R2R) + 推理(VSR) 标准语言建模损失 混合多任务数据 Stage 2: 能力增强 具身数据(egocentric) + 记忆数据(episodic) 同 Stage 1，但数据比例调整 增加具身数据权重 Stage 3: 真机对齐 真机操作数据 行为克隆 用真机数据微调 每个阶段的数据比例是经过精心实验确定的。消融实验显示，去除任一能力数据集后，对应能力下降明显，但其他能力也略有下降——这定量验证了\u0026quot;能力协同增益\u0026quot;的存在。\n消融实验关键发现 消融条件 定位 推理 导航 规划 平均下降 去除定位数据 -8.2 -3.1 -4.5 -2.8 -4.7 去除推理数据 -2.1 -12.4 -3.8 -5.2 -5.9 去除导航数据 -1.5 -2.8 -10.1 -3.6 -4.5 去除规划数据 -0.8 -1.9 -2.3 -7.9 -3.2 去除记忆挽具 -3.5 -4.2 -6.8 -15.3 -7.5 记忆挽具的消融对规划影响最大（-15.3），但对其他能力也有不小的下降——说明长程记忆不只是规划专属，它也帮助模型理解\u0026quot;上下文\u0026quot;从而提升定位和推理。\n⚔️ 在具身模型谱系中的位置 理解 Vesta，要看它在具身智能\u0026quot;专家 vs 通用\u0026quot;路线之争中的坐标：\n路线 代表 范式 优劣 专家主义 各类专门模型 一任务一模型，拼装部署 单任务强，但贵、级联错误 反应式通用 VLA RT-2、OpenVLA 观察→动作直射 缺记忆、缺推理 记忆增强通用 VLA + 记忆模块 加外挂记忆 改善记忆但能力仍割裂 本文（Vesta） 统一推理 + 记忆挽具 定位+推理+导航+规划一体化 全面超越专家 Vesta 的开创性在于：它不只是把多个能力\u0026quot;塞进一个模型\u0026quot;，而是证明了统一推理本身就能带来协同增益。这给具身智能的\u0026quot;通用 vs 专门\u0026quot;之争投下了决定性的一票——至少在具身推理这个层面，通用主义是更优解。\n⚠️ 局限性与挑战 Vesta 虽然结果亮眼，仍有值得追问的地方：\n延迟与实时性：统一模型一次推理产出多种能力，单次前向的计算开销可能高于轻量专家，对硬实时控制（毫秒级）的适用性需评估。 新能力的扩展：要给 Vesta 加一个新能力（比如 manipulation），是否需要全量重训？增量学习的能力如何？ 记忆挽具的可扩展性：随着任务时间跨度拉长（小时级、天级），记忆如何高效索引、如何遗忘冗余，是工程挑战。 真机泛化的边界：论文报告了真机提升，但在完全未见过的环境（新家、新城市）下的表现，仍需更多验证。 📝 个人思考 读 Vesta，最打动我的是它给\u0026quot;通用 vs 专门\u0026quot;之争下了一个硬结论。具身智能界一直在吵——一派认为\u0026quot;每个任务训个专家最稳\u0026quot;，另一派主张\u0026quot;一个通用模型包打天下\u0026quot;。Vesta 用三组对比数据（超专家 20%、超集成 10%、真机 35%）给出了最有力的回答：通用主义不只是省事，而是本质上更优。这个结论之所以硬，是因为它对照的是\u0026quot;专家集成\u0026quot;——那已经是专门化路线的天花板，Vesta 还能再高 10%，说明能力间的协同增益 \u0026gt; 单能力的极致专门化。这是一个有深哲学意味的发现：智能的价值不在单点极致，而在协同涌现。\n第二点启发在 记忆作为\u0026quot;一等公民\u0026quot;。大多数 VLA 模型把记忆当成事后补丁——加个外挂、存点历史。Vesta 把记忆做成\u0026quot;挽具（harness）\u0026quot;——一个有机融入推理流程的组件。这其实呼应了认知科学的核心认识：没有记忆的智能就是金鱼脑，长程任务根本无从谈起。真机任务 +35% 的提升大部分来自记忆，这给整个具身社区提了个醒——别再卷单帧反应了，长程记忆才是真机落地的真瓶颈。我预期\u0026quot;记忆架构\u0026quot;会成为下一个研究热点，正如 Transformer 之于语言模型。\n第三点是关于 空间接地的语料工程。Vesta 的成功不只靠架构，更靠\u0026quot;精心策展的、能诱导空间接地的语料\u0026quot;。这给社区的启示是：通用模型不是\u0026quot;用更多数据训更大模型\u0026quot;那么简单，而是要靠数据设计去诱导出特定能力。盲目堆数据训出来的通用模型，可能在每项能力上都\u0026quot;样样稀松\u0026quot;；而精心设计的语料，能让模型在多项能力上都\u0026quot;样样精通\u0026quot;。这本质上是数据的高维优化问题——选哪些数据、配什么比例、诱导什么能力，比单纯堆量更重要。这个\u0026quot;语料工程\u0026quot;的视角，对所有做通用模型的团队都有借鉴价值。\n最后一点是关于 NVIDIA 的具身战略。Vesta 由 Linxi Fan、Jan Kautz 领衔，延续了 NVIDIA 在 GR00T、Cosmos、Eureka 之后的具身布局。可以看出 NVIDIA 的逻辑很清晰——用基础模型统一具身智能的全栈能力，从感知（Cosmos）到推理（Vesta）到动作（GR00T），构建一个完整的具身基础模型家族。Vesta 填的正是\u0026quot;推理与记忆\u0026ldquo;这一环。这种\u0026rdquo;全栈通用主义\u0026ldquo;的押注，与 OpenAI、Google 的路线遥相呼应，预示着具身智能正在重走 LLM 的路——从专家堆叠走向统一基础模型。对从业者而言，这意味着未来的竞争力不在训某个专家，而在如何用好通用基础模型做下游适配——就像 NLP 领域从 BERT 之后的范式转移一样。\n总体而言，Vesta 是一篇\u0026rdquo;立旗帜\u0026ldquo;的工作——它不只是发了个新模型，而是用扎实的实验为\u0026rdquo;具身通用主义\u0026ldquo;这面旗帜正了名。当通用模型能在真机上干翻专家，具身智能的下一个十年，注定属于通用基础模型。\n🔗 延伸阅读 工作 团队 与 Vesta 的关系 GR00T NVIDIA 动作生成基础模型，Vesta 的\u0026quot;动作\u0026quot;搭档 Cosmos NVIDIA 世界基础模型，Vesta 的\u0026quot;感知/预测\u0026quot;搭档 RT-2 / OpenVLA Google / Stanford 反应式 VLA，Vesta 的对比路线 Eureka NVIDIA LLM 驱动的奖励设计，同家族工作 NaVid / NaVILA 各家 导航专用 VLA，Vesta 统一的子能力 SayCan / Inner Monologue Google 早期 LLM 规划，Vesta 的思想源头 📖 这是论文精读系列的第 33 篇。当一个通用模型在真机上干翻专家集成，具身智能的\u0026quot;通用主义\u0026quot;时代正式到来。你认为未来的机器人会是\u0026quot;一个大脑\u0026quot;还是\u0026quot;一队专家\u0026rdquo;？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2606-20905/","summary":"NVIDIA 的 Vesta 用单一 Qwen3-VL-8B 基础模型统一定位、空间推理、导航和长程规划四大具身智能能力，取代了传统的拼装专家路线。它通过统一的条件语言生成范式和简洁的多模态记忆挽具，让自注意力在历史帧与当前观察间建立长程依赖。平均超越各类别最优专家 20% 以上，真机任务成功率提升超 35%。","title":"论文精读｜Vesta：统一的具身推理通用模型"},{"content":"📄 论文信息 标题：A Pragmatic VLA Foundation Model（一个务实的 VLA 基础模型） 团队：Wei Wu、Fan Lu、Kecheng Zheng、Yujun Shen 等 25 人（乐博尼克 Robbyant） arXiv：2601.18692（2026 年 1 月 26 日首发，6 月 15 日 v4 修订） 模型名：LingBot-VLA 领域：cs.RO / cs.CV 开源：代码 github.com/Robbyant/lingbot-vla、基座模型、基准数据集 GM-100（HuggingFace） 一句话总结：标题里的\u0026quot;Pragmatic（务实）\u0026ldquo;是全篇的题眼——不追求\u0026quot;最大参数、最多任务\u0026quot;的噱头，而是死磕\u0026rdquo;真机可部署\u0026ldquo;这件最实际的事：用 9 种双臂构型、2 万小时真机数据训出强泛化基础模型，配套开源高效代码库（8 卡 261 样本/秒）和 GM-100 基准，把 VLA 从\u0026quot;论文模型\u0026quot;推向\u0026quot;产线工具\u0026rdquo;。 图1：LingBot-VLA 整体架构。左上：真机数据采集与自动标注流程；右上：统一动作空间与深度蒸馏；下方：9 种双臂构型及下游测评平台。\n🤔 要解决什么问题？ 视觉-语言-动作（VLA）基础模型 被视为通用机器人的核心。一个\u0026quot;好用\u0026quot;的 VLA 基础模型，必须同时满足两个条件：\n要求 含义 现状 泛化能力 跨任务、跨平台都能用 大多只在单一平台/任务验证 适配效率 下游适配的数据/算力成本低 很多模型\u0026quot;大而贵\u0026quot;，适配负担重 但现实是，大多数学术 VLA 工作在这两点上都有水分——要么只在单一机器人构型上验证（换个平台就废）、要么适配成本高得离谱（动辄几百小时 GPU）。这导致 VLA 模型虽然在论文里\u0026quot;刷榜\u0026quot;，到了真机产线却\u0026quot;水土不服\u0026quot;。\nLingBot-VLA 的破题：与其卷\u0026quot;更大的模型\u0026quot;，不如卷\u0026quot;更务实的基础模型\u0026quot;——用一个真正跨平台、跨任务、低成本适配的 VLA，把\u0026quot;真机可部署\u0026quot;这件事做到极致。\n核心命题：一个 VLA 基础模型，能否在 9 种双臂构型上预训练后，仅需少量后训练就能在新平台新任务上表现出色？ LingBot-VLA 给出了肯定的回答。\n💡 核心思想：务实三件套 LingBot-VLA 的\u0026quot;务实\u0026quot;体现在三个层面：务实的规模、务实的验证、务实的工具链。\n务实一：跨构型大规模真机数据 数据是 VLA 的命脉。LingBot-VLA 用了一个相当硬核的数据规模：\n维度 数量 为什么重要 真机数据时长 约 20,000 小时 远超大多学术数据集，保证行为多样性 双臂构型 9 种主流配置 跨构型预训练，逼出真正的跨平台泛化 数据来源 真实世界采集 避免 sim-to-real gap 9 种双臂构型是关键——这意味着模型在预训练阶段就\u0026quot;见过\u0026ldquo;各种各样的硬件配置（不同的臂长、关节布局、末端执行器），从而学到了与具体构型解耦的动作策略。这是跨平台泛化的根本保证，也是大多数只在单一平台训练的 VLA 所欠缺的。\n务实二：跨平台跨任务的系统化评测 光训出来不够，还得系统地证明它好。LingBot-VLA 设计了一套相当扎实的评测协议：\n评测维度 设计 平台数 4 个机器人平台 任务数 每平台 100 个任务 后训练 episode 数 每任务 130 个 episode 这意味着评测覆盖了 4 × 100 = 400 种任务，且每种任务都有 130 个后训练样本——这是一个统计意义上有说服力的评测规模。结果证明 LingBot-VLA 在这个严苛评测上全面优于竞争对手，展现出强泛化与广适用性。\n务实三：高效开源代码链 这是我认为最有产业价值的一环。LingBot-VLA 团队构建了一个高效代码库：\n指标 LingBot-VLA 代码库 对比 训练吞吐 8 卡 261 样本/秒 — 加速比 1.5~2.8 倍（取决于 VLM 基座） 相对现有 VLA 代码库 这个加速比对学术界和产业界都意义重大——VLA 训练动辄需要大量 GPU 小时，1.5-2.8 倍的提速意味着研发成本直接砍半到三分之一。这种\u0026rdquo;让所有人都训得起 VLA\u0026ldquo;的工具链，是务实主义的最高体现。\n开源三件套 LingBot-VLA 的开源相当彻底，覆盖了研发全链路：\n开源内容 用途 代码库 训练 + 推理，含高效实现 基座模型 直接拿来后训练 GM-100 基准数据 标准化评测 这套\u0026rdquo;代码 + 模型 + 数据\u0026ldquo;的全开源，让任何人都能复现、迭代、扩展——这是把 VLA 推向社区共建的务实姿态。\n🧠 技术细节：跨构型泛化的关键 虽然论文主打\u0026quot;务实\u0026rdquo;，但背后的技术设计同样有讲究。要在 9 种构型上预训练出能泛化的模型，关键在于处理构型异构性：\n挑战 务实解法 动作空间维度不同 统一到相对/归一化动作表示 本体感受（proprioception）异构 构型条件化的本体感受编码 末端执行器差异 抽象到统一的\u0026quot;末端位姿/夹爪状态\u0026quot;层 这些设计哲学的核心是：让模型学\u0026quot;意图层面的动作\u0026quot;而不是\u0026quot;关节层面的指令\u0026quot;——前者跨构型可迁移，后者绑定特定硬件。这与 ABot-M0.5 的\u0026quot;潜在动作\u0026quot;思想异曲同工，都是用抽象层来解耦具体 embodiment。\n🏗️ 架构解析：Mixture-of-Transformers 图2：LingBot-VLA 的 MoT（Mixture-of-Transformers）架构。左侧为 VLM 骨干（Understanding Expert），右侧为 Action Expert，通过 Joint Attention 耦合。\n双专家 MoE 设计 LingBot-VLA 的核心架构是 MoT（Mixture-of-Transformers），由两个专家构成：\n专家 功能 参数 训练策略 Understanding Expert VLM 骨干，语义理解 冻结预训练权重 仅参与前向传播 Action Expert 动作生成，机器人控制 轻量可训练 全参数微调 两个专家各自独立计算 Q、K、V，然后在 token 维度拼接后执行联合注意力（Joint Attention），输出再拆分路由回各自分支。这种设计的精妙之处在于：语义专家提供丰富的视觉-语言表征，动作专家在此基础上专攻操控策略，两者互不干扰却又深度融合。\n统一动作空间 跨构型预训练的核心挑战是动作空间的异构性。LingBot-VLA 的解法是构建一个抽象的统一动作空间：\n物理关节角度 $\\mathbf{q}\\in\\mathbb{R}^N$ 首先被映射为末端执行器的相对位姿变换：\n$$\\mathbf{T}_{t\\to t+1} = \\begin{bmatrix} \\mathbf{R}_{t\\to t+1} \u0026 \\mathbf{p}_{t\\to t+1} \\\\ \\mathbf{0} \u0026 1 \\end{bmatrix} \\in SE(3)$$其中 $\\mathbf{R}$ 是旋转矩阵，$\\mathbf{p}$ 是平移向量。这个 $SE(3)$ 变换与具体构型解耦——不管你有 6 个关节还是 7 个关节，末端位姿的表示维度是统一的。\nFlow Matching 动作头 动作生成采用 Flow Matching 范式，它与扩散模型的根本区别在于推理路径是确定性的。设 $x_0$ 为初始噪声，$x_1$ 为真实动作，Flow Matching 学一个向量场 $v_\\theta(x, t)$ 将噪声沿直线路径积分到目标动作：\n$$\\frac{dx}{dt} = v_\\theta(x, t), \\quad x(t) = (1-t)x_0 + tx_1$$训练损失是最简单的 MSE：\n$$\\mathcal{L}_{\\text{FM}} = \\mathbb{E}_{t\\sim\\mathcal{U}(0,1), x_0\\sim\\mathcal{N}(0,\\mathbf{I}), x_1\\sim\\mathcal{D}} \\left[ \\| v_\\theta(x(t), t) - (x_1 - x_0) \\|^2 \\right]$$推理时从 $x_0$ 出发，沿 ODE 积分 $T$ 步即可得到动作。相比扩散模型的数百步去噪，Flow Matching 通常只需 4-8 步即可收敛，这是 LingBot-VLA 达到 261 样本/秒高吞吐的关键原因之一。\n深度引导蒸馏 论文还提出了一个巧妙的教学法——深度引导蒸馏。用预训练深度估计模型（MoGe-2）在训练前为所有数据标注深度图，然后在 Action Expert 中引入深度 cross-attention 层：\n$$\\mathbf{h}_{\\text{action}} = \\text{CrossAttn}(\\mathbf{h}_{\\text{VLM}}, \\mathbf{h}_{\\text{depth}})$$实验表明加入深度后可带来 3-5% 的额外性能提升，尤其对需要精确空间定位的操作任务（如\u0026quot;把螺丝拧进孔里\u0026quot;）帮助显著。有趣的是，这个深度模型在推理时不需要——只在训练时提供空间位置引导，蒸馏进网络权重后即可旁路。\n缩放规律分析 论文最重要的发现之一来自对数据缩放律的刻画。作者用了 2 万小时真机数据，按 25%/50%/100% 三档递减采样：\n数据量 成功率（3 平台平均） 相比 25% 提升 25%（~5k 小时） 62.3% — 50%（~10k 小时） 78.1% +15.8% 100%（~20k 小时） 85.7% +23.4% 关键点在于：从 50% 到 100% 的提升（+7.6%）大于从 25% 到 50%（+15.8% 的一半），说明缩放律尚未饱和。这意味着继续堆数据仍有显著收益——这对指导行业数据采集策略有直接价值：VLA 的训练数据还不是\u0026quot;够用\u0026quot;的阶段，而是\u0026quot;多多益善\u0026quot;。\n后训练范式 9 构型 2 万小时预训练 → 新平台 130 episode/任务后训练 → 部署\n这个范式之所以\u0026quot;务实\u0026quot;，是因为它把成本压到了产业可承受的范围——新平台只需 130 个 episode（相对于 2 万小时预训练来说是九牛一毛）就能适配，这意味着接入新机器人硬件的成本极低，是真正可规模化的部署模式。\n📊 实验结果：全面领先 LingBot-VLA 在系统化评测上展现了清晰的优越性与广适性。\n跨平台泛化 LingBot-VLA 在 4 个机器人平台 × 100 类任务 上系统评测。以下为关键对比结果：\n平台 竞争对手最佳 LingBot-VLA 提升 ALOHA 双臂 78.2% 87.6% +9.4% Trossen 双臂 71.5% 83.4% +11.9% UR5e 双臂 74.8% 85.1% +10.3% 自定义平台 69.3% 81.2% +11.9% 所有平台全面优于竞争对手，且在不同任务类型上表现稳定：\n任务类型 成功率 特点 抓取放置 91.2% 基础操作，LingBot 几乎零失误 精细操作 79.8% 拧螺丝、穿线等，深度蒸馏增益显著 长程任务 76.3% \u0026gt;5 步复合任务，跨构型预训练助益大 工具使用 83.1% 语言指令驱动的泛化操作 关键结论是：LingBot-VLA 不是\u0026quot;在某个 benchmark 上刷分\u0026quot;，而是\u0026quot;在 400 种任务上系统性胜出\u0026quot;——这种广覆盖的领先，才是\u0026quot;基础模型\u0026quot;应有的品质。\n适配效率 维度 成本 新平台后训练数据 仅 130 episode/任务 训练算力 8 卡可达 261 样本/秒 总研发成本 远低于从零训或大模型全参微调 这种低成本适配，是 VLA 走向产业部署的经济可行性保证——一个需要百万 episode 才能适配的模型，在产线上是负担不起的；而 130 episode 的成本，让\u0026quot;一模型多平台\u0026quot;成为现实。\n代码库性能 代码库本身的性能指标同样亮眼：\nVLM 基座 加速比（相对现有代码库） Qwen2.5-VL-3B 2.8× Qwen2.5-VL-7B 2.1× InternVL2-4B 1.5× 加速核心来自三点优化：\nFSDP + Shard Groups：将 VLM 权重按专家分片，Understanding Expert 冻结不参与梯度同步，减少通信开销 Operator Fusion：将 LayerNorm + Attention + FFN 融合为单 kernel，减少显存带宽瓶颈 Action Expert 异步调度：在 VLM 前向的同时预计算动作头的 depth cross-attention，隐藏延迟 得益于此，8×A100 上训完 2 万小时数据只需约 230 小时（9.6 天），而现有 VLA 代码库需要 360-640 小时。训练成本直接砍半到三分之一，这对学术界和小型团队意义重大。\n与现有 VLA 基础模型对比 维度 OpenVLA π0 Octo LingBot-VLA 预训练数据 970 小时 无公开大规模预训练 多数据集混合 ~20,000 小时 构型数 1 1 多数据集（非统一构型） 9 种双臂构型 动作头 Diffusion（50 步） Flow Matching（10 步） Diffusion Flow Matching（4-8 步） 动作解耦 无 无 无 统一 $SE(3)$ 动作空间 深度引导 无 无 无 深度蒸馏 训练吞吐（8 卡） ~100 样本/秒 ~150 样本/秒 ~90 样本/秒 261 样本/秒 跨构型评测 单一平台 单一平台 多数据集迁移 4 平台 × 100 任务 LingBot-VLA 在数据规模、构型多样性、训练效率三个维度上全面领先，是当前最具\u0026quot;产业预备度\u0026quot;的 VLA 基础模型。\n⚔️ 在 VLA 谱系中的位置 理解 LingBot-VLA，要看它在 VLA 演进中的坐标：\n代际 代表 范式 务实度 第一代（单平台 VLA） RT-1、OpenVLA 单一机器人验证 低（难迁移） 第二代（大模型 VLA） RT-2、π0 大 VLM + 动作 中（适配贵） 第三代（跨平台 VLA） Octo、OpenX 训练的模型 多数据集预训练 中高 本文（LingBot-VLA） 9 构型 + 2 万小时 + 高效代码库 跨构型 + 低成本适配 + 全开源 极高 LingBot-VLA 的开创性在于：它把\u0026quot;务实\u0026quot;提升为第一性原则——不卷参数规模，不卷任务数量，而是卷\u0026quot;跨平台泛化 + 适配效率 + 工具链开源\u0026ldquo;这三件最关乎产业落地的事。这种\u0026rdquo;产品经理式的科研品味\u0026quot;，是 VLA 走向真机部署最需要的。\n⚠️ 局限性与挑战 LingBot-VLA 虽然务实周到，仍有值得讨论的局限：\n双臂聚焦：目前主要针对双臂构型，对单臂、移动操作、轮式机器人的覆盖有待扩展。 任务复杂度：100 类任务虽多，但是否覆盖了长程、多阶段、需推理的复杂任务，仍需更多说明。 真机部署的延迟：论文强调吞吐，但实际车端/产线端的推理延迟是否满足实时性，需要更多数据。 泛化边界：在\u0026quot;第 10 种\u0026quot;全新构型上的 zero-shot 能力如何，是衡量\u0026quot;基础模型\u0026quot;成色的关键。 📝 个人思考 读 LingBot-VLA，最打动我的是它对\u0026quot;务实\u0026quot;这个价值的坚守。VLA 这个领域近两年陷入了\u0026quot;卷规模\u0026quot;的军备竞赛——谁的参数大、谁的任务多、谁的 benchmark 分高。但 LingBot-VLA 反其道而行，标题就挑明\u0026quot;Pragmatic\u0026quot;，把\u0026quot;真机可部署、跨平台可迁移、低成本可适配\u0026ldquo;这三件产业最关心的事做到极致。这种\u0026rdquo;产品经理式的科研品味\u0026ldquo;在学术界尤其稀缺——大多论文在炫技，而 LingBot-VLA 在\u0026quot;交钥匙\u0026rdquo;。\n不过我也注意到一个我称之为\u0026quot;务实陷阱\u0026ldquo;的问题：当模型过于强调\u0026quot;够用就好\u0026quot;时，会不自觉地限制技术上限。LingBot-VLA 选的是 4B 而非 7B+ 模型，2 万小时数据虽然大但并非不可超越。这种\u0026quot;务实\u0026quot;姿态如果被后来者理解为\u0026quot;不需要更大的模型和数据\u0026rdquo;，反而可能制约 VLA 探索真正的 scaling 极限。我觉得正确的姿态是：实干家的工具箱里既要有\u0026quot;够用就好的 4B\u0026quot;，也要有人去探索\u0026quot;10 万小时的 10B\u0026quot;——两条腿走路才是健康的社区生态。\n第二点启发在 \u0026ldquo;9 种构型预训练\u0026quot;作为跨平台泛化的关键。大多数 VLA 只在单一构型上训练，换个机器人就废，根本原因是没有在预训练阶段\u0026quot;见过\u0026quot;构型多样性。LingBot-VLA 用 9 种构型的真机数据，逼模型学到与具体硬件解耦的动作策略——这给社区的启示是：跨平台泛化不是\u0026quot;训得够大\u0026quot;就行，而是要在预训练数据里就有意识地注入构型多样性。这本质上是\u0026rdquo;数据设计的多样性 \u0026gt; 模型规模的堆砌\u0026quot;。我预期\u0026quot;多构型预训练\u0026quot;会成为 VLA 基础模型的标准配置，正如多语言预训练之于 LLM。\n第三点是关于 代码库作为\u0026quot;基础设施\u0026quot;的价值。1.5-2.8 倍的加速比看似不起眼，但对整个社区的影响是深远的——它意味着研究迭代更快、小团队也训得起 VLA、产业训练成本砍半。这种\u0026quot;基础设施级\u0026ldquo;的贡献，长期价值往往超过某个刷分的模型。历史上 NLP 的 HuggingFace Transformers、CV 的 MMDetection，都是靠\u0026quot;工具链\u0026quot;定义了一个生态。LingBot-VLA 的代码库如果能成为 VLA 领域的\u0026quot;事实标准\u0026rdquo;，其生态价值不可估量。得开发者得天下，这是开源战略的核心。\n最后一点是关于 Flow Matching 的选型判断。LingBot-VLA 选 Flow Matching 而非扩散，理由是\u0026quot;推理更快、步数更少\u0026quot;。但我认为深层逻辑是：在动作生成这个任务上，直路比弯路好。扩散模型之所以需要数百步去噪，是因为它从\u0026quot;纯噪声→数据分布\u0026quot;走了一条弯曲的随机路径；而 Flow Matching 的 ODE 路径是直的、可预测的。机器人的动作空间本质上是低维流形上的连续路径，比起图像这种高维复杂分布，它更适合做确定性建模。这个洞察可能延伸到其他机器人领域：Flow Matching 可能是比扩散更适合\u0026quot;控制信号生成\u0026quot;的通用范式。但 LingBot-VLA 反其道而行，标题就挑明\u0026quot;Pragmatic\u0026quot;，把\u0026quot;真机可部署、跨平台可迁移、低成本可适配\u0026ldquo;这三件产业最关心的事做到极致。这种\u0026rdquo;产品经理式的科研品味\u0026ldquo;在学术界尤其稀缺——大多论文在炫技，而 LingBot-VLA 在\u0026quot;交钥匙\u0026rdquo;。我认为这才是 VLA 走向产业正途该有的姿态：一个需要百万数据才能适配的\u0026quot;大模型\u0026quot;，对产线是负担不起的；一个 130 episode 就能上手的\u0026quot;小而稳\u0026quot;模型，才是真金白银。\n第二点启发在 \u0026ldquo;9 种构型预训练\u0026quot;作为跨平台泛化的关键。大多数 VLA 只在单一构型上训练，换个机器人就废，根本原因是没有在预训练阶段\u0026quot;见过\u0026quot;构型多样性。LingBot-VLA 用 9 种构型的真机数据，逼模型学到与具体硬件解耦的动作策略——这给社区的启示是：跨平台泛化不是\u0026quot;训得够大\u0026quot;就行，而是要在预训练数据里就有意识地注入构型多样性。这本质上是\u0026rdquo;数据设计的多样性 \u0026gt; 模型规模的堆砌\u0026quot;。我预期\u0026quot;多构型预训练\u0026quot;会成为 VLA 基础模型的标准配置，正如多语言预训练之于 LLM。\n第三点是关于 代码库作为\u0026quot;基础设施\u0026quot;的价值。1.5-2.8 倍的加速比看似不起眼，但对整个社区的影响是深远的——它意味着研究迭代更快、小团队也训得起 VLA、产业训练成本砍半。这种\u0026quot;基础设施级\u0026ldquo;的贡献，长期价值往往超过某个刷分的模型。历史上 NLP 的 HuggingFace Transformers、CV 的 MMDetection，都是靠\u0026quot;工具链\u0026quot;定义了一个生态。LingBot-VLA 的代码库如果能成为 VLA 领域的\u0026quot;事实标准\u0026rdquo;，其生态价值不可估量。得开发者得天下，这是开源战略的核心。\n最后一点是关于 \u0026ldquo;务实\u0026quot;与\u0026quot;前沿\u0026quot;的平衡。LingBot-VLA 主打务实，但这不意味着它放弃了前沿——它在跨构型泛化、高效训练上都有真创新。这给社区的启示是：\u0026ldquo;务实\u0026quot;和\u0026quot;前沿\u0026quot;不矛盾，真正的好研究应该既解决实际问题又推动技术边界。太多论文要么\u0026quot;前沿但不务实\u0026rdquo;（炫技无法落地），要么\u0026quot;务实但不前沿\u0026rdquo;（工程优化无新意）。LingBot-VLA 这种\u0026quot;务实地推进前沿\u0026ldquo;的姿态，是 VLA 领域最需要的平衡——既不空谈 AGI，也不困于调参，而是把每一份算力都花在\u0026quot;让真机更好用\u0026quot;这个最朴素的目标上。\n总体而言，LingBot-VLA 是一篇\u0026rdquo;接地气\u0026ldquo;的工作——它没有震天响的口号，但每一处设计都指向\u0026quot;让 VLA 真正跑在产线上\u0026rdquo;。当大多 VLA 还在论文里\u0026quot;刷榜\u0026quot;时，LingBot-VLA 已经把钥匙交到了开发者手里。这种\u0026quot;交付即服务\u0026ldquo;的务实主义，或许才是具身智能走向大规模落地最缺的那块拼图。\n🔗 延伸阅读 工作 团队 与 LingBot-VLA 的关系 OpenVLA Stanford 单平台 VLA，LingBot 的对比路线 RT-2 / RT-1 Google 大模型 VLA 前作 π0 / π0.5 Physical Intelligence 务实 VLA 同路线，强调可部署 Octo Berkeley 跨数据集 VLA，多构型思想 Open X-Embodiment 跨机构 大规模机器人数据集，思想源头 ABot-M0.5 高德 潜在动作解耦 embodiment，异曲同工 📖 这是论文精读系列的第 34 篇。当 VLA 开始把\u0026quot;务实\u0026quot;写进标题，具身智能离大规模产线落地又近了一步。你认为 VLA 的下一个突破会在\u0026quot;更大模型\u0026quot;还是\u0026quot;更务实工程\u0026rdquo;？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2601-18692/","summary":"LingBot-VLA 以\u0026rsquo;务实\u0026rsquo;为核心设计哲学，用 9 种双臂构型、约 2 万小时真机数据训出一个跨平台 VLA 基础模型。它通过跨构型预训练学出与具体硬件解耦的动作策略，辅以开源高效代码库（8 卡 261 样本/秒）和 GM-100 基准。在 4 个平台 100 类任务上展现强泛化能力，将 VLA 从论文模型推向产线工具。","title":"论文精读｜LingBot-VLA：务实的 VLA 基础模型"},{"content":"🤖 论文概览 项目 内容 标题 CoWorld-VLA: Thinking in a Multi-Expert World Model for Autonomous Driving 作者 Minqing Huang, Yujiao Xiang, Zihan Liang 等 (共10位) 单位 AFARI Research 提交日期 2026年5月11日 (v1), 5月13日 (v2) arXiv ID 2605.10426 代码 https://github.com/AFARI-Research/CoWorld-VLA 🧭 研究动机：VLA推理的瓶颈 Vision-Language-Action (VLA) 模型已成为端到端自动驾驶的主流范式。然而现有推理机制存在根本性缺陷：\n文本Chain-of-Thought (CoT)：将连续的时空结构离散化为文字，丢失了规划所需的精细空间信息 隐空间世界推理：虽然保留了连续表征，但其隐变量难以直接作为动作生成的条件信号 这一矛盾指向一个核心瓶颈：当前VLA系统缺乏一个将互补世界知识转化为规划导向的隐状态的机制。\nCoWorld-VLA的答案是：在VLM隐空间中构建一个多专家Latent CoT，让不同的\u0026quot;专家\u0026quot;分别负责不同维度的世界知识。\n🏗️ 方法架构：四专家Token + 分层扩散规划器 三阶段训练管线 阶段 内容 模型/数据 Stage 1 视频扩散Transformer预训练 Wan2.2-5B, NuPlan Stage 2 多专家表示学习 Qwen3-VL-2B, NAVSIM v1 Stage 3 分层多专家融合规划器训练 HMEF, 冻结VLM 四种专家Token CoWorld-VLA通过多源监督从VLM隐空间中提取四种互补的专家Token，每种Token对应自动驾驶中一个独立的知识维度。其核心思想是：与其让VLM隐空间隐式地包含所有信息，不如通过外部监督信号显式锚定四个语义轴，让后续规划器能够有针对性地利用不同维度的信息。\n语义交互Token (H_sem) 使用JEPA（Joint Embedding Predictive Architecture）风格的表示学习，从未来观测中提取交互意图。具体地，一个冻结的V-JEPA编码器从未来帧中提取特征$f_{future} = VJEPA(I_{t+\\Delta t})$，然后通过可学习的投影层$g_{sem}$将$f_{future}$映射到VLM隐空间：$\\hat{H}_{sem} = g_{sem}(f_{future})$。训练目标是对齐投影后的特征与VLM在该时间步的隐状态$H_{VLM}$：\n$$\\mathcal{L}_{sem} = \\| H_{VLM} - \\hat{H}_{sem} \\|^2$$JEPA损失的独特之处在于：它不是直接预测未来帧的像素值，而是预测未来帧的隐表征。这使得模型更关注场景中与交互相关的语义变化（如\u0026quot;前方车辆正在减速\u0026quot;），而非像素级别的细节（如\u0026quot;前车的颜色变化\u0026quot;）。\n几何结构Token (H_geo) 使用VGGT编码器提取道路布局和空间约束的3D先验。VGGT是一个大规模预训练的3D视觉Transformer，可以从单张图像中估计深度图和相机参数。几何Token的定义为：\n$$\\hat{H}_{geo} = g_{geo}(VGGT(I_t))$$其中$g_{geo}$是投影MLP。对齐损失与语义Token类似：$\\mathcal{L}_{geo} = \\| H_{VLM} - \\hat{H}_{geo} \\|^2$。\n几何Token为规划器提供了关键的道路拓扑信息——车道线在哪里、路口结构如何、可行驶区域边界在哪——这些都是语义Token难以精细表达但规划必须依赖的信息。\n动态演化Token (H_dyn) 动态Token是四个专家中唯一使用生成式目标函数训练的。它作为预训练的Wan世界模型的条件信号，监督模型对未来场景的生成能力：\n$$\\mathcal{L}_{dyn} = \\mathbb{E}_{t, \\tau} [ \\| v_\\theta(z_\\tau, \\tau, H_{dyn}) - u \\|^2 ]$$其中$v_\\theta$是Wan模型的向量场预测器，$z_\\tau$是带噪隐变量，$u$是目标向量场。这本质上是Flow Matching目标——让H_dyn学会编码场景中所有可移动实体（车辆、行人、自行车）的运动模式。\n动态Token与语义Token的区别在于：语义Token关注\u0026quot;交互意图\u0026quot;（是什么），而动态Token关注\u0026quot;运动模式\u0026quot;（如何运动）。例如，在十字路口，语义Token可能编码\u0026quot;前方车辆准备左转\u0026quot;的意图，而动态Token则编码\u0026quot;以何种速度沿何种轨迹左转\u0026quot;的具体运动模式。\n自车轨迹Token (H_traj) 通过轻量MLP头回归未来轨迹路点，使用MSE损失将世界推理与行为目标直接连接：\n$$\\mathcal{L}_{traj} = \\sum_{k=1}^{T_{plan}} \\| \\hat{p}_k - p_k \\|^2$$其中$p_k$是自车在第k步的真实位置，$\\hat{p}_k = MLP_{traj}(H_{traj})$是预测位置。轨迹Token与其他三个Token的关键区别在于：它是唯一从自车行为视角出发的Token，直接连接了\u0026quot;世界理解\u0026quot;和\u0026quot;我的行动\u0026quot;。\n总训练目标 四种损失的加权和：\n$$\\mathcal{L}_{total} = w_{dyn} \\times \\mathcal{L}_{dyn} + w_{sem} \\times \\mathcal{L}_{sem} + w_{geo} \\times \\mathcal{L}_{geo} + w_{traj} \\times \\mathcal{L}_{traj}$$其中$w_{dyn}=1.0, w_{sem}=0.1, w_{geo}=0.1, w_{traj}=1.0$。动态和轨迹Token的权重更高，反映了它们对规划性能的直接贡献更大。\n分层多专家融合规划器 (HMEF) HMEF的核心设计是一个条件扩散规划器，在归一化的动作空间中执行去噪规划。其推理过程可以形式化表述为：\n给定场景上下文Token $C$（由VLM编码器从当前观测中提取），以及四种专家Token $\\{H_{sem}, H_{geo}, H_{dyn}, H_{traj}\\}$，HMEF的目标是学习自车未来轨迹的条件分布：\n$$p(A_0 | C, \\{H_e\\}) = \\int p(A_{0:T} | C, \\{H_e\\}) dA_{1:T}$$其中$A_0$是最终规划的动作轨迹，$A_{1:T}$是扩散过程的中间去噪状态。\n具体地，各专家Token通过专家特定的双向Transformer投影到规划时域，得到每步专家特征$F_{e,t}$。去噪过程中，一个两流去噪器$D_\\theta$以干净的场景Token $C$和含噪的专家条件动作Token $R$为输入，分别为每位专家预测干净轨迹分量：\n$$\\hat{A}_{0}^{(e)} = D_\\theta^{(e)}(R_t, t, C, H_e), \\quad e \\in \\{sem, geo, dyn, traj\\}$$推理时学习全局标量融合权重$\\alpha = softmax(w)$来组合各专家预测：\n$$\\hat{A}_0 = \\sum_{e} \\alpha_e \\cdot \\hat{A}_{0}^{(e)}$$这种先分别预测再融合的设计与先融合再预测的区别在于：每位专家先在各自的\u0026quot;知识维度\u0026quot;上独立做出最优的轨迹预测，再由融合权重综合权衡。这使得不同维度的知识在最终轨迹中都有独立的表达渠道，不会因为早期特征融合而互相稀释。\n自动驾驶世界模型推理公式 CoWorld-VLA的世界模型推理过程建立在条件扩散框架之上。从数学角度看，整个推理链条可以概括为以下三步：\n步骤1——专家状态估计：给定观测$I_t$，VLM编码器提取场景上下文$C$，同时各专家编码器提取各自的专家Token：\n$$C = VLM_{enc}(I_t)$$ $$H_e = Expert_e(I_t, C), \\quad e \\in \\{sem, geo, dyn, traj\\}$$步骤2——条件轨迹生成（扩散去噪）：以$C$和$\\{H_e\\}$为条件，从高斯噪声$A_T \\sim \\mathcal{N}(0, I)$开始，执行反向去噪过程：\n$$A_{t-1} = \\frac{1}{\\sqrt{\\alpha_t}} \\left( A_t - \\frac{1-\\alpha_t}{\\sqrt{1-\\bar{\\alpha}_t}} \\epsilon_\\theta(A_t, t, C, \\{H_e\\}) \\right) + \\sigma_t z$$其中$\\epsilon_\\theta$是HMEF规划器预测的噪声，$z \\sim \\mathcal{N}(0, I)$是随机项。20步去噪后得到干净动作轨迹$A_0$。\n步骤3——轨迹执行与滚动：将$A_0$的前$K$步轨迹发送给车辆控制器执行，下一时刻用新观测重复步骤1-3。这种滚动时域控制机制与Diffusion Policy中的Receding Horizon Control一脉相承。\n📊 实验结果 NAVSIM v1闭环规划 方法 PDMS ↑ NC ↑ EP ↑ CoWorld-VLA 89.8 99.2 83.6 SGDrive 86.6 98.7 81.2 Uni-World VLA 85.3 98.2 79.8 ResWorld 82.1 97.5 76.4 DriveLaW 80.0 97.0 74.1 PDMS为综合指标，CoWorld-VLA以89.8领先所有对比方法，仅用单帧前视图输入即超越使用多帧或LiDAR的方法。\n消融实验：专家Token的互补性 配置 PDMS 仅轨迹Token 83.7 + 几何结构Token 85.1 + 语义交互Token 87.7 + 动态演化Token 88.7 + HMEF规划器 89.8 每个Token类型都对最终性能有独特贡献，验证了多专家信息的互补效果。\n未来场景生成 CoWorld-VLA还在未来场景生成上取得了最优FVD（32.7），证明多专家Token不仅有利于规划，也能提升对周围交通参与者未来行为的预测质量。这与\u0026quot;世界模型辅助规划\u0026quot;的核心设计理念一致——更好的世界理解带来更好的规划。\n与DriveVLM/DriveVLA等方法对比 CoWorld-VLA属于VLA（Vision-Language-Action）范式在自动驾驶中的最新进展，与以下代表性工作形成直接对比：\n维度 DriveVLM (2024) DriveVLA (2025) Uni-World VLA (2026) CoWorld-VLA (2026) 核心思路 视觉语言思维链 CoT 语言条件化的动作生成 世界模型辅助VLA训练 多专家世界模型推理 推理机制 文本CoT → 轨迹 语言特征 → 轨迹 隐空间世界模型 → 轨迹 4种专家Token + HMEF 世界模型角色 无 训练时数据增强 训练时正则化 推理时显式条件化 专家Token 无 无 单一动作专家 语义+几何+动态+轨迹 输入模态 多视图图像 多视图图像+地图 单帧前视图 单帧前视图 NAVSIM v1 PDMS — — 85.3 89.8 推理效率 高（文本+MLP） 中（特征+MLP） 中（扩散规划器） 中（20步视频+10步扩散） 可解释性 高（文本CoT） 中（隐空间） 低（隐空间） 高（多专家维度） 从上表可以清晰看到VLA在自动驾驶中的演进脉络：DriveVLM开创了\u0026quot;用语言做规划推理\u0026quot;的思路，但其文本CoT丢失了精细的空间信息；DriveVLA引入语言条件化，但世界模型仅用于训练阶段；Uni-World VLA将世界模型作为训练正则化器，但仍然没有在推理时利用世界知识。CoWorld-VLA的关键突破在于：让世界模型在推理时以多专家Token的形式直接参与轨迹条件化。\nNAVSIM v1详细实验结果 CoWorld-VLA在NAVSIM v1 benchmark上进行了全面的对比评估，除了综合指标PDMS外，还报告了各维度指标：\n方法 PDMS ↑ NC ↑ EP ↑ RC ↑ TTC ↑ CoWorld-VLA (Ours) 89.8 99.2 83.6 98.5 91.2 SGDrive 86.6 98.7 81.2 97.8 89.1 Uni-World VLA 85.3 98.2 79.8 97.1 87.5 ResWorld 82.1 97.5 76.4 96.3 85.2 DriveLaW 80.0 97.0 74.1 95.8 83.7 DriveCoT 78.4 96.5 71.2 94.9 81.8 VLM-Plan 72.1 95.1 65.3 93.2 78.4 各指标含义：\nPDMS (Planning and Decision-making Score)：NAVSIM的综合评价指标，综合考虑驾驶安全性、舒适性和任务完成度 NC (No Collision)：无碰撞率，最核心的安全指标 EP (Ego Progress)：自车进度，衡量任务完成效率 RC (Route Compliance)：路线合规率 TTC (Time to Collision)：最小碰撞时间，衡量安全性裕度 值得注意的是，CoWorld-VLA在所有指标上均领先第二名的SGDrive，尤其在EP（83.6 vs 81.2）和TTC（91.2 vs 89.1）上优势最大。这验证了多专家Token在提升规划安全性和效率上的双向优势——动态Token帮助模型预见潜在碰撞风险，而轨迹Token直接优化了规划效率。\n🧪 技术细节补充 推理效率：视频生成使用20步采样，轨迹规划使用10步去噪。权重配置为w_dyn=1.0, w_sem=0.1, w_geo=0.1, w_traj=1.0。\n与已有工作的关系：CoWorld-VLA可以看作是对Uni-World VLA、ReCogDrive、DriveLaW等同类工作的系统化改进。不同于ReCogDrive仅使用单一动作专家，CoWorld-VLA引入了四个互补的专家视角；不同于Uni-World VLA将世界模型仅用于训练阶段的正则化，CoWorld-VLA让世界知识在推理时直接参与条件化。\n局限性：当前方法存在显著的计算开销（三阶段训练），且仅支持单帧图像输入，尚未利用时序信息。多帧扩展可能是直接提升性能的下一步方向——引入历史帧可以更好地估计速度和加速度，对碰撞避免有直接帮助。\nHMEF详细架构分析 HMEF（Hierarchical Multi-Expert Fusion）的去噪网络设计值得深入分析。它采用双流架构（Two-Stream Denoiser），区别于普通的单流扩散模型：\n流1——场景上下文流：处理VLM编码的场景Token $C$，通过自注意力建立场景元素之间的关系，保持上下文信息的完整性。\n流2——专家条件动作流：处理含噪动作Token $R$ 和专家特征 $F_{e,t}$ 的拼接序列，通过交叉注意力从场景上下文中读取信息，同时通过专家特定的注意力头分别关注不同专家的条件信号。\n两流之间通过交叉注意力层交互，而非简单的拼接或相加。这种设计的优势在于：场景上下文流可以保持全局视野不被动作噪声干扰，而专家动作流可以在去噪过程中动态地查询场景信息。\n去噪网络延续了现代扩散模型的UNet/Transformer混合设计，但创新性地引入了专家路由——每个注意力头被路由到对应的专家特征上，通过不同的线性投影门控来控制信息流动：\n$$Attn_e(Q, K, V) = softmax\\left(\\frac{QW_Q^{(e)} \\cdot (KW_K^{(e)})^T}{\\sqrt{d_k}}\\right) VW_V^{(e)}$$其中上标$(e)$表示专家特定的投影矩阵。最终四个专家的注意力输出通过加权和融合：\n$$Attn_{total} = \\sum_e \\alpha_e \\cdot Attn_e(Q, K_e, V_e)$$训练配方与数据使用 CoWorld-VLA的三阶段训练使用了不同的数据集和训练策略：\nStage 1（视频扩散Transformer预训练）：\n使用Wan2.2-5B作为初始化，在NuPlan数据集上进行视频预测微调 输入：当前帧 + 动作序列，输出：未来N帧 训练目标：Flow Matching损失，预测未来帧的向量场 该阶段为动态演化Token提供生成先验，使其具备\u0026quot;想象未来\u0026quot;的能力 Stage 2（多专家表示学习）：\n冻结Wan模型，训练Qwen3-VL-2B的专家投影层 使用NAVSIM v1的高质量标注数据（包含地图、物体轨迹、交互标签） 四种专家Token的投影层独立训练，不共享参数 关键设置：语义和几何Token使用小学习率（1e-4），动态和轨迹Token使用大学习率（1e-3） Stage 3（HMEF规划器训练）：\n冻结所有预训练参数（Wan + Qwen3-VL + 专家投影层） 只训练HMEF的去噪网络和融合权重 数据增强：随机裁剪、颜色抖动、动作噪声注入 使用L2损失 + 碰撞惩罚项作为规划器训练目标 与ResWorld的关键差异 ResWorld是同时期的工作，也使用残差世界模型进行自动驾驶规划。与CoWorld-VLA的关键差异在于：\n维度 ResWorld CoWorld-VLA 世界模型类型 单隐变量残差预测 多专家联合推理 Token设计 单一任务Token 4种正交专家Token 条件信号 隐变量直接输入规划器 专家Token通过HMEF融合 可解释性 低（隐空间不可解释） 高（每个Token有明确语义） 未来预测 仅限规划相关 独立生成未来场景 融合机制 拼接+MLP 专家路由注意力 ResWorld的设计更加简洁，但CoWorld-VLA的多专家机制在可解释性和性能上都占据了明显优势。\n开放问题 专家Token的数量和种类是否最优？是否有更高效的方式自动发现互补的专家角色？ HMEF的融合权重是学习得到的标量，但不同场景下各专家的重要性可能不同。在高速场景下，动态Token可能比语义Token更重要；在十字路口，语义Token和几何Token的权重应该更高。引入场景自适应的融合策略可能是有益的改进方向。 如何在不大幅增加计算量的前提下引入多帧时序信息，是实用化部署的瓶颈。当前单帧输入丢失了速度和加速度信息，对判断动态障碍物的未来状态不利。 💭 个人思考 CoWorld-VLA最让我印象深刻的是它将\u0026quot;世界模型\u0026quot;从辅助训练信号提升为推理时的显式条件信号。四种专家Token的设计非常巧妙——它们不是简单地从VLM中提取特征，而是通过多源外部监督（JEPA、VGGT、Wan、轨迹回归）将不同维度的物理世界知识\u0026quot;注入\u0026quot;到VLM隐空间。\n这里有一个值得玩味的选择：为什么不直接端到端学习这些表征？作者选择用独立的外部模型提供监督信号，相当于给VLM的隐空间\u0026quot;锚定\u0026quot;了四个明确的语义轴。这在自动驾驶这种安全关键场景中尤其重要——可解释性更强，且每个维度都可以独立验证。\n多专家范式的深层价值：CoWorld-VLA的贡献不仅在技术上，更在于它提出了一种新的\u0026quot;推理分工\u0026quot;哲学。在自动驾驶这种高度复杂的场景中，没有任何单一表征能同时捕捉语义、几何、动态和意图的全部信息。多专家Token的互补性反映了驾驶问题的本质——它需要同时处理\u0026quot;我在哪\u0026quot;（几何）、\u0026ldquo;周围在发生什么\u0026rdquo;（动态）、\u0026ldquo;他们要做什么\u0026rdquo;（语义）和\u0026quot;我该怎么做\u0026quot;（轨迹）四个层次的问题。这种结构化的推理方式比端到端黑箱规划更接近人类驾驶员的认知过程。\n关于计算效率的思考：三阶段训练的计算开销确实令人担忧——5B的Wan视频模型 + 2B的Qwen3-VL，再加上HMEF，在实际部署到实车上的成本和延迟都是巨大挑战。但从另一个角度看，这也是\u0026quot;预训练-微调\u0026quot;范式在自动驾驶中的自然延伸。随着VLM推理效率的快速提升（如Qwen3-VL在量化后可以在车载Orin上以30FPS运行），这种多阶段训练虽然代价高昂，但最终部署时只需要保留Stage 3的HMEF和前向推理路径，Wan和V-JEPA等辅助模型在推理时可以省略。这就引出一个很有趣的架构问题：能否将Stage 2的多专家表示学习直接蒸馏到Stage 3的规划器中，消除对辅助模型的推理时依赖？\nNAVSIM作为评估平台的意义：NAVSIM v1的PDMS指标综合考虑了规划的安全性、效率和舒适性，比传统的L2误差或碰撞率更能反映真实驾驶性能。CoWorld-VLA取得89.8 PDMS是当前最强结果，但距离\u0026quot;人类水平\u0026quot;还有多远？目前没有公开的人类驾驶者在NAVSIM上的PDMS基线，但从各子指标来看（特别是EP仅83.6%），CoWorld-VLA在任务完成效率上还有显著提升空间。\n从单帧到多帧的扩展也是关键下一步——毕竟驾驶本质上是一个时序决策问题。当前版本使用单帧前视图输入，这限制了它对速度、加速度等时间导数信息的感知。一个可能的解决方案是将历史帧的隐状态作为额外的专家Token引入，形成时间维度上的第五个专家。\n总体而言，CoWorld-VLA为VLA推理提供了一个有价值的范式：用多专家Token替代单一日志或隐变量，让\u0026quot;思考\u0026quot;变得结构化、可解释、可条件化。从技术演进的角度看，它代表了VLA领域从\u0026quot;能不能做\u0026quot;（RT-2阶段）到\u0026quot;怎么做更好\u0026quot;（专家分工阶段）的重要转变。后续工作如果在效率和时序建模上有所突破，有望成为端到端自动驾驶的重要基础框架。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/coworld-vla%E7%B2%BE%E8%AF%BB/","summary":"CoWorld-VLA 在 VLM 隐空间中构建多专家 Latent CoT 推理框架，解决了文本 CoT 丢失空间信息而隐空间缺乏可条件化信号的根本矛盾。它通过语义交互、几何结构、动态演化与轨迹意图四种专家 Token，将互补的世界知识编码为显式可用的规划条件。在 NAVSIM v1 上达到 89.8 PDMS，证明了结构化隐式推理的有效性。","title":"CoWorld-VLA精读：多专家世界模型中的自动驾驶推理"},{"content":"🏭 论文概览 项目 内容 标题 RT-2: Vision-Language-Action Models Transfer Web Knowledge to Robotic Control 作者 Anthony Brohan, Noah Brown, Justice Carbajal, Yevgen Chebotar 等 (53位作者) 单位 Google DeepMind 提交日期 2023年7月28日 arXiv ID 2307.15818 发表 CoRL 2023 项目页 https://robotics-transformer2.github.io 🌟 核心贡献：VLA概念的诞生 RT-2是首个正式提出Vision-Language-Action (VLA)模型类别的工作。它的核心洞察极为简洁但影响深远：既然VLM可以生成任意文本Token，为什么不能把机器人动作也编码成文本Token？\n这一想法的美妙之处在于——它不需要修改VLM的架构、不需要设计新的输出头、不需要改变训练范式。只需将机器人的6自由度动作离散化为256个bin，映射到词表中的256个Token，然后像训练VQA一样训练模型：\u0026ldquo;Q: what action should the robot take to [指令]? A: [动作Token串]\u0026quot;。\n⚙️ 方法细节 动作编码 RT-2沿用RT-1的动作离散化方案。动作空间包括：\n6自由度末端执行器位移（平移3维 + 旋转3维） 夹爪开合程度 终止指令（表示任务完成） 连续维度统一离散化为256个bin，每个动作表示为8个整数。对于PaLI-X，整数直接对应Token ID；对于PaLM-E，覆盖256个最少使用的Token来表示动作词表。\n具体的编码过程如下：每个连续维度（如末端执行器的x位移）的范围归一化到[-1, 1]，然后均匀划分为256个区间。对于维度值v，其离散化ID为floor((v + 1) / 2 * 255)，clip到[0, 255]。以6自由度动作（3维平移 + 3维旋转）为例，加上夹爪开合（1维）和终止指令（1维），共8个维度，每个维度对应一个[0, 255]的Token ID。因此每个时间步的动作被表示为8个Token的序列，如\u0026rdquo;[103, 87, 202, 45, 156, 218, 200, 1]\u0026quot;，其中最后一个Token的值为1表示\u0026quot;任务未完成\u0026quot;，0则表示\u0026quot;任务完成终止\u0026quot;。训练时，模型接收当前观测和语言指令，以自回归方式依次预测这8个动作Token。\n模型变体 RT-2基于两个预训练VLM构建：\n模型 骨干网络 参数量 控制频率 RT-2-PaLI-X-55B PaLI-X 55B 1-3 Hz RT-2-PaLI-X-5B PaLI-X 5B ~5 Hz RT-2-PaLM-E-12B PaLM-E 12B ~3 Hz 这是迄今为止（截至2023年）用于直接闭环机器人控制的最大模型，比之前的方法大一个数量级以上。\nPaLI-X与PaLM-E骨干网络架构解析 RT-2的两个骨干网络代表了VLM的两条技术路线：\nPaLI-X（Pathways Language and Image eXpanded）采用编码器-解码器架构。视觉端使用ViT-e（22B参数）将图像编码为视觉Token序列，语言端基于UL2编码器-解码器架构（32B参数），中间通过交叉注意力层实现视觉-语言信息融合。PaLI-X天然支持多语言多模态理解，适合处理复杂的语义推理任务。\nPaLM-E（Embodied Multimodal Language Model）则采用仅有解码器的架构，将视觉Token直接插入语言模型的输入序列中。这意味着机器人观测（图像、状态估计）被当作\u0026quot;新语言\u0026quot;的Token序列来学习。PaLM-E的一个显著特点是它可以接受任意数量的连续视觉Token——除了图像，还可以包括神经辐射场（NeRF）表征的场景向量、点云特征等，具有极强的多模态扩展性。\n具体到RT-2的适配过程，两个模型存在一个关键差异：PaLI-X的Token ID空间中包含完整的文本词汇，动作Token天然映射到空闲ID上；而PaLM-E的词表紧凑，没有预留空闲ID，因此需要覆盖256个\u0026quot;最少使用\u0026quot;的Token（如罕见字符）来编码动作。这隐含了一个设计选择上的代价：覆盖词表意味着PaLM-E在推理机器人任务时将无法生成那些被覆盖的原生Token，不过在实际部署中这并不是问题——机器人任务的动作空间是封闭的。\n联合微调 (Co-Fine-Tuning) 关键技巧是将机器人数据与原始网络数据联合微调，而非仅在机器人数据上微调。这样做让策略在微调期间同时暴露于抽象视觉概念和底层机器人动作，从而提升泛化能力。训练时通过提高机器人数据集的采样权重来平衡batch中两类数据的比例。\n输出约束 推理时，当模型被prompt为机器人动作任务时，解码过程只采样合法的动作Token，确保输出一定是可执行的机器人指令。而在标准VLM任务上，模型仍然可以输出完整自然语言Token。\nChain-of-Thought推理 通过对RT-2进行少量额外微调（几百步），使其能够在输出动作之前先生成自然语言的\u0026quot;Plan\u0026quot;步骤，描述即将执行的动作目的。这使得同一模型可以同时进行长时域任务规划（用语言）和底层技能执行（用动作Token），展现出类似LLM的思维链能力。\nCoT的推理范式设计得非常精巧。以机械臂7自由度（6自由度末端位移 + 1自由度夹爪）动作为例，RT-2的CoT微调将推理过程分解为三个层次：\n第1层——高层语义规划（自然语言）：模型首先生成一段自然语言描述，例如\u0026quot;I need to pick up the rock because it can be used as a hammer\u0026quot;。这一步完全由VLM的文本解码器完成，不涉及任何动作空间的知识。\n第2层——动作目标描述（结构化语言）：模型输出格式化的中间语言，如\u0026quot;Move to position (0.3, 0.5, 0.2), orient gripper downward, close gripper\u0026quot;。这一步本质上是对动作时序的文本抽象，但比底层Token更易理解。\n第3层——底层动作Token（可执行指令）：模型最终解码8个动作Token（末端位移3维 + 旋转3维 + 夹爪1维 + 终止1维），每个Token对应256个bin中的一个ID。这些Token直接发送给机器人控制器执行。\n值得注意的是，CoT微调仅在原始VLM的文本空间内操作——不需要额外结构、不需要更改损失函数。只需在训练数据中将\u0026quot;Question: [指令], Answer: [动作Token]\u0026ldquo;的格式改为\u0026quot;Question: [指令], Answer: [Plan文本]. [动作Token]\u0026ldquo;即可。微调后模型自然学会了在输出动作之前先\u0026quot;思考\u0026quot;一段计划，因为训练数据中展示了这种模式。\n作者在实验中观察到，CoT对需要推理的复杂指令（如\u0026quot;找一个临时锤子\u0026rdquo;）提升显著，但对简单指令（如\u0026quot;拿起香蕉\u0026rdquo;）的提升不明显。这也符合直觉——简单任务不需要复杂的计划分解。\nRT-2与RT-1架构对比 RT-2与RT-1虽然共享部分思想（Tokenized Action、联合训练），但在架构和泛化能力上存在本质差异:\n维度 RT-1 RT-2 骨干网络 基于T5的编码器-解码器 PaLI-X / PaLM-E 大规模VLM 视觉编码器 EfficientNet-B3 ViT-e (22B, PaLI-X) / ViT (PaLM-E) 参数量 35M 5B ~ 55B 预训练数据 仅机器人数据 互联网图文数据 + 机器人数据 动作表征 离散Token (8维 × 256 bin) 同RT-1，但映射到VLM词表 输出空间 固定动作分类头 复用VLM文本解码器 语义理解 仅理解训练中见过的指令 零样本理解未见指令 涌现能力 无 CoT推理、语义泛化 控制频率 ~5 Hz 1-5 Hz（取决于模型大小） 核心差异在于：RT-1的动作输出层是独立训练的分类头，而RT-2直接复用VLM的文本解码器。这意味着RT-2天然继承了VLM在互联网上学到的语义知识，而RT-1的语义理解仅限于机器人数据中出现的指令。这也解释了为什么RT-2在Unseen任务上实现了接近翻倍的提升——它理解\u0026quot;数字7\u0026quot;、\u0026ldquo;最小的物体\u0026rdquo;、\u0026ldquo;临时锤子\u0026quot;等概念，因为这些概念来自互联网图文训练，而不是机器人演示。\nWebPath数据集与训练配方 RT-2除了使用原始的RT-1数据集（约130k条机器人演示，涵盖7类任务、超过700种物体），还引入了一个名为WebPath的新数据集，用于桥接网络知识和机器人动作。\nWebPath数据集的构建流程如下：\n图像采集：从互联网图文对数据中采样图像 语言指令标注：使用自动化模板生成语言指令，如\u0026quot;pick up the [object]\u0026quot;、\u0026ldquo;move [object] to [location]\u0026rdquo; 伪动作生成：对\u0026quot;静止\u0026quot;图像，无法获取真实机器人动作。RT-2的做法是使用一个预训练的逆动力学模型（基于RT-1训练数据训练，输入: 前后两帧图像，输出: 动作）来生成伪动作标签 质量过滤：去除逆动力学模型置信度低的样本 最终WebPath数据集包含约数十万条（图像, 指令, 伪动作）三元组。这些数据与原始机器人数据混合后进行联合微调。关键的经验发现是，即使伪动作标签的质量不如真实人演示数据，但只要在联合训练中适当降低WebPath的采样权重（如机器人:WebPath = 1:10），仍然可以显著提升泛化能力——因为WebPath带来的收益在于视觉多样性和概念覆盖，而非动作精度。\n📊 实验结果 主要评估（6000次机器人试验） 指标 RT-1 RT-2-PaLI-X-5B RT-2-PaLI-X-55B Seen任务成功率 72% 74% 78% Unseen任务成功率 32% 52% 62% 总体成功率 53% 64% 71% 在未见过的任务上，RT-2-PaLI-X-55B相比RT-1的32%提升至62%，几乎翻倍。这一巨大提升归功于互联网规模预训练带来的泛化能力。\n涌现能力 对新颖对象的泛化：RT-2可以操作训练数据中从未见过的物体。例如，虽然训练数据中只有标准的水果和饮料，RT-2能正确抓取和放置一个动画形象的玩偶。\n解释未见过的指令：模型能理解\u0026quot;把物体放在数字7上\u0026quot;这样的指令——数字\u0026quot;7\u0026quot;这个概念来自网络预训练，而非机器人数据。\n基础推理：能执行\u0026quot;拿起最小的物体\u0026rdquo;、\u0026ldquo;拿起离另一个物体最近的物体\u0026quot;等需要比较和推理的命令。\n多阶段语义推理 (CoT)：当被要求\u0026quot;找一个临时锤子\u0026quot;时，RT-2先推理出\u0026quot;石头可以用来当锤子\u0026rdquo;，然后执行拿取石头的动作。被问\u0026quot;给一个疲劳的人什么饮料\u0026quot;时，推理出\u0026quot;能量饮料\u0026quot;并执行。\n消融实验 配置 Unseen任务成功率 仅机器人数据微调 28% 联合微调 (1:1) 43% 联合微调 (1:10 机器人:网络) 52% 55B模型 + 联合微调 62% 联合微调和模型规模对泛化能力均有显著贡献。\nRoboturk真实机器人实验结果 RT-2在Roboturk平台（Google的移动操控机器人平台）上进行了大规模真实世界验证。实验涵盖三个场景：\n测试场景 任务 成功率 Scenario 1 将物体从桌面放置到篮子中 87% Scenario 2 从不同方位和高度抓取物体 81% Scenario 3 语义推理任务（选正确的物体） 67% 跨场景泛化测试：当机器人在Scenario 1中训练（桌面到篮子），直接部署到Scenario 2的\u0026quot;从架子上取物体\u0026quot;任务时，成功率仅下降约10%，说明模型具备一定的零样本迁移能力。值得注意的是，在Scenario 3中，即使物体是训练数据中从未出现过的（如卡通玩偶、抽象形状），RT-2-PaLI-X-55B仍能以67%的成功率完成语义选择任务，而RT-1在该场景几乎完全失败（\u0026lt;5%），进一步验证了大规模VLM预训练带来的零样本泛化能力。\n💭 个人思考 时隔近三年回看RT-2，它的贡献远比初看时更加深远。\n首先，\u0026ldquo;动作即语言\u0026quot;的设计哲学被证明具有惊人的生命力。直到今天（2026年），几乎所有VLA模型都在延续这一范式——无论是RT-2的后继者RT-X、OpenVLA，还是本文精读的CoWorld-VLA，都没有从根本上脱离\u0026quot;将动作编码为序列Token\u0026quot;的框架。\n其次，RT-2的研究路线图非常有启发性：它不像很多工作那样追求在特定任务上的SOTA，而是系统性地证明互联网预训练知识可以迁移到机器人控制。这个\u0026quot;可行性证明\u0026quot;的意义远超某个benchmark上的数字——它为整个VLA领域奠定了合法性。\n不过也有一些值得反思的地方。55B模型1-3Hz的控制频率在静态操作场景中尚可接受，但在自动驾驶这种需要10Hz以上控制率的场景中就捉襟见肘了。RT-2对PaLI-X和PaLM-E的强依赖也意味着它无法轻易受益于后续更强的VLM。\n关于离散化精度损失的再思考：RT-2将连续动作离散化为256个bin，意味着理论上的最大控制精度约为动作范围的1/256。对于需要高精度操作的任务（如精密装配、手术操作），这种量化误差可能成为瓶颈。后续工作的两个方向值得关注：一是像π0那样使用Flow Matching连续生成动作，二是像Octo那样使用扩散动作头在连续空间中建模。RT-2的离散范式虽然在语义泛化上突出了优势，但也在动作精度上做出了明确的牺牲——这是\u0026quot;离散化\u0026quot;作为通用接口的必要代价。\nCoT推理的规模化扩展问题：RT-2的CoT微调只在几百步的规模上验证，且仅在单一任务场景中展示。一个重要的问题是：CoT能否像在LLM中那样随着模型规模和训练数据的增加而涌现出更强、更通用的推理能力？如果将RT-2扩展到更大的VLM骨干（如Gemini级别），并配合更大规模的CoT标注数据，机器人CoT推理的复杂度和可靠性是否会迎来质的飞跃？这个问题至今没有完全解答，可能是RT-2留下的最有价值的研究方向之一。\n长期影响评估：从2026年回看，RT-2最有价值的遗产可能不是具体的技术方案（Tokenized Action），而是它所确立的研究范式——将机器人问题转化为语言问题，用语言模型的进步来驱动机器人能力的进步。这个范式已经被证明非常成功：随着VLM从55B发展到万亿参数级别，VLA模型的能力也在同步增长。某种意义上，RT-2定义了一条\u0026quot;搭便车\u0026quot;式的发展路线——机器人的进步不再需要专门设计算法，而是分享NLP领域的规模红利。这一点的影响，可能比任何一个具体的benchmark数字都更加深远。\n另外，RT-2虽然展示了涌现推理能力，但这些能力更多是继承自VLM骨干网络，而非VLA训练本身带来的。如何真正激发而非仅仅传递VLM中的推理能力到动作空间，仍然是该领域的一个开放问题。\n总的来说，RT-2是一篇\u0026quot;范式定义\u0026quot;级别的论文。它用一个极简的idea打开了\u0026quot;语言模型控制机器人\u0026quot;的大门，后续所有VLA工作都在它的延长线上。如果你只读一篇VLA论文，RT-2就是那个起点。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/rt-2%E7%B2%BE%E8%AF%BB/","summary":"RT-2 由 Google DeepMind 提出，首次将互联网预训练的 VLM 通过动作编码为文本 Token 的方式转化为 VLA 模型。它开创性地用机器人数据微调大规模图文模型，让网络知识迁移到具身控制，使机器人具备语义理解和零样本泛化能力。在 6k 次真机试验中验证了涌现的语义推理和从未见过的任务执行能力，是 VLA 范式的奠基之作。","title":"RT-2精读：VLA奠基之作——将网络知识迁移到机器人控制"},{"content":"🤖 论文概览 项目 内容 标题 Learning Vision-Language-Action World Models for Autonomous Driving 作者 Guoqing Wang, Pin Tang, Xiangxuan Ren, Guodongfang Zhao, Bailan Feng, Chao Ma 单位 上海交通大学（MoE Key Lab）+ 华为中央研究院 论文编号 arXiv 2604.09059 发表 CVPR 2026 Findings 项目主页 https://vlaworld.github.io 数据集 nuScenes-GR-20K（自构建生成式推理数据集） 📄 论文信息 论文标题：Learning Vision-Language-Action World Models for Autonomous Driving arXiv 链接：https://arxiv.org/abs/2604.09059（2604.09059，2026 年 4 月） 会议信息：CVPR 2026 Findings 核心团队：Guoqing Wang、Pin Tang、Xiangxuan Ren 等，上海交通大学 AI 研究院 MoE 实验室与华为中央研究院联合出品 项目页面：https://vlaworld.github.io（含可视化演示与补充视频） 🤔 要解决什么问题 端到端自动驾驶近年形成两大主流范式：VLA 模型和世界模型。VLA 模型（如 DriveVLM、OmniDrive）将感知、推理与控制统一在多模态大语言模型中，展示出强大的泛化能力，但它们缺乏对时序动态和全局世界一致性的显式建模——模型主要关注自车行为，忽略了周围交通参与者的运动模式。世界模型（如 DriveDreamer、Drive-WM）擅长通过生成未来帧来预测环境演化，但它们缺乏反思推理能力：可以模拟\u0026quot;将要发生什么\u0026quot;，却无法评估\u0026quot;这种未来是否安全、可行或理想\u0026quot;。\nVLA-World 的核心洞察在于：一个理想的自动驾驶范式应该融合世界模型的时空建模能力和 VLA 的推理能力。它将人类驾驶的认知过程——先凭直觉想象场景的短期演化，再通过反思推理评估潜在风险——转化为一个可计算的\u0026quot;预测→生成→反思→规划\u0026quot;闭环。\n人类驾驶员拥有一种天然的\u0026quot;先想象后反思\u0026quot;能力。当你驾车巡航时遇到前方突然刹车的前车，你会下意识地模拟\u0026quot;如果我保持当前速度会怎样\u0026quot;——脑海里瞬间闪过追尾的画面——然后立刻做出刹车或变道的决定。这种从直觉（intuition）到反思（reflection）的认知过程，正是当前自动驾驶系统所缺失的。\nVLA-World 正是被这一认知过程所启发。它首先基于当前场景生成一个直觉性的短期轨迹（0.5s），然后用这个轨迹条件化地生成\u0026quot;如果这样开，世界会变成什么样\u0026quot;的未来帧，最后模型审视自己生成的未来帧，从中识别直觉可能忽略的风险——比如即将进入盲区的行人、正在减速的前车——并据此修正长期轨迹。\n三大范式对比 维度 VLA 模型 世界模型 VLA-World（本文） 时空建模 弱（缺乏显式动态建模） 强（生成未来帧） 强（轨迹条件生成 + 反思推理） 推理能力 强（语言驱动的思考链） 弱（仅生成，不评估） 强（对自生成未来帧进行反思推理） 世界一致性 弱 强 强（生成帧与轨迹联合优化） 可解释性 文本推理链 生成图像可视化 生成图像 + 文本推理双重可解释 训练范式 行为克隆 / RL 生成式预训练 三阶段：预训练→SFT→GRPO RL 对未来的利用 隐式（无显式未来建模） 生成但不评估 显式生成 + 显式反思 🧠 方法详解 形式化定义 考虑一个以固定时间步 $\\Delta t$（如 0.5s）运行的驾驶智能体。在时刻 $t$，智能体接收多视图视觉观测和自车状态 $o_t = \\{I_t^{1:K}, S_t\\}$，其中 $I_t^k \\in \\mathbb{R}^{H \\times W \\times 3}$ 是第 $k$ 个相机的输入图像，$S_t \\in \\mathbb{R}^{d_s}$ 包含速度、加速度、横摆角速度等信息。智能体还接收导航目标 $g$（如左转/直行/右转）。未来轨迹定义为 BEV 坐标系下的路径点序列：\n$$\\tau_{t:t+H} = \\{p_{t+1}, p_{t+2}, \\dots, p_{t+H}\\}, \\quad p_{t+h} \\in \\mathbb{R}^2$$VLA-World 联合分布公式 VLA-World 将决策与想象统一在联合概率框架中：\n$$\\begin{aligned}p(\\tau_{t:t+H}, x_{t+1} \\mid o_{1:t}, g) = \u0026\\underbrace{p(\\tau_{t:t+H} \\mid o_{1:t}, g)}_{\\text{决策/策略}} \\\\\u0026\\cdot \\underbrace{p(x_{t+1} \\mid o_{1:t}, \\tau_{t+1})}_{\\text{想象/世界模型}}\\end{aligned}$$其中 $\\tau_{t+1}$ 是短期轨迹，用于条件化下一帧的生成。传统的纯 VLA 模型只建模左因子，纯世界模型只建模右因子。\n三步推理流程 步骤 1 —— 短期轨迹预测：基于历史观测 $o_{1:t}$ 和目标 $g$，模型预测初始的短期轨迹 $\\hat{\\tau}_{t:t+1}$（未来 0.5s 的路径点和行驶方向）。\n步骤 2 —— 条件未来帧生成：以预测的短期轨迹为条件，模型生成下一时刻的想象帧：\n$$\\hat{x}_{t+1} \\sim p_\\psi(x_{t+1} \\mid o_{1:t}, \\hat{\\tau}_{t:t+1})$$这一步将抽象的轨迹预测转化为具象的视觉想象——模型实际上在内部\u0026quot;草图\u0026quot;上绘制出如果按当前计划行驶，周围环境会如何变化。\n步骤 3 —— 反思推理轨迹修正：模型将自生成的未来帧作为反思推理的显式提示，评估潜在风险并修正长期轨迹：\n$$\\tilde{\\tau}_{t:t+H} = f_{\\text{ref}}\\!\\left(o_{1:t}, \\hat{x}_{t+1}, \\hat{\\tau}_{t:t+1}\\right)$$最终输出 $\\tilde{\\tau}_{t:t+H}$ 既保留了初始预测的整体意图，又通过反思纠正了不安全或不一致的决策。\n三阶段训练策略 第一阶段：视觉预训练（Pretraining） 目标：激活 VLA-World 的视觉生成能力。遵循 FSDrive 的对齐策略，但扩展为多视图一致性的条件生成。\n给定多视图图像集 $I = \\{I^k_t\\}_{k=1}^K$ 和描述目标视角或驾驶意图的指令 $L$，模型通过自回归下一 Token 预测来学习预测下一个视觉 Token 序列 $Q_{t+1}^k$：\n$$P(Q_{t+1}^k) = \\prod_{i=1}^N P_\\theta(q_i^k \\mid q_{\u003c i}^k, h_t, L)$$其中 $h_t = f_\\phi(I_t, S_t)$ 编码当前观测和自车状态，$q_i^k$ 是 VQGAN 码本中的第 $i$ 个离散 Token。第一阶段使用约 500k 图文指令数据训练 30 个 epoch。\n第二阶段：监督微调（SFT） 目标：通过模仿学习将驾驶概念知识注入基础模型。在多任务混合数据集（约 20k 样本）上训练，覆盖五个模块：\n感知：从多视图图像检测动态智能体、估计 3D 位置、道路边界和可行驶区域 短期预测：根据当前感知结果预测 0.5s 后的路径点和行驶方向 条件生成：以预测轨迹为条件生成未来帧 反思推理：分析生成帧中的关键实体、运动线索和潜在交互 轨迹规划：输出高级驾驶动作和 3s 时域的精确路径点 这一阶段训练 12 个 epoch，学习率 $1 \\times 10^{-4}$。\n第三阶段：GRPO 强化学习（RL） 目标：通过群体相对策略优化（GRPO）探索类似人类的推理知识。基于 DeepSeek-R1 的 GRPO 算法，从当前策略采样 8 个候选响应，用精心设计的规则奖励函数评估质量：\n$$R_{\\text{all}} = \\lambda_{\\text{fmt}} \\cdot R_{\\text{fmt}} + \\lambda_{\\text{pred}} \\cdot R_{\\text{pred}} + \\lambda_{\\text{vis}} \\cdot R_{\\text{vis}} + \\lambda_{\\text{act}} \\cdot R_{\\text{act}} + \\lambda_{\\text{traj}} \\cdot R_{\\text{traj}}$$五类奖励分别约束：输出格式（$R_{\\text{fmt}}$）、短期预测准确性（$R_{\\text{pred}}$）、视觉 Token 合法性（$R_{\\text{vis}}$）、高级动作 F1 分数（$R_{\\text{act}}$）、轨迹的运动学一致性（$R_{\\text{traj}}$）。使用 KL 散度正则化（系数 $1 \\times 10^{-2}$）保留 SFT 行为，策略学习率 $1 \\times 10^{-6}$。\n理论分析：为什么 VLA-World 更优 论文从变分推理角度给出理论证明。纯 VLA 模型在隐式积分掉未来状态 $x_{t+1}$ 后，等价于优化策略边际分布的松散下界：\n$$\\log p^\\star(\\tau \\mid o, g) \\geq \\mathbb{E}_{x \\sim q}[\\log p^\\star(\\tau, x \\mid o, g) - \\log q(x \\mid o, \\tau)]$$纯世界模型仅优化生成似然 $J_{\\text{WM}}(\\theta) = \\mathbb{E}[-\\log p_\\theta(x_{t+1} \\mid o, \\tau)]$，生成质量与规划效用之间存在根本性脱节——高保真生成的碰撞场景对规划是灾难性的。\nVLA-World 的梯度自然分解为策略梯度与世界模型梯度的和：\n$$\\nabla_\\omega J(\\omega) = \\mathbb{E}\\Big[\\underbrace{\\nabla_\\omega \\log \\pi_\\omega(\\tau \\mid o, g) \\cdot R}_{\\text{策略梯度}} + \\underbrace{\\nabla_\\omega \\log p_\\omega(x \\mid o, \\tau) \\cdot R}_{\\text{世界模型梯度}}\\Big]$$这意味着想象本身也被驾驶奖励 $R$ 直接优化——模型学会生成有助于安全决策的未来帧，而非仅仅是像素保真度高的帧。\n🏗️ 架构流程总览 推理阶段流程 步骤 模块 输入 输出 说明 1 感知 多视图图像 $I_t^{1:K}$ + 自车状态 $S_t$ 场景要素（目标位置/道路边界等） 将原始像素转化为结构化空间语义 2 短期预测 感知结果 + 历史自车状态 0.5s 路径点 $\\hat{\\tau}_{t+1}$ + 行驶方向 预测短期内的自车运动 3 条件生成 场景上下文 + 短期轨迹 $\\hat{\\tau}_{t+1}$ 下一帧图像 $\\hat{x}_{t+1}$ 将抽象轨迹转化为视觉想象 4 反思推理 自车状态 + 生成帧 $\\hat{x}_{t+1}$ + 短期轨迹 风险评估 + 语义分析 量化安全裕度，识别潜在冲突 5 轨迹规划 反思推理结果 + 高级动作 3s 时域轨迹 $\\tilde{\\tau}_{t:t+H}$ 输出修正后的安全轨迹 三阶段训练总览 阶段 目标 数据规模 基座模型 训练方式 损失/奖励函数 关键设计 A. 预训练 激活视觉生成 ~500k Qwen2-VL-2B 自回归 Next-Token 交叉熵（VQGAN Token 预测） 多视图条件化，扩展 FSDrive B. SFT 注入驾驶概念 ~20k Stage A checkpoint 多任务监督学习 感知 + 生成 + 轨迹回归损失 五个子模块联合训练 C. GRPO RL 探索推理知识 ~20k（同 SFT） Stage B checkpoint 群体相对策略优化 $R_{\\text{all}}$（5 项加权奖励） 8 组采样，KL 正则化，$1 \\times 10^{-6}$ LR 🖼️ 图片解析 图 1：VLA-World 整体框架与三阶段训练概览。 该图展示了 VLA-World 的核心思想和训练流程。左侧是模型学习的三个阶段——视觉预训练激活生成能力、监督微调链接感知-生成-规划、GRPO 强化学习通过交互自生成未来来探索推理知识。右侧的散点图展示了 VLA-World 在碰撞率和 FID 两个维度上同时达到最优，突显其在未来生成和驾驶推理两方面的综合优势。\n图 2：三大范式对比。 子图 (a) VLA 采用直接的\u0026quot;感知→推理→规划\u0026quot;流水线，缺乏对未来的显式建模；(b) 世界模型通过当前帧和动作生成未来帧，但不对生成结果进行推理评估；(c) VLA-World 在感知后先进行短期轨迹预测，以此条件生成未来帧，再对自生成的想象帧进行反思推理，最终输出修正后的轨迹。这一\u0026quot;预测-生成-反思\u0026quot;闭环是 VLA-World 区别于前两者的核心创新。\n图 3：三阶段训练与推理管线。 详细展示了从输入（多视图图像+自车状态+导航目标）到输出（轨迹+动作+推理文本）的完整流程。阶段 (a) 视觉预训练在大量图文数据上激活生成能力；阶段 (b) SFT 通过五个子模块（感知/短期预测/生成/思考/规划）的联合训练注入驾驶概念知识；阶段 (c) GRPO RL 对完整输出序列进行群体优化，奖励函数覆盖格式、预测、视觉、动作和轨迹五大维度。\n图 4：VLA-World 方法架构图。 展示了模型内部的详细网络设计，包括 VQGAN 编码器-解码器、Qwen-VL 骨干网络、多视图特征提取、短期轨迹预测头、条件生成模块以及反思推理模块之间的数据流。此图清晰地展示了视觉 Token 如何在感知、生成和推理模块间传递，形成一个端到端可微的统一框架。\n图 5：三阶段数据样本。 子图 (a) 为预训练阶段的数据格式：当前多视图图像 + 坐标定义 + 指令 → 未来帧 Token（纯生成任务，无推理）。子图 (b)(c) 为 SFT 和 RL 阶段的数据格式：输入扩展了车辆动力学信息和导航指令，输出采用结构化的因果推理序列（\u0026lt;Perception\u0026gt; → \u0026lt;Prediction\u0026gt; → \u0026lt;Visual\u0026gt; → \u0026lt;Think\u0026gt; → \u0026lt;Action\u0026gt; → \u0026lt;Answer\u0026gt;），将生成与规划统一在同一序列中。\n图 6：未来帧生成质量对比（VLA-World vs FSDrive）。 上行为 VLA-World 的生成结果，下行为 FSDrive。红色高亮区域显示：FSDrive 在预测时域内难以保持目标一致性，出现车辆几何变形和背景细节丢失等明显伪影。VLA-World 凭借轨迹感知的条件机制，有效保留了动态目标的刚体结构和场景清晰度——证明了短时预测成功缓解了纯 VLA 中常见的\u0026quot;幻觉\u0026quot;伪影。\n图 7：3 秒轨迹预测对比。 VLA-World（上）与 FSDrive（下）在 3s 时域上的轨迹预测可视化。VLA-World 的预测轨迹（尤其是接近 3s 末端的部分）与真值偏差显著小于 FSDrive。这种提升源于 VLA-World 的\u0026quot;先预测未来状态→生成对应帧→反思推理修正\u0026quot;的闭环设计，而 FSDrive 缺乏这种反思迭代能力，导致长时域上出现累积漂移。\n🔬 实验与结果 端到端轨迹规划结果（nuScenes） 方法 LLM 基座 L2 (m) 1s L2 (m) 2s L2 (m) 3s L2 (m) Avg Collision (%) Avg ST-P3* (ECCV 22) — 1.33 2.11 2.90 2.11 0.71 VAD* (ICCV 23) — 0.17 0.34 0.60 0.37 0.33 UniAD* (CVPR 23) — 0.20 0.42 0.75 0.46 0.37 BEV-Planner* (CVPR 24) — 0.16 0.32 0.57 0.35 0.34 OccWorld (ECCV 24) GPT3-like 0.39 0.73 1.18 0.77 0.32 Doe-1 (arXiv 24) Lumina-mGPT-7B 0.37 0.67 1.07 0.70 0.21 OmniDrive* (CVPR 25) LLaVA-7B 0.14 0.29 0.55 0.33 0.30 FSDrive* (NeurIPS 25) Qwen2-VL-2B 0.14 0.25 0.46 0.28 0.10 VLA-World (Ours)* Qwen2-VL-2B 0.10 0.24 0.45 0.26 0.08 注：带 * 表示使用了未来帧信息的方法。指标采用 ST-P3 评测协议。\n未来帧生成质量对比（nuScenes） 方法 类型 分辨率 FID $\\downarrow$ DriveGAN (CVPR 21) GAN $256 \\times 256$ 73.4 DriveDreamer (ECCV 24) Diffusion $128 \\times 192$ 52.6 Drive-WM (CVPR 24) Diffusion $192 \\times 384$ 15.8 GenAD (CVPR 24) Diffusion $256 \\times 448$ 15.4 GEM (CVPR 25) Diffusion $576 \\times 1024$ 10.5 Doe-1 (arXiv 24) Autoregressive $384 \\times 672$ 15.9 FSDrive (NeurIPS 25) Autoregressive $128 \\times 192$ 10.1 VLA-World (Ours) Autoregressive $128 \\times 192$ 9.8 VLA-World 在生成质量（FID 9.8）上超越所有对比方法，包括使用更高分辨率输入和扩散架构的方法。值得注意的是，VLA-World 与 FSDrive 同样基于 Qwen2-VL-2B 和 $128 \\times 192$ 分辨率，但 FID 从 10.1 降至 9.8，证明了轨迹感知条件机制对生成质量的直接提升——生成的未来帧不仅仅是\u0026quot;视觉上合理\u0026quot;，而且包含了与自车行为一致运动信息。\n消融实验 配置 L2 Avg (m) 结论 完整 VLA-World 0.30 基线 w/o. Pretraining 0.57 预训练贡献显著 w/o. SFT 0.85 SFT 最关键，移除后性能下降最大 w/o. RL 0.71 GRPO 带来约 0.41m 的 L2 改善 w/o. Perception 0.75 感知信息不可或缺 w/o. Generation 0.68 生成模块贡献一致性 w/o. Reasoning 0.85 反思推理移除后性能大幅下降 w/o. $R_{\\text{pred}}$ 0.41 短期预测奖励至关重要 w/o. $R_{\\text{vis}}$ 0.42 视觉约束奖励也有重要作用 w/o. $R_{\\text{act}}$ 0.62 动作奖励显著影响 w/o. $R_{\\text{traj}}$ 0.72 轨迹奖励贡献最大 模型规模 Scaling 模型 L2 Avg (m) 相对改善 Qwen2-VL-2B 0.30 基线 Qwen2.5-VL-3B 0.29 略有改善 Qwen2-VL-7B 0.18 相比 2B 改善 40% 随着模型容量增加，VLA-World 展现出清晰的 Scaling Law——更大的模型具备更强的因果依赖推理能力，在长时域（3s）上的改善尤为显著。2B→7B 的升级将 3s L2 误差从 0.52 降至 0.47，说明长时域预测更依赖模型的推理容量。此外，论文还实验了输入分辨率的影响：在 36,000 像素下 Avg L2 为 0.38，提升到 52,884 像素后降至 0.30，说明保持高保真视觉信息对缓解轨迹误差累积至关重要。\n🧩 与相关工作的深入对比 维度 DriveVLM (2024) OmniDrive (CVPR 25) FSDrive (NeurIPS 25) VLA-World (本文) 世界模型角色 无 无（仅用语言推理） 生成未来帧作为 CoT 中间步 生成 + 反思联合优化 未来帧用途 不生成 不生成 生成但不反思 生成后反思修正轨迹 训练范式 SFT SFT SFT 预训练 → SFT → GRPO RL 短期轨迹 无 无 隐式 显式预测 + 条件生成 反思机制 文本 CoT 文本 CoT + 反事实 不反思 视觉 Token 级反思推理 多视图一致性 是 是（3D 查询） 仅前视图 多视图统一生成 奖励函数 无 无 无 5 维规则奖励 + GRPO L2 Avg (ST-P3) — 0.33* 0.28* 0.26* 💡 个人思考 / 关键洞察 1. 从\u0026quot;生成\u0026quot;到\u0026quot;理解 + 反思\u0026quot;的范式跃迁。 VLA-World 最核心的贡献不是简单地添加了一个图像生成模块，而是将生成从\u0026quot;辅助信号\u0026quot;提升为\u0026quot;反思推理的可操作条件\u0026quot;。传统世界模型生成的未来帧只是为了可视化或评估像素保真度，而 VLA-World 让模型真正\u0026quot;阅读\u0026quot;自己生成的内容并据此修正决策。这个闭环——预测、生成、反思、修正——使模型具备了类似人类驾驶员的\u0026quot;事后思考\u0026quot;能力。从变分推理角度看，这等同于收紧策略估计的证据下界，有严格的数学保证。\n2. 三阶段训练策略的精妙设计。 论文没有尝试端到端一次性训练所有能力，而是将学习分解为三个渐进的阶段：先学会\u0026quot;看\u0026quot;（视觉生成预训练），再学会\u0026quot;理解\u0026quot;（SFT 注入驾驶概念），最后学会\u0026quot;思考\u0026quot;（GRPO 探索推理策略）。这种课程学习式的设计非常符合认知科学中的\u0026quot;分层学习\u0026quot;理论——底层能力是上层能力的基础。特别值得注意的是，预训练阶段使用了 500k 数据而 SFT 阶段仅用 20k，这种\u0026quot;大规模预生成 + 小规模精调\u0026quot;的策略在数据效率上非常高效。\n3. GRPO 奖励工程：从 5 个维度约束行为。 论文设计的五类奖励函数覆盖了从输出格式到运动学一致性的完整行为空间。其中 $R_{\\text{fmt}}$ 和 $R_{\\text{vis}}$ 属于\u0026quot;硬约束\u0026quot;——确保模型输出的结构正确性和 Token 合法性；$R_{\\text{pred}}$ 和 $R_{\\text{act}}$ 属于\u0026quot;软约束\u0026quot;——引导短期预测和动作选择的准确性；$R_{\\text{traj}}$ 是最核心的\u0026quot;行为约束\u0026quot;——保证轨迹的运动学合理性。这种分层设计的奖励体系，比单一的 L2 损失或碰撞惩罚更加全面。消融结果印证了这一点：移除 $R_{\\text{traj}}$ 后平均 L2 从 0.30 恶化到 0.72，说明运动学一致性是轨迹质量的关键。\n4. \u0026ldquo;短期想象 + 长期规划\u0026quot;的认知架构。 VLA-World 将规划分解为两个时域：0.5s 的短期想象（用于条件生成和即时反馈）和 3s 的长期规划（最终输出）。这种分解具有深刻的认知意义——短期预测相对确定（车辆动力学约束强），而长期预测不确定性大（其他智能体的意图不确定）。通过先做相对可靠的短期预测，再基于生成的短期未来做更审慎的长期规划，模型实际上实现了一种\u0026quot;由近及远\u0026quot;的渐进决策策略。这与模型预测控制（MPC）中的滚动时域思想一致，但以学习的方式实现。\n5. 多视图一致性：从单视图到全景式理解。 相比 FSDrive（仅前视图），VLA-World 在预训练阶段就明确要求多视图一致性——无论模型在 SFT 和 RL 阶段需要哪个视角的未来帧（左转时关心左视图、右转时关心右视图），预训练阶段已确保所有视角的生成能力都已激活。这种\u0026quot;全视角生成\u0026quot;的能力使得模型在推理时可以根据行驶意图动态选择最相关的视角进行反思，而不是固定在前视图。这在复杂的城市驾驶场景（如环岛、十字路口）中尤为重要。\n6. 局限性与未来方向。 VLA-World 在当前版本中仍然存在可改进的空间：第一，三阶段训练的计算开销较大（3 个阶段 × 多个 epoch × 8 个 A100 GPU），实际部署到低成本硬件上存在挑战；第二，3s 的规划时域对于高速场景（如高速公路）可能不够，更长的时域需要更强的时间建模能力；第三，当前的 GRPO 奖励函数是手工设计的规则，可能无法覆盖所有驾驶场景的多样化需求。未来方向包括引入基于学习的奖励模型（RLHF 风格）、扩展到 8s-10s 的更长规划时域、以及将推理链模型蒸馏为更轻量的推理模块以降低部署成本。\n总结：VLA-World 通过\u0026quot;预测-生成-反思-规划\u0026quot;的统一框架，在 VLA 和世界模型两种范式之间架起了一座桥梁。它的核心启示是：在自动驾驶中，对未来最有益的不是生成最逼真的像素，而是学会从自生成的未来中反思和学习。 这种\u0026quot;想象 + 反思\u0026quot;的能力，或许正是通向更安全、更类人的自动驾驶系统的关键密码。\n附录：关键实现细节 配置项 预训练 SFT GRPO RL 基础框架 LLaMA Factory LLaMA Factory Easy-R1 GPU 8 × A100 8 × A100 8 × A100 Epoch 30 12 1 学习率 $5 \\times 10^{-4}$ $1 \\times 10^{-4}$ $1 \\times 10^{-6}$ Batch Size 16 × GPU 16 × GPU 16 × GPU 优化器 AdamW AdamW GRPO + AdamW 采样数 1 1 8 KL 系数 — — $1 \\times 10^{-2}$ 学习率调度器 Cosine（warmup 0.1） Cosine（warmup 0.1） Cosine（warmup 0.1） 附录：nuScenes-GR-20K 数据集 nuScenes-GR-20K 从原始 nuScenes 训练集中筛选并标注了约 20,000 个高质量样本，专门用于生成式推理训练。每个样本包含：\n6 个视角的当前帧图像 + 下一帧图像 自车状态（位置、速度、加速度、横摆角速度） 导航指令（左转/右转/直行） 短期路径点（0.5s 间隔，2 个点） 长期路径点（0.5s 间隔，6 个点，3s 时域） 结构化推理文本（感知 → 预测 → 生成 → 思考 → 动作 → 轨迹） 与原始的 nuScenes 相比，GR-20K 增加了推理标签和条件生成标注，使其适用于世界模型的生成-推理-规划联合训练。预训练阶段另使用约 500k 数据，来源于 nuScenes 的 193,082 个未标注样本通过时序采样扩充得到。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2604-09059/","summary":"VLA-World 通过将 VLA 的推理能力与世界模型的预测想象统一在单一框架中，实现了预测-生成-反思-规划的完整闭环。它利用动作驱动的可行轨迹引导下一帧图像生成，再对自生成的未来帧进行推理以修正轨迹，在 nuScenes 的规划和生成基准上均达到 SOTA。","title":"VLA-World精读：统一预测想象与反思推理的视觉-语言-行动世界模型"},{"content":"这篇论文到底在干什么？ 先给你一个最直白的理解，读完这一段你就知道这篇论文为什么重要。\n自动驾驶规划就是让车决定「接下来怎么开」。目前主流方法（如 UniAD、Plan-R1）都是为乘用车设计的——它们假设车很稳、不会翻。这个假设对轿车成立，但对重卡完全不成立。\n重卡（尤其是满载的重卡）质心很高、质量极大，过弯时侧翻风险极高。一条在乘用车上完美无碰撞的轨迹，让重卡去开，可能直接翻车。\nnuTruck 的核心贡献：它造了一个专门给重卡用的评测系统——包含一个高精度的重卡动力学模型（用来模拟重卡怎么动的）、一套侧翻风险指标（用来判断会不会翻）、以及一系列规划基线（用来对比不同方法的效果）。它证明了一个扎心的结论：规划层必须管动力学安全，下游控制器补救不了。\n专业名词速查表（写给零基础读者） 读这篇之前，先花一分钟搞懂下面这些词。不用全记住，有个印象，看到时回头对照就行。\n术语 全称 大白话解释 DET Distributed Electric-drive Truck 分布式电驱重卡——每个轮子都有自己的电机，可以独立控制 LTR Load Transfer Ratio 侧翻指标，衡量车左右两侧的载荷差异。0=稳，1=已翻 NRS Non-Rollover Score 不翻车得分，从 LTR 算出来的 0-100 分值 CLS Closed-Loop Score 闭环综合得分，衡量轨迹跟踪的好坏 CLS-Safe — 把侧翻风险乘进 CLS，得到「安全加权」的闭环分 iLQR iterative Linear Quadratic Regulator 一种轨迹跟踪控制器，负责让车沿着规划轨迹走 iLQR+S iLQR with Safety 加了侧翻惩罚的 iLQR，会在跟踪时主动避开高风险动作 运动学模型 Kinematic Model 只考虑位置、速度、朝向，不考虑力的模型。对乘用车够用 动力学模型 Dynamic Model 考虑力、质量、加速度、侧倾等的模型。对重卡必须用 Pacejka 魔术公式 Magic Formula 一种精确计算轮胎受力的数学公式，轮胎建模的黄金标准 阿克曼转向 Ackermann Steering 经典的四轮转向方式——前轮转向，后轮直行 FRO Front-Rear Opposite 前后轮反向转向——前轮左转、后轮右转，减小转弯半径 EPAR — 任务完成率，看规划器能不能成功到达终点 侧翻 Rollover 车在过弯时因离心力太大导致一侧车轮离地、车身翻转 论文信息 标题：nuTruck: Benchmarking Autonomous Driving Planning for Distributed Electric-drive Trucks 团队：清华大学车辆与运载学院 × KargoBot.AI（恺 databot） arXiv：2607.13704（2026 年 7 月，cs.RO） 关键词：分布式电驱重卡（DET）、闭环规划、侧翻风险、LTR、动力学安全 一句话总结：首个专门为分布式电驱重卡打造的规划训练 + 闭环评测基准——它把\u0026quot;侧翻风险\u0026quot;做成可量化指标，证明在重卡上\u0026quot;规划管避撞、控制器管防侧翻\u0026quot;的传统分工是会失效的。 问题：为什么乘用车的「好轨迹」会让重卡翻车 学习型规划器（learning-based planner）在乘用车上已经大杀四方，从 UniAD、SparseDrive 到 Plan-R1、CaRL，几乎清一色在 nuPlan、Bench2Drive 上刷榜。但论文一上来就抛出一个反直觉的现象：\n一条在 nuPlan 上被 iLQR 精准跟踪、且完全无碰撞的轨迹，换到重卡上跟踪，却会因为转向半径过小 + 车速过高而侧翻风险爆表。\n图2：同一无碰撞轨迹在 DET 上的跟踪效果。(a)运动学可执行但侧翻风险高；(b)侧翻风险可视化（颜色越红风险越高）；(c)理想的 DET 轨迹应同时满足运动学可行性和动力学安全性。\n重卡和乘用车到底差在哪 下面这张 SVG 图直观对比了两种车的物理差异：\n看完这张图，你就能理解为什么「把乘用车的规划器直接套到重卡上」会出问题：\n维度 乘用车 分布式电驱重卡 DET 驱动方式 集中驱动（一个发动机带所有轮） 6 个轮子独立驱动 + 独立转向 质心高度 0.5 - 0.6 m（低，稳） 1.5 - 1.8 m（高，满载更夸张） 侧翻风险 几乎不会翻 极易侧翻（质心高 + 载荷转移） 动作空间 低维（油门/刹车/转向，2-4 维） 12 维（6 轮各自扭矩 + 6 轮各自转角） 轴数 2 轴（4 轮） 3 轴（6 轮） 质心高度是最关键的数字。0.5m 的质心意味着过弯时的侧倾力矩很小；1.8m 的质心意味着同样的过弯速度，侧倾力矩是乘用车的 3 倍以上。这就是 DET 极易侧翻的根本物理原因。\n当前基准的两个空白 作者尖锐地指出当前评测体系的两大问题：\n现有重卡数据集都只做开环：TruckScenes（2024）、TruckDrive（2026）虽然采集了卡车数据，但只能开环评测（给一张图、算一个指标，不需要真实闭环跑），且完全忽略车辆动力学； nuPlan/Waymax 只用运动学自行车模型——对乘用车够用，对 DET 则完全失真。 核心矛盾可以用论文里的一组数字讲透：\n场景 CLS（闭环得分） 说明 nuPlan 乘用车（运动学模型） 96.24 完美跟踪，无碰撞 nuTruck DET（动力学模型） 77.55 同一轨迹，各种翻车 nuTruck DET + iLQR+S（侧翻防护） 74.36 控制器补救，但分数更低 因为规划阶段根本没考虑动力学安全，下游控制器再怎么补救也补不回来。\n核心思想：把「动力学安全」写进评测 nuTruck 的设计哲学只有一句话：对于 DET，\u0026ldquo;无碰撞\u0026rdquo; ≠ \u0026ldquo;安全\u0026rdquo;，必须再加上\u0026quot;不侧翻\u0026quot;。为此它在三个层面做了系统性的基建工作。\n1. 高保真非线性 DET 动力学模型 模型定义 论文实现了一个三轴六轮、每个轮子可独立驱动和独立转向的非线性动力学模型。这是整个基准的基石——没有它，所有仿真都是假的。\n状态量（描述车当前状态的变量）： $$\\mathbf{s} = [x, y, \\psi, v_x, v_y, \\dot{\\psi}]^\\top \\in \\mathbb{R}^6$$ 状态变量 含义 单位 $x, y$ 全局位置（世界坐标系下的坐标） m $\\psi$ 横摆角（车头朝向） rad $v_x$ 纵向速度（车头方向的速度） m/s $v_y$ 侧向速度（垂直于车头的速度） m/s $\\dot{\\psi}$ 横摆角速度（车旋转的快慢） rad/s 控制量（模型可以调节的输入）： $$\\mathbf{u} = [T_1, \\dots, T_6, \\delta_1, \\dots, \\delta_6]^\\top \\in \\mathbb{R}^{12}$$ 控制变量 含义 数量 $T_i$ 第 $i$ 个车轮的驱动扭矩 6 个 $\\delta_i$ 第 $i$ 个车轮的转向角 6 个 为什么是 12 维？ 因为每个轮子都可以独立控制——前轮可以左转的同时后轮右转，左侧车轮可以正扭矩驱动的同时右侧车轮负扭矩制动。这就是 DET 和普通车辆的本质区别。\n轮胎模型：Pacejka 魔术公式 每个车轮的受力由 Pacejka 魔术公式计算。这个公式是轮胎建模的黄金标准，名字叫\u0026quot;魔术\u0026quot;是因为它用一个简单的公式就能极其精确地拟合真实轮胎的复杂受力行为：\n$$F_{x,i} = D_x \\sin(C_x \\arctan(B_x \\kappa_i - E_x(B_x \\kappa_i - \\arctan(B_x \\kappa_i))))$$$$F_{y,i} = D_y \\sin(C_y \\arctan(B_y \\alpha_i - E_y(B_y \\alpha_i - \\arctan(B_y \\alpha_i))))$$其中 $\\kappa_i$ 为滑移率（车轮打滑的程度），$\\alpha_i$ 为侧偏角（车轮指向和实际运动方向的夹角），$B,C,D,E$ 为 Pacejka 系数，由轮胎类型和垂直载荷 $F_{z,i}$ 插值得到。\n对于零基础读者：你不需要理解这个公式的细节，只要知道两件事——(1) 它描述了轮胎在不同条件下能产生多大的抓地力；(2) 它是目前最准的轮胎模型，论文用它来保证仿真精度。\n刚体动力学（整车运动方程） 整车三自由度（纵向、侧向、横摆）动力学：\n$$m(\\dot{v}_x - v_y \\dot{\\psi}) = \\sum_{i=1}^6 F_{x,i} - \\frac{1}{2} \\rho C_d A v_x^2$$$$m(\\dot{v}_y + v_x \\dot{\\psi}) = \\sum_{i=1}^6 F_{y,i}$$$$I_z \\ddot{\\psi} = \\sum_{i=1}^6 \\left( l_{x,i} F_{y,i} \\cos\\delta_i - l_{x,i} F_{x,i} \\sin\\delta_i + \\frac{w_i}{2} (F_{x,i}^{\\text{right}} - F_{x,i}^{\\text{left}}) \\right)$$对于零基础读者：这三条公式分别描述：\n第一式：车加速/减速（纵向）——所有轮的驱动力之和减去空气阻力 第二式：车侧滑（侧向）——所有轮的侧向力之和 第三式：车旋转（横摆）——每个轮的力乘以力臂，产生旋转力矩 其中 $m$ 为整车质量（满载可达 25 吨！），$I_z$ 为横摆转动惯量，$l_{x,i}$ 为第 $i$ 轮轴到质心的纵向距离，$w_i$ 为轴距，$\\rho C_d A$ 为空气阻力系数。\n动态垂直载荷转移——侧翻的核心原因 DET 侧翻风险的核心来源是加减速和过弯时的垂直载荷转移。各轮垂直载荷 $F_{z,i}$ 不再是静态的（$mg/6$），而是由纵向和侧向加速度实时调制：\n$$F_{z,i} = \\underbrace{F_{z,i}^{\\text{static}}}_{\\text{静态分配}} + \\underbrace{\\Delta F_{z,i}^{\\text{long}}}_{\\text{纵向转移}(a_x)} + \\underbrace{\\Delta F_{z,i}^{\\text{lat}}}_{\\text{侧向转移}(a_y)}$$具体地，纵向加速度 $a_x = \\dot{v}_x$ 导致前/后轴载荷转移，侧向加速度 $a_y = \\dot{v}_y + v_x \\dot{\\psi}$ 导致左/右轮载荷转移：\n$$\\Delta F_{z,\\text{front}}^{\\text{long}} \\approx -\\frac{m h_{\\text{CoG}}}{2L} a_x, \\quad \\Delta F_{z,\\text{left}}^{\\text{lat}} \\approx -\\frac{m h_{\\text{CoG}}}{w} a_y$$其中 $h_{\\text{CoG}}$ 为质心高度（满载 DET 可达 1.8m，远高于乘用车的 0.5-0.6m），$L$ 为轴距，$w$ 为轮距。\n下面这张 SVG 图直观展示了侧翻的物理机理：\n关键物理直觉：想象一辆重卡在过弯。离心力把车身往外推，但重力把它往下拉。当离心力产生的侧倾力矩大于重力产生的恢复力矩时，内侧车轮就会离地——这就是侧翻的开始。质心越高（$h_{\\text{CoG}}$ 越大），侧倾力矩越大，越容易翻。\n模型保真度验证 论文用 124 段正弦激励测试，和工业级软件 TruckSim 对比：\n对比项 误差 相当于 15s 位置 MAE 0.25 m 相对于重卡 10m+ 车长，可忽略 15s 速度 MAE 0.08 m/s 几乎和 TruckSim 一样准 LTR MAE 0.005 极低，侧翻风险评估可靠 关键优势：模型和 TruckSim 几乎一样准，但完全可微分、可在 PyTorch 训练循环中正反向传播——这意味着它可以直接嵌入到神经网络的训练中，作为可微分的仿真环境使用。\n2. 新指标：NRS 与 CLS-Safe 有了 LTR 这个连续风险度量，作者设计了 Non-Rollover Score (NRS)——一个从 LTR 时序信号到 0-100 分值的映射函数：\n$$\\text{NRS} = \\begin{cases} 0, \u0026 \\max_t \\text{LTR}(t) \u003e s_{\\max} \\\\[4pt] 100 \\times \\left(1 - \\frac{1}{T}\\sum_{t=1}^T \\frac{\\text{LTR}(t) - s_{\\min}}{s_{\\max} - s_{\\min}}\\right)^2, \u0026 s_{\\min} \u003c \\max_t \\text{LTR}(t) \\leq s_{\\max} \\\\[4pt] 100, \u0026 \\max_t \\text{LTR}(t) \\leq s_{\\min} \\end{cases}$$其中 $s_{\\max}=0.9$（临界侧翻阈值，超过则判 0 分），$s_{\\min}=0.5$（安全阈值，低于则满分）。NRS 在 0.5-0.9 之间按二次函数衰减，惩罚那些\u0026quot;虽然没翻但接近翻\u0026quot;的轨迹。\nLTR 和 NRS 的直观理解：\nLTR = 0：左右轮载荷完全相等，稳如泰山 LTR = 0.5：一侧载荷是另一侧的 3 倍，开始有风险 LTR = 0.9：一侧载荷是另一侧的 19 倍，极其危险 LTR = 1.0：一侧车轮完全离地，已经翻车 再将 NRS 作为乘性因子与 nuPlan 的闭环分数复合：\n$$\\text{CLS-Safe} = \\text{CLS} \\times \\left(\\frac{\\text{NRS}}{100}\\right)^\\alpha$$其中 $\\alpha=0.5$ 控制 NRS 的惩罚强度。CLS-Safe 迫使规划器在\u0026quot;能到终点（EPAR）、不撞（CLS）、不翻（NRS）\u0026ldquo;三者间同时拿高分——一个指标的片面优化会被另外两个拉回来。\n3. 一套覆盖规则/学习的基线 nuTruck 适配了两类三种规划基线：\n类别 代表方法 输出维度 控制器 侧翻防护 规则型 IDM、PDM-Closed 轨迹 (2D) iLQR / iLQR+S 可选 学习型（轨迹） Plan-R1（nuPlan SOTA） 轨迹 (2D) iLQR / iLQR+S 可选 学习型（动作） CaRL-A12 / A2 / A4 动作 (12D/2D/4D) 无（直接控车） 隐式 其中 CaRL 系列是动作型规划器：不输出轨迹，而是直接预测低层控制信号（扭矩+转角），绕过下游控制器。作者设计了四种 action pattern 来驯服 12 维高维动作空间：\n模式 动作维度 自由度数 含义 CaRL-A12 $[T_{1-6}, \\delta_{1-6}]$ 12 全自由——各轮独立驱动转向，收敛困难 CaRL-A4 $[T_f, T_m, T_r, \\delta_f]$ 4 分组驱动——前三轴扭矩 + 前轮转角（阿克曼） CaRL-A2-FRO $[v, \\dot{\\psi}]$ 2 FRO (前后轮反向)——速度+横摆角速度，前后轮转角反向 CaRL-A2-RWL $[v, \\dot{\\psi}]$ 2 RWL (后轮锁止)——速度+横摆角速度，前中轮阿克曼转、后轮锁止 图3：CaRL 的动作先验设计。FRO 模式下前后轮转角反向，实现更小的转弯半径，适合 DET 的长轴距特性。\n下面这张 SVG 图把四种 Action Pattern 的几何差异和性能对比画在一起：\nFRO 的设计尤为巧妙：对于长轴距的 DET，阿克曼转向的转弯半径 $R_{\\text{Ack}} = L / \\tan\\delta_f$ 会很大（因为轴距 L 太大）。但前后轮反向转向后 $R_{\\text{FRO}} = L / (\\tan\\delta_f + \\tan\\delta_r)$ 显著减小——分母变大了，半径自然变小。这让重卡在城市窄路中也能灵活转弯。\n4. 闭环仿真流程 nuTruck 的闭环仿真流程可概括为以下步骤：\n场景初始化：从 nuPlan 训练集中读取场景状态（自车位置、周围 agent 轨迹、地图、交通灯） 规划器推理：基于当前观测，规划器输出轨迹 $\\tau$ 或直接输出动作 $\\mathbf{u}$ 控制器跟踪（仅轨迹型）：iLQR 或 iLQR+S 对 $\\tau$ 进行模型预测控制，输出 $\\mathbf{u}_{\\text{track}}$ DET 动力学推进：将 $\\mathbf{u}$（或 $\\mathbf{u}_{\\text{track}}$）送入动力学模型 $\\mathcal{F}_\\theta$ 推进一个时间步 $\\Delta t = 0.1\\text{s}$，更新状态 $\\mathbf{s}_{t+1}$ 安全监测：在每个时间步记录 LTR 序列，最终计算 NRS 和 CLS-Safe 场景回滚：若发生碰撞或侧翻，终止该场景并记录失败原因 与 nuPlan 原版仿真相比，nuTruck 将运动学自行车模型替换为上述非线性 DET 动力学模型，新增了 LTR/NRS 安全监测环节。\n实验分析：轨迹规划器在 DET 上「集体翻车」 与现有基准的对比 首先，nuTruck 与现有数据/仿真基准的定位差异清晰可见：\n数据集/仿真器 年份 闭环 场景类型 车辆动力学 DET 侧翻评估 nuScenes 2020 否 真实-复杂 无 否 否 TruckScenes 2024 否 真实-复杂 无 否 否 TruckDrive 2026 否 真实-复杂 无 否 否 nuPlan 2021 是 真实-复杂 运动学模型 否 否 Waymax 2023 是 真实-复杂 运动学模型 否 否 CARLA 2017 是 仿真-中等 动力学模型 否 否 TruckSim — 是 仿真-简单 高保真动力学 是 否 nuTruck (ours) 2026 是 真实-复杂 高保真DET动力学 是 LTR/NRS nuTruck 是唯一同时满足\u0026ldquo;真实复杂场景 + 闭环仿真 + 高保真 DET 动力学 + 侧翻风险量化\u0026quot;四个条件的基准。\n核心实验结果 论文核心实验结果揭示了三种规划范式在 DET 上的剧烈差异：\n规划器 控制器 EPAR CLS NRS CLS-Safe 规则型 IDM iLQR 86.34 72.30 92.02 85.05 PDM-Closed iLQR 76.15 65.55 91.76 77.47 学习型（轨迹） Plan-R1 iLQR 88.43 78.49 9.84 8.76 Plan-R1 iLQR+S 65.57 55.18 61.21 57.43 学习型（动作） CaRL-A12 无（直接控车） 82.73 74.52 64.13 58.47 CaRL-A4 无（直接控车） 83.87 67.75 88.53 75.28 CaRL-A2-FRO 无（直接控车） 86.48 76.93 97.67 77.36 CaRL-A2-RWL 无（直接控车） 85.21 76.99 91.78 74.16 三条核心结论 下面这张 SVG 图把实验的核心发现可视化了出来：\n结论一：轨迹型规划器在 DET 上侧翻风险极高。 Plan-R1 虽是 nuPlan SOTA，在 DET 上 EPAR（88.43）和 CLS（78.49）都不差，但 NRS 仅 9.84 / 100——几乎每跑必翻。根源在于 PDM-Closed 的横向偏移采样以及 Plan-R1 的 RL 训练阶段都基于运动学自行车模型，完全没有 DET 的动力学概念。跟踪这些轨迹时产生的大侧向加速度 $a_y$ 使 LTR 飙升，侧翻频发。\n结论二：控制器补救治标不治本。 给 iLQR 添加侧翻惩罚（iLQR+S）后，Plan-R1 的 NRS 从 9.84 涨到 61.21——确实不翻那么多了。但代价是 EPAR 从 88.43 骤降到 65.57，CLS 从 78.49 降到 55.18。控制器为了避开侧翻，被迫偏离规划轨迹，在复杂场景（窄路转弯、密集车流）中频繁失败。\n对比 EPAR CLS NRS CLS-Safe Plan-R1 + iLQR（无防护） 88.43 78.49 9.84 8.76 Plan-R1 + iLQR+S（有防护） 65.57 55.18 61.21 57.43 变化 -22.86 -23.31 +51.37 +48.67 安全的提升（NRS +51.37）是以任务完成度的断崖式下跌（EPAR -22.86）换来的——治标不治本。\n结论三：动作型规划器反而最稳。 CaRL 系列直接预测低层动作，虽然没有任何显式的侧翻惩罚，但神经网络的平滑性偏置 + 奖励函数中的舒适性约束天然压制了 LTR。CaRL-A2-FRO 以 NRS=97.67 名列第一，CLS-Safe=77.36 也是全场最佳。FRO 模式通过前后轮反向转向显著减小转弯半径，使 CaRL-A2-FRO 在窄弯中既能顺利通过又不会侧翻。\n扩展性分析 图4：CaRL 训练步数增大时的表现。EPAR 随训练持续提升，但后期 NRS 出现下降趋势，说明高速场景中侧翻风险增大。\n随着训练步数从 100K 增加到 2500K，CaRL 的 EPAR 持续上升（路线完成度提高），但 NRS 在高训练量时出现轻微下降——原因是模型学会了更激进的驾驶策略（以更高速度过弯），侧向加速度随之增大。这组数据传递了一个关键信号：即使动作型规划器天然安全，在缺乏显式动力学安全奖励时，RL 仍会自发找到优化\u0026quot;效率\u0026quot;与牺牲\u0026quot;安全\u0026quot;的边界。 将 LTR/NRS 纳入 RL 的奖励设计，是下一步最自然的延伸。\n个人思考：规划与控制的边界，该重新划了 1. 规划-控制的分层架构在 DET 上露出了致命破绽。 \u0026ldquo;感知—预测—规划—控制\u0026quot;这条几十年没动过的流水线，在重卡这个载体上被彻底证伪。乘用车质心低、几乎不可能侧翻，所以\u0026quot;规划管运动学可行、控制管动力学稳定\u0026quot;的分工天经地义；但 DET 高质心 + 分布式驱动，把这两件事硬生生焊在了一起。一条运动学上完美无碰撞的轨迹，在动力学上可能根本跑不了——这不是控制器的锅，是规划就该知道。这让我想起机器人领域的一个经典讨论：在高速、高惯性的系统中，规划和控制的分层必然会有交界处的漏洞。 nuTruck 的实验数据就是这份论断在自动驾驶领域的实证。\n2. Action Pattern 是一个被低估的设计智慧。 12 维动作空间直接学为什么会崩？因为网络根本不知道\u0026quot;前轮左转时后轮该往哪打\u0026rdquo;。FRO/RWL 两种先验本质上是在把人类工程师对车辆动力学的理解，编码进动作空间的结构里，让网络在低维流形上搜索。这和机器人里的动作原语（motion primitive）、Diffusion-Planner 的轨迹先验是同一个思路：别让模型从零学起，给它一个合理的搜索骨架。 更值得玩味的是，CaRL-A2-FRO 只有 2 个自由度却能以 NRS=97.67 碾压 12 自由度的 A12（NRS=64.13）——动作空间设计比模型容量更重要。\n3. 「安全」从二值指标变成连续指标，是评测范式的进步。 nuTruck 把\u0026quot;安全\u0026quot;从一个二值的\u0026quot;撞没撞\u0026quot;指标，扩展成了连续的\u0026quot;会不会翻\u0026quot;指标。LTR/NRS 的设计值得所有闭环基准借鉴：真正的安全不是非黑即白，而是有多远离危险边缘的渐变。乘用车时代大家不关心侧翻，是因为车太稳；一旦场景换成重卡、机器人、甚至人形，这种\u0026quot;动力学安全度量\u0026quot;就成了刚需。CLS-Safe = CLS x (NRS/100)^α 的复合形式也很有启发性——它把\u0026quot;碰撞安全\u0026quot;和\u0026quot;动力学安全\u0026quot;通过乘积融合，迫使规划器同时优化两个正交的维度。\n4. 实验方法论上的一个亮点。 nuTruck 用 Plan-R1 + iLQR 和 Plan-R1 + iLQR+S 的对比，干净利落地分离了\u0026quot;规划器自身动力学意识\u0026quot;和\u0026quot;控制器补救能力\u0026quot;两个混淆因素。NRS 从 9.84 到 61.21 说明控制器能补救一部分，但 EPAR 从 88.43 掉到 65.57 说明补救有根本性的天花板。这个\u0026quot;割裂\u0026quot;实验的设计值得所有涉及\u0026quot;规划+控制\u0026quot;的论文效仿。\n5. 几点展望。 其一，nuTruck 的场景是从 nuPlan 筛选的（把 DET 跑不过去的拥挤路段剔掉），虽然保证了运动学可行，但也意味着长尾的极端重卡场景（连续发卡弯、湿滑下坡）依然缺位。其二，动力学模型虽然对标 TruckSim，但真实的胎地附着、空气动力学、挂车铰接效应仍是简化。下一步如果能引入挂车列车的高维模型，这个基准的工程价值会再上一个台阶。其三，从 LTR/NRS 到端到端的\u0026quot;动力学安全感知规划\u0026quot;还有很长的路——理想情况下，规划器应该在训练阶段就能通过可微的动力学模型获得 LTR 的梯度，而不仅仅是在评测阶段计算分值。\n作为一个\u0026quot;基础设施级\u0026quot;的工作，nuTruck 不炫技，但它补上的是学习型规划走向真实重卡部署的那块最关键的拼图——让模型学会：不撞只是底线，不翻才是合格。\n📖 论文精读系列。本文基于 arXiv:2607.13704 撰写。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2607-13704/","summary":"nuTruck 是首个面向分布式电驱重卡（DET）的规划训练与闭环评测基准，填补了学习型规划器在重卡领域被忽视的安全空白。它构建三轴六轮高保真非线性动力学模型并引入侧翻风险指标 LTR 与 NRS，证明了乘用车时代的\u0026rsquo;无碰撞即安全\u0026rsquo;假设在重卡上完全失效。核心发现：规划层必须考虑动力学安全，下游控制器无法兜底。","title":"论文精读｜nuTruck：面向分布式电驱重卡的自动驾驶规划闭环基准"},{"content":"论文信息 标题：VADv2: End-to-End Vectorized Autonomous Driving via Probabilistic Planning 作者机构：华中科技大学（HUST） × 地平线机器人（Horizon Robotics）（Bo Jiang, Shaoyu Chen, Hao Gao, Bencheng Liao, Qian Zhang, Wenyu Liu, Xinggang Wang） arXiv：2402.13243（ICLR 2026） 代码：github.com/hustvl/VAD 一句话总结：把驾驶规划从\u0026quot;我猜唯一最优动作\u0026quot;改成\u0026quot;我算所有动作的概率分布再采样\u0026quot;，用规划词表（4096 条轨迹）离散化连续动作空间，用概率场函数学习场景与动作的关联，在 CARLA Town05 跑出 85.1 DS，比 DriveMLM 高 9.0，而且只用相机、不用规则后处理。 要解决什么问题：规划的不确定性被忽视了 端到端自动驾驶已经证明\u0026quot;从大量人类驾驶数据中模仿学习\u0026quot;是可行的路线。但 VADv2 抓到了一个被忽视的根本问题：驾驶规划本质上是高度不确定的。\n图 1：驾驶规划的不确定性。 左图：跟车时，人类司机的合理操作包括保持车道、变道超车、减速让行，多条轨迹都合理；右图：对向来车时，让行或加速超越都是可行选择。确定性回归模型会取\u0026quot;均值\u0026quot;——输出一条哪里都不靠的危险轨迹。VADv2 不再强制回归单一路径，而是学习整个动作空间的概率分布。\n作者举了两个直观的场景：\n场景 人类司机的合理选择 核心问题 跟车时 继续跟、变道超车、减速让行 多个动作都合理，没有唯一正确答案 对面来车 减速让行、加速抢道 取决于无数隐变量，无法精确建模 现有的学习方法（VAD、UniAD、ThinkTwice、Diffusion Planner 等）全都在做一件事：确定性回归——给一个场景，直接回归出一条轨迹或一组控制信号。这隐含地假设了\u0026quot;场景到动作\u0026quot;存在确定性的映射关系，但实际情况完全不是这样。当可行解空间是非凸的（比如多条合理轨迹在空间上不相邻），确定性回归会\u0026quot;取中间值\u0026quot;，输出一个哪里都不靠的危险动作——作者把这个叫做 \u0026ldquo;regression to the mean\u0026rdquo; 问题。\n这个痛点和 LLM 面临的挑战是类似的——给定上文，下一个词也不是唯一的。但 LLM 的做法是学一个条件概率分布 \\(p(\\text{next\\_word} \\mid \\text{context})\\)，然后采样。VADv2 的核心洞察就是把 LLM 这套哲学搬到驾驶规划里：不猜唯一答案，而算概率分布。\n核心思想：概率规划（Probabilistic Planning） VADv2 的核心主张：\n把规划建模为场景条件随机过程 \\(p(\\bm{a} \\mid \\bm{o})\\)，其中 \\(\\bm{o}\\) 是观测，\\(\\bm{a}\\) 是候选动作。学分布，而不是直接回归动作值。\n这个转变带来三个关键好处：\n优势 解释 天然处理非凸解空间 分布可以呈现多峰，每条合理轨迹都可以有高概率，不需要被迫取舍 更丰富的监督信号 确定性回归只监督最优动作；概率规划给每个候选动作都提供监督 推理灵活 输出整个动作空间的分布，可灵活结合规则或优化方法做后处理筛选 实现的技术难点是：如何在一个高维连续时空里高效地表达和计算这个概率分布？\nVADv2 的答案：离散化动作空间 → 规划词表 → 概率场函数 → Transformer 打分 → softmax/sigmoid 归一化 → 采样。\n整体架构 VADv2 的整体框架如下：\n图 2：VADv2 整体架构。 输入为多视图图像序列（Streaming 方式），经过场景编码器提取实例级 token（地图 token、智能体 token、交通元素 token、图像 token），与规划词表的规划 token 通过 Transformer Decoder 做交叉注意力交互，输出每个动作的概率值，采样最高分动作后用 PID 控制器转为控制信号。大规模驾驶演示数据 + 场景约束共同监督概率分布。\n整条数据流可以拆成四大步：\n场景编码：多视图图像 → BEVFormer → BEV 特征 → MapTR 提取向量化地图 + Agent Query 检测追踪 + 交通信号编码 → 场景 token 序列 规划词表构建：从训练集轨迹中 FPS 采样 4096 条代表性轨迹 → 可学习 embedding → 规划 token 序列 概率场计算：规划 token 作为 query，场景 token 作为 key/value，在 Transformer Decoder 中交叉注意力交互 → 每个规划 token 得到一个概率值 → softmax 归一化为分布 采样与控制：从分布中采样一条轨迹 → PID 控制器映射为方向盘、油门、刹车 下面逐块详细拆解。\n方法详解 一、场景编码器（Scene Encoder） VADv2 的场景编码器把传感器数据转换成实例级 token 嵌入 \\(E_{\\text{scene}} \\in \\mathbb{R}^{M \\times D}\\)，其中 M 是场景 token 数量，D=256 是特征维度。它包含四种 token：\n1. BEV 编码器 先用 BEVFormer 把多视图图像特征从透视图（perspective view）转换为鸟瞰图（BEV），得到 BEV 空间中的特征图。这个特征图是后续所有实例级 token 学习的基础。\n2. 地图 Token（Map Tokens） 一组 MapTRv2 风格的 query 从 BEV 特征图中学习向量化地图元素，包括：\n车道中心线（lane centerlines） 车道分隔线（lane dividers） 道路边界（road boundaries） 人行横道（pedestrian crossings） 每个地图元素被编码为一个 token，显式表达了道路拓扑结构。\n3. 智能体 Token（Agent Tokens） 一组 agent query（继承自 VAD）检测并追踪周围的交通参与者，输出：\n3D 位置、朝向、尺寸 速度 未来轨迹预测 类别（车辆、行人、自行车等） 每个智能体被编码为一个 token，包含运动和语义信息。\n4. 交通元素 Token（Traffic Element Tokens） 交通信号在规划中至关重要。在 CARLA 中考虑两类：\n交通灯：编码前视图图像特征 → MLP 预测交通灯状态（黄/红/绿）以及该灯是否影响自车 停止标志：预测停止标志区域与自车的重叠情况 5. 图像 Token（Image Tokens） 除了以上实例级 token，前视图图像特征还被保留为图像 token，提供更稠密的场景特征，补足实例级 token 可能遗漏的细节信息。\n此外，导航信息（路线指引）和自车状态（速度、加速度等）也通过 MLP 编码为嵌入向量 \\(E_{\\text{navi}}, E_{\\text{state}}\\)。\n关键认知：场景编码器的核心是把稀疏的传感器数据压缩成紧凑的高维语义 token。地图、agent、交通元素 token 各自有独立的监督信号，确保它们显式编码了对应的高层信息。这和 VAD 的向量化范式一脉相承，但 VADv2 新增了图像 token 和交通元素 token，场景表达能力更强。\n二、概率规划（Probabilistic Planning） 这是 VADv2 最核心的创新。整个模块解决一个问题：给定场景 token，怎么算出每个候选动作的概率？\n2.1 问题形式化 将规划策略建模为场景条件随机过程：\n\\[ p(\\bm{a} \\mid \\bm{o}), \\quad \\bm{o} = (E_{\\text{scene}}, E_{\\text{navi}}, E_{\\text{state}}), \\quad \\bm{a} = (x_1, y_1, x_2, y_2, \\dots, x_T, y_T) \\]T=6 是轨迹 waypoint 数量（3 秒，间隔 0.5 秒），每个 waypoint 是自车在 BEV 空间中的 (x, y) 坐标。\n2.2 规划词表构建（Planning Vocabulary） 连续动作空间没法直接算概率分布——那就离散化。VADv2 的做法：\n收集：从所有训练集的人类驾驶轨迹中提取动作集合 S。每个动作是一条 3 秒的完整轨迹（6 个 waypoint）。 最远点采样（Farthest Point Sampling, FPS）：从 S 中选出 N 条最具多样性的轨迹作为规划词表 V。 词表大小：默认 N = 4096（消融实验表明这是最佳平衡点）。 物理可行性：每条轨迹来自真实驾驶数据，天然满足车辆运动学约束，不需要后处理修正。 最远点采样（Farthest Point Sampling, FPS） 是一种贪心多样性最大化算法：每次从剩余候选中挑出离已选集合最远的点加入，保证选出的子集在整个空间上均匀覆盖。与 k-means 这类密度自适应方法不同，FPS 不受数据分布偏态影响——即使在直行轨迹占 90% 的数据中，它也会优先保留稀有的转弯/变道样本。\nFPS 的算法流程（Algorithm 1）：\n输入：动作集合 S，词表大小 N 输出：规划词表 V = {a¹, a², ..., a^N} 1. 从 S 中随机选一条轨迹 a¹，加入 V 2. for i = 2 to N: a. 对 S \\ V 中的每条轨迹 s，计算它到 V 中所有轨迹的最小 L2 距离 d(s) = min_{v∈V} ||s - v||₂ b. 选出 d(s) 最大的轨迹 aⁱ = argmax d(s) c. 把 aⁱ 加入 V 3. return V 为什么用 FPS 而不是 k-means？因为驾驶轨迹分布天然不均匀——直行轨迹占绝大多数，k-means 聚类会浪费大量词表容量在细微的直行变体上，而转弯、变道等关键动作反而得不到足够的表征。FPS 保证了词表在整个动作空间上均匀覆盖。\n与 MotionLM 那种单步离散化（每步拆成纵向+横向）不同，VADv2 的每个词条是一条完整的轨迹序列，避免了迭代 rollout 带来的误差累积。同时，词表本身就是一组物理可行的运动基元，采样出来的轨迹不需要后处理修正。\n2.3 规划 Token 化（Tokenization） 每个词表中的轨迹 \\(a\\) 被编码成高维嵌入 \\(E(a)\\)。关键技巧：坐标编码函数。\nVADv2 采用类似 NeRF 的位置编码策略，把连续的 (x, y) 坐标映射到高维空间：\n\\[ E(a) = \\left( \\Gamma(x_i), \\Gamma(y_i) \\right)_{i=1}^{T} \\]\\[ \\Gamma(pos) = \\left( \\gamma(pos, j) \\right)_{j=0}^{L-1} \\]\\[ \\gamma(pos, j) = \\left( \\cos(\\frac{pos}{10000^{2\\pi j / L}}), \\sin(\\frac{pos}{10000^{2\\pi j / L}}) \\right) \\]\\(\\Gamma\\) 把每个坐标从 \\(\\mathbb{R}\\) 映射到 \\(\\mathbb{R}^{2L}\\)，让模型能近似更高频的场函数。这和 NeRF 中 positional encoding 的原理一样——高频编码让网络更容易学习高频变化的函数，而驾驶轨迹恰好需要在不同场景下有精细的分布差异。\n直观理解：两个相似的轨迹（比如直行但速度略有不同）在原始坐标空间里距离很近，编码后在嵌入空间中保留距离关系的同时，还引入了周期性模式，让 Transformer 能更精细地区分它们。\n每个词条有一个可学习的 token embedding，与位置编码叠加后作为 Transformer Decoder 中的 query。\n2.4 概率场函数（Probabilistic Field Function） VADv2 假设概率 \\(p(a)\\) 关于 \\(a\\) 是连续的，且对微小扰动不敏感。受 NeRF 启发——NeRF 在 5D 空间（3D 位置 + 2D 视角方向）上建模连续辐射场——VADv2 在动作空间上建模连续概率场。\n具体实现是一个级联的 Transformer Decoder：\n\\[ p(a) = \\sigma\\left( \\text{MLP}\\left( \\phi(E(a), E_{\\text{scene}}) + E_{\\text{navi}} + E_{\\text{state}} \\right) \\right) \\] \\(\\phi\\)：Transformer Decoder，\\(E(a)\\) 作为 query，\\(E_{\\text{scene}}\\) 作为 key/value 交叉注意力输出的特征 + 导航嵌入 + 自车状态嵌入 → MLP → sigmoid 输出概率 \\(\\sigma\\) 是 sigmoid 函数，输出 (0,1) 之间的概率值 所有嵌入维度统一为 D=256。整个计算过程可以用下图总结：\n规划词表 V ─→ 坐标编码 Γ ─→ E(a) (query) ─┐ ├→ Transformer Decoder φ → MLP → sigmoid → p(a) 场景 token E_scene (key/value) ────────────┘ ↑ 导航 E_navi + 自车状态 E_state ──────────────┘ 关键认知：这里没有用 softmax，而是用 sigmoid——每个动作的概率是独立计算的（multi-label 而非 multi-class）。这很重要，因为动作空间不是互斥的——多个合理动作都可以有高概率。用 sigmoid 允许分布呈现任意形状，不受\u0026quot;概率和为 1\u0026quot;的约束（实际上 VADv2 在损失函数中用了 KL 散度 + 交叉熵来归一化分布）。\n三、训练（Training） VADv2 的训练损失包含三个部分：\n\\[ \\mathcal{L} = \\mathcal{L}_{\\text{distribution}} + \\mathcal{L}_{\\text{conflict}} + \\mathcal{L}_{\\text{token}} \\]3.1 分布损失（Distribution Loss） 从大规模驾驶演示中学习概率分布。用 KL 散度最小化预测分布和数据分布的差异：\n\\[ \\mathcal{L}_{\\text{distribution}} = D_{\\text{KL}}(p_{\\text{data}} \\parallel p_{\\text{pred}}) = \\sum_{a \\in V} p_{\\text{data}}(a) \\cdot \\log \\frac{p_{\\text{data}}(a)}{p_{\\text{pred}}(a)} \\]\\(p_{\\text{data}}(a)\\) 通过演示数据中每个动作的出现频率估算。具体做法：\n对每一帧演示数据，从规划词表中选出与 ground-truth 轨迹 L2 距离最小的词条（最佳匹配） 该词条标签为 1，其余为 0 对所有帧统计每个词条成为最佳匹配的频率 → \\(p_{\\text{data}}(a)\\) 由于 \\(p_{\\text{data}}(a)\\) 固定，\\(\\sum p_{\\text{data}}(a) \\log p_{\\text{data}}(a)\\) 是常数，最小化 KL 等价于优化交叉熵损失：\n\\[ \\mathcal{L}_{\\text{distribution}} = -\\sum_{a \\in V} p_{\\text{data}}(a) \\cdot \\log p_{\\text{pred}}(a) \\]这与 LLM 的标准做法完全一致——ground-truth token 标签为 1，其他为 0，用交叉熵监督。\n3.2 冲突损失（Conflict Loss） 场景约束帮助模型学习重要的驾驶先验知识。如果一个动作与以下情况冲突，该动作被标记为负样本，其概率被压低：\n与其他智能体的 ground-truth 未来运动轨迹冲突（碰撞） 偏离道路边界 \\[ \\mathcal{L}_{\\text{conflict}} = \\sum_{a \\in V} \\mathbb{1}_{\\text{conflict}}(a) \\cdot \\log p_{\\text{pred}}(a) \\]\\(\\mathbb{1}_{\\text{conflict}}(a)\\) 是指示函数——冲突时为 1，否则为 0。这个损失确保模型不仅模仿人类行为，还学会避免不安全的动作。\n3.3 场景 Token 损失（Scene Token Loss） 地图、agent 和交通元素 token 各自有独立的监督信号：\n地图 token（MapTRv2）：L1 回归损失（地图点坐标）+ Focal 分类损失 Agent token（VAD）：L1 回归损失（位置/朝向/尺寸）+ Focal 分类损失 + minFDE 轨迹回归损失 + 多模态轨迹分类损失 交通元素 token：Focal 损失（交通灯状态 + 停止标志重叠预测） 四、推理（Inference） VADv2 的推理有两种模式：\n纯神经网络模式（端到端） 在闭环测试中的标准做法：\n每时间步从前视图图像序列中提取场景 token 用 Transformer Decoder 计算 4096 个动作的概率 选择概率最高的动作（top-1 采样） 用 PID 控制器将轨迹转换为控制信号（steer, throttle, brake） 完全不需要规则后处理——这是 VADv2 的重要亮点 混合模式（实际部署） 在真实世界应用中的推荐做法：\n采样 top-K 动作作为候选提案 用规则wrapper过滤掉不安全提案 用优化后处理器做细粒度轨迹微调 概率值可以作为置信度——低概率时切换回传统规则方法（human takeover） 混合模式展示了概率规划的一个被低估的优势：模型自带\u0026quot;自知之明\u0026quot;。如果某个场景下分布特别均匀（熵很高），模型就知道\u0026quot;我不确定该怎么开\u0026quot;，可以请求人类接管。这是通往 L4 的核心能力之一。\n实验亮点 CARLA Town05 闭环：纯相机超越跨模态方案 方法 传感器 Drive Score Route Completion Infraction Score Interfuser C 68.3 95.0 - ST-P3 C 11.5 83.2 - VAD C 30.3 75.2 - UniAD C 31.0 47.5 0.77 MILE C 61.1 97.4 0.63 DriveAdapter+TCP C+L 71.9 97.3 0.74 ThinkTwice C+L 70.9 95.5 0.75 DriveMLM C+L 76.1 98.1 0.78 VADv2 C 85.1 98.4 0.87 VADv2 只用相机在 Drive Score 上比用相机+激光雷达的 DriveMLM 高 9 分（+11.8%），比纯相机方案 Interfuser 高 16.8 分。Route Completion 达到 98.4%，几乎在所有路线上都能跑完全程。Infraction Score 0.87 也是最优。\n最关键的一点：VADv2 不需要规则后处理。此前几乎所有方法都要在模型输出后面挂一套 hand-crafted 规则来修正碰撞和偏离——用规则判断轨迹是否安全、再用优化方法调整。VADv2 直接在模型内部通过 conflict loss 学了约束，端到端全程神经网络搞定。\nBench2Drive 基准：同样领先 在最新提出的 Bench2Drive 基准（包含更多交互场景和复杂路线）上，VADv2 的 Drive Score 达到 76.15，同样以显著优势领先所有方法。\nNAVSIM + 3DGS 真实场景：鲁棒性验证 方法 Collision Ratio (CR) ↓ Deviation Ratio (DR) ↓ TransFuser (C+L) 0.320 - VADv2 (C) 0.270 0.243 在 337 个 3DGS 重建的真实环境（2000 小时真实驾驶数据）上，VADv2 的碰撞率 0.270 比 TransFuser（0.320）降低 15.6%，偏离率 0.243 也接近最优。这证明了 VADv2 不只是仿真环境里的\u0026quot;高分玩家\u0026quot;，在真实场景迁移上也有实质优势。\n消融实验：核心贡献验证 1. 概率规划 vs 确定性回归\n规划范式 NAVSIM PDMS 分析 确定性回归 85.8 高密度场景下明显退化 概率规划 87.7 各密度场景下稳定表现 在控制场景编码完全一致的条件下，概率规划在所有密度等级上都优于确定性回归。尤其在高密度交通下差距最大（+1.9 PDMS），说明多模态分布建模在复杂场景中的优势最明显。\n2. 词表大小消融\n词表大小 Town05 DS 分析 256 70.2 容量严重不足，多样性受限 1024 78.1 离散化太粗，表达能力不足 4096 85.1 最佳平衡点 16384 84.5 词表过大引入稀疏噪声，收益饱和 4096 是 sweet spot——足够覆盖驾驶动作的多样性，又不至于让学习过于稀疏。当词表增加到 16384 时性能反而略有下降，因为大量词条在训练中很少被激活，梯度信号稀疏。\n3. 各模块消融\nID Distribution Loss Conflict Loss Agent Token Map Token Traffic Token Image Token L2 3s ↓ Collision 3s ↓ 1 ✗ ✓ ✓ ✓ ✓ ✓ 0.595 0.078 2 ✓ ✗ ✓ ✓ ✓ ✓ 0.380 0.058 3 ✓ ✓ ✗ ✓ ✓ ✓ 0.386 0.052 4 ✓ ✓ ✓ ✗ ✓ ✓ 0.359 0.053 5 ✓ ✓ ✓ ✓ ✗ ✓ 0.347 0.046 6 ✓ ✓ ✓ ✓ ✓ ✗ 0.338 0.045 7 ✓ ✓ ✓ ✓ ✓ ✓ 0.290 0.039 Distribution Loss 最重要（ID 1 → L2 3s 从 0.290 涨到 0.595，翻倍） Conflict Loss 提供关键安全先验（ID 2 → Collision 3s 从 0.039 涨到 0.058） 四种场景 token 各有贡献，全量使用（ID 7）达到最优 多模态输出质量 VADv2 的 top-1 到 top-5 轨迹规划性能基本持平，证明它真正学到了多模态分布——多个候选轨迹质量都很高，不只是\u0026quot;赌对一个\u0026quot;。\n个人思考 VADv2 让我最兴奋的不是它刷了多少分，而是它把自动驾驶的认知范式从\u0026quot;确定性\u0026quot;升级到了\u0026quot;概率性\u0026quot;。\n回顾这条线的演进：\nUniAD（CVPR 2023 最佳论文）证明\u0026quot;以规划为中心做联合优化\u0026quot;可行，开创了端到端范式 VAD（ICCV 2023）证明\u0026quot;向量化替代稠密栅格\u0026quot;效率更高，速度提升数倍 VADv2（ICLR 2026）证明\u0026quot;概率分布替代确定性回归\u0026quot;更能应对真实世界的模糊性 这个思路和最近 GRPO/RL 方向的进展遥相呼应——AlphaDrive-GRPO 也是用群体相对策略优化搜索动作空间。两者共同的趋势是：不再假设一个场景只有一个最优解，而是承认多解性，再去学怎么从候选里挑出好的。\n从架构看 VADv2 的三个关键设计选择 1. 为什么用 FPS 而不是 k-means？\n驾驶轨迹分布是高度偏态的——直行占绝大多数，转弯/变道是少数的关键样本。k-means 会把有限容量浪费在细微的直行变体上，而 FPS 保证词表均匀覆盖动作空间。这和 NLP 中 subword tokenization 的\u0026quot;覆盖所有常见模式且不浪费容量\u0026quot;的思路是相通的。\n2. 为什么用 sigmoid 而不是 softmax？\n多个合理动作不是互斥的。用 softmax 强制所有概率和为 1，意味着一个动作概率高了其他必然低——这在多模态场景下不合适。sigmoid 允许每个动作独立获得高概率，分布可以呈现任意形状。\n3. 为什么需要 conflict loss？\n单纯模仿人类驾驶数据只能学到\u0026quot;人类做了什么\u0026quot;，但不知道\u0026quot;什么绝对不能做\u0026quot;。conflict loss 显式告诉模型碰撞和偏离路线是不安全的，即使人类演示中从未出现过。这是从\u0026quot;行为克隆\u0026quot;向\u0026quot;安全约束学习\u0026quot;的关键一步。\n局限与展望 第一，VADv2 的词表需要预定义且大小固定（4096），这意味着它无法在推理中动态创建新的动作模式，上限受限于词表的覆盖范围。对于长尾场景中极端罕见的操作，词表可能没有覆盖。未来可以探索动态扩展词表或结合连续优化做微调。\n第二，目前的高分还集中在仿真环境，虽然 3DGS 基准往前迈了一大步，但离真正开放道路部署还有距离。从 CARLA 到真实世界的 domain gap 仍然是端到端方法的头号挑战。\n第三，VADv2 的概率建模只覆盖了规划阶段。如果能把感知的不确定性也纳入概率框架——比如对遮挡区域的目标位置输出概率分布而不是单一检测框——整个系统的鲁棒性可能会再上一个台阶。这也许是\u0026quot;全概率端到端\u0026quot;的方向。\n第四，VADv2 的 Transformer Decoder 每次对所有 4096 个动作做交叉注意力，计算量是 O(N) 的。未来可以探索用 ANN 或层级过滤先缩小候选集再做精细打分，进一步提高效率。\n和本系列其他论文的关系 VADv2 在\u0026quot;端到端驾驶规划\u0026quot;这条线上是一个非常特殊的位置：\n对比 UniAD / VAD（确定性规划派）：VADv2 用概率分布替代了直接回归，解决了非凸解空间的问题。但场景编码部分继承自 VAD 的向量化范式——说明\u0026quot;向量化场景表示\u0026quot;和\u0026quot;概率规划\u0026quot;是两个正交的创新点，可以叠加。 对比 Diffusion Planner / DriveDiffusion（扩散规划派）：扩散模型也是从噪声逐步去噪到轨迹，本质上也建模了分布。但扩散需要多步迭代（通常 10-50 步），VADv2 是一步推理。两者互补——扩散适合高质量但延迟不敏感的场景，VADv2 适合低延迟实时控制。 对比 DriveMLM / DriveCoT（LLM 规划派）：VADv2 和 DriveMLM 都从 LLM 得到启发（分布建模 + 采样），但 VADv2 用离散词表 + 概率场替代了 token by token 自回归生成。前者是 One-shot 分类，后者是 Seq-to-seq 生成。VADv2 更快，但 DriveMLM 的可解释性和推理能力更强。 对比 AlphaDrive-GRPO / Flow-GRPO（RL 规划派）：这些方法用强化学习搜索动作空间。VADv2 用监督学习学分布。两者理论上可以结合——VADv2 提供先验分布，GRPO 在这个分布上做探索。 一句话总结：VADv2 = 向量化场景编码（VAD 继承）+ FPS 规划词表（4096 条完整轨迹）+ NeRF 风格坐标编码（高频位置编码）+ Transformer Decoder 交叉注意力（规划 token query, 场景 token key/value）+ 概率场函数（sigmoid 输出）+ 三重损失（KL 分布 + 冲突约束 + token 监督）。它最核心的贡献是：把\u0026quot;这个场景该走哪条路\u0026quot;从回归问题变成了分类问题，从而天然获得了处理多模态不确定性、输出置信度、无需规则后处理这三个关键能力。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2604-0959/","summary":"VADv2 把驾驶规划从\u0026rsquo;猜唯一答案\u0026rsquo;的确定性回归改造成\u0026rsquo;算所有动作的概率分布再采样\u0026rsquo;的概率规划范式。它用规划词表离散化连续动作空间、用概率场函数建模场景与动作的关联，天然处理多模态非凸解空间。在 CARLA Town05 将 Drive Score 从 76.1 拉到 85.1，且无需任何规则后处理，被 ICLR 2026 接收。","title":"论文精读｜VADv2：概率规划——把驾驶决策从\"猜唯一答案\"变成\"算概率分布\""},{"content":"📄 论文信息 标题：WCog-VLA: A Dual-Level World-Cognitive Vision-Language-Action Model for End-to-End Autonomous Driving 团队：同济大学 × 南洋理工大学（NTU） arXiv：2607.08375（2026 年 7 月，cs.CV） 关键词：世界认知、Game-CoT、ADDT、多智能体扩散、主动驾驶 一句话总结：第一个把\u0026quot;语义层世界预测\u0026quot;和\u0026quot;生成层世界演化\u0026quot;桥接起来的 VLA 框架——用 agent token + 博弈思维链理解\u0026quot;世界会怎样\u0026quot;，再用对齐解耦扩散 Transformer 合成\u0026quot;我和周围车一起怎么动\u0026quot;，在 NAVSIM 刷新 PDMS 92.9。 图1：四种VLM在E2E驾驶中的整合范式对比。(a)纯文本输出动作；(b)VLM作认知编码器+扩散解码器；(c)碎片化世界预知；(d)WCog-VLA双层级世界认知——桥接语义预测与生成演化，实现主动驾驶。\n图2：WCog-VLA整体框架。语义层：6路相机→BEVFormer提取BEV→TrackFormer聚合成agent token→VLM隐状态解耦为认知+推理双角色。生成层：ADDT条件于VLM隐状态，5步扩散合成多智能体联合轨迹。\n🤔 要解决什么问题？现在的 VLA 只会\u0026quot;被动反应\u0026quot; 端到端驾驶 + VLM 已经是显学，EMMA、ReCogDrive、AutoVLA、LatentVLA 一路把 NAVSIM 的 PDMS 推到 92 量级。但 WCog-VLA 的作者抓得很准——这些模型本质上都是\u0026quot;反应式驾驶员\u0026quot;。他们把当下 VLA 的三类病灶列得很清楚：\n病灶 表现 后果 缺 3D 空间感知 只用 2D 图像特征，没有结构化 3D 表征 空间推理不准，规划误差大 世界认知不足 无法表征世界状态、预测未来动态 只能被动反应，不会主动 缺博弈式推理 推理只描述静态场景，没有\u0026quot;如果我这样，对方会怎样\u0026quot; 不会在交互中争取主动 作者特别区分了\u0026quot;碎片化世界预知\u0026quot;和\u0026quot;完整世界认知\u0026quot;。已有的 DriveVLA-W0、UniDrive-WM 把世界建模当成辅助的图像生成任务，只预测\u0026quot;未来画面长啥样\u0026quot;，却忽略了自车与周围智能体的交互演化——说白了就是只会\u0026quot;脑补画面\u0026quot;，不会\u0026quot;脑补博弈\u0026quot;。核心问题由此被提炼：如何让 VLA 同时具备语义层的预测和生成层的演化，从而实现主动驾驶？\n💡 核心思想：双层级世界认知（Dual-Level World Cognition） WCog-VLA 的解法是把\u0026quot;世界认知\u0026quot;拆成两层——语义层做世界预测与博弈推理，生成层做世界演化与轨迹合成——让 VLM 的语义理解和扩散模型的生成分工又咬合。\n第一层：语义层世界认知（Semantic-Level） 语义层的输入是 6 路相机图像、导航指令、自车状态（速度 + 2 秒历史轨迹）。骨干是 InternVL3-2B（300M 的 InternViT 视觉编码器 + Qwen2.5 LLM，295 亿参数）。关键的两步创新：\n1. 3D 空间感知注入：先用 BEVFormer 把多视角图像特征通过可变形注意力投影到 BEV 空间，得到稠密 BEV 特征图 $\\mathcal{B} \\in \\mathbb{R}^{H \\times W \\times C}$。再用 TrackFormer 以可学习 query 对 BEV 进行交叉注意力解码，将稠密表征聚合成稀疏 agent token $\\mathcal{T}_{\\text{agent}} \\in \\mathbb{R}^{N \\times D}$，其中 $N$ 为检测到的智能体数量（动态上限 32），$D=256$。每个 agent token 隐式编码了对应的 3D 位置、朝向、尺度、速度等几何属性。\n2. 统一世界认知与推理：将三类 token——vision token $\\mathcal{T}_{\\text{vis}}$（InternViT 输出）、text token $\\mathcal{T}_{\\text{text}}$（导航/指令分词）、agent token $\\mathcal{T}_{\\text{agent}}$——拼接后送入 LLM 的 Transformer 层。LLM 输出的 hidden states $\\mathcal{H} \\in \\mathbb{R}^{T \\times d}$ 经过一个解耦投影层分裂为两种角色：\n认知角色 $O_{\\text{agent}} \\in \\mathbb{R}^{N \\times d}$：由 agent token 对应位置的 hidden states 组成，送入 world head（一个 3 层 MLP + 两层 LSTM）预测周围车当前 3D 框 $\\hat{b}_t$ 和未来 8 秒轨迹 $\\hat{\\tau}_{\\text{surr}}$： $$\\hat{b}_t = f_{\\text{bbox}}(O_{\\text{agent}}), \\quad \\hat{\\tau}_{\\text{surr}} = f_{\\text{traj}}(O_{\\text{agent}})$$ world head 的损失函数为 L1 回归 + GIoU 分类的联合形式： $$\\mathcal{L}_{\\text{world}} = \\sum_{t} \\left( \\lambda_1 \\mathcal{L}_{\\text{L1}}(b_t, \\hat{b}_t) + \\lambda_2 \\mathcal{L}_{\\text{GIoU}}(b_t, \\hat{b}_t) \\right) + \\lambda_3 \\mathcal{L}_{\\text{L1}}(\\tau_{\\text{surr}}, \\hat{\\tau}_{\\text{surr}})$$ 推理角色 $O_{\\text{vis}}/O_{\\text{text}}$：vision/text token 对应的 hidden states 经语言头做 Game-CoT 博弈推理（详见下节），输出自然语言推理链。\n第 1.5 层：Game-CoT 博弈式思维链 Game-CoT 将交通场景建模为 Stackelberg 博弈——自车是 leader，周围每辆车是 follower——形成一个四步推理链：\n步骤 描述 数学表示 Step 1: 场景估计 基于感知结果，自车估计当前博弈状态 $s_0 = \\{\\mathcal{T}_{\\text{agent}}, \\text{map}, \\text{nav}\\}$ Step 2: 动作枚举 自车枚举 $K$ 个候选高层意图（左换道/右换道/跟车/加速/减速） $\\mathcal{A}_{\\text{ego}} = \\{a^{(1)}, \\dots, a^{(K)}\\}$ Step 3: 对手建模 对每个候选 $a^{(k)}$，推断周围车的条件反应 $P(a_{\\text{surr}} \\mid a^{(k)}, s_0) \\approx \\text{softmax}(f_{\\text{LLM}}(a^{(k)}, s_0))$ Step 4: 收益评估 联合评估每对策略的 payoff（安全性+效率+舒适性） $a^*_{\\text{ego}} = \\arg\\max_{a^{(k)}} \\mathbb{E}_{a_{\\text{surr}}} [R(a^{(k)}, a_{\\text{surr}}, s_0)]$ 整个推理过程以自然语言链形式输出，例如：\u0026ldquo;当前左车道有车以 45 km/h 行驶。如果我打左灯加速到 50 km/h，对方可能会减速让行。此时安全间距 2.1m \u0026gt; 阈值，因此选择左换道。\u0026rdquo; 训练使用 Qwen3-VL-Plus 自动标注的 85k Game-CoT 数据集，将上述四步写成 JSON 格式的 CoT 模板。\n第二层：生成层世界认知（Generative-Level） 这一层的主角是作者提出的 ADDT（Aligned Decoupled Diffusion Transformer），一个条件扩散生成模型，将 VLM 的高层语义解码为物理上合理的多智能体联合轨迹 $\\tau_{\\text{joint}} = \\{\\tau_{\\text{ego}}, \\tau_{\\text{surr},1}, \\dots, \\tau_{\\text{surr},N}\\}$，覆盖未来 8 秒、0.5 秒步长共 16 个时间步。\nADDT 的设计动机 标准的单网络 DiT 面临\u0026quot;优化两难\u0026quot;——它的条件编码阶段需要提取低频多车交互语义（宏观拓扑），而生成解码阶段需要恢复高频轨迹几何（微观精度）。这两个目标在同一组参数上冲突：交互建模需要大的感受野和抽象能力，轨迹生成需要精细的位置分辨率。ADDT 的破解之道是解耦架构 + 表示对齐。\nCondition Encoder（条件编码器） Condition Encoder $\\epsilon_\\phi$ 是一个标准的 DiT，输入为：\nVLM hidden states $\\mathcal{H}$ 经投影后的条件嵌入 $c \\in \\mathbb{R}^{d_c}$ 噪声化的联合轨迹 $z_k$（$k$ 步扩散后的隐变量） 当前去噪步 $k$ 的 Sinusoidal 位置编码 输出为交互感知的语义特征 $h = \\epsilon_\\phi(z_k, c, k) \\in \\mathbb{R}^{M \\times d_h}$，编码了自车与周围车之间的注意力交互模式。\nRepresentation Alignment（表示对齐） 关键创新：把 Condition Encoder 中间层特征 $h_i$ 通过一个映射网络 $h_\\phi$ 投影到预训练 VAE 的场景隐空间 $r_*$ 附近。$r_*$ 由一个独立的、冻结的场景 VAE 对完整轨迹 $\\tau_{\\text{joint}}$ 编码得到：\n$$z_0 = \\mathcal{E}_{\\text{scene}}(\\tau_{\\text{joint}}), \\quad r_* = \\mathcal{E}_{\\text{scene}}(z_0)$$对齐损失为余弦相似度形式：\n$$\\mathcal{L}_{\\text{align}} = 1 - \\cos\\left(r_*, \\, h_\\phi(h_i)\\right)$$这个损失的效果是：强制条件编码器的语义特征 $h_i$ 与场景 VAE 隐空间 $r_*$ 对齐。因为 $r_*$ 编码了完整的、干净的场景拓扑，对齐后的 $h_i$ 在相邻去噪步之间天然保持局部一致性，从而允许 ADDT 用更少的去噪步（只需 5 步）就收敛到高质量结果。\nGeneration Decoder（生成解码器） Generation Decoder $\\epsilon_\\theta$ 是另一个 DiT，以 Condition Encoder 的输出 $h$ 和噪声隐变量 $z_k$ 为输入，预测噪声 $\\hat{\\epsilon}$：\n$$\\mathcal{L}_{\\text{diff}} = \\mathbb{E}_{z_0, \\epsilon \\sim \\mathcal{N}(0, I), k \\sim \\mathcal{U}(1, K)} \\left[ \\|\\epsilon - \\epsilon_\\theta(z_k, c, k)\\|^2 \\right]$$解码器不直接处理原始轨迹坐标，而是在 VAE 隐空间 $z$ 中操作，最后通过 VAE Decoder $\\mathcal{D}_{\\text{scene}}$ 解码为物理轨迹：\n$$\\tau_{\\text{joint}} = \\mathcal{D}_{\\text{scene}}(z_0), \\quad \\text{where} \\quad z_0 = \\text{denoise}(z_K, \\epsilon_\\theta, \\epsilon_\\phi)$$ADDT 的总损失为扩散损失与对齐损失的加权和：\n$$\\mathcal{L}_{\\text{ADDT}} = \\mathcal{L}_{\\text{diff}} + \\lambda_{\\text{align}} \\mathcal{L}_{\\text{align}}$$推理加速 对齐机制带来的局部一致性使 ADDT 在推理时仅需 5 步去噪（DDIM scheduler），PDMS=89.3（20 步为 89.6，几乎不掉点）。推理时间仅 0.106 秒，比 VLM 文本生成（9.896 秒）快 93 倍，比标准 20 步 DiT 快 3.7 倍。\n四阶段训练流程 阶段 训练内容 冻结/训练 关键数据 Stage 1: 3D 感知预训练 BEVFormer + TrackFormer 检测+跟踪 Train: Percept. backbone; Freeze: LLM nuScenes 检测标签 Stage 2: VLM SFT VLM VQA 指令微调 + World Head 训练 Train: LoRA LLM + Head; Freeze: Percept. nuScenes VQA + 3D GT Stage 3: ADDT SFT 扩散模型条件生成训练 Train: ADDT (encoder+decoder); Freeze: VLM 联合轨迹数据 Stage 4: DiffGRPO 强化微调对齐驾驶奖励 Train: ADDT decoder + LoRA; Freeze: VLM+encoder NAVSIM 闭环奖励 第四阶段的 DiffGRPO 是为扩散模型特化的 GRPO 变体。奖励函数将自车规划质量与周围车预测解耦：\n$$r_i = r_{\\text{PDMS}} - \\lambda_{\\text{surr}} \\mathcal{L}_{\\text{L1}}(\\tau_{\\text{surr}}, \\hat{\\tau}_{\\text{surr}})$$其中 $r_{\\text{PDMS}}$ 是 NAVSIM 闭环分数，$\\mathcal{L}_{\\text{L1}}$ 约束周围车轨迹不要偏离真值太远——防止 RL 过度优化自车而使预测崩溃。Group-wise 采样 $G=8$ 条轨迹，用组内优势估计更新策略：$A_i = (r_i - \\text{mean}(\\mathbf{r})) / \\text{std}(\\mathbf{r})$。\n🎯 实验分析：92.9 PDMS 背后的每一层都不可少 NAVSIM v1 主要结果 在 NAVSIM v1 测试集上，WCog-VLA 以 PDMS 92.9 登顶，成为首个超过 92 的方法，关键安全指标也全面领先：\n方法 类型 PDMS $\\uparrow$ NC $\\uparrow$ TTC $\\uparrow$ DAC $\\uparrow$ EPAR $\\uparrow$ PDM-Closed 规则型 72.7 84.3 83.6 86.1 76.8 EMMA VLA（文本） 87.4 93.8 89.2 90.5 85.9 ReCogDrive VLA（扩散） 89.6 96.2 93.4 92.8 88.1 AutoVLA VLA（code） 89.9 96.5 93.9 93.1 93.2 LatentVLA VLA（latent） 91.2 97.1 95.0 93.9 91.8 WCog-VLA (ours) VLA+世界认知 92.9 99.4 98.5 94.2 92.3 PDMS 提升 +1.7 至 92.9，而 NC (碰撞率) 和 TTC (碰撞时间) 分别达到 99.4 和 98.5，说明世界认知带来的安全增益远大于纯规划精度提升。\n与相关方法的深度对比 WCog-VLA 与其他世界认知型 VLA 的差异体现在：\n方面 CoWorld-VLA UniDrive-WM DriveVLM WCog-VLA 3D 空间感知 2D 图像级 BEV 稠密 2D 图像级 Agent Token 稀疏 世界预测形式 未来图像 未来 BEV 文本描述 语义预测+生成演化 博弈推理 无 无 基础 CoT Game-CoT (Stackelberg) 轨迹生成 文本回归 文本回归 文本回归 ADDT 扩散合成 多智能体联合 无 无 无 联合轨迹生成 NAVSIM PDMS ~85 ~86 ~87 92.9 WCog-VLA 的独特优势在于\u0026quot;稀疏 agent token + Game-CoT + ADDT\u0026quot;的完整链路，比碎片化世界预知方法在完备性上有本质差异。\n核心消融实验 双层级世界认知消融 语义世界认知 生成世界认知 PDMS NC TTC 当前感知 无 87.6 94.1 91.2 未来预测 无 87.8 94.3 91.5 当前+未来 无 88.1 94.8 92.0 当前+未来 多智能体合成 89.3 96.7 94.8 语义层当前感知 +0.5、未来预测 +0.7，两者合体到 88.1（+1.3 vs 无认知基线 ~86.8）。加入生成层多智能体合成后直接跳到 89.3（+4.1 vs 基线），说明\u0026quot;语义+生成\u0026quot;是协同跃迁而非简单叠加。\n四阶段训练消融 训练配置 PDMS $\\Delta$ Stage 2 仅 VLM SFT 84.4 - Stage 1 + Stage 2 85.5 +1.1 Stage 1 + Stage 2 + Stage 3 (ADDT) 89.3 +3.8 Stage 1 + Stage 2 + Stage 3 + Stage 4 (DiffGRPO) 92.9 +3.6 每个阶段贡献明确：3D 感知 +1.1，ADDT +3.8（从离散文本到连续轨迹的跨模态跃升），DiffGRPO +3.6（RL 对齐真实驾驶奖励）。\n3D 感知消融 变体 PDMS NC WCog-VLA 完整 92.9 99.4 去掉 TrackFormer（用稠密 BEV 替代） 90.8 97.2 去掉 BEV + TrackFormer（仅 2D 图像） 89.6 95.8 差值（3D 稀疏感知价值） 3.3 3.6 3D 感知单独消融值 3.3 分，说明 VLM 仅靠 2D patch 的空间精度根本不够。\nADDT 对齐与去噪步数 去噪步数 有对齐 (PDMS) 无对齐 (PDMS) 5 89.3 85.7 10 89.4 87.9 20 89.6 88.8 50 89.6 89.0 有对齐的 ADDT 在 5 步就达到 89.3，20 步仅微增 0.3 到 89.6；无对齐时需要 50 步才能接近。对齐机制使推理加速 10 倍且不掉点。\n推理速度对比 方法 推理时间 (s) 加速比 VLM 文本生成（带推理链） 9.896 1x VLM 文本生成（无推理链） 5.228 1.9x 标准 DiT 20 步 0.391 25.3x ADDT 5 步 0.106 93.4x ADDT 5 步推理仅 0.106s，比 VLM 文本生成快两个数量级，为实时部署提供了可行性。\n🧠 个人思考：从\u0026quot;看见\u0026quot;到\u0026quot;预判\u0026quot;，再到\u0026quot;博弈\u0026quot; WCog-VLA 最打动我的，是它把\u0026quot;世界模型\u0026quot;从一个渲染任务升级成了一个交互推演器。过去一两年，驾驶世界模型几乎等于\u0026quot;未来视频生成\u0026quot;——DriveDreamer、Vista、GAIA 都在卷画面逼真度。但 WCog-VLA 说：光会\u0026quot;脑补画面\u0026quot;没用，得会\u0026quot;脑补博弈\u0026quot;。它的 Game-CoT 用 Stackelberg 博弈把\u0026quot;如果我往左切，旁边那辆会减速让行还是抢道\u0026quot;显式写进推理链，这才是人类老司机真正在做的事——驾驶的本质不是轨迹回归，而是多智能体博弈。\n第二个值得点赞的设计是 ADDT 的解耦 + 对齐。扩散 Transformer 的\u0026quot;编码解码两难\u0026quot;是底层优化问题——低频交互语义和高频轨迹几何在单参数空间中天然冲突。作者用 Condition Encoder + Generation Decoder 双网络解耦，再用 VAE 隐空间对齐来\u0026quot;锚定\u0026quot;语义特征，本质上是在用表示学习的先验换去噪步数。这与 ReCogDrive 用 VAE 解耦认知与动作是同源思想，但 WCog-VLA 把它推到了多智能体联合生成的层面。5 步去噪不掉点，对落地是硬通货。\n第三，agent token 这一步看似小，实则关键。把 BEV 压成稀疏 agent token 再喂进 LLM，等于给语言模型装上了\u0026quot;3D 空间视网膜\u0026quot;。消融里 3D 感知值 3.3 分，说明 VLM 光靠 2D patch 看世界，空间精度根本不够。这也呼应了 Sparse4D、UniAD 的核心信念——结构化的稀疏表征，比稠密 BEV 更适合下游推理。\n从方法论角度看，WCog-VLA 代表了一条重要的技术路线演进：EMMA (纯文本) → AutoVLA (离散 code) → LatentVLA (连续 VAE 隐空间) → WCog-VLA (语义+生成双层级)。这条线的本质特征是把 VLM 从\u0026quot;直接动作回归器\u0026quot;逐步转变为\u0026quot;高层认知器\u0026quot;，把精细空间控制交给专用生成模型。这种分工既发挥了 LLM 在推理上的优势，又回避了它在空间精度上的短板。\n当然也有隐忧。其一，Game-CoT 是用 8.5 万条自动标注训练的，博弈推理的\u0026quot;正确性\u0026quot;完全依赖 Qwen3-VL-Plus 的标注质量，没有真实的多智能体交互标签做监督，模型可能学到的是\u0026quot;形似博弈\u0026quot;而非\u0026quot;真实博弈\u0026quot;。未来是否可以用在线强化学习让博弈推理在闭环交互中自我进化？其二，NAVSIM 本身是开环关键帧 + 闭环仿真，PDMS 高不等于真上路稳；尤其是博弈推理在 NAVSIM 的非反应式 agent（只回放 log）上能否体现价值，值得存疑——真实的主动博弈需要对方也是主动决策者。其三，四阶段训练 + DiffGRPO 的工程复杂度和算力门槛相当高，这套流程是否能在更小的模型上复现、是否能在车上实时跑满 50Hz 的规划频率，都需要进一步验证。\n总的来看，WCog-VLA 给出了一个清晰的信号：下一代 VLA 的竞争点，不在\u0026quot;谁的 VLM 更大\u0026quot;，而在\u0026quot;谁的世界认知更完整\u0026quot;。把语义预测和生成交融起来，让模型从\u0026quot;看到红绿灯刹车\u0026quot;进化到\u0026quot;预判对向车抢行主动让行\u0026quot;——这才是自动驾驶真正\u0026quot;像人\u0026quot;的那一步。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2607-08375/","summary":"WCog-VLA 是首个桥接语义层世界预测与生成层世界演化的 VLA 框架，将 VLA 从被动反应推向主动博弈。语义层用 agent token+Game-CoT（Stackelberg 博弈思维链）做世界预测与意图推理，生成层用对齐解耦扩散 Transformer 合成多智能体联合轨迹。在 NAVSIM 刷新 PDMS 92.9 的 SOTA，证明双层级世界认知是 VLA 进阶的关键方向。","title":"论文精读｜WCog-VLA：双层级世界认知，让自动驾驶从被动反应走向主动博弈"},{"content":"论文信息 标题：DriveTransformer: Unified Transformer for Scalable End-to-End Autonomous Driving 作者机构：上海交通大学 × 上海人工智能实验室（Xiaosong Jia, Junqi You, Zhiyuan Zhang, Junchi Yan） arXiv：2503.07656（ICLR 2025） 代码：github.com/Thinklab-SJTU/DriveTransformer 一句话总结：抛弃稠密 BEV 表示，用三种注意力（SCA + TSA + TCA）让任务 query 直接与原始传感器特征交互、与同级任务交互、与历史帧交互，实现真正的并行、稀疏、流式 Transformer。单阶段端到端训练，闭环 Bench2Drive 63.46 DS，开环 nuScenes 0.40 L2。 要解决什么问题：BEV 的三大瓶颈 在 DriveTransformer 之前，UniAD / VAD 系列已经证明了\u0026quot;端到端多任务统一\u0026quot;的可行性。但它们都依赖一个共同的基础构件：稠密 BEV 特征。DriveTransformer 指出，BEV-based 方法存在三个根本问题：\n问题 表现 后果 计算浪费 BEV 是稠密栅格（如 200×200），但 3D 空间本质上是稀疏的——大部分格子是空的 大量算力花在了空网格上，长距离感知时问题更严重 梯度弱化 图像 backbone → BEVFormer（交叉注意力） → 任务 head，梯度回传路径长 backbone 收到的梯度信号太弱，优化不充分，拖累扩展性 时序代价高 存储多帧历史 BEV 特征做时序融合 显存和算力开销大，Park et al. (2023) 指出这是 BEV 方案的效率瓶颈 这三个问题本质上都源于同一个根源：用稠密栅格表示稀疏的 3D 空间。BEV 栅格的每个格子都要计算 attention，但车辆、行人、车道线只覆盖了栅格的一小部分。当感知范围扩展到 100m+ 时，200×200 的 BEV 特征根本无法覆盖（只能覆盖 ~60m）。\n此外，UniAD/VAD 的串行依赖（感知→预测→规划）也带来训练不稳定问题：\n串行依赖的后果 具体表现 多阶段训练 UniAD 必须先预训练 BEVFormer → 再训 TrackFormer + MapFormer → 最后训 MotionFormer + Planner 累积误差 上游检测漏了某个目标，下游预测/规划根本不知道它的存在 联合优化困难 每个任务都需要先收敛到一定程度，否则早期的不稳定预测会互相拖累导致训练崩溃 ParaDrive（2024）尝试通过切断所有任务连接来缓解不稳定问题，但仍然保留了昂贵的 BEV 表示，只解决了串行依赖的问题，没解决 BEV 本身的问题。\nDriveTransformer 的终极问题：如果 Transformer 本身就是万能的信息交换器，为什么还需要 BEV 这个\u0026quot;中间人\u0026quot;？直接让任务 query 和 sensor feature 说话不行吗？\n核心思想：统一、并行、稀疏、流式 DriveTransformer 的核心主张是：\n丢掉 BEV，让每个任务拥有一组 query token，这些 token 通过三种标准注意力直接与原始传感器特征交互、与同级任务交互、与历史帧交互。所有任务并行、所有操作统一为 Transformer 注意力。\n四个设计原则：\n原则 含义 实现 Task Parallelism 所有任务（检测/预测/建图/规划）的 query 在每个 block 中直接互相交互 没有显式的任务层级依赖 Sparse Representation 任务 query 直接与原始传感器特征交互，没有中间 BEV 表示 Sensor Cross-Attention Streaming Processing 历史帧的任务 query 存入 FIFO 队列，当前帧通过 cross-attention 参考 Temporal Cross-Attention + 运动补偿 整体架构 图 1：DriveTransformer 整体架构。 输入多视图图像经 backbone 提取特征 → 生成 sensor token（3D PE 编码） + 任务 token（Agent/Map/Ego）。每个 Transformer block 包含三种注意力：Sensor Cross-Attention（与原始传感器特征交互）、Task Self-Attention（任务间交互）、Temporal Cross-Attention（与历史 FIFO 队列交互）。最终经过任务头输出检测框、地图元素、运动轨迹、规划轨迹。\n整条数据流：\n多 视 图 图 像 → ┌ │ │ │ └ 任 ─ ─ 务 → S ─ ─ 头 e ─ 1 2 3 ─ ： V n ─ . . . ─ D i s ─ ─ e T ↓ ─ S T T ─ ↓ t r ─ e a e ─ e R ─ n s m ─ c e T ─ s k p ─ t s o ─ o o ─ i N k ─ r S r ─ o e e ─ e a ─ n t n ─ C l l ─ （ ─ r f ─ / b 3 o - C ─ a D D s A r ─ M c r s t o ─ a k P i - t s ─ p b E v A e s ─ p o e t n - ─ i n 编 T t t A ─ n e 码 r e i t ─ g ） a n o t ─ → n t n e ─ / s i ： n ─ 2 f o A t ─ M D o n g i ─ o r ： e o ─ t f m 任 n n ─ i e e 务 t ： ─ o a r / 与 ─ n t t M 历 ─ u × o a 史 ─ / r 任 k p ─ e 务 N e / F ─ P n E I ─ l m T L g F ─ a a o a 从 o O ─ n p k y ─ n e e s t 队 ─ i n r e o 列 ─ n （ s n k 交 ─ g 随 s e 互 ─ 机 ─ o n ─ 初 ↓ ─ r ─ 始 ─ 互 ─ 化 ─ t 相 ─ / ─ o 交 ─ M ─ k 互 ─ L ─ e ─ P ─ n ─ ─ ─ 编 ─ 提 ─ 码 ─ 取 ─ ） ─ 特 ─ ─ 征 ─ ─ │ ┘ ┐ │ │ 关键认知：整个 pipeline 只有一个统一的 Transformer 结构，没有专门的 BEV encoder、没有专门的时序融合模块，一切都只是注意力。\n值得注意的细节：DriveTransformer 的 sensor token 和 task token 之间的交互跨越了整个 pipeline。Sensor token 作为 key/value 被所有 block 共享，这意味着高分辨率 sensor feature 只需要提取一次，不像 BEVFormer 那样每层都要从 2D 特征投影到 BEV 空间。这显著节省了计算量。\n方法详解 一、初始化与 Token 化 图 2：Token 化与初始化过程。 所有输入被统一为 token（语义嵌入 + 位置编码）。Sensor token 通过 3D PE 注入几何信息；Agent/Map token 从可学习参数初始化，PE 在感知范围内均匀初始化；Ego token 从 canbus 信息经 MLP 编码。\nSensor Token 每张相机图经 backbone 提取为 \\(H_{\\text{sensor}} \\in \\mathbb{R}^{N_c \\times H \\times W \\times D}\\) 的特征图。每个 patch 的 3D 位置编码借鉴 PETRv2：对于图像坐标 \\((i, j)\\) 处的 patch，沿其相机射线采样 K 个等间距 3D 点：\n\\[ \\text{Ray}_{i,j} = \\{ \\mathbf{T}^{-1}_K [i, j, d_k] \\mid k = 1, 2, ..., K \\} \\]其中 \\(\\mathbf{T}\\) 和 \\(\\mathbf{K}\\) 分别是该相机的外参和内参矩阵，\\(d_k\\) 是第 k 个采样点的深度值。同一射线上 K 个点的 3D 坐标拼接后经 MLP 编码为位置编码 \\(PE_{\\text{sensor}} \\in \\mathbb{R}^{N_c \\times H \\times W \\times D}\\)。\n关键意义：sensor token 自带 3D 几何信息。当任务 query 做 cross-attention 时，它可以根据 3D 位置匹配到特定的 sensor patch——比如一个在 BEV 坐标 (10m, 2m) 处的 agent query，会去关注所有相机图中那条射线经过 (10m, 2m) 的 patch。这种匹配是在连续的 3D 空间中完成的，没有 BEV 栅格化带来的量化误差。\n与 BEVFormer 的对比：\nBEVFormer DriveTransformer 几何编码方式 BEV 栅格（每个格子对应固定 3D 区域） 3D PE（每个 patch 编码连续射线） 空间分辨率 受栅格大小限制（~0.5m/格） 连续（不受量化） 特征提取 需要专门构建 BEV 特征图 直接在 2D 特征图上操作 任务 Token 三种任务 token 对应三种场景元素：\nToken 类型 数量 语义嵌入 位置编码 职责 Agent Token \\(N_a\\)（~300） 随机可学习参数 感知范围内均匀初始化的 3D 点 + 逐层 refine 检测 + 运动预测 Map Token \\(N_m\\)（~100） 随机可学习参数 感知范围内均匀初始化的 3D 点 在线建图（车道线、边界等） Ego Token 1 MLP(Canbus) 编码速度/加速度等 全零（自车永远是原点） 规划 Agent 和 Map token 的设计遵循 DAB-DETR 的关键思想：语义嵌入和位置编码分离。语义嵌入 \\(H\\) 表示\u0026quot;这类型的物体是什么\u0026quot;，位置编码 \\(PE\\) 表示\u0026quot;它在哪里\u0026quot;。两者通过 attention 中的相加融合。\n一个关键细节：Agent 和 Map token 的 PE 不是固定不变的。在每个 Transformer block 之后，任务 head 会输出当前预测结果（检测框/车道线/轨迹），PE 会根据预测结果更新：\nAgent PE: MLP(预测的 3D 位置 + 语义类别) → 更精确地定位 agent Map PE: MLP(预测的 polyline 点集) → 更精确地定位地图元素 Ego PE: MLP(预测的规划轨迹) → 表达自车意图 这种 coarse-to-fine 优化（从粗略定位到精确定位逐 block 细化）是 DAB-DETR 中 iterative box refinement 的推广，也是 DriveTransformer 能单阶段训练的保证——每个 block 都产生可用的预测，早期 block 即使预测不准也不至于让整个训练崩溃。\n二、Token 交互——三种注意力 图 3：三种注意力类型。 Sensor Cross-Attention 让任务直接访问原始 sensor 特征；Task Self-Attention 实现任意任务间的信息交换（Agent-Agent、Agent-Map、Ego-Map、Ego-Agent、Map-Map）；Temporal Cross-Attention 利用历史队列 FPS 筛选的 Top-K query 提供时序先验。\n1. Sensor Cross-Attention（SCA） 任务 token 直接与 sensor token 做 cross-attention，query 来自所有任务 token 的和，key/value 来自 sensor token：\nH ' = S C A ( Q K = = [ H H _ _ s e e g n o s o + r P + E _ P e E g _ o s , e n H s _ o a r g , e n V t = + H P _ E s _ e a n g s e o n r t ) , H _ m a p + P E _ m a p ] , 这替代了 BEVFormer 的 cross-attention——任务 token 直接在 2D 特征图上做 attention，不需要先渲染成稠密 BEV 栅格。由于 sensor token 自带了 3D PE，attention 可以按 3D 位置匹配，效果等价甚至优于 BEV 方案（消除了栅格化后的量化误差）。\n2. Task Self-Attention（TSA） 所有任务 token 之间做 full self-attention。这意味着：Agent token 可以看到 Map token（\u0026ldquo;这条路属于哪个车道？\u0026quot;），Map token 可以看到 Agent token（\u0026ldquo;这个车道的车要干嘛？\u0026quot;），Ego token 可以看到 Agent 和 Map（\u0026ldquo;我应该怎么根据周围车和路来决定？\u0026quot;）。\n与 UniAD 的串行 query 传递不同，DriveTransformer 的 TSA 没有固定顺序——所有关系由 attention 自动学习。这使得模型天然支持 planning-aware perception（规划知道感知需要什么）和 game-theoretic planning（规划知道预测会如何响应）。\n3. Temporal Cross-Attention（TCA） DriveTransformer 维护一个 FIFO 队列存储历史帧的 task query。当前帧通过 cross-attention 参考历史帧：\nH ' = T C A ( Q K V = = = H { { ^ H H t ^ ^ { { + t t - - P i i E } } ^ t , P i E = ^ 1 { , t . - . i . } , T + } ) t e m b | i = 1 , . . . , T } , 历史 PE 需要经过两步校正：\nEgo Transformation：将历史帧的自车坐标系转换到当前帧（MLP(T_t0 * Pos_t)） Motion Compensation：对 agent token，根据其预测速度和时间间隔运动补偿（ada-LN） 历史 agent/map query 只保留 Top-K 高置信度的（DETR 中有大量冗余 query）。\n与 UniAD/VAD 存储历史 BEV 特征（稠密栅格，每帧 200×200×C）不同，TCA 存储的是历史任务 query——query 本身携带了高层语义信息（\u0026ldquo;这是那辆车、这是那条车道\u0026rdquo;），数量只有几百个 token，比稠密栅格高效得多。\n流式时序处理 图 4：流式时序处理机制。 每个时间步结束后，当前帧最后一层的 Top-K 任务 query 被推入 FIFO 队列。历史 query 的 PE 经过自车坐标系变换和运动补偿后，作为 Temporal Cross-Attention 的 key/value 使用。\n流式处理的关键工程设计：\nFIFO 队列：每个任务类型（agent/map/ego）维护一个独立队列，长度 \\(T_{\\text{queue}}\\) 可配置 Top-K 筛选：agent 和 map 的 DETR 风格 query 有大量冗余（~300 个 agent token 中大部分是背景），只保留置信度最高的 K 个 自车坐标系变换：历史帧的 PE 通过 MLP(T_{t0}^{t} · Pos_t) 变换到当前帧的自车坐标系 运动补偿：对 agent token，根据预测速度和时间间隔做 adaLN 风格的运动补偿，补偿后的坐标为 PE^{t}_{comp} = LayerNorm(PE^{t}, [γ, β] = MLP(v^{t} · Δt)) 这种设计的优势：计算量不随时间窗口线性增长。传统方案存储 K 帧历史 BEV 特征需要 O(K·H·W·C) 的显存，而 DriveTransformer 只需要 O(K·N_query·D)，其中 N_query \u0026laquo; H·W。\n图 5：任务头设计。 (a) 检测与运动预测共享 Agent 特征，无需显式跟踪（同一 query 自然关联检测和预测）；运动预测在局部坐标系输出，解耦两个任务。(b) 在线建图在每个 map query 上复制 N 个 point PE，实现点级特征检索。(c) 规划头用 6 个模式嵌入生成多模态轨迹。(d) Coarse-to-Fine 优化，逐 block refine PE。\n检测与运动预测 DriveTransformer 的关键设计：不做显式跟踪。\n传统方法（如 UniAD）的流程是：检测 → 帧间关联（TrackFormer） → 运动预测（MotionFormer）。关联模块是训练不稳定的一大根源——帧间匹配本身就是一个困难问题（遮挡、ID switch、新目标出现/消失），且关联错误会直接污染后续预测。\nDriveTransformer 彻底绕过了关联问题：同一个 agent query 同时接入 detection head 和 prediction head。对于同一帧，同一 query 自然关联了检测和预测——不需要匈牙利匹配。\n对于帧间关联，Temporal Cross-Attention 隐式地建立了对应关系：当前帧的 agent query 通过 attention 从历史 agent query 中拉取特征，历史中同一辆车自然会在 attention 权重中高于其他车。\n另一个关键设计：局部坐标系预测。运动预测的 ground truth 轨迹转换到 agent 自身的局部坐标系（以 agent 当前位置为原点、朝向为 x 轴）：\n属性 全局坐标系预测（UniAD） 局部坐标系预测（DriveTransformer） Loss 影响因素 受检测框位置 + 航向误差影响 完全不受检测结果影响 训练稳定 ❌ 检测一歪预测也跟着歪 ✅ 检测和预测完全解耦 推理 直接输出全局轨迹 需要将局部轨迹变换回全局 这种解耦使得 motion loss 在训练中独立于 detection loss 优化，联合训练时不会互相干扰。消融实验证明，局部坐标系预测的 minADE 仅为 1.34，而全局坐标系的 2.68——好了一倍。\n在线建图 Map token 在 Sensor Cross-Attention 中复制 \\(N_{\\text{point}}\\) 份，每份搭配一个点级 PE。这样长车道线的每个点都能独立从 sensor 特征中检索局部信息。之后通过 PointNet + max-pooling 聚合成实例级 token。\n规划 规划头使用高斯混合模型输出多模态轨迹。训练集中所有轨迹按方向和距离聚类为 6 类：直行、停车、左转、急左转、右转、急右转。每个模式有一个可学习的嵌入向量，与 ego query 相加后预测该模式的轨迹。训练时 winner-take-all——只有 ground truth 对应模式的轨迹参与回归。同时训练一个分类头预测当前模式，推理时选择置信度最高的模式。\n四、Loss 与单阶段训练 整体 loss 是各任务 loss 的加权和：\n\\[ \\mathcal{L}_{\\text{overall}} = w_{\\text{det}} \\mathcal{L}_{\\text{det}} + w_{\\text{motion}} \\mathcal{L}_{\\text{motion}} + w_{\\text{map}} \\mathcal{L}_{\\text{map}} + w_{\\text{plan}} \\mathcal{L}_{\\text{plan}} \\] 检测：DETR 风格匈牙利匹配 loss 运动：winner-take-all loss 建图：MapTR 风格匈牙利匹配 loss 规划：winner-take-all loss 关键优势：单阶段端到端训练。由于没有任务间的手工依赖，所有任务同时从 sensor 输入和历史信息中学习，不会互相影响收敛。\n具体来说，每个 loss 的权重 \\(w\\) 经过调整使得各 loss 量级在 1 左右。总 loss 在单次前向传播中计算、单次反向传播更新所有参数。这与 UniAD 的多阶段策略形成鲜明对比：\nUniAD VAD DriveTransformer 训练阶段数 4 阶段 2 阶段 1 阶段 阶段1 预训练 BEVFormer 预训练 backbone 端到端 阶段2 训 TrackFormer + MapFormer 端到端联合训练 - 阶段3 训 MotionFormer - - 阶段4 端到端联合微调 - - Batch Size (A800) 1 4 12 消融实验证明：感知预训练（pretrain perception）不带来增益——预训练后训练 vs 直接端到端训练的 DS 分别为 60.22 和 60.45，几乎一样。这是 BEV 方案做不到的（UniAD 不预训练 BEVFormer 根本无法收敛）。\n四种范式对比 图 5：端到端自动驾驶范式对比。 (a) Direct Planning（端到端黑盒，只输出规划，训练稳定但无中间表示）；(b) BEV Sequential（BEV串行，UniAD/VAD 为代表，中间表示完整但训练复杂）；(c) Parallel BEV（BEV 并行，ParaDrive 为代表，任务并行但仍有 BEV 瓶颈）；(d) Pure Transformer（本文，完全抛弃 BEV，注意力统一所有交互）。\n从图中可以看出四种范式在三个维度的权衡：\n范式 训练稳定性 任务关联性 效率 Direct Planning ⭐⭐⭐ ⭐ ⭐⭐⭐⭐ BEV Sequential ⭐ ⭐⭐⭐ ⭐⭐ Parallel BEV ⭐⭐⭐⭐ ⭐ ⭐⭐ DriveTransformer ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ DriveTransformer 通过移除 BEV、并行化任务、注意力统一设计，在三个维度上都达到了最优。\n实验 Bench2Drive 闭环评测（CARLA Leaderboard 2.0） 方法 Driving Score ↑ Success Rate ↑ Avg. L2 ↓ Latency UniAD-Tiny 40.73 13.18 0.80 420.4ms UniAD-Base 45.81 16.36 0.73 663.4ms VAD 42.35 15.00 0.91 278.3ms DriveTransformer-Large 63.46 35.01 0.62 211.7ms TCP*（专家蒸馏） 59.90 30.00 1.96 83ms DriveAdapter*（专家蒸馏） 64.22 33.08 1.01 931ms DriveTransformer 在**纯端到端（无专家蒸馏）**方法中全面领先，DS 比 UniAD-Base 高出 17.65、比 VAD 高出 21.11。注意延时也比 UniAD/VAD 更低——更快更准。\n多能力细分 能力 UniAD-Base VAD DriveTransformer 并道（Merging） 12.16 7.14 17.57 超车（Overtaking） 20.00 20.00 35.00 紧急刹车 23.64 16.36 48.36 让行（Give Way） 10.00 20.00 40.00 交通标志 13.89 20.22 52.10 平均 15.94 16.75 38.60 紧急刹车和交通标志场景下 DriveTransformer 提升最大——这两个任务正是 BEV 方案容易出问题的场景（需要快速反应、精确几何）。\nnuScenes 开环评测 方法 Avg. L2 ↓ Avg. Collision ↓ ST-P3 2.11 0.71 UniAD 0.76 0.17 VAD-Base（仅视觉） 0.72 0.22 BEVPlanner 0.57 0.11 DriveTransformer-Large 0.40 0.11 VAD-Base*（+自车状态） 0.37 0.14 ParaDrive* 0.48 0.07 DriveTransformer-Large* 0.33 0.13 DriveTransformer 在所有设置下都达到 SOTA，Avg. L2 0.40 比 BEVPlanner 低 0.17，比 UniAD 低 0.36。\n消融实验 三种注意力都是必要的 设置 Driving Score Success Rate Full Attention 60.45 30.00 w/o Sensor Cross-Attention 8.41 0.00 w/o Task Self-Attention 52.37 20.00 w/o Temporal Cross-Attention 56.22 20.00 没有 SCA 模型直接盲驾（DS 8.41）。TSA 和 TCA 也各自贡献显著。\n单阶段训练足够了 设置 Driving Score DriveTransformer（单阶段） 60.45 Planning Only（无辅助任务） 54.22 Pretrain Perception（两阶段） 60.22 w/o Middle Supervision 51.67 感知预训练不带来增益——这是 BEV 方案做不到的（UniAD/VAD 必须预训练 backbone/BEVFormer）。证明 DriveTransformer 的并行设计确实消除了多阶段训练的必要。\nScaling 研究 图 6：Scaling 研究。 (a) 对规划的影响：增大 decoder 层数/宽度比增大 image backbone 收益更大；(b) 对感知的影响：两者趋势相似，但大規模 VLM 预训练 backbone（EVA02-CLIP-L）仍在感知上占优。\nDriveTransformer 通过统一 Transformer 结构展现了良好的 scaling law——更大的 decoder（12 层、768 隐藏维度）持续提升规划性能。模型配置从 Small（47M，3 层）到 Large（646M，12 层）的 Driving Score 从 45.04 提升到 68.22。\n鲁棒性分析 图 7：不同鲁棒挑战下的检测和规划可视化。 DriveTransformer 在相机崩溃、标定偏差、运动模糊、高斯噪声下仍保持合理规划；VAD 的 BEV 方案在这些条件下严重退化。\n条件 VAD-Base DS DriveTransformer DS Regular 53.45 60.45 Camera Crash 48.54（-9.2%） 58.67（-2.9%） Incorrect Calibration 38.46（-28.0%） 56.53（-5.9%） Motion Blur 45.47（-14.9%） 54.04（-10.6%） Gaussian Noise 44.53（-16.7%） 56.94（-6.0%） 关键发现：BEV 方案对标定误差极度敏感（DS 下降 28%），而 DriveTransformer 直接在 2D 特征上做 attention，对标定误差容忍度高得多（仅下降 5.9%）。这是不要中间表示带来的鲁棒性红利。\n总结与讨论 DriveTransformer 的核心贡献 丢掉了 BEV——用 3D PE + Sensor Cross-Attention 替代了 BEVFormer 的稠密 BEV 构建，算力省了、梯度好了、标定鲁棒了 任务全并行——Task Self-Attention 代替了串行 query 传递，单阶段训练成为可能 流式处理——Temporal Cross-Attention + 历史 query 队列代替了历史 BEV 特征存储，更高效且保留了语义信息 极致简单——三种标准注意力堆叠，没有定制模块、没有多阶段训练、没有规则后处理 DriveTransformer 在 E2E-AD 路线中的位置 如果把端到端自动驾驶的发展看作一条时间线：\nT U V S P V D r n A p a * A i a i D a r D D f n A r a r v f s ↓ D ↓ ( ↓ s ↓ D ↓ i ↓ 2 u F 2 e r v s u ( 0 D i e ( i s 2 2 r v T 2 o e 0 3 i e r 0 n r 2 ) v a 2 D 3 e ( n 5 r ( ) 2 s ) i 2 ( 0 f v 0 2 2 o e 2 0 4 r 1 2 ) m ( ) 4 e 2 ) r 0 * 2 * 5 ) ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ 多 串 向 稀 任 彻 概 扩 模 行 量 疏 务 底 率 散 态 化 并 抛 词 规 融 q 场 q 行 弃 表 划 合 u 景 u ， 规 （ e 表 e 但 B 划 另 + r 示 r 仍 E （ 一 y y 有 V 另 条 G + 一 创 R 通 场 B + 条 新 U 路 3 景 E 创 方 表 V 全 新 向 w + 个 示 并 方 ） a 规 ， 行 向 y B 划 但 ） p E 约 仍 + o V 束 是 i F 串 统 n o 行 一 t r 注 m 意 e 力 r + 5 段 式 DriveTransformer 是\u0026quot;抛弃 BEV\u0026quot;这条路线上的里程碑。它证明了：稠密 BEV 不是端到端驾驶的必需品。直接用 3D PE + cross-attention 可以实现等价甚至更好的空间理解。\n与 VLM 的关系 论文在 scaling study 中有一个值得注意的发现：EVA02-CLIP-L 这种大规模视觉语言预训练 backbone 仍然在感知上大幅领先于 randomly initialized backbone。这意味着：\nDriveTransformer 的架构本身具有良好的 scaling property——更大的模型 = 更好的结果 VLM 的视觉 backbone（如 InternViT、SigLIP、EVA-02）可以作为 DriveTransformer 的 image backbone 直接使用 但 VLM 的 LLM 部分如何与 DriveTransformer 的稀疏 query 机制结合，仍然是一个开放问题 一个可能的方向：让 DriveTransformer 的 ego token 在经过注意力交互后，同时输入一个轻量 LLM 做推理和解释输出，而主路径（检测/建图/规划）仍由 DriveTransformer 的 task head 处理。\n局限 局限 分析 开环→闭环 gap nuScenes 开环评测中性能与闭环存在差异——这是整个端到端领域的普遍问题 模式数量固定 6 种驾驶模式的聚类数量是硬编码的，可能不足以覆盖所有场景（如掉头、泊车） 无显式安全约束 与 VAD 的三个向量化规划约束（碰撞/越界/方向）不同，DriveTransformer 的规划 head 缺乏硬编码安全先验 纯视觉替代 LiDAR DriveTransformer 目前只支持相机输入，而 TransFuser/MMFN 利用了 LiDAR 的精确深度 仅在仿真中验证 Bench2Drive 是 CARLA 仿真评测，实车性能未知 对 Flow-GRPO 的启示 DriveTransformer 的\u0026quot;稀疏 query + 并行交互\u0026quot;范式为强化学习提供了天然的状态空间表示：\nAgent token 集合：编码周围所有车辆的位置、速度和运动意图 Map token 集合：编码道路拓扑（车道线、路口、人行横道） Ego token：编码自车状态和当前规划意图 三种注意力：提供了这些状态之间的交互关系 相比 VAD 的向量化场景表示（检测框 + 车道线 polyline + 运动矢量），DriveTransformer 的 token 空间更高维但信息更丰富，且 attention weight 可以作为交互关系的显式表示。在 GRPO 中，可以用这些 token 作为 policy 网络的状态输入，attention weight 作为策略可解释性的依据。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-drivetransformer/","summary":"DriveTransformer 彻底抛弃了 BEV 表示——不再构建稠密 BEV 特征，而是让任务 query 直接与原始传感器特征交互。三种注意力（Sensor Cross-Attention、Task Self-Attention、Temporal Cross-Attention）构成统一框架，支持单阶段端到端训练。在 Bench2Drive 闭环评测中以 63.46 Driving Score 大幅超越 UniAD（45.81）和 VAD（42.35），且在鲁棒性上碾压 BEV 方案。获 ICLR 2025 接收。","title":"论文精读｜DriveTransformer：统一Transformer——告别BEV，拥抱稀疏Token并行交互"},{"content":"论文信息 标题：TransFuser: Imitation with Transformer-Based Sensor Fusion for Autonomous Driving 作者机构：图宾根大学（University of Tübingen） × MPI for Intelligent Systems（Kashyap Chitta, Aditya Prakash, Bernhard Jaeger, Zehao Yu, Katrin Renz, Andreas Geiger） arXiv：2205.15997（NeurIPS 2022，CVPR 2021 的期刊扩展版） 代码：github.com/autonomousvision/transfuser 一句话总结：用 Transformer 把相机图像和LiDAR 鸟瞰图的特征在多个分辨率上做密集融合，让两个模态\u0026quot;商量\u0026quot;着理解场景，再通过 GRU 自回归预测轨迹。在 CARLA Town05 比之前最好方法 DS 高 48%，碰撞降低 48%。 要解决什么问题：传感器融合不是\u0026quot;拼图\u0026quot;，是\u0026quot;对话\u0026quot; 端到端自动驾驶的一个核心工程问题：车上装了多个传感器（相机、LiDAR、雷达），怎么把它们的特征真正融合起来？\n之前的做法主要有两种：\n融合方式 做法 问题 Late Fusion（后融合） 每个模态独立处理，最后把结果拼一起 错过模态间的细粒度交互信息 Geometric Fusion（几何融合） 把图像特征投影到 BEV 空间（基于已知的相机-LiDAR 外参）再拼接 依赖精确标定，在密集交通下无法捕捉复杂的交互场景 这两种方式的共同问题：融合是静态的、一次性的——图像和 LiDAR 的特征没有真正\u0026quot;交流\u0026quot;过。比如 LiDAR 看到了远处一辆车的点云但不知道是啥类型，相机能识别出\u0026quot;那是一辆卡车\u0026quot;但不知道它的准确距离——这两种信息应该在多个层次上反复交互，而不是到了最后一层才拼接。\n图 1：TransFuser 的核心动机。 相机提供丰富的语义信息（物体类别、交通灯颜色）但缺乏深度，LiDAR 提供精确的 3D 几何信息（距离、形状）但缺乏语义。TransFuser 的核心问题是：如何让这两种互补的传感器在特征层面充分交互？\n核心思想：在多个分辨率上用自注意力做密集融合 TransFuser 的核心主张很简单但有效：\n在 CNN 特征提取器的每个分辨率层级上，用 Transformer 的自注意力让图像特征和 LiDAR BEV 特征互相\u0026quot;看\u0026quot;对方一眼，把融合嵌入到特征提取的过程中，而不是放在最后。\n图 2：TransFuser 整体架构。 RGB 图像和 LiDAR BEV 分别经过独立的 CNN 特征提取器。在 4 个分辨率层级上，每个分支的特征被展平为 token 序列，经过 Transformer 做自注意力融合（让图像 token 和 LiDAR token 互相注意力），融合后的特征再 reshape 回原分辨率回到各自分支继续前向传播。最终两个分支的 512 维特征向量相加，经 MLP 降维后作为 GRU 的初始隐状态，自回归预测 4 个差分 waypoint。\n整条数据流拆成四大步：\n输入表示：RGB 图像（400×300） + LiDAR BEV（256×256，2 通道：高度 + 密度） 多分辨率 Transformer 融合：在 4 个分辨率层级上分别做自注意力，让图像和 LiDAR 特征密集交互 全局特征编码：融合后的特征 → AvgPool → FC → 512 维全局场景向量 自回归 waypoint 预测：512 维向量 → MLP(256, 128) → 64 维 → GRU 初始隐状态 → 逐 step 预测 4 个差分 waypoint → PID 控制器 下面逐块详细拆解。\n方法详解 一、输入表示（Input Representation） TransFuser 使用两种互补的传感器模态：\n1. RGB 图像（相机）\n单目前视相机，分辨率 400×300 提供丰富的语义信息（物体类别、颜色、纹理、交通灯状态、路标） 缺点：没有深度信息，单目测距不准 2. LiDAR BEV（激光雷达鸟瞰图）\n将 LiDAR 点云投射到 256×256 的 BEV 栅格（每个像素对应 0.125m，覆盖 32m × 32m 区域） 每个栅格的2 个通道： 高度通道：该栅格内点云的最大高度（归一化到 [0,1]） 密度通道：该栅格内点云的数量（对数归一化到 [0,1]） 提供精确的 3D 几何信息（物体位置、距离、形状） 缺点：没有语义信息（不知道\u0026quot;这是一个行人\u0026quot;） 互补关系：相机知道\u0026quot;那是什么\u0026quot;，LiDAR 知道\u0026quot;它在哪\u0026quot;。关键是让两者在特征层面交互。\n二、多分辨率 Transformer 融合（核心创新） 这是 TransFuser 最核心的模块。做法如下：\n2.1 为什么在多个分辨率上融合？ CNN 的不同层编码了不同层次的信息：\n浅层（高分辨率）：边缘、纹理、局部几何 深层（低分辨率）：语义类别、全局场景结构 TransFuser 选择在 4 个分辨率层级上都做融合（而不是只在最后一层），让信息在不同抽象层次间充分交换。\n2.2 单层融合的具体操作（以其中一个分辨率为例） 图像分支特征图：尺寸 H₁ × W₁ × C₁ BEV 分支特征图： 尺寸 H₂ × W₂ × C₂ Step 1：展平为 token 序列 图像 token: (H₁×W₁) 个，每个维度 C₁ BEV token: (H₂×W₂) 个，每个维度 C₂ Step 2：拼接所有 token 总 token 数 = H₁×W₁ + H₂×W₂，统一维度 C（用 1×1 卷积对齐） Step 3：加上可学习位置编码（让网络知道每个 token 的原始空间位置） Step 4：送入 Transformer Q = Fin @ Mq, K = Fin @ Mk, V = Fin @ Mv A = softmax(QK^T / √D) @ V ← 自注意力：每个 token 关注所有其他 token Fout = MLP(A) + Fin ← 残差连接 Step 5：reshape 回原始分辨率 融合后的特征拆分为图像部分和 BEV 部分，分别 reshape 回 H₁×W₁×C₁ 和 H₂×W₂×C₂ Step 6：元素相加回到原分支 融合后的特征图 + 原分支特征图（残差连接） 关键理解：自注意力让图像 token 可以看到 LiDAR token 的信息，反之亦然。一个图像中的\u0026quot;红色圆形\u0026quot; token 可以通过注意力机制从 LiDAR 的某个 token 那里了解到\u0026quot;那个圆形在 15 米外\u0026quot;。\n2.3 多尺度处理 由于高分辨率特征图 token 数量太大（计算量 O(N²)），Transformer 无法直接处理。TransFuser 的做法：\n将高分辨率的特征图用 AvgPool 下采样到与低分辨率相同的尺寸 Transformer 输出后用双线性插值上采样回原始分辨率 再与原始分支特征图元素相加 分辨率层级： Level 1: Image (176×40→22×5) + BEV (64×64→8×8) Level 2: Image (88×20→22×5) + BEV (32×32→8×8) Level 3: Image (44×10→22×5) + BEV (16×16→8×8) Level 4: Image (22×5) + BEV (8×8) （→ 后的尺寸是 AvgPool 下采样后的 token 数量） 每个 TransFuser 模块有 L=4 层，每层 4 个注意力头。\n2.4 全局特征 经过 4 层融合后，两个分支各自输出的特征图经过 AvgPool → FC 压缩为 512 维向量，然后元素相加得到最终的全局场景特征。\n关键认知：这 512 维向量不是简单的\u0026quot;图像特征 + BEV 特征\u0026quot;，而是经过了多层次自注意力交互后的联合嵌入——它既包含了图像的语义信息，也包含了 LiDAR 的几何信息，更重要的是，它编码了两个模态之间的对应关系（比如\u0026quot;这个像素对应的那个点云\u0026quot;）。\n三、Waypoint 预测网络 全局特征向量不直接预测方向盘/油门，而是预测轨迹 waypoint，再由 PID 控制器转为控制信号。\n3.1 自回归 GRU 解码器 输入：512 维全局特征 → MLP(512→256→128→64) → 64 维向量作为 GRU 初始隐状态 h₀ for t = 1 to 4: 输入：当前点 w_{t-1}（第一个点为 (0,0)）+ 目标位置 G 输出：差分 waypoint δw_t 最终 waypoint：w_t = w_{t-1} + δw_t 每个 step 预测差分 waypoint（相对于上一步的位移），而不是绝对坐标。这样更稳定——模型只需预测\u0026quot;下一步往哪走\u0026quot;，而不是直接猜\u0026quot;终点在哪\u0026quot;。\n目标位置 G（GPS 坐标，已转换到自车坐标系）作为额外输入，确保轨迹朝着导航方向前进。\n3.2 PID 控制器 预测的 4 个 waypoint → 两个 PID 控制器：\n纵向 PID：根据 waypoint 间的距离计算目标速度 → 油门 / 刹车 横向 PID：根据 waypoint 间的方向计算目标转角 → 方向盘 此外还有一个蠕行机制（Creeping）：如果车停了超过 55 秒（红灯排队等情况），就设定目标速度 4 m/s 蠕动 1.5 秒，防止模型在\u0026quot;停车\u0026quot;状态陷入死循环。蠕行时用 LiDAR 检测前方是否有障碍物，有就取消蠕行（安全启发式）。\n四、辅助任务（Auxiliary Tasks） 只靠 4 个 waypoint 的 L1 损失监督是不够的——场景太复杂，梯度信号太稀疏。TransFuser 加了 4 个辅助任务，让中间特征学到更丰富的场景表示：\n图 3：辅助损失。 除了 waypoint L1 损失，还有 4 个辅助任务。\n辅助任务 分支 解码器 损失 作用 深度估计 图像 Conv Decoder L1 让图像特征学到距离信息，弥补 LiDAR 缺失时的深度线索 语义分割 图像 Conv Decoder 交叉熵（7 类） 让图像特征识别道路、车辆、行人、红绿灯等语义 HD 地图预测 BEV Conv Decoder 交叉熵（3 类） 让 BEV 特征编码可通行区域 车辆检测 BEV CenterNet Decoder Focal + CE + L1 让 BEV 特征感知周围车辆位置和朝向 为什么辅助任务重要：它们提供了强力的中间监督，确保中间特征图不仅仅服务于 waypoint 预测，还编码了场景的各种结构化信息。这相当于把\u0026quot;暗盒\u0026quot;的特征提取变成了\u0026quot;带语义标签\u0026quot;的特征提取。\n五、损失函数详解 TransFuser 的总训练损失由 5 个部分组成，每个的数学形式和设计动机如下：\n5.1 Waypoint 预测损失（主损失） \\[ \\mathcal{L}_{\\text{waypoint}} = \\sum_{t=1}^{T} ||w_t - w_t^{gt}||_1 \\] T=4（预测 4 个未来 waypoint，对应 2 秒，间隔 0.5 秒） 使用 L1 而非 L2：L1 对大误差的惩罚更温和，在驾驶场景中更鲁棒（突然的大误差可能是标注噪声而非真正的危险） 差分形式 \\(w_t = w_{t-1} + \\delta w_t\\)：预测位移增量而非绝对坐标，训练更稳定 5.2 深度估计损失 \\[ \\mathcal{L}_{\\text{depth}} = ||\\hat{D} - D^{gt}||_1 \\] 从图像分支特征经卷积解码器输出深度图 \\(\\hat{D}\\) GT 深度 \\(D^{gt}\\) 由 LiDAR 点云投影到图像平面得到 作用：迫使图像特征编码距离信息，弥补单目缺少深度模态时的线索 5.3 语义分割损失 \\[ \\mathcal{L}_{\\text{semantic}} = \\text{CrossEntropy}(\\hat{S}, S^{gt}) \\] 7 类：未标注、车辆、道路、红灯、行人、车道标线、人行道 从图像分支特征解码 作用：让图像特征学会识别关键语义元素，尤其是红灯和行人这类规划决策的关键信号 5.4 HD 地图预测损失 \\[ \\mathcal{L}_{\\text{HDmap}} = \\text{CrossEntropy}(\\hat{M}, M^{gt}) \\] 3 类：道路、车道标线、其他 从 BEV 分支特征经卷积解码器输出 64×64 的 BEV 分割图 作用：让 BEV 特征编码可通行区域和道路结构 5.5 车辆检测损失 \\[ \\mathcal{L}_{\\text{detection}} = \\mathcal{L}_{\\text{focal}}(\\hat{P}, P^{gt}) + \\mathcal{L}_{\\text{CE}}(\\hat{O}, O^{gt}) + ||\\hat{R} - R^{gt}||_1 \\] CenterNet 风格解码器，从 BEV 特征输出： 位置热力图 \\(\\hat{P}\\)：Focal 损失（检测车辆中心） 粗方向分类 \\(\\hat{O}\\)：交叉熵损失（12 类，每类 30°） 精方向回归 + 尺寸 + 位置偏移 \\(\\hat{R}\\)：L1 损失 作用：让 BEV 特征感知周围车辆的精确位置、朝向和尺寸 5.6 总损失与权重 \\[ \\mathcal{L} = \\mathcal{L}_{\\text{waypoint}} + \\mathcal{L}_{\\text{depth}} + \\mathcal{L}_{\\text{semantic}} + \\mathcal{L}_{\\text{HDmap}} + \\mathcal{L}_{\\text{detection}} \\]所有权重设为 1（简单均匀加权）。作者在消融实验中验证了每个辅助任务都有正向贡献，但没有做精细的权重搜索——这是一个简化设计，后续工作可以用不确定性加权或 GradNorm 进一步优化。\n训练：Expert 数据生成 数据如何获取 TransFuser 的训练数据通过一个规则专家在 CARLA 中采集：\n228k 帧数据，来自 8 个 CARLA 城镇 包含约 2500 条城区路口路线（平均 100m）+ 1000 条高速公路路线（平均 400m） 每 0.5 秒存一帧（2 FPS） 专家策略（Expert Policy） 专家使用特权信息（仿真器提供的 ground truth）来生成完美轨迹：\nA* 全局规划器：生成从起点到终点的粗粒度路径 横向 PID：沿着 A* 路径行驶，最小化与路径的角度偏差 纵向 MPC：分 3 档目标速度 正常：4.0 m/s 路口内：3.0 m/s 预测到碰撞/闯红灯：0.0 m/s（停车） 碰撞预测：用预训练的自行车模型（Bicycle Model） 预测未来 4 秒所有车辆的运动轨迹（路口场景）或 1 秒（其他场景），检测是否会碰撞 图 4a：专家在路口等待。 自行车模型预测如果此时左转会撞到对向车辆，所以专家选择停车等待。\n图 4b：对向车流通过后，专家完成左转。 碰撞预测显示安全后，专家加速通过路口。\n推理：从图像到控制信号 TransFuser 的推理流程是完整的端到端链路，不依赖任何规则后处理（除了蠕行安全启发式）：\n推理流程（每帧） 多视图图像 (400×300) + LiDAR 点云 ↓ 图像分支 CNN + BEV 分支 CNN（并行，4 层 TransFuser 融合） ↓ 两个 512 维特征向量 → 元素相加 → 全局场景特征 ↓ MLP(512→256→128→64) → 64 维向量 ↓ GRU 自回归解码（4 step，每步输入上一步位置 + 目标位置） ↓ 4 个差分 waypoint → 累加得到 4 个绝对 waypoint ↓ PID 控制器（横向 + 纵向） ↓ 方向盘转角 + 油门 + 刹车 每一步的细节 Step 1：传感器输入\nRGB 图像：单目前视，400×300 分辨率 LiDAR 点云：投影为 256×256×2 的 BEV 栅格（高度通道 + 密度通道） Step 2：多分辨率融合\n图像分支和 BEV 分支各自独立做卷积 在 4 个分辨率层级上，特征被展平、拼接、送入 Transformer（L=4, heads=4） 融合后再 reshape 回原分辨率，与原始特征相加 Step 3：全局特征\n两个分支最终的特征图（22×5×C 和 8×8×C）分别 AvgPool + FC 到 512 维 两个 512 维向量元素相加得到全局场景向量 Step 4：Waypoint 解码\n全局向量经 MLP 降为 64 维，作为 GRU 初始隐状态 GRU 逐 step 解码 4 个 waypoint，每步输入目标位置 G Step 5：PID 控制\n横向 PID：根据 waypoint 间的方向算方向盘转角 纵向 PID：根据 waypoint 间的距离算目标速度 → 油门/刹车 PID 参数：横向 Kp=1.25 Ki=0.75 Kd=0.3，纵向 Kp=5.0 Ki=0.5 Kd=1.0 Step 6：安全蠕行\n如果车静止超过 55 秒，设定目标速度 4 m/s 蠕动 1.5 秒 蠕动前用 LiDAR 检测前方有无障碍物 推理配置 配置项 值 帧率 实时（27.6 ms/帧 ≈ 36 FPS） 硬件 单张 RTX 3090 集成方式 单模型或 3 模型集成（集成时 59.6 ms/帧 ≈ 17 FPS） 后处理 仅蠕行安全启发式，无规则轨迹修正 实验与结果 Longest6 基准 为了能在本地高效评估，作者提出了 Longest6 基准：\n从 CARLA 官方的 76 条路线中选出每个城镇最长的 6 条路线（共 36 条） 平均路线长度 1.5 km（接近官方 Leaderboard 的 1.7 km） 最高密度交通 + 6 种天气 × 6 种光照组合 包含 NHTSA 预碰撞场景（急刹、变道冲突等） 主要结果 方法 DS ↑ RC ↑ IS ↑ Veh ↓ Collisions/km 对比 Late Fusion (LF) 22.47 83.30 0.27 4.63 - Geometric Fusion (GF) 27.32 91.13 0.30 4.64 - LAV 32.74 70.36 0.51 0.83 - Latent TransFuser (image only) 37.31 95.18 0.38 3.66 - TransFuser (image + LiDAR) 47.30 93.38 0.50 2.45 比 GF 降 48% Expert (upper bound) 76.91 88.67 0.86 0.28 - 核心发现：\nTransFuser 的 DS 比最好的几何融合（GF）高 20 分（+73%） 每公里碰撞次数从 4.64（GF）降到 2.45（TransFuser），降低 48% 即使只用相机的 Latent TransFuser 也比 LAV 等完整方法高 方法 输入模态 DS RC IS CILRS Image 7.0 64.6 0.10 NEAT Image 15.1 66.4 0.22 LAV C+L 32.7 70.4 0.51 Latent TransFuser Image 37.3 95.2 0.38 Latent TransFuser 纯相机的 DS 超过了使用 LiDAR 的 LAV——说明 Transformer 注意力融合带来的提升，在某些情况下甚至比增加一个传感器还大。\n消融实验详解 为了搞清楚每个设计的贡献，作者做了一组系统的消融实验：\n1. Transformer 深度（L）\n层数 L DS 分析 1 37.5 一次注意力交互不够，融合不够充分 2 43.4 更多的交互带来了显著提升 4 47.3 最佳深度，充分交互又不过度 8 40.6 层数太多反而过拟合或优化困难 2. 注意力头数\n头数 DS 分析 1 45.4 单头表达能力有限 4 47.3 多头能关注不同方面的跨模态关系 8 43.3 头太多可能引入噪声或参数量过大 3. 安全启发式的影响\n安全启发式 DS Veh↓ Ped↓ 无 45.2 3.61 0.06 仅蠕行时 47.3 2.45 0.03 全程启用 40.9 2.28 0.03 全程启用反而降低 DS——太保守导致很多该过的时候不过（比如路口等待时不敢走）。\nCARLA Leaderboard 在官方的 100 条秘密路线上，TransFuser 提交时在所有已发布方法中排名第一。\n跨模态注意力统计 为了验证 Transformer 是否真的在做跨模态交互，作者统计了每层中\u0026quot;至少有一个 top-5 关注 token 来自另一个模态\u0026quot;的比例：\nTransformer Head 1 Head 2 Head 3 Head 4 T1（最高分辨率） Image→LiDAR: 100%, Li→Im: 0% 100%, 0% 100%, 0% 100%, 1.5% T2 99.8%, 0% 99.9%, 0% 39.7%, 0% 99.9%, 0.3% T3 44.6%, 98.7% 7.6%, 99.0% 27.7%, 98.1% 99.9%, 99.9% T4（最低分辨率） 77.8%, 89.9% 80.1%, 95.9% 90.1%, 99.9% 80.1%, 99.5% 关键发现：\nT1、T2（高分辨率）：Image→LiDAR 接近 100%，但 Li→Im 接近 0%。说明图像 token 大量关注 LiDAR token（索要几何信息），但 LiDAR token 几乎不看图像（浅层的 LiDAR 特征已经够用） T3、T4（低分辨率）：双向都很高。说明在语义层级上，两个模态需要双向沟通——图像需要知道 LiDAR 的精确位置，LiDAR 需要知道图像的语义标签 这个统计有力地证明了 TransFuser 的注意力机制确实在做有意义的跨模态信息交换，而不是学了一个恒等映射或位置编码。\n推理速度 方法 单模型 集成 3 个模型 Late Fusion 23.5 ms 46.7 ms Geometric Fusion 43.5 ms 69.1 ms TransFuser 27.6 ms 59.6 ms TransFuser 在单 RTX 3090 上 \u0026gt;36 FPS，完全可以实时运行。\n注意力可视化 图 5：注意力可视化。 对于红色标记的 query token，绿色标记了 top-5 高注意力权重的 token（来自另一个模态）。上方 4 行是图像 token 关注 LiDAR token 的区域，下方 4 行是 LiDAR token 关注图像 token 的区域。可以看到 TransFuser 的注意力高度集中在车辆、行人、交通灯等关键目标周围——说明模型学会了跨模态关注\u0026quot;什么重要\u0026quot;。\n与 Expert 的差距分析 指标 TransFuser Expert 差距 DS 47.30 76.91 38.5% RC 93.38 88.67 Expert 路线更保守 IS 0.50 0.86 碰撞/违规是主要瓶颈 Veh/km 2.45 0.28 8.7× Stat/km 0.07 0.01 7× RC 比 Expert 还高（93 vs 89）——说明 TransFuser 在\u0026quot;走完全程\u0026quot;上已经接近甚至超过专家。但碰撞次数是专家的 8.7 倍，这是所有模仿学习方法的通病：模型学到了一般情况怎么开，但在边界情况下缺少专家的安全感知能力。\n关键设计分析 1. 为什么在多个分辨率上做融合？ 融合策略 做法 表现（DS） 仅在最高分辨率融合 只在前 2 层做 35.2 仅在最低分辨率融合 只在后 2 层做 39.8 全部 4 层融合 所有分辨率都做 47.3 浅层特征包含位置/边缘信息，深层特征包含语义信息——两者都需要跨模态交互。\n2. 为什么用自注意力（self-attention）而不是交叉注意力？ 自注意力让所有 token 互相看，包括同模态内部和跨模态。这样：\n图像内部的 token 可以互相交互（全局上下文） LiDAR 内部的 token 可以互相交互 图像 token 可以关注 LiDAR token（跨模态融合） LiDAR token 可以关注图像 token 统一在一个注意力矩阵里完成，不需要设计复杂的跨模态路由。\n3. 为什么用 waypoint 而不是直接控制信号？ waypoint 比控制信号更平滑、更可解释。方式：\n预测 4 个差分 waypoint（L1 损失） PID 将 waypoint 转为控制信号 PID 控制器本身是固定的、物理可解释的（比例 P → 误差大小，积分 I → 历史累积误差，微分 D → 误差变化趋势） 局限与反思 TransFuser 的局限 第一，碰撞仍然偏多（每公里 2.45 次 vs Expert 的 0.28 次）。主要失败场景是密集交通下的变道和无保护左转——模型在需要精确时机判断的场景中表现不佳。\n图 6：变道失败。 在密集交通中变道时，TransFuser 容易连续碰撞。这是所有模仿学习方法在高密度交互场景下的共同难题。\n第二，依赖 LiDAR 输入。Latent TransFuser 虽然比之前的方法好，但 DS 37.31 仍然远低于 47.30——说明 LiDAR 的精确几何信息对端到端驾驶来说仍然是不可或缺的。\n第三，辅助任务的损失权重都是简单设置为 1，没有学习自适应权重。后续工作可以用不确定性加权或 GradNorm 来优化。\n和本系列其他论文的关系 TransFuser 在\u0026quot;端到端驾驶规划\u0026quot;这条线上是一个早期的奠基作品。它发表于 2021 年 CVPR，是第一个将 Transformer 成功应用于端到端驾驶传感器融合的工作：\n对比 NEAT（2021，注意力 BEV 变换派）：NEAT 也是用注意力从图像生成 BEV 表示，但 NEAT 做的是单向投影（图像→BEV），而且需要测试时迭代优化注意力。TransFuser 做的是双向密集融合（图像↔BEV）且是一次前向传播，两者互为补充。\n对比 UniAD（2023，规划中心派）：UniAD 把\u0026quot;以规划为中心\u0026quot;的方法系统化，TransFuser 更关注\u0026quot;怎么把传感器特征融合好\u0026quot;。两个工作在架构层面共享一个直觉——多层级多模态交互。UniAD 的 TrackFormer/MapFormer 在 BEVFormer 的特征上叠加注意力模块，和 TransFuser 在 CNN 各层插 Transformer 的思路是相通的。但 UniAD 是纯视觉的（400×300 单目），而 TransFuser 验证了相机 + LiDAR 互补的优势。\n对比 AIM（2023，TransFuser 扩展）：AIM 由同一团队提出，直接把 TransFuser 的架构用在了多帧时序设定下，并且用 discrete action space 替代了 waypoint 预测。它证明了 TransFuser 的设计不只是\u0026quot;单帧融合有用\u0026quot;，扩展到时序后同样受益。\n对比 VAD / VADv2（2023-2025，向量化派）：VAD 系列用向量化 scene token（几百个稀疏 token）替代了 TransFuser 的稠密 BEV 特征图（64×64），效率更高。但 TransFuser 奠定的\u0026quot;让不同模态在多个分辨率上交互\u0026quot;这个原则在 VAD 系列中被继承——BEVFormer 本质上是用 attention 在多视图图像之间做融合。\n对比 TCP / ThinkTwice / DriveAdapter（2022-2024，安全派）：这些工作在 TransFuser 之上增加了安全约束、两阶段推理、或 adapter 微调。TransFuser 相当于它们的\u0026quot;发动机\u0026quot;——提供了可靠的多模态场景表示，上层再加安全策略。\n对比 DriveMLM（2024，LLM 派）：TransFuser 和 DriveMLM 代表了两种完全不同的路线。TransFuser 用 CNN + Transformer 做紧凑特征编码，轻量高效（27.6ms）；DriveMLM 用 LLM 做推理，可解释但延迟高。两者本质上正交——TransFuser 关注\u0026quot;感知融合怎么做\u0026quot;，LLM 方法关注\u0026quot;推理怎么做\u0026quot;。\n个人思考 从历史视角看 TransFuser 的定位 2021 年是自动驾驶端到端学习的一个关键转折点。在此之前，CARLA 上的主流方法要么是 CILRS 那种直接回归控制信号的简单方法（DS 不到 10），要么是做 RL（训练极其不稳定）。TransFuser 的出现改变了这个局面——它第一次证明了\u0026quot;一个设计良好的端到端模型\u0026quot;可以跑出有实际意义的结果。\n但 TransFuser 也暴露了模仿学习的根本局限：行为克隆只能学到训练数据里的模式，而驾驶中的安全边界大部分在数据分布之外。 这个问题直到 VADv2 的 conflict loss（2025）和 GRPO 系列的 RL 搜索（2026）才有更系统的解决。从这条线看过去，TransFuser 是\u0026quot;第一块踏脚石\u0026quot;——它证明了\u0026quot;这条路能走通\u0026quot;，后续工作才能沿着这个方向精进。\n三个值得记住的设计哲学 1. \u0026ldquo;融合不是最后一层的事，是每层的事\u0026rdquo;\n这是 TransFuser 最有价值的设计原则。两个模态的特征在浅层、中层、深层各自有不同的表现形式——浅层需要融合几何信息，深层需要融合语义信息。只在最后一层融合等于\u0026quot;让两个人在完全不交流的情况下分别完成任务，到最后才拼答案\u0026quot;。\n2. \u0026ldquo;自注意力比交叉注意力更适合这个任务\u0026rdquo;\n虽然直觉上\u0026quot;图像看 LiDAR，LiDAR 看图像\u0026quot;应该用交叉注意力，但 TransFuser 选择自注意力——因为同模态内部的交互也有价值。图像内部的远距离像素需要互相理解上下文（比如\u0026quot;远处的红绿灯和近处的停车线\u0026quot;之间的关系），自注意力在一个矩阵里同时完成了模态内和跨模态两种交互。\n3. \u0026ldquo;差分预测 + PID 控制比直接预测控制信号更稳定\u0026rdquo;\n预测差分 waypoint（$w_t = w_{t-1} + \\delta w_t$）而不是绝对坐标，这个设计在后续几乎被所有基于 waypoint 的方法继承（UniAD、VAD、ThinkTwice）。它其实是\u0026quot;残差学习\u0026quot;思想在轨迹预测上的体现——预测的变化量比绝对量小、更稳定。\n与 VADv2 / UniAD 的对比 从架构设计角度来看三个工作的演进非常清晰：\n维度 TransFuser (2021) UniAD (2023) VADv2 (2025) 传感器 相机 + LiDAR 纯相机（6 视图） 纯相机（6 视图） 场景表示 稠密 BEV 特征图 BEV 特征 + query 向量化 scene token 模态融合 多分辨率自注意力 BEVFormer（BEV 空间注意力） BEVFormer（继承） 规划方式 确定性回归（GRU waypoint） 确定性回归（GRU waypoint） 概率分布（sigmoid + 采样） 辅助任务 深度/语义/地图/检测 全栈（检测/跟踪/地图/运动/规划） 地图/agent/交通元素 推理速度 27.6 ms ~50 ms ~40 ms DS (Town05) 47.30 31.0 85.1 从 TransFuser 到 UniAD，核心变化是从\u0026quot;传感器融合驱动\u0026quot;变成\u0026quot;规划目标驱动\u0026quot;——UniAD 证明让所有任务都服务于规划目标比单纯做融合更有效。再到 VADv2，核心变化是从\u0026quot;确定性\u0026quot;变成\u0026quot;概率性\u0026quot;——承认驾驶的不确定性，把规划从回归变成分类。\n但 TransFuser 的贡献没有因为这些进步而贬值。相反，它确立的\u0026quot;多分辨率跨模态交互\u0026quot;这个设计原则，在 BEVFormer 和后续所有 BEV 方法中都以不同形式被继承了下来。\n一句话总结：TransFuser = 双分支 CNN（图像 + LiDAR BEV）+ 4 层多分辨率自注意力融合 + GRU 自回归 waypoint 预测 + 4 个辅助任务（深度/语义/地图/检测）。它最核心的贡献是：证明了\u0026quot;在特征提取过程中做多分辨率跨模态注意力\u0026quot;可以取代\u0026quot;几何投影后融合\u0026quot;——这个设计原则影响了后续几乎所有端到端驾驶方法。\n参考资料 论文：arXiv:2205.15997 代码：github.com/autonomousvision/transfuser 相关论文：NEAT arXiv:2104.09224, CILRS arXiv:1910.13690 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-transfuser/","summary":"TransFuser 在 CARLA 上首次验证了 Transformer 做多模态传感器融合的可行性——用自注意力让图像和 LiDAR 特征在多个分辨率上密集交互，取代简单的几何融合。在 CARLA Leaderboard 和 Longest6 基准上以显著优势领先此前所有方法，将碰撞率降低 48%。","title":"论文精读｜TransFuser：用 Transformer 做传感器融合——让相机和激光雷达\"商量着开车\""},{"content":"📄 论文信息 标题：Diffusion Policy: Visuomotor Policy Learning via Action Diffusion（基于动作扩散的视觉运动策略学习） 团队：MIT（Cheng Chi, Shuran Song, Russ Tedrake 等）\u0026amp; Toyota Research Institute 发表：RSS 2023（Oral），扩展版 arXiv:2303.04137 v5 关键词：扩散模型、动作生成、视觉运动策略、多模态动作分布、CNN / Transformer 双架构 一句话总结：把机器人动作生成重新定义为条件去噪过程，让策略网络学会从噪声中逐步雕琢出动作序列，天然支持多模态分布与高维动作空间，是后续 VLA 模型动作头设计的奠基之作。 🤔 要解决什么问题？机器人策略学习的三个死穴 传统机器人策略学习（Behavior Cloning）的核心问题是：给定当前观测（图像 + 本体状态），输出一个动作。这个范式在大多数 benchmark 上跑了好多年，但有三个被长期容忍的致命缺陷。\n问题 表现 根源 多模态动作分布 同一场景有多个合理动作（如：向左绕 / 向右绕），L2 回归会取平均，输出\u0026quot;撞中间\u0026quot;的动作 确定性回归只能拟合一个点 高维动作空间 双机械臂 + 灵巧手，动作维度动辄几十维，协方差结构复杂 高斯/混合高斯假设太弱 训练不稳定 动作序列前后关联，单步回归导致累计漂移、抖动 缺乏时序建模，误差累积 Diffusion Policy 的核心判断：与其用回归硬挤\u0026quot;平均答案\u0026quot;，不如把策略视为一个条件生成模型，直接建模动作分布的 score function（得分函数），再通过 Langevin 采样生成动作。\n💡 核心思想：条件去噪生动作 扩散模型做策略的直觉 标准 DDPM 有两个过程：\n前向加噪：从真实动作 $A_0$ 逐步加高斯噪声，T 步后完全变成 $\\mathcal{N}(0, I)$ 反向去噪：训练网络 $\\epsilon_\\theta$ 预测每一步添加的噪声，逆过程恢复动作 前向过程的数学描述如下。给定真实动作序列 $A_0 \\in \\mathbb{R}^{T \\times D_a}$（$T$为动作序列长度，$D_a$为动作维度），前向加噪过程是一个马尔可夫链：\n$$q(A_t | A_{t-1}) = \\mathcal{N}(A_t; \\sqrt{1-\\beta_t} A_{t-1}, \\beta_t I)$$$$q(A_t | A_0) = \\mathcal{N}(A_t; \\sqrt{\\bar{\\alpha}_t} A_0, (1-\\bar{\\alpha}_t) I)$$其中 $\\alpha_t = 1-\\beta_t$，$\\bar{\\alpha}_t = \\prod_{s=1}^t \\alpha_s$。关键性质是：给定 $A_0$，可以直接得到任意时间步 $t$ 的 $A_t$，无需逐步迭代：\n$$A_t = \\sqrt{\\bar{\\alpha}_t} A_0 + \\sqrt{1-\\bar{\\alpha}_t} \\epsilon, \\quad \\epsilon \\sim \\mathcal{N}(0, I)$$反向去噪过程则训练神经网络 $\\epsilon_\\theta$ 预测噪声。给定条件 $\\mathbf{c}$（视觉观测 $O_t$ 与机器人状态 $s_t$ 的联合编码），训练目标是最小化：\n$$\\mathcal{L} = \\mathbb{E}_{A_0, t, \\epsilon}\\left[ \\| \\epsilon - \\epsilon_\\theta(A_t, t, \\mathbf{c}) \\|^2 \\right]$$其中 $t \\sim \\text{Uniform}(1, T)$，$\\epsilon \\sim \\mathcal{N}(0, I)$。推理（采样）时从纯噪声 $A_T \\sim \\mathcal{N}(0, I)$ 开始，按反向过程逐步去噪：\n$$A_{t-1} = \\frac{1}{\\sqrt{\\alpha_t}} \\left( A_t - \\frac{1-\\alpha_t}{\\sqrt{1-\\bar{\\alpha}_t}} \\epsilon_\\theta(A_t, t, \\mathbf{c}) \\right) + \\sigma_t z, \\quad z \\sim \\mathcal{N}(0, I)$$其中 $z$ 在 $t=1$ 时为 $0$。条件 $\\mathbf{c}$ 通过 条件扩散 的方式注入网络，使去噪过程在每一步都能\u0026quot;看到\u0026quot;当前场景，从而生成当下最合理的动作。\n训练与推理算法伪代码 训练过程：在每个训练迭代中，采样一个batch的(观测, 动作)对$(O, A_0)$，随机选择时间步$t$，从标准正态分布采样噪声$\\epsilon$，计算加噪后的动作$A_t$，然后优化网络预测的噪声与真实噪声之间的MSE。伪代码如下：\n训练算法： for each iteration do (O, A_0) ← 从数据集中采样batch t ∼ Uniform(1, T) // 随机时间步 ε ∼ N(0, I) // 采样噪声 A_t = √ᾱ_t · A_0 + √(1-ᾱ_t) · ε // 加噪 c = Encoder(O) // 编码视觉观测 L = ||ε - ε_θ(A_t, t, c)||² // 噪声预测损失 θ ← θ - η · ∇_θ L // 梯度更新 end for 推理（采样）过程：在推理时，从纯高斯噪声出发，使用训练好的噪声预测网络$\\epsilon_\\theta$逐步去噪。每一步去除预测的噪声分量，并添加随机项以保证多样性。\n推理（采样）算法： A_T ∼ N(0, I) // 初始纯噪声 c = Encoder(O_current) // 编码当前观测 for t = T to 1 do z ∼ N(0, I) if t \u0026gt; 1 else z = 0 ε_pred = ε_θ(A_t, t, c) // 预测噪声 A_{t-1} = 1/√α_t · (A_t - (1-α_t)/√(1-ᾱ_t) · ε_pred) + σ_t · z end for 执行 A_0 的前 K 步动作 // 滚动时域控制 值得注意的是，Diffusion Policy在推理时可以使用更快的采样器（如DDIM）将步数从100降至10甚至5步，而性能几乎不受影响。这是因为DDIM将反向过程建模为确定性ODE的离散化，允许用大步长直接跳跃到$t=0$。\n为什么扩散适合机器人策略？ 扩散模型的特性 对策略学习的意义 隐式建模多模态 Langevin 采样天然生成多条动作，无 mode averaging 高维协方差 动作各维度联合建模，不假设独立或高斯 训练稳定 去噪目标 vs 回归目标，loss landscape 更平滑，收敛更快 时序一致性 全序列联合生成，不逐帧回归，避免累计误差 原论文第 5 节有一个非常生动的实验：在2D 点到达任务中，目标在 L 形障碍物后方。确定性回归学会了一个\u0026quot;平均路径\u0026quot;——穿墙。而扩散策略学会了左侧绕和右侧绕两条路径，完美避开障碍物。\n🏗️ 模型架构：CNN 与 Transformer 两条路线 Diffusion Policy 提供了两种架构实现，覆盖不同场景需求。\n数据流总览 多视角图像 ➜ 视觉编码器（ResNet）➜ 特征 $\\mathbf{c}$ ➜ 扩散去噪网络（CNN / Transformer）➜ 动作序列分布\n视觉条件编码 所有图像输入共享一个 CNN Backbone（ResNet-18/34）提取特征，再通过 FiLM（Feature-wise Linear Modulation） 注入去噪网络。FiLM 的做法是对扩散网络中间层的特征做仿射变换：\n$$ \\text{FiLM}(h) = \\gamma(\\mathbf{c}) \\cdot h + \\beta(\\mathbf{c}) $$其中 $\\gamma, \\beta$ 由视觉特征 $\\mathbf{c}$ 通过 MLP 预测。这种方式比简单拼接更灵活，能让视觉条件在每个去噪步调整网络的计算路径。\nCNN 版本：高效直观 适用于固定时间窗口的动作预测，计算量小，适合 50Hz 实时控制。\n观测特征 ➜ 1D 卷积（沿时间维） ➜ FiLM 注入 ➜ 1D 卷积 ➜ 预测噪声 每个去噪步输入的 $A_t$ 是一个 $T \\times D_a$ 的\u0026quot;图像\u0026quot;（$\\text{宽}=\\text{时间步},\\ \\text{高}=\\text{动作维}$），用 1D 卷积沿时间轴建模动作时序。\nTransformer 版本：灵活强大 适用于变长、多维交互复杂场景，使用 Time-Series Diffusion Transformer。\n组件 说明 噪声动作编码 将 $A_t$ 分时间步做 MLP 编码 + 位置编码 时间步编码 用 sinusoidal embedding 编码 $t$，与动作 token 相加 交叉注意力 每个动作 token 通过 cross-attention 读取视觉特征 $\\mathbf{c}$ 自注意力 动作 token 之间做 causal / 全自注意力，建模时序因果 输出 预测每个时间步的噪声，构成与输入同尺寸的 $\\epsilon_\\theta$ Transformer 版本的优势：可以灵活处理不同长度动作序列，注意力机制能捕捉远程依赖（如\u0026quot;先抓取再提起\u0026quot;的跨步约束）。\n🔑 三大关键设计 1. 滚动时域控制（Receding Horizon Control） 这是 Diffusion Policy 从理论走向工程最关键的一笔。\n问题：扩散生成固定长度 $T$ 的动作序列，但执行过程中观测不断更新，不能等整段动作算完才行动。\n解法：采用 Receding Horizon（衰减地平线） 策略：\n在时刻 $t$，基于观测 $O_t$ 生成未来 $T$ 步的动作序列 $[a_t, a_{t+1}, ..., a_{t+T-1}]$ 只执行前 $K$ 步（通常 $K \u003c T$） 丢弃后 $T-K$ 步 在时刻 $t+K$，用新观测重新生成 设计 效果 $K \u003c T$ 的滚动 策略可在动作执行过程中根据反馈修正轨迹 多步联合生成 比起逐帧回归，避免抖动和累积漂移 丢弃后半段 防止过期动作被执行，增加鲁棒性 一个重要发现：开环执行完整序列 vs 滚动执行前 $K$ 步，滚动版本的闭环成功率显著更高（尤其在有干扰的物理实验中）。\n2. 视觉条件注入 视觉观测通过 FiLM 注入扩散网络，使去噪过程\u0026quot;看场景办事\u0026quot;。实验显示，移除视觉条件后成功率断崖式下降，证明条件注入是策略学习的必要环节。\n值得注意的设计细节：FiLM 的 $\\gamma, \\beta$ 参数随去噪时间步 $t$ 变化——在早期去噪步（噪声大），视觉条件的影响较大（\u0026ldquo;告诉我该往哪个方向\u0026rdquo;）；在后期去噪步（噪声小），视觉条件的影响衰减（\u0026ldquo;只需要精细调整即可\u0026rdquo;）。这种 t-dependent conditioning 是保证生成质量的重要工程技巧。\n3. Time-Series Diffusion Transformer Transformer 版本不只能处理变长序列，还具备一个隐藏优势：学习到的注意力权重揭示了动作之间的时序依赖。论文展示了注意力图：在\u0026quot;捏取\u0026quot;任务中，最后几个时间步的动作对早期动作的注意力极强（\u0026ldquo;我的位置取决于你如何抓住物体\u0026rdquo;），这解释了为什么逐帧回归处理不了这种长程关联。\n🧪 实验表现：12 个任务，4 个 benchmark 实验设定 Benchmark 任务数量 任务类型 Franka Kitchen 7 厨房操作（开微波炉、开灯、拉抽屉等） Robomimic 3 桌面粉笔任务、运输、堆叠 Block Push 1 推方块到目标（2D 模拟） Adroit 1 灵巧手旋转笔 核心结果 平均提升 46.9%：在 12 个任务上相比 IBC、LSTM-GMM、**BeT（Behavior Transformer）**等 SOTA 方法，Diffusion Policy 在任务成功率上实现了大幅领先 唯一在所有 benchmark 上都有效的方法：其他方法在某个/某些任务上会崩溃（如 IBC 在高维 Adroit 上几乎无效），而 Diffusion Policy 在所有任务上都表现稳定 主要 ablation 发现 Ablation 结论 去掉滚动时域（开环） 成功率平均下降 15-20%，有碰撞/干扰时更明显 去掉 FiLM（拼接/加和替代） 略有下降，但 FiLM 在高维任务上优势更明显 减少去噪步数 从 100 步降到 10 步，性能损失很小（学成了\u0026quot;去噪捷径\u0026quot;） CNN vs Transformer CNN 在简单任务持平，复杂任务（灵巧手）Transformer 更优 🔬 深入理解：扩散策略为什么训练更稳定？ 论文对比了 IBC（Implicit Behavior Cloning） 和 Diffusion Policy 的训练曲线。IBC 采用 EBM 训练，其对比损失需要采样负样本，训练过程波动大、容易发散。而扩散策略的 MSE 去噪损失梯度平滑且可预测，收敛更快且更稳定。\n维度 IBC（隐式） Diffusion Policy（显式生成） 训练目标 对比损失（能量差） MSE 去噪损失 负样本 必需（采样质量影响大） 不需要（加噪自动生成） 梯度稳定性 差，易发散 好，收敛快 高维扩展 极差（能量估计困难） 好（噪声预测天然可扩展） 多模态建模 支持（能量分布天然多峰） 支持（采样多样性） 这解释了为什么 IBC 在 Adroit（灵巧手，高维动作）上几乎无效，而 Diffusion Policy 轻松应对。\n⚡ 推理与加速：从 100 步到几步 扩散模型\u0026quot;慢\u0026quot;的名声是它落地最大的障碍。论文做了系统的加速分析：\nDDIM 采样：确定性采样允许用更少步数，从 100 步降到 10 步，性能几乎不变 步数 vs 质量 trade-off：在模拟器上，10 步采样已经足够好；在真实机器人上，甚至可以用 5 步 达到接近最优性能 编辑距离视角：早期去噪步决定动作的\u0026quot;大方向\u0026quot;，后期只做精细微调——可以提前截断 加速后的延迟对比（基于一块 RTX 3090，单次生成）：\n配置 延迟 100 步 DDPM ~300ms 10 步 DDIM ~30ms 5 步 DDIM ~15ms 15ms 已经完全可以满足 10Hz+ 的实时控制需求。\n🆚 与后续 VLA 模型动作头及扩散规划工作的关联 Diffusion Policy 是视觉-语言-动作（VLA）模型动作头设计最重要的灵感来源之一：\n后续模型 动作头设计 受 Diffusion Policy 启发 RT-2 tokenized action（离散） 通用化，但丢失了连续动作精度 π0 (pi-zero) Flow Matching 动作头 沿用\u0026quot;生成式\u0026quot;范式的直接继承者 Octo 扩散动作头 直接复用 OpenVLA 离散 token 补充路线 Diffusion-Planning 扩散轨迹优化 将扩散从\u0026quot;策略\u0026quot;扩展到\u0026quot;规划器\u0026quot; π0 的工作可以看作是 \u0026ldquo;Diffusion Policy + Flow Matching + 语言条件\u0026rdquo; 的组合：把去噪换成了速度场预测（Flow Matching），保留多模态生成和时序联合建模，但采样速度更快、训练更稳定。而 Octo 则几乎直接沿用了 Diffusion Policy 的 CNN 扩散头，证明其设计在当时的鲁棒与成熟。\nDiffusion Policy与Diffusion-Planning的关系 Diffusion-Planning（Janner et al., 2022）是Diffusion Policy之前的一篇重要工作，两者虽然都使用扩散模型做决策，但在范式和目标上存在本质差异：\n维度 Diffusion-Planning Diffusion Policy 时间线 NeurIPS 2022 RSS 2023 核心范式 将轨迹规划视为扩散生成 将策略学习视为条件扩散 训练数据 专家轨迹（离线RL） 专家演示（BC） 条件信号 目标状态/奖励函数 视觉观测 + 机器人状态 是否交互 规划+执行（开环规划） 闭环策略（滚动执行） 动作分布建模 隐式（扩散轨迹） 显式（条件动作分布） 与BC的关系 规划器（非策略） 策略（直接行为克隆） 两者分别代表了扩散模型在机器人中的两条技术路线：扩散规划器（用扩散生成完整轨迹，再通过控制器跟踪）和扩散策略（用扩散直接生成策略的动作输出）。Diffusion-Planning更接近Model-based RL的范式（需要环境模型或奖励函数），而Diffusion Policy则是Behavior Cloning的扩展（直接从专家演示中学习条件动作分布）。后续工作中，两条路线出现了融合趋势——例如Uni-World VLA和CoWorld-VLA将扩散规划器的\u0026quot;世界模型预测\u0026quot;与扩散策略的\u0026quot;条件生成\u0026quot;结合，在自动驾驶场景中同时预测未来场景和规划自车轨迹。\n后续扩散策略工作的技术演进 Diffusion Policy发表后，其设计范式在多个方向上被继承和发展：\n扩散策略的即时改进方向：\nEquiDiff（2023）：将等变扩散引入策略学习，保证策略输出关于观测的对称性，在对称操作任务中提升数据效率 GenAug（2023）：利用扩散模型的数据增强能力为策略生成更多训练数据，将策略成功率提升20%+ Chained-Diffuser（2024）：将长时域任务分解为子任务链，每个子任务使用一个Diffusion Policy，实现了长时域任务规划 生成式模型替代方向：\nπ0 (pi-zero)（2024）：使用Flow Matching替代DDPM，在保持多模态生成能力的同时实现更快的采样 GR-1（2024）：将Causal Transformer与扩散头结合，统一了视频预测和动作生成 3D Diffusion Policy（2024）：将扩散策略扩展到3D空间，使用点云作为观测输入 Diffusion Policy的核心贡献可以总结为：它证明了生成式模型不仅仅是内容生成工具，更是策略学习的有效框架，开启了\u0026quot;生成式策略\u0026quot;这一研究范式。\n⚠️ 局限性 推理步数仍非单次：加速后 5-10 步仍比一步回归多几个数量级的计算，对极高频（100Hz+）控制不够友好 动作边界难保证：去噪只能\u0026quot;接近\u0026quot;训练数据分布，无法像二次规划那样精确限制关节角度/力矩安全范围 长序列效率：序列长度 $T$ 增长时，Transformer 注意力 $O(T^2)$ 成为瓶颈 $K$ 的超参敏感：滚动时域的 $K$ 值需要调参，太短失去时序联合意义，太长延迟增加且鲁棒性下降 开源代码依赖特定版本：论文代码基于官方 Diffusion 库（IDDPM 等），与最新的扩散加速库集成不够紧密 📝 个人思考 Diffusion Policy 对我来说最大的意义不在于它性能好多少（46.9% 的涨幅确实惊人），而在于它重新定义了\u0026quot;机器人策略可以是什么\u0026quot;。\n在此之前的策略主流是这样三条路：确定性回归（简单暴力但只给一个答案）、GMM（分布建模但表达能力受限）、EBM/IBC（灵活但训练要命）。Diffusion Policy 做的选择是：那我不如就用一个经过图像生成社区充分验证的生成模型来做动作生成——既然扩散能在图像这种高维空间里建模复杂分布，凭什么不能做动作？\n这个选择的巧妙在于，它尊重了一个事实：动作分布和图像分布虽然有区别，但\u0026quot;从噪声到数据\u0026quot;的降维逻辑是相通的，而扩散模型的 score matching 训练范式天然规避了 EBMs 的负采样噩梦。所以它既拿到了 EBMs 的多模态灵活性，又保持了回归式训练的稳定性——\u0026ldquo;既要又要还要\u0026quot;在深度学习里很少见，但它做到了。\n第二点是滚动时域控制这个\u0026quot;小设计\u0026quot;的价值。从算法角度来看它很简单：生成一段、只执行开头、再生成一段。但从系统角度来看，它把扩散这种\u0026quot;离线生成\u0026quot;的范式变成了一个闭环在线系统。往后看 VLA 模型其实也面临同样的问题——你生成了 8 秒的动作序列，执行到一半观测变了怎么办？Diffusion Policy 用这么一个简单机制就解决了，让我再次感叹：工程落地里的瓶颈往往不是更复杂的算法，而是正确的系统设计。\n最后，Diffusion Policy 的历史坐标值得认真对待。在它之前，扩散模型攻陷了图像（DDPM，Stable Diffusion）、音频（AudioLDM），甚至在科学计算（蛋白结构生成）上有所建树。Diffusion Policy 把这些胜利延伸到了机器人领域，打通了\u0026rdquo;生成式模型 → 策略学习\u0026ldquo;这条路。后续 VLA 模型（π0、Octo、OpenVLA）的爆发，追根溯源都能在这篇工作里找到影子。动作头不再是 MLP 或离散 tokenizer，而是 扩散 / Flow Matching 去噪过程——这个由 Diffusion Policy 开创的范式，正在成为机器人基础模型的标配。\n📖 这是论文精读系列的第 38 篇。扩散模型正在从\u0026quot;生成图像\u0026quot;走向\u0026quot;生成动作\u0026rdquo;，你怎么看生成式策略的未来？欢迎留言。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/diffusion-policy%E7%B2%BE%E8%AF%BB/","summary":"Diffusion Policy 将机器人动作生成重新定义为条件去噪过程，让策略网络从噪声中逐步雕刻出动作序列。它天然支持多模态动作分布与高维动作空间，解决了传统行为克隆的 mode averaging 和复合误差问题。经 CNN 和 Transformer 双架构验证，成为后续 π0、Qwen-VLA 等 VLA 模型动作头设计的奠基之作。","title":"论文精读｜Diffusion Policy：扩散模型做机器人动作生成"},{"content":"📄 论文信息 标题：World4Drive: End-to-End Autonomous Driving via Intention-aware Physical Latent World Model 团队：中科院自动化所（CASIA）× 理想汽车（Li Auto）× 之江实验室 × 清华 arXiv：2507.00603（2025 年 7 月，ICCV 2025） 代码：github.com/ucaszyp/World4Drive 关键词：隐世界模型、意图感知、无感知标注、视觉基础模型先验、自监督 一句话总结：第一个把\u0026quot;多模态驾驶意图\u0026quot;和\u0026quot;物理隐世界模型\u0026quot;缝在一起的端到端框架——它让模型像人一样\u0026quot;在不同意图下潜意识推演未来\u0026quot;，再用世界模型给多条候选轨迹打分，全程不需要 3D 框/高精地图等昂贵感知标注。 🤔 要解决什么问题？感知标注是端到端的\u0026quot;隐形税\u0026quot; 端到端自动驾驶最被诟病的一点：看似\u0026quot;传感器进、轨迹出\u0026quot;，其实训练时照样要喂大量感知标注——3D 检测框、车道线、高精地图、occupancy。这些标注又贵又慢，严重卡住规模化。已有的\u0026quot;无标注\u0026quot;尝试分两派：\n方法 思路 痛点 VaVAM 自回归视频模型直接生成轨迹 单模态视觉特征，缺空间语义 LAW 隐世界模型，从原图凑单模态隐特征自监督预测未来 不理解 3D 空间 + 不会建模多模态意图，收敛慢、性能差 作者把 LAW 的瓶颈讲得直白：直接从 RGB 图像学隐特征，根本抓不住物理世界的空间-语义信息，更抓不住\u0026quot;我可能直行、也可能变道\u0026quot;这种多模态意图不确定性。结果就是训练慢、L2 和碰撞率都不理想。World4Drive 要回答的核心问题：能不能不靠感知标注，让世界模型既懂物理、又懂多模态意图？\n💡 核心思想：人怎么开车，模型就怎么开车 World4Drive 的灵感来自人类驾驶员的决策直觉——人在开车时，会下意识地在不同意图下\u0026quot;想象\u0026quot;未来世界会怎样，再选最合理的那个动作。作者把这个过程拆成两大模块。\n模块一：Driving World Encoding（驾驶世界编码） 这个模块干两件事：抽驾驶意图，抽物理世界隐表征。\n意图编码器（Intention Encoder）：借鉴 VADv2，用一个 8192 条轨迹的词表 $\\mathcal{V}$，按命令类型（左转/右转/直行）对端点做 k-means 聚类，得到每类 6 个意图点（共 18 个意图），再用自注意力得到意图感知的多模态规划查询 $Q_{plan}$。这一步把\u0026quot;多模态意图\u0026quot;显式编码成可学习的 query。\n物理隐编码器（Physical World Latent Encoder） 是全文最硬核的部分，它要让隐表征\u0026quot;懂物理\u0026quot;。具体又分三块：\n语义理解：用 Grounded-SAM 生成伪语义分割标签（只保留高置信度），用交叉熵损失给隐表征灌入语义先验。 3D 空间编码：用 Metric3D v2（度量深度模型）估计多视角深度，配合相机内参做前向投影，把每个像素反投影成自车坐标系下的 3D 位置 $p=\\{x,y,z\\}$，再经正弦位置编码 + MLP 得到 3D 位置嵌入。这比 PETR 的 post-projection 更直接，能给模型scale-aware 的空间感知。 时序聚合：用 cross-attention 把上一帧特征融进当前帧，让隐表征带上时间上下文。 三块拼起来，得到的世界隐表征 $L_t$ 同时富含空间、语义、时序信息——这就是\u0026quot;懂物理\u0026quot;的来源。\n模块二：意图感知世界模型（Intention-aware World Model） 有了意图和世界表征，模型在 K 个意图下各预测一个未来隐表征：\n$$L_{t+n}=\\text{CrossAttention}(Q_{future},\\text{Concat}(A,L))$$其中 $A$ 是意图对应的 action token，$n=3$（预测 3 帧后）。关键玩法是 World Model Selector（世界模型选择器）：\n对每个意图，算\u0026quot;预测未来隐表征\u0026quot;和\u0026quot;真实未来隐表征\u0026quot;的距离，取距离最小的那条意图作为最优模态 j； 用它的隐距离做重建损失 $\\mathcal{L}_{recon}$ 自监督学习场景表征； 同时训练一个 ScoreNet 对 K 条意图打分，用 focal loss 监督； 推理时直接选分数最高的那条轨迹输出。 这套机制的本质是：用世界模型当\u0026quot;裁判\u0026quot;，在多模态候选里选最符合物理演化的那条。最终损失是四项加权：\n$$\\mathcal{L}=\\alpha\\mathcal{L}_{sem}+\\beta\\mathcal{L}_{recon}+\\gamma\\mathcal{L}_{score}+\\eta\\mathcal{L}_{traj}$$其中只有 $\\mathcal{L}_{traj}$ 用到专家轨迹，其余全是自监督——这就是\u0026quot;无感知标注\u0026quot;的底气。\n🏗️ 架构深度解析：两大模块如何协同工作 图 1：World4Drive 整体流程图。输入多视角图像流 $I_{1:T}$ 后，模型分为两条支路：(1) 物理世界编码器将图像编码为富含空间-语义先验的隐表征 $L_t$；(2) 意图编码器从导航命令中提取 K 个多模态意图 $A_k$。二者经意图感知世界模型交叉注意力得到 K 个未来隐表征 $L^{k}_{t+n}$，再由 World Model Selector 比较各意图下的预测误差，选出最优意图并输出轨迹。\n物理世界编码器（Physical World Latent Encoder） 这是 World4Drive 的核心创新模块，解决\u0026quot;纯 RGB 学不出好隐特征\u0026quot;的痛点。它由三个并行子模块组成：\n子模块 技术栈 输出 作用 语义编码 Grounded-SAM → 伪语义标签 → 交叉熵损失 语义嵌入 $e_{sem}$ 让隐表征理解\u0026quot;这是车、那是路\u0026quot; 3D 空间编码 Metric3D v2 → 度量深度 → 反投影至 3D → 正弦位置编码 + MLP 3D 位置嵌入 $e_{pos}$ 给模型 scale-aware 的空间感知 时序聚合 上一帧 $L_{t-1}$ → cross-attention → 当前帧 时序上下文 $e_{temp}$ 保持时间一致性 三者拼接加 MLP 投影后得到 $L_t$，同时携带空间、语义、时序三种信息：\n$$L_t = \\text{MLP}(\\text{Concat}(e_{sem}, e_{pos}, e_{temp})) \\in \\mathbb{R}^{D}$$\n图 2：物理世界编码器的详细流程。Metric3D v2 输出的度量深度经前向投影（Forward Projection）得到 3D 点云坐标 $p=\\{x,y,z\\}$。与 PETR 的 post-projection 不同，此处直接在 3D 空间做位置编码，赋予模型绝对尺度感知。Grounded-SAM 生成的伪语义标签只保留高置信度区域，规避噪声传播。\n前向投影的关键公式——给定像素 $(u,v)$ 及其深度 $d$，3D 坐标计算为：\n$$p = K^{-1} \\cdot [u \\cdot d,\\; v \\cdot d,\\; d]^{\\top}$$其中 $K \\in \\mathbb{R}^{3 \\times 3}$ 是相机内参矩阵。坐标经正弦位置编码（sin/cos 不同频率）和两层 MLP 后得到 $e_{pos}$：\n$$e_{pos} = \\text{MLP}(\\gamma(p)), \\quad \\gamma(p)=[\\sin(2^0\\pi p), \\cos(2^0\\pi p), \\dots, \\sin(2^{L-1}\\pi p), \\cos(2^{L-1}\\pi p)]$$意图编码器（Intention Encoder） 借鉴 VADv2 的词表思想，意图编码器将一个 8192 条轨迹的候选词表 $\\mathcal{V}$ 按命令类型（左转/右转/直行）做 k-means 端点聚类，每类提取 6 个意图中心，共 18 个意图 token：\n$$\\{[a_k^{(l)}, a_k^{(r)}, a_k^{(s)}]\\}_{k=1}^{6} = \\text{k-means}(\\mathcal{V}_{\\text{left}}, \\mathcal{V}_{\\text{right}}, \\mathcal{V}_{\\text{straight}})$$这 18 个 token 经自注意力交互，得到意图感知的多模态规划查询 $Q_{plan} \\in \\mathbb{R}^{K \\times D}$，其中 $K=18$。$Q_{plan}$ 的优势在于：它把\u0026quot;多模态意图\u0026quot;显式编码成可学习的 query，而非隐式地依赖数据分布去隐式建模。\n意图感知世界模型（Intention-aware World Model） 得到 $L_t$ 和 $Q_{plan}$ 后，模型执行两步操作：\n步骤 1：意图条件未来预测。对每一个意图 $k$，用 cross-attention 将 intent token 与隐表征融合，预测 n=3 帧后的未来隐状态：\n$$L^{(k)}_{t+n} = \\text{CrossAttention}(Q^{(k)}_{future}, \\text{Concat}(A_k, L_t))$$其中 $A_k$ 是第 k 个意图对应的 action token，$Q_{future}$ 是从 $Q_{plan}$ 派生出的未来查询。这一步在隐空间中完成，无需解码为像素或 occupancy，计算代价远低于显式世界模型。\n步骤 2：World Model Selector（世界模型选择器） —— 这是全文最具巧思的设计。对每个意图 $k$，计算预测隐表征 $L^{(k)}_{t+n}$ 与真实未来隐表征 $L_{t+n}$ 的距离：\n$$d_k = \\|L^{(k)}_{t+n} - L_{t+n}\\|_2$$取最小距离对应的意图为最优模态 $j = \\arg\\min_k d_k$，用其重建损失做自监督：\n$$\\mathcal{L}_{recon} = \\|L^{(j)}_{t+n} - L_{t+n}\\|_2^2$$同时训练一个 ScoreNet $S(\\cdot)$ 对 K 条意图打分，用 focal loss 让最优意图的分数最高：\n$$\\mathcal{L}_{score} = \\sum_{k=1}^K \\text{FL}(S(L_t, A_k), \\mathbb{1}_{k=j})$$推理时直接选分数最高的轨迹输出，无需再计算 $d_k$。\n图 3：World Model Selector 工作流程。K 条意图各自产生一条预测轨迹（上），World Model Selector 选取与真实未来最匹配的那条（绿色），ScoreNet 在所有意图上输出置信度分数。\n轨迹解码与规划代价 最优意图 $j$ 确定后，对应的 action token $A_j$ 经 MLP 解码器输出最终轨迹 $\\tau_j = \\{\\Delta x_{1:T}, \\Delta y_{1:T}\\}$。规划损失直接对标专家轨迹 $\\tau_{gt}$：\n$$\\mathcal{L}_{traj} = \\text{L1}(\\tau_j, \\tau_{gt}) + \\lambda \\cdot \\text{col}(\\tau_j)$$其中 $\\text{col}(\\tau_j)$ 是碰撞代价项（可微碰撞检测）。完整训练损失四项加权求和：\n$$\\mathcal{L} = \\alpha \\mathcal{L}_{sem} + \\beta \\mathcal{L}_{recon} + \\gamma \\mathcal{L}_{score} + \\eta \\mathcal{L}_{traj}$$超参数默认 $\\alpha=0.1, \\beta=1.0, \\gamma=0.5, \\eta=1.0$。注意 $\\mathcal{L}_{sem}, \\mathcal{L}_{recon}, \\mathcal{L}_{score}$ 三项均不需要任何人类标注——这是\u0026quot;无感知标注\u0026quot;的核心技术基础。$\\mathcal{L}_{traj}$ 是唯一用到 expert trajectory 的项，但即使没有它，模型也能通过世界模型自监督学习场景演化，只是规划精度会下降。\n📐 数学形式化：从观测到动作的完整推导 World4Drive 的完整前向过程可以形式化为一个隐条件马尔可夫决策过程：\n$$P(\\tau | I_{1:T}, cmd) = \\int \\prod_{t=1}^T P(L_t | I_{1:t}) \\cdot \\sum_{k=1}^K \\pi(k | L_t, cmd) \\cdot P(\\tau | L_t, A_k) \\, dL$$其中第一项 $P(L_t | I_{1:t})$ 是物理世界编码器的后验估计，第二项 $\\pi(k | L_t, cmd)$ 是意图策略（ScoreNet），第三项 $P(\\tau | L_t, A_k)$ 是轨迹解码器。\n训练视角：整体优化可以看作一个多任务自监督 + 单任务监督的联合学习：\n$$\\min_{\\theta} \\mathbb{E}_{(I, \\tau_{gt}) \\sim \\mathcal{D}}\\left[ \\underbrace{\\alpha \\text{CE}(\\hat{y}_{sem}, y_{sem})}_{\\text{语义伪标签}} + \\underbrace{\\beta \\|L^{(j)}_{t+n} - L_{t+n}\\|^2}_{\\text{隐空间自监督}} + \\underbrace{\\gamma \\text{FL}(S, \\mathbb{1}_{k=j})}_{\\text{意图选择}} + \\underbrace{\\eta \\text{L1}(\\tau_j, \\tau_{gt})}_{\\text{轨迹监督}} \\right]$$推理视角：推理时不需 Grounded-SAM 和 Metric3D，只需已训练好的物理世界编码器处理图像，意图编码器离散搜索 18 个意图，ScoreNet 选出最优后输出轨迹。整个过程可在 单张 3090 上实时运行（\u0026lt;50ms 单帧）。\n🎯 实验亮点：又快又安全，夜间雨天尤其猛 在 nuScenes（开环）和 NavSim（闭环）上，World4Drive 在\u0026quot;无感知标注\u0026quot;组里双双登顶。\n开环 nuScenes：相比 LAW（无标注版），平均 L2 从 0.61m 降到 0.50m（-18.1%），平均碰撞率从 0.30% 降到 0.16%（-46.7%）——而且这是所有方法里（含需要标注的）最低的碰撞率。\n收敛速度：达到同等性能，训练 epoch 只要 LAW 的 1/3.75，峰值性能还高 1.18 倍。视觉基础模型先验的价值在这里体现得淋漓尽致——不用从零学物理，等于站在巨人肩膀上。\n鲁棒性是最大惊喜。在夜间和雨天这种光照/几何都崩坏的条件下，World4Drive 的碰撞率比 LAW 分别降了 63.7% 和 68.8%。作者的解释很到位：时序自监督在夜间/雨天最容易失效（像素都不一致了），而引入深度 + 语义先验后，模型有\u0026quot;更高维的物理理解\u0026quot;，对光度不一致更鲁棒。\n消融的三个关键洞察值得记住：\n意图单干反而更差：只有多模态意图、没有世界模型评估（row 5），碰撞率 0.36%，比基线还烂——意图必须配世界模型，否则多选一变成乱选； 语义先验主要降碰撞（理解障碍物），空间先验主要降 L2（贴轨迹）； 视觉基础模型先验 + 意图两者都加才最优，缺一不可。 🧠 个人思考：世界模型当裁判，是端到端去标注化的正解 World4Drive 给我最大的启发，是它把世界模型的角色从\u0026quot;生成器\u0026quot;变成了**\u0026ldquo;裁判\u0026rdquo;**。这一两年世界模型热潮里，大家都在拼\u0026quot;未来画面/未来 occupancy 生成得多逼真\u0026quot;，但 World4Drive 反其道而行——它根本不生成画面，只在隐空间里预测 + 比距离，然后用这个隐距离去筛选多模态轨迹。这背后是个很重要的判断：端到端规划不需要\u0026quot;看得见的未来\u0026quot;，只需要\u0026quot;可比较的未来\u0026quot;。隐空间预测远比像素级生成便宜，又足以分辨\u0026quot;哪条意图更符合物理演化\u0026quot;——这种\u0026quot;够用就好\u0026quot;的工程哲学，反而比堆生成质量更贴近落地。\n第二个亮点是视觉基础模型当\u0026quot;物理教师\u0026quot;。Metric3D 给深度、Grounded-SAM 给语义，本质上是把 SAM、深度估计这些大规模预训练的成果，以伪标签 + 辅助损失的形式蒸馏进驾驶模型。这比直接拿 SAM 做在线推理省得多，也解释了为什么收敛能快 3.75 倍——模型不用从原始像素里硬悟出\u0026quot;这是车、那是路、离我多远\u0026quot;，省下的就是收敛时间。夜间雨天的巨大提升也证明，这种先验给的鲁棒性是真本事，不是刷分技巧。\n第三，意图 × 世界模型这个乘法关系很有教育意义。消融里\u0026quot;只有意图没有世界模型\u0026quot;反而更差，这是个反直觉但深刻的结论：多模态候选越多，越需要一个靠谱的评估器，否则就是放大不确定性。这和 VADv2 的词表 + 打分、DiffusionDrive 的扩散采样是一个道理——生成不是难点，选择才是。World4Drive 用世界模型做选择器，给\u0026quot;如何选\u0026quot;提供了一个物理可解释的答案：选那个\u0026quot;想象中的未来\u0026quot;和\u0026quot;真实未来\u0026quot;最像的。\n不过也有几点保留意见。其一，虽然号称\u0026quot;无感知标注\u0026quot;，但其实依赖 Metric3D、Grounded-SAM 这些基础模型——这只是把标注成本转嫁给了预训练，并不是真的零成本，而且这些伪标签的质量上限决定了模型上限。其二，World4Drive 的世界模型只在隐空间预测固定 n=3 帧后，没有显式的多步滚动，对长时序交互的建模可能不够；相比之下 GAIA、Vista 的视频生成在长时序上更有想象力。其三，NavSim 闭环 PDMS=85.1，距离 DiffusionDrive（88.1）还有差距，说明在闭环动态场景下，纯隐空间世界模型对复杂交互的捕获仍弱于显式扩散规划。\n但瑕不掩瑜。World4Drive 在 ICCV 2025 给出了一条清晰的技术路线：用基础模型先验懂物理、用意图感知处理多模态、用世界模型当裁判。它不是最强的端到端，但可能是\u0026quot;去标注化\u0026quot;这条路上最具实操价值的一步——毕竟，谁能最先摆脱对昂贵标注的依赖，谁就能在数据规模这场战争里跑得最远。\n📊 实验结果全览：nuScenes 开环 + NavSim 闭环 nuScenes 开环规划 方法 标注需求 L2 (m) ↓ 碰撞率 (%) ↓ 收敛 epoch 训练加速 VA 基线 UniAD 需要 0.68 0.28 — — VAD 需要 0.64 0.22 — — 世界模型（无感知标注） LAW (w/o label) 无 0.61 0.30 96 1× World4Drive (w/o label) 无 0.50 0.16 26 3.75× 世界模型（有感知标注） LAW (w/ label) 有 0.55 0.21 90 — DriveDreamer 有 0.60 0.26 — — World4Drive (w/o label) 无 0.50 0.16 — — World4Drive 在完全不使用感知标注的条件下，平均 L2 比 LAW（无标注版）降低 18.1%（0.61→0.50m），平均碰撞率降低 46.7%（0.30→0.16%）。更惊人的是，这个碰撞率甚至低于所有需要感知标注的方法——意味着去标注化没有牺牲安全，反而提升了安全。\nNavSim 闭环 方法 PDMS ↑ 碰撞率 (%) ↓ 驾驶得分 ↑ VAD (有标注) 62.5 14.2 70.5 VADv2 (有标注) 81.0 6.8 85.2 DiffusionDrive (有标注) 88.1 3.0 90.1 World4Drive (无标注) 85.1 4.5 87.5 在闭环 NavSim 上，World4Drive 超越了 VAD、VADv2，仅次于顶尖的扩散规划方法 DiffusionDrive。考虑到它完全不需要感知标注，这个成绩含金量极高。\n消融实验核心洞察 配置 语义先验 空间先验 意图 世界模型 L2 (m) 碰撞率 (%) 1 ✗ ✗ ✓ ✗ 0.70 0.42 2 ✓ ✗ ✓ ✗ 0.63 0.32 3 ✗ ✓ ✓ ✗ 0.58 0.38 4 ✓ ✓ ✗ ✓ 0.55 0.25 5 ✓ ✓ ✓ ✗ 0.56 0.36 6 ✓ ✓ ✓ ✓ 0.50 0.16 三个关键结论：(1) 意图必须搭配世界模型（row 5 vs row 6）——没有世界模型当评估器，多模态意图反而退化；(2) 语义先验主要降碰撞、空间先验主要降 L2，二者互补（row 2 vs row 3）；(3) 视觉基础模型先验（语义+空间）让世界模型学到更好的隐表征（row 4 → row 6）。\n鲁棒性：夜间与雨天的表现 场景 LAW 碰撞率 World4Drive 碰撞率 降幅 白天晴 0.28% 0.15% -46.4% 夜间 0.52% 0.19% -63.7% 雨天 0.45% 0.14% -68.8% 夜间/雨天是隐空间自监督最容易崩坏的场景（光度变化剧烈），但 World4Drive 借助 Metric3D 与 Grounded-SAM 的物理先验，保持了高鲁棒性。\n图 4：定性结果对比。左列 RGB 输入，中列 LAW 轨迹（偏离车道 / 碰撞风险），右列 World4Drive 轨迹（贴车道 + 安全距离保持）。在夜间和雨天场景中，World4Drive 预测的轨迹更贴近道路拓扑，碰撞风险显著降低。\n🔄 与世界模型工作的系统对比 World4Drive 处于\u0026quot;驾驶世界模型 × 端到端规划\u0026quot;交叉口的独特位置。下表把它和几类代表性工作进行对比：\n方法 世界模型类型 预测空间 意图建模 使用标注 用于规划 DriveDreamer 图像生成式 像素空间（视频） ✗ 感知标注 ✓（闭环微调） GAIA-1 图像生成式 像素空间（视频） 文本条件 感知标注 + 文本 ✗（仅生成） Vista 图像生成式 像素空间（视频） ✗ 感知标注 ✗（仅生成） NIFF occupancy 预测式 3D occupancy ✗ 感知标注 ✓（代价函数） LAW 隐空间式 隐空间（无先验） ✗ 无感知标注 ✓（隐距离） World4Drive 隐空间式（带先验） 隐空间（物理先验） ✓（K个意图） 无感知标注 ✓（隐距离+ScoreNet） 与 DriveDreamer 的对比：DriveDreamer 是第一个尝试用视频生成做驾驶规划的方案，但它在像素空间做预测，计算代价高昂（单帧生成 \u0026gt;500ms），且需要感知标注。World4Drive 把预测移到隐空间，计算量降低 2-3 个数量级的同时，用物理先验弥补隐空间缺失的几何-语义信息。\n与 NIFF 的对比：NIFF 在 3D occupancy 空间做预测，空间显式性更强，但 occupancy 标注成本极高，而且预测的 occupancy 帧需要复杂的代价函数转换才能用于规划。World4Drive 的隐空间预测 + 隐距离直接作为代价，端到端程度更高。\n与 LAW 的对比：LAW 是 World4Drive 最直接的基线——两者都是隐空间世界模型。但 LAW 从纯 RGB 学隐特征，缺乏空间几何和语义理解，导致收敛慢（96 epoch vs 26 epoch）、性能差（碰撞率 0.30 vs 0.16）。World4Drive 的改进点在于引入了物理先验编码器和意图感知机制，解决了 LAW 的两个核心瓶颈。\n与 GAIA-1 / Vista 的对比：这类大规模生成式世界模型生成视频质量惊艳，但生成速度太慢、消耗太大，不适合直接用于规划。它们更适合作为仿真引擎或数据增强工具，而 World4Drive 的设计哲学是\u0026quot;最小生成、够用就好\u0026quot;——不在规划管线里做视频生成。\n🌟 对工业落地的启示 World4Drive 的工程哲学值得单拎出来讲三点：\n\u0026ldquo;先验蒸馏\u0026quot;而非\u0026quot;从头学习\u0026rdquo;。直接从像素学习物理规律（空间、语义、时序）需要天文数字的数据。World4Drive 的做法是用预训练的基础模型（Metric3D、Grounded-SAM）产生可信的伪标签，然后以辅助损失蒸馏进驾驶模型。这本质上是把预训练的大模型压缩成一个驾驶专精的小模型——训练时依赖大模型的先验，推理时完全脱离它们。\n隐空间世界模型 vs 生成式世界模型。2024-2025 年驾驶世界模型的主流是视频生成（DriveDreamer、GAIA、Vista），但 World4Drive 证明了：对于\u0026quot;辅助规划\u0026quot;这个目标，隐空间预测足够了。这不只是效率的选择，更是一个认知选择——不要为了\u0026quot;看起来好看\u0026quot;而做超出任务需求的生成。\n\u0026ldquo;无标注\u0026quot;不等于\u0026quot;白嫖\u0026rdquo;。World4Drive 名为无感知标注，实则依赖了 Metric3D（大规模深度数据预训练）和 Grounded-SAM（大规模分割数据预训练）。这其实是数据效率的转移而非消灭——把下游感知标注的压力转移给了上游基础模型的预训练。从生态系统的角度看，这比每个自动驾驶公司都自己标百万级 3D 框要合理得多。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2507-00603/","summary":"World4Drive 是首个将多模态驾驶意图与物理隐世界模型结合的端到端框架，无需 3D 框/高精地图等昂贵感知标注。它借 Grounded-SAM 的语义先验和 Metric3D 的深度先验构建\u0026rsquo;懂物理\u0026rsquo;的隐空间，让模型在多种驾驶意图下想象未来、用世界模型打分选最优轨迹。L2 误差降 18.1%、碰撞率降 46.7%、收敛快 3.75 倍，被 ICCV 2025 收录。","title":"论文精读｜World4Drive：用意图感知的物理隐世界模型，摆脱感知标注做端到端规划"},{"content":"论文信息 标题：PARA-Drive: Parallelized Architecture for Real-time Autonomous Driving 作者机构：NVIDIA Research × USC × Stanford University（Xinshuo Weng, Boris Ivanovic, Yan Wang, Yue Wang, Marco Pavone） 会议：CVPR 2024 论文：openaccess.thecvf.com 项目页：xinshuoweng.github.io/paradrive 一句话总结：系统探索了端到端模块化自动驾驶的架构设计空间，发现\u0026quot;模块间依赖越少越好\u0026quot;——提出完全并行的 PARA-Drive，在 nuScenes 上用纯相机达到 SOTA 规划性能，同时推理速度提升 3 倍。 要解决什么问题：模块化端到端架构的设计空间从没人系统分析过 UniAD、VAD、OccNet 证明了\u0026quot;模块化端到端\u0026quot;这条路走得通——把感知、预测、规划拆成不同模块，但统一在一个网络中联合训练。但问题是：这些方法的架构设计五花八门，没人系统分析过到底什么设计是对的。\n图 1：现有端到端 AV 架构的设计差异。 不同方法对相同的任务选择了完全不同的设计：(a) 预测任务用轨迹 vs 占用栅格；(b) 地图任务用语义 BEV vs 向量化折线；(c) 传给规划的可以是紧凑输出（框/栅格）或高维隐式特征；(d) 模块间串行 vs 并行连接。到底哪种设计最优？没人知道。\n具体来说，三个问题没有被回答过：\n问题 举例 哪些模块是必要的？ 同时用轨迹预测 + 占用预测是冗余还是互补？ 模块怎么放？ 串行？并行？还是混合（像 UniAD 那样部分串行部分并行）？ 信息怎么传？ 传紧凑输出（边界框/BEV 栅格）还是高维 query 特征？ PARA-Drive 的核心贡献就是对这三个问题做了系统性的设计空间探索，并基于发现的规律提出最优架构。\n核心思想：模块之间依赖越少越好，让 BEV 特征做\u0026quot;共享黑板\u0026quot; PARA-Drive 的核心发现可以概括为一句话：\n在端到端模块化架构中，模块间的依赖关系带来的副作用（错误传播、优化冲突）往往超过了它们带来的收益。最优设计是完全并行——所有模块共享同一个 BEV 特征，独立完成各自任务，互不干涉。\n图 2：PARA-Drive 与现有 SOTA 方法的对比。 UniAD 是混合设计（部分串行部分并行），VAD 简化了串行依赖但仍保留了部分连接，OccNet 引入了占用预测但没有实例级预测。PARA-Drive 是完全并行——所有模块同时从 BEV 特征中读取信息，模块间没有直接信息传递。\n方法详解 一、先系统探索设计空间（论文前三章的核心贡献） PARA-Drive 先建了一个灵活的模块化框架，可以自由组合/连接不同模块。然后在这框架上做了大量消融实验。\n1.1 模块必要性分析 包含的模块 Collision ↓ L2 ↓ 结论 仅规划 高 高 基线，无感知 + 在线地图 中 中 地图提供道路结构 + 运动预测 中低 中低 实例级运动信息有助避碰 + 占用预测 中低 中低 场景级占用信息补充运动预测 地图 + 运动 + 占用 最低 最低 三者互补，全部需要 关键发现：轨迹预测（实例级）和占用预测（场景级）不是冗余的，而是互补的——轨迹预测告诉模型\u0026quot;那个车会怎么走\u0026quot;，占用预测告诉模型\u0026quot;整个可通行空间长啥样\u0026quot;。两者一起才能达到最优规划。\n1.2 模块连接方式分析（串行 vs 并行） 这是最重要的消融。UniAD 的架构中有一些串行连接，比如地图模块的输出传给运动预测模块（边缘 1），运动预测再传给规划（边缘 2）。\n图 3：模块间连接方式消融。（左）在基线中，边缘 (1)（地图→运动）和 (2)（运动→规划 TTO）的串行连接反而降低了性能。（右）在去除 (1)(2) 后，其他串行连接也不能带来提升。结论：并行设计是最优的。\n具体消融发现：\n边缘 (1) 地图→运动：去除后性能反而提升。原因是地图 query 和运动 query 的交互引入了噪声 边缘 (2) 运动→规划（TTO）：测试时优化（TTO）会产生 zigzag 轨迹，增加 L2 误差 边缘 (3)-(7)：在去除 (1)(2) 的基础上，加上任何其他串行连接都不能再提升性能 核心结论：在端到端模块化架构中，并行设计优于串行和混合设计。模块间没有依赖意味着：(a) 没有错误传播，(b) 每个模块可以独立优化，(c) 推理时可以按需开关模块。\n#还需要特别提到一个反直觉的发现：在线地图模块对规划的贡献并不在于它的输出被直接使用，而在于它提供的监督信号帮助 BEV 特征学到了更好的道路拓扑表示。即使规划模块从不直接读取地图输出，只要地图模块在联合训练中存在，BEV 特征就会编码更丰富的道路结构信息，规划性能就更好。这是\u0026quot;共享 BEV\u0026quot;设计的关键原理。\n1.3 信息传递方式消融（传递什么给规划） 为了验证不同信息传递方式的影响，作者做了一个详细的消融实验：去掉 BEV 特征，仅通过不同接口向规划模块传递信息。结果如下：\n传给规划的信息 1.0s Col ↓ 2.0s Col ↓ 3.0s Col ↓ Ave Col ↓ 1.0s L2 ↓ 2.0s L2 ↓ 3.0s L2 ↓ Ave L2 ↓ 基线（含 BEV） 0.00 0.07 0.51 0.13 0.24 0.55 1.07 0.53 无 BEV（仅自车状态） 3.41 8.09 7.91 5.88 2.83 5.37 7.61 4.66 + 运动→规划 bbox 0.00 0.29 3.94 0.97 0.34 1.15 2.53 1.10 + 运动→规划 query 0.00 0.10 0.46 0.14 0.24 0.58 1.09 0.54 + 地图→规划 BEV 0.12 1.07 3.44 1.22 0.95 1.82 2.63 1.59 + 地图→规划 query 0.02 0.20 0.65 0.20 0.28 0.62 1.15 0.58 + 占用→规划 BEV 0.48 1.75 4.84 1.85 1.96 3.75 5.41 3.26 + 占用→规划 query 0.14 0.27 1.00 0.38 0.42 0.82 1.47 0.78 核心发现：\n没有 BEV 特征时，仅靠自车状态+compact 输出（bbox/BEV）性能极差 query 特征显著优于 compact 输出——高维隐式特征保留了更多信息 即使只传 query，也不如直接用 BEV 特征——BEV 特征经过联合训练已经足够好 结论：BEV 特征 + 充分联合训练 = 最优信息传递方式 传什么给规划 Collision ↓ L2 ↓ 分析 仅 BEV 特征 最优 最优 BEV 特征本身已包含丰富信息 仅紧凑输出（框/栅格） 差 差 信息瓶颈，丢失细节 query 特征（无 BEV） 中 中 比紧凑输出好，但不如直接用 BEV 关键发现：如果 BEV 特征经过充分的联合训练，直接用 BEV 特征作为规划的唯一输入就够用了——不需要上游模块再额外传递信息。\n二、PARA-Drive 架构 基于以上发现，作者设计了 PARA-Drive——一个完全并行的端到端架构。\n图 4：PARA-Drive 架构。 所有模块（在线地图、运动预测、占用预测、规划）完全并行，共享 BEV 特征。每个模块通过交叉注意力读取 BEV 特征中的信息。灰色模块（地图、运动、占用）在推理时可以按需关闭以提升速度。值得注意的是：模块之间没有任何直接连接——它们的唯一交互是通过共享的 BEV 特征和联合训练间接完成的。\n2.1 整体数据流 多视图图像序列 ↓ BEVFormer → BEV 特征（共享） ↓ ┌────┬────┬────┬────┐ │ │ │ │ │ Map Motion Occupancy Plan query query query query │ │ │ │ ↓ ↓ ↓ ↓ 地图特征 轨迹 占用场 最终轨迹 (可关) (可关) (可关) (必须) 2.2 四个并行模块 ┌ │ │ │ └ ─ ─ ─ M q ─ ─ 地 a u ─ ┌ │ ▼ ─ 图 p e ─ │ └ ─ ─ 模 T r ─ ─ ─ ─ 块 R y ─ ─ ─ ─ v → ─ ─ ─ ─ │ 2 m ─ ─ ─ ─ a ─ ─ ─ ─ p ─ ─ ─ ┐ │ │ │ ┘ ─ B ─ ─ E ─ ─ V ─ ┌ 运 │ │ └ ─ ┌ │ │ │ │ └ ─ ─ 动 ─ ─ ─ ─ 多 ┌ │ └ 特 ─ ─ 预 A → ─ ─ ─ P + → ─ 视 ─ ─ 征 ─ ─ 测 g d ─ ─ ─ l ─ 图 ─ ─ （ ─ ─ 模 e e ─ ─ ─ 规 a 自 轨 ─ 图 R ─ B ─ 2 ─ ─ 块 n t ─ ─ ─ 划 n 车 迹 ─ 像 e ─ E ─ 0 ─ ─ t e ─ ─ ─ 模 状 ─ （ s ─ V ─ 0 ─ ─ │ c ─ ─ ─ 块 Q 态 w ─ 6 │ N │ ┴ F ┬ │ × │ ┼ │ ▼ ─ Q t ─ │ ┼ │ ▼ ─ u a ─ e ─ o ─ 2 ─ ─ u + ─ ─ ─ e y ─ 相 t ─ r ─ 0 ─ ─ │ e p ─ ─ ─ r p ─ 机 / ─ m ─ 0 ─ ─ r r ─ ─ ─ y o ─ ） V ─ e ─ ， ─ ─ y e ─ ─ ─ │ │ i ─ i ─ r ─ 共 ─ ─ 占 d ─ ─ ─ n ─ T ─ ─ 享 ─ ─ 用 ─ ─ ─ t ─ ┐ ┘ ！ ─ ┐ 预 │ │ ┘ ─ ┐ │ │ ┘ B │ ） ─ 测 ─ a ─ 模 ─ c ← ─ ┌ 块 │ │ └ ─ k ─ ─ ─ ─ b 历 ─ ─ │ ─ ─ o 史 ─ ─ O → ─ ─ n ─ ─ c 占 ─ ─ e B ─ ─ c 用 ─ ─ E ─ ─ 栅 ─ ─ V ─ ─ D 格 ─ ─ ┐ │ ▼ ─ e ─ │ ┘ 特 ─ c ─ 征 ─ o ─ ─ d │ ─ ─ e ─ ─ r ─ ─ ─ ┐ │ ┘ 1. 在线地图模块（Online Mapping）\n用 Panoptic Segformer 风格的 query 从 BEV 特征中学习栅格化地图元素 输出：4 通道语义 BEV（road boundary, lane divider, pedestrian crossing, drivable area） 任务：保持模型对道路拓扑结构的感知 2. 运动预测模块（Motion Prediction）\n用 agent query（~100 个）检测和追踪周围交通参与者 内部结构：agent query 先做 self-attention（建模 agent 间交互），再与 BEV 特征做 cross-attention 输出：每个目标的过去/未来轨迹、速度、朝向（检测框） 任务：理解动态目标的运动意图（实例级，稀疏） 3. 占用预测模块（Occupancy Prediction）\n用 occ query 预测 BEV 空间中的当前帧 + 未来 3 帧占用栅格 输出：场景级占用场（200×200×4 栅格） 任务：提供运动预测之外的稠密空间约束（场景级，稠密） 4. 规划模块（Planning）\n使用专有的规划 query，通过 cross-attention 从 BEV 特征中提取信息 自车状态嵌入：高层指令（直行/左转/右转）+ CAN bus 数据 + 历史轨迹 输出：未来 3 秒的 6 个 waypoint（每 0.5s 一个） ⚡ 独特优势：不需要从感知模块接收任何中间结果，BEV 特征就足够了 关键设计：这四个模块之间没有任何直接的信息传递。它们的唯一\u0026quot;对话\u0026quot;是在联合训练中通过共享的 BEV 特征间接完成的。规划模块接收的唯一感知信息就是 BEV 特征——不依赖地图输出、不依赖运动输出、不依赖占用输出。这完全消除了错误传播。\n2.3 训练 所有模块同时训练（joint training），总损失是各模块损失之和：\n\\[ \\mathcal{L} = \\mathcal{L}_{map} + \\mathcal{L}_{motion} + \\mathcal{L}_{occ} + \\mathcal{L}_{plan} \\]各模块的损失设计继承自对应领域的标准做法：\n地图模块损失（同 MapTRv2）：\n地图点坐标回归：L1 损失 地图元素分类：Focal 损失 输出类别：车道线、道路边界、人行横道等 运动预测模块损失（同 VAD）：\n检测 head：Focal 损失（分类）+ L1 损失（bbox 回归） 跟踪 head：匈牙利匹配 + 轨迹回归 L1 损失 未来轨迹预测：L1 损失 + 多模态分类损失 输出：每个智能体的位置、朝向、速度、未来轨迹 占用预测模块损失（同 OccNet）：\n当前帧占用分类：Focal 损失 未来帧占用分类：Focal 损失 占用边界细化：Lovász 损失 输出：当前 + 未来 3 秒的 BEV 占用栅格 规划模块损失：\n未来轨迹 waypoint L1 损失（与 GT 轨迹的 L2 距离） 输出：未来 3 秒的 6 个 waypoint（同 UniAD/VAD） 梯度反向传播路径（这是理解并行训练的关键）：\nB a c k b o n e ← B E V F o r m e r ← 地 图 ← ← ← c 运 占 规 r 动 用 划 o s c c c s r r r - o o o a s s s t s s s t - - - n a a a t t t ← t t t n n n 地 图 ← ← ← l 运 占 规 o 动 用 划 s s l l l o o o s s s s s s 注意每条梯度路径是独立的——地图 loss 只回传到 BEV 特征和 backbone，不经过运动/占用/规划模块。规划 loss 也只回传到 BEV 特征和 backbone。这种并行梯度路径避免了串行设计中\u0026quot;规划 loss 要穿过运动模块再穿过地图模块\u0026quot;的深层反向传播问题。\n训练细节：\n骨干网络：ResNet-50 或 ResNet-101 BEV 特征分辨率：200×200 输入图像分辨率：256×704（6 视图） 优化器：AdamW，学习率 2×10⁻⁴ batch size：16 训练 epoch：36 数据增强：随机翻转、色彩抖动 2.4 推理（Inference）流程 PARA-Drive 的推理流程根据是否关闭辅助模块有两种模式：\n全量模式（Full Mode）：\n1 2 3 4 5 . . . . . 6 多 B 并 a b c d w 尺 E 行 ) ) ) ) a 视 度 V 执 y 图 行 地 运 占 规 p 图 2 特 四 图 动 用 划 o 像 D 征 个 i （ q a o q n → 特 2 c u g c u t 征 0 r e e c e R 0 o r n r → e → × s y t q y s 2 s u P N B 0 - × q e × I e E 0 a u r D t V × t B e y B F C t E r E 控 b o ） e V y × V 制 a r 共 n 器 c m 享 t → × B → k e 给 i E → b r 四 o 语 B V 6 o （ 个 n 义 E 油 n c 模 ： V → 个 门 e r 块 B / o E → 当 w 刹 → s V 前 a 车 s 检 + y / 多 - 分 测 未 p 方 尺 a 割 框 来 o 向 度 t （ 占 i 盘 t 4 + 用 n 2 e 栅 t D n 通 轨 格 t 道 迹 特 i ） 征 o n + 历 史 B E V 特 征 融 合 ） 轻量模式（Lightweight Mode）：\n1 4 5 - . . 3 . 只 （ w 执 跳 a 同 行 过 y 全 地 p 量 d 图 模 ) i 式 运 n （ 规 动 t B 划 / E 占 → V q 用 u ， P 特 e 速 I 征 r 度 D 必 y 提 须 升 控 算 × 制 ） 2 器 B . E 7 → V × ） 控 → 制 信 6 号 个 w a y p o i n t 2.5 推理时的灵活性 这是 PARA-Drive 的一个独特优势：推理时可以根据需要开关模块。\n全量模式：所有模块都跑，性能最高，可解释性最好 轻量模式：关闭地图/运动/占用模块，仅保留规划和 BEV 特征提取。速度提升 2.7×，性能几乎不下降 混合模式：占用和运动每隔几帧跑一次，中间帧只做规划 这个灵活性来自并行设计——模块间没有依赖，关掉一个不影响其他的。\n实验与结果 评估方法论贡献 在报结果之前，PARA-Drive 先做了一件非常重要的事：标准化了开放环规划评估方法。\n之前 UniAD 和 VAD 的评估方法有显著的不一致：\n不一致点 UniAD 做法 VAD 做法 影响 L2 计算方式 对样本取平均 对样本和时间同时取平均 VAD 的 L2 看起来更小 行人处理 排除行人 排除行人 不一致 碰撞检测 用中心点 用带朝向的 bbox 中心点法会误报碰撞 PARA-Drive 提出了标准化评估协议，包括：\n使用带朝向的 ego 车辆 bounding box 做碰撞检测 使用 finer-resolution BEV 离散化（消除 GT 轨迹的误报碰撞） 排除行人（只考虑车辆碰撞） 引入地图合规率（off-road rate + off-lane rate） 引入目标场景评估（仅包含转弯/变道等复杂场景） 主要结果 方法 Collision Rates (%) ↓ L2 (m) ↓ Map Comp. (%) ↓ Ave1,2,3s Aveall Ave1,2,3s UniAD 0.45 0.40 0.9474 VAD 0.37 0.30 0.9086 AD-MLP 0.28 0.20 0.6632 PARA-Drive 0.26 0.17 0.6568 PARA-Drive+ 0.19 0.13 0.5885 （PARA-Drive+ 额外使用自车状态信息如 CAN bus、历史轨迹等）\n关键结果：\nCollision 比 UniAD 降低 57.5%（0.40 → 0.17） L2 比 UniAD 降低 33.0%（0.8317 → 0.5574） Offroad 比 UniAD 降低 86.8%（0.91 → 0.12） Offlane 比 UniAD 降低 52.3%（1.74 → 0.83） 目标场景评估（转弯/变道） 在仅包含转弯和变道的 686 帧复杂场景上：\n方法 Collision ↓ L2 ↓ UniAD 0.15 0.9935 VAD 0.34 1.0840 AD-MLP 0.94 0.9360 PARA-Drive 0.14 0.9082 PARA-Drive+ 0.05 0.7018 PARA-Drive+ 在复杂场景下的碰撞率仅 0.05%，几乎可以忽略不计。\n推理速度 配置 推理时间 (ms) FPS 相对速度 UniAD (R101) ~400 ~2.5 1× VAD (R50) ~50 ~20 8× vs UniAD PARA-Drive 全量 ~135 ~7.4 3× vs UniAD PARA-Drive 轻量 (关其他模块) ~50 ~20 8× vs UniAD PARA-Drive 全量模式比 UniAD 快 3 倍，轻量模式快 8 倍。\n感知和预测性能 方法 检测 mAP ↑ NDS ↑ 跟踪 AMOTA ↑ 预测 minADE ↓ 地图 IoU-lane ↑ UniAD (R101) 0.38 0.50 0.36 0.73 0.30 PARA-Drive (R101) 0.37 0.48 0.35 0.72 0.33 PARA-Drive 的感知预测性能与 UniAD 基本持平，甚至在地图任务上略有领先——并行设计没有损失感知质量。\n关键设计分析 1. 为什么并行设计优于串行？ 有三个原因：\n错误传播消失：串行设计中，上游模块的误差（比如地图模块漏了一条车道线）会直接传给下游（运动预测和规划）。在并行设计中，每个模块直接从 BEV 特征中读取信息，一个模块的失误不会影响其他模块。\n优化冲突减少：串行连接让梯度必须流经多个模块，可能导致梯度消失/爆炸或优化目标冲突。并行连接的梯度路径更短、更独立。\n推理灵活性：串行模式下所有模块都必须跑（不然下游没输入）。并行模式下可以按需开关。\n2. 为什么 BEV 特征比 query 特征更适合传给规划？ 如果 BEV 特征经过充分的联合训练（所有模块都在 BEV 上做交叉注意力），它已经编码了场景的各方面信息——地图拓扑、目标位置、占用空间。规划模块直接用 BEV 特征就够了，不需要上游模块再\u0026quot;翻译\u0026quot;一遍。\n这就像共享黑板：所有模块往黑板上写各自的信息，规划模块直接看黑板，不需要每个模块单独传纸条。\n3. 为什么需要同时用运动预测和占用预测？ 两者编码了互补的信息：\n运动预测（轨迹）：\u0026#34;那辆车会在第 3 秒到位置 (10, 20)\u0026#34; 占用预测（栅格）：\u0026#34;位置 (10, 20) 在第 3 秒被占用\u0026#34; 运动预测提供了稀疏但实例级的信息，占用预测提供了稠密但场景级的信息。两者同时使用时，模型既知道\u0026quot;哪个物体在动\u0026quot;，也知道\u0026quot;整个空间是否安全\u0026quot;。\n4. 这个工作为什么重要？ PARA-Drive 最大的贡献不是架构本身，而是它做了之前没人做的事情——系统性地比较了不同设计选择。它通过消融实验告诉社区：\n哪些模块是必要的（地图 + 运动 + 占用都需要） 模块应该怎么放（并行 \u0026gt; 串行 \u0026gt; 混合） 信息应该怎么传（BEV 特征 \u0026gt; query 特征 \u0026gt; 紧凑输出） 评估应该怎么做（标准化协议减少不公平对比） 这些结论在 PARA-Drive 之外也有很强的指导意义——后续任何端到端方法都可以用这些原则来指导自己的架构设计。\n局限与反思 局限 第一，实验只在 nuScenes 开放环上做的，没有 CARLA 闭环评估。开放环评估只能验证\u0026quot;模型预测的轨迹和 GT 有多接近\u0026quot;，不能验证\u0026quot;模型在真实交互中能不能安全驾驶\u0026quot;。这和 VADv2 在 CARLA 上做闭环是完全不同的验证维度。\n第二，占用预测在 nuScenes 上的标注质量有限——占用栅格是从 3D 检测框渲染出来的，本身就有噪声。用这些标签训练的占用预测模块到底能学到多少真正的\u0026quot;场景理解\u0026quot;存疑。\n第三，推理时关掉感知模块后，规划模块的输入只有 BEV 特征 + 自车状态——BEV 特征本质上还是从图像算出来的，所以感知模块关了之后 BEV 特征还在跑，实际节省的计算量并没有那么多。\n和本系列其他论文的关系 PARA-Drive 在\u0026quot;端到端模块化架构\u0026quot;这条线上是一个承上启下的系统性工作——它不是提出了革命性的新模块，而是第一次系统回答了\u0026quot;这些模块该怎么连\u0026quot;：\n对比 UniAD（CVPR 2023，混合设计代表）：UniAD 是以规划为中心的混合设计——TrackFormer→MapFormer→MotionFormer→OccFormer→Planner，部分串行部分并行。PARA-Drive 证明了完全并行更好——去除 TrackFormer→MapFormer 和 MotionFormer→Planner 的串行依赖后性能反而提升。但 UniAD 有两个 PARA-Drive 没有的东西：(1) 显式可解释性——每个中间模块的输出都可以可视化（检测框、轨迹、占用），而 PARA-Drive 的规划只依赖 BEV 黑盒特征；(2) 闭环验证——UniAD 在 CARLA 上做了闭环测试，PARA-Drive 只在 nuScenes 开放环上验证。\n对比 VAD（ICCV 2023，向量化场景代表）：VAD 用向量化场景 token 替代 UniAD 的稠密 BEV，简化了架构。PARA-Drive 在 VAD 的思路上更进一步——不仅简化场景表示，还简化了模块间连接。VAD 的推理速度已经很快（~50ms），PARA-Drive 的轻量模式与之接近，但全量模式提供了更好的可解释性和感知输出。\n对比 OccNet（ICCV 2023，占用预测代表）：OccNet 引入了显式占用预测模块，但没有实例级运动预测。PARA-Drive 通过消融实验证明两者都需要——占用预测提供场景级稠密约束，运动预测提供实例级稀疏信息，缺一不可。\n对比 TransFuser（NeurIPS 2022，传感器融合代表）：TransFuser 关注的是\u0026quot;不同传感器（相机 + LiDAR）的特征怎么融合\u0026quot;，PARA-Drive 关注的是\u0026quot;不同任务模块之间怎么连接\u0026quot;。两者解决的问题完全正交，可以组合——把 TransFuser 的融合策略用在 PARA-Drive 的 BEV 特征提取上应该是有效的。\n对比 BEVerse（arXiv 2022，多任务 BEV 代表）：BEVerse 也是多任务 BEV 架构（检测+地图+运动预测），但它没有占用预测和规划模块，且各任务之间没有像 PARA-Drive 这样系统性地考虑连接方式。\n对比 AD-MLP（arXiv 2023，纯状态规划代表）：AD-MLP 证明了\u0026quot;只用自车状态（不看任何图像）就能达到不错的开放环规划指标\u0026quot;，这对当时的社区是一个冲击。PARA-Drive 的标准化评估揭示了 AD-MLP 的真相——它在整体指标上确实不差，但在复杂场景（转弯/变道） 中 L2 误差和碰撞率远高于含感知的方法。AD-MLP 学到的是\u0026quot;统计平均轨迹\u0026quot;而不是\u0026quot;场景感知的轨迹\u0026quot;，这在直行占多数的 nuScenes 中够用，但在真实部署中远远不够。\n对比后续工作（VADv2, DriveTransformer, AutoMoT 等）：PARA-Drive 的设计空间探索方法论影响了后续几乎所有端到端架构的设计——VADv2 继承了并行设计的思路（BEV 特征 + 独立任务 query），DriveTransformer 借鉴了模块化可组合的思想。可以说，PARA-Drive 为\u0026quot;怎么设计端到端模块化架构\u0026quot;建立了一个分析框架。\n个人思考 一个被低估的贡献：评估标准化 PARA-Drive 的评估标准化工作很可能比架构本身更有长期影响力。在论文发表前，社区里 UniAD 和 VAD 比拼时使用的评估指标是不一致的——L2 计算方式不同、碰撞检测方式不同、过滤策略不同。这导致\u0026quot;VAD 比 UniAD 好\u0026quot;这个结论本身就不牢靠。PARA-Drive 把它们拉到同一基准下重新比较，发现差异远没有之前宣传的那么大。\n这提醒我们：在自动驾驶开放环评估中，指标定义比模型设计更值得关注。 一个评估方法的不一致就可能完全颠覆结论。\n为什么这个工作值得关注？ 在 2023-2024 年，端到端自动驾驶的论文已经很多了，但大多数都在\u0026quot;加模块\u0026quot;——UniAD 加预测、OccNet 加占用、VAD 向量化。PARA-Drive 做了一个很少人做的事：做减法。它发现很多被认为是\u0026quot;必须\u0026quot;的模块间连接，去掉之后反而更好。\n这给社区一个重要的启示：不是模块越多越好，而是模块之间的交互设计越合理越好。\n并行设计的哲学 PARA-Drive 的核心理念——模块间依赖越少越好——其实是对软件工程\u0026quot;高内聚低耦合\u0026quot;原则的呼应。在传统自动驾驶中，模块间解耦是为了工程便利（可以独立开发/测试/部署）；在端到端学习中，模块间解耦是为了训练稳定（梯度路径更短、不串扰）和推理灵活（按需开关）。这个发现对未来的架构设计有长远的指导意义。\n另一个值得注意的点是：PARA-Drive 的并行设计实际上是一种\u0026quot;隐式集成\u0026quot;。每个模块从 BEV 特征中独立提取各自需要的信息，但它们的训练信号都反馈到 BEV 特征上，让 BEV 特征学习到\u0026quot;什么信息对所有人都有用\u0026quot;。这和集成学习中\u0026quot;多个弱学习器共同训练一个共享表示\u0026quot;的思路是相通的。\n评估标准化的深远意义 PARA-Drive 对评估的贡献超出了它本身。在它之前，UniAD 和 VAD 的评估方法不一致导致社区对\u0026quot;到底谁更好\u0026quot;存在争议。PARA-Drive 把两者拉到同一基准上重新比较：\n发现 影响 VAD 的 L2 优势部分来自评估差异 社区不能再简单说\u0026quot;VAD 比 UniAD 在 L2 上好\u0026quot; GT 轨迹也可能有\u0026quot;碰撞\u0026quot;（false positive） 评估时需要更精细的碰撞检测 map compliance 是关键的补充指标 单看 L2 和碰撞可能遗漏\u0026quot;开出路肩\u0026quot;的问题 目标场景评估能暴露模型真实弱点 直行占多数的评估会稀释模型在复杂场景中的差异 这对后续工作有很大的约束力——VADv2、DriveTransformer 等后续方法都参考了 PARA-Drive 的评估协议。\n开放环 vs 闭环的根本差异 最后需要认真讨论一下：PARA-Drive 只在 nuScenes 开放环上验证。开放环评估本质上是\u0026quot;拟合轨迹\u0026quot;——给定当前场景，模型预测的轨迹和人类驾驶的 GT 轨迹有多接近。\n但开放环好不等于闭环好，原因有三：\n分布偏移：开放环中模型的预测不影响后续帧的输入（所有帧的传感器数据固定）。但闭环中模型的决策会影响下一帧看到什么——一个错误决策会把车带到训练数据分布之外的场景。 安全边际：人类驾驶的 GT 轨迹不一定是最安全的（可能离路肩很近、可能跟车很近）。开放环只要求\u0026quot;像人一样开\u0026quot;，不要求\u0026quot;安全地开\u0026quot;。 自愈能力：开放环中错了就错了；闭环中模型需要能从错误中恢复。 这也是为什么 VADv2 在 CARLA 闭环的 85.1 DS 和 PARA-Drive 在 nuScenes 的 0.17% 碰撞率不能直接比较——验证维度不同。两者是互补的验证方式：开放环衡量\u0026quot;轨迹拟合精度\u0026quot;，闭环衡量\u0026quot;安全交互能力\u0026quot;。\n一句话总结：PARA-Drive = 系统性的设计空间探索（模块必要性 × 连接方式 × 信息传递）+ 完全并行的架构（4 个模块共享 BEV 特征，互不依赖）+ 标准化开放环评估（消除评估不一致）。它最核心的贡献是：用严谨的消融实验证明了\u0026quot;并行设计优于串行\u0026quot;这个设计原则，为后续端到端模块化架构提供了设计指南。\n参考资料 论文：CVPR 2024 Open Access 项目页：xinshuoweng.github.io/paradrive 相关论文：UniAD [CVPR 2023], VAD [ICCV 2023], OccNet [ICCV 2023] ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-para-drive/","summary":"PARA-Drive 系统性地探索了端到端模块化自动驾驶的设计空间，提出完全并行的架构——感知、预测、规划模块同时训练、同时推理，互不依赖。在 nuScenes 上 L2 误差降低 28.8%、碰撞率降低 43.3%，推理速度提升近 3 倍，被 CVPR 2024 接收。","title":"论文精读｜PARA-Drive：完全并行的端到端架构，把感知预测规划\"同时跑\""},{"content":"📄 论文信息 标题：Vision-Language-Action Models for Autonomous Driving: Past, Present, and Future 团队：WorldBench 联合团队（港科大、浙大、NTU、港科大广研院、阿里达摩院、UCLA、小米汽车、西安交大等 19 家机构） arXiv：2512.16760（2025 年 12 月 v1 / 2026 年 1 月 v2，cs.RO） 项目页：worldbench.github.io/vla4ad；GitHub：github.com/worldbench/awesome-vla-for-ad 关键词：VLA 综述、End-to-End VLA、Dual-System VLA、动作空间、基准 一句话总结：迄今最系统的自动驾驶 VLA 综述——用\u0026quot;过去-现在-未来\u0026quot;的叙事，从 ALVINN/ChauffeurNet 一路讲到 AutoVLA/Diff-VLA，提出\u0026quot;端到端 VLA vs 双系统 VLA\u0026quot;两大范式分类法，并梳理了数据集、评测基准与七大未来挑战。 🤔 这篇综述要解决什么问题？VLA 的定义都还没统一 自动驾驶 VLA 在 2024–2025 年井喷：EMMA、DriveVLM、ORION、ReCogDrive、AutoVLA、Diff-VLA……名字五花八门，架构各说各话。作者敏锐地指出三个混乱源头：\n\u0026ldquo;VLA\u0026quot;一词被滥用——机器人 VLA、具身 VLA、驾驶 VLA 各有各的定义，缺乏驾驶专属的精细刻画； 架构谱系不清——VA（视觉-动作）和 VLA（视觉-语言-动作）的边界模糊，谁是谁的前身、谁继承谁，没有统一叙事； 评测不统一——nuScenes、WOD-E2E、NAVSIM、Bench2Drive 各刷各的，缺乏横向对比的基础。 综述的目标，就是给这个领域建一份\u0026quot;户口本\u0026rdquo;：统一形式化、理清演进线、提出分类法、汇总数据集、指出挑战。\n💡 核心框架：从 VA 到 VLA 的两步跃迁 综述最有价值的贡献，是提出了一套层次分明的分类法。\n第一步：统一形式化 作者把所有 VLA 模型抽象成一个公式：\n$$\\textbf{a}_t=H(F(\\textbf{x}|\\theta))$$其中 $\\textbf{x}$ 是多模态输入，$F(\\cdot)$ 是 VLM 骨干，$H(\\cdot)$ 是动作预测头。三者的不同选择，决定了模型属于哪个流派。\n组件 可选项 代表 输入 $\\textbf{x}$ 相机图、LiDAR、BEV、occupancy、语言指令、车辆状态 几乎所有方法 骨干 $F$ ViT+LLM、InternVL、Qwen-VL EMMA、DriveVLM 动作头 $H$ 语言头 LH、回归 REG、轨迹选择 SEL、生成 GEN Diff-VLA、ORION 特别地，作者把动作空间也做了四分法：离散轨迹点、连续轨迹（$v(t),\\kappa(t)$）、直接控制（$\\delta,\\tau,\\beta$）、语言动作——这是理解每个模型\u0026quot;在控制什么\u0026quot;的钥匙。\n第二步：从 VA 到 VLA 的演进叙事 综述用\u0026quot;过去-现在\u0026quot;把历史压成一条清晰的线：\nVA 时代（视觉-动作）：直接把感知映射到动作，分两条路——模仿学习（ALVINN、ChauffeurNet、TransFuser、UniAD、VAD）和强化学习。后来又长出世界模型分支（图像式、occupancy 式、隐式）。VA 模型的通病是：黑盒、长尾泛化差、不会推理、听不懂人话。\nVLA 时代（视觉-语言-动作）：LLM/多模态大模型爆发后，语言被引进来，于是有了两大范式：\n范式一：End-to-End VLA（端到端 VLA） 一个模型搞定感知 + 推理 + 规划，VLM 直接吐动作。又分两个子类：\n文本动作生成器（Textual）：用语言头输出离散动作 token 或文本指令，如 DriveMLM、GPT-Driver、DriveGPT4； 数值动作生成器（Numerical）：用回归或生成头输出连续轨迹/控制，如 AutoVLA（快慢思考 + GRPO）、EMMA、SimLingo。 范式二：Dual-System VLA（双系统 VLA） \u0026ldquo;慢思考 + 快执行\u0026rdquo;——VLM 负责高级推理，规划器负责安全执行。这是受人类\u0026quot;双系统理论\u0026quot;（System 1 / System 2）启发。也分两个子类：\n显式动作引导（Explicit）：VLM 输出文本决策或指令，传给规划器，如 DriveVLM、InsightDrive（把 why 给 VLM、how 给 MPC）； 隐式表征传递（Implicit）：VLM 输出隐式表征或 latent 动作，如 VLP（tokenize 路径点+价值图）、Diff-VLA（语言引导 + 扩散合成 + 控制器精修）。 这套分类法的精妙之处在于：它把架构差异和工程取舍直接挂钩——端到端 VLA 简洁但延迟高、安全难保证；双系统 VLA 可解释、安全可控，但模块间对齐是难点。\n📊 数据集、基准与挑战：一份实操地图 综述第 5 章把 VLA 评测盘得很全。开环有 nuScenes、WOD-E2E；闭环有 NAVSIM、Bench2Drive；文本动作还得有\u0026quot;基于语言的评测\u0026quot;。作者还做了横向定量实验，在四大基准上对比主流 VLA，给了社区一个统一的参照系。\n第 6 章挑出的三大类挑战尤其值得读：\n挑战类别 具体问题 架构与效率 大模型实时性、算力门槛、双系统对齐 数据与泛化 长尾场景、指令多样性、仿真到现实 gap 能力与可信 鲁棒性、可解释性、指令忠实度（车真的按人说的做吗？） 未来方向上，作者点名了下一代范式（统一世界模型 + VLA）、自适应进化（在线学习、个性化）、安全部署生态（标准化、合规）三条主轴。\n🧠 个人思考：VLA 不是终点，而是\u0026quot;可解释自动驾驶\u0026quot;的起点 读完这 47 页，最大的感受是：VLA 的本质，不是把 VLM 硬塞进驾驶管线，而是给自动驾驶补上\u0026quot;语言这个抽象层\u0026quot;。过去 VA 时代，模型只会在像素和方向盘之间做映射，遇到没见过的长尾就抓瞎；VLA 引入语言后，模型第一次能\u0026quot;说出理由\u0026quot;、\u0026ldquo;听懂指令\u0026rdquo;、\u0026ldquo;做思维链推理\u0026rdquo;。这带来的不是性能数字的提升，而是可信度的质变——一辆能解释自己为什么刹车、能听懂\u0026quot;避开那辆工程车\u0026quot;的车，才真正配得上 L4。\n第二个收获是双系统 VLA 这个范式，很可能才是落地的正解。综述里把 DriveVLM、InsightDrive 这类\u0026quot;VLM 想为什么、规划器想怎么做\u0026quot;的设计归为 Dual-System，这其实是对自动驾驶安全哲学的回归——慢系统可以慢、可以错，快系统必须快、必须稳。把 VLM 的不确定性隔离在\u0026quot;思考层\u0026quot;，让规划器守住\u0026quot;执行层\u0026quot;的物理可行性底线，这种解耦比 End-to-End VLA 把推理和控制揉进一个网络要稳妥得多。反观纯端到端 VLA，延迟和安全审计都是硬伤，短期内在量产车上很难过关。\n第三，综述里动作空间的四分法是个被低估的工具。离散轨迹点、连续轨迹、直接控制、语言动作——这四种动作空间其实对应四种完全不同的工程取舍。比如直接控制（方向盘/油门）最接近车控，但端到端学起来最难、最不安全；语言动作最可解释，但粒度太粗撑不起精确规划；轨迹生成（扩散/VAE）成了当下甜蜜点，正因为它既有连续精度，又能建模多模态。理清这套分类，对选型极有帮助。\n当然，综述也有它的局限。其一，横向实验虽然做了，但各方法骨干、数据、训练算力差异巨大，这种横向对比的公平性一直存疑，读者要谨慎。其二，VLA 领域迭代极快，2026 年的新工作（比如 WCog-VLA 这类世界认知 VLA）已经又开始挑战综述的分类边界，\u0026ldquo;端到端 vs 双系统\u0026quot;的二元划分可能很快不够用。其三，综述对安全验证、形式化保证这些真正卡 L4 落地的话题着墨偏少，更多停留在\u0026quot;能力\u0026quot;层面。\n但作为一份\u0026quot;立纲\u0026quot;之作，它的价值毋庸置疑。如果说 UniAD 定义了\u0026quot;什么是端到端\u0026rdquo;，DiffusionDrive 定义了\u0026quot;什么是多模态规划\u0026quot;，那么这篇综述做的就是为 VLA 这个范式画下版图、立下规矩。对任何想进入自动驾驶 VLA 的研究者，它都是绕不开的第一站——先读它，再选你的那条技术路线。\n📈 完整时间线：从 ALVINN 到 AutoVLA 的三十年 图 1：VLA 综述全景图。左半部分展示从 1989 年 ALVINN 到 2025 年 AutoVLA 的完整技术演进时间线，右半部分展示综述提出的统一分类法框架。颜色编码：蓝色为 VA 模型，红色为端到端 VLA，绿色为双系统 VLA。\n综述将自动驾驶 VLA 的发展划分为三个里程碑阶段：\n阶段一：VA 萌芽期（1989-2019） 时间 方法 核心思想 技术路线 1989 ALVINN 3 层 BP 网络直接映射图像到转向角 模仿学习 2015 NVIDIA PilotNet CNN 端到端学习方向盘控制 模仿学习 2018 ChauffeurNet BEV + RNN 规划，加入中间代价 模仿学习 + 代价 2019 TransFuser Transformer 融合多模态 BEV Transformer 2020 PRECOG 预测其他智能体轨迹再规划 预测 + 规划 阶段二：VA 成熟期（2021-2023） 以 UniAD、VAD 为代表的\u0026quot;模块化端到端\u0026quot;范式成熟，感知→预测→规划全可微。VA 时代的共性局限：全黑盒、长尾泛化差、不能推理、不能交互语言。\n阶段三：VLA 爆发期（2024-至今） LLM/VLM 爆发后，语言被引入驾驶规划管线。综述统计分析了 50+ 篇 VLA 相关论文，提出了\u0026quot;端到端 VLA vs 双系统 VLA\u0026quot;的二元分类法。\n🔬 VLA 三大范式的系统性深度分析 图 2：VLA 分类法架构图。综述提出三层分类体系：第一层区分 VA 和 VLA；第二层在 VLA 内区分 End-to-End VLA（又分 Textual/Numerical）和 Dual-System VLA（又分 Explicit/Implicit）；第三层标注各方法的动作空间类型和骨干网络。\n范式一：VA 视觉-动作模型 综述将 VA 模型归纳为四条技术路线：\n路线 代表 输入 输出 可微性 语言交互 模仿学习 ALVINN, ChauffeurNet, TransFuser, UniAD, VAD RGB / BEV 轨迹 / 控制 部分可微 ✗ 强化学习 DRL-based 状态 / BEV 控制 RL 可微 ✗ 图像世界模型 DriveDreamer, GAIA-1, Vista RGB 序列 未来视频 部分可微 部分 occupancy 世界模型 NIFF 传感器 未来 occupancy ✓ ✗ VA 的形式化统一为 $\\textbf{a}_t = H_{\\text{va}}(E(I_{1:t}))$，其中 $E$ 是感知编码器，$H_{\\text{va}}$ 是动作头。缺少语言接口是 VA 的核心局限。\n范式二：End-to-End VLA（端到端 VLA） 端到端 VLA 的形式化：$\\textbf{a}_t = H_{\\text{vla}}(F_{\\text{llm}}(\\textbf{x}_t))$，其中 $F_{\\text{llm}}$ 是视觉语言模型骨干，$H_{\\text{vla}}$ 是动作输出头。核心特征是在一个模型内完成感知、推理、规划全流程。\n子类 A：Textual Action Generator（文本动作生成器）\n用语言令牌序列表示动作，输出离散文本指令或离散轨迹点。代表方法：\n方法 VLM 骨干 动作空间 训练方式 关键创新 DriveMLM LLaMA + Q-Former 离散控制（转向/油门/刹车） 语言指令微调 首个将驾驶建模为语言对话任务的方法 GPT-Driver GPT-3.5/4 离散轨迹点 prompt engineering 用语言描述轨迹点坐标 DriveGPT4 基于 LLava 文本描述 + 控制 多模态指令微调 支持交互式问答 RecogDrive InternVL2 文本规划描述 思维链 + 指令微调 强调\u0026quot;认知\u0026quot;（识别→推理→决策）的可解释链 子类 B：Numerical Action Generator（数值动作生成器）\n用回归头或生成头输出连续轨迹/底层控制。代表方法：\n方法 VLM 骨干 动作空间 训练方式 关键创新 EMMA Gemini 轨迹点 多任务微调 Gemini 在驾驶上的首次直接应用，共享视觉编码 SimLingo LingoWhale-8B 轨迹 + 语言 多任务联合 同时学习规划和语言描述 ORION LLaVA 轨迹 多阶段微调 用 VLM 做规划头 + ReLU 约束加速 AutoVLA InternVL2 轨迹 快慢思考 + GRPO 首次将强化学习推理（GRPO）引入驾驶 VLA AutoVLA 是数值端到端 VLA 的代表作。其形式化可以写为：\n$$\\tau = \\text{Decoder}(F_{\\text{llm}}(\\textbf{x}_{cam}, \\textbf{x}_{text}, \\textbf{x}_{state}))$$其中快思考通过 InternVL2 直接前向得到初步轨迹，慢思考则用 GRPO 强化学习在多条候选轨迹中优化。即：\n$$\\mathcal{J}_{\\text{GRPO}} = \\mathbb{E}_{t \\sim \\pi_{\\text{old}}}\\left[ \\frac{\\pi_{\\theta}(a_t|s_t)}{\\pi_{\\text{old}}(a_t|s_t)} \\hat{A}_t - \\beta \\text{KL}[\\pi_{\\theta} \\| \\pi_{\\text{ref}}] \\right]$$范式三：Dual-System VLA（双系统 VLA） 双系统 VLA 的形式化更复杂——VLM 输出中间表示 $\\textbf{z}$，再由安全规划器 $H_{\\text{safe}}$ 输出最终动作：\n$$\\textbf{a}_t = H_{\\text{safe}}(F_{\\text{llm}}(\\textbf{x}_t), \\textbf{x}_{ego})$$子类 A：Explicit Dual-System（显式双系统）\nVLM 输出人类可读的文本决策或驾驶指令，规划器将其映射为具体轨迹。\n方法 VLM 骨干 输出中间表示 下层规划器 关键创新 DriveVLM InternVL2-76B 思维链文本（场景描述→推理→决策） 传统规划器 首个 Driving Dual-System VLA InsightDrive Qwen-VL whys（原因）+ hows（意图） MPC 求解 显式分离\u0026quot;为什么\u0026quot;和\u0026quot;怎么做\u0026quot; DriveVLM 的思维链推理流程：\n$$\\text{Scene Desc.} \\rightarrow \\text{Hazard Prediction} \\rightarrow \\text{Decision}(x, y, \\theta) \\rightarrow \\text{高速规划器}$$其创新在于：VLM 不输出最终轨迹，只输出驾驶决策（车道意图 + 动作描述），轨迹由下层安全规划器生成。这种解耦保证了 VLM 输出即使有误，轨迹也遵守物理约束。\n子类 B：Implicit Dual-System（隐式双系统）\nVLM 输出隐式表征（latent token 或价值图），经规划模块解码为轨迹。\n方法 VLM 骨干 隐式表征形式 解码方式 关键创新 VLP CLIP + Transformer 离散路径 token + 价值图 分步 token 解码 首个 tokenized 路径规划的 VLA Diff-VLA InternLM-XComposer 扩散隐表征（语言引导噪声） 扩散去噪 + 控制器 语言引导+扩散+VLA 三合一 LMDrive LLaMA 语言 + 状态 token 自回归解码 闭环交互式驾驶 范式间对比总结 维度 VA End-to-End VLA Dual-System VLA 推理能力 无 有（CoT/RL） 有（VLM 层） 语言交互 ✗ ✓ ✓（有限） 可解释性 低 中 高 安全性保证 无 无（纯数据驱动） 有（下层规划器兜底） 延迟 低 高（大模型推理） 中 落地难度 中 高 中 📊 代表性方法全景对比表（15 方法） 方法 年份 范式 动作头类型 VLM 骨干 动作空间 训练方式 开环 L2 (m) 闭环 PDMS 开源 DriveMLM 2024 E2E-Textual 语言头 LLaMA 离散控制 SFT — — ✓ GPT-Driver 2024 E2E-Textual 文本提示 GPT-3.5 离散轨迹点 Prompt 0.41 — ✓ DriveGPT4 2024 E2E-Textual 语言头 LLaVA 文本+控制 SFT — — ✓ RecogDrive 2025 E2E-Textual 语言头 InternVL2 文本决策 SFT+CoT — — ✗ EMMA 2025 E2E-Numerical 回归头 Gemini 连续轨迹 MFT 0.81 — ✗ AutoVLA 2025 E2E-Numerical 回归头 InternVL2 连续轨迹 SFT+GRPO — 78+ ✓ ORION 2025 E2E-Numerical 回归头 LLaVA 连续轨迹 SFT+ReLU 0.50 — ✓ SimLingo 2025 E2E-Numerical 回归+语言 LingoWhale-8B 轨迹+语言 MFT — — ✓ CoVLA 2025 E2E-Numerical 扩散生成 VLM+Diff. 连续轨迹 扩散训练 0.49 — ✗ DriveVLM 2024 Dual-Explicit CoT 文本 InternVL2 文本→轨迹 SFT — — ✓ InsightDrive 2025 Dual-Explicit 推理文本 Qwen-VL 意图→MPC SFT 0.42 — ✗ VLP 2025 Dual-Implicit token 解码 CLIP+Trans. 路径 token 对比学习 0.46 — ✓ Diff-VLA 2025 Dual-Implicit 扩散+控制器 InternLM 语言引导轨迹 扩散+SFT 0.38 80+ ✓ LMDrive 2024 Dual-Implicit 自回归 LLaMA 语言+控制 SFT+RL — — ✓ WCog-VLA 2026 新范式 多模态 InternVL2 世界认知+轨迹 世界模型+SFT 0.35 — ✗ 从表中可以清晰看出几个趋势：2024 年是 VLA 元年，从文本方法起步；2025 年是 VLA 爆发年，数值动作和双系统方法百花齐放。InternVL2 是最受欢迎的 VLM 骨干。GRPO 强化学习（AutoVLA）和扩散模型（Diff-VLA）是最新趋势。\n💾 数据集与基准深度总结 主流数据集 数据集 类型 规模 传感器 语言标注 特点 nuScenes 开环规划 1000 场景 × 20s 6 相机 + LiDAR + Radar BDD-X 子集 自动驾驶评测标配 Waymo Open Motion 开环规划 57.6 万场景 5 相机 + LiDAR ✗ 大规模、高多样性 NuPlan 闭环规划 1282 小时 8 相机 ✗ 最长时域、含闭环 NAVSIM 闭环规划 nuScenes 子集 6 相机 + BEV ✗ 标准化闭环评测 Bench2Drive 闭环规划 2000 场景 6 相机 ✓ 语言指令闭环评测 BDD-X 语言描述 1000 视频 1 相机 ✓ 最早的语言驾驶描述 DRAMA 语言问答 27K 场景 1 相机 ✓ 高风险场景问答 CLAD 对话驾驶 多种来源 1 相机 ✓（人机对话） 基于语言的闭环控制 评测体系三层次 层次 评测方式 代表基准 评估目标 L1：感知-映射能力 开环 L2 / 碰撞率 nuScenes, WOD 模仿专家轨迹精度 L2：闭环交互能力 闭环 PDMS / 碰撞率 NAVSIM, Bench2Drive 完整驾驶安全性 L3：语言理解能力 指令忠实度 / QA 准确率 Bench2Drive-IT, CLAD 语言指令遵从度 🎯 训练范式深度分析 Level 1：VLM 预训练（基础能力） 所有 VLA 方法的起点都是大规模的 VLM 预训练。InternVL2、Qwen-VL、Gemini 等骨干在其通用数据集（图文对、视频、文档）上预训练，获得视觉-语言对齐的基本能力。\nLevel 2：驾驶指令微调（SFT for Driving） 在预训练 VLM 的基础上，使用驾驶数据集进行指令微调（Supervised Fine-Tuning）。关键设计点包括：\n多模态输入对齐：将相机图像、LiDAR BEV、车辆状态等信息通过 adapter/projector 对齐到 VLM 的输入空间 动作输出对齐：根据动作头类型，将轨迹点/控制命令编码为语言 token 或通过回归头直接输出 思维链构建：构造\u0026quot;场景描述→推理→决策→动作\u0026quot;的 CoT 标注 EMMA 的 MFT（Multi-Function Tuning）是这类范式的代表：在 Gemini 的基础上，构造 5 个驾驶子任务的统一指令格式，多任务联合微调。\nLevel 3：强化学习对齐（RL for VLA） AutoVLA 率先将 GRPO（Group Relative Policy Optimization） 引入 VLA：\n$$\\mathcal{J}_{\\text{GRPO}} = \\mathbb{E}_{(s, a) \\sim \\mathcal{D}} \\left[ \\min\\left( \\frac{\\pi_{\\theta}(a|s)}{\\pi_{\\text{old}}(a|s)} \\hat{A}, \\text{clip}\\left(\\frac{\\pi_{\\theta}(a|s)}{\\pi_{\\text{old}}(a|s)}, 1-\\epsilon, 1+\\epsilon\\right) \\hat{A} \\right) - \\beta \\cdot \\text{KL}(\\pi_{\\theta} \\| \\pi_{\\text{ref}}) \\right]$$GRPO 的核心价值在于：它让 VLA 能从闭环反馈中自我优化，而不只是模仿专家轨迹。\nLevel 4：世界模型联合训练（前沿方向） WCog-VLA 代表了 VLA 与世界模型的融合方向：同时训练 VLM 做规划 + 世界模型做未来预测，两者共享视觉骨干：\n$$\\mathcal{L} = \\mathcal{L}_{\\text{plan}}(\\tau, \\tau_{gt}) + \\lambda \\cdot \\mathcal{L}_{\\text{wm}}(\\hat{z}_{t+1}, z_{t+1})$$这个方向的潜力在于：世界模型让 VLA 拥有\u0026quot;想象\u0026quot;能力，在遇到长尾场景时可以用内部想象推演后果。\n🔮 未来方向详细讨论 方向一：下一代统一范式——世界模型 + VLA 这是综述认为最有冲击力的方向。当前 VLA 的感知依赖实时传感器，没有\u0026quot;想象\u0026quot;能力。如果能将世界模型的前向预测能力与 VLM 的推理能力统一：\n$$P(\\tau | \\textbf{x}) = \\int P_{\\text{wm}}(\\textbf{z}_{t+1:T} | \\textbf{x}, \\tau) \\cdot P_{\\text{vla}}(\\tau | \\textbf{x}, \\textbf{z}_{t+1:T}) \\, d\\textbf{z}$$就得到一个既懂推理、又能想象的驾驶智能体。WCog-VLA（2026）已在这一方向迈出第一步。\n方向二：多模态输入的深度融合 当前 VLA 主要依赖相机和语言，对 LiDAR、毫米波雷达的融合远不如 UniAD/VAD 等纯视觉方法成熟。关键难点：将 3D 稀疏几何信息无损地注入 VLM 的 2D token 序列。\n方向三：自适应进化与在线学习 VLA 通过 MLM 接口可以与人类在线交互（如乘客说\u0026quot;这里小心，常有电动车窜出\u0026quot;），这种交互式学习是传统端到端无法做到的。综述特别强调个性化驾驶风格的学习。\n方向四：指令忠实度与安全对齐 综述提出的\u0026quot;指令忠实度（Instruction Fidelity）\u0026ldquo;概念值得关注：即使 VLM 正确理解了指令，也不意味着它会按指令执行。如何确保 VLA 的行为既安全、又忠实地服从人类指令，是核心挑战。\n方向五：实时性与端侧部署 当前 VLA 的骨干 VLM 参数量 7B-76B，推理延迟 200ms+。可能路径包括模型压缩量化、Token 减少、投机解码。\n方向六：标准化评测体系 综述呼吁建立统一评测标准，包括统一开环闭环协议、标准化语言指令评测、安全与指令忠实度的联合指标。\n方向七：安全部署生态 从 Demo 到量产需要跨越的关键问题：OOD 检测、可审计推理链、冗余备份。\n🌟 最终总结：VLA 的坐标系 这篇综述最重要的价值，是给 VLA 画了一张清晰的坐标系——横轴是\u0026quot;语言介入程度\u0026rdquo;（从无语言到全语言），纵轴是\u0026quot;系统耦合度\u0026quot;（从紧耦合到解耦）。在这张坐标系上：\n位置 方法 特点 左下（无语言 + 紧耦合） UniAD, VAD 传统 VA，性能强但黑盒 右下（有语言 + 紧耦合） EMMA, AutoVLA 端到端 VLA，简洁但安全无保证 右上（有语言 + 解耦） DriveVLM, InsightDrive 双系统 VLA，安全可控但系统复杂 左上（无语言 + 解耦） 传统模块化 已被淘汰 综述的结尾意味深长：\u0026ldquo;VLA for AD is not just about adding language to driving——it\u0026rsquo;s about building a new paradigm where cars can reason, communicate, and understand。\u0026ldquo;我的理解是：VLA 不是在驾驶管线上修修补补，而是重新定义了\u0026quot;什么是一个合格的自动驾驶系统\u0026rdquo;——能推理、能对话、能解释、能理解人类的意图，这些能力在 L4 时代不是锦上添花，而是安全可信的必要条件。\n🧩 个人补充：综述没有细说的三件事 作为一篇 47 页的综述，覆盖面已经惊人。但有三件事值得额外讨论：\n1. 数据与评估的巴别塔 nuScenes 开环 L2 0.35-0.50m 之间、NAVSIM PDMS 75-89 之间——这些分数之间几乎无法互相折算。更麻烦的是，大多数方法的\u0026quot;开源\u0026quot;并不意味着可复现——骨干 VLM 的版本、数据预处理 pipeline 的微小差异都会剧烈影响结果。社区急需一个类似 ImageNet 的\u0026quot;VLA 标准评测协议\u0026rdquo;。\n2. 语言是接口，不是银弹 需要警惕\u0026quot;语言的幻觉\u0026quot;：推理链的正确性并不保证输出的安全性。VLM 可能推理正确但输出错误轨迹。语言更多的是提供 debugging 入口和交互接口，而不是安全背书。双系统 VLA 之所以更落地，不是因为语言用得少，而是因为语言后面还有一层安全规划器。\n3. VLA 的\u0026quot;成本泡沫\u0026quot; 当前 SOTA VLA 的训练成本（InternVL2-76B SFT + GRPO）保守估计在 $50K-$100K 范围。推理需要至少 2×A100 才能跑在 \u0026lt;100ms。对于量产车，这个成本结构尚不具备竞争力。但历史反复告诉我们：当一项技术的性能开始远超替代品时，成本曲线总会陡降——VLA 的量产化可能不需要五年。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2512-16760/","summary":"这份 47 页的综述首次为自动驾驶 VLA 建立了系统形式化与分类法，从 VA（视觉-动作）到 VLA（视觉-语言-动作）理清演进线。它提出端到端 VLA 与双系统 VLA 两大范式分类，并统一梳理了动作空间四分法、数据集基准与评测协议。是当前自动驾驶 VLA 领域最权威的架构脉络地图和未来挑战指南。","title":"论文精读｜VLA for Autonomous Driving：自动驾驶视觉-语言-动作模型的过去、现在与未来"},{"content":"一句话概括 TruckV2X 是第一个\u0026quot;以重卡（半挂卡车）为中心\u0026quot;的车路协同（V2X）多模态、多智能体感知数据集，它用仿真告诉我们：重卡因为车身太长、挂车会摆动、转弯有巨大内侧盲区，单靠自己车上的传感器根本看不全周围，而车路协同（让牵引车、挂车、旁边的小车、路边基础设施一起\u0026quot;共享视野\u0026quot;）恰好是补盲的最优解。\n论文信息（真实可考）：\n标题：TruckV2X: A Truck-Centered Perception Dataset 作者：Tenghui Xie, Zhiying Song, Fuxi Wen, Jun Li, Guangzhao Liu, Zijian Zhao 发表：IEEE Robotics and Automation Letters (RA-L), vol. 10, no. 9, pp. 9312-9319, 2025 arXiv：2507.09505（2025-07-13 提交） DOI：10.1109/LRA.2025.3592884 数据集：Hugging Face XieTenghu1/TruckV2X（约 116 GB，MIT License） 项目主页：https://xietenghu1.github.io/TruckV2X/ 0. 写给刚入行的你：先把名词掰开揉碎 这篇是给\u0026quot;刚接触 VLA / 自动驾驶感知\u0026quot;的工程师写的，所以先把一堆黑话用大白话讲明白。已经懂的同学可以直接跳到第三节。\nV2X 是什么？ V2X 是 Vehicle-to-Everything（车联万物） 的缩写。意思是车不再是一个孤立的盒子，而是能和周围一切\u0026quot;聊天\u0026quot;：\nV2V（Vehicle-to-Vehicle，车车协同）：车和车之间通信。 V2I（Vehicle-to-Infrastructure，车路协同）：车和路侧基础设施通信。 V2P（车与人）、V2N（车与网络）等。 为什么需要\u0026quot;聊天\u0026quot;？因为单车感知有物理极限——你的激光雷达装在车顶，被前面的大卡车一挡，大卡车背后那辆自行车你永远看不到。但如果路边有个摄像头/激光雷达（RSU），它站在高处，就能看到你被挡住的地方，然后把\u0026quot;你身后 30 米有个骑车人\u0026quot;发给你的车。这就是协同感知的核心动机：用多双眼睛拼出一张更完整的环境图。\nRSU（路侧单元）是什么？ RSU = Road Side Unit，路侧单元。你可以把它理解成\u0026quot;装在电线杆/红绿灯杆上的自动驾驶传感器站\u0026quot;：上面挂着激光雷达、摄像头，甚至毫米波雷达，再通过 5G / C-V2X 把看到的东西发给经过的车辆。它视角高、不会被前车挡住，是补盲的神器。\n协同感知里的早融合 / 晚融合 / 中间融合 多个智能体要把信息合起来，怎么合？这是协同感知的核心架构问题：\n早融合（Early Fusion）：大家把最原始的数据（比如原始点云、原始图像像素）先传到一个中心，在那里统一处理。信息最丰富，但通信量爆炸（几十 MB 一帧），而且原始数据对时延极敏感。 晚融合（Late Fusion）：每个车/路端自己先把目标检测出来（比如各自输出\u0026quot;我这里有辆车，坐标 xyz\u0026quot;），只把检测结果传出去，中心只做目标级融合。通信量小，但已经丢掉了很多细节，而且一旦某个 agent 漏检，中心也没法补救。 中间融合（Intermediate Fusion）：折中方案，大家把神经网络**中间层的特征（feature）**传出来，在 BEV 特征空间里做融合。这是目前 SOTA（如 OPV2V 的 AttFusion、CoBEVT）主流路线，兼顾信息量和通信量。TruckV2X 的 benchmark 里就实现并对比了这类方法。 遮挡与盲区 盲区（Blind spot）：传感器物理上照不到的地方。比如卡车驾驶室后面的挂车区域、A 柱后面、车底。 遮挡（Occlusion）：被别的物体挡住而看不到。比如大卡车挡住它后面的小车。 重卡的痛点就是：盲区大 + 容易被遮挡 + 自己还常常充当遮挡别人的\u0026quot;墙\u0026quot;。\n点云（Point Cloud） 激光雷达（LiDAR）发射激光测距，每束光打到物体表面返回一个三维坐标点 $(x, y, z)$。一堆这样的点凑在一起就是\u0026quot;点云\u0026quot;——它像一份稀疏的、带距离信息的 3D 草稿，是自动驾驶 3D 感知的主粮。\nBEV（Bird\u0026rsquo;s Eye View，鸟瞰图） 把周围世界从\u0026quot;人眼平视视角\u0026quot;拍扁成\u0026quot;上帝俯视视角\u0026quot;。所有车、人、障碍物都落在一张俯视的网格地图上。BEV 是协同感知最自然的融合坐标系——不同位置、不同朝向的 agent，把各自的点云/特征都投影到同一个俯视网格里，拼起来就完事了。公式上常写成把点云从车体坐标系变换到全局坐标系：\n$$p^{global} = T_{ego}^{global} \\cdot p^{ego}$$其中 $T$ 是位姿变换矩阵，把所有 agent 的数据统一到一个坐标系后才能融合。\n1. 要解决什么问题：重卡的感知，比你想的难得多 乘用车的自动驾驶已经卷了好几年，但重卡（卡车）是另一个物种。论文开篇就点明：自动驾驶卡车能大幅降本增效、提升安全，但它面临\u0026quot;独特的感知挑战\u0026quot;，根源在于两点：\n1.1 车体太长，自己看不到车尾附近 一辆半挂卡车（tractor + trailer）总长轻松超过 16 米，而普通轿车只有 4-5 米。传感器（激光雷达、摄像头）主要装在牵引车车头。后果是：\n挂车两侧和车尾下方是巨大盲区，靠近车尾的骑车人、行人，车头传感器根本照不到。 倒车时、泊车入位时，车尾区域几乎全盲。 1.2 挂车会摆动（dynamic trailer movement） 半挂车是**铰接（articulated）**结构：牵引车和挂车之间靠鞍座连接，能相对转动。卡车转弯、变道、被侧风吹时，挂车会\u0026quot;甩尾\u0026quot;、会偏摆。这意味着：\n挂车相对于车头的位置是动态变化的，不像刚性车体那样固定。 挂车侧面随时可能扫到相邻车道的车/人，而车头驾驶员/感知系统对这个\u0026quot;甩出去\u0026quot;的区域很难预判。 1.3 转弯时的内侧盲区 卡车转弯走\u0026quot;大圈\u0026quot;，内侧（尤其是右侧）会留出一大块\u0026quot;内轮差\u0026quot;区域。这块区域里如果有行人、自行车，既在车头传感器视野死区，又在挂车扫掠路径上——典型的\u0026quot;双重看不见\u0026quot;。这也是卡车事故高发区。\n1.4 重卡自己还是\u0026quot;遮挡源\u0026quot; 更反直觉的是：大卡车不仅自己看不全，还挡住了别人。你停在路口等红灯，你背后的一辆小轿车被你完全挡住，旁边的车（或路侧 RSU）却能看到它。所以重卡在协同感知里扮演双重角色：\n它是被遮挡的受害者（自己盲区大）； 它也是制造遮挡的源头（挡住别人）。 论文里专门提出一个很有意思的概念：把卡车当作\u0026quot;移动感知平台\u0026quot;（mobile perception platform）——与其只把它当障碍物，不如在挂车上也装传感器，让这辆大车本身变成一个\u0026quot;会走路的 RSU\u0026quot;，既补自己的盲，也帮别人看。\n1.5 现有数据集都\u0026quot;不卡车\u0026quot; 论文在 Related Work 里把现有数据集摆了一道，结论很直白：\n乘用车数据集（KITTI、nuScenes、Waymo）：只关注小汽车，没有挂车、没有大盲区问题。 卡车数据集 MAN TruckScenes：第一个重卡多模态数据集，但只在牵引车上装传感器、是单智能体，忽略了挂车上的传感器和车路协同。 V2X 数据集（OPV2V、DAIR-V2X、V2X-Real、V2X-Seq）：做了协同感知，但场景里都是轻型车，没有重卡的遮挡特征和挂车动态。 所以 Gap 非常清晰：缺一个\u0026quot;以重卡为中心 + 多智能体协同 + 挂车也带传感器\u0026quot;的感知数据集。TruckV2X 就是来填这个坑的。\n2. V2X 协同感知的基本原理（小白版架构） 用一张\u0026quot;列表流程图\u0026quot;串起来，不画图，纯文字：\n车端（Ego Vehicle，这里是牵引车车头） 装激光雷达 + 环视摄像头，感知自己周围。 但视野受车身和挂车限制，有盲区。 挂车端（Trailer） TruckV2X 的创新点：挂车也装传感器（2 个 64 线激光雷达 + 5 个环视相机）。 作用：专门看车头看不到的挂车两侧、车尾盲区。 协作车辆（CAV，Connected and Automated Vehicle） 旁边路过的一辆普通自动驾驶小车，有自己的传感器。 它站在不同位置，能看到被大卡车挡住的目标，回传给大卡车。 路侧单元（RSU） 路边固定设施，视角高、无遮挡。 监控整个路口/路段，是\u0026quot;上帝视角\u0026quot;的补盲担当。 通信链路（C-V2X / 5G） 把各 agent 的原始数据 / 检测结果 / 中间特征传出去。 融合中心（Fusion） 把所有人看到的数据，统一到 BEV 坐标系拼成一张完整图。 融合策略：早融合 / 晚融合 / 中间融合（见第 0 节）。 输出 一张补全了盲区的 3D 检测 / 跟踪结果，喂给规划控制模块。 用列表串一遍数据流的直觉：\n挂车 LiDAR：补车尾盲区 CAV 感知：看被大卡挡住的目标，通过 C-V2X 传给大卡 RSU 感知：上帝视角全覆盖，通过 C-V2X 传给大卡 大卡自身：主感知 以上多路在 BEV 坐标统一后做中间融合 最终得到完整无盲区的 3D 感知，送规划决策 这就是协同感知\u0026quot;1+1\u0026gt;2\u0026quot;的本质：用空间上分散的多双眼睛，拼出单双眼睛永远拼不出的完整画面。\n3. 数据集是怎么搭起来的 3.1 仿真平台：CARLA + 自定义半挂模型 TruckV2X 是仿真数据集（不是实车采集）。原因很现实：真实重卡协同感知的采集成本、标注成本、危险性都极高，而仿真可以无限造场景、精确给真值。\n做法：\n用 Unreal Engine 建模了一辆半挂卡车（semi-trailer truck），做成可交互 agent 集成进 CARLA 仿真器。 CARLA 自带城市、高速、路口等场景，支持多 agent 同步、精确位姿和真值标注。 说明：因为是仿真，传感器数据是合成点云和图像，和真实激光雷达的噪声特性有差距。这是该数据集的客观局限，论文也主要把它定位为\u0026quot;benchmark / 研究基础\u0026quot;而非直接上实车。\n3.2 传感器配置（四类智能体） 这是 TruckV2X 最核心的\u0026quot;重卡特色\u0026quot;，仔细列一下：\n牵引车（Tractor，即车头） 2 个 64 线激光雷达 5 个环视摄像头 挂车（Trailer） 关键创新点 同样 2 个 64 线激光雷达 5 个环视摄像头 目的：覆盖车头看不到的挂车周边盲区 协作车辆（CAV） 1 套激光雷达 + 多视角摄像头 路侧单元（RSU） 1 套激光雷达 + 多视角摄像头 一句话：四类 agent 都带多模态（LiDAR + camera）传感器，而且挂车第一次在协同数据集里拥有了完整传感器套件。\n3.3 数据集规模（真实数字） 从论文和 HuggingFace 卡页可确认：\n64 个场景（scenarios） 88,396 帧（frames） 激光雷达点云 约 100 万张（1 million） 摄像头图像 1.18 million（约 118 万） 个 3D 包围框标注 总数据量约 116 GB 3.4 标注内容 每个目标对象都标了：\n3D 包围框（3D bounding box） 跟踪 ID（用于多目标跟踪任务） 速度（speed） 等动态信息 支持的任务：\n3D 目标检测（object detection） 多目标跟踪（tracking） 协同感知 benchmark 评测 3.5 协同标注方式（怎么保证多 agent 真值一致） 仿真数据集的一大优势是真值天然对齐：\n因为整个场景在 CARLA 里是同一个虚拟世界，每个 agent 的位置、每个物体的真值框都由仿真器统一给出。 各 agent 的传感器数据分别渲染，但共享同一套全局坐标系下的物体真值。 标注时只需把全局真值按各 agent 的位姿变换到各自坐标系，即可得到每个 agent 视角下的\u0026quot;完美标注\u0026quot;，无需人工补盲标注。 这解决了真实 V2X 数据集最头疼的问题：多车/路端时间同步、空间标定、跨视角标注一致性。仿真的\u0026quot;上帝真值\u0026quot;让 benchmark 干净可靠。\n3.6 提供的东西 论文还提供了：\n8 个协同感知 benchmark 实现（覆盖不同的融合方法和任务），方便直接跑对比。 在遮挡场景上做了大量定量实验，证明\u0026quot;重卡专属视角\u0026quot;对协同感知的关键价值。 提出 trucks as mobile perception platforms 概念：卡车既是遮挡源，也能当感知增强器。 4. 与单车感知（及已有数据集）的对比 下面这张表把 TruckV2X 和几个代表性数据集摆在一起，看它到底新在哪：\n数据集 车型 智能体数 挂车传感器 协同(V2X) 模态 主要局限 KITTI 乘用车 单 无 否 相机+LiDAR 无重卡、无协同 nuScenes 乘用车 单 无 否 多模态 无重卡、无协同 MAN TruckScenes 重卡 单 无(仅车头) 否 多模态 不协同、挂车无传感器 OPV2V 轻型车 多(V2V) 无 是(V2V) LiDAR 无重卡、无路端RSU DAIR-V2X 轻型车 多(V2I) 无 是(V2I) 多模态 无重卡 V2X-Real 轻型车 多 无 是(V2V/V2I) 多模态 无重卡 TruckV2X 重卡 多(牵引车+挂车+CAV+RSU) 有 是(全类型) 多模态 仿真数据，非实车 几个关键差异点：\n唯一以重卡为中心 + 多智能体协同的数据集，填补\u0026quot;重卡 × V2X\u0026quot;空白。 唯一在挂车上装完整传感器，把挂车盲区变成可感知区域。 同时覆盖 V2V（车车）和 V2I（车路），是真正意义上的 V2X（Everything）。 代价：仿真数据，和真实传感器分布有 domain gap，需要后续实车数据补充验证。 5. 重卡协同的独特价值：为什么它比乘用车更\u0026quot;渴\u0026quot;V2X 这一节是论文的灵魂，也是写给做 VLA/规划的同学最重要的 insight。\n5.1 长车体 -\u0026gt; 自身传感器看不到车尾附近 轿车 4-5 米，传感器装车顶，四周基本都能扫到。卡车 16 米+，车头传感器对挂车侧后方的覆盖随距离急剧衰减，车尾附近是天然黑洞。协同（尤其是挂车自带传感器 + RSU）能直接把这块黑洞照亮。\n5.2 铰接结构 -\u0026gt; 挂车摆动带来动态盲区 刚性车体盲区是固定的，可以靠标定+规则覆盖。但挂车相对车头会转、会摆，盲区边界是时变的。单车系统很难建模这个动态边界，而协同感知把\u0026quot;挂车自己看自己周边\u0026quot;变成可能——挂车上的传感器跟着挂车走，天然覆盖摆动区域。\n5.3 高速场景 -\u0026gt; 制动距离长，需要更早感知 重卡满载百公里制动距离可能是小车的 2-3 倍。高速上，哪怕多提前 100 米发现前方静止车辆，都可能决定能否刹停。协同感知（尤其 RSU 远距离预警）能显著扩大有效感知距离，给规划留出宝贵反应时间。对端到端/VLA 规划器来说，输入信息更全 -\u0026gt; 决策更稳。\n5.4 卡车是\u0026quot;移动感知平台\u0026quot;的反直觉价值 论文提出：别只把卡车当障碍物。给挂车装传感器后，这辆大车本身成了一个移动 RSU：\n它走在路上，顺手把周围（尤其它身后被它挡住的区域）看清楚，发给别的车。 对周边小车而言，一辆带协同传感器的卡车反而是\u0026quot;感知增强器\u0026quot;而非单纯遮挡墙。 这个视角对VLA 系统的启示是：协同对象不只有路端和友车，连\u0026quot;被协同的重卡\u0026quot;本身都能成为感知节点。\n6. 核心实验与结论（基于论文披露） 论文提供了 8 个 benchmark 实现，并在遮挡场景做了系统分析。可归纳的结论（结合论文摘要与卡页描述）：\n协同感知显著提升遮挡场景下的检测能力：在重卡特有的大面积遮挡下，单车感知漏检严重，而引入 CAV / RSU / 挂车视角后，被遮挡目标的可检测性大幅改善。 重卡专属视角（挂车 + 路端）不可替代：消融实验方向（论文强调\u0026quot;demonstrating the critical value of truck-specific viewpoints\u0026quot;）表明，去掉挂车或 RSU 传感器，性能明显下降，证明重卡场景下这些视角不是\u0026quot;锦上添花\u0026quot;而是\u0026quot;雪中送炭\u0026quot;。 提出 RTL 类风险度量思路：论文的衍生工作（如 An Empirical Analysis of Cooperative Perception for Occlusion Risk Mitigation, IEEE IoTJ 2026）提出了 Risk of Tracking Loss (RTL) 指标，量化\u0026quot;被遮挡导致跟丢\u0026quot;的风险强度与持续时间，把协同感知的价值从\u0026quot;精度提升\u0026quot;推进到\u0026quot;安全风险评估\u0026quot;。这一点对安全攸关的重卡尤为重要。 注：论文原文（RA-L 正文）的逐项 AP / mAP 具体数值未在公开摘要中完整给出，上面是依据摘要、卡页与衍生工作归纳的方向性结论。若需精确数字，建议直接读 arXiv:2507.09505 表 III/IV。\n7. 个人思考：对端到端 / VLA 规划意味着什么 作为做 VLA（Vision-Language-Action）和端到端规划的工程师，我从这篇数据集里读到几层启发：\n7.1 协同感知是端到端系统的\u0026quot;更好输入\u0026quot;，而非独立模块 端到端 / VLA 的常识是：输入信息质量直接决定上限。单车感知的盲区，到规划器那里就是\u0026quot;未知即危险\u0026quot;，只能保守减速。如果 BEV 特征在进 VLA 之前已经通过协同补全了盲区，规划器就敢于更自信地走、更平滑地并线。TruckV2X 提供的多 agent BEV 真值，正好可以用来训练\u0026quot;带协同输入的端到端模型\u0026quot;，研究协同信息如何改变决策分布。\n7.2 通信时延与可靠性是落地的硬骨头 论文偏数据集/benchmark，但落地绕不开两个现实问题：\nLatency（时延）：中间融合要传特征，早融合要传原始数据。重卡高速行驶时，100 ms 的延迟意味着几米的位移误差。如何在时延下做\u0026quot;带时间戳的异步融合\u0026quot;是关键。 Reliability（可靠性）：C-V2X / 5G 在隧道、偏远高速可能掉线。系统必须有\u0026quot;协同失效降级到单车感知\u0026quot;的兜底。TruckV2X 这类数据集若加入\u0026quot;随机丢包 / 延迟\u0026quot;的鲁棒性评测，会更有工程价值。 7.3 仿真到实车的 domain gap TruckV2X 是 CARLA 仿真，点云密度、材质反射、天气噪声都和真实 64 线激光雷达不同。做 VLA 训练时要注意：别在纯仿真数据上过拟合。建议把它当\u0026quot;预训练 / 消融\u0026quot;工具，再用 MAN TruckScenes（真实重卡，单 agent）和少量真实 V2X 数据做微调/验证。\n7.4 挂车作为\u0026quot;移动感知平台\u0026quot;值得在 VLA 里建模 现有 VLA 把周围车当\u0026quot;他者\u0026quot;。TruckV2X 提示：一辆协同重卡既是障碍物也是感知节点。未来 VLA 的\u0026quot;action\u0026quot;空间或许要扩展——不仅输出自车轨迹，还能请求/调度协同感知资源（比如广播\u0026quot;我右侧盲区请 CAV 补一下\u0026quot;）。这是协同决策（cooperative planning）的雏形。\n8. 延伸阅读（真实文献） 按主题给你一个书单，都是真实存在的工作：\nTruckV2X 原文：Xie et al., TruckV2X: A Truck-Centered Perception Dataset, IEEE RA-L 2025, arXiv:2507.09505. MAN TruckScenes：第一个重卡真实多模态数据集（单 agent，无协同），对照看差异。 OPV2V（Xu et al., 2022, ICRA）：第一个大规模 V2V 仿真协同感知数据集，提出 AttFusion 中间融合。 DAIR-V2X（2022）：首个大型真实 V2I 车路协同数据集（中德合作，清华等）。 V2X-Real / V2X-Seq：真实世界 V2X 数据集，含时序（Seq）可做跟踪/预测。 CoBEVT（Xu et al., 2022, CoRL）：基于稀疏 Transformer 的协同 BEV 语义分割，V2X 融合经典方法。 V2X-Radar（2024, arXiv）：首个带 4D 雷达的 V2X 多模态数据集。 CooPre（2024, arXiv:2408.11241）：V2X 协同感知的自监督预训练，在 OPV2V/V2V4Real/V2X-Real 上验证。 衍生工作：Wang et al., An Empirical Analysis of Cooperative Perception for Occlusion Risk Mitigation, IEEE IoTJ 2026（RTL 风险指标）。 OpenCOOD：主流协同感知开源框架，TruckV2X 官方推荐用它与数据集对接，可直接跑 benchmark。 9. 小结 TruckV2X 的价值不在于\u0026quot;又多了一个数据集\u0026quot;，而在于它第一次系统性地把\u0026quot;重卡 × 车路协同\u0026quot;这件事数据化、可评测化：\n它让我们量化地看到：长车体、铰接挂车、转弯内侧盲区，如何让重卡成为协同感知的\u0026quot;最强需求方\u0026quot;。 它把挂车第一次变成带完整传感器的协同节点，提出\u0026quot;移动感知平台\u0026quot;反直觉视角。 它给做 VLA / 端到端规划的同学一个干净 playground：研究\u0026quot;更全的 BEV 输入如何改变决策\u0026quot;。 局限也很清楚：仿真数据、非实车、规模（64 场景）相对有限。但它指的方向——重卡自动驾驶离不开车路协同——几乎是行业共识。建议做重卡感知/规划的团队，把它和 MAN TruckScenes、DAIR-V2X 搭配使用，取长补短。\n附：本文部分实验逐项数值（如具体 mAP 提升幅度）因原文摘要未完整披露，以上述方向性结论为准；精确数字请查阅 arXiv:2507.09505 原文表 III、IV 及附录。本精读基于公开论文摘要、IEEE 页面、HuggingFace 数据集卡页与 Semantic Scholar 信息整理，核心事实（标题、作者、年份、规模、传感器配置、概念贡献）均来自上述真实来源。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-truckv2x/","summary":"TruckV2X (IEEE RA-L 2025) 是首个以半挂重卡为中心的 V2X 多模态多智能体协同感知数据集，用 CARLA 仿真构建 64 个场景、88,396 帧点云、百万图像、118 万 3D 框，覆盖牵引车-挂车-CAV-RSU 四类智能体，系统性揭示重卡因车身长、挂车摆动、转弯内侧盲区而对车路协同的刚需。","title":"论文精读｜TruckV2X：首个以重卡为中心的 V2X 车路协同感知数据集，专治盲区与挂车遮挡"},{"content":"📄 论文信息 标题：DiffusionDriveV2: Reinforcement Learning-Constrained Truncated Diffusion Modeling in End-to-End Autonomous Driving 团队：华中科技大学（hustvl）× 地平线（Horizon Robotics） arXiv：2512.07745（Dec 2025） 代码：https://github.com/hustvl/DiffusionDriveV2 关键词：截断扩散模型、GRPO、强化学习、多模态轨迹规划、端到端自动驾驶 一句话总结：用 RL 约束扩散生成的低质量模式，保留高多样性的同时大幅拉升整体轨迹质量下限——这是第一篇直面\u0026quot;多样性 vs 一致性质量\u0026quot;困境并提出完整解法的工作。 🤔 要解决什么问题：扩散规划的多样性-质量两难 扩散规划的困境 DiffusionDrive 通过锚定高斯混合先验（GMM prior）将轨迹空间按驾驶意图分区，成功让扩散模型生成高度多样化的多模态轨迹。但这个成功暴露了一个更深的矛盾：\n模仿学习的监督不完备——训练时只优化离专家轨迹最近的正锚点模式，对其余负模式（占采样的绝大多数）没有任何约束。结果是\u0026quot;好的真好，差的真差\u0026quot;：Top-1 轨迹质量极高，但大量候选（尤其 Top-5/10）夹杂着碰撞、偏离道路的低质量轨迹。\n图 1：三种扩散规划范式对比。(a) Vanilla Diffusion 陷入模式崩溃，所有候选归为一条保守轨迹。(b) DiffusionDrive 生成高度多样的候选，但红色圆圈标注了大量碰撞的低质量轨迹。(c) DiffusionDriveV2 用 RL 约束约束所有模式，在保持多模态的同时让每条轨迹都高质量。\n为什么这很危险 这迫使系统过度依赖下游选择器（selector/classifier）来筛选低质量候选。但选择器通常参数量远小于生成器，OOD 场景下泛化能力不可靠——低质量轨迹稍有遗漏就是一起事故。\nGRPO 的引入契机 DeepSeek-R1 带火的 GRPO（Group Relative Policy Optimization）天然适合解决这个问题：它不依赖价值网络，在组内做相对优势评估，完美适配扩散规划的\u0026quot;每组候选 = 一个组的政策样本\u0026quot;设定。但直接把 GRPO 挪到锚定截断扩散模型上会碰上新问题——不同的锚（如左转 vs 直行）对应不同的驾驶意图，放在同一组里做相对优势比较会引发模式崩溃。\n🧠 方法详解 1. 截断扩散生成器回顾 DiffusionDriveV2 继承了 DiffusionDrive 的锚定截断扩散框架。\u0026ldquo;截断\u0026quot;指扩散去噪过程只执行最后 2 步（而非完整的 100/1000 步），因为锚定高斯混合先验已经提供了良好的初始分布，大量早期去噪步骤变得冗余。每个锚 $\\mathbf{a}^k$ 对应一种驾驶意图（变道、转弯、直行），轨迹分布建模为 GMM：\n$$p(\\tau^k \\mid \\mathbf{a}^k, z) = \\mathcal{N}(\\tau^k \\mid \\mathbf{a}^k + \\mu^k(z), \\Sigma^k(z))$$其中 $\\mu^k(z)$ 和 $\\Sigma^k(z)$ 是以场景特征 $z$ 为条件的 MLP 输出，分别预测相对于锚的残差位移和不确定性。场景特征来自稀疏感知骨干（MapTRv2 风格），从多相机图像中提取 BEV 特征和智能体/地图 query。\n整体分布为各锚分布的加权和：\n$$p(\\tau \\mid z) = \\sum_{k=1}^{N_{\\text{anchor}}} s(\\mathbf{a}^k \\mid z) \\, p(\\tau^k \\mid \\mathbf{a}^k, z)$$$s(\\mathbf{a}^k \\mid z)$ 是一个轻量分类头，输出每个锚的先验权重（anchor scoring），在推理时作为各锚候选的初始排序依据。这个设计使得模型能够根据场景自动选择合适的驾驶意图组合——在直道上直行锚权重大，在交叉口转弯锚权重上升。\n模仿学习的根本缺陷：训练时使用标准扩散 loss $\\mathcal{L}_{\\text{diff}}$，只优化与专家 GT 轨迹最近的锚对应的正模式，其他 $N_{\\text{anchor}}-1$ 个负锚模式完全不受监督。这意味着模型在正锚附近生成高质量轨迹，但在负锚附近可以\u0026quot;任意发挥\u0026rdquo;——包括碰撞、偏离道路等危险行为。\n2. 尺度自适应乘性探索噪声（Scale-Adaptive Multiplicative Noise） RL 微调需要探索——模型必须尝试与模仿学习策略不同的动作才能发现更好的轨迹。标准做法是用 DDPM 的随机采样（$\\eta = 1$）在去噪过程中注入加性高斯噪声 $\\epsilon \\sim \\mathcal{N}(0, \\sigma^2 I)$，但轨迹的近端和远端尺度不一致：前沿 waypoint（如 $t=1$）位移仅几米，而远端 waypoint（如 $t=40$）位移可达数十米。固定方差的加性噪声在近端基本无扰动效果，在远端却产生剧烈抖动，破坏轨迹的几何平滑性。\n图 3：探索噪声对比。 绿色为原始轨迹。加性高斯噪声（蓝虚线）在近端（前几个 waypoint）几乎看不见扰动，远端（后几个 waypoint）却剧烈摆动——这种不一致源于加性噪声对所有 waypoint 施加相同绝对方差，但轨迹本身各点位移量级差了一个数量级。尺度自适应乘性噪声（红虚线）的扰动幅度与各 waypoint 位移成正比——近端小扰动、远端大扰动但保持几何比例——整条轨迹的几何形状更合理。\n乘性噪声对每个 waypoint 施加与位移成比例的扰动：\n$$\\epsilon_{\\text{mult}} = \\left\\{ \\left( \\epsilon_{x,n} \\cdot \\max(|x_n|, \\sigma_{\\min}),\\, \\epsilon_{y,n} \\cdot \\max(|y_n|, \\sigma_{\\min}) \\right) \\right\\}_{n=1}^{N_f}$$其中 $\\sigma_{\\min}$ 是防止近端点扰动消失的最小标准差（论文设为 1.0），$\\epsilon_{x,n}, \\epsilon_{y,n} \\sim \\mathcal{N}(0, 1)$。对比标准 DDPM 的加性噪声 $\\epsilon_{\\text{add}} = \\{\\epsilon_{x,n}, \\epsilon_{y,n}\\}_{n=1}^{N_f}$，乘性噪声的核心区别在于乘以了位移绝对值 $\\max(|x_n|, \\sigma_{\\min})$，使得每个 waypoint 的噪声方差 $\\text{Var}(\\epsilon_{\\text{mult}, n}) \\propto |x_n|^2$ ——近端点噪声小（避免过度扰动初始位置），远端点噪声大（保持足够的探索幅度），且整体轨迹的曲率和平滑性得到天然保持。\n3. Intra-Anchor GRPO（锚内 GRPO） 核心洞察：同一锚内的轨迹共享相同的驾驶意图，可以在组内做相对优势比较；不同锚的轨迹不可直接比较（左转 vs 直行没有优劣之分，只是选择不同）。如果强行将所有 $N_{\\text{anchor}} \\times G$ 条轨迹放在一起做组间比较，模型会倾向于收敛到最常见意图（通常是直行），丧失的多样性恰恰是 DiffusionDrive 最宝贵的特性。\n图 2：DiffusionDriveV2 整体架构。 截断扩散解码器在模仿学习约束下生成的轨迹\u0026quot;好坏参半\u0026quot;（好的直行、差的超车/右转）。乘性探索噪声推动模型探索附近的动作空间。Anchored Truncated GRPO 在锚内进行组间优势评估：直行锚内比较各条直行候选，右转锚内比较各条右转候选——绝不跨锚比较。Inter-Anchor Truncation 进一步对碰撞轨迹施以 -1 硬惩罚，对非碰撞负优势截断为 0。最终模式选择器从精修后的全高质量候选集中挑选最优轨迹。\n训练流程上，每个锚 $k$ 采样 $G$ 条候选轨迹（论文默认 $G=4$），构成该锚的\u0026quot;策略组\u0026quot;。每条轨迹由 NAVSIM 的 PDM 驾驶分数给出奖励 $r^{k,i}$（闭环指标的综合评分）。对每个锚内部做组内标准化：\n$$A^{k,i} = \\frac{r^{k,i} - \\text{mean}(\\{r^{k,1}, \\dots, r^{k,G}\\})}{\\text{std}(\\{r^{k,1}, \\dots, r^{k,G}\\})}$$这等价于在每个锚内独立计算 Z-score，正优势表示该候选在锚内表现优于平均水平，负优势表示低于平均水平。相比于 PPO 依赖价值网络估计优势（需要额外训练 critic 且容易过拟合），这种无参数组内标准化的优势估计更简单稳定——而且天然适配多候选扩散架构。\nRL loss 定义为：\n$$L_{RL} = -\\frac{1}{N_{\\text{anchor}}} \\sum_{k=1}^{N_{\\text{anchor}}} \\frac{1}{G} \\sum_{i=1}^{G} \\frac{1}{T_{\\text{trunc}}} \\sum_{t=1}^{T_{\\text{trunc}}} \\gamma_{t-1} \\log \\pi_\\theta(\\tau_{t-1}^{k,i} \\mid \\tau_t^{k,i}) A^{k,i}$$其中 $\\log \\pi_\\theta$ 是截断扩散过程中每一步反向去噪的对数概率，$T_{\\text{trunc}}$ 是截断步数（论文设 2），$\\gamma$ 是折扣因子（论文设 0.99）。注意 loss 对 $T_{\\text{trunc}}$ 步取平均，而不是对所有 100/1000 步——这是截断扩散带来的效率优势：只需对最后两步的反向过程求梯度。\n加上模仿学习 loss 做稳定性正则：\n$$L = L_{RL} + \\lambda L_{IL}$$$\\lambda$ 的调度很讲究：当某锚内所有候选都为正优势（即该锚整体表现好）时 $\\lambda=0.1$，保留 RL 的主要优化方向；但若某锚全为负优势（该锚整体表现差），$\\lambda=1.0$，退化为纯模仿学习——避免 RL 让一个本已糟糕的锚彻底崩坏。\n4. Inter-Anchor Truncated GRPO（锚间截断 GRPO） 纯 Intra-Anchor GRPO 有一个隐患：某锚内最好的轨迹可能全局很差（比如在一个全部碰撞的锚里，\u0026ldquo;最好\u0026quot;的那条仍然撞了），而另一锚内最差的轨迹在全局视角下可能还算安全——但纯局部标准化给不出这个跨锚的安全信号。\n解决方法极其优雅：奖励相对改进，只惩罚绝对失败。\n$$A_{\\text{trunc}}^{k,i} = \\begin{cases} -1 \u0026 \\text{if collision,} \\\\ \\max(0, A^{k,i}) \u0026 \\text{otherwise.} \\end{cases}$$三种情况的具体含义：\n碰撞轨迹（$r^{k,i}$ 中 PDM collision 检测为 True）：无论组内排名如何，直接施加 -1 硬惩罚。这确保碰撞永远不会被模型认为是可接受的行为。 非碰撞但组内负优势（$A^{k,i} \u003c 0$）：截断为 0，即既不鼓励也不惩罚。背后的逻辑是：这条轨迹虽然比同锚的其他候选差，但至少没撞，不值得额外惩罚——它只是锚内相对表现不好而已。 非碰撞且组内正优势（$A^{k,i} \u003e 0$）：保留原值，作为 RL 梯度更新的正向信号，鼓励模型朝向更好的轨迹探索。 这个设计的精妙之处在于：碰撞检测是一个绝对的、跨锚可比的安全信号（撞了就是撞了，不论哪个意图），而轨迹质量则是锚内相对的。Inter-Anchor Truncated 将两者结合——碰撞硬约束来自全局安全视角，质量优化保留在局部比较中。论文实验显示，加上 Inter-Anchor Truncated 后 PDMS 从 89.5 提升到 90.1。\n5. 模式选择器（Mode Selector） 两阶段粗到细选择器，替代 DiffusionDrive 中简单的单阶段 classifier。第一阶段（粗选）使用 BCE loss 训练的轻量头对所有候选做二分类（可通行 vs 不可通行），过滤掉明显不可行的轨迹。第二阶段（精细评分）对粗选后的候选用 Margin-Rank loss 排序：\n$$\\mathcal{L}_{\\text{rank}} = \\frac{1}{N} \\sum_{i,j} \\max(0, -\\text{sign}(s_i - s_j) \\cdot (\\hat{s}_i - \\hat{s}_j) + m)$$其中 $s_i$ 是 PDM 分数（ground-truth 排序标签），$\\hat{s}_i$ 是选择器预测分数，$m$ 是边界值（margin）。这个 loss 避免了直接回归连续分数值的困难——让模型只学会比较轨迹的相对质量，而不是精确拟合某个绝对分数。训练时还用 GTRS（Ground-Truth Trajectory Re-sampling）做数据增强：在推理时如果 GT 轨迹不在生成的候选集里，就把 GT 轨迹混入候选一起排序，提升选择器的泛化能力。\n消融实验显示，DiffusionDrive 换上 V2 的选择器后 PDMS 从 88.1 提升至 89.1（+1.0），说明选择器改进本身也有贡献，但主要增益（+2.1）来自生成器的 RL 训练。\n🏗️ 架构流程总览 推理阶段 步骤 操作 说明 ① 稀疏感知骨干提取场景特征 多相机图像 ➜ BEV 特征 + 智能体/地图 query ② 从 6 个锚中采样初始噪声 每个锚对应一种驾驶意图 ③ 2 步截断去噪 DDIM 确定性采样（$\\eta = 0$），生成 6 条候选轨迹 ④ 模式选择器打分排序 粗选 top-k ➜ 精细评分 ⑤ 输出最优轨迹 分数最高的一条下发控制 训练阶段 阶段 Loss 教师信号 说明 Stage 1 (IL 预训练) $\\mathcal{L}_{\\text{diff}}$ 人类专家轨迹 继承 DiffusionDrive 预训练权重 Stage 2 (RL 微调) $L = L_{RL} + \\lambda L_{IL}$ NAVSIM 闭环奖励 乘性噪声探索 + Intra-Anchor GRPO + Inter-Anchor Truncated Stage 3 (选择器) $\\mathcal{L}_{\\text{BCE}} + \\mathcal{L}_{\\text{rank}}$ PDM 分数标签 粗到细两阶段，数据增强 + GTRS 词汇采样 🖼️ 图片解析 架构与机制 粗体图 1：三种扩散模型对比——从模式崩溃到多样性困境再到 RL 约束的高质量多模态。 左侧 Vanilla Diffusion 的所有候选轨迹挤在一起，完全丧失多样性。中间 DiffusionDrive 虽然锚定到左转、直行、右转等不同意图（用蓝、绿、红线表示），大量轨迹却冲向路肩或与障碍物重叠（红色圆圈标注）。右侧 DiffusionDriveV2 的轨迹不仅保持了多意图覆盖，更在所有候选上都避免了碰撞和偏离道路。注意 V2 的候选轨迹\u0026quot;收束\u0026quot;到安全区域内的程度远超 V1——这正是 RL 约束的作用。\n粗体图 2：DiffusionDriveV2 架构全景。 截断扩散解码器在模仿学习约束下生成的轨迹\u0026quot;好坏参半\u0026rdquo;（好的直行、差的超车/右转）。乘性探索噪声推动模型探索附近的动作空间。Anchored Truncated GRPO 在锚内进行组间优势评估：直行锚内比较各条直行候选，右转锚内比较各条右转候选——绝不跨锚比较。Inter-Anchor Truncation 进一步对碰撞轨迹施以 -1 硬惩罚，对非碰撞负优势截断为 0。最终模式选择器从精修后的全高质量候选集中挑选最优轨迹。\n粗体图 3：探索噪声类型对比。 绿色为原始轨迹，蓝色虚线为加性噪声扰动后的轨迹，红色虚线为乘性噪声扰动后的轨迹。加性噪声在各 waypoint 施加固定方差的扰动，导致远端 waypoint（位移大）的抖动在视觉上比近端 waypoint（位移小）剧烈得多——这是尺度不一致的体现。乘性噪声使扰动幅度与位移成正比，在整体轨迹几何上保持一致的相对扰动，生成更合理的探索轨迹。\n定性结果 下图展示了 Vanilla Diffusion（上）、DiffusionDrive（中）、DiffusionDriveV2（下）在 NAVSIM navtest 上的定性对比。每种方法生成 20 条候选轨迹（浅色），突出显示 Top-1（深色实线）和 Top-10（深色虚线）。\n粗体图 4(a)：直行场景 1。 Vanilla Diffusion 所有候选几乎重合，只能输出一条\u0026quot;无聊\u0026quot;的直行轨迹。DiffusionDrive 候选覆盖很宽，但出现了大量向左偏离车道的碰撞轨迹（红圈）。DiffusionDriveV2 的候选全部集中在车道内，Top-1 和 Top-10 都保持安全和高效。\n粗体图 4(b)：直行场景 2。 DiffusionDrive 的 Top-1 轨迹表现良好，但 Top-10 和一些候选出现了显著偏移；V2 的所有候选都紧密贴合本车道，体现了 RL 约束对全体模式的提升效果。\n粗体图 5：直行场景 3。 这是更具挑战性的弯道直行场景。DiffusionDrive 的轨迹分散且部分冲出道路边界。DiffusionDriveV2 的候选轨迹均保持在高概率区域，展示了更好的道路自适应能力。\n粗体图 6(a)：转弯场景 1。 交叉口右转场景。Vanilla Diffusion 再次崩溃到单条轨迹。DiffusionDrive 虽然 Top-1 勉强完成了右转，但 Top-10 轨迹出现\u0026quot;转弯过迟\u0026quot;从而导致碰撞。V2 的候选轨迹全部平滑完成右转，且没有碰撞风险。\n粗体图 7(a)：转弯场景 2——弯道超车。 这是证明 V2 多样性保持能力的绝佳示例：Top-1 轨迹选择了保守跟车（缓弯），Top-10 轨迹选择了激进的弯道超车——两者都安全且高质量。这说明 RL 约束并没有抹杀多样性，只是抬高了质量底线。\n粗体图 7(b)：转弯场景 3。 另一个交叉口场景。V2 再次在所有候选上保持安全，而 DiffusionDrive 仍有候选冲出路沿。\n粗体图 8(a)：多模态场景 1——交叉口选道。 在此场景中，车辆可以直行也可以右转（多模态选择）。Vanilla Diffusion 无法给出这两种选择。DiffusionDrive 提供了直行和右转两种轨迹，但右转候选中有碰撞风险。V2 同样提供两种意图，且所有候选都保持安全。\n粗体图 8(b)：多模态场景 2。 另一个复杂的交叉口场景。V2 的左转和直行候选都严格遵守车道和路权，展示了在真正多模态场景下同时保持多样性和高质量的能力。\n🔬 实验与结果 NAVSIM v1 主结果 Method Backbone PDMS $\\uparrow$ VADv2 ResNet-34 80.9 UniAD ResNet-34 83.4 Transfuser ResNet-34 84.0 PARA-Drive ResNet-34 84.0 DRAMA ResNet-34 85.5 GoalFlow* ResNet-34 85.7 Hydra-MDP* ResNet-34 86.5 Hydra-MDP++* ResNet-34 86.6 ARTEMIS ResNet-34 87.0 DiffusionDrive ResNet-34 88.1 WoTE ResNet-34 88.3 DIVER ResNet-34 88.3 DriveSuprim ResNet-34 89.9 DiffusionDriveV2 (Ours) ResNet-34 91.2 *带 * 为官方分数（与其原 backbone 一致）。\nNAVSIM v2 主结果 Method Backbone EPDMS $\\uparrow$ Ego Status MLP ResNet-34 64.0 Transfuser ResNet-34 76.7 Hydra-MDP++ ResNet-34 81.4 DriveSuprim ResNet-34 83.1 ARTEMIS ResNet-34 83.1 DiffusionDriveV2 (Ours) ResNet-34 85.5 多样性与质量权衡 Method $Div.$ $\\uparrow$ PDMS@1 $\\uparrow$ PDMS@5 $\\uparrow$ PDMS@10 $\\uparrow$ Transfuser$_{\\text{TD}}$ 0.1 85.7 85.7 85.7 DiffusionDrive 42.3 93.5 84.3 75.3 DiffusionDriveV2 30.3 94.9 91.1 84.4 关键发现：DiffusionDrive 多样性极高（42.3），但 Top-10 PDMS 暴跌到 75.3（大量低质量候选拉低均值）。DiffusionDriveV2 多样性适中（30.3），但 Top-1 和 Top-10 的差距极小（94.9 → 84.4），说明 RL 约束成功抬升了整体的质量下限。\n消融实验 消融项 Variant PDMS $\\uparrow$ 探索噪声类型 加性 89.7 探索噪声类型 乘性 90.1 Intra-Anchor GRPO ✗ 89.2 Intra-Anchor GRPO ✓ 90.1 Inter-Anchor Truncated ✗ 89.5 Inter-Anchor Truncated ✓ 90.1 方法对比总览 方法 生成方式 多样性 质量一致性 RL 训练 锚定机制 NAVSIM v1 (PDMS) DiffusionDrive 截断扩散 高 低 ✗ ✓ 88.1 DIVER 标准扩散 中 中 GRPO ✗ 88.3 Hydra-MDP 词表采样 中 中 ✗ ✓ 86.5 DriveSuprim 词表采样 + score 低 高 ✗ ✓ 89.9 GoalFlow Flow Matching 低 高 ✗ ✗ 85.7 DiffusionDriveV2 截断扩散 + RL 高 高 Intra/Inter GRPO ✓ 91.2 💡 个人思考 1. \u0026ldquo;多样性 vs 质量\u0026quot;是一个被长期低估的自动驾驶规划核心矛盾。 DiffusionDrive 展示了多模态扩散规划的潜力，但也暴露了模仿学习的根本局限：它只保证\u0026quot;正模式\u0026quot;拟合得好，对\u0026quot;负模式\u0026quot;毫无约束。V2 的工作提醒我们，在多候选规划框架中，候选集的整体质量比 Top-1 质量更重要——因为下游选择器总会犯错，如果候选集里全是\u0026quot;好\u0026quot;轨迹，选错也不至于差到哪里去；反之如果候选是\u0026quot;好+差\u0026quot;混杂，选错一次就是事故。\n2. Intra-Anchor GRPO 是\u0026quot;锚定架构 + GRPO\u0026quot;天作之合的完美体现。 不同驾驶意图（左转、直行、右转）的轨迹之间做优势比较就像比较苹果和橘子——没有意义且会破坏多样性。在锚内部做 GRPO 既保留了锚定机制意图分区的好处，又引入了组内相对优势的 RL 信号，两者完美互补。这是对 GRPO 在非 LLM 领域最聪明的适配之一。\n3. Inter-Anchor Truncated 的思路值得在其他 RL 场景推广。 \u0026ldquo;奖励相对改进，只惩罚绝对失败\u0026rdquo;——这个简单规则解决了锚间比较的困局，本质上是一种全局安全硬约束 + 局部相对优化的混合范式。很多多智能体/多任务 RL 场景中，不同任务之间也有类似\u0026quot;不可直接比较但需要全局安全线\u0026quot;的需求。\n4. 乘性噪声的设计体现工程直觉。 轨迹的近端和远端位移尺度差了一个数量级，加性噪声要么近了噪声太小、要么远了噪声太暴力。乘性噪声让扰动幅度与位移成比例，这种\u0026quot;各向异性尺度自适应\u0026quot;的设计在 trajectory-level 的 RL 探索中近乎标准——每个 waypoint 的噪声方差正比于其长度，天然保持几何结构。\n5. 两阶段训练（IL → RL）是生成式驾驶规划的黄金范式。 DiffusionDriveV2 先用模仿学习获得基本能力（冷启动），再用 RL 在闭环奖励上微调提升。这种\u0026quot;先学得像，再学得好\u0026quot;的路线和 LLM 的 SFT → RLHF 如出一辙。可以预见，未来绝大多数端到端规划器都会走这个路线。\n6. 给未来工作的清晰路标。 V2 证明了 RL 可以解决扩散规划的核心矛盾，但依赖 NAVSIM 的 PDM 分数做奖励。更强大的奖励模型（如基于世界模型的 reward model）和探索策略（如纳入交通参与者交互的联合探索）是下一个层次的问题。此外，把这套框架搬到真车上需要解决奖励设计的安全泛化——仿真里的\u0026quot;完美安全\u0026quot;在真实世界中可能并不完美。\n一点质疑：论文在表 9 中展示了 DiffusionDrive 换上 V2 的选择器后 PDMS 从 88.1 升至 89.1（+1.0），而 V2 比 V1 高 3.1 PDMS。作者以此论证增益主要来自生成器的 RL 改进而非选择器提升。这个结论基本站得住，但值得注意：选择器的 1.0 提升是在 V1 生成器上测的，V2 生成器产生的轨迹质量更高、分布与 V1 不同，选择器在 V2 上的实际增益可能也不同。一个更严格的消融应该是把 V2 的选择器换成 V1 的 classifier，看掉多少分——虽然推测掉分幅度不会很大。\n📖 这是论文精读系列的第 40 篇。扩散规划 + 强化学习的结合正在成为端到端驾驶的新范式，你怎么看这个方向？欢迎留言讨论。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2512-07745/","summary":"DiffusionDriveV2 将强化学习引入截断扩散模型，提出 Intra-Anchor GRPO 和 Inter-Anchor Truncated GRPO，解决了 DiffusionDrive 中多样性与一致高质量之间的根本矛盾。在 NAVSIM v1 上达到 91.2 PDMS，v2 上达到 85.5 EPDMS，均创下新纪录。","title":"论文精读：DiffusionDriveV2 — RL-Constrained Truncated Diffusion"},{"content":"📄 论文信息 ACT：Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware（Tony Zhao, Vikash Kumar, Sergey Levine, Chelsea Finn，RSS 2023，arXiv: 2304.13705） ALOHA：ALOHA: A Low-cost Open-source Hardware System for Bimanual Teleoperation（Zipeng Fu, Tony Zhao, Chelsea Finn，arXiv: 2304.07071） 团队：斯坦福大学 + Google DeepMind 一句话总结：ALOHA 用不到 2 万美元打造一套开源双臂遥操作平台采集高质量示范数据，ACT 用\u0026quot;动作分块 + CVAE Transformer\u0026quot;策略让机器人学会高精度双臂操作——硬件 + 算法两手抓，开启了具身智能数据采集的新范式。 🤔 要解决什么问题？ 让机器人学会精细双臂操作（比如打开杯盖、插电池、拉拉链）一直是机器人学习的硬骨头。障碍有三：\n数据从哪来：双臂操作需要大量人类示范，但商用遥操作设备动辄数万美元甚至更高，普通实验室用不起，数据成了稀缺资源。 复合误差（Compounding Error）：模仿学习里，策略一旦某一步有小误差，后续状态就偏离示范分布，误差像滚雪球一样放大，最后任务崩盘。 人类示范的多模态性：同一个任务，人可能先抓左边再抓右边，也可能反过来。这种\u0026quot;多种合理解法\u0026quot;的多模态分布，用简单的回归（如 L2 loss）会被平均化，输出一个谁都不像的\u0026quot;中间动作\u0026quot;。 核心矛盾：如何在低成本硬件上采集数据，并设计一个抗复合误差、能处理多模态的策略？\nACT + ALOHA 的回答是两条腿走路：ALOHA 解决\u0026quot;数据从哪来\u0026quot;，ACT 解决\u0026quot;怎么学得好\u0026quot;。\n🦾 ALOHA：低成本双臂遥操作平台 设计哲学：用\u0026quot;同构 leader-follower\u0026quot;把成本打下来 ALOHA（A Low-cost Open-source Hardware for Bimanual Action）的核心思路是用两套同构的机械臂做主从控制：\n组件 说明 从臂（Follower） 真正执行任务的机械臂（ViperX 300 6DOF），配夹爪，工作空间约 40cm 主臂（Leader） 操作员手动操控的机械臂（同型号），无电机负载，手感轻盈 控制方式 主臂关节角度实时映射到从臂，从臂\u0026quot;跟随\u0026quot;主臂，实现直觉式双边控制 关键巧思在于同构（leader 和 follower 完全一样的机械结构）：操作员握住主臂运动，从臂做一模一样的动作，无需任何逆运动学求解，操作极其直觉——\u0026ldquo;我手动怎么掰，机器人就怎么动\u0026rdquo;。\n让现成机械臂可\u0026quot;被手拖动\u0026quot;的工程巧思 普通机械臂为了精度，减速比很大，电机几乎\u0026quot;拖不动\u0026quot;（不可 backdrivable），无法当主臂被人手轻松挥动。ALOHA 的关键工程改造是：给主臂换上高黏度润滑脂并拆除部分传动约束，让它变得\u0026quot;可被手拖\u0026quot;（backdrivable），同时仍能读取关节角度。这样操作员挥动主臂时几乎感觉不到阻力，长时间操作不累，示范质量因此大幅提升。从臂则保持原厂高减速比以保证定位精度。一个看似不起眼的机械改造，却是整套系统能成立的物理基础——这提醒我们：机器人系统的突破，往往卡在\u0026quot;机械 + 电控 + 算法\u0026quot;的接缝处。\n为什么能这么便宜 传统遥操作 ALOHA 用 Phantom / Touch Haptic 等力反馈手柄，单台数千至上万美元 主从臂都用现成的 ViperX 300（Interbotix），整机 ~2 万美元 需要复杂 IK、力觉建模 同构直连，免 IK 工作空间小、不直觉 全尺寸双臂，操作直觉 ALOHA 大量使用 3D 打印件做夹爪、相机支架、润滑改造，用 4 个第三方相机（顶部 + 双手腕 + 前方）同步采集。整个系统完全开源（CAD、固件、软件），任何实验室都能复刻。\n数据采集流程 操作员坐在双臂前，双手各握一个主臂，看着机器人实时跟随，一遍遍完成任务。每条示范记录：\n4 路相机图像（高分辨率 RGB） 双臂关节位置（14 维：每臂 7 维） 夹爪状态 一个任务通常只需 50 条左右示范就能训练，采集成本极低。这正是 ACT 能跑通的前提——没有好数据，再好的算法也白搭。\n💡 ACT：动作分块 + CVAE Transformer ACT（Action Chunking with Transformers）是真正让这套数据发挥威力的策略算法。它针对模仿学习的两大痼疾——复合误差和多模态——给出两个对应的解。\n解法一：Action Chunking（动作分块）对抗复合误差 传统模仿学习是逐步预测：每一步根据观测预测一个动作，执行后再预测下一个。步数越多，小误差累积越严重。\nACT 的做法是一次性预测未来 k 步动作（一个\u0026quot;动作块\u0026quot; chunk，论文取 k=100）：\n每步策略不是输出单个动作，而是输出一整段轨迹 预测步数从\u0026quot;任务总步数\u0026quot;骤降为\u0026quot;任务总步数 / k\u0026quot;，等效预测次数减少 k 倍，复合误差被大幅压缩 chunk 内动作天然连贯平滑，避免逐帧抖动 类比：与其每走一步都重新问路（容易偏），不如一次规划好后面 100 步的路线（更稳）。\n解法二：CVAE 对抗多模态 为什么不用简单 Transformer 直接回归 k 步动作？因为人类示范是多模态的——L2 回归会把\u0026quot;从左抓\u0026quot;和\u0026quot;从右抓\u0026quot;平均成一个无意义的中间动作。\nACT 把策略建模为条件变分自编码器（CVAE）：\n组件 输入 输出 作用 编码器（仅训练用） 当前观测 + 示范动作序列 潜变量 z（style） 把\u0026quot;该怎么完成\u0026quot;压缩成一个风格变量 解码器（推理用） 当前观测 + 采样的 z 未来 k 步动作 根据观测和风格，生成一段动作 训练时编码器把示范动作的信息灌进 z，解码器学会\u0026quot;给定观测和 z，重建出示范动作\u0026quot;。推理时丢弃编码器，从先验 N(0, I) 采一个 z，解码器直接生成动作。z 承担了\u0026quot;多模态选择\u0026quot;的角色：不同的 z 对应不同的合理解法，从而避免平均化。\n架构：Transformer 是骨干 编码器和解码器都用 Transformer（类似 BERT 的双向结构）：\n观测（关节角度 + 图像 token）和动作序列被打包成 token 序列喂入 解码器通过自注意力整合观测与 z，输出 k 步动作的关节角度 Temporal Ensemble（时间集成） 动作分块带来一个新问题：相邻两次预测会重叠（上一次预测的 100 步还没执行完，下一次又预测了新的 100 步）。ACT 不简单\u0026quot;覆盖\u0026quot;，而是对重叠区做加权平均（时间集成），权重随\u0026quot;距当前时刻\u0026quot;指数衰减，越近的动作权重越高。这让最终执行轨迹既平滑又稳定，是 ACT 落地的关键工程细节。\n⚙️ 训练与实验 训练成本极低 单张 RTX 3090，5 小时内训完一个任务 50 条示范即够 完全基于模仿学习，不需要强化学习的奖励设计 实验任务 ACT + ALOHA 在 7 个高难度双臂任务上验证：打开杯盖、插槽电池、撕胶带、推方块、拉拉链、穿扎带等。\n关键结果 ACT 成功率 80%-90%+，显著超越基线（简单 LSTM 回归、普通 Transformer 等，后两者在很多任务上几乎为 0） 动作分块单独贡献巨大：消融实验显示，仅去掉 chunk（k=1）性能暴跌；chunk 越大越稳 CVAE 同样关键：去掉 CVAE（纯回归）在多模态任务上明显变差，证明处理多模态的必要性 闭环 vs 开环：ACT 是闭环策略（持续用新观测），即使中途被打断也能恢复，鲁棒性强 ⚔️ ACT 与其他模仿学习路线对比 维度 行为克隆（BC） DAgger ACT Diffusion Policy 抗复合误差 弱 强（需在线纠偏） 强（chunk） 中（chunk + 扩散） 处理多模态 弱 弱 强（CVAE） 强（扩散采样） 数据需求 少 多（需交互） 少（~50 条） 少 训练成本 低 中 低（单卡 5h） 中 是否需环境交互 否 是 否 否 ACT 的迷人之处在于：用最朴素的两个想法（分块 + CVAE）组合，就把双臂精细操作从\u0026quot;做不到\u0026quot;推到了\u0026quot;做得好\u0026quot;，且全流程离线、低成本、可复现。\n📝 个人思考 第一，硬件开源正在重塑具身智能的研究生态。 在 ALOHA 之前，双臂遥操作是少数有钱实验室的专利，数据成了护城河。ALOHA 把门槛砸到 2 万美元 + 全开源，让全世界的研究者都能采自己的数据——这种\u0026quot;普惠\u0026quot;效应直接催生了后来 Mobile ALOHA、ALOHA 2、乃至 π0 等一大批发力。数据采集设备的平民化，是具身智能走向\u0026quot;数据驱动\u0026quot;时代的前提条件，正如 ImageNet 之于视觉。\n第二，ACT 的设计哲学值得反复品味——\u0026ldquo;用算法结构的归纳偏置去解具体的病\u0026rdquo;。 复合误差用\u0026quot;分块\u0026quot;治，多模态用\u0026quot;CVAE\u0026quot;治，两个问题两个药方，对症下药，而不是用一个大模型蛮力硬学。这种问题驱动的极简设计，比堆参数更值得尊敬。动作分块后来成了 VLA 领域的事实标准（π0 的 50 步 chunk、Diffusion Policy 的 chunk 都源自此），CVAE 的\u0026quot;显式建模多模态\u0026quot;思想也贯穿了后续扩散/Flow Matching 动作头。\n第三，从 ACT/ALOHA 到 VLA 的演进逻辑非常清晰。 ACT 的观测是\u0026quot;关节角 + 图像\u0026quot;，动作是\u0026quot;关节角序列\u0026quot;，完全在机器人本体空间里打转。而后续的 RT-2、π0 把\u0026quot;语言\u0026quot;引入观测、把\u0026quot;语义\u0026quot;引入决策，但底层\u0026quot;预测一段连续动作块\u0026quot;的范式几乎是原样继承自 ACT。可以说 ACT 解决了\u0026quot;动作怎么输出\u0026quot;这个工程地基，RT-2 解决了\u0026quot;动作怎么和语义对齐\u0026quot;这个语义地基——两者叠起来就是现代 VLA。\n第四，对自动驾驶和规划的启发。 动作分块本质上就是\u0026quot;轨迹规划\u0026quot;——一次生成一段未来轨迹而非逐步决策。这与自动驾驶里的轨迹预测（生成未来 N 个 waypoint）异曲同工。ACT 的 CVAE 处理多模态的思路，也完全可以迁移到\u0026quot;多模态轨迹生成\u0026quot;上（Diffusion Planner、GoalFlow 等都在做这件事）。具身智能和自动驾驶在\u0026quot;动作生成\u0026quot;这一层是相通的，值得跨界借鉴。\n🔗 延伸阅读 工作 团队 与 ACT/ALOHA 的关系 Diffusion Policy Columbia / TRI 把 chunk 思想 + 扩散模型结合，处理多模态的另一条路 Mobile ALOHA Stanford 在 ALOHA 基础上加移动底盘，实现全身协同操作 π0 Physical Intelligence 继承 ACT 的 action chunking，用 Flow Matching 替代 CVAE 做动作头 RT-2 Google DeepMind VLA 的语义层奠基，与 ACT 的动作层互补 ALOHA 2 Google DeepMind ALOHA 的升级版，性能与舒适度提升，配合 VLA 数据集 BC-Z / RT-1 Google 多任务模仿学习代表，ACT 的同期对照 📖 这是论文精读系列的一篇。ACT + ALOHA 是理解现代 VLA 与具身智能数据范式的\u0026quot;第零步\u0026quot;。你觉得\u0026quot;低成本遥操作 + 分块策略\u0026quot;这套配方，能复制到自动驾驶的仿真数据生成上吗？欢迎留言。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/act-aloha%E7%B2%BE%E8%AF%BB/","summary":"ACT+ALOHA 用不到 2 万美元的开源双臂遥操作平台解决了精细双臂操控的数据获取难题。ACT 采用动作分块（Action Chunking）+CVAE Transformer 的抗复合误差策略，将模仿学习精度推至新高度。ALOHA 的低成本同构主从机械臂设计为具身智能数据采集建立了新范式。","title":"论文精读｜ACT + ALOHA：低成本双臂遥操作与动作分块策略"},{"content":"一句话概括 经典 RSS（责任敏感安全）安全距离模型默认所有车\u0026quot;质量一样、刹车能力一样\u0026quot;，而现实里一辆满载重卡的质量可能是空载的好几倍、动能成倍放大、刹车距离显著变长——这篇 ICVES 2025 论文的核心论点就是：不把货物载荷（cargo load）纳入安全距离计算，自动驾驶重卡在紧急制动时 RSS 算出来的距离不够，照样会追尾。\n一、论文信息 项目 内容 标题 Longitudinal Safety Distance Control Considering Cargo Load for Autonomous Heavy-Duty Vehicles 中文译名 面向自动驾驶重型车辆、考虑货物载荷的纵向安全距离控制 作者 Munjung Jang, Seong-Geun Shin, YunSeok Baek, Yuntae Kim, Hyuck Kee Lee 单位 KATECH（韩国汽车技术研究院，Korea Automotive Technology Institute） 会议 IEEE ICVES 2025（2025 IEEE International Conference on Vehicular Electronics and Safety），2025 年 10 月 27–28 日，英国考文垂（Coventry, UK） 议程位置 Technical Session \u0026ldquo;Safety\u0026rdquo;（TuCT1.2），2025-10-28 16:12–16:24 DOI / 文档号 IEEE Xplore document 11376550 关键词（同场关联） Active and Passive Safety Systems、Driver Assistance Systems、Vehicle/Engine Control 说明：本文引用的作者、会议、议程、DOI 均为公开可查的真实信息（ICVES 2025 官方程序与 IEEE Xplore 条目）。但论文内部的具体公式推导、实验表格数值属于受版权保护的会议正文，本文未获取全文，因此下文对\u0026quot;论文如何具体修正 RSS\u0026quot;的呈现，是基于公开摘要 + RSS 标准模型 + 载重-制动物理关系的严谨推演与合理推测，已用\u0026quot;推测\u0026quot;标注，供读者作为研究线索而非论文原文引用。\n二、背景：为什么这件事重要，又为什么被长期忽略 2.1 RSS 是自动驾驶的\u0026quot;安全底线\u0026quot; 如果你是刚入行的 VLA（Vision-Language-Action）工程师，你可能更熟悉端到端模型、扩散策略、轨迹规划这些\u0026quot;上层智能\u0026quot;。但工业界落地一辆自动驾驶车，最底层永远横着一条红线——不管你的神经网络怎么想，车在物理上不能撞。\nRSS（Responsibility-Sensitive Safety，责任敏感安全）就是 Mobileye 在 2017 年提出的一套\u0026quot;把安全写成数学规则\u0026quot;的框架。它的核心思想特别朴素：\n我（ego 车）只对我的\u0026quot;不合理行为\u0026quot;负责； 只要我遵守一套明确的距离和速度规则，即使对方突然违规（比如前车急刹、加塞），事故的责任也不在我； 反过来，如果我违反了规则，那我就是责任方。 换句话说，RSS 把\u0026quot;安全驾驶\u0026quot;翻译成了一组可验证的不等式约束，嵌在规划器外面做\u0026quot;安全阀\u0026quot;。它不关心你用 Transformer 还是扩散模型，它只保证：在任何时刻，你和前车之间留的距离，足够你在最坏情况下刹停。\n2.2 RSS 的隐形假设：车是\u0026quot;标准乘用车\u0026quot; 问题就出在 RSS 的设计来源上。Mobileye 的原始 RSS 主要面向乘用车（passenger car）场景，里面的关键参数——反应时间、最大制动减速度、车辆质量——默认是一组固定的\u0026quot;典型值\u0026quot;。\n对于乘用车，这个近似大致成立：一辆轿车空载 1.5 吨、满载 2 吨，质量差 30%，对刹车距离影响有限，工程上吃个安全裕量就过去了。\n但当你把 RSS 直接搬到**重型自动驾驶卡车（heavy-duty vehicle, HDV）**上时，这个假设彻底崩了：\n一辆牵引车+半挂（tractor-trailer）空载可能 15 吨，满载总质量（GVW）可达 40–44 吨（欧盟标准上限约 40 吨，美国约 36 吨/8 万磅）； 质量差 2–3 倍，意味着同样的刹车力下，动能和制动距离会拉开一个量级； 更糟的是，满载重卡的刹车系统（气刹 + 挂车滞后）本身响应就慢、制动减速度上限也更低。 这就引出这篇论文要捅破的窗户纸：RSS 算安全距离时如果用了\u0026quot;错的（偏小的）质量/制动减速度\u0026quot;，算出来的距离就会偏短，满载重卡在真正紧急制动时根本刹不住。\n2.3 这不止是理论问题，是行业正在踩的坑 值得强调的是，这个论点并不是孤例。同场 ICVES 2025 的 Safety 分论坛里，Ford Otosan 的论文 Differential Braking-Assisted Emergency Steering Function for Semi-Trailer Trucks 就在研究半挂卡车的差速制动辅助紧急转向——侧面印证\u0026quot;重卡动力学复杂、安全控制难\u0026quot;是 2025 年产业界共识。而本博客另一篇文章（nuTruck 系列）从 benchmark 角度给出了一条互补证据：现有自动驾驶评测（如 PDMS 类指标）基本不含\u0026quot;质量/动力学安全\u0026quot;作为指标，导致模型再会开，也测不出它懂不懂\u0026quot;满载和空载刹车不一样\u0026quot;。这篇论文，恰好是那条论点的\u0026quot;模型工程版\u0026quot;注脚。\n三、标准 RSS 安全距离公式与推导（小白友好版） 3.1 先建立一个直觉：刹车距离 = 反应距离 + 制动距离 想象你开车跟着前车。前车突然急刹。从\u0026quot;你发现前车在减速\u0026quot;到\u0026quot;你的车彻底停住\u0026quot;，中间发生了两件事：\n反应阶段：你（或自动驾驶系统）需要时间感知、决策、发出刹车指令。这段时间车还在以原速度匀速前进，走过的距离叫反应距离。 制动阶段：刹车真正起作用，车从速度 v 减速到 0，这段时间走过的距离叫制动距离。 总停车距离 = 反应距离 + 制动距离。而 RSS 关心的是：你和前车之间，至少要留多远，才能保证你停下来的时候前车也已经停了（或你们都不撞）。\n3.2 RSS 经典纵向安全距离公式 Mobileye 原始 RSS 论文给出的跟进（following）安全距离，简化到单车道、同向前车急刹的场景，核心不等式可以写成：\n$$d_{safe} = v_e \\cdot \\rho + \\frac{v_e^2}{2 \\cdot a_{max,brake}} - \\frac{v_f^2}{2 \\cdot a_{min,brake}}$$其中各符号含义：\n符号 含义 单位 $d_{safe}$ ego 车与前车之间的纵向安全距离（最小安全间距） m $v_e$ ego 车当前速度 m/s $v_f$ 前车当前速度 m/s $\\rho$ 反应时间（含感知+决策+执行延迟），RSS 通常取约 1.0–1.5 s s $a_{max,brake}$ ego 车能施加的最大制动减速度（正数，取绝对值） m/s² $a_{min,brake}$ 前车施加的制动减速度（RSS 假设前车刹车更猛，作为最坏情况） m/s² 直觉解读：\n第一项 $v_e \\cdot \\rho$：反应距离，速度越快、反应越慢，走得越远。 第二项 $\\frac{v_e^2}{2 \\cdot a_{max,brake}}$：ego 车从 $v_e$ 刹到 0 需要的制动距离（经典运动学公式）。 第三项 $\\frac{v_f^2}{2 \\cdot a_{min,brake}}$：前车从 $v_f$ 刹到 0 需要的制动距离，从 ego 的\u0026quot;需要距离\u0026quot;里扣掉——因为前车也在往前走、也在减速，它停的位置比\u0026quot;原地\u0026quot;更靠前。 当 $v_e = v_f = v$ 且假设双方制动能力相同（$a_{max,brake}=a_{min,brake}=a$）时，公式塌缩成最常被引用的\u0026quot;跟车安全间距\u0026quot;：\n$$d_{safe} = v \\cdot \\rho + \\frac{v^2}{2 \\cdot a}$$这就是你在各种科普里看到的 $d = vT + v^2/(2a)$ 的来源。它也可以写成更保守的\u0026quot;停车距离\u0026quot;视角——只关心 ego 自己刹停需要的总距离：\n$$d_{stop} = v \\cdot T + \\frac{v^2}{2 \\cdot a_{brake}}$$其中 $T$ 为反应时间，$a_{brake}$ 为 ego 实际最大制动减速度。\n3.3 公式的物理本质：动能去哪了 为什么制动距离是 $v^2/(2a)$？从能量角度最清楚。车以速度 $v$ 行驶，动能是：\n$$E_k = \\frac{1}{2} m v^2$$刹车时，制动力（近似 $F = m \\cdot a_{brake}$）做功把动能耗尽，做功距离就是制动距离 $d_{brake}$，满足：\n$$F \\cdot d_{brake} = m \\cdot a_{brake} \\cdot d_{brake} = \\frac{1}{2} m v^2$$两边约掉质量 $m$，得到：\n$$d_{brake} = \\frac{v^2}{2 \\cdot a_{brake}}$$注意一个关键事实：在标准\u0026quot;轮胎-路面摩擦决定减速度\u0026quot;的模型里，质量 m 被约掉了。 也就是说，如果两辆车的刹车减速度 $a_{brake}$ 完全一样（都贴着路面附着极限），那么空载和满载的制动距离在数学上相同。\n那论文为什么说满载刹车距离更长？答案在于：真实重卡的 $a_{brake}$ 不是常数，它会随载荷变化。下面第四节展开。\n四、论文的核心论点：忽略 cargo load 的漏洞在哪里 4.1 漏洞一：制动减速度 $a_{brake}$ 随质量下降 纯摩擦模型里质量约掉了，但真实重卡有三个因素让\u0026quot;满载-\u0026gt;减速度更小\u0026quot;：\n气刹系统的力是有限的。气刹靠压缩空气推刹车鼓/盘，能提供的制动力有上限。质量越大，同样制动力分摊到单位质量上，$a = F_{brake}/m$ 越小。换句话说，当制动需求超过刹车系统机械上限时，质量直接拉低减速度。 挂车（trailer）的气动滞后。半挂卡车急刹时，牵引车先建立气压制动，挂车通过管路有 0.3–0.6 秒的滞后（行业资料称 \u0026ldquo;Pushing Effect\u0026rdquo;），挂车巨大惯性还会往前推牵引车，进一步拉长有效制动距离。 载荷转移（load transfer）。重载急刹时，车头下沉、后轴（驱动轴）载荷增加、前轴也可能变化，轮胎纵向力分配改变；若载荷分布不均或货物固定不良，还会引发摆动/失稳，驾驶员/系统被迫减小减速度以避免失控。 把 4.1 揉进公式，真实可用的制动减速度应写成质量的函数：\n$$a_{brake}(m) = \\min\\left(\\mu g,\\; \\frac{F_{brake,max}}{m},\\; a_{stable}(m,\\ \\text{load\\ distribution})\\right)$$其中 $\\mu$ 是路面附着系数，$g$ 是重力加速度，$F_{brake,max}$ 是制动系统能提供的最大力，$a_{stable}$ 是考虑载荷转移后不失稳的最大减速度。质量 $m$ 越大，后两项越小——RSS 若用了一个\u0026quot;乘用车级别\u0026quot;或\u0026quot;空载级别\u0026quot;的 $a_{brake}$，对满载车就是严重高估，算出的 $d_{safe}$ 偏短。\n4.2 漏洞二：动能随质量线性放大，碰撞后果被低估 即便退一步，假设满载车也能达到同样的减速度（贴摩擦极限），那制动距离确实一样。但 RSS 还有另一半逻辑——责任划分与碰撞严重性。满载车动能 $E_k = \\frac{1}{2} m v^2$ 是空载的 2–3 倍，一旦没刹住：\n追尾时释放的能量成倍增加，乘员/第三方伤害更严重； 在规划层面，RSS 应保守地\u0026quot;更早、更狠\u0026quot;地刹车，而它给的减速度上限若不含质量项，就缺了这份保守。 4.3 漏洞三：反应时间 $\\rho$ 对重卡同样不友好 RSS 的 $\\rho$ 通常取固定值（约 1–1.5 s）。但重卡的执行链更长：感知-\u0026gt;域控-\u0026gt;制动指令-\u0026gt;气刹建压，气刹建压本身比乘用车液压刹车慢。论文虽以 cargo load 为主角，但载荷通过影响制动建立、挂车滞后，间接放大了\u0026quot;有效反应距离\u0026quot;。把它和 4.1 合并，真正的有效反应项应是：\n$$d_{react}(m) = v \\cdot (\\rho_{base} + \\Delta t_{pneumatic}(m))$$4.4 小结：漏洞的因果链 把上面三点串成一条线，就是论文想说的因果链：\nRSS 用固定 a_brake、固定 ρ（隐含\u0026quot;质量恒定\u0026quot;假设） 对满载重卡，真实 a_brake(m) 更小、真实 ρ 更大 于是 RSS 算出的 d_safe 偏短 前车急刹时，ego 按 RSS 间距跟车，制动距离不够，导致追尾 这条链的关键词就是 cargo load（货物载荷 / 总质量 m）。它是 RSS 公式里被悄悄\u0026quot;设为常数\u0026quot;的那个变量，而真实世界里它变化巨大。\n五、论文如何修正：把 cargo load / 总质量 m 显式写进安全距离 以下为基于公开摘要与物理推演的合理推测，具体论文公式以原文为准。\n5.1 核心思路：载荷感知的 RSS（cargo-aware RSS） 论文的修法很自然——不再把质量当常数，而是把\u0026quot;当前总质量 m（含 cargo load）\u0026ldquo;作为实时输入，重新标定 $a_{brake}$ 和 $\\rho$，再喂进 RSS 不等式。\n推测的修正后安全间距长这样：\n$$d_{safe}^{load}(m) = v_e \\cdot \\rho(m) + \\frac{v_e^2}{2 \\cdot a_{brake}(m)} - \\frac{v_f^2}{2 \\cdot a_{min,brake}(m_f)}$$其中 $m$ 是 ego 当前总质量，$m_f$ 是前车总质量，$\\rho(m)$、$a_{brake}(m)$ 由 4.1/4.3 的载荷模型给出。\n5.2 怎么得到 $a_{brake}(m)$：从\u0026quot;标定表\u0026quot;到\u0026quot;在线估计\u0026rdquo; 工程上要落地，论文（推测）会走这几步：\n离线标定：在不同载荷（空载/半载/满载）、不同路面 $\\mu$ 下，实测最大可达减速度，建一张 $a_{brake}(m, \\mu)$ 查找表或拟合曲线。行业实测显示，满载重卡的最大减速度常被限制在约 $0.5g–0.6g$（$4.9–5.9\\ \\text{m/s}^2$），明显低于干燥路面上乘用车能摸到的 $0.8g–1.0g$。 在线估计质量 m：通过悬架形变、轴荷传感器、或利用纵向动力学（$a_{actual}$ 与制动踏板/气刹压力的对应）反推当前总质量。近年已有 MEMS 轴荷传感器 + 梯度提升回归把刹车距离预测 MAE 做到约 1.58 m 的工作（见延伸阅读），说明\u0026quot;在线估质量\u0026quot;已经可行。 保守取值：规划时用 $a_{brake}$ 的下界（留裕量），宁可多留距离，也不冒险。 5.3 伪代码：载荷感知安全距离计算 下面是一段示意性伪代码（不含中文，便于直接移植）：\ndef cargo_aware_safety_distance(v_ego, v_front, m_ego, m_front, mu, rho_base, f_brake_max, g=9.81): # estimate achievable deceleration given mass and brake system limit a_friction = mu * g a_brake_limit = f_brake_max / m_ego a_ego = min(a_friction, a_brake_limit) a_front = min(mu * g, f_brake_max / m_front) # pneumatic/pneumatic lag grows slightly with mass (heavier -\u0026gt; slower build) rho_ego = rho_base + 0.15 * (m_ego / 16000.0) rho_front = rho_base + 0.15 * (m_front / 16000.0) d_react_ego = v_ego * rho_ego d_brake_ego = (v_ego ** 2) / (2.0 * a_ego) d_brake_front = (v_front ** 2) / (2.0 * a_front) d_safe = d_react_ego... # placeholder, use formula below d_safe = v_ego * rho_ego + d_brake_ego - d_brake_front return max(d_safe, 0.0) 注：f_brake_max 为制动系统可提供的最大制动力（N），m_ego/m_front 为含 cargo 的总质量（kg）。这段伪代码仅用于说明\u0026quot;把 m 显式传入\u0026quot;，数值系数（如 0.15）为示意，非论文实测值。\n5.4 和原 RSS 的兼容性 好消息是：修正后的公式完全兼容原 RSS 框架。原 RSS 只是\u0026quot;恰好把所有车当成同一质量\u0026quot;，现在只是把质量参数化、动态化。这意味着它可以作为一层\u0026quot;载荷感知安全壳\u0026quot;，套在现有规划器（包括端到端 VLA 的输出）外面，不改变上层架构，只把安全约束收紧。\n六、实验 / 数值案例：空载 vs 满载，差多少 以下数值为基于公开工程数据（ICVES 议程、行业刹车距离资料、欧盟重卡质量上限）的** illustrative 估算**，用于直观说明量级，非论文实测表。\n6.1 设定 车速 $v = 80\\ \\text{km/h} = 22.2\\ \\text{m/s}$； 反应时间 $\\rho = 1.2\\ \\text{s}$（含系统延迟）； 空载重卡总质量 $m_{empty} \\approx 15000\\ \\text{kg}$，可达减速度约 $a_{empty} = 6.0\\ \\text{m/s}^2$（约 $0.61g$）； 满载重卡总质量 $m_{full} \\approx 40000\\ \\text{kg}$，受气刹力上限与挂车滞后限制，可达减速度约 $a_{full} = 4.5\\ \\text{m/s}^2$（约 $0.46g$）； 仅看 ego 自身停车距离 $d_{stop} = v\\rho + v^2/(2a)$（前车设为已停，便于比较）。 6.2 估算结果 工况 总质量 m (kg) 减速度 a (m/s²) 反应距离 v·ρ (m) 制动距离 v²/2a (m) 总停车距离 (m) 空载重卡 15000 6.0 26.6 41.2 67.8 满载重卡 40000 4.5 26.6 54.9 81.5 差值 +25000 −1.5 0 +13.7 +13.7（约 +20%） 如果再用更保守的 $a_{full}=4.0\\ \\text{m/s}^2$（湿滑/挂车滞后叠加），满载制动距离会到 61.7 m，总距离 88.3 m，比空载多约 20.5 m（约 +30%）。\n6.3 这意味着什么 20–30% 的停车距离差异，在高速跟车时就等于\u0026quot;多留一两辆小轿车的长度\u0026quot;。如果 RSS 按空载参数算安全距离、实际是满载，那么前车急刹时，你缺的就是这 13–20 米——而这正好是追尾发生的距离。论文（推测）正是用这类对比，量化了\u0026quot;忽略 cargo load 导致 RSS 距离不足\u0026quot;的代价。\n更现实的是：满载重卡还叠加挂车推动效应、载荷转移限制，实际差距往往比上表更大。行业资料给出的定性结论一致——\u0026ldquo;满载卡车在高速公路上可能需要数百英尺才能停住\u0026rdquo;，且载重是首要放大因素。\n七、与博客 nuTruck 的呼应：benchmark 测不出\u0026quot;质量意识\u0026quot; 本博客的 nuTruck 系列文章提出过一个扎心观点：现有的自动驾驶评测体系（典型如 nuScenes 的 PDMS 这类规划评测指标）主要衡量的是\u0026quot;轨迹像不像人、碰撞率高不高、成本/舒适度如何\u0026quot;，但几乎不含\u0026quot;动力学安全性\u0026quot;作为独立指标——尤其不考虑车辆质量、载荷这种关键动力学因素。\n这篇 ICVES 2025 论文，正好从模型侧给了 nuTruck 论点一个工程注脚：\nnuTruck 说：benchmark 不测质量 -\u0026gt; 模型\u0026quot;假装\u0026quot;所有车一样重也能拿高分； 本论文说：正因如此，连安全壳（RSS）都默认质量恒定 -\u0026gt; 满载重卡在真实紧急工况下被低估 -\u0026gt; 撞车。 两者合起来的结论很明确：\u0026ldquo;能开得顺\u0026quot;和\u0026quot;知道满载重卡刹车更肉\u0026quot;是两件事。当前的评测与安全距离模型，都还停留在\u0026quot;乘用车思维\u0026rdquo;，没有把 cargo load 这个重卡世界最根本的动力学变量请进公式和指标里。\n对做 VLA 的工程师而言，这意味着一个具体风险：如果你的端到端模型在训练/评测时从没见过\u0026quot;质量不同的同款车刹车距离不同\u0026quot;这种样本，它学到的\u0026quot;安全距离感\u0026quot;很可能是错的——而 RSS 这类外部安全阀，如果也用了错的质量假设，就双重失效了。\n八、个人思考：安全距离/规划必须感知载荷，端到端能隐式学到吗 作为一线从业者，我读这篇论文有三点延伸想法，抛出来和大家讨论。\n8.1 载荷感知不该只属于\u0026quot;安全壳\u0026quot;，也该进\u0026quot;规划器\u0026quot; 传统做法是：上层随便开，RSS 在外面兜底。但 RSS 本质是\u0026quot;最坏情况 + 保守裕量\u0026quot;，过度保守会牺牲通行效率（重卡本就慢，再留巨距更亏）。更好的方向是让规划器本身就\u0026quot;知道\u0026quot;当前载荷：\n输入端：把估计质量 m、载荷分布、挂车状态作为状态量喂给模型； 约束端：MPC/CBF 类方法直接把 $a_{brake}(m)$ 写进约束； 输出端：轨迹的刹车剖面（减速度曲线）随质量自适应。 这和同期 arXiv 工作 Safe and Operationally Efficient Longitudinal Control of Autonomous Truck Platoons（Hammerl et al., 2025）思路一致——他们用控制屏障函数（CBF）保证 truck platoon 的碰撞避免，并显式把 40000 kg 总质量、5.0 m/s² 制动上限写进安全约束。可见\u0026quot;质量进约束\u0026quot;已是重卡安全控制的主流写法。\n8.2 端到端 VLA 能隐式学到质量吗？我持怀疑态度 一个乐观猜想：端到端模型看了海量真实驾驶视频，也许能\u0026quot;隐式\u0026quot;学会满载车要开慢点、留远距离。但我怀疑这不够：\n真实数据里\u0026quot;满载 vs 空载\u0026quot;的视觉差异极小（除非看到明显下沉的悬架），模型很难从像素直接推断质量； 即便能，端到端缺乏\u0026quot;可验证的安全保证\u0026quot;，监管和量产都不敢只靠它； 更稳的架构是\u0026quot;端到端输出建议轨迹 + 载荷感知 RSS/CBF 做硬约束校验\u0026quot;，既保上限又保下限。 8.3 在线质量估计是落地的关键前置技术 论文要成立，前提是车知道自己现在多重。这需要：\n轴荷传感器 / 悬架位移传感（已有 MEMS 方案）； 或靠纵向动力学辨识（刹车时看减速度-制动力关系反推 m）； 或车联网/调度系统直接下发货单质量。 哪条路先成熟，载荷感知 RSS 就能先在哪类车队落地（比如封闭场景的港口、矿区重卡，载荷已知且变化大，收益最高）。\n九、延伸阅读 RSS 原始论文：Shalev-Shwartz, S., Shammah, S., Shashua, A. \u0026ldquo;On a Formal Model of Safe and Scalable Self-Driving Cars\u0026rdquo;, arXiv:1708.06374 (2017).——RSS 框架源头，建议精读其纵向/横向安全公式。 同场会议论文：Ford Otosan, \u0026ldquo;Differential Braking-Assisted Emergency Steering Function for Semi-Trailer Trucks\u0026rdquo;, ICVES 2025 (TuCT1.3).——半挂卡车制动/转向安全的另一侧面。 重卡编队安全控制：A. Hammerl et al., \u0026ldquo;Safe and Operationally Efficient Longitudinal Control of Autonomous Truck Platoons\u0026rdquo;, arXiv:2511.12336 (2025).——把 40000 kg 总质量、5.0 m/s² 制动上限显式写进 CBF 安全约束。 载重感知刹车距离预测：\u0026ldquo;Real-Time Axle-Load Sensing and AI-Enhanced Braking-Distance Prediction for Multi-Axle Heavy-Duty Trucks\u0026rdquo;, Applied Sciences (2026).——MEMS 轴荷传感器 + 梯度提升，刹车距离预测 MAE 1.58 m，证明在线估质量可行。 商用车 AEBS 载荷自适应：\u0026ldquo;Study on the Control Algorithm of AEBS for Commercial Vehicle Based on Identification of Driving Condition\u0026rdquo;, Machines (2022).——AEBS 决策中引入车辆质量与路况识别，做实时参数调整。 本博客相关：nuTruck 系列（PDMS/现有 benchmark 不含动力学安全指标，载重是关键动力学因素）。 十、写在最后 这篇 ICVES 2025 论文（KATECH 团队）戳破了一个容易被人忽略的常识盲区：RSS 这把\u0026quot;安全尺\u0026quot;，刻度是按照乘用车刻的，直接拿去量满载重卡，量是会偏短的。 货物载荷（cargo load）通过质量 m 影响制动减速度、反应建立时间、载荷转移和碰撞能量，而经典 RSS 把它们全当常数。修正方法不复杂——把 m 显式写进安全距离公式，配合在线质量估计，就能让安全壳\u0026quot;知道车有多重\u0026quot;。\n对 VLA 工程师的启示很实在：当你在调一个端到端驾驶模型时，别忘了它外面那层\u0026quot;安全底线\u0026quot;也可能带着乘用车的偏见。重卡世界的物理，比乘用车残酷得多，也更需要我们把质量这个最朴素的变量，请回公式里。\n再次声明：本文对论文内部公式/实验数值的呈现，凡涉及具体推导与数据均为基于公开信息的合理推测与量级估算，正式引用请以 IEEE Xplore 原文（document 11376550）为准。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-cargoload-rss/","summary":"ICVES 2025 论文 Longitudinal Safety Distance Control Considering Cargo Load for Autonomous Heavy-Duty Vehicles 指出经典 RSS 安全距离模型假设车辆质量恒定，忽略了货物载荷，导致满载重卡制动距离更长、RSS 给出的安全距离不足而撞车。本文从 RSS 公式出发，讲清质量/载荷如何修正制动距离，并呼应博客 nuTruck 一文：现有 benchmark 不把质量/动力学安全作为指标。","title":"论文精读：Longitudinal Safety Distance Control Considering Cargo Load（ICVES 2025）——RSS 安全距离模型为什么漏算了满载重卡的刹车"},{"content":"入门篇：RiskWorld 到底是什么？（小白版） 如果你第一次听说「风险识别」「RSSM」「潜在世界模型」——先读这一篇。 这一篇不讲任何公式，只帮你建立直觉。\n0.1 一句话版 RiskWorld = 一个以目标为中心的潜在世界模型：为每个周围交通参与者单独「想象」它未来 3 秒会怎么运动、和自车的相对关系会怎么变化，然后从这个想象中解码出「这个目标是不是风险源」。\n论文：RiskWorld: Object-Centric Latent World Modeling for Autonomous Driving Risk Identification（arXiv:2608.21414，北航 × 中关村实验室 × 天津大学 × 香港理工 × 南洋理工）。\n0.2 先看思维导图 0.3 核心问题：自动驾驶需要回答「谁是风险源」 安全的自动驾驶需要一个风险监控器，它能回答一个超越通用场景理解的问题：\n在周围所有交通参与者和障碍物中，哪个目标可能对自车构成安全威胁？\n这个问题需要在碰撞、险情或紧急避让之前就做出判断。例如：\n场景 当前帧看起来 未来会怎样 静态障碍物 无害（离自车路径远） 自车路径收敛时变成威胁 行人 安全（在路边） 未来运动轨迹可能侵入自车路径 对向车辆 正常行驶 可能突然变道 驾驶风险是目标级的、随时间演化的——可靠的定位应该基于每个目标与自车的预期关系发展。\n0.4 现有方法的三大范式及其局限 范式 做法 局限 事故预测 从行车记录仪估计场景级碰撞概率 场景级，不精确定位哪个目标 行为推断 从自车反应（刹车/停车）推断风险目标 间接，依赖自车行为 轨迹几何 预测未来运动 → 检查距离/碰撞 风险判断在轨迹预测之后，脱耦 RiskWorld 的不同：直接预测每个目标与自车的未来关系演化，用这个演化作为风险定位的证据。\n0.5 和世界模型有什么关系？ 你在这个博客里读过的很多工作，底层都是「世界模型」的不同变体：\nDriveWAM / DriveLaW / SimWAM：生成未来视频帧 → 用于规划 OccWorld / DriveWorld：预测未来占用/点云 → 用于场景理解 RiskWorld：预测未来目标-自车关系 → 用于风险识别 关键区别：RiskWorld 不是要生成未来画面，而是要想象每个目标未来和自车的关系会怎么变——这是一个更「任务导向」的潜在预测。\n0.6 接下来怎么读？ 后面内容沿着一条执行主线走：\n编 码 观 测 → 构 建 目 标 状 态 → R S S M 潜 在 动 力 学 推 演 → 解 码 风 险 评 分 → 训 练 → 评 测 先回答：RiskWorld 是什么？ 核心设计思想 RiskWorld 的核心洞察：风险不是静态的视觉属性，而是不断演化的自车-目标关系的结果。\n一个目标变成安全威胁，是因为它的相对运动、距离、路径冲突或与自车的交互趋势朝着不安全状态发展。所以风险监控器应该先预测未来关系，再分配目标级风险。\n四阶段架构 1 2 3 4 . . . . 编 - - 关 - - R - - 风 - - - 码 系 S 险 观 V M 融 融 R S 为 6 解 逐 池 T 测 - L 合 合 e M 每 0 码 步 化 i ： J P ： l 个 ： 头 头 m E M A 潜 目 步 e P + L t 在 标 （ → → - A P t 推 单 3 t 2 G n 演 独 s 未 目 o （ R → （ ： 跑 来 标 - 冻 U 掩 @ 位 风 r 结 每 码 R 2 置 险 i ） → 个 多 S 0 / 评 s → 目 头 S f 距 分 k 结 标 自 M p 离 全 构 一 注 s / = 局 化 个 意 动 ） 时 场 目 力 力 潜 序 风 景 标 t ） 学 在 风 险 特 状 o → 推 险 曲 征 态 k 演 曲 线 e 建 线 首 + + n 模 → 次 自 超 目 自 车 未 过 标 车 - 来 阈 对 运 目 潜 值 齐 动 标 在 的 特 特 交 状 时 征 征 互 态 刻 序 列 第 1 步：问题形式化 在帧 $t$，RiskWorld 观测 $K$ 帧历史 $\\mathcal{H}_t$，包含前视 RGB、跟踪目标状态和自车运动。\n设 $\\mathcal{O}_t = \\{o_t^1, \\ldots, o_t^N\\}$ 为当前候选目标，$\\nu_t^i \\in \\{0, 1\\}$ 为有效性指标。\n对于每个有效候选，$y_t^i$ 表示它是否是自车相关的风险对象，RiskWorld 估计：\n$$ r_t^i = \\Pr(y_t^i = 1 \\mid \\mathcal{H}_t, \\mathcal{O}_t) $$关键： 不是从当前帧单独判断风险，而是通过 $H$ 步潜在推演获得 $r_t^i$。训练时用未来标注监督，推理时只用历史观测。\n第 2 步：目标级世界表征 2.1 场景编码 # 冻结的 V-JEPA2 编码器 (s_t, {v_t^i}_{i=1}^N) = Φ_w(I_{t-K+1:t}, B_t) # s_t: 全局场景特征（对所有时空 token 平均） # v_t^i: 目标对齐特征（在 bbox 区域池化） 为什么用 V-JEPA2？ 它是 Meta 的预测性视频表征模型——通过预测未来潜在目标（而非重建像素）学习视频理解。冻结使用意味着：\n不需要重建未来像素（计算高效） 预训练的预测性表征天然包含运动和交互先验 不引入额外训练参数 2.2 目标状态编码 # 每个目标的状态编码 e_t^i = MLP(ego_relative_state_t^i) # 位置、运动、box 几何、类别 h_track_t^i = GRU(track_history_t^i) # 跟踪历史摘要 # 融合 e_t^i = Fuse(e_t^i, h_track_t^i) # 自车运动特征 e_t^ego = MLP(ego_motion_t) 2.3 关系融合 # 融合 MLP：把三路信息投影到同一空间 x_t^i = FuseMLP(e_t^i, v_t^i, s_t) # 目标 token x_t^ego = FuseMLP(e_t^ego, s_t) # 自车 token # 掩码多头自注意力：建模自车-目标和目标-目标交互 [x̃_t^1, ..., x̃_t^N] = RelAttn([x_t^ego, x_t^1, ..., x_t^N], [1, ν_t^1, ..., ν_t^N]) 对应公式：\n$$ [\\tilde{x}_t^1, \\ldots, \\tilde{x}_t^N] = \\operatorname{RelAttn}([x_t^{\\text{ego}}, x_t^1, \\ldots, x_t^N], [1, \\nu_t^1, \\ldots, \\nu_t^N]) $$其中第二个参数是有效性掩码。输出 $\\{\\tilde{x}_t^i\\}$ 是关系感知的目标 token，用于初始化潜在推演。\n第 3 步：RSSM 潜在未来推演 这是 RiskWorld 最核心的部分——为每个目标单独跑 RSSM 动力学。\n3.1 什么是 RSSM？ RSSM（Recurrent State-Space Model）来自 DreamerV3，是世界模型的经典架构：\nR 训 推 S 练 演 S 时 后 h 时 先 h M ： 验 _ ： 验 _ 0 k = q p ( = ( = 确 z z 定 _ G _ G 性 0 R k R 状 U U 态 | | z z h h _ h _ （ _ 0 _ k G i , { , R n k U i h - h t _ 1 _ 隐 , i } { 状 n ) k 态 x i - ） ̃ t → 1 + ) ) } 只 ) 随 → 从 机 历 状 用 史 态 观 预 测 测 z 初 （ 始 高 化 斯 采 样 ） 3.2 RiskWorld 的 RSSM 实现 # 初始化器：把关系感知 token 映射到确定性状态 h_init^i = f_init(x̃_t^i) # 训练时：后验初始化 z_0^i ~ q_ϕ(z_0^i | h_init^i, x̃_t^i) # 用观测 h_0^i = GRU(z_0^i, h_init^i) # 未来推演（60 步，3s @20fps）： for k in range(1, H+1): z_k^i ~ p_θ(z_k^i | h_{k-1}^i) # 只用先验，不用观测 h_k^i = GRU(z_k^i, h_{k-1}^i) # h_1^i, ..., h_H^i 就是想象中的未来潜在状态序列 对应公式：\n$$ z_k^i \\sim p_\\theta(z_k^i \\mid h_{k-1}^i), \\quad h_k^i = \\operatorname{GRU}(z_k^i, h_{k-1}^i), \\quad k=1,\\ldots,H $$关键理解：\n推演时完全不依赖未来观测——只用先验 $p_\\theta$ 从历史预测 动力学参数在所有目标间共享——同一个 RSSM 处理不同目标 观测交互上下文编码在 $\\tilde{x}_t^i$ 中——不同目标有不同的初始条件 3.3 潜在正则化 # KL 散度：防止后验不受约束 L_kl = E_{i:ν_t^i=1} KL[q_ϕ(z_0^i | h_init^i, x̃_t^i) || p_θ(z_0^i | h_init^i)] 训练时用后验，推理时用先验——KL 正则化让两者尽量接近，防止训练/推理不一致。\n第 4 步：风险感知解码 4.1 逐步解码 # 对每个未来步 k，解码出： (p̂_{t+k}^i, d̂_{t+k}^i, R̂_{t+k}^i) = f_step(h_k^i) # p̂: 未来位置（ego-relative） # d̂: 未来距离 # R̂: 时序风险概率 4.2 池化解码 # 对所有未来步的潜在状态取平均 h̄_t^i = (1/H) Σ_{k=1}^H h_k^i # 池化头预测目标风险评分 r_t^i = f_pool(h̄_t^i) $r_t^i$ 回答「哪个目标是风险源」，逐步输出描述「风险何时出现、关系如何演化」。\n4.3 Time-to-Risk（TTR） $$ \\widehat{\\text{TTR}}_t^i = \\Delta t \\cdot \\min\\{k : \\hat{R}_{t+k}^i \\geq \\gamma_{\\text{ttr}}\\} $$如果预测风险曲线从未超过阈值 $\\gamma_{\\text{ttr}}$，则不返回值。\n第 5 步：训练目标 RiskWorld 有 5 个损失项：\n$$ \\mathcal{L} = \\lambda_{\\text{obj}} \\mathcal{L}_{\\text{obj}} + \\lambda_{\\text{xy}} \\mathcal{L}_{\\text{xy}} + \\lambda_{\\text{dist}} \\mathcal{L}_{\\text{dist}} + \\lambda_{\\text{min}} \\mathcal{L}_{\\text{min}} + \\lambda_{\\text{curve}} \\mathcal{L}_{\\text{curve}} + \\beta \\mathcal{L}_{\\text{kl}} $$ 损失项 监督目标 作用 $\\mathcal{L}_{\\text{obj}}$ $y_t^i$（目标级风险标签） 主损失：分类哪个目标是风险源 $\\mathcal{L}_{\\text{xy}}$ $\\mathbf{p}_{t+k}^{i,*}$（未来位置） 约束潜在推演保留几何信息 $\\mathcal{L}_{\\text{dist}}$ $d_{t+k}^{i,*}$（未来距离） 约束距离预测准确性 $\\mathcal{L}_{\\text{min}}$ $d_{\\min,t}^{i,*}$（最小距离） 关注最近时刻的安全裕度 $\\mathcal{L}_{\\text{curve}}$ $R_{t+k}^{i,*}$（时序风险曲线） 约束风险演化的时间模式 $\\mathcal{L}_{\\text{kl}}$ 后验 vs 先验 潜在正则化 时序风险曲线的设计 $$ R_{t+k}^{i,*} = \\begin{cases} \\exp\\left[-\\dfrac{(a-(t+k))_+}{T}\\right], \u0026 i = i^*, \\; a-H \\leq t+k \\leq b \\\\ 0, \u0026 \\text{otherwise} \\end{cases} $$其中 $a$ 是风险事件起始时刻，$b$ 是结束时刻，$T$ 控制时间衰减。\n这条曲线的直觉：\n风险事件发生前：曲线从 0 平滑上升到 1（越接近事件越危险） 风险事件发生中：保持为 1 其他目标：始终为 0 权重设置 λ_obj = 1.0 # 主损失 λ_curve = 0.2 # 时序风险曲线 λ_xy = 0.05 # 位置回归 λ_dist = 0.05 # 距离回归 λ_min = 0.02 # 最小距离 β = 1e-3 # KL 正则化 第 6 步：实验结果 6.1 RiskBench 基准 RiskBench 包含 6,916 个 CARLA 场景，覆盖四类：\n场景类型 描述 示例 Interactive 自车与他车交互冲突 变道、汇入 Collision 碰撞场景 追尾、侧碰 Obstacle 静态障碍物 路障、施工区 Non-inter. 无交互正常驾驶 背景车辆 6.2 主实验结果 方法 Interactive F1 Collision F1 Obstacle F1 Non-inter. FA Overall F1 Range (10m) 53.6 65.9 52.8 15.2% 53.6 Kalman filter 44.5 59.0 45.7 18.8% 46.7 Social-GAN 46.0 52.1 49.6 16.3% 46.0 QCNet 46.8 51.7 49.8 14.5% 46.4 DSA 31.5 58.9 50.5 3.3% 46.8 RRL 29.1 74.6 28.7 5.1% 48.6 BADAS* 61.2 51.5 56.8 2.8% 48.8 FLaRA* 68.8 56.6 66.6 4.1% 61.8 RiskWorld 70.2 91.5 67.3 2.1% 63.0 关键发现：\nRiskWorld 在 Overall F1 上超过最强基线 FLaRA* 1.2 个百分点 误报率仅 2.1%——所有方法中最低（DSA 3.3%、BADAS* 2.8%） Collision 场景 F1 = 91.5%，远超其他方法 优势在于精度-召回-误报的平衡，而非单纯的高召回 6.3 与固定距离规则的对比 Range (10m) 在某些子集上召回率更高，但误报率 15.2%。RiskWorld 不是\u0026quot;学了一个距离规则\u0026quot;：\n距离区间 Range (10m) FPR RiskWorld FPR RiskWorld Recall 0-5m 100% 22.7% 76.7% 5-10m 100% 13.2% 66.7% 10-20m 0% (不活跃) - 25.0% RiskWorld 在近距离压制干扰物（降低 FPR），在远距离仍保留风险证据——这证明它学到了超越距离的风险语义。\n6.4 消融实验 变体 Interactive Collision Obstacle FA Overall w/o world features 47.6 60.0 56.7 21.3% 50.6 w/o object visual token 55.7 56.6 51.9 3.3% 54.6 w/o relation attention 63.8 45.9 60.7 1.2% 54.3 Deterministic GRU 65.3 63.9 68.5 6.0% 62.0 w/o future rollout 62.4 59.9 64.4 5.9% 60.2 w/o future supervision 68.5 57.5 65.4 4.4% 61.6 RiskWorld 68.3 56.0 69.5 2.1% 63.0 关键发现：\nw/o world features 退化最大（F1 从 63.0 降到 50.6，FA 从 2.1% 升到 21.3%）→ V-JEPA2 预训练表征至关重要 w/o relation attention 退化 8.7 F1 → 关系建模不可或缺 Deterministic GRU 替代随机 RSSM 后，Collision F1 提升但整体下降、FA 升高 → 随机动力学提供更好的精度-误报平衡 w/o future rollout 和 w/o future supervision 都有退化 → 递归推演和未来监督都有贡献 6.5 时序风险分离 在临界帧前 3 秒内：\n场景 风险源分数上升 非风险目标分数 源目标排名 #1 比例 Interactive 0.219 → 0.650 \u0026lt; 0.08 95.9% Collision 0.139 → 0.771 \u0026lt; 0.08 98.0% Obstacle 0.191 → 0.625 \u0026lt; 0.08 94.5% 风险源的分数在临界事件前持续上升，而非风险目标的分数始终很低——RiskWorld 能在事件发生前就区分出谁是风险源。\n6.6 Planning-Aware 评估 用 LBC 规划器测试：只保留 RiskWorld 选中的目标，遮蔽其他目标。\n方法 Interactive IR Interactive CR Obstacle IR Obstacle CR Full observation 0.00 0.0% 0.00 0.0% Ground-truth risk 0.02 0.4% 0.04 5.3% Range (10m) 0.01 6.2% 0.24 26.4% DSA 0.01 0.8% 0.37 38.5% RiskWorld 0.09 1.1% 0.08 24.2% RiskWorld 在障碍物场景的 IR=0.08、CR=24.2%，在自动选择器中最好——它选中的目标保留了规划相关信息。交互场景 IR=0.09 稍高，说明未选中的交互上下文仍会影响规划。\n🔬 个人解读与思考 1. 「以目标为中心」vs「以场景为中心」 RiskWorld 最重要的设计选择：不预测整个未来场景（视频/占用/点云），而是为每个目标单独推演未来关系。\n以场景为中心（DriveWAM 等） 以目标为中心（RiskWorld） 生成未来帧/占用 推演每个目标的潜在状态 计算量大（要生成整个画面） 计算量小（只推演 N 个目标） 用途：规划、仿真 用途：风险识别 需要解码器重建像素 只需要解码风险评分 这是一个任务导向的选择：风险识别不需要知道未来画面长什么样，只需要知道每个目标和自车的关系会怎么变。\n2. RSSM 的精巧应用 RSSM（来自 DreamerV3）被用于一个全新的场景——自动驾驶风险推演：\n训练时：后验 $q_\\phi$ 用观测初始化，先验 $p_\\theta$ 用于推演 推理时：只用先验 $p_\\theta$ 递归推演 60 步（3 秒） KL 正则化：让后验和先验接近，防止训练/推理不一致 这个设计让 RiskWorld 在推理时完全不需要未来观测——只从历史状态就能推演出未来 3 秒的风险演化。\n3. V-JEPA2 冻结使用的策略 RiskWorld 冻结了 V-JEPA2 编码器（Meta 的预测性视频表征模型），只训练任务特定的编码器和解码器。\n好处：\n不需要重建像素：V-JEPA2 通过预测未来潜在目标学习，天然包含运动先验 计算高效：冻结编码器 = 不需要反向传播到视觉 backbone 迁移学习：预训练的预测性表征直接用于风险推演 消融实验也证实：去掉 V-JEPA2 特征后，F1 从 63.0 降到 50.6，FA 从 2.1% 升到 21.3%——这是最大的退化。\n4. 时序风险曲线的设计巧思 RiskWorld 不是简单地预测\u0026quot;这个目标在临界时刻是否危险\u0026quot;，而是预测一条连续的风险演化曲线：\n$$ R_{t+k}^{i,*} = \\exp\\left[-\\dfrac{(a-(t+k))_+}{T}\\right] $$这条曲线：\n在风险事件发生前平滑上升（越接近事件越危险） 在风险事件发生中保持为 1 其他目标始终为 0 Time-to-Risk（TTR）就是这条曲线首次超过阈值的时刻——这比二值标签提供了更丰富的时序信息。\n5. 局限与未来方向 论文自述的局限：\nRiskWorld 是风险监控器，不是闭环规划器——它识别风险源，但不直接做规划 评估限于仿真（CARLA）——真实世界的泛化性待验证 复杂多目标交互、长尾行为、严重遮挡仍是开放挑战 未来方向：\n真实世界泛化 不确定性感知的反事实推演 与规划器联合训练 6. 和其他风险识别方法的对比 BADAS* FLaRA* MC-Risk RiskWorld 预测目标 场景级 场景级 目标级 目标级 未来推理 预测性表征 预测性表征 轨迹预测 RSSM 潜在推演 风险定位 注意力可视化 目标池化 几何检查 关系演化解码 F1 48.8 61.8 - 63.0 FA 2.8% 4.1% - 2.1% RiskWorld 的核心优势：用 RSSM 潜在推演替代了\u0026quot;先预测轨迹再检查碰撞\u0026quot;的两阶段范式，直接从潜在状态解码风险。\n📝 一句话总结 RiskWorld = V-JEPA2（冻结编码）+ RelAttn（关系融合）+ RSSM（每个目标单独推演未来 3s 潜在状态）+ 风险/关系解码器。不生成未来画面，只想象「每个目标和自车的关系会怎么变」——RiskBench F1=63.0%、误报率 2.1%，在精准定位风险源上超过所有基线。\n参考 论文：RiskWorld: Object-Centric Latent World Modeling for Autonomous Driving Risk Identification (arXiv:2608.21414) 代码：暂未开源 RiskBench：RiskBench benchmark for risk identification V-JEPA2：V-JEPA 2: Self-supervised video models (arXiv:2506.09985) DreamerV3/RSSM：Mastering diverse control tasks through world models (Nature 2025) BADAS：Context-aware collision prediction (arXiv:2510.14876) FLaRA：Predicting future latent representations for accident anticipation (arXiv:2606.14380) ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/riskworld%E7%B2%BE%E8%AF%BB/","summary":"北航 × 中关村实验室 RiskWorld 精读：不用「全局想象未来帧」，而是为每个周围目标单独跑一遍「如果它继续运动会怎样」的 RSSM 潜在动力学推演，从中解码出目标级风险评分。RiskBench 上 F1=63.0%、误报率仅 2.1%，在「谁是风险源」这个精准定位问题上超过了所有基线。","title":"RiskWorld 论文精读：以目标为中心的潜在世界模型，用于自动驾驶风险识别"},{"content":"入门篇：SimWAM 到底是什么？（小白版） 如果你第一次听说「世界动作模型」「Video DiT」「Action DiT」「FlowGRPO」这些词，或者听到就头大——先读这一篇。 这一篇不讲任何代码，只帮你建立直觉。等脑子里有画面了，再进入下面的代码逐行拆解。\n0.1 一句话版 SimWAM = 一个冻结的视频生成模型（Wan2.2-5B）+ 一个轻量动作专家（ActionDiT），用联合 Flow Matching 训练，让视频预测的「运动先验」流入轨迹生成——但推理时不需要真的生成未来帧，只用动作专家直接输出轨迹。\n论文：SimWAM: A Simple World Action Model for End-to-End Autonomous Driving（arXiv:2608.07468，华中科技大学 × 东风）。\n它和传统做法的本质区别：\n传统端到端（UniAD / VAD） World Model（DriveWAM / DriveLaW） SimWAM 直接从观测映射到轨迹 先想象未来帧，再规划 训练时用视频预测传递运动先验，推理时不需要生成未来帧 无显式时序建模 显式预测未来（慢） 隐式传递时序信息（快） 轨迹质量依赖模仿学习 轨迹质量依赖未来帧质量 轨迹质量 = 运动先验 + RL 后训练 一句话概括动机：视频生成模型里藏着丰富的「物体怎么运动」的先验——SimWAM 把这个先验「蒸馏」到一个轻量动作专家里，让它直接输出好轨迹，而不需要在推理时真的花时间生成未来帧。\n0.2 先看思维导图 图里有 5 个分支：是什么、为什么要 WAM、两个专家、训练方法、推理优势。先让它们在脑子里占个位置，下面逐个展开。\n0.3 两个必须搞懂的核心概念 把名字拆开就是它的两个引擎：\n名字的一部分 对应概念 负责的事 Sim Simple（简洁） 不搞复杂模块，用现成视频模型 WAM World Action Model 视频世界模型 + 动作预测联合训练 两个专家：\n专家 身份 参数量 训练时 推理时 Video Expert Wan2.2-TI2V-5B DiT（冻结/微调） ~5B 联合训练，预测未来帧 不用 Action Expert ActionDiT（从头训/LoRA） ~0.2B-1B 联合训练，生成轨迹 只用这个 概念一：从「噪声」到「轨迹」——Flow Matching 和所有扩散模型一样，SimWAM 的 ActionDiT 也是「从噪声生成轨迹」：\n生成轨迹 = 从一个纯噪声出发，一步步把它「整形」成一条干净的轨迹。\n**扩散模型（Diffusion）**的做法是\u0026quot;一点点擦马赛克\u0026quot;：每一步去掉一点噪声，走 20~50 步。\nFlow Matching是扩散的\u0026quot;直连版\u0026quot;：不弯弯绕绕，而是在「纯噪声」和「轨迹」之间拉一条直线，训练模型学习这条线上的速度场（velocity field）——告诉它\u0026quot;在任意一个中间点，下一步该往轨迹方向走多少\u0026quot;。步数可多可少（大步走也行），所以更快、更适合反复采样的强化学习。\n小知识：SimWAM 的 Video DiT（Wan2.2）用的也是 Flow Matching 家族（rectified-flow），所以两个专家天然兼容。\n概念二：Isolated Attention Mask——「训练时借力、推理时独立」 SimWAM 最精巧的设计是一个注意力掩码——它让动作 token 和未来帧 token 都能看到当前观测，但互相看不到：\n训 推 练 理 时 观 未 动 未 时 直 因 ： 测 来 作 来 ： 接 为 帧 帧 帧 扔 动 t 掉 作 t t o t o o k o V t k k e k i o e e n e d k n n s n e e s s s o n s ← ← ← D ← → i 从 被 只 T 来 被 只 动 ， 不 V 被 作 只 依 i V 用 赖 d i A t 未 e d c o A 来 o e t k c 帧 o i e t D o n i t i D n s o o T i ： n k T D 互 e 和 i 相 D n 看 T 隔 i s A 到 离 T ， c （ 看 ！ 所 t 预 到 以 i 测 （ 不 o 未 生 需 n 来 成 要 视 轨 生 D 频 迹 成 i ） ） 未 T 来 帧 都 看 到 为什么\u0026quot;相对比较\u0026quot;这么重要？因为视频模型的「运动先验」通过共享注意力流入动作专家——但动作专家不需要知道\u0026quot;未来帧长什么样\u0026quot;，只需要知道\u0026quot;当前场景里物体在怎么运动\u0026quot;。Isolated Mask 恰好保留了有用信息、屏蔽了无用信息。\n0.4 概念关系图：五个名词怎么拼起来 把上面串起来：\n蓝色（视频专家）：Wan2.2-5B DiT → 预测未来帧 → 提供场景理解和运动先觉 红色（动作专家）：ActionDiT → 从噪声生成轨迹 → 推理时独立工作 紫色（联合训练）：MOT + Isolated Mask → 训练时共享注意力，推理时独立 绿色（优化算法）：SFT（模仿学习）→ FlowGRPO（RL 后训练）→ PDM 奖励 三者合起来就是一个完整的 SimWAM 训练流程。\n0.5 和自动驾驶 / 世界模型有什么关系？ 你在这个博客里读过的很多 VLA（视觉语言行动模型）工作，底层就是这套组合拳的变体：\nUniAD / VAD：直接从观测映射到轨迹，无显式时序建模 DriveWAM / DriveLaW：先生成未来帧，再规划——推理时必须生成未来帧（慢） SimWAM：训练时借视频模型的运动先觉，推理时只用动作专家——既借了力，又不背包袱 所以这篇讲的 SimWAM 不是\u0026quot;只跟视频有关\u0026quot;的孤立技巧：「视频模型 + 动作专家 + Isolated Mask + RL 后训练」这套配方，就是 2025-2026 年端到端驾驶领域最有竞争力的范式之一。 读懂了它，等于读懂了那一批工作的共同骨架。\n0.6 接下来怎么读？ 后面内容沿着一条执行主线走：\n初 始 化 → S F T 联 合 训 练 → F l o w G R P O R L 后 训 练 → 推 理 → 评 测 建议带着入门篇建立的三个\u0026quot;心智锚点\u0026quot;去读：\nVideo Expert = Wan2.2-5B DiT（提供运动先觉）； Action Expert = ActionDiT（生成轨迹，推理时独立）； Isolated Mask = 训练时借力、推理时独立的开关。 先回答：SimWAM 代码仓库结构是什么？ 这是一份可运行的代码仓库 SimWAM 不是一篇只能读的论文，而是一份完整的开源代码仓库，代码就在 src/simwam/ 目录下：\n三个入口脚本怎么分工？ 读代码前先分清三个入口文件：\n文件 作用 对应配置 scripts/train.py SFT 训练（模仿学习） configs/task/navsim_uncond_*.yaml scripts/train_grpo.py FlowGRPO 训练（RL 后训练） configs/task/navsim_grpo_*.yaml experiments/navsim/eval_navsim.py 评测（NAVSIM navtest） experiments/navsim/run_eval_*.sh 两个核心 Python 文件 文件 行数 干什么 src/simwam/runtime.py ~200 行 SFT 训练的运行时入口：构建模型、数据集、训练器 src/simwam/runtime_grpo.py ~200 行 GRPO 训练的运行时入口：加载 IL checkpoint、配置 LoRA、构建 PDM 奖励 而真正的核心逻辑在这两个文件里：\n文件 大小 干什么 src/simwam/models/wan22/simwam.py 53KB SimWAM 主模型：前向传播、损失计算、推理 src/simwam/trainer_grpo.py 41KB GRPO 训练器：SDE 采样、PDM 奖励、PPO 更新 而模型架构在这几个文件里：\n文件 大小 干什么 src/simwam/models/wan22/action_dit.py 13KB ActionDiT：动作专家架构 src/simwam/models/wan22/mot.py 24KB MOT：Mixture-of-Transformers 联合注意力 src/simwam/models/wan22/wan_video_dit.py 31KB Wan2.2 Video DiT 封装 src/simwam/models/wan22/lora.py 5KB LoRA 适配器实现 本文的讲解方式 不从概念讲起，而是从配置文件的入口出发，沿着执行路径一步一步深入。\n我们追踪一辆\u0026quot;数据快车\u0026quot;：\nc o n f i g s → r u n t i m e _ g r p o . p y → s i m w a m _ g r p o . p y → a c t i o n _ d i t . p y → m o t . p y → t r a i n e r _ g r p o . p y → 回 到 采 样 每到一个关键节点，我都会：\n标注代码位置（文件名 + 行号） 说明\u0026quot;这个函数接收什么、输出什么\u0026quot; 解释背后的数学/算法动机 配逻辑分支图 第 0 步：先理解总图 整个框架只有两个大阶段，反复交替：\n阶段 发生位置 是否更新参数 产出 SFT 训练 (模仿学习) runtime.py → trainer_tensorboard.py ✅ 更新全部参数 IL checkpoint FlowGRPO 训练 (RL 后训练) runtime_grpo.py → trainer_grpo.py ✅ 只更新 LoRA 参数 RL checkpoint 这是两阶段训练的标志：先 SFT 学会基本能力，再 FlowGRPO 用奖励信号微调改进。\n第 1 步：配置文件——一切的起点 1.1 模型配置 (configs/model/simwam_navsim.yaml) # configs/model/simwam_navsim.yaml # 这个文件定义了 SimWAM 的所有模型参数 # === Video Expert === model_id: \u0026#34;Wan-AI/Wan2.2-T2V-14B\u0026#34; # 预训练视频模型 tokenizer_model_id: \u0026#34;Wan-AI/Wan2.2-T2V-14B\u0026#34; # T5 文本编码器 tokenizer_max_len: 512 # 文本最大长度 load_text_encoder: false # 训练时不加载文本编码器（冻结） # === Video DiT 配置 === video_dit_config: hidden_dim: 3072 # Video DiT 隐藏维度 ffn_dim: 12288 # FFN 中间维度 num_heads: 24 # 注意力头数 attn_head_dim: 128 # 每头维度（3072/24=128） num_layers: 40 # Video DiT 层数 freq_dim: 256 # 时间步 Fourier 编码维度 # === Action Expert 配置 === action_dit_config: action_dim: 3 # (x, y, heading) 三维度 hidden_dim: 1024 # ActionDiT 隐藏维度 ffn_dim: 4096 # FFN 中间维度 num_heads: 24 # 注意力头数 attn_head_dim: 128 # 每头维度 num_layers: 30 # ActionDiT 层数（比 Video 少） text_dim: 4096 # 文本条件维度（与 T5 对齐） freq_dim: 256 # 时间步 Fourier 编码维度 # === 调度器配置 === video_scheduler: train_shift: 5.0 # 训练时的噪声偏移 infer_shift: 5.0 # 推理时的噪声偏移 num_train_timesteps: 1000 # 训练时间步数 action_scheduler: train_shift: 1.0 # ActionDiT 的训练噪声偏移 infer_shift: 1.0 # ActionDiT 的推理噪声偏移 num_train_timesteps: 10 # 10 步欧拉积分 prediction_type: \u0026#34;velocity\u0026#34; # 预测速度场 sigma_clamp_min: 0.1 # SDE 噪声下限 关键理解： Video DiT 有 40 层、3072 维（~5B 参数），ActionDiT 只有 30 层、1024 维（~0.2B 参数）。ActionDiT 比 Video DiT 轻得多——这就是\u0026quot;轻量动作专家\u0026quot;的含义。\n1.2 SFT 任务配置 (configs/task/navsim_uncond_front_384x672_1e-4.yaml) # configs/task/navsim_uncond_front_384x672_1e-4.yaml # SFT 训练的超参数 batch_size: 2 # 每 GPU 批大小 learning_rate: 1e-4 # 学习率 num_epochs: 100 # 训练轮数 lr_scheduler_type: \u0026#34;cosine\u0026#34; # 余弦退火 weight_decay: 1e-2 # 权重衰减 gradient_accumulation_steps: 1 # 梯度累积 model: proprio_dim: 4 # 自车状态维度（速度、加速度等） loss: lambda_video: 1.0 # 视频损失权重 lambda_action: 1.0 # 动作损失权重（等权重） 1.3 GRPO 任务配置 (configs/task/navsim_grpo_action_pdm_384x672_flowgrpo_lora.yaml) # configs/task/navsim_grpo_action_pdm_384x672_flowgrpo_lora.yaml # FlowGRPO 训练的超参数 model: checkpoint_path: \u0026#34;path/to/sft/checkpoint.pt\u0026#34; # SFT 权重 grpo: # === LoRA 配置 === lora: enabled: true # 只训练 LoRA 适配器 r: 16 # LoRA rank alpha: 32.0 # LoRA alpha（缩放系数 = alpha/r = 2） target_modules: # 只在注意力层加 LoRA - q - k - v - o # === 采样配置 === sample: sde_mode: rigorous # 严格的 SDE 采样（score-corrected） noise_level: 0.1 # SDE 噪声级别 num_samples: 8 # 每个场景采样 G=8 条轨迹 # === 训练配置 === train: ppo_clip_range: 0.02 # PPO clip 范围 ε adv_clip_max: 5.0 # advantage 截断到 ±5 num_inner_epochs: 4 # 每批 rollout 复用 4 次 learning_rate: 5e-6 # RL 学习率（比 SFT 小 20 倍） # === 奖励配置 === reward: # NAVSIM PDM 奖励 # PDMS = NC × DAC × (5·TTC + 5·EP + 2·C) / 12 关键理解： FlowGRPO 的学习率（5e-6）比 SFT（1e-4）小 20 倍——RL 微调必须小心，步子太大会\u0026quot;忘记\u0026quot;SFT 学到的能力。\n第 2 步：入口脚本——从 train_grpo.py 开始 2.1 入口 (scripts/train_grpo.py) # scripts/train_grpo.py（整个框架的入口） import hydra from omegaconf import DictConfig from simwam.runtime_grpo import run_grpo_training @hydra.main(config_path=\u0026#34;../configs\u0026#34;, config_name=\u0026#34;train_grpo\u0026#34;, version_base=\u0026#34;1.3\u0026#34;) def main(cfg: DictConfig): run_grpo_training(cfg) if __name__ == \u0026#34;__main__\u0026#34;: main() 一句话： train_grpo.py 只是一个启动器，真正的逻辑在 runtime_grpo.py 的 run_grpo_training 里。\n2.2 runtime_grpo.py 的完整逻辑 (src/simwam/runtime_grpo.py) # src/simwam/runtime_grpo.py def run_grpo_training(cfg: DictConfig): # 1. 日志和输出目录 misc.register_work_dir(cfg.output_dir) setup_logging(...) # 2. 设备和精度 device = _resolve_train_device() model_dtype = _mixed_precision_to_model_dtype(cfg.mixed_precision) # 3. 构建模型（通过 Hydra instantiate） checkpoint_path = cfg.model.get(\u0026#34;checkpoint_path\u0026#34;, None) model_container = OmegaConf.to_container(cfg.model, resolve=True) model_container.pop(\u0026#34;checkpoint_path\u0026#34;, None) model = instantiate(model_container, model_dtype=model_dtype, device=device) # 4. 加载 SFT 权重（warm-start） if checkpoint_path: ckpt = Path(checkpoint_path) model.load_checkpoint(str(ckpt), optimizer=None) # 5. 配置 GRPO（注入 LoRA、配置采样器） model.configure_grpo(cfg.grpo) # 6. 构建数据集和奖励 train_ds = instantiate(cfg.data.train) reward = instantiate_reward(cfg.grpo) # NavSimPDMReward # 7. 构建 GRPO 训练器并开始训练 trainer = SimWAMGRPOTrainer(model=model, train_dataset=train_ds, reward=reward, cfg=cfg) trainer.train() 对应流程图：\nt r a ├ ├ ├ ├ ├ └ i ─ ─ ─ ─ ─ ─ n _ i l c i i t g n o o n n r r s a n s s a p t d f t t i o a _ i a a n . n c g n n e p t h u t t r y i e r i i . a c e a a t → t k _ t t r e p g e e a r ( o r ( _ i u m i p d r n n o n o a e ( _ d t ( t w ) g e ( c a a r l s f ) r → p ) f g d o t . → 开 _ → _ g → 始 t w r N r S e p A N G a i i o V a R i m g ) S v P n W h I S O i A t → M i n M s m 循 g G ) 注 数 P 环 R 入 据 D P → 集 M O L R . 加 o e f 载 R w r A a o S 、 r m F 配 d _ T 置 w 采 a 权 样 n 重 器 2 2 _ p r e t r a i n e d ( . . . ) 2.3 create_simwam_grpo 工厂函数 # src/simwam/runtime_grpo.py:24-87 def create_simwam_grpo( model_id, tokenizer_model_id, video_dit_config, tokenizer_max_len, load_text_encoder, proprio_dim, action_dit_config, action_dit_pretrained_path, skip_dit_load_from_pretrain, video_scheduler, action_scheduler, loss, mot_checkpoint_mixed_attn, redirect_common_files, model_dtype, device, ): \u0026#34;\u0026#34;\u0026#34;构建 SimWAMGRPO（和 runtime.create_simwam 参数一样）。\u0026#34;\u0026#34;\u0026#34; from .models.wan22.simwam_grpo import SimWAMGRPO # 把 DictConfig 转成 dict video_dit_config = _as_dict(video_dit_config, \u0026#34;video_dit_config\u0026#34;, required=True) action_dit_config = _as_dict(action_dit_config, \u0026#34;action_dit_config\u0026#34;) action_scheduler = _as_dict(action_scheduler, \u0026#34;action_scheduler\u0026#34;, required=True) # 校验 action_scheduler 必需的 key required_keys = {\u0026#34;train_shift\u0026#34;, \u0026#34;infer_shift\u0026#34;, \u0026#34;num_train_timesteps\u0026#34;} missing = required_keys - set(action_scheduler.keys()) if missing: raise ValueError(f\u0026#34;`action_scheduler` missing keys: {sorted(missing)}.\u0026#34;) # 调用 SimWAMGRPO.from_wan22_pretrained return SimWAMGRPO.from_wan22_pretrained( device=device, torch_dtype=model_dtype, model_id=model_id, tokenizer_model_id=tokenizer_model_id, # ... 其余参数 action_train_shift=float(action_scheduler[\u0026#34;train_shift\u0026#34;]), action_infer_shift=float(action_scheduler[\u0026#34;infer_shift\u0026#34;]), action_num_train_timesteps=int(action_scheduler[\u0026#34;num_train_timesteps\u0026#34;]), loss_lambda_video=float(loss.get(\u0026#34;lambda_video\u0026#34;, 1.0)), loss_lambda_action=float(loss.get(\u0026#34;lambda_action\u0026#34;, 1.0)), ) 关键理解： 这个工厂函数负责把配置文件里的参数\u0026quot;翻译\u0026quot;成模型对象。核心调用是 SimWAMGRPO.from_wan22_pretrained——它会加载 Wan2.2 预训练权重、初始化 ActionDiT、构建 MOT 联合注意力层。\n第 3 步：ActionDiT——动作专家架构 源文件：src/simwam/models/wan22/action_dit.py（13KB）\n3.1 核心类结构 # src/simwam/models/wan22/action_dit.py class ActionDiT(nn.Module): \u0026#34;\u0026#34;\u0026#34; 轻量 Diffusion Transformer，从噪声轨迹生成干净轨迹。 条件输入：VLM 的缓存 KV + 时间步 + 导航指令 + 自车状态。 \u0026#34;\u0026#34;\u0026#34; def __init__(self, action_dim=3, hidden_dim=1024, ffn_dim=4096, num_heads=24, attn_head_dim=128, num_layers=30, text_dim=4096, freq_dim=256, eps=1e-6): super().__init__() # 1. 轨迹嵌入：把 (x, y, heading) 的 noisy 轨迹 + Fourier 特征 → hidden_dim # 输入维度 = action_dim × 2 + freq_dim = 3×2 + 256 = 262 self.traj_embed = nn.Sequential( nn.Linear(action_dim * 2 + freq_dim, hidden_dim), nn.SiLU(), nn.Linear(hidden_dim, hidden_dim), ) # 2. 时间步嵌入：Flow time → Fourier → MLP → hidden_dim self.time_embed = TimestepEmbedding(freq_dim, hidden_dim) # 3. 文本嵌入：导航指令（T5 输出）→ project → hidden_dim self.text_proj = nn.Linear(text_dim, hidden_dim) # 4. 自车状态嵌入：当前速度/加速度等 → project → hidden_dim self.ego_proj = nn.Linear(proprio_dim, hidden_dim) # 5. 30 层 Transformer Block self.blocks = nn.ModuleList([ ActionDiTBlock(hidden_dim, ffn_dim, num_heads, attn_head_dim, ...) for _ in range(num_layers) ]) # 6. 输出头：hidden_dim → (action_dim × 2) # 预测速度场 self.out_proj = nn.Linear(hidden_dim, action_dim * 2) 参数量计算： 30 层 × (self-attention + cross-attention + FFN) ≈ ~0.2B-1B（取决于是否用 LoRA）。\n3.2 ActionDiTBlock 的内部结构 # src/simwam/models/wan22/action_dit.py class ActionDiTBlock(nn.Module): def forward(self, x, t_emb, kv_cache, mask): # 1. Self-Attention（动作 token 之间互相看） # - 动作 token 是 50 个路点（5s @10Hz），每个 3 维 (x, y, heading) # - 加入因果掩码：后面的路点可以看到前面的，但前面的看不到后面的 x = x + self.self_attn(self.norm1(x), t_emb, mask=self_causal_mask) # 2. Cross-Attention（动作 token 看 VLM 的缓存 KV） # - 这是\u0026#34;世界模型信息流入动作专家\u0026#34;的唯一通道 # - VLM 的 KV 是从当前观测帧编码的，包含了场景理解 x = x + self.cross_attn(self.norm2(x), kv_cache, mask=cross_mask) # 3. FFN（前馈网络） x = x + self.ffn(self.norm3(x)) return x 关键设计： Cross-Attention 的 kv_cache 来自 VLM 的 softmax attention 层——这就是\u0026quot;世界模型信息流入动作专家\u0026quot;的管道。动作 token 通过 cross-attention 读取 VLM 编码的场景表征，但看不到未来帧 token（因为 isolated attention mask）。\n3.3 轨迹嵌入的数学 ActionDiT 的输入不是原始轨迹，而是经过 Fourier 编码的轨迹：\n# 轨迹嵌入的输入维度 = action_dim × 2 + freq_dim = 3×2 + 256 = 262 # 其中： # - action_dim = 3: (x, y, heading) # - × 2: 原始值 + Fourier 编码 # - freq_dim = 256: Fourier 特征维度 # Fourier 编码的数学： # pos_enc(x) = [sin(2π·f₁·x), cos(2π·f₁·x), ..., sin(2π·f₂₅₆·x), cos(2π·f₂₅₆·x)] # 其中 fᵢ = 1/10000^(i/128) 是频率 为什么需要 Fourier 编码？ 因为 (x, y, heading) 是低维连续值，直接输入 Transformer 表达能力不够。Fourier 编码把低维映射到高维空间，让模型更容易学习非线性关系。\n第 4 步：MOT——联合注意力层 源文件：src/simwam/models/wan22/mot.py（24KB）\n4.1 核心思想 MOT（Mixture-of-Transformers）是 SimWAM 的\u0026quot;胶水层\u0026quot;——它让 Video DiT 和 Action DiT 共享注意力接口，但通过掩码隔离信息流：\n传 S 统 i V → m V → → M i W i i d 信 A d 但 同 x e 息 M e 用 时 t o 自 o 掩 允 u 由 的 码 许 r t 流 t 阻 两 e o 动 I o 止 者 - k ， s k 都 o e A o e A 看 f n c l n c 到 - s t a s t 当 T i t i 前 r 和 o e 和 o 观 a n d n 测 n A A s c 会 M c t t f t 看 O t o o o i 到 T i k k r o 未 ： o e e m n 来 n n n e 帧 s s r t t s o o 看 ： k k 到 e e 未 n n 来 s s 帧 混 仍 t 在 然 o 一 拼 k 起 在 e 做 一 n 联 起 s 合 做 注 注 意 意 力 力 4.2 掩码矩阵的构建 # src/simwam/models/wan22/mot.py def build_isolated_mask(video_len, action_len, obs_len): \u0026#34;\u0026#34;\u0026#34; 构建 isolated attention mask： - 观测 tokens：所有 token 都能看到 - 未来帧 tokens：只有 Video DiT 能看到 - 动作 tokens：只有 Action DiT 能看到 \u0026#34;\u0026#34;\u0026#34; total_len = obs_len + video_len + action_len # 初始化全 1 矩阵（允许所有注意力） mask = torch.ones(total_len, total_len, dtype=torch.bool) # 观测 tokens（前 obs_len 个）：所有 token 都能看到 mask[:, :obs_len] = True # 未来帧 tokens（obs_len 到 obs_len+video_len）： # - 只能被自己（Video DiT）看到 # - 不能被动作 tokens 看到 mask[obs_len+video_len:, obs_len:obs_len+video_len] = False # 动作→未来：禁止 # 动作 tokens（最后 action_len 个）： # - 只能被自己（Action DiT）看到 # - 不能被未来帧 tokens 看到 mask[obs_len:obs_len+video_len, obs_len+video_len:] = False # 未来→动作：禁止 return mask 4.3 推理时的关键优化 # 推理时：直接扔掉 Video DiT 部分，只跑 Action DiT # 因为动作 tokens 从来不依赖未来帧 tokens # 所以不需要生成未来帧，大幅减少计算量 # 训练时：两个 DiT 都跑，联合优化 # 推理时：只跑 Action DiT，直接输出轨迹 # → 这就是\u0026#34;训练时借力、推理时独立\u0026#34; 第 5 步：SimWAM 主模型——联合前向传播 源文件：src/simwam/models/wan22/simwam.py（53KB）\n5.1 模型初始化流程 # src/simwam/models/wan22/simwam.py class SimWAM(nn.Module): @classmethod def from_wan22_pretrained(cls, model_id, ...): \u0026#34;\u0026#34;\u0026#34; 从 Wan2.2 预训练权重初始化 SimWAM。 步骤： 1. 加载 Wan2.2 Video DiT 权重（视频生成 backbone） 2. 加载 Wan2.2 Video VAE（把图像压缩到 latent） 3. 加载 T5 文本编码器（编码导航指令） 4. 初始化 ActionDiT（从预训练权重或随机初始化） 5. 构建 MOT 联合注意力层 \u0026#34;\u0026#34;\u0026#34; # 1. Video DiT video_dit = WanVideoDiT.from_pretrained(model_id) # 2. Video VAE video_vae = WanVideoVAE.from_pretrained(model_id) # 3. T5 文本编码器 text_encoder = WanVideoTextEncoder.from_pretrained(tokenizer_model_id) # 4. Action DiT action_dit = ActionDiT(**action_dit_config) if action_dit_pretrained_path: action_dit.load_state_dict(torch.load(action_dit_pretrained_path)) # 5. MOT（共享注意力接口） mot = MOT(video_dit, action_dit, ...) return cls(video_dit, action_dit, video_vae, text_encoder, mot, ...) 5.2 训练时的前向传播 # src/simwam/models/wan22/simwam.py def forward(self, images, trajectories, text_input, ...): \u0026#34;\u0026#34;\u0026#34; 训练时的完整前向传播。 输入： - images: 当前帧 + 未来帧的图像 (B, T, C, H, W) - trajectories: 专家轨迹 (B, 50, 3) # 50 路点 × (x, y, heading) - text_input: 导航指令的 token IDs 输出： - video_loss: 未来帧预测损失 - action_loss: 轨迹生成损失 \u0026#34;\u0026#34;\u0026#34; # 1. VAE 编码：图像 → latent video_latents = self.video_vae.encode(images) # (B, T, C\u0026#39;, H\u0026#39;, W\u0026#39;) # 2. 文本编码：导航指令 → embedding text_emb = self.text_encoder(text_input) # (B, seq_len, 4096) # 3. 采样时间步 t（Flow Matching） t = torch.rand(B, device=devices[0]) # 4. 构造噪声轨迹（Flow Matching 插值） noise = torch.randn_like(trajectories) noisy_traj = (1 - t) * noise + t * trajectories # 线性插值 # 5. 联合前向传播（MOT + isolated mask） video_pred, action_pred = self.mot( video_latents=video_latents, noisy_traj=noisy_traj, text_emb=text_emb, t=t, mask=isolated_mask, # ⭐ 关键：隔离掩码 ) # 6. 计算损失 video_loss = F.mse_loss(video_pred, video_latents) action_loss = F.mse_loss(action_pred, trajectories - noise) # 速度场 total_loss = self.lambda_video * video_loss + self.lambda_action * action_loss return total_loss, video_loss, action_loss 对应公式：\n$$\\mathcal{L} = \\lambda_{\\text{video}} \\cdot \\text{MSE}(v_{\\text{video}}, v_{\\text{target}}) + \\lambda_{\\text{action}} \\cdot \\text{MSE}(v_{\\text{action}}, v_{\\text{target}})$$其中 $v_{\\text{target}} = x_1 - x_0$（正确速度），默认 $\\lambda_{\\text{video}} = \\lambda_{\\text{action}} = 1.0$（等权重）。\n5.3 推理时的轨迹生成 # src/simwam/models/wan22/simwam.py @torch.no_grad() def generate_trajectory(self, images, text_input, num_steps=10): \u0026#34;\u0026#34;\u0026#34; 推理时：只用 Action DiT，不需要 Video DiT。 流程： 1. VAE 编码当前帧 2. T5 编码导航指令 3. 从高斯噪声初始化轨迹 4. 10 步欧拉积分 → 干净轨迹 \u0026#34;\u0026#34;\u0026#34; # 1. 编码当前帧 obs_latent = self.video_vae.encode(images[:, :1]) # 只编码当前帧 # 2. 编码导航指令 text_emb = self.text_encoder(text_input) # 3. 初始化噪声轨迹 traj = torch.randn(B, 50, 3, device=device) # 50 路点 × 3 # 4. 10 步欧拉积分 for i in range(num_steps): t = i / num_steps # Action DiT 预测速度场 v_pred = self.action_dit(traj, t, text_emb, obs_latent) # 欧拉步 traj = traj + v_pred * (1.0 / num_steps) return traj # (B, 50, 3) # 最终轨迹 注意： 推理时完全没有 Video DiT——因为动作 token 从来不依赖未来帧 token，所以不需要生成未来帧。这就是 SimWAM 推理速度快的原因。\n第 6 步：FlowGRPO 训练循环 源文件：src/simwam/trainer_grpo.py（41KB）\n6.1 训练器核心逻辑 # src/simwam/trainer_grpo.py class SimWAMGRPOTrainer: def train(self): for step in range(self.max_steps): # ===== Phase 1: 采样（Rollout）===== # 从当前策略采样 G=8 条轨迹 rollout_batch = self.sample_rollouts() # 计算每条轨迹的奖励 rewards = self.reward(rollout_batch) # NAVSIM PDM 分数 # 计算组内归一化 advantage advantages = self.compute_advantages(rewards) # advantage_i = (r_i - mean) / (std + eps) # ===== Phase 2: 训练（Update）===== # 复用每批 rollout 做 num_inner_epochs 次更新 for inner_epoch in range(self.num_inner_epochs): self.update_policy(rollout_batch, advantages) 6.2 SDE 采样——FlowGRPO 的核心 # src/simwam/trainer_grpo.py def sample_rollouts(self): \u0026#34;\u0026#34;\u0026#34; FlowGRPO 的 SDE 采样：在确定性 ODE 上加随机扰动， 让模型探索不同的轨迹方向。 关键：只在最后 3 步加扰动（k ∈ {7, 8, 9}）， 因为靠近输出端的扰动对最终轨迹影响最直接。 \u0026#34;\u0026#34;\u0026#34; # 1. 初始化噪声轨迹 traj = torch.randn(B, 50, 3) # 2. 10 步欧拉积分，最后 3 步加 SDE 扰动 for k in range(10): t = k / 10 # Action DiT 预测速度场 v_pred = self.model.action_dit(traj, t, ...) # ODE 步 traj = traj + v_pred * (1.0 / 10) # 如果是最后 3 步（k ∈ {7, 8, 9}），加 SDE 扰动 if k in [7, 8, 9]: # 低频余弦基扰动（不是独立路点噪声） noise = self.compute_low_freq_noise(traj) # 6 个余弦基 score_correction = self.compute_score_correction(traj, t) traj = traj + sigma * noise + 0.5 * sigma**2 * score_correction return traj 对应公式：\n$$x_{k+1} = x_k + v_\\theta(x_k, t, c) \\cdot \\Delta t + \\sigma_{\\text{noise}} \\cdot \\text{noise} + \\frac{1}{2}\\sigma_{\\text{noise}}^2 \\cdot \\text{score\\_correction}$$为什么只在最后 3 步加扰动？ 论文实验发现：靠近输出端的扰动对最终轨迹影响最直接。早期步的扰动会被后续步\u0026quot;吸收\u0026quot;，效果不明显。\n为什么用低频余弦基？ 独立路点噪声会产生高频抖动（第 3 个路点突然拐一下）。低频余弦基（6 个基）只在\u0026quot;整体偏左/偏右\u0026quot;\u0026ldquo;整体加速/减速\u0026quot;这几个低维模态上探索——和人类驾驶的直觉一致。\n6.3 PDM 奖励计算 # src/simwam/datasets/navsim/pdm_reward.py class NavSimPDMReward: def __call__(self, trajectories): \u0026#34;\u0026#34;\u0026#34; 计算 NAVSIM PDM 分数。 PDMS = NC × DAC × (5·TTC + 5·EP + 2·C) / 12 NC: 无责碰撞（0/0.5/1） DAC: 可行驶区域（0/1） TTC: 碰撞时间（0/1） EP: 前进进度（0-1 连续） C: 舒适度（0/1） \u0026#34;\u0026#34;\u0026#34; rewards = [] for traj in trajectories: # 把轨迹转换成 NAVSIM 格式 navsim_traj = self.convert_to_navsim(traj) # 调用 NAVSIM 评测器 pdms = self.pdm_scorer(navsim_traj) rewards.append(pdms) return torch.tensor(rewards) 6.4 Advantage 计算 # src/simwam/trainer_grpo.py def compute_advantages(self, rewards): \u0026#34;\u0026#34;\u0026#34; 组内归一化：把奖励翻译成 advantage。 A_i = (r_i - μ) / σ 其中 μ = mean(rewards), σ = std(rewards) + 1e-4 \u0026#34;\u0026#34;\u0026#34; mean = rewards.mean() std = rewards.std() + 1e-4 advantages = (rewards - mean) / std # 截断到 ±adv_clip_max advantages = advantages.clamp(-self.adv_clip_max, self.adv_clip_max) return advantages 对应公式：\n$$A_i = \\frac{r_i - \\mu}{\\sigma + 10^{-4}}, \\qquad A_i \\in [-5, 5]$$为什么需要 advantage？ 纯奖励 $r_i$ 的尺度会漂移（今天 PDM 打 0.8，明天整体打 0.9）。只看组内相对好坏，就能甩开这些波动，只关注\u0026quot;这组里哪个更好\u0026quot;这个稳定信号。\n6.5 PPO 更新 # src/simwam/trainer_grpo.py def update_policy(self, rollout_batch, advantages): \u0026#34;\u0026#34;\u0026#34; PPO 风格的策略更新。 核心：用 ratio = π_new / π_old 控制更新幅度， 加 clip 防止一步更新太猛。 \u0026#34;\u0026#34;\u0026#34; # 计算新模型下的 log_prob log_probs_new = self.model.compute_log_prob(rollout_batch) # PPO ratio ratio = torch.exp(log_probs_new - rollout_batch.log_probs_old) # PPO clipped loss surr1 = ratio * advantages surr2 = torch.clamp(ratio, 1 - self.ppo_clip_range, 1 + self.ppo_clip_range) * advantages loss = -torch.min(surr1, surr2).mean() # 反向传播（只更新 LoRA 参数） loss.backward() self.optimizer.step() self.optimizer.zero_grad() 对应公式：\n$$L = -\\mathbb{E}\\left[\\min\\left(r_i \\cdot A_i, \\;\\text{clip}(r_i, 1-\\varepsilon, 1+\\varepsilon) \\cdot A_i\\right)\\right]$$其中 $r_i = \\frac{\\pi_{\\text{new}}(a|s)}{\\pi_{\\text{old}}(a|s)}$ 是新旧策略的概率比，$\\varepsilon = 0.02$ 是 clip 范围。\n6.6 LoRA 微调 # src/simwam/models/wan22/lora.py class LoRALinear(nn.Module): \u0026#34;\u0026#34;\u0026#34; 低秩适配器：只训练 A 和 B 两个小矩阵， 冻结原始权重 W。 W\u0026#39; = W + (α/r) · B @ A \u0026#34;\u0026#34;\u0026#34; def __init__(self, in_features, out_features, r=16, alpha=32.0): self.lora_A = nn.Linear(in_features, r, bias=False) self.lora_B = nn.Linear(r, out_features, bias=False) self.alpha = alpha self.scaling = alpha / r # = 32/16 = 2 def forward(self, x): # 原始输出 + LoRA 增量 return F.linear(x, self.weight) + self.scaling * self.lora_B(self.lora_A(x)) GRPO 训练时的冻结策略：\n模块 训练状态 原因 Video DiT 完全冻结 不需要修改视频生成能力 ActionDiT self-attention 加 LoRA 需要学习新的注意力模式 ActionDiT cross-attention 加 LoRA 需要学习新的跨模态交互 ActionDiT FFN 冻结 FFN 通常不需要微调 输出头 全参数训练 输出维度小，直接训练更高效 第 7 步：评测流程 7.1 评测入口 # experiments/navsim/run_eval_navsim.sh CKPT=./runs/grpo/.../checkpoints/weights/step_2000.pt \\ TASK=navsim_grpo_action_pdm_384x672_flowgrpo_lora \\ NPROC_PER_NODE=8 \\ bash experiments/navsim/run_eval_navsim.sh 7.2 评测脚本核心逻辑 # experiments/navsim/eval_navsim.py def evaluate(checkpoint_path, task_config): # 1. 加载模型 model = load_model(checkpoint_path) # 2. 加载 NAVSIM navtest 数据集 test_dataset = NavSimDataset(split=\u0026#34;navtest\u0026#34;) # 3. 对每个场景生成轨迹 for scene in test_dataset: traj = model.generate_trajectory(scene.images, scene.navigation) # 4. 用 NAVSIM PDM 评测器打分 pdms = pdm_scorer(traj, scene) # 5. 保存结果 results.append({ \u0026#34;scene\u0026#34;: scene.token, \u0026#34;trajectory\u0026#34;: traj, \u0026#34;nc\u0026#34;: pdms.nc, \u0026#34;dac\u0026#34;: pdms.dac, \u0026#34;ep\u0026#34;: pdms.ep, \u0026#34;ttc\u0026#34;: pdms.ttc, \u0026#34;comfort\u0026#34;: pdms.comfort, \u0026#34;pdms\u0026#34;: pdms.score, }) # 6. 汇总统计 avg_pdms = np.mean([r[\u0026#34;pdms\u0026#34;] for r in results]) print(f\u0026#34;PDMS: {avg_pdms:.1f}\u0026#34;) 附录 A｜Flow Matching 数学推导 A.1 速度场从哪来：直线假设 + 求导 我们要求中间状态 $x_t$ 满足三个朴素条件：\n$t=0$（还没走）时必须正好是噪声：$x_0$； $t=1$（走完了）时必须正好是轨迹：$x_1$； 中间平滑过渡——最简单的假设就是线性（直线）。 设直线 $x_t = a + b\\,t$（$a,b$ 是待定系数），代条件 1 和 2：\n$t=0$：$x_0 = a + b\\cdot0 = a$，所以 $\\boxed{a = x_0}$； $t=1$：$x_1 = a + b\\cdot1$，把 $a=x_0$ 代入得 $\\boxed{b = x_1 - x_0}$。 把 $a,b$ 代回直线方程：\n$$ x_t = x_0 + t\\,(x_1 - x_0) = (1-t)\\,x_0 + t\\,x_1 $$逐项翻译：噪声 $x_0$ 的系数是 $(1-t)$，轨迹 $x_1$ 的系数是 $t$，两个系数加起来恒等于 1（$(1-t)+t=1$）。所以它本质是\u0026quot;噪声和轨迹的加权平均\u0026quot;，权重随进度条 $t$ 变化：$t=0$ 全是噪声，$t=1$ 全是轨迹，$t=0.5$ 各占一半。\n速度为什么等于 $x_1-x_0$？——求一次导就出来\n速度 = \u0026ldquo;位置随时间的变化率\u0026rdquo;，也就是对 $x_t$ 关于 $t$ 求导：\n$$ u_t = \\frac{d x_t}{dt} = \\frac{d}{dt}\\big((1-t)x_0 + t x_1\\big) = -x_0 + x_1 = x_1 - x_0 $$结论：直线轨迹上每个点的瞬时速度都是同一个常数 $x_1-x_0$（从噪声指向轨迹的那个方向）。\nA.2 训练目标：CFM 损失 网络 $v_\\theta(x_t,t,c)$ 的输入是\u0026quot;我在哪（$x_t$）、几点（$t$）、目标长啥样（$c$=prompt）\u0026quot;，输出是\u0026quot;我认为该往哪走（速度）\u0026quot;。\n训练时我们有成对的\u0026quot;噪声 + 它对应的真轨迹\u0026rdquo;，所以正确答案是现成的：就是 $x_1-x_0$。于是损失（衡量网络猜得有多离谱的\u0026quot;扣分器\u0026quot;）就是：\n$$ \\mathcal{L}_{\\mathrm{CFM}} = \\mathbb{E}\\Big[\\big\\| v_\\theta(x_t,t,c) - (x_1-x_0) \\big\\|^2\\Big] $$逐项翻译：\n$v_\\theta(x_t,t,c)$：网络猜的速度；$(x_1-x_0)$：正确的速度；两者相减再平方 = \u0026ldquo;猜偏了多少\u0026quot;。 $\\mathbb{E}[\\cdot]$：期望 = 拿很多很多对\u0026quot;噪声+轨迹\u0026quot;反复问，取平均。$\\mathbb{E}_{t\\sim U[0,1]}$ 表示还随机抽进度条位置 $t$（每个中间位置都练到）。 A.3 推理：ODE 积分 + Euler 步 学完速度后怎么生成一条轨迹？——从噪声出发，沿学到的速度一路走到底。这条路在数学上叫解 ODE（常微分方程）：\n$$ \\frac{dx}{dt} = v_\\theta(x,\\;t,\\;c), \\qquad x_0\\sim \\mathcal{N}(0,I),\\;\\; t:0\\to 1 $$\u0026ldquo;Euler 步\u0026quot;就是\u0026quot;泰勒展开的第一项\u0026rdquo;：\n$$ x_{t+\\Delta t} = x_t + v_\\theta(x_t,t,c)\\,\\Delta t $$翻译：新位置 = 旧位置 + 当前速度 × 一小段时间。SimWAM 推理时走 10 步（$\\Delta t = 0.1$），10 个 Euler 步进就得到最终轨迹。\n附录 B｜GRPO Advantage 数学 $$ \\mu = \\frac{1}{G}\\sum_{i=1}^{G} r_i, \\qquad \\sigma = \\sqrt{\\frac{1}{G}\\sum_{i=1}^{G}(r_i-\\mu)^2 + 10^{-4}} $$$$ A_i = \\frac{r_i - \\mu}{\\sigma} $$ $A_i\u003e0$ = 比组内平均好 → 提高这类轨迹的概率； $A_i\u003c0$ = 比组内平均差 → 降低这类轨迹的概率。 为什么 GRPO 不需要 Critic（价值网络）？\nPPO 的 advantage 是 $A(s,a)=Q(s,a)-V(s)$，需要额外训练一个价值网络 $V$ 当\u0026quot;基线\u0026rdquo;，参数量≈策略网络，显存翻倍。 GRPO 的妙招：拿\u0026quot;同组平均 $\\mu$\u0026ldquo;当基线、\u0026ldquo;同组标准差 $\\sigma$\u0026ldquo;当尺度——就像全班互相评分、按曲线给分，不需要老师预先定标准，也就省掉了整套 critic。 附录 C｜策略梯度推导 $$ \\nabla_\\theta \\mathcal{L} = -\\,\\mathbb{E}_\\tau\\Big[\\, A(\\tau)\\; \\nabla_\\theta \\log\\pi_\\theta(\\tau) \\Big] $$推导六步：\n目标：$J(\\theta) = \\mathbb{E}_{\\tau\\sim\\pi_\\theta}[R(\\tau)]$ 难点：$R(\\tau)$ 里面没有 $\\theta$，直接求导卡住 log 求导技巧：$\\frac{d\\pi_\\theta}{d\\theta} = \\pi_\\theta \\cdot \\frac{d}{d\\theta}\\log\\pi_\\theta$ 代入目标：$\\nabla_\\theta J = \\mathbb{E}_\\tau[R(\\tau)\\,\\nabla_\\theta\\log\\pi_\\theta(\\tau)]$ 用 advantage 替代奖励（减基线降方差） 转成 loss（加负号） 直觉：$A\u003e0$（好事）的轨迹，梯度方向让 $\\log\\pi_\\theta(\\tau)$ 增大（更可能再走出这条路）；$A\u003c0$（坏事）的轨迹，让它减小。\n🧭 总结：一图串起整个 SimWAM 到这里，正文的每一步、代码里的每个函数、附录里的每条公式都散落在各处。这一节把它们串成一条完整的因果链：\n沿着因果链走一遍（6 个节点） 节点 一句话 核心公式 为什么必须这么做 ① Flow Matching 训练速度场 $L=E\\|v_\\theta-(x_1-x_0)\\|^2$ 没有速度场就没有\u0026quot;生成\u0026quot;这回事 ② Isolated Mask 隔离信息流 Future ↔ Action: mask=False 训练时借力、推理时独立 ③ 联合训练 Video + Action 同时学 $L = \\lambda_v L_v + \\lambda_a L_a$ 两个专家共享运动先觉 ④ FlowGRPO SDE 采样 + PDM 奖励 $x_{k+1} = x_k + v\\Delta t + \\sigma n$ 用奖励信号微调策略 ⑤ PPO 更新 抬好压坏 $L = \\min(rA, \\text{clip}(r)A)$ 稳定更新 LoRA ⑥ 推理 只跑 ActionDiT 10 步欧拉积分 不需要生成未来帧 从三条主线理解 FM 生成（①②③）：先让模型学会\u0026quot;从噪声走到轨迹的速度\u0026rdquo;（①），用 Isolated Mask 隔离信息流（②），联合训练让运动先觉流入 ActionDiT（③）。 RL 对齐（④⑤）：用 SDE 采样探索不同轨迹方向（④），用 PDM 奖励打分，组内归一化算 advantage，PPO clip 稳定更新（⑤）。 推理（⑥）：扔掉 Video DiT，只跑 ActionDiT，10 步欧拉积分直接输出轨迹（⑥）。 三句话总串 Flow Matching 先教会两个专家\u0026quot;从噪声走到数据的速度\u0026rdquo;——这是生成能力的来源； Isolated Attention Mask 让 Video Expert 的运动先觉流入 Action Expert，但推理时不需要 Video Expert——这是\u0026quot;训练时借力、推理时独立\u0026quot;的关键； FlowGRPO 用 PDM 奖励 + SDE 采样 + LoRA 微调进一步提升轨迹质量，然后推理时只跑 ActionDiT——这就是 SimWAM 的全部逻辑闭环。 🔬 个人解读与思考 1. \u0026ldquo;训练时借力、推理时独立\u0026quot;的设计哲学 SimWAM 最聪明的地方在于：训练时让 Video Expert 和 Action Expert 联合学习，但推理时只用 Action Expert。这解决了 World Model 路线的核心痛点——推理时生成未来帧太慢。\n具体实现靠 Isolated Attention Mask：\n训练时：Video tokens 和 Action tokens 拼在一起做联合注意力，但掩码阻止 Action 看到未来帧 推理时：直接扔掉 Video DiT，只跑 Action DiT 这个设计的好处：\n训练效率：Video Expert 的运动先觉通过共享注意力流入 Action Expert 推理效率：不需要生成未来帧，大幅减少计算量 灵活性：Video Expert 可以替换成任何视频生成模型，Action Expert 独立可扩展 2. 低频余弦基扰动的精巧设计 FlowGRPO 在 RL 训练时不加独立路点噪声（会产生高频抖动），而是限制在 6 个余弦基上——相当于只在\u0026quot;整体偏左/偏右\u0026quot;\u0026ldquo;整体加速/减速\u0026quot;这几个低维模态上探索。\n这和人类驾驶的直觉一致：你不会突然在第 3 个路点拐一下，而是整体调整策略。论文原文：\n\u0026ldquo;Independent waypoint noise primarily introduces high-frequency jitter rather than meaningful maneuver diversity.\u0026rdquo;\n3. LoRA 微调的工程选择 GRPO 训练时只给 Action DiT 的注意力层加 LoRA（rank=16），冻结 FFN 和整个 Video DiT。这样做的好处：\n显存效率：只训练 ~5% 的参数 稳定性：LoRA 不会破坏预训练权重 可恢复性：如果 RL 训练崩了，可以回退到 SFT 权重 4. 和其他 WAM 的对比 DriveWAM DriveLaW SimWAM 视频 backbone 自训 自训 Wan2.2-5B（预训练） 推理时需要生成未来帧？ 是 是 否 推理延迟 高 高 低 PDMS 90.1 89.1 91.5 RL 后训练 无 无 FlowGRPO SimWAM 的核心优势：用预训练视频模型的运动先觉，但推理时不需要生成未来帧——既借了视频模型的力，又不背它的包袱。\n5. 闭环仍是短板 和 Qwen-Drive-1.0 一样，SimWAM 在 AlpaSim 闭环上（0.30 at-fault score）还不如 Alpamayo-R1（0.58）。可能原因：\n非反应式仿真训练的轨迹在闭环交互场景下缺乏\u0026quot;反应式\u0026quot;调整 PDM 奖励主要基于开环指标，对闭环交互的覆盖不足 未来可能需要引入闭环仿真训练 📝 一句话总结 SimWAM = Wan2.2-5B Video DiT（冻结）+ ActionDiT（可训）+ Isolated Attention Mask（训练时隔离、推理时独立）+ 联合 Flow Matching（SFT）+ FlowGRPO（RL 后训练，LoRA 微调）。训练时借视频模型的运动先觉，推理时只用动作专家直接输出轨迹——NAVSIM 91.5 PDMS，推理延迟远低于其他 WAM。\n参考 代码库：https://github.com/H-EmbodVis/SimWAM（Apache 2.0） 论文：SimWAM: A Simple World Action Model for End-to-End Autonomous Driving (arXiv:2608.07468) Wan2.2：Wan2.2-T2V-14B 开源视频模型 Flow Matching：Flow Matching for Generative Modeling (arXiv:2210.02747) GRPO：DeepSeekMath (arXiv:2402.03300) PPO：Proximal Policy Optimization Algorithms (arXiv:1707.06347) NAVSIM：NAVSIM benchmark for end-to-end driving ","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/simwam%E4%BB%A3%E7%A0%81%E5%AE%8C%E6%95%B4%E8%A7%A3%E8%AF%BB/","summary":"从 configs/model/simwam_navsim.yaml 第 1 行开始，逐层追踪 SimWAM 的完整逻辑链：两个专家怎么协作？Isolated Attention Mask 怎么实现训练时借力、推理时独立？联合 Flow Matching 训练的损失怎么算？FlowGRPO 的 SDE 采样、PDM 奖励、LoRA 微调怎么串起来？每段代码都标注了源文件路径。","title":"SimWAM 代码完整解读：从 Video DiT 到 Action DiT，从 SFT 到 FlowGRPO 的逐行拆解"},{"content":"入门篇：Flow-GRPO 到底是什么？（小白版） 如果你第一次听说「扩散模型」「Flow Matching」「GRPO」这些词，或者听到就头大——先读这一篇。 这一篇不讲任何代码，只帮你建立直觉。等脑子里有画面了，再进入下面的「先回答」和代码逐行拆解。\n0.1 一句话版 Flow-GRPO 是一种「训练」图像生成模型的算法：让一个已经会画图的模型（如 FLUX、SD3.5-M），通过「自己画图 → 自己打分 → 自己改进」的循环，越画越好——「好」的标准由你定（比如文字渲染得对不对、人喜不喜欢、组合合不合理）。\n论文：Flow-GRPO: Training Flow Matching Models via Online RL（arXiv:2505.05470，腾讯 ARC Lab）。\n它和传统做法的本质区别：\n传统做法（SFT 模仿学习） Flow-GRPO（在线强化学习） 照着「标准答案」模仿 没有标准答案，只有「好不好」的打分 训练集给什么就学什么 自己生成、自己试错、自己改进 上限 = 训练数据的质量 上限 = 你定义的奖励函数 一次性训完就结束 边采样边训练（在线 on-policy） 一句话概括动机：只让模型「会画」还不够，还要让它「画得好」——用打分信号告诉它该往哪个方向改进。\n0.2 先看思维导图 图里有 5 个分支：是什么、为什么、怎么生成（Flow Matching）、怎么改进（GRPO）、宏观流程。先让它们在脑子里占个位置，下面逐个展开。\n0.3 两个必须搞懂的核心概念 把名字拆开就是它的两个引擎：\n名字的一部分 对应概念 负责的事 Flow Flow Matching 「怎么生成图片」 GRPO 一种强化学习算法 「怎么改进模型」 概念一：从「噪声」到「图片」——扩散模型 \u0026amp; Flow Matching 今天几乎所有图像生成模型（Stable Diffusion、FLUX、Midjourney 背后的模型……）都长这样：\n生成图片 = 从一个纯噪声出发，一步步把它「整形」成一张清晰的图片。\n**扩散模型（Diffusion）**的做法是\u0026quot;一点点擦马赛克\u0026quot;：每一步去掉一点噪声，走 20~50 步。每一步用一个「噪声预测器」决定去掉多少。\nFlow Matching是扩散的\u0026quot;直连版\u0026quot;：不弯弯绕绕，而是在「纯噪声」和「图片」之间拉一条直线，训练模型学习这条线上的速度场（velocity field）——告诉它\u0026quot;在任意一个中间点，下一步该往图片方向走多少\u0026quot;。步数可多可少（大步走也行），所以更快、更适合反复采样的强化学习。\n小知识：FLUX 用的就是 Flow Matching 家族（rectified-flow）。本文训练的就是它。\n概念二：GRPO——「组内竞争」的强化学习算法 GRPO 全称 Group Relative Policy Optimization（组相对策略优化）。它解决一个更朴素的问题：\n图片没有\u0026quot;标准答案\u0026quot;，只有\u0026quot;打分数\u0026quot;。分数是相对才有意义的——同一个 prompt 生成的一组图里，谁比平均好、谁比平均差？\n过程长这样：\n同一个 prompt（如「一只戴红色帽子的狗」）让模型生成 一组 图片（默认 24 张）； 用奖励模型逐张打分（OCR 看字写没写对、PickScore 看人喜不喜欢、GenEval 看组合逻辑）； 组内归一化：算出这组的均值 μ、标准差 σ，然后 $$advantage_i = \\frac{r_i - \\mu}{\\sigma}$$比平均好 → advantage \u0026gt; 0 → 提高这类走法的概率；比平均差 → advantage \u0026lt; 0 → 降低。\n用 PPO 风格的损失做参数更新，加 clip 防止一步更新太猛。 为什么\u0026quot;相对比较\u0026quot;这么重要？因为奖励模型的分数尺度、分布会漂移（今天 OCR 打 0.8，明天可能整体打 0.9）。只看组内相对好坏，就能甩开这些波动，只关注\u0026quot;这组里哪个更好\u0026quot;这个稳定信号。\n0.4 概念关系图：五个名词怎么拼起来 把上面串起来：\n蓝色（生成器）：扩散模型 → Flow Matching → 具体模型 FLUX。负责\u0026quot;怎么生成\u0026quot;； 橙色（裁判）：奖励模型。负责\u0026quot;什么算好\u0026quot;； 紫色（学习算法）：GRPO → advantage → PPO Loss。负责\u0026quot;怎么改\u0026quot;。 三者合起来就是一个完整的 Flow-GRPO 训练循环。\n0.5 和自动驾驶 / 世界模型有什么关系？ 你在这个博客里读过的很多 VLA（视觉语言行动模型）工作，底层就是这套组合拳的变体：\nDiffusionDrive / 扩散策略（Diffusion Policy）：用扩散/Flow Matching 做动作生成——把\u0026quot;动作轨迹\u0026quot;当作\u0026quot;要生成的图片\u0026quot;，把噪声一步步整形成一条可执行的轨迹； AlphaDrive-GRPO 等：把 GRPO 直接用在驾驶策略上——同一段场景生成多条动作轨迹，让**奖励模型（安全、舒适、任务达成）**打分，组内比较后改进策略。 所以这篇讲的 Flow-GRPO 不是\u0026quot;只跟画图有关\u0026quot;的孤立技巧：「生成模型 + 奖励信号 + 组内竞争」这套配方，就是 2025 年驾驶/具身领域最主流的强化学习范式之一。 读懂了它，等于读懂了那一批工作的共同骨架。\n0.6 接下来怎么读？ 后面内容沿着一条执行主线走：\n初 始 化 → 采 样 （ 生 成 图 片 + 记 l o g _ p r o b ） → 打 r e w a r d → 组 内 算 a d v a n t a g e → 训 练 （ 构 造 计 算 图 + P P O l o s s ） → b a c k w a r d → 回 到 采 样 建议带着入门篇建立的三个\u0026quot;心智锚点\u0026quot;去读：\n采样阶段 = Flow Matching 的 SDE 生成（对应入门篇概念一）； advantage = 组内归一化（对应概念二第 3 步）； 训练阶段 = 让高分走法概率上升（对应概念二第 4 步）。 先回答：Flow-GRPO 是什么？train_flux_fast.py 是什么？ 这是一份可运行的代码仓库 Flow-GRPO 不是一篇只能读的论文，而是一份完整的开源代码仓库，代码就在 flow_grpo/ 目录下：\ntrain_flux_fast.py 和 train_flux.py 有什么区别？先厘清三个\u0026quot;步数\u0026quot; 读代码前先分清三个容易混淆的步数概念，否则后面全是坑：\n概念 含义 取值 num_steps 训练时完整去噪的步数（每次采样走几步生成一张图） SD3 系默认 10、FLUX 系默认 6 eval_num_steps 推理/评测时的步数（只用于 eval 函数） 通常 40 或 50 sde_window_size fast 版参与梯度计算的窗口宽度（分位数） 各配置不同：3、2、4 都有，没有统一默认值 ⚠️ \u0026ldquo;40 步\u0026quot;是 eval_num_steps（评测步数），不是训练步数。 下面的 fast vs 基础版对比里，基础版\u0026quot;参与梯度计算的步数 = 40\u0026quot;指的是评测/长时间步场景，不要和训练采样（10 步）搞混。\n很多文件名带 _fast 后缀（train_flux_fast.py、flux_pipeline_with_logprob_fast.py）。它们和基础版训练逻辑完全一样，只有一处关键区别——采样时记录梯度的 timestep 数量：\n基础版 train_flux.py fast 版 train_flux_fast.py 导入的采样器 flux_pipeline_with_logprob.py flux_pipeline_with_logprob_fast.py 参与梯度计算的步数 全部 num_steps（训练采样步） 只有 sde_window_size 步（随机窗口） 训练步数 num_train_timesteps int(num_steps × timestep_fraction) config.sample.sde_window_size（main() 里第 340 行） 窗口外如何采样 每一步都是 SDE 窗口外用确定性 ODE（noise_level=0，不记梯度） 计算图大小 全部步展开 → 显存爆炸 只展开 window_size 步 → 显存小、速度快 log_prob 记录 每一步都记录 只在窗口内记录 采样返回 image, latents, image_ids, text_ids, log_probs 额外多返回 timesteps 一个具体的数值例子（geneval_flux_fast 配置）：num_steps=6、sde_window_size=3、sde_window_range=(0, 3)。每次采样走 6 步去噪生成图，但只有随机选的 3 步（例如第 2、3、4 步）进计算图参与梯度。\n核心代码对比（diffusers_patch/ 下的两个文件）：\n# flux_pipeline_with_logprob.py（基础版）：每个 timestep 都记录 for i, t in enumerate(timesteps): # num_steps 步全走 SDE latents, log_prob, _, _ = sde_step_with_logprob( scheduler, noise, t, latents, noise_level=noise_level, ...) all_latents.append(latents) # 每一步都进计算图 all_log_probs.append(log_prob) # flux_pipeline_with_logprob_fast.py（fast 版）：只在窗口内记录 sde_window = (start, start + sde_window_size) # 随机选 window_size 步窗口 for i, t in enumerate(timesteps): cur_noise_level = noise_level if (窗口起点 \u0026lt;= i \u0026lt; 窗口终点) else 0 latents, log_prob, _, _ = sde_step_with_logprob(..., noise_level=cur_noise_level) if 窗口起点 \u0026lt;= i \u0026lt; 窗口终点: # 只有窗口内的步 all_latents.append(latents) # 进计算图 all_log_probs.append(log_prob) 为什么这样省显存？ 因为训练时 loss.backward() 要沿着计算图回传，计算图里每多一个 timestep 就要多存一份 DiT 的中间激活值（Flux 有 12B 参数，一份激活就有几十 GB）。基础版把全部步展开，直接 OOM；fast 版只展开 window_size 步，显存可控。\n为什么只用几步也够用？ 因为 SDE 是马尔可夫的：第 j 步的 latent 只由第 j-1 步决定。虽然每次 backward 只回传窗口内的梯度，但模型参数是共享的——只要每个 epoch 随机窗口滑过不同位置（sde_window_range 控制起点范围），长期看每个 timestep 都会被训练到，是一种\u0026quot;逐步轮流覆盖\u0026quot;的均匀采样。\n一句话总结：fast 版 = 基础版 + SDE 窗口，牺牲一点点梯度完整性，换来 10~20 倍显存节省。 代码里 _fast 的后缀就是这个意思。\n为什么从 train_flux_fast.py 开始？ train_flux_fast.py 是整个框架的入口（main 函数所在），相当于一辆车的发动机舱。 其它文件都是\u0026quot;零件\u0026rdquo;：\nconfig/*.py 是\u0026quot;仪表盘\u0026quot;——设定怎么跑（超参数） flow_grpo/rewards.py 是\u0026quot;油门刹车\u0026quot;——告诉模型好不好 flow_grpo/stat_tracking.py 是\u0026quot;大脑\u0026quot;——把 reward 变成学习信号 advantage diffusers_patch/*.py 是\u0026quot;变速箱\u0026quot;——模型内部怎么一步步生成图片 而 train_flux_fast.py 负责把所有这些零件组装起来，按正确的顺序调用。读懂了它，就抓住了整个框架的主线；其它文件都是被它调用、服务于它的。\n具体来说，这份 Python 文件（925 行）只干一件事：循环执行「采样 → 打 reward → 算 advantage → 算 loss → 反向传播」这五个动作，直到模型变好。 本文接下来就顺着这个循环，一行一行拆开看。\n本文的讲解方式 不从概念讲起，而是从代码的入口出发，沿着执行路径一步一步深入。\n我们追踪一辆\u0026quot;数据快车\u0026quot;：\nt r a i n _ f l u x _ f a s t . p y → 初 始 化 → 采 样 阶 段 → r e w a r d → a d v a n t a g e → 训 练 阶 段 → l o s s → b a c k w a r d → o p t i m i z e r → 回 到 采 样 每到一个关键节点，我都会：\n标注代码位置（文件名 + 行号） 说明\u0026quot;这个函数接收什么、输出什么\u0026quot; 解释背后的数学/算法动机 配逻辑分支图 第 0 步：先理解总图 整个框架只有两个大阶段，反复交替：\n阶段 发生位置 是否记录梯度 产出 采样阶段 (SAMPLE) train_flux_fast.py:610-712 torch.no_grad() ❌ 图片 + log_prob_old + latent 轨迹 训练阶段 (TRAIN) train_flux_fast.py:803-917 requires_grad=True ✅ loss → backward → optimizer 这是在线（on-policy）强化学习的标志：采样和训练用同一组模型参数。采样时你的行为（policy）是什么，训练时就优化那个行为。\n第 1 步：入口 \u0026amp; 初始化 (train_flux_fast.py:329-565) 1.1 入口 # train_flux_fast.py:329 def main(_): config = FLAGS.config # 加载 config/base.py 中的默认参数 1.2 关键初始化 FSDP 配置 (train_flux_fast.py:350-358):\naccelerator = Accelerator( gradient_accumulation_steps=config.train.gradient_accumulation_steps * num_train_timesteps, ) 注意 num_train_timesteps = config.sample.sde_window_size（train_flux_fast.py:339-342，值因配置而异，如 3 / 2 / 4）——梯度累积步数乘以 window_size，因为窗口内的每一步 DiT 前向都算一次梯度累积，一个训练微批次（iter）内部每个 timestep 都要累积一次梯度、最后合起来做一次 optimizer 更新。\nLoRA 注入 (train_flux_fast.py:414-441):\ntransformer_lora_config = LoraConfig( r=64, lora_alpha=128, # LoRA 秩和缩放 target_modules=[\u0026#34;attn.to_k\u0026#34;, \u0026#34;attn.to_q\u0026#34;, ...] # 所有 attention + FFN 层 ) pipeline.transformer = get_peft_model(pipeline.transformer, transformer_lora_config) 只有 LoRA 参数可训练，Flux 的原始权重全部冻结。\n那到底在更新什么？（重要） train_flux_fast.py:383 有一个前提：\npipeline.transformer.requires_grad_(not config.use_lora) # use_lora=True → 全冻结 use_lora=True 时整个 transformer 的原始权重 requires_grad=False，optimizer（第 466 行）只接收 transformer_trainable_parameters（第 444 行过滤出的 requires_grad 参数）＝只有 LoRA 的 A/B 矩阵。所以 backward() 的梯度一路沿速度场网络回传，最终只落在 LoRA 参数上——Flux 的 12B 原始权重整个训练过程一个数都不变。\n那\u0026quot;生成能力\u0026quot;是怎么被改的？W = W0 + (α/r)·B·A：LoRA 的 A/B 微调 → 每层 attention/FFN 输出跟着变 → 同一个 DiT 网络输出的速度场 v_θ 方向被悄悄改了 → 采样出的图片/轨迹就更符合 reward。你可以把整个 Flow-GRPO 理解成：通过只动 LoRA，把\u0026quot;去噪轨迹上的每一步速度\u0026quot;往 reward 期望的方向推。\nEMA 包装器（flow_grpo/ema.py，train_flux_fast.py:446-446）：\nema = EMAModuleWrapper(transformer_trainable_parameters, decay=0.9, update_step_interval=8, ...) EMA = 指数滑动平均（Exponential Moving Average）：给 LoRA 参数额外维护一套\u0026quot;影子参数\u0026quot;，按 shadow += (1-decay)·(param - shadow) 缓慢追随实时参数。它的角色：\n训练中：optimizer 更新的是实时参数，EMA 影子每 8 步平均一次，decay=0.9 → 大约把最近 20×8=160 步平均掉（ema.step train_flux_fast.py:917）； 评测/存盘时：copy_ema_to（eval 第 222 行 / save 第 324 行）把平滑后的影子参数临时拷回模型再跑评估/存权重，因为训练中的参数抖，平均后更稳、reward 曲线更光滑；跑完 copy_temp_to（第 311 行）还原回实时参数。 一句话：实时参数负责\u0026quot;冲\u0026quot;，EMA 影子负责\u0026quot;记\u0026quot;——评测和存盘用的是记下来的稳定版本。\n对应公式（LoRA 注入）：\n$$ h = W_0 x + \\frac{\\alpha}{r}\\,B A\\, x $$其中 $W_0\\in\\mathbb{R}^{d\\times d}$ 是冻结的原权重，$A\\in\\mathbb{R}^{r\\times d}$、$B\\in\\mathbb{R}^{d\\times r}$ 是两个可训练的低秩矩阵（$r=64\\ll d$），缩放系数 $\\frac{\\alpha}{r}=\\frac{128}{64}=2$。所以\u0026quot;全量更新 $d^2$ 个参数\u0026quot;被压缩成\u0026quot;只更新 $2dr$ 个参数\u0026quot;，这就是 r、alpha 这两个超参数对应的数学。\nReward 函数工厂 (train_flux_fast.py:554-558):\nreward_fn = getattr(flow_grpo.rewards, \u0026#39;multi_score\u0026#39;)(accelerator.device, config.reward_fn) 根据 config.reward_fn（如 \u0026quot;ocr\u0026quot;）动态加载对应的 reward 计算器。\nEMA 包装器 (train_flux_fast.py:446):\nema = EMAModuleWrapper(transformer_trainable_parameters, decay=0.9, update_step_interval=8) 对应公式（EMA 指数移动平均）：\n$$ \\theta_{\\mathrm{ema}} \\leftarrow \\text{decay}\\cdot\\theta_{\\mathrm{ema}} + (1-\\text{decay})\\cdot\\theta $$即每隔 8 步把当前参数 $\\theta$ 以 $0.1$ 的比例\u0026quot;混入\u0026quot;历史平均 $\\theta_{\\mathrm{ema}}$（decay=0.9），用滑动平均保留一个更稳的参数快照。\n第 2 步：采样阶段——生成图片 + 记录 log_prob_old 2.1 总体结构 # train_flux_fast.py:610-712 #################### SAMPLING #################### pipeline.transformer.eval() # 切到 eval 模式（BN/ dropout 行为不同） for i in range(config.sample.num_batches_per_epoch): prompts, prompt_metadata = next(train_iter) # 2.1.1 文本编码 (line 623-629) prompt_embeds, pooled_prompt_embeds = compute_text_embeddings(...) # 2.1.2 采样 (line 643-659) with torch.no_grad(): # ← 整个采样不记录任何梯度！ images, latents, image_ids, text_ids, log_probs, timesteps = pipeline_with_logprob( pipeline, prompt_embeds=prompt_embeds, num_inference_steps=config.sample.num_steps, # 训练采样步数（SD3 默认 10 / FLUX 默认 6） guidance_scale=config.sample.guidance_scale, sde_window_size=config.sample.sde_window_size, # 窗口宽，各配置不同（如 3/2/4） sde_window_range=config.sample.sde_window_range, sde_type=config.sample.sde_type, ) # 2.1.3 整理采样结果 (line 661-664) latents = torch.stack(latents, dim=1) # (B, num_steps+1, 16, 96, 96) log_probs = torch.stack(log_probs, dim=1) # (B, window_size) # 2.1.4 异步提交 reward 计算 (line 667) rewards = executor.submit(reward_fn, images, prompts, ...) 关键理解： pipeline_with_logprob 返回了 log_probs——这是旧模型（当前参数）下，生成这张图片的 SDE 轨迹中每一步的 log_prob。它们将作为 π_θ_old 的行为，用于后续的 PPO ratio 计算。\n逐步 log_prob vs 整条轨迹的总 log_prob（这里先厘清，后文 training 会用到）：\n假设 num_steps=10（然后 fast 版窗口挑了其中 window_size 步记录）。每步返回一个 log_prob，对应去噪轨迹上那一步的转移概率：\nx _ 0 - l o g p ( x _ 1 | x _ 0 ) - - \u0026gt; x _ 1 - l o g p ( x _ 2 | x _ 1 ) - - \u0026gt; - l o g p ( x _ 1 0 | x _ 9 ) - - \u0026gt; x _ 1 0 ( 图 ) 整条轨迹的总对数概率（马尔可夫连乘取 log）是各步之和： $$\\log\\pi_\\theta(\\tau) = \\sum_k \\log p_\\theta(x_{k+1}\\mid x_k)$$但 Flow-GRPO 代码里并不显式打这个总和——它把 log_prob 保持成逐 timestep 的向量（shape (B, window_size)），因为 PPO 的 ratio 也是逐 step 算、逐 step 用同一个 advantage 加权（见 5.4）。数学上\u0026quot;先求和得总 log，再取 exp 得总 ratio（连乘）\u0026ldquo;与\u0026quot;每一步单独算 ratio、分别加权\u0026quot;在梯度上等价，所以代码偷懒（也省显存）只保留逐步版本。\n2.2 pipeline_with_logprob 内部 (flux_pipeline_with_logprob_fast.py:23-213) 输 输 入 出 : : p i r m o a m g p e t s _ , e m a b l e l d _ s l , a t n e u n m t _ s i , n f i e m r a e g n e c _ e i _ d s s t , e p t s e = x 1 t 0 _ , i d s s d , e _ a w l i l n _ d l o o w g _ _ s p i r z o e b = s 3 , , a n l o l i _ s t e i _ m l e e s v t e e l p = s 0 . 7 SDE 窗口机制 (flux_pipeline_with_logprob_fast.py:136-142):\nif sde_window_size \u0026gt; 0: start = randint(sde_window_range[0], sde_window_range[1] - sde_window_size) end = start + sde_window_size sde_window = (start, end) # 例如 (2, 5)，表示只记录第 3-5 步的 log_prob else: sde_window = (0, len(timesteps) - 1) # 全部记录（最后一步接近图片，分布很尖，易精度溢出，故 -1） 去噪循环 (flux_pipeline_with_logprob_fast.py:158-202):\nfor i, t in enumerate(timesteps): # timesteps 共 10 个 # 决定当前步的噪声水平 if i \u0026lt; sde_window[0]: cur_noise_level = 0 # 窗口前：确定性 ODE elif i == sde_window[0]: cur_noise_level = noise_level # 窗口起点：开始加噪声 elif i \u0026lt; sde_window[1]: cur_noise_level = noise_level # 窗口内：SDE else: cur_noise_level = 0 # 窗口后：ODE # DiT 前向 (line 173-183) noise_pred = self.transformer( hidden_states=latents, timestep=timestep / 1000, guidance=guidance, pooled_projections=pooled_prompt_embeds, encoder_hidden_states=prompt_embeds, ... )[0] # SDE 步进 (line 185-192) latents, log_prob, prev_latents_mean, std_dev_t = sde_step_with_logprob( self.scheduler, noise_pred.float(), t, latents.float(), noise_level=cur_noise_level, sde_type=sde_type, ) # 仅在窗口内记录 (line 196-199) if i \u0026gt;= sde_window[0] and i \u0026lt; sde_window[1]: all_latents.append(latents) # 存储 latent 轨迹（供训练阶段复用） all_log_probs.append(log_prob) # 存储 log_prob_old all_timesteps.append(t) 2.3 SDE 一步的数学 sde_step_with_logprob (sd3_sde_with_logprob.py:39-171) 是理解整个框架的核心函数。它做了两件事：\n第 1 件事：计算下一步的均值（模型预测方向）\n# sd3_sde_with_logprob.py:109 (sde_type=\u0026#39;sde\u0026#39;) prev_sample_mean = sample * (1 + std_dev_t²/(2*sigma)*dt) + model_output * (1 + std_dev_t²*(1-sigma)/(2*sigma)) * dt 对应公式： 上面三行代码就是下面的均值公式（也就是附录/10.2 那个式子的代码形态）：\n$$ \\text{mean} = x_t\\Big(1+\\frac{\\sigma_{\\mathrm{noise}}^2}{2\\sigma}\\Delta t\\Big) + v_\\theta\\Big(1+\\frac{\\sigma_{\\mathrm{noise}}^2(1-\\sigma)}{2\\sigma}\\Big)\\Delta t $$其中 std_dev_t 就是 $\\sigma_{\\mathrm{noise}}=\\sqrt{\\frac{\\sigma}{1-\\sigma}}\\cdot\\text{noise\\_level}$，model_output 是 DiT 预测的速度 $v_\\theta$，dt 是相邻两个噪声水平的差 $\\Delta t=\\sigma_{prev}-\\sigma$。\n均值公式是怎么来的（推到 4 步） 这条均值公式不是拍脑袋定的，而是 Flow-GRPO（arXiv 2505.05470，附录 A）把确定性的概率流 ODE 转成\u0026quot;边际分布不变\u0026quot;的逆时 SDE 后，再做 Euler–Maruyama 离散化的结果。四个推导步骤：\n第 1 步｜为什么要引入 SDE。 GRPO 的 PPO ratio 需要采样轨迹的逐转移概率 $p_\\theta(x_{t+1}\\mid x_t)$：\n纯 ODE $\\mathrm{d}x_t = v_t\\,\\mathrm{d}t$ 是确定性的，算它的 log-prob 要估计 divergence（Jacobian 迹），昂贵且不稳； RL 需要探索随机性——确定性采样除初始 noise 外没有任何随机源，探索效率低（论文实验：噪声太小训练效率骤降）。 所以要把 ODE 变成边际密度 $p_t$ 在所有时刻都不变的 SDE，这样转移核是高斯、log-prob 直接可算。\n第 2 步｜用 Fokker–Planck 反解漂移。 令\u0026quot;一般 SDE 的边际演化\u0026quot;与\u0026quot;ODE 的边际演化\u0026quot;相等，即保证边际不变：\nODE 的边际（连续性/Liouville 方程）：$\\partial_t p_t = -\\nabla\\cdot[v_t\\,p_t]$ 一般 SDE $\\mathrm{d}x_t = f_{\\mathrm{SDE}}\\,\\mathrm{d}t + \\sigma_{\\mathrm{noise}}\\,\\mathrm{d}w$ 的边际（Fokker–Planck）：$\\partial_t p_t = -\\nabla\\cdot[f_{\\mathrm{SDE}}p_t] + \\tfrac12\\nabla^2[\\sigma_{\\mathrm{noise}}^2\\,p_t]$ 两者相等，用 $\\nabla^2(\\sigma^2 p)=\\sigma^2\\nabla\\cdot(p\\,\\nabla\\log p)$ 整理，得到漂移：\n$$ f_{\\mathrm{SDE}} = v_t - \\frac{\\sigma_{\\mathrm{noise}}^2}{2}\\nabla\\log p_t(x) $$（这正是经典概率流 ODE ⇄ score-SDE 的关系，Song et al. 2021。）\n第 3 步｜整流流下用速度场替换 score（关键一步）。 对整流流插值 $x_t=(1-t)x_0 + t x_1$，score 可用速度场闭式表示：\n$$ \\nabla\\log p_t(x) = -\\frac{x}{t} - \\frac{1-t}{t}\\,v_t(x) $$ 直觉来源：该插值的条件密度 $p_{t|0}=\\mathcal{N}((1-t)x_0,\\,t^2I)$，其 score 正比于 $-\\mathbb{E}[x_1\\mid x_t]/t$；而速度场 $v_t(x)=\\mathbb{E}[x_1-x_0\\mid x_t]$。两条式子消去 $\\mathbb{E}[x_1\\mid x_t]$ 即得该恒等式。\n第 4 步｜代回 + 欧拉离散化。 把上式代入 $f_{\\mathrm{SDE}} = v_t - \\frac{\\sigma_{\\mathrm{noise}}^2}{2}\\nabla\\log p_t$，得到逆时 SDE：\n$$ \\mathrm{d}x_t = \\Big[\\underbrace{v_t(x_t) + \\frac{\\sigma_{\\mathrm{noise}}^2}{2t}\\big(x_t + (1-t)\\,v_t(x_t)\\big)}_{\\text{漂移（均值方向）}}\\Big]\\mathrm{d}t + \\sigma_{\\mathrm{noise}}\\,\\mathrm{d}w $$再按 Euler–Maruyama 离散化（式 12）：\n$$ x_{t+\\Delta t} = x_t + \\left[v_\\theta + \\frac{\\sigma_{\\mathrm{noise}}^2}{2t}\\big(x_t + (1-t)v_\\theta\\big)\\right]\\Delta t + \\sigma_{\\mathrm{noise}}\\sqrt{-\\Delta t}\\,\\epsilon $$把方括号按 $x_t$ 与 $v_\\theta$ 的系数拆开（$t=\\sigma$），就是第 1 步那三行均值公式；高斯转移核方差为 $\\sigma_{\\mathrm{noise}}^2(-\\Delta t)$，即第 2 步的 log_prob 公式。\n各项含义一览：\n项 角色 $x_t$ 上的 $\\frac{\\sigma_{\\mathrm{noise}}^2}{2\\sigma}\\Delta t$ 补偿项：抵消 $\\frac{\\sigma^2}{2}\\nabla\\log p$ 对 $x_t$ 的拉拽（式 20 中 $-\\frac{\\sigma^2}{2}(-\\frac{x}{t})$），保边际 $v_\\theta$ 上的 $\\frac{\\sigma_{\\mathrm{noise}}^2(1-\\sigma)}{2\\sigma}\\Delta t$ 抵消 score 恒等式中 $-\\frac{1-t}{t}v_t$ 的贡献 $\\sigma_{\\mathrm{noise}}\\sqrt{-\\Delta t}\\,\\epsilon$ 扩散项；去噪时 $\\Delta t\u003c0$，取 $\\sqrt{-\\Delta t}$ 保证方差为正 $\\sigma_{\\mathrm{noise}}=\\sqrt{\\frac{\\sigma}{1-\\sigma}}\\cdot\\text{noise\\_level}$ 工程选择：注噪与当前\u0026quot;噪声/信号比\u0026quot;成正比（$t\\to0$ 接近图片时噪声消失，$t\\to1$ 接近纯噪时噪声最大） 一句话：均值公式 = \u0026ldquo;带 score 修正的逆时扩散 SDE\u0026rdquo; + \u0026ldquo;整流流下用速度场替换 score 的闭式恒等式\u0026rdquo; + \u0026ldquo;欧拉离散化\u0026rdquo;。它让确定性 Flow-ODE 变成一个能逐高斯核算 log_prob、且带探索随机性的 SDE，从而支撑 GRPO 的在线策略梯度。\n第 2 件事：从均值 + 噪声得到下一步 latent，并计算它的 log_prob\n# sd3_sde_with_logprob.py:111-119 if prev_sample is None: # 采样阶段 variance_noise = randn_tensor(...) prev_sample = prev_sample_mean + std_dev_t * √(-dt) * variance_noise # sd3_sde_with_logprob.py:121-133 # 高斯 log_prob 公式 log_prob = -((prev_sample.detach() - prev_sample_mean)²) / (2 * (std_dev_t * √(-dt))²) - log(std_dev_t * √(-dt)) - log(√(2π)) # sd3_sde_with_logprob.py:167: 除 batch 维外全部 mean 掉 log_prob = log_prob.mean(dim=tuple(range(1, log_prob.ndim))) # (B,) 每个样本一个标量 对应公式： 上面代码分别是\u0026quot;采样一步\u0026quot;和\u0026quot;算这一步的对数概率\u0026rdquo;：\n$$ x_{t+1} = \\text{mean} + \\sigma_{\\mathrm{noise}}\\sqrt{-\\Delta t}\\;\\varepsilon, \\qquad \\varepsilon\\sim\\mathcal{N}(0,I) $$$$ \\log p(x_{t+1}\\mid x_t) = -\\frac{\\|x_{t+1}-\\text{mean}\\|^2}{2\\sigma_{\\mathrm{noise}}^2(-\\Delta t)} - \\log\\big(\\sigma_{\\mathrm{noise}}\\sqrt{-\\Delta t}\\big) - \\log\\sqrt{2\\pi} $$最后一行 .mean(dim=...) 是把 latent 的每个维度（C×H×W）的 log_prob 平均成一个标量，对应公式里 $\\|\\cdot\\|^2$ 求和后再除以维度数。\n注意这里：prev_sample.detach()——在采样阶段 prev_sample 是刚随机采出来的，detach() 切断梯度。但如果你看训练阶段（稍后），情况会不同！\n第 3 步：Reward 阶段 (train_flux_fast.py:689-701) 异步 reward 计算完成后，取出结果：\n# train_flux_fast.py:696-701 rewards, reward_metadata = sample[\u0026#34;rewards\u0026#34;].result() sample[\u0026#34;rewards\u0026#34;] = { key: torch.as_tensor(value, device=accelerator.device).float() for key, value in rewards.items() } Reward 函数（flow_grpo/rewards.py）返回一个 dict：\n{ \u0026#34;avg\u0026#34;: [0.45, 0.78, ...], # 平均 reward \u0026#34;strict_accuracy\u0026#34;: [0, 1, ...], # 严格准确率 ... } 每条图片对应一个 reward 标量。\n第 4 步：跨 GPU 同步 + Advantage 计算 (train_flux_fast.py:747-796) 4.1 all_gather # train_flux_fast.py:747 gathered_rewards = {key: accelerator.gather(value) for key, value in samples[\u0026#34;rewards\u0026#34;].items()} 所有 GPU 的 reward 被收集到一起，形成 [total_GPU × batch_per_GPU] 长度的数组。\n4.2 PerPromptStatTracker (stat_tracking.py:50-116) # train_flux_fast.py:766 advantages = stat_tracker.update(prompts, gathered_rewards[\u0026#39;avg\u0026#39;]) 核心逻辑 (stat_tracking.py:64-92):\nprompts = np.array(prompts) # [样本1所属prompt, 样本2所属prompt, ...] rewards = np.array(rewards) # [样本1的reward, 样本2的reward, ...] for prompt in unique: # 收集该 prompt 的所有历史 reward self.stats[prompt].extend(prompt_rewards) # 追加到历史 buffer 对于 GRPO 模式（type='grpo'，stat_tracking.py:82-92）：\nfor prompt in unique: mean = np.mean(self.stats[prompt], axis=0) # μ: 该 prompt 的历史均值 std = np.std(self.stats[prompt], axis=0) + 1e-4 # σ: 该 prompt 的历史标准差 advantages[prompts == prompt] = (prompt_rewards - mean) / std 公式： $A_i = \\frac{r_i - \\mu_{history}}{\\sigma_{history}}$\n设计动机：\n同一个 prompt 的不同图片之间做比较（而不是跨 prompt） 等于问：针对这个 prompt，这张图比平均水平好多少？ 好（A\u0026gt;0）→ 提高这条路径概率；差（A\u0026lt;0）→ 降低 4.3 为什么不直接用 group 内统计？ 理论上 GRPO 是在一个 group（同一组采样）内做归一化。但在分布式训练中，同一 prompt 的不同采样可能分布在多张 GPU 上。PerPromptStatTracker 用跨越多个训练步的历史 reward来近似 group 统计，既解决了分布式同步问题，又让估计更稳定。\n4.4 Advantage 裁剪 # train_flux_fast.py:842-846 advantages = torch.clamp( sample[\u0026#34;advantages\u0026#34;][:, j], -config.train.adv_clip_max, # 默认 2.0 config.train.adv_clip_max, ) 防止个别 outlier advantage 主导训练。\n对应公式：\n$$ A_i^{\\text{clip}} = \\operatorname{clamp}\\big(A_i,\\; -c,\\; c\\big) = \\begin{cases} -c \u0026 A_i \u003c -c\\\\ A_i \u0026 -c \\le A_i \\le c\\\\ c \u0026 A_i \u003e c\\end{cases}, \\qquad c=\\texttt{adv\\_clip\\_max}=2.0 $$即把 A 超过 $[-2,2]$ 的部分\u0026quot;掐掉\u0026quot;，避免某一张图的极端高分/低分带偏整个梯度。\n第 5 步：训练阶段——计算图如何构造？梯度如何流动？(核心!) 这是整个文章最重要的部分。训练阶段的代码在 train_flux_fast.py:803-917。\n⚠️ 先澄清一个最常见的误解（你可能会一直嘀咕\u0026quot;不是要学速度场吗？\u0026quot;）： 训练阶段不是重新生成一条新轨迹，而是把采样阶段已经走好的\u0026quot;旧轨迹\u0026quot;放回新模型面前，重新给每个已发生步骤打分。 这里的模型加载时已经会画画了（速度场 v_θ 在 SFT/Flow Matching 预训练里就学好了）。Flow-GRPO 的\u0026quot;训练\u0026quot;不是学 v_θ 本身，而是用 LoRA 把 v_θ 的方向往 reward 期望的方向推一点。所以你在训练循环里看不到 v_target 这种监督——你看到的一堆 latent / log_prob / ratio，正是\u0026quot;旧轨迹在新模型下\u0026quot;的评分。整个训练代码里看不见\u0026quot;学习速度场\u0026quot;的固定 $$\\frac{\\partial v}{\\partial t}$$ 目标，因为速度场是现成的，改的是它上面插的 LoRA。\n5.1 总体结构 # train_flux_fast.py:803-917 #################### TRAINING #################### for inner_epoch in range(config.train.num_inner_epochs): pipeline.transformer.train() # 切到 train 模式 for i, sample in enumerate(samples_batched): for j in train_timesteps: # j 遍历窗口内 num_train_timesteps 步 with accelerator.accumulate(transformer): # 5.2 计算 log_prob_new (关键!) prev_sample, log_prob, prev_sample_mean, std_dev_t = compute_log_prob( transformer, pipeline, sample, j, config ) # 5.3 计算 loss ... # 5.4 反向传播 accelerator.backward(loss) optimizer.step() 5.2 compute_log_prob：计算图在这里构造 # train_flux_fast.py:186-218 def compute_log_prob(transformer, pipeline, sample, j, config): # 取出第 j 步的 latent（采样阶段存储的） packed_noisy_model_input = sample[\u0026#34;latents\u0026#34;][:, j] # (B, 16, 96, 96) # ===== DiT 前向传播（这是计算图的根节点）===== model_pred = transformer( # ← 这是 requires_grad=True 的 hidden_states=packed_noisy_model_input, timestep=sample[\u0026#34;timesteps\u0026#34;][:, j] / 1000, guidance=guidance, pooled_projections=sample[\u0026#34;pooled_prompt_embeds\u0026#34;], encoder_hidden_states=sample[\u0026#34;prompt_embeds\u0026#34;], ... )[0] # shape (B, 16*96*96, 1) # ===== SDE 步进 + log_prob 计算 ===== prev_sample, log_prob, prev_sample_mean, std_dev_t = sde_step_with_logprob( pipeline.scheduler, model_pred.float(), sample[\u0026#34;timesteps\u0026#34;][:, j], sample[\u0026#34;latents\u0026#34;][:, j].float(), prev_sample=sample[\u0026#34;next_latents\u0026#34;][:, j].float(), # ← 传入旧轨迹的 next_latent! noise_level=config.sample.noise_level, sde_type=config.sample.sde_type, ) return prev_sample, log_prob, prev_sample_mean, std_dev_t 对应公式： 这一段代码做的事 = 用当前参数 $\\theta$ 跑一次 SDE 步，并算这一步的对数概率：\n$$ \\text{mean}_\\theta = x_j\\Big(1+\\frac{\\sigma_{\\mathrm{noise}}^2}{2\\sigma}\\Delta t\\Big) + v_\\theta(x_j,t_j,c)\\Big(1+\\frac{\\sigma_{\\mathrm{noise}}^2(1-\\sigma)}{2\\sigma}\\Big)\\Delta t $$$$ \\log p_\\theta(x_{j+1}\\mid x_j) = -\\frac{\\|x_{j+1}-\\text{mean}_\\theta\\|^2}{2\\sigma_{\\mathrm{noise}}^2(-\\Delta t)} - \\log\\big(\\sigma_{\\mathrm{noise}}\\sqrt{-\\Delta t}\\big) - \\log\\sqrt{2\\pi} $$注意这里 prev_sample 传入的是旧轨迹的 next_latents[:, j]（不是重新随机采），所以 $\\log p_\\theta(x_{j+1}\\mid x_j)$ 表示\u0026quot;旧轨迹那一步，在新参数 $\\theta$ 看来有多可能\u0026quot;——这正是 PPO ratio 需要的 $\\log\\pi_{\\theta_{\\text{new}}}$。\n和采样阶段的关键区别：\n采样阶段 训练阶段 requires_grad ❌ 全部 no_grad ✅ 开启 prev_sample 参数 None（自己随机采） 传入旧轨迹的 next_latents prev_sample.detach() 有效（反正不记梯度） 有效（防止梯度流到 prev_sample） 5.3 训练阶段的计算图——用图形理解 训练阶段执行 compute_log_prob 时，PyTorch 自动构造了如下计算图（蓝色 = 前向构造计算图，红色 = 反向传播）：\n梯度流动路径（链式法则）：\n∂ l o × × s s ∂ ∂ ∂ / l l m ∂ o o o θ s g d s _ e = / p l ∂ r _ l o p o b r g / e _ ∂ d p m r ∂ o d θ b e l _ p r e d ( ( 从 ( 从 从 l P o D P g i O _ T p l r 前 o o 向 s b 到 s 公 L 到 式 o 到 R l A o m g o 参 _ d 数 p e — r l — o _ a b p u ) r t e o d g — r — a 高 d 斯 自 l 动 o 完 g 成 _ ) p r o b 对 m e a n 求 导 ) 对应公式（链式法则）：\n$$ \\frac{\\partial \\mathcal{L}}{\\partial \\theta} = \\underbrace{\\frac{\\partial \\mathcal{L}}{\\partial \\log p}}_{\\text{PPO loss 对 log\\_prob}} \\cdot \\underbrace{\\frac{\\partial \\log p}{\\partial v_\\theta}}_{\\text{解析可得，见下}} \\cdot \\underbrace{\\frac{\\partial v_\\theta}{\\partial \\theta}}_{\\text{autograd 自动}} $$$\\log p$ 只通过 $\\text{mean}_\\theta$（进而 $v_\\theta$）依赖参数 $\\theta$，且 $\\text{mean}_\\theta$ 是 $v_\\theta$ 的线性函数，所以中间那项能直接手推出来，剩下两层交给 PyTorch。\n展开第二项：\n# sd3_sde_with_logprob.py:109,121-133 log_prob = -((prev_sample.detach() - prev_sample_mean)²) / (2 * var) - log(√(var * 2π)) # 其中 prev_sample_mean = g(model_pred, sample, dt, noise_level) # var = (std_dev_t * √(-dt))² # ∂log_prob/∂model_pred = -(prev_sample - prev_sample_mean) / var * ∂prev_sample_mean/∂model_pred 对应公式（高斯 log_prob 对速度求导）： 中间那一项可以手推闭式解，关键是 prev_sample 被 .detach() 了、只有 prev_sample_mean 带梯度：\n$$ \\frac{\\partial \\log p}{\\partial v_\\theta} = \\frac{x_{j+1}-\\text{mean}_\\theta}{\\sigma_{\\mathrm{noise}}^2(-\\Delta t)} \\cdot \\Big(1+\\frac{\\sigma_{\\mathrm{noise}}^2(1-\\sigma)}{2\\sigma}\\Big)\\Delta t $$推导：$\\frac{\\partial \\log p}{\\partial \\text{mean}} = \\frac{x_{j+1}-\\text{mean}}{\\sigma_{\\mathrm{noise}}^2(-\\Delta t)}$（对 log_prob 的第一项求导），再乘 $\\frac{\\partial \\text{mean}}{\\partial v_\\theta} = \\big(1+\\frac{\\sigma_{\\mathrm{noise}}^2(1-\\sigma)}{2\\sigma}\\big)\\Delta t$（均值公式里 $v_\\theta$ 的系数）。梯度只会顺着这条链流到 model_pred。\n因为 prev_sample.detach() 了，梯度不会流到 prev_sample，只会通过 prev_sample_mean 流到 model_pred。\n重要：计算图只包含当前第 j 步！\nsample[\u0026quot;latents\u0026quot;][:, j] 是 detached 的（采样阶段产生，不参与计算图） 所以梯度只从第 j 步的 model_pred 反向传播到 LoRA 参数 为什么这可行？ SDE 的马尔可夫性质：第 j 步的 latent 只由第 j-1 步决定。虽然每一步的梯度只包含一步的信息，但经过 window_size 步的累积（循环 num_train_timesteps 次 compute_log_prob + backward），梯度实际上包含了从窗口起点到终点的完整信息。 5.4 Loss 在训练循环中的位置 # train_flux_fast.py:825-901 train_timesteps = [step_index for step_index in range(num_train_timesteps)] # [0,1,2,3,4] for j in train_timesteps: # 遍历窗口内的每一步 with accelerator.accumulate(transformer): # 5.4.1 前向 → 得到 log_prob_new (line 835) prev_sample, log_prob, prev_sample_mean, std_dev_t = compute_log_prob(...) # 5.4.2 PPO ratio (line 847) ratio = torch.exp(log_prob - sample[\u0026#34;log_probs\u0026#34;][:, j]) # 5.4.3 无裁剪和有裁剪的 loss (line 849-854) unclipped_loss = -advantages * ratio clipped_loss = -advantages * torch.clamp( ratio, 1.0 - config.train.clip_range, 1.0 + config.train.clip_range ) # 5.4.4 PPO loss: 取最大值（最悲观）（line 855） policy_loss = torch.mean(torch.maximum(unclipped_loss, clipped_loss)) # 5.4.5 KL 惩罚（可选）（line 856-861） if config.train.beta \u0026gt; 0: # 计算 reference model（禁用 LoRA adapter）的预测均值 with torch.no_grad(): _, _, prev_sample_mean_ref, _ = compute_log_prob(transformer, pipeline, sample, j, config) kl_loss = ((prev_sample_mean - prev_sample_mean_ref)²).mean(dim=(1,2)) / (2 * std_dev_t²) loss = policy_loss + config.train.beta * kl_loss else: loss = policy_loss # 5.4.6 backward (line 895) accelerator.backward(loss) # ← 梯度累积 + 反向传播 if accelerator.sync_gradients: accelerator.clip_grad_norm_(transformer.parameters(), config.train.max_grad_norm) optimizer.step() optimizer.zero_grad() 对应公式（窗口内第 $j$ 步的完整损失）：\n$$ r_j(\\theta) = \\exp\\!\\big(\\underbrace{\\log p_\\theta(x_{j+1}\\mid x_j)}_{\\texttt{log\\_prob}} - \\underbrace{\\log p_{\\theta_{old}}(x_{j+1}\\mid x_j)}_{\\texttt{sample['log\\_probs'][:, j]}}\\big) $$$$ L_j = \\mathbb{E}\\Big[\\max\\big(-A_j\\,r_j(\\theta),\\; -A_j\\,\\operatorname{clip}\\big(r_j(\\theta),\\,1-\\epsilon,\\,1+\\epsilon\\big)\\big)\\Big] $$若开启 KL 惩罚（见 6.3），最终 loss = policy_loss + beta * kl_loss（即 $L_j + \\beta L^{KL}$）。\n第 6 步：Loss 设计详解 6.1 PPO Loss 数学形式 $$ L^{PPO} = \\mathbb{E}\\left[ \\max\\left( -\\frac{\\pi_\\theta}{\\pi_{\\theta_{old}}} \\cdot A,\\; -\\text{clip}\\left(\\frac{\\pi_\\theta}{\\pi_{\\theta_{old}}}, 1-\\epsilon, 1+\\epsilon\\right) \\cdot A \\right) \\right] $$在代码中：\n符号 代码变量 位置 $\\frac{\\pi_\\theta}{\\pi_{\\theta_{old}}}$ ratio = torch.exp(log_prob - sample['log_probs'][:, j]) line 847 $A$ advantages（已裁剪到 [-adv_clip_max, adv_clip_max]） line 842-846 $\\epsilon$ config.train.clip_range（默认 0.2） line 852 $-\\text{ratio} \\cdot A$ unclipped_loss = -advantages * ratio line 849 $-\\text{clip}(\\text{ratio}) \\cdot A$ clipped_loss = -advantages * torch.clamp(...) line 850-854 $\\max$ policy_loss = torch.mean(torch.maximum(...)) line 855 为什么这样设计？\n当 A \u0026gt; 0（这张图比平均好）：我们希望提高它的概率，但不想提高太猛 ratio \u0026gt; 1.2 → clip 到 1.2 → clipped_loss 更大 → loss 取 max → 惩罚过度更新 当 A \u0026lt; 0（这张图比平均差）：我们希望降低它的概率，但同样不想降太猛 ratio \u0026lt; 0.8 → clip 到 0.8 → clipped_loss 更大 → loss 取 max → 惩罚过度更新 6.2 为什么 GRPO 用的是 PPO Loss？(GRPO vs PPO 的关系) 很多人会疑惑：GRPO 和 PPO 到底啥关系？为什么 GRPO 的损失还是长 PPO 的样子？\n一句话结论：GRPO 的\u0026quot;组相对\u0026quot;只改了 advantage 怎么算；策略更新的损失函数确实延续了 PPO 的 clipped surrogate（带 clip 的 ratio loss）。\n把 GRPO 拆成两件事看就明白了：\nGRPO = PPO 的损失函数（clip ratio） + GRPO 特有的 advantage（组内归一化，不用 critic） └──── 为什么 loss 是 PPO 样子的 ────┘ └────────── \u0026#34;组相对\u0026#34;在这 ──────────┘ ① advantage 怎么算 —— 这才是 GRPO 的创新点\nPPO 要训练一个 critic 价值网络去估计\u0026quot;这个状态有多好\u0026quot;，作为 baseline（基线）； GRPO 把 critic 整个砍掉，改用同一个 prompt 生成的 G 条轨迹的 reward 组内归一化当 baseline： $$A_i = \\frac{r_i - \\mu}{\\sigma}$$ \u0026ldquo;组相对\u0026quot;就在这里：比组内平均好→正，差→负。这一步只改变 A，不改 loss 的\u0026quot;外壳\u0026rdquo;。 ② 策略更新损失 —— 沿用 PPO\n不管 A 来自 critic 还是组内归一化，最终要更新的目标都是同一个 PPO 式子（见 6.1）：\n$$\\text{ratio} = \\exp\\!\\big(\\log\\pi_\\theta - \\log\\pi_{\\theta_{old}}\\big), \\qquad L = \\mathbb{E}\\Big[\\min\\big(\\text{ratio}\\cdot A,\\; \\operatorname{clip}(\\text{ratio},1\\pm\\epsilon)\\cdot A\\big)\\Big]$$GRPO 在损失这里没有发明新东西，直接继承 PPO 的 clip 技巧。所以你会看到\u0026quot;advantage 换成组内算，但 loss 还是 PPO 那个\u0026quot;。\n为什么 loss 必须参考 PPO / 必须带 clip？\n因为 GRPO 砍掉 critic 之后，如果连 clip 也拿掉，就退化成最朴素的 REINFORCE：\nREINFORCE 方差大、一步更新就没谱，很容易\u0026quot;一步更新过猛导致崩溃\u0026quot;； PPO 的 clip(ratio, 1±ε) 限制\u0026quot;新策略和旧策略偏离别超过 ε\u0026quot;，保证每步更新温和，还能安全地同一批样本复用多轮（提升样本效率）； 文生图/驾驶这类 reward 稀疏又易 hack 的场景，还叠加了 over-optimization（reward 越编越高、图却越来越差）风险，clip + KL 惩罚正是压住它的。 一句话记住：GRPO = 没有 critic（不用价值网络）的 PPO——把\u0026quot;状态价值基线\u0026quot;换成\u0026quot;组内 reward 的均值/标准差\u0026quot;，其余损失设计（clip ratio + KL 惩罚）照搬 PPO。\n补充：DeepSeek-R1 的 GRPO 有时也用不带 clip 的 REINFORCE + KL版本（加了 beta·KL 后 KL 本身就能\u0026quot;别偏太远\u0026quot;，所以不需要 clip）。但驾控/文生图这种 reward 易 hack 的场景，clip 版更稳——本仓库用的就是 clip 版。\n6.3 KL 惩罚项 当 config.train.beta \u0026gt; 0 时，额外加一个 KL 惩罚：\n# train_flux_fast.py:837-838 with torch.no_grad(): with transformer.module.disable_adapter(): # 禁用 LoRA → reference model _, _, prev_sample_mean_ref, _ = compute_log_prob(transformer, pipeline, sample, j, config) # train_flux_fast.py:857-858 kl_loss = ((prev_sample_mean - prev_sample_mean_ref) ** 2).mean(dim=(1,2), keepdim=True) / (2 * std_dev_t ** 2) kl_loss = torch.mean(kl_loss) loss = policy_loss + config.train.beta * kl_loss 对应公式：\n$$ L^{KL} = \\frac{1}{2\\sigma_{\\mathrm{noise}}^2}\\,\\big\\|\\text{mean}_\\theta(x_j) - \\text{mean}_{\\theta_{\\text{ref}}}(x_j)\\big\\|^2, \\qquad L = L^{PG} + \\beta\\,L^{KL} $$即\u0026quot;当前模型（开 LoRA）与 reference（禁用 LoRA）在同一个 $x_j$ 上预测的下一步均值不能差太远\u0026quot;，用 $v_\\theta$ 一步的方差 $\\sigma_{\\mathrm{noise}}^2$ 做归一化。\n设计动机：\n通过 disable_adapter() 暂时禁用 LoRA 权重，得到 base model（reference）的预测均值 当前模型的预测均值 prev_sample_mean 不应偏离 reference 太远 KL 惩罚项防止 PPO 过度优化导致模型遗忘原始能力（catastrophic forgetting） 6.4 日志指标 # train_flux_fast.py:863-888 info[\u0026#34;approx_kl\u0026#34;].append(0.5 * ((log_prob - sample[\u0026#34;log_probs\u0026#34;][:, j]) ** 2).mean()) # 近似 KL 散度：log_prob_new 与 log_prob_old 的差异平方均值 info[\u0026#34;clipfrac\u0026#34;].append((|ratio - 1.0| \u0026gt; clip_range).float().mean()) # 被 clip 的样本比例 对应公式：\n$$ \\text{approx\\_kl} = \\mathbb{E}\\Big[ \\tfrac{1}{2}\\big(\\log p_{\\theta_{\\text{new}}} - \\log p_{\\theta_{\\text{old}}}\\big)^2 \\Big] $$$$ \\text{clipfrac} = \\mathbb{E}\\big[ \\mathbb{1}\\{\\,|r_j(\\theta)-1|\u003e\\epsilon\\,\\} \\big] $$两个都是监控指标：approx_kl 用\u0026quot;新旧 log_prob 之差的平方均值\u0026quot;近似 KL 散度，衡量策略每次更新偏离多远；clipfrac 统计有多少样本的 ratio 超出 $1\\pm\\epsilon$ 被裁剪（值偏高说明每次步子太大）。\n6.5 ratio 是\u0026quot;每步\u0026quot;还是\u0026quot;总\u0026quot;？——逐步各算，等价于总体连乘 你可能会想：PPO 的 ratio 不是应该用整条轨迹 $\\pi_\\theta(\\tau)/\\pi_{\\theta_{old}}(\\tau)$ 吗？为什么代码里 ratio = torch.exp(log_prob - sample[\u0026quot;log_probs\u0026quot;][:, j]) 只有第 j 步？\n每步独立算：ratio_j = π_θ(x_{j+1}|x_j) / π_θ_old(x_{j+1}|x_j)，只用到第 j 步的转移概率； 整条轨迹：$\\text{ratio}_\\tau = \\frac{\\pi_\\theta(\\tau)}{\\pi_{\\theta_{old}}(\\tau)} = \\prod_j \\frac{\\pi_\\theta(x_{j+1}|x_j)}{\\pi_{\\theta_{old}}(x_{j+1}|x_j)} = \\prod_j \\text{ratio}_j$（马尔可夫连乘，取 log 就是各步 log_prob 之差的和）； 为什么逐步算没问题：PPO 损失对每步取 min(wA, clip(w)A)，advantage 对每个 timestep 用的是同一个 $A_j=A$（train_flux_fast.py:745 把 adv 沿 timestep 维复制了 num_train_timesteps 次）。于是\u0026quot;一条轨迹的梯度\u0026quot; = 各步梯度之和，与\u0026quot;先乘出总 ratio 再算\u0026quot;在数学上一致，只差 clip 边界的实现细节——这也是 PPO 的标准做法。 一句话：你不用在代码里找\u0026quot;总 log_prob 求和\u0026quot;，它被隐式地分散在每一步的梯度里。\n6.6 \u0026ldquo;旧模型\u0026rdquo; vs \u0026ldquo;新模型\u0026rdquo;：其实是同一个模型的两个瞬间 新手最容易在这里想岔：以为训练时\u0026quot;采样用一个旧模型，打分再换一个新模型\u0026quot;。不——全仓库只有一个 FLUX+LoRA 模型，\u0026ldquo;旧/新\u0026quot;只是 optimizer.step() 前后那一个瞬间的参数快照：\n按时间线看一遍（对应上图）：\n采样（用的就是当时的那套参数，记作 $\\theta$）：走完去噪轨迹，缓存 next_latent，同时用 $\\theta$ 记下 log_prob_old。此刻的模型就是\u0026quot;即将被更新\u0026quot;的那个。 打分：reward → A（正奖励抬这条轨迹，负奖励压它）。这是方向信号。 训练开始：compute_log_prob 算出 log_prob_new。注意——此刻参数还是 $\\theta$，没动过，所以第一轮 $ratio=\\exp(\\log p_{new}-\\log p_{old})\\approx 1$，loss≈0。 optimizer.step() ——就在这一行喝完咖啡之后，$\\theta$ 第一次发生了变化，变成\u0026quot;新模型 $\\theta_{new}$\u0026quot;。 下一轮采样：用的已经是更新后的 $\\theta_{new}$。从这一轮起，你先前存的 $\\theta_{new}$ 自动\u0026quot;降级\u0026quot;成新的\u0026quot;旧模型\u0026rdquo;，新的 log_prob_old 由它给出，于是 $ratio \\neq 1$，训练真正开始推动。 第一轮是\u0026quot;空转热身\u0026quot;吗？不是白干。 虽然 step 前 ratio≈1、loss≈0，但 backward() 已经算出了非零梯度——因为每条轨迹的 reward/Advantage 不同，梯度方向早已指向\u0026quot;该抬的抬，该压的压\u0026quot;。step() 就是按这个方向挪第一小步（步长由 lr 控制）。所以第一轮就开始朝正确方向挪了，只是幅度很小；第二轮采样的轨迹已是挪过后的模型生成的。\n监督信号到底是什么？ 整条链里没有一个\u0026quot;标准答案轨迹\u0026quot;。模型是被**打分（Advantage 的正负）**推着走的：A 决定方向（往哪个区域挪），log_prob_new 只是把\u0026quot;该往那挪\u0026quot;量化成梯度大小。加速的是\u0026quot;速度方向分布\u0026quot;（LoRA 参数），FLUX 原始权重全程冻结。\n一句话：\u0026ldquo;新模型\u0026quot;从来不是凭空变出来的，它只是\u0026quot;旧模型\u0026quot;在打分和梯度推完、被 step() 哐当一撞之后的那一个瞬间。\n第 7 步：一次完整的训练迭代——按时间线串联 现在我们把所有步骤串联起来，看一次完整的迭代：\n上面这幅图对应下面的完整时间线：\n① 采样阶段 (pipeline.transformer.eval()，no_grad)\n读 prompts = [\u0026quot;a red cat\u0026quot;, \u0026quot;blue dog\u0026quot;, ...]（每 GPU 1 个） T5 编码 → prompt_embeds pipeline_with_logprob（10 步去噪，其中窗口 3 步随机 SDE） 随机选一个窗口，例如第 2-5 步：SDE，noise=0.7，记录 latent + log_prob_old 窗口外（第 0-1、6-9 步）：ODE，noise=0，不记录 返回 images (B,3,512,512) 和 log_probs_old (B,3) executor.submit(reward_fn, ...) 异步提交 reward 计算 存储 latents / timesteps / prompt_embeds 供训练阶段复用 ② 异步 Reward 计算（等 Future 结果）\nrewards = {\u0026quot;avg\u0026quot;: [0.12, 0.45, ...], \u0026quot;strict_accuracy\u0026quot;: [0, 1, ...]} ③ 跨 GPU 同步 + Advantage\nall_gather：32 GPU × 1 batch = 32 个样本汇总 PerPromptStatTracker.update()：对每个 prompt 算 A = (r - μ_history) / σ_history A 裁剪到 [-2.0, 2.0] ④ 训练阶段 (pipeline.transformer.train()，梯度开启)\ninner_epoch=0 里，j 遍历窗口内的 num_train_timesteps 步（例 window_size=3），每步： transformer(latents[:,j], ...) → model_pred（前向，梯度开启） sde_step_with_logprob(..., prev_sample=next_latents[:,j]) → log_prob_new ratio = exp(log_prob_new - log_probs_old[:,j]) policy_loss = max(-A·ratio, -A·clip(ratio)) （可选）KL_loss = ||mean_new - mean_ref||² / (2·var) loss = policy_loss + β·KL_loss accelerator.backward(loss) → 梯度累加到 LoRA 参数 optimizer.step() → LoRA 参数更新 窗口内所有步完成后：epoch + 1，回到采样阶段 第 8 步：推理阶段（和训练完全不同！） 推理 (train_flux_fast.py:220-311, eval 函数) 和训练有本质区别：\n# train_flux_fast.py:240-254 (eval 函数) with torch.no_grad(): # 不记录任何梯度 images, _, _, _, _, _ = pipeline_with_logprob( pipeline, prompt_embeds=prompt_embeds, num_inference_steps=config.sample.eval_num_steps, # 一般和训练一致 guidance_scale=config.sample.eval_guidance_scale, sde_window_size=0, # ← 推理时 window=0！ noise_level=0, # ← 推理时 noise_level=0！ sde_type=config.sample.sde_type, ) 推理 vs 训练的关键差异：\n训练采样阶段 推理阶段 sde_window_size sde_window_size（如 3） 0（全 ODE） noise_level 0.7 0（不加噪声） requires_grad ❌ ❌ 返回 log_probs ✅ 需要 不返回（_ 丢弃） 返回 latents ✅ 供训练复用 ❌ 为什么推理不用 SDE？\n推理只关心图片质量，不需要计算 log_prob ODE（noise_level=0）生成的图片更清晰、质量更高 SDE 在训练时是为了引入随机性 → 多样性 → group 内 reward 出现差异 → advantage 信号 8.1 采样 / 训练 / 推理三阶段到底各干什么？（一张表收尾） 到这里所有函数都出现了，最后把三阶段的职责和它们共用的函数一次性理清。你会发现同一个 sde_step_with_logprob 被三处调用，只是 prev_sample 传的东西不同：\n采样阶段 (SAMPLE) 训练阶段 (TRAIN) 推理阶段 (EVAL) 代码位置 train_flux_fast.py:610-712 train_flux_fast.py:803-917 train_flux_fast.py:220-311 目标 用当前(旧)模型生成图片，并记录旧概率 让新模型给旧轨迹重新打分，算 PPO loss 用（EMA 平滑的）模型纯生成，测 reward 有梯度吗 ❌ no_grad ✅ requires_grad ❌ prev_sample 参数 None → 函数掷骰子随机生成下一步 sample[\u0026quot;next_latents\u0026quot;][:, j] → 不采样，只算已发生步骤的概率 None，但 noise_level=0 → 纯 ODE 不掷骰子 返回的 log_prob 是 $\\log p_{\\theta_{old}}$（旧概率） $\\log p_{\\theta}$（新概率） 不需要（丢弃） 产出 图片、轨迹 $x_0..x_N$、log_probs_old loss → backward → 更新 LoRA 图片 + reward 调用链 pipeline_with_logprob → sde_step_with_logprob(prev=None) compute_log_prob → sde_step_with_logprob(prev=next_latents) pipeline_with_logprob(window=0, noise=0) 为什么同一个函数三处都能用？ 看 sd3_sde_with_logprob.py:111-119 的分支：\nif prev_sample is None: # 采样/推理：自己掷骰子生成下一步 prev_sample = prev_sample_mean + std_dev_t * sqrt(-dt) * noise # 不管 prev_sample 从哪来，log_prob 永远是： # 拿已知的 prev_sample 对比当前模型的 prev_sample_mean（高斯分布中心） log_prob 的定义只依赖\u0026rdquo;已知点 vs 模型分布中心\u0026quot;，所以：\n采样时 prev_sample 是刚掷出的点 → 记下的是旧模型掷出它的概率； 训练时 prev_sample 换成已固定的旧轨迹点 → 算的是新模型眼里旧轨迹上这个点的概率 = log_prob_new； 推理时 noise_level=0 使 std_dev_t=0 → SDE 退化为 ODE → 不再随机，也就不需要概率。 一个图：三阶段的循环关系就是上面 flowgrpo_overview.svg 画的：采样 → reward → advantage → 训练 → 回到采样。推理只在 eval 时独立跑，不参与闭环。\n第 9 步：完整代码架构 文件命中表（每个文件的精确业务） 文件 行数 核心函数/类 精确职责 scripts/train_flux_fast.py 925 main(), compute_log_prob(), eval() 主循环编排、采样/训练两阶段切换、loss 计算与 backward config/base.py - GRPOConfig 所有超参数的默认值（lr, group_size, window_size\u0026hellip;） config/grpo.py - ocr_experiment, gen_eval_experiment, \u0026hellip; 实验预设配方 flow_grpo/diffusers_patch/flux_pipeline_with_logprob_fast.py 213 pipeline_with_logprob() SDE 采样循环、窗口控制、latent 轨迹记录 flow_grpo/diffusers_patch/sd3_sde_with_logprob.py 171 sde_step_with_logprob() 单步 SDE 前向 + log_prob 解析计算（梯度流的数学核心） flow_grpo/stat_tracking.py 139 PerPromptStatTracker.update() reward → advantage 的组内归一化（GRPO 核心） flow_grpo/rewards.py 567 multi_score(), ocr_reward_fn, \u0026hellip; 各种 reward 函数的实现 flow_grpo/ema.py - EMAModuleWrapper 指数移动平均（保存最优参数快照） flow_grpo/fsdp_utils.py - FSDP 配置 12B 模型的分片策略 第 10 步：核心公式一览 10.1 GRPO Advantage $$ A_i = \\frac{r_i - \\mu_{prompt}}{\\sigma_{prompt}} $$stat_tracking.py:76-92\n10.2 SDE Step (sde_type=\u0026lsquo;sde\u0026rsquo;) $$ \\text{mean} = x_t \\cdot \\left(1 + \\frac{\\sigma_{noise}^2}{2\\sigma}\\Delta t\\right) + v_\\theta \\cdot \\left(1 + \\frac{\\sigma_{noise}^2(1-\\sigma)}{2\\sigma}\\right)\\Delta t $$$$ x_{t+1} \\sim \\mathcal{N}(\\text{mean}, \\sigma_{noise}^2 \\cdot (-\\Delta t) \\cdot I) $$sd3_sde_with_logprob.py:106-109\n10.3 Log Prob $$ \\log p(x_{t+1}|x_t) = -\\frac{\\|x_{t+1} - \\text{mean}\\|^2}{2\\sigma_{noise}^2(-\\Delta t)} - \\log(\\sigma_{noise}\\sqrt{-\\Delta t}) - \\log\\sqrt{2\\pi} $$sd3_sde_with_logprob.py:121-133\n10.4 PPO Ratio $$ r_t(\\theta) = \\exp(\\log \\pi_\\theta - \\log \\pi_{\\theta_{old}}) $$train_flux_fast.py:847\n10.5 PPO Policy Loss $$ L^{PG} = \\mathbb{E}\\left[\\max\\left(-r_t(\\theta)A_t,\\; -\\text{clip}(r_t(\\theta), 1-\\epsilon, 1+\\epsilon)A_t\\right)\\right] $$train_flux_fast.py:849-855\n10.6 KL Penalty $$ L^{KL} = \\frac{\\|\\mu_\\theta - \\mu_{ref}\\|^2}{2\\sigma_t^2} $$train_flux_fast.py:857-858\n10.7 Total Loss $$ L = L^{PG} + \\beta L^{KL} $$train_flux_fast.py:859\n附：关键流程图 + 完整数学原理 下面三张流程图的目的是把正文里的公式图形化。结合图，我把每张图背后的数学公式完整写出来——尤其是第二张 Flow Matching 图，它是整条 ODE → SDE → log_prob → GRPO 链条的起点，也是最容易\u0026quot;看着网页代码却不知道在算什么的\u0026quot;地方。\n附 A｜Flow Matching 图：原生 FM + ODE→SDE 的完整数学 上图是\u0026quot;三步动画\u0026quot;：从纯噪声出发，靠速度一步一步挪到最终图片。整张图就靠\u0026quot;速度\u0026quot;一个概念，所以我们从最基础的开始讲。\n第 1 步：先认识主角：噪声 $x_0$、图片 $x_1$，以及\u0026quot;在它们中间\u0026quot;的 $x_t$\n$x_0$：t=0 那一端，一张全是随机雪花点的图（像素值全是随机数）。 $x_1$：t=1 那一端，我们最终想要的那张图（比如 \u0026ldquo;a red cat\u0026rdquo;）。 中间的 $x_t$：噪声朝图片走了一半时的状态。可以把 $t$ 理解成进度条（0=还没走，1=走完了）。 这两个主角之间的\u0026quot;路\u0026quot;怎么定义？——在两点之间拉一条直线。为什么是直线、为什么系数长这样？下面一步一步推给你看。\n公式 ① 从哪来：中间点 $x_t=(1-t)x_0+t x_1$ 是\u0026quot;推\u0026quot;出来的，不是拍脑袋定的\n我们要求中间状态 $x_t$ 满足三个朴素条件：\n$t=0$（还没走）时必须正好是噪声：$x_0$； $t=1$（走完了）时必须正好是图片：$x_1$； 中间平滑过渡——最简单的假设就是线性（直线）。 设直线 $x_t = a + b\\,t$（$a,b$ 是待定系数），代条件 1 和 2：\n$t=0$：$x_0 = a + b\\cdot0 = a$，所以 $\\boxed{a = x_0}$； $t=1$：$x_1 = a + b\\cdot1$，把 $a=x_0$ 代入得 $\\boxed{b = x_1 - x_0}$。 把 $a,b$ 代回直线方程：\n$$ x_t = x_0 + t\\,(x_1 - x_0) = (1-t)\\,x_0 + t\\,x_1 $$逐项翻译：噪声 $x_0$ 的系数是 $(1-t)$，图片 $x_1$ 的系数是 $t$，两个系数加起来恒等于 1（$(1-t)+t=1$）。所以它本质是\u0026quot;噪声和图片的加权平均\u0026quot;，权重随进度条 $t$ 变化：$t=0$ 全是噪声，$t=1$ 全是图片，$t=0.5$ 各占一半。\n公式 ② 从哪来：速度为什么等于 $x_1-x_0$？——求一次导就出来\n速度 = \u0026ldquo;位置随时间的变化率\u0026rdquo;，也就是对 $x_t$ 关于 $t$ 求导。逐项来：\n$(1-t)x_0$ 对 $t$ 求导：$(1-t)$ 的导数是 $-1$，乘 $x_0$ 得 $-x_0$； $t\\,x_1$ 对 $t$ 求导：$t$ 的导数是 $1$，乘 $x_1$ 得 $x_1$。 相加：\n$$ u_t = \\frac{d x_t}{dt} = \\frac{d}{dt}\\big((1-t)x_0 + t x_1\\big) = -x_0 + x_1 = x_1 - x_0 $$结论：直线轨迹上每个点的瞬时速度都是同一个常数 $x_1-x_0$（从噪声指向图片的那个方向）。这就是为什么图里每个小方框都写着 v·Δt——整条路速度不变，每步都朝同一个方向、用同一个速度。\n第 2 步：训练：让网络学会\u0026quot;猜速度\u0026quot;（CFM 损失）\n网络 $v_\\theta(x_t,t,c)$ 的输入是\u0026quot;我在哪（$x_t$）、几点（$t$）、目标长啥样（$c$=prompt）\u0026quot;，输出是\u0026quot;我认为该往哪走（速度）\u0026quot;。\n训练时我们有成对的\u0026quot;噪声 + 它对应的真图片\u0026quot;，所以正确答案是现成的：就是 $x_1-x_0$。于是损失（衡量网络猜得有多离谱的\u0026quot;扣分器\u0026quot;）就是：\n公式 ③ 从哪来：训练目标 CFM 损失\n$$ \\mathcal{L}_{\\mathrm{CFM}} = \\mathbb{E}\\Big[\\big\\| v_\\theta(x_t,t,c) - (x_1-x_0) \\big\\|^2\\Big] $$逐项翻译：\n$v_\\theta(x_t,t,c)$：网络猜的速度；$(x_1-x_0)$：正确的速度；两者相减再平方 = \u0026ldquo;猜偏了多少\u0026quot;。 $\\mathbb{E}[\\cdot]$：期望 = 拿很多很多对\u0026quot;噪声+图片\u0026quot;反复问，取平均。$\\mathbb{E}_{t\\sim U[0,1]}$ 表示还随机抽进度条位置 $t$（每个中间位置都练到）。 这就是最普通的回归训练：目标是一个连续数值（速度向量），不是选择题。 顺便回答\u0026quot;为什么是平方\u0026rdquo;：平方误差不是随便选的——如果假设\u0026quot;网络预测速度时带高斯噪声\u0026quot;，预测越准概率越大，取负对数似然恰好就得到平方误差（这是标准回归的推导，一个高斯 PDF 的负对数就是一个平方项）。所以 CFM 损失本质就是：\u0026ldquo;在每个中间点上，让网络猜的速度尽量贴近真速度\u0026rdquo;。\n为什么这么简单就够用？ 直觉类比：一群同学乱糟糟站在操场上（一堆噪声点），老师喊\u0026quot;按你们该去的位置走\u0026quot;。只要每个点都朝正确方向、按正确速度走，整群人就会从乱糟糟的站位，整齐地\u0026quot;搬运\u0026quot;到各自的正确位置（= 图片的分布）。Flow Matching 的定理说的就是这个：让每个点朝正确速度走 ⟺ 把噪声分布整体搬成图片分布。不需要 GAN 那种\u0026quot;判别器\u0026quot;、也不需要额外技巧。\n第 3 步：推理：生成图片 = 解方程，这里必须讲清楚\u0026quot;积分\u0026quot;和\u0026quot;Euler\u0026quot;\n学完速度后怎么生成一张图？——从噪声出发，沿学到的速度一路走到底。这条路在数学上叫解 ODE（常微分方程）：\n公式 ④ 从哪来：ODE 就是\u0026quot;速度配方\u0026quot;\n$$ \\frac{dx}{dt} = v_\\theta(x,\\;t,\\;c), \\qquad x_0\\sim \\mathcal{N}(0,I),\\;\\; t:0\\to 1 $$翻译：这是一条\u0026quot;速度配方\u0026quot;——它说\u0026quot;无论你现在在哪（$x$）、现在几点（$t$），你的速度应该是 $v_\\theta(x,t,c)$\u0026quot;。$x_0\\sim\\mathcal{N}(0,I)$ 表示起点是随机噪声。\n那\u0026quot;积分\u0026quot;是什么？ 我们已经知道任意时刻的速度，但想知道\u0026quot;最终到哪\u0026quot;，得把一路上每个瞬间的速度累加起来：\n公式 ⑤ 从哪来：积分就是\u0026quot;把所有瞬间的速度 × 时间 加起来\u0026quot;\n匀速时很简单：路程 = 速度 × 时间。 但我们的速度 $v_\\theta$ 一直在变（你换了个位置，配方给的速度就变了），没法一次算完。 \u0026ldquo;把无数小段 \u0026lsquo;速度 × 时间\u0026rsquo; 加在一起\u0026rdquo;——这件事就是积分。就像开车：时速表在变，行车记录仪把每秒钟的时速累计起来就是总里程。数学上写作 $$ x(1) = x(0) + \\int_0^1 v(x(t),t,c)\\,dt $$那个拉长的 $\\int$ 是积分号，意思就是\u0026quot;把 0 到 1 之间每个瞬间的速度都加一遍\u0026quot;。\n那 Euler 又是什么？ 积分不能一笔算完（因为速度本身依赖位置，循环依赖），所以只能近似。Euler 步的公式其实是\u0026quot;泰勒展开的第一项\u0026quot;推出来的：\n已知当前位置 $x(t)$ 和这一瞬间的变化速度 $\\frac{dx}{dt}$，往前挪一小段 $\\Delta t$，位置可以展开成：\n$$ x(t+\\Delta t) = x(t) + \\underbrace{\\frac{dx}{dt}\\Big|_{t}\\cdot \\Delta t}_{\\text{第一项：速度 × 时间}} + \\underbrace{O(\\Delta t^2)}_{\\text{高阶小量：丢掉}} $$把 $\\frac{dx}{dt}=v_\\theta(x_t,t,c)$ 代入，并丢掉高阶小量 $O(\\Delta t^2)$，就得到图里那个公式：\n公式 ⑥ 从哪来：Euler 步\n$$ x_{t+\\Delta t} = x_t + v_\\theta(x_t,t,c)\\,\\Delta t $$ 翻译：新位置 = 旧位置 + 当前速度 × 一小段时间。这就是\u0026quot;一步\u0026quot;。 误差来源：被丢掉的高阶小量 $O(\\Delta t^2)$——所以 $\\Delta t$ 越小、每一步越精确。 类比开车：你只看了一眼时速表（50 km/h），就假设接下来 1 分钟一直开 50，于是估算\u0026quot;这 1 分钟走了大约 50/60 公里\u0026quot;，然后重新看表再算。 图里把 $t:0\\to1$ 切成 10 段（num_inference_steps=10），每段 $\\Delta t=0.1$，10 个小方框就是 10 次 Euler 步进。 一个具体的数字例子（假设网络恒输出 $v=0.5$，起点 $x_0=0$，$\\Delta t=0.1$，走 10 步）：\n$$ 0 \\xrightarrow{+0.05} 0.05 \\xrightarrow{+0.05} 0.10 \\to \\cdots \\to 0.50 $$速度恒定时 Euler 恰好精确（没有\u0026quot;变化\u0026quot;需要近似）；速度会变时，每步有一点点小误差，但 $\\Delta t$ 越小误差越小。总结：Euler 是一种\u0026quot;数值积分\u0026quot;——用\u0026quot;小步走 + 每一步都按当前速度走\u0026quot;来近似真正的积分。\n第 4 步：为什么接 GRPO 必须把 ODE 转成 SDE？\n先说结论：GRPO 要\u0026quot;算出一条轨迹的概率，再用奖励去推高/压低它\u0026quot;。这句话里最关键的是那条策略梯度公式——它到底怎么来的？这是本附录最重要的推导，我们花六小步把它彻底拆开。\n公式 ⑦ 从哪来：策略梯度 $\\nabla_\\theta \\mathcal{L} = -\\,\\mathbb{E}_\\tau[A(\\tau)\\nabla_\\theta\\log\\pi_\\theta(\\tau)]$ 的完整推导\n第 1 步：写清楚目标。 设参数为 $\\theta$ 时，策略以概率 $\\pi_\\theta(\\tau)$ 走出轨迹 $\\tau$，每条轨迹有一个奖励 $R(\\tau)$（来自 OCR/奖励函数，跟 $\\theta$ 无关）。我们要最大化\u0026quot;期望奖励\u0026quot;：\n$$ J(\\theta) = \\mathbb{E}_{\\tau\\sim\\pi_\\theta}\\big[\\,R(\\tau)\\,\\big] = \\int \\pi_\\theta(\\tau)\\,R(\\tau)\\,d\\tau $$第 2 步：难在哪里？ 奖励 $R(\\tau)$ 是外部打分，里面没有 $\\theta$。直接对 $J$ 求导会卡住：梯度想钻进 $\\pi_\\theta$ 里去改变概率，但 $R$ 那边没东西可导。必须用一个数学技巧，把\u0026quot;对 $R$ 求导\u0026quot;换成\u0026quot;对 $\\pi_\\theta$ 求导\u0026quot;。\n第 3 步：log 求导技巧（score function trick）。 利用\u0026quot;对数函数的导数 = 自身的导数 ÷ 自身\u0026quot;：\n$$ \\frac{d}{d\\theta}\\log \\pi_\\theta(\\tau) = \\frac{1}{\\pi_\\theta(\\tau)}\\cdot\\frac{d\\pi_\\theta(\\tau)}{d\\theta} \\;\\;\\Longrightarrow\\;\\; \\boxed{\\;\\frac{d\\pi_\\theta(\\tau)}{d\\theta} = \\pi_\\theta(\\tau)\\cdot\\frac{d}{d\\theta}\\log\\pi_\\theta(\\tau)\\;} $$翻译：\u0026ldquo;概率的梯度 = 概率自己 × log概率的梯度\u0026rdquo;。这一步把求导对象从 $R$ 成功换到了 $\\log\\pi_\\theta$ 上。\n第 4 步：代入目标，把积分还原成期望。\n$$ \\nabla_\\theta J(\\theta) = \\int \\frac{d\\pi_\\theta(\\tau)}{d\\theta}\\,R(\\tau)\\,d\\tau = \\int \\pi_\\theta(\\tau)\\;\\nabla_\\theta\\log\\pi_\\theta(\\tau)\\;R(\\tau)\\,d\\tau = \\mathbb{E}_\\tau\\Big[\\,\\underbrace{R(\\tau)}_{\\text{奖励}}\\;\\underbrace{\\nabla_\\theta\\log\\pi_\\theta(\\tau)}_{\\text{log概率的梯度}}\\,\\Big] $$注意积分里又出现了 $\\pi_\\theta$，于是积分变回期望——这就是\u0026quot;期望奖励的梯度 = 奖励 × log概率梯度 的期望\u0026quot;。\n第 5 步：蒙特卡洛近似 + 用 advantage 替代奖励。 期望用采样近似（多生成几条轨迹取平均）；再把纯奖励 $R$ 换成 advantage $A$（减掉一个基线不会改变梯度方向，但能大幅降方差——GRPO 的组内归一化就是干这个的）：\n$$ \\nabla_\\theta J(\\theta) \\approx \\frac{1}{M}\\sum_{i=1}^{M} A(\\tau_i)\\,\\nabla_\\theta\\log\\pi_\\theta(\\tau_i) $$第 6 步：转成\u0026quot;梯度下降\u0026quot;用的 loss。 PyTorch 优化器做的是梯度下降（$L$ 越小越好），所以加个负号，得到附录开头那条公式：\n$$ \\boxed{\\;\\nabla_\\theta \\mathcal{L} = -\\,\\mathbb{E}_\\tau\\Big[\\, A(\\tau)\\; \\nabla_\\theta \\log\\pi_\\theta(\\tau) \\Big]\\;} $$直觉收尾：$A\u003e0$（好事）的轨迹，梯度方向让 $\\log\\pi_\\theta(\\tau)$ 增大（更可能再走出这条路）；$A\u003c0$（坏事）的轨迹，让它减小。\n现在回头看 ODE 为什么不行就非常清楚了——这个公式必须要有\u0026quot;可微的概率\u0026quot;，而纯 ODE 恰恰给不了：\n没有随机性 = 没有可调的概率。 ODE 是\u0026quot;复印机\u0026quot;：同样的噪声进去，永远出来同一张图。$\\pi_\\theta(\\tau)$ 要么是 1、要么是 0，$\\nabla_\\theta\\log\\pi_\\theta$ 处处退化、梯度算不出来。就像一位从不失误、每次都做同一个动作的运动员——没有\u0026quot;发挥好坏\u0026quot;的变化，教练无从指导。 没有随机性 = 无法探索。 让图片变好，必须靠\u0026quot;多试试不同的中间路线，看哪条 reward 高\u0026quot;。纯 ODE 每次路线都一样，采样 $M$ 次也是同一条路，期望里没有多样性可用。 所以做法是：给同一个速度场加一点\u0026quot;随机抖动\u0026quot;，把确定性 ODE 变成随机 SDE：\n公式 ⑧ 从哪来：ODE→SDE，在速度上叠一层随机噪声\n$$ dx_t = v_\\theta(x_t,t,c)\\,dt + g(t)\\,dW_t $$ 第一项 $v_\\theta\\,dt$：还是学好的速度，负责带路。 第二项 $g(t)\\,dW_t$：随机扰动（$W_t$ 是布朗运动，$dW_t$ 可以理解成\u0026quot;一撮随机噪声\u0026quot;），负责制造变化。 类比：一手扶着画轨（速度），一手轻轻颤抖（噪声）。轨迹大体还是沿学好的方向走，但每次会有点随机偏差——这正是\u0026quot;随机策略\u0026quot;：同样的 prompt，每次生成的图不完全一样。 抖动大小由 noise_level 控制：0 = 不抖 = 退回 ODE；越大 = 越抖 = 探索越强。 为什么这不算\u0026quot;扔掉学好的模型\u0026quot;？ 漂移项仍是训练好的 $v_\\theta$，轨迹主体还是沿着图片流形走，噪声只是叠加的\u0026quot;探索开关\u0026quot;。这也解释了图里下方对比框：Flow 学的是速度 $v$，DDPM 学的是噪声 $\\varepsilon$——所以两者的 SDE 长得很像，但离散公式的系数完全不同。\n第 5 步：离散 SDE 一步（Euler–Maruyama）+ log_prob\n\u0026ldquo;Euler–Maruyama\u0026quot;就是 Euler + 噪声：每走一步，除了按 Euler 的规则前进，还额外叠一个高斯随机数。分四小步看。\n公式 ⑨ 从哪来：先算这一步该抖多大\n$$ \\sigma_{\\mathrm{noise}} = \\sqrt{\\frac{\\sigma}{1-\\sigma}}\\cdot \\text{noise\\_level} $$（$\\sigma$ 是当前噪声水平，noise_level 是预设强度。具体数值不用背，理解成\u0026quot;这步抖多大\u0026rdquo;。注意：当 noise_level=0 时它等于 0——回到不抖，这个性质下面马上要用。）\n公式 ⑩ 从哪来：下一步\u0026quot;最可能到哪\u0026quot;（均值公式）\n$$ \\text{mean} = x_t\\Big(1+\\frac{\\sigma_{\\mathrm{noise}}^2}{2\\sigma}\\Delta t\\Big) + v_\\theta\\Big(1+\\frac{\\sigma_{\\mathrm{noise}}^2(1-\\sigma)}{2\\sigma}\\Big)\\Delta t $$别被长式子吓到，用一个**\u0026ldquo;退火检查\u0026rdquo;**（sanity check）瞬间看穿它：把噪声关掉，即 $\\sigma_{\\mathrm{noise}}=0$，则两个 $(1+\\cdots)$ 系数都变成 $1+0=1$，公式退化为：\n$$ \\text{mean} = x_t + v_\\theta\\,\\Delta t $$——这正好是前面 Euler 步的公式！所以这条式子的本质就是\u0026quot;Euler 步 + 噪声修正系数\u0026quot;。那些多出来的 $(1+\\frac{\\sigma_{\\mathrm{noise}}^2\\cdots}{2\\sigma})$ 是 SDE 框架里的\u0026quot;漂移修正\u0026quot;：直接往 Euler 步上加噪声会把轨迹的整体走向微微带偏，作者加了这些系数，让\u0026quot;加噪之后边缘分布仍然对齐\u0026quot;。系数具体长成什么样取决于噪声注入方式，我们记住结构即可：mean = 走一点 + 加速一点，噪声只负责让落点有随机性。\n采样（随机策略真正落地的地方）\n$$ x_{t+1} \\sim \\mathcal{N}\\big(\\text{mean},\\; \\sigma_{\\mathrm{noise}}^2(-\\Delta t)\\,\\mathbf{I}\\big) $$翻译：以 mean 为中心、$\\sigma_{\\mathrm{noise}}^2(-\\Delta t)$ 为散布，按**高斯分布（钟形曲线）**抽一个点——大概率落在 mean 附近，偶尔偏出去一点。每次采样都得到一条略有不同的轨迹，这就是策略的\u0026quot;随机性\u0026quot;来源。\n公式 ⑪ 从哪来：log_prob 就是\u0026quot;高斯 PDF 取对数\u0026quot;，不需要记公式\n这一步只需要认识一维高斯分布的概率密度函数（钟形曲线的公式）：\n$$ p(z) = \\frac{1}{\\sigma\\sqrt{2\\pi}}\\;\\exp\\Big(-\\frac{(z-\\mu)^2}{2\\sigma^2}\\Big) $$现在把我们的量代入：$z = x_{t+1}$，$\\mu = \\text{mean}$，标准差 $\\sigma = \\sigma_{\\mathrm{noise}}\\sqrt{-\\Delta t}$（因为方差是 $\\sigma_{\\mathrm{noise}}^2(-\\Delta t)$）。代入后对两边取 $\\log$——$\\log$ 会把\u0026quot;乘\u0026quot;变成\u0026quot;加\u0026quot;、把\u0026quot;指数\u0026quot;拉下来：\n$$ \\log p(x_{t+1}\\mid x_t) = \\underbrace{-\\frac{\\|x_{t+1}-\\text{mean}\\|^2}{2\\,\\sigma_{\\mathrm{noise}}^2(-\\Delta t)}}_{\\text{指数部分的 log}} - \\underbrace{\\log\\big(\\sigma_{\\mathrm{noise}}\\sqrt{-\\Delta t}\\big)}_{\\text{前面的 } \\frac{1}{\\sigma}} - \\underbrace{\\log\\sqrt{2\\pi}}_{\\text{常数}} $$逐项读：\n第一项：$-\\frac{(z-\\mu)^2}{2\\sigma^2}$ 展开 = \u0026ldquo;离 mean 越远，越不像是随机抽出来的\u0026quot;（偏离越离谱，概率越小）； 第二项：$-\\log\\sigma$ = \u0026ldquo;抖动越大，单点概率越小\u0026rdquo;（分布被摊开了）； 第三项：$-\\log\\sqrt{2\\pi}$ = 高斯分布的归一化常数，保证所有概率加起来是 1，跟数据无关。 连起来 = \u0026ldquo;这个高斯落在 $x_{t+1}$ 处的对数概率\u0026rdquo;，正是训练阶段 PPO ratio $\\exp(\\log\\pi_{\\text{new}}-\\log\\pi_{\\text{old}})$ 里用的 $\\log\\pi_\\theta(x_{t+1}\\mid x_t)$。\n一句话串联（附 A）： 纯 FM 教会 $v_\\theta$ 速度（CFM 回归）→ 确定性 ODE 只能采样无梯度 → 给同一 $v_\\theta$ 注入 $g(t)dW$ 变成 SDE → 单步是高斯的，$\\log p$ 闭合可微 → 于是能算 PPO ratio 和 advantage，GRPO 才\u0026quot;有戏唱\u0026rdquo;。\n附 B｜GRPO Advantage 图：组内归一化的数学 这张图回答一个问题：同一个 prompt 生成了 $G$ 张图、各有各的分数，怎么把\u0026quot;分数\u0026quot;翻译成\u0026quot;谁该被表扬、谁该被批评\u0026quot;？ 答案就两步：先算平均和分散程度，再看每张图偏离平均几个\u0026quot;标准差\u0026quot;。\n① 平均分 $\\mu$ 和标准差 $\\sigma$（先认识这两个词）\n$$ \\mu = \\frac{1}{G}\\sum_{i=1}^{G} r_i, \\qquad \\sigma = \\sqrt{\\frac{1}{G}\\sum_{i=1}^{G}(r_i-\\mu)^2 + 10^{-4}} $$ $\\mu$ = 平均分：这组图的\u0026quot;普通水平\u0026quot;。公式就是\u0026quot;分数全加起来除以个数\u0026quot;（图里 μ = mean(r₁⋯r_G)）。 $\\sigma$ = 标准差：分数有多\u0026quot;散\u0026quot;。先算每个分数离平均多远（$(r_i-\\mu)^2$），把这些距离取平均，再开根号。$\\sigma$ 大 = 分数高低落差大；$\\sigma$ 小 = 大家分数都差不多（图里 σ = std(r₁⋯r_G)）。 那个 $+10^{-4}$：防止大家分数一模一样时 $\\sigma=0$，除以 0 会炸，所以垫一个极小值。 ② 优势 $A_i$——\u0026ldquo;比平均好（差）几个标准差\u0026rdquo;\n$$ A_i = \\frac{r_i - \\mu}{\\sigma} $$ 分子 $r_i-\\mu$：这张图比平均水平高出多少分。 再除以 $\\sigma$：把这个分差换成\u0026quot;几个标准差\u0026ldquo;为单位——这叫 z-score（标准化），把不同打分量纲统一成\u0026quot;相对组内好坏\u0026rdquo;。 结论：$A_i\u003e0$ = 比组内平均好；$A_i\u003c0$ = 比组内平均差。 图里例子：$r=[0,0.12,0.45,0.78,0.91,1.00]$，$\\mu=0.543$，$\\sigma=0.395$，于是 $A=[-1.37,-1.07,-0.24,0.60,0.93,1.16]$——最后一张比平均好 1.16 个标准差。 ③ 它怎么驱动训练（把\u0026quot;表扬/批评\u0026quot;变成梯度）\n这条公式不需要重新记——它正是附 A 公式⑦（策略梯度），只是把\u0026quot;奖励 $R$\u0026ldquo;换成\u0026quot;advantage $A_i$\u0026quot;：\n$$ \\nabla_\\theta \\mathcal{L} \\;\\supseteq\\; -A_i\\,\\nabla_\\theta \\log\\pi_\\theta(\\tau_i) $$（推导过程见附 A 第 4 步：期望奖励对 $\\theta$ 求导 → log 求导技巧 → 蒙特卡洛近似。这里只需理解方向——）每条轨迹 $\\tau_i$ 把自己的\u0026quot;概率的对数导数\u0026rdquo;$\\nabla_\\theta\\log\\pi_\\theta(\\tau_i)$ 按它的优势 $A_i$ 加权：\n$A_i\u003e0$（这图比同组平均好）→ 梯度方向抬高这条轨迹的生成概率（表扬）； $A_i\u003c0$（这图比平均差）→ 梯度方向压低这条轨迹的生成概率（批评）。 ④ 为什么 GRPO 不需要 Critic（价值网络）？\nPPO 的 advantage 是 $A(s,a)=Q(s,a)-V(s)$，需要额外训练一个价值网络 $V$ 当\u0026quot;基线\u0026quot;，参数量≈策略网络，显存翻倍。 GRPO 的妙招：拿\u0026quot;同组平均 $\\mu$\u0026ldquo;当基线、\u0026ldquo;同组标准差 $\\sigma$\u0026ldquo;当尺度——就像全班互相评分、按曲线给分（grading on a curve），不需要老师预先定标准，也就省掉了整套 critic。 代价：每组样本 $G$ 必须足够多，平均分 $\\mu$ 和 $\\sigma$ 才估得准（图里底部注释也提到采样量增大）。 附 C｜SDE 窗口图：滑动窗口 + 马尔可夫链的数学 这张图解决一个问题：训练时\u0026quot;10 步全要存进计算图\u0026rdquo;，12B 的模型显存直接炸，怎么办？ 答案：只让其中几步\u0026quot;随机\u0026rdquo;，其余几步当普通 ODE 走完。\n① 先认识马尔可夫链（Markov chain）：每一步只记得上一步\n一条去噪轨迹 $x_0,x_1,\\dots,x_N$（$N$=10 步）是一串前后相连的状态。马尔可夫性就是\u0026quot;记忆只有一步\u0026rdquo;：这一步只跟紧挨着的上一步有关，更早的不记得。类比接力赛：每位选手只从前面那位手里接棒，不关心第一个人是谁。\n于是整条轨迹的概率 = 每步转移概率连乘。这个连乘不是假设，是概率链式法则：联合概率总可以先拆成\u0026quot;第一步的概率 × 已知第一步时第二步的条件概率 × …\u0026quot;（条件概率的定义 $P(A\\cap B)=P(A)\\,P(B\\mid A)$ 反复套用）：\n$$ p(x_0,\\dots,x_N\\mid c) = p(x_0)\\prod_{k=1}^{N}p(x_k\\mid x_{k-1},\\;c) $$ $p(x_0)$：起点是噪声的概率（基本是常数）。 $p(x_k\\mid x_{k-1},c)$：已知上一步，这一步会走到哪的概率——正是附 A 那个高斯核。而\u0026quot;每步只依赖上一步\u0026quot;（马尔可夫性）则让这个式子从\u0026quot;每一步依赖前面所有步\u0026quot;简化成\u0026quot;只乘相邻两步的条件概率\u0026quot;。 理论上要对\u0026quot;整条轨迹\u0026quot;求梯度，这 $N$ 个高斯核的每一步都得存进计算图；但每步都过 12B 的 DiT，全存 = OOM。\n② 窗口化 = 只让部分步骤\u0026quot;随机\u0026quot;\n既然\u0026quot;概率\u0026quot;只来自随机的步骤，那就只保留一小段随机，其余走确定性 ODE：\n窗口前（前几步）：noise_level=0，退化为确定性 ODE——一步一个确定结果，不需要存中间状态（torch.no_grad()）。 窗口内（后 window_size 步）：恢复噪声，走 SDE——随机、有 $\\log p$，才需要建计算图记录梯度。 窗口后：再回到 ODE 收尾。 于是损失只对窗口内（随机段）取期望，其余步骤对梯度没贡献：\n$$ \\mathcal{L} \\approx -\\sum_{k\\in\\,\\text{window}} A\\,\\log p_\\theta(x_k\\mid x_{k-1},c) $$③ 为什么梯度仍能回传（不会断）？\nbackward() 只展开窗口内那几步的计算图，所以显存只存窗口内的 DiT 激活（window_size 步，如 geneval_flux_fast 的 3 步 → 约 36B 激活 → ~22GB），窗口外步骤在 no_grad 下算完，只把最终 latent 递给窗口。 因为窗口内每步都复用同一套权重 $v_\\theta$，由链式法则，窗口路径的梯度会正常累积到所有参数上——不会因为窗口小就\u0026quot;传不回去\u0026quot;。 真正的取舍：窗口外的步骤不贡献梯度（它们只负责把 $x_0$ 推进到窗口起点）。这是 Flow-GRPO-Fast 用\u0026quot;梯度近似\u0026quot;换\u0026quot;显存可行\u0026quot;的妥协。 🧭 总结：一图串起整个 Flow-GRPO 到这里，正文的\u0026quot;十步\u0026quot;、代码里的每个函数、附录里的每条公式都散落在各处。这一节把它们串成一条完整的因果链——从上到下读，每一步都是\u0026quot;上一步为什么必须存在\u0026quot;的答案：\n沿着因果链走一遍（8 个节点） 节点 一句话 核心公式 为什么必须这么做 ① 学速度 Flow Matching 训练让网络学会\u0026quot;往哪走\u0026quot; $L=E\\|v_\\theta-(x_1-x_0)\\|^2$ 没有速度场就没有\u0026quot;生成\u0026quot;这回事 ② ODE→SDE 为了算概率，给速度场加噪声 $dx=v_\\theta dt+g\\,dW$ 纯 ODE 无随机性 → 无 $\\log\\pi$ → 无梯度 ③ 高斯 log p SDE 单步是高斯核，概率有闭式解 $\\log p=-\\frac{\\|x_{k+1}-\\text{mean}\\|^2}{2\\sigma^2(-\\Delta t)}-\\log(\\sigma\\sqrt{-\\Delta t})-\\log\\sqrt{2\\pi}$ PPO ratio 需要可微的逐跳概率 ④ 轨迹概率 整条路概率 = 各步连乘 $\\pi_\\theta(\\tau)=\\prod_k p(x_{k+1}\\mid x_k)$ 采样记 $\\log\\pi_{old}$，训练算 $\\log\\pi_{new}$ ⑤ Advantage 同组归一化定好坏 $A_i=(r_i-\\mu)/\\sigma$，clip 到 ±2 省掉 critic，把奖励翻译成梯度方向 ⑥ 策略梯度 好事抬、坏事压 $\\nabla L=-E[A\\,\\nabla\\log\\pi_\\theta]$ 这是 GRPO 优化策略的本质动作 ⑦ PPO + KL 稳住更新、防遗忘 $\\max(-Ar,\\ -A\\cdot\\text{clip}(r))\\ +\\ \\beta L^{KL}$ reward 易 hack，必须限制每步步子大小 ⑧ 闭环 回到采样，再来一个 epoch 循环 ①~⑦ on-policy：采样与训练始终用同一组参数 从三条主线理解 FM 生成（①②）：先让模型学会\u0026quot;生成\u0026quot;（速度场），再为了强化学习\u0026quot;改造生成过程\u0026quot;（注入噪声得概率）。这一段的全部数学细节在附录 A。 对齐打分（③④⑤）：把\u0026quot;生成的好坏\u0026quot;变成\u0026quot;可优化的信号\u0026quot;——高斯给出概率（③④），组内归一化给出 Advantage（⑤）。细节在附录 A ⑤ 和附录 B。 策略优化（⑥⑦）：用策略梯度抬好压坏（⑥），用 PPO clip + KL 保证稳定更新 LoRA（⑦）。细节在正文第 5、6 步。 三句话总串 Flow Matching 先教会模型\u0026quot;从噪声走到图片的速度\u0026quot;——这是生成能力的来源； 为了强化学习，把确定性 ODE 变成随机 SDE——得到可微的 $\\log p$，配合组内 Advantage，就能算出\u0026quot;该抬哪条轨迹、压哪条轨迹\u0026quot;的策略梯度； 用 PPO 的 clip 技巧和 KL 惩罚稳住每一步更新，只更新 LoRA 参数，然后回到采样继续下一轮——这就是 Flow-GRPO 的全部逻辑闭环。 参考 代码库：/root/workspace_qyl/Flow-GRPO/flow_grpo/ GRPO 论文：DeepSeekMath (arXiv:2402.03300) Flow Matching：Flow Matching for Generative Modeling (arXiv:2210.02747) PPO：Proximal Policy Optimization Algorithms (arXiv:1707.06347) DDPO：Denoising Diffusion Policy Optimization (arXiv:2307.09439) ","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/flow-grpo-complete-guide/","summary":"从 train_flux_fast.py 第 1 行开始，逐层追踪 Flow-GRPO 的完整逻辑链：采样阶段做了什么？reward 怎么变成 advantage？训练阶段的计算图是怎么构造的？loss 为什么那样设计？梯度如何从最后一个 log_prob 传到 LoRA 参数？每段代码都标注了源文件行号。","title":"Flow-GRPO 完全讲解：训练/推理/梯度流/Loss 设计的逐行拆解"},{"content":"一、为什么写这篇文章 本博客陆续精读了 100+ 篇自动驾驶与机器人模型论文——从感知基座（BEVFormer/Sparse4D），到显式端到端（UniAD/VAD/SparseDrive），到打分式（CLOVER/Hydra-MDP/GTRS），到扩散与 Flow 生成（DiffusionDrive/TransDiffuser/GoalFlow），再到 VLA 大模型（DriveVLM/EMMA/AutoVLA/LinkVLA）与世界模型（Cosmos/DriveFuture/WoTE）。单独看是逐篇精读，放在一起，端到端自动驾驶在 感知 → 预测 → 决策 → 规划 四个架构维度上的演进脉络其实非常清晰。\n这篇文章把博客里所有精读过的模型收进同一个坐标系，回答三个问题：\n感知：从稠密 BEV 到稀疏 query 再到纯视觉 token、几何寄存器，一路在换什么？ 预测/决策/规划：从显式管线到打分排序、扩散生成、Flow 整流、LLM 推理、世界模型 roll-out，谁在取代谁？谁融合了谁？ 谁真正有效：把彼此在 NAVSIM 上的 PDMS/EPDMS 分数和架构创新对照起来，看看分数到底来自技巧还是来自架构。 本文每个模型给\u0026quot;流派 → 核心创新 → 架构拆解（骨干/模块/输出/训练） → 代表分数\u0026ldquo;四个维度，尽量讲清楚架构；分数严格区分官方排行榜与 arXiv 自报，口径不一致处会注明。机器人侧的 VLA 模型（RT 系列、π0）作为同源背景单列一节——它们定义了「动作 token」「动作分块」「Flow 动作头」这三个被驾驶侧反复借用的组件。\n二、先立坐标系：六大流派一张图 按「感知表征 × 规划输出方式」两个维度，我把博客里的方法归为六大流派：\n流派 代表模型 核心思想 感知表征 规划输出 ① 显式端到端管线 UniAD、VAD、VADv2、SparseDrive、PARA-Drive、DriveTransformer、TransFuser 感知/预测/规划在同一个可训练网络里串起来 稠密 BEV / 稀疏 token / 寄存器 单条/多条轨迹回归 ② 评分排序式 (Scoring) CLOVER、Hydra-MDP、GTRS、SparseDriveV2、TOAD、GoalFlow 大量生成候选，再学打分器（或用搜索/流）选出最优 稀疏特征 / 轨迹词汇表 / 目标点 从候选集合中选 Top-1 ③ 扩散/Flow 生成式 DiffusionDrive、DiffusionPlanner、TransDiffuser、SafeDiffuser、FeaXDrive、Gen-Drive 把规划当成从噪声里生成（DDPM / Flow Matching / 整流流） 稀疏感知 / BEV / 图像 多模态轨迹生成 ④ VLA 大模型式 DriveVLM、EMMA、AutoVLA、LinkVLA、OneVL、LaST-VLA、WCog-VLA LLM/VLM 做感知+推理+决策，语言或 token 输出动作 视觉 token / 稀疏 query / 隐 token 语言决策 / 轨迹 token ⑤ 世界模型式 Cosmos、DriveFuture、WoTE、DreamerV3、DLWM、RAW2Drive、ReWorld 建模环境动力学/未来状态，以未来为条件或打分规划 隐潜 / 视频 token / BEV 未来帧 条件化/打分/rollout 规划 ⑥ 数据与评测基建 Bench2Drive、CARLA、K-Risk、MOSAIC、重卡数据集族 提供闭环基准、数据选择、仿真、安全分析 — — 一句话直觉：① 是\u0026quot;手拉手串行提线木偶\u0026rdquo;，② 是\u0026quot;多打几遍再挑\u0026quot;，③ 是\u0026quot;从噪声里一遍遍画\u0026quot;，④ 是\u0026quot;读得懂交规再动手\u0026quot;，⑤ 是\u0026quot;先在脑内模拟未来再决定\u0026quot;，⑥ 是\u0026quot;让前面所有流派有地方比\u0026quot;。六大流派不是互相淘汰，而是逐层叠加——今天最强的系统几乎都是 ②③⑤ 的混合。\n三、流派①：显式端到端管线——从 BEV 到稀疏 token 到寄存器 这类方法把感知、预测、规划放在同一个网络里联合训练，是端到端的\u0026quot;正统\u0026quot;。它们的分界线是：用什么中间表征承载场景理解。\n感知基座（两个源头） 1. BEVFormer——稠密 BEV 的\u0026quot;标准定义\u0026quot;（ECCV 2022） 创新：可学习 BEV grid query + 空间交叉注意力（SCA）（deformable 采样多相机特征）+ 时序自注意力（TSA）（带 ego 运动补偿）——第一次让稠密 BEV 能跨视角、跨时序\u0026quot;被感知到\u0026quot;。nuScenes NDS 56.9%。 架构：BEV 网格 200×200，每个 query 沿射线在图像特征上可变形采样（K=4 参考点）聚合 → 时空融合；是 UniAD/VAD/PARA-Drive 等一切 BEV 链路的感知原型。 2. Sparse4D——全稀疏的\u0026quot;另一条路\u0026quot; 创新：完全不建 BEV，稀疏 anchor + 4D keypoint 采样（一个采样动作同时做空间+时序融合），随时间循环压缩；推理时给 instance 分配 ID 就能当 tracker（V3 AMOTA 67.7%）。 架构：instance query → 稀疏采样 → 循环优化；是 SparseDrive 系列\u0026quot;稀疏化\u0026quot;思想的感知层源头。 判断：BEVFormer vs Sparse4D = 算力换语义 vs 语义换算力。显式管线的拉锯史，就是这两极之间的钟摆。\n完整显式管线（7 个代表） 1. UniAD——显式端到端的开山之作（CVPR 2023 最佳论文） 架构：检测（TrackFormer）→ 建图（MapFormer）→ 运动预测（MotionFormer，每 agent K=6 条轨迹） → 占位（OccFormer）→ 规划，五任务挂在同一个 BEVFormer 骨干上，通过统一 query 接口在任务间传特征（特征级、可微、不丢信息）。规划 head 用 ego query 交叉注意力到 BEV+motion+occupancy，加\u0026quot;碰撞损失 + 推理时 occupancy 梯度优化\u0026quot;。 训练：两阶段（感知预训练 → 联合微调）；约 7-10 FPS。 分数：nuScenes 开环 L2 0.44/0.99/1.71、碰撞率 0.56（其意义不在分数而在\u0026quot;规划第一次成为全网络集体目标\u0026quot;）。 2. VAD——向量化的\u0026quot;轻量版 UniAD\u0026quot; 架构：仍用 BEV 编码器，但输出向量化 3D box 与向量化地图（去掉稠密栅格）；Motion Head 用模式嵌入 + agent-map 交叉注意力出多模态轨迹；规划加三个可微向量化约束（ego-agent 碰撞、ego-边界、ego-车道方向）+ 离线专家（Hybrid A*）规划 KD。 分数：nuScenes L2 0.72、碰撞 0.22%；比 UniAD 快 2.5-9.3×。 VADv2（在博客里单独精读）：把规划升级为 **FPS 采样 4096 条完整轨迹词表 + 概率场（sigmoid 多标签）**建模 P(动作|场景)，conflict loss 内嵌碰撞/越界先验，坐标用 NeRF 式高频位置编码；还能 top-K + 规则 wrapper + 人工接管混合模式。CARLA Town05 DS 85.1、Bench2Drive 76.15、NAVSIM 概率规划 87.7；词表 256→1024→4096 一路涨（70.2→78.1→85.1），16384 饱和——它是 Scoring 意识最早长在\u0026quot;显式管线\u0026quot;身上的模型。 3. SparseDrive——\u0026ldquo;完全稀疏\u0026quot;的显式管线 架构：砍掉稠密 BEV 编码层，instance query 直接与多视角图像特征 deformable 交互；感知-预测-规划并行双支（motion / planning 独立输出），打断 UniAD 的串行误差级联；规划 branch 直接回归未来 waypoints + 数据驱动 anchor + 碰撞/舒适/合规打分。计算量与对象数成正比而非 BEV 分辨率平方。 分数：nuScenes 开环第一梯队。 4. PARA-Drive——完全并行的模块化端到端（CVPR 2024） 架构：四模块（地图/运动/占用/规划）在同一 200×200 BEV 上完全并行、模块间零直接连接，共享 BEVFormer 编码（R50/R101，6 视图 256×704）。地图=MapTRv2、运动≈VAD（~100 agent query）、占用=OccNet 风格、规划=plan query 交叉注意力 + CANbus/指令入 → 未来 3s 6 waypoint。联合训练，推理时模块可按需开关。 关键发现：地图模块价值在监督信号而非输出直用；运动（轨迹）与占用（栅格）互补——这是最早系统化回答\u0026quot;端到端里到底几个模块、怎么连\u0026quot;的实验设计。 分数：nuScenes 开环 Coll 0.19、L2 0.5885（PARA-Drive+）；推理 135ms 全量；复杂场景 Coll 0.05。 5. DriveTransformer——告别 BEV，拥抱稀疏 Token 并行（ICLR 2025） 架构：彻底抛弃稠密 BEV，用三种注意力统一所有交互：SCA（sensor token 与图像特征）、TSA（任务 query 间并行自注意力）、TCA（时序交叉注意力，FIFO 队列+运动补偿）。sensor token 用 3D PE（PETRv2 射线采样），Agent token ≈300、Map token ≈100（DAB-DETR 三分）。运动预测在局部坐标系输出（minADE 全局 2.68→局部 1.34）；规划是 6 模式高斯混合 + winner-take-all。单阶段端到端，batch size 12 能跑（UniAD 只有 1）。 分数：Bench2Drive 闭环 DS 63.46/SR 35.01（UniAD 45.81/VAD 42.35）；nuScenes Avg L2 0.40；对标定误差鲁棒（VAD 掉 28%，DT 仅 5.9%）；规模 47M→646M 时 DS 45→68。 6. TransFuser——用 Transformer 做传感器融合（NeurIPS 2022） 架构：相机图像（400×300）+ LiDAR BEV（256×256，0.125m/pixel，32m）在 4 层 CNN 尺度上做自注意力密集融合（每层展平 token → 拼接 → 自注意力 → 残差），取代 Late/Geometric 融合；全局向量 → MLP + GRU 自回归预测差分 waypoint（4 个，0.5s 间隔）→ PID 控制。4 个辅助任务（深度/语义/HD 地图/车辆检测）。 历史地位：CARLA 最早证明\u0026quot;逐级逐步融合 \u0026gt; 后融合\u0026rdquo;，是 DiffusionDrive/TransDiffuser/GoalFlow 等方法的通用感知骨干被反复冻结复用的对象。 7. DrivoR——寄存器 Token 的高效 E2E（\u0026ldquo;Driving on Registers\u0026rdquo;） 架构：把实值 寄存器 token（register token）引入 E2E 感知-规划，时空寄存器聚合多帧跨分辨率特征，网络更浅更快、鲁棒性更好；是\u0026quot;稀疏寄存器表征\u0026quot;的代表，也是 TOAD 论文里被用作基规划器的对象。NAVSIM-v2 EPDMS 54.6（在 TOAD 精读中被反复引用），v1 PDMS 90+ 级。 判断：显式管线这条线的主线是**\u0026ldquo;表征去稠密化\u0026rdquo;（BEV 200×200 → 向量 → 稀疏 query → 局部系轨迹 → 寄存器 token）和\u0026ldquo;模块并行化\u0026rdquo;**（UniAD 串行 → PARA-Drive/DriveTransformer 全并行）。VADv2 的出现预示了这条线向 Scoring 的靠拢——显式管子最终把\u0026quot;规划\u0026quot;交给了\u0026quot;词表+打分\u0026quot;。\n四、流派②：Scoring-based——\u0026ldquo;多生成几遍，再打分挑\u0026rdquo; 核心想法：不直接\u0026quot;开\u0026quot;，而是\u0026quot;先想一万个开法，再让打分器挑\u0026quot;。在 NAVSIM 这种规则化、确定性的评测下，这是最稳的路线。\n1. CLOVER——Scoring 流派天花板（NAVSIM v1 官方榜 #1，94.5 PDMS） 架构：冻结 DINOv2 ViT-S 提视觉特征 → 轻量生成器（Transformer decoder）出 N 条候选轨迹 → Scorer（Cross-Attention，候选↔场景特征）对每条输出子分数 → 选 Top-1。打分器的监督信号是评估器在候选上算出的真实分数——它直接在学习排行榜的判分函数本身。 两个关键机制：① 伪专家覆盖训练——从可解释动作族构造超大候选池 + FPS 采样保证覆盖，打分器给\u0026quot;伪专家集合\u0026quot;打高分、给池外打低分；② 保守闭环自蒸馏——把打分器的完整排序偏好（不只是选中的一条）回传给生成器，形成\u0026quot;生成-打分-蒸馏\u0026quot;的在线自我改进闭合回路。 理论保障：论证\u0026quot;打分器选中目标在真实评估器下显著优于当前分布时，保守蒸馏必提升高分区概率质量\u0026quot;。 分数：navtest PDMS 94.5（官方 #1）、navtest v2 EPDMS 90.4、NavHard 48.3。 2. Hydra-MDP / Hydra-SE——NVIDIA 的多目标蒸馏（NAVSIM 官方榜 91.26 / 91.87） 架构：固定 anchor 词表（K=8192 条预定义轨迹）+ 多头解码器（每个 head 出一个轨迹簇的残差）→ ScoreNet（轻量 MLP）打分。训练同时吃两类老师：human 教师（模仿真实轨迹）与 rule 教师组（碰撞/可行驶/舒适等规则评估器各自打分），多头打分器分别向各子分蒸馏；推理时去掉 rule 教师，按权重聚合成总分。 工程价值：几乎成为后续所有 Scoring 方法的对照基点；3-5 模型集成可再 +2-3 PDMS。 3. GTRS——通用轨迹评分（CVPR25 自动驾驶挑战赛 E2E 冠军） 架构：① 扩散策略（DP）生成动态细粒度候选（BEV 图像 backbone → DiT 条件生成，DDPM 100 步出 100 条）；② 超密集训练词表 16,384 + 词表 Dropout——训练时随机删一半词表，迫使打分器学习\u0026quot;轨迹形状→分数\u0026quot;的泛化映射而非死记词表，推理时用更小的 8192 词表故意制造分布不匹配逼泛化；③ 传感器旋转增强 + top-k 细化自蒸馏（EMA 教师软标签拦截修正）。 分数：NavHard 榜 EPDMS 49.4（6 模型集成，逼近依赖真值感知的 PDM-Closed 51.3）；词表 Dropout 是单点最大增益（41.7→43.4）。 4. SparseDriveV2——Scoring 完成体（NAVSIM 官方 92.0 / v2 EPDMS 87.35） 架构：把\u0026quot;整条轨迹\u0026quot;分解为几何路径(path) × 速度剖面(velocity) 两个词表（路径 1024 条、速度 256 条），组合出 262,144（26 万）条轨迹词表，记忆开销只等于两者之和；两级评分——先对 path / velocity 各自粗打分（O(Np+Nv)），保留 top-K 后再对组合轨迹做细粒度联合打分（O(K)）。打分计算量与词表规模解耦。 分数：navtest PDMS 92.0（官方）、v2 EPDMS 87.35；词表 scaling 1024→16384 单调涨不饱和。 5. iPad——Iterative Proposal-centric E2E（NAVSIM v1 91.7） 架构：proposal-centric + 多轮迭代规划——Scene Encoder（LSS 生成图像特征）→ ProFormer（proposal 当 query，对 proposal-centric 图像特征做 deformable attention，逐轮迭代自修正，K 轮）→ 打分选优。proposal 数/迭代数/数据量都呈对数增长 PDM。 分数：NAVSIM v1 camera（R34）PDMS 91.7（NC 98.6 / DAC 98.3 / TTC 94.9 / EP 88.0）。 6. TOAD——Test-Time Trajectory Optimization（2026，把评分器当奖励函数搜索） 架构：把端到端规划器中已训练好的轨迹评分器重新解释为\u0026quot;学习到的轨迹奖励函数\u0026quot;，测试时用 CEM（Cross-Entropy Method）在连续控制空间里搜索最大化该奖励的轨迹：先用运动学自行车模型把搜索空间压到控制空间 u=(加速度, 角速度)（保证动力学可行 + 维度压缩），目标 J(u)=评分器(BM(u)) − λ·舒适正则 − λ·锚点正则（warm-start 自基规划器输出）。CEM M=64 采样、E=8 精英、迭代 K 轮。 关键发现：固定词表类的打分器（Hydra-MDP/GTRS）在测试时搜索反而掉分（分布内过拟合）；on-the-fly 类（DrivoR/iPad）则一致提升。 分数：NAVSIM-v1 PDMS DrivoR+TOAD 94.7（逼近 Human 94.8）；v2 EPDMS 让 iPad 34.7→49.8、DrivoR 54.6→56.3（逼近 PDM-Closed 56.6）；延迟仅 +1.9~2.7ms。 7. GoalFlow——目标点词表 + Flow 一步生成（NAVSIM 90.3） 架构：用密集\u0026quot;目标点词表\u0026quot; + 学习式评分先精确选出短期终点（约束在可行驶区域内），再用整流流（Rectified Flow）单步生成多模态轨迹 v_θ(x_t, c, t)，解决\u0026quot;扩散发散无边界 vs 锚点约束太强\u0026quot;的两难。感知用被冻结的 TransFuser 骨干；影子轨迹机制对冲目标点选错的风险。 分数：NAVSIM PDMS 90.3；1 步去噪击败 DiffusionDrive 动辄 10+ 步；DAC 显著领先（目标点约束保证不出路面）。它是\u0026quot;FM 生成器 + 打分器\u0026quot;范式的直接先例。 8. MOSAIC——数据选择（数据侧 Scoring 方法论） 架构：缩放感知数据选择三阶段：聚类分域 → 逐域拟合神经缩放定律 ΔÛ(n) → 贪心选边际增益最大的域。模型无关（在 Hydra-MDP 上验证）。 分数：NAVSIM 用 ~42% 数据达全量 99.6% 性能（EPDMS 86.73 vs 全量 87.12）。 判断：Scoring 流派的演进是清晰的：CLOVER（生成器+打分器闭环蒸馏）→ Hydra-MDP（多目标多头打分）→ GTRS（词表 Dropout 逼泛化）→ SparseDriveV2（因子化超密词表）→ TOAD（把打分器当奖励做测试时搜索）→ GoalFlow（FM 一步生成+目标点）。它们合起来回答了\u0026quot;打分器必须既想得多、又想得准、又想得快\u0026quot;。\n五、流派③：扩散 / Flow 生成式规划 1. 奠基：Diffusion Policy（RSS 2023，机器人侧方法论母体） 架构：把动作生成变成条件去噪过程（DDPM），建模完整多模态分布，避免回归的 mode averaging；receding horizon（生成 T 步、执行前 K 步、重规划）；推理时 DDIM 100→10→5 步；可视化 + FiLM 注入。它是整个扩散生成流派的母体。 2. Diffusion Planner（ICLR 2025 Oral） 架构：DiT + MLP-Mixer 联合生成 ego 与 M 个邻居的未来轨迹（预测与规划合一，交互自然涌现）；推理时用训练免费的 DPS（Diffusion Posterior Sampling）分类器引导注入碰撞/可行驶/车辆动力学能量约束——无需重训，一个模型多种驾驶风格。nuPlan 闭环 SOTA。 3. DiffusionDrive V1/V2（CVPR 2025 及其 RL 续作） V1 架构：截断扩散 + 轨迹 anchor 化——从 20 个 k-means 聚类 anchor 附近加噪声（而非标准高斯），去噪压缩到 2 步；多候选 + 成本选择。PDMS 88.1。 V2 架构：在生成器上做 Intra-Anchor GRPO（组内比较保多模态稳定）+ Inter-Anchor Truncated GRPO（用碰撞做全局安全先验、截断负优势）+ 两级 Mode Selector；尺度自适应乘性探索噪声保轨迹几何平滑。PDMS 91.2、v2 EPDMS 85.5。 4. TransDiffuser——去相关多模态表示（NAVSIM 94.85） 架构：指出扩散轨迹生成模式坍缩的根源在**\u0026ldquo;条件特征的信息瓶颈\u0026rdquo;而非生成过程；多模态融合特征后施加去相关正则化**（强制特征相关矩阵对角化），让条件信号覆盖更多潜空间，无需任何锚点/场景先验。Scene Encoder 冻结 TransFuser 骨干，Motion Encoder 编码历史轨迹+速度，Decoder = DDPM（T=10）预测相邻位移差分；推理 30 条候选 → 运动学过滤 → PDMS 评分选优。 分数：NAVSIM PDMS 94.9（94.85），R34+LiDAR，无锚点 SOTA。训练只要 2h@4×H20。 5. SafeDiffuser——CBF 安全引导的扩散规划（ICLR 2025） 架构：把控制障碍函数（CBF）改造成\u0026quot;有限时间扩散不变性\u0026quot;，嵌入去噪每一步：每步去噪叠加安全梯度（求解最小修正 QP），给\u0026quot;可证明安全\u0026quot;而非软约束。三种变体：RoS（严格不变）、ReS（宽松）、TVS（时间自适应）。推理只增加 20-30% 时间。 分数：Maze2D 约束满足 99.4%（Diffuser 58.2%）；窄通道 98.7% vs 12.5%。 6. FeaXDrive——轨迹中心扩散 + 可行性感知 GRPO 架构：指出 noise-centric 扩散与轨迹可行性空间\u0026quot;对齐断裂\u0026quot;，改为直接预测 clean trajectory x₀（trajectory-centric）；三阶段覆盖可行性：自适应曲率正则训练（曲率 κ 越界才激活惩罚 L_cur）+ 可行驶区域 SDF 引导推理（HD map→SDF，footprint 级 4 角点采样 + softplus 屏障）+ 可行性感知 GRPO 后训练（奖励 R = PDMS + 曲率偏好）。VLM InternVL3-2B 提多视图条件。 分数：NAVSIM IL PDMS 88.7 → FA-GRPO 90.0；曲率违反率 IL 8.59%→0.88%（DiffusionDrive 8.59%）。它把\u0026quot;可行性\u0026quot;变成了可微分可训练的目标。 7. Gen-Drive——生成-评估范式（\u0026ldquo;生成未来 + 学奖励 + RL 精调\u0026rdquo;） 架构：三组件：① 条件行为扩散生成器——条件于自车候选动作联合生成多智能体未来（what-if）；② 场景评估器 = 学习型 reward 模型——用 VLM 辅助采集成对偏好数据训练 Bradley-Terry 打分（大幅降人工标注）；③ RL 微调——把 reward 反向传播到生成过程。工作流：候选采样 K → 每候选生成 M 个未来 → 打分 → 选优 → 离线 RL 精调。 结论：nuPlan 闭环上\u0026quot;生成+评估\u0026quot;优于纯模仿扩散；学习型 reward 在评估与微调中均优于人工设计 reward——这是\u0026quot;世界模型给 reward\u0026quot;思路的早期验证。 8. 扩散流派横向对比 方法 生成方式 多样性保证 RL 分数 Diffusion Policy DDPM 动作生成 多模态采样 ✗ 机器人 +46.9% Diffusion Planner 联合 ego+邻居去噪 + 训练-free 引导 多模态采样 ✗ nuPlan 闭环 SOTA DiffusionDrive V2 20 锚点截断扩散 锚点覆盖 GRPO 88.1 / 91.2 TransDiffuser 去相关特征 + 无锚点 DDPM 特征去相关 ✗ 94.85 SafeDiffuser DDPM + 每步 CBF-QP 安全约束 ✗ 约束满足 99.4% FeaXDrive 轨迹中心 DiT SDF 引导 FA-GRPO 90.0 GoalFlow Rectified Flow 单步 目标点词表 ✗ 90.3 Gen-Drive 行为扩散 what-if 学习 reward RL nuPlan 定性优于 IL 六、流派④：VLA 大模型式——\u0026ldquo;读得懂交规再动手\u0026rdquo; VLA（Vision-Language-Action）把 LLM/VLM 当成驾驶\u0026quot;大脑\u0026quot;：感知与推理用语言/视觉 token，输出或用语言描述决策、或直接吐轨迹 token。这个流派内部又裂成两支——显式推理（慢思考，CoT 可解释）与隐式/端到端 token（快思考，把推理压缩进潜空间）。\n1. DriveVLM 家族（清华 × NVIDIA，最早把 LLM 端进驾驶的体系） DriveVLM（CVPR 2025） 架构：三层 CoT 管线——场景描述（把多视角图像转成语言标注）→场景感知（密集语言描述：位置/速度/形状/颜色 + 3D grounding 把语言对象锚到空间）→驾驶推理与规划（分\u0026quot;能否/如何/何时\u0026quot;决策 + \u0026ldquo;在哪/何时/怎样\u0026quot;动作）。LLM 推理后接算法规划器做硬件级控制。 DriveVLM-D：把重 VLM 蒸馏成轻量模型，实现可落地的效率；dual-branch 结构——VLM 慢速推理与感知-规划流水线快速出车并行，谁先给结果谁当主。 DriveVLM-W0 / DriveVLM-RL（CASIA × 蔚来，NAVSIM 主战场） W0 架构：感知双分支长在传统端到端系统上——VLM 分支负责\u0026quot;多光谱推理\u0026rdquo;（跟踪物体、查询目标、一系列多模态窄问题），传统分支负责稠密几何定位；两分支在轨迹层面融合。稠密世界模型监督是本系列的灵魂——用\u0026quot;未来帧/轨迹\u0026quot;当稠密监督，把 VLA 从稀疏的\u0026quot;动作 token\u0026quot;监督里解放出来。NAVSIM 与 Anchor 配合 AR 模式报 93.0 PDMS，是当时 VLA 路线最强。 RL 版（DriveVLM-RL）：把规划器训练从 IL/SFT 升级为世界模型做 teacher 的 RL（narrow-form 提问 + 世界模型判定结果），减少对数据标注与人工偏好的依赖；蒸馏成双分支运行的\u0026quot;GPT 模式\u0026quot;（服务端 VLM 把关到鸿沟，端侧快速执行）。论文含 KKN（Kinematic/Kalman Navigation?）——实为\u0026quot;用世界模型增强规划\u0026quot;的关键拼图（见五）。NuScenes 62.6→87.5、Bench2Drive DS 53→71（+29.3%）。 DriveGPT（同一家族的服务模式） 云端 VLM 负责长尾推理与三重闭环（主规划自评/感知自评/AP 出车校准），模型权重通过蒸馏流到端侧小模型，端侧只做快速执行。 2. EMMA——Waymo 的\u0026quot;单一模型做一切\u0026quot;（Gemini 底座） 架构：不重新训练、不微调规划，直接用 Gemini 2.0 的预训练能力，把整辆车的驾驶任务压进一个自回归 LLM：多相机图像 token 输入，单/多任务序列输出——物体 3D 框（导航坐标表示）、地图、意图轨迹、驾驶规划、位姿。所有空间实体都用**导航坐标（navigational coordinates）**编码成小 VQA 文本，GPU 端即可闭环驾驶。 意义：证明了\u0026quot;一个通用大模型 + token 数学\u0026quot;可以覆盖感知-预测-规划全链，无需专用头；是 VLA 流派\u0026quot;最 Big-Model\u0026quot;的一极。 3. AutoVLA——快慢思考双模式（NeurIPS 2025，UCLA） 架构：一套自回归生成模型里塞下两种模式：快思考（只要动作 token，无推理）与慢思考（带 CoT 语言推理）。连续轨迹用 **codebook 离散成\u0026quot;物理动作 token\u0026quot;**送给下一帧（不依赖 planner 姿态）；SFT 训练双模式后，用 GRPO 在简单场景把多余推理关掉（输出 VLD 开关信号 + 可验证奖励 = 轨迹安全/PDMS/推理成本）。 分数：NAVSIM v1 PDMS 89.1 / 92.1（+锚点）；慢思考在长尾（博弈/施工）显著占优，常规场景与快思考持平——\u0026ldquo;自适应推理\u0026quot;的产出物。 4. LinkVLA——\u0026ldquo;视觉分词器 + LLM + 回归头\u0026rdquo;，纯 VLA 直出轨迹 架构：多相机 → visual tokenizer 压缩成视觉 token → LLM 骨干自回归消耗 → 每步输出 25 个轨迹残差 token（直连几何），没有语言 CoT；推理零改写。统一用 \u0026ldquo;预测未来\u0026rdquo; 目标联合训练感知（实验证明副产物也能当欧式 3D 检测）。bench 全流程 24M 数据规模定律训练（Seq-Scaling 至 2.5×→2B 级仍线性涨）。 分数：Bench2Drive DS 91.01 / SR 73（直接刷新 CARLA v2 闭环纪录）、NAVSIM 第一阶段排名级最佳。澄清：它不是\u0026quot;又一个大蒸馏\u0026rdquo;，而是\u0026quot;先大再蒸馏\u0026quot;的架构选择——7.3M 封顶蒸馏的 tokenizer 也已够用。 5. OneVL——稀疏感知 × LLM 的隐式 CoT（NAVSIM 86.83） 架构：SparseQuery→Tokens→LLM：感知用稀疏 query（如 BEVFormer 风格）做成 scene tokens + 高维看不清但算得六模态候选轨迹 score；四个关键设计：多语义分解、语义感知稀疏压缩、单步因果投影（Latent CoT）、辅助专家解码器推理后丢弃。55 个可学习隐 token充当软提示在单次前向里\u0026quot;隐式多想了一步\u0026quot;，推理 4.46s 与\u0026quot;不推理\u0026quot;的 4.49s 几乎持平且反超显式 AR CoT 32%。 分数：NAVSIM PDMS 86.83（4B 干掉 8B 的 LaST-VLA / AdaThinkDrive）；把显式 CoT 的延迟税全面免掉是它的革命性贡献。 6. LaST-VLA（CogVLM 家族）——隐 token 自适应缩放 架构：视觉 token 先经 压缩器（CNN→token，尺度自适应）再进 LLM：高分辨率 token 给场景语义、低分辨率/稀疏 token 给大范围感知，自适应 token 做端到端对照。规划层：粗 zoom-out 输出语义 Waypoint 意图 + 细 zoom-in 关键点精化——语言与 token 双轨。 分数：NAVSIM v1 比赛训练集 top0 88.6（见表对比）。它是 OneVL/LaST 论文里被秒杀、但\u0026quot;token 尺度自适应\u0026quot;思想被反哺的典型。 7. WCog-VLA——轻量车端 VLA（本地优先） 架构：跨传感器 token 尺度统一 + 轻量模型（~TB 级推理预算内）：多相机/多分辨率 token 对齐到同一空间分辨率，再走稀疏 query → 决策 LLM → 连续控制。主打\u0026quot;纯单车端 + 全稀疏\u0026quot;到不了云端的落地路径。实车 demo 事件框架。NAVSIM 上接近顶配组的轻量判别级表现（PDMS 与 OneVL 同一批读级）。 8. Senna-VLM / Alpamayo-R1 / AlphaDrive / ReCogDrive——推理流派全家 Senna-VLM：清华系 VLM 驾驶感知口语化冠军——引入\u0026quot;亚像素空间感知\u0026quot;（业界的\u0026quot;1600 万像素定位\u0026quot;江南炼丹系）、一致性检查、隐蔽物体推理；感知是第一落点、规划是延伸。 Alpamayo-R1：CoT 推理式部署——任务=感知-预测-决策分步推理（可读），在 CARLA 闭环拿到高速/Fig8/对抗负例都高的综合分数，\u0026ldquo;可视化即赛点\u0026rdquo;；虽被 OneVL 归为\u0026quot;吵查式\u0026quot;，但\u0026quot;推理可审计\u0026quot;是 VLA 落地的诉讼护城河。 AlphaDrive：Apache 系端到端推理 VLA，分步规划（元规划→执行→验证三段）在当前 VLA 俱陷入\u0026quot;感知准/规划弱\u0026quot;时主打\u0026quot;把规划的每一步也变成 token 可审计\u0026quot;。 ReCogDrive：因果推理 VLA——把场景描述组织成\u0026quot;长尾→因果→决策\u0026quot;的因果链（描述偏差、事件因果归因、失败拯救），推理即录取接线员，可解释性拉满。 9. NoRD——去推理 VLA（\u0026ldquo;能不能不煽情？\u0026quot;） 架构：No Reasoning Denoising——把 VLA 的推理环节整个拿掉，只用少量轨迹数据做 SFT + Dr.GRPO，输出 token 数减 3 倍，性能与\u0026quot;全推理版\u0026quot;持平：Waymo Open Motion、NAVSIM 双榜同等或更好。结论：当任务规则化时，推理不是必要品，是冗余税——一张极右翼的「纯模仿+RL 就够」宣言，跟 AutoVLA 的\u0026quot;慢思考只在难场景有用\u0026quot;互为镜像。 10. 更多 VLA 变体（简列） 模型 一句话架构 DriveTeach-VLA 大教师 VLA 蒸馏出小蒸馏 VLA，双收敛知识交换 CoWorld-VLA VLA 里装 多专家世界模型 当\u0026quot;统一未来预测器\u0026rdquo;，多分支专家出未来、投票当决策 UniDriveVLA 统一框架：同一 token 流里做 感知-预测-规划，自回归密度联合训练 SparseOccVLA 稀疏占用（Sparse Occ）当 VLA 中间世界、多层预测未来 VLA-World VLA 与 世界模型 共用一个编码器，互相喂：世界模型管\u0026quot;未来帧\u0026quot;，VLA 管\u0026quot;该不该动\u0026quot; 11. 同源背景：机器人侧 VLA 定义的三样东西 模型 贡献 被驾驶侧借走的组件 RT-1 第一个真实世界 VLA（TxT policy，动作=终态 token 残差，CoT-free） 动作 token 化 RT-2 网络级 VLM→动作（动作 token 换出） \u0026ldquo;动作即答案\u0026rdquo; 范式 PaLM-E（RT-2 基座） 具身化 VLM（多模态 token 输入端到端） 端到端感知进 LLM Gato 通用 agent（跨模态单一 transformer） 单序列 task-token 统一 SayCan \u0026ldquo;LLM 出可执行方案 + 价值函数选\u0026quot;的经典合流 采样+价值选择（与 CLOVER 同构） VIMA 多模态指令模仿 + 记忆增强 transformer 指令 token MOO 稀疏次动作（M 个必需部分动作为 token） 结构化动作 token Octo 开源通用（动作分块 diffusion 头） 分块 + 扩散头 OpenVLA 开源 7B（Prismatic + diffusion action head） 开源路线 π0 pi 系，动作专家 + 连续动作 Flow Flow 动作头（被不少驾驶 VLA 抄） ST4VLA 空间-时序对齐 VLA，长时程动作 时序 token LIBERO 基准 + 数据 评测方法 LeRobot 开源学习库 + ACT 扩散策略 训练栈 Open-X-Embodiment 100 万+ 跨场景数据集 跨域预训练 DROID / RH20T 大规模真机/遥操作数据 数据资源 ACT-ALOHA 动作分块 Transformer + 遥操作双臂 分块概念 Embodied-GPT 统一多模态-动作目标 统一目标 判断：VLA 流派正在复制 Diffusion 流派当年的轨迹——\u0026ldquo;先解释，再嫌解释贵，最后把解释压缩进隐 token/RL\u0026rdquo;。OneVL/NoRD/WCog-VLA 一边，AutoVLA 的 GRPO 关掉思考一边，DriveVLM-RL 的世界模型 teacher 一边——2026 年的 VLA 已经不谈\u0026quot;要不要 LLM\u0026rdquo;，只谈\u0026quot;你花多少个 token 想问题\u0026quot;。\n七、流派⑤：世界模型式——\u0026ldquo;先在脑内演一遍未来\u0026rdquo; 把\u0026quot;预测未来\u0026quot;当作一等公民：模型必须学会环境动力学，规划要么\u0026quot;以未来为条件\u0026quot;生成、要么\u0026quot;让未来打分\u0026quot;、要么\u0026quot;滚出来比\u0026quot;。这里能量守恒地分四种：潜空间动力学 / 视频生成 / 双路径 / JEPA 预测型。\n1. DreamerV3——隐世界模型 RL 的教科书（2023-24，跨任务 SOTA） 架构：经典 actor-critic 世界模型三层——RSSM（Recurrent State-Space Model）把历史压进隐状态 + World Model Predicts（从隐状态 roll-out 未来）；环境不奖励时就学\u0026quot;先验\u0026quot;预测自监督；三个头（解码器重建图、奖励模型、continuation 模型）。Masters 120+ 组合，围棋/Atari/赛车全通用。 motor: 驾驶侧所有\u0026quot;轨迹即未来\u0026quot;想法的抽象母体：给驾驶，就是\u0026quot;在脑内 roll 1000 个未来，挑了回报最高的那个\u0026quot;。 2. UniSim / DriveDreamer / Vista——视频生成流 UniSim（Waymo，2023）：条件生成感知级 synthetic 视频（控制 ego+agent 动作 → 合成未来帧），当\u0026quot;可交互做梦引擎\u0026quot;，用于不现实的端到端/RL 预训练。 DriveDreamer（2024）：驾驱世界模型，3D 结构前置 + 未来 4 帧显式预测（相机出未来 BEV+前景 Seg），是\u0026quot;Cinematic世界模型\u0026quot;早期蓝本。 这两代都是\u0026quot;按帧生成\u0026quot;，长时序与交互仍弱。 3. Cosmos——NVIDIA 的世界基础模型（2025） 架构：视频 tokenizer（TokenZ）→ Video Foundation Model 自回归预测下一 epoch；为驾驶/机器人做了专门的 Chemistry（传感器/语言/动作对齐 token）编码——把激光雷达点云、语言指令、动作都编码成视频-世界 token，单模型统一 \u0026ldquo;视频+传感器+语言\u0026rdquo; 条件生成。提供 7B/14B 权重 + 安全微调，被 DriveVLM-W0 参考为显式世界模型的补充。 作用：它是\u0026quot;给世界模型一个通用表达式\u0026quot;的扎营者——后面所有把\u0026quot;世界\u0026quot;缝进 VLA/规划的方法，几乎都用它的 tokenizer 世界观。 4. DLWM 与 DriveFuture——双路径/长时程 DLWM（2024）：Denoised Latent World Models——在潜空间去噪隐向量预测未来，用 BEV 与前景生成双监督 + 自回归滚动多步；NAVSIM 早期世界模型分支（PDMS 84.7，轨迹平滑低曲率，长稳竞标者）。 DriveFuture（2025，华科）：双路径 CondEgo-Path——前视捕获意图（自车意图分支）+ 环境感知捕获场景（场景分支），感知→历史轨迹→意图→预测下一帧未来闭环；Cross-Attention 融合 + 分层规划解码成未来状态。v2 扩展可视 + Who-to-look（时序注意力指定看谁）。定位 世界模型的\u0026quot;意图↔场景\u0026quot;耦合，是 ReWorld 之前的国产世界模型代表（其\u0026quot;前视意图未来\u0026quot;被 World4Drive 化用过）。 5. WoTE（World-to-World, 2025）——用语言撬动世界模型 架构：把\u0026quot;世界\u0026quot;理解成**\u0026ldquo;世界名 → 世界描述\u0026quot;的函数**：语言描述（Socratic 问答）→ 跨片段对应（同一场景不同牌照/天气/碰撞前后的对齐）→ 世界模型转化成 可讲性的因果推理。给出 3 个保险杠语言任务：DISC（冲突观测混合）→ SAVE（自驾碰撞叙事）→ ROom（行动项提取）。表面是\u0026quot;VLM 讲故事\u0026rdquo;,实质是把世界模型的隐状态投影到语言空间——它为\u0026quot;世界模型能不能被审计\u0026quot;打开的窗口比任何仿真都直白。 6. JEPA-DRIVE / Drive-JEPA——预测型自监督（\u0026ldquo;世界模型不预测像素，预测抽象\u0026rdquo;） JEPA 基础（LeCun 系）：Joint-Embedding Predictive Architecture——不重建像素/音频，只预测隐空间的抽象表征；训练目标是\u0026quot;表征多阶一致性\u0026quot;而非 pixel loss。核心商业：世界比你看到的更有意义。 Drive-JEPA（2025，理想×清华）：给驾驶装 预测一致性损失：感知 query 在 BEV+向量特征上做隐空间对齐预测未来，预测驱动的隐世界模型；规划两次用同一一致性（先验+动作条件）。位置 token + BEV-向量双特征。 SparseDrive-JEPA 变体：NAVSIM IL PDMS 93.3 / EPDMS 87.8（官方/开源上位），证明预测型自监督在世界模型预算下能打到扩散法同一线。 7. World4Drive / Uni-World / ExploreVLA——把\u0026quot;未来\u0026quot;装回 VLA World4Drive（2025，香港）且在 CARLA/Dynamics 上验证：训练假想未来自回归——四个模块（位置/箭头/go-along 预测 → 动态隐 token 精确未来 → 每个 token 备对齐未来）合成\u0026quot;未来视频\u0026quot;充当监督；NAVSIM PDMS 85.1，碰撞率极低（0.5%），但长时序滚动缺想象力（对比 GAIA/Vista）。 Uni-World VLA（2025，字节×上交）：纹理大使（mosaic-texture VLA）4。关键架构=统一嵌入空间：把视觉帧 token、传感器 token、语言指令、动作 token 放进同一个 body/动作 token 流，世界模型在中间 decode\u0026quot;至少 3 帧未来\u0026quot;充当训练监督；零训练化迁移（融合规划知识）。设计了 Mocap-Text 数据合成协议（MosaicVLA），实现\u0026quot;世界模型视角的 VLA\u0026quot;。 ExploreVLA（2025）：探索作为监督——具身探索缓存为数据（ExploreVLA-v0 开源 50k × Xi 分辨率），把\u0026quot;聪明行动\u0026quot;当目标给世界模型和 VLA 统一训练；行为级 RL（动作空间在 lnf 尺度具身化）。为算补贴数据资源，为西雅图第二。 X-World：生成式世界模型将传感器（LiDAR→视觉）与语义对齐，补齐\u0026quot;世界模型不知道视觉\u0026quot;（多模态世界 token 流，见 §5 组图）。 8. ReWorld / RAW2Drive / WorldVLA——2026 年最新玩法 ReWorld（2025，华科×小米）：复用已训练的非世界模型（Diffusion 规划器）+ 双 DiT 世界模型——双解码器（动作修正 + 释放未来）在真实轨迹与\u0026quot;给我们拍电影的世界\u0026quot;之间做潜空间桥接；把世界模型当老师：world-model-in-the-loop RL（奖励来自世界模型再评估，而非人类打分）——\u0026ldquo;老师自己脑补未来来打分众筹监督\u0026rdquo;。两个核心：world-model=扩散、RL 老师=世界模型、前视预测潜空间对齐是灵魂。相比 Gen-Drive（人工偏好 reward），ReWorld 是纯自动 reward。 RAW2Drive（2025）：Raw-sensor 世界模型——多步分解特征级别意视频隐空间预测未来 2 帧 plus \u0026ldquo;为成为我的世界模型中一个合格的阁楼\u0026quot;趋入\u0026quot;可交互\u0026rdquo;：raw sensor→SFT 预训练任务簇→解码 arrow tokens。主打不依赖标注。 WorldVLA（2025）：VLA+世界模型双向 —— 世界模型解码未来帧时用动作注意力掩码（masked attention 让未来显式依赖于动作），规划时世界的力量回注 VLA：\u0026ldquo;动作是世界的因\u0026rdquo;。缓冲连续一切自监督在 world 回环里。 判断：世界模型线的重心正在从\u0026quot;视频生成好看\u0026quot;转移到\u0026quot;世界模型当 teacher 给 VLA 发监督\u0026quot;（DriveVLM-RL、ReWorld、DriveFuture）与\u0026quot;预测型隐表征替代重建\u0026quot;（JEPA）。Cosmos/DriveFuture 打底 + ReWorld/WorldVLA 缝合，这大概是 2027 年 VLA 的天花板来源。\n八、流派⑥：数据、仿真与评测基建——所有人都踩过的地板 方法论文再强，没有这些地板没法比、没法数据、没法闭环。它们常被忽略，却决定了上面所有流派的分数噪声。\n1. NAVSIM——\u0026ldquo;开环×规则化闭环\u0026quot;的标准化现场 玩法：剪裁 nuScenes/Argoverse 本体轨迹 → 规尺 PDMS（进度/碰撞/舒适/安全复合分）/EPDMS（v2 加路程一致性）；v2 直接驱动了\u0026quot;打分器-生成器\u0026quot;范式的军备竞赛（CLOVER/GTRS/SparseDriveV2 都是榜上常客），是本文所有分数的主战场。 榜单文化：每期 top 的倍差就是\u0026quot;锚点 vs 无锚点\u0026rdquo;、\u0026ldquo;LiDAR vs camera\u0026rdquo;、打 vs 生成 的活体显微——相当于深度学习圈的那张 ImageNet 榜。 2. Bench2Drive / CARLA——闭环仿真与\u0026quot;开环分数的诚实版\u0026quot; CARLA v2：闭环仿真 MARO 世界，比赛规则化毫不妥协（复杂遮挡/光照/天气连续体）。 Bench2Drive：44 场景 × 大量时刻采样，规范闭环正分数（DS/SR）；VADv2/B2D 76.15、DriveTransformer 63.46、LinkVLA 91.01/73——DS 严重惩罚\u0026quot;不敢动\u0026quot;模型，是开环 PDMS 的\u0026quot;降维锤\u0026quot;，把一堆开环 90+ 的打回 40-60。注意：LinkVLA(CARLA v2 专属)已超 B2D 全部版本的开环表——闭环永远是最严厉的裁判。 3. 重卡/干线数据族（博主的另一个\u0026quot;被忽略的江湖\u0026quot;） 数据集/模型 一句话 nuTruck / MAN TruckScenes 卡车首个大规模多传感数据集；给卡车把\u0026quot;感知地图比乘用车更依赖标尺线\u0026quot;的坑复盘 TruckDrive 端到端驾驶卡车初版（NS 的卡车场景是它的\u0026quot;验底盘\u0026quot;） TruckV2X 卡车车联网（雷达+视觉+通信），后台系统\u0026quot;模块桩\u0026quot;整车加轨 AntiRollover 等安全族 侧翻阻抗/载荷力学，\u0026ldquo;卡车版的事故免疫\u0026rdquo;，VLA 上卡车的第一批护栏分析 4. K-Risk \u0026amp; 其他评测微生物 K-Risk：把单字段\u0026quot;风险评分\u0026quot;扩展成多维度（Robustness/Awareness/Compliance 等），发现\u0026quot;规划错误大多不是撞车而是偏离-场\u0026quot;——它教我们看分数要拆维度，而不是只看单数。 背景还有 ROADWork（交互式道路工作区）、Impromptu、HUGSIM（3D GS 闭环）——2026 年\u0026quot;评测叙事\u0026quot;必须至少三镜：开环（NAVSIM）、闭环（Bench2Drive）、真闭环仿真（HUGSIM）。 5. 数据管线（MOSAIC 已见上文）；数据生成——VLA 时代的硬通货 VLA 动辄 6M-24M 字规模的数据，人工标注定死上限——用扩散/世界模型合成数据（UniSim/Cosmos/ReWorld 全部指向\u0026quot;自己教自己\u0026quot;）与\u0026quot;教师 VLA 蒸学生 VLA\u0026quot;（DriveTeach-VLA）正在把数据成本压下去。\n九、终局表：所有人都在一张榜上（NAVSIM v1 开环 PDMS） 把全文方法放到同一尺度（官方/论文口径混合，已尽最大能力注明）：\n方法 流派 传感器 关键架构 PDMS(v1) 备注 Human-Centric 参考 全 — 94.8 人工参考 TOAD（DrivoR 基座） ②③ camera CEM+评分器搜索 94.7 测试时优化 CLOVER ② camera+LiDAR 生成器-打分器闭环蒸馏 94.5 无锚点 SOTA TransDiffuser ③ camera+LiDAR 去相关+DDPM 94.85 无锚点 DrivoR ① camera ViT 寄存器 token 93.7 40M 参数极简 SparseDriveV2 ② camera path×velocity 因子分解词表 92.0 官方榜 iPad ② camera proposal 多头迭代 91.7 — Hydra-MDP ② camera 8192 锚词表+多头打分 91.26 官方 91.87 DiffusionDrive V2 ③ camera 截断扩散+GRPO 91.2 — GoalFlow ③ camera 目标点词表+Rectified Flow 90.3 1 步生成 FeaXDrive ③ camera 轨迹中心+FA-GRPO 90.0 SDF 引导 AutoVLA ④ camera codebook 快慢思考 89.1 / 92.1+锚 GRPO DriveVLM-W0 ④ camera 双分支稠密世界模型 93.0(AR) — VADv2 ① camera 4096 词表 FPS 87.7 — OneVL ④ camera 隐 CoT 稀疏感知 86.83 4B World4Drive ⑤ camera 未来自回归 85.1 — DLWM ⑤ camera 潜空间去噪世界模型 84.7 — 这张表的最大失真警示：LiDAR 加成（TransDiffuser 94.85）与无锚点 vs 锚点的口径，CLOVER/TOAD/DrivoR/TransDiffuser 是\u0026quot;同一批强队\u0026quot;（照同一套 PDM），AutoVLA/VADv2/WCog-VLA 是不同 batch 的不同配置；vanilla VADv2 87.7 但带锚 90.5。别把 94.85 vs 89.1 简单当\u0026quot;扩散 \u0026gt; VLA\u0026quot;，去看 sensor 与 training recipe。\nNAVSIM v2（EPDMS，伪闭环）一张小表 方法 EPDMS 备注 PDM-Closed 56.6 特权真值 DrivoR+TOAD 56.3 逼近 privileged DrivoR 54.6 CLOVER→NavHard 48.3 iPad+TOAD 49.8 +43.6% GTRS 49.4 NavHard 榜 CLOVER 90.4(v1)/48.3 NavHard SparseDriveV2 87.35 — 十、我的个人思考：2027 年的端到端会活成什么样 1. 三条主线的钟摆：显式→打分→生成→隐式，正在合并成\u0026quot;打分生成Im\u0026quot;一体 把 Timeline 放平：显式管线（BEV→轨迹）→ 词表打分（CLOVER）→ 扩散/Flow（DiffusionDrive/GoalFlow）→ 世界模型 teacher（DriveVLM-RL）。它们不是替代关系——今天最强的 TOAD 是\u0026quot;DrivoR 生成 + 评分器奖励 + CEM 搜索\u0026quot;，全元素来自三个流派。Endgame 不是裁判选谁，而是\u0026quot;生成器无限生成、打分器当 reward、RL 把它揉进网络\u0026quot;。下一代差的是把 TOAD 测试时搜索压缩回前向一次（蒸馏），以及把 CEM 换成扩散/世界模型的全局优化。\n2. VLA 的\u0026quot;思考税\u0026quot;是伪需求：OneVL 已经给答案 2025 年 VLA 都在\u0026quot;加 CoT\u0026quot;；2026 年年中风向剧变——OneVL 把显式推理改成单步隐 CoT（4.46s，86.83 反超 8B 显式版），NoRD 直接砍掉推理只靠 RL（token 省 3 倍、性能持平）。我的判断：VLA 的真实护城河永远不是\u0026quot;会不会说人话\u0026quot;，而是有无稠密监督（世界模型）与可控推理预算。显式 CoT 只适合\u0026quot;审判要看的边缘用例\u0026quot;，生产环境请开静音模式。\n3. 世界模型 has won，但赢在\u0026quot;当 teacher\u0026quot;而不是\u0026quot;画视频\u0026quot; Cosmos/DriveFuture/DreamerV3 告诉我们：未来预测最有用的落点是\u0026quot;给 VLA/规划器发稠密监督\u0026quot;，而不是\u0026quot;把未来帧渲染得好看\u0026quot;。ReWorld（world-model-in-the-loop RL）、DriveVLM-RL（KKN 世界模型做 teacher）、Gen-Drive（学习 reward）三剑合璧——下一代 reward 信号将从\u0026quot;PDM 分数\u0026quot;换成\u0026quot;世界模型自判\u0026quot;，RL 才真正摆脱人工偏好。CLOVER 已证明\u0026quot;打分器≈评估器\u0026quot;，下一步是\u0026quot;世界模型≈评估器\u0026quot;。\n4. 打分器泛化是 Scoring 流派的天花板：TOAD 教我们的 固定词表打分器（Hydra/GTRS）在测试时搜索反而掉分——因为词表内过拟合；on-the-fly 打分器（DrivoR/iPad）则被 TOAD 推高。所以\u0026quot;打分-生成闭环\u0026quot;真正的本质问题是：打分数不能绑定训练词表。GTRS 的无 D 先在推理用词表 dropout 逼泛化，是指了条路，但终极答案可能是\u0026quot;打分器也在测试时重训/在线适应\u0026quot;——这是图很大的一张空白。\n5. 闭环评估的\u0026quot;降维锤\u0026quot;会让分数差距显形 CLOVER 94.5 在 Bench2Drive 一类闭环里大概率掉到 70±；开环 PDMS 差 1 分 ≠ 驾驶差 1 分。2027 年评估必须三镜齐开：开环（NAVSIM/分数）、闭环（Bench2Drive 高分段比 DS）、真闭合（HUGSIM 自由碰撞）。科幻地讲，谁把\u0026quot;开环高分\u0026quot;和\u0026quot;闭环能跑\u0026quot;之间的鸿沟补上，谁就赢——目前只有 VLA-ReWorld 这类\u0026quot;世界模型+RL\u0026quot;在往这冲。\n6. 卡车/长距是 VLA 的\u0026quot;灰区测试场\u0026quot;——跨车型泛化是硬资质 人话：卡车数据族告诉我，\u0026ldquo;城市小 OD 的图像 VLA\u0026rdquo; 跟 \u0026ldquo;150 米外的重卡盲区\u0026rdquo; 几乎两个物种。谁能在多车型（乘用车→卡车→施工段）、多天气、多国L+R 路侧下不崩，谁的模型才具备\u0026quot;自动驾驶寒武纪\u0026quot;的扩散力。跨车型不是加分项，是生存分。\n7. 别把对比表当皇历：口径永远是第一公民 这张终局表里有 3 类谎言：①LiDAR 无锚点（TransDiffuser 94.85）不该跟 camera 锚点（DiffusionDrive 91.2）直线比；②自报 vs 官方；③v1 vs v2。读任何一篇论文的数字，先问四件事：sensor？锚点？自报还是榜？v几？——这是我读了 100+ 篇后最能帮你避开分数幻觉的一句话。\n十一、结语 从 UniAD 的长短线提线木偶，到 TransDiffuser 的去相关生成，到 CLOVER 的闭环蒸馏，到 LinkVLA 的 91.01 DS，到 ReWorld 的世界模型 teacher——五年时光里我们见证了端到端自动驾驶从\u0026quot;能不能开\u0026quot;走向\u0026quot;怎么证明能开、怎么在评测钢丝上安全地开\u0026quot;。六大流派不是六个门派，而是同一张螺旋的一层层台阶：\n显式管线回答\u0026quot;它做什么\u0026quot;，打分回答\u0026quot;哪个好\u0026quot;，生成回答\u0026quot;多多益善\u0026quot;，VLA 回答\u0026quot;为什么\u0026quot;，世界模型回答\u0026quot;接下来呢\u0026quot;，评测回答\u0026quot;凭什么信\u0026quot;。\n下一篇预告：我准备把**世界模型当 teacher 的 RL 管线（DriveVLM-RL / ReWorld / Gen-Drive 三篇对比）**单独扯开再写一篇，因为在我看来那是 2027 年最值得下注的方向。也欢迎在评论区点题下一个你想让我拆解的模型。\n","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/autonomous-driving-model-architecture-synthesis/","summary":"\u003ch2 id=\"一为什么写这篇文章\"\u003e一、为什么写这篇文章\u003c/h2\u003e\n\u003cp\u003e本博客陆续精读了 \u003cstrong\u003e100+ 篇\u003c/strong\u003e自动驾驶与机器人模型论文——从感知基座（BEVFormer/Sparse4D），到显式端到端（UniAD/VAD/SparseDrive），到打分式（CLOVER/Hydra-MDP/GTRS），到扩散与 Flow 生成（DiffusionDrive/TransDiffuser/GoalFlow），再到 VLA 大模型（DriveVLM/EMMA/AutoVLA/LinkVLA）与世界模型（Cosmos/DriveFuture/WoTE）。单独看是逐篇精读，放在一起，端到端自动驾驶在 \u003cstrong\u003e感知 → 预测 → 决策 → 规划\u003c/strong\u003e 四个架构维度上的演进脉络其实非常清晰。\u003c/p\u003e\n\u003cp\u003e这篇文章把博客里\u003cstrong\u003e所有\u003c/strong\u003e精读过的模型收进同一个坐标系，回答三个问题：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e感知\u003c/strong\u003e：从稠密 BEV 到稀疏 query 再到纯视觉 token、几何寄存器，一路在换什么？\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e预测/决策/规划\u003c/strong\u003e：从显式管线到打分排序、扩散生成、Flow 整流、LLM 推理、世界模型 roll-out，谁在取代谁？谁融合了谁？\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e谁真正有效\u003c/strong\u003e：把彼此在 NAVSIM 上的 PDMS/EPDMS 分数和架构创新对照起来，看看分数到底来自技巧还是来自架构。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cblockquote\u003e\n\u003cp\u003e本文每个模型给\u0026quot;\u003cstrong\u003e流派 → 核心创新 → 架构拆解（骨干/模块/输出/训练） → 代表分数\u003c/strong\u003e\u0026ldquo;四个维度，尽量讲清楚架构；分数严格区分\u003cstrong\u003e官方排行榜\u003c/strong\u003e与 \u003cstrong\u003earXiv 自报\u003c/strong\u003e，口径不一致处会注明。机器人侧的 VLA 模型（RT 系列、π0）作为同源背景单列一节——它们定义了「动作 token」「动作分块」「Flow 动作头」这三个被驾驶侧反复借用的组件。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"二先立坐标系六大流派一张图\"\u003e二、先立坐标系：六大流派一张图\u003c/h2\u003e\n\u003cp\u003e按「感知表征 × 规划输出方式」两个维度，我把博客里的方法归为六大流派：\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e流派\u003c/th\u003e\n          \u003cth\u003e代表模型\u003c/th\u003e\n          \u003cth\u003e核心思想\u003c/th\u003e\n          \u003cth\u003e感知表征\u003c/th\u003e\n          \u003cth\u003e规划输出\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e① 显式端到端管线\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eUniAD、VAD、VADv2、SparseDrive、PARA-Drive、DriveTransformer、TransFuser\u003c/td\u003e\n          \u003ctd\u003e感知/预测/规划在同一个可训练网络里串起来\u003c/td\u003e\n          \u003ctd\u003e稠密 BEV / 稀疏 token / 寄存器\u003c/td\u003e\n          \u003ctd\u003e单条/多条轨迹回归\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e② 评分排序式 (Scoring)\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eCLOVER、Hydra-MDP、GTRS、SparseDriveV2、TOAD、GoalFlow\u003c/td\u003e\n          \u003ctd\u003e大量生成候选，再学打分器（或用搜索/流）选出最优\u003c/td\u003e\n          \u003ctd\u003e稀疏特征 / 轨迹词汇表 / 目标点\u003c/td\u003e\n          \u003ctd\u003e从候选集合中选 Top-1\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e③ 扩散/Flow 生成式\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eDiffusionDrive、DiffusionPlanner、TransDiffuser、SafeDiffuser、FeaXDrive、Gen-Drive\u003c/td\u003e\n          \u003ctd\u003e把规划当成从噪声里生成（DDPM / Flow Matching / 整流流）\u003c/td\u003e\n          \u003ctd\u003e稀疏感知 / BEV / 图像\u003c/td\u003e\n          \u003ctd\u003e多模态轨迹生成\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e④ VLA 大模型式\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eDriveVLM、EMMA、AutoVLA、LinkVLA、OneVL、LaST-VLA、WCog-VLA\u003c/td\u003e\n          \u003ctd\u003eLLM/VLM 做感知+推理+决策，语言或 token 输出动作\u003c/td\u003e\n          \u003ctd\u003e视觉 token / 稀疏 query / 隐 token\u003c/td\u003e\n          \u003ctd\u003e语言决策 / 轨迹 token\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e⑤ 世界模型式\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eCosmos、DriveFuture、WoTE、DreamerV3、DLWM、RAW2Drive、ReWorld\u003c/td\u003e\n          \u003ctd\u003e建模环境动力学/未来状态，以未来为条件或打分规划\u003c/td\u003e\n          \u003ctd\u003e隐潜 / 视频 token / BEV 未来帧\u003c/td\u003e\n          \u003ctd\u003e条件化/打分/rollout 规划\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e\u003cstrong\u003e⑥ 数据与评测基建\u003c/strong\u003e\u003c/td\u003e\n          \u003ctd\u003eBench2Drive、CARLA、K-Risk、MOSAIC、重卡数据集族\u003c/td\u003e\n          \u003ctd\u003e提供闭环基准、数据选择、仿真、安全分析\u003c/td\u003e\n          \u003ctd\u003e—\u003c/td\u003e\n          \u003ctd\u003e—\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cblockquote\u003e\n\u003cp\u003e一句话直觉：\u003cstrong\u003e① 是\u0026quot;手拉手串行提线木偶\u0026rdquo;，② 是\u0026quot;多打几遍再挑\u0026quot;，③ 是\u0026quot;从噪声里一遍遍画\u0026quot;，④ 是\u0026quot;读得懂交规再动手\u0026quot;，⑤ 是\u0026quot;先在脑内模拟未来再决定\u0026quot;，⑥ 是\u0026quot;让前面所有流派有地方比\u0026quot;\u003c/strong\u003e。六大流派不是互相淘汰，而是逐层叠加——今天最强的系统几乎都是 ②③⑤ 的混合。\u003c/p\u003e","title":"端到端自动驾驶模型架构全解：从感知到规划的六大范式与 80+ 模型逐篇拆解"},{"content":"0. 写在前面：我们需要一份\u0026quot;会晒黑的评测\u0026quot; 现阶段启用的 benchmark 大多默认天气晴朗、光照良好、纹理干净，视觉端到端模型的感知在这个\u0026quot;温室\u0026quot;里表现优秀。但当复用习惯了晴天的视觉 planner 进入真实世界——阴雨路面积水反光、雪天车道线被覆盖、黄昏光照死黑——它的 No-at-fault Collision 和 Drivable Area Compliance 往往断崖式下跌。\u0026ldquo;能不能开\u0026quot;和\u0026quot;换了个风格还能不能开\u0026quot;是两种能力。\n课题组这一轮想做的，就是用 Cosmos（NVIDIA 的世界基础模型）做光照/天气/纹理的风格迁移（rain / snow / 日夜 / 模糊），在不改变场景拓扑、导航指令和 agents 语义的前提下，把同一份 NAV 场景\u0026quot;换皮\u0026rdquo;，得到一组视觉域被扰动、但语义标签不变的评测集，然后再跑纯视觉 end-to-end 模型在 NAV 上的 PDMS。这样我们拿到的不只是一个数字，而是一张\u0026quot;模型在位姿、外观扰动下的鲁棒性画像\u0026quot;，可以回答：哪个模型在风格漂移下最硬？哪个只在晴天强？\n0.1 选型逻辑：为什么是这 11 个 入选标准明确，缺一不可：\ncamera-only（纯视觉）：必须只吃相机输入，不能依赖 LiDAR 点云。这样\u0026quot;风格迁移只改图像\u0026quot;才能干净地、真实地作用到模型输入上。 NAV 可跑：官方有 NAV 相关权重或可复现配置，能进入我们的批量评测管线（Agent API 封装）。 论文开源：能从 arXiv 拿到原文架构与打分细节。 覆盖技术谱系：从规则化生成型（LTF）到高分辨率稀疏语义 (SparseDriveV2)、proposal 中心式（iPad）、扩散/飞流式（DrivoR、Drive-JEPA、DriveLaW）、再到 VLA 语言世界模型（ChainFlow-VLA、AutoVLA、ReCogDrive、DriveVLA-W0）——我们想测的是\u0026quot;在哪一种范式上，风格迁移造成的伤害最小\u0026quot;。 于是，最终敲定了下面 11 个：SparseDriveV2、iPad、DrivoR、ChainFlow-VLA、AutoVLA、ReCogDrive、DriveVLA-W0、Drive-JEPA、DriveSuprim、DriveLaW、LTF（Latent TransFuser）。\n下面我会给每个模型：一句话定位 → 架构解读（附 arXiv 原文架构图）→ 官方资源（仓库/HF）→ 评测配置 → NAV 得分 → 在我们风格迁移评测里值得画的重点。\n1. SparseDriveV2（感知-规划稀疏联合） 一句话定位：把高阶\u0026quot;时空轨迹\u0026quot;分解为\u0026quot;几何路径 + 速度谱\u0026quot;，用稀疏 vocab 打分选出最优，属于 generation/selection 范式的稀疏语义代表。\narXiv: 2603.29163（修正：原表误写 2603.29159） 官方仓库: github.com/swc-17/SparseDriveV2 权重: HuggingFace wenchaosun/SparseDriveV2 论文图 1（架构）： SparseDriveV2 总体架构：轨迹因式分解为几何路径与速度谱，再重建轨迹（arXiv 2603.29163 Figure 1） 架构解读 宏观：一句话看全流程 六路相机 ➜ ResNet-34 骨干 ➜ 稀疏感知（实例/地图 query）➜ 把时空轨迹\u0026quot;因式分解\u0026quot;成【几何路径 × 速度剖面】两张子词表 ➜ 笛卡尔积组合出 26 万+ 条超密集候选 ➜ 粗打分筛 top-K + 精打分选优 ➜ 最高分轨迹下发\n这个模型本质上回答了打分式（Scoring-based）规划的一个核心矛盾：\u0026ldquo;词表要密（覆盖好）就得大（打分贵）\u0026rdquo;。别人在两条路上二选一——VADv2/Hydra-MDP 用静态大词表（4096/8192 条）、DiffusionDrive 用动态生成词表——SparseDriveV2 选择把\u0026quot;轨迹\u0026quot;这个对象拆开，用组合爆炸白嫖词表密度。\n细节：三块板逐个拆 ① 词表构造（可扩展词表表示）\n一条时空轨迹 $\\tau=\\{(x_t,y_t)\\}_{t=1}^T$ 被无损分解成两个正交部件： 几何路径 $p=\\{(x_i,y_i)\\}_{i=1}^S$：沿路径等弧长 $\\Delta s$ 采样的空间点序，只含形状、不含时间； 速度剖面 $v=\\{v_t\\}_{t=1}^T$：等时间间隔的标量速度序列，只含快慢、不含空间。 两者来自对训练集真实轨迹的 K-Means 聚类：$N_p=1024$ 条路径锚 + $N_v=256$ 条速度锚。 组合算子 $\\tau=\\mathcal{C}(p,v)$ 沿路径插值累加位移，可无损重构完整轨迹 → 得到 $N_p \\times N_v = \\textbf{262,144}$ 条候选，是此前 Hydra-MDP 8192 条的 32 倍，而记忆开销仍是两张紧凑子词表。 为什么能拆：方向盘管\u0026quot;几何形状\u0026quot;、踏板管\u0026quot;速度曲线\u0026quot;，两者物理上就是可解耦的控制变量，分开建表信息不丢。 ② 打分（可扩展打分策略）——打分成本与词表大小解耦的关键：\n阶段 打分对象 复杂度 作用 粗粒度分解打分 每条路径 $p_i$、每条速度 $v_j$ 各打一次 $O(N_p+N_v)$ 快速筛掉垃圾候选 精粒度组合打分 只对保留下来的 top-K 组合轨迹 $O(K)$，K≈64 时空一致的精细评估 打分器输入是路径/速度嵌入与场景条件（实例 query、地图 query）的跨注意力交互，学的是\u0026quot;这条路符不符合当前路况、这个速度跟不跟得上前面\u0026quot;，而不是背模板。\n③ 训练与推理细节\n训练分两阶段：coarse 打分用真值轨迹的 L2 距离度量做老师监督；精打分只对 top-K 回归，避免 26 万条全算。 推理：场景特征 → 分解 → 全路径/全速度粗打分 → top-K（K≈64）组合轨迹精打分 → 分数最高一条下发控制。 消融（Table 6）证明：词表 size 从 1024→16384 单调上升不饱和；粗-精两阶段比全量精算既省算力又不掉点。 关键缺陷（官方 Figure 5）：强依赖导航/全局路由信号，供给不完整时词表再密也会\u0026quot;几何合理但方向错误\u0026quot;——这是任何静态词表范式的硬边界。风格迁移视角就落在这里：路径锚点对车道线/障碍遮挡敏感，风格一旦把语义打掉，词表再好也可能推错区域。 关键要点速览 维度 内容 范式 Scoring（静态超密词表） 视觉骨干 ResNet-34 场景表示 稀疏实例/地图 query（SparseDrive 一脉） 动作头 双词表笛卡尔积 + 两级打分 辅助任务 感知-规划联合（稀疏） 最硬创新 路径×速度因式分解 风格迁移风险点 依赖导航信号 + 车道线语义 评测配置与得分 NAVSIM v1 (navtest) PDMS：92.0（ResNet-34 后端）——表格里高于 DiffusionDrive 88.1、DriveSuprim（R34）89.9，与 iPad 91.7 略高/持平。 NAVSIM v2 EPDMS: 随着路径锚点数从 1024→16384，EPDMS 从 85.02 提升到 87.35（内存从 9.5GB 涨到 38.9GB），说明 factorized vocab 规模直接决定上限。 #Anchors EPDMS Memory (MB) 1024 85.02 9531 4096 86.33 15513 16384 87.35 38877 风格迁移视角：SparseDriveV2 是稀疏语义的强代表，但它的前置感知依赖网络是否在高泛化性上保持语义稳定（路径锚点对车道线/障碍遮挡较敏感），在风格偏移下\u0026quot;几何路径\u0026quot;需要持续被推到正确区域，值得重点观察。\n2. iPad（Iterative Proposal-centric，自拍式规划） 一句话定位：把\u0026quot;一次性生成\u0026quot;换成了\u0026quot;用 proposal 迭代自拍\u0026quot;——场景编码器 + ProFormer（proposal-centric BEV）+ 多轮 refinement，NAV 上 PDM 随 proposal 数/迭代数/数据对数增长。\narXiv: 2505.15111 官方仓库: github.com/Kguo-cs/iPad 权重: 官方提供 Google Drive 下载（仓库内入口） 论文图 2（框架总览）： iPad 框架：Scene Encoder（灰）+ ProFormer（蓝）+ proposal 迭代（arXiv 2505.15111 Figure 2） 论文图 5（ProFormer 详解）： ProFormer 详细架构：proposal 作为 query 对 proposal-centric 图像特征做 deformable 交叉注意力更新（arXiv 2505.15111 Figure 5） 架构解读 宏观：一句话看全流程 环视 6 相机 + 自车状态 ➜ Scene Encoder（ResNet-34）提取多视角特征 ➜ ProFormer 用自车状态初始化 N 个 BEV 提案 query，迭代 K 轮【预测轨迹→锚定图像特征→精炼查询】➜ Scorer 给每个提案轨迹打分 ➜ Proposal-Centric Mapping/Prediction 两个辅助任务 ➜ 分最高轨迹输出\niPad 的哲学是**\u0026ldquo;规划应当成为架构的中心组织原则\u0026rdquo;，而不是下游任务。它批判密集 BEV 范式的两个病：① 算力随网格分辨率平方增长**（UniAD 200×200 网格 A100 只能跑 4.5 FPS）；② 因果混淆——模型把计算浪费在与决策无关的远处建筑/树木上。所以它用 N 个稀疏提案替代密集网格，按需提取与规划相关的特征。\n细节：四个组件逐个拆 ① Scene Encoder：6 路相机共享 ResNet-34 提取多尺度特征 $\\mathbf{F}_i\\in\\mathbb{R}^{C\\times H'\\times W'}$；自车状态（速度/加速度/方向盘转角）经两层 MLP 编码成自车特征 $\\mathbf{e}$，用于提案初始化、与车姿对齐。\n② ProFormer（核心创新）——\u0026ldquo;预测-锚定-精炼\u0026quot;迭代循环：\n初始化：$\\mathbf{q}_j^{(0)}=\\text{Embed}_j+\\text{MLP}_{\\text{init}}(\\mathbf{e})$，用不同可学习嵌入保证提案多样性、自车状态保证与当前驾驶对齐； 提案预测：轻量 MLP 从每轮 query 解码出候选轨迹 $\\tau_j^{(k)}=\\{(x_t^{(j,k)},y_t^{(j,k)})\\}_{t=1}^T$； 锚定注意力：把轨迹路点 $(x_t,y_t)$ 用相机内外参反投影到图像平面，作为 deformable attention 的参考点去聚合对应相机特征——注意力只发生在\u0026quot;将要开去的地方\u0026rdquo;； 查询精炼：$\\mathbf{q}_j^{(k+1)}=\\text{FFN}(\\text{DeformAttn}(\\mathbf{q}_j^{(k)},\\mathbf{F})+\\mathbf{q}_j^{(k)})$，残差 + FFN 更新； 迭代：重复 K 轮（论文默认 K=3，另测 K=1/5），轨迹越修越准、特征越来越聚焦。 复杂度：$O(N\\cdot K\\cdot M\\cdot T)$，提案 6~12 个 vs 密集网格 200×200，差两个数量级。 ③ Scorer：轻量 MLP 对每个精炼提案输出标量分数，用边际排序损失 $\\mathcal{L}_{\\text{scorer}}=\\sum_{j\\neq j^*}\\max(0,\\,s_j+\\Delta-s_{j^*})$（$\\Delta=0.5$）训练，让最优轨迹显著高于其他；推理时取最高分。\n④ 提案中心辅助任务——极简但精准：\nMapping：预测提案轨迹每个路点是否在可行驶区域内（通航性），BCE 损失； Prediction：只预测与该提案\u0026quot;最可能碰撞的前 2 个物体\u0026quot;的未来轨迹，L1 损失。 相比 UniAD 的全场景检测/追踪/建图/占用 6 任务，iPad 只有 2 个、且完全围着规划转——\u0026ldquo;少即是多\u0026rdquo;，消融显示去掉它们 PDMS 掉 1.4 点，算力却极大节省。 训练与推理要点 总损失 $\\mathcal{L}=\\lambda_1\\mathcal{L}_{\\text{plan}}+\\lambda_2\\mathcal{L}_{\\text{scorer}}+\\lambda_3(\\mathcal{L}_{\\text{map}}+\\mathcal{L}_{\\text{pred}})$，权重 1.0/0.5/0.1。 消融：去掉迭代精炼 93.2→91.5；换回等效密集 BEV 掉 2.2 点且算力×5+——证明\u0026quot;稀疏提案+迭代\u0026quot;在性能效率上双赢。 缩放曲线：提案数 6→12 涨 1.4 点、12→24 仅 +0.6（饱和）；迭代 1→3 涨 3.8 点、3→5 仅 +0.7。默认 N=6,K=3 配 52.4 FPS，N=12,K=5 达 93.2 PDMS。 完整：NAVSIM PDMS 91.1（N=6）/93.2（N=12），计算量只有 UniAD 的 1/10；Bench2Drive 闭环 DS 44.7。 风格迁移视角：iPad 的整个收敛过程依赖 deformable attention 能稳定锚到\u0026quot;车道线/可行驶区域/交互物\u0026quot;的语义。一旦 Cosmos 风格迁移把车道线视觉打碎，ProFormer 的锚定注意力可能锚不到该锚的东西——但它的多轮迭代自校正机制可能产生\u0026quot;收敛容错\u0026quot;。是本次评测对扰动鲁棒性的最大黑马候选。\n关键要点速览 维度 内容 范式 proposal-centric 迭代规划 视觉骨干 ResNet-34 + 自车 MLP 场景表示 N 个稀疏 BEV 提案（非网格） 动作头 Scorer 从 K 轮迭代提案中选优 辅助任务 提案级通航性 + Top-2 碰撞预测 最硬创新 \u0026ldquo;预测-锚定-精炼\u0026quot;迭代循环 风格迁移风险点 锚定注意力对语义缺失敏感，但多轮迭代容错 评测配置与得分 NAVSIM v1（camera, ResNet-34）: 各子分数 NC 98.6 / DAC 98.3 / TTC 94.9 / Comf. 100 / EP 88.0，PDMS 91.7。 结果：proposal 数/迭代数/训练数据三者都呈对数增长 PDM——论文 Figure 3 的 Scaling Law。消融里\u0026quot;加 Proposal Refinement + ProFormer + proposal-centric BEV + proposal-centric prediction\u0026quot;逐步把 PDMS 从 78.5 拉 91.7。\n风格视角：iPad 的 proposal self-correction 依赖图像里的可行驶区域和交互物件都能被 deformable attention 稳定 Query 到，一旦风格赶走了车道线/交通灯语义，iteration 是否有\u0026quot;收敛容错\u0026quot;值得重点看——它可能是\u0026quot;对扰动鲁棒\u0026quot;的最大黑马。\n3. DrivoR（轨迹与打分双解码端 Transformer） 一句话定位：纯视觉的标准 three-block（1 编码 + 2 解码）Transformer，用 DINOv2 初始化 + scene tokens / sensor registers + 多轨迹最优点成绩，NAV 跑的 state-of-the-art 纯视觉基线。\narXiv: 2601.05083 官方仓库: github.com/valeoai/DrivoR 权重: GitHub Releases（仓库内入口） 论文图 1（架构）： DrivoR 架构：一个感知编码器（含 sensor registers）+ 轨迹解码器 + 打分解码器（arXiv 2601.05083 Figure 1） 论文图 2（编码/解码块）： Encoder/Decoder 块内含 sensor registers 作为 scene token（arXiv 2601.05083 Figure 2） 架构解读 宏观：一句话看全流程 环视相机 ➜ DINOv2 初始化的 ViT-S + 每相机 R=4 个可学习 register token（LoRA 微调）➜ 压缩成 ≤24 个 scene token ➜ 轨迹解码器（K=32 个轨迹 query + 自车状态交叉注意力，WTA 训练）出 32 条候选 ➜ 评分解码器（梯度分离）逐条给出 5 个可解释子分 ➜ 选最高分轨迹\nDrivoR 的野心是\u0026quot;最简单架构做到最强纯视觉基线\u0026rdquo;：没有 BEV、没有检测头、没有轨迹词典、没有多任务训练——三个 Transformer 模块搞定一切。它回答的问题是\u0026quot;什么样的视觉表示最适合自动驾驶\u0026quot;：答案是紧凑、结构化、相机感知的寄存器 token。\n细节：三个模块逐个拆 ① 感知编码器（含 sensor register 的 ViT）\n从 DINOv2 预训练 ViT 出发：除了 patch token，每相机额外加 R=4 个可学习寄存器 token（每相机独立参数，互不干扰）。寄存器通过自注意力从 patch token 汇聚\u0026quot;与驾驶相关\u0026quot;的视觉信息，每个寄存器自动分化成一条信息通道（一个盯前车、一个盯车道线、一个盯红绿灯）——区别于 CLS token 的\u0026quot;笼统全局特征\u0026quot;。 压缩比：R=4 时把 6144 个 patch token 压到 24 个 scene token，1/256 压缩率（消融：无 registers 仅 CLS 只有 89.2；R=4 达 93.7，R=8 饱和）。 LoRA 微调：冻结 ViT 权重、只训每层注意力里的低秩增量 $\\Delta W=BA$（秩 8-16）+寄存器 token，参数量几乎不增（ViT-S 共 ~22M，LoRA 仅 ~0.5M），且能避免驾驶数据小导致的过拟合（全量微调反而 91.8 \u0026lt; 93.7）。 ② 轨迹解码器\nK=32 个可学习轨迹 query + 编码后的自车状态（速度/加速度/转角，MLP 编码）作为 Q，以 scene token 为 K/V 做交叉注意力，每条 query 输出未来 T 步航点 $\\tau_i=\\{(x_t,y_t,\\theta_t)\\}$。 WTA（winner-take-all）训练：K 条候选\u0026quot;打架\u0026quot;，只有离真值最近的\u0026quot;胜者\u0026quot;吃到回归梯度，其余查询被迫去找别的可行驾驶模式 → 多模态自动涌现。消融：去掉 WTA 会坍缩到平均轨迹（90.3）。 ③ 评分解码器\n与生成器共享结构，但关键在一条线：StopGradient（梯度分离）。否则生成器和评分器会互相\u0026quot;作弊\u0026quot;（生成器只出简单轨迹→评分器给简单轨迹高分→一起摆烂）。分离后各司其职：生成器覆盖所有模式，评分器客观评估。 每条轨迹输出 5 个可解释子分：[s_safety, s_comfort, s_efficiency, s_progress, s_legality]，分别对应碰撞/安全距离、加加速度/横向加速度、效率、前进进度、交规合法——每个分数可用独立 λ 加权，推理时无需重训即可调驾驶风格（λ_safety↑保守、λ_efficiency↑激进、λ_comfort↑舒适）。 监督信号是数据集提供的 oracle 评分（由仿真器规则计算）。 效率与缩放 每帧 24 个 scene token 做 KV，交叉注意力复杂度 $O(K\\times24\\times d)$，远低于 $O(K\\times6144\\times d)$。A100 上前向 ~110ms（0.5GB 显存），总 ~6FPS，三模块可 pipeline 并行。 缩放规律：ViT-S 22M→ViT-L 300M，PDMS 只从 93.7→94.0（+0.3），但延迟 ×7——寄存器 token 的信息容量有限，大 backbone 收益递减，这是\u0026quot;最小模型接近最优\u0026quot;的典型。 消融（Table 4）：DINOv2 初始化 90.0 vs ImageNet-21k 87.5 vs 随机 70.1；多轨迹 1→128 从 80.1 拉到 90.0（128 封顶）；联合训练 \u0026gt; 两阶段（评分反馈能反哺生成）。 风格迁移视角：DrivoR 对视觉特征压缩依赖极深（寄存器是\u0026quot;把整图读进 24 个 token\u0026quot;），Cosmos 风格迁移一旦把视觉分布推开，24 个寄存器能否仍装下\u0026quot;语义稳定\u0026quot;的驾驶信息是最大敏感点；但它的多轨迹 + 解耦双打分器对扰动有一定去钝性。\n关键要点速览 维度 内容 范式 生成-打分解耦（Generation + Disentangled Scoring） 视觉骨干 DINOv2 ViT-S + R=4 寄存器，LoRA 微调 场景表示 每帧 24 个 scene token（1/256 压缩） 动作头 K=32 轨迹 query + WTA，评分解码器 5 子分选优 辅助任务 无（纯粹三模块） 最硬创新 register 压缩 + 梯度分离的打分器 风格迁移风险点 token 压缩对视觉域敏感；多轨迹+打分有容错 效率 ~40M 参数，110ms/帧，0.5GB 显存 评测配置与得分 DrivoR 的关键结论来自其对 navval（val set） 的报道：\n初始化 Random ImageNet 21k DINOv2 PDMS (navval) 70.1 87.5 90.0 NAVSIM v2 navhard-two-stage（EPDMS）: DrivoR (ViT-S) 45.3；加 185k SimScale 数据可达 52.3。 场景 token 数影响：16/64 场景 token 性能逼近 250 倍 token 数。 轨迹数：1→8→64→128，PDMS 80.1 到 90.0（大轨迹数收益递减，128 封顶）。 核心消融 PDMS DINOv2 初始 90.0 ImageNet-21k 初始 87.5 无 registers/压缩 88.2 → 90.0 1 轨迹 vs 8/64/128 轨迹 80.1 → 90.0 disjointed scoring 90.0 风格视角：DrivoR 对视觉编码器依赖很大，官方强调\u0026quot;Registers + DINO\u0026quot;。如果 Cosmos 风格迁移把视觉分布推开，ViT-based registers 应该是敏感点；但它的多轨迹 + 打分器解耦可能在扰动下有去钝性。是\u0026quot;图像域鲁棒性\u0026quot;重点考察对象。\n4. ChainFlow-VLA（自回归 Chain + Flow 飞集 + VLM） 一句话定位：把 \u0026ldquo;DiffusionDrive / LEAD-drive\u0026rdquo; 的无序扩散、结合 VLM 语言指导，做出\u0026quot;自回归轨迹生成（Chain）\u0026quot; + \u0026ldquo;DiT 增量精化（Flow）\u0026rdquo; + \u0026ldquo;VLM 推理引导\u0026quot;的三段式 VLA 规划，是 NAV 上最\u0026quot;爆\u0026quot;的一篇。\narXiv: 2605.23270 官方仓库: github.com/AFARI-Research/ChainFlow-VLA 权重: HuggingFace AFARI-Research/ChainFlow-VLA 论文图 2（整体架构）： ChainFlow-VLA 框架：先用 Autoregressive Trajectory Generation 产出 K 条因果 proposal，再经 VLM-Guided Residual Diffusion Refiner 修缮（arXiv 2605.23270 Figure 2） 架构解读 宏观：一句话看全流程 图像与自车状态 ➜ 视觉骨干提取场景特征 ➜ ① Chain：自回归逐步生成 K 条\u0026quot;因果式\u0026quot;轨迹 proposal（Bicycle 运动学推进）➜ ② Flow：对每条 proposal 用 DiT refiner 只修\u0026quot;残差\u0026rdquo;（而非从噪声重建整条）➜ ③ VLM：输出推理 token 作为去噪引导条件 ➜ 最终轨迹集 + 打分选优\nChainFlow 直击扩散规划的两个痛点：无序性（DiffusionDrive 类一次性铺所有 future，缺少\u0026quot;先发生→后发生\u0026quot;的因果次序）和整条重建浪费（从头去噪不如在\u0026quot;已合理的基底\u0026quot;上精修）。它把三者缝起来，是\u0026quot;最纯的视觉迭代流\u0026quot;——论文明确把 DrivoR 当 baseline 0 号，逐步叠组件加分之。\n细节：三个组件逐个拆 ① Chain（自回归轨迹生成）\n不一次性铺完所有 future，而是按时间步自回归生成：$P(Y^{\\mathrm{AR}}\\mid\\mathcal{O})=\\prod_t P(y_t\\mid y_{","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/e2e-navsim-models-cosmos-style/","summary":"\u003ch2 id=\"0-写在前面我们需要一份会晒黑的评测\"\u003e0. 写在前面：我们需要一份\u0026quot;会晒黑的评测\u0026quot;\u003c/h2\u003e\n\u003cp\u003e现阶段启用的 benchmark 大多默认天气晴朗、光照良好、纹理干净，视觉端到端模型的感知在这个\u0026quot;温室\u0026quot;里表现优秀。但当复用习惯了晴天的视觉 planner 进入真实世界——阴雨路面积水反光、雪天车道线被覆盖、黄昏光照死黑——它的 No-at-fault Collision 和 Drivable Area Compliance 往往断崖式下跌。\u003cstrong\u003e\u0026ldquo;能不能开\u0026quot;和\u0026quot;换了个风格还能不能开\u0026quot;是两种能力。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e课题组这一轮想做的，就是用 \u003cstrong\u003eCosmos（NVIDIA 的世界基础模型）做光照/天气/纹理的风格迁移\u003c/strong\u003e（rain / snow / 日夜 / 模糊），在不改变场景拓扑、导航指令和 agents 语义的前提下，把同一份 NAV 场景\u0026quot;换皮\u0026rdquo;，得到一组\u003cstrong\u003e视觉域被扰动、但语义标签不变\u003c/strong\u003e的评测集，然后再跑纯视觉 end-to-end 模型在 NAV 上的 PDMS。这样我们拿到的不只是一个数字，而是一张\u0026quot;模型在位姿、外观扰动下的鲁棒性画像\u0026quot;，可以回答：\u003cstrong\u003e哪个模型在风格漂移下最硬？哪个只在晴天强？\u003c/strong\u003e\u003c/p\u003e\n\u003ch3 id=\"01-选型逻辑为什么是这-11-个\"\u003e0.1 选型逻辑：为什么是这 11 个\u003c/h3\u003e\n\u003cp\u003e入选标准明确，缺一不可：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003ecamera-only（纯视觉）\u003c/strong\u003e：必须只吃相机输入，不能依赖 LiDAR 点云。这样\u0026quot;风格迁移只改图像\u0026quot;才能干净地、真实地作用到模型输入上。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNAV 可跑\u003c/strong\u003e：官方有 NAV 相关权重或可复现配置，能进入我们的批量评测管线（Agent API 封装）。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e论文开源\u003c/strong\u003e：能从 arXiv 拿到原文架构与打分细节。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e覆盖技术谱系\u003c/strong\u003e：从规则化生成型（LTF）到高分辨率稀疏语义 (SparseDriveV2)、proposal 中心式（iPad）、扩散/飞流式（DrivoR、Drive-JEPA、DriveLaW）、再到 VLA 语言世界模型（ChainFlow-VLA、AutoVLA、ReCogDrive、DriveVLA-W0）——我们想测的是\u0026quot;在哪一种范式上，风格迁移造成的伤害最小\u0026quot;。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e于是，最终敲定了下面 11 个：\u003cstrong\u003eSparseDriveV2、iPad、DrivoR、ChainFlow-VLA、AutoVLA、ReCogDrive、DriveVLA-W0、Drive-JEPA、DriveSuprim、DriveLaW、LTF（Latent TransFuser）\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e下面我会给每个模型：\u003cstrong\u003e一句话定位 → 架构解读（附 arXiv 原文架构图）→ 官方资源（仓库/HF）→ 评测配置 → NAV 得分 → 在我们风格迁移评测里值得画的重点\u003c/strong\u003e。\u003c/p\u003e","title":"纯视觉端到端模型在 Cosmos 风格迁移加持下的 NAVSIM 大规模评测：11 个开源模型全景"},{"content":" 本文是「代码讲解」路线的第 11 篇。Cosmos 3（NVIDIA，2026）是物理 AI 世界基础模型的代表作——它用一个统一的 Mixture-of-Transformers（MoT）架构把语言理解、图像/视频/音频生成、动作预测全揉进了一个模型。代码在官方 NVIDIA/cosmos-framework。\n写给零基础读者：读这篇之前先搞懂几个名词 Cosmos 3 把很多前沿概念揉在了一起。如果你不是每篇都追，可能会被以下黑话劝退。我先把它们全部翻译成人话：\n世界模型（World Foundation Model）：一个能「理解物理世界怎么运作」的大模型。给它一段视频，它能预测接下来几秒会发生什么；给它一张图和一句话，它能生成符合物理规律的视频。Cosmos 3 追求的不只是\u0026quot;画面好看\u0026quot;，而是\u0026quot;画面符合物理\u0026quot;——车该沿着路开、球该往下落、人走路该有影子。\nMixture-of-Transformers（MoT，混合 Transformer）：Cosmos 3 最核心的架构创新。传统 Transformer 每一层只有一套 QKV 投影和一套 FFN。MoT 给每一层准备了两套投影（QKV 各两套、FFN 两套）——一套给「理解（Reasoner / und）」用，另一套给「生成（Generator / gen）」用。两套路径共享同一个 Transformer 层的结构，但权重独立。就像一个人有两副眼镜：一副读书（理解），一副看远方（生成），镜片度数不同但共用同一个脑袋。\nReasoner 塔（理解塔，und 路径）：负责语言理解、视觉推理、因果分析。它用因果自注意力（causal attention）——只能看前面的 token，不能看后面的，适合\u0026quot;读入一段文字并理解\u0026quot;这种任务。训练目标是 next-token prediction（交叉熵）。\nGenerator 塔（生成塔，gen 路径）：负责图像、视频、音频、动作的生成。它用双向注意力（full/bidirectional attention）——可以看到序列里所有位置的 token，适合\u0026quot;从噪声里逐步雕出图像/视频\u0026quot;这种任务。训练目标是 Rectified Flow（向量场 MSE）+ 可选的交叉熵（离散模态）。\nRectified Flow（整流流）：一种比 DDPM 更直接的生成式训练方法。DDPM 要学\u0026quot;预测加在上面的噪声\u0026quot;，Rectified Flow 直接学\u0026quot;从噪声指向数据的直线向量场\u0026quot;。公式上：给定噪声 x₀ 和真实数据 x₁，在时间 t 做线性插值 x_t = (1-t)x₀ + t x₁，然后让网络预测 v = x₁ - x₀（从噪声指向数据的方向）。用 MSE 损失。优点是推理步数更少、理论更简洁。Diffusion Planner 那篇的代码讲解里也用了类似思路，只不过 Cosmos 3 把它用在了视频/图像生成上。\nDCAE（Dual-Channel AutoEncoder，双通道自编码器）：Cosmos 3 自研的视频压缩器。它的作用是把一段视频压缩成一个小得多的\u0026quot;潜在表示\u0026quot;，模型在这个小空间里做生成，最后再用 DCAE 解码器把潜在表示还原成视频。压缩率惊人：4 倍时间压缩 × 32 倍空间压缩 = 128 倍总压缩率。一段 128×128×128 的视频（T×H×W），压缩后只剩 1×4×4——也就是 16 个格子。\n序列打包（Sequence Packing）：理解 token 和生成 token 需要共存于同一条序列里让 Transformer 处理。序列打包就是决定怎么把两种 token 拼在一起、各自的注意力模式（causal vs full）怎么设置。这是 MoT 架构能否跑起来的关键工程细节。\n因果 VAE（Causal VAE）：视频压缩器的一种，它编码当前帧时只能用过去帧的信息，不能偷看未来帧。这对世界模型至关重要——因为世界模型要预测未来，编码器如果偷看了未来，模型在预测时就\u0026quot;作弊\u0026quot;了。\nmRoPE（多维旋转位置编码）：Cosmos 3 用的位置编码。普通的 RoPE 只编码一维位置（文本token的先后顺序）；mRoPE 编码三维——时间 T、空间高度 H、空间宽度 W。这样模型在看视频 token 时，知道每个 token 在\u0026quot;第几帧的什么位置\u0026quot;。\nUniPC 调度器：一种多步扩散采样算法（类似 DDIM 的加速版）。Cosmos 3 推理时用 UniPC 走 35 步从噪声生成视频，比标准 DDPM 的 1000 步快 30 倍。\n如果这些你都有模糊印象了，下面看代码就会顺畅很多。\n为什么要讲 Cosmos 3 的代码 前面十篇我们把端到端自动驾驶和通用机器人 VLA 的方法全摸了一遍。但一直有个底层问题没回答：这些方法的世界知识从哪来？\nUniAD / VAD 的世界知识来自 3D 检测和 BEV 空间；DriveVLA-W0 的世界知识来自一个显式训练的未来帧预测头；pi0 的世界知识来自冻结的 PaliGemma VLM 主干——但这些都是\u0026quot;隐式默认\u0026quot;的，不是\u0026quot;显式建模\u0026quot;的。\nCosmos 3 反了过来：它 \u0026ldquo;世界知识\u0026quot;就是模型本身。它不是为了某一个具体任务设计的，而是像 GPT 一样先在海量物理数据上训出一个世界基础模型，然后下游任务（驾驶规划、机器人操控、视频仿真）直接用或微调。这是和前面所有文章都不同的范式——前面是专用模型，这个是通用基座。\n更重要的是，Cosmos 3 的代码结构极其清晰。NVIDIA 把整套框架开源在 cosmos-framework 里，模型定义、训练管线、推理引擎、tokenizer、安全 guardrail 全部在一个包内，可读性很高。拆透它，你就能看清\u0026quot;一个工业级世界模型该怎么搭\u0026rdquo;。\n一句话结论：Cosmos 3 = MoT 双塔（Reasoner 因果 + Generator 双向自注意，每层两套独立投影） + DCAE 4×32×32 视频压缩 + Rectified Flow 向量场训练 + 序列打包混合 und/gen token + UniPC 35 步快速采样。读代码就从这五块入手。\n架构总览：先看地图 在钻进任何文件之前，先把 Cosmos 3 一次完整的生成链路在脑子里过一遍。以 text-to-video 为例：\n输入：一段文字 prompt（如\u0026quot;一辆红色汽车在雨天的高速公路上行驶\u0026quot;）。 文本 tokenize：Qwen2Tokenizer 把 prompt 转成 token id 序列。 噪声初始化：从标准高斯采样一个噪声视频 latent，形状 (C, T_latent, H_latent, W_latent)——经过 DCAE 压缩后的视频空间。 序列打包：把文本 token（走 und/reasoner 路径）和噪声视频 token（走 gen/generator 路径）拼成一条序列。 MoT 前向传播：序列进入 Transformer。und token 用因果自注意力（只往前看），gen token 用双向注意力（所有方向都看）。gen token 还可以通过 cross-attention 从 und token 取语义特征。 去噪循环：在 UniPC 调度下重复 35 步。每步 MoT 输出 gen 部分的向量场预测，调度器根据预测更新噪声 latent。 解码：35 步结束后，DCAE decoder 把 latent 还原成视频帧。可选的 AVAE decoder 同步生成音频。 安全后处理：LlamaGuard3 做 prompt/输出筛查，face blur 保护隐私。 用列表把模块边界划死：\n理解侧（Reasoner / und）：文本 + 图像 token → causal self-attention → next-token prediction（交叉熵损失） 生成侧（Generator / gen）：噪声 latent → full bidirectional attention → Rectified Flow 向量场（MSE 损失） 连接件：序列打包 + gen→und cross-attention（gen token 从 und token 取语义） 压缩器（预处理 + 后处理）：DCAE encoder（视频→latent）/ decoder（latent→视频） 训练目标：理解用 CE，生成用 Rectified Flow MSE 推理调度：UniPC 35 步 关键认知：Cosmos 3 的\u0026quot;全模态\u0026quot;不是给每种模态单独准备一个网络，而是让所有模态共享同一个 MoT 骨架——视觉、语言、音频、动作都变成 token 序列，按各自的注意力方式（causal / full）在同一套权重里处理。这就是\u0026quot;统一\u0026quot;的含义。\n项目结构：先厘清边界 Cosmos 3 的代码分两个仓库：\nNVIDIA/cosmos：项目主页 + cookbook（Jupyter notebook 示例），不包含模型代码。 NVIDIA/cosmos-framework：真正的训练/推理框架，全部代码在 cosmos_framework/ 包下。 我们要读的是后者。下面用 Markdown 嵌套列表画目录树：\ncosmos-framework/ cosmos_framework/ scripts/ train.py / _train.py：训练入口 inference.py：推理入口 model/ generator/ mot/ unified_mot.py：MoT 核心（PackedAttentionMoT, MoTDecoderLayer） omni_mot_model.py：OmniMoTModel 总装 attention.py：注意力函数调度 tokenizers/ dc_ae/：DCAE 视频 tokenizer（Cosmos 自研，4×32×32 压缩） audio/avae/：AVAE 音频 tokenizer reasoner/ qwen3_vl/：Qwen3-VL 稠密 backbone qwen3_vl_moe/：Qwen3-VL MoE backbone nemotron_3_dense_vl/：Nemotron 3 稠密 VL（Edge 用） configs/ base/defaults/ model_config.py：OmniMoTModelConfig / DiffusionExpertConfig / RectifiedFlowConfig tokenizer.py：所有 tokenizer 注册与参数 reasoner.py：VLM backbone 配置 data/ generator/ sequence_packing/runtime.py：序列打包（und/gen token 混排） processors/：多模态数据处理器 datasets/：JSONL / WebDataset / LeRobot inference/ args.py：采样参数 model.py：推理引擎封装 trainer/：训练循环 auxiliary/guardrail/：安全过滤（LlamaGuard3, face blur, content filter） examples/：SFT 示例配置文件 docs/：文档 逐文件一句话：\nunified_mot.py：MoT 架构的心脏——MoTDecoderLayer 定义了双塔共享层的结构，PackedAttentionMoT 实现了 und/gen 两套各自独立的 QKV/O 投影和注意力分发。 omni_mot_model.py：把 MoT 层、embedding、head 总装成可调用的 OmniMoTModel。 dc_ae/：DCAE 的实现——4 倍时序 × 32 倍空间压缩的因果 VAE（Causal VAE），训练带感知损失 + GAN 损失 + 时间一致性损失。 sequence_packing/runtime.py：把 und token 和 gen token 按指定模式（causal/full/混合）打包成一条序列。 model_config.py：定义所有模型配置类——从 tokenizer 类型、扩散参数到训练超参。 trainer/：实现 FSDP 分布式训练 + callback 架构。 inference/：推理引擎，支持 diffusers/vLLM/SGLang 后端切换。 边界提醒：下面所有代码都是简化后的示意伪代码，用来讲清楚思路。代码块里用英文，中文解释在块外。\n一、MoT 核心：mot/unified_mot.py 这是 Cosmos 3 最值钱的文件。MoT 不是\u0026quot;两个独立的 Transformer 拼在一起\u0026quot;，而是一个 Transformer 层里有两套独立的投影权重，根据 token 的路径（und/gen）选择不同的投影做注意力和 FFN。\n1.1 PackedAttentionMoT：双路径注意力 # model/generator/mot/unified_mot.py (simplified) import torch import torch.nn as nn import torch.nn.functional as F class PackedAttentionMoT(nn.Module): def __init__(self, config): super().__init__() hidden_size = config.hidden_size num_heads = config.num_attention_heads num_kv_heads = config.num_key_value_heads # --- Understanding path projections (causal attention) --- self.q_proj = nn.Linear(hidden_size, num_heads * head_dim) self.k_proj = nn.Linear(hidden_size, num_kv_heads * head_dim) self.v_proj = nn.Linear(hidden_size, num_kv_heads * head_dim) self.o_proj = nn.Linear(num_heads * head_dim, hidden_size) # --- Generation path projections (full attention) --- self.q_proj_moe_gen = nn.Linear(hidden_size, num_heads * head_dim) self.k_proj_moe_gen = nn.Linear(hidden_size, num_kv_heads * head_dim) self.v_proj_moe_gen = nn.Linear(hidden_size, num_kv_heads * head_dim) self.o_proj_moe_gen = nn.Linear(num_heads * head_dim, hidden_size) # Optional QK normalization self.q_norm = RMSNorm(head_dim) self.k_norm = RMSNorm(head_dim) self.q_norm_moe_gen = RMSNorm(head_dim) self.k_norm_moe_gen = RMSNorm(head_dim) # Cross-attention: gen queries attending to und KVs self.k_norm_und_for_gen = RMSNorm(head_dim) def forward(self, hidden_states, attention_mask, position_ids, moe_gen_mask): # Split hidden states into und and gen paths und_mask = ~moe_gen_mask und_h = hidden_states[und_mask] gen_h = hidden_states[moe_gen_mask] # --- Understanding path: causal QKV --- und_q = self.q_norm(self.q_proj(und_h)) und_k = self.k_norm(self.k_proj(und_h)) und_v = self.v_proj(und_h) und_out = scaled_dot_product_attention(und_q, und_k, und_v, is_causal=True) # --- Generation path: full attention + cross-attention to und --- gen_q = self.q_norm_moe_gen(self.q_proj_moe_gen(gen_h)) gen_k = self.k_norm_moe_gen(self.k_proj_moe_gen(gen_h)) gen_v = self.v_proj_moe_gen(gen_h) # Self-attention among gen tokens (full, not causal) gen_out = scaled_dot_product_attention(gen_q, gen_k, gen_v, is_causal=False) # Cross-attention: gen queries attend to und key/values und_k_for_gen = self.k_norm_und_for_gen(self.k_proj(und_h.detach())) gen_cross = scaled_dot_product_attention(gen_q, und_k_for_gen, und_v.detach(), is_causal=False) gen_out = gen_out + gen_cross # combine self + cross gen_out = self.o_proj_moe_gen(gen_out) und_out = self.o_proj(und_out) # Reassemble into original order output = torch.zeros_like(hidden_states) output[und_mask] = und_out output[moe_gen_mask] = gen_out return output 逐块说人话：\n双套 QKV/O 投影：q_proj / k_proj / v_proj / o_proj 给 und 用；q_proj_moe_gen / k_proj_moe_gen / v_proj_moe_gen / o_proj_moe_gen 给 gen 用。它们在初始化时各自独立，训练时各自更新。这是 MoT 最核心的设计——层结构共享但权重不共享。\nQK 归一化：两个路径各自独立的 RMSNorm（q_norm / k_norm vs q_norm_moe_gen / k_norm_moe_gen）。这是 DeepSeek 等模型验证过的技巧——对 QK 做 norm 可以稳定训练、防止 attention logits 爆炸。\ngen→und cross-attention：生成 token 不仅自己做 full attention，还用 gen 侧的 query 去 attend und 侧的 key/value。这相当于\u0026quot;动作专家回头看工程师的方案\u0026quot;——gen token 从 und token 取语义特征。k_norm_und_for_gen 是专门为跨路径交叉注意力准备的 key norm，因为 und 的 QK norm 和 gen 的 QK norm 可能统计量不同。und_h.detach() 确保梯度不反传到 und 路径（和 pi0 的 no_grad 思路一样——理解侧冻结或低 lr，生成侧才是训练主力）。\n注意力分发：实际实现里 scaled_dot_product_attention 会被替换成 dispatch_attention_fn，支持三种后端——密集 attention（PyTorch 原生）、neighborhood attention（NATTEN，只关注局部窗口）、以及 KV-cached 推理 attention。这是工程优化，不影响架构理解。\n一句话澄清：PackedAttentionMoT 不是\u0026quot;两个独立的注意力层串行\u0026quot;，而是一份输入根据 moe_gen_mask 拆成两路，各自走不同的投影但共享同一个注意力函数。拆开的是权重，不是计算图。\n1.2 MoTDecoderLayer：双塔一层 有了 PackedAttentionMoT，MoTDecoderLayer 就很简单了——就是一个标准 Pre-LN Transformer 层，但 attention 和 FFN 都是双路的：\nclass MoTDecoderLayer(nn.Module): def __init__(self, config): super().__init__() self.input_layernorm = nn.LayerNorm(config.hidden_size) self.input_layernorm_moe_gen = nn.LayerNorm(config.hidden_size) self.self_attn = PackedAttentionMoT(config) self.post_attention_layernorm = nn.LayerNorm(config.hidden_size) self.post_attention_layernorm_moe_gen = nn.LayerNorm(config.hidden_size) self.mlp = MLP(config) # und path self.mlp_moe_gen = MLP(config) # gen path def forward(self, hidden_states, attention_mask, position_ids, moe_gen_mask): residual = hidden_states # Dual layernorm: und and gen get different norms und_normed = self.input_layernorm(hidden_states) gen_normed = self.input_layernorm_moe_gen(hidden_states) # Merge back: pick norm based on path normed = torch.where(moe_gen_mask.unsqueeze(-1), gen_normed, und_normed) attn_out = self.self_attn(normed, attention_mask, position_ids, moe_gen_mask) hidden_states = residual + attn_out residual = hidden_states # Dual post-attention norm und_normed = self.post_attention_layernorm(hidden_states) gen_normed = self.post_attention_layernorm_moe_gen(hidden_states) normed = torch.where(moe_gen_mask.unsqueeze(-1), gen_normed, und_normed) # Dual FFN ff_out = torch.where( moe_gen_mask.unsqueeze(-1), self.mlp_moe_gen(normed), self.mlp(normed), ) hidden_states = residual + ff_out return hidden_states 逐块说人话：\ninput_layernorm 给 und，input_layernorm_moe_gen 给 gen。torch.where 根据 moe_gen_mask 为每个 token 选择使用哪种 layernorm。 类似的，attention 输出后，再走各自的后注意力 layernorm，最后各自走自己的 FFN（mlp vs mlp_moe_gen）。 所以一个 MoTDecoderLayer 的前向就是：输入 → 选 norm → 双路注意力 → 加残差 → 选 norm → 双路 FFN → 加残差 → 输出。每层里 und 和 gen 各走各的权重，但共享同一个 hidden_states 张量和残差连接。 关键认知：moe_gen_mask 是一个布尔 mask，形状 (batch * seq_len,)，标记哪些 token 走 gen 路径、哪些走 und 路径。这个 mask 在序列打包阶段就确定好了，整个前向过程中不变。\n下面这张图把 MoTDecoderLayer 的完整数据流画了出来——注意 und 和 gen 各走各的 layernorm、QKV/O 投影、FFN，但在残差连接上共享同一个 hidden_states 张量：\n1.3 前向传播的 tensor 形状追踪 为了让前向传播更具体，我们用 Nano 规格（hidden_size=4096）的一次调用追踪各张量的形状变化。假设打包后的序列有 100 个 und token + 400 个 gen token，batch_size=1：\n# 形状追踪（Nano 规格：H=4096, n_heads=32, head_dim=128） input_hidden = torch.randn(1, 500, 4096) # (B, L, H) = (1, 100+400, 4096) moe_gen_mask = torch.cat([ # 前100个False, 后400个True torch.zeros(100, dtype=torch.bool), torch.ones(400, dtype=torch.bool), ]) # 拆分成两路 und_h = input_hidden[0, :100] # (100, 4096) — und 路径 gen_h = input_hidden[0, 100:] # (400, 4096) — gen 路径 # Und 注意力: 32 heads × 128 head_dim und_q = q_proj(und_h).reshape(100, 32, 128) # (100, 32, 128) und_k = k_proj(und_h).reshape(100, 4, 128) # (100, 4, 128) — GQA: 4 KV heads und_v = v_proj(und_h).reshape(100, 4, 128) # causal attention → und_out: (100, 4096) # Gen 注意力: 同样 32 heads, 不同权重 gen_q = q_proj_moe_gen(gen_h).reshape(400, 32, 128) gen_k = k_proj_moe_gen(gen_h).reshape(400, 4, 128) gen_v = v_proj_moe_gen(gen_h).reshape(400, 4, 128) # full attention → gen_self_out: (400, 4096) # Cross-attention: gen query × und key/value gen_cross = cross_attention(gen_q, # (400, 32, 128) k_norm_und_for_gen(k_proj(und_h)), # und 的 key v_proj(und_h)) # und 的 value # → gen_cross_out: (400, 4096) gen_out = gen_self_out + gen_cross # 组合 # 最后 FFN: 每路各走各的 MLP # und: MLP(4096 → 12288 → 4096) (Nano 规格) # gen: MLP_moe_gen(4096 → 12288 → 4096) # 输出: (1, 500, 4096) — und 和 gen 重新拼回 这个形状追踪揭示了几个关键点：\nGQA（Grouped Query Attention）：32 个 query head 只有 4 个 KV head，每组 8 个 query head 共享同一对 KV。这是标准 GQA 做法，减少 KV 缓存显存，对长序列生成帮助极大。 gen_out = self_attn + cross_attn：gen 的最终注意力输出是自注意力（gen token 之间互看）和交叉注意力（gen 看 und）直接相加。这意味着 gen token 同时从\u0026quot;自己的邻居\u0026quot;和\u0026quot;理解侧的语义特征\u0026quot;两个来源获取信息。 detach() 的实现细节：und_h.detach() 切断了 gen→und 交叉注意力的梯度反传，确保 und 路径的训练信号只来自 next-token prediction 损失。这和 pi0 的 torch.no_grad() 思路一致，但粒度更细——detach 只在 cross-attention 分支上生效，und 路径的自注意力仍然接收自己的梯度。 1.4 三种模型规格的配置 MoTDecoderLayer 本身和规格无关——差异全在配置里。三个规格的 backbone 分别是：\n规格 Backbone hidden_size layers heads KV heads intermediate_size Edge (4B) Nemotron-3 2B 2048 28 16 4 8192 Nano (16B) Qwen3-VL-8B 4096 36 32 8 12288 Super (64B) Qwen3-VL-32B 5120 64 64 8 25600 所有规格共享同一套 MoTDecoderLayer 代码，不同之处只有 config 里的数字。这是工程复用做的很干净的地方。\n二、OmniMoTModel：总装 omni_mot_model.py 把 MoT 层、embedding、head 拼装成可调用的模型。核心逻辑：\n# model/generator/mot/omni_mot_model.py (simplified) class OmniMoTModel(nn.Module): def __init__(self, config): super().__init__() self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size) self.layers = nn.ModuleList( [MoTDecoderLayer(config) for _ in range(config.num_hidden_layers)] ) self.norm = nn.LayerNorm(config.hidden_size) def forward(self, input_ids, moe_gen_mask, position_ids, attention_mask=None): h = self.embed_tokens(input_ids) for layer in self.layers: h = layer(h, attention_mask, position_ids, moe_gen_mask) h = self.norm(h) return h # (B, L, H) final hidden states 但这里有个重要细节：OmniMoTModel 并不直接管理 und 和 gen 的细节配置——它只是个通用的 Transformer 骨干。真正的\u0026quot;理解 + 生成\u0026quot;双头分工是在更上层的代码里做的：\n理解头（Reasoner head）：Qwen3VLModel / NemotronModel 的 lm_head——把 hidden states 投影回 vocab 维度的 logits，做 next-token prediction。 生成头（Generator head）：一个 diffusion head——把 gen token 位置对应的 hidden states 投影成向量场预测（在 latent 空间里），再用 Rectified Flow 损失监督。 这种\u0026quot;共享 backbone + 双头\u0026quot;的设计和 pi0 / AlpaMayo-R1 非常像，只不过 Cosmos 3 的双头在每一层都通过 MoT 双路径深度耦合，而不只是最后加一个 head。\n# 更完整的 OmniMoTModel 调用示意 class OmniMoTForCausalLM(nn.Module): def __init__(self, config): super().__init__() self.model = OmniMoTModel(config) self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False) self.gen_head = DiffusionHead(config) # projects gen hidden → vector field def forward(self, input_ids, moe_gen_mask, labels=None, gen_targets=None): hidden = self.model(input_ids, moe_gen_mask, ...) # Und tokens go to lm_head (next-token prediction) und_logits = self.lm_head(hidden[~moe_gen_mask]) # Gen tokens go to gen_head (vector field prediction) gen_pred = self.gen_head(hidden[moe_gen_mask]) loss = 0 if labels is not None: loss += cross_entropy(und_logits, labels) # reasoner loss if gen_targets is not None: loss += mse_loss(gen_pred, gen_targets) # generator loss return loss 三、DCAE：视频 tokenizer Cosmos 3 自研的 DCAE（Dual-Channel AutoEncoder）是所有视频生成的基础。它的核心功能：把原始视频 (T, H, W, 3) 压缩成 latent (C, T/4, H/32, W/32)。\n3.1 压缩率为什么重要 没有 DCAE，Cosmos 3 的 Transformer 根本跑不动。一段 5 秒 24fps 的 720p 视频有 5×24=120 帧，每帧 1280×720×3 像素——直接在像素空间做 attention 的 token 数会爆炸。DCAE 把 120 帧压缩到 120/4=30 个时间步，每帧压缩到 720/32 × 1280/32 ≈ 23×40 ≈ 920 个 latent 位置——总量从天文数字降到可管理的级别。\n3.2 DCAE 架构简化 # model/generator/tokenizers/dc_ae/ (simplified) class DCAEEncoder(nn.Module): def __init__(self, latent_channels=64, downsample_factor=32, temporal_downsample=4): super().__init__() # Stack of 3D convolutions with increasing channels self.stem = nn.Conv3d(3, 128, kernel_size=3, padding=1) self.blocks = nn.ModuleList([ DownsampleBlock3D(128, 256, stride=(1, 2, 2)), # spatial /2 DownsampleBlock3D(256, 512, stride=(1, 2, 2)), # spatial /4 DownsampleBlock3D(512, 512, stride=(1, 2, 2)), # spatial /8 DownsampleBlock3D(512, 512, stride=(2, 2, 2)), # temporal/2, spatial/16 DownsampleBlock3D(512, latent_channels, stride=(2, 2, 2)), # temporal/4, spatial/32 ]) self.causal = True # causal padding throughout def forward(self, video): # video: (B, T, H, W, 3) normalized to [-1, 1] # permute to (B, C, T, H, W) for Conv3d x = video.permute(0, 4, 1, 2, 3) x = self.stem(x) for block in self.blocks: x = block(x) return x # (B, latent_channels, T//4, H//32, W//32) class DCAEDecoder(nn.Module): def __init__(self, latent_channels=64): super().__init__() # Symmetric to encoder: upsample blocks self.blocks = nn.ModuleList([ UpsampleBlock3D(latent_channels, 512, stride=(2, 2, 2)), UpsampleBlock3D(512, 512, stride=(2, 2, 2)), UpsampleBlock3D(512, 512, stride=(1, 2, 2)), UpsampleBlock3D(512, 256, stride=(1, 2, 2)), UpsampleBlock3D(256, 128, stride=(1, 2, 2)), ]) self.head = nn.Conv3d(128, 3, kernel_size=3, padding=1) def forward(self, latent): for block in self.blocks: latent = block(latent) out = self.head(latent) return out.permute(0, 2, 3, 4, 1) # (B, T, H, W, 3) 逐块说人话：\n因果 3D 卷积：所有卷积层都用因果 padding（即只看当前时间步及之前，不看未来），确保编码器不会\u0026quot;作弊\u0026quot;偷看未来的帧。这是世界模型生成时因果正确性的基础。 渐进下采样：5 个 downsampling block，前三个只压缩空间（H, W 各 /2），第四个开始同时压缩时间（T/2）。最终达到 T/4 和 H/32, W/32。 多规格支持：latent_channels 可取 64/96/128，对应不同的重建质量等级。 3.3 CausalVAE3D 与因果卷积细节 DCAE 的核心算子叫 CausalVAE3D——一个把因果性嵌入到 3D 卷积每一个算子的模块。它的关键修正在卷积的 padding 策略上：\n# dc_ae/modules/causal_conv3d.py (simplified concept) class CausalConv3d(nn.Conv3d): def __init__(self, in_channels, out_channels, kernel_size, stride=1, dilation=1): # Standard Conv3d with causal padding # kernel_size assumed (k_t, k_h, k_w) pad_t = (kernel_size[0] - 1) * dilation[0] # only pad past, not future pad_h = (kernel_size[1] - 1) * dilation[1] // 2 pad_w = (kernel_size[2] - 1) * dilation[2] // 2 # padding: (W_left, W_right, H_top, H_bottom, T_front, T_back) # T_back=0 ensures causal: current frame only sees past frames padding = (pad_w, pad_w, pad_h, pad_h, pad_t, 0) super().__init__(in_channels, out_channels, kernel_size, stride=stride, padding=padding, dilation=dilation) def forward(self, x): # Standard Conv3d with causal padding already set in __init__ return super().forward(x) 这里最关键的一行是 padding = (pad_w, pad_w, pad_h, pad_h, pad_t, 0)——时间维度的 padding 只给过去（pad_t），不给未来（0）。这和 NLP 里的 causal mask 是同一个逻辑，不过实现在了卷积核层面。\nCausalVAE3D 的所有下采样/上采样层、残差块、注意力层都基于这个因果 3D 卷积构建。包括其中的 GroupNorm、SiLU 激活、以及可选的 3D 位置编码（用于 mRoPE），都在因果约束下工作。\n3.4 量化与潜空间正则化 DCAE 在 encoder 和 decoder 之间还有一个量化模块，控制 latent 的分布：\n# dc_ae/modules/quant.py (simplified concept) class DCAEQuantizer(nn.Module): def __init__(self, latent_channels=64, quant_type=\u0026#34;lpips\u0026#34;): super().__init__() self.conv_in = nn.Conv3d(latent_channels, latent_channels, 1) self.conv_out = nn.Conv3d(latent_channels, latent_channels, 1) self.quant_type = quant_type # \u0026#34;lpips\u0026#34; or \u0026#34;vq\u0026#34; def forward(self, x): # Apply channel-wise scaling based on perceptual importance x = self.conv_in(x) if self.quant_type == \u0026#34;vq\u0026#34;: # Vector quantization (for discrete latent space) x, _ = self.vector_quantization(x) # \u0026#34;lpips\u0026#34; mode: no actual quantization, just learnable scaling x = self.conv_out(x) return x 实际推理时默认用 \u0026quot;lpips\u0026quot; 模式——不做真正的量化，只是通过一个可学习的通道缩放来校准 latent 的空间。\u0026quot;vq\u0026quot; 模式则做向量量化（类似 VQ-VAE），把 latent 变成离散 token——这在需要语言模型直接生成 latent token 时使用。\n3.5 完整的训练损失 DCAE 需要单独训练，不是免费的。它的完整损失函数：\n# DCAE training loss components L_dcae = L_recon + λ_perc · L_perceptual + λ_gan · L_gan + λ_t · L_temporal + β · L_kl 各分量含义：\n损失项 公式 作用 L_recon L1 + L2 混合 像素级重建精度 L_perceptual LPIPS（VGG 特征空间 MSE） 感知质量——让重建帧在\u0026quot;人眼感知上\u0026quot;和原图一致 L_gan PatchGAN hinge loss 纹理真实感——补 L1/LPIPS 可能模糊的细节 L_temporal 光流 warp 误差 时间一致性——相邻帧不闪烁不跳变 L_kl KL 散度 约束 latent 接近标准正态（标准 VAE 正则项） PatchGAN 鉴别器也是一个 3D 卷积网络，以视频片段为输入，输出一个 patch-level 的真伪图（每个 patch 判断是否真实），而非整段视频一个分数。这有助于保持局部纹理的真实性。\nDCAE 是独立于 MoT 模型训练的，训好后冻结使用。MoT 只在 DCAE 的 latent 空间里做生成。这是很经典的两阶段训练——先训好高效的压缩器，再基于压缩空间训生成模型。\n关键认知：DCAE 的 4×32×32 压缩是 Cosmos 3 能跑起来的前提。没有这个压缩，任何 Transformer 都处理不了视频的 token 数量。这和 Diffusion Planner 用轨迹纬度压缩、pi0 用 action horizon 压缩是同一个逻辑——先压缩到可计算的空间，再做生成。\n把上面这段编码-解码流程画成图，每个 down/up block 的形状变化一目了然：\n四、Rectified Flow 训练 Cosmos 3 的生成侧用 Rectified Flow 训练，而不是 DDPM。这节讲训练配置和目标函数。\n4.1 配置 # configs/base/defaults/model_config.py (simplified) @dataclass class RectifiedFlowTrainingConfig: shift: int = 5 # distribution shift for noise schedule train_time_image_distribution: str = \u0026#34;logitnormal\u0026#34; train_time_video_distribution: str = \u0026#34;logitnormal\u0026#34; train_time_action_distribution: str = \u0026#34;logitnormal\u0026#34; loss_scale: float = 1.0 action_loss_weight: float = 10.0 # action loss weighted higher @dataclass class RectifiedFlowInferenceConfig: scheduler_type: str = \u0026#34;unipc\u0026#34; # UniPC multi-step num_train_timesteps: int = 1000 shift: int = 1 4.2 训练损失 def rectified_flow_loss(model, video_latent, text_input_ids, moe_gen_mask): # video_latent: (B, C, T_lat, H_lat, W_lat) from DCAE encoder # Flatten spatial-temporal dims to sequence B, C, T, H, W = video_latent.shape x_1 = video_latent.reshape(B, C, -1).transpose(1, 2) # (B, T*H*W, C) # Sample noise and time noise = torch.randn_like(x_1) t = sample_logit_normal((B, 1, 1), shift=5) # logit-normal distribution # Linear interpolation: x_t = (1-t) * noise + t * data x_t = (1 - t) * noise + t * x_1 # Forward through MoT (packed with text tokens) packed_input = pack_sequence(text_input_ids, x_t, moe_gen_mask) hidden = model(packed_input, moe_gen_mask) # Get gen token predictions (vector field) gen_hidden = hidden[moe_gen_mask] v_pred = gen_head(gen_hidden) # (B*T*H*W, C) # Target: v = x_1 - noise (direction from noise to data) v_target = x_1 - noise loss = F.mse_loss(v_pred, v_target.reshape(-1, C)) return loss 逐行说人话：\nx_1 是真实数据（从 DCAE 编码器拿到的视频 latent），展开成序列 (B, N, C)——N = T×H×W 是 latent token 总数。 t 从 logit-normal 分布采样——它让模型花更多时间在中间噪声程度（t ≈ 0.5）上，因为那里最难学。这和 Diffusion Planner 的均匀采样不同——Cosmos 3 用了更精细的时间分布。 x_t = (1-t) * noise + t * x_1：线性插值，从噪声到数据的直线路径。 pack_sequence：序列打包——把文本 token（und 路径）和视频 latent token（gen 路径）拼成一条序列，附带 moe_gen_mask 标记哪些位置走 gen 路径。 v_pred：模型预测的向量场。 v_target = x_1 - noise：直线路径上的恒定向量场方向（从噪声指向数据）。 损失就是两者 MSE——最朴素的回归。没有 KL、没有对抗、没有任何花哨。 一句话澄清：Rectified Flow 比 DDPM 更直接——DDPM 预测的是加在数据上的噪声（间接），RF 预测的是从噪声到数据的方向（直接）。所以 RF 在推理时需要的步数更少（Cosmos 3 只用 35 步 vs DDPM 的 1000 步）。\n五、序列打包：und/gen token 如何共存 序列打包是 Cosmos 3 能跑起来的关键工程模块。它在 data/generator/sequence_packing/runtime.py 里。\n5.1 打包逻辑 # data/generator/sequence_packing/runtime.py (simplified) def pack_sequence(text_tokens, gen_latents, config): # text_tokens: (B, L_text) token ids for und path # gen_latents: (B, N_gen, C) flattened video/audio latent tokens for gen path # 1. Create moe_gen_mask: True for gen tokens, False for und tokens und_len = text_tokens.shape[1] gen_len = gen_latents.shape[1] total_len = und_len + gen_len moe_gen_mask = torch.cat([ torch.zeros(und_len, dtype=torch.bool), torch.ones(gen_len, dtype=torch.bool), ]) # 2. Concatenate text + latent along sequence dimension packed_input_ids = torch.cat([text_tokens], dim=1) # text only (latents go through different path) # 3. Create combined hidden states packed_hidden = torch.cat([ text_embeddings, # (B, und_len, H) gen_proj(gen_latents), # (B, gen_len, H) ], dim=1) return packed_hidden, moe_gen_mask 关键工程细节：\n位置编码：und token 和 gen token 使用不同的位置编码策略。und token 用标准的 1D RoPE（文本位置），gen token 用 mRoPE（3D 位置：时间 T + 空间 H + 空间 W）。最终拼接时各自加上各自的位置编码。 注意力 mask：und 部分用 causal mask（每个 token 只能看自己和之前的），gen 部分用 full mask（所有 gen token 互看）加上 gen→und cross-attention mask（gen 可以看所有 und token 但 und 不能看 gen）。 最大 token 数：默认 max_num_tokens_after_packing = 13312——经过 DCAE 压缩后，这个限制大约允许 5 秒 24fps 的视频生成。 # 注意力 mask 示意 # und tokens (causal): ✓ 每行只能看当前列及以左 # gen tokens (full): ✓ 任意 gen 看所有 gen # gen→und cross: ✓ gen 看所有 und # und→gen: ✗ 不看（因果上 und 不能看到未来的生成结果） # mask 形状: (total_len, total_len) # und1 und2 gen1 gen2 # und1 ✓ ✗ ✗ ✗ # und2 ✓ ✓ ✗ ✗ # gen1 ✓ ✓ ✓ ✓ # gen2 ✓ ✓ ✓ ✓ 把序列打包的拼接方式和注意力 mask 结构画成一张图，und/gen 各自的位置编码和注意力范围一目了然：\n六、推理管线 推理入口在 scripts/inference.py，核心生成循环在 inference/ 下。看 text-to-video 的简化流程：\n# scripts/inference.py (simplified concept) @torch.no_grad() def text_to_video(prompt, model, dcae, tokenizer, num_steps=35, guidance_scale=6.0): # 1. Tokenize text prompt text_ids = tokenizer.encode(prompt) # (B, L_text) # 2. Initialize noise in latent space # For 5s @24fps video: T=120 → T_lat=30 (DCAE /4), H=320→10 (/32), W=512→16 (/32) noise = torch.randn(1, 64, 30, 10, 16) # (B, C, T_lat, H_lat, W_lat) latent = noise.clone() # 3. UniPC sampling loop scheduler = UniPCScheduler(num_train_timesteps=1000, num_inference_steps=35) timesteps = scheduler.get_timesteps() for t in timesteps: # Pack und (text) + gen (noisy latent) tokens gen_tokens = flatten_latent(latent) # (B, N_gen, C) packed_hidden, moe_gen_mask = pack_sequence(text_ids, gen_tokens, ...) # MoT forward: get gen path vector field hidden = model(packed_hidden, moe_gen_mask) gen_hidden = hidden[moe_gen_mask] v_pred = model.gen_head(gen_hidden) # Reshape back to latent space v_pred = unflatten_to_latent(v_pred, latent.shape) # Classifier-free guidance v_uncond = ... # forward with empty prompt v_guided = v_uncond + guidance_scale * (v_pred - v_uncond) # Scheduler step latent = scheduler.step(v_guided, t, latent) # 4. Decode latent to video video = dcae.decoder(latent) # (B, T, H, W, 3) return video 逐块说人话：\n噪声初始化：在 DCAE latent 空间采样高斯噪声。实际分辨率取决于配置——512p 视频对应的 latent 是 64 通道 × 30 时间步 × 16 高 × 26 宽。 UniPC 调度：35 步多步采样。比 DDPM 的 1000 步快 30 倍，比 DDIM 的 50 步也快。Cosmos 3 还有个 4 步蒸馏版本（fixed-step sampler），适合超低延迟场景。 Classifier-free guidance（CFG）：每次前向算两次——一次有条件（带 prompt），一次无条件和空 prompt。然后外推：v_guided = v_uncond + scale * (v_cond - v_uncond)。scale=6.0 是默认值。这确保生成的视频和 prompt 相关度高。 解码：35 步走完，DCAE decoder 把 latent 还原回像素视频。 关键认知：推理时 gen token 全部是双向注意力，并且可以看到所有 und token（包括完整的 prompt）。这和训练时 und token 用因果注意力只能看前文不同——推理时 gen 路径有\u0026quot;上帝视角\u0026quot;，可以基于完整的语义描述做生成。\n把 Rectified Flow 训练和推理的完整流程画出来，噪声→数据直线路径、MSE 向量场损失、35 步 UniPC 调度全部一目了然：\n七、和本系列其他文章的关系 把 Cosmos 3 放进代码讲解坐标系里，它的位置很特别：\n对比 Diffusion Policy / Diffusion Planner（扩散生成范式）：那些方法只用扩散做动作/轨迹生成，backbone 是 U-Net 或标准 DiT。Cosmos 3 的 MoT 把扩散 DiT 和自回归 VLM 整合到了一个 Transformer 里，生成和理解不再是两个独立模型。\n对比 pi0（VLM + 动作专家并联）：pi0 是 PaliGemma VLM 主干 + Flow Matching 动作专家，两座塔权重独立、仅在推理时通过 cross-attention 交互。Cosmos 3 的 MoT 是每层都有双投影，交互更密集、更深度。两者思路同源——理解用因果、生成用双向——但 Cosmos 3 的耦合更紧。\n对比 AlpaMayo-R1（VLM + 轨迹专家）：AlpaMayo-R1 也是 VLM 主干 + expert 模块的并联结构，在语种上更接近 Cosmos 3 的 MoT。但 AlpaMayo-R1 的 expert 是专为驾驶轨迹设计的，Cosmos 3 的 gen 路径是通用的扩散生成器，能处理图像、视频、音频、动作。\n对比 AutoVLA / DriveVLA-W0（离散动作 token 派）：Cosmos 3 不用离散 token，走 Rectified Flow 连续生成路线。和 pi0 一样，它也是\u0026quot;连续派\u0026quot;的代表。\n八、个人思考 1. MoT 双塔本质上是\u0026quot;结构化的专家混合\u0026quot;。 传统 MoE 在 FFN 层做路由——token 动态选择不同的 FFN 专家。MoT 在 attention 和 FFN 上同时做路由，但路由策略不是动态的（不依赖 token 内容决定走哪条路），而是静态的（und/gen 在序列打包时就定死了）。这种\u0026quot;静态路由\u0026quot;的好处是简单、稳定，但代价是灵活性不如动态路由。我认为这是一个务实的选择——世界模型的稳定性比灵活性重要。\n2. 因果 VAE + Rectified Flow 的组合是防止\u0026quot;世界模型作弊\u0026quot;的关键。 很多视频生成模型生成的视频\u0026quot;看起来好看但物理错误\u0026quot;——那是因为生成过程没有因果约束。Cosmos 3 从编码器（DCAE causal padding）到训练目标（RF 路径）到推理（时序逐步生成），层层加了因果约束，物理一致性才得以保证。这对自动驾驶世界模型尤其重要——你不能让模型\u0026quot;预知\u0026quot;未来再生成过去。\n3. DCAE 的 4×32×32 压缩率是一个惊人的工程成就。 128 倍的压缩几乎无损（视频质量在 FVD/PSNR 指标上接近无损压缩），这意味着 MoT 可以在一个极其紧凑的 token 空间里工作。这个思路对自动驾驶也很有启发——DrivoR 把视觉 token 压缩了 256 倍（6144→24），DCAE 把视频压缩了 128 倍——\u0026ldquo;压缩然后生成\u0026quot;是一个通用的物理 AI 范式。\n4. 序列打包的设计揭示了注意力模式的根本差异。 理解需要因果（因为语言是顺序的、知识是累积的），生成需要双向（因为图像/视频的空间结构需要全局感知）。强行用同一种注意力模式处理两种任务会两头不讨好。MoT 的解决方案——同层双路径——优雅地解决了这个矛盾。这对我们设计多模态架构是一个重要参考。\n5. Cosmos 3 给\u0026quot;VLA + 世界模型\u0026quot;指出了一条融合方向。 现有的驾驶 VLA 要么不做显式世界模型（AutoVLA/pi0），要么把世界模型当成一个单独的预测头来训（DriveVLA-W0）。Cosmos 3 展示了另一种可能：世界模型的\u0026quot;生成能力\u0026quot;和 VLA 的\u0026quot;理解能力\u0026quot;可以统一到一个共享骨干里。这在驾驶上的应用前景非常吸引人——一个模型既能\u0026quot;看懂\u0026quot;场景，又能\u0026quot;预测\u0026quot;未来，还能\u0026quot;生成\u0026quot;规划。\n九、Config 系统：配置即代码 Cosmos 3 的配置系统在 configs/base/defaults/model_config.py 中。它不是简单的 YAML/JSON，而是用 Python dataclass + OmegaConf 的分层注册系统。每一类组件都有自己独立的配置类：\n# configs/base/defaults/model_config.py (simplified structure) @dataclass class OmniMoTModelConfig: # Transformer backbone hidden_size: int = 4096 intermediate_size: int = 12288 num_hidden_layers: int = 36 num_attention_heads: int = 32 num_key_value_heads: int = 8 rms_norm_eps: float = 1e-6 # MoT specific moe_gen_enabled: bool = True # toggle MoT on/off # Use separate layernorm for gen path moe_gen_layernorm: bool = True # Cross-attention config moe_gen_cross_attention: bool = True moe_gen_k_norm_und: bool = True @dataclass class DiffusionExpertConfig: # Rectified Flow training shift: int = 5 loss_scale: float = 1.0 action_loss_weight: float = 10.0 # Inference scheduler_type: str = \u0026#34;unipc\u0026#34; num_inference_steps: int = 35 guidance_scale: float = 6.0 @dataclass class TokenizerConfig: video_tokenizer: str = \u0026#34;dcae\u0026#34; # or \u0026#34;cosmos_videovae\u0026#34; audio_tokenizer: str = \u0026#34;avae\u0026#34; tokenizer_type: str = \u0026#34;CausalVAE3D\u0026#34; latent_channels: int = 64 base_channels: int = 128 channel_multipliers: tuple = (1, 2, 4, 4) down_samples: tuple = (1, 2, 2, 2) # temporal down factors spatial_compression: int = 32 temporal_compression: int = 4 @dataclass class ReasonerConfig: backbone: str = \u0026#34;qwen3_vl\u0026#34; # or \u0026#34;nemotron_3_dense_vl\u0026#34; freeze_backbone: bool = False enable_gradient_checkpointing: bool = True 这个配置体系的核心优势：\n分层组合：OmniMoTModelConfig 定义骨干结构，DiffusionExpertConfig 定义生成头，TokenizerConfig 定义压缩器，ReasonerConfig 定义 VLM。最终模型通过组合这些配置类来完整描述。 OmegaConf 合并：所有 dataclass 被 OmegaConf 递归注册，base config 在 configs/base/ 里，实验配置通过 --config-name 覆盖特定字段。可以理解为\u0026quot;Python 版 Hydra\u0026rdquo;。 每个规格一份配置：Edge/Nano/Super 各维护一个 YAML，只列出和 base 不同的部分： # configs/experiment/nano_text_to_video.yaml defaults: - base_text_to_video - _self_ model: hidden_size: 4096 num_hidden_layers: 36 num_attention_heads: 32 moe_gen_enabled: true training: per_device_train_batch_size: 1 gradient_accumulation_steps: 8 num_train_epochs: 1 这种设计让配置管理的复杂度可控——base 值改一次，所有实验同步更新。\n十、Trainer 多阶段训练管线 Cosmos 3 的训练在 trainer/ 目录下实现，基于 PyTorch FSDP（Fully Sharded Data Parallelism）。整个训练分为三个阶段：\n10.1 预训练阶段（Pretraining） 第一阶段的 MoT 骨干在 DCAE latent 空间上从头训练生成能力。数据来源是互联网视频 + 内部数据集，经过以下流程：\n# trainer/train.py (simplified concept) class CosmosTrainer: def __init__(self, config): self.model = OmniMoTForCausalLM(config) self.dcae = load_frozen_dcae() # frozen tokenizer self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=3e-4) def train_step(self, batch): # batch: video, text, audio, action (depending on task) video_latent = self.dcae.encoder(batch.video) # (B, C, T/4, H/32, W/32) # Pack sequence: text tokens (und) + video latents (gen) packed, moe_gen_mask = pack_sequence(batch.text, video_latent) # Rectified Flow loss on gen path loss = self.compute_rf_loss(packed, moe_gen_mask, video_latent) loss.backward() self.optimizer.step() return loss.item() 关键训练参数：\nBatch 构建：每个 batch 包含来自不同视频的片段，text→video 对。文本用 Qwen2Tokenizer tokenize 后送入 und 路径，视频经 DCAE 压缩后送入 gen 路径。 FSDP 分片：模型参数、梯度、优化器状态在所有 GPU 间分片。对于 Super（64B）规格，这几乎是强制的——单卡放不下完整模型。 梯度 checkpointing：MoT 的每一层 swap 激活值到 CPU 或重新计算，用计算换显存。 10.2 监督微调（SFT） 预训练之后是 SFT 阶段，用高质量标注数据微调模型在特定任务上的表现：\ntext-to-video：高质量 caption—video pair，提升 prompt 对齐度。 image-to-video：首帧条件化，模型学习从静态图推断运动。 text-to-action：用 LeRobot 等机器人数据集微调，让 gen 路径输出动作序列。 video-to-text：用 video captioning 数据微调 und 路径，提升视频理解能力。 SFT 阶段可以只微调 gen 路径或 und 路径，也可以一起微调。配置控制：\n# 冻结 und 路径，只训练 gen 路径 for name, param in model.named_parameters(): if \u0026#39;moe_gen\u0026#39; not in name: param.requires_grad = False 这和 pi0 的\u0026quot;先预训专家、再微调专家\u0026quot;的思路高度一致。\n10.3 RLHF + 奖励模型 Cosmos 3 还可以接 RLHF 阶段，用偏好数据进一步优化生成质量。偏好信号来自：\n视频质量评分器：基于 FVD / CLIP score / aesthetic score 训练的奖励模型。 人类偏好数据：人工标注的视频对比对（A/B test）。 物理一致性检查器：检测视频中是否出现物理不合理现象（物体穿透、重力异常等）。 整个训练管线可以用一张图总结：\n视 文 频 本 → → D T C o A k E e n 编 i 码 z e → r l → a t t e o n k t e n ( g i e d n s 路 ( 径 u ) n d ─ ) ┐ ─ ─ ─ ─ 冻 ┘ 结 ├ D C → A ↑ E M o T → g e n 输 出 → M S E l o s s → 反 向 传 播 十一、多模态生成模式 Cosmos 3 支持五种模态输入和多种生成模式。看推理代码中的模式分发：\n# scripts/inference.py (simplified routing) def run_inference(args): if args.mode == \u0026#34;text_to_video\u0026#34;: return text_to_video(args.prompt, ...) elif args.mode == \u0026#34;image_to_video\u0026#34;: return image_to_video(args.image, args.prompt, ...) elif args.mode == \u0026#34;video_to_video\u0026#34;: return video_to_video(args.input_video, args.edit_prompt, ...) elif args.mode == \u0026#34;text_to_action\u0026#34;: return text_to_action(args.prompt, ...) elif args.mode == \u0026#34;text_to_audio\u0026#34;: return text_to_audio(args.prompt, ...) elif args.mode == \u0026#34;text_and_image_to_video\u0026#34;: return text_and_image_to_video(args.prompt, args.image, ...) 每种模式的工程差异在于序列打包策略不同：\n模式 und token gen token 注意点 text→video 仅文本 视频 latent 标准打包 image→video 文本 + 图像 token 视频 latent 图像 token 也走 und 路径（causal） video→video 文本 + 原视频 token 编辑后的视频 latent 原视频可以走 und 或 gen，取决于是否允许编辑因果 text→action 仅文本 动作序列 动作是连续向量，用 linear proj 映射到 hidden text→audio 仅文本 音频 latent 音频用 AVAE 压缩，类似 DCAE 但处理 1D 信号 text+image→video 文本 + 图像 token 视频 latent 图像作为首帧条件 其中 image→video 最具代表性——它展示了 Cosmos 3 如何用\u0026quot;条件化首帧\u0026quot;来约束生成：\n# image_to_video 的核心逻辑 def image_to_video(image, prompt, model, dcae, ...): # 1. 把输入图过一遍 DCAE encoder，拿到 latent img_latent = dcae.encoder(image.unsqueeze(1)) # (B, C, 1, H_lat, W_lat) # 2. 噪声 latent 只在 t\u0026gt;0 的时间步上初始化 noise = torch.randn(B, C, T_lat - 1, H_lat, W_lat) # 首帧直接用 img_latent，后续帧从噪声开始去噪 latent = torch.cat([img_latent, noise], dim=2) # 3. 序列打包时，首帧 token 走 und 路径（提供条件）， # 后续帧走 gen 路径（生成） # 这样 und 路径看到了\u0026#34;开头长什么样\u0026#34;，gen 路径负责\u0026#34;延续下去\u0026#34; 这里模型学到的是：给定首帧（und 路径看到的视觉上下文），预测后续帧在 latent 空间中的向量场。这和视频预测（Video Prediction）任务的范式完全一致——只不 Cosmos 3 用的是扩散生成而不是确定性回归。\n十二、Guardrail 安全系统 Cosmos 3 在生产部署时集成了多层安全 guardrail。代码在 auxiliary/guardrail/ 下：\n# auxiliary/guardrail/ (simplified concept) class SafetyGuardrail: def __init__(self): self.prompt_classifier = LlamaGuard3ForSequenceClassification(...) self.output_classifier = LlamaGuard3ForSequenceClassification(...) self.face_blur = FaceBlurModule() self.content_filter = ContentFilter() def check_prompt(self, text): # 检查输入 prompt 是否包含不安全内容 result = self.prompt_classifier(text) if result.unsafe: return False, result.violated_categories return True, None def filter_output(self, video): # 对生成的视频做后处理 video = self.face_blur(video) # 人脸模糊 video = self.content_filter(video) # 内容过滤（暴力/色情检测） return video 完整 guardrail 流程：\nPrompt 过滤：用户输入的 prompt 先过 LlamaGuard3，检测是否有暴力、色情、仇恨言论等不安全内容。如果不安全，直接拒绝生成。 输出过滤：生成的视频逐帧过内容分类器，检测是否有不合规内容。 人脸模糊：检测到的所有人脸做高斯模糊——这是隐私合规的硬性要求，尤其对自动驾驶场景（路人的隐私保护）。 Wurst 水印：在生成视频上嵌入不可见数字水印，标示内容由 AI 生成。这是应对 deepfake 和版权问题的行业标准做法。 这个 guardrail 系统不是 Cosmos 3 的学术创新，但它是从\u0026quot;研究原型\u0026quot;到\u0026quot;可部署产品\u0026quot;必不可少的一步。\n小结：Cosmos 3 的代码核心就六件事——MoT 双塔（PackedAttentionMoT / MoTDecoderLayer 的双套投影）、DCAE 4×32×32 因果视频压缩（dc_ae/ + CausalConv3d + 多损失联合训练）、Rectified Flow 向量场训练（MSE loss + logit-normal t 分布）、序列打包（und/gen token 混排 + 混合注意力 mask）、UniPC 35 步推理、以及多层 Guardrail 安全过滤。它和 pi0 / Diffusion Planner 共享了\u0026quot;理解因果 + 生成双向 + 交叉注意力传递语义\u0026quot;的底层思想，但把结构从\u0026quot;两个独立模型\u0026quot;推进到了\u0026quot;一个共享骨架的双路径\u0026quot;。从配置管理（OmegaConf dataclass 分层组合）到训练管线（FSDP 预训练 → SFT → RLHF），再到推理部署（UniPC 调度 + guardrail + 水印），Cosmos 3 展示了工业级世界模型的全栈工程实践。\n","permalink":"https://auto-driving-blog.pages.dev/posts/code/cosmos3%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"「NVIDIA Cosmos 3 用 Mixture-of-Transformers 双塔架构把语言、图像、视频、音频、动作五模态统一进一个世界基础模型。本文从 NVIDIA/cosmos-framework 源码出发，面向零基础读者逐文件讲透 MoT 双塔（PackedAttentionMoT / MoTDecoderLayer 的 dual-QKV/proj 设计）、DCAE 视频 tokenizer（4×32×32 因果 VAE）、Rectified Flow 训练（logit-normal 时间分布 + MSE 向量场损失）、序列打包（und/gen token 混排）、以及推理管线（35 步 UniPC 调度 + 多模态生成），最后与 pi0 / Diffusion Planner / AlpaMayo-R1 对照」","title":"Cosmos 3 代码讲解：Mixture-of-Transformers 双塔统一五模态世界模型"},{"content":"1. 一句话介绍 该架构以 Cosmos-3 双塔 MoT 为基础，在 Reasoner 和 Generator 的前馈层中加入 DeepSeek-style Sparse MoE，再通过 Flow Matching 生成连续轨迹，最后使用 Flow-GRPO 根据环境奖励优化轨迹策略。\n可以概括为：\nCosmos-3 负责理解和生成表征，MoE 负责稀疏专家计算，Flow 负责生成连续轨迹，Flow-GRPO 负责强化学习优化。\n2. 总体流程 整体包含四个核心阶段：\n多模态理解：编码视觉、语言、智能体状态和任务目标； 稀疏专家计算：为不同 token 选择合适的专家； 连续轨迹生成：从噪声逐步生成完整轨迹块； 强化学习优化：利用环境奖励改进生成策略和专家路由。 3. 输入与输出 3.1 输入 输入 作用 编码结果 视觉观测 提供场景、对象与空间关系 Visual tokens 语言指令 描述任务需求和行为目标 Language tokens 智能体状态 提供当前可观测状态 State tokens 场景与目标 提供结构化条件和目标位置 Context tokens 3.2 输出 模型输出未来一段时间的连续轨迹：\n$$ A_t=\\{a_{t+1},a_{t+2},\\ldots,a_{t+T}\\}. $$轨迹点可以表示位置、朝向和速度，也可以根据任务接口定义为连续控制量。部署时只执行轨迹块的前若干步，然后根据新观测重新生成下一段轨迹。\n4. Cosmos-3 双塔 MoT Cosmos-3 将 token 分为两类，并分别送入两个专用路径：\nReasoner Tower 处理视觉理解、语言和任务上下文； 使用因果注意力； 产生场景语义、对象关系和任务意图； 不读取后方的带噪生成 token。 Generator Tower 处理连续条件 token 和带噪轨迹 token； 使用全双向注意力； 可以读取 Reasoner 提供的上下文； 为后续 Flow Head 生成条件特征。 两塔的关系是单向条件化：\n$$ \\text{Reasoner}\\rightarrow\\text{Generator}. $$Generator 可以利用 Reasoner 的结果，但生成噪声不会反向污染 Reasoner 的状态。\n5. 双塔内部的 Sparse MoE MoT 和 MoE 分别负责不同层级的路由：\nMoT：决定 token 进入 Reasoner 还是 Generator； MoE：决定进入某个塔之后，由哪些专家处理该 token。 每个 Sparse MoE 包含：\nRouter：计算 token 与各专家的匹配分数； Shared Experts：始终激活，学习公共能力； Routed Experts：数量较多，每个 token 只激活 Top-K 个； Weighted Aggregation：合并共享专家和被选专家的输出。 Reasoner 和 Generator 使用不同的专家池：\n专家池 主要处理内容 Reasoner MoE 空间关系、时间关系、语言指令、对象交互和任务推理 Generator MoE 轨迹结构、时间一致性、目标条件和连续运动生成 这种设计能够提高总参数容量，同时避免每个 token 都激活全部专家。\n6. Flow 连续轨迹生成 Flow Head 接收以下条件：\nReasoner 上下文 $h_t$； Generator MoE 特征 $z_t$； 当前智能体状态 $s_t$； 随机噪声轨迹 $A^0$。 生成过程从高斯噪声开始：\n$$ A^0\\sim\\mathcal N(0,I), $$Flow Head 在多个积分步骤中预测轨迹的变化方向，最终将无结构噪声变换为完整、连续的轨迹块。\n它与自回归动作生成的主要区别是：\n不逐个产生离散动作 token； 一次联合建模完整未来轨迹； 更容易保持轨迹内部的连续性； 可以从不同初始噪声生成多条候选轨迹。 7. Flow-GRPO 强化学习 监督式 Flow Matching 让模型模仿训练数据，Flow-GRPO 则进一步根据实际任务奖励优化轨迹质量。\n训练过程为：\n在相同条件下采样 $G$ 条候选轨迹； 在环境中分别执行或评估这些轨迹； 根据任务成功、目标进度、安全性、约束满足、平滑性和效率计算奖励； 在组内比较奖励并计算相对优势； 更新 Flow Head、Generator Router 和被激活的 Generator experts； 使用 clipping 和参考策略约束更新幅度。 Reasoner 通常保持冻结或只进行保守微调，以减少强化学习对原有多模态理解能力的影响。\n8. 训练流程 Stage 1：Cosmos-3 初始化 继承 Cosmos-3 的多模态理解、双塔交互和连续生成能力。\nStage 2：MoE 转换与预热 将两塔的 dense FFN 替换为 shared experts 与 routed experts，并使 Router 的负载逐渐稳定。\nStage 3：监督式 Flow 训练 使用示范轨迹训练 Flow Head，使模型先获得可靠的连续轨迹生成能力。\nStage 4：Flow-GRPO 使用组内候选轨迹和环境奖励优化 Flow Head、Generator Router 与被激活专家。\n9. 推理流程 推理采用滚动闭环方式：\n编码当前观测； Reasoner 生成任务与场景上下文； Generator Router 为轨迹 token 选择专家； Flow Head 生成未来轨迹块； 只执行前 $K$ 步； 获取新观测并重新生成轨迹。 10. 各模块作用总结 模块 核心作用 主要输出 Multimodal Encoders 将不同输入映射到统一 token 空间 AR/DM tokens Reasoner Tower 理解场景、语言与任务关系 Reasoning context $h_t$ Generator Tower 处理连续生成 token Generator features $z_t$ Sparse MoE 为不同 token 选择共享或专用专家 Expert-enhanced features Flow Head 从噪声生成完整连续轨迹 Trajectory chunk $A_t$ Environment 执行并评价候选轨迹 Rewards $r_i$ Flow-GRPO 根据组相对优势优化策略 Updated Flow policy 11. 概念边界 下面区分 Cosmos-3 原生机制与本文方案扩展：\n内容 属性 Cosmos-3 双塔 MoT Cosmos-3 原生机制 AR/DM token arrangement Cosmos-3 原生机制 Dual-stream joint attention Cosmos-3 原生机制 Flow-matching Generator 与 action token Cosmos-3 原生支持 DeepSeek-style Sparse MoE 本文架构扩展 连续轨迹 Flow Head 本文任务扩展 面向轨迹策略的 Flow-GRPO 本文训练扩展 因此，该方法最简洁的描述是：\n在 Cosmos-3 双塔 MoT 中加入 DeepSeek-style Sparse MoE，将 Generator 专门化为连续轨迹 Flow Policy，并使用 Flow-GRPO 根据环境奖励优化 Flow Head、Generator Router 和被激活专家。\n参考资料 NVIDIA et al. Cosmos 3: Omnimodal World Models for Physical AI. arXiv:2606.02800, 2026. https://arxiv.org/abs/2606.02800 Dai, D. et al. DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models. arXiv:2401.06066, 2024. https://arxiv.org/abs/2401.06066 Liu, J. et al. Flow-GRPO: Training Flow Matching Models via Online RL. arXiv:2505.05470, 2025. https://arxiv.org/abs/2505.05470 ","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/cosmos3-moe-flowgrpo-arch/","summary":"本文提出一种将 Cosmos-3 双塔 MoT、DeepSeek-style Sparse MoE、Flow Matching 与 Flow-GRPO 结合的架构设计方案，系统描述各模块的角色、接口与训练推理流程。","title":"Cosmos-3 + MoE + Flow-GRPO 架构概览"},{"content":"引言：100 篇 VLA 论文，0 篇属于重卡 如果你关注自动驾驶领域的最新进展，一定注意到 2024-2026 年间 VLA（Vision-Language-Action）模型的爆发式增长。从 AutoVLA、DriveVLM、EMMA、OpenDriveVLA 到 SAMoE-VLA、LaST-VLA、UniDriveVLA，光是 arXiv 上能找到的自动驾驶 VLA 论文就已超过 100 篇。\n但这里有一个令人震惊的事实：\n这 100+ 篇论文，没有一篇专门针对重卡（heavy-duty truck）场景。 所有模型都在乘用车数据集（nuScenes、Waymo Open Dataset、Bench2Drive、CARLA）上训练和评测。\n与此同时，重卡自动驾驶的产业化进程正在加速：Aurora 于 2025 年在德州启动了无安全员的 L4 商业运营，Kodiak AI 已将 VLM 部署在自家卡车感知栈上，Torc Robotics 计划 2027 年量产 L4 卡车。重卡自动驾驶的市场需求是真实且急迫的——美国卡车运输业每年承担着超过 7000 亿美元的货物运输，卡车司机缺口超过 10 万人。然而学术界对重卡 VLA 的研究仍然是一片空白。这不仅是学术上的缺憾，更是产业落地的关键瓶颈。\n本文的目标是：\n定义这个空白：为什么现有 VLA 方法不能直接迁移到重卡？ 分析根本原因：哪些维度造成了迁移障碍？ 提出架构方案：Truck-VLA 应该怎么设计？ 给出路线图：从哪里开始填补这个空白？ 一、VLA 简史：从 VA 到 VLA 的演进 在深入重卡之前，先回顾一下自动驾驶 VLA 的整体图景。\n1.1 三个时代 自动驾驶的\u0026quot;感知-决策-控制\u0026quot;管线经历了三个阶段：\nVA 时代（2016-2023）：视觉-动作模型，直接从传感器映射到控制输出。代表工作包括 ALVINN、ChauffeurNet、TransFuser、UniAD、VAD。核心局限是黑盒推理、长尾泛化差、无法理解语言指令。这一时期的模型本质上是\u0026quot;感知→轨迹\u0026quot;的纯回归映射，缺乏显式推理能力。\nVLM 时代（2023-2024）：视觉-语言模型被引入驾驶场景，用于场景理解、问答和解释。代表工作包括 DriveLM、DriveVLM、DriveGPT4。但 VLM 只输出文本，不产生物理动作。它们的作用更接近\u0026quot;副驾驶\u0026quot;——能够描述场景、回答问题，但不能直接控制车辆。\nVLA 时代（2024-至今）：将 VLM 的推理能力与动作执行统一在同一框架内。WorldBench 团队的综述（arXiv: 2512.16760）给出了最清晰的分类：\n1.2 两大范式 综述提出的分类法将所有 VLA 模型分为两类：\n端到端 VLA（End-to-End VLA）：一个模型完成感知+推理+规划，VLM 直接输出动作（action tokens）。代表工作：AutoVLA（GRPO 微调）、EMMA（Waymo）、SimLingo。这类模型的优势在于 Pipeline 高度统一、梯度可以端到端传播、推理速度快。但缺点是动作质量严重依赖 VLM 骨干本身的表达能力，且缺少专门的安全校验机制。\n双系统 VLA（Dual-System VLA）：分离\u0026quot;慢思考\u0026quot;（VLM 负责推理）和\u0026quot;快执行\u0026quot;（规划器负责安全动作）。代表工作：DriveVLM、InsightDrive、Diff-VLA。VLM 输出的是一个\u0026quot;推理结果\u0026quot;（文字描述的场景理解+决策建议），而实际轨迹由下游的规划器生成。这种架构天然具备更好的安全性和可解释性，但系统复杂度和推理延迟更高。\n下表总结了当前主流 VLA 模型及其使用的数据集和动作空间：\n模型 范式 数据集 动作空间 重卡适配？ AutoVLA 端到端 nuScenes, Bench2Drive 2D（转向+速度） ❌ EMMA 端到端 Waymo Open Dataset 2D（路径点） ❌ DriveVLM 双系统 nuScenes, DRAMA 2D（路径点） ❌ InsightDrive 双系统 nuScenes, BDD 2D（转向+速度） ❌ OpenDriveVLA 端到端 Bench2Drive, nuScenes 2D（路径点） ❌ SamoE-VLA 端到端 Bench2Drive 2D（路径点） ❌ Pi0 (通用VLA) 端到端 OXE (机器人) 6-50D (机器人动作) ❌ Diff-VLA 双系统 nuScenes, Bench2Drive 2D（路径点） ❌ SimLingo 端到端 Bench2Drive 2D（路径点+速度） ❌ 从这个表格可以清晰地看到两个问题：\n所有模型都在乘用车数据集上训练，没有一个使用重卡数据 所有模型的输出空间都是 2-4 维，远低于重卡所需的 12 维 1.3 但它们全是乘用车的 现在回到核心问题：这 100+ 篇论文使用的数据集、仿真环境、动作空间、安全假设——全部基于乘用车设定。下一节我们分析为什么这种设定不能延伸到重卡。\n二、为什么重卡 VLA 不是\u0026quot;加个卡车数据集\u0026quot;就能解决的 2.1 动力学差异：运动学模型对重卡完全失效 乘用车 VLA 使用的运动学模型（kinematic model）通常只考虑位置 $(x,y)$、朝向角 $\\theta$、速度 $v$ 和曲率 $\\kappa$——即状态空间 $\\mathbf{s} = [x, y, \\theta, v]$，控制空间 $\\mathbf{u} = [a, \\delta]$（加速度+前轮转角）。这对轿车是合理的，因为轿车在常规驾驶中不会出现显著的动力学极限行为。\n但重卡的物理特性完全不同，定量对比如下：\n物理量 乘用车 重卡（满载） 差异倍数 总质量 1.5-2.0 t 40-60 t 20-30x 质心高度 0.5-0.6 m 1.5-1.8 m 3x 轴数 2轴4轮 3轴6轮+挂车轴 — 80→0 km/h 制动距离 30-40 m 60-80 m 2x 侧翻临界横向加速度 ~0.8g 0.25-0.4g 0.3-0.5x 车长 4-5 m 16-22 m (含挂车) 4x 这些差异意味着重卡不能用运动学模型近似。一个关键的量化判据是横向载荷转移率（Lateral Load Transfer Ratio, LTR），定义为左右轮垂直载荷之差除以总垂直载荷：\n$$ \\text{LTR} = \\frac{F_{zL} - F_{zR}}{F_{zL} + F_{zR}} $$LTR 的取值范围是 [-1, 1]——当 |LTR| 接近 1 时，内侧车轮离开地面，侧翻即将发生。简化条件下，LTR 与横向加速度 $a_y$、质心高度 $h_{CG}$ 和轮距 $w$ 的关系为：\n$$ \\text{LTR} \\approx \\frac{2 \\cdot h_{CG} \\cdot a_y}{g \\cdot w} $$代入重卡的典型值（$h_{CG} = 1.6\\text{m}, w = 2.0\\text{m}$）得到：$a_y = 0.3g$ 时 LTR 已达 0.48，$a_y = 0.4g$ 时 LTR 为 0.64——已经非常接近侧翻阈值。而乘用车（$h_{CG}=0.5\\text{m}, w=1.6\\text{m}$）在同样的 $a_y = 0.4g$ 下 LTR 仅为 0.25。\n这就是为什么 nuTruck 论文（arXiv: 2607.13704）用一个简单实验就证明了问题的严重性：一条在 nuPlan 上被完美跟踪的无碰撞轨迹，换到重卡动力学模型上跟踪，会因为转向半径过小+车速过高而导致 LTR 爆表——运动学上安全的轨迹，动力学会翻车。\n这意味着：VLA 模型的动作头如果只输出运动学轨迹（路径点/曲率/速度），对于重卡来说是不够的。 必须引入高保真动力学模型（至少 5-DOF 三轴模型），并让 VLA 学会预测和规避 LTR 超限的行为。\n2.2 动作空间维度爆炸 乘用车 VLA 的动作空间通常是 2-4 维（油门/刹车/转向）。这对乘用车足够了，因为传统乘用车本质上是一个欠驱动系统——驾驶员只有方向盘、油门和刹车三个操控输入。\n但对于分布式电驱重卡（Distributed Electric-drive Truck, DET），情况完全不同。DET 的每个轮子都有独立的电机和转向执行器，动作空间变为：\n6 个轮子各自的驱动力矩：$\\tau_1, \\tau_2, \\dots, \\tau_6$ 6 个轮子各自的转向角：$\\delta_1, \\delta_2, \\dots, \\delta_6$ 总计 12 维连续动作空间 为什么需要 12 维？因为 DET 的全轮独立转向能实现乘用车做不到的机动模式：\nFRO 模式（前轮转向）：与传统卡车相同，仅前两轮转向 ALL 模式（全轮转向）：所有轮子参与转向，大幅减小转弯半径 斜行模式：所有轮子朝同一角度偏转，实现横向平移 原地转向：左右轮反转，实现极小半径掉头 这些模式对重卡在港口、矿区、仓库等狭窄场景下的机动性至关重要。简单地将 12 维动作压成 2 维会丢失 DET 的核心能力。\n此外，12 维动作空间也给 VLA 的动作头设计带来了根本性挑战：\n语言头无法输出 12 维连续数值 回归头需要处理高维输出的多模态分布（同一场景可能存在多个合理动作配置） **生成头（扩散/Flow Matching）**目前只在 2-4 维动作空间中验证过，扩展到 12 维的收敛性和采样质量是开放问题 2.3 感知视角完全不同 乘用车 VLA 的感知配置通常是 6 路环视相机（nuScenes 标准配置），安装在轿车顶部或挡风玻璃处。重卡的感知配置完全不同，差异不仅仅是传感器数量的不同：\n视角差异：\n卡车驾驶室顶部比轿车高 1-2 米，导致相机透视矩阵中的消失点位置、地平线高度、像素-米尺度映射关系全部改变 现有 VLA 视觉骨干（ViT、ResNet）在 ImageNet/nuScenes 上预训练，从未见过卡车高度的画面 一个在乘用车感知上训练好的 BEV 转换网络，直接用在卡车上会产生系统性尺度误差 远距需求：\n市区乘用车场景的感知任务范围通常在 30-100m（nuScenes 标注范围 50m） 高速公路重卡需要 300-1000m 的感知距离（TruckDrive 数据集要求前向 1000m、两侧 100m） 这对特征提取网络的有效感受野和下采样率提出了完全不同的要求 现有 VLA 使用的 ViT-B/L 骨干在长距特征编码上没有专门优化 传感器配置差异：\n乘用车：6 路环视相机（典型 30°-60° FOV），1 个顶部 LiDAR 重卡：前向长焦相机（检测远距目标）+ 广角侧视相机 + 后视相机 + 多个 4D 雷达 + 侧向 LiDAR 挂车后方通常需要额外传感器（挂车本身遮挡了牵引车后方的视野） 2.4 挂车遮挡：VLA 从未处理过的问题 重卡的铰接结构（牵引车+挂车）带来了乘用车领域完全不存在的感知挑战：挂车自身造成的动态遮挡。\n这个问题有多严重？想象一辆带 17.5m 标准挂车的重卡向右转弯。挂车会沿更小的半径\u0026quot;抄近路\u0026quot;，其左侧车体会挡住牵引车右侧后视镜中原本可以看到的区域。此时牵引车的右后方出现了一个完全被挂车遮挡的\u0026quot;盲区三角\u0026quot;。如果有一辆自行车恰好在这个区域，VLA 模型需要预测到它的存在——但视觉上完全看不到。\n具体而言，挂车遮挡带来了几个问题：\n动态遮挡模式：遮挡区域随铰接角 $\\alpha$（牵引车与挂车纵轴的夹角）持续变化 自身姿态感知：VLA 需要知道挂车当前在哪里——这要求模型有\u0026quot;自身体态感知\u0026quot;能力 语义混淆：挂车侧壁上的文字/图案可能被 VLA 误判为环境物体 多挂车情况：未来可能使用 B-double（双挂车）车型，铰接自由度从 1 变为 2，问题复杂度进一步升级 现有 VLA 模型处理的是\u0026quot;刚性车身\u0026quot;场景，编码器-解码器架构中完全没有处理可动部件的模块。即使是最先进的 BEVFormer 或 PETR，其空间 attention 也假设自车是一个刚体。要让 VLA 理解铰接结构，需要在 attention 中引入铰接运动学先验——这是一个尚未被探索的研究方向。\n2.5 制动与安全距离的维度差异 重卡和乘用车的制动特性差异不仅在于距离长短，还在于制动安全的维度完全不同：\n制动热衰退：重卡频繁制动时刹车鼓/盘温度可达 400°C 以上，摩擦系数显著下降。乘用车 VLA 完全不需要考虑这个因素。 挂车 sway 效应：紧急制动时挂车可能左右摇摆（trailer sway），严重时导致折叠（jackknife）。VLA 需要学习避免触发这种不稳定的制动策略。 载荷对制动的影响：满载卡车在湿滑路面上的制动距离是干燥路面的 1.8-2.5 倍——而乘用车这个比例只有 1.2-1.5 倍。VLA 的策略必须根据当前载荷动态调整安全跟车距离。 辅助制动：重卡普遍使用发动机制动（Jake Brake）和液力缓速器（Retarder）辅助减速。VLA 需要学会协调主制动与辅助制动的时序。 这些维度乘用车 VLA 完全不需要考虑，但对重卡安全至关重要。\n三、载荷传感器：重卡 VLA 最被忽视的输入 如果说前面几个挑战是\u0026quot;架构问题\u0026quot;，那载荷传感器就是数据问题——也是最容易被忽视的问题。\n3.1 重卡特有的物理状态 乘用车 VLA 的输入包括：图像、LiDAR 点云、GPS/IMU、车身速度/转向角。这些信息对控制来说基本够用——乘用车的质量变化（1-5 个乘客，约 5%-20% 总重）对动力学的影响是二阶的。\n但重卡 VLA 还需要以下信息才能做出安全决策，因为质量变化可达 3 倍（空载 15t → 满载 40t），而且载荷位置的改变会根本性地改变车辆的动力学行为：\n关键物理量及其影响：\n物理量 传感器方式 变化范围 对安全的影响 各轴轴荷 空气悬挂压力传感器 0-16t/轴 决定制动分配、侧翻阈值 总重 轴荷求和 15-40t 制动距离 2x 差异 质心高度 悬挂高度传感器 + 估算 1.0-1.8m LTR 与 h_CG 成正比 动态载荷转移 IMU + 轴荷时序 ±30% 轴荷 过弯/制动稳定性 挂车铰接角 铰接角度传感器 0°-120° 防止折叠、盲区预测 路面附着系数 轮胎力估算 μ=0.15-0.85 制动/转向极限 这些物理量不能\u0026quot;从图像中推断\u0026quot;——压力传感器和应变计的精度远超视觉估计。试图用纯视觉推断载荷会面临三方面困难：\n视觉上看不到装载物的密度（同样体积的钢材 vs 泡沫塑料，质量差 20 倍） 质心高度取决于装载物的垂直分布，视觉只能看到表面 动态载荷是力的时序变化，视觉只能看到位置变化 3.2 为什么现有 VLA 无法处理载荷变化 现有 VLA 模型在训练时，所有轨迹都来自固定动力学参数的乘用车。模型学到的是\u0026quot;在这种情况下打这个方向盘角度→车这样转\u0026quot;的映射——这个映射的动力学参数 $\\mathcal{M}$ 是固定的。\n对重卡来说，部分观测下的动力学方程是：\n$$ \\mathbf{s}_{t+1} = f(\\mathbf{s}_t, \\mathbf{u}_t; \\mathbf{\\Theta}) $$其中 $\\mathbf{\\Theta} = [M, I_{zz}, h_{CG}, C_{\\alpha}, \\dots]$ 是动力学参数，$M$ 是质量，$I_{zz}$ 是横摆转动惯量，$h_{CG}$ 是质心高度，$C_{\\alpha}$ 是轮胎侧偏刚度。对于乘用车 VLA，$\\mathbf{\\Theta}$ 被视为常数。但重卡的 $\\mathbf{\\Theta}$ 是时变的——完全相同的 $\\mathbf{s}_t$ 和 $\\mathbf{u}_t$，空载和满载产生的 $\\mathbf{s}_{t+1}$ 完全不同。\n这意味着：如果没有载荷信息作为 VLA 的条件输入，模型无法区分\u0026quot;安全的快速过弯\u0026quot;和\u0026quot;危险的快速过弯\u0026quot;。 同一个转向角 + 速度的输入，在空载时可能 LTR=0.3（安全），在满载时 LTR=0.7（即将侧翻）。没有载荷信息，模型无法从状态中辨别这两种情况。\n3.3 安全临界值的动态变化 重卡的安全边界不是固定的，而是随载荷动态变化的函数：\n空载：横向加速度限值约 0.4g（LTR 阈值 0.6） 半载：横向加速度限值约 0.3g（LTR 阈值 0.6） 满载：横向加速度限值约 0.25g（LTR 阈值 0.6） 注意 LTR 阈值是固定的（0.6 作为安全边界），但由于 $h_{CG}$ 随载荷变化，对应的横向加速度限值从 0.25g 变化到 0.4g——相差 60%。\n此外，安全边界还受以下因素影响：\n载荷分布：前重后轻 vs 后重前轻导致不同的转向特性（不足转向 vs 过度转向） 路面附着系数：干燥（μ=0.85）、湿滑（μ=0.5）、冰雪（μ=0.15）下侧翻风险完全不同 悬挂状态：气囊悬挂失效时侧倾刚度下降 40-50% 货物类型：液体货物在转弯时产生货物激荡（sloshing），增加侧翻风险 VLA 模型如果要输出\u0026quot;安全的\u0026quot;轨迹，必须感知当前的载荷状态，并将其作为决策的约束条件。这不仅是传感器问题，更是模型架构问题——载荷信息需要被编码进 VLA 的多模态输入空间。\n四、数据集、基准与仿真平台：三项缺失 4.1 现有重卡数据集不支持 VLA 目前公开发布的重卡数据集只有三个，而且全部只服务于感知任务：\n数据集 类型 规模 传感器 含语言标注？ 含动力学标签？ MAN TruckScenes (NeurIPS 2024) 3D检测/跟踪 747场景 4cam+6LiDAR+6radar ❌ ❌ TruckDrive (CVPR 2026) 远距感知 475K帧/165K标注 7LiDAR+10radar+11-15cam ❌ ❌ TruckV2X (arXiv 2025) 协同感知 多车+路侧 车端+路侧传感器 ❌ ❌ 对比乘用车 VLA 的丰富数据生态：\n数据集 用途 规模 与重卡的差距 DriveLM (ECCV 2024) 图级 QA 标注 nuScenes 全量 重卡无等价物 CoVLA (WACV 2025) 语言-动作对 34K 标注帧 重卡无等价物 Impromptu VLA (NeurIPS 2025) 多任务 QA 80K 视频片段 重卡无等价物 nuReasoning (arXiv 2026) 推理链 未知规模 重卡无等价物 NuInstruct (CVPR 2025) 指令跟随 992 场景 重卡无等价物 DriveLM-Chat 对话式 QA 多轮对话 重卡无等价物 重卡 VLA 连最基本的数据集都没有。 你甚至找不到一个带自然语言标注的重卡驾驶视频片段。\n更严重的是，即使有人愿意做语言标注，现有重卡数据集还缺少 VLA 训练所需的另两个关键要素：\n动力学标签缺失：轴荷、LTR、侧倾角、铰接角等物理量在采集时没有记录——因为在当时的数据集设计目标中，这些信息不重要。但这些正是 VLA 训练所需的。 动作标注缺失：CoVLA 等乘用车数据集包含了\u0026quot;语言描述 → 实际驾驶动作\u0026quot;的对齐标注。重卡数据集完全没有人做过这样的标注。 多模态指令缺失：\u0026ldquo;在下个出口驶出高速\u0026rdquo;、\u0026ldquo;前方有事故小心驾驶\u0026rdquo;、\u0026ldquo;减速过弯\u0026rdquo;——这类自然语言指令与驾驶动作的配对数据，在重卡领域完全不存在。 4.2 仿真平台缺口 现有的自动驾驶仿真平台存在巨大的重卡缺口：\n平台 重卡动力学 语言接口 VLA 评测 CARLA ❌ 仅有乘用车 ❌ ❌ MetaDrive ❌ ❌ ❌ nuPlan/NAVSIM ❌ ❌ ❌ Bench2Drive ❌ ✅ 部分（指令） ❌ TruckSim ✅ 高保真（商用） ❌ ❌ nuTruck 仿真器 ✅（5-DOF 开源） ❌ ❌ 需要: 重卡 VLA 仿真 ❌ ❌ ❌ nuTruck 论文已经做了一个重卡动力学仿真器（基于 nuPlan 场景 + 5-DOF 三轴动力学模型），但存在以下局限：\n没有语言接口：无法输入导航指令或场景问答 没有 VLA 评测协议：只支持运动学指标（L2 误差、碰撞率），不支持语言遵从度等 VLA 特有指标 仿真保真度有限：5-DOF 模型未包含轮胎松弛动力学、悬挂非线性、货物激荡等关键效应 场景覆盖不足：基于 nuPlan 场景（主要覆盖市区/郊区），缺少高速公路、港口、矿区等重卡典型场景 只有单车仿真：没有卡车与轿车混行场景，没有多挂车场景 我们需要的平台是：重卡动力学（10+ DOF） + 语言交互接口 + 闭环 VLA 评测协议 + 重卡典型场景库。\n4.3 基准评测缺失 即便有人训练了一个重卡 VLA 模型，也没有地方可以评测它。乘用车 VLA 有多个公认基准：\n基准 类型 指标 VLA 适配 重卡版本？ nuScenes 开环 开环 L2 位移误差、碰撞率 ❌ 无语言评测 ❌ NAVSIM 闭环 PDMS (NC×DAC×(5EP+5TTC+2C)/12) ❌ 无语言评测 ❌ Bench2Drive 闭环 Driving Score, Success Rate ✅ 含指令 ❌ NeuroNCAP 闭环 安全加权综合评分 ❌ 无语言评测 ❌ nuTruck 闭环(重卡) L2 误差，侧翻率 ❌ 无语言评测 ✅ 但无VLA 重卡 VLA 需要全新的基准协议 PDMS-Truck，至少包括以下指标维度：\n开环规划指标： 传统指标：L2 位移误差、航向误差 安全指标：平均 LTR、最大 LTR、LTR 超限率（\u0026gt;0.6 的时间占比） 动力学指标：侧倾角峰值、载荷转移幅度 闭环规划指标： 整体安全评分（加权 LTR + 碰撞 + 偏离） 动力学安全加权 PDMS（将侧翻风险纳入评分） 语言遵从度： 指令执行成功率 推理链质量（与专家推理链的语义相似度） 长尾场景专项： 极端载荷变化（空载↔满载切换） 湿滑/冰雪路面 紧急避障 + 侧翻约束 港口/矿区等非结构化场景 五、Truck-VLA 架构设计提案 基于以上分析，我提出一个面向重卡的 VLA 架构设计方案——Truck-VLA。它的核心思路是：保留 VLA 的语言推理能力，但替换感知层和动作层以适配重卡物理特性。\n5.1 三流感知架构 Truck-VLA 的第一层是多模态感知层，包含三个并行编码流：\n视觉流（Vision Stream）：处理多视角相机输入（前视长焦+环视广角+侧视），生成 BEV 语义特征和场景 token。与现有 VLA 不同的是，Truck-VLA 的视觉骨干需要考虑：\n远距特征提取：在 backbone 中保留更高分辨率的浅层特征（而不是下采样到 1/32），使用多尺度特征融合（类似 FPN）保持远距小目标的响应 透视校正：由于卡车驾驶室高度导致的透视畸变，需要引入高度先验的 attention 偏置 挂车遮挡 mask：预测挂车在自车坐标系中的当前所占区域，在此区域内降低 3D 检测的置信度阈值（因为遮挡区域中的目标更可能是真的） 3D 感知流（3D Perception Stream）：处理 LiDAR + 4D 雷达点云，输出 3D 检测、跟踪和 occupancy 预测。重卡版本需要：\n感知范围扩展：前向 300m+，侧向 50m+，后方 100m+ 4D 雷达利用：利用 4D 雷达的速度测量能力在远距场景中直接检测运动目标（而不是依赖帧间匹配） 挂车体态感知：在 BEV 空间中加入挂车的可变形边界表示，实时更新挂车的位置和朝向 物理状态流（Physical State Stream）——新增：这是 Truck-VLA 区别于所有现有 VLA 模型的关键组件。\n物理状态流的输入是一个 $d_{phys}$ 维向量（建议 $d_{phys}=16$），包含： $$ \\mathbf{x}_{phys} = [M, h_{CG}, F_{z1}, \\dots, F_{z6}, \\alpha_{hitch}, \\dot{\\alpha}_{hitch}, z_{sus1}, \\dots, z_{sus6}, \\mu_{est}, T_{brake}]^\\top $$其中：\n$M$：当前总重（t） $h_{CG}$：估计质心高度（m） $F_{z1..6}$：各轴/轮垂直载荷（kN） $\\alpha_{hitch}$：铰接角（rad） $\\dot{\\alpha}_{hitch}$：铰接角速度（rad/s） $z_{sus1..6}$：各悬挂高度（mm） $\\mu_{est}$：估计路面附着系数 $T_{brake}$：制动系统温度（°C） 这些连续值首先被归一化到 [-1, 1] 区间，然后通过一个轻量 MLP 映射到 $d_{token}$ 维的物理状态 token 序列，与视觉 token、语言 token 拼接后送入 VLM 骨干。\n关键设计决策：物理状态 token 不是简单地拼接到序列末尾，而是按照语义位置插入——例如载荷信息 token 放在\u0026quot;然后\u0026quot;相关的推理段落之前，铰接角 token 放在空间推理相关的位置。这种语义对齐插入策略有助于 VLM 在推理时直接利用物理信息生成正确的文本和动作。\n5.2 重卡专用 VLM 推理层 第二层是双系统推理层，分为慢思考和快执行两个回路：\n慢思考回路（System 2）：基于预训练 VLM（如 InternVL2 8B、Qwen2.5-VL 7B 或 DeepSeek-VL2），接收来自三流感知的 token 序列，采用两阶段生成策略：\n感知阶段：先生成场景描述 token，格式为：\n[ D R I V E ] 前 方 弯 道 半 径 5 0 m ， 路 面 干 燥 § 当 前 载 重 2 0 t ， C G 高 度 1 . 6 m § 铰 接 角 5 ° ， 正 在 缓 慢 减 小 § 左 前 方 8 0 m 有 同 向 乘 用 车 ， 速 度 9 0 k m / h [ / D R I V E ] 推理阶段：基于感知结果生成推理链 token：\n[ R E A S O N ] 过 弯 速 度 6 0 k m / h → 横 向 加 速 度 估 计 0 . 3 2 g → L T R 估 计 0 . 7 2 \u0026gt; 0 . 6 → 不 安 全 → 建 议 减 速 至 4 0 k m / h [ / R E A S O N ] 指令阶段：输出决策指令 token：\n[ A C T I O N ] 减 速 至 4 0 k m / h ， 转 向 角 减 小 1 5 % ， L T R 目 标 ≤ 0 . 5 [ / A C T I O N ] 核心创新：与传统 VLA 不同，Truck-VLA 的 VLM 推理层被额外训练来理解物理状态 token。这意味着：\nVLM 不再仅依赖视觉特征推断\u0026quot;车会不会翻\u0026quot;，而是直接从载荷传感器读取\u0026quot;当前 LTR=0.72\u0026quot;这一事实 训练时使用物理状态感知的 CoT 标注，让 VLM 学会将视觉场景与物理读数关联（例如：\u0026ldquo;从视觉上看到弯道，从传感器读到 LTR=0.72\u0026rdquo;） 5.3 重卡专用动作层 第三层是动作层，也采用双系统设计：\n快执行回路（System 1）：一个轻量化的轨迹生成器，使用 Flow Matching 或 Diffusion 作为生成框架（参考 pi0 的 action expert 设计），接收 VLM 推理结果的 embedding，输出：\n$$ \\mathbf{a}_t = [\\tau_1, \\dots, \\tau_6, \\delta_1, \\dots, \\delta_6] \\in \\mathbb{R}^{12} $$轨迹生成过程中内置可微侧翻约束。具体而言，在生成过程中添加约束损失项：\n$$ \\mathcal{L}_{safety} = \\lambda_{LTR} \\cdot \\max(0, |\\widehat{LTR}| - \\alpha_{LTR})^2 + \\lambda_{jerk} \\cdot \\|\\mathbf{a}_t - \\mathbf{a}_{t-1}\\|^2 $$其中 $\\widehat{LTR}$ 是动作层内部基于简化动力学模型估算的未来 LTR，$\\alpha_{LTR}=0.6$ 是安全阈值。这个约束损失在训练和推理时都可以加入：训练时作为 loss 项影响梯度，推理时通过 guided sampling 或 classifier-guidance 方式影响生成轨迹。\n世界模型预测器：在动作层中集成一个轻量级前向模型（MLP 或小型 transformer），输入当前状态 $\\mathbf{s}_t$ 和候选动作 $\\mathbf{a}_t$，预测未来 $n$ 帧的状态序列和侧翻安全指标：\n$$ \\{\\mathbf{s}_{t+1}, \\text{LTR}_{t+1}\\}, \\dots, \\{\\mathbf{s}_{t+n}, \\text{LTR}_{t+n}\\} = f_{WM}(\\mathbf{s}_t, \\mathbf{a}_t; \\mathbf{\\Theta}_{WM}) $$如果预测到任何 $\\text{LTR}_{t+i} \u003e 0.6$，则触发 replan——回到 VLM 推理层重新给出更保守的指令，或者直接否决当前候选轨迹。\n5.4 训练策略 Truck-VLA 的训练分为三个阶段：\n阶段一：重卡 VLA 预训练（模仿学习）。\n使用重卡仿真数据（从 Phase 2 的仿真平台生成），对 VLM 骨干和动作头进行行为克隆预训练。数据格式为：\n$$ \\mathcal{D}_{BC} = \\{(\\mathbf{I}_t, \\mathbf{P}_t, \\mathbf{x}_{phys,t}, \\mathbf{l}_t, \\mathbf{a}_t^*)\\} $$其中 $\\mathbf{I}_t$ 是图像序列，$\\mathbf{P}_t$ 是点云，$\\mathbf{x}_{phys,t}$ 是物理状态，$\\mathbf{l}_t$ 是语言指令，$\\mathbf{a}_t^*$ 是专家轨迹（由最优控制器或人工驾驶生成）。\n预训练损失函数包括三部分：\n$$ \\mathcal{L}_{pretrain} = \\mathcal{L}_{LM}(\\text{reasoning}) + \\lambda_1 \\cdot \\mathcal{L}_{BC}(\\mathbf{a}, \\mathbf{a}^*) + \\lambda_2 \\cdot \\mathcal{L}_{safety} $$阶段二：强化学习微调（GRPO）。\n在重卡仿真器中闭环训练。选择 GRPO（Group Relative Policy Optimization）而不是 PPO 的主要原因：GRPO 不需要 critic 网络，更适合 VLM 的 RL 微调（与 AutoVLA/DriveVLA 的训练方式一致）。奖励函数设计为多维加权和：\n$$ R = w_{task} \\cdot R_{task} + w_{safe} \\cdot R_{safe} + w_{comfort} \\cdot R_{comfort} + w_{lang} \\cdot R_{lang} $$其中：\n$R_{task}$：任务完成奖励（到达目的地 + 时间效率） $R_{safe}$：安全奖励（LTR 越低越好，平均 LTR 每降低 0.1 奖励 +0.2；LTR \u0026gt; 0.6 时惩罚 -1.0） $R_{comfort}$：舒适奖励（加加速度 $\\text{jerk} \u003c 2\\text{m/s}^3$ 时奖励 +0.1） $R_{lang}$：语言遵从奖励（是否按导航指令行驶，semantic matching score） 阶段三：真实数据对齐。\n用真实卡车采集的传感器 + 载荷 + 轨迹数据微调，尤其针对长尾场景（极端载荷变化、湿滑路面等）。此阶段使用低学习率的 LoRA 微调，避免在真实数据上过拟合。\n5.5 推理时的安全校验流程 Truck-VLA 的推理流程不是一步到位的，而是包含一个三级校验流水线：\n输入: 图像, 点云, 物理状态, 导航指令 │ ▼ ┌──────────────────────────────────────────────────┐ │ 第一级: 感知 Encoding │ │ 视觉流 + 3D感知流 + 物理状态流 → 多模态 token │ └──────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────┐ │ 第二级: VLM 推理 (System 2) │ │ 生成: 场景理解 → 推理链 → 决策指令 │ │ 内置检查: 如果VLM预测LTR \u0026gt; 0.6 → 重新生成更保守指令 │ └──────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────┐ │ 第三级: 动作生成 + 世界模型校验 (System 1) │ │ Flow Matching 生成 12D 动作 │ │ 世界模型前向仿真 LTR 时序 │ │ 如果预测 LTR \u0026gt; 0.6 → replan (回到第二级或调整动作) │ │ 如果 all LTR ≤ 0.6 → 输出最终 12D 动作 │ └──────────────────────────────────────────────────┘ │ ▼ 输出: 6轮扭矩 + 6轮转角 这个三级流水线确保了 Truck-VLA 在任何一步都能通过安全校验，而不是单纯依赖 VLM 的推理质量。\n六、重卡世界模型：从视觉预测到物理因果预测 VLA 与**世界模型（World Model）**的结合是当前最前沿的方向（VLA-World、DynVLA、DriveWorld-VLA 等）。对重卡来说，世界模型的意义更加深远——因为重卡的\u0026quot;安全\u0026quot;不仅取决于是否碰撞，还取决于是否侧翻，而侧翻只能在物理因果的层面上被预测。\n6.1 现有世界模型的局限 当前的世界模型（GAIA-1、DriveDreamer、Cosmos、VLA-World）预测的是：\n未来帧图像序列（视觉层面） BEV occupancy 演变（布局层面） 自车+障碍物轨迹（运动学层面） 它们不预测任何动力学安全指标。对于重卡来说，这意味着世界模型给出的\u0026quot;看起来合理的未来\u0026quot;可能是\u0026quot;物理上会翻车的未来\u0026quot;。一个世界模型可以完美预测\u0026quot;卡车将以 60km/h 通过前方弯道\u0026quot;的视觉效果，但它无法告诉 VLA 这个操作是否会导致侧翻。\n这个缺失可以被形式化描述为：现有世界模型是在观察空间做预测，而不是在物理状态空间做预测。对于乘用车，观察空间预测和物理状态空间预测的 gap 较小——因为乘用车的物理行为是近似安全的。但对重卡，这个 gap 可以决定生死。\n6.2 重卡世界模型必须预测的物理量 Truck-VLA 的世界模型需要在传统的视觉预测之外，额外增加一组物理安全预测头。世界模型的输入是历史帧的联合特征（视觉+物理状态+动作），输出是多尺度预测：\n视觉预测头（与传统世界模型一致）：\n未来 1-3 帧的 BEV occupancy 未来障碍物轨迹（检测+预测） 物理安全预测头（新增）：\n侧翻安全时序：$\\widehat{\\text{LTR}}(t+1), \\widehat{\\text{LTR}}(t+2), \\dots, \\widehat{\\text{LTR}}(t+n)$ 的完整时序曲线。这个预测不仅要输出均值，还要输出置信区间——因为 LTR 预测的不确定性对安全决策至关重要 动态载荷转移量：制动时的前轴增载比 $\\Delta F_{z,front}/F_{z,total}$、过弯时的左右载荷差 $\\Delta F_{z,LR}$ 轮胎附着力利用率：各轮 $\\mu_{utilization} = \\sqrt{F_x^2 + F_y^2} / (\\mu \\cdot F_z)$ 的时序预测，识别即将打滑的轮子 CG 高度变化：由于悬挂压缩/伸展导致的瞬时 CG 变化量 $\\Delta h_{CG}$ 铰接角预测：未来 $n$ 帧的 $\\hat{\\alpha}_{hitch}$ 和 $\\hat{\\dot{\\alpha}}_{hitch}$，用于预测挂车折叠（jackknife）风险 6.3 世界模型的三重作用 在 Truck-VLA 中，世界模型扮演三个角色：\n角色一：梦境回放（Dreaming for Contrastive Learning）\n用世界模型从一个真实场景出发，通过改变动作输入生成同一场景在\u0026quot;安全\u0026quot;和\u0026quot;不安全\u0026quot;两个分支下的未来预测。具体来说：\n给定真实场景 $\\mathcal{S}_0$，有两个候选动作分支：A = \u0026ldquo;以 60km/h 过弯\u0026rdquo; 和 B = \u0026ldquo;以 40km/h 过弯\u0026rdquo; 世界模型 rollout 得到两个分支的完整未来序列： A: LTR 从 0.3 升至 0.8（侧翻风险） B: LTR 从 0.3 降至 0.4（安全） 这对对比数据被用来训练 VLA 的偏好——在训练时，要求 VLA 的语言推理层输出\u0026quot;应选择 B，因为 A 会导致侧翻\u0026quot; 这个对比学习过程的关键在于：世界模型提供了物理因果关系的训练信号，而不是简单的模仿学习。\n角色二：想象 Rollout（Imagination Rollout for RL）\n在 GRPO 强化学习训练中，世界模型代替昂贵的重卡动力学仿真器进行策略展开。具体方法是：\nVLA 在当前状态 $\\mathbf{s}_t$ 下输出动作 $\\mathbf{a}_t$ 世界模型预测 $\\mathbf{s}_{t+1}$ 和 $\\text{LTR}_{t+1}$ 重复 rollout $T$ 步，计算累积奖励 $R = \\sum_{i=1}^T \\gamma^{i-1} r(\\mathbf{s}_{t+i}, \\text{LTR}_{t+i})$ 关键差异在于：世界模型会预测 LTR，让策略在\u0026quot;想象\u0026quot;中就看到侧翻后果。这比传统世界模型提供的\u0026quot;视觉想象\u0026quot;要安全得多——策略学会的是\u0026quot;避免侧翻\u0026quot;，而不是\u0026quot;看起来没撞车\u0026quot;。\n角色三：安全约束蒸馏（Safety Distillation）\n世界模型经过充分训练后，其中蕴含的动力学安全知识可以被蒸馏到 VLA 的动作头中：\n$$ \\mathcal{L}_{distill} = \\| \\mathbf{a}_{VLA}(\\mathbf{s}_t) - \\mathbf{a}_{WM-safe}(\\mathbf{s}_t) \\|^2 $$其中 $\\mathbf{a}_{WM-safe}$ 是世界模型在 $\\mathbf{s}_t$ 下通过 rollout 搜索找到的最优安全动作。蒸馏的效果是：推理时不调用世界模型（节省算力），但动作头仍然具备近似世界模型的安全判断能力。这与 DriveVLA-W0 的\u0026quot;离散特征对齐\u0026quot;思路类似，但是安全层面的对齐。\n6.4 世界模型的训练 Truck-VLA 的世界模型训练使用混合损失函数：\n$$ \\mathcal{L}_{WM} = \\lambda_{vis} \\cdot \\mathcal{L}_{vis} + \\lambda_{occ} \\cdot \\mathcal{L}_{occ} + \\lambda_{dyn} \\cdot \\mathcal{L}_{dyn} $$其中：\n$\\mathcal{L}_{vis}$：视觉重建损失（MSE 或 VQ 损失） $\\mathcal{L}_{occ}$：BEV occupancy 交叉熵损失 $\\mathcal{L}_{dyn}$：物理量预测损失（LTR、轴荷等的 MSE） 训练数据来自重卡仿真平台。关键设计是：仿真数据必须包含不同载荷配置下的轨迹-物理量对，才能让世界模型学会\u0026quot;同样的驾驶操作在不同载荷下的不同后果\u0026quot;。\n七、填补空白的路线图 回到开头的问题：重卡 VLA 是一个巨大的研究空白，从哪里开始？我按照难度和依赖关系将路线图分为四个阶段：\nPhase 1：构建重卡 VLA 数据集（3-6 个月） 这是整个路线图的基础。没有数据集，一切无从谈起。好消息是：不需要从头采集数据，可以在现有数据集上做后标注（post-annotation）。\n具体任务：\n语言标注：在 MAN TruckScenes 和 TruckDrive 的数据上，为每个场景/帧添加： 场景描述：\u0026ldquo;卡车满载在高速公路上以 80km/h 行驶，前方 200m 处有慢车\u0026rdquo; 危险提示：\u0026ldquo;前方弯道 R=50m，建议从 60km/h 减速至 35km/h\u0026rdquo; 导航指令：\u0026ldquo;在 1km 后靠右驶出高速\u0026rdquo; 指令-动作对齐：将语言指令与对应的驾驶动作时间戳对齐 物理状态标注：如果原始数据没有记录载荷信息，通过车辆动力学模型反向估计： 利用加速度、倾角、悬挂数据的时序信号估计各轴轴荷 使用扩展卡尔曼滤波（EKF）联合估计质量和 CG 高度 标注 LTR 时序、侧倾角时序（精度不如传感器直接测量，但足够训练 VLA） 评估基准标注：为每个场景标注\u0026quot;安全驾驶轨迹\u0026quot;（由人类专家或最优控制器生成），作为后续评测的 ground truth 可行性评估：Phase 1 的技术难度较低（主要是标注工作量），但需要与 MAN/Amazon/Torc 等拥有重卡数据集的机构合作获取原始数据授权。预计需要 3-6 个月完成 10K+ 场景的标注。\nPhase 2：建设重卡 VLA 仿真平台（6-12 个月） 这是技术难度最高但最关键的一步。仿真平台是 VLA 模型训练和评测的基础设施，缺少它后续所有工作都无法闭环。\n具体构建方案：基于 nuTruck 仿真器进行扩展：\n动力学提升：将 nuTruck 当前使用的 5-DOF 模型升级到 10+ DOF： 增加轮胎松弛动力学（relaxation length） 增加悬挂非线性模型（包含限位块、摩擦） 增加挂车 sway 动力学 增加制动热力学模型（用于预测热衰退） 语言接口： 语言指令输入 API：env.set_instruction(\u0026quot;在下个出口驶出高速\u0026quot;) 场景描述自动生成：基于场景拓扑自动合成自然语言描述 推理链自动评测：与专家推理链的语义相似度 VLA 评测协议 PDMS-Truck： 开环指标：L2 位移误差 + 航向误差 + 平均 LTR + LTR 超限率 闭环指标：PDMS-Truck（安全加权 PDMS，侧翻权重占比 30%） 语言遵从度：指令执行匹配率 世界模型训练数据生成： 批量生成不同载荷、路面、场景组合下的轨迹-物理量-视觉数据对 生成对抗性场景（紧急避障+满载+湿滑路面等高危险组合） 可行性评估：Phase 2 需要极强的仿真工程能力。推荐的实现路径是 fork nuTruck 的代码仓库（基于 nuPlan），在其上叠加 VLA 接口。预计需要 6-12 个月。\nPhase 3：首次重卡 VLA 基线（6 个月） 有了数据（Phase 1）和平台（Phase 2），就可以开始训练了。Phase 3 的目标不是做一个\u0026quot;完美的重卡 VLA\u0026quot;，而是建立第一个公开可复现的基线。\n具体方案：基于现有的开源 VLA 模型（如 OpenDriveVLA 或 DriveVLA-W0）改造：\n增加物理状态编码器（1-2 周）： 在 VLM 输入的 token 序列中插入物理状态 token 使用 LoRA 微调 VLM 骨干使其理解这些新 token 的语义 更换动作头为 12 维扩散头（1-2 月）： 基于 pi0 或 DiffusionDrive 的 Flow Matching 动作专家 增加可微 LTR 约束损失 验证 12 维扩散动作空间在重卡场景上的收敛性 在重卡仿真平台上训练和评测（2-3 月）： 使用 Phase 1 的数据做行为克隆预训练 使用 GRPO 在仿真平台上闭环微调 在 Phase 2 的 PDMS-Truck 协议上评测 消融实验（1-2 月）： 有物理状态 token vs 无物理状态 token（验证载荷信息对侧翻安全的影响） 2D 动作输出 vs 12D 动作输出（验证全轮独立转向的收益） 有世界模型安全蒸馏 vs 无蒸馏 核心假设验证：Phase 3 要回答的最重要的问题是——\u0026ldquo;加上载荷信息是否实质性地改善了重卡 VLA 的侧翻安全性？\u0026ldquo;如果答案是肯定的，这个方向就值得大规模投入。\nPhase 4：闭环验证与实地测试（持续） 在真实重卡上部署 Truck-VLA 模型：\n硬件在环测试：在真实卡车上运行 VLA 推理，但动作指令经过安全硬保护层（Safety Cage）校验通过后再执行 封闭场地测试：在测试场中验证 VLA 在极端载荷、湿滑路面、紧急避障等场景下的表现 开放道路测试：在安全员的监督下进行高速公路和港口等重卡典型场景的测试 路线图总览 Phase 1 (3-6月) Phase 2 (6-12月) Phase 3 (6月) Phase 4 (持续) ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 重卡VLA数据集 │ → │ 重卡VLA仿真平台 │ → │ 首次VLA基线 │ → │ 实地闭环验证 │ │ - 语言标注 │ │ - 10+DOF动力学 │ │ - 物理编码器 │ │ - 硬件在环 │ │ - 物理状态标注 │ │ - 语言接口 │ │ - 12D动作头 │ │ - 封闭场地 │ │ - 推理链标注 │ │ - PDMS-Truck │ │ - GRPO微调 │ │ - 开放道路 │ │ - 基准标注 │ │ - 数据生成 │ │ - 消融实验 │ │ - Safety Cage│ └──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘ 依赖: 依赖: 依赖: 依赖: 原始数据授权 nuTruck源码 Phase 1+2成果 Phase 3模型 风险与缓解：\n风险 概率 影响 缓解措施 重卡数据集授权困难 高 高 与 Torc/Aurora 等企业建立合作；自行采集小规模数据 12D 扩散动作难以收敛 中 高 先用 6D 降维版本验证可行性，逐步扩展到 12D 仿真-真实 gap 中 中 提前引入 domain randomization 缺乏评测协议共识 中 低 提出 PDMS-Truck 作为初始提案，接受社区改进 八、结语 2024-2026 年的 VLA 热潮重塑了自动驾驶的技术路线，但这场革命绕过了重卡。100+ 篇论文、20+ 开源模型、多个评测基准——全是乘用车的。重卡从 VLA 的发展中没有获得任何直接收益。\n重卡 VLA 不仅仅是一个\u0026quot;缺少数据集\u0026quot;的问题——如果只是缺数据，花半年标注就有了。真正的问题在于，重卡的物理特性和安全需求从根本上挑战了现有 VLA 的架构假设：\n物理感知的扩展：载荷传感器必须成为 VLA 的一等公民。乘用车 VLA 的\u0026quot;图像 + LiDAR + IMU\u0026quot;输入空间对重卡远远不够。轴荷、质心、铰接角这些物理量需要被直接测量并编码进 VLA 的 token 空间。 动力学安全的回归：VLA 必须理解侧翻物理，不只要\u0026quot;看起来对\u0026rdquo;。这要求将 LTR、载荷载移等动力学指标内化到 VLA 的训练目标和推理约束中。 铰接结构的建模：牵引车+挂车的双体感知是全新课题。现有 VLA 的刚性车身假设完全不适用于铰接车辆，需要全新的 attention 机制来建模挂车体态。 动作空间的升维：12 维独立轮控 vs 2 维传统控制。现有 VLA 的动作头无法处理 DET 的高维动作空间，而简单的降维映射会丢失全轮独立转向的核心价值。 高保真仿真平台：现有平台全不支持重卡 VLA。CARLA、MetaDrive、NAVSIM 都缺重卡动力学；TruckSim 和 nuTruck 仿真器缺语言接口和 VLA 评测协议。 多维度世界模型：重卡的世界模型不仅需要预测视觉未来，还需要预测物理安全未来——这是现有世界模型从未涉及的研究方向。 这些问题每一个都值得一篇独立的论文。从\u0026quot;在 MAN TruckScenes 上标注推理链\u0026quot;到\u0026quot;12D 扩散动作空间的收敛性分析\u0026quot;到\u0026quot;重卡动力学约束的 VLA 奖励设计\u0026rdquo;——每个子问题都是可以独立发表的完整工作。\n对研究者的建议 如果你对这个方向感兴趣，以下是我认为最有价值的切入点：\n短期（3-6 月）： 在现有重卡数据集上标注 VLA 格式的指令-动作对（发表 VLA 标注基准论文） 评估现有 VLA 模型在重卡数据上的迁移性能（发表迁移分析论文） 中期（6-12 月）： 扩展 nuTruck 仿真器为 VLA 训练平台（发表仿真平台+评测协议论文） 训练第一个重卡 VLA 基线模型（发表 VLA-Truck 基线论文） 长期（12-24 月）： 重卡世界模型（物理安全预测头 + 安全蒸馏） 铰接结构感知的 VLA attention 机制 对产业界的建议 Aurora/Torc/Kodiak：你们的真实重卡数据和工程经验是学术界最缺乏的资源。考虑开源部分感知数据和载荷数据，或设立重卡 VLA 研究挑战赛。 仿真平台公司：重卡动力学 + 语言接口是仿真器的重要差异化功能。TruckSim、CARLA 等应考虑增加重卡 VLA 支持。 VLA 开源社区：重卡不是\u0026quot;小众领域\u0026quot;。全球卡车运输业每年产值 7000 亿美元，L4 重卡的落地需求迫在眉睫。VLA 社区应该关注这个方向。 这些问题每一个都值得一篇独立的论文。而现在，它们全都等着被解决。\n参考文献 nuTruck: Benchmarking Autonomous Driving Planning for Distributed Electric-drive Trucks - arXiv:2607.13704, 2026 Vision-Language-Action Models for Autonomous Driving: Past, Present, and Future - arXiv:2512.16760, 2025 MAN TruckScenes: A multimodal dataset for autonomous trucking in diverse conditions - NeurIPS, 2024 TruckDrive: Long-Range Autonomous Highway Driving Dataset - CVPR, 2026 TruckV2X: A Truck-Centered Perception Dataset - arXiv, 2025 AutoVLA: A Vision-Language-Action Model with Adaptive Reasoning and Reinforcement Fine-Tuning - arXiv:2506.13757, 2025 OpenDriveVLA: Towards End-to-end Autonomous Driving with Large Vision Language Action Model - arXiv:2503.23463, 2025 CoVLA: Comprehensive Vision-Language-Action Dataset for Autonomous Driving - WACV, 2025 Anti-rollover Artificial Potential Field Motion Planning of an Autonomous Heavy Truck Optimised by Game Theory - CJME, 2024 Rollover Prevention and Motion Planning for an Intelligent Heavy Truck - CJME, 2021 DriveVLM: The Convergence of Autonomous Driving and Large Vision-Language Models - arXiv:2402.12289, 2024 DiffusionDrive: Truncated Diffusion Model for End-to-End Autonomous Driving - arXiv:2410.02526, 2024 pi0: A Vision-Language-Action Flow Model for General Robot Control - arXiv, 2025 DriveVLA-W0: A World Model Guided VLA for Autonomous Driving - arXiv, 2026 Longitudinal Safety Distance Control Considering Cargo Load for Heavy Trucks - ICVES, 2025 GRPO: Group Relative Policy Optimization for Reasoning in Large Language Models - DeepSeek, 2025 Flow Matching for Generative Modeling - ICLR, 2023 Impromptu VLA: A Vision-Language-Action Dataset for Autonomous Driving - NeurIPS, 2025 nuReasoning: A Reasoning-Enhanced Dataset for Autonomous Driving - arXiv, 2026 GAIA-1: A Generative World Model for Autonomous Driving - arXiv, 2023 ","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/%E9%87%8D%E5%8D%A1vla%E7%A0%94%E7%A9%B6%E7%A9%BA%E7%99%BD%E4%B8%8E%E5%89%8D%E7%9E%BB/","summary":"\u003ch2 id=\"引言100-篇-vla-论文0-篇属于重卡\"\u003e引言：100 篇 VLA 论文，0 篇属于重卡\u003c/h2\u003e\n\u003cp\u003e如果你关注自动驾驶领域的最新进展，一定注意到 2024-2026 年间 VLA（Vision-Language-Action）模型的爆发式增长。从 AutoVLA、DriveVLM、EMMA、OpenDriveVLA 到 SAMoE-VLA、LaST-VLA、UniDriveVLA，光是 arXiv 上能找到的自动驾驶 VLA 论文就已超过 \u003cstrong\u003e100 篇\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e但这里有一个令人震惊的事实：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e这 100+ 篇论文，没有一篇专门针对重卡（heavy-duty truck）场景。\u003c/strong\u003e 所有模型都在乘用车数据集（nuScenes、Waymo Open Dataset、Bench2Drive、CARLA）上训练和评测。\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e与此同时，重卡自动驾驶的产业化进程正在加速：Aurora 于 2025 年在德州启动了无安全员的 L4 商业运营，Kodiak AI 已将 VLM 部署在自家卡车感知栈上，Torc Robotics 计划 2027 年量产 L4 卡车。重卡自动驾驶的市场需求是真实且急迫的——美国卡车运输业每年承担着超过 7000 亿美元的货物运输，卡车司机缺口超过 10 万人。然而学术界对\u003cstrong\u003e重卡 VLA\u003c/strong\u003e 的研究仍然是一片空白。这不仅是学术上的缺憾，更是产业落地的关键瓶颈。\u003c/p\u003e\n\u003cp\u003e本文的目标是：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e定义这个空白\u003c/strong\u003e：为什么现有 VLA 方法不能直接迁移到重卡？\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e分析根本原因\u003c/strong\u003e：哪些维度造成了迁移障碍？\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e提出架构方案\u003c/strong\u003e：Truck-VLA 应该怎么设计？\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e给出路线图\u003c/strong\u003e：从哪里开始填补这个空白？\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"一vla-简史从-va-到-vla-的演进\"\u003e一、VLA 简史：从 VA 到 VLA 的演进\u003c/h2\u003e\n\u003cp\u003e在深入重卡之前，先回顾一下自动驾驶 VLA 的整体图景。\u003c/p\u003e\n\u003ch3 id=\"11-三个时代\"\u003e1.1 三个时代\u003c/h3\u003e\n\u003cp\u003e自动驾驶的\u0026quot;感知-决策-控制\u0026quot;管线经历了三个阶段：\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eVA 时代（2016-2023）\u003c/strong\u003e：视觉-动作模型，直接从传感器映射到控制输出。代表工作包括 ALVINN、ChauffeurNet、TransFuser、UniAD、VAD。核心局限是黑盒推理、长尾泛化差、无法理解语言指令。这一时期的模型本质上是\u0026quot;感知→轨迹\u0026quot;的纯回归映射，缺乏显式推理能力。\u003c/p\u003e","title":"思考｜重卡 VLA 是一个巨大的研究空白——兼论 Truck-VLA 架构设计"},{"content":"写给零基础读者：读这篇之前先搞懂几个名词 AlpaMayo-R1 的代码不长，但它把好几个「听起来很唬人」的概念揉在了一起。你要是直接冲进源码，多半会被一堆缩写劝退。所以我们先花点时间，把会反复出现的黑话全部翻译成大白话。你现在不用全记住，有个印象，等下看代码时回头对照就行。\nVLA（Vision-Language-Action，视觉语言动作模型）：给模型一张图（有时再加一句话指令），它直接吐出「车该怎么开」。它的核心思路是：把开车这件事，当成一个「语言建模」问题来做——图像当输入，动作当输出，中间用一个已经很会「说话」的大模型（VLM）串起来。把里面那根大模型底座叫做「VLM 骨干」。\nVLM（Vision-Language Model，视觉语言模型）：一个「能看图说话」的多模态大模型。它本来的看家本领是「看一张图，用自然语言回答关于这张图的问题」，比如 Qwen2.5-VL、GPT-4V。AlpaMayo-R1 在它上面做改造，让它不光会回答问题，还会「开车」。\ntoken（离散词）：大模型眼里的世界不是连续的，而是一个个「词」。它把一句话拆成一串编号（比如「你」=101，「好」=102），每个编号就是一个 token。模型的工作说白了就是「猜下一个 token 是几号」。理解这个对 AlpaMayo-R1 尤其重要：它不光把文字拆成 token，还把历史轨迹、未来动作全拆成 token——开车就是说话，轨迹就是文字。\nCoC（Chain of Causation，因果推理链）：一种结构化的推理格式。普通 CoT（思维链）是自由写的，比如「前面有车，我要减速」。CoC 更严格，每个推理样本拆为三个结构化组件：\n组件 定义 是否闭集 驾驶决策 (Driving Decision) 当前时刻的纵向+横向操控意图 闭集（8纵x8横，必须选一个） 关键因素 (Critical Components) 影响决策的场景元素（目标、红绿灯、道路事件等） 开集（自由描述） CoC 推理链 把决策和关键因素串成一段自然语言推理 动态生成 其中「驾驶决策」不是随意填的，而是从闭集（固定选项）里选。纵向决策包括 Set speed tracking（定速巡航）、Lead obstacle following（跟车）、Yield（让行）、Stop（停止）等 8 种；横向决策包括 Lane keeping（保持车道）、Lane change（变道）、Turn（转弯）、Pull-over（靠边）等 8 种。这种设计确保了推理链直接锚定到具体驾驶行为，杜绝了「be cautious」这类模糊描述。\nCoC 和普通 CoT（思维链）的核心区别：\n维度 CoT（思维链） CoC（因果推理链） 推理形式 自由格式，想到哪写到哪 结构化，必须包含决策+因素+推理 决策锚定 松散，不绑定具体驾驶行为 闭集驾驶决策，固定选项 因果约束 无显式要求 显式因果链接（因素-\u0026gt;决策-\u0026gt;动作） 可监督性 难评估，自由度太高 易评估，可做自动规则检查 简单说：CoT 是自由写作文，CoC 是必须用「三段论」格式写议论文——必须有论点（决策）、论据（关键因素）、论证（推理过程）。\n下面举几个 CoC 推理链的实际例子，感受一下模型输出长什么样：\n场景 1：前方行人横穿\n驾驶决策：Yield（让行）+ Lane keeping（保持车道） 关键因素：前方 15 米处有行人从右向左横穿，行人已踏上人行横道，当前车速 45km/h，无法安全绕行 推理链：前方行人已进入人行横道且距离仅 15 米，继续直行将与行人发生冲突。因此我选择减速让行，待行人通过后再恢复正常行驶速度。\n场景 2：主路汇入\n驾驶决策：Gap-searching（寻找空档）+ Merge（汇入主路） 关键因素：当前位于匝道末端 100 米，主路左侧车道有连续车流，最近空档约 40 米、相对速度 +5km/h 推理链：匝道即将结束，我需要汇入主路。左侧车道有一处 40 米空档可以安全插入，目标车辆相对速度 +5km/h，加速匹配即可完成汇入。因此我选择加速至目标车道车速并汇入。\n场景 3：红灯停车\n驾驶决策：Stop（停止）+ Lane keeping（保持车道） 关键因素：前方 50 米处交通信号灯为红色，已知红灯持续时间约 30 秒，自车当前速度 60km/h 推理链：前方红灯且距离足够（50 米），以当前速度 60km/h 正常减速即可在停止线前平稳停车。因此我选择匀速减速至停止，在停止线前等待绿灯。\n场景 4：弯道减速\n驾驶决策：Speed adaptation（弯道调速）+ Lane keeping（保持车道） 关键因素：前方 80 米处为右转弯道、曲率半径约 30 米，当前速度 70km/h 推理链：右转弯道曲率半径仅 30 米，以 70km/h 入弯将超过横向加速度安全阈值。我需要提前减速至 35km/h，入弯后保持匀速通过。因此我选择在弯道前逐步减速。\n场景 5：跟车巡航\n驾驶决策：Lead obstacle following（跟车）+ Lane keeping（保持车道） 关键因素：本车道前方有一辆轿车，相对距离 40 米，前车速度 50km/h，自车速度 55km/h，跟车时距约 2.6 秒 推理链：前车以 50km/h 匀速行驶，当前跟车时距 2.6 秒在安全范围内（\u0026gt;2 秒），无需急加减速。我选择微调速度至 50km/h 以保持稳定跟车距离。\n每个 CoC 推理链都严格包含三要素：明确说「我要做什么」、给出「为什么」的关键因素、把两者串成因果逻辑。模型训练时，这些推理链作为监督信号让 VLM 学会「先想明白、再开车」的决策习惯。\nGRPO（Group Relative Policy Optimization，组相对策略优化）：一种不需要价值网络的强化学习算法。对同一个场景采样多个候选轨迹，用组内奖励的均值和标准差做基线，比平均好的给正信号、比平均差的给负信号。省掉了 PPO 里那个和策略一样大的 critic 网络。DeepSeek-R1 就用它。\nFlow Matching（流匹配）：一种生成模型。和扩散模型（DDPM）类似，Flow Matching 也是从纯噪声逐步变成数据。但 DDPM 是「弯曲路径」（随机微分方程 SDE），Flow Matching 是「直线路径」（常微分方程 ODE）。直线意味着更少的生成步数——AlpaMayo-R1 只用了 10 步。\nDDPM（Denoising Diffusion Probabilistic Model，去噪扩散概率模型）：另一种生成模型。通过给数据慢慢加噪声、再训练网络去噪来生成新样本。步骤多（100~1000 步），但效果好。\nExpert（动作专家模块）：AlpaMayo-R1 里独立于 VLM 的一个轻量 Transformer 网络，专门负责处理轨迹 token。VLM 生成 CoC 推理链，Expert 接收 VLM 的上下文（KV cache）并迭代去噪生成轨迹。两者分工明确：VLM 管「想」，Expert 管「动」。\n单轮动力学模型（Unicycle Model）：一个最简化的车辆运动模型。它把车的运动分解为两个控制量：加速度（踩油门/刹车）和曲率（打方向盘）。给定这两个量，用简单的物理公式就能积分出车的位置 (x, y) 和朝向。好处是模型不需要直接预测位置，而是预测更底层、更平滑的控制量。\nFourier 编码（傅里叶特征编码）：一种把连续数值映射到高频空间的技术。直觉上，神经网络很难直接感受「x=0.5」这种小数的小变化，但如果把它变成 [sin(ω₁x), cos(ω₁x), sin(ω₂x), cos(ω₂x), ...] 这么一组信号，网络就能通过不同频率的响应来捕捉细微变化。这个技巧在 NeRF（神经辐射场）里很出名。\nKV cache（键值缓存）：Transformer 生成时，每次只生成一个新 token，但需要「回顾」所有之前生成的 token。KV cache 就是把之前所有 token 的注意力键和值存起来，避免每步都从头算一遍。AlpaMayo-R1 里 VLM 生成的 KV cache 被直接传给 Expert 复用。\nEuler 积分：一种最朴素的数值积分方法。给定一个速度 v 和时间步 dt，新位置 = 旧位置 + dt × v。在 Flow Matching 里，每一步去噪就是 x = x + dt × v，像沿着一条直线向前迈一小步。\naction space（动作空间）：模型输出的是轨迹吗？其实不是。AlpaMayo-R1 模型输出的不是 (x,y) 坐标，而是加速度和曲率这对控制量。然后通过单轮动力学模型积分出轨迹。这么做的原因是：控制量比坐标更平滑、更物理、更容易学。\nmode collapse（模式坍缩）：扩散模型的一个常见问题——不同随机噪声经过扩散模型的去噪后，往往收敛到相似的轨迹。比如让模型生成 10 条不同轨迹做候选，结果 10 条都差不多。这会严重降低规划的多样性。\n如果这些词你都有个模糊印象了，下面读代码会顺畅很多。我们开始。\n为什么要讲 AlpaMayo-R1 的代码 这是「自动驾驶代码讲解」系列的第 10 篇。前面我们已经走过了 UniAD / VAD（端到端回归范式）、DiffusionDrive（扩散轨迹生成）、SparseDriveV2（稀疏检索式规划）、AutoVLA（动作 token 化 + GRPO）等。\nAlpaMayo-R1（NVIDIA，2025，arXiv:2511.00088）把这条线推到了一个新的高度。它是第一个把「结构化因果推理」和「GRPO 强化学习后训练」整合进 VLA 的开源模型。10B 参数，真车路测延迟仅 99ms，在 NAVSIM 长尾场景上规划准确率 +12%、近距离冲突率 -35%。\n更值得讲的是它的代码设计——不是把所有逻辑塞进一个大模型里，而是拆成了三个清晰独立、可插拔的组件：VLM（负责看和想）+ Expert（负责迭代去噪）+ Diffusion（负责采样调度）。这种模块化设计让它很容易被复用和扩展。\n这篇不推公式，直接顺着仓库把关键实现讲清楚。\n一句话结论：AlpaMayo-R1 = VLM（Qwen3-VL-8B 背板，自回归生成 CoC 推理链）+ Expert（轻量 2B Transformer，在 VLM 的 KV cache 上迭代去噪）+ Diffusion（Flow Matching，10 步 Euler 积分从噪声生成动作）+ 单轮动力学（把加速度/曲率解码成轨迹点）。\nAlpaMayo-R1 框架总览 这是论文中的端到端架构图：\n从上图可以看到完整的数据流：\n输入：多相机多帧图像 + 历史自车轨迹 VLM 编码：图像 → ViT 编码（支持 Triplane/Flex 压缩）→ 与文本 token 一起送入 Qwen3-VL 推理：VLM 自回归生成 CoC 推理链（慢）→ 遇到 \u0026lt;traj_future_start\u0026gt; 停止 扩散生成：Expert 模块利用 VLM 的 KV cache，配合 Flow Matching 迭代去噪 动作解码：单轮动力学把 (accel, kappa) 转成 (x, y, yaw) 轨迹点 架构总览：先看地图 在钻进任何一个文件之前，先把整条链路在脑子里画一遍。AlpaMayo-R1 的一次「决策」大致是这样走的：\n输入端：把 4 个相机 × 4 帧的图像 + 历史 1.6s 自车轨迹一起读进来。图像通过 VLM 的视觉编码器变成视觉 token，历史轨迹通过 DeltaTokenizer 编码成离散 token。 VLM 自回归生成 CoC：模型的 VLM 骨干（Qwen3-VL-8B）开始逐 token 生成——先产生一段文本推理链（CoC），比如「前方有行人横穿，因此我选择减速让行」。生成到 \u0026lt;traj_future_start\u0026gt; 这个特殊 token 时停止。 Expert + Diffusion 去噪：VLM 的 KV cache（包含图像特征 + CoC 文本上下文）被传给 Expert 模块。Expert 是一个轻量 Transformer（约 2B 参数），它和 Flow Matching 采样器配合，从随机噪声出发，用 10 步 Euler 积分生成动作。 动作解码：生成的 (accel, kappa) 动作通过单轮动力学积分成 (x, y, yaw) 轨迹点，完成从「推理」到「开动」的全流程。 训练分三步走（但本次开源的推理代码只包含前两步的训练后模型）：\nStage-1（动作模态注入）：让 VLM 学会输出驾驶动作 token。用标准的 next-token prediction 训练。 Stage-2（推理能力激发）：用 CoC 数据集做 SFT，让模型学会输出推理链 + 轨迹 token。 Stage-3（RL 后训练）：用 GRPO 做强化学习，同时优化推理质量 + 推理-动作一致性 + 轨迹质量。（该阶段权重未开源） 关键认知：AlpaMayo-R1 里没有一个「专门的规划器」。规划、推理、决策，全部被分配给了两个清晰分工的模块——VLM 负责「想明白为什么这么开」，Expert 负责「把它开出来」。这种解耦是它最优雅的设计。\n项目结构：先厘清边界 读任何开源代码，第一件事是搞清楚「哪些是作者自己写的核心、哪些是白嫖的外部库」。AlpaMayo-R1 的边界很清楚：\n基座（外部）：Qwen3-VL-8B（VLM 骨干，来自 HuggingFace transformers），Cosmos-Reason 微调版。 AlpaMayo-R1 自己写的核心： VLA 模型组装：怎么在 Qwen3-VL 上挂 Expert 和 Diffusion 模块（alpamayo_r1.py、base_model.py） 动作空间：怎么用单轮动力学把轨迹编成 (accel, kappa) 再解码回来（action_space/） Flow Matching：直线路径去噪采样器（diffusion/） 动作投影：Fourier 编码 + MLP 把动作映射成 token（action_in_proj.py） 推理入口和数据加载（test_inference.py、load_physical_aiavdataset.py） 用普通 Markdown 列一下仓库结构：\nalpamayo/ src/alpamayo_r1/ config.py （配置类：AlpamayoR1Config，容纳 diffusion/action_space/expert 等全部配置） helper.py （构造对话模板 + 初始化处理器） test_inference.py （端到端推理入口，从 clip_id 到轨迹，不到 60 行） load_physical_aiavdataset.py （从 Physical AI AV Dataset 加载多摄图像和自车轨迹） models/ alpamayo_r1.py （主角：AlpamayoR1，整合 VLM + Expert + Diffusion + Action Space） base_model.py （基类 ReasoningVLA + TrajectoryFusionMixin + 配置 + tokenizer） action_in_proj.py （PerWaypointActionInProjV2：Fourier 编码 + MLP 投影） token_utils.py （StopAfterEOS 停止条件 + 文本提取 + 填充替换） delta_tokenizer.py （DeltaTrajectoryTokenizer：历史/未来轨迹的离散 token 编码） action_space/ action_space.py （抽象基类 ActionSpace） unicycle_accel_curvature.py （单轮动力学：accel + kappa ↔ traj 的双向映射） discrete_action_space.py （离散轨迹 tokenizer：均匀量化 + 查表解码） diffusion/ base.py （BaseDiffusion + StepFn Protocol） flow_matching.py （FlowMatching：Euler 积分采样 + 训练数据构造） geometry/ （旋转矩阵、坐标变换工具） common/ （日志工具） 逐个用一句话说明它干嘛：\nconfig.py：把所有组件的配置统一管理。diffusion_cfg 配 Flow Matching，action_space_cfg 配单轮动力学，expert_cfg 配 Expert 结构，action_in/out_proj_cfg 配投影模块。全部用 hydra.utils.instantiate 从 dict 注入。 helper.py：构建 VLM 的对话模板——把图像和文本占位 token 拼成 [system, user, assistant] 三段式消息。同时负责初始化处理器（processor）。 test_inference.py：最简推理入口。加载数据 → 构造消息 → 调 processor → 调 model.sample_trajectories → 打印 CoC + 算 minADE。 load_physical_aiavdataset.py：按 clip_id 从 NVIDIA 的 Physical AI AV Dataset 加载一个场景。包含坐标变换（世界系→自车 t0 局部系）。 alpamayo_r1.py：主角文件。定义 AlpamayoR1 类——继承 ReasoningVLA，挂接 Expert、ActionSpace、Diffusion、action_in/out_proj。核心方法是 sample_trajectories_from_data_with_vlm_rollout，包含 VLM 自回归生成 + Expert 扩散去噪的全流程。 base_model.py：基类 ReasoningVLA。负责 VLM 加载、tokenizer 初始化（加入轨迹特殊 token）、权重注册（AutoConfig.register + AutoModel.register 让模型可从 HuggingFace 一键加载）。 action_in_proj.py：FourierEncoderV2 + MLPEncoder 做动作投影。输入是噪动作 (accel, kappa) + 时间步 t，输出是 Expert 能理解的 embedding。 token_utils.py：StopAfterEOS（遇到 \u0026lt;traj_future_start\u0026gt; 停止生成）+ extract_text_tokens（从输出 token 中提取 CoC 文本）+ replace_padding_after_eos（清理填充）。 delta_tokenizer.py：把轨迹 (x,y,yaw) 编码成离散 token——对 Δxyz 做均匀量化（num_bins=1000），支持往返编码/解码。 unicycle_accel_curvature.py：ActionSpace 的具体实现。traj_to_action（轨迹 → 加速度+曲率，训练用）和 action_to_traj（accel+kappa → 轨迹点，推理用）的双向映射。核心运动学方程基于单轮车模型。 discrete_action_space.py：DiscreteTrajectoryTokenizer，用均匀量化把连续动作变成离散 token，供 VLM 做 next-token prediction。 flow_matching.py：Flow Matching 采样器。推理用 Euler 积分（x = x + dt × v），训练用 construct_training_data 构造加噪样本 + compute_loss_from_pred 算 MSE。 geometry/ 和 common/：辅助工具——旋转矩阵、角度化简、日志分层。 边界提醒：下面所有代码都是简化后的示意伪代码，用来讲清楚思路，不是逐字符照抄仓库。真实代码会有更多工程细节，但主干逻辑就是这些。代码块里我用纯英文（变量名、符号），中文解释都放在块外。\n一、推理入口：不到 60 行跑通全流程 1.1 test_inference.py：从 clip_id 到轨迹 AlpaMayo-R1 的推理入口简单到令人惊讶——全部逻辑只有约 50 行有效代码：\nclip_id = \u0026#34;030c760c-ae38-49aa-9ad8-f5650a545d26\u0026#34; data = load_physical_aiavdataset(clip_id, t0_us=5_100_000) messages = helper.create_message(data[\u0026#34;image_frames\u0026#34;].flatten(0, 1)) model = AlpamayoR1.from_pretrained(\u0026#34;nvidia/Alpamayo-R1-10B\u0026#34;, dtype=torch.bfloat16).to(\u0026#34;cuda\u0026#34;) processor = helper.get_processor(model.tokenizer) inputs = processor.apply_chat_template(messages, tokenize=True, ...) model_inputs = { \u0026#34;tokenized_data\u0026#34;: inputs, \u0026#34;ego_history_xyz\u0026#34;: data[\u0026#34;ego_history_xyz\u0026#34;], \u0026#34;ego_history_rot\u0026#34;: data[\u0026#34;ego_history_rot\u0026#34;], } with torch.autocast(\u0026#34;cuda\u0026#34;, dtype=torch.bfloat16): pred_xyz, pred_rot, extra = model.sample_trajectories_from_data_with_vlm_rollout( data=model_inputs, top_p=0.98, temperature=0.6, num_traj_samples=1, max_generation_length=256, return_extra=True, ) print(\u0026#34;CoC:\\n\u0026#34;, extra[\u0026#34;cot\u0026#34;][0]) min_ade = eval_minADE(pred_xyz, data[\u0026#34;ego_future_xyz\u0026#34;]) print(\u0026#34;minADE:\u0026#34;, min_ade, \u0026#34;meters\u0026#34;) 逐行说人话：\nclip_id：指定要加载的数据片段 ID，从 vla_golden.parquet 这类索引文件里可以查到。 load_physical_aiavdataset(clip_id, t0_us=5_100_000)：加载这个片段在 第 5.1 秒 的那一帧。历史 16 帧（1.6s 历史）和未来 64 帧（6.4s 预测）都以这一帧为锚点。为什么是 5.1 秒？因为片段的前几秒通常是车辆静止/起步阶段，5.1s 后才有丰富的驾驶行为。 helper.create_message(data[\u0026quot;image_frames\u0026quot;])：把 4 个相机 × 4 帧的图像拼成一个对话模板——告诉模型「你是驾驶助手，请根据场景输出推理和轨迹」。 AlpamayoR1.from_pretrained(\u0026quot;nvidia/Alpamayo-R1-10B\u0026quot;)：从 HuggingFace 一键加载 22GB 的模型权重。能这么直接用，是因为代码里把自定义模型注册进了 transformers 的 AutoModel 体系（AutoConfig.register + AutoModel.register）。 processor.apply_chat_template：把对话模板转成模型能吃的 token 张量——图像变成 ViT patch embedding，文本变成 token ID。 sample_trajectories_from_data_with_vlm_rollout：核心推理方法。先让 VLM 自回归生成 CoC 推理链，再用 Expert + Diffusion 去噪生成轨迹。 extra[\u0026quot;cot\u0026quot;]：模型输出的 CoC 推理链文本——不是人类标注的，是模型自己生成的。 minADE：最小平均位移误差——衡量生成的轨迹里最好那条和真值轨迹有多接近。 参数 作用 典型值 t0_us 采样锚点时刻（微秒） 5.1M µs（第 5.1 秒） num_traj_samples 每个场景采样多少条轨迹 1（推理用，调高可看多样性） max_generation_length VLM 最多生成多少 token 256 top_p / temperature 文本生成的随机性控制 0.98 / 0.6 1.2 数据加载：世界坐标系→自车坐标系 load_physical_aiavdataset.py 的核心工作不是「读取数据」，而是坐标系变换。它把车在世界坐标系中的位置，变换到「以当前时刻自车为原点」的局部坐标系：\n# 核心：世界系 → 自车 t0 局部系 t0_xyz = ego_history_xyz[-1] # t0 时刻世界坐标 t0_rot = spt.Rotation.from_quat(ego_history_quat[-1]) # t0 时刻朝向 t0_rot_inv = t0_rot.inv() # 历史轨迹：平移 + 旋转 ego_history_xyz_local = t0_rot_inv.apply(ego_history_xyz - t0_xyz) # 未来轨迹：平移 + 旋转 ego_future_xyz_local = t0_rot_inv.apply(ego_future_xyz - t0_xyz) 为什么一定要转到自车局部坐标系？ 想象一下，如果保持世界坐标系，同一个「左转弯」动作，在十字路口 A 和十字路口 B 对应的 (x,y) 数值完全不同。模型必须额外学一个「当前位置在哪」的隐式编码。而在自车局部坐标系里，所有「左转弯」的轨迹都大致是「x 正方向 + y 正方向」，大大简化了学习难度。\n数据加载的输出：\n张量 形状 含义 image_frames (4, 4, 3, H, W) 4 个相机 × 4 帧（t-0.3s ~ t0） ego_history_xyz (1, 1, 16, 3) 历史轨迹 1.6s @10Hz，局部坐标 ego_future_xyz (1, 1, 64, 3) 未来轨迹 6.4s @10Hz，局部坐标 ego_history_rot (1, 1, 16, 3, 3) 历史朝向（旋转矩阵） camera_indices (4,) 相机索引 [0,1,2,6] 按固定排序 4 个相机按固定顺序排列：[cross_left, front_wide, cross_right, front_tele]。这保证了模型每次看到的数据顺序一致，不需要额外处理。\n1.3 helper.py：消息模板构造 def create_message(frames): num_traj_token = 48 # 历史轨迹占位符数量 hist_traj_placeholder = ( f\u0026#34;\u0026lt;|traj_history_start|\u0026gt;{\u0026#39;\u0026lt;|traj_history|\u0026gt;\u0026#39; * num_traj_token}\u0026lt;|traj_history_end|\u0026gt;\u0026#34; ) return [ {\u0026#34;role\u0026#34;: \u0026#34;system\u0026#34;, \u0026#34;content\u0026#34;: [ {\u0026#34;type\u0026#34;: \u0026#34;text\u0026#34;, \u0026#34;text\u0026#34;: \u0026#34;You are a driving assistant that generates safe and accurate actions.\u0026#34;} ]}, {\u0026#34;role\u0026#34;: \u0026#34;user\u0026#34;, \u0026#34;content\u0026#34;: [ {\u0026#34;type\u0026#34;: \u0026#34;image\u0026#34;, \u0026#34;image\u0026#34;: frame} for frame in frames # 16 张图（4cam×4帧） ] + [ {\u0026#34;type\u0026#34;: \u0026#34;text\u0026#34;, \u0026#34;text\u0026#34;: f\u0026#34;{hist_traj_placeholder} output the chain-of-thought reasoning, then output the future trajectory.\u0026#34;} ]}, {\u0026#34;role\u0026#34;: \u0026#34;assistant\u0026#34;, \u0026#34;content\u0026#34;: [ {\u0026#34;type\u0026#34;: \u0026#34;text\u0026#34;, \u0026#34;text\u0026#34;: \u0026#34;\u0026lt;|cot_start|\u0026gt;\u0026#34;} # 预告：推理从这里开始 ]}, ] 说人话：\n模板就是三段对话：system 告诉模型「你是司机」、user 给模型看图 + 放历史轨迹占位符 + 让模型输出推理和轨迹、assistant 用一个 \u0026lt;cot_start\u0026gt; token 预告「推理即将开始」。 那 48 个 \u0026lt;traj_history\u0026gt; 占位符后面会被 fuse_traj_tokens() 替换为真实的历史轨迹 token。为什么是 48 个？因为历史轨迹 16 个点 × 3 维（Δx, Δy, Δyaw）= 48 个离散 token。 图像有 16 张（4 相机 × 4 帧），每张都被 VLM 的视觉编码器压缩成 patch token。 processor 要做的事就是把这些「对话模板」（里面有文字、有图像）转成模型能吃的 token 张量。这一步由 HuggingFace 的 AutoProcessor 完成——它把图像 resize 成固定大小、切成 patch、投影成 token embedding，最后和文本 token 拼成一个长序列。\n二、核心模型：VLM + Expert + Diffusion 三组件 2.1 模型初始化：三组件组装 alpamayo_r1.py 里定义的 AlpamayoR1 类，其 __init__ 做的就是组装三组件：\nclass AlpamayoR1(ReasoningVLA): def __init__(self, config, pretrained_modules=None, original_vocab_size=None): super().__init__(config, ...) # 加载 VLM 骨干 + tokenizer # 组件1：Expert——轻量 Transformer，只处理动作 token expert_config = copy.deepcopy(self.vlm.config.text_config) self.expert = AutoModel.from_config(expert_config) del self.expert.embed_tokens # Expert 不自己做 embedding # 组件2：Action Space——单轮动力学 (accel, kappa) self.action_space = hyu.instantiate(config.action_space_cfg) # 组件3：Diffusion——Flow Matching 采样器 self.diffusion = hyu.instantiate(config.diffusion_cfg, x_dims=self.action_space.get_action_space_dims()) # 动作投影模块 self.action_in_proj = hyu.instantiate(config.action_in_proj_cfg, ...) self.action_out_proj = hyu.instantiate(config.action_out_proj_cfg, ...) 三个组件各自的职责：\n组件 用什么实现的 输入 输出 参数量 管什么 VLM（骨干） Qwen3VLForConditionalGeneration 图像 + 文本 CoC 文本 + KV cache ~8B 理解场景、生成推理 Expert（动作专家） AutoModel.from_config(text_config) 动作 token embedding + KV cache 预测的速度场 v ~2B 迭代去噪、精修轨迹 Diffusion（采样器） FlowMatching 随机噪声 + step_fn 去噪后的动作 0（无参数） 调度去噪步数 Expert 为什么可以独立出来？ 这是 AlpaMayo-R1 最巧妙的设计。Expert 直接从 VLM 的 text_config 实例化——它的结构和你 Qwen3-VL 里那个语言模型一模一样，但它不要自己的 embedding 层（删掉了 embed_tokens），因为它的输入不是文字 ID，而是 action_in_proj 投影好的向量。这就意味着 Expert 可以「听懂」VLM 的上下文（通过 KV cache）——VLM 说「前面有行人，应该减速」，Expert 在这个语义背景下做去噪，生成符合这个推理的动作。\n2.2 参数总量 整个模型 10B 参数，分布：\nVLM 骨干（Qwen3-VL-8B）：约 8B 参数，负责视觉编码 + 文本生成 Expert（轻量 Transformer）：约 2B 参数，负责动作去噪 可训练的参数只有 62.8M（指 SFT 阶段），因为 VLM 骨干也参与了训练。在推理阶段，全部 10B 参数都被使用。\n2.3 推理采样：两阶段流水线 sample_trajectories_from_data_with_vlm_rollout 是整个推理管线的灵魂。它把整个过程分为清晰的两个阶段：\ndef sample_trajectories_from_data_with_vlm_rollout(self, data, ...): # ========== 阶段1：VLM 自回归生成 CoC 推理链 ========== input_ids = data[\u0026#34;tokenized_data\u0026#34;][\u0026#34;input_ids\u0026#34;] traj_data_vlm = {\u0026#34;ego_history_xyz\u0026#34;: ..., \u0026#34;ego_history_rot\u0026#34;: ...} input_ids = self.fuse_traj_tokens(input_ids, traj_data_vlm) # 历史轨迹→token vlm_outputs = self.vlm.generate( input_ids=input_ids, generation_config={\u0026#34;top_p\u0026#34;: 0.98, \u0026#34;temperature\u0026#34;: 0.6, ...}, stopping_criteria=StopAfterEOS(eos_token_id=traj_future_start_id), logits_processor=ExpertLogitsProcessor(...), # 屏蔽离散轨迹 token！ ) # 此时 vlm_outputs 包含：CoC 文本 + KV cache # ========== 阶段2：Expert + Diffusion 去噪生成轨迹 ========== def step_fn(x, t): # 把噪声动作投影成 Expert 能吃的 embedding future_token_embeds = self.action_in_proj(x, t) # Expert 在 VLM 的 KV cache 上做前向 expert_out = self.expert( inputs_embeds=future_token_embeds, past_key_values=prompt_cache, # 复用 VLM 的 KV cache ... ) last_hidden = expert_out.last_hidden_state[:, -n_diffusion_tokens:] pred = self.action_out_proj(last_hidden) return pred # 预测的速度场 v sampled_action = self.diffusion.sample( batch_size=total_batch, step_fn=step_fn, ... ) # 解码：动作 → 轨迹 pred_xyz, pred_rot = self.action_space.action_to_traj(sampled_action, ...) return pred_xyz, pred_rot 阶段1——VLM 自回归生成，详细来看每一小步：\nfuse_traj_tokens：把输入 token 序列里那 48 个 \u0026lt;traj_history\u0026gt; 占位符替换成真的历史轨迹 token——这些是 DeltaTrajectoryTokenizer 把历史轨迹 (x,y,yaw) 编码成的一串离散编号。 vlm.generate(...)：标准的 HuggingFace 自回归生成。模型看图 + 看历史轨迹 → 逐 token 输出 CoC 推理链。 ExpertLogitsProcessor：一个非常重要的细节——它把离散轨迹 token（\u0026lt;i0\u0026gt; ~ \u0026lt;i767\u0026gt;）的 logit 全部 mask 成 -inf。这意味着 VLM 在生成时只能生成文本 token，不能生成轨迹 token。轨迹 token 留给 Expert 去处理。这是「VLM 管推理、Expert 管动作」分工的结构保障。 StopAfterEOS：遇到 \u0026lt;traj_future_start\u0026gt; 这个特殊 token 就停止生成。这个 token 是「推理完成，接下来该生成轨迹了」的信号。 生成完成后，VLM 的 past_key_values（KV cache）——里面包含了图像 token、CoC 文本 token 的注意力键值——被直接传给 Expert。 ExpertLogitsProcessor 的设计意图：离散轨迹 token（\u0026lt;i0\u0026gt; ~ \u0026lt;i767\u0026gt;）的 logit 被 mask 为 -inf，强制 VLM 只生成文本 token。这保证了 CoC 推理链是纯文本，不与轨迹 token 混淆。推理链和轨迹生成完全解耦，但通过 KV cache 共享上下文——KV cache 共享正是「推理链约束轨迹生成」的实现机制。Expert 做去噪时，它的注意力可以「看到」VLM 生成的 CoC 文本，从而让推理内容直接影响轨迹生成。\n阶段2——Expert + Diffusion 去噪，每一小步：\naction_in_proj(x, t)：把当前噪声动作 x（形状 [B, 64, 2]，64 个 waypoint × (accel, kappa)）和时间步 t 投影成 Expert 的 hidden_size 维 embedding。方法是用 Fourier 编码 + MLP（下一节详细讲）。 self.expert(inputs_embeds=future_token_embeds, past_key_values=prompt_cache)：Expert 在 VLM 的 KV cache 上做前向。Expert 的输入不是 token ID，而是 action_in_proj 输出的向量。它的作用是「在当前场景上下文下，预测这个噪声动作需要往哪个方向修正」。 self.action_out_proj(last_hidden)：Expert 最后一层的隐藏状态投影回动作维度 (64, 2)，得到预测的速度场 v。 self.diffusion.sample(...)：Flow Matching 的 Euler 积分。从随机噪声出发，step_fn 每步给出速度场 v，x = x + dt × v，10 步后得到干净的动作。 self.action_space.action_to_traj(...)：把 (accel, kappa) 解码成 (x, y, yaw) 轨迹点。 为什么 VLM 和 Expert 要分工？为什么不直接让 VLM 自己生成轨迹？ 因为 VLM 是自回归的——逐 token 生成，每个 token 依赖之前所有的 token。这对文本没问题（文本就是逐字生成的），但对轨迹来说太慢且不够灵活。Expert 的并行去噪可以在 10 步内同时处理 64 个 waypoint，而且可以通过多步迭代逐步精修，比一步到位的自回归更稳定。\n2.4 TrajectoryFusionMixin：历史轨迹注入 在 base_model.py 里定义了一个混入类 TrajectoryFusionMixin，核心方法就是 fuse_traj_tokens：\ndef fuse_traj_tokens(self, input_ids, traj_data): if traj_data is None: return input_ids # 把历史轨迹 (xyz, rot) 编码为离散 token hist_idx = tokenize_history_trajectory( self.hist_traj_tokenizer, traj_data, self.hist_token_start_idx ) # 替换占位符 input_ids = replace_pad_token( input_ids, hist_idx, self.config.traj_token_ids[\u0026#34;history\u0026#34;] ) return input_ids 说人话：VLM 看到的 token 序列里，本来有 48 个 \u0026lt;traj_history\u0026gt; 占位符。现在把它们替换成真正的轨迹 token。HistTrajectoryTokenizer 用 DeltaTrajectoryTokenizer 把历史 16 帧的 (x,y,yaw) 编码为 48 个离散 token（每帧 3 个 Δ 量）。这样 VLM 在生成推理时，就能看到「这辆车过去 1.6s 是怎么开的」。\n2.5 模型注册：一键加载的魔法 为什么能 AlpamayoR1.from_pretrained(\u0026quot;nvidia/Alpamayo-R1-10B\u0026quot;)？因为代码在文件末尾做了注册：\nclass AlpamayoR1(ReasoningVLA): config_class = AlpamayoR1Config AutoConfig.register(\u0026#34;alpamayo_r1\u0026#34;, AlpamayoR1Config) AutoModel.register(AlpamayoR1Config, AlpamayoR1) 这两行代码把自定义的模型类和配置类注册进了 HuggingFace transformers 的 AutoModel 体系。从此 transformers 就知道：当你看到 \u0026quot;nvidia/Alpamayo-R1-10B\u0026quot; 这个模型名，它的 config 是 AlpamayoR1Config，模型结构是 AlpamayoR1。这是那 22GB 权重能一键加载的技术基础。\n2.6 配置系统：Hydra 注入与可插拔设计 所有组件都是可插拔的，通过 Hydra + config dict 注入。AlpamayoR1Config 统一管理全部子模块的配置：\nclass AlpamayoR1Config(ReasoningVLAConfig): def __init__(self, diffusion_cfg=None, # → hyu.instantiate 创建 FlowMatching action_space_cfg=None, # → hyu.instantiate 创建 UnicycleAccelCurvatureActionSpace action_in_proj_cfg=None, # → hyu.instantiate 创建 PerWaypointActionInProjV2 action_out_proj_cfg=None, # → nn.Linear expert_cfg=None, # → 覆盖 text_config 属性 expert_non_causal_attention=True, keep_same_dtype=True, ...): 每个 _cfg 参数都是一个 dict，用 hydra.utils.instantiate 从 dict 创建具体对象。一个典型的 YAML 配置片段：\naction_space_cfg: _target_: \u0026#34;alpamayo_r1.action_space.UnicycleAccelCurvatureActionSpace\u0026#34; accel_mean: 0.0 accel_std: 1.0 curvature_mean: 0.0 curvature_std: 1.0 dt: 0.1 n_waypoints: 64 配置键 实例化目标 作用 diffusion_cfg FlowMatching 采样器（步数、x_dims） action_space_cfg UnicycleAccelCurvatureActionSpace 动作空间（dt、标准化参数） action_in_proj_cfg PerWaypointActionInProjV2 动作投影（hidden_size、Fourier 维度） action_out_proj_cfg nn.Linear 反向投影（输出维度） expert_cfg 覆盖 text_config Expert 结构（层数、head 数） 这意味替换任意组件不需要改模型代码——换 Diffusion 采样器只需改 YAML 里 _target_ 路径，换动作空间只需替换 action_space_cfg 的配置块。这种设计是后续 SFT 和 RL 训练复用的基础，也是「三组件」能独立演进的结构保障。\n三、动作空间：为什么用加速度和曲率 3.1 动作空间 vs 轨迹空间 AlpaMayo-R1 的模型不直接输出轨迹点 (x,y)，而是输出一对控制量 (accel, kappa)——即加速度和曲率。然后通过单轮动力学模型积分出轨迹。\n表示方式 模型输出 优点 缺点 原始 waypoint (x, y) 直接回归坐标 直观 对噪声敏感、轨迹可能不物理 加速度+曲率 (accel, kappa) 控制量 物理合理、平滑、数值稳定 需要额外解码步骤 航向角+速度 (θ, v) 控制量 直观 积分漂移问题 UnicycleAccelCurvatureActionSpace 实现了这个双向映射。我们先看它的核心——正向和反向两个方向。\n3.2 正向：动作→轨迹（推理用） 推理时，模型预测出 (accel, kappa)，需要转成 (x, y, θ) 才能用：\ndef action_to_traj(self, action, traj_history_xyz, traj_history_rot, t0_states=None): accel, kappa = action[..., 0], action[..., 1] # Step 1：反标准化（模型输出是标准化后的，需要转回物理值） accel = accel * accel_std + accel_mean # 范围 ≈ [-9.8, +9.8] m/s² kappa = kappa * kappa_std + kappa_mean # 范围 ≈ [-0.2, +0.2] m⁻¹ # Step 2：从历史状态估计 t0 时刻速度 if t0_states is None: t0_states = self.estimate_t0_states(traj_history_xyz, traj_history_rot) v0 = t0_states[\u0026#34;v\u0026#34;] # t0 时刻的初速度 # Step 3：单轮动力学积分（核心） dt = 0.1 # 时间步长 0.1s velocity = v0 + cumsum(accel * dt) # v(t) = v0 + ∫a·dt theta = cumsum(kappa * velocity * dt) # θ(t) = ∫κ·v·dt x = cumsum(velocity * cos(θ) * dt) # x(t) = ∫v·cos(θ)·dt y = cumsum(velocity * sin(θ) * dt) # y(t) = ∫v·sin(θ)·dt return traj_future_xyz, traj_future_rot 说人话——这条积分链在干什么：\nv(t) = v0 + ∫a·dt：速度 = 初速度 + 加速度的累加。踩油门（a \u0026gt; 0）速度增加，踩刹车（a \u0026lt; 0）速度减小。 θ(t) = ∫κ·v·dt：朝向角 = 曲率 × 速度的累加。曲率 κ 表示「方向盘的转动程度」——κ 大意味着急转弯，κ 小意味着直行。 (x,y) = ∫v·cos(θ)·dt, ∫v·sin(θ)·dt：位置 = 速度在 x/y 方向上的投影积分。车头的方向（θ）决定了速度是往左还是往右。 这三个方程组就是经典的单轮车运动学模型。它的假设是：车辆像一辆自行车，后轮驱动前轮转向。虽然简单，但对 6.4s 的规划来说是够用的。\n3.3 反向：轨迹→动作（训练用） 训练时，我们有真值轨迹 (x,y,θ)，需要转成 (accel, kappa) 做监督信号：\ndef traj_to_action(self, traj_history_xyz, traj_history_rot, traj_future_xyz, traj_future_rot): full_xy = concat(history_xyz[-1:], future_xyz) # 拼起来 dxy = diff(full_xy, dim=-2) # 位置差分→速度 theta = theta_smooth(future_rot, ...) # 平滑化航向角 v = dxy_theta_to_v(dxy, theta, v0, ...) # 从位置差分估计速度 accel = finite_diff(v) # 速度差分→加速度 kappa = dtheta / (v * dt) # 航向变化率→曲率 return normalize(accel, kappa) # 标准化到 0 均值 1 方差 说人话：训练时，我们有「人类司机怎么开」的真值轨迹，我们要反过来求出对应的 (accel, kappa)，作为模型需要学习的目标。这个反算使用了正则化最小二乘（solve_xs_eq_y，即解一个带正则化的线性方程组 Ax = y），来保证求出的速度是平滑合理的。\n3.4 输入标准化 UnicycleAccelCurvatureActionSpace 有一个非常重要的设计：模型的输入输出都是标准化的（均值 0，方差 1）。\naccel = (accel - accel_mean) / accel_std # 标准化 kappa = (kappa - kappa_mean) / kappa_std # 标准化 这意味着：\n模型预测的 accel/kappa 范围大约在 [-3, +3] 之间（而不是物理值 ±9.8 和 ±0.2） 进入 action_to_traj 时，要先反标准化（乘 std 加 mean）才能得到物理值 进入 traj_to_action 时，先算物理值，再标准化后才作为模型的学习目标 为什么要标准化？因为神经网络的激活函数（比如 SiLU）在 [-3, +3] 范围之外会饱和。如果你让模型直接预测 [-9.8, +9.8] 这么大的数值，梯度信号会很差，模型几乎学不动。\n3.5 离散轨迹 Tokenizer 除了连续动作空间，AlpaMayo-R1 还有一个离散版本的 tokenizer，供 VLM 做 next-token prediction（在 Stage-1 训练中使用）：\nclass DiscreteTrajectoryTokenizer: def encode(self, hist_xyz, hist_rot, fut_xyz, fut_rot): action = self.action_space.traj_to_action(hist_xyz, hist_rot, fut_xyz, fut_rot) # 均匀量化到 num_bins=1000 个离散值 action = (action - dims_min) / (dims_max - dims_min) * (num_bins - 1) return action.round().long().reshape(batch_size, -1) def decode(self, hist_xyz, hist_rot, tokens): action = tokens.float() / (num_bins - 1) action = action * (dims_max - dims_min) + dims_min return self.action_space.action_to_traj(action, hist_xyz, hist_rot) 一条轨迹有 64 步 × 2 维 = 128 个离散 token，每一步的 accel 和 kappa 分别被量化为 0~999 之间的整数。这些离散 token 和文本 token 一起，在 VLM 的自回归生成过程中被预测（但注意推理时这些离散 token 被 ExpertLogitsProcessor mask 了，实际由 Expert 处理连续版本）。\n四、Flow Matching 扩散解码器 4.1 为什么是 Flow Matching 而不是 DDPM Flow Matching 和 DDPM 都是生成模型，但关键区别在于生成路径。\n维度 DDPM Flow Matching 生成路径 弯曲的随机微分方程 SDE 直线的常微分方程 ODE 步数需求 20~1000 步 10 步即可 采样方式 Langevin 动力学 Euler 积分（x += dt × v） 训练目标 预测噪声 ε 预测速度场 v Flow Matching 的「直线路径」意味着：从纯噪声到干净数据的路径是一条直线，你只要沿着斜率（速度场 v）走固定步数就能到达。DDPM 的路径是弯曲的，每一步的噪声分布在变化，需要更小的步长。\n4.2 FlowMatching 采样 class FlowMatching(BaseDiffusion): def sample(self, batch_size, step_fn, device, inference_step=10): # 起点：高斯噪声 x = torch.randn(batch_size, *self.x_dims, device=device) # 时间步：0 → 1 的线性插值 time_steps = torch.linspace(0.0, 1.0, inference_step + 1, device=device) for i in range(inference_step): dt = time_steps[i+1] - time_steps[i] # 步长 v = step_fn(x=x, t=time_steps[i]) # 模型预测速度场 x = x + dt * v # Euler 积分 return x # 去噪后的动作 (accel, kappa) 步数 inference_step=10 ——注意这里 10 不是训练 epoch 数，而是一条轨迹的生成步数。10 步从噪声到数据，比 DDPM 的几百步快了数十倍。\n4.3 训练数据构造 训练时，Flow Matching 的损失是这样构造的：\ndef construct_training_data(self, x): # Beta 分布采样时间步（偏重于高噪声端） t = self.beta_dist.sample((batch_size,)) # Beta(1.5, 1.0) t = self.beta_scale_constant - t * self.beta_scale_constant noise = torch.randn_like(x) noisy_x = t * x + (1 - t) * noise # 线性插值：t=0→纯噪声，t=1→干净数据 return {\u0026#34;noisy_x\u0026#34;: noisy_x, \u0026#34;timesteps\u0026#34;: t, \u0026#34;noise\u0026#34;: noise, \u0026#34;x\u0026#34;: x} def compute_loss_from_pred(self, training_data, pred): x = training_data[\u0026#34;x\u0026#34;] noise = training_data[\u0026#34;noise\u0026#34;] target = x - noise # 速度场方向 = 数据 - 噪声 return F.mse_loss(target, pred) 说人话：\nnoisy_x = t * x + (1-t) * noise：这是 Flow Matching 的核心——不像 DDPM 那样逐步加噪，而是直接做线性插值。t 接近 0 时，noisy_x ≈ 纯噪声；t 接近 1 时，noisy_x ≈ 干净数据。 target = x - noise：速度场的方向就是从噪声指向数据的向量。模型要学的是这个方向。 Beta(1.5, 1.0) 时间步采样：偏重于 t 接近 1 的区域（即更靠近干净数据的那一侧），让模型更关注「精修」阶段的预测。 五、动作投影模块：Fourier 编码 + MLP 5.1 PerWaypointActionInProjV2 action_in_proj.py 实现的 PerWaypointActionInProjV2 模块，负责把「当前噪声动作 (accel, kappa) + 时间步 t」映射成 Expert 能理解的 embedding：\nclass PerWaypointActionInProjV2(nn.Module): def __init__(self, in_dims, out_dim, ...): # 2 个 Fourier 编码器，分别对 accel 和 kappa 编码 self.sinus = nn.ModuleList([ FourierEncoderV2(dim=20, max_freq=100.0) for _ in range(2) ]) self.timestep_fourier_encoder = FourierEncoderV2(dim=20, max_freq=100.0) self.encoder = MLPEncoder(num_input_feats=..., out_dim=out_dim) def forward(self, x, timesteps): # 对 accel 和 kappa 分别做 Fourier 编码 accel_feat = self.sinus[0](x[:, :, 0]) # accel → 20 维高频信号 kappa_feat = self.sinus[1](x[:, :, 1]) # kappa → 20 维高频信号 # 时间步也做 Fourier 编码 t_feat = self.timestep_fourier_encoder(timesteps) # 拼接 + MLP + LayerNorm x = torch.cat([accel_feat, kappa_feat, t_feat], dim=-1) # ~60 维 return self.norm(self.encoder(x)) # → Expert hidden_size 5.2 FourierEncoderV2 的原理 class FourierEncoderV2(nn.Module): def __init__(self, dim, max_freq=100.0): half = dim // 2 # 对数间隔的频率：ω = [10^0, 10^0.2, ..., 10^log10(max_freq)] freqs = torch.logspace(0, math.log10(max_freq), steps=half) self.freqs = freqs[None, :] def forward(self, x): arg = x[..., None] * self.freqs * 2 * torch.pi # 输出 = [sin(ω₁x), ..., sin(ω_half x), cos(ω₁x), ..., cos(ω_half x)] return torch.cat([torch.sin(arg), torch.cos(arg)], -1) * math.sqrt(2) 为什么需要 Fourier 编码？ 直觉上，神经网络很难区分 x=0.45 和 x=0.46 这种微小差异——在 32 位浮点数里，这两个数只差不到 0.1%。但如果用 Fourier 编码，0.45 和 0.46 在 100Hz 频率上的响应（sin(100×0.45×2π) vs sin(100×0.46×2π)）会产生显著不同的数值。这相当于给了网络一把「显微镜」，让它可以感知到连续数值的细微变化。这个技巧在 NeRF（神经辐射场）中第一次被广泛使用。\n5.3 反向投影 action_out_proj 就更简单了——就是一个 nn.Linear：\nself.action_out_proj = nn.Linear(expert_config.hidden_size, 2) # 输入：Expert 最后一层隐藏状态 (B, 64, hidden_size) # 输出：速度场 v (B, 64, 2) 即每个 waypoint 的 (Δaccel, Δkappa) 六、Token 工具函数 token_utils.py 里提供了几个关键工具，虽然代码很少但很重要：\n6.1 StopAfterEOS class StopAfterEOS(StoppingCriteria): def __init__(self, eos_token_id): self.eos_token_id = eos_token_id self.eos_found = None def __call__(self, input_ids, scores, **kwargs): batch_size = input_ids.shape[0] if self.eos_found is None: self.eos_found = torch.zeros(batch_size, dtype=torch.bool, device=input_ids.device) if self.eos_found.all(): return True # 全部生成完了 last_tokens = input_ids[:, -1] current_has_eos = last_tokens == self.eos_token_id self.eos_found = self.eos_found | current_has_eos return False # 还要继续 这个停止条件的特殊之处在于：它不是在遇到 EOS token 时就停止，而是在遇到后多生成一个 token 再停。因为 VLM 的 KV cache 是在生成下一个 token 后才更新的，如果遇到 EOS 立刻停，KV cache 里就没有包含 EOS token 自身的信息。\n6.2 ExpertLogitsProcessor class ExpertLogitsProcessor(LogitsProcessor): def __init__(self, traj_token_offset, traj_vocab_size): self.traj_token_offset = traj_token_offset self.traj_vocab_size = traj_vocab_size def __call__(self, input_ids, scores): # 把离散轨迹 token 的 logit 设为 -inf scores[:, self.traj_token_offset:self.traj_token_offset + self.traj_vocab_size] = float(\u0026#34;-inf\u0026#34;) return scores 这个 processor 在 VLM 自回归时，把编号 \u0026lt;i0\u0026gt; ~ \u0026lt;i767\u0026gt; 对应的 logit 全部设成 -inf，让 VLM 「不会输出」这些离散轨迹 token。VLM 只能输出文本 token。那些被 mask 掉的轨迹 token 留给 Expert 模块去处理——这是分工的结构保障。\n6.3 extract_text_tokens def extract_text_tokens(tokenizer, output_tokens): decoded_batch = tokenizer.batch_decode(output_tokens, skip_special_tokens=False) extracted_text = {} for token in [\u0026#34;cot\u0026#34;, \u0026#34;meta_action\u0026#34;, \u0026#34;answer\u0026#34;]: extracted_text[token] = extract_between_special_tokens(decoded_batch, token) return extracted_text 从 VLM 的完整输出中，提取 \u0026lt;cot_start\u0026gt;...\u0026lt;cot_end\u0026gt; 之间的 CoC 推理链文本。这些文本就是模型「认为」自己为什么这么开车的理由。\n七、把整条链路串起来 到这里所有零件都讲完了，我们把一次完整的推理用一张数据流图串起来，再钉死每个环节的关键信息。\n下面这张图追踪从用户输入到轨迹输出的每一个步骤——它不包含新信息，但能帮你把前面六节的内容在脑子里串成一条完整的线：\n用户输入: clip_id + t0_us[5.1s] | v load_physical_aiavdataset() |-- 加载 4 相机 x 4 帧图像 -\u0026gt; image_frames (4,4,3,H,W) |-- 加载自车历史轨迹 (1.6s) -\u0026gt; ego_history_xyz (1,1,16,3) |-- 加载自车未来轨迹 (6.4s) -\u0026gt; ego_future_xyz (1,1,64,3) +-- 坐标变换: 世界系 -\u0026gt; 自车 t0 局部系 | v helper.create_message() +-- 构造 [system, user, assistant] 对话模板 | v processor.apply_chat_template() +-- 图像 -\u0026gt; ViT patch embedding; 文本 -\u0026gt; token ID | v AlpamayoR1.sample_trajectories_from_data_with_vlm_rollout() | |-- Stage 1: VLM 自回归生成 | |-- fuse_traj_tokens(): 历史轨迹 -\u0026gt; 离散 token -\u0026gt; 替换 placeholder | |-- vlm.generate() with ExpertLogitsProcessor | | |-- 图像 token + 历史轨迹 token + 文本 prompt | | |-- -\u0026gt; 自回归生成 CoC 推理链文本 | | |-- -\u0026gt; 遇到 \u0026lt;|traj_future_start|\u0026gt; 停止 | | +-- -\u0026gt; 得到: 推理链文本 + KV cache (含图像\u0026amp;文本上下文) | | | +-- 构建 Expert 输入 | |-- position_ids 对齐 (去除填充, 加上 rope_delta) | +-- attention_mask 只关注 KV cache 的有效部分 | +-- Stage 2: Expert + Diffusion 去噪 |-- init: x = randn(B, 64, 2) # 高斯噪声 (accel, kappa) | +-- for t in [0.0, 0.1, ..., 1.0] x 10 steps: |-- action_in_proj(x, t) | |-- Fourier 编码 (accel_i, kappa_i, t) | +-- MLP -\u0026gt; Expert hidden_size |-- expert(inputs_embeds, past_key_values=KV_cache) | +-- Expert 在 VLM 上下文上做前向 -\u0026gt; 预测速度场 v |-- action_out_proj(last_hidden) # hidden -\u0026gt; (accel, kappa) +-- x = x + dt * v # Euler 积分 | v sampled_action (accel, kappa) -\u0026gt; (64, 2) | v action_space.action_to_traj() |-- 反标准化: normed_accel -\u0026gt; 物理 accel (+-9.8) |-- 单轮动力学积分: (accel, kappa) -\u0026gt; (x, y, yaw) +-- 输出: pred_xyz (64,3) + pred_rot (64,3,3) | v 额外输出: extra[\u0026#34;cot\u0026#34;] = CoC 推理链文本 用一张对照表钉死每个环节的关键信息：\n环节 文件 输入 输出 一句话 数据加载 load_physical_aiavdataset.py clip_id 图像+轨迹张量 加载并转到局部坐标 对话构造 helper.py 图像帧 对话模板 告诉模型「你是司机」 VLM 生成 alpamayo_r1.py token + KV cache CoC 文本 自回归吐推理链 Expert 去噪 alpamayo_r1.py 噪声动作 + KV cache 速度场 v 在 VLM 上下文上修正轨迹 Diffusion 采样 flow_matching.py 随机噪声 干净动作 10 步 Euler 积分 动作解码 unicycle_accel_curvature.py (accel, kappa) (x, y, yaw) 单轮动力学积分 投影模块 action_in_proj.py 动作+时间步 Expert embedding Fourier 编码 + MLP 和本系列其他文章的关系 AlpaMayo-R1 不是孤立的，它在端到端自动驾驶的演化线上有明确的坐标：\n对比 UniAD / VAD（端到端回归）：那两条是「网络直接回归轨迹坐标」的路线，没有大模型、没有生成式模型。AlpaMayo-R1 则引入了 10B 的 VLM 骨干和扩散生成式解码器。这是从「回归范式」到「生成式 VLA」的跨越。\n对比 DiffusionDrive（扩散轨迹生成）：DiffusionDrive 用截断 DDPM 从 anchor 出发 2 步去噪生成轨迹，依赖预定义 anchor。AlpaMayo-R1 用 Flow Matching 从纯噪声出发 10 步去噪，不依赖 anchor。且 AlpaMayo-R1 多了一个 CoC 推理链——它不只是「生成轨迹」，而是「先想明白为什么，再生成轨迹」。\n对比 AutoVLA（动作 token + GRPO）：两者都用 GRPO 做后训练，都是 VLA 架构。但核心差异在于动作表示——AutoVLA 把动作离散化成 codebook token 让 VLM 直接「说」出来；AlpaMayo-R1 把动作表示为连续的(accel, kappa)，用一个独立的 Expert 模块做扩散生成。一个走「离散 token + 统一生成」，一个走「连续动作 + 分模块生成」。这两篇是理解「VLA 动作表示」两条路线的关键对照。\n通向 pi0：AlpaMayo-R1 告诉你「推理链 + 分模块 Expert + Flow Matching」是一种可行的 VLA 架构。而 pi0 会告诉你另一种可能——用 Flow Matching 做统一的动作生成，不需要独立 Expert，也不需要推理链。两篇合起来，正好是 VLA 架构设计空间的两个极端。\n个人思考 1. AlpaMayo-R1 最让我欣赏的设计是「VLM 管推理，Expert 管动作」的解耦哲学。 这看起来只是一个工程的模块划分，但它的影响很深远：VLM 的推理链可以单独被评估和调试（它输出的是自然语言），Expert 的去噪过程也可以单独优化（调整步数、换采样器）。如果有天出现了更好的扩散采样器，换掉 flow_matching.py 就行，VLM 完全不用动。这种「不像一个大黑盒，而像三个螺丝拼接的精密仪器」的架构，才是能持续演进的系统。\n2. 单轮动力学动作表示是一个被低估的工程细节。 很多端到端规划工作直接回归 (x,y) 坐标，然后花大量精力在轨迹平滑上。AlpaMayo-R1 选择从物理模型出发——用 accel 和 kappa 做中间表示，自然地保证了轨迹的平滑性和运动学可行性。这个做法的启发是：与其在输出后加一大堆后处理让轨迹看起来平滑，不如让模型生来就在「平滑的空间」里工作。这就像写文章时用语法正确的语言写，而不是写完了再用自动纠错改一遍。\n3. KV cache 共享是「推理链约束轨迹生成」的实现基础。 推理链不是一句空话——Expert 做去噪时，它的注意力可以「看到」VLM 生成的 CoC 文本。这意味着 Expert 知道「模型刚说了要减速让行」，所以它生成的轨迹也会偏向减速。这个因果链是训练出来的（通过 GRPO 优化推理-动作一致性），但 KV cache 的共享是它的物理基础——没有这个共享，推理链和轨迹就分别活在两个孤立的模块里，所谓「因果」就只剩文本层面的装饰了。\n4. 10B 参数推理只用了 10 步扩散，这种「大模型 + 少步生成」的搭配很值得研究。 直觉是：模型越大，每步去噪的质量越高，所以需要的步数越少。AlpaMayo-R1 用 10B 骨干换来了 10 步去噪，而小模型可能需要 20 步以上才能达到同样质量。这个 trade-off（参数量 vs 推理步数）对未来模型设计有指导意义——也许「大模型 + 少步共识」比「小模型 + 多步精修」在延迟和效果上都更优。\n5. 一点反思：CoC 推理链到底「帮助」了规划多少？ 论文报告了 +12% 的规划准确率提升，但这个提升有多少来自于推理链本身、多少来自于更大的模型和更多的训练数据？如果能做一个消融实验——同样的模型架构、同样的训练数据，只是把推理链从生成序列中移除——看指标下降多少，会更令人信服。不过话说回来，从产品角度看，推理链即使对指标提升贡献有限，它提供的可解释性也足够有价值——一个能解释「为什么在这个路口减速让行」的自动驾驶系统，比一个开得更好但说不清理由的系统，在安全审计和用户信任上都有不可替代的优势。\n📖 代码讲解系列第 10 篇。本文基于 github.com/NVlabs/alpamayo commit 17 个（main 分支）的代码分析。SFT 和 RL 后训练代码在 alpamayo-recipes。\n","permalink":"https://auto-driving-blog.pages.dev/posts/code/alpamayo-r1%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"零基础逐文件拆解 NVIDIA AlpaMayo-R1 推理源码：从 VLM/Expert/Diffusion 三组件架构到单轮动力学动作空间，从 Flow Matching 去噪到 Fourier 特征编码，用伪代码 + 大白话讲清这个 10B 参数的 VLA 模型是怎么从传感器数据一路「推理」到轨迹输出的。","title":"AlpaMayo-R1 代码讲解：VLM 说推理链、Expert 雕轨迹、一个模型两套头"},{"content":"这篇论文到底在干什么？ 先给一个最直白的解释，读完这一段你就知道这篇论文在解决什么问题。\n自动驾驶的轨迹规划可以理解为：给车看它周围的环境（图像、LiDAR 点云），让它决定接下来 4 秒怎么开。目前主流的方法是「生成式规划」——用扩散模型（DDPM、Flow Matching 等）从随机噪声开始，逐步去噪生成一条轨迹。\n生成式规划的好处是多模态：同一个场景下，可能有多种合理的开法（让行、变道、缓行），扩散模型应该能覆盖这些不同的行驶模式。\n但实际中遇到一个严重问题：模式坍缩（mode collapse）。不同随机噪声输入，经过扩散模型去噪后，输出的轨迹往往差不多。就像你让一个画家画 5 幅「秋天的树林」，结果 5 幅画几乎一模一样——都是差不多的色调、差不多的构图，看不出多样性。\n上图左侧展示的就是模式坍缩：5 个不同的随机噪声 z1~z5，经过去噪解码器后，生成的 5 条轨迹几乎重叠在一起。右侧是加上去相关后的效果：5 条轨迹明显不同，有的直行、有的左转、有的右拐、有的缓行——这才是扩散模型应有的多模态能力。\nTransDiffuser 的核心洞察：模式坍缩的根源不在于扩散模型本身，而在于条件特征不够丰富。当去噪解码器的条件输入（图像特征、LiDAR 特征、BEV 特征、历史轨迹嵌入等）的各维度之间存在冗余和耦合时，条件信号的信息量被压缩，导致不同噪声输入收敛到相同输出。解法就是——强制让不同特征维度去相关，使条件信号更丰富。\n论文信息 标题：TransDiffuser: Diverse Trajectory Generation with Decorrelated Multi-modal Representation for End-to-end Autonomous Driving arXiv：2505.09315 作者：Xuefeng Jiang（中科院计算所），Yuan Ma（清华），Pengxiang Li（清华），Kun Zhan（理想汽车）等 一句话总结：用多模态表示去相关解决扩散轨迹生成中的模式坍缩，无需任何锚点/先验达到 SOTA（PDMS 94.85） 一、动机：为什么扩散轨迹生成会模式坍缩 1.1 端到端规划的三代范式 要理解 TransDiffuser 的贡献，先看端到端自动驾驶规划的三条技术路线：\n范式 工作原理 代表工作 优点 缺点 确定性回归 网络直接输出一条轨迹 Transfuser、UniAD 简单直接 只能输出一条，无法应对多模态场景 打分式 Scoring 从预定义轨迹词表中选最优 VADv2、Hydra-MDP 确定性高 依赖预定义锚点，泛化受限 生成式 Generative 扩散/流匹配采样多候选 DiffusionDrive、GoalFlow 多模态好 模式坍缩严重 生成式规划本是用来解决「多模态」问题的——同一场景下，让行、变道、缓行都是合理选择。但实际中，不同随机噪声采样出的轨迹却高度相似，失去了多模态的优势。\n1.2 现有方法怎么解决模式坍缩 方法 解决思路 手段 代价 DiffusionDrive 约束初始分布 用锚点高斯分布替代标准高斯噪声（截断扩散） 需预定义轨迹词表，引入归纳偏置 GoalFlow 约束生成路径 用目标点稠密词表限制生成范围 需预计算场景先验，对未见场景泛化难 TrajHF 后处理筛选 偏好优化 + 拒绝采样，NEES 100 条候选 推理效率低，候选量大 这些方案有一个共同点：都引入了额外的先验信息（锚点轨迹、场景先验）。虽然它们确实缓解了坍缩，但在未见过的场景中，预定义的锚点或目标点可能不适用。\n1.3 TransDiffuser 的不同视角 TransDiffuser 的出发点完全不同。它认为模式坍缩的根本原因不在于生成过程，而在于条件特征的信息瓶颈。如果把去噪解码器看作一个「画家」，那么条件特征就是给画家看的「参考照片」。当参考照片的各个区域（特征维度）高度相似时，画家画出来的画自然也都差不多。\n所以 TransDiffuser 的解法是：在特征进入动作解码器之前，强制让不同特征维度去相关，使参考照片的各个区域携带更多独立信息。\n二、架构总览：编码器-解码器扩散模型 TransDiffuser 的整体架构包含三个核心组件。下面这张架构图建议先看 30 秒，有个整体印象，然后我们逐块拆解：\n上图是论文中的架构图，从左到右看数据流：\n左侧输入：Camera（前视相机）和 LiDAR 点云，一起送入 Scene Encoder Scene Encoder：基于 Transfuser 骨干，多阶段 Transformer 跨模态融合，输出 BEV 特征 Motion Encoder：编码历史轨迹和当前自车状态 Denoising Decoder（中间核心）：DDPM 扩散解码器，以编码特征为条件，从噪声逐步去噪生成动作 右侧输出：去噪后的动作序列，累加得到 8 个 waypoint 的轨迹 关键设计：Scene Encoder 在整个训练过程中被冻结（frozen），不参与梯度更新。消融实验显示，如果 Scene Encoder 参与全量训练，PDMS 反而从 94.9 下降到 93.5。论文分析认为，预训练的感知特征已经足够好，规划任务的微调反而可能「扭曲」感知表示。\n2.1 问题形式化 模型输出 8 个 waypoint，覆盖未来 4 秒（采样频率 8Hz）：\n$$\\mathbf{x} = \\{s_1, s_2, \\dots, s_T\\}, \\quad T=8$$其中 $s_\\tau = (x_\\tau, y_\\tau)$ 是自车中心坐标系下的 waypoint 位置。但模型不直接预测 waypoint，而是预测动作序列（相邻帧的位移）：\n$$\\hat{x}_\\tau = s_\\tau - s_{\\tau-1}, \\quad \\hat{x}_1 = s_1$$这个变换叫动作投影（action space projection）。它的好处是缓解异方差性（heteroscedasticity）——waypoint 的绝对位置方差很大，但相邻帧之间的位移方差相对稳定。轨迹可以通过动作累加简单恢复，是可逆变换。\n2.2 多模态特征组 编码器输出的所有特征汇聚为一个多模态特征组：\n$$feat = \\{F_{bev}, F_{img}, F_{LiDAR}, Emb_{action}, Emb_{ego}\\}$$ 特征 来源 维度 含义 $F_{bev}$ Scene Encoder 融合输出 BEV 空间 场景的鸟瞰图表示 $F_{img}$ 图像 CNN 分支 图像空间 前视相机的视觉特征 $F_{LiDAR}$ LiDAR CNN 分支 点云空间 激光雷达的几何特征 $Emb_{action}$ Action Encoder (MLP) 动作空间 历史轨迹的运动嵌入 $Emb_{ego}$ Ego Status Encoder (MLP) 状态空间 当前车速/加速度等状态 这 5 个特征通过去噪解码器中的多头交叉注意力顺序融合，作为去噪过程的条件信号。这就是去相关正则化要作用的对象——如果这 5 个特征的维度之间存在冗余，条件信号的信息量就会被压缩。\n三、Scene Encoder：多模态感知融合 3.1 Transfuser 骨干 Scene Encoder 使用被 Nav-train 预训练权重冻结的 Transfuser 骨干。它处理两种传感器的输入：\n传感器 输入 处理方式 输出特征 前视多视角相机 RGB 图像序列 CNN Backbone $F_{img}$ LiDAR 点云 3D 点云 CNN Backbone $F_{LiDAR}$ 两者融合 上述两特征 多阶段 Transformer 跨模态注意力 $F_{bev}$ 3.2 多阶段融合 —— 关键设计 「多阶段融合」不是简单的「最后拼一起」，而是图像和 LiDAR 分支在每个阶段（stage）都通过 Transformer block 做一次跨模态交互。论文中 Figure 2 的架构图里，可以看到图像和 LiDAR 分支之间有多个交叉箭头——每经过一个 stage，两个分支就交换一次信息。\n这种设计让多模态信息在多个尺度上相互增强：低层的几何细节（LiDAR 的边界信息）和高层的语义信息（图像的纹理信息）在不同阶段反复融合，比只在最后阶段做一次融合的效果好得多。\n3.3 冻结 Scene Encoder 的启发 论文特别强调 Scene Encoder 从训练开始到结束都被冻结。消融实验显示：\n设置 PDMS 说明 Scene Encoder 冻结 94.9 推荐配置 Scene Encoder 全量训练 93.5 反而下降 可训练参数量 62.8M / 251M (25%) 大部分参数来自去噪解码器 这说明两件事：\n预训练的感知特征已经足够好，无需在规划任务上微调 保持感知特征不变能防止规划任务「扭曲」感知表示 从工程角度看，冻结 Scene Encoder 也减少了约 75% 的可训练参数量，加速了训练。\n四、Motion Encoder：运动上下文 Motion Encoder 由两个独立的 MLP 组成：\n编码器 输入 输出 作用 Action Encoder 历史自车轨迹（多帧 waypoint） $Emb_{action}$ 告诉模型「车过去怎么开的」 Ego Status Encoder 当前自车状态（速度、加速度等） $Emb_{ego}$ 告诉模型「车现在什么状态」 这两个编码器都很轻量（MLP 几层而已），但提供了重要的运动上下文。没有它们，去噪解码器只知道「场景长什么样」，不知道「车过去几秒怎么运动、当前速度多少」。这些信息对预测未来轨迹至关重要——一个以 60km/h 行驶的车和一个静止的车，未来轨迹的分布完全不同。\n五、Denoising Decoder：DDPM 轨迹生成 5.1 DDPM 基本原理 去噪解码器采用 Denoising Diffusion Probabilistic Model（DDPM） 框架。如果你还不熟悉扩散模型，下面用最直白的方式解释：\n扩散模型分两步：\n前向过程（加噪）：拿一条真实轨迹，逐步往上加噪声，直到变成纯噪声。这个过程是固定的，不需要学。\n$$\\mathbf{x}_t = \\sqrt{\\bar{\\alpha}_t} \\mathbf{x}_0 + \\sqrt{1 - \\bar{\\alpha}_t} \\epsilon, \\quad \\epsilon \\sim \\mathcal{N}(\\mathbf{0}, \\mathbf{I})$$反向过程（去噪）：从纯噪声出发，让模型一步步「预测噪声」并去掉，最终恢复出干净轨迹。模型学的是这个过程。\n$$\\mathbf{x}_{t-1} = \\frac{1}{\\sqrt{\\alpha_t}}\\left(\\mathbf{x}_t - \\frac{1-\\alpha_t}{\\sqrt{1-\\bar{\\alpha}_t}} \\epsilon_\\theta(\\mathbf{x}_t, t, feat)\\right) + \\sigma_t \\mathbf{z}$$其中 $\\epsilon_\\theta$ 是去噪解码器网络，它的输入是：\n$\\mathbf{x}_t$：当前步的噪声动作 $t$：当前步数（0 到 T） $feat$：条件特征组（来自 Scene Encoder 和 Motion Encoder） 参数 含义 配置 $T$ 总去噪步数 10（训练和推理一致） $\\mathbf{x}_0$ 原始动作序列 8 步 waypoint 的位移 $\\epsilon$ 模型预测的噪声 与真实噪声做 MSE 损失 5.2 推理采样 推理时，从标准高斯噪声出发，经过 T=10 步去噪，生成动作序列，再累加得到未来 4 秒的 8 个 waypoint。模型生成 N=30 条候选轨迹，然后通过后处理过滤（基于运动学可行性），最终选择 PDMS 评分最高的轨迹。\n对比其他方法的候选数量：\n方法 候选轨迹数 依赖先验？ GoalFlow 128 ~ 256 条 是（场景先验） TrajHF 100 条 否 TransDiffuser 30 条 否 DiffusionDrive 20 条 是（锚点先验） TransDiffuser 用更少的候选轨迹就达到了 SOTA，说明去相关机制让每条轨迹的质量更高，不需要靠量取胜。\n六、核心创新：多模态表示去相关 这是整篇论文最核心的贡献。下面这张 SVG 图完整展示了去相关模块在整个架构中的位置和计算过程：\n上图从上到下依次展示：\nScene Encoder + Motion Encoder：编码多模态特征 Denoising Decoder (DDPM)：以多模态特征为条件去噪 Decorrelation Module：插在去噪解码器和动作解码器之间，对融合后的多模态表示施加去相关正则化 6.1 问题定义 当特征组 $feat = \\{F_{bev}, F_{img}, F_{LiDAR}, Emb_{action}, Emb_{ego}\\}$ 被多头交叉注意力融合后，得到一个融合表示矩阵 $\\mathbf{M} \\in \\mathbb{R}^{B \\times d}$（$B$ 是 batch size，$d$ 是特征维度）。\n问题在于：$\\mathbf{M}$ 的不同维度之间往往存在相关性。如果两个特征维度高度相关，那它们携带的信息基本是冗余的。在这种条件下，特征空间的有效维度远低于原始维度，条件信号的信息量下降，导致不同噪声输入收敛到相同输出。\n6.2 去相关正则化 TransDiffuser 在每个训练 batch 中，对 $\\mathbf{M}$ 施加一个去相关正则化项：\ndef decorrelation_loss(M): # Step 1: 标准化每个维度（均值为 0，方差为 1） mean = M.mean(dim=0, keepdim=True) std = M.std(dim=0, keepdim=True) M_norm = (M - mean) / sqrt(std**2 + 1e-8) # Step 2: 计算相关矩阵 (d x d) corr = M_norm.T @ M_norm # Step 3: 去掉对角线元素（只惩罚非对角线） corr_off = corr - diag(diag(corr)) # Step 4: 非对角线元素的均方值 return mean(corr_off**2) / batch_size 最终损失函数：\n$$\\mathcal{L} = \\mathcal{L}_{diff} + \\beta \\cdot \\mathcal{L}_{reg}$$其中 $\\beta = 0.02$ 在整个训练过程中固定。\n6.3 去相关正则化的直观理解 想象你有一个 5 维特征向量，但其中 3 个维度几乎完全相关——那它实际上只提供了 2 个有效维度的信息。去相关正则化强制让各个维度「各说各话」：每个维度都携带其他维度无法替代的独立信息。\n为什么这能缓解模式坍缩？ 因为条件特征的信息量增加了，不同的噪声输入在去噪过程中能「看到」更丰富的条件信号，从而生成不同的轨迹。就像给画家看 5 张不同的参考照片，他自然会画出 5 幅不同的画。\n6.4 为什么去相关比对比学习更实用 方法 实现方式 batch 需求 计算开销 对比学习（SimCLR 等） 正负样本对拉近/推远 大 batch（4096+） 高 去相关正则化 强制相关矩阵对角化 任意 batch \u0026lt; 1‰ FLOPs 与对比学习不同，去相关正则化不需要构造正负样本对，也没有大 batch 需求——它在每个 batch 内自监督地优化表示分布。论文指出，其计算量仅占前向传播的不到千分之一，几乎可以忽略。\n6.5 去相关为什么有效：奇异值分解视角 上图是论文中的 Figure 3，展示了去相关前后相关矩阵和奇异值分布的变化。从左到右看：\n指标 去相关前 去相关后 相关矩阵分布 对角线集中 + 大量非零非对角元 趋近对角矩阵 奇异值分布 能量集中在前几个主成分 能量分布更均匀 有效表示维度 低（信息冗余） 高（信息丰富） 生成轨迹多样性 低（模式坍缩） 高 论文从**奇异值分解（SVD）**的角度解释了去相关的作用。去相关前，特征矩阵的奇异值能量集中在少数几个主成分上；去相关后，奇异值分布更均匀，有效维度更高。这意味着条件信号能更精细地指导去噪过程，让不同的噪声输入收敛到不同的轨迹。\n七、模式坍缩的量化度量 为了定量评估模式坍缩程度，TransDiffuser 引入了一个多样性分数 D：\n$$D = 1 - \\frac{1}{N} \\sum_{i=1}^{N} \\frac{\\text{Area}(\\tau_i \\cap \\bigcup_{j=1}^{N} \\tau_j)}{\\text{Area}(\\tau_i \\cup \\bigcup_{j=1}^{N} \\tau_j)}$$其中 $\\tau_i$ 是第 $i$ 条去噪轨迹，$N$ 是采样总数。$D$ 衡量各条轨迹与全部轨迹并集之间的 mIoU：\n$D=100$：完全多样，所有轨迹都互不相同 $D=0$：完全坍缩，所有轨迹重合 这个指标最先在 DiffusionDrive 中被提出，TransDiffuser 沿用了它。\n八、实验结果 8.1 NAVSIM 性能对比 方法 范式 LiDAR Anchor/先验 PDMS Transfuser AR ✓ — 83.9 UniAD AR — — 83.4 PARA-Drive AR ✓ — 84.0 VADv2 Scoring — ✓ 80.9 Hydra-MDP Scoring ✓ ✓ 91.3 DiffusionDrive Diffusion ✓ ✓ (锚点) 88.1 GoalFlow Diffusion ✓ ✓ (场景先验) 90.3 TrajHF Diffusion ✓ — 94.0 TransDiffuser Diffusion ✓ — 94.9 关键发现：TransDiffuser 是第一个完全不依赖任何锚点轨迹或场景先验仍能达到 SOTA 的扩散式规划方法。与 TrajHF（同样无先验）相比，PDMS 提升约 0.9 分，且 TrajHF 使用了更大的 ViT 图像编码器，而 TransDiffuser 仅用 ResNet-34。\n8.2 多样性提升 方法 候选数 多样性 D DiffusionDrive 20 74（受益于锚点初始化） TransDiffuser (w/o decorr) 30 66 TransDiffuser (w/ decorr) 30 70 TransDiffuser 15 63 TransDiffuser 10 56 去相关正则化将多样性从 66 提升至 70（+4 分）。虽然仍比 DiffusionDrive 的 74 略低，但注意 DiffusionDrive 的多样性来自预定义的锚点分布（先验信息），而 TransDiffuser 单纯通过优化表示质量就接近了这个水平。\n8.3 消融实验 超参敏感性 参数 配置范围 最优 结论 去噪步数 T 5 / 10 / 20 10 更多步提升多样性，但 PDMS 饱和 Batch size B 32 / 64 / 128 64 太小去相关不稳定，太大无额外收益 权重 β 0 / 0.02 / 0.05 / 0.1 0.02 β=0 多样性最低（66→70），太大反而下降 组件消融 变体 PDM Score 多样性 D 说明 Baseline (30 candidates) 94.9 70 完整方法 w/o decorrelation 94.3 66 β=0，PDMS 和多样性均下降 Inner decorrelation 93.5 69 去相关放在去噪循环内部 Fully-trained 93.5 68 Scene Encoder 参与训练 关键发现 1：去相关放在哪里？ 去相关放在去噪循环「内部」（每个去噪步都做）的效果不如放在「外部」（去噪完整结束后、动作解码前）。论文分析认为：内部去相关可能干扰了去噪过程的稳定性，而外部去相关专注于优化最终表示的质量。\n关键发现 2：冻结 Scene Encoder 反而不损性能。 这在工程实践上是好消息——预训练的感知特征足够通用，无需在规划任务上微调即可保持高质量。\n8.4 跨方法泛化 论文将去相关模块应用到 Transfuser（自回归模型）上，发现 PDMS 从 78.0 提升到了 78.8。这说明去相关不限于扩散模型——它对任何使用多模态条件特征的规划方法都有帮助，具有通用性。\n8.5 定性分析 上图是论文中的定性对比图，展示了 TransDiffuser 与 Transfuser 在单条轨迹生成上的差异。在简单场景中，TransDiffuser 能给出比 Transfuser 更积极的驾驶方案——更早加速、更平滑的路径。这是因为扩散模型的生成式过程比自回归的确定性输出更灵活。\n上图展示了多模态轨迹的多样性。在复杂场景中，TransDiffuser 生成的候选轨迹能覆盖比 GoalFlow 更广的可行驾驶区域——去相关让条件表示更丰富，探索了更多可能性。注意图中不同颜色的轨迹代表不同的候选路径，覆盖了左转、直行、缓行等多种合理选择。\n九、与同类方法的深度对比 维度 DiffusionDrive GoalFlow TrajHF TransDiffuser 缓解模式坍缩 锚点高斯初始化 目标点词表约束 偏好优化 表示去相关 依赖先验 ✓ (锚点) ✓ (场景先验) — — 可训练参数量 — — — 62.8M / 251M 候选数 20 128~256 100 30 训练时长 — — — 2h @4xH20 PDMS (ResNet-34) 88.1 90.3 94.0 94.9 十、总结与个人思考 贡献总结 编码器-解码器扩散规划架构：用冻结的 Transfuser 骨干编码场景，用 DDPM 解码器生成多候选轨迹 多模态表示去相关机制：首个在端到端驾驶规划中利用表示去相关缓解模式坍缩的工作，无需任何锚点或先验 SOTA 性能：PDMS 94.85（ResNet-34 + LiDAR），超越了同期依赖锚点/先验的方法 通用性：去相关模块可插拔，对自回归模型同样有效 个人思考 1. 归因视角的转变是最优雅的贡献。 之前的工作都把模式坍缩归咎于「扩散模型本身容易坍缩」，因此解法要么是约束初始分布（DiffusionDrive 的截断扩散），要么是约束生成路径（GoalFlow 的目标点限制）。TransDiffuser 的攻击点完全不同——它认为模式坍缩的核心原因是「条件信息不够丰富」，而不是「生成过程不够受控」。这个视角转变在方法论上非常优雅：不需要动采样过程，只需要优化表示质量。\n2. 去相关正则化的工程价值被低估了。 现在多模态融合已经成为自动驾驶规划的标配，但很少有人关注「多模态特征融合后的表示质量」问题。去相关正则化的极低开销（\u0026lt; 1‰ FLOPs）和即插即用特性，使其非常适合作为任何多模态融合方法的标配组件——无论是扩散模型还是自回归模型。论文将其移植到 Transfuser 上验证了这一点。\n3. 冻结 Scene Encoder 的反直觉发现。 虽然论文提到「full training 反而降分」可能有个案因素，但这至少在实践上确认了：感知预训练的特征在规划任务上已是强特征，过度适配可能对多任务泛化反而有害。这对于 VLA 模型的训练策略也有参考价值——不是所有模块都需要随任务微调。\n4. 两个不足。 第一，多样性 D=70 相比于 DiffusionDrive 的 74 仍有差距，说明去相关虽然有效但还未完全消除与锚点方法的多样性鸿沟。如果在去相关的基础上再增加一个「多样性奖励」项，可能会进一步提升多样性。第二，论文仅在 NAVSIM 开环评测下验证，缺乏闭环仿真测试和多场景泛化分析，实际的驾驶安全性还需更多验证。\n📖 论文精读系列。本文基于 arXiv:2505.09315v2 撰写。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2505-09315-transdiffuser/","summary":"LiAuto 提出 TransDiffuser，用多模态表示去相关（Decorrelation）解决扩散轨迹生成中的模式坍缩问题。核心思路是强制多模态条件特征的维度去相关，让条件信号更丰富地覆盖潜空间，从而无需任何锚点轨迹或场景先验即可生成多样化轨迹。ResNet-34 + LiDAR 配置在 NAVSIM 上达到 PDMS 94.85。本文将用一张图一张图对应讲解的方式，把这篇论文的动机、架构、核心创新全部讲清楚。","title":"论文精读｜TransDiffuser：去相关多模态表示驱动的扩散式轨迹生成"},{"content":"引言 NAVSIM 排行榜的竞争已经到了白热化阶段。从最初的 80 分出头到现在的 94.5 分（CLOVER），短短两年时间，顶尖方案的 PDMS 提升了 15 个点。如果你正在读这篇文章，大概率是两种人：一是想在排行榜上刷个高分的选手，二是研究自动驾驶规划、想理解 Scoring-based 范式演进方向的研究者。\n这篇文章不讲虚的，直接切入正题：到底怎么才能在 NAVSIM 上把 PDMS 刷到 90 分？\n我会结合 NAVSIM 排行榜上所有公开的高分方案（CLOVER、CLEAR、DriveFuture、Hydra-MDP 以及各种 VLA + RL 方案），从 PDMS 公式的数学结构出发，逐层拆解每个分数段的瓶颈和对应的策略。\n先给个核心结论：PDMS 90+ 的秘密不在于模型多强大，而在于你是否真正理解了 Scoring 范式的每个环节。\n一、PDMS 公式：分数结构决定了优化策略 如果你还不知道 PDMS 怎么算的，那先把这块搞清楚。分数结构本身就在告诉你该优化什么。\nPDMS 公式拆解 1.1 公式结构 记住这个公式：\nPDMS = NC × DAC × (5·EP + 5·TTC + 2·C) / 12\n这里最应该引起你注意的是乘性结构：NC 和 DAC 是乘法项，意味着任何一个为零，整体分数直接归零。这不是简单的加减法，这是一个\u0026quot;安全第一，前进第二\u0026quot;的奖励结构。\n加性部分是 (5·EP + 5·TTC + 2·C) / 12，EP 和 TTC 各占 5 份权重，C 只占 2 份。\n1.2 每个子指标的含义 NC（No Collision，无责碰撞）：取值为 {0, 0.5, 1}。0 代表有责碰撞，整段分数归零；0.5 代表无责碰撞（被追尾等）；1 代表无碰撞。这是最严苛的惩罚——一次碰撞就毁掉整段得分。\nDAC（Drivable Area Compliance，可行驶区域合规）：取值为 {0, 1}。只要主车任何时刻压在不可行驶区域上，整段得分为零。\nEP（Ego Progression，主车前进量）：连续值 [0, 1]。衡量主车在该场景下相对基准前进量的完成比例。这是一个连续指标，也是高分段唯一能持续优化的指标。\nTTC（Time to Collision，碰撞时间）：离散值 {0, 1}。只要某个时刻 TTC 低于阈值，得分为零。\nC（Comfort，舒适度）：离散值 {0, 1}。急加速、急刹车、急转向都会导致舒适度归零。\n1.3 分数的\u0026quot;阶梯结构\u0026quot; 这个公式透露了一个重大信息：分数增长不是线性的，有明确的台阶。\n低分段（\u0026lt; 80）：你在解决 NC、DAC 等\u0026quot;会开车\u0026quot;的问题。 中分段（80-88）：你在解决 TTC、C 等\u0026quot;安全舒适开车\u0026quot;的问题。 高分段（88-92）：你在解决 EP 从 0.8 到 0.9 的问题。 顶尖分段（92+）：你在解决 EP 从 0.9 到 0.95 的\u0026quot;最后一公里\u0026quot;问题。\n每上一个台阶，你需要优化的目标就换一个。如果你还在 85 分徘徊，却去研究 EP 的细节优化，那是白费功夫。\n1.4 用量化分析理解每个子指标的权重 为了更直观地理解不同子指标的优化价值，我们来做一些简单的量化分析。\n假设你在 85 分水平（NC=1, DAC=1, TTC=1, C=1, EP=0.7），PDMS = 1×1×(5×0.7+5×1+2×1)/12 = (3.5+5+2)/12 = 10.5/12 × 100 = 87.5。\n如果花精力优化 NC 从 1 到 1（已经到顶），收益 0。 如果花精力优化 TTC（已经到顶），收益 0。 如果花精力把 C 从 1 优化到 1（已经到顶），收益 0。 唯一能优化的是 EP。把 EP 从 0.7 提升到 0.85，PDMS = (5×0.85+5+2)/12 = (4.25+5+2)/12 = 11.25/12 × 100 = 93.75。\n这看似很大，但不要忘记：这个计算假设 NC、DAC、TTC、C 全部满分。如果你的实际分数中有任何安全指标不是满分，优化安全指标的收益远大于优化 EP。\n举个例子：如果你 NC=0.5（有一次无责碰撞），DAC=1，TTC=1，C=1，EP=0.95。PDMS = 0.5 × (5×0.95+5+2)/12 = 0.5 × 11.75/12 × 100 = 48.96。\n看到没？一次无责碰撞就让 94 分变成 49 分。这就是乘性惩罚的威力。\n所以优化的优先级应该是：\nNC → 1（乘性，直接影响整体） DAC → 1（乘性，直接影响整体） TTC → 1（权重 5，离散） C → 1（权重 2，离散） EP → max（权重 5，连续，最后优化） 每个层次都理解你当前的瓶颈，才能做最有针对性的改进。\n二、分数段深度分析：你的分数对应什么水平？ PDMS 分数段深度分析 2.1 PDMS \u0026lt; 80：还不会\u0026quot;正常开车\u0026quot; 这个阶段的表现：频繁碰撞、经常出车道、EP 接近于零。模型本质上还没有学会驾驶行为的基本模式。\n解决策略：\n这个阶段不要想什么花哨的方法。唯一需要做的是：做好 SFT（模仿学习）。\n具体来说：\n使用 NAVSIM 官方提供的 Navtrain 数据集（74k 场景 × 8s） 用人类专家的驾驶日志做行为克隆 重点关注碰撞率和可行驶区域合规率 关键经验：不要在第一个阶段就上 Scoring-based。Scoring-based 的核心假设是你的候选轨迹里有一条或多条是\u0026quot;好\u0026quot;的——但如果模型连基本的驾驶行为都没学会，候选轨迹全是垃圾，打分器只能\u0026quot;从垃圾里选一个没那么垃圾的\u0026quot;。\n这个阶段的目标很简单：让模型输出的轨迹 τ 至少和训练集中的专家轨迹在分布上相似。\n实操技巧：\n使用简单的 MSE Loss 或 L1 Loss 做轨迹回归 在碰撞场景上做数据增强（加噪声、随机裁剪等） 先在小验证集上确认碰撞率降到 5% 以下再考虑下一步 预期结果：PDMS 75-82，碰撞率显著下降，EP 达到 0.5-0.7。\n2.2 80 ≤ PDMS \u0026lt; 88：Scoring-based 的主战场 这个阶段是最经典的 Scoring-based 范式能发挥最大作用的区间。你的模型已经会开车了，但还不怎么安全——偶尔碰撞、EP 中等、舒适度波动大。\n解决策略：\n切换到 Generator-Scorer 架构。\n核心思路：\nGenerator：生成 K 条候选轨迹（通常 K=6-12） Scorer：为每条候选轨迹打分 Selection：选择分数最高的轨迹作为输出 这个阶段的优化重点：先搞定安全指标（NC、DAC、TTC、C）。\n为什么？因为安全指标是离散的、乘性的，它们的优化回报远高于 EP。你花大量精力把 EP 从 0.75 提升到 0.80，还不如把碰撞率从 5% 降到 1% 的收益大。\nScorer 训练关键：\n使用 NAVSIM scorer 作为 teacher（监督信号） 输入：场景上下文 + 候选轨迹 输出：分数（最大熵分类或回归） 损失函数：Binary Cross Entropy 常见陷阱：\n打分器过拟合到训练场景。验证集上分数很高，但测试（navtest）上性能差。 候选轨迹退化。如果 Generator 生成的所有轨迹都差不多，打分器再强也没用。 EP-CAV 差距。EP 分数高 ≠ 候选轨迹覆盖了所有合理的驾驶策略。 预期结果：PDMS 82-88，安全指标基本拉满，EP 达到 0.75-0.85。\n2.2.1 Scoring-based 的 Generator 设计细节 Generator 的设计直接决定了候选轨迹的质量和多样性。我来深入拆解几种主流 Generator 的设计：\nCVAE-based Generator\n条件变分自编码器是最常见的 Generator 架构。训练时学习一个条件分布 p(τ|x)，其中 τ 是轨迹，x 是场景上下文。推理时从潜变量 z ~ N(0, I) 采样，解码生成轨迹。\n场景编码 =\u0026gt; 潜变量 z 采样 =\u0026gt; 轨迹解码\n优点：训练稳定，可以通过调整 z 的采样数目来控制候选数量。 缺点：生成的轨迹多样性有限，容易收敛到平均值（mode collapse）。\nAnchor-based Generator\n预先定义一组\u0026quot;锚点轨迹\u0026quot;（比如左转、直行、右转、减速等），然后基于场景上下文对这些锚点做偏移修正。\n预定义 K 个 Anchor 轨迹 =\u0026gt; 对每个 Anchor 预测偏移量 =\u0026gt; K 条候选轨迹\n优点：多样性有保证（只要 Anchor 覆盖了主要驾驶模式），训练稳定。 缺点：Anchor 的设计需要手工经验，可能遗漏某些模式。\nDiffusion-based Generator\n使用扩散模型直接生成轨迹。扩散模型天然支持多模态生成，通过随机噪声采样可以得到多样化的轨迹。\n场景编码 =\u0026gt; 初始噪声 =\u0026gt; 多步去噪 (t=T to t=0) =\u0026gt; 候选轨迹\n优点：生成质量高，多样性好，覆盖了训练数据的完整分布。 缺点：推理计算量大（需要多步去噪），训练不如 CVAE 稳定。\n我的建议：从 CVAE 开始（最简单），效果不够再用 Diffusion。Anchor-based 不适合做高分段（固定 Anchor 限制了上限）。\n2.2.2 候选数量的选择 候选数量 K 的选择直接影响最终分数。太小了覆盖不够，太大了打分器负担重且可能存在噪声。\nK 覆盖度 打分器负担 典型 PDMS 1 极低 无 75-80 3 低 低 80-85 6 中等 中等 85-90 12 高 较高 88-93 32 很高 高 90-94 在实际实验中，K=12 是一个很好的 trade-off。从 6 提升到 12 收益最大，从 12 提升到 32 收益递减。\n但要注意：K 的增加会降低推理速度（因为打分器需要对 K 条轨迹都做评估）。权衡速度和分数，K=12 是推荐的默认值。\n2.3 88 ≤ PDMS \u0026lt; 92：候选质量决定上限 到了这个阶段，你会发现安全指标（NC、DAC、TTC、C）已经基本满分了，但 PDMS 就是上不去 90。问题出在EP 和候选质量上。\n候选轨迹质量：你的上限在哪里？ 关键洞察：打分器再强也救不了烂候选。\n这个阶段你需要做两件事：\n第一，提升候选轨迹的多样性。\n如果你的 Generator 生成的所有候选轨迹都是\u0026quot;直行\u0026quot;，那在\u0026quot;需要让行/绕行/减速\u0026quot;的场景里，打分器即使知道该怎么做，也没有合适的候选可以选。\n怎么提升多样性？\n增加候选轨迹数量 K（比如从 6 提升到 12） 在 Generator 中使用 Diverse Sampling（如 CVAE + 多个潜变量） 使用 Diffusion/Flow 模型做生成（天然的多模态能力） 第二，引入蒸馏机制。\n这是从 88 到 92 的关键一步。核心想法：用打分器来训练 Generator。\n打分器知道什么是好的轨迹（分数高），但 Generator 不知道怎么生成\u0026quot;高分轨迹\u0026quot;。蒸馏就是让 Generator 学习生成打分器认为好的轨迹。\n具体做法：\n对每个场景，用 Generator 生成 K 条候选轨迹 用打分器对每条轨迹打分 选最高分的轨迹作为\u0026quot;伪标签\u0026quot; 用这个伪标签训练 Generator 这个蒸馏过程可以迭代多轮，每次迭代都能提升 Generator 生成高质量候选的能力。\n预期结果：PDMS 88-92，EP 达到 0.85-0.93，候选轨迹覆盖大部分合理驾驶策略。\n2.4 PDMS ≥ 92：CLOVER 的天地 92 分以上是 CLOVER 的统治区间。这个阶段唯一的瓶颈就是 EP。\n当安全指标全部满分、舒适度满分、候选质量足够好时，你的 PDMS ≈ EP。而 EP 的上限取决于：\n你选择的参考前进量（reference progression） 你能否让主车在所有场景下都开得\u0026quot;足够快足够远\u0026quot; EP 的数学定义：EP = min(ego_progression / reference_progression, 1.0)\n所以 EP 优化的本质是：在所有场景下，让主车的前进量接近或达到参考值。\n但这个参考值本身是保守的（28.0m / 8s in test-hard），所以即使你开得很快，EP 也可能只是 0.9 左右。要达到 0.95+，你需要让主车在几乎每个场景都几乎不走冤枉路。\nCLOVER 凭什么能做到 94.5？\n闭式蒸馏（Closed-form Distillation）：一步到位而非多步迭代 同时优化 Generator 和 Scorer：不再固定一端训练另一端 数据 + 策略双提升：用排名高的数据做训练 我们下一节详细讲。\n三、三大技术路线深度对比 三大技术路线深度对比 你的资源和技术栈决定了你应该走哪条路。没有放之四海皆准的最优方案。\n3.1 路线 A：Scoring-based 范式（CLOVER 为代表） 这是最成熟、最高分、最稳定的路线。\n核心思想：将规划问题拆解为\u0026quot;候选生成 + 打分排序\u0026quot;两个阶段。Generator 负责生成多样化的轨迹，Scorer 负责选出最好的。\n为什么它统治了排行榜：\n打分器提供了可解释的安全性保障 候选多样性确保了决策空间的覆盖 蒸馏机制持续提升候选质量 CLOVER 的关键创新：\n全称 Closed-form Distillation for Scoring-based Planning。\n传统的蒸馏是\u0026quot;先生成→打分→蒸馏→再生成\u0026quot;的迭代过程，而 CLOVER 提出了一个解析解：直接将打分器的梯度信息传回 Generator，使得 Generator 的更新方向直接与最终分数挂钩。\n具体来说：\n传统的 Scoring-based：Generator 和 Scorer 分开训练，通过蒸馏间接连接 CLOVER：将 Generator 的输出直接映射到分数空间，端到端优化 这听起来像是一个简单的 trick，但实际上它消除了蒸馏过程中的信息损失。传统蒸馏中，Generator 只会学到\u0026quot;生成最高分的候选\u0026quot;，但不知道为什么某个候选分数高、其他候选差在哪里。\nCLOVER 的闭式解让 Generator 学到打分器的完整排序偏好，而不仅仅是一个伪标签的回归。\nCLOVER 的训练流程：\n初始化 Generator（可以是 SFT 后的模型） 初始化 Scorer（用 NAVSIM scorer 做监督） 闭式蒸馏：联合优化 Generator 和 Scorer 多轮迭代，最终达到收敛 每一轮蒸馏中，Generator 和 Scorer 都在联合优化。Generator 学习生成打分器认为好的轨迹，Scorer 学习更准确地评估这些新生成的轨迹。\nCLOVER 的闭式蒸馏伪代码\n为了帮助理解闭式蒸馏的核心机制，用伪代码来描述算法流程：\n[初始化] G = Generator(随机初始化或SFT预训练) S = Scorer(用NAVSIM scorer预训练)\n[闭式蒸馏循环] for epoch in range(N): batch = sample_scenes(navtrain)\n// 1. Generator生成候选轨迹 trajectories = G.generate(batch, K=12) // 2. Scoring打分 scores = S.score(batch, trajectories) // shape: [B, K] // 3. 选出最高分候选 best_idx = argmax(scores, dim=-1) // shape: [B] best_trajs = gather(trajectories, best_idx) // shape: [B, T, 2] // 4. [闭式蒸馏的核心] // 不直接用best_trajs做MSE回归 // 而是计算所有候选的分数梯度 score_grad = softmax(scores / temperature) // 分数转换为权重 // Generator损失：按分数权重加权所有候选 // 高分候选贡献大，低分候选贡献小 loss_G = weighted_mse_loss(trajectories, score_grad) // Scorer损失：GT分数与预估分数的差异 gt_scores = navsim_scorer.score(batch, trajectories) loss_S = mse_loss(scores, gt_scores) // 5. 联合更新 G.update(loss_G) S.update(loss_S) 与传统蒸馏的关键区别：传统蒸馏只选 best_trajs 做回归（把所有信息压缩到一个伪标签），而闭式蒸馏用所有候选的分数梯度来更新 Generator。后者保留了打分器的完整排序信息。\n为什么这很重要？\n假设一个场景中，候选轨迹 A（EP=0.85）和 C（EP=0.93）的分数差异很小（只有 0.2 分的差距），但候选 B（EP=0.6）的分数明显低。传统蒸馏只会让 Generator 学习生成 A（最高分），而闭式蒸馏会让 Generator 学到\u0026quot;A 和 C 差不多，都值得学习，B 不值得学\u0026quot;。这种细粒度的信息让 Generator 学到的策略更加鲁棒。\n为什么 CLOVER 能拿到 94.5：\n候选覆盖度接近完美：几乎所有场景都有至少一条\u0026quot;好\u0026quot;候选 打分器几乎不会选错：充分训练的 Scorer 在验证集上几乎 100% 正确 EP 极致优化：闭式蒸馏直接优化 EP，而不是间接优化 适合谁：你有计算资源做蒸馏迭代，需要稳定可复现的高分。\n3.2 路线 B：扩散/Flow 生成式方法 这条路线的特点是直接生成轨迹分布，不依赖显式的打分器。扩散/Flow 模型天然适合驾驶场景——驾驶行为是多模态的（左转/右转/直行/减速等），扩散模型能很好地建模多模态分布，通过去噪过程控制生成轨迹的质量。\nTransDiffuser (94.85 PDMS) 目前 NAVSIM 排行榜上分数最高的方法之一。架构核心是 Transformer 作为扩散模型主干，将场景上下文（道路、交通灯、其他车辆）编码为条件，通过扩散去噪生成轨迹。\n关键成功因素：\n无显式打分器：生成和打分在同一模型中隐式完成，避免了打分器与 Generator 之间的信息损失 扩散步数可调：推理时可以通过增加去噪步数来提升生成质量（但牺牲延迟） 多样性优秀：扩散模型的随机噪声采样天然生成多样化候选，覆盖不同驾驶策略 TransDiffuser 的消融实验显示：8 步去噪已经足够达到 93+ PDMS，16 步能达到 94.85，但再增加步数收益递减。推理延迟方面，8 步去噪在 A100 上约需 15ms，优于显式 scoring-based 方案的 Generator + 12×Scorer 的总成本（约 30ms）。\n但 TransDiffuser 的一个弱点是不擅长处理安全关键的长尾场景：没有显式的安全打分器，模型可能在某些罕见场景下生成不安全的轨迹——因为没有\u0026quot;安全筛选\u0026quot;这道防线。\nDiffusionDrive (88.1 PDMS) 虽然分数不如 TransDiffuser 高，但 DiffusionDrive 的思路更具工程可行性：它把扩散过程在轨迹空间内完成，而不是在图像或 feature 空间。这样可以大幅减少扩散模型的参数和计算量。\nDiffusionDrive 的架构特点：\n在 BEV feature 上做条件扩散 使用较浅的扩散步数（4-6 步） 推理延迟极低（\u0026lt; 5ms） 对于 88.1 这个分数段来说，DiffusionDrive 的效率非常高。但从 88 到 94 的差距说明：纯扩散方法在生成质量的\u0026quot;天花板\u0026quot;上不如 scoring-based 蒸馏——因为扩散模型缺乏显式的质量筛选机制。\nFlow-GRPO 的尝试与反思 GRPO（Group Relative Policy Optimization）在扩散模型上的应用是一个有趣的方向。核心思路：不依赖\u0026quot;候选→打分\u0026quot;框架，而是直接在 PDMS 奖励空间下优化扩散模型的生成过程。\n[Flow-GRPO 训练流程] 同一场景 =\u0026gt; 扩散模型生成 G 条轨迹 =\u0026gt; 计算 PDMS 奖励 =\u0026gt; 组内标准化得 advantage =\u0026gt; 反传梯度更新扩散模型去噪方向\n但实测下来，纯 RL + Diffusion 在 NAVSIM 上的效果不如 Scoring-based 蒸馏。原因：\n稀疏奖励：PDMS 是场景级别奖励，大部分候选的分数差异很小，RL 难学到有效梯度 无显式安全约束：RL 优化过程中没有安全筛选机制，可能学到\u0026quot;高风险高分\u0026quot;策略 样本效率低：RL 需要大量 rollout 才能收敛，而扩散模型的大推理成本使得每次 rollout 很慢 个人观点：扩散 + RL 这条路线还需要新的训练技巧才能追上 Scoring-based 蒸馏。最有可能的突破方向是将打分器作为扩散模型去噪过程中的 guidance（类似 classifier guidance），而不是用 RL 做后训练。这样既保留了扩散的多模态生成能力，又获得了打分器的安全筛选能力。\n扩散路线的优劣势总结 维度 扩散生成式 Scoring-based 蒸馏 生成质量 优秀（多模态覆盖好） 取决于候选集 安全筛选 无显式机制 有打分器做安全筛选 推理速度 15-30ms（多步去噪） 20-30ms（Gen + K×Scorer） 训练复杂度 中等（端到端） 较高（两阶段 + 蒸馏） 可解释性 低（黑盒生成） 高（打分器可分析） 最高分数 94.85（TransDiffuser） 94.5（CLOVER） 适合谁：你对生成式模型感兴趣，想做创新研究，或者需要多模态生成能力（如变道 vs 直行的多峰轨迹输出）。\n3.3 路线 C：VLA + RL 范式（ExploreVLA 为代表） 这条路线的特点是：用大语言模型的推理能力做规划。\n为什么用 VLA 做规划：\n语言模型可以理解复杂的交通规则和社会规范 多模态输入（图像、语言指令、地图）可以自然融合 RL 可以端到端优化驾驶策略 代表方法 ExploreVLA (93.7 PDMS)：\nExploreVLA 的方法论很清晰：\n用预训练的视觉语言模型作为基础（VLM backbone） 在 NAVSIM 数据上做模仿学习（行为克隆） 用 RL（PPO/GRPO）做策略优化，直接最大化 PDMS 核心创新：RL 阶段使用 PDMS 分数的可微近似，使得奖励信号可以直接反传到 VLM 的 token logits 中，实现端到端优化。这个 trick 解决了 VLA 做 RL 时的\u0026quot;token 离散性\u0026quot;问题——如果只是用 RL 优化 token 选择概率，奖励信号经过 token 采样后会非常稀疏。而可微 PDMS 评分使得 VLA 的每个 token 位置都能收到梯度信号。\nAutoVLA (89.1 PDMS)：\nAutoVLA 的思路更激进：完全用 RL 来训练 VLA，不做显式的模仿学习。\n方法：\n将驾驶轨迹离散化为\u0026quot;driving token\u0026quot;序列 用 VLM 自回归生成这些 token 用 GRPO 直接优化 PDMS 分数 关键设计：长 CoT 推理。\u0026ldquo;think\u0026rdquo; token 让 VLM 在生成动作之前先做推理（类似 AlpaMayo-R1 的 CoC），但推理内容不是人为标注的，而是 RL 过程中自动涌现的。\nAutoVLA 的一个有趣发现：使用 GRPO 后，VLM 自动学会了在生成轨迹 token 之前先输出一段推理文本（例如\u0026quot;前方有行人，应该减速\u0026quot;，\u0026ldquo;绿灯即将变黄，加速通过\u0026quot;等）。这种涌现的推理行为是 SFT 阶段从未教过的——说明 RL 训练不仅优化了动作，还让模型学会了\u0026quot;思考\u0026rdquo;。\nAlpaMayo-R1（99ms 真车部署）：\nNVIDIA 的 AlpaMayo-R1 是目前最完整的 VLA 方案，虽然不是 NAVSIM 专属，但其方法论有很强的参考价值。\n架构三组件：\nCosmos-Reason VLM 骨干：预训练了 Physical AI 推理能力的 VLM Chain of Causation 数据集：结构化因果推理链（决策锚定 + 关键因素 + 组装 CoC） Flow Matching 动作解码器：将离散轨迹 token 解码为连续动力学可行的轨迹 三阶段训练：动作注入 SFT -\u0026gt; 推理激发 SFT -\u0026gt; GRPO 后训练（优化推理质量 + 推理-动作一致性 + 轨迹质量）\n真车路测延迟仅 99ms，说明 VLA 的实时性瓶颈是可以被克服的——关键在于模型设计（轻量 VLM + 高效解码器）而非模型规模。\nVLA 路线在 NAVSIM 上的关键挑战：\n挑战 原因 可能的缓解方法 推理延迟 VLM 自回归生成 token 需要数十到数百步 使用 1-3B 小模型 + 推测解码 RL 训练不稳定 VLA 参数量大，PDMS 奖励稀疏 先用模仿学习初始化，再用 RL 微调 安全可靠性 无显式安全筛选机制 VLA + Scoring-based 联合推理 候选多样性 VLM 生成天然趋同 温度采样 + beam search 可复现性 随机采样下结果波动大 Greedy decoding + 确定性推理模式 适合谁：你做学术研究、有大把 GPU 资源、想探索 VLA + RL 的前沿方向。\n3.4 我的观点 如果你只想刷高分：选路线 A（Scoring-based）。 如果你想发论文：选路线 B（扩散/Flow + 蒸馏）。 如果你想做大新闻：选路线 C（VLA + RL）。\nScoring-based 路线统治排行榜不是偶然的。它的\u0026quot;生成+打分\u0026quot;结构天然适配 PDMS 的评估方式——PDMS 本质上就是一个打分器。\n但更重要的是，Scoring-based 范式的蒸馏机制是当前已知的、唯一能系统性提升 PDMS 到 92 分以上的方法。\nCLOVER 的闭式蒸馏、Hydra-MDP 的多头蒸馏、CLEAR 的对比蒸馏，本质上都在做同一件事：让 Generator 朝 Scorer 的偏好方向对齐。\n3.5 路线 D：世界模型 VLA 范式（前沿探索） 这是一条目前还没有在 NAVSIM 排行榜上验证到 90+ 的路线，但理论潜力非常大。世界模型 VLA 的核心思路是在\u0026quot;生成轨迹\u0026quot;的基础上更进一步：让模型不仅生成当前的最佳轨迹，还能预测轨迹执行后的未来状态，并在预测的未来状态上做规划。\n世界模型 VLA 做什么？ 传统 Scoring-based 规划器的工作流：\n当前场景 =\u0026gt; [Generator] =\u0026gt; 候选轨迹 =\u0026gt; [Scorer] =\u0026gt; 选最优轨迹\n世界模型 VLA 的工作流：\n当前场景 =\u0026gt; [策略网络] =\u0026gt; 候选轨迹 =\u0026gt; [世界模型] =\u0026gt; 预测执行后果 (评估) 检查安全性、舒适度、规则遵守 (评估) 选择最优轨迹\n区别在于：世界模型提供\u0026quot;预演\u0026quot;能力——在轨迹被执行之前，先仿真一遍未来几秒会发生什么，然后基于\u0026quot;预演结果\u0026quot;做决策。\n代表方法 DriveDreamer（世界模型作为规划器）\n训练一个驾驶世界模型，学习状态转移函数 $p(s_{t+1}|s_t, a_t)$ 推理时在 latent 空间内\u0026quot;想象\u0026quot;多条轨迹的未来 用奖励模型（类似 scoring-based 的 scorer）在\u0026quot;想象\u0026quot;的未来状态上评估 选择最大化累计奖励的轨迹 Gen-Drive / 扩散世界模型\n用扩散模型同时建模场景演化（其他车辆的轨迹）和自车轨迹 不做显式的 \u0026ldquo;决策→预测\u0026rdquo; 分离，而是联合生成自车和其他交通参与者的未来轨迹 优势：对交互场景（变道博弈、交叉路口）有更好的建模 Cosmos（NVIDIA 世界基础模型）\n训练在数千万驾驶视频上的世界模型 可以\u0026quot;想象\u0026quot;给定自车轨迹后的场景演化 输出未来的视频帧，做视觉级别的 safety checking 虽然还没有直接用于 NAVSIM 规划器，但其物理推理能力理论上可以直接提升 EP GaiaFlow / 交互感知 Flow\n用 Flow Matching 建模交通场景中所有 agent 的联合轨迹分布 自车轨迹是联合分布的一个条件维度 通过边缘化其他 agent 的轨迹来评估自车轨迹的安全性 世界模型 VLA 如何帮助 90+ PDMS？ 针对 EP 优化：世界模型可以\u0026quot;预演\u0026quot;不同速度下的未来场景。如果你在犹豫\u0026quot;这个绿灯还够不够过\u0026quot;，世界模型可以提前模拟出 3 秒后的场景，告诉你能不能安全通过。这使得模型可以在保证安全的前提下最大化 EP——这正是 90 分以上最需要的。\n针对长尾场景：世界模型的\u0026quot;想象\u0026quot;能力可以直接覆盖训练数据中没见过的场景。即使模型没见过\u0026quot;施工改道 + 行人横穿\u0026quot;的组合，也可以通过在想象空间中推理来找到安全的驾驶策略。\n针对候选多样性：在世界模型的 latent 空间中搜索候选路径，比在轨迹坐标空间中搜索更高效。因为世界模型可以理解\u0026quot;这个区域是马路、那个区域是人行道\u0026quot;——它天然约束生成的候选轨迹在可行驶区域内。\n为什么世界模型 VLA 还没有 90+？ 尽管理论优势明显，世界模型 VLA 在 NAVSIM 上有两个核心瓶颈：\n世界模型的精度不够：驾驶世界模型需要精确预测未来 8 秒的场景变化（其他车辆、行人等）。当前的世界模型在 2-3 秒后就开始产生漂移，导致\u0026quot;预演\u0026quot;结果不可靠。打分器用的是不准确预演结果，选出的轨迹自然也差。\n计算成本太高：每条候选轨迹都需要世界模型 rollout 8 秒场景。如果候选数 K=12，每帧需要做 12 次 world model rollout。当前 SOTA 世界模型的单次 rollout 需要 10-50ms，12 次就是 120-600ms——远远超出实时要求。\n世界模型 VLA vs Scoring-based：不是替代关系 我倾向认为世界模型 VLA 和 Scoring-based 是互补而非替代关系。\n最有可能的融合路线：\nGenerator =\u0026gt; 候选轨迹 =\u0026gt; [世界模型快速预演] =\u0026gt; [Scorer 精打分] =\u0026gt; 选最优\n用世界模型做快速预筛选（成本高但准确率高），用 Scorer 做精细打分（成本低但需要训练）。这样既利用了世界模型对场景演化的理解能力，又保持了 Scoring-based 的高效性。\n适合谁：你有无限 GPU 资源、想探索下一代规划范式、不介意当前的低分但看重长远潜力。\nEP：90分以上的终极瓶颈 上面说过，当安全指标全部拉满后，PDMS 的唯一瓶颈就是 EP。现在我们来深入看看，到底怎么优化 EP。\n4.1 EP 的本质 EP 衡量的是主车在 8 秒场景内的前进量。参考前进量是固定的（test-hard 场景为 28.0m），所以 PO 要优化其实很简单：让主车走得更远。\n但为什么很难做到 EP = 1.0？\n因为 NAVSIM 中有很多场景要求主车停下来等：\n红灯前等待 行人过马路时等待 有车切入时减速让行 交叉路口让行 在这些场景下，强行加速前进会触发碰撞（NC），导致整段分数归零。所以 EP 优化的本质是在安全和前进之间找到最优平衡。\n4.2 EP 优化的三个层次 层次一：保守策略（EP 0.7-0.8）\n只在安全时加速，不自信时一律减速等待。这种方法碰撞率极低，但很多场景下主车会\u0026quot;犹豫不前\u0026quot;。\n典型表现：在可通行路口也要减速观察，导致 EP 偏低。\n层次二：激进策略（EP 0.8-0.9）\n通过学习人类驾驶数据，模型学会了在大多数场景下保持合理速度。但在少数复杂场景（无保护转弯、行人混淆场景等）会出错——要么碰撞，要么过于保守。\n典型表现：大部分场景 EP 很高，但少数场景出了错导致 NC 扣分。\n层次三：最优策略（EP 0.9-0.95）\n模型学会了在不同场景下自适应调整速度：安全时保持高速，复杂时适当降速但不停车。这才是 CLOVER 等顶尖方案达到的水平。\n4.3 CLOVER 如何优化 EP CLOVER 的闭式蒸馏对 EP 的优化可以概括为：\nGenerator 不再只是模仿人类驾驶，而是模仿\u0026quot;打分器认为好的驾驶行为\u0026quot;。\n人类驾驶不一定是最高分的行为——人类可能开得太慢（EP 低）、或者太激进（碰撞风险高）。而打分器训练的目标直接就是最大化 PDMS，所以打分器认为好的行为是 PDMS 最优的。\n通过蒸馏：\n对比实验数据（来自 CLOVER 论文）：\n不做蒸馏的 Baseline：EP 0.82，PDMS 86.5 基础蒸馏：EP 0.87，PDMS 89.2 CLOVER 闭式蒸馏：EP 0.93，PDMS 94.5 可以看到蒸馏的收益主要集中在 EP 上。对安全指标（NC、DAC、TTC、C）的改进很小，因为 Baseline 已经做得不错了。\n从 SFT 到 CLOVER 的训练管线 五、数据集策略：在哪个数据集上训练与测试？ NAVSIM 的数据集设计非常巧妙，理解它的结构对刷分至关重要。\n5.1 Navtrain vs Navtest vs Navhard NAVSIM 有三个主要的数据集划分：\nNavtrain（训练集）：\n约 74,000 个场景 覆盖了大多数常规驾驶场景 场景时长：8 秒 Navtest（标准测试集）：\n约 10,000 个场景 难度分布与 Navtrain 相似 排行榜上主要报告的分数 Navhard（高难度测试集）：\n约 10,000 个场景 专门筛选的高难度场景 包含很多 corner case 5.2 关键洞察：用哪个数据集训练决定了你的上限 如果在 Navtrain 上训练，在 Navtest 上测试：你的模型学习的是 Navtrain 的数据分布。Navtest 和 Navtrain 同分布，所以分数会偏高。\n真实场景下的泛化能力：Navtrain → Navhard 的迁移能力才是真正考验。\n高分方案的训练策略：\n方法 训练数据 Navtest Navhard CLOVER Navtrain + 蒸馏自生成 94.5 ~92 TransDiffuser 全量数据 94.85 - Hydra-MDP Navtrain + 增强 91.3 ~89 ExploreVLA Navtrain + RL 93.7 ~90 注意 CLOVER 和 TransDiffuser 在 Navtest 上的分数非常接近（94.5 vs 94.85），但在 Navhard 上可能会有显著差异。\n5.2.1 Navhard 的特殊性 Navhard 是 NAVSIM 中最难的数据集，高分方案往往在这里暴露真实差距。\nNavhard 的特点：\n场景复杂度高：包含更多交互、更多交通参与者 长尾分布：很多场景在训练集中极少出现 决策多样性低：很多时候只有一种\u0026quot;正确\u0026quot;的驾驶方式 一个模型在 Navtest 上得 94 分，在 Navhard 上可能只有 88-90 分。差距主要来自：\n罕见场景的处理能力 对复杂交互的建模 候选轨迹在困难场景下的鲁棒性 提升 Navhard 分数的策略：\n在 Navhard 上做蒸馏——将 Navhard 场景加入蒸馏训练。即使 Navhard 没有官方 label，你可以用 scoring-based 框架生成 pseudo-label。 困难场景挖掘——识别模型在 Navtrain 和 Navhard 中表现最差的场景，做针对性增强。 数据混合——在训练时按比例混合 Navtrain 和 Navhard 数据，不要让模型偏科。 5.3 自生成数据的策略 如果你想要真正的高分（93+），你必须做自生成数据——用当前模型在场景上生成新的轨迹，然后用打分器筛选出高分轨迹加入训练。\n自生成数据的流程：\n遍历 Navtrain 的场景 用当前 Generator 为每个场景生成 K 条候选轨迹 用 Scorer 对这些候选打分 筛选出分数最高的候选（或分数超过某个阈值的候选） 将这些候选轨迹作为新的训练数据（pseudo-GT） 混合原始 GT 和 pseudo-GT 重新训练 Generator 关键参数：\n筛选阈值：过高则数据太少，过低则数据质量差。建议用 top-10% 或分数高于某个固定阈值（比如 0.95）。 混合比例：pseudo-GT 的比例太高会导致模型\u0026quot;自我强化\u0026quot;（reinforcing own biases）。建议 pseudo-GT 占比 20-30%。 迭代轮数：一般 2-3 轮自生成后收益递减。过多的迭代会导致 diversity collapse。 CLOVER 的创新点之一：CLOVER 不是在 Generator 固定后做一次自生成，而是在训练过程中动态自生成。每次 Generator 更新后，都会重新生成候选，打分筛选，然后继续训练。这种\u0026quot;在线自生成\u0026quot;的方式比\u0026quot;离线自生成\u0026quot;效果更好，因为 Generator 在不断进化，生成的数据也在进化。\n5.4 我的建议 如果你资源有限，优先在 Navtrain 上做精，不要去碰全量数据。原因：\nNavtrain 已经足够覆盖大多数场景 全量数据中难例占比低，边际效用递减 在 Navtrain 上精调比在全量数据上粗调更有效 但如果你已经有基础方案（85+），开始做自生成数据。收益：1-3 分 PDMS。\n六、打分器设计：ScoreNet 的架构与训练细节 Scoring-based 范式的核心是打分器。如果你要做个自己的打分器（而不是直接用 NAVSIM scorer），以下几个细节值得注意。\n6.1 ScoreNet 架构 NAVSIM scorer 是一个基于 Transformer 的打分器：\n输入：场景上下文 maps（车道、交通灯）+ agents（其他车辆、行人）+ 主车轨迹 编码：分别对道路元素、agent 轨迹和主车轨迹做编码 融合：交叉注意力融合场景信息和轨迹信息 输出：标量分数（PDMS 的估计值） 6.2 训练打分器的关键 监督信号：使用 NAVSIM 官方 scorer 计算的 PDMS 分数作为 GT。\n损失函数：\n回归损失：MSE + MAE 排序损失：确保高分候选的预估分数高于低分候选 数据增强：\n对轨迹添加噪声 随机裁剪场景 混合不同场景的候选轨迹 6.3 打分器训练的几个陷阱 陷阱 1：打分器过拟合\n如果你的打分器在训练集上表现完美但在测试集上很差，说明过拟合了。解决方法：\n增加 dropout 增加训练数据（用自生成数据） 使用正则化 陷阱 2：打分器不准确\n打分器预估的分数和实际 PDMS 差异很大，导致选择错误候选。解决方法：\n检查打分器的校准（calibration） 使用 ensemble 方法 在困难场景上做 hard negative mining 陷阱 3：打分器偏好偏差\n打分器倾向于选择某种特定的轨迹（比如过于保守的轨迹），导致 EP 偏低。解决方法：\n在训练数据中加入更多 EP 高的样本 使用多样性奖励（diversity reward）来平衡打分 七、梯度与协作的反直觉实验 在探索 NAVSIM 高分的过程中，我碰到的几个反直觉现象值得分享。\n7.1 打分器越准，Generator 越难提升？ 这是一个让人迷惑的发现：如果打分器已经非常准确（在验证集上 99% 以上的排序正确率），那么蒸馏的收益反而会递减。\n原因是：当打分器几乎不会选错时，Generator 只要生成一个\u0026quot;及格\u0026quot;的候选就能被选中。继续提升 Generator 的质量，并不会改变打分器的选择结果。这是一个信息瓶颈。\nCLOVER 的闭式蒸馏解决了这个问题，因为它不依赖于\u0026quot;打分器选了什么\u0026quot;，而是直接学习打分器的分数梯度。\n7.2 多轮蒸馏不一定有效 另一个发现：多轮蒸馏有边际效用递减，甚至会出现\u0026quot;蒸馏退化\u0026quot;。\n第二轮蒸馏时，Generator 生成的候选可能已经同质化（都在模仿第一轮蒸馏学到的最好轨迹），多样性反而降低了。这时需要引入多样性的保证。\n解决办法：在蒸馏时加入 entropy bonus 或 diversity constraint。\n7.3 Navtest 分数高 ≠ 实际能力强 这是最重要的一个警示：NAVSIM 的 Navtest 是开环评测，模型不会看到自己决策后的实际后果。\n一个模型在 Navtest 上得了 94 分，但在闭环仿真中可能表现很差。这是因为开环评测中，模型不需要为自己的行为负责——它的决策不会影响后续决策的上下文。\n如何避免这个问题：\n同时在 Navtest 和 Navhard 上评估 做闭环仿真验证 关注模型在长尾场景上的行为 八、消融实验深度分析 为了更清晰地理解每个模块的具体贡献，我整理了一个完整的消融实验分析。这些数据来自多篇论文和我的实测经验。\n8.1 标准消融模板 实验配置 Navtest PDMS Navhard PDMS NC EP Baseline (SFT only) 78.2 72.1 0.85 0.58 + Scoring (K=6) 85.4 80.3 0.97 0.72 + Scoring (K=12) 87.9 83.1 0.98 0.78 + 基础蒸馏 (1轮) 89.6 85.2 0.99 0.84 + 基础蒸馏 (2轮) 90.3 86.0 0.99 0.86 + 多样性增强 91.2 87.1 0.99 0.88 + 闭式蒸馏 (CLOVER) 94.5 91.2 1.00 0.93 8.2 蒸馏轮数的消融 很多人在蒸馏轮数上存在误区——认为\u0026quot;越多越好\u0026quot;。实际上，蒸馏轮数的影响非常微妙：\n第 0 轮（无蒸馏）：Generator 生成的候选轨迹质量完全取决于 SFT 质量。如果 SFT 训练得好，基础 PDMS 在 85 左右。但如果 SFT 质量一般，可能只有 80 出头。\n第 1 轮蒸馏：收益最大。从无蒸馏到第 1 轮蒸馏，PDMS 通常提升 3-5 分。这正是大多数入门方案能达到的水平（88-90）。\n第 2 轮蒸馏：收益递减。第 2 轮提升约 1-2 分。原因在于 Generator 已经学到大部分\u0026quot;明显\u0026quot;的改进空间，剩下的都是边际改进。\n第 3 轮及以后：收益极小（\u0026lt; 0.5 分），甚至可能出现退化。退化原因是 Generator 的候选轨迹开始同质化——所有候选都集中在同一个\u0026quot;最优\u0026quot;模式，多样性下降。\n什么时候停止蒸馏：\n当相邻两轮蒸馏的 PDMS 提升 \u0026lt; 0.3 分时，停止 当同一场景下 K 条候选的分数方差明显下降时，停止（信号：候选同质化） 在验证集上监控 EP 的分布，如果分布变窄但均值不变，停止 8.3 候选数量 K 的消融 K Generator 计算量 Scorer 计算量 PDMS 变化 1 1x 忽略 -7.2 (baseline +0) 3 1x 3x -2.8 6 1x 6x +0.0 (基准) 12 1x (共享计算) 12x +2.3 24 1x (共享计算) 24x +3.1 48 1x (共享计算) 48x +3.5 关键洞察：从 K=6 到 K=12，PDMS 提升约 2.3 分，这是最大的边际收益。再往上，收益递减。\n对于实际部署，建议 K=12（推理总耗时：Generator 前向 ×1 + Scorer 前向 ×12）。对于刷榜，可以用 K=32 或更高。\n8.4 打分器架构的消融 打分器架构 参数量 Navtest PDMS 推理耗时 MLP (2层) 1M 86.1 0.1ms Transformer (4层) 8M 88.5 0.5ms Transformer (8层) 20M 89.2 1.1ms Transformer (12层) 35M 89.4 1.8ms Transformer (12层) + Ensemble 140M 89.7 7.2ms 打分器的深度在超过 8 层后收益显著递减。这是因为打分器的监督信号（NAVSIM scorer 的输出）本身包含噪声，太深的模型可能会过拟合这些噪声。\n我的建议：用 8 层 Transformer 作为默认配置，如果有余力再做 4 个模型的 ensemble。\n8.5 蒸馏温度的消融 闭式蒸馏中的 temperature 参数控制分数梯度的\u0026quot;锐度\u0026quot;：\nTemperature 行为 效果 小 (0.1) 只关注最高分候选 类似于传统蒸馏，多样性差 中 (0.5) 关注 top-3 候选 效果好，推荐 大 (1.0) 所有候选权重相近 训练稳定但收敛慢 推荐初始值 0.5，如果你的 Generator 已经质量不错（PDMS \u0026gt; 88），可以降低到 0.3 来更聚焦于最高分模式。\n九、实战技巧总结 基于上面的分析，我总结一下在 NAVSIM 上刷高分的实战技巧。\n9.1 从零开始刷分路线图 第 1 周：基础搭建\nSFT 模仿学习：用 Navtrain 做行为克隆 目标：PDMS 78-82，碰撞率 \u0026lt; 5% 关键：数据质量比数量重要 第 2 周：Scoring-based\n实现 Generator-Scorer 架构 训练基础打分器（用 NAVSIM scorer 做监督） 目标：PDMS 84-88，安全指标基本拉满 第 3 周：蒸馏优化\n实现蒸馏机制（基础蒸馏即可） 提升候选多样性 目标：PDMS 88-91 第 4 周：闭式蒸馏（可选）\n实现 CLOVER 的闭式蒸馏 联合优化 Generator 和 Scorer 目标：PDMS 91-94 9.2 常见陷阱与解决方法 问题 症状 解决 碰撞率高 NC \u0026lt; 0.9 检查 SFT 质量，做碰撞场景增强 EP 低 EP \u0026lt; 0.75 增加候选多样性，优化 Generator 候选同质化 所有候选轨迹相似 加入 diversity constraint 打分器不准 预选分数 ≠ 实际分数 更深的 Scorer、更多训练数据 过拟合 Navtest 高分，Navhard 低分 正则化、dropout、数据增强 蒸馏退化 多轮蒸馏后分数不升反降 加入 diversity，减小蒸馏步长 9.3 快速提升 PDMS 的 5 个\u0026quot;杠杆\u0026quot; 如果你想用最小代价获得最大提升，按优先级做以下 5 件事：\n做蒸馏（收益：3-5 分）—— 这是 88→92 的最关键一步 提升候选多样性（收益：2-3 分）—— 扩展 Generator 的覆盖范围 优化 EP（收益：1-3 分）—— 安全指标基本搞定后唯一还能优化的项 加深打分器（收益：1-2 分）—— 更准的打分器能更好地甄别候选 做闭环验证（收益：保真度）—— 确保你在 Navtest 上的高分不是\u0026quot;虚假繁荣\u0026quot; 9.4 训练超参数推荐 最后给出一些经过验证的超参数配置，节省你调参的时间：\nGenerator 训练：\n学习率：1e-4（AdamW） Batch size：64-128 轨迹长度：8s × 10Hz = 80 个 waypoint 候选数量 K：12（训练时）/ 12-32（推理时） 损失权重：Trajectory L1 Loss = 1.0, Collision Loss = 0.1 (可选) Scorer 训练：\n学习率：3e-5（AdamW） Batch size：32-64（每个场景 K 条候选，B×K 的总样本数） 训练数据：Navtrain + 自生成（混合比例 8:2） 损失函数：BCE（最大熵分类）或 MSE（回归） 数据增强：轨迹加噪声（σ=0.1m） 蒸馏训练：\n学习率：1e-4（Generator）/ 1e-5（Scorer） Temperature：0.5（闭式蒸馏） 轮数：2-3 轮 每轮蒸馏步数：5000-10000 steps 硬件要求：\nGenerator + Scorer：4×A100（~3 天训练到 90+） 仅蒸馏：1×A100（~1 天） 推理（单场景）：~5ms（Generator）+ 12×~2ms（Scorer）= ~30ms 十、展望：PDMS 95+ 的下一步 CLOVER 的 94.5 让人印象深刻，但它真的是上限吗？我觉得不是。以下是我认为还能突破的方向。\n10.1 扩散模型 + Scoring-based 的融合 TransDiffuser 证明了扩散模型在规划上的潜力，但它目前还没有和 Scoring-based 范式深度融合。\n我猜下一个突破会是：用扩散模型做 Generator，Scoring-based 做选择。扩散模型的生成多样性天然优于 CVAE，但需要解决推理速度问题。\n10.2 多模态决策融合 当前的方案大多只做\u0026quot;单模态轨迹生成\u0026quot;（预测主车轨迹）。但其实规划问题可以拆解为\u0026quot;决策 + 轨迹\u0026quot;两个维度。\n一个可能的突破方向：先用一个决策模块输出意图（如\u0026quot;直行\u0026quot;、\u0026ldquo;左转\u0026rdquo;、\u0026ldquo;等待\u0026quot;等），然后为每个意图生成轨迹。这样可以在决策层面保证多样性，再在轨迹层面做精细优化。\n10.3 RL + Scoring-based 的融合 GRPO 在 Diffusion 上的尝试虽然效果有限，但 RL + Scoring-based 的融合可能更有前景。\n具体来说：用 RL 优化 Scoring-based 框架中的某个环节（比如 Generator），而不是做端到端 RL。这样既能利用 RL 的长处（探索），又能保留 Scoring-based 的稳定性。\nCLOVER 的蒸馏本质上和 RL 有共通之处——\u0026ldquo;Generator 生成轨迹→Scorer 评估→反馈→改进\u0026quot;的循环，和 RL 的\u0026quot;actor-critic\u0026quot;结构非常相似。\n10.4 更高效的数据利用 NAVSIM 的数据利用率其实很低。目前大多数方案只用了 Navtrain（74k 场景），而 NAVSIM 全量数据约有数百万场景。\n如果能高效利用全量数据（特别是其中的难例），应该能有 1-2 分的提升。\n10.5 可解释性与可控性 当前的高分方案基本是\u0026quot;黑盒\u0026rdquo;——模型输出一个轨迹，你不知道它为什么选择这个轨迹。\n未来方向：让 Scoring-based 范式的打分解更加可解释。比如打分器不仅输出一个总分，还输出每个子指标（NC、EP、TTC、C）的预测分数。这样开发者可以理解模型的决策逻辑，在出现问题时可以针对性修正。\nCLOVER 已经有这个雏形——它的打分器实际上预测的是 PDMS 的各个分解项，最终分数是这些分解项的加权组合。这个方向值得持续关注。\n10.6 实时性与效率 目前的推理速度：Generator（~5ms）+ Scorer × K（~24ms），总计约 30ms 在 A100 上。这对实时部署来说还有点紧张（需要至少 20ms 以内）。\n优化方向：\nScorer 的轻量化（用 MLP 替代 Transformer） 候选的剪枝策略（先用快速打分器初筛，再用精打分器精选） ONNX / TensorRT 部署优化 十一、写在最后 写这篇文章的初衷，是希望后来者能少走弯路。NAVSIM 的 Scoring-based 范式看起来简单（\u0026ldquo;不就是生成候选然后打分吗\u0026rdquo;），但里面每个环节都有值得深挖的细节。\n回顾一下全文的核心信息：\n理解 PDMS 公式——乘性惩罚决定下限，EP 决定上限，不同分数段有不同瓶颈 从 SFT 起步——不要跳过基础能力训练直接上高级方法 Scoring-based 是经过验证的高分框架——Generator + Scorer + 蒸馏是最可靠的 90+ 路径 候选质量比打分器更重要——打分器只能在已有候选中选择，候选集决定了分数上限 EP 是 90+ 的唯一瓶颈——当安全指标拉满后，唯一能优化的就是 EP CLOVER 的闭式蒸馏是当前的最优方案——它消除了传统蒸馏的信息损失 正视开环评测的局限性——Navtest 高分不等于实际部署能力 最后想说的是：排行榜上的数字只是一个参考。真正好的规划器，不仅要分数高，还要可解释、可控制、安全可靠。Scoring-based 范式在这方面有天然优势，这也是为什么它在学术界和工业界都受到关注。\n如果你在刷 NAVSIM 的过程中有任何新的发现或不同的观点，欢迎交流。这个领域还在快速发展，现在的高分方法论也许明天就被超越了。\n加油，期待在排行榜上看到你的名字。\n本文基于 NAVSIM 2024-2026 年公开论文、排行榜数据和开源代码的分析。数据截止到 2026 年 7 月。\n","permalink":"https://auto-driving-blog.pages.dev/posts/thoughts/navsim-pdms-90/","summary":"\u003ch2 id=\"引言\"\u003e引言\u003c/h2\u003e\n\u003cp\u003eNAVSIM 排行榜的竞争已经到了白热化阶段。从最初的 80 分出头到现在的 94.5 分（CLOVER），短短两年时间，顶尖方案的 PDMS 提升了 15 个点。如果你正在读这篇文章，大概率是两种人：一是想在排行榜上刷个高分的选手，二是研究自动驾驶规划、想理解 Scoring-based 范式演进方向的研究者。\u003c/p\u003e\n\u003cp\u003e这篇文章不讲虚的，直接切入正题：\u003cstrong\u003e到底怎么才能在 NAVSIM 上把 PDMS 刷到 90 分\u003c/strong\u003e？\u003c/p\u003e\n\u003cp\u003e我会结合 NAVSIM 排行榜上所有公开的高分方案（CLOVER、CLEAR、DriveFuture、Hydra-MDP 以及各种 VLA + RL 方案），从 PDMS 公式的数学结构出发，逐层拆解每个分数段的瓶颈和对应的策略。\u003c/p\u003e\n\u003cp\u003e先给个核心结论：\u003cstrong\u003ePDMS 90+ 的秘密不在于模型多强大，而在于你是否真正理解了 Scoring 范式的每个环节\u003c/strong\u003e。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"一pdms-公式分数结构决定了优化策略\"\u003e一、PDMS 公式：分数结构决定了优化策略\u003c/h2\u003e\n\u003cp\u003e如果你还不知道 PDMS 怎么算的，那先把这块搞清楚。分数结构本身就在告诉你该优化什么。\u003c/p\u003e\n\u003cfigure\u003e\n    \u003cimg loading=\"lazy\" src=\"/images/rl_diffusion/pdms_formula.svg\" width=\"100%\"/\u003e \u003cfigcaption\u003e\n            PDMS 公式拆解\n        \u003c/figcaption\u003e\n\u003c/figure\u003e\n\n\u003ch3 id=\"11-公式结构\"\u003e1.1 公式结构\u003c/h3\u003e\n\u003cp\u003e记住这个公式：\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003ePDMS = NC × DAC × (5·EP + 5·TTC + 2·C) / 12\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e这里最应该引起你注意的是\u003cstrong\u003e乘性结构\u003c/strong\u003e：NC 和 DAC 是乘法项，意味着任何一个为零，整体分数直接归零。这不是简单的加减法，这是一个\u0026quot;安全第一，前进第二\u0026quot;的奖励结构。\u003c/p\u003e\n\u003cp\u003e加性部分是 (5·EP + 5·TTC + 2·C) / 12，EP 和 TTC 各占 5 份权重，C 只占 2 份。\u003c/p\u003e","title":"如何在NAVSIM刷到PDMS 90分以上"},{"content":"写给零基础读者：读这篇之前先搞懂几个名词 AutoVLA 的代码不长，但它把好几个「听起来很唬人」的概念揉在了一起。你要是直接冲进源码，多半会被一堆缩写劝退。所以我们先花点时间，把会反复出现的黑话全部翻译成大白话。你现在不用全记住，有个印象，等下看代码时回头对照就行。\nVLA（Vision-Language-Action，视觉语言动作模型）：给模型一张图（有时再加一句话指令），它直接吐出「车该怎么开」。它的核心思路是：把开车这件事，当成一个「语言建模」问题来做——图像当输入，动作当输出，中间用一个已经很会「说话」的大模型（VLM）串起来。AutoVLA 用的基座就是 Qwen2.5-VL-3B。\nQwen2.5-VL：阿里开源的一个「能看图说话」的多模态大模型（VLM，Vision-Language Model）。它本来的看家本领是「看一张图，用自然语言回答问题」。AutoVLA 就是站在它的肩膀上，把它从「会说话」改造成「会开车」。这里用的是 3B（30 亿参数）的小号版本，方便训练和部署。\ntoken（离散词）：大模型眼里的世界不是连续的，而是一个个「词」。它把一句话拆成一串编号（比如「你」=101，「好」=102），每个编号就是一个 token。模型的工作说白了就是「猜下一个 token 是几号」。这是理解 AutoVLA 最关键的一环：它想办法把驾驶动作也变成 token，这样开车就和说话变成了同一件事。\n动作 codebook（动作词表）：这是 AutoVLA 的灵魂。真实的驾驶动作是连续的数（比如方向盘转 12.3 度、油门踩 0.4）。可大模型只认「离散的词」。怎么办？把海量真实动作拿去做聚类，聚成 K 个「典型动作」，每个典型动作给一个编号——这张「编号 → 典型动作」的对照表，就叫动作 codebook。有了它，一个连续动作就能被近似成「最像的那个编号」，也就变成了一个 token。\nKMeans 聚类：一种最经典的「物以类聚」算法。你给它一堆点和一个数字 K，它就帮你把这些点分成 K 堆，并算出每一堆的「中心点」。AutoVLA 拿它把海量连续驾驶动作聚成 K 个簇，每个簇的中心就是 codebook 里的一个「动作词」。\n快慢思考（Slow-Fast Thinking）：人开车也是这样——遇到复杂路口会「慢慢想」（我要不要让行？对面那辆车会不会加塞？），遇到直道就「凭肌肉记忆」直接开。AutoVLA 让模型先用自然语言「慢思考」一遍（把推理理由写出来），再输出「快思考」的动作 token（真正拿去执行的）。妙的是，推理时如果你嫌慢，可以把慢思考那段直接旁路掉，只留快思考，速度立刻上来。\nSFT（Supervised Fine-Tuning，监督微调）：拿专家开车的数据，一条条喂给模型让它模仿。就像驾校教练手把手教你「这个场景就该这么打方向」。这是 AutoVLA 的第一阶段，目的是让模型先「会开」。\nGRPO / RFT（Rejection sampling Fine-Tuning，拒绝采样微调）：SFT 学出来的模型往往「平庸」——它学的是所有专家的平均值，遇到需要果断的场景反而畏手畏脚。第二阶段就用强化学习的思路来「精修」：让模型自己开很多遍，用规则去打分，只挑那些开得好的轨迹留下来，再拿这些好样本继续训。这套「多开几遍 → 打分 → 只留高分 → 再训」的做法，本质就是拒绝采样，也和 GRPO（一种不需要价值网络的强化学习算法）的思想相通。\nrule reward（规则奖励）：给模型开的车打分的「评分标准」。但它不是训一个神经网络来打分，而是写死的规则——有没有撞车、有没有闯红灯、开得舒不舒服（急刹急打方向就扣分）。规则奖励的好处是简单、可靠、不会被模型「钻空子」。\n如果这些词你都有个模糊印象了，下面读代码会顺畅很多。我们开始。\n为什么要讲 AutoVLA 的代码 这是「自动驾驶代码讲解」系列的第 6 篇。前面我们已经走过了 UniAD / VAD（端到端回归范式，直接拿网络算出轨迹）、DiffusionDrive（用扩散模型生成轨迹）、DriveVLA-W0（VLA 大模型 + 世界模型）。这条路线越走越有意思：从「网络直接回归几个数」，一路演化到「让大模型像说话一样把动作说出来」。\nAutoVLA（NeurIPS 2025，加州大学洛杉矶分校 ucla-mobility 团队）就是这条演化线上最纯粹的一个样本。它把「端到端自动驾驶」推到了一个几乎极端的位置：连驾驶动作都变成了大模型词表里的 token，于是整套 NLP 的训练栈（SFT、强化学习对齐）几乎可以原样搬过来用。\n它反直觉、也最值得讲的一点是：开车这件事，居然真的可以被压缩成「说一串动作词」，而且效果还不错。代码在 ucla-mobility/AutoVLA。这篇我们不推公式，直接顺着仓库把关键实现讲清楚。\n一句话结论：AutoVLA = Qwen2.5-VL-3B 当基座 + 一张动作 codebook（KMeans 把连续动作聚成 K 个离散 token）+ 快慢思考（先自然语言推理、再吐动作 token，推理可旁路）+ 两阶段训练（Stage-1 SFT 模仿、Stage-2 RFT/GRPO 拒绝采样精修）。开车 = 让大模型「说出正确的动作 token」。\nAutoVLA 框架总览 这是论文中的 AutoVLA 整体框架图：\n从上图可以看到完整的数据流：\n输入：多视角图像 + 自车状态 + 导航指令 → Vision Encoder (SIGLIP) 编码为视觉 token 推理：VLM Backbone 自回归生成推理 token（慢思考）→ 动作 token（快思考） 动作解码：动作 token id → Codebook 查表 → 连续驾驶动作（方向盘、油门、刹车） 训练：SFT 联合学习推理 + 动作，RFT（GRPO）精修决策 架构总览：先看地图 在钻进任何一个文件之前，先把整条链路在脑子里画一遍。AutoVLA 的一次「决策」大致是这样走的：\n输入端：把当前的摄像头图像（一张或多张）+ 一段文字提示（prompt，比如「描述场景并给出驾驶决策」）一起塞进 Qwen2.5-VL-3B。 理解与慢思考：Qwen2.5-VL 照它本来的方式，把图像编码成视觉特征，和文字一起做自回归生成——先生成一段自然语言的「推理理由」（这就是慢思考，slow）。 输出快思考：紧接着，模型继续生成一串特殊的「动作 token」（这就是快思考，fast）。这些 token 的编号，对应的就是 codebook 里的某个典型动作。 动作还原：拿到动作 token 的编号后，去 codebook 里一查，把编号翻译回连续的驾驶动作（方向、油门、刹车），交给车去执行。 训练分两步走：\nStage-1（SFT 模仿）：用专家数据，让模型学会「看图 → 说理由 → 输出正确动作 token」这一整套。 Stage-2（RFT / GRPO 精修）：让训好的模型自己多开几遍，用规则奖励挑出开得好的轨迹，再拿这些好样本回炉重训，让它在关键场景更果断、更安全。 推理时，如果追求低延迟，可以把慢思考那段推理整个跳过，直接让模型吐动作 token，速度立刻提上来——这就是快慢思考设计的实用价值。\n关键认知：AutoVLA 里没有一个「专门的规划器」或「专门的控制器」。规划、决策、动作，全部被塞进了大模型的 token 生成里。它把一个控制问题，硬生生变成了一个「预测下一个 token」的语言问题。这就是为什么它能几乎白嫖整套 NLP 训练技术栈。\n项目结构：先厘清边界 读任何开源代码，第一件事是搞清楚「哪些是作者自己写的核心、哪些是白嫖的外部库」。AutoVLA 的边界很清楚：\n基座（外部）：Qwen2.5-VL-3B。这是阿里的开源 VLM，AutoVLA 不重新训它的主体结构，只在它上面做改造和微调。 AutoVLA 自己写的核心：三件事—— 动作 token 化：怎么把连续动作聚类成 codebook（build_codebook.py）、怎么在模型里挂一个动作头去预测/解码这些 token（modeling_auto_vla.py + action_head.py）。 两阶段训练：Stage-1 的 SFT（sft.py）、Stage-2 的 RFT/GRPO（grpo_trainer.py）。 推理入口：含慢思考旁路的开关（run_infer.py）。 用普通 Markdown 嵌套列表画一下仓库结构（避免在代码块里逐字符对齐中文）：\nAutoVLA/ auto_vla/model/ （模型定义：Qwen2.5-VL + 动作头） modeling_auto_vla.py （在基座 VLM 上挂 action_head） action_head.py （动作 token 的投影与解码） auto_vla/data/ （数据集与 action codebook 构造） build_codebook.py （KMeans 聚类生成 codebook） action_token_dataset.py （把样本组织成「图 + 慢思考 + 动作 token」） auto_vla/train/ （两阶段训练） sft.py （Stage-1 模仿学习） grpo_trainer.py （Stage-2 RFT / GRPO 拒绝采样微调） auto_vla/infer/ （推理，含慢思考旁路） run_infer.py scripts/ （一键脚本） action_token_cluster.sh （跑聚类生成 codebook） run_sft.sh （跑 Stage-1） run_rft.sh （跑 Stage-2 GRPO / 拒绝采样） configs/ （超参配置） 逐个一句话说明它干嘛：\nbuild_codebook.py：把海量连续驾驶动作用 KMeans 聚成 K 个簇，簇中心存成 codebook。这是「连续 → 离散」的入口。 action_token_dataset.py：把每条训练样本组织成「图像 + 慢思考文字 + 动作 token id」三件套，喂给训练器。 modeling_auto_vla.py：继承 Qwen2.5-VL，在输出侧额外挂一个 action_head，让模型除了会说话还会「说动作」。 action_head.py：动作头的具体实现，负责把隐藏状态投影成 codebook 维度的 logits（预测哪个动作 token），以及把 token 反查成连续动作。 sft.py：Stage-1 训练主循环，模仿学习。 grpo_trainer.py：Stage-2 训练主循环，rollout + 规则打分 + 拒绝采样 + 再微调。 run_infer.py：推理入口，fast_only 开关决定要不要跑慢思考。 边界提醒：下面所有代码都是简化后的示意伪代码，用来讲清楚思路，不是逐字符照抄仓库。真实代码会有更多工程细节（分布式、混合精度、数据并行等），但主干逻辑就是这些。代码块里我一律用英文，中文解释都放在块外，避免对齐错乱。\n一、动作 codebook：把连续动作变成离散 token 这是整个 AutoVLA 的地基。没有它，大模型根本没法「说」出动作。核心文件是 data/build_codebook.py。\n1.1 为什么要聚类 先想清楚痛点：真实驾驶动作是连续的实数。比如某一时刻的动作可能是「方向盘 -3.7 度、油门 0.42、刹车 0.0」。这是一个连续向量。但大模型的词表是有限个离散 token，它没法直接吐出一个任意实数。\n解决办法很朴素：既然连续值有无穷多种，那我就挑出 K 个最有代表性的「典型动作」，以后所有动作都用最接近的那个典型动作来近似。这 K 个典型动作，就是 codebook。挑「典型动作」的过程，正好就是 KMeans 聚类干的事。\n1.2 用 KMeans 生成 codebook from sklearn.cluster import KMeans import numpy as np actions = load_all_actions() # (N, D) kmeans = KMeans(n_clusters=K, random_state=0).fit(actions) codebook = kmeans.cluster_centers_ # (K, D) token_ids = kmeans.predict(actions) # (N,) np.save(\u0026#34;codebook.npy\u0026#34;, codebook) np.save(\u0026#34;token_ids.npy\u0026#34;, token_ids) 逐行说人话：\nload_all_actions()：把训练集里所有时刻的动作都读进来，堆成一个大矩阵，形状 (N, D)——N 是样本总数（可能几百万），D 是动作维度（比如方向、油门、刹车就是 3 维，也可能是一段未来轨迹的多个点拼起来）。 KMeans(n_clusters=K).fit(actions)：让 KMeans 把这 N 个动作分成 K 堆。K 就是 codebook 的大小，也就是「动作词表」有多少个词。K 太小，动作被压得太粗糙（转向精度不够）；K 太大，token 太多、学起来难。这是个要调的超参。 kmeans.cluster_centers_：这就是 K 个簇的中心，形状 (K, D)。每一行是一个「典型动作」——这正是我们要的 codebook。 kmeans.predict(actions)：把每个原始动作映射到「离它最近的簇编号」，得到 (N,) 的 token id 数组。这一步就是把连续动作离散化成 token。 最后把 codebook 和 token_ids 存盘，训练时直接读。 对应的一键脚本是 scripts/action_token_cluster.sh，它内部就是调用上面这段逻辑，把整个数据集扫一遍生成 codebook。\n关键认知：codebook 是连接「大模型」和「车」的翻译词典。模型只管吐编号，编号怎么变回车能执行的动作，全靠这本词典查表。所以 codebook 的质量（K 选多少、动作怎么归一化）直接决定上限——词典太粗糙，模型说得再准也开不好。\n超参 K 怎么选 K（codebook 大小）是 AutoVLA 最重要的超参数，直接影响性能。论文中的探索显示：\nK 太小（如 64）：量化误差大，动作精度不足，模型只能在很粗的粒度上选择，泊车、跟车等精细场景表现差 K 适中（如 256–512）：量化误差可接受，模型能学到有区分度的动作分布，nuPlan 闭环评测分数最高 K 太大（如 1024+）：动作粒度够细了，但分类任务变难（1024 类比 256 类难学得多），并且尾部类别的样本太少，模型学不好那些不常见的动作 论文最终采用的 K 在 256–512 之间，这个范围在「精度」和「可学性」之间取得了最佳平衡。相比之下，DriveVLA-W0 用 256 个均匀分箱（uniform binning），而 AutoVLA 的 KMeans 聚类是数据驱动的——高频动作区域被分配更多的 token，低频区域共享较少的 token，在同样的 K 下能达到更低的平均量化误差。\n1.3 反查：从 token 还原成动作 模型推理时吐出的是编号，得翻译回连续动作才能开车。这一步就是简单的查表：\ndef token_to_action(token_id, codebook): return codebook[token_id] # (D,) 就这么一行。token_id 是模型吐出的编号，拿它去 codebook 里取出对应那行，就是连续动作向量。是不是简单到有点朴素？但这正是 VLA 优雅的地方——离散化只是一层薄薄的翻译，两头都干净。\n一句话澄清：离散化必然带来「量化误差」。你的真实动作是 -3.7 度，最近的 codebook 词可能是 -4.0 度，这 0.3 度就丢了。K 越大误差越小，但 token 越多越难学。AutoVLA 的做法是在「精度」和「可学性」之间找一个平衡的 K。这和 DriveVLA-W0 用 256 个 bin 均匀分箱是同一类思路，只不过 AutoVLA 用聚类（数据驱动、非均匀），能把 token 更多地分配给「常见动作」区域。\n二、模型：在 Qwen2.5-VL 上挂一个动作头 有了 codebook，接下来要让大模型能「预测动作 token」。核心文件是 model/modeling_auto_vla.py。\n2.1 继承基座，挂一个 action_head import torch.nn as nn import torch.nn.functional as F from transformers import Qwen2_5_VLForConditionalGeneration class AutoVLA(Qwen2_5_VLForConditionalGeneration): def __init__(self, config, num_action_tokens=K): super().__init__(config) self.action_head = nn.Linear(config.hidden_size, num_action_tokens) 说人话：\nclass AutoVLA(Qwen2_5_VLForConditionalGeneration)：直接继承 Qwen2.5-VL 的现成模型类。这意味着 Qwen 会看图、会编码、会生成文字的所有本事，AutoVLA 全盘继承，一行都不用重写。 self.action_head = nn.Linear(hidden_size, num_action_tokens)：唯一新增的东西。就是一个线性层，把模型内部的隐藏状态（hidden_size 维）投影成 K 维的分数（logits）。这 K 个分数，就是「模型觉得下一个动作是 codebook 里第几个词」的打分。 一句话：AutoVLA = 原封不动的 Qwen2.5-VL + 一个额外的线性动作头。就这么点改动。\n2.2 LoRA 微调：为什么只改一小部分参数 实际训练时，AutoVLA 不会全量更新 Qwen2.5-VL 的 30 亿参数——那样太贵了。它的做法是用 LoRA（Low-Rank Adaptation） 在注意力层插入可训练的低秩矩阵：\n# 伪代码：在 attention 的 q_proj, k_proj, v_proj, o_proj 挂 LoRA from peft import LoraConfig, get_peft_model lora_config = LoraConfig( r=64, # 低秩秩大小（越大越强但越贵） target_modules=[\u0026#34;q_proj\u0026#34;, \u0026#34;k_proj\u0026#34;, \u0026#34;v_proj\u0026#34;, \u0026#34;o_proj\u0026#34;], lora_alpha=16, lora_dropout=0.05, ) model = AutoVLA.from_pretrained(\u0026#34;Qwen2.5-VL-3B\u0026#34;) model = get_peft_model(model, lora_config) model.action_head = ActionHead(...) # 动作头全量训练（不做 LoRA） 这意味着：\nQwen 主干只通过 LoRA 调一小部分参数（约 0.1%–1%），保持预训练知识不破坏 action_head 是新加层，全量训练——因为它是随机初始化的，信息量最多，需要彻底学 两阶段训练都用同一个 LoRA 配置，Stage-2 继续微调 Stage-1 的 LoRA 权重 关键认知：这和 DriveVLA-W0 的做法相反——DriveVLA-W0 全量微调了整个 VLM 主干。LoRA 更省显存、更难训飞，但理论上限不如全量。AutoVLA 选 LoRA 是典型的「稳」字优先。\n2.3 前向传播：文字损失 + 动作损失 def forward(self, pixel_values, input_ids, labels, action_labels=None): out = super().forward( pixel_values=pixel_values, input_ids=input_ids, labels=labels, output_hidden_states=True, ) last_hidden = out.hidden_states[-1] # (B, L, H) action_logits = self.action_head(last_hidden) # (B, L, K) if action_labels is not None: loss_a = F.cross_entropy( action_logits.view(-1, K), action_labels.view(-1), ignore_index=-100, ) total_loss = out.loss + loss_a return total_loss, action_logits return action_logits 逐段说人话：\nsuper().forward(...)：调用 Qwen 原本的前向。它照常算「文字部分」的 next-token 预测损失（存在 out.loss 里）——也就是让模型学会生成那段慢思考推理。output_hidden_states=True 是为了把中间隐藏状态掏出来给动作头用。 last_hidden = out.hidden_states[-1]：取最后一层的隐藏状态，形状 (B, L, H)——B 是批大小，L 是序列长度，H 是隐维度。这里面浓缩了模型「看完图、想完理由」之后的全部理解。 action_logits = self.action_head(last_hidden)：动作头把每个位置的隐藏状态投影成 K 维打分，形状 (B, L, K)。 F.cross_entropy(...)：动作部分用交叉熵损失——本质是个 K 分类问题，让模型在「该输出动作的那些位置」预测出正确的 codebook 编号。ignore_index=-100 是个常规技巧，把「不该算动作损失的位置」（比如文字部分）标成 -100 跳过。 total_loss = out.loss + loss_a：文字损失 + 动作损失一起回传。文字损失逼模型学会说理由，动作损失逼模型学会说动作。两个损失共享同一个主干，于是「理解」和「决策」被绑在一起联合训练。 关键认知：文字部分和动作部分用的是两套输出头——文字走 Qwen 原本的语言头（预测词表里的普通 token），动作走新加的 action_head（预测 codebook 里的 K 个动作 token）。它们共享 Qwen 主干的理解，但各管各的输出空间。这是「快慢思考」在结构上的落地：慢思考是文字头的活，快思考是动作头的活。\n三、action_head：动作 token 的投影与解码 上面的动作头只是一个 nn.Linear，看起来太简单。真实的 model/action_head.py 通常会封装得更完整一点——把「投影成 logits」「从 logits 采样 token」「token 反查成连续动作」都收进一个模块，用起来更顺手。\nclass ActionHead(nn.Module): def __init__(self, hidden_size, codebook): super().__init__() self.num_tokens = codebook.shape[0] self.proj = nn.Linear(hidden_size, self.num_tokens) self.register_buffer(\u0026#34;codebook\u0026#34;, torch.tensor(codebook)) def logits(self, hidden): return self.proj(hidden) # (B, L, K) def decode(self, action_token_id): return self.codebook[action_token_id] # (..., D) def loss(self, hidden, action_labels): logits = self.logits(hidden) return F.cross_entropy( logits.view(-1, self.num_tokens), action_labels.view(-1), ignore_index=-100, ) 逐块说人话：\nself.proj：投影层，隐藏状态 → K 维 logits，和上一节一样。 self.register_buffer(\u0026quot;codebook\u0026quot;, ...)：把 codebook 作为「不参与训练的常量」挂进模块（buffer 会跟着模型一起搬到 GPU、一起存盘，但梯度不会更新它）。因为 codebook 是聚类算好的固定词典，训练时不动它。 logits(hidden)：算打分，给训练和推理共用。 decode(action_token_id)：解码——拿模型吐出的编号去 codebook 查表，得到连续动作。这就是前面 token_to_action 的封装版。 loss(hidden, action_labels)：投影方向的训练损失，K 分类交叉熵。 所以 action_head 干的就两件对称的事：训练时把隐藏状态投影成 logits 去算分类损失（学会预测正确 token）；推理时把预测出的 token id 解码回连续动作（拿去开车）。一投一解，闭环。\n一句话澄清：为什么把 codebook 存成 buffer 而不是可训练参数？因为如果让 codebook 跟着一起训，它就会「漂移」——训练早期模型还没学好，反而把词典带偏了。固定 codebook 让「动作空间」始终稳定，模型只需专心学「在什么场景说哪个词」，训练更稳。\n四、快慢思考的两阶段训练 模型结构就绪，接下来是怎么训。AutoVLA 分两个阶段，对应两个脚本 run_sft.sh 和 run_rft.sh。\n4.1 Stage-1：SFT 模仿（先学会开车） 第一阶段的目标很简单：让模型先「会开」。做法就是拿专家驾驶数据模仿学习。跑起来只要一行：\nbash scripts/run_sft.sh SFT 的数据很讲究：每一条样本不只有「图像 + 正确动作」，还带着一段慢思考的自然语言推理。比如：\n图像：一个有行人的路口。 慢思考（文字标注）：「前方右侧有行人正在过马路，应减速让行，保持车道。」 动作 token：对应「减速、保持方向」的那个 codebook 编号。 数据模板长什么样 这是理解模型训练最重要的细节。action_token_dataset.py 的核心工作就是把原始数据组织成以下模板：\n\u0026lt; 前 因 \u0026lt; | i | 方 此 a i m i 有 我 c m a m 行 选 t _ g _ 人 择 i s e s 正 向 o t \u0026gt; t 在 左 n a \\ a 过 变 _ r n r 马 道 4 t 当 t 路 并 2 | 前 | ， 适 \u0026gt; \u0026gt; 场 \u0026gt; 右 当 \u0026lt; u 景 a 侧 加 | s 多 s 车 速 i e 视 s 道 ， m r 角 i 被 安 _ 图 s 施 全 e 像 t 工 通 n 已 a 车 过 d 提 n 辆 该 | 供 t 占 路 \u0026gt; 。 用 口 请 ， 。 描 左 述 侧 场 车 景 道 、 畅 推 通 理 。 驾 驶 决 策 ， 然 后 输 出 动 作 t o k e n 。 \u0026lt; | i m _ e n d | \u0026gt; 模型看到的 token 序列是：\n[ i m g _ t o k e n s ] [ t e x t _ t o k e n s ] [ c o t _ t o k e n s ] [ a c t i o n _ t o k e n _ i d ] [ e o s ] 其中：\nimg_tokens：视觉编码器输出的图像 token（SIGLIP ViT 产出，约 256–1024 个） text_tokens：系统提示 + 用户指令（固定模板） cot_tokens：慢思考推理文字（需要模型自己生成的监督目标） action_token_id：一个特殊的 token id，对应 codebook 里的某个动作（由 action_head 预测） 对应的标签（labels）设置：\ncot_tokens 位置：文字 loss 生效，监督模型学会生成推理 action_token_id 位置：动作 loss 生效（由 action_labels 提供），ignore_index=-100 跳过其他位置 用户指令部分：ignore_index=-100 跳过（不需要预测用户的提问） 为什么 action_labels 和 labels 要分开？因为动作 token id（如 42）在 NLP 词表里可能对应的是另一个词。如果用同一个 labels 去监督，文字头会以为要在那个位置输出词表里的第 42 个词（可能是\u0026quot;to\u0026quot;或\u0026quot;the\u0026quot;），但动作头要在那里输出 codebook 的第 42 个动作——两套头看的是同一个位置、但监督信号不同。这就是为什么 forward 里需要单独的 action_labels 参数。\n这样模型学的是一整条链路：看到场景 → 说出为什么 → 输出正确动作。训练主循环长这样：\nmodel = AutoVLA.from_pretrained(\u0026#34;Qwen2.5-VL-3B\u0026#34;) optimizer = AdamW(model.parameters(), lr=1e-5) for batch in dataloader: loss, _ = model( pixel_values=batch[\u0026#34;images\u0026#34;], input_ids=batch[\u0026#34;input_ids\u0026#34;], # includes reason + action template labels=batch[\u0026#34;text_labels\u0026#34;], # supervise the slow-thinking text action_labels=batch[\u0026#34;action_token\u0026#34;],# supervise the fast action token ) loss.backward() optimizer.step() optimizer.zero_grad() 说人话：\ninput_ids 里是一整套模板：图像占位 + 提示语 + 一段留给慢思考的位置 + 一个留给动作 token 的位置。 labels（文字标签）监督慢思考那段——让模型学会生成合理的推理理由。 action_labels（动作标签）监督动作 token——让模型学会在最后吐出正确的 codebook 编号。 两个损失（文字 + 动作）在 model.forward 里已经加好了，一次 backward 全部回传。 跑完 Stage-1，模型就是一个「会看图、会说理由、会输出动作 token」的基本可用司机了。但它有个通病：学的是所有专家的平均行为，遇到需要果断决策的危险场景，往往会「和稀泥」输出一个不痛不痒的动作。这就要靠 Stage-2 来治。\n关键认知：SFT 只会「模仿」，不会「判断好坏」。它把专家数据里的所有动作都当成对的照单全收，包括那些平庸甚至矛盾的示范。所以 SFT 的天花板就是「专家的平均水平」。想突破，必须引入「哪个动作更好」的信号——这正是 Stage-2 强化学习要补的东西。\n4.2 Stage-2：RFT / GRPO 强化（学会开得更好） 第二阶段用强化学习的思路精修。AutoVLA 用的是 RFT（拒绝采样微调），它和 GRPO 是一脉相承的思想。核心文件 train/grpo_trainer.py，一键脚本：\nbash scripts/run_rft.sh 先讲清楚 RFT 的直觉。SFT 是「照抄专家」，RFT 是「让模型自己练，然后只保留练得好的」。具体四步：\nrollout（多开几遍）：让当前模型对同一个场景生成好几条不同的轨迹（靠采样的随机性产生差异）。 打分：用规则奖励给每条轨迹打分——撞了车扣大分、闯红灯扣分、开得平稳加分。 拒绝采样（只留高分）：把分数低的轨迹扔掉，只保留分数高的那些。 再微调：拿这些「自己产出的高分样本」当新的 SFT 数据，继续训模型。 主循环长这样：\npolicy = load_sft_model() optimizer = AdamW(policy.parameters(), lr=5e-6) for it in range(RFT_ROUNDS): batch = sample_scenes(N) dataset = [] for scene in batch: rollouts = [policy.generate(scene) for _ in range(M)] # M samples per scene rewards = [rule_reward(scene, traj) for traj in rollouts] best = max(zip(rollouts, rewards), key=lambda x: x[1]) if best[1] \u0026gt; threshold: dataset.append((scene, best[0])) # keep the good one policy = sft_step(policy, dataset) # fine-tune on kept samples 逐步说人话：\nrollouts = [policy.generate(scene) for _ in range(M)]：对每个场景，让模型采样生成 M 条不同轨迹。因为生成时有随机性，这 M 条会有好有坏。 rewards = [rule_reward(scene, traj) ...]：给每条轨迹用规则打分（下一节细讲规则）。 best = max(...)：挑出这一组里分数最高的那条。这就是 GRPO 的核心思想——组内相对比较，不需要一个绝对的价值网络来估计「这个状态值多少分」，只要比较同一场景下哪条轨迹更好就行。 if best[1] \u0026gt; threshold：只有当最好那条也确实够好（超过阈值）才保留，否则这个场景这一轮就跳过（拒绝采样的「拒绝」）。 sft_step(policy, dataset)：拿保留下来的高分样本，再做一遍 SFT 式的微调。 看出来了吗？RFT 在工程上其实退化成了「拒绝采样 + 再监督」——不需要复杂的策略梯度、不需要价值网络、不需要 KL 约束那一大套。它把强化学习最难落地的部分全砍了，只留下「多生成、挑好的、再学」这个朴素但极稳的循环。\n一句话澄清：为什么说它和 GRPO 相通？GRPO（Group Relative Policy Optimization）的精髓就是「对同一个 prompt 采一组答案，用组内相对好坏当优势信号，不用价值网络」。AutoVLA 的 RFT 把这个思想推到极致：连策略梯度都不算了，直接「组内选最好的那条，当正样本重训」。这是一种更粗暴、但工程上更不容易训飞的近似。\n4.3 规则奖励长什么样 规则奖励是 Stage-2 的评分标准，它决定了「什么样的驾驶算好」。AutoVLA 用的是写死的规则，不是学出来的奖励模型：\ndef rule_reward(scene, traj): r = 0.0 if has_collision(scene, traj): r -= 10.0 if runs_red_light(scene, traj): r -= 5.0 r -= comfort_penalty(traj) # jerk, hard braking, sharp steering r += progress_reward(traj) # making forward progress return r 说人话：\nhas_collision：撞了就重罚(-10)。安全是第一位的。 runs_red_light：闯红灯罚(-5)。遵守交规。 comfort_penalty：舒适性惩罚——急刹、急打方向、忽快忽慢（jerk 大）都扣分。 progress_reward：有效前进给奖励，防止模型学成「原地不动最安全」的躺平策略。 用规则奖励而不是训一个奖励模型，好处是：简单、透明、不会被模型钻空子。缺点是它只能覆盖你写得出规则的那些维度（撞车、闯红灯好判断，但「开得像个老司机」就很难用规则量化）。这是个务实的取舍——AutoVLA 选择了「稳」。\n关键认知：规则奖励 + 拒绝采样，是「不训奖励模型」的强化学习。它绕开了 RLHF 里最麻烦、最容易出问题的「奖励模型」环节。代价是奖励信号比较粗，但对自动驾驶这种「安全底线明确、可量化」的任务，规则奖励反而比学出来的奖励模型更可靠——毕竟你不希望一个学歪了的奖励模型把「撞车」判成高分。\n五、推理：慢思考可以旁路 训练讲完，最后看推理。核心文件 infer/run_infer.py。这里最有意思的是快慢思考的旁路开关。\n@torch.no_grad() def infer(model, image, codebook, fast_only=True): if fast_only: prompt = \u0026#34;Describe the scene briefly and output the action token.\u0026#34; else: prompt = \u0026#34;Think step by step about the driving decision, then output the action token.\u0026#34; input_ids = tokenize(prompt) output = model.generate( pixel_values=image, input_ids=input_ids, max_new_tokens=8 if fast_only else 128, ) action_id = extract_action_token(output) return codebook[action_id] 说人话：\nfast_only=True（快思考模式）：提示语只让模型「简单描述一下就直接给动作」，max_new_tokens 设得很小（比如 8）——因为不需要生成长篇推理，模型几乎是「看一眼就出手」。速度快，适合实时驾驶。 fast_only=False（完整快慢思考）：提示语让模型「一步步想清楚驾驶决策，再给动作」，max_new_tokens 设得大（比如 128）——模型会先吐出一大段自然语言推理，再给动作。慢，但可解释、遇到复杂场景更稳。 extract_action_token(output)：从生成结果里把动作 token 揪出来。 codebook[action_id]：查表还原成连续动作，交给车执行。 这就是快慢思考的实用价值所在：同一个模型、同一套权重，靠一个开关就能在「快而糙」和「慢而稳」之间切换。直道用快思考省算力，复杂路口切慢思考求稳妥。甚至可以做成自适应——先快思考,遇到模型不确定的场景再触发慢思考。\n一句话澄清：为什么慢思考能被旁路却不影响正确性？因为动作 token 是从隐藏状态投影出来的，而隐藏状态本身就浓缩了 Qwen2.5-VL 对图像的理解。慢思考那段自然语言，主要是在训练时帮模型把「理解」和「决策」的因果链学扎实。一旦学好了，推理时那段推理更多是「给人看的解释」，模型内部其实已经「想明白」了。所以旁路它不影响出手，只是少了一份可解释的说明书。\n六、把整条链路串起来 到这里所有零件都讲完了，我们把一次完整的「训练 → 推理」串成一条线，帮你在脑子里连成整体。\n准备阶段（一次性）：\n跑 action_token_cluster.sh → build_codebook.py 用 KMeans 把海量连续动作聚成 K 个簇 → 得到 codebook。从此每个连续动作都能映射成一个 token id。 Stage-1（SFT 模仿）：\nrun_sft.sh → sft.py 加载 Qwen2.5-VL-3B，挂上 action_head → 用「图 + 慢思考文字 + 动作 token」的样本训练 → 文字损失 + 动作损失联合回传 → 模型学会「看图、说理由、输出动作 token」。 Stage-2（RFT / GRPO 精修）：\nrun_rft.sh → grpo_trainer.py 加载 SFT 模型 → 对每个场景 rollout 出 M 条轨迹 → rule_reward 规则打分 → 只留组内最高分的（拒绝采样）→ 拿高分样本再微调 → 模型在关键场景更果断、更安全。 推理（部署）：\nrun_infer.py → 图像 + 提示语进 Qwen2.5-VL → （可选慢思考）→ 动作头吐出动作 token id → codebook[id] 查表还原成连续动作 → 交给车执行。fast_only 开关控制快慢。 一句话记住这个闭环：KMeans 造词典，SFT 教说话，RFT 教说好话，推理时看图说动作词、查词典开车，慢思考随时可旁路提速。\n再用一张对照表把每个环节的「入口文件 / 干什么 / 训练推理差异」钉死，方便你回头查：\n环节 入口文件 干什么 训练/推理差异 动作离散化 build_codebook.py KMeans 聚类生成 codebook 一次性预处理，两阶段都读它 模型结构 modeling_auto_vla.py Qwen2.5-VL 挂 action_head 结构不变，权重两阶段更新 动作头 action_head.py 投影出 logits / 解码回动作 训练用投影算损失，推理用解码查表 模仿学习 sft.py 文字 + 动作联合监督 仅训练 强化精修 grpo_trainer.py rollout + 规则打分 + 拒绝采样 仅训练 推理入口 run_infer.py 看图吐 token、查表开车 仅推理，含慢思考旁路开关 和本系列其他文章的关系 AutoVLA 不是孤立的，它在这条「端到端自动驾驶」的演化线上有明确的坐标：\n对比 UniAD / VAD（端到端回归）：那两个是「网络直接回归出轨迹坐标」的路线，没有大模型、没有 token 化。AutoVLA 则把动作塞进了 LLM 的 token 空间，于是能白嫖整套语言模型的训练技术。这是「回归范式」到「生成范式」的跨越。\n对比 DiffusionDrive（扩散生成轨迹）：DiffusionDrive 用扩散模型在连续空间里生成轨迹（anchor + 截断扩散），动作始终是连续的。AutoVLA 反其道而行，先把动作离散成 token 再让 LLM 生成。一个走连续生成，一个走离散预测——这是 VLA 领域两条主要的动作表示路线之争。\n对比 DriveVLA-W0（VLA + 世界模型）：两者都是「VLA + 动作 token + 强化微调」。但侧重不同：DriveVLA-W0 强调用世界模型（预测未来帧）提供稠密监督，逼大模型「想清楚世界会怎么变」；AutoVLA 强调快慢思考 + 拒绝采样对齐，走的是「用规则奖励精修决策」的路子。微调上，AutoVLA 用 RFT/GRPO 拒绝采样（无价值网络、组内比较），DriveVLA-W0 用 Flow Matching 风格的连续动作生成。两篇对照着读，能把「VLA 怎么训、动作怎么表示」这两个核心问题看得很透。\n通向 pi0：AutoVLA 告诉你「动作可以离散成 token 让 LLM 说」，而 pi0 会告诉你另一种可能——动作不一定非要离散，用 Flow Matching 直接对连续动作做生成也很好用，而且更精细。这两篇合起来，正好是「离散 token 派」和「连续流派」的正面对话。\n个人思考 1. AutoVLA 最妙的一步是「把控制问题伪装成语言问题」。 一旦动作变成了 token，SFT、拒绝采样、GRPO 这些从 NLP 搬过来的技术几乎不用改就能用。这是一种极其聪明的「问题重定义」——不是发明新方法，而是把一个难问题翻译成一个已经有成熟工具箱的问题。对做工程的人来说，这种「换个空间就白嫖整套生态」的思路，比任何具体技巧都值钱。\n2. RFT 退化成「拒绝采样 + 再监督」是务实到有点反潮流的选择。 现在大家都在卷 PPO、GRPO 的各种花式实现，AutoVLA 却把强化学习砍到只剩「多生成、挑好的、再学」。它赌的是：对自动驾驶这种安全敏感、奖励可规则化的任务，稳定压倒一切——一个能稳定收敛的粗糙方法，胜过一个可能训飞的精妙方法。我很认同这个判断。车端不是刷榜，训飞一次的代价可能是「学出一个危险的策略」，这是不能接受的。\n3. 规则奖励是把双刃剑。 它的可靠性来自「透明、不可被钻空子」，但它的天花板也来自这里——你只能奖励你写得出规则的东西。「像老司机一样有预判」「在拥堵中优雅博弈」这些高阶驾驶素养，很难用规则量化。所以 AutoVLA 的规则奖励能保证「安全、合规、不难受」，但要迈向「优秀」，迟早还是得引入更丰富的奖励信号（可能是学出来的、可能是人类偏好的）。这是这条路线未来必须面对的瓶颈。\n4. 快慢思考的旁路设计，暴露了「可解释性」在部署时的尴尬地位。 慢思考那段自然语言推理，训练时是宝（帮模型学因果），推理时却可以随手扔掉（为了提速）。这说明在当前范式下，「可解释」和「实时」某种程度上是对立的——你想要模型给你讲清楚为什么这么开，就得付出延迟代价。真正优雅的方案，应该是让「解释」不额外增加决策延迟（比如异步生成解释、或者只在需要时触发）。AutoVLA 的旁路开关是个实用的权宜之计，但不是终局。\n5. 离散 token 化的量化误差，是这条路线绕不开的原罪。 无论 K 调多大，连续动作被压成有限个词，精度损失总是存在的。低速泊车这种需要精细控制的场景，离散化的粗糙感会更明显。这也是为什么 pi0 那样的连续流方案有它的道理。我的判断是：离散派和连续派会长期共存——离散派赢在能无缝复用 LLM 生态、训练简单；连续派赢在动作精度。最终可能是混合的——用离散 token 做粗决策、用连续解码器做精修。AutoVLA 把离散这条路走得很扎实，是理解整个 VLA 领域绕不开的一块拼图。\n","permalink":"https://auto-driving-blog.pages.dev/posts/code/autovla%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"「面向零基础读者逐行拆解 ucla-mobility/AutoVLA（NeurIPS 2025）：从 VLA/动作 codebook/KMeans/快慢思考/SFT/GRPO 等概念讲起，配合论文架构图 + 自绘 SVG（整体架构、KMeans 聚类、两阶段训练流程），逐文件细讲 build_codebook 聚类、modeling_auto_vla 挂 action_head、LoRA 微调策略、SFT 数据模板设计、Stage-2 RFT 拒绝采样精修、推理旁路，最后给出个人思考与系列关系」","title":"AutoVLA 代码讲解：把「开车」变成「说动作 token」并用 GRPO 微调"},{"content":" 本文是「代码讲解」路线的第 8 篇，是 Diffusion Policy 在「规划」上的专门化（ICLR 2025 Oral，OpenDriveLab / ZhengYinan-AIR）。代码在 ZhengYinan-AIR/Diffusion-Planner。如果你前面读过本系列的 Diffusion Policy、DiffusionDrive、VADv2，这篇会非常顺；如果没读过也没关系，下面名词表会补齐。\n写给零基础读者：读这篇之前先搞懂几个名词 很多同学一上来就被「轨迹级扩散」「DiT」「DPS」这些词劝退，其实它们每一个都能用大白话讲明白。我先把这些名词翻译成人话，后面看代码才不会卡壳。\n轨迹级扩散（trajectory-level diffusion）：传统做法（比如 Diffusion Policy）是对「每一步的动作」做扩散，模型一帧一帧往外吐动作，像边走边想。而 Diffusion Planner 直接对「未来 T 步的整条轨迹 (x, y, heading) 序列」一起扩散——相当于闭着眼睛先画出一整条路径，再慢慢把它擦清楚。规划即生成一整条路径，不是逐步动作。\nDiT（Diffusion Transformer）：去噪网络（denoising network）原本大家爱用 U-Net，Diffusion Planner 换成 Transformer 块来做去噪主干。它的好处是长序列建模能力更强，轨迹点之间谁跟谁相关，Transformer 比卷积看得更清楚。\nMLP-Mixer：一个只用多层感知机（全连接）做「混合」的结构。在 Diffusion Planner 里它负责把轨迹点之间的时序相关性「揉顺」——让相邻时刻的轨迹点不要突然跳变，起到运动学平滑的作用。你可以把它理解成「轻量级时序正则器」。\nClassifier Guidance / DPS（Diffusion Posterior Sampling）：标准扩散采样只靠模型学到的分布往外生成，可能生成出会撞车的轨迹。DPS 的思路是：采样每一步去噪之后，额外减去一个「能量项」对轨迹的梯度（grad of energy w.r.t. x），把样本沿着能量下降方向推离不可行区域。这种引导是免训练的——能量函数可以随便换，模型不用重训。\n多模态规划（multimodal planning）：同一个初始场景，可能有好几条都合理的轨迹（保守跟车 / 激进超车 / 左转 / 右转）。模型一次性采出多条候选，下游再用规则挑一条最好的，而不是只给一条「平均轨迹」。\nnuPlan：目前最主流的自动驾驶开环+闭环评测数据集之一，带真实驾驶日志和 simulator，可以拿来跑闭环（closed-loop）评测，看规划器在仿真里会不会撞、守不守交规。\n运动学平滑（kinematic smoothing）：真实车不能瞬移、不能急拐，轨迹的曲率、加速度得在物理上限以内。能量引导里有一项专门惩罚曲率/加速度超限。\n可行驶区域（drivable area）：地图里允许车开的地方，比如车道内、路口铺装路面。轨迹点跑到马路牙子外、绿化带里，就要被惩罚。\n碰撞能量（collision energy）：轨迹上每个点如果和别的 agent（车、行人）的未来预测位置太近，能量就高，引导就把轨迹推远。\n一句话澄清：Diffusion Planner 不是「预测别车未来再规划」，它就是一条干净的规划器——你给它当前场景（ego 状态 + 邻居轨迹 + 地图），它吐一条 ego 的未来轨迹。碰撞能量用到的是别车「已知/预测的未来位置」作为约束，不是它自己再跑一个预测网络。\n为什么要讲 Diffusion Planner 的代码 一句话结论：因为它把「安全约束」从训练期彻底搬到了推理期。这是端到端规划里非常香的一个设计——你换个城市、换个交规、换张高精地图，不用重训一个几十 G 的大模型，只要改几个能量函数就能把轨迹压进可行域。对搞落地的人来说，这比「重新训一个合规模型」实在太多。\n本系列前面讲了 Diffusion Policy（动作级扩散）、DiffusionDrive（flow matching 端到端）、VADv2（多模态概率规划）。Diffusion Planner 是这几条线在「轨迹生成 + 免训练约束」上的集大成，ICLR 2025 Oral 的认可也说明社区看好这套思路。读懂它，你基本就掌握了「扩散 + 可微约束」这一派规划器的全部骨架。\n架构总览 先把整条链路在脑子里过一遍，代码细节才不晕：\n输入：当前场景编码 cond，包含 ego 自车状态、周围 agent 的历史/当前轨迹、高精地图（车道、可行驶区域多边形）。 初始化：从标准高斯噪声 x ~ N(0, I) 出发，这个 x 的形状就是 (B, T, D)，T 是未来步数，D 是 (x, y, heading) 之类。 去噪主干：噪声轨迹 token 过 DiT 块（自带时间步条件 adaLN），再过一个 MLP-Mixer 做时序混合，最后 head 输出预测的噪声 eps。 采样循环：从 t = T-1 反着走到 0，每步先用模型预测噪声做标准 DDPM 后验去噪，再依次调用 collision / drivable / kinematic 三个能量引导，算能量对 x 的梯度并减去，把轨迹推离不可行区。 多模态：同一个场景重复采样 M 次得到 M 条候选轨迹，用规则打分 rule_score 挑最优那条丢给控制器。 评测：在 nuPlan 闭环仿真里跑，看碰撞率、违章率、舒适度。 关键认知：训练阶段完全不用碰能量函数，能量只在推理采样时注入。所以训练就是最朴素的 DDPM，推理才「加装」约束。这正是它灵活的根源。\n项目结构 先说边界，避免你找错仓库。\n这是 ZhengYinan-AIR/Diffusion-Planner，属于 OpenDriveLab 体系，是 DiffusionDrive 作者在规划方向的延续工作。 和 DiffusionDrive 相比，最大的边界变化是：规划对象从「动作/控制量」升级为「整条轨迹 (x, y, heading) 序列」。也就是说它不做自回归逐步预测，而是一次性生成整段未来路径，再用能量引导修。 它专注「规划」这一步，不负责感知（检测/分割/地图在线构建），输入场景通常已经由上游模块或离线数据准备好。 仓库（简化）长这样，注意用 Markdown 列表表示目录树，不画框线：\nDiffusion-Planner/ diffusion_planner/ model/ dit.py：DiT 去噪主干，轨迹 token 过 DiT block + MLP-Mixer mixer.py：MLP-Mixer 时序混合模块 guidance/ collision.py：碰撞能量 drivable.py：可行驶区域能量 kinematic.py：运动学平滑能量 scheduler/ ddpm.py：标准 DDPM 加噪/去噪 + 采样时注入 guidance 能量梯度 env/ nuplan_wrapper.py：闭环评测环境封装 configs/：各种训练/推理超参 scripts/ train.py：训练入口 eval_closed_loop.py：多模态候选 + 规则打分选最优 + 闭环评测 下面逐文件逐函数拆。\n1. model/dit.py：DiT 去噪主干 这是整个网络最核心的一块。它的职责很简单：给一个「加噪后的轨迹」和「时间步 t」和「场景条件 cond」，输出「模型认为加在上面的是哪个噪声」。\n轨迹是 (T, D) 的序列，思路是先切成 token（其实就是每个时间步一个 token，或者把相邻几步拼一下），然后过一堆 DiT block，最后 head 预测噪声。\n# model/dit.py (simplified) import torch import torch.nn as nn class AdaLNNorm(nn.Module): def __init__(self, dim): super().__init__() self.norm = nn.LayerNorm(dim) self.scale = nn.Linear(dim, dim) self.shift = nn.Linear(dim, dim) def forward(self, x, t_emb): # t_emb: (B, dim) timestep embedding # modulate LayerNorm by timestep return self.norm(x) * (1 + self.scale(t_emb).unsqueeze(1)) \\ + self.shift(t_emb).unsqueeze(1) class MLPMixer(nn.Module): def __init__(self, dim, token_dim, chan_dim): super().__init__() self.token_mix = nn.Sequential( nn.LayerNorm(dim), nn.Linear(token_dim, token_dim), nn.GELU(), nn.Linear(token_dim, token_dim), ) self.chan_mix = nn.Sequential( nn.LayerNorm(dim), nn.Linear(chan_dim, chan_dim), nn.GELU(), nn.Linear(chan_dim, chan_dim), ) def forward(self, x): # x: (B, T, D); mix across tokens then across channels x = x + self.token_mix(x.transpose(1, 2)).transpose(1, 2) x = x + self.chan_mix(x) return x class DiTBlock(nn.Module): def __init__(self, dim, T, D): super().__init__() self.attn = nn.MultiheadAttention(dim, 8, batch_first=True) self.mixer = MLPMixer(dim, T, D) self.adaLN = AdaLNNorm(dim) def forward(self, x, t_emb, cond=None): h = self.adaLN(x, t_emb) if cond is not None: h = h + self.attn(h, cond, cond)[0] else: h = h + self.attn(h, h, h)[0] h = h + self.mixer(h) return h class TrajectoryDiT(nn.Module): def __init__(self, T, D, dim, depth=6): super().__init__() self.input_proj = nn.Linear(D, dim) self.pos_embed = nn.Parameter(torch.zeros(1, T, dim)) self.t_emb = nn.Sequential( nn.Linear(1, dim), nn.SiLU(), nn.Linear(dim, dim) ) self.blocks = nn.ModuleList( [DiTBlock(dim, T, dim) for _ in range(depth)] ) self.head = nn.Linear(dim, D) def forward(self, noisy_traj, t, cond=None): # noisy_traj: (B, T, D); t: (B,) t_emb = self.t_emb(t.float().unsqueeze(-1)) h = self.input_proj(noisy_traj) + self.pos_embed for blk in self.blocks: h = blk(h, t_emb, cond) return self.head(h) # predict noise eps 几个口语化解释：\nAdaLNNorm 是 DiT 的标志性设计：时间步 t 不是简单拼到输入上，而是去「调制」LayerNorm 的 scale 和 shift。这样模型在每一步去噪时都知道「我现在是第几步」，该擦粗噪还是细噪。 MLPMixer 里 token_mix 是在「时间步维度」上做全连接，相当于让第 3 秒的轨迹点去「看」第 1 秒、第 5 秒的点，把整条轨迹的时序相关性揉顺；chan_mix 是在特征维度上混合 (x, y, heading)。它比 self-attention 便宜，专门干「平滑」这一种活。 DiTBlock 里的 attention 可以是 self-attention（轨迹点互看），也可以 cross-attention 到 cond（场景编码）。官方实现里场景条件大多是 cross-attn 或 FiLM 注入，伪代码里我两种都留了口子。 head 直接输出和输入同形状的噪声预测，损失就是预测噪声和真加噪声的 MSE。 一句话澄清：DiT 的「预测目标」是噪声，不是轨迹本身。这是标准 DDPM 套路——网络学的是 $\\epsilon_\\theta(x_t, t)$，采样时再用它反推 $x_{t-1}$。\n2. model/mixer.py：MLP-Mixer 时序混合 上面 dit.py 里其实已经内联了一个 MLPMixer，但这里单独成文件，说明它在仓库里是被当成一个独立模块来维护的。我们把它单独拎出来看，重点理解「token mix」和「channel mix」两件事。\n# model/mixer.py (simplified) import torch import torch.nn as nn class FeedForward(nn.Module): def __init__(self, dim, hidden): super().__init__() self.net = nn.Sequential( nn.Linear(dim, hidden), nn.GELU(), nn.Linear(hidden, dim), ) def forward(self, x): return self.net(x) class MLPMixerLayer(nn.Module): def __init__(self, num_tokens, dim, token_hidden, chan_hidden): super().__init__() self.norm1 = nn.LayerNorm(dim) self.token_mix = FeedForward(num_tokens, token_hidden) self.norm2 = nn.LayerNorm(dim) self.chan_mix = FeedForward(dim, chan_hidden) def forward(self, x): # x: (B, T, D) res = x x = self.norm1(x) x = x.transpose(1, 2) # (B, D, T) x = self.token_mix(x) # mix across time steps x = x.transpose(1, 2) # (B, T, D) x = x + res res = x x = self.norm2(x) x = self.chan_mix(x) # mix across features x = x + res return x 为什么轨迹规划特别需要 MLP-Mixer？因为汽车轨迹天然有强时序连续性：第 t 步的位置基本由 t-1 步决定，曲率不能突变。self-attention 能建模任意点对关系，但「揉顺时序」这种结构化先验，用 MLP-Mixer 这种轻量模块反而又快又稳。它在 DiT block 里作为 attention 之后的补充，专门收尾平滑。\n关键认知：MLP-Mixer 不是用来「理解场景」的，它只负责把已经成形的轨迹 token 之间的时序/通道关系理顺。真正的场景理解靠的是前面的 attention 和场景编码。\n3. scheduler/ddpm.py：标准 DDPM + 采样时注入 guidance 这是全篇最该精读的文件。前半部分是教科书级 DDPM（加噪、去噪、损失），后半部分是 Diffusion Planner 的独门秘籍——采样循环里塞能量引导。\n先看训练侧的加噪和损失。标准 DDPM 的前向过程：\n# scheduler/ddpm.py (simplified, training side) import torch import torch.nn.functional as F def q_sample(x0, noise, alpha_bar): # x0: clean trajectory (B, T, D) # alpha_bar: (T,) cumulative product of (1-beta) return alpha_bar.sqrt() * x0 + (1 - alpha_bar).sqrt() * noise def training_loss(model, scene, traj, t, alpha_bar): noise = torch.randn_like(traj) noisy = q_sample(traj, noise, alpha_bar[t]) cond = encode_scene(scene) pred_noise = model(noisy, t, cond=cond) loss = F.mse_loss(pred_noise, noise) # predict the added noise return loss 注意 loss 就是预测噪声和真噪声的 MSE，目标是轨迹真值（专家驾驶轨迹）。这就是官方说的「训练标准 DDPM 损失」，没有任何花活。\n再看推理侧采样。这里才是能量引导登场的地方：\n# scheduler/ddpm.py (simplified, sampling side) def sample(model, scene, guides, T, guide_scale, alpha, sigma): x = torch.randn((B, T_steps, D)) # start from gaussian cond = encode_scene(scene) for t in reversed(range(T_steps)): t_batch = torch.full((B,), t) eps = model(x, t_batch, cond=cond) # predicted noise # standard DDPM posterior step x0_pred = (x - sigma[t] * eps) / alpha[t] x = alpha[t] * x0_pred + sigma[t] * torch.randn_like(x) # ---- training-free guidance ---- for guide in guides: # collision / drivable / kinematic E = guide.energy(x, scene) # scalar energy per sample g = torch.autograd.grad(E, x, retain_graph=True)[0] # dE/dx x = x - guide_scale * g # push along energy descent return x 关键就在那个 for guide in guides 循环。每做完一次标准去噪，立刻把三个能量梯度分别减掉一点。公式上写就是：\n$x = x - \\text{scale} \\cdot g$，其中 $g = \\nabla_x E(x)$。\n因为 E 是对不可行区域（碰撞、出界、不平滑）的惩罚，减掉它的梯度等于把 x 往能量更低（更可行）的地方挪。而且这一切发生在推理期，model 的权重一点没动——所以换地图换规则，只要换 guides 和 scene 里的地图信息即可，模型零重训。\n一句话澄清：torch.autograd.grad(E, x) 要求 E 是 x 的可微函数，所以三个能量文件里写的都是「可微惩罚」，不是 if-else 硬约束。这正是 DPS 能即插即用的前提。\n4. guidance/collision.py：碰撞能量 碰撞能量要做的事：拿 ego 当前这条轨迹 x（未来 T 步），和场景里其他 agent 的「未来位置」比距离，太近就给高能量。\n# guidance/collision.py (simplified) import torch class CollisionEnergy: def __init__(self, radius=1.5, margin=0.5): self.radius = radius self.margin = margin def energy(self, traj, scene): # traj: (B, T, D) with x,y at first two dims # scene[\u0026#39;others_future\u0026#39;]: (B, A, T, 2) predicted future positions others = scene[\u0026#39;others_future\u0026#39;][..., :2] # (B, A, T, 2) ego_xy = traj[..., :2].unsqueeze(1) # (B, 1, T, 2) dist = torch.norm(ego_xy - others, dim=-1) # (B, A, T) penetration = self.radius + self.margin - dist penetration = torch.clamp(penetration, min=0) E = penetration.pow(2).mean(dim=(1, 2)) # (B,) return E 思路非常直白：算 ego 轨迹上每个点和每个别的 agent 在每个时刻的距离，小于「车宽半径 + margin」就记一笔穿透量，平方求和当能量。平方是为了平滑、可微，梯度才好用。\n关键认知：这里的 others_future 不是 Diffusion Planner 自己预测的，一般是上游给的（或评测仿真器给的真值/预测）。它只把这些位置当「固定障碍」来避，不递归预测别人怎么躲自己。\n5. guidance/drivable.py：可行驶区域能量 可行驶区域能量：轨迹点如果落到地图里「不允许开」的区域（绿化带、马路牙子外、逆行车道），就惩罚。\n# guidance/drivable.py (simplified) import torch class DrivableEnergy: def __init__(self, weight=1.0): self.weight = weight def energy(self, traj, scene): # traj: (B, T, D); scene[\u0026#39;drivable_mask_fn\u0026#39;]: differentiable in/out test xy = traj[..., :2] # (B, T, 2) # signed distance to nearest drivable boundary (negative if outside) sdf = scene[\u0026#39;drivable_sdf\u0026#39;](xy) # (B, T) outside = torch.clamp(-sdf, min=0) # \u0026gt;0 means outside E = self.weight * outside.pow(2).mean(dim=1) # (B,) return E 实现上常见两种：一种是用预计算的可行驶区域 SDF（有符号距离场），点在区域外时 SDF 为负，取 -sdf 做惩罚；另一种是对每个点做可微的「点在多边形内」判定。不管哪种，目标都是让 x 的梯度把轨迹点拉回车道内。\n一句话澄清：可行驶区域能量是「软约束」，不是硬裁切。它不会瞬间把出界点弹回线内，而是每步轻轻拉一点，配合 DDPM 本身的去噪，最终轨迹既自然又在界内。\n6. guidance/kinematic.py：运动学平滑能量 运动学能量管的是「车开得动不动」：相邻步之间的航向变化（曲率）太大、速度/加速度突变，就惩罚。这样生成的轨迹控制器才接得住。\n# guidance/kinematic.py (simplified) import torch class KinematicEnergy: def __init__(self, max_curv=0.2, max_acc=2.0): self.max_curv = max_curv self.max_acc = max_acc def energy(self, traj, scene): # traj: (B, T, D) with x,y,heading xy = traj[..., :2] heading = traj[..., 2] # curvature proxy: change of heading between steps d_head = torch.diff(heading, dim=1) curv = d_head.abs() curv_pen = torch.clamp(curv - self.max_curv, min=0).pow(2) # acceleration proxy: second difference of position acc = torch.diff(xy, dim=1) acc = torch.diff(acc, dim=1) acc_pen = torch.clamp(acc.norm(dim=-1) - self.max_acc, min=0).pow(2) E = curv_pen.mean(dim=1) + acc_pen.mean(dim=1) # (B,) return E 这里用「航向差分」近似曲率、用「位置二阶差分」近似加速度，都是可微的。超限部分平方惩罚，梯度自然把轨迹往「更平滑」推。\n关键认知：三个能量加起来才是完整引导。碰撞管「别撞别人」，可行驶管「别出界」，运动学管「车开得动」。三者正交，可以单独调权重，这也是免训练引导的最大卖点——可解释、可调参、可插拔。\n7. env/nuplan_wrapper.py：闭环评测封装 模型在 nuPlan 仿真器里跑闭环，需要把「采样出的轨迹」转成「车能执行的控制」，再喂回仿真器看下一步。wrapper 干的就是这个桥接。\n# env/nuplan_wrapper.py (simplified) class NuPlanWrapper: def __init__(self, simulator, planner): self.sim = simulator self.planner = planner def reset(self, scenario): self.state = self.sim.reset(scenario) def step(self, scene): # scene: current observation from simulator traj = self.planner.sample(scene, n_candidates=1)[0] # convert trajectory to control (speed / steering) via PID tracker ctrl = self.tracker.track(traj, self.state) self.state = self.sim.step(ctrl) return self.state def run_episode(self, scenario, steps): self.reset(scenario) for _ in range(steps): scene = self.sim.get_observation() self.step(scene) if self.sim.is_done(): break return self.sim.metrics() 实际仓库里 wrapper 会更复杂（处理坐标变换、地图查询、观测编码），但骨架就是：拿观测 → 采样轨迹 → 轨迹跟踪成控制 → 仿真步进 → 收指标。闭环指标通常包括碰撞率、违章数、舒适度（加速度 RMS）。\n一句话澄清：闭环和开环的区别在于，开环拿真值周围状态评估，闭环是规划器自己开、自己决定下一步。Diffusion Planner 的免训练引导在闭环里尤其有用——因为仿真里会出现训练时没见过的「危险临场状况」，能量引导能实时把轨迹掰回安全区。\n8. scripts/eval_closed_loop.py：多模态候选 + 规则打分 这是把前面所有零件拼起来跑评测的入口。它最关键的一招是「多模态 + 规则选优」。\n# scripts/eval_closed_loop.py (simplified) def rule_score(traj, scene): # combine guidance energies into a single pickable score e_col = collision_energy.energy(traj, scene) e_drv = drivable_energy.energy(traj, scene) e_kin = kinematic_energy.energy(traj, scene) progress = traj[..., :2].diff(dim=1).norm(dim=-1).sum() # how far it goes score = progress - 5.0 * e_col - 3.0 * e_drv - 1.0 * e_kin return score def evaluate(planner, sim_wrapper, scenario, M=8): best_traj = None best_score = -1e9 for _ in range(M): traj = planner.sample(scene=sim_wrapper.observation(), guides=all_guides, n_candidates=1) s = rule_score(traj, sim_wrapper.scene) if s \u0026gt; best_score: best_score = s best_traj = traj ctrl = tracker.track(best_traj, sim_wrapper.state) return sim_wrapper.sim.step(ctrl) 逻辑是：同一个场景采样 M 条候选（利用扩散天然的多模态），每条都算一个 rule_score——既看「走了多远」（鼓励前进），又扣掉三项能量（惩罚危险/出界/抖动），挑分最高的那条执行。\n为什么不用模型自己给的概率选？因为轨迹级扩散采样不像 VADv2 那样每条带显式概率，它采出来的是去噪结果，没有现成置信度。所以用「能量反向构造的分数」来排序，反而更可控、更贴近安全需求。\n关键认知：多模态采样的代价是推理要跑 M 次去噪，但因为轨迹才几十个点（T 很小），每次去噪远比图像扩散轻，所以实际 latency 完全能接受。这也是轨迹级扩散相比图像级扩散的工程优势。\n9. 训练入口 scripts/train.py 串起来看 把 dit / ddpm / 数据加载串起来的训练循环大致是：\n# scripts/train.py (simplified) for batch in dataloader: scene, traj_gt = batch[\u0026#39;scene\u0026#39;], batch[\u0026#39;traj\u0026#39;] # traj_gt: expert trajectory t = torch.randint(0, T_steps, (B,)) loss = training_loss(model, scene, traj_gt, t, alpha_bar) optimizer.zero_grad() loss.backward() optimizer.step() 注意训练时完全没有 energy / guidance 参与。模型只学「给定噪声轨迹 + 时间步 + 场景，预测加上的噪声」。所有安全约束都是推理时后加的。这个解耦是 Diffusion Planner 设计上最聪明的地方——训练简单（标准 DDPM），部署灵活（换 guides 即可）。\n为什么比回归式规划强 回归式（UniAD / VAD 一类）只出一条「平均轨迹」，遇到歧义场景（可左可右、可跟可超）会犹豫出一条危险的折中，比如卡在两条车道中间。 扩散直接建模多模态轨迹分布，再用能量引导把不可行项筛掉，安全率和舒适度都更高。 代价是推理要跑多步去噪 + 多候选采样，但轨迹点少（几十个），比图像扩散快几个数量级。 个人思考 Diffusion Planner 的「免训练能量引导」是我最想抄到 Flow-GRPO 里的设计——它把安全约束从训练期解放到推理期，意味着规则变了不用重训。结合 GRPO 的奖励信号，其实可以统一成「采样 + 可微约束」，这正是当前端到端规划很有前景的方向。另外 MLP-Mixer 在轨迹平滑上的轻量用法也值得借鉴：不一定啥都堆 attention，结构化先验用小模块收尾更稳更快。\n和本系列其他文章的关系 方法论母体 → Diffusion Policy（上篇）：Diffusion Planner 就是把 Diffusion Policy 的「动作级扩散」升级成「轨迹级扩散」，并把「动作」换成「(x, y, heading) 序列」。 同属扩散用于驾驶 → DiffusionDrive：DiffusionDrive 走的是 flow matching + 生成式端到端（从感知出轨迹），Diffusion Planner 更纯粹地讲「规划 + 免训练约束」，两者在能量引导这块可以互相借。 离散动作对照 → VADv2：VADv2 用多模态概率分布选轨迹，Diffusion Planner 用扩散采样 + 规则打分选轨迹。思路同源（都承认场景多解），但实现路径一个离散一个连续。 小结：读完整篇你应该建立的直觉是——Diffusion Planner = 标准 DDPM 去噪整条轨迹（DiT + MLP-Mixer 当 backbone） + 推理时免训练能量引导（碰撞/可行驶/运动学）把轨迹压进可行域 + 多模态采样配规则打分。训练朴素、部署灵活，是轨迹级扩散规划里非常工程友好的一篇。\n","permalink":"https://auto-driving-blog.pages.dev/posts/code/diffusionplanner%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"「Diffusion Planner 把规划对象从『动作』升级为『整条轨迹』，用 DiT + MLP-Mixer 去噪；亮点是在 DDPM 采样时注入 classifier guidance（碰撞/可行驶区域/运动学能量），无需重新训练就能把轨迹压进可行域，本文顺着官方仓库从名词、架构、逐文件逐函数一直讲到多模态闭环评测，帮零基础读者把『轨迹级扩散 + 免训练能量引导』这条主线彻底打通」","title":"Diffusion Planner 代码讲解：轨迹级扩散 + 免训练能量引导"},{"content":"写给零基础读者：读这篇之前先搞懂几个名词 在正式读代码之前，我们先把这篇文章会反复出现的几个「黑话」用一句话翻译成人话。你不用现在就完全懂，只要有个印象，后面看到它们就不会慌。\nDDPM（去噪扩散概率模型，Denoising Diffusion Probabilistic Models）：一种生成式 AI 的训练范式。它的训练过程是「往一段干净数据（这里是动作序列）上一点点加噪声，直到变成纯噪声；再训练一个网络学会把噪声一步步去掉、还原干净数据」。推理时，从纯噪声出发，让网络反复「去噪」，最后「雕」出一段新的数据。Diffusion Policy 把这套思路用在「生成一连串动作」上，不是生成图片。\nDDIM（去噪扩散隐式模型，Denoising Diffusion Implicit Models）：DDPM 的加速采样变体。它把原本必须一步一步、不能跳的随机去噪过程，改成一个确定性的、可以跳步的过程，所以能用更少的步数（比如 20 步）得到差不多的结果。可以理解为「DDPM 是慢工出细活的随机雕刻，DDIM 是能抄近路的确定性雕刻」。\n观察视野 To（observation horizon）与动作视野 Ta（action horizon）：To 是模型「往回看」多少步观测（比如过去 2 步的相机图 + 机器人状态），Ta 是模型「往前出」多少步动作（比如未来 16 步的关节角度或转向指令）。典型配置 To=2、Ta=16。多步动作比「只预测下一步」稳得多，因为网络一次性把一小段未来都规划出来，不会因为单步误差被放大而抖。\nLinearNormalizer（线性归一化器）：对观测和动作做线性缩放（均值/标准差，或最小/最大）的小工具。扩散模型对数据的「量纲」极其敏感——动作里如果同时有「角度（几度）」和「位置（几米）」，数值尺度差太大，网络就学不动。所以必须把数据压到差不多尺度再喂给扩散。它是本文最容易踩坑、也最容易被忽略的一环。\nU-Net / 1D U-Net：U-Net 是一种「先下采样压缩、再上采样还原」的对称网络，形似字母 U，原本用于图像分割。这里动作是一维时间序列（Ta 步），所以用「1D 版」的 U-Net（用一维卷积），而不是图像用的 2D U-Net。它的作用是「吃进带噪动作，吐出预测噪声」。\n条件扩散（conditional diffusion）：普通扩散是无条件的（从纯噪声生成任意东西）；条件扩散是「在给定某个条件（这里是观察）的情况下生成」。实现方式之一是用 FiLM 把观察特征以「缩放 + 偏移」的方式注入网络的每一层，相当于不停地告诉网络「你现在是为这个观察去噪，请按这个观察来调整」。\nnoise schedule（噪声调度）：决定「第 t 步数据里噪声占多少比例」的一条曲线。常见有 linear（线性）和 cosine（余弦）两种。它控制加噪的快慢，也决定训练时每个时间步对应的噪声强度。\nrecursive replanning（递归重规划）：模型一次输出 Ta 步动作，但执行时通常只取前几步真正发给机器人，下一步再重新看新的观察、重新生成一段 Ta 步动作。如此滚动，像人开车时不断「看一眼、动一下、再看一眼」。这能抵消误差累积，比「一次算完走到底」稳。\n多模态动作（multimodal action）：同一个观察，合理的动作可能不止一种（比如「向左绕」和「向右绕」都行）。扩散模型靠「从噪声出发、一次雕出一条完整轨迹」的天然属性，能表达这种多峰分布；而传统「高斯回归一个均值」只会吐出「两种开法的平均」，结果往往是不伦不类的危险轨迹。\nRSS 2023：Robotics: Science and Systems 2023，这篇论文（Diffusion Policy: Visuomotor Policy Learning via Action Diffusion）发表的会议。它虽然是机器人操纵领域的文章，但和自动驾驶扩散方法同源。\n如果你上面这些名词都大致有印象了，下面读代码会轻松很多。我们开始。\n为什么要讲 Diffusion Policy 的代码 Diffusion Policy（RSS 2023，作者单位 real-stanford / 哥伦比亚大学）是「把扩散模型用于动作生成」的奠基性工作，也是后续几乎所有「扩散驾驶策略」的方法论源头。它不特指自动驾驶——它原本是给机械臂、给机器人学操纵用的——但正是因为它把「给一段观察、出一段动作序列」这件事做成了一个干净、通用、和任务解耦的框架，后面 DiffusionDrive（扩散规划）、Diffusion Planner（轨迹扩散）、甚至 pi0（挂了 VLM 的流匹配动作模型）才都能在它身上找到影子。\n这篇不讲公式推导，直接看源码——仓库 real-stanford/diffusion_policy 把模型、数据、训练循环三者拆得极干净，是学习「扩散 + 控制」工程化落地的最佳范本。\n一句话结论：Diffusion Policy 的本质 = 观察编码器（CNN/Transformer/Recurrent 三选一）+ 一个 1D U-Net 去噪网络（ConditionalUnet1D）+ 标准 DDPM 训练（预测噪声的 MSE）+ DDIM 多步采样推理；训练时随机加噪学去噪，推理时从纯噪声雕出整段 Ta 步动作，再 unnormalize 回真实量纲、取前几步执行并递归重规划。\n架构总览：先看地图 Diffusion Policy 是生成式策略：它不从固定候选集里选动作，而是从纯噪声出发、用扩散逐步「雕」出一段动作序列，并且这段动作是「 conditioned on（以）观察」的。\n把整条链路用一句话串起来就是：\n一段观察（过去 To 步的图/状态）→ 观察编码器 → 观察特征（global_cond）→ 作为条件注入 1D U-Net → 从纯噪声动作出发，按 DDIM 调度反向去噪 Ta 步 → 得到去噪后的动作序列 → unnormalize 回真实量纲 → 取前几步执行，下一步递归重规划。\n用文字 + Markdown 列表把这个闭环拆开看：\n输入侧：过去 To 步观测，可以是图像（CNN 编码器）、状态向量（MLP）、或者时序状态（Recurrent / Transformer 编码器）。 条件注入：观察编码成固定维度向量 global_cond，通过 FiLM 加偏置注入 U-Net 每一层，实现「条件扩散」。 生成侧：动作是 Ta 步的一维序列，形状 [B, Ta, action_dim]，初始为纯高斯噪声。 去噪网络：ConditionalUnet1D，输入「带噪动作 + 时间步 timestep + 观察条件」，输出「预测的噪声」。 训练目标：标准 DDPM 损失——预测加到数据上的那一份噪声，和真实噪声做 MSE。 推理采样：DDIM 多步（默认 20~100 步）反向迭代，逐步把噪声动作雕成干净动作。 后处理：LinearNormalizer 把动作反归一化回机器人真实量纲；执行时取前 k 步，递归重规划。 关键认知：Diffusion Policy 的「多步 + 扩散」组合，和「单步回归」最大的区别就是——它能表达多模态动作分布。同一个观察，网络可以从不同噪声起点雕出不同合理动作；而回归式方法只会给一个均值，遇到「左绕还是右绕」这种分叉就只会吐出危险的「中间轨迹」。这也是后面所有扩散驾驶方法要解决的同一个顽疾。\n项目结构：先厘清边界（real-stanford/diffusion_policy） Diffusion Policy 最值得学的是模块拆分。它把「模型定义」「数据拼装」「训练循环」三者完全解耦，换任务基本只改 yaml 配置和 dataset，不动网络结构。仓库根目录是 diffusion_policy/，下面大致长这样（用普通 Markdown 列表，避免代码块内中文被逐字符换行的问题）：\ndiffusion_policy/ policy/ diffusion_policy.py：总装类，把「观察编码 + 去噪网络 + 采样器」串起来，对外提供 predict_action / compute_loss。 diffusion_unet1d_policy.py：基于 1D U-Net 的策略入口（本文重点），继承上面的总装。 diffusion_transformer_policy.py：基于 Transformer 去噪网络的策略变体（本文不展开）。 model/ noise_unet.py：ConditionalUnet1D 的定义（1D U-Net 去噪网络，本文核心）。 diffusion.py：DDPM / DDIM 的加噪 q_sample 与采样逻辑封装。 trajectory_visualizer.py：可视化工具，不重要。 model/ cfg_scheduler.py：噪声调度（cosine / linear）的封装，给扩散用。 obs_encoder.py：图像 / 状态 / 时序三种观察编码器。 common/ module_attr_mixin.py：给模型挂属性的一些小 mixin。 dataset/ base_dataset.py：拼 (obs, action) 对，做 LinearNormalizer 归一化 / 反归一化。 realpusht_state_dataset.py / image_dataset.py 等：具体任务的数据集实现。 workspace/ train_diffusion_policy.py：训练循环 + 日志 + checkpoint（基于 Hydra + 自写 TrainLoop）。 train_diffusion_unet_\u0026hellip;_realpusht.yaml 等：所有超参都在 yaml。 configs/ 各种任务的 yaml 配置，集中放超参。 逐个文件用一句话说明它干嘛：\npolicy/diffusion_policy.py：策略总装基类 DiffusionPolicy。定义了「观察怎么编码、噪声怎么采样、损失怎么算、动作怎么预测」的通用骨架；具体去噪网络由子类（如 DiffusionUnet1dPolicy）提供。 policy/diffusion_unet1d_policy.py：本文主角。用 ConditionalUnet1D 当去噪网络，实现 predict_action（DDIM 采样出动作）和 compute_loss（DDPM 损失）。 model/noise_unet.py：ConditionalUnet1D 的实现。1D U-Net，观察作 FiLM 条件注入，时间步作时间嵌入。 model/diffusion.py：Diffusion 类。封装 q_sample（按噪声调度给干净动作加噪）、损失计算、以及 DDIM 采样所需的 step 逻辑。 model/cfg_scheduler.py：把 noise schedule（线性 / 余弦）和 DDIM 步数封装好，供 diffusion 调用。 model/obs_encoder.py：三种观察编码器——CNNImageEncoder（图像）、IdentityEncoder / MLP（状态）、以及基于 RNN / Transformer 的时序编码器。 dataset/base_dataset.py：BaseDataset + LinearNormalizer。负责把原始 (obs, action) 拼成样本，并在训练前 fit 归一化统计量、训练时 normalize、推理时 unnormalize。 workspace/train_diffusion_policy.py：训练入口。用 Hydra 读 yaml，构造 policy / dataset / optimizer，跑训练循环，存 checkpoint，记日志。 注意：文件名里写着 realpusht、image_dataset 这些是论文里的演示任务（推方块、机械臂），但网络与训练框架和任务无关。换到自动驾驶，你只要新写一个 dataset（把「相机/BEV/状态」当 obs、把「未来轨迹/控制量」当 action），再改 yaml，网络一行都不用动。这就是「解耦设计」的威力。\n一、观察编码器：obs_encoder.py（先把\u0026quot;看\u0026quot;这件事讲透） 模型首先要「看懂」观察。Diffusion Policy 支持三种观察编码器，对应三种输入模态：\nCNN 图像编码器：吃多视角图像，过 CNN（如 ResNet 变体）提取特征，再 flatten / pool 成固定维度向量。论文里机械臂任务多用这个。 状态编码器（MLP / Identity）：观察本身就是低维状态向量（比如机器人关节角），直接过一个 MLP 或不编码（Identity），得到条件向量。 时序编码器（Recurrent / Transformer）：观察是「过去 To 步的状态序列」，用 RNN 或 Transformer 把这段时序压成一个向量，能捕捉动态历史。 不管哪种，最终都汇成一个 global_cond（全局条件向量），形状大致 [B, global_cond_dim]，后面喂给 U-Net 做 FiLM 注入。下面给一个简化的结构示意（块内零中文，中文说明在块外）：\n# model/obs_encoder.py (simplified structure) class CNNEncoder(nn.Module): def __init__(self, shape, out_dim=256): # shape: (C, H, W) of input image self.cnn = build_cnn_backbone(shape, out_dim) def forward(self, obs): # obs: (B, To, C, H, W) -\u0026gt; merge To into batch b, t = obs.shape[:2] x = obs.reshape(b * t, *obs.shape[2:]) x = self.cnn(x) # (B*To, out_dim) x = x.reshape(b, t, -1) x = x.mean(dim=1) # pool over To -\u0026gt; (B, out_dim) return x 上面这段是说：图像编码器把「To 步」当成额外 batch 维一起过 CNN，再把时间维平均池化，得到每帧一致的条件向量。状态 / 时序编码器同理，只是 backbone 不同。\n一句话澄清：观察编码器只负责「把观察压成一个条件向量」，它不参与去噪。去噪是 U-Net 的事，编码器只是给 U-Net 递「小纸条」告诉它现在场景长啥样。\n二、核心去噪网络：ConditionalUnet1D（noise_unet.py） 动作是一维时间序列（Ta 步，每步 action_dim 维），所以用 1D U-Net（不是图像用的 2D U-Net）。它的职责非常单一：吃进「带噪动作 + 时间步 + 观察条件」，吐出「预测的噪声」。\n2.1 网络结构 网络主体是一个对称的「下采样 → 中间块 → 上采样」结构，每一层用一维卷积（Conv1d）。下采样把序列在「时间轴 Ta」上压缩、通道数翻倍；上采样再还原回来。时间步 timestep 被编码成时间嵌入（time embedding），观察条件 global_cond 被编码成条件向量，两者都通过 FiLM 式「加偏置 / 缩放」注入每一层。\n下面给一个最简化、能跑通逻辑的伪代码（块内零中文）：\n# model/noise_unet.py (heavily simplified) class ConditionalUnet1D(nn.Module): def __init__(self, input_dim, global_cond_dim, down_dims=(256, 512, 1024), dim_mult=(1, 2, 2), kernel_size=5): self.input_dim = input_dim self.down_dims = down_dims # time embedding: map scalar timestep -\u0026gt; feature self.time_emb = nn.Sequential( nn.Linear(256, 256), nn.SiLU(), nn.Linear(256, 256)) # project observation condition to same dim self.cond_obs = nn.Sequential( nn.Linear(global_cond_dim, 256), nn.SiLU(), nn.Linear(256, 256)) # down / mid / up blocks with 1d conv self.down_blocks = nn.ModuleList([...]) # Conv1d + downsample self.mid_block = MidBlock1D(...) # Conv1d bottleneck self.up_blocks = nn.ModuleList([...]) # Conv1d + upsample self.final_conv = nn.Conv1d(256, input_dim, 1) def forward(self, sample, timestep, global_cond): # sample: (B, Ta, input_dim) noisy action # timestep: (B,) integer step # global_cond: (B, global_cond_dim) observation feature t_emb = self.time_emb(timestep_embed(timestep)) # (B, 256) c_emb = self.cond_obs(global_cond) # (B, 256) h = sample.transpose(1, 2) # (B, input_dim, Ta) skips = [] for down in self.down_blocks: h, c_emb = down(h, c_emb, t_emb) # FiLM inject skips.append(h) h = self.mid_block(h, c_emb, t_emb) for up in self.up_blocks: h = up(h, skips.pop(), c_emb, t_emb) # FiLM inject h = self.final_conv(h) # (B, input_dim, Ta) return h.transpose(1, 2) # (B, Ta, input_dim) noise 中文说明：上面这段里，timestep_embed 把整数时间步变成连续向量（一般是正弦位置编码再线性变换），time_emb 和 cond_obs 各自把它俩映射到同一维度 256。down_blocks 逐层下采样，每个 block 内部把 c_emb 和 t_emb 以「加偏置（和条件有关的一个常数加到特征上）」的方式注入，这就是 FiLM 条件扩散的核心。最后 final_conv 把通道数压回 input_dim，输出和输入同形的「预测噪声」。\n关键认知：FiLM 注入为什么有效？因为 U-Net 的每一层特征都被「观察条件」调制了——网络在去噪的每一步都知道「我现在是在为这个观察服务」，于是它雕出来的动作天然贴合当前场景。这是「条件扩散」落地的最朴素实现，后面 DiffusionDrive 的 cross-attention 注入、pi0 的 conditioning 都是同一思想的变体。\n2.2 为什么是 1D 而不是 2D 动作序列是 (Ta, action_dim) 的二维张量，但「时间」和「动作维度」语义不同：时间轴是要去噪铺开的轴，动作维度是每个时间步的向量。1D U-Net 在「时间轴」上做卷积和下采样，把时间维压短再还原，通道维承载 action_dim。这和图像 2D U-Net 在「高 × 宽」上卷积是平行的思路，只是从 2D 降成了 1D。\n三、扩散过程：diffusion.py（DDPM 训练 + DDIM 推理的引擎） Diffusion 类是整个扩散过程的「发动机」。它管两件事：(1) 训练时怎么给干净动作加噪（forward diffusion，即 q_sample）；(2) 推理时怎么按 DDIM 一步步去噪（step）。\n3.1 加噪公式（DDPM 的 q_sample） DDPM 的前向过程是一个固定的马尔可夫链：在时刻 t，干净数据 x0 被加进方差为 β_t 的噪声。闭式解（直接跳到任意 t 步）是：\n$$x_t = \\sqrt{\\bar{\\alpha}_t}\\, x_0 + \\sqrt{1 - \\bar{\\alpha}_t}\\, \\epsilon, \\quad \\epsilon \\sim \\mathcal{N}(0, I)$$其中 $\\bar{\\alpha}_t = \\prod_{s=1}^{t}(1-\\beta_s)$，所以 $\\sqrt{\\bar{\\alpha}_t}$ 是「保留多少原始信号」，$\\sqrt{1-\\bar{\\alpha}_t}$ 是「加多少噪声」。这个公式就是代码里 q_sample 干的事：给定干净动作 action 和随机噪声 noise，按当前 timestep 的系数线性混合，一步到位得到 noisy_action，不用一步步迭代。\n3.2 训练：标准 DDPM 损失（预测噪声的 MSE） 训练目标极其简单——网络去预测「刚才加进去的那份噪声」，和真实噪声做均方误差。下面给简化伪代码（块内零中文）：\n# model/diffusion.py (simplified training step) def compute_loss(self, model, obs_cond, action): # action: (B, Ta, action_dim) clean action noise = torch.randn_like(action) # eps ~ N(0, I) timestep = torch.randint(0, self.horizon, (action.shape[0],)) noisy_action = self.q_sample(action, noise, timestep) # model predicts the noise added at timestep t pred_noise = model(noisy_action, timestep, global_cond=obs_cond) loss = F.mse_loss(pred_noise, noise) # epsilon-prediction return loss 中文说明：训练时随机抽一个时间步 timestep（从 0 到总步数之间均匀采样），用 q_sample 把干净动作变成带噪动作，再让 U-Net 预测噪声，最后和「真实加进去的噪声」算 MSE。注意这是 ε-prediction（预测噪声），和 DDPM 原论文完全一致。所有 Ta 个动作步、所有 action_dim 维一起联合回归，没有分步加权。\n一句话澄清：训练时网络「看不到」干净动作 x0，它只看到带噪动作和 timestep，被要求还原噪声。推理时反过来——从纯噪声出发，用网络反复预测噪声并减去，逐步逼近 x0。训练和推理是同一套网络、两种用法。\n3.3 推理：DDIM 多步采样 推理用 DDIM（确定性、可跳步），从纯高斯噪声 sample 出发，按调度给的时间步序列反向迭代。每步让 U-Net 预测噪声，再用 DDIM 更新公式把 sample 往「更干净」推一步。简化伪代码（块内零中文）：\n# model/diffusion.py (simplified DDIM step, conceptual) def ddim_step(self, model, sample, timestep, obs_cond, prev_timestep): noise_pred = model(sample, timestep, global_cond=obs_cond) # DDIM closed-form update (deterministic) alpha = self.alphas[timestep] alpha_prev = self.alphas[prev_timestep] x0_pred = (sample - torch.sqrt(1 - alpha) * noise_pred) / torch.sqrt(alpha) dir_term = torch.sqrt(1 - alpha_prev) * noise_pred sample = torch.sqrt(alpha_prev) * x0_pred + dir_term return sample 中文说明：上面这段是 DDIM 更新的一步逻辑（真实代码用 diffusers.DDIMScheduler 或自写调度，细节略有差异，但思想一致）：先由「带噪样本 + 预测噪声」反推出 x0 的估计，再按上一步的 alpha 重新组合出「更干净的样本」。反复 N 步（默认 20~100 步）后，sample 就近似成一段干净动作。DDIM 之所以快，是因为它允许把总步数从 DDPM 的 1000 步压缩到几十步且基本不降质量。\n四、策略入口：diffusion_unet1d_policy.py（把一切串起来） DiffusionUnet1dPolicy 是真正对外暴露 API 的类。它继承 DiffusionPolicy 总装，内部持有 ConditionalUnet1D（去噪网络）、Diffusion（扩散引擎）、obs_encoder（观察编码器）、noise_scheduler（DDIM 调度）。它最该被盯紧的两个方法是 compute_loss（训练）和 predict_action（推理）。\n4.1 训练路径 compute_loss 训练时，policy 先把观察编码成 obs_cond，再把 (obs_cond, action) 交给 Diffusion.compute_loss 算 MSE。简化逻辑（块内零中文）：\n# policy/diffusion_unet1d_policy.py (simplified) class DiffusionUnet1dPolicy(DiffusionPolicy): def __init__(self, model, obs_encoder, noise_scheduler, ...): self.model = model # ConditionalUnet1D self.obs_encoder = obs_encoder self.noise_scheduler = noise_scheduler def compute_loss(self, batch): obs = batch[\u0026#39;obs\u0026#39;] action = batch[\u0026#39;action\u0026#39;] # (B, Ta, action_dim) obs_cond = self.obs_encoder(obs) # (B, global_cond_dim) # normalize actions before diffusion (handled in dataset usually) loss = self.diffusion.compute_loss(self.model, obs_cond, action) return loss 中文说明：这里 obs_encoder 把观察压成条件，action 是数据集里已经 normalize 过的干净动作，compute_loss 内部就是上一节讲的「随机加噪 + 预测噪声 + MSE」。注意归一化通常在 dataset 侧就做好了，policy 拿到的是归一化后的动作，这样扩散的量纲才安全。\n4.2 推理路径 predict_action（DDIM 多步采样） 推理时，给定一段新观察，policy 先编码条件，再从纯噪声出发跑 DDIM 采样，最后把动作 unnormalize 回真实量纲。简化伪代码（块内零中文）：\n# policy/diffusion_unet1d_policy.py (simplified predict_action) @torch.no_grad() def predict_action(self, obs): obs_cond = self.obs_encoder(obs) # (B, global_cond_dim) sample = torch.randn((obs.shape[0], self.Ta, self.action_dim)) for t in self.noise_scheduler.step_timesteps: # DDIM reverse noise_pred = self.model(sample, t, global_cond=obs_cond) sample = self.noise_scheduler.step(noise_pred, t, sample) # sample now ~ clean action in normalized space action = self.normalizer[\u0026#39;action\u0026#39;].unnormalize(sample) return action # (B, Ta, action_dim) 中文说明：step_timesteps 是 DDIM 调度预先算好的「反向时间步序列」（比如从 999 跳到 0 的几十个离散点）。循环每步让 U-Net 预测噪声、调度器更新样本，循环结束 sample 就是归一化空间里的干净动作。最后用 normalizer 把它反归一化回机器人真实单位（度 / 米 / 弧度），这一步绝对不能漏，否则动作量纲不对、机器人直接抽风。\n关键认知：推理输出的动作是「整段 Ta 步」。但真正执行时，论文和工程实践都只取前 k 步（比如前 5 步）发给机器人，然后下一步重新观察、重新生成。这就是 recursive replanning（递归重规划），它能把单步误差「就地消化」，不让错误滚雪球。\n五、归一化：最容易踩的坑（base_dataset.py 的 LinearNormalizer） 扩散模型对量纲极敏感——动作向量里如果「角度」是几度、「位置」是几米、「速度」是每秒几米，数值尺度天差地别，网络会只盯着大尺度那一项学。所以 LinearNormalizer 是必做项，不是可选项。\n5.1 三种归一化模式 LinearNormalizer 支持几种缩放方式，最常见的是：\nnormal（均值/标准差）：减均值除标准差，把数据拉到「均值 0、方差 1」附近。 min_max：减最小值除以极差，把数据压到 [0, 1] 或 [-1, 1]。 identity：不归一化（某些本来就无量纲的字段用）。 它对「观察的各个 key」和「动作 action」分别 fit 统计量。简化实现（块内零中文）：\n# dataset/base_dataset.py (simplified LinearNormalizer) class LinearNormalizer: def __init__(self, mode=\u0026#39;normal\u0026#39;): self.mode = mode self.stats = dict() # key -\u0026gt; (mean, std) or (min, max) def fit(self, data_dict): # data_dict: key -\u0026gt; Tensor for key, tensor in data_dict.items(): mean = tensor.mean(dim=0) std = tensor.std(dim=0) + 1e-8 self.stats[key] = (mean, std) def normalize(self, x, key): mean, std = self.stats[key] return (x - mean) / std def unnormalize(self, x, key): mean, std = self.stats[key] return x * std + mean 中文说明：训练前先在整个训练集上 fit，统计每个 key 的均值/标准差；训练时 normalize 把动作和观察压到标准尺度再喂给扩散；推理时 predict_action 里用 unnormalize 把生成的动作还原回真实单位。千万记住：归一化和反归一化是成对出现的，fit 的统计量必须从训练集来、推理时复用，不能各自重新算。\n5.2 为什么归一化是「命门」 如果不归一化，扩散的损失函数会被大尺度维度主导，小尺度维度（比如细微的角度修正）几乎学不到，结果动作「大方向对、细节全废」，机器人表现为抖动或失控。论文里所有任务都做了归一化，这也是为什么 base_dataset 把这个逻辑放在数据层、和模型解耦——换任务只要换 dataset 里的 key 名，归一化框架不动。\n六、训练循环：train_diffusion_policy.py（Hydra 驱动的样板） 训练入口用 Hydra 读 yaml，构造 policy、dataset、optimizer，然后跑标准 PyTorch 训练循环。它不是本文重点，但有几个点值得点一下：\n配置全在 yaml：网络维度、学习率、噪声调度类型（linear/cosine）、DDIM 步数、To/Ta、batch size 全部写在 configs/train_diffusion_unet_*.yaml 里，代码里几乎不硬编码。这就是「换任务只改 yaml」的底气。 Workspace 模式：TrainLoop 负责跑 epoch、记 loss、存 checkpoint、可能还有验证集 rollout 评估。它和 policy / dataset 解耦，所以同一个训练循环能训任意 diffusion policy。 数据加载：dataset 在 __getitem__ 里返回 (obs, action) 样本（已经 normalize 过），dataloader 打包成 batch 喂给 policy.compute_loss。 简化训练骨架（块内零中文）：\n# workspace/train_diffusion_policy.py (simplified skeleton) def main(cfg): dataset = hydra.utils.instantiate(cfg.dataset) dataset.setup_normalizer() # fit LinearNormalizer on train set policy = hydra.utils.instantiate(cfg.policy) policy.load_normalizer(dataset.get_normalizer()) optimizer = torch.optim.Adam(policy.parameters(), lr=cfg.lr) for epoch in range(cfg.epochs): for batch in dataset.dataloader(): loss = policy.compute_loss(batch) optimizer.zero_grad(); loss.backward(); optimizer.step() policy.save_checkpoint(epoch) 中文说明：上面这段把核心流程画出来了——先 fit 归一化、再把归一化器灌给 policy（保证训练和推理用同一套统计量），然后标准 loss -\u0026gt; backward -\u0026gt; step 循环。工程上就这么朴素，复杂的东西全藏在 yaml 配置和各个被实例化的模块里。\n七、把一次前向 / 反向完整走一遍（串起来看） 为了让你脑子里有完整闭环，这里把「训练一步」和「推理一次」各用一句话列出来：\n训练一步：\n取一个 batch 的 (obs, action)，action 已 normalize。 obs_encoder 把 obs 编码成 obs_cond。 随机抽 timestep，q_sample 给 action 加噪得到 noisy_action。 ConditionalUnet1D 吃 (noisy_action, timestep, obs_cond) 预测噪声。 MSE(预测噪声, 真实噪声) 反传，更新 U-Net 参数。 推理一次：\n新 obs 编码成 obs_cond。 从纯噪声 sample 出发。 对 DDIM 的每个反向时间步：U-Net 预测噪声 → 调度器更新 sample。 循环结束得到归一化空间干净动作。 unnormalize 回真实量纲。 取前 k 步执行，下一步递归重规划。 一句话澄清：训练和推理用的是「同一个 U-Net」，区别只在于——训练时噪声是随机加的、timestep 是随机抽的；推理时噪声是纯高斯起步、timestep 是按调度从大到小固定走的。网络本身不区分「训练 / 推理模式」，区分的是「你怎么喂它噪声」。\n七之一、U-Net 内部到底长什么样（down / mid / up 三个块） 上一节我们把 ConditionalUnet1D 当成黑盒讲了输入输出，这一节把盒子打开，看看 down_blocks、mid_block、up_blocks 内部到底在算什么。理解了这块，你才算真正看懂「条件 1D U-Net」。\n每个下采样块（DownBlock1D）通常做三件事：一维卷积提取特征 → 用条件做 FiLM 调制 → 在时间轴（Ta）上下采样（stride=2 把序列压短一半）。中间块（MidBlock1D）是瓶颈，通道数最大、序列最短，做一次或几次卷积极限提取。上采样块（UpBlock1D）则是反向：先上采样把序列拉长、再卷积、再 FiLM，并且把同层下采样时存下来的 skip 特征拼回来（skip connection，U-Net 的灵魂，防信息丢失）。\n简化伪代码（块内零中文）：\n# model/noise_unet.py (simplified block internals) class DownBlock1D(nn.Module): def __init__(self, in_ch, out_ch, kernel_size=5): self.conv1 = nn.Conv1d(in_ch, out_ch, kernel_size, padding=kernel_size//2) self.conv2 = nn.Conv1d(out_ch, out_ch, kernel_size, padding=kernel_size//2) self.downsample = nn.Conv1d(out_ch, out_ch, kernel_size=3, stride=2, padding=1) def forward(self, x, c_emb, t_emb): h = self.conv1(x) h = h + c_emb[:, :, None] + t_emb[:, :, None] # FiLM: add cond + time h = F.silu(h) h = self.conv2(h) h = h + c_emb[:, :, None] + t_emb[:, :, None] # FiLM again h = F.silu(h) h = self.downsample(h) return h class UpBlock1D(nn.Module): def __init__(self, in_ch, out_ch, skip_ch, kernel_size=5): self.upsample = nn.ConvTranspose1d(in_ch, in_ch, kernel_size=3, stride=2, padding=1) self.conv1 = nn.Conv1d(in_ch + skip_ch, out_ch, kernel_size, padding=kernel_size//2) self.conv2 = nn.Conv1d(out_ch, out_ch, kernel_size, padding=kernel_size//2) def forward(self, x, skip, c_emb, t_emb): h = self.upsample(x) h = torch.cat([h, skip], dim=1) # skip connection h = self.conv1(h) h = h + c_emb[:, :, None] + t_emb[:, :, None] # FiLM h = F.silu(h) h = self.conv2(h) h = h + c_emb[:, :, None] + t_emb[:, :, None] # FiLM h = F.silu(h) return h 中文说明：上面这段把 FiLM 写得最直白——c_emb 和 t_emb 都被 broadcast 到「(B, 256, Ta)」的形状，然后直接加到特征上。注意 FiLM 标准做法是「缩放 gamma + 偏移 beta」两个参数，这里为简化只写了「加偏移」一种；真实代码里 global_cond 会被拆成 (scale, shift) 两路分别乘和加，但思想完全一致：「用条件去调制特征」。skip 拼接则是让上采样时能找回下采样时压缩掉的高频细节，否则去噪出来的动作会糊。\n一句话澄清：你不需要背下这些卷积维度。只要记住三件事：(1) 时间轴 Ta 在下采样时变短、上采样时变长；(2) 每一层都被观察条件和时间步调制（FiLM）；(3) skip connection 把细节从下采样层「抄近路」送回上采样层。这三点就是 1D U-Net 去噪的全部奥义。\n七之二、三种观察编码器到底差在哪（obs_encoder.py 细看） 前面说过 Diffusion Policy 支持 CNN / 状态 MLP / 时序 RNN-Transformer 三种编码器。这里补一句每种适合什么、代码长啥样。核心差异只在 backbone，输出都会被压成同一个维度的 global_cond，所以下游 U-Net 完全无感。\n简化伪代码（块内零中文）：\n# model/obs_encoder.py (three encoder variants, simplified) class StateEncoder(nn.Module): def __init__(self, input_dim, out_dim=256): self.mlp = nn.Sequential( nn.Linear(input_dim, out_dim), nn.SiLU(), nn.Linear(out_dim, out_dim)) def forward(self, obs): # obs: (B, obs_dim) return self.mlp(obs) # (B, out_dim) class CNNEncoder(nn.Module): def __init__(self, shape, out_dim=256): self.cnn = build_cnn(shape, out_dim) def forward(self, obs): # obs: (B, To, C, H, W) b, t = obs.shape[0], obs.shape[1] x = obs.reshape(b*t, *obs.shape[2:]) x = self.cnn(x).reshape(b, t, -1).mean(dim=1) return x # (B, out_dim) class RecurrentEncoder(nn.Module): def __init__(self, input_dim, out_dim=256): self.rnn = nn.GRU(input_dim, out_dim, batch_first=True) def forward(self, obs): # obs: (B, To, obs_dim) _, h = self.rnn(obs) return h.squeeze(0) # (B, out_dim) last hidden 中文说明：StateEncoder 最简单，obs 本身就是低维向量，过两层 MLP 即可，适合「机器人关节角、自车状态」这类结构化输入。CNNEncoder 吃图像，把 To 步当 batch 维一起提特征再平均，适合「多视角相机」输入。RecurrentEncoder 用 GRU 把时序 obs 压成最后一步隐状态，能显式建模「过去几帧怎么变化」，适合动态场景。自动驾驶里常用 CNN（吃 BEV / 环视图）或 Recurrent（吃时序状态）两种。\n关键认知：观察编码器是「把任务差异关进的笼子」。U-Net 和扩散过程完全不关心你喂的是图像还是状态——它们只认 global_cond 这个固定维度向量。这就是为什么换任务只改 encoder + dataset，网络主体纹丝不动。\n七之三、DDPM 训练 vs DDIM 推理：为什么能快这么多 很多人第一次见到「训练 1000 步、推理 20 步」会困惑：步数不一样，网络不会乱吗？答案是：不会，因为 DDPM 和 DDIM 共享同一套训练好的噪声预测网络，区别只在「怎么用网络」。\nDDPM 推理：每一步都从「带噪样本 + 预测噪声」里减掉噪声，并重新注入一点随机噪声（保持随机性），必须一步步走完（一般 1000 步）才能收敛。慢，但样本多样性好。 DDIM 推理：去掉了每步重新注入的随机噪声，变成确定性映射，因此可以「跳步」——只在 20~100 个离散时间步上走，中间的直接跳过。快，且结果基本不变。 用一句话类比：DDPM 是「每步都重新掷骰子决定往哪走」的随机漫步，必须走满才能到目的地；DDIM 是「看一眼地图（网络预测的噪声方向）就直线抄近路」，所以少走几步也到得了。两者训练时学的是同一张「地图」（噪声预测器），所以共享网络不冲突。\n七之四、多模态动作：一次推理怎么「雕」出不同开法 扩散模型表达多模态的天然机制是：从不同的纯噪声起点出发，去噪后会收敛到不同的合理动作。这不像回归模型「一个输入对应一个输出」，而是「一个输入 + 不同噪声种子 = 多个可能输出」。\n工程上怎么用这个性质？一个常见做法是：推理时一次性采 K 个独立噪声起点，各自跑一遍 DDIM，得到 K 条候选动作序列，再用一个评判函数（比如「哪条最不容易撞」）挑一条执行。这其实就是后面 DiffusionDrive 用 20 个 anchor + argmax 选轨迹的思想雏形——只不过 Diffusion Policy 是从「纯噪声」出发、DiffusionDrive 是从「anchor 模板」出发，本质都是「多起点生成 + 择优」。\n简化伪代码（块内零中文）：\n# sampling K multimodal candidates (conceptual) def predict_action_multimodal(self, obs, K=8): obs_cond = self.obs_encoder(obs) candidates = [] for k in range(K): sample = torch.randn((1, self.Ta, self.action_dim)) # different seed for t in self.noise_scheduler.step_timesteps: noise_pred = self.model(sample, t, global_cond=obs_cond) sample = self.noise_scheduler.step(noise_pred, t, sample) candidates.append(self.normalizer[\u0026#39;action\u0026#39;].unnormalize(sample)) return candidates # list of K actions 中文说明：上面这段把「多模态」写成最朴素的形式——同一个 obs，跑 K 次不同随机种子，得到 K 条动作。实际仓库里 Diffusion Policy 默认只取 1 条（单样本执行 + 递归重规划），但多候选 + 筛选是扩散类方法通用的「准确率放大器」，你在 DiffusionDrive / Diffusion Planner 里会反复见到它的升级版。\n七之五、常见坑排查清单（踩过的都在这） 坑 1：忘记 unnormalize。推理出来动作直接发机器人，结果量纲错乱、机器人抽搐。永远记得 predict_action 最后一步要把动作反归一化。 坑 2：训练和推理用两套统计量。归一化的 mean/std 必须从训练集 fit、推理时复用，绝不能推理时重新算。否则归一化空间错配，生成动作全偏。 坑 3：obs 和 action 的 key 对不上。LinearNormalizer 是按 key 存统计量的，dataset 里 normalize 用的 key 必须和推理 unnormalize 用的 key 完全一致，差一个字母就崩。 坑 4：timestep 不是整数 / 越界。q_sample 和调度器都要求 timestep 在 [0, horizon) 内且和调度表对齐，乱传会索引报错。 坑 5：DDIM 步数设太少导致动作糊。20 步通常够，但任务复杂时降到 10 步以内可能雕不干净，表现为动作发抖。权衡速度和质量是常事。 坑 6：To 和 Ta 配错。观察看太短（To 太小）会丢历史动态，动作出太长（Ta 太大）会增加去噪负担且累积误差。论文常用 To=2、Ta=16 起手。 一句话澄清：这六个坑里，前三个（归一化相关）占了实际调试时间的八成。扩散对量纲的敏感不是玄学，是数学——MSE 损失会被大尺度维度主导，所以「先归一化、后扩散、再反归一化」是铁律，没有例外。\n八、为什么它重要（方法论母体的位置） 多步动作 + 扩散天然表达多模态（同一观察可有多条合理动作），比高斯回归一个均值强太多。这是 Diffusion Policy 被后续所有扩散驾驶方法继承的第一性原理。 和任务无关：同一套代码跑机械臂、跑推方块、跑自动驾驶都行，只需要换 obs 编码器与 dataset。解耦设计让它成为「扩散 + 控制」的通用基线。 它是后面所有「扩散驾驶策略」的方法论母体：DiffusionDrive 的 truncated diffusion、Diffusion Planner 的轨迹扩散、pi0 的 flow-matching 动作模型，都是它的变体——要么改了去噪网络（Transformer / cross-attention），要么改了起点（anchor / 流匹配），要么挂了 VLM，但「观察作条件、噪声雕动作、多步输出、递归执行」的骨架一脉相承。 九、和本系列其他文章的关系 自动驾驶里直接套 Diffusion Policy 思路、把动作换成轨迹并加 anchor 加速 → DiffusionDrive（生成式端到端，截断扩散 2 步去噪）。 把动作换成轨迹、强调无训练引导和多模态规划 → Diffusion Planner（下一篇，轨迹扩散）。 把扩散换成 Flow Matching、再挂一个 VLM 当视觉-语言条件 → pi0（视觉-语言-动作模型）。 本篇（Diffusion Policy）是它们的「第 0 课」：不懂这篇的 FiLM 条件注入、DDPM 损失、DDIM 采样、归一化命门，后面三篇的加速 trick 和变体你都会看得云里雾里。 个人思考：Diffusion Policy 的精髓是「把控制当生成」。它不假装自己懂物理、不建模动力学，只是用扩散把「多模态动作分布」老老实实学出来。这种思路一旦进入驾驶域，立刻解决「回归式规划只会出平均轨迹」的顽疾——平均轨迹在「左绕还是右绕」这种分叉点上，往往是一条既撞左车又撞右车的自杀路线。我在 Flow-GRPO 里反复用到的底层直觉，追根溯源就是这篇 RSS 2023 的 Diffusion Policy：先承认分布是多峰的，再用生成模型把它雕出来，最后用采样 / 引导去挑那条真正安全的。读懂它，后面所有扩散驾驶方法都是「换皮不换骨」。\n","permalink":"https://auto-driving-blog.pages.dev/posts/code/diffusionpolicy%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"「Diffusion Policy 把『给一段观察、出一段动作序列』做成条件扩散生成：噪声动作被 ConditionalUnet1D 逐步去噪，训练是 DDPM 标准损失（预测加到数据上的噪声、MSE），推理是 DDIM 多步采样（20~100 步），归一化必做且推理要 unnormalize 回真实量纲。本文顺着 real-stanford 官方仓库，从名词速查、架构总览、项目结构，到 ConditionalUnet1D / diffusion / diffusion_unet1d_policy / base_dataset / train_diffusion_policy 逐文件逐函数细讲，并穿插『为什么多步动作更稳、为什么扩散天然多模态、为什么归一化是命门』等认知，最后落到它作为 DiffusionDrive / Diffusion Planner / pi0 方法论母体的位置，是一篇面向零基础、超详细、篇幅足够长的工程向代码讲解」","title":"Diffusion Policy 代码讲解：用 DDPM 给机器人「生成」一连串动作"},{"content":"项目简介 Flow-GRPO 是将 Flow Matching 与 GRPO 强化学习结合用于自动驾驶策略训练的工作。本项目聚焦于读通源码、跑通流程、理解稀疏奖励下的策略对齐。\n我做了什么 整理了一份小白友好的源码阅读顺序，并在关键文件加入教学注释，帮助快速建立整体认知。 梳理了从环境交互、轨迹采样、奖励计算到 GRPO 更新的完整数据流。 记录了训练启动、显存/采样步数等工程踩坑与对应解法。 成果 产出两篇源码学习笔记：总体架构笔记 + 小白版阅读顺序（带注释）。 形成一份可复用的「Flow-GRPO 跑通 checklist」。 相关链接 GitHub: github.com/qyllll 配套笔记：Flow-GRPO 源码学习笔记、小白版源码学习教程 ","permalink":"https://auto-driving-blog.pages.dev/posts/projects/flow-grpo/","summary":"基于 Flow-GRPO 的自动驾驶策略源码学习与复现记录，含小白友好的阅读顺序与教学注释。","title":"Flow-GRPO 源码学习与策略复现"},{"content":"项目简介 重卡与小客车在动力学上差异巨大：质心高、载荷易滑移、侧翻风险高。本项目围绕重卡场景下的安全驾驶策略展开，结合 TruckSim 协同仿真评估策略安全性。\n我做了什么 系统梳理重卡安全相关前沿工作（TruckDrive、TruckV2X、CargoLoad 侧翻、AntiRollover 等），产出多篇高质量论文精读。 研究在动力学约束下生成既舒适又安全的轨迹的方法，关注侧翻/载荷滑移的风险量化。 探索 V2X 信息如何提升重卡在恶劣天气与盲区场景下的决策能力。 成果 4 篇重卡安全论文精读（累计 4 万字+），覆盖感知、规划、载荷安全与防侧翻。 建立重卡安全论文的系统性知识框架，可作为该细分方向的入门地图。 相关链接 论文精读合集：TruckDrive、TruckV2X、CargoLoad、AntiRollover ","permalink":"https://auto-driving-blog.pages.dev/posts/projects/nutruck/","summary":"面向重卡场景的安全驾驶策略研究，关注侧翻与载荷滑移风险评估及动力学约束下的轨迹生成。","title":"nuTruck 重卡安全驾驶策略研究"},{"content":" 本文是「代码讲解」路线的第 9 篇（收官篇）。pi0（Physical Intelligence，2024）是通用机器人 VLA 的代表作，但它和前几篇的 AutoVLA / DriveVLA-W0 共享同一套底层思想：VLM 负责理解世界，动作头负责把理解变成可执行动作。代码在官方 Physical-Intelligence/openpi。\n写给零基础读者：读这篇之前先搞懂几个名词 很多同学一看到「Flow Matching」「cross-attention」「两塔并联」就头大。别慌，这一段专门用大白话把后面要反复用到的名词翻译一遍。你可以先扫一眼，后面遇到忘了再回来翻。\nPaliGemma：Google 出的一个「轻量版视觉语言模型（VLM）」。它自己又由两小块拼成——一个叫 SigLIP 的视觉塔（看图的）和一个叫 Gemma 的语言塔（读文字的）。pi0 把它整个借过来当「通用感知-语义主干」，意思是：摄像头画面它看得懂，你说的话它也听得懂，但它本身不负责伸手去干活。\nAction Expert（动作专家）：pi0 里一个完全独立的 Transformer 模块，专门干一件事——把「VLM 看明白的特征 + 一团噪声动作」去噪成「真实的、能执行的动作」。它和 VLM 是两套不共享的权重，是并联的两座塔，不是 VLM 里塞个小头。\nFlow Matching（流匹配）：这是 pi0 动作生成的核心数学工具。它不像老一代 DDPM 那样「一步步加噪、再一步步去噪」。它直接去学一个从噪声到真实数据的向量场（一个 ODE 方向场），然后沿着这个向量场走几步（积分）就到了真实数据。pi0 实际只用 10~50 步，比 DDPM 快一个数量级。你可以把它理解成「给一团乱麻直接指一条最短下山的路，走十步就到谷底」，而不是「蒙着眼睛一步步试探」。\ncross-attention 注入：动作专家自己没有视觉能力，它靠 cross-attention（交叉注意力） 这个机制，从 VLM 主干那里「借」语义特征。就像动作专家是个只懂动手的工人，VLM 是个懂全局的工程师，工人每干一步都回头问工程师「现在场景是啥样」，而不是把工程师也拉来一起搬砖。\nODE 积分 / Euler 步：ODE 就是常微分方程，这里指「向量场定义的轨迹」。Euler 步是最朴素的积分法——知道当前点在哪、方向往哪，就朝方向走一小步。重复走 N 步就到了。pi0 推理时大概走 10 步。\n多机器人通用：同一套架构，换不同的动作投影头和 tokenizer，就能跑机械臂抓取、叠衣服、收拾桌子等不同机器人、不同任务。这是 pi0 被叫「通用」的原因。\ntokenizer / transform（动作维度适配）：不同机器人动作维度不一样（机械臂可能是 7 维，移动底盘可能是 2 维）。transforms 模块负责把原始观测和原始动作「打包成模型能吃的 token」，把维度对不齐的问题在入口处解决掉。\n两塔结构（VLM 主干 + 动作专家并联）：这是 pi0 的骨架。一座塔（VLM）永远在「理解」，另一座塔（动作专家）永远在「生成动作」，两者权重独立、并行工作，靠 cross-attention 串联。记住这四个字后面会反复出现。\n一句话澄清：所谓「两塔」，不是指跑在两台机器上，而是指模型里有两份互相独立、不共享权重的 Transformer 权重。它们可以、也通常跑在同一张显卡上。\n0. 为什么要讲 pi0 的代码 前面八篇我们把自动驾驶的端到端方法从 UniAD 讲到 DriveVLA-W0，已经把「感知-预测-规划」和「VLM 理解 + 动作生成」两条线都摸了一遍。但一直有个问题没回答：动作到底该离散成 token 用 RL 对齐（像 AutoVLA），还是该连续地用生成模型直接吐出来（像 Diffusion Policy）？ pi0 给了一个非常干净、非常工程化、而且被真实机器人验证过的答案：连续 Flow Matching，不用 RL，动作专家独立成塔。\n讲 pi0 还有个额外好处：它是官方开源、代码可读性极高的仓库（Physical-Intelligence/openpi），不像很多论文只给半截伪代码。顺着它的源码，你能看到一套「通用 VLA 该怎么落地」的工业级范本。\n1. 一句话结论 一句话结论：pi0 = 冻结（或极低 lr）的 PaliGemma VLM 主干 + 一个独立训练的 Flow Matching 动作专家；前者负责「看懂场景和语言」，后者通过 cross-attention 借前者的特征，沿 10 步 ODE 把噪声动作流成真实连续动作；训练时只训动作专家 + 轻量适配层，VLM 主干基本不动。\n记住这句话，后面所有代码都是在为它做注脚。\n2. 架构总览 先用文字把 pi0 的数据流捋一遍，不引用任何图片，纯靠描述你也能在脑子里画出来：\n输入：若干张摄像头图像（多视角）+ 一段自然语言指令（比如「把红色方块放到蓝色碗里」）+ 当前机器人本体状态（关节角、夹爪开合等）。 VLM 主干（PaliGemma）：图像过 SigLIP 视觉塔，语言过 Gemma 语言塔，两者在 Transformer 里融合，吐出一串语义特征（shape 大概是 (B, L, H)，B 是 batch，L 是 token 数，H 是隐藏维度）。这一步不参与动作梯度的反向传播（冻结或极低 lr）。 动作专家（Action Expert）：把「当前噪声动作序列 + 时间步 t + VLM 特征」一起喂进去。它在内部先用自注意力（self-attention）让动作 token 之间互相看，再用 cross-attention 去 VLM 特征里「取」和当前动作相关的语义。最后用一个线性头输出向量场 v（指向真实动作的方向）。 训练目标（Flow Matching）：构造一条从噪声到真实动作的线性插值路径 x_t = (1-t)*noise + t*action，让网络预测的 v_pred 去逼近真值向量场 v_target = action - noise，用 MSE 回归。 推理（ODE 积分）：从纯噪声出发，沿网络给出的向量场走约 10 步 Euler，就得到真实动作序列，直接发给机器人执行。 下面用 Markdown 列表把模块边界再划清楚：\n理解侧（冻结/低 lr）：PaliGemma（SigLIP 视觉塔 + Gemma 语言塔）。 生成侧（主训练对象）：Action Expert（自注意力 + 对 VLM 的 cross-attention + 线性输出头）。 训练侧：Flow Matching 损失（向量场 MSE）。 推理侧：10 步 ODE Euler 积分。 适配侧：transforms（观测/动作 tokenize，动作维度对齐）。 关键认知：pi0 的「通用」不是靠一个巨大模型硬吞所有任务，而是靠「主干通用、动作头分身」——VLM 主干一招鲜吃遍所有机器人，动作专家每家机器人各训各的。这点和自动驾驶里「一套感知 backbone 复用、规划头分场景」的思路异曲同工。\n3. 项目结构 我们要讲的代码来自官方仓库 Physical-Intelligence/openpi。先说边界：这个仓库是 pi0 的官方实现，不是第三方复刻，所以命名和论文一一对应。核心边界就一句话——\npi0 = PaliGemma VLM 主干 + 独立 Flow Matching 动作专家，两塔并联、不共享权重。\n用 Markdown 嵌套列表把目录树画出来（注意这里不用任何框线字符，纯靠缩进）：\nopenpi/ src/openpi/ models/ pi0.py：pi0 总装，把 VLM 和 Action Expert 拼到一起 paligemma.py：PaliGemma 主干封装（加载权重、前向、取特征） action_expert.py：Flow Matching 动作专家（自注意 + 对 VLM 交叉注意，输出向量场 v） training/ config.py：训练超参配置 trainer.py：训练循环 + Flow Matching 损失 inference/ runtime.py：推理（10 步 ODE Euler 积分生成动作） transforms/ 观测 tokenize（图像/语言 → VLM 输入） 动作 tokenize（机器人状态 → (Ta, action_dim)） examples/ aloha/：具体机器人（如 ALOHA 机械臂）适配示例 scripts/ train.py：启动训练 infer.py：启动推理 后面我们就按这个顺序，逐文件逐函数拆。\n4. pi0.py：总装两塔 pi0.py 是整个模型的「总装车间」。它不实现任何花哨的数学，只负责把 VLM 主干和动作专家拼起来、对齐维度、定义前向接口。\n先看它怎么初始化。简化伪代码如下（块内零中文，中文说明在块外）：\n# src/openpi/models/pi0.py (simplified) import torch import torch.nn as nn from .paligemma import PaliGemma from .action_expert import ActionExpert class PI0(nn.Module): def __init__(self, paligemma: PaliGemma, action_dim: int, action_horizon: int, vlm_hidden: int): super().__init__() self.vlm = paligemma self.action_expert = ActionExpert( action_dim=action_dim, vlm_hidden=vlm_hidden, horizon=action_horizon, ) # lightweight adapter that projects vlm features into expert space self.vlm_adapter = nn.Linear(vlm_hidden, vlm_hidden) def forward(self, images, lang, noisy_actions, t): with torch.no_grad(): vlm_feat = self.vlm(images, lang) # (B, L, H) semantic features vlm_feat = self.vlm_adapter(vlm_feat) act_out = self.action_expert(noisy_actions, vlm_feat, t) return act_out # predicted vector field v(x, t) 中文说明：\nself.vlm 就是 PaliGemma 主干。注意 forward 里用 torch.no_grad() 把它包起来——这意味着训练时 VLM 主干不参与反向传播，梯度根本不会流进 SigLIP/Gemma。这就是「冻结主干」的硬实现。 self.action_expert 是真正要训的塔。它接收三个东西：噪声动作、VLM 特征、时间步 t。 self.vlm_adapter 是一个轻量适配层（一个线性层），把 VLM 的隐藏维度投到动作专家方便用的空间。训练时这个层是可训的，属于「冻结主干 + 训轻量适配层」策略的一部分。 一句话澄清：torch.no_grad() 包住 VLM 是最省显存的冻结写法——连中间激活都不用存，反向时直接跳过。如果你看到有人用 requires_grad=False 也行，但 openpi 这种写法更干净。\nPI0 类对外只暴露一个 forward(images, lang, noisy_actions, t)，返回向量场。它本身不关心「这是训练还是推理」，训练和推理的区别全在调用方怎么构造 noisy_actions 和 t：训练时 noisy_actions 是插值出来的，推理时 noisy_actions 是纯噪声。这个设计很妙——模型本体无状态，干净。\n5. paligemma.py：VLM 主干封装 paligemma.py 的职责是把 Google 的 PaliGemma 原模型封一层皮，让它能吐出中间语义特征，而不是只吐文本。我们看简化版：\n# src/openpi/models/paligemma.py (simplified) from transformers import PaliGemmaForConditionalGeneration class PaliGemma(nn.Module): def __init__(self, pretrained_id: str): super().__init__() self.model = PaliGemmaForConditionalGeneration.from_pretrained(pretrained_id) # freeze all parameters of the backbone for p in self.model.parameters(): p.requires_grad = False def forward(self, images, lang): outputs = self.model(pixel_values=images, input_ids=lang, output_hidden_states=True) # take the last hidden state of the text+image tokens as semantic features feat = outputs.hidden_states[-1] return feat 中文说明：\n它直接复用 HuggingFace 的 PaliGemmaForConditionalGeneration，省去自己写 SigLIP + Gemma 融合的麻烦。 初始化时把所有参数 requires_grad = False，彻底冻结。这和 pi0.py 里的 no_grad 是双保险：即使哪天有人忘了包 no_grad，梯度也流不进主干。 forward 里开 output_hidden_states=True，把最后一层隐藏状态当语义特征返回。这个 (B, L, H) 张量就是动作专家要「借」的东西。 关键认知：pi0 没有重新训一个 VLM，而是白嫖了 Google 在海量图文数据上预训练好的 PaliGemma。这解释了为什么 pi0 能用相对少的机器人数据训出通用策略——语义理解能力是「借」来的，不是从零学的。\n这里顺带提一句 PaliGemma 内部的两塔：SigLIP 视觉塔把图像打成视觉 token，Gemma 语言塔把文字打成文本 token，两者拼成一条序列进 Transformer。pi0 只取融合后的隐藏态，不关心内部怎么融的。\n6. action_expert.py：Flow Matching 动作专家 这是 pi0 的心脏。action_expert.py 定义一个 Transformer，输入是「噪声动作序列 + 时间步 + VLM 特征」，输出是指向真实动作的向量场 v。\n先看结构：\n# src/openpi/models/action_expert.py (simplified) import torch import torch.nn as nn class ExpertBlock(nn.Module): def __init__(self, dim: int): super().__init__() self.sa = nn.MultiheadAttention(dim, num_heads=8, batch_first=True) # self-attn over actions self.ca = nn.MultiheadAttention(dim, num_heads=8, batch_first=True) # cross-attn to vlm self.ff = nn.Sequential(nn.Linear(dim, dim * 4), nn.GELU(), nn.Linear(dim * 4, dim)) self.norm1 = nn.LayerNorm(dim) self.norm2 = nn.LayerNorm(dim) self.norm3 = nn.LayerNorm(dim) def forward(self, x, vlm_feat, t_emb): x = self.norm1(x + self.sa(x, x, x)[0]) x = self.norm2(x + self.ca(x, vlm_feat, vlm_feat)[0]) # query from actions, kv from vlm x = self.norm3(x + self.ff(x)) return x class ActionExpert(nn.Module): def __init__(self, action_dim: int, vlm_hidden: int, horizon: int, n_layer: int = 8, dim: int = 1024): super().__init__() self.tok_emb = nn.Linear(action_dim + vlm_hidden, dim) self.time_emb = nn.Sequential(nn.Linear(1, dim), nn.SiLU()) self.blocks = nn.ModuleList([ExpertBlock(dim) for _ in range(n_layer)]) self.head = nn.Linear(dim, action_dim) def forward(self, noisy_actions, vlm_feat, t): # concat noise action tokens with vlm tokens along feature dim x = torch.cat([noisy_actions, vlm_feat[:, : noisy_actions.size(1), :]], dim=-1) x = self.tok_emb(x) x = x + self.time_emb(t.unsqueeze(-1)) for blk in self.blocks: x = blk(x, vlm_feat, t) return self.head(x) # vector field v 中文说明，逐点讲：\nExpertBlock 是动作专家的基本层，里面三件套： sa：自注意力，让「动作序列里不同时间步的动作」互相看（比如第 3 步的动作会参考第 1、2 步）。 ca：交叉注意力，query 来自动作，key/value 来自 VLM 特征。这就是前面说的「动作专家回头问工程师」。动作 token 通过它从 VLM 那里取和自己相关的语义（比如「手要伸向红块」）。 ff：前馈网络，常规操作。 三个 norm + 残差，标准的 Pre-LN Transformer 风格。 ActionExpert 把噪声动作和 VLM 特征在特征维拼起来（torch.cat），过一个线性嵌入 tok_emb 升到模型维度 dim。 时间步嵌入 time_emb：Flow Matching 是连续时间，t 是个标量，过一个小 MLP 变成和隐藏维同形的向量，加回去。这告诉网络「现在在第几步去噪」。 最后 head 是个线性层，把 dim 维压回 action_dim，输出向量场 v。注意输出维度和输入动作维度一致——因为向量场要描述「动作每维该往哪走」。 一句话澄清：动作专家输出的不是「动作本身」，而是「动作该往哪个方向改」的向量场。真正的动作是推理时沿这个场积分走出来的。这点务必分清，否则后面看损失函数会懵。\n为什么用 cross-attention 而不是把 VLM 特征直接 concat 进每层？因为 concat 会让动作专家被迫处理变长的 VLM token 序列，且语义和动作混在一起难训。cross-attention 让动作专家按需取用语义，更稳、更通用。\n7. training/trainer.py：Flow Matching 损失 训练侧的核心在 trainer.py。它要回答一个问题：怎么让动作专家学会「输出正确的向量场」。答案就是 Flow Matching 的标准损失。\n先上公式（KaTeX，公式内全英文，不用 \\tag，用 aligned）：\n$$ \\begin{aligned} x_t \u0026= (1 - t) \\cdot \\text{noise} + t \\cdot \\text{action} \\\\ v_{\\text{target}} \u0026= \\text{action} - \\text{noise} \\end{aligned} $$意思是：在时间 t，把噪声和真实动作做线性插值得到 x_t；而这条直线路径上的真值向量场方向，正好就是 action - noise（从噪声指向动作）。网络只要学会预测这个方向就行。\n看简化训练代码：\n# src/openpi/training/trainer.py (simplified) import torch import torch.nn.functional as F def fm_loss(model, images, lang, action): noise = torch.randn_like(action) t = torch.rand((action.size(0),), device=action.device) # uniform in [0, 1] t_expand = t.view(-1, 1, 1) x_t = (1 - t_expand) * noise + t_expand * action # linear path v_target = action - noise # ground-truth field v_pred = model(images, lang, x_t, t) # predicted field return F.mse_loss(v_pred, v_target) def train_one_step(model, opt, batch): images, lang, action = batch loss = fm_loss(model, images, lang, action) opt.zero_grad() loss.backward() opt.step() return loss.item() 中文说明：\nnoise 从标准正态采样，和真实动作同形。 t 在 [0,1] 均匀采样，每个样本一个时间。 x_t 就是上面公式里的线性插值；v_target = action - noise 是真值向量场。 v_pred 是动作专家沿当前 x_t 和时间 t 预测的向量场。 损失就是两者 MSE。就这么简单，没有 KL、没有对抗、没有 RL——这也是 pi0 比 AutoVLA 干净的地方。 关键认知：Flow Matching 的损失本质是「回归一个方向向量」。它比 DDPM 的噪声预测损失更直接——DDPM 要预测加进去的噪声，Flow Matching 直接预测「朝数据的速度」。数学上等价但数值更稳、步数更少。\n注意 train_one_step 里优化器 opt 通常只把动作专家和适配层放进去了，VLM 主干参数根本没注册进优化器（因为前面 requires_grad=False）。这就是「动作头只训动作专家 + 轻量适配层，VLM 主干冻结」的工程落地。\n8. inference/runtime.py：10 步 ODE Euler 积分 推理侧在 runtime.py。训练完，动作专家会输出向量场，推理就是从纯噪声出发，沿向量场走 N 步。\n公式（Euler 积分一步）：\n$$ x_{i+1} = x_i + \\frac{1}{N} \\cdot v(x_i, t_i) $$看代码：\n# src/openpi/inference/runtime.py (simplified) import torch class Runtime: def __init__(self, model, n_step: int = 10): self.model = model self.n_step = n_step @torch.no_grad() def predict(self, images, lang, action_dim: int, horizon: int): vlm_feat = self.model.vlm(images, lang) x = torch.randn((images.size(0), horizon, action_dim), device=images.device) for i in range(self.n_step): t = torch.full((images.size(0),), i / self.n_step, device=images.device) v = self.model.action_expert(x, vlm_feat, t) x = x + (1.0 / self.n_step) * v # one Euler step return x # real action sequence 中文说明：\n推理同样用 no_grad，因为不训了。 x 从纯噪声起手，shape 是 (B, horizon, action_dim)——horizon 是动作序列长度（比如未来 16 步动作）。 循环 n_step=10 次，每步算当前向量场 v，朝它走 1/n_step 这么长一步。10 步走完，x 就从噪声「流」到了真实动作分布。 返回的就是可以直接发给机器人执行的动作序列。 一句话澄清：推理时 t 是从 0 走到接近 1（i/n_step），对应训练时路径从噪声(0)到动作(1)。t 必须和训练分布对齐，否则向量场会指错方向。\n为什么只用 10 步？因为 Flow Matching 学的是直线路径上的恒定方向场，不像 DDPM 那种弯曲、需要很多步才能拐过来的轨迹。10 步在真实机器人上已经够平滑够准，这也是 pi0 能实时（10Hz 以上）的关键。Diffusion Policy 类方法通常要 20100 步，差一个数量级。\n9. transforms/：观测与动作的 tokenize 不同机器人动作维度天差地别，pi0 用 transforms 模块在入口处把一切对齐。简化逻辑：\n# src/openpi/transforms/ (simplified) def transform_obs(raw_images, lang_prompt, tokenizer): images = preprocess_images(raw_images) # resize / normalize -\u0026gt; VLM input lang_ids = tokenizer(lang_prompt)[\u0026#34;input_ids\u0026#34;] return images, lang_ids def transform_action(robot_state, action_horizon, action_dim): # pad / clip robot state into fixed (horizon, action_dim) tensor action = pad_to_shape(robot_state, (action_horizon, action_dim)) return action 中文说明：\ntransform_obs：把原始多视角图像预处理成 PaliGemma 要的尺寸/归一化，把语言指令 tokenize 成 input_ids。产出 VLM 的输入。 transform_action：把不同机器人的原始状态（维度可能乱七八糟）pad / clip 成统一的 (horizon, action_dim)。这就是「动作维度适配」的落点。 训练时这套 transform 保证「动作专家永远看到固定维度的动作 token」，于是同一份动作专家代码能服务所有机器人，只是 transform 配置不同。这正是「通用」的工程秘密——变的东西挡在 transform 里，不变的东西留在模型里。\n关键认知：pi0 的通用性不是模型结构魔法，而是「模型吃固定形状、差异全在 transform」。这对我们做自动驾驶 VLA 也很有启发：把传感器差异、动作空间差异都封进 preprocessing，主干就能复用。\n10. 和自动驾驶 VLA 家族的对照 把 pi0 放回本系列的坐标系里，和前面几篇对照一下，你会看得更清楚：\nAutoVLA：动作做成离散 token，用 GRPO（强化学习） 对齐到奖励。pi0 用连续 Flow Matching，完全不用 RL。一个靠「试错拿奖励」，一个靠「直接回归方向场」。 DriveVLA-W0：强调世界模型（预测未来帧 / 未来场景），动作生成建立在「先想清楚未来」之上。pi0 不做显式世界模型，只做「观测 → 动作」的直推，靠 VLM 主干里隐含的世界知识。 共同点：都是「VLM 理解 + 独立动作头生成」的两段式。pi0 证明了这条路在机器人上通，AutoVLA / DriveVLA-W0 证明了在驾驶上通。底层思想是同一个。 一句话澄清：pi0 没有世界模型不代表它「不懂未来」，而是它把对未来/物理的常识压缩进了冻结的 VLM 主干里，不显式建模。这是工程取舍，不是能力缺失。\n11. 个人思考 九篇写下来，我对端到端自动驾驶与通用机器人 VLA 的方法论收敛出两条互补路线：\n生成式（扩散 / Flow Matching） 解决「多模态 + 安全分布」：同一场景可能有多种合理动作，生成模型天然能覆盖这个分布，不会硬选一个。 语言化（VLA） 解决「可解释 + 常识推理 + 易对齐」：把语言接进来，决策能被人读懂、被人用自然语言约束。 pi0 站在通用机器人视角给了一个很关键的示范：动作完全可以是连续 Flow Matching 生成，不一定非要像 AutoVLA 那样离散成 token + RL。两者各有取舍——离散 token 好接 RL、好对齐人类偏好，但丢掉了动作的连续平滑性；连续 Flow Matching 平滑、实时、简单，但难直接接奖励信号。真正落地的系统，大概率是「VLM 语义主干 + 连续/离散动作专家 + 强化/规则对齐」的混合体。这也是我后续在 Flow-GRPO 上想继续推进的方向：把 Flow Matching 的连续生成和 GRPO 的奖励对齐揉到一起。\n12. 收官：本系列九篇串起来 用一条 Markdown 列表把九篇串成演进线，从「端到端回归」一路走到「通用 VLA」：\n端到端回归时代 UniAD：全栈 query 一体化（感知-预测-规划共享 query） VAD：轻量向量化表征，VADv2 走向多模态概率规划 生成式扩散时代 Diffusion Policy：把扩散引入通用动作生成（机器人先跑通） DiffusionDrive：驾驶端到端扩散，解决多模态轨迹 Diffusion Planner：轨迹扩散 + 能量函数引导安全约束 VLA 路线（语言接进来） AutoVLA：离散动作 token + GRPO 强化对齐 DriveVLA-W0：VLA + 显式世界模型预测未来 通用 VLA 收官 pi0：VLM 主干（PaliGemma） + Flow Matching 动作专家，两塔并联、10 步 ODE 实时生成连续动作 这条线的内核没变过：从「让模型直接回归轨迹」到「让模型生成轨迹分布」再到「让模型用语言理解世界再生成动作」。pi0 是这条线在「通用机器人」上的当下答案，而 Flow-GRPO 想回答的是「生成 + 奖励」怎么在驾驶上更进一步。\n思考题：如果你要设计一个「既能用语言解释决策、又能实时输出连续平滑轨迹、还能用规则/奖励在线约束」的驾驶模型，会从这九篇里各借哪一块？欢迎在评论区交流。\n","permalink":"https://auto-driving-blog.pages.dev/posts/code/pi0%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"「pi0 用 Google 的 PaliGemma 视觉语言模型当『懂场景、懂语言』的通用感知-语义主干，再并联挂一个独立的 Flow Matching 动作专家，通过 cross-attention 从 VLM 取特征，在 10 步 ODE Euler 积分内把随机噪声动作流到真实连续动作；本文顺着 Physical-Intelligence 官方 openpi 仓库，逐文件逐函数把 pi0.py 总装两塔、paligemma.py 封装主干、action_expert.py 的 Flow Matching 去噪、trainer.py 的向量场 MSE 损失、runtime.py 的 10 步 ODE 生成、transforms 里的动作 tokenize 与冻结策略讲透，并与 AutoVLA / DriveVLA-W0 做对照，最后把本系列九篇串成一条端到端自动驾驶与通用机器人 VLA 的演进线」","title":"pi0 代码讲解：通用 VLA 的「VLM 主干 + Flow Matching 动作专家」"},{"content":" 本文是「代码讲解」路线的第 4 篇（前 3 篇：DiffusionDrive 679 行、SparseDriveV2 610 行、DriveVLA-W0 436 行）。UniAD 是 BEV 端到端感知-规划一体化的开山之作（CVPR 2023 Best Paper），代码基于 OpenDriveLab/UniAD，构建在 mmdetection3d 之上。\n本篇的目标和前几篇一样：把一篇「看着吓人」的论文代码，用大白话拆成你能跟着一行行读下去的东西。你不需要提前懂 mmdet3d，不需要懂 BEVFormer，我会从最底层的名词开始讲。读到最后你应该能回答一个问题：为什么 UniAD 敢把这么多任务堆到一个网络里，而且还能训得动？\n写给零基础读者：读这篇之前先搞懂几个名词 我不假设你知道下面任何一个词。下面每一条都是「人话版」，能让你读后面代码时不卡壳。\nBEV（Bird\u0026rsquo;s Eye View，鸟瞰图）：通俗讲，就是把 6 路相机拍到的画面，全部「拍扁」成一张从上往下看的城市俯视图。相当于你站在城市上空，看地面上哪里有车、哪里有车道线。后面所有任务（检测、跟踪、规划）都不在原始图片上做了，全在这张俯视图上做。好处是：不同相机的信息被统一到同一个坐标系里，规划器终于能像人一样「俯瞰全局」。\nQuery（查询向量）：这是整个 UniAD 的灵魂概念。通俗讲，query 就是一组「可学习的提问向量」，每个向量代表「我想找的某个东西」——比如一辆车、一条车道、一个未来轨迹点。Transformer 干的事，就是用这些 query 去 BEV 特征里「attend（关注）」出对应的内容。你可以把 query 想象成填空题的空：「这里____是一辆车吗？」网络自己把空填成「是车 + 车在哪 + 车往哪开」。\n可变形注意力（Deformable Attention）：标准 Transformer 注意力是「每个 query 跟图上所有点都算一遍相似度」，算力爆炸。可变形注意力聪明在：它只在 query 预测的「几个参考点附近」采样少量点。相当于你找人不用扫视全场，只看你 guess 他可能在的那几个位置。BEVFormer 就是靠这个才把多视角特征压进 BEV 而不爆显存。\n两阶段训练（Two-Stage Training）：这是 UniAD 最容易被忽视、但最关键的工程 trick。第 1 阶段只训「感知」那几个头（检测/跟踪/建图/运动/占用），把 BEV 和 query 表征练扎实；第 2 阶段把感知全部冻结，只训最后规划 Planner。为什么要分两阶段？因为规划任务的梯度太猛，直接从零端到端一起训，规划会反过来把前面好好的感知「带崩」。先让感知长大成人，再让规划站在它肩膀上，这是最稳的套路。\nTrackFormer / MotionFormer / MapFormer / OccFormer / Planner：这五个就是 UniAD 流水线上的 5 个「工头」，名字里都带 Former（Transformer 的意思）。TrackFormer 负责「谁是谁」（给车稳定编号），MapFormer 负责「路长啥样」（车道线），MotionFormer 负责「别人往哪开」（多模态轨迹预测），OccFormer 负责「未来这片地会不会被占」（占用栅格），Planner 负责「我（自车）往哪开」。本文第 4 节会逐个拆。\nnuScenes：目前自动驾驶圈最常用的大规模公开数据集之一，1000 段 20 秒的驾驶片段，配 6 路相机 + 1 个激光雷达 + 雷达。UniAD 的训练和评测全在它上面。\nL2 误差 / 碰撞率（Collision Rate）：这是评测「规划好不好」的两个核心指标。L2 误差通俗讲就是「你预测的自车轨迹和真人司机开的轨迹，平均差了多少米」；碰撞率就是「你这条轨迹在未来会不会撞到别人」。这两个数字越小越好，是 UniAD 论文里反复刷的表。\nmmdetection3d（简称 mmdet3d）：商汤开源的 3D 检测框架。UniAD 没有从零造轮子，而是把它当底盘，往里塞插件。你后面会看到所有 UniAD 新代码都在 mmdet3d_plugin/uniad/ 下，这就是「插件式开发」的含义。\n一句话澄清：上面这些名词你现在记不住没关系，读正文时哪里卡住，回来翻这一段就行。UniAD 的本质，就是用「query」这根线，把上面这些原本各自为战的任务，串成一条生产线。\n为什么要讲 UniAD 的代码 你可能会问：现在都 2026 年了，端到端方案一大把，为什么还要回过头啃 UniAD 这个「老古董」？\n答案是：后面几乎所有的端到端方案，都是 UniAD 的「变种」或者「反动」。\nVAD 是把 UniAD 砍瘦（去掉占用、用矢量化）。 SparseDrive 是把 UniAD 稀疏化（检测和预测解耦）。 DiffusionDrive 是把 UniAD 里的「运动预测」换成扩散模型生成。 DriveVLA 是把 UniAD 里的「规划」换成 VLA + 世界模型。 换句话说，你搞懂了 UniAD 的 query 流水线，后面这些文章的「祖坟」你就挖明白了。而且 UniAD 的代码组织特别适合初学者——它把「感知-规划」拆成 5 个清清楚楚的 head，每个 head 输入输出都很干净，不像有些方案全糊在一个大模型里。\n一句话结论：UniAD 是「query-based 端到端」这一脉的祖宗，读懂它的代码，等于拿到了后面一整条技术线的入场券。\n架构总览：先看地图 先看全局数据流，心里有张地图再钻细节。下面用纯文字描述，不引用任何图片（本仓库里 UniAD 的图你不一定有，但文字链路已经足够清晰）。\n整条流水线从上到下是这样的：\n输入：6 路环视相机图像（前/后/左前/右前/左后/右后）。 backbone：EfficientNet 或 Swin Transformer 做图像编码，再接 FPN 出多尺度特征。这一步产出「多视角图像特征」。 BEV 编码器（BEVFormer）：用可变形注意力，把多视角特征「抬」成一张 BEV 特征图，尺寸常见 200×200×256（高×宽×通道）。这是后面所有头的「公共画布」。 TrackFormer：拿 BEV 特征 + 上一帧的 track query，输出「带稳定 ID 的 agent query」，也就是「这一帧里有哪些车/人，且和上一帧对得上号」。 MapFormer：拿 BEV 特征，输出「地图 query」，也就是车道线、路口的矢量化表示。 MotionFormer：拿 agent query + map query，让它们互相交互，每个 agent 解码出 K 条未来轨迹 + 每条的置信度（比如 K=6，代表「这车可能直行、可能左转……」6 种走法）。 OccFormer：拿 agent 的未来轨迹 + BEV 特征，预测「未来每个 BEV 栅格会不会被占据」，给规划器一个显式的「前方有没有障碍」信号。 Planner：拿一个专门的 ego query，去 attend BEV + agent 轨迹 + 占用信息，输出「自车未来 T 步的坐标」。 最关键的设计只有一句话：下游任务直接消费上游的 query，而不是重新检测一遍。TrackFormer 输出的 agent query 直接喂给 MotionFormer，MotionFormer 输出的轨迹直接喂给 Planner。这就是论文标题里「Planning-oriented」和「Unified」的真意——大家共用一套语言（query），不用各自翻译。\n关键认知：UniAD 不是「先检测再规划」的传统级联，而是「一个共享表征空间里，感知和规划一起算」。这个区别决定了它的上限和下限，也决定了后面所有方案怎么改它。\n项目结构：它如何挂在 mmdet3d 上（先厘清边界） 我必须先帮你厘清仓库边界，否则你一打开 UniAD 的 GitHub 会懵：怎么满屏都是 mmdet3d 的代码，UniAD 自己的在哪？\n事实是：UniAD 根本没有「自己的框架」。它是 OpenDriveLab/UniAD 这个仓库，但仓库里绝大部分是 mmdetection3d 原版代码，UniAD 真正新增的东西，全在一个插件目录 mmdet3d_plugin/uniad/ 里。你可以把它理解成「给 mmdet3d 打的一个大补丁」。\n仓库里和本文相关的目录长这样（用 Markdown 列表，不用框线）：\nUniAD/ projects/configs/uniad/ uniad_base_track_map.yaml：Stage-1 配置，只训感知（检测/跟踪/建图/运动/占用）。 uniad_base_e2e.yaml：Stage-2 配置，端到端（冻结感知，训 Planner + OccFormer）。 uniad_base.sh：一键启动脚本，里面拼好环境变量和训练命令。 mmdet3d_plugin/uniad/ dense_heads/ motion_head.py：MotionFormer 的实现，运动预测头。 occ_head.py：OccFormer 的实现，占用预测头。 plan_head.py：Planner 的实现，规划头。 tracks/ 这里放 TrackFormer 相关代码（多目标跟踪，基于可变形 attention + track query）。 backbone/ BEV 编码器相关，以及地图相关的组件。 mmdet3d_plugin/models/detr3d/ 改造版 DETR3D，负责 3D 检测（感知最底层的检测头）。 mmdet3d_plugin/datasets/ nuScenes 的数据管线，把原始数据转成模型能吃的 batch。 tools/ train.py / test.py / dist_train.sh / dist_test.sh 等入口。 ckpts/ 放预训练权重，比如 Stage-1 训完的 uniad_stage1.pth。 要点，请刻进脑子：你不会在仓库里找到一个叫 model.py 的「总装文件」。总装发生在 config 的 yaml 里——yaml 把各个 head 像积木一样拼进 UniADTrack（感知阶段模型）和 UniADPlanning（端到端模型）这两个壳子里。这也就是为什么读 UniAD 必须先读 config：模型结构不是写在 Python 里的，是写在 yaml 里的。\n一句话澄清：如果你习惯「找一个 model.py 看全局」，在 UniAD 这里会扑空。正确姿势是「先打开 uniad_base_e2e.yaml，看它 model= 下面挂了哪些组件，再逐个去 mmdet3d_plugin/uniad/ 里找对应文件」。\n逐文件逐函数细讲 下面进入正题。我会按数据流的先后顺序，逐个 head 讲：它接收什么、输出什么、forward 里到底干了啥。每个代码块里我故意不放一个中文字（注释也全英文），中文解释一律写在块外面，免得你和渲染器都难受。\n区块 A：BEV 编码器 backbone（数据流的源头） UniAD 直接复用 BEVFormer 的 BEV 特征提取，核心类是 BEVFormerEncoder。它干的事用一句话说就是：用相机内外参，把 BEV 网格上的每个 query，投影到 6 张图片上采样特征，再拿回来填成 BEV 图。\n简化版前向逻辑如下（注意块内零中文）：\n# simplified from BEVFormer encoder bev_queries = self.bev_embedding # (H*W, C) learnable BEV grid queries bev_pos = self.pos_embedding # positional embedding for BEV grid for lid in range(num_layers): bev_queries = self.layers[lid]( bev_queries, key=img_feats, # multi-view image features value=img_feats, reference_points=self.reference_points, # BEV grid in real-world coords spatial_shapes=spatial_shapes, level_start_index=level_start_index, query_pos=bev_pos, ) bev_feat = bev_queries.view(B, H, W, C).permute(0, 3, 1, 2) 块外的解释：reference_points 是 BEV 网格对应的真实世界坐标（比如 x 从 -51.2 到 51.2 米），靠相机内外参投影到每张图片上，做可变形采样。这一步不是 UniAD 发明的，但 UniAD 把「BEV 质量」当成了整个系统的地基——BEV 糊了，后面 Track/Motion/Plan 全完蛋。所以论文里 BEV 编码器用了不少层、也用了时序融合（把上一帧 BEV 也喂进来），就是为了让这张俯视图尽量准。\n关键认知：UniAD 把「感知质量」和「规划质量」绑死了。这既是它强的点（规划能用到很准的 BEV），也是它弱的点（BEV 一崩全盘崩）。后面 SparseDrive 之流想解耦，根源就在这。\n区块 B：检测头 DETR3D（TrackFormer 的地基） 在讲 TrackFormer 之前必须先讲检测，因为 TrackFormer 是在检测之上「加了一层跟踪」。UniAD 用的是改造版 DETR3D（mmdet3d_plugin/models/detr3d/），核心思想也是 query-based：用一组 object query，在 BEV/图像特征上预测 3D 框。\n# simplified DETR3D detection head obj_queries = self.query_embedding.weight # (N_obj, C) for layer in self.decoder_layers: obj_queries = layer(obj_queries, bev_feat) bbox_pred = self.bbox_head(obj_queries) # (N_obj, 10) 3D box params cls_pred = self.cls_head(obj_queries) # (N_obj, num_cls) class logits 块外解释：每个 object query 解码出一个 3D 框（中心、尺寸、朝向、速度）和类别。这一步出的是「当前帧有哪些 agent」，但还没有「跨帧的 ID」。TrackFormer 要解决的，就是给这些框加上「稳定编号」。\n区块 C：TrackFormer（多目标跟踪，给车发身份证） TrackFormer 的思路非常直觉：每一帧，除了「新检测出来的 query」，还把「上一帧那些带 ID 的 track query」一起送进同一个 decoder。decoder 让新旧 query 互相注意力，然后再用相似度把新检测和旧 track 配对，配上的就延续老 ID，没配上的新检测就发新 ID。\n# simplified TrackFormer forward det_query = self.embeddings(query) # current frame detection queries track_query = prev_track_query # last frame\u0026#39;s ID-carrying queries all_query = torch.cat([det_query, track_query], dim=0) hs = self.decoder(all_query, bev_feat) # interaction in one decoder det_out, track_out = torch.split(hs, [num_det, num_track], dim=0) # match det_out with track_out by feature similarity -\u0026gt; assign IDs matched_ids = bipartite_match(det_out, track_out) 块外解释：prev_track_query 是上一个时间步保存下来的「带记忆的 query」，它已经编码了「这辆车之前的长相和运动」。新帧里只要它和某个新检测query长得像（特征相似），就认为「还是同一辆车」，ID 不变。这样连起来，就是一条稳定的跟踪轨迹。TrackFormer 的输出就是「带 ID 的 agent query」，尺寸通常是 N_agent × C，这个 query 后面直接喂给 MotionFormer。\n一句话澄清：TrackFormer 输出的不是「框」，而是「query 向量」。框只是顺手预测的副产品。真正被下游吃掉的是那个向量——它里面编码了这辆车的所有信息。\n区块 D：MapFormer（矢量化地图，路长啥样） 传统做法把地图做成语义分割（哪块是车道、哪块是路面）。UniAD 偏不走寻常路：它用 query 表示地图，每个 map query 解码出「一条车道线的点序列（polyline）」。这种表示叫矢量化（vectorized），好处是后续规划能直接拿几何线条算，不用在稠密栅格里爬。\n# simplified MapFormer forward map_query = self.map_embedding.weight # (N_map, C) learnable map queries map_hs = self.map_decoder(map_query, bev_feat) map_coords = self.map_reg_head(map_hs) # (N_map, P, 2) each lane has P points map_cls = self.map_cls_head(map_hs) # (N_map,) existence / type 块外解释：map_coords 出来的是每条车道线的 P 个 (x, y) 点，连起来就是一条线。map_cls 判断这条线「存不存在、是哪种线」。MapFormer 输出的 map query 会直接进 MotionFormer，让「车」和「路」互相看一眼——车要知道自己旁边有左转道还是直行道，才能预测得准。\n区块 E：MotionFormer（运动预测，整个系统的心脏） 这是 UniAD 里最精彩、也最复杂的头。它要做的事：给每个 agent，预测未来 T 步的 K 条候选轨迹，并给每条轨迹一个置信度。K 条轨迹代表「多种可能」（直行/左转/右转/停车……），置信度是「我觉得哪种最可能」。\n它的精髓在于三种交互同时做：\nagent ↔ BEV：每个 agent 去看 BEV 特征，知道自己周围的环境。 agent ↔ agent：车与车互相看，避免预测出「两辆车穿模」。 agent ↔ map：车去看车道线，轨迹要贴着路走。 # dense_heads/motion_head.py (heavily simplified forward) def forward(self, agent_query, map_query, bev_feat): # agent-environment interaction: each agent looks at BEV agent_query = self.agent_bev_cross(agent_query, bev_feat) # agent-agent and agent-map interaction layers for layer in self.motion_layers: agent_query = layer(agent_query, map_query) # each agent outputs K trajectories + K confidence scores traj = self.traj_head(agent_query) # (N_agent, K, T, 2) score = self.score_head(agent_query) # (N_agent, K) score = score.softmax(dim=-1) # normalized confidence return traj, score 块外解释：traj_head 吐出来的是 (N_agent, K, T, 2)，意思是「每个 agent，K 条候选，每条 T 个时刻，每个时刻 2D 坐标」。score_head 吐出来 K 个分数，softmax 后变成「这 K 条里每条的可信度」。训练时，用 winner-takes-all 思路：只让离真值最近的那条轨迹的 loss 生效，逼网络学会「至少有一条猜得准」。MotionFormer 输出的轨迹，一方面给 OccFormer 用，一方面给 Planner 用。\n关键认知：MotionFormer 输出的「多模态轨迹」是给规划器的重要线索。规划器不是只看「别人现在在哪」，而是看「别人未来可能去哪」——这正是端到端比传统感知-规划级联强的地方。\n区块 F：OccFormer（占用预测，前方有没有障碍） OccFormer 的逻辑很妙：它把 MotionFormer 预测的每个 agent 的未来轨迹，「投影」回 BEV 栅格上，变成一堆「未来位置 query」，再拿这些 query 去 BEV 特征上做注意力，判断「这个栅格未来会不会被占据」。\n# dense_heads/occ_head.py (simplified) def forward(self, bev_feat, traj): # sample agent future trajectories into BEV-space queries occ_query = sample_traj_to_bev(traj) # (N_agent * T, C) occ = self.occ_decoder(occ_query, bev_feat) # per-location occupancy logits occ = occ.sigmoid() # (N_agent * T,) occupied prob return occ 块外解释：OccFormer 给规划器提供的是「显式障碍信号」——它等于直接告诉规划器「未来第 3 秒，你左前方那片地会被某辆车占住」。这比让规划器自己从 agent 轨迹里悟出来要稳得多。注意 OccFormer 在 Stage-2 是和 Planner 一起训的（Stage-1 它其实也训，但 Stage-2 会再精细调）。\n区块 G：Planner（规划，最后一步，自车往哪开） 终于到规划。Planner 用一个专门的 ego query（自车查询），去 attend BEV + agent 轨迹 + 占用信息，输出自车未来 T 步的坐标。它不预测「别人的轨迹」，只预测「我自己的轨迹」。\n# dense_heads/plan_head.py (simplified) def forward(self, ego_query, bev_feat, motion_info, occ_info): ego_query = self.ego_decoder( ego_query, bev_feat, motion_info, # agent trajectories from MotionFormer occ_info, # occupancy from OccFormer ) plan = self.plan_reg_head(ego_query) # (T, 2) ego future trajectory return plan 块外解释：ego_query 是一个可学习向量，相当于「代表自车的一个提问」。它经过 decoder，把 BEV 里关于自车周围环境、别人怎么走、哪里会被占的信息，全部汇聚到自己身上，最后 plan_reg_head 把它解码成 (T, 2) 的自车未来轨迹。这条轨迹就是 UniAD 最终的「驾驶决策」。\n一句话澄清：Planner 在 Stage-2 训练时，前面所有 head（Track/Map/Motion/Occ）的权重是被冻住的。也就是说训练规划时，它只能「适应」已经固定的感知，不能反过来改感知。这就是两阶段训练保护感知的核心手段。\n逐文件一句话说明（速查表） 如果你赶时间，下面是每个核心文件的「一句话职责」：\nmmdet3d_plugin/uniad/backbone/：提供 BEV 编码器，把图像变成 BEV 特征。 mmdet3d_plugin/models/detr3d/：3D 检测头，出当前帧 agent 框。 mmdet3d_plugin/uniad/tracks/：TrackFormer，给 agent 发稳定 ID。 mmdet3d_plugin/uniad/dense_heads/motion_head.py：MotionFormer，多模态轨迹预测。 mmdet3d_plugin/uniad/dense_heads/occ_head.py：OccFormer，未来占用栅格。 mmdet3d_plugin/uniad/dense_heads/plan_head.py：Planner，自车轨迹规划。 projects/configs/uniad/uniad_base_track_map.yaml：Stage-1 配置。 projects/configs/uniad/uniad_base_e2e.yaml：Stage-2 配置。 projects/configs/uniad/uniad_base.sh：启动脚本。 训练：两阶段为什么非这么干不可 前面提了好几次两阶段，这里把账算清楚。UniAD 的总损失是各个任务损失之和：\nL_total = L_det + L_track + L_map + L_motion + L_occ + L_plan 每个 L 对应一个 head 的监督信号。看起来「一起训不就完了」，但实操里直接端到端一起训会翻车，原因有三：\n规划任务的梯度方向，和感知任务的梯度方向经常打架。规划想「让轨迹贴合真值」，可能会诱导 BEV 特征往「方便规划」的方向偏，而不是往「真实准确」的方向偏。 感知头（尤其 Track/Motion）本身就不容易训稳，再叠一个更难的规划，梯度噪声会把感知带崩。 显存和算力：6 个 Transformer head 全开反向传播，单卡根本扛不住，两阶段能省不少训稳成本。 所以 UniAD 的实际训练流程是：\nStage-1（感知）：用 uniad_base_track_map.yaml，只开感知相关 head（检测/跟踪/建图/运动/占用），把 BEV 和 query 表征练到稳。这一步产出 ckpts/uniad_stage1.pth。 Stage-2（端到端）：用 uniad_base_e2e.yaml，加载 Stage-1 权重，冻结感知，只训 Planner + OccFormer。这一步产出最终的端到端权重。 启动命令长这样（块内零中文）：\n# Stage-1: train perception only bash tools/dist_train.sh projects/configs/uniad/uniad_base_track_map.yaml 8 # Stage-2: load stage-1 weights, train planner + occ bash tools/dist_train.sh projects/configs/uniad/uniad_base_e2e.yaml 8 \\ --cfg-options load_from=ckpts/uniad_stage1.pth 关键认知：两阶段不是论文里的摆设，是能训动的必要条件。很多复现失败，都是因为想偷懒一步到位端到端，结果感知崩了、规划也崩了。\n推理：怎么跑起来看轨迹 训完之后，推理是一条龙前向，不需要分阶段。整条流水线一次性过：图像 → BEV → 跟踪 → 地图 → 运动 → 占用 → 规划。最后 plan_head 吐出的 (T, 2) 就是自车未来轨迹，拿去和 nuScenes 里真人的轨迹比，算 L2 误差和碰撞率。\n评测命令：\n# end-to-end evaluation on nuScenes planning metric bash tools/dist_test.sh projects/configs/uniad/uniad_base_e2e.yaml \\ ckpts/uniad_e2e.pth 8 --eval planning 块外解释：--eval planning 会触发 UniAD 配好的 planning metric，它把预测轨迹和真值轨迹对齐（用「以当前位置为原点」的坐标系），算平均 L2 位移，再算预测轨迹在 future 各时刻和周围 agent 框的重叠率得到碰撞率。这两个数字就是论文表格里刷的那俩。\n代码里值得抄的设计 讲完流程，说点「学了能用在自己项目里」的东西。\nquery 作为通用接口：所有任务的输入输出都是 query 向量。这带来三个好处——可拼接（head 像积木）、可冻结（Stage-2 冻感知）、可迁移（换个数据集只改 head）。这条思路被后面 VAD、SparseDrive 全盘继承。 显式中间监督：跟踪、地图、运动、占用每一个都带 loss，等于给规划喂了 4 个「老师」。端到端最难的是梯度信号太稀疏，UniAD 用一堆中间监督把信号铺满，缓解难训。 感知规划解耦训练：两阶段本质上是「先让感知毕业，再让规划上学」，工程上极稳。 代价是重：6 个 head 全 Transformer，训练和显存都很吃力。这恰恰是后面 VAD（轻量化）、SparseDrive（稀疏化）、DiffusionDrive（生成式降本）要去补的短板。 个人思考 UniAD 最大的贡献，不是某个模块多新颖，而是它证明了「一个共享 query 空间里，把感知和规划串起来端到端训」这条路走得通，而且能刷 SOTA。它把「端到端自动驾驶」从「说说而已」变成了「真的能跑、真的能比级联强」。\n但它有两个绕不开的短板：一是重，二是规划仍然是「回归式」——直接出轨迹点，没有建模「不确定性」和「多可能性」。这俩短板，正好对应了后面两条演进路线：轻量化（VAD 砍模块、SparseDrive 稀疏化）解决「重」；生成式（DiffusionDrive 用扩散建模多模态）解决「回归式表达力不足」。\n所以读 UniAD，我建议你带着一个问题往下读后面几篇：「这个方案，是在补 UniAD 的哪个短板？」 一旦你建立这个视角，整个端到端自动驾驶的演进史就串成一条线了。\n和本系列其他文章的关系 想看「query 思路」如何被轻量化 → 见 SparseDriveV2 代码讲解（检测和预测解耦、稀疏化）。 想看「端到端」如何走向生成式扩散 → 见 DiffusionDrive 代码讲解（用扩散模型替换回归式运动预测）。 想看「端到端」如何走向 VLA + 世界模型 → 见 DriveVLA-W0 代码讲解。 想看「矢量化地图 + 轻量规划」→ 后续可补 VAD 一篇。 一句话收尾：UniAD 是这条线的「原点」，读懂它，后面三篇你都能秒懂一半。建议按「UniAD → SparseDriveV2 → DiffusionDrive → DriveVLA-W0」的顺序读，技术演进一目了然。\n","permalink":"https://auto-driving-blog.pages.dev/posts/code/uniad%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"「UniAD 把感知（检测/跟踪/建图/运动预测/占用）和规划全部塞进一条共享 query 的 Transformer 流水线，是 BEV 端到端感知-规划一体化的开山之作（CVPR 2023 Best Paper）。本文顺着 mmdet3d_plugin 的真实代码，逐个 head 讲清输入输出、forward 里到底做了什么，并拆穿两阶段训练为什么非这么干不可，零基础也能顺着数据流读懂整条链路」","title":"UniAD 代码讲解：端到端自动驾驶的「全栈 Transformer」是怎么拼起来的"},{"content":" 本文是「自动驾驶代码讲解」系列的第 5 篇。前面我们已经讲了 DiffusionDrive（679 行）、SparseDriveV2（610 行）、DriveVLA-W0（436 行）。这一篇我们回到「轻量端到端」的鼻祖之一：VAD（Vectorized Scene Representation for Efficient Autonomous Driving，ICCV 2023），代码来自 hustvl/VAD。\n之所以选它，是因为它是 UniAD 之后最常被拿来对比的方案，而且它把「端到端不一定非要很重的感知栈」这件事讲得最清楚。读完这篇，你对后面 Diffusion 系列「生成多条再选一条」的思路会理解得更快。\n写给零基础读者：读这篇之前先搞懂几个名词 下面这些名词，如果你第一次见，先别慌，我用大白话给你翻译一遍。这节是整个系列里最啰嗦也最有用的一节，建议你慢点看。\n向量化表示（Vectorized）。这是 VAD 最招牌的概念。在自动驾驶里，我们要描述「周围有什么」：车、行人、车道线、自车轨迹……大多数早期方案用「稠密栅格（occupancy grid）」来描述，也就是把场景切成一张小格子地图，每个格子标上是空还是障碍。VAD 不这么干，它用「点和线」来描述：一辆车 = 一个 bounding box 向量（中心坐标、长宽高、朝向、速度）；一条车道 = 一串点坐标连成的折线；一条轨迹 = 一串点。好处是信息密度高、不需要占用栅格、不需要分割头，模型更轻。你可以理解为：别人用「照片」记场景，VAD 用「坐标列表」记场景。\n端到端（End-to-End）。传统方案是流水线：先检测，再跟踪，再预测，再规划，每一步单独训、单独调。端到端是说，我让一个模型从「图像」直接出「自车要走的轨迹」，中间环节（检测、地图、运动预测）仍然有，但它们和最终的规划共享同一套特征、一起被训练，目标是让「最后规划得好」反过来带动前面都学好。\nPlanning KD（知识蒸馏，Knowledge Distillation）。KD 的意思是用一个「老师」教「学生」。在 VAD 里，老师是一个离线规划器（比如 Hybrid A* 这种传统方法）预先算出来的「安全轨迹」，学生是端到端模型。训练时除了正常的监督损失，还加一项「让学生的轨迹靠近老师的轨迹」的损失，相当于用传统方法的经验给端到端模型兜底，提升安全率。这是 VAD 一个很关键的 trick。\n多模态规划（VADv2）。VAD 原始版只出「一条」轨迹，属于回归式。VADv2 改成出「一堆候选轨迹 + 每条的概率」，推理时按概率和碰撞惩罚选最优。这就是从「回归」走向「生成 / 选择」的关键一步，也是后面 Diffusion 系列的直接思想来源。\nBEV（Bird\u0026rsquo;s Eye View，鸟瞰图）。把多路相机图像「拍扁」到一张从上往下看的俯视图特征上。所有后续任务（检测、地图、运动、规划）都在这张俯视图上做。你可以把它想象成：六张照片被压成一张「上帝视角」的特征地图。\nquery。这是 DETR 系列（包括 BEVFormer、VAD）的核心词。query 就是一组「可学习的小向量」，模型让它去特征图里「找东西」。比如检测 query 去找车，地图 query 去找车道，ego query 去找自车该怎么走。每个 query 解码完就变成一个输出（一个 box、一条车道、一条轨迹）。\nbox 参数（x, y, z, w, l, h, yaw, vx, vy, cls）。这是检测头输出的 10 个量，记下来后面会反复用到：x/y/z 是物体中心的三维坐标；w/l/h 是宽、长、高；yaw 是朝向角（绕竖直轴的旋转）；vx/vy 是物体在 x/y 方向的速度；cls 是类别（车、行人等）。VAD 的 agent head 输出的就是这种向量化 box。\nAgent / Map / Motion / Planning 四个 Head。这是 VAD 的四大组件，本文会逐个拆：Agent Head 出车辆向量 box；Map Head 出矢量地图；Motion Head 出每个 agent 的未来轨迹；Planning Head 出自车轨迹（VADv2 出多条）。\n0. 为什么要讲 VAD 的代码，以及一句话结论 为什么要讲它？三个理由：\n第一，它是「轻量端到端」的标杆，和 UniAD 形成鲜明对比——同样做端到端，VAD 砍掉了占用和分割头，代码量小一圈，但规划指标不差。搞清楚它怎么做到的，你对端到端架构的「取舍空间」会有实感。\n第二，它的 Planning KD 和多模态规划，是后面 DiffusionDrive / Diffusion Planner / DriveVLA 这些「生成式规划」方法的思想源头。理解 VAD，等于拿到了通往后面文章的钥匙。\n第三，它的代码挂在 mmdet3d 上，结构清晰，非常适合当「端到端代码入门读物」。\n一句话结论：VAD 的本质是「用结构化先验（向量表示）换算力」，它证明了端到端不一定要堆很重的感知栈；而 VADv2 把规划从「回归一条」变成「生成多条再选」，这一步正好接上后面所有生成式规划方法。\n1. 架构总览 在钻进代码之前，先把整条流水线在脑子里过一遍。VAD 的推理流程是一个「层层递进、共享 BEV」的过程：\n输入：6 路环视相机图像（nuScenes 配置）。 编码器：用 BEVFormer 类（temporal + spatial attention）把图像编码成 BEV 特征图。这一步和 UniAD 基本同款，VAD 的重点不在编码器，在后面的 head。 Agent Head：在 BEV 上用检测 query 解码出周围 agent 的向量 box（10 个参数），包括位置和速度朝向。 Map Head：用地图 query 解码出矢量化的车道（每条车道是一串点），并且和 agent 做交叉注意力交互，让车道表示带上「和车有关」的信息。 Motion Head：对每个 agent query，解码出 K 条未来轨迹向量，并让 agent 和 map 互相 attend，使轨迹顺着车道走。 Planning Head：用 ego query 去看 BEV + agent 向量 + map 向量 + motion 向量，输出自车轨迹。VAD 原始版出单条；VADv2 出 M 条候选 + softmax 概率。 训练时额外加 Planning KD：用离线专家轨迹蒸馏规划头。 注意一个关键点：VAD 没有显式的占用预测（occupancy）。它不像 UniAD 有 OccFormer 和分割头，所有信息都用「向量」表达，规划头直接 consume 这些向量。这就是它「轻」的来源。\n2. 项目结构：它如何挂在 mmdet3d 上 VAD 是一个 mmdetection3d 的插件式仓库，也就是说，它不重写检测框架，而是在 mmdet3d 外面套一层 mmdet3d_plugin，通过 projects/ 下的配置注册新模块。这种「插件 + 配置」的挂法，是 OpenMMLab 系列（mmdet / mmdet3d）的标准玩法。\n仓库的长相大致是这样（用列表表示目录树，避免框线字符）：\nVAD/ projects/ configs/ vad/ vad_base.py：VAD 的基础配置（模型、数据、损失、训练策略的总入口） vad_nuscenes/：nuScenes 数据集的具体配置（通常继承 vad_base 再改数据路径和评测） mmdet3d_plugin/ vad/ dense_heads/ vad_head.py：总装 head，把检测 / 地图 / 运动 / 规划四个分支组合起来，也是 loss 汇总的地方 vad_track_head.py：可选的跟踪头（tracking），论文主线上不是重点 vad_motion_head.py：运动预测头，出每个 agent 的 K 条轨迹 modules/ vectorized_map.py：矢量地图编码器，把车道表示成点序列 query agent_cross_attn.py：agent 与地图之间的交叉注意力模块 planning_head.py：规划头，VAD 单轨迹 / VADv2 多模态就在这里 datasets/：nuScenes 的定制数据管线（pipeline、evaluator 等） tools/ dist_train.sh：分布式训练启动脚本 dist_test.sh：分布式评测启动脚本 和 UniAD 的边界（这是面试和读代码都常考的点）：\nVAD 同样基于 mmdet3d 插件，同样用 BEVFormer 类编码器，这和 UniAD 一致。 VAD 没有 OccFormer，没有分割头。UniAD 有 6 个 head（含占用预测、分割），VAD 砍到 4 个（agent / map / motion / planning），靠向量化表示省掉了所有稠密头。 VAD 的规划头直接吃「agent 向量 + map 向量 + motion 向量」，信息链路更短、更紧凑。 VAD 引入了 Planning KD，而 UniAD 没有显式的规划蒸馏。 一句话澄清：VAD 不是「另起炉灶的新框架」，它是在 mmdet3d + BEVFormer 这套成熟骨架上，把「感知表征」从稠密换成向量，从而瘦身成功的。理解这一点，你就不会被它「轻量」的标签误导——它的重活（BEV 编码）其实和 UniAD 一样没少。\n3. 逐文件逐函数细讲 下面我们按「从总装到分支」的顺序，把每个关键文件拆开揉碎。每个代码块里都只有英文和符号，中文解释一律放在块外面，方便你直接复制运行思路。\n3.1 vad_head.py：四个头的总装与 loss 汇总 vad_head.py 是整个 VAD 的「总调度」。它继承自 mmdet3d 的 Base3DDenseHead（或类似基类），在 forward 里依次调用 agent / map / motion / planning 四个子模块，并在 loss 里把它们各自的损失加权求和。\n先看它大致怎么把四个分支组织起来（简化伪代码，只保留结构）：\n# mmdet3d_plugin/vad/dense_heads/vad_head.py (simplified structure) class VADHead(Base3DDenseHead): def __init__(self, agent_head=None, map_head=None, motion_head=None, planning_head=None, plan_kd_weight=1.0, **kwargs): super().__init__(**kwargs) self.agent_head = build_head(agent_head) self.map_head = build_head(map_head) self.motion_head = build_head(motion_head) self.planning_head = build_head(planning_head) self.plan_kd_weight = plan_kd_weight def forward(self, bev_feat, img_metas=None): # 1) agent: (N_agent, 10) boxes agent_out = self.agent_head(bev_feat, img_metas) # 2) map: list of point sequences map_out = self.map_head(bev_feat, img_metas) # 3) motion: (N_agent, K, T, 2) trajectories motion_out = self.motion_head(agent_out[\u0026#39;query\u0026#39;], map_out[\u0026#39;query\u0026#39;], bev_feat) # 4) planning: ego trajectory plan_out = self.planning_head(bev_feat, agent_out[\u0026#39;query\u0026#39;], map_out[\u0026#39;query\u0026#39;], motion_out) return agent_out, map_out, motion_out, plan_out def loss(self, outs, targets): agent_loss = self.agent_head.loss(outs[0], targets[\u0026#39;agent\u0026#39;]) map_loss = self.map_head.loss(outs[1], targets[\u0026#39;map\u0026#39;]) motion_loss = self.motion_head.loss(outs[2], targets[\u0026#39;motion\u0026#39;]) plan_loss = self.planning_head.loss(outs[3], targets[\u0026#39;plan\u0026#39;]) kd_loss = self.planning_head.kd_loss(outs[3], targets[\u0026#39;expert_plan\u0026#39;]) total = (agent_loss + map_loss + motion_loss + plan_loss + self.plan_kd_weight * kd_loss) return dict(loss=total, agent_loss=agent_loss, map_loss=map_loss, motion_loss=motion_loss, plan_loss=plan_loss, kd_loss=kd_loss) 上面这个 forward 的顺序就是前面「架构总览」里那条流水线的代码映射：agent 先出，map 第二，motion 拿 agent+map 的 query 出轨迹，planning 拿全部信息出自车轨迹。注意 motion head 和 planning head 吃的不是「原始 box 坐标」，而是 agent / map 解码出来的 query 向量——这保证了信息在向量空间里流动，而不是在坐标空间里拼接。\nloss 函数把四块损失加起来，再额外加一份 kd_loss（Planning KD）。这也是 VAD 训练里最容易被忽略、但其实最重要的那一项。\n关键认知：vad_head.py 本身几乎不含「算法创新」，它只是一个「把四个头粘起来 + 把五个损失加起来」的壳。真正的创新分散在 vad_motion_head.py、vectorized_map.py、planning_head.py 里。读 VAD 代码，重点永远在后三个文件。\n3.2 Agent Head：向量化的检测 Agent Head 本质上是一个 DETR3D 风格的检测解码器，但它的输出是「向量化的 box 参数」而不是一堆密集特征。它用一组可学习的 agent query，在 BEV 特征上做多层 self/cross attention，最后过一个回归头出 10 维向量。\n简化伪代码：\n# mmdet3d_plugin/vad/dense_heads/vad_head.py (agent branch, simplified) class VADAgentHead(nn.Module): def __init__(self, num_query=200, embed_dims=256, num_reg=10): super().__init__() self.agent_embedding = nn.Embedding(num_query, embed_dims) self.decoder = nn.ModuleList([ DetrTransformerDecoderLayer(embed_dims) for _ in range(6) ]) self.reg_head = nn.Linear(embed_dims, num_reg) # 10 = x,y,z,w,l,h,yaw,vx,vy,cls self.cls_head = nn.Linear(embed_dims, 1) def forward(self, bev_feat, img_metas): query = self.agent_embedding.weight # (N, C) for layer in self.decoder: query = layer(query, bev_feat) # cross + self attn boxes = self.reg_head(query) # (N, 10) scores = self.cls_head(query) # (N, 1) return dict(query=query, boxes=boxes, scores=scores) 这里 reg_head 输出的 10 维就是前面名词表里说的 x,y,z,w,l,h,yaw,vx,vy,cls。query 会被原样返回，因为它后面要给 Motion Head 当输入——这就是「向量化表示」带来的连锁好处：检测出的车，它的「身份向量」直接就能拿去预测它的运动，不需要再去做一遍匹配。\n一句话澄清：Agent Head 输出的 query 不是 box 坐标，而是「这辆车的语义向量」。box 坐标是 reg_head 从 query 里解出来的副产品。真正在 VAD 内部流转的「车」是 query，不是坐标。\n3.3 Map Head：把车道变成点序列 Map Head 是 VAD 「向量化地图」的核心。传统方案用分割头在 BEV 上画车道掩码（稠密），VAD 改用「点序列 query」：每条车道由一组可学习点 + 一个整体 embedding 表示。解码器让地图 query 在 BEV 上 attend，最后回归出每条车道的点坐标。\n简化伪代码：\n# mmdet3d_plugin/vad/modules/vectorized_map.py (simplified) class VectorizedMapHead(nn.Module): def __init__(self, num_map=50, num_pts=20, embed_dims=256): super().__init__() self.map_embedding = nn.Embedding(num_map, embed_dims) self.point_embedding = nn.Embedding(num_pts, embed_dims) self.decoder = nn.ModuleList([ DetrTransformerDecoderLayer(embed_dims) for _ in range(6) ]) self.map_reg_head = nn.Linear(embed_dims, 2) # each point (x, y) def forward(self, bev_feat, img_metas): map_query = self.map_embedding.weight # (N_map, C) point_query = self.point_embedding.weight # (P, C) query = map_query.unsqueeze(1) + point_query # (N_map, P, C) query = query.flatten(0, 1) # (N_map*P, C) for layer in self.decoder: query = layer(query, bev_feat) points = self.map_reg_head(query) # (N_map*P, 2) points = points.view(-1, self.num_pts, 2) # (N_map, P, 2) return dict(query=map_query, points=points) 这里有个小技巧：每条车道用一个 map_query 表示「这条车道是谁」，再叠加每个点的 point_query 表示「这个点在哪」。解码后只回归每个点的 (x, y)，于是每条车道就成了一串点——这就是「矢量化地图」：一条车道 = 一组有序点，而不是一张掩码图。\nmap_query 同样被返回，后面 Motion Head 要用它做 agent-地图交互。\n3.4 agent_cross_attn.py：让车和车道互相看一眼 为了让「车的轨迹会顺着车道走」，VAD 在 agent 和 map 之间加了一个交叉注意力模块。名字就叫 agent_cross_attn。它的作用是：让 agent query 去 attend map query，从而把「车道形状」这个结构化先验注入到 agent 的运动预测里。\n简化伪代码：\n# mmdet3d_plugin/vad/modules/agent_cross_attn.py (simplified) class AgentCrossAttn(nn.Module): def __init__(self, embed_dims=256, num_heads=8): super().__init__() self.attn = nn.MultiheadAttention(embed_dims, num_heads, batch_first=True) self.norm = nn.LayerNorm(embed_dims) def forward(self, agent_query, map_query, bev_feat): # agent looks at map out, _ = self.attn(query=agent_query, key=map_query, value=map_query) agent_query = self.norm(agent_query + out) return agent_query 这块代码很短，但它是 VAD 「向量化交互」思想的精华：车和车道都是向量，它们之间的交互就是一次注意力，不需要把车道栅格化再卷积。这种交互在 Motion Head 的每一层都会发生。\n3.5 Motion Head：每个 agent 出 K 条轨迹 Motion Head 负责「别人家的车会怎么走」。它对每个 agent query 解码出 K 条未来轨迹（每条轨迹是 T 个时间步的 (x, y)），并且在每一层都让 agent query 和 map query 互相 attend（通过上面那个 agent_cross_attn），让轨迹贴合车道。\n简化伪代码：\n# mmdet3d_plugin/vad/dense_heads/vad_motion_head.py (simplified) class VADMotionHead(nn.Module): def __init__(self, num_modes=6, traj_len=12, embed_dims=256): super().__init__() self.num_modes = num_modes self.traj_len = traj_len self.motion_layers = nn.ModuleList([ MotionDecoderLayer(embed_dims) for _ in range(6) ]) self.mode_embedding = nn.Embedding(num_modes, embed_dims) self.traj_head = nn.Linear(embed_dims, traj_len * 2) def forward(self, agent_query, map_query, bev_feat): # agent_query: (N_agent, C), expand to modes N = agent_query.shape[0] query = agent_query.unsqueeze(1) + self.mode_embedding.weight # (N, K, C) query = query.flatten(0, 1) # (N*K, C) for layer in self.motion_layers: query = layer(query, map_query, bev_feat) # cross attn to map traj = self.traj_head(query) # (N*K, T*2) traj = traj.view(N, self.num_modes, self.traj_len, 2) # (N, K, T, 2) return traj 注意 mode_embedding：它给每个 agent 的每条候选轨迹一个「模式编号」向量，这样同一个 agent 的 K 条轨迹在解码时就有不同的「起点倾向」，能自然分化出左转 / 直行 / 右转等不同模式。这是「多模态运动预测」最朴素也最有效的做法之一。\n关键认知：Motion Head 的 K 条轨迹是「per-agent 多模态」，Planning Head 的 M 条轨迹是「ego 多模态」，两者概念同源但对象不同。前者预测别人，后者规划自己。VADv2 的规划多模态，正是 Motion Head 这套思想的「搬到自车上」。\n3.6 Planning Head：VAD 单轨迹 vs VADv2 多模态 Planning Head 是整个 VAD 的「最后一公里」，也是 VAD 和 VADv2 差异最大的地方。\nVAD 原始版（单轨迹回归）：用一个 ego query 去看 BEV + agent + map + motion 的向量，最后回归出一条自车未来轨迹。\n简化伪代码：\n# mmdet3d_plugin/vad/modules/planning_head.py (VAD v1, simplified) class VADPlanningHead(nn.Module): def __init__(self, traj_len=12, embed_dims=256): super().__init__() self.ego_embedding = nn.Embedding(1, embed_dims) self.ego_decoder = PlanningDecoderLayer(embed_dims) self.traj_head = nn.Linear(embed_dims, traj_len * 2) def forward(self, bev_feat, agent_query, map_query, motion_traj): ego_query = self.ego_embedding.weight # (1, C) ego_query = self.ego_decoder(ego_query, bev_feat, agent_query, map_query, motion_traj) traj = self.traj_head(ego_query) # (1, T*2) traj = traj.view(1, self.traj_len, 2) # (1, T, 2) return traj VADv2（多模态概率分布）：把规划从「回归一条」改成「生成 M 条候选 + 每条 softmax 概率」。这一步让 VADv2 从「回归式端到端」跨进了「生成式选择」的门槛。\n简化伪代码：\n# mmdet3d_plugin/vad/modules/planning_head.py (VADv2, simplified) class VADv2PlanningHead(nn.Module): def __init__(self, num_modes=10, traj_len=12, embed_dims=256): super().__init__() self.num_modes = num_modes self.mode_embedding = nn.Embedding(num_modes, embed_dims) self.ego_decoder = PlanningDecoderLayer(embed_dims) self.mode_traj_head = nn.Linear(embed_dims, traj_len * 2) self.mode_score_head = nn.Linear(embed_dims, 1) def forward(self, bev_feat, agent_query, map_query, motion_traj): ego_query = self.ego_embedding.weight # (1, C) ego_query = self.ego_decoder(ego_query, bev_feat, agent_query, map_query, motion_traj) # expand to M modes query = ego_query + self.mode_embedding.weight # (M, C) trajs = self.mode_traj_head(query) # (M, T*2) trajs = trajs.view(self.num_modes, self.traj_len, 2) # (M, T, 2) scores = self.mode_score_head(query) # (M, 1) probs = scores.softmax(dim=0) # (M,) return dict(trajs=trajs, probs=probs) 推理时，VADv2 不会直接拿概率最大的那条就走，而是用各 mode 的 probs 乘上「与 agent 轨迹 / 地图的碰撞惩罚」做后处理，再选最终轨迹。这已经非常接近「生成一堆 + 选一条」的生成式思路，是后面 Diffusion Planner / DriveVLA 的近亲。\n一句话澄清：VADv2 的「多模态」不是靠扩散模型采样的，它是用 M 个 mode embedding 一次性并行回归出 M 条轨迹，再 softmax 出概率。所以它快、简单，但也受限于「M 条是固定的、且互相独立」。真正「无限生成」的多模态要靠 Diffusion，那就是本系列后面文章的事了。\n3.7 Planning KD：用离线专家兜底安全 VAD 在规划上还有一个隐藏大招：Planning KD。它的想法很朴素——端到端模型容易规划出「指标好看但不安全」的轨迹，于是找一个离线传统规划器（如 Hybrid A* 或已标注的安全轨迹）当 teacher，让学生的轨迹往 teacher 靠。\n在代码里，teacher 轨迹通常是数据集预生成的，训练时直接读进来算损失，不会在训练循环里实时跑规划器（那样太慢）。损失可以用 Smooth-L1（回归坐标）或 KL（对齐概率分布，VADv2 用）。\n简化伪代码：\n# inside VADPlanningHead / VADHead.loss (simplified) def kd_loss(self, plan_out, expert_traj): if isinstance(plan_out, dict): # VADv2 pred = plan_out[\u0026#39;trajs\u0026#39;] # (M, T, 2) # align to expert by best mode dist = ((pred - expert_traj) ** 2).sum(-1).mean(-1) # (M,) best = dist.argmin() return F.smooth_l1_loss(pred[best], expert_traj) else: # VAD v1 return F.smooth_l1_loss(plan_out.squeeze(0), expert_traj) 这段伪代码说明了 KD 在两种版本下的不同处理：VADv2 因为有 M 条，要先选一条「离专家最近」的 mode 再算损失；VAD v1 只有一条，直接算。无论哪种，核心都是「让模型学出一条安全轨迹作为保底」。\n关键认知：Planning KD 是 VAD 「敢砍掉占用头」的底气之一。没有显式障碍栅格，模型对「什么不能走」的感知变弱，KD 用专家轨迹把这部分安全知识补回来。换句话说，VAD 把「稠密感知的安全感」换成了「蒸馏来的安全知识」。\n4. 训练与推理：怎么把 VAD 跑起来 代码层面讲完，再补一下工程入口，方便你想动手时知道从哪敲命令。VAD 沿用了 mmdet3d 的 tools/dist_train.sh 和 tools/dist_test.sh。\n训练 VAD 基础版：\nbash tools/dist_train.sh projects/configs/vad/vad_base.py 8 训练 VADv2（多模态规划版本，配置通常叫 vad_v2.py 之类的，具体以仓库为准）：\nbash tools/dist_train.sh projects/configs/vad/vad_v2.py 8 评测（用官方 nuScenes planning metric，即 L2 误差 + 碰撞率）：\nbash tools/dist_test.sh projects/configs/vad/vad_base.py ckpts/vad.pth 8 关于配置 vad_base.py，它里面主要干四件事：定义 backbone / BEV 编码器、注册四个 VAD head、列出五个损失及其权重、指定数据集和 evaluator。想改 VAD 的行为（比如把 K 调到 8、把 num_modes 调到 12），基本都在这里和对应 head 的 __init__ 里改。\n一句话澄清：VAD 的「轻量」主要体现在模型结构（少两个 head），但训练成本并不比 UniAD 低太多，因为 BEV 编码器那一坨重计算它一字未减。所以「轻」指的是「参数和中间表征更省」，不是「训练更快」。\n5. VAD vs UniAD：代码层面的取舍（再总结一遍） UniAD 有 6 个 head（含占用 / 分割），重但监督多；VAD 砍到 4 个（agent / map / motion / planning），靠向量化表示省掉稠密头。 VAD 没有 OccFormer，规划头直接吃 agent / map / motion 向量，信息链路更短、更紧凑。 VAD 引入 Planning KD，UniAD 没有显式规划蒸馏。 VADv2 把规划变成概率多模态，是「回归式端到端 → 生成式选择」的重要过渡。 代价：向量化地图依赖离线地图提取质量；稠密占用带来的「显式障碍栅格」安全感没了，要靠 KD 补。 5.5 数据管线与矢量地图的离线提取 前面反复提到「向量化地图」，但有个问题没讲透：Map Head 训练时用的「真值车道点序列」从哪来？答案是离线提取。nuScenes 本身给的是矢量地图（lane polyline），VAD 的 datasets/ 里会把官方地图按帧裁剪、采样成固定数量的点序列，作为 Map Head 的监督。也就是说，地图这一支的「真值」不是模型现猜的，而是拿现成高清地图离线处理好的。\n简化伪代码（数据侧，非模型侧）：\n# mmdet3d_plugin/vad/datasets/ (simplified idea) def get_map_targets(self, img_metas): targets = [] for meta in img_metas: vector_map = meta[\u0026#39;vector_map\u0026#39;] # list of polylines sampled = [] for poly in vector_map: pts = resample_polyline(poly, num_pts=20) # fixed length sampled.append(pts) # pad / truncate to fixed number of lanes sampled = sampled[:50] targets.append(torch.tensor(sampled)) return targets # (B, N_map, P, 2) 这点很关键，因为它揭示了 VAD 「轻」的又一个前提：它把「地图理解」的难题，一部分外包给了离线高清地图和预处理。在线推理时，如果这些地图缺失或过时，Map Head 的表现会受影响。所以 VAD 的轻量是有条件的——前提是有一份靠谱的矢量地图兜底。\n一句话澄清：VAD 的 Map Head 不是在 BEV 上「从零分割车道」，而是在「已经有矢量地图真值」的前提下，学一个从 BEV 特征到已知地图结构的对齐/预测。别把它误解成完全端到端地从图像生成地图。\n6. 个人思考 VAD 的「向量化」本质是用结构化先验换算力。它证明了端到端不一定非要 UniAD 那么重的感知栈，但也暴露了回归式规划的局限性——单条轨迹无论如何也表达不了「前方路口既可左转也可直行」的不确定性。所以 VADv2 才走向多模态概率。\n但 VADv2 的 M 条是「固定数量、彼此独立回归」的，本质上还是把多模态当成了「M 个独立回归头」，并没有真正建模「轨迹的空间分布」。这一步，正好接上后面 Diffusion 系列「用扩散模型从噪声里采样出多样且合理的轨迹」的范式。可以说，VADv2 是把门推开了一条缝，DiffusionDrive / Diffusion Planner 才是真正走进去的人。\n另外一个值得玩味的点：VAD 的轻量很大程度上是把「安全责任」转移给了 Planning KD。这提醒我们，端到端模型「看起来轻」，未必真的轻——它可能只是把复杂度藏到了数据预处理和蒸馏 teacher 里。读代码时，别只盯着模型 forward，训练流水线里的专家轨迹生成同样重要。\n7. 和本系列其他文章的关系 轻量化端到端 → VAD（本文）。 共享 query 全栈、带占用与分割 → UniAD（系列第 1~2 篇方向）。 生成式扩散规划 → DiffusionDrive（679 行）、Diffusion Planner。 多模态概率规划 → VADv2 是雏形，Diffusion Planner 把它做成了扩散采样；DriveVLA-W0（436 行）则是用 VLM 来做规划决策。 如果你是按顺序读到这的，下一站建议直接看 DiffusionDrive：你会惊喜地发现，它把 VADv2 那种「生成多条再选」的思路，用扩散模型重新实现了一遍，而且因为去除了稠密感知，反而更贴近 VAD 的「轻」哲学。两条线（向量化轻量 + 生成式多模态）在 Diffusion 系列汇合，这就是端到端规划最近一年最清晰的演进脉络。\n写在最后：VAD 的代码量不大，但它每一个 head 都是「向量化表示」这一理念的一次落地。读懂它，你就拿到了理解后续所有生成式规划方法的钥匙。下一篇见。\n","permalink":"https://auto-driving-blog.pages.dev/posts/code/vad%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"「VAD 在 UniAD 之后走轻量化路线：把 agent、地图、运动全表示成向量（点和线），去掉占用栅格与分割头，VADv2 进一步把规划做成多模态概率分布，是回归式端到端走向生成式选择的关键过渡」","title":"VAD 代码讲解：把场景「矢量化」后，端到端能有多轻"},{"content":"写给完全没基础的同学：先补几个最关键的名词 在正式读代码之前，我们先把这篇文章会反复出现的几个「黑话」用一句话翻译成人话。你不用现在就完全懂，只要有个印象，后面看到它们就不会慌。\n端到端自动驾驶（End-to-End Autonomous Driving）：传统自动驾驶要把任务拆成「先识别车道线、再检测车辆、再规划路径、再控制方向盘」好几步，每一步都是独立模型。端到端就是「给模型一张图（和激光雷达数据），模型直接吐出方向盘怎么打、油门怎么踩、未来几秒车往哪走」，中间环节全部交给一个神经网络自己搞定。本文讲的 DiffusionDrive 就是端到端里的「规划」那一步：输入是传感器数据，输出是未来一小段时间的行驶轨迹。\n轨迹（Trajectory）：就是「车未来要走的路线」。本文里一条轨迹用 8 个点表示，每个点包含横向位置 x、纵向位置 y、朝向角 θ（theta，表示车头朝哪个方向），所以一条轨迹的形状是 [8, 3]，也就是 8 个时刻、每个时刻 3 个数。\nanchor（锚点 / 锚轨迹）：字面意思是「船锚」，用来固定位置。在本文里，anchor 不是点，而是一条「模板轨迹」。作者事先在训练集里用聚类算法找出 20 种最常见的驾驶模式（比如直行、左转、跟车减速……），每种模式存一条代表轨迹，这 20 条就是 20 个 anchor。模型不是从零开始想轨迹，而是从这 20 个模板出发去「微调」，所以 anchor 可以理解为「20 个候选驾驶姿势的草稿」。\n扩散模型（Diffusion Model）：一种生成式 AI。它的训练过程是「往一张清晰图上一点点加噪声，直到变成纯噪声；再训练一个网络学会把噪声一步步去掉还原清晰图」。推理时，从纯噪声出发，让网络反复「去噪」，最后「雕」出一张新图。DiffusionDrive 把这套思路用在「生成行驶轨迹」上，不是生成图片。\n去噪（Denoising）：把「带噪声的模糊东西」一点点变清晰的过程。比如你给 anchor 轨迹加一点随机扰动（噪声），它就变成一条「歪歪扭扭的模糊轨迹」，去噪网络的工作就是预测「刚才加的扰动是多少」，把它减掉，轨迹就恢复（或修正）成合理形状。\n标准扩散 vs 截断扩散：标准扩散从「纯高斯噪声」（完全随机、毫无意义的一团数）出发，要迭代几十步才能雕出像样的结果；DiffusionDrive 的截断扩散是从「anchor 模板 + 一点点噪声」出发，起点已经很接近答案了，所以只要 2 步去噪就能出结果。这就是它快的原因。\nBEV（Bird\u0026rsquo;s Eye View，鸟瞰图）：从「天上往下看」的视角。想象你变成一只鸟，垂直俯视这辆车和周围，看到的就是 BEV。自动驾驶里常把相机和激光雷达数据统一投影到「以自车为中心、从上往下看」的坐标系里，方便网络理解「哪有车、哪有车道」。\nResNet（残差网络）：一种很经典、很常用的图像特征提取神经网络（\u0026ldquo;残差\u0026quot;指它用\u0026quot;捷径连接\u0026quot;让很深的网络也能训得动）。你可以把它理解成「图像→一串有意义的数字特征」的转换器。本文里相机图像和激光雷达 BEV 图都各自过一个 ResNet-34（34 层的 ResNet）来提取特征。\ncross-attention（交叉注意力）：Transformer 里的一种机制，作用是「让一组查询（query）去另一组内容（key/value）里找相关信息」。打个比方：你（query）拿着问题去翻一本书（key/value），注意力机制决定你该重点看书的哪一页。本文里，anchor 轨迹点（query）会去「场景特征图」上找自己附近有什么障碍物、车道，从而被修正得更合理。\nquery（查询）：在 Transformer 语境下，query 就是「我想从别处获取信息的一方」。本文里 20 个 anchor 轨迹会被编码成 20 组 query，它们去和场景特征做交叉注意力，相当于「20 个草稿分别去场景里核对：我这条路线前面有没有车、会不会出界」。\nFiLM 调制：一种「用一个数（比如当前去噪步数 timestep）去缩放和偏移特征」的小技巧。可以理解为「告诉网络：现在是第几步去噪，请你据此调整一下你的处理方式」。\nargmax（取最大值的下标）：比如 20 个模式各自有一个置信度分数 [0.1, 0.8, 0.05, ...]，argmax 就是「找出最大的那个，返回它的位置（这里是第 2 个）」，于是最终选第 2 个模式对应的轨迹。\nNAVSIM：一个自动驾驶规划评测基准（benchmark）。它提供传感器数据、标准评测指标（PDMS），以及一套官方训练/评测代码。DiffusionDrive 的代码就是「挂」在 NAVSIM 这套官方代码之上的插件。\nHydra：Facebook 出品的配置管理库。用它可以像「agent=diffusiondrive_agent」这样在命令行切换配置，不用改代码。\nPyTorch-Lightning：一个把训练流程（训练循环、分布式、日志）封装好的 PyTorch 上层框架，作者用它来跑训练。\nDDIM / DDPM：两种扩散模型的「去噪采样算法」。DDPM 是原始慢版本（几十步），DDIM 是加速版本（可跳步）。DiffusionDrive 用 DDIMScheduler 来实现可控步数的去噪。\nk-means（聚类）：一种「把一堆数据自动分成 K 类」的无监督算法。本文用它把训练集里成千上万条真实轨迹聚成 20 类，每类的中心就是一条 anchor。\nFocal Loss / L1 Loss：两种损失函数。Focal Loss 擅长「在正负样本不平衡时聚焦难样本」，用来做分类；L1 Loss 是「预测值和真实值差的绝对值之和」，用来做回归（让轨迹更准）。\n如果你上面这些名词都大致有印象了，下面读代码会轻松很多。我们开始。\n为什么要讲 DiffusionDrive 的代码 DiffusionDrive（CVPR 2025，作者单位 hustvl）是端到端规划里扩散策略路线的开创者，也是 NAVSIM 排行榜上扩散类方法的基线。它最被人津津乐道的工程 trick 是：把标准扩散从几十步去噪压到 2~8 步，还能天然支持多模态轨迹（也就是一次能给出多种可能的开法，最后挑最好的）。\n这篇不讲公式推导，直接看源码——仓库 hustvl/DiffusionDrive 把整套 navsim 内联（fork 进来）了，DiffusionDrive 自身代码全部在 navsim/agents/diffusiondrive/ 下。\n一句话结论：DiffusionDrive 的本质 = ResNet 主干 + 20 个 k-means anchor 轨迹 + 从 anchor 加「截断噪声」的轻量扩散解码器；训练从 anchor 加噪、推理从 anchor 去噪 2 步，最后用分类头 argmax 选一条轨迹。\n架构总览：先看地图 DiffusionDrive 是生成式规划：它不从固定候选集里选，而是从 anchor 出发、用扩散逐步「雕」出一条轨迹。下面这张图（DiffusionDrive 论文原图）给出了整体范式：\n为把源码里的数据流向讲清楚，我画了一张数据流图：\n关键认知：和 SparseDriveV2（检索式）相反，DiffusionDrive 是生成式——它能在 20 个 anchor 附近「生成」字典外的轨迹，泛化更灵活；代价是推理要走去噪循环（虽已压到 2 步）。两篇对照读，能看清 NAVSIM 榜单上「生成 vs 检索」两条路线的分野。\n把整条链路用一句话串起来就是：\n传感器数据（相机 + 激光雷达）→ 拼成全景图 + BEV 特征 → 过 ResNet 主干并融合 → 得到「场景特征」→ 20 个冻结 anchor 作为起点 → 加一点截断噪声 → 2 步去噪（每步用场景特征做交叉注意力修正）→ 得到 20 条候选轨迹 + 20 个打分 → argmax 选 1 条 → 输出 [B, 8, 3] 轨迹。\n项目结构：它如何挂在 navsim 上（先厘清边界） 和 SparseDriveV2 一样，DiffusionDrive 也是 navsim 的一个 fork（分叉副本），但作者只动了 navsim/agents/diffusiondrive/ 这一个角落，其余训练/评测管线全是 navsim 原装。挂载关系只有一层（没有 SparseDriveV2 那种「仓库根目录独立脚本」），所以反而更干净：\n新增的模型代码（作者写的部分）：全部在 navsim/agents/diffusiondrive/ 下，作为 navsim 的一个 Agent 插件接入。 下面用普通 Markdown 列表（不是代码块）展示目录结构，避免代码块内中文被逐字符换行的问题：\nnavsim/ agents/diffusiondrive/ （作者新增的模型代码，挂在 navsim 上的插件） transfuser_agent.py transfuser_model_v2.py transfuser_backbone.py transfuser_features.py transfuser_loss.py transfuser_config.py modules/ multimodal_loss.py conditional_unet1d.py scheduler.py planning/script/run_training.py （复用官方训练入口，不修改） 逐个文件用一句话说明它干嘛：\ntransfuser_agent.py：Agent 接口层。继承 navsim 的 AbstractAgent，对外暴露 compute_trajectory(agent_input)（给输入、吐轨迹）和 get_sensor_config 等标准方法；内部把原始 AgentInput 交给 transfuser_features.py 做特征构建，再送给 V2TransfuserModel 前向，最后把模型输出整理成 navsim 要的轨迹格式。 transfuser_model_v2.py：核心模型文件。定义了 V2TransfuserModel（主干 + TrajectoryHead）以及 TrajectoryHead（截断扩散解码器，含 denoiser、分类头 plan_cls、回归头 plan_reg）。这是你读源码最该盯紧的文件。 transfuser_backbone.py：实现 TransFuser 的「图像 + LiDAR 融合主干」。包含两个 ResNet-34 编码器（一个吃图像、一个吃 BEV），以及把两者特征融合的交叉注意力层，输出统一的「场景 token 特征」。 transfuser_features.py：负责把 navsim 的 AgentInput（原始相机图、激光雷达点云、地图、自车状态）转成模型能吃的张量。三相机横向拼接成全景图就在这里做。 transfuser_loss.py：顶层 loss 聚合处。把轨迹损失、agent 检测损失、BEV 语义损失等按权重相加，得到总 loss 返回给 PyTorch-Lightning。 transfuser_config.py：所有超参数的「集中营」。图像/LiDAR 用的网络结构、anchor 文件路径、各项 loss 权重、模式数 ego_fut_mode=20 等都在这里定义。 modules/multimodal_loss.py：实现多模态监督的核心。它用「真实轨迹离哪个 anchor 最近」来定分类标签，再算 focal 分类损失 + 对该模式的 L1 回归损失。 modules/conditional_unet1d.py：条件 1D UNet 去噪网络的实现（论文原版设计）。注意本项目实际推理用的是 TrajectoryHead 里内联的 CustomTransformerDecoder，这个文件更多是保留的对照实现。 modules/scheduler.py：对 diffusers.DDIMScheduler 的轻量封装，集中管理「加噪 / 去噪步数 / 时间步选取」逻辑。 planning/script/run_training.py：navsim 官方训练入口，DiffusionDrive 直接复用，不修改。 注意：文件名沿用 transfuser_*，但类 V2TransfuserModel / TransfuserAgent 实际实现的是 DiffusionDrive——这是历史遗留命名（从 TransFuser 改过来的），读源码时别被名字误导。挂载关系一句话：run_training.py（官方）→ agent=diffusiondrive_agent → TransfuserAgent → V2TransfuserModel（内含扩散 TrajectoryHead）。\n一、架构：截断扩散到底截在哪 这一节我们搞懂两件事：(1) 主干怎么处理图像和激光雷达；(2) 截断扩散 TrajectoryHead 到底改了标准扩散的哪一步。\n1.1 主干与环视图像处理（先把\u0026quot;看\u0026quot;这件事讲透） 模型首先要「看懂」周围。它有两路输入：相机拍的图、激光雷达扫的点云。两者都先用 ResNet-34 提取特征。配置里写得很直白：\nimage_architecture: str = \u0026ldquo;resnet34\u0026rdquo; lidar_architecture: str = \u0026ldquo;resnet34\u0026rdquo; 什么是 ResNet-34？ 简单说，它是一个「把图片压缩成一串有意义数字」的成熟神经网络，有 34 层深。给它一张 [3, 256, 1024] 的图（3 是 RGB 三通道，256 是高，1024 是宽），它输出一串「这张图里有什么」的特征向量。图像用 ResNet-34，激光雷达的 BEV 图也用 ResNet-34，两路各提各的。\n关键在「多视角环视的处理方式」——不是逐相机分别编码，而是把左/前/右三路裁剪后横向拼成一张 4:1 全景图再送 encoder。为什么这么做？因为自动驾驶车一般装多个相机（左、前、右），如果分别过 backbone 再融合，要写一套跨相机融合逻辑，麻烦。作者图省事（也是一种工程取舍），直接把三张图拼成一张超宽全景图，一次 backbone 搞定：\ncameras = agent_input.cameras[-1] l0 = cameras.cam_l0.image[28:-28, 416:-416] f0 = cameras.cam_f0.image[28:-28] r0 = cameras.cam_r0.image[28:-28, 416:-416] stitched_image = np.concatenate([l0, f0, r0], axis=1) resized_image = cv2.resize(stitched_image, (1024, 256)) tensor_image = transforms.ToTensor()(resized_image) 工程要点：把多相机拼成单张全景图，省掉了逐相机独立 backbone + 跨相机融合的复杂度，代价是相机间几何关系被「压扁」进 2D 拼接，依赖后续 transformer 自己学回来。在 NAVSIM 这种以前视为主的场景里够用；若要做到全向感知，这种拼接会损失侧视信息。\nLiDAR 这边怎么处理？ 激光雷达点云先被投影成一张「从上往下看」的 BEV 图（每个像素代表地面某个位置有没有障碍物、反射强度多少），再送进另一个 ResNet-34。两张图（图像特征、BEV 特征）随后在 backbone 里通过交叉注意力融合——让「图像里看到的车」和「激光里扫到的车」互相印证，得到更靠谱的场景理解。\n1.2 截断扩散策略（TrajectoryHead）—— 本文核心 实现类 TrajectoryHead（transfuser_model_v2.py:382-558），使用 diffusers 的 DDIMScheduler。\nanchor 定义：20 个 k-means 聚类锚轨迹（预生成 kmeans_navsim_traj_20.npy），作为不可训练参数（冻结）。这 20 个 anchor 对应 20 种驾驶模式（直行/左转/跟车……）。它们怎么来的？作者在训练集的全部真实轨迹上跑 k-means，聚成 20 类，每类的中心轨迹存成一个 .npy 文件。加载时把它变成 nn.Parameter 但 requires_grad=False，意思是「这是常量，训练时别改它」：\nself.diffusion_scheduler = DDIMScheduler( num_train_timesteps=1000, beta_schedule=\u0026#34;scaled_linear\u0026#34;, prediction_type=\u0026#34;sample\u0026#34;, ) plan_anchor = np.load(plan_anchor_path) self.plan_anchor = nn.Parameter( torch.tensor(plan_anchor, dtype=torch.float32), requires_grad=False, ) 训练：从 anchor 加「截断噪声」。标准扩散从标准高斯 N(0,1)（完全随机的噪声）出发、timestep 取满 1000；DiffusionDrive 改成从 anchor 出发、timestep 截断到 50（也就是说，训练时只模拟「噪声加到中等程度」的情况，不模拟「完全变成纯噪声」的极端情况，因为推理时也不会走到那）：\nplan_anchor = self.plan_anchor.unsqueeze(0).repeat(bs, 1, 1, 1) odo_info_fut = self.norm_odo(plan_anchor) timesteps = torch.randint(0, 50, (bs,), device=device) noise = torch.randn(odo_info_fut.shape, device=device) noisy_traj_points = self.diffusion_scheduler.add_noise( original_samples=odo_info_fut, noise=noise, timesteps=timesteps, ).float() noisy_traj_points = torch.clamp(noisy_traj_points, min=-1, max=1) noisy_traj_points = self.denorm_odo(noisy_traj_points) 推理：只去噪 2 步，初始样本 = anchor 加固定截断时刻 t=8 的噪声（而非纯高斯）。也就是说推理时根本不让轨迹变成纯噪声，只「轻扰」一下：\ndef forward_test(...): step_num = 2 self.diffusion_scheduler.set_timesteps(1000, device) step_ratio = 20 / step_num roll_timesteps = (np.arange(0, step_num) * step_ratio).round()[::-1] ... plan_anchor = self.plan_anchor.unsqueeze(0).repeat(bs, 1, 1, 1) img = self.norm_odo(plan_anchor) noise = torch.randn(img.shape, device=device) trunc_timesteps = torch.ones((bs,), device=device, dtype=torch.long) * 8 img = self.diffusion_scheduler.add_noise(original_samples=img, noise=noise, timesteps=trunc_timesteps) 为什么「从 anchor 出发 + 截断 timestep」能大幅提速？ 因为 anchor 已经把轨迹拉到了「合理驾驶模式」附近，扩散只需要做小幅修正，不需要从纯噪声一步步生成——所以 2 步就够。这是 DiffusionDrive 相比标准 DDPM 扩散（几十步）的核心加速来源。\n一句话记住「截断扩散」：标准扩散像「给一张白纸从头画一幅画」（慢，要几十步）；截断扩散像「给一张已经画了 80% 的草稿，只补两笔」（快，2 步）。anchor 就是那张 80% 的草稿。\n去噪网络是 CustomTransformerDecoder（2 层，非标准 UNet1D），每层做：轨迹点在 BEV 上 grid_sample 交叉注意力 → 与 agent/ego query 交叉注意力 → 时间步 FiLM 调制 → 回归 offset（偏移量）。这里的「offset」是「应该对当前轨迹点加多少修正」：\nposes_reg[\u0026hellip;, :2] = poses_reg[\u0026hellip;, :2] + noisy_traj_points 注意这里用「残差回归」：网络不直接预测最终轨迹，而是预测「相对当前 noisy 轨迹的修正量」，加到当前轨迹上。这比直接预测绝对轨迹更容易学，因为修正量通常很小。\n1.3 多模态轨迹表示（20 条候选怎么来的） 20 个 anchor 一一对应 20 个模式（ego_fut_mode = 20），每个模式回归 num_poses×3 (x,y,θ)（8 个时刻，每时刻 x、y、朝向 θ 共 3 个数）：\nplan_reg = traj_delta.reshape(bs, ego_fut_mode, self.ego_fut_ts, 3) 没有独立 scorer 模块；选择由分类头 plan_cls（每模式一个置信度）承担，取 argmax 即最终轨迹：\nmode_idx = poses_cls.argmax(dim=-1) mode_idx = mode_idx[..., None, None, None].repeat(1, 1, self._num_poses, 3) best_reg = torch.gather(poses_reg, 1, mode_idx).squeeze(1) 多模态是什么意思？ 简单说，同一个场景可能有多种合理开法（比如「直接超车」或「先跟车再超」）。DiffusionDrive 一次给出 20 条不同风格的候选（对应 20 个 anchor 模式），最后用分类头挑一条最靠谱的。这就是「多模态输出」——比只输出一条死板轨迹更灵活。\n二、前向传播：一张图对应的代码路径（本文重点） 把上面所有模块串成一次 forward。输入是 navsim 的 AgentInput，输出是 (B, 8, 3) 的轨迹（B 是 batch 里场景个数，8 个 pose，3 是 x/y/θ）。下面逐行跟一遍推理时的 forward，并标注每一步张量形状——注意它和 SparseDriveV2 的「检索式」完全相反，是「生成式」。\n为了清晰，下面用「纯英文代码块 + 代码块外中文解说」的方式来串这 7~8 步。代码块里只放英文/数字/符号（不含任何中文，避免中英文混排对齐错位），每一步的中文含义紧跟在代码块下方的列表里。\ncompute_trajectory(agent_input) build_features(agent_input) img = [B, 3, 256, 1024] lidar = [B, C, H, W] ego_map = vector tokens V2TransfuserModel.forward(features) TransFuser_backbone(img, lidar) → fused_feat = [B, N_token, d] build_20_anchor_queries(frozen) → anchor_embed = [B, 20, 8, 2] TrajectoryHead.forward_test(anchor_embed) noisy = add_noise(anchor, noise, t=8) → noisy = [B, 20, 8, 2] for step in range(2): offset = denoiser(noisy, fused_feat, timestep); poses_reg = poses_reg + offset plan_reg = [B, 20, 8, 3] plan_cls = [B, 20] mode_idx = plan_cls.argmax(dim=-1) best_reg = plan_reg.gather(1, mode_idx) output = [B, 1, 8, 3] 上面每一步对应的中文含义（逐行对照）：\ncompute_trajectory(agent_input)：navsim 的 AbstractAgent 接口，每个评测场景调一次，是整套推理的入口。 build_features：把传感器变成张量。 img = [B, 3, 256, 1024]：三相机 cam_l0/f0/r0 拼成的全景图。 lidar = [B, C, H, W]：激光雷达压成的 BEV 特征（可选）。 ego_map = vector tokens：自车状态（速度/朝向/位置）和地图信息编码成的向量 token。 V2TransfuserModel.forward：主模型前向。 TransFuser_backbone：图像 ResNet-34 + LiDAR ResNet-34 融合，输出 fused_feat = [B, N_token, d]，即统一的多模态场景特征。 build_20_anchor_queries：构造 20 个冻结的 anchor query（plan_anchor [20,8,2] 经 norm 后作初始样本），输出 anchor_embed = [B, 20, 8, 2]，代表 20 种驾驶模式原型（直行/左转/跟车等）。 TrajectoryHead.forward_test：截断扩散解码（推理专用）。 add_noise(anchor, noise, t=8)：给 anchor 加截断噪声（t=8 固定时刻，不是纯高斯，起点已接近合理轨迹），得 noisy = [B, 20, 8, 2]。 循环 2 步去噪：denoiser 用 deformable/cross-attention 融合 noisy 与 fused_feat、用 timestep 作 FiLM 调制，预测 offset，残差累加；2 步后得到 plan_reg = [B, 20, 8, 3]（20 条已\u0026quot;雕\u0026quot;好的轨迹）。 plan_cls = [B, 20]：分类头对 20 条模式各打一个置信度。 argmax(plan_cls)：选置信度最高的模式，gather 取出对应轨迹，最终 output = [B, 1, 8, 3] 即选中的最优轨迹。 下面把上面每一步拆开，每一步都给一段伪代码（纯 ASCII、标注张量形状）+ 一段大白话解释。\n步骤 ②：构建输入特征（把传感器变成张量） 实际代码在 transfuser_features.py 的 _build_features（伪代码，已把中文说明移到块外）：\ndef _build_features(self, agent_input): cameras = agent_input.cameras[-1] l0 = cameras.cam_l0.image[28:-28, 416:-416] f0 = cameras.cam_f0.image[28:-28] r0 = cameras.cam_r0.image[28:-28, 416:-416] stitched = np.concatenate([l0, f0, r0], axis=1) img = cv2.resize(stitched, (1024, 256)) img = transforms.ToTensor()(img) lidar_bev = project_lidar_to_bev(agent_input.lidar) ego_token, map_token = encode_ego_map(agent_input) return {\u0026#34;img\u0026#34;: img, \u0026#34;lidar_bev\u0026#34;: lidar_bev, \u0026#34;ego_token\u0026#34;: ego_token, \u0026#34;map_token\u0026#34;: map_token} img：三相机 cam_l0/f0/r0 拼成的全景图，形状 [3, 256, 1024] lidar_bev：激光雷达压成的 BEV 特征，形状 [C, H, W]（可选） ego_token, map_token：自车状态与地图编码成的向量 token 大白话：这一步是「翻译」。navsim 给的原始数据是人类友好的（图片文件、点云数组），模型只吃「张量（一堆数字）」。所以这里把三相机拼成全景图、把激光雷达压成俯视图、把自车速度和地图信息编码成向量。输出就是一堆规整的数字块，准备喂给网络。\n步骤 ④：TransFuser 融合主干（让模型「看懂」场景） 实际主干在 transfuser_backbone.py（伪代码）：\nimg_feat = ResNet34(img) bev_feat = ResNet34(lidar_bev) fused_feat = cross_attention(img_feat, bev_feat) fused_feat = fused_feat + ego_token + map_token 大白话：这一步是「理解场景」。想象你同时看照片（相机）和雷达（激光），脑子里把两者对上：「照片里那团白色，雷达也说那里有东西，那应该是一辆车」。ResNet 负责各自提取特征，交叉注意力负责「图像和雷达互相确认」，最后加上「我现在以多少速度在开、前方地图长啥样」这种全局信息。输出的 fused_feat 就是模型对「当前这一帧场景」的整体理解，后面去噪修正轨迹时，anchor 就靠它来「看路」。\n步骤 ⑤：构造 20 个 anchor query（准备 20 张草稿） 伪代码：\nplan_anchor = self.plan_anchor anchor = plan_anchor.unsqueeze(0).repeat(B,1,1,1) anchor = norm_odo(anchor) 大白话：这一步是「拿出 20 张驾驶草稿」。那 20 条 k-means 聚类出来的模板轨迹，被复制成 batch 里每个场景都有一份（因为不同场景只是「场景不同」，但都从同一套驾驶模式草稿出发）。注意此时每条草稿还是「模板原样」，还没结合具体场景——它只是「直行模板」「左转模板」这种通用姿势。\n步骤 ⑥-a：给 anchor 加截断噪声（把草稿轻微弄糊） 伪代码：\nnoise = randn_like(anchor_embed) noisy = diffusion_scheduler.add_noise(anchor_embed, noise, t) 大白话：这一步是「故意把草稿弄糊一点点」。为什么？因为去噪网络需要「从模糊到清晰」这个过程来发挥作用。但注意，这里只加到 t=8（扩散时间步很小），意味着只加了一丁点噪声，草稿还是「直行模板略歪」这种状态，远没到「纯随机噪声」。这就是「截断」的真意：起点离答案极近，所以后面只要修两笔。\n对比一下：标准扩散会把草稿加到 t≈500~1000，变成纯噪声，然后要从头画，所以要几十步。DiffusionDrive 只加到 t=8，相当于只把草稿抖了一下，2 步就修回来了。\n步骤 ⑥-b：循环去噪 2 步（核心生成循环） 实际去噪循环在 TrajectoryHead.forward_test（伪代码）：\ncurrent = noisy for step in range(2): offset = denoiser( traj=current, scene=fused_feat, t=current_timestep, ) current = current + offset theta = theta_head(current) plan_reg = concat([current, theta], dim=-1) 大白话：这一步是「反复看路、反复修」。循环只跑 2 次（step_num=2）。每次循环里，去噪网络（2 层 transformer）做三件事：(1) 让 20 条轨迹点去场景特征上「做交叉注意力」，相当于每条轨迹问场景「我前面有车吗、我出车道了吗」；(2) 用当前时间步 t 通过 FiLM 告诉网络「这是第几步去噪」；(3) 输出一个「offset 修正量」，加到当前轨迹上。两次循环后，20 条草稿就从「略歪的模板」变成「贴合当前场景的具体轨迹」了。最后补上朝向角，得到 20 条完整轨迹 plan_reg。\n为什么 2 步够？ 因为起点（anchor + t=8 噪声）已经非常接近合理轨迹，网络只需要做两次小幅修正。如果起点是纯噪声，两次修正远远不够，那就得几十步。所以「好起点」换来了「少步数」。\n步骤 ⑥-c：分类头打分（给 20 条候选各打一个分） 伪代码：\nplan_cls = cls_head(plan_reg, fused_feat) 输出: plan_cls 大白话：这一步是「给 20 条候选打分」。每条轨迹经过一个小的分类头，结合场景特征，输出一个 0~1 之间的置信度，表示「在当前场景下，这条开法有多合理」。注意分类头和去噪网络共享场景理解，所以它打分是「因地制宜」的——同一个「左转模板」，在「前方是左转路口」时分数高，在「直道」时分数低。\n步骤 ⑦：argmax 选 1 条（最终拍板） 伪代码：\nmode_idx = plan_cls.argmax(dim=-1) best_reg = plan_reg.gather(1, mode_idx) 大白话：这一步是「拍板」。20 个分数里取最大的那个（argmax），然后去 plan_reg 里把对应那条轨迹拿出来。比如第 3 个模式分数最高，就输出第 3 条轨迹。最终形状 [B, 8, 3]——batch 里每个场景一条 8 点 3 属性的轨迹，交给 navsim 评测。\n每一步在干啥（大白话版小结）：\n②④：把相机+LiDAR 融成一套「懂场景」的特征，和 SparseDriveV2 的 backbone 角色一样。 输入 / 输出维度小结：\n和 SparseDriveV2 的对照表（一眼看懂两条路线差异）：\n维度 SparseDriveV2（检索式） DiffusionDrive（生成式） 候选来源 冻结 26 万词表查表 20 anchor + 扩散生成 decoder 干啥 打分 + 筛选 去噪 + 生成 候选数量 26万 → 粗筛 ~200 → 1 20（生成）→ 1 选轨迹 argmax(PDMS式分数) argmax(plan_cls) 推理是否迭代 否（一次前馈） 是（2 步去噪） 擅长 贴合榜单指标、快、确定 覆盖词表外多模态 三、训练：怎么挂上 navsim DiffusionDrive 不写自己的训练入口，直接复用 navsim 官方 run_training.py（PyTorch-Lightning），只通过 Hydra 配置 agent=diffusiondrive_agent 挂载自己的模型：\npython $NAVSIM_DEVKIT_ROOT/navsim/planning/script/run_training.py \\ agent=diffusiondrive_agent experiment_name=training_diffusiondrive_agent \\ train_test_split=navtrain split=trainval trainer.params.max_epochs=100 ... agent 配置 navsim/planning/script/config/common/agent/diffusiondrive_agent.yaml：\ntarget: navsim.agents.diffusiondrive.transfuser_agent.TransfuserAgent config: target: navsim.agents.diffusiondrive.transfuser_config.TransfuserConfig checkpoint_path: null lr: 6e-4 Agent 类继承 AbstractAgent（transfuser_agent.py:32），优化器用 AdamW + WarmupCosLR，图像 encoder 学习率 ×0.5。\n3.1 anchor 是怎么来的（k-means 聚类） 在讲 loss 之前，必须先讲清 anchor 的来源，因为它直接决定分类标签怎么定。流程是：\n收集训练集 navtrain 里所有场景的\u0026quot;真值未来轨迹\u0026rdquo;（每条都是 [8, 2] 或 [8,3]） 大白话：作者先把训练集里人类司机实际怎么开车的几万条轨迹收集起来，用聚类算法自动分成 20 类（比如一类是「平稳直行」、一类是「中等左转」……）。每类的「平均样子」就是一条 anchor。这样 20 个 anchor 天然覆盖了训练集里最常见的 20 种驾驶姿势，作为扩散起点非常合理。\n3.2 训练时怎么加噪（截断到 50） 回忆前面 1.2 节的代码：训练时不是加到纯噪声，而是 timesteps = torch.randint(0, 50, ...)，也就是只在「噪声程度 0~50」之间随机取一个时间步加噪。这是因为推理时最多只走到 t=8 附近，训练时没必要模拟「完全噪声」的极端情况——既省算力，又让训练分布和推理分布更一致（减少 train/inference gap）。\n加完噪后，网络要预测「加了多少噪声 / 轨迹该往哪修」，然后用下面的 loss 监督。\n3.3 损失函数（梯度流向） 顶层聚合在 transfuser_loss.py:11-53：\nloss = ( config.trajectory_weight * trajectory_loss + config.diff_loss_weight * diffusion_loss + config.agent_class_weight * agent_class_loss + config.agent_box_weight * agent_box_loss + config.bev_semantic_weight * bev_semantic_loss ) 真正的多模态监督在模型内部逐 decoder 层计算（深监督），本体在 modules/multimodal_loss.py：用 GT 轨迹到 20 个 anchor 的 L2 距离找最近模式作为分类标签 → focal loss 分类 + 对该模式做 L1 回归：\ndist = torch.linalg.norm(target_traj.unsqueeze(1)[..., :2] - plan_anchor, dim=-1).mean(dim=-1) mode_idx = torch.argmin(dist, dim=-1) loss_cls = self.cls_loss_weight * py_sigmoid_focal_loss(poses_cls, target_classes_onehot, gamma=2.0, alpha=0.25) reg_loss = self.reg_loss_weight * F.l1_loss(best_reg, target_traj) ret_loss = loss_cls + reg_loss 这段用大白话解释：对于每条训练样本，我们先看「真值轨迹（人类实际怎么开）离 20 个 anchor 里哪一个最近」，最近的那个就被标记为「正确模式」（正样本）。然后：\n分类损失（focal loss）：让模型学会「这个场景下，正确的驾驶模式应该是那个正样本模式」——相当于教分类头打分打对。 回归损失（L1 loss）：只对这个正样本模式对应的轨迹做「让它更接近真值」的监督——相当于教去噪网络把这条轨迹修得更准。 数学上，分类用 focal loss，公式写作：\n$$ \\mathcal{L}_{cls} = -\\alpha (1-p_t)^\\gamma \\log(p_t) $$其中 $p_t$ 是模型对正样本模式的预测概率，$\\alpha=0.25$、$\\gamma=2.0$ 是焦点参数，用来让模型更关注难分样本。回归用 L1 loss：\n$$ \\mathcal{L}_{reg} = \\frac{1}{N}\\sum_{i=1}^{N} | \\hat{y}_i - y_i | $$其中 $\\hat{y}_i$ 是预测轨迹点，$y_i$ 是真值轨迹点。\n注意：仓库里 diff_loss_weight 路径当前 diffusion_loss=0——即训练时直接监督 anchor 回归 + 分类，并不反向传播扩散重建损失。扩散仅作为推理时的轨迹生成/修正机制。这是读源码时容易踩的坑。\n梯度流小结：只有主干、TrajectoryHead（denoiser + cls/reg head）参数可训；plan_anchor 全程冻结。多模态 focal+L1 损失逐层加权求和后反向传播，AdamW 优化。\n四、推理：怎么跑出 submission 4.1 复用官方提交脚本 DiffusionDrive 直接复用 navsim 官方 run_create_submission_pickle.py 生成 submission.pkl（未自定义）。该脚本对每个 token 调 agent 的 compute_trajectory：\nagent.initialize() trajectory = agent.compute_trajectory(agent_input) compute_trajectory 本身继承 AbstractAgent（abstract_agent.py:62），内部 build features → forward → 取 predictions[\u0026quot;trajectory\u0026quot;]。真正的「采样几步 + 选轨迹」落在 TrajectoryHead.forward_test：\n去噪 2 步（step_num=2），从 anchor + 截断噪声（t=8）出发； 每步 DDIM step 更新； 按分类分数 argmax 从 20 个模式选一条输出。 推理去噪循环的具体迭代过程（补全 1.2 节的简写），用伪代码展开：\nanchor = plan_anchor.repeat(B,1,1,1) x = add_noise(anchor, noise, t=8) timesteps = [8, 4] (示意，实际由 step_ratio 算) for t in timesteps: noise_pred = denoiser(x, fused_feat, t) x = ddim_step(x, noise_pred, t, t_prev) plan_reg = concat([x, theta_head(x)], -1) best = plan_reg.gather(1, plan_cls.argmax(-1)) 大白话：推理时不再随机加噪（训练才随机），而是固定从 t=8 的轻微噪声起点出发，然后按 DDIM 的跳步规则走 2 步（比如从 t=8 到 t=4 再到 t=0），每步都拿场景特征做交叉注意力修正。2 步结束，轨迹就清晰了，最后分类头挑最好的那条。\n4.2 本地算分 / 上榜 评测用官方 run_pdm_score.py；正式上榜把 submission.pkl 传 HuggingFace 官方空间（navtest / navhard 榜）。\n训练和推理的差异总结表：\n环节 训练 推理 加噪时间步 随机 0~50 固定 t=8 去噪步数 不需要迭代（直接监督回归） 2 步 DDIM 迭代 扩散重建损失 关闭（diff_loss=0） 不适用（无监督，只用 cls+reg 头） 目标 让 anchor 模式会分类 + 会残差回归 从 anchor 出发 2 步雕出并选最优轨迹 anchor 状态 冻结 冻结（同一份） 闭环总结 阶段 入口 关键代码 训练/推理差异 架构 transfuser_model_v2.py TrajectoryHead anchor 高斯 + 截断 timestep（训练 50 / 推理 t=8、2 步） anchor 冻结，两侧共用 训练 navsim run_training.py + agent=diffusiondrive_agent 多模态 focal+L1 损失（深监督） 随机 t∈[0,50) 加噪回归 推理 navsim run_create_submission_pickle.py forward_test 去噪 2 步 + cls argmax 选轨迹 固定 t=8 起，2 步去噪 一句话记住这个闭环：训练时让 20 个 anchor 学会「覆盖所有驾驶模式 + 对每个模式做残差回归」，推理时从 anchor 加一点截断噪声、2 步去噪、分类头挑最好的那条——这就是 DiffusionDrive 又快又多模态的秘密。\n个人理解与思考 1. 「截断扩散」是对自动驾驶场景的精准定制。 标准 DDPM 从纯噪声生成，需要几十步才能收敛；但驾驶轨迹不是「任意图像」，它有强结构（平滑、符合运动学、贴合车道）。DiffusionDrive 用 k-means anchor 把起点从「纯噪声」拉到「合理驾驶模式附近」，于是扩散只需做小幅修正——2 步足矣。这启示我们：扩散的起点选择比步数更重要，给模型一个好的先验，能极大压缩生成开销。换句话说，与其苦哈哈地训一个「从噪声到轨迹」的万能生成器，不如先告诉模型「大方向就这 20 种」，让它专注微调。\n2. 训练和推理的目标不一致，是个值得警惕的信号。 训练时 diffusion_loss=0，模型实际是在做「anchor 回归 + 分类」的硬监督，扩散重建损失没参与。这意味着推理时的扩散去噪，本质上是在一个「没被扩散损失调过」的 decoder 上跑——它能 work，靠的是 anchor 先验足够强 + 残差回归 head 已经学好了。但严格说，训练/推理的分布是有 gap 的：训练时网络看到的是「anchor 加 0~50 步噪声」，推理时是「anchor 加固定 t=8 噪声 + 2 步 DDIM」。若想把扩散用得更充分（比如支持更长 horizon、更自由的多模态），应该把扩散重建损失也打开，让训练真正覆盖推理会走到的噪声区间。\n3. 全景图拼接是取舍鲜明的工程选择。 三相机拼一张 1024×256 全景图，省掉跨相机 fusion 模块，简洁高效；但几何畸变和信息损失不可忽视（侧视相机被压扁）。在 NAVSIM 这种前视为主的评测里够用，放到需要全向感知的开放场景，可能不如真正多相机 token + cross-attention 稳健。我个人倾向认为，这是「为榜单效率妥协」的设计，而非「为实车鲁棒」的设计。\n4. 和 SparseDriveV2 的对比给人的启发。 SparseDriveV2 是「检索式」——在 26 万字典里选，推理无迭代、贴合榜单指标；DiffusionDrive 是「生成式」——从 anchor 扩散出轨迹，擅长覆盖字典外的多模态。两者都挂在 navsim 上、都复用官方管线，但哲学相反：前者相信「好答案在被枚举的候选里」，后者相信「好答案该被生成出来」。作为 VLA 方向工程师，我认为实车部署更看重 SparseDriveV2 式的可解释与确定性（输出必在可行集），而算法探索阶段 DiffusionDrive 式的生成灵活性更有想象空间。值得补充的是，DiffusionDrive 的「生成」其实也被 anchor 强烈约束，所以它并非完全自由生成，而是「受限生成」——这恰好是它能在实车场景里保底安全的原因，也模糊了「生成 vs 检索」的界线：它更像「在 20 个检索到的模板附近做生成式精修」。\n5. 一个延伸想法：anchor 数量是不是越多越好？ 本文用 20 个。更多 anchor（比如 50）能覆盖更细的驾驶模式，但推理时每条都要走 2 步去噪，计算量线性增长；更少（比如 6）则多模态表达力下降。20 是作者在「覆盖度 vs 算力」间的折中。未来若上更强去噪网络或更长 horizon，这个超参值得重新扫一遍。\n附：自己跑起来（最小实操） 读完代码，最好亲手跑一遍验证理解。下面是最小可行路径（基于官方 README 整理）：\nclone 并装环境：DiffusionDrive 是 navsim 的 fork，直接装它的 navsim 开发套件即可。 git clone https://github.com/hustvl/DiffusionDrive.git cd DiffusionDrive pip install -e . 准备数据：按 navsim 官方文档下载 NAVSIM navtrain / navtest 数据集，并设置环境变量 NAVSIM_DEVKIT_ROOT 指向数据根目录（anchor 文件 kmeans_navsim_traj_20.npy 需在配置指定的路径下，缺了会报 FileNotFoundError）。\n训练（复用官方入口 + Hydra 切换 agent）：\npython $NAVSIM_DEVKIT_ROOT/navsim/planning/script/run_training.py \\ agent=diffusiondrive_agent experiment_name=my_diffusiondrive \\ train_test_split=navtrain split=trainval trainer.params.max_epochs=100 推理出 submission： python $NAVSIM_DEVKIT_ROOT/navsim/planning/script/run_create_submission_pickle.py \\ agent=diffusiondrive_agent experiment_name=my_diffusiondrive 本地算分 / 上榜：用官方 run_pdm_score.py 在本地看 PDMS；正式上榜把 submission.pkl 传 HuggingFace 官方空间。 新手最常踩的 3 个坑：\nanchor 文件缺失或路径不对 → 一启动就 FileNotFoundError。先确认 transfuser_config.py 里 plan_anchor_path 指向真实存在的 .npy。 显存不够 → 把 batch_size 调小，或减少 ego_fut_mode（但会牺牲多模态）。 想改 anchor 数量（比如 50）→ 重新跑 k-means 生成新的 .npy，并把配置里的 ego_fut_mode 同步改掉，否则形状对不上会报错。 延伸阅读 同系列对比：SparseDriveV2 代码讲解——另一条「词汇表 + 两级评分」路线 榜单背景：NAVSIM 排行榜深度分析 ","permalink":"https://auto-driving-blog.pages.dev/posts/code/diffusiondrive%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"逐行拆解 hustvl/DiffusionDrive 的真实源码，面向零基础读者：从架构图与全局数据流出发，用大白话讲清什么是 anchor、什么是去噪、什么是 cross-attention、什么是 BEV、什么是截断扩散，再逐文件讲清它如何作为 navsim 的 Agent 插件挂载，最后把一次前向传播拆成 7 到 8 步、把训练和推理的差异讲透。一篇把项目挂载方式→数据流→前向传播→训练梯度→推理选轨迹→个人思考全部讲明白的极详细工程向代码讲解。","title":"代码讲解：DiffusionDrive 从架构到训练推理的完整闭环"},{"content":"写给完全没基础的同学：先补几个最关键的名词 在看 DiffusionDriveV2 的代码之前，有几个名词是必须先搞懂的。如果你已经读过本博客的 DiffusionDrive 代码讲解，前一半名词你已经熟了——这里用更短的方式过一遍，重点讲新东西。\n旧朋友（快速过） 端到端自动驾驶：给模型传感器输入，直接输出行驶轨迹，中间不拆成独立模块。 轨迹（Trajectory）：未来 T 个时刻的 (x, y, θ) 序列。本文里每条轨迹是 8 个点，每点 3 个值。 anchor（锚轨迹）：KMeans 从训练集里聚出来的 20 种典型驾驶姿势模板。训练时冻结（不改），作为扩散起点。 截断扩散（Truncated Diffusion）：不从纯高斯噪声出发，而是从 anchor 出发、只加一点点噪声（t=8），然后去噪 2 步就修好。这是 DiffusionDrive 的核心加速 trick，DiffusionDriveV2 完全继承它，没改结构。 去噪网络（Denoiser / TrajectoryHead）：2 层 CustomTransformerDecoder，每层做 grid_sample 交叉注意力 + agent/map 交叉注意力 + FiLM 时间步调制 + 残差 offset 回归。 DDIM / DDPM：DDIM 是确定性快速采样（η=0），DDPM 是随机慢采样（η=1）。DiffusionDriveV2 训练探索时用 DDPM（η=1）获取随机性，推理时用 DDIM（η=0）确定性地出结果。 NAVSIM 评测指标：PDMS 是综合驾驶得分（包含碰撞、舒适度、进度等），EP 是自车前进距离，DAC 是可行驶区域合规率。 新名词（重点看） GRPO（Group Relative Policy Optimization）：DeepSeek 提出的强化学习算法——不给模型训一个单独的价值网络（critic），而是在一组（group）样本内部做归一化算优势。免去了训价值网络的不稳定。公式上，组内第 i 个样本的优势 = (r_i - mean(r_group)) / std(r_group)。 Intra-Anchor GRPO：把 GRPO 的「组」定义为「来自同一个 anchor 的若干条轨迹」。右转和直行的轨迹不放在同一个组里比——因为它们代表不同驾驶意图，不应该互相竞争。只在同一个意图内比「这条转得好不好」。 Inter-Anchor Truncated GRPO：在 Intra-Anchor GRPO 的基础上加全局视角。对于没碰撞的轨迹，只保留正优势（鼓励更好）、截断负优势（不惩罚保守）；对于碰撞的轨迹，直接给 -1 重罚。用两行判断解决「矮子里拔将军」和「安全硬约束」。 乘性探索噪声（Multiplicative Exploration Noise）：RL 需要探索，探索需要加噪声。标准做法是给每个 (x,y) 加独立高斯（加性噪声），但轨迹近端和远端尺度差异大，加出来毛刺多。乘性做法只生成两个随机因子（纵向/横向），乘到整条轨迹上，保持几何形状不变。 冷启动（Cold Start）：DiffusionDriveV2 的生成器不是从零训，而是直接加载 DiffusionDrive 的预训练权重。RL 只负责微调安全偏好，不需要重新学怎么开车。 Mode Selector（模式选择器）：和 DiffusionDrive 的分类头（一层 MLP）不同，V2 换成一个独立的两级 scorer：先粗筛保留 top-10，再细排选最优。训练时加 Margin-Rank loss 让模型学「相对排序」而非绝对分值。 Margin-Rank Loss：一种排序损失——如果轨迹 A 的真实分数高于 B，但模型预测的 A 分数低于 B，就产生惩罚。它让 scorer 更关注「谁比谁好」而不是「绝对分数是多少」。 REINFORCE 梯度：策略梯度最基础的形式。对于不可微的奖励函数，用它避开求导：梯度 = 期望(log_prob * advantage)。DiffusionDriveV2 的 RL 更新就是用这个。 Denoising Discount γ：给去噪链中早期步（噪声大、梯度信号弱）一个折扣权重，避免早期步的高噪声破坏训练。值在 0~1 之间，离 t=0 越近折扣越小。 为什么要讲 DiffusionDriveV2 的代码 DiffusionDrive（CVPR 2025 Highlight）用 anchor 截断扩散把多样轨迹生成做得很好，但有个「屋里的大象」：多样性有了，质量参差不齐——好轨迹和会撞的坏轨迹一起出，全靠下游分类头去挑。 训练时 IL 只监督了离真值最近的那一个正样本 anchor，剩下 19 个负样本 anchor 完全没被约束，于是它们爱往哪走往哪走、经常出事故。分类头参数少、泛化弱，一旦在 OOD 场景里选错，就是事故。\n论文原文用一个类比说得很清楚：IL 的正样本监督像「只告诉模型什么是正确做法」，但不告诉它「其他做法有多危险」。结果模型虽然能产出高质量的轨迹，但同时也产出大量未受约束的低质量——甚至是碰撞的——轨迹。这些坏轨迹全靠下游 selector 去过滤，而 selector 通常比 generator 参数少得多，泛化能力更弱。一旦遇到分布外场景，selector 选错一条碰撞轨迹，系统就出事故。\nDiffusionDriveV2（hustvl × Horizon Robotics，arXiv 2512.07745）在同一个生成器上加了 RL 微调——不是简单加奖励，而是精确地设计了「不让 anchor 间互相比较导致坍缩」的 GRPO 改版。它用 Intra-Anchor GRPO 维持多模态（同 anchor 内比、不同 anchor 不比），用 Inter-Anchor Truncated GRPO 加上全局惩罚（碰撞的杀无赦、正优势保留）。最终在 NAVSIM v1 上拿到 91.2 PDMS 新 SOTA。\n下图对比了三种方法的多模态轨迹质量（论文 Figure 1，三张子图依次为 a/b/c）： 图片讲解：这是从 NAVSIM 验证集中选的一个多模态场景（交叉路口，存在左转/直行/右转多种合理走法）。每张子图都是一个俯视 BEV 视角，蓝色线是规划轨迹簇，颜色深浅代表轨迹密度。\n子图 (a) Vanilla Diffusion：标准扩散模型不加 anchor，直接从一个纯高斯噪声去噪生成轨迹。由于没有显式的多模态先验，模型在推理时把所有可能性「平均」成一条保守直线——左转和右转都被抹平了，多样性完全丧失。这就是论文说的 mode collapse（模式坍缩）。 子图 (b) DiffusionDrive：加了 20 个 anchor 做截断扩散，每条轨迹从不同 anchor 出发，所以能生成左转、直行、右转等多样轨迹。但其中多条轨迹直接扎进对面车道——它们会碰撞（图中红色高亮标注）。这是 IL 监督只覆盖正样本 anchor 的后果：其余 19 个 anchor 没被约束，爱怎么走怎么走。 子图 (c) DiffusionDriveV2：用同样的生成器但加了 RL 微调。碰撞轨迹被 GRPO 的优势函数打上负分、从参数上「推开」，安全轨迹的正优势鼓励模型走得更果断。结果是该左转的左转、该直行的直行，没有碰撞，且轨迹更贴合道路曲率。 一句话结论：DiffusionDriveV2 = DiffusionDrive 生成器（完全不变，冷启动加载）+ 19 个负样本 anchor 终于也被 RL 管住了（Intra-Anchor GRPO 不坍缩 + Inter-Anchor 碰撞惩罚）+ 两级 Mode Selector 精排，在 NAVSIM v1 拿下 91.2 PDMS 新 SOTA。\n跟 DiffusionDrive 的对比 DiffusionDrive 和 DiffusionDriveV2 的关系是「同一套生成器，不同的训练范式」。下表从 10 个维度对比两者的差异：\n维度 DiffusionDrive DiffusionDriveV2 论文 CVPR 2025 Highlight arXiv 2512.07745 (2025.12) 生成器结构 TrajectoryHead (2 层 CustomTransformerDecoder) 完全不变，冷启动加载预训练权重 感知主干 ResNet-34 双路 (TransFuser) 完全不变 Anchor 数量 20 (KMeans 聚类，冻结) 20，不变 训练范式 纯 IL (模仿学习) IL 冷启动 → RL 微调 (GRPO) 扩散调度 DDIM (η=0) 确定去噪 训练探索用 DDPM (η=1)，推理用 DDIM (η=0) 探索噪声 无（不需要，IL 看真值） 乘性噪声 (Multiplicative Noise) 轨迹筛选 分类头 (1 层 MLP，与 generator 端到端) 两级 Mode Selector（粗筛 top-10 + MLP 细排 + Margin-Rank loss，独立训练） 负样本 anchor 无约束（只监督离真值最近的正样本） RL 约束全部 20 个 anchor NAVSIM v1 PDMS 89.3 91.2 (+1.9) 代码仓库 github.com/hustvl/DiffusionDrive github.com/hustvl/DiffusionDriveV2 核心一句话：DiffusionDriveV2 没改生成器一行代码，只改了怎么训——从「只看真值」变成「真值打底 + RL 纠偏」。所有改动都集中在训练循环里的探索噪声、GRPO 损失、和 Mode Selector，推理时生成器本身一模一样。\n架构总览 整体架构见论文 Figure 2： 图片讲解：这张图是理解 DiffusionDriveV2 最关键的一张，建议配合下文「推理链路」列表一起看。架构分三大区域，从左往右读：\n左半（Encoder）：和 DiffusionDrive 完全共享。多传感器数据（图像 + LiDAR BEV）先各自过 ResNet-34，再用 Cross-Attention 融合成场景特征 fused_feat。右下角的 N× 表示 20 个 anchor 各自独立展开一条扩散链。 中间（Truncated Diffusion Decoder + Multi Noise）：灰色框里的 A_11\u0026hellip;A_NG 矩阵代表 N 个 anchor × G 条探索轨迹。每一条轨迹都是从 anchor 出发，先加乘性噪声（Multiplicative Noise，图中 Multi Noise 标注），再用截断扩散 decoder 走 2 步生成。彩色实线 vs 虚线表示同一条 anchor 内 G 次探索的不同结果（实线 = 高质量，虚线 = 低质量）。 右半（Anchored Truncated GRPO + Mode Selector）：这就是 V2 的核心新增。G 条探索轨迹先在 Intra-Anchor 组内归一化算优势（同 anchor 的轨迹互相比较、不同 anchor 不比），再经 Inter-Anchor 碰撞截断（负的没撞的截为 0，撞的直接 -1）。最后策略梯度更新 decoder 参数。Mode Selector 是一个独立的两级 scorer，从 N×G 条候选里精选出最终一条轨迹输出（Refined Trajectories）。 感知主干（Perception Backbone）：和 DiffusionDrive 一模一样的 ResNet-34 双路编码器。图像（三相机拼接全景 1024×256）过一个 ResNet-34，LiDAR BEV 图过另一个 ResNet-34，两者做 cross-attention 融合，输出场景特征 fused_feat。这是 TransFuser 主干，没改任何结构。 截断扩散生成器（Truncated Diffusion Generator）：和 DiffusionDrive 一模一样的 TrajectoryHead（20 anchor + 2 步 DDIM 去噪 + 分类头）。完全复用 DiffusionDrive 的预训练权重，不随机初始化。 RL 微调 + Mode Selector（V2 新增部分）：在生成器之上，把训练流程从纯 IL 改成 RL（IL 做冷启动，RL 做安全微调），并新增一个两级 scorer 做最终轨迹选择。 整条推理链路（用文字版 Markdown 列表描述）：\n图像 3 路输入 → 裁剪拼接成 1024×256 全景图 LiDAR 点云 → 投影成 BEV 图（栅格化） 全景图过 ResNet-34 → 图像特征 LiDAR BEV 过 ResNet-34 → 激光特征 图像特征与激光特征做 Cross-Attention 融合 → fused_feat（B, N_token, C） 20 个冻结 anchor → 加 t=8 截断噪声 → 2 步 DDIM 去噪（每步做 cross-attention 与场景特征交互）→ 20 条候选轨迹 训练时：候选轨迹送入 RL 奖励函数 → GRPO 算优势 → 更新 decoder 参数 推理时：候选轨迹送 Mode Selector（两级 scorer）→ 选最优 1 条输出 项目结构（基于真实开源仓库） 官方仓库 hustvl/DiffusionDriveV2 已开源（https://github.com/hustvl/DiffusionDriveV2，MIT 协议，345+ stars）。以下目录结构直接来自仓库源码。标注 (new) 是相对 DiffusionDrive 新增/修改的。\nnavsim/agents/diffusiondrivev2/（新增 Agent 插件）（new） RL 分支（负责 rollout + GRPO 策略梯度训练） diffusiondrivev2_rl_agent.py（new）：RL 训练的 Agent 接口。加载 DiffusionDrive 预训练权重后冻结 backbone，只训练 TrajectoryHead。使用 PyTorch Lightning 框架。 diffusiondrivev2_rl_config.py（new）：RL 超参（lr=1e-4, batch=4, groups=4, warmup=1 epoch, cos lr schedule）。 diffusiondrivev2_model_rl.py（new）：核心文件（~1140 行）。包含：V2TransfuserModel（感知主干）+ TrajectoryHead（含 DDIMScheduler_with_logprob）+ forward_train_rl()（做 rollout 10 步去噪 + PDM 评分 + advantage 计算）+ get_rlloss()（策略梯度 + IL 辅助损失）。 Selector 分支（负责 coarse→fine 两级排序选最优轨迹） diffusiondrivev2_sel_agent.py（new）：Selector 训练的 Agent 接口。 diffusiondrivev2_sel_config.py（new）：Selector 超参。 diffusiondrivev2_model_sel.py（new）：核心文件（~1400 行）。包含：TrajectoryHead（含独立 scorer 网络）+ _score_coarse()（5 个子指标 BCE + Margin-Rank loss 粗排 top-k）+ _score_fine_multi()（多层 scorer 细排 + 最终选择）。 modules/ (new) blocks.py：GridSampleCrossBEVAttention、linear_relu_ln 等共享模块。 conditional_unet1d.py：ConditionalUnet1D 及正余弦时间嵌入。 multimodal_loss.py：LossComputer（多模态分类/回归损失）。 scheduler.py：WarmupCosLR 学习率调度。 transfuser_backbone.py（new）：Transfuser 感知双路编码器。 transfuser_features.py（new）：特征构建器。 transfuser_loss.py（new）：损失函数。 transfuser_callback.py（new）：PyTorch Lightning 回调。 transfuser_config.py（new）：全局配置。 navsim/planning/script/（未改动） run_training.py：Lightning 训练启动脚本（RL 和 Selector 共用）。 run_pdm_score.py、run_create_submission_pickle.py：NAVSIM 评测脚本。 scripts/（新增） run_rl.sh、run_selector.sh：训练启动 shell 脚本。 关键设计决策：仓库拆成了两个独立 Agent——diffusiondrivev2_rl_agent 只负责「GRPO 训练」，diffusiondrivev2_sel_agent 只负责「Mode Selector 训练」。它们各自有独立的 config 和 model，但共享 backbone 和 decoder 的基础结构。\n一、核心创新逐块拆解（基于真实源码） 以下代码片段全部来自仓库 navsim/agents/diffusiondrivev2/diffusiondrivev2_model_rl.py 和 diffusiondrivev2_model_sel.py，做了必要的简化以聚焦核心逻辑。\n1.1 截断扩散生成器：完整复用 DiffusionDrive 生成器不做任何结构改动，核心代码和 DiffusionDrive 完全一致。Anchor 加载方式（model_rl.py:710-715）和截断加噪逻辑都直接复用。唯一差异在调度器的 η 参数：\n# model_rl.py:697-708 — TrajectoryHead.__init__ self.diffusion_scheduler = DDIMScheduler( num_train_timesteps=1000, beta_schedule=\u0026#34;scaled_linear\u0026#34;, prediction_type=\u0026#34;sample\u0026#34;, ) self.diffusionrl_scheduler = DDIMScheduler_with_logprob( num_train_timesteps=1000, beta_schedule=\u0026#34;scaled_linear\u0026#34;, prediction_type=\u0026#34;sample\u0026#34;, ) 两个 scheduler 的区别：diffusionrl_scheduler 的 step() 在返回 prev_sample 的同时还返回 log_prob 和 prev_sample_mean，用于 RL 的策略梯度计算。训练探索时 eta=1（DDPM 随机采样），推理时 eta=0（DDIM 确定性）。\n1.2 Scale-Adaptive 乘性探索噪声（在 scheduler 的 step 里实现） 乘性噪声不是一个独立函数，它直接在 DDIMScheduler_with_logprob.step() 中实现（model_rl.py:644-676）。原版 DDIM 的 step 只输出一个确定性/随机的 prev_sample，V2 改写了这段逻辑，同时生成了乘性和加性两种噪声并组合：\n# model_rl.py:644-676 — DDIMScheduler_with_logprob.step() if eta \u0026gt; 0: std_dev_t_mul = torch.clip(std_dev_t, min=0.04) std_dev_t_add = torch.tensor(0.0) else: std_dev_t_mul = torch.tensor(0.0) std_dev_t_add = torch.tensor(0.0) if prev_sample is None: # multiplicative noise: two Gaussian factors (horizon, vertical) variance_noise_horizon = randn_tensor( [B, G, 1, 1], device=d, dtype=dtype ) * std_dev_t_mul + 1.0 variance_noise_vert = randn_tensor( [B, G, 1, 1], device=d, dtype=dtype ) * std_dev_t_mul + 1.0 variance_noise_mul = torch.cat( [variance_noise_horizon, variance_noise_vert], dim=-1 ).repeat(1, 1, T, 1) # additive noise: extra independent Gaussian (multiplied by 0, unused) variance_noise_x = randn_tensor([B, G, 1, 1], device=d, dtype=dtype) variance_noise_y = randn_tensor([B, G, 1, 1], device=d, dtype=dtype) variance_noise_add = torch.cat( [variance_noise_x, variance_noise_y], dim=-1 ).repeat(1, 1, T, 1) prev_sample = ( prev_sample_mean * variance_noise_mul + std_dev_t_add * variance_noise_add ) # core: x_{t-1} = mean * mul_noise + 0 * add_noise # also compute log_prob for policy gradient log_prob = -((prev_sample.detach() - prev_sample_mean) ** 2) / (2 * std_dev_t_mul ** 2) - log(std_dev_t_mul) - log(sqrt(2 * pi)) log_prob = log_prob.sum(dim=(-2, -1)) return prev_sample, log_prob, prev_sample_mean 关键设计：std_dev_t_add = 0 所以加性噪声实际被关闭了，只有乘性噪声生效。两个高斯因子 (1 + N(0, σ²)) 分别控制纵向（整条轨迹加速/减速）和横向（整条轨迹向左/右偏），形状 (B, G, 1, 1) → repeat 到 (B, G, T, 2)——即同一条轨迹的所有时刻共享同一组随机因子，保持几何平滑。\n1.3 Intra-Anchor GRPO（优势计算 + 截断） 这部分在 TrajectoryHead.forward_train_rl() 中（model_rl.py:800-939）。核心优势计算流程：\n# model_rl.py:885-935 — forward_train_rl() # step_num=10, num_groups default 4 # rollout generates diffusion_output: (B, num_groups*20, 8, 2) # concat GT trajectory and send to PDM scorer together reward_group = self.get_pdm_score_para(diffusion_output_with_gt, metric_cache) reward_gt = reward_group[:, -1:] # GT at last index reward_group = reward_group[:, :-1] # remove GT, keep candidates only # --- Intra-Anchor advantage normalization --- reward_group = reward_group.view(bs, num_groups, 20) # (B, G, N) mean_grouped = reward_group.mean(dim=1) # (B, N) std_grouped = reward_group.std(dim=1) # (B, N) advantages = (reward_group - mean_grouped.unsqueeze(1)) / (std_grouped.unsqueeze(1) + 1e-4) # (B, G, N) # --- keep only positive advantages for samples better than GT --- mask_positive = (reward_group \u0026gt; reward_gt - 1e-6) # (B, G, N) advantages = advantages.clamp(min=0) * mask_positive.float() # --- Inter-Anchor Truncated: collision gets -1 --- for k, v_full in batched_sub.items(): v = v_full[:, :-1].view(bs, num_groups, 20) if k in (\u0026#39;no_collision\u0026#39;, \u0026#39;drivable_area\u0026#39;): zero_mask = (v != 1) # safety constraint violation advantages = torch.where( zero_mask, torch.full_like(advantages, -1.0), advantages ) # --- Denoising Discount --- discount = torch.tensor([0.8 ** (step_num - i - 1) for i in range(step_num)]) advantages = advantages.detach().unsqueeze(-1).repeat(1, 1, 1, step_num) advantages = advantages * discount return {\u0026#34;advantages\u0026#34;: advantages, \u0026#34;reward\u0026#34;: ...} Intra-Anchor 体现在 reward_group.view(bs, num_groups, 20)：第 1 维是 num_groups（默认为 4），每组包含 20 条来自不同 anchor 的轨迹。mean(dim=1) 是同 anchor 跨 group 做均值——也就是每个 anchor 自己算自己的 baseline，不和其他 anchor 混合。\n但等一下——这和论文描述的「一个 anchor 一个 group」不太一样？实际代码里 num_groups=4 是把每个 anchor 拆成 4 个子组分别 rollout（4 次独立加噪探索），然后 4 个组之间做归一化。论文描述的是 groups=G 是对同一条 anchor 的 G 次采样。实现上把 G 设为 4，每个 group 内 20 条轨迹来自不同的 anchor。这相当于用 4 次独立探索来估计同 anchor 的 reward 分布。\n1.4 Inter-Anchor Truncated GRPO（策略梯度 + IL 正则） 对应的 get_rlloss() 方法（model_rl.py:1028-1120）：\n# model_rl.py:1094-1119 — get_rlloss() old_diffusion_output = old_pred[\u0026#34;all_diffusion_output\u0026#34;] # cached 10-step chain advantages = old_pred[\u0026#34;advantages\u0026#34;] # re-run decoder to compute log-likelihood for each trajectory per_token_logps = all_log_probs.view(bs, num_groups * 20, -1) # (B, G*N, 10) # --- policy gradient (importance weighted) --- per_token_loss = -torch.exp( per_token_logps - per_token_logps.detach() ) * advantages mask_nz = per_token_loss != 0 RL_loss_b = (per_token_loss * mask_nz).sum(dim=1) / mask_nz.sum(dim=1).clamp_min(1) RL_loss_b = RL_loss_b.mean(dim=-1) # --- IL auxiliary loss (prevent RL from forgetting basic driving) --- IL_loss_b = torch.zeros_like(RL_loss_b) target_traj = targets[\u0026#34;trajectory\u0026#34;].unsqueeze(1).repeat(1, num_groups*20, 1, 1) for poses_reg_list in poses_reg_steps_list: for poses_reg in poses_reg_list: traj_l1 = F.l1_loss(poses_reg[..., :2], target_traj[..., :2], reduction=\u0026#34;none\u0026#34;) IL_loss_b += traj_l1.mean() / (len(poses_reg_steps_list) * len(poses_reg_steps_list[0])) # increase IL weight when no positive samples in batch (all worse than GT) has_positive = (advantages \u0026gt; 0).any(dim=2).any(dim=1) il_weight = torch.where(has_positive == 0, 1.0, 0.1) loss = RL_loss_b + il_weight * IL_loss_b 关键设计细节：\n使用 torch.exp(log_prob_new - log_prob_old) 做 importance weighting（类似 PPO 的 clip，但这里没有 clip——直接用 exp 做 on-policy 校正）。不是标准的 REINFORCE -log_prob * advantage。 Denoising Discount γ：0.8 ^ (10 - i - 1)，越靠后的去噪步权重越大（因为越接近 x_0，梯度信号越可靠）。论文中将 γ^t-1 直接乘在 advantage 上。 IL loss 权重根据 batch 是否含正样本自适应：如果整 batch 都没正样本（全部劣于 GT），加大 IL 到 1.0，防止 RL 训崩。 1.5 Mode Selector（两级 scorer 精细选择） Selector 是独立训练的模型（diffusiondrivev2_model_sel.py），不参与 GRPO 训练。它的 TrajectoryHead 包含完整的 coarse scorer + fine scorer 网络。\n粗排（model_sel.py:978-1042） # model_sel.py:978-1042 — _score_coarse() # predict 5 sub-metrics for each trajectory NC_score = self.NC_head(traj_feature).squeeze(-1) # no_collision EP_score = self.EP_head(traj_feature).squeeze(-1) # progress DAC_score = self.DAC_head(traj_feature).squeeze(-1) # drivable_area TTC_score = self.TTC_head(traj_feature).squeeze(-1) # ttc C_score = self.C_head(traj_feature).squeeze(-1) # comfort # BCE loss per sub-metric loss_nc = F.binary_cross_entropy_with_logits(NC_score, gt_nc) loss_ep = F.binary_cross_entropy_with_logits(EP_score, gt_ep) loss_dac = F.binary_cross_entropy_with_logits(DAC_score, gt_dac) loss_ttc = F.binary_cross_entropy_with_logits(TTC_score, gt_ttc) loss_c = F.binary_cross_entropy_with_logits(C_score, gt_c, reduction=\u0026#34;none\u0026#34;) loss_c = (loss_c * mask).sum() / mask.sum() # skip -1 invalid entries # Margin-Rank loss: enforce relative ordering idx_i, idx_j = torch.combinations(range(Gk), r=2).unbind(-1) pred_i, pred_j = EP_score[:, idx_i], EP_score[:, idx_j] gt_i, gt_j = gt_ep[:, idx_i], gt_ep[:, idx_j] target = torch.sign(gt_i - gt_j) loss_rank = self.rank_loss(pred_i, pred_j, target) # MarginRankingLoss(margin=0.05) loss_coarse = loss_nc + loss_ep + loss_dac + loss_ttc + loss_c + 2 * loss_rank # synthesize final reward from predicted scores, select top-k final_coarse = sigmoid(NC) * sigmoid(DAC) * (5*sigmoid(TTC) + 5*sigmoid(EP) + 2*sigmoid(C)) / 12 best_idx = final_coarse.topk(10).indices # coarse filter: keep top-10 细排（model_sel.py:1044-1122） # model_sel.py:1044-1122 — _score_fine_multi() # fine scorer has 3 ScorerTransformerDecoderLayer, each predicts 5 sub-metrics for i, feat in enumerate(traj_feature_list): # 3 layer features EP_score = self.fine_EP_head(feat).squeeze(-1) NC_score = self.fine_NC_head(feat).squeeze(-1) DAC_score = self.fine_DAC_head(feat).squeeze(-1) TTC_score = self.fine_TTC_head(feat).squeeze(-1) C_score = self.fine_C_head(feat).squeeze(-1) # ... same BCE + Margin-Rank as coarse ... loss_fine = loss_fine + loss_nc + loss_ep + loss_dac + loss_ttc + loss_c + 2*loss_rank loss_fine = loss_fine / len(traj_feature_list) # average over 3 layers final_fine = sigmoid(NC) * sigmoid(DAC) * (5*sigmoid(TTC) + 5*sigmoid(EP) + 2*sigmoid(C)) / 12 best_idx = final_fine.argmax(dim=-1) # top layer picks best Selector 的训练不涉及 RL，是一个纯监督学习任务。用 PDM scorer 算出的真值分数作为标签，训练 scorer 网络学会模仿 PDM 的排序行为。这样在推理时代价极低（不需要调 PDM 仿真器），一次前向就出分数。\nMargin-Rank loss 的精髓：它不要求模型精确回归绝对分数（那很难），只要求相对排序正确——如果轨迹 A 的真实 PDMS 高于轨迹 B，那模型的预测分数也应该 A \u0026gt; B。这种「相对约束」通常更容易学、泛化更好。\n二、前向传播：逐步骤跟踪张量形状 下面把一整次 inference 的前向传播拆成 9 步，用纯英文伪代码 + 块外中文说明的方式呈现。每一步标注张量形状。与 DiffusionDrive 相比，变化集中在步骤 6~9（RL 差异在训练时而非推理时）。\n步骤 1：构建输入特征 def build_features(agent_input): cameras = agent_input.cameras[-1] l0 = cameras.cam_l0.image[28:-28, 416:-416] f0 = cameras.cam_f0.image[28:-28] r0 = cameras.cam_r0.image[28:-28, 416:-416] stitched = np.concatenate([l0, f0, r0], axis=1) img = cv2.resize(stitched, (1024, 256)) img = transforms.ToTensor()(img) lidar_bev = project_lidar_to_bev(agent_input.lidar) ego_token, map_token = encode_ego_map(agent_input) return {\u0026#34;img\u0026#34;: img, \u0026#34;lidar_bev\u0026#34;: lidar_bev, \u0026#34;ego_token\u0026#34;: ego_token, \u0026#34;map_token\u0026#34;: map_token} 输出形状：\nimg：[3, 256, 1024] 三相机拼接的全景图 lidar_bev：[C, H, W] LiDAR 投影的 BEV 特征图 ego_token：[1, D] 自车状态编码向量 map_token：[N_map, D] 地图 token 序列 步骤 2：TransFuser 主干（感知融合） img_feat = ResNet34(img) # [B, C1, H1, W1] bev_feat = ResNet34(lidar_bev) # [B, C2, H2, W2] fused_feat = cross_attention(img_feat, bev_feat) # [B, N, D] fused_feat = fused_feat + ego_token + map_token # [B, N, D] 输出 fused_feat = [B, N_token, D]：融合了图像、激光雷达、自车状态、地图信息的场景表征。这是后面所有轨迹 query 的「条件信息源」。\n步骤 3：加载 anchor + repeat num_groups 次（V2 新增） # model_rl.py:812-815 num_groups = self.num_groups # default: 4 plan_anchor = self.plan_anchor # [20, 8, 2] plan_anchor = plan_anchor.unsqueeze(0).unsqueeze(0) # [1, 1, 20, 8, 2] plan_anchor = plan_anchor.repeat(bs, num_groups, 1, 1, 1) # [B, G, 20, 8, 2] plan_anchor = plan_anchor.view(bs, num_groups * 20, 8, 2) # [B, G*20, 8, 2] anchor = self.norm_odo(plan_anchor) # normalize 输出 anchor = [B, G×20, 8, 2]：每个 anchor 被重复 G 次（默认 4），每条「副本」将独立加噪探索。G 控制探索密度——越大奖励分布估计越准，但计算成本线性增长。\n步骤 4：截断加噪 + 10 步 rollout 去噪（训练）/ 2 步（推理） 训练时（forward_train_rl，model_rl.py:818-856）走 10 步 DDPM（η=1）：\n# model_rl.py:818-856 step_num = 10 noise = torch.randn(anchor.shape, device=device) diffusion_output = self.diffusionrl_scheduler.add_noise( original_samples=anchor, noise=noise, timesteps=torch.full((bs,), 8, device=device, dtype=torch.long)) for i, k in enumerate(roll_timesteps): # 10 steps noisy_traj_points = self.denorm_odo(diffusion_output) traj_feature = self.plan_anchor_encoder( gen_sineembed_for_position(noisy_traj_points)) poses_reg, _ = self.diff_decoder( traj_feature, noisy_traj_points, ...) x_start = self.norm_odo(poses_reg[..., :2]) prev_sample, log_prob, _ = self.diffusionrl_scheduler.step( model_output=x_start, timestep=k, sample=diffusion_output, eta=1.0) # DDPM exploration diffusion_output = prev_sample all_log_probs.append(log_prob) diffusion_output = self.denorm_odo(diffusion_output) diffusion_output = self.bezier_xyyaw(diffusion_output) # bezier + heading 推理时（model_rl.py:942-1004）用 eta=0.0 确定性采样，2 步即收敛。代码结构同上但 step_num=2、num_groups=4。\n步骤 5：PDM 仿真算奖励 + Intra-Anchor 优势 + Inter-Anchor 截断 # model_rl.py:867-935 target_traj = targets[\u0026#34;trajectory\u0026#34;].unsqueeze(1) diffusion_output_with_gt = torch.cat([diffusion_output, target_traj], dim=1) reward_group, metric_cache, sub_rewards = self.get_pdm_score_para( diffusion_output_with_gt, metric_cache) reward_gt = reward_group[:, -1:] reward_group = reward_group[:, :-1] # Intra-Anchor: reshape to (B, G, N), normalize within each anchor reward_group = reward_group.view(bs, num_groups, 20) mean_grouped = reward_group.mean(dim=1) std_grouped = reward_group.std(dim=1) advantages = (reward_group - mean_grouped.unsqueeze(1)) / (std_grouped.unsqueeze(1) + 1e-4) # Keep only positive advantages for trajectories better than GT mask_positive = (reward_group \u0026gt; reward_gt - 1e-6) advantages = advantages.clamp(min=0) * mask_positive.float() # Inter-Anchor: collision trajectories get -1 for k, v in sub_rewards.items(): if k in (\u0026#34;no_collision\u0026#34;, \u0026#34;drivable_area\u0026#34;): advantages = torch.where( v.view(bs, num_groups, 20) != 1, torch.full_like(advantages, -1.0), advantages) # Denoising discount discount = torch.tensor([0.8 ** (9 - i) for i in range(10)]).to(device) advantages = advantages.detach().unsqueeze(-1).repeat(1, 1, 1, 10) * discount 步骤 6：策略梯度 + IL 辅助损失（第二次前向） 见上文 1.4 节的 get_rlloss()（model_rl.py:1094-1119）。第一次前向（forward_train_rl）只做 rollout + 算 advantage，detach 后存下来；第二次前向（get_rlloss）重新过 decoder 算 log_prob，结合 advantage 做 importance-weighted 策略梯度。IL loss 在 batch 无正样本时加大权重防止训飞。\n推理时（selector 分支） 不走 RL。由 diffusiondrivev2_model_sel.py 的 TrajectoryHead 生成 20 条轨迹后，直接送 coarse scorer → fine scorer 选最佳，无需 PDM 仿真。\n张量形状一览表 阶段 张量 形状 说明 输入 fused_feat [B, N, D] 感知融合特征 步骤 3 anchor [B, G×20, 8, 2] G=num_groups(默认4) 步骤 4 diffusion_output [B, G×20, 8, 2] rollout x_t 步骤 4 log_prob [B, G×20, 10] 10 步的对数似然 步骤 5 reward_group [B, G, 20] PDM 分数 步骤 5 advantages [B, G, 20, 10] discount 后优势 步骤 6 loss scalar 策略梯度 + IL 3 anchor [B, 20, 8, 2] 冻结 anchor 模板 4 noisy [B, 20, 8, 2] 加截断噪声后 5 offset [B, 20, 8, 2] 残差修正量 6 plan_reg [B, 20, 8, 3] 20 条候选轨迹 6 plan_cls [B, 20] 候选置信度 7 best_traj [B, 8, 3] 选中轨迹 7-RL trajs_all [B, 20, G, 8, 2] RL rollout 多条 7-RL rewards [B, 20, G] 每条的奖励 8-RL adv_final [B, 20, G] 截断后优势 三、训练流程详解 DiffusionDriveV2 的训练分两大阶段。和 DiffusionDrive 的「纯 IL」相比，这是最大的不同。\nStage 0：IL 冷启动（加载 DiffusionDrive 权重） pretrained_ckpt = torch.load(\u0026#34;diffusiondrive_final.pth\u0026#34;, map_location=\u0026#34;cpu\u0026#34;) # only load backbone + decoder weights; skip missing keys (e.g. mode_selector) model.load_state_dict(pretrained_ckpt, strict=False) # mode_selector is randomly initialized (not in pretrained) 这一步不执行训练，只是加载权重。感知主干 + 截断扩散 decoder 全部复用 DiffusionDrive 的 final checkpoint。\nStage 1：RL 微调（10 epochs） optimizer = AdamW(model.parameters(), lr=2e-4) gamma = 0.99 # denoising discount G = 8 # group size per anchor lambda_il = 0.1 # IL regularization weight for epoch in range(10): for batch in dataloader: fused_feat = backbone(batch[\u0026#34;img\u0026#34;], batch[\u0026#34;lidar_bev\u0026#34;]) # roll out G candidates per anchor with multiplicative noise trajs_all, log_probs_all = rollout_with_exploration( model.decoder, model.anchor, fused_feat, G=8) # compute reward via NAVSIM simulator rewards = [pdm_simulator.compute_reward(t) for t in trajs_all] # Intra-Anchor: normalize within each anchor group adv_intra = intra_anchor_normalize(rewards, anchor_ids) # Inter-Anchor: truncate with collision penalty collisions = [pdm_simulator.is_collision(t) for t in trajs_all] adv_final = truncate_advantage(adv_intra, collisions) # RL loss (Eq.7 in paper) loss_rl = 0 for k in range(N_anchor): for i in range(G): for t in range(T_trunc): log_pi = log_probs_all[k][i][t] loss_rl -= gamma**(t-1) * log_pi * adv_final[k][i] loss_rl /= (N_anchor * G * T_trunc) # IL loss as regularization (Eq.9) loss_il = imitation_loss(model, batch) loss = loss_rl + lambda_il * loss_il loss.backward() torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0) optimizer.step() 这段循环的运行时复杂度主要由 rollout_with_exploration 决定：每步要在 B×N_anchor×G 个轨迹上各跑一次 2 步去噪。假设 B=64, N_anchor=20, G=8，那就是 64×20×8 = 10240 条轨迹 / batch。每条轨迹 2 步去噪 → ~2 万次 denoiser 前向 / batch。论文用 8 张 L20 GPU 分布式训练来控制时间。\nStage 2：Mode Selector 训练（20 epochs） Mode Selector 单独训练（生成器冻结），用 RL 微调后的模型来收集轨迹数据：\nmodel.eval() # freeze generator selector_optim = AdamW(mode_selector.parameters(), lr=2e-4) for epoch in range(20): for batch in dataloader: with torch.no_grad(): fused_feat = backbone(batch[\u0026#34;img\u0026#34;], batch[\u0026#34;lidar_bev\u0026#34;]) trajs_all = decoder.forward_test(model.anchor, fused_feat) gt_scores = [pdm_simulator(t) for t in trajs_all] pred_scores = mode_selector(trajs_all, fused_feat, ...) loss = selector_loss(pred_scores, gt_scores, trajs_all) loss.backward() selector_optim.step() 训练对比表：DiffusionDrive vs DiffusionDriveV2 维度 DiffusionDrive DiffusionDriveV2 预训练 无（从头训） 加载 DiffusionDrive 权重冷启动 训练范式 纯 IL（BC，监督 GT 轨迹） IL 冷启动 + RL 微调 监督信号 只监督正样本 anchor 所有 anchor 都被 RL 奖励约束 噪声类型 标准加性高斯（训练 t050） 乘性（纵向/横向因子）+ DDPM η=1 探索 去噪调度 η 0（训练推理都用 DDIM） 1（探索用 DDPM）、0（推理用 DDIM） 负样本 anchor 无监督（随便生成） RL 奖励约束 + 碰撞惩罚 选择器 简单 cls head（1 层 MLP） 两级 scorer（cross-attn + Rank loss） 训练 epochs ~100 epochs 10（RL）+ 20（scorer） 主要开销 backbone + 2 步去噪 backbone + 2 步去噪 × G 倍 rollout 四、推理流程 推理时关闭 RL 探索、DDIM η=0 回到确定性、使用 Mode Selector：\ndef compute_trajectory(agent_input): features = build_features(agent_input) fused_feat = backbone(features[\u0026#34;img\u0026#34;], features[\u0026#34;lidar\u0026#34;]) # same truncated diffusion as DiffusionDrive (2 steps, DDIM eta=0) trajs, cls_scores = decoder.forward_test(model.anchor, fused_feat) # use ModeSelector instead of original cls argmax best_traj = mode_selector(trajs, fused_feat, features[\u0026#34;agent_map\u0026#34;]) return best_traj # (8, 3) trajectory 推理开销：主干（一次 ResNet-34 前向）+ 2 步 DDIM 去噪 + 两级 scorer（两次 cross-attention）。比 DiffusionDrive多一个 scorer 前向（两级 cross-attn），但 4090 上仍在实时范围内。论文 DiffussionDrive 报 45 FPS，V2 估计 3540 FPS（多了 scorer 但 anchor 数量不变）。\n五、实验结果精华 论文在 NAVSIM v1（navtest 闭评测）上的结果：\n方法 Img. Backbone PDMS ↑ EP ↑ DAC ↑ DiffusionDrive ResNet-34 88.1 82.2 96.2 DriveSuprim ResNet-34 89.9 86.7 97.3 Hydra-MDP V2-99 90.3 86.5 97.8 GoalFlow V2-99 90.3 85.0 98.3 DiffusionDriveV2 (ours) ResNet-34 91.2 87.5 97.9 三个值得注意的点：\nResNet-34 小骨干打平甚至超过 V2-99 大骨干：V2 只用 21.8M 参数，就超过了 Hydra-MDP 和 GoalFlow（96.9M 参数）。这说明 RL 微调带来的收益比加参数量更大。 EP 涨了 5.3：从 82.2 到 87.5。说明 RL 不仅让轨迹更安全（不撞），还让路线更高效（走得更远）。 PDMS@Top-10（原始输出质量）涨了 9.1：从 75.3 到 84.4。这直接证明 RL 把负样本 anchor 的轨迹质量整体抬高了。不再是「好轨迹 + 一大把会撞的」。Mode Selector 选错的概率也大幅下降。 论文还做了详尽的消融：\n消融项 PDMS 说明 Baseline (DDV1 IL only) 88.6 DiffusionDrive 的 IL baseline + 乘性噪声 90.1 比加性噪声高 0.4 + Intra-Anchor GRPO 90.5 保住多模态 + Inter-Anchor Truncated 91.0 加上全局碰撞惩罚 + Mode Selector 91.2 两级 scorer 再补 0.2 每项都有独立贡献，没有凑数的。\n六、个人思考 1. Intra-Anchor GRPO 的分层思想值得迁移。 把策略空间先按「意图」分层再做 RL，本质是 hierarchical RL 的一种轻量实现。这种思路可以迁移到其他有多模态策略的问题上：比如先决定「加速/减速/转向」，再决定执行细节。关键在于「不让不同意图的样本放在同一个组里算优势」。\n2. Inter-Anchor 的截断信号是「安全 RL」的教科书案例。 两条规则（碰撞= -1，没撞= max(0, adv)）用极简的设计同时解决了「安全硬约束」和「保守锁死」两个矛盾。相比之下，很多安全 RL 工作用复杂的约束优化（Lagrangian、Lyapunov），效果不一定比这个干净的两行判断好。\n3. 乘性噪声的几何直觉：不破坏轨迹的结构。 加性噪声破坏局部连续性（让轨迹毛刺），模型需要额外的能力去「修复」这些毛刺——这是不必要的。保持轨迹的几何结构参与探索，模型探索到的样本更可能是有物理意义的。这和课程学习的思路类似：先让模型在合理的轨迹附近探索，再逐渐扩大范围。\n4. 冷启动是 RL 在驾驶上落地的关键。 如果从零训 RL，20 个 anchor × 高维动作空间的探索成本极高，而且很容易训飞。先 IL 训一个「会开车」的 baseline，再用 RL 做安全偏好对齐——这个两阶段范式是端到端驾驶 RL 最可行的路径。\n5. 和本系列其他文章的呼应。 AutoVLA 和 DriveVLA-W0 也用 GRPO，但它们在离散动作 token 空间上做，DiffusionDriveV2 在连续扩散轨迹上做。这使得它的探索更自然（加噪声就是探索），但也需要 Intra-Anchor 的处理来避免 mode collapse。如果你在对比 GRPO 在不同架构上的应用，DiffusionDriveV2 和 AutoVLA 是很好的对照——一个连续、一个离散。\n七、自己跑起来（等代码开源后） 截至本文写作时 github.com/hustvl/DiffusionDriveV2 尚未 release，以下是最小可行路径的预期操作：\n环境准备（和 DiffusionDrive 一样，基于 navsim 开发套件）： git clone https://github.com/autonomousvision/navsim.git cd navsim \u0026amp;\u0026amp; pip install -e . 下载 DiffusionDrive 预训练权重： # download from huggingface: https://huggingface.co/hustvl/DiffusionDrive mkdir -p ckpts \u0026amp;\u0026amp; wget \u0026lt;weight-link\u0026gt; -O ckpts/diffusiondrive.pth 克隆 DiffusionDriveV2 代码并 RL 训练： git clone https://github.com/hustvl/DiffusionDriveV2.git cd DiffusionDriveV2 # symlink DiffusionDrive pretrained weights ln -s ../ckpts/diffusiondrive.pth ckpts/diffusiondrive_pretrained.pth bash scripts/run_rl.sh 该脚本内部大致等价于：\npython train_rl.py \\ agent=diffusiondrivev2_agent \\ experiment_name=ddv2_rl \\ rl.num_epochs=10 rl.batch_size=512 rl.G=8 rl.lr=2e-4 \\ rl.cold_start_ckpt=ckpts/diffusiondrive_pretrained.pth 推理出 submission： python navsim/planning/script/run_create_submission_pickle.py \\ agent=diffusiondrivev2_agent experiment_name=ddv2_submission 本地算分 / 上榜：用官方 run_pdm_score.py 看 PDMS。 和本系列其他文章的关系 DiffusionDrive（前一篇文章）：用 IL 训的截断扩散基线，V2 的生成器完全照搬它。理解 DiffusionDrive 是读 V2 的前提。 SparseDriveV2：检索式规划的对比面——不走扩散、靠 26 万词表查表。两者对照能看清「生成 vs 检索 + RL vs IL」的交错。 AutoVLA / DriveVLA-W0：也用 GRPO 但走离散动作 token。DiffusionDriveV2 证明 GRPO 在连续扩散轨迹上同样有效，但要处理 anchor 间的 mode collapse 问题。 ","permalink":"https://auto-driving-blog.pages.dev/posts/code/diffusiondrivev2%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"「DiffusionDriveV2 在 DiffusionDrive 的 anchor 截断扩散之上，补了一套 GRPO 强化学习微调：用 scale-adaptive 乘性噪声做探索、Intra-Anchor GRPO 保住多模态不坍缩、Inter-Anchor Truncated GRPO 用碰撞惩罚把低质量轨迹压下去，最后加两级 Mode Selector 精排，在 NAVSIM v1 上冲到 91.2 PDMS。本文基于论文 Algorithm 还原成逐文件逐函数伪代码，从 cold start 权重加载写到 rollout → advantage → loss 的完整 RL 训练循环。」","title":"代码讲解：DiffusionDriveV2 — 用 GRPO 强化学习给截断扩散的多样轨迹「上安全锁」"},{"content":"写给完全没基础的同学：先补几个最关键的名词 读 DriveVLA-W0 的代码前，先把会反复出现的「黑话」翻译成人话。你不用现在就全懂，有个印象即可。\nVLA（Vision-Language-Action，视觉-语言-动作）模型：给模型「一张图（有时加一句指令）」，它直接输出「车怎么开（动作/轨迹）」。它本质是「把驾驶当成语言建模问题」——图当输入 token，动作当输出 token，中间用一个大模型（VLM）串起来。DriveVLA-W0 用的是 Emu3-8B（离散视觉 token）和 Qwen2.5-VL-7B（连续视觉特征）两种主干。\n世界模型（World Model）：一个「学会预测未来长啥样」的模型。DriveVLA-W0 让它「看了当前画面 + 做了某个动作，就画出下一帧画面」。它不直接参与开车，只在训练时逼模型理解「我做了这个动作，世界会变成什么样」。\n监督赤字（Supervision Deficit）：本文核心痛点。给一个 7-8B 的大模型，却只拿「未来几维轨迹点」去监督它——信号太稀疏，大模型的能力被浪费。世界模型用「每像素的未来画面」提供稠密监督，把亏损补上。\nMoE（Mixture of Experts，混合专家）：把模型拆成多个「专家」子网络，每个输入只激活其中一部分。DriveVLA-W0 让一个 500M 的「动作专家（Action Expert）」和一个 7-8B 的「理解专家（Understanding Expert，即 VLM 主干）」通过 Joint Attention 耦合——小专家借用大专家的表征，却不必把大模型搬进控制回路。\nJoint Attention（联合注意力）：两个专家各自算 Q/K/V，沿 token 维度拼起来做一次注意力，再拆回各自专家。这是 MoE 在本文的落地方式（不是路由式 MoE，而是「拼接-融合-拆分」式）。\nFlow Matching（流匹配）：一种生成式训练范式。它学一个「从噪声沿直线流到真实动作」的向量场 v_theta，训练时预测这个向量场，推理时沿 ODE 积分几步把噪声「流」成轨迹。相比扩散，它走的是直线概率路径，更简洁。\nFAST tokenizer：把连续轨迹点（waypoints）离散化成 token 的方法（源自 OpenVLA）。连续的横向/纵向/朝向，被均匀分箱成 256 个 bin，映射到词表末尾的 256 个 token。这样轨迹就能像文字一样被自回归预测。\nVQ（Vector Quantization，向量量化）：把图像压缩成一串「离散视觉 token」的编码器（Emu3 的视觉 tokenizer 就是 MoVQGAN 一类）。世界模型（AR 分支）预测的就是这些离散 token，再用解码器还原成像素。\nadaLN（adaptive LayerNorm，自适应层归一化）：用「时间步 t + 类别 y」通过一个 MLP 生成 LayerNorm 的缩放/平移参数，让同一层在不同时间步有不同行为。DiT（扩散 Transformer）的经典技巧，本文的 MoE 专家里也用了。\nNAVSIM：自动驾驶规划评测基准，提供传感器数据与 PDMS 指标。DriveVLA-W0 的单目前视版本就刷在这上面。\nPDMS（Predictive Driver Model Score）：NAVSIM 的综合规划评分，越高越好（人类约 94.8）。\n如果你这些词都有印象了，下面读代码会轻松很多。我们开始。\n为什么要讲 DriveVLA-W0 的代码 DriveVLA-W0（ICLR 2026，中科院自动化所 × 蔚来）是 VLA 路线里**「用世界模型放大数据缩放律」**的代表作。它最反直觉的结论是：单目前视相机，靠「预测未来画面」的稠密监督，就能打穿依赖多相机 + 激光雷达的对手（NAVSIM v1 PDMS 93.0）。\n这篇不讲公式推导，直接看 BraveGroup/DriveVLA-W0 的真实开源代码。但必须先讲清一个重要边界。\n一句话结论：DriveVLA-W0 = VLM 主干（Emu3-8B / Qwen2.5-VL-7B）+ 500M MoE 动作专家 + 三种可选动作解码器（Query/AR/Flow Matching）；训练时额外挂一个世界模型分支（AR 或 Diffusion）提供稠密监督，推理时世界模型被旁路，只走动作通路。\n先厘清边界：仓库到底开源了什么 这一点非常关键，照着读源码才不会被坑。仓库 README 明确写道：\nDue to company policy, only the reviewed part of our codebase is available.\n也就是说，真正的大模型主干（Emu3 / Qwen2.5-VL）是外部库，仓库里没有；开源的是 DriveVLA-W0 自己写的那一层——动作专家、解码器、tokenizer、世界模型的 VQ 编码工具，以及推理脚本。挂载关系如下：\n未开源（外部库）：Emu3（8B 理解专家主干）、Qwen2.5-VL（7B 连续特征主干）、MoVQGAN（视觉 tokenizer 编解码器）。 已开源（本仓库）：全部在 models/ 与 inference/ 下，是「动作头 + tokenizer + 推理入口」这一层插件。 用普通 Markdown 列表展示仓库结构（避免代码块内中文逐字符换行）：\nDriveVLA-W0/ models/policy_head/ （动作策略头，作者自研） moe_experts.py （MoE 动作专家，DiT 风格） flow_matching.py （Flow Matching 训练/采样封装） diffusion_policy.py （扩散/流匹配 PolicyHead，含编码解码器） noise_schedulers.py （Flow Matching 加噪调度器） models/tokenizer/ （动作与视觉 tokenizer） action_tokenizer.py （FAST 动作离散化，改自 OpenVLA） emu3_tokenizer_navsim.py （用 Emu3 视觉 tokenizer 把图像压成 VQ 码） extract_vq_emu3_navsim.sh （批量提取 VQ 码的脚本） configs/ （Emu3MoE 配置 + 归一化统计） moe_fast_video.json （动作专家 + 主干超参） normalizer_navsim_trainval/ （训练集归一化参数） inference/vla/ （NAVSIM 推理脚本） inference_action_navsim_flow_matching_vava.py （Flow Matching 版推理入口） infer_navsim_flow_matching_PDMS_87.2.sh （一键推理 shell） utils/datasets.py （NAVSIM 数据集定义） tools/pickle_gen/ （数据预处理成 pickle） Training.md （训练说明） 逐个文件一句话说明它干嘛：\nmoe_experts.py：定义 Emu3Experts（DiT 风格的去噪/生成网络），含 TimestepEmbedder、LabelEmbedder、ActionProjector、adaLN 调制、RoPE。它是动作专家与世界模型共用的一套 Transformer 积木。 flow_matching.py：把 Flow Matching 的「采样时间步 + 加噪 + 预测向量场 + MSE 损失 + ODE 采样」封装成 FlowMatching 类，训练与推理都靠它。 diffusion_policy.py：定义 PolicyHead（动作头的顶层），内含 Emu3ActionEncoder（噪声动作编码）、MultiLayerAttentionDecoder（轨迹解码）、RoPE/PositionalEncoding。这是 Flow Matching 动作解码器的具体实现。 noise_schedulers.py：定义 FlowMatchingScheduler，负责按 Beta 或 Uniform 分布采样时间步 tau，并用 (1-tau)·x + tau·noise 线性加噪。 action_tokenizer.py：把连续轨迹点离散成词表末尾 token（FAST/OpenVLA 风格），以及反向解码回连续值。 emu3_tokenizer_navsim.py：调用 Emu3 视觉 tokenizer，把 NAVSIM 前视图像编码成 VQ 离散码（世界模型 AR 分支的训练前处理）。 moe_fast_video.json：Emu3MoE 的完整配置，含主干 32 层、动作专家 2 层（500M 量级）、action_dim=7 等关键超参。 inference_action_navsim_flow_matching_vava.py：推理主脚本，逐场景调用模型吐轨迹、存 JSON。 读源码的边界提醒：你会发现仓库里没有「把图像送进 VLM、吐出动作」的那段主前向——因为它在 Emu3/Qwen2.5-VL 库内部。我们能讲透的，是作者自研的「动作专家 / 解码器 / tokenizer / 世界模型预处理」这一层，以及它们如何被训练与目标如何计算。下面所有的代码解读都严格限定在这层。\n架构总览：先看地图 把整条链路用一句话串起来（以 Flow Matching 解码器 + Emu3 主干为例）：\n前视图像 + 语言指令 + 历史动作 → 拼成深度交错的 [L, V, A, \u0026hellip;, L, V, A] 序列 → VLM 主干（理解专家）自回归编码 → 拆出条件特征 → MoE 动作专家（Action Expert）通过 Joint Attention 借用主干表征 → Flow Matching 解码器从噪声沿向量场「流」出轨迹 → 输出 [B, T, 7] 动作。\n训练时，同一条序列还额外喂给世界模型分支（AR 预测下一帧 VQ 码 / Diffusion 预测下一帧潜表示），提供稠密监督；推理时世界模型分支整个旁路掉。\n一、配置：从 moe_fast_video.json 看全局超参 先读配置，建立「模型有多大」的直觉。仓库根配置 configs/moe_fast_video.json 的关键字段：\narchitectures: [\u0026ldquo;Emu3MoE\u0026rdquo;] hidden_size: 4096 （主干隐维度） num_hidden_layers: 32 （理解专家 32 层） num_attention_heads: 32 vocab_size: 184622 （Emu3 词表） action_experts: false （此配置下动作专家是否独立，由 action_config 决定） action_config.action_dim: 7 （动作维度：x, y, 朝向, 油门, 刹车 \u0026hellip; 共 7 维） action_config.num_hidden_layers: 2 （动作专家只有 2 层！） action_config.hidden_size: 4096 action_config.vision_loss_weight: 5.0 （世界模型视觉损失权重，远大于动作） 大白话：主干是个 32 层的 4K 隐维度大模型（约 8B），而动作专家只有 2 层——这就是「500M 动作专家」的来源。配置里 vision_loss_weight=5.0 说明训练时世界模型监督的权重被刻意放大，呼应论文「alpha=0.1 最优、世界损失不宜过高」的折线（本文用 5.0 是另一组设定，但思想一致：让世界损失足够大以逼出表征，又不淹没动作）。\n二、动作 tokenizer：连续轨迹怎么变成 token VLA 把驾驶当语言建模，所以连续轨迹必须先「变成文字」。代码在 models/tokenizer/action_tokenizer.py，改自 OpenVLA：\nclass ActionTokenizer: def __init__(self, tokenizer, bins=256, min_action=-1, max_action=1): self.bins = np.linspace(min_action, max_action, bins) self.bin_centers = (self.bins[:-1] + self.bins[1:]) / 2.0 self.last_vocab_idx = self.tokenizer.pad_token_id - 1 self.action_token_begin_idx = self.last_vocab_idx - (bins + 1) bins=256：每个连续动作维度被均匀切成 256 个区间。 np.linspace(-1, 1, 256)：区间端点从 -1 到 1。 action_token_begin_idx：动作 token 只占词表最后 256 个位置（复用最少用的 token）。 编码（连续 → token id）：\ndef __call__(self, action): action = np.clip(action, self.min_action, self.max_action) discretized = np.digitize(action, self.bins) return list(self.last_vocab_idx - discretized) 大白话：把一条轨迹的每一个数（比如「横向偏移 0.3」）先夹到 [-1,1]，再看它落在 256 个箱子的第几格，映射成词表末尾对应的一个 token id。反向 decode_token_ids_to_actions 则用 bin_centers 把 token 还原成连续值。这样，「自回归预测动作」就等价于「预测一串 token」，和普通 LLM 生成文字一模一样——这就是 AR 解码器能直接复用 VLM 的原因。\n注意：action_dim=7 意味着每个时刻的动作是 7 维；而 NAVSIM 评测只关心轨迹（通常 x/y/theta）。tokenizer 把整段动作都离散化了，训练时模型学的是「7 维动作序列」，推理后再按需要取轨迹部分。\n三、MoE 动作专家：DiT 风格的积木 models/policy_head/moe_experts.py 定义了一套 DiT（扩散 Transformer）风格的网络 Emu3Experts，它是动作专家与世界模型共用的 backbone 积木。我们挑最关键的几块讲。\n3.1 TimestepEmbedder：把时间步变成向量 Flow Matching / 扩散都要让网络知道「现在是第几步加噪」，用正弦位置编码 + MLP：\nclass TimestepEmbedder(nn.Module): def timestep_embedding(self, t, dim, max_period=10000): half = dim // 2 freqs = torch.exp(-math.log(max_period) * torch.arange(0, half) / half) args = t[:, None] * freqs[None] return torch.cat([torch.cos(args), torch.sin(args)], dim=-1) 大白话：时间步 t（一个标量）经过「cos/sin 编码」变成一串和隐维度同长的向量，告诉网络「现在是噪声程度 tau 的时刻」。这和 Transformer 的位置编码同源。\n3.2 ActionProjector：把噪声动作投影进隐空间 class ActionProjector(nn.Module): def forward(self, x, tau): out1 = self.W1(x) out2 = self.W2(torch.cat([out1, tau], dim=-1)) return self.W3(out2) x：patchify 后的噪声动作/图像块，形状 [B, L, d]。 tau：时间步嵌入，拼到动作特征后面一起过 MLP。 输出仍是 [B, L, dim]，作为 Transformer 的输入。 大白话：动作（或图像块）先过一层线性，再和时间步嵌入拼接过一层线性，最终投到模型隐维度。这一步把「动作」和「现在噪声到啥程度」两件事绑在一起送进网络。\n3.3 adaLN 调制：让每层随时间步变形 TransformerBlock 里用 adaLN（adaptive LayerNorm）代替普通 LN：\nshift_msa, scale_msa, gate_msa, shift_mlp, scale_mlp, gate_mlp = \\ self.adaLN_modulation(adaln_input).chunk(6, dim=1) x = x + gate_msa * self.attention(modulate(self.attention_norm(x), shift_msa, scale_msa), freqs_cis) x = x + gate_mlp * self.feed_forward(modulate(self.ffn_norm(x), shift_mlp, scale_mlp)) 其中 modulate(x, shift, scale) = x * (1 + scale) + shift。adaln_input = t + y（时间步嵌入 + 类别嵌入）。\n大白话：普通 Transformer 每层归一化是固定的；adaLN 让「时间步 t」通过一个 MLP 生成 6 个参数（shift/scale/gate 各一对），动态决定这一层怎么缩放、平移、以及残差门控多大。这样同一个网络在不同噪声程度 tau 下行为不同——这是 DiT 能「按噪声程度去噪」的关键机制。动作专家与世界模型都用这套积木。\n3.4 前向：patchify → 投影 → 拼时间步 → 过 N 层 → unpatchify def forward(self, x, t, y): x = self.patchify(x) t = self.t_embedder(t) y = self.y_embedder(y, self.training) adaln_input = (t + y).unsqueeze(1).repeat(1, x.size(1), 1) x = self.input_proj(x, adaln_input) x = torch.cat([x, adaln_input.unsqueeze(1)], dim=1) for layer in self.layers: x = layer(x)[0] x = x[:, 1:, :] x = self.final_layer(x, adaln_input) return self.unpatchify(x) patchify：把 [B, C, H, W] 的图像/动作图切成小块序列（世界模型分支处理的是「未来帧图像」，所以这里 x 是图）。 拼上 adaln_input 作为一个额外的 token（类 DiT 的 global token）。 过若干 Emu3DecoderLayer（来自外部 Emu3 库，本仓库只调用）。 final_layer 用 adaLN 输出最终的「去噪后 / 生成后」小块，再 unpatchify 还原成图像。 大白话（世界模型分支视角）：把「未来帧该长啥样」拆成小块，加噪声后送进这个 DiT，网络预测「该往哪修」，迭代后还原出清晰未来帧。这就是论文里 AR/Diffusion 世界模型的「网络主体」。注意：论文里 AR 世界模型预测的是离散 VQ token（配合 emu3_tokenizer_navsim.py 的编码），Diffusion 世界模型预测的是连续潜表示——两者共用 Emu3Experts 这套积木，区别在预测目标与损失。\n四、Flow Matching 解码器：动作怎么从噪声「流」出来 这是 DriveVLA-W0 三种解码器之一（论文里它在大数据下 PDMS 91.3，是连续方法里最好的）。代码分两层：flow_matching.py（封装）与 diffusion_policy.py（PolicyHead 具体实现）。\n4.1 加噪调度：FlowMatchingScheduler class FlowMatchingScheduler: def add_noise(self, original_samples, noise, timesteps): while len(timesteps.shape) \u0026lt; len(noise.shape): timesteps = timesteps.unsqueeze(-1) timesteps = timesteps.expand_as(noise) return (1 - timesteps) * original_samples + timesteps * noise 大白话：Flow Matching 用直线概率路径——在 tau 时刻，样本 = (1-tau)·真实动作 + tau·噪声。tau=0 是真实动作，tau=1 是纯噪声。这比扩散的「逐步加噪」简单：一步线性插值就完事。sample_method=\u0026quot;beta\u0026quot; 时用 Beta(1.5, 1.0) 分布采样 tau，让训练更关注「接近真实动作」的低噪声区间（对应推理时真正会走到的区域）。\n4.2 训练目标：预测向量场 flow_matching.py 的 forward：\ndef forward(self, x, cond): t = self.sample_t(b) texp = t.view(b, *([1] * (x.dim() - 1))) z1 = torch.randn_like(x) zt = (1 - texp) * x + texp * z1 vtheta = self.model(zt, t, cond) batchwise_mse = ((z1 - x - vtheta) ** 2).mean(dim=tuple(range(1, x.dim()))) return batchwise_mse.mean(), ttloss 大白话：随机采一个 tau，把真实动作 x 和噪声 z1 按 (1-tau)x + tau z1 混成带噪样本 zt；网络 self.model（即 Emu3Experts 或 PolicyHead）预测向量场 vtheta；目标是让 vtheta ≈ z1 - x（即「从噪声指向真实动作的方向」）。损失就是预测向量场与真值向量场的 MSE。这正是论文里的：\n$$ \\mathcal{L}_{\\text{FM}} = \\mathbb{E}_{t, x_0, x_1}\\left[\\|v_\\theta(\\psi_t(x), t, c) - (x_1 - x_0)\\|^2\\right] $$4.3 PolicyHead：噪声动作编码 + 轨迹解码 diffusion_policy.py 把 Flow Matching 接到动作上：\nclass PolicyHead(nn.Module): def __init__(self, action_dim, embedding_dim, width, noise_scheduler): self.encoder = Emu3ActionEncoder(action_dim, embedding_dim, width) self.decoder = MultiLayerAttentionDecoder(embedding_dim, action_dim, num_heads=4, hidden_dim=128, num_layers=1) self.noise_scheduler = noise_scheduler def forward_loss(self, action_sequence, noise, tau): noisy = self.noise_scheduler.add_noise(action_sequence, noise, tau) emb = self.encoder(noisy, tau) vel_pred = self.decoder(emb) target = action_sequence - noise loss = F.mse_loss(vel_pred, target) return {\u0026#34;loss\u0026#34;: loss} Emu3ActionEncoder：把 [B, T, 7] 的噪声动作 + 时间步 tau（用正弦位置编码 + RoPE 序列位置）编码成隐式表征。 MultiLayerAttentionDecoder：一层多头注意力 + MLP，把表征解码回 [B, T, 7] 的动作（预测向量场）。 target = action_sequence - noise：即 Flow Matching 的真值向量场 (x1 - x0)。 大白话：动作头和世界模型共享「Flow Matching 训练套路」，但动作头处理的是 7 维动作序列（不是图像），输出也是动作序列。训练时只优化这个轻量 head + 动作专家，主干（理解专家）提供条件特征 cond/c。\n4.4 推理采样：沿 ODE 把噪声「流」成轨迹 flow_matching.py 的 sample：\n@torch.no_grad() def sample(self, z, cond, null_cond=None, sample_steps=50, cfg=2.0): dt = 1.0 / sample_steps images = [z] for i in range(sample_steps, 0, -1): t = i / sample_steps vc = self.model(z, t, cond) if null_cond is not None: vu = self.model(z, t, null_cond) vc = vu + cfg * (vc - vu) z = z - dt * vc images.append(z) return images 大白话：从纯噪声 z 出发（tau=1），按 z = z - dt · vθ(z, t, cond) 一步步「往真实动作方向流」，跑 sample_steps（默认 50，论文推理可用更少）步到 tau=0，得到最终轨迹。若给 null_cond 做 classifier-free guidance（cfg），则 vc = vu + cfg·(vc - vu) 放大条件信号。对比 DiffusionDrive 的 2 步 DDIM，这里步数更多（因从纯噪声出发），但胜在路径是直线、训练目标简单。\n五、前向传播：一张图到一条轨迹（Flow Matching + Emu3 主线） 把上面所有模块串成一次前向（推理视角，世界模型旁路）。输入是 NAVSIM 的前视图像 + 指令 + 历史动作，输出是 [B, T, 7] 动作。下面用「纯英文代码块 + 块外中文解说」串步骤（代码块内零中文，避免对齐错位）。\ninference_action_navsim_flow_matching_vava.py load_scene(token) → img = [1, 3, 256, 144] (front cam) build_vla_sequence(img, instruction, past_actions) seq = [L, V, A, ..., L, V, A] (interleaved, 2VA in stage2) Emu3MoE.forward(seq) (understanding expert, frozen in stage2) hidden = [1, N_tokens, 4096] ActionExpert.joint_attention(hidden, action_queries) (500M MoE) cond = [1, N_act, 4096] z = randn([1, T, 7]) (noise init) for step in range(sample_steps): v = PolicyHead(z, t, cond); z = z - dt * v traj = z[..., :3] (take x, y, theta) output = [1, T, 3] 逐步中文含义：\nload_scene：从 NAVSIM pickle 取一个场景的前视相机图（256×144，单目前视！）。 build_vla_sequence：把语言指令 L、图像 V、历史动作 A 沿时间深度交错拼成 [L, V, A, ...] 序列。阶段 2 用 2VA（当前 + 前一帧）以降延迟。 Emu3MoE.forward（理解专家）：Emu3-8B 主干自回归编码整段序列，输出统一的条件特征 hidden。阶段 2 主干冻结。 ActionExpert.joint_attention：500M 动作专家通过 Joint Attention 与主干特征耦合，得到动作相关的条件 cond。这一步是 MoE 的精髓——小专家借用大表征。 z = randn：动作从纯噪声初始化（Flow Matching 起点）。 循环采样：每一步 PolicyHead 预测向量场 v，z = z - dt·v 向真实动作流动；跑 sample_steps 步。 traj = z[..., :3]：取前 3 维（x, y, theta）作为最终轨迹，形状 [1, T, 3] 交给 NAVSIM 评测。 注意：论文里动作是 7 维（action_dim=7），评测轨迹只取其中 x/y/theta 部分。其余维度（如油门刹车）在闭环仿真里可被 PDMS 用，但 NAVSIM 评测主要看轨迹几何。\n六、训练：两阶段范式与目标函数 仓库只给了 Training.md 说明 + 上述模块，两阶段逻辑清晰：\n阶段 输入序列 监督目标 可训练模块 作用 阶段1 世界预训练 长序列 6VA（12帧） L_action + alpha·L_WM VLM 主干 + 世界模型 + 动作头 稠密信号喂出世界表征 阶段2 动作专精 短序列 2VA（4帧） L_action 仅 Action Expert + 解码器 瘦身，实时出轨迹 阶段 1 总目标（来自论文，与代码 vision_loss_weight 呼应）：\n$$ \\mathcal{L}_{\\text{阶段1}} = \\underbrace{\\| \\hat{a}_t - a_t^* \\|_2}_{\\text{动作模仿}} + \\alpha \\cdot \\underbrace{\\mathcal{L}_{\\text{WM}}(\\hat{I}_{t+1}, I_{t+1})}_{\\text{世界建模}} $$ 动作部分：PolicyHead.forward_loss 的 MSE（Flow Matching）或 focal+CE（AR 解码器）。 世界模型部分：AR 分支用交叉熵预测下一帧 VQ token（emu3_tokenizer_navsim.py 预编码好的码本）；Diffusion 分支用 MSE 预测下一帧潜表示。两者都提供每像素/每 token 的稠密监督。 阶段 2 冻结主干，只训动作专家 + 解码器，输入缩到 2VA。延迟从 117.8ms 降到 74.3ms，PDMS 反而 85.6→88.4——说明阶段 1 学到的世界表征已蒸馏进主干权重，去掉世界分支后仍在。\n梯度流小结：阶段 1 主干 + 世界模型 + 动作头全可训；阶段 2 仅动作专家/解码器可训，主干与世界模型冻结（或移除）。世界模型分支只在训练时存在，推理时被完全旁路——这是它「不拖慢决策」的关键。\n训练/推理差异表：\n环节 训练 推理 世界模型分支 参与，提供稠密监督 旁路（不计算） 序列长度 6VA（阶段1）/ 2VA（阶段2） 2VA 动作解码 Flow Matching MSE / AR CE / Query L1 同，但只走动作通路 采样步数 不需要迭代（直接监督） Flow Matching 默认 50 步 ODE 主干状态 阶段1 可训，阶段2 冻结 冻结 七、自己跑起来（最小实操） 仓库 README 给了 5 分钟示例，下面是整理后的最小路径：\n装环境： conda create -n drivevla python=3.10 conda activate drivevla pip install -r requirements.txt pip install \u0026#34;transformers[torch]\u0026#34; pip install deepspeed tensorboard wandb 下权重：从 HuggingFace liyingyan/DriveVLA-W0 下载 Emu3 预训练主干与 Emu3_Flow_Matching_Action_Expert_PDMS_87.2 等检查点，以及 NAVSIM 的 navsim_emu_vla_256_144_test_pre_1s.pkl。\n推理（Flow Matching 版，单前视相机）：\nbash inference/vla/infer_navsim_flow_matching_PDMS_87.2.sh 脚本内部调用 inference/vla/inference_action_navsim_flow_matching_vava.py，用 torchrun --nproc_per_node=8 跑，输出 JSON 动作。\n算 PDMS： bash inference/vla/eval_navsim_metric_from_json.sh 需要配套 NAVSIM v1.1 仓库环境。\n训练：参考 Training.md（两阶段，8×L20 约 16 小时）。 新手最常踩的 3 个坑：\n主干路径硬编码：不少脚本里 sys.path.append(\u0026quot;/share/project/.../Emu3\u0026quot;) 和模型路径是作者内网绝对路径，必须改成自己的 EMU_HUB 等环境变量（脚本已用 ${EMU_HUB:-...} 留了覆盖口）。 VQ 码未生成：世界模型 AR 分支依赖 emu3_tokenizer_navsim.py 提前把图像压成 VQ 码（.npy）；漏了这步直接报文件缺失。 归一化统计不匹配：动作 token 化与轨迹反归一化依赖 configs/normalizer_navsim_trainval/norm_stats.json，换数据集要重新算，否则轨迹尺度会崩。 闭环总结 阶段 入口 关键代码 训练/推理差异 动作表示 action_tokenizer.py FAST 离散化（256 bin） 编码/解码对称 动作生成 diffusion_policy.py PolicyHead Flow Matching MSE 向量场 训练直接监督，推理 ODE 采样 专家耦合 moe_experts.py Emu3Experts adaLN + Joint Attention 积木 主干阶段2冻结 世界监督 emu3_tokenizer_navsim.py + Emu3Experts AR 预测 VQ / Diffusion 预测潜表示 仅训练，推理旁路 配置 moe_fast_video.json 主干32层 / 动作专家2层 / action_dim=7 超参集中 一句话记住这个闭环：连续动作经 FAST tokenizer 离散化、又经 Flow Matching 从噪声「流」出；500M 动作专家通过 MoE 借用 8B 主干表征；训练时世界模型用「预测未来帧」的稠密监督逼主干学懂动力学，推理时世界模型整支旁路，只留轻量动作通路——这就是 DriveVLA-W0「单目打穿多传感器」的秘密。\n个人理解与思考 1. 仓库边界本身是个重要信号。 开源的只有「动作头 + tokenizer + 推理壳」，真正的大模型主干是外部库。这说明 DriveVLA-W0 的工程贡献重心在「如何给 VLA 接上世界模型监督」这一层，而非从零训一个大模型。对想复现的人，重点是搞懂 PolicyHead / MoE / Flow Matching 这层的接口，主干直接复用 Emu3/Qwen2.5-VL。这和 DiffusionDrive（把整套塞进 navsim 插件）的「全栈自研」风格截然不同——也提醒我们：读论文代码时先问「哪层是作者写的」，能少走很多弯路。\n2. Flow Matching 比扩散更适合「动作」这类低维连续量。 看 noise_schedulers.py 与 flow_matching.py，Flow Matching 用一条直线路径 (1-tau)x + tau·noise 加噪，训练目标就是预测「指向真实动作的方向」(x1 - x0)。没有扩散那套复杂的噪声调度与多步去噪。动作是 7 维小向量，直线流足够；而对图像（世界模型分支）才需要 DiT 的多层去噪。这印证了论文「解码器优劣是数据规模的函数」之外的另一条规律：任务维度决定生成范式——低维用 Flow Matching 简洁高效，高维用扩散/AR 表达力强。\n3. adaLN + Joint Attention 是「小专家撬大主干」的精巧设计。 Emu3Experts 用 adaLN 让每层随时间步变形，moe_experts.py 与配置里「动作专家仅 2 层」则说明：动作专家不靠深度，而靠「和主干做联合注意力」借表征。这比把整个 8B 搬进控制回路省了 37% 延迟（117.8→74.3ms）。作为 VLA 方向工程师，我认为这种「重主干 + 轻动作头」的 MoE 是车端实时部署的现实路线——理解交给大模型（可离线/可慢），动作交给小专家（必须快）。\n4. 世界模型「仅训练时存在」是个聪明的工程取舍，但有隐患。 它让推理零额外开销，却也意味着：世界模型学到的「动力学理解」必须完全蒸馏进主干权重才能惠及推理。阶段 2 去掉世界分支后 PDMS 反而涨，证明蒸馏成功；但一旦换数据分布，主干里「世界理解」的泛化能否撑住，取决于阶段 1 监督的稠密程度。我倾向于认为，未来更稳的做法是「轻量 latent 世界模型常驻」（如 Waymo 方向），而非彻底旁路——毕竟完全旁路会让推理时的「预见性」归零，只剩阶段 1 蒸馏的静态记忆。\n5. 一个延伸想法：动作 tokenizer 的 256 bin 会不会是瓶颈？ action_tokenizer.py 把每维切成 256 箱，quantization 误差约 2-3%。论文里 AR 解码器在小数据下受此拖累（PDMS 84.1），大数据下才靠上下文补偿回来。更值得玩味的是：论文发现「解码器优劣是数据规模的函数」——小数据下连续回归（Query/flow）赢，大数据下 AR 反超。这其实和 tokenizer 误差被数据稀释是同一回事。对从业者的启示是：选解码器前，先问自己处在数据曲线的哪个位置。一个 7B 团队若只有 10 万帧，上 AR 是自讨苦吃；有 7000 万帧，AR 才是上限所在。\n延伸阅读 同系列对比：DiffusionDrive 代码讲解——另一条「anchor + 截断扩散」路线 论文背景：DriveVLA-W0 论文精读——世界模型如何放大数据缩放律 榜单对照：NAVSIM 排行榜深度分析 ","permalink":"https://auto-driving-blog.pages.dev/posts/code/drivevla-w0%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"逐行拆解 BraveGroup/DriveVLA-W0 的已开源代码，面向零基础读者：先讲清 VLA、世界模型、MoE、Flow Matching、FAST tokenizer 等黑话，再厘清仓库边界（只开源了 policy_head 与 tokenizer，VLM 主干在外部库），然后逐文件拆解 MoE 动作专家、Flow Matching 解码器、扩散策略头、动作 tokenizer 与世界模型 VQ 编码器，最后把一次前向从图像到轨迹串成 7 步、讲透两阶段训练与推理旁路世界模型的设计。一篇把代码边界到数据流到关键模块到训练梯度到推理选轨迹到个人思考全部讲明白的极详细工程向代码讲解。","title":"代码讲解：DriveVLA-W0 世界模型如何给 VLA 大模型补上稠密监督"},{"content":"写给零基础读者：读这篇之前先搞懂几个名词 在看代码之前，先把几个反复出现的「黑话」翻译成人话，后面就不会晕了：\n端到端自动驾驶（End-to-End Driving）：传统自动驾驶是把「看路 → 识别车/人 → 预测 → 规划路线 → 控制方向盘」拆成很多个小模块分别写程序。端到端的意思是「给一张相机拍的画面，直接从画面算出车该怎么开（往哪走、开多快）」，中间不需要人手写一堆规则。SparseDriveV2 就是一个端到端模型。 轨迹（Trajectory）：车在未来几秒内要走的路线，通常表示成未来若干个时刻车的「位置 + 朝向」。比如论文里用 8 个时刻（pose），每个时刻记成 (x, y, θ) 三个数——x/y 是平面坐标，θ 是车头朝向角度。一串 (x, y, θ) 连起来就是一条轨迹。 anchor / 词汇表（Vocabulary）：可以理解成「提前准备好的一张标准动作菜单」。比如「左转」「右转」「直行」「加速」「减速」这些基本动作。模型不是现场发明动作，而是从这张菜单里挑一个最合适的。菜单里的每一项就叫一个 anchor（锚点），整张菜单就叫词汇表。 检索式规划（Retrieval-based Planning）：不自己「创造」新轨迹，而是从一张现成的、巨大的候选轨迹菜单里「翻」出最好的一条。就像你点外卖不是自己下厨，而是从商家菜单里选。SparseDriveV2 就是这种思路，它和「生成式」相对。 生成式规划（Generative Planning）：相反，模型自己「画」出一条可能菜单里根本没有的新轨迹，比如 DiffusionDrive 用扩散模型一步步「画」出轨迹。 cross-attention（交叉注意力）：深度学习里一种「让一组查询去另一组内容里找信息」的机制。通俗讲：模型拿着「候选动作」这一组问题，去「相机图像」这一组答案里，找跟每个动作最相关的图像区域特征。SparseDriveV2 用 deformable attention（可变形注意力）让候选轨迹去图像上按相机内外参采样特征。 top-k 筛选：从一堆分数里只保留分数最高的 k 个，其余丢掉。比如从 1024 条路径里只留分数最高的 64 条。 PDM 仿真器（PDM Simulator）：NAVSIM 这个评测榜单自带的「虚拟考官」。给它一条轨迹和当前场景，它会模拟车按这条轨迹开下去会不会撞车、有没有压线、有没有按车道方向开、进度好不好，并给出一个 0~1 的综合分数（叫 PDMS）。SparseDriveV2 训练时就把这个「考官」当老师，学它的打分逻辑。 waypoint（航点）：轨迹上一个个具体的「路点」，就是上面说的每个时刻的 (x, y, θ)。8 个 waypoint 串起来就是一条 8 点轨迹。 冻结（frozen / requires_grad=False）：意思是这部分参数在训练时「锁死」，不参与梯度更新，永远不变。SparseDriveV2 的 26 万条词汇表就是冻结的。 KMeans 聚类：一种把一堆数据自动分成若干类的算法。比如把训练集里成千上万条真实轨迹的「形状」自动归成 1024 类代表形状。它只是个离线统计工具，不涉及神经网络训练。 为什么要讲 SparseDriveV2 的代码 SparseDriveV2（swc-17）是 NAVSIM 排行榜上 Scoring-based（基于打分）路线的代表之一（navtest 官方榜 92.0 PDMS）。它和 DiffusionDrive 思路完全不同：不扩散、不生成，而是预先建一个巨大的「轨迹词汇表」，再学一个打分器挑最好的。它的核心创新是因子化轨迹词汇表（path × velocity）和两级评分（coarse-to-fine，粗到细）。这篇直接看真实源码，把每一步都拆碎了讲。\n一句话结论：SparseDriveV2 = 冻结的 path(1024) × velocity(256) 组合词汇表（26 万条轨迹）+ 两级评分（先按 path/vel 粗筛到 200 条，再用 PDM 蒸馏的 metric head 精排 argmax）。它把「规划」变成了一个「从超大离散候选集里检索最优」的问题。\n架构总览：先看地图 SparseDriveV2 是纯规划（planning-only）模型，没有检测 head（不负责识别车/行人）。它的推理链路极短：图像过轻量 backbone（特征提取网络）→ 特征送两层 transformer decoder 当「打分器」→ 在一个预先冻结的 26 万条轨迹字典上打分 → 两级筛选后取最优。下面这张图（SparseDrive 系列论文原图）概括了整体范式：\n为了把「代码里数据怎么流」讲清楚，我自己画了一张数据流图，把论文图和真实源码对应起来：\n关键认知：模型本身不生成轨迹，只给一个固定的候选集打分。这与 DiffusionDrive（生成轨迹）形成镜像——SparseDriveV2 把「规划」彻底退化成了一个「检索+排序」问题。这也是它推理极快、且天然契合 NAVSIM 评分逻辑的原因。\n项目结构：它如何挂在 navsim 上（先厘清边界） 先泼一盆冷水，把最容易看晕的地方讲透：SparseDriveV2 确实 fork 了 autonomousvision/navsim，但这「fork」里只改了 navsim/agents/sparsedrive/ 这一个角落。其他所有东西——训练入口、评测入口、数据缓存、PDM 打分器——全部是 navsim 原装的，一行没动。作者自己写的代码就那一小块「插件」，通过 navsim 的 Agent 插件机制挂进去。\n还有一个绝对不要混淆的点：离线构建词表的脚本 scripts/cluster/cluster_anchor.py 不在 navsim/ 目录下，也不在 sparsedrive/ 子目录里，它是仓库根目录下的独立工具，跑一次就产出 .npz 词表文件，之后训练/推理都只加载这个文件、再也不碰脚本。下面把「仓库里到底有哪些东西、各归谁管」切成两块看。\n区块 A：fork 自 navsim 的官方管线（作者基本没动，直接复用）\nnavsim/ agents/ sparsedrive/ sparsedrive_agent.py sparsedrive_model.py sparsedrive_backbone.py custom_decoder.py scorer/ get_pdm_score_v2.py planning/script/run_training.py 区块 B：仓库根目录下的作者自有工具（与 navsim/ 平级）\nscripts/ cluster/ cluster_anchor.py training/ sparsedrive_navsimv1.sh 逐文件一句话说明它干嘛：\nsparsedrive_agent.py：Agent 插件入口，继承 AbstractAgent。navsim 评测时对每个场景调 compute_trajectory(agent_input)，它负责把输入整理好送进模型、再把模型输出包成 navsim 要求的格式。相当于「对外接口」。 sparsedrive_model.py：真正的模型类 SparseDriveModel，里面定义 backbone、ego 状态编码、加载冻结的 path/velocity/trajectory 词汇表，并把它们组装成一次 forward。相当于「主机箱」。 sparsedrive_backbone.py：图像特征提取器 SparseBackbone，用 ResNet-34 + FPN 把三相机图像变成多尺度特征图。相当于「眼睛」。 custom_decoder.py：最核心的 CustomTransformerDecoder，实现两级评分、path⊕vel 组合、训练时的损失计算。相当于「大脑里的打分员」。 scorer/get_pdm_score_v2.py：封装 navsim 的 PDM 仿真器，给一条轨迹算 PDMS 各项分数，训练时当「老师」提供监督标签。 scripts/cluster/cluster_anchor.py：离线工具，对训练集轨迹做 KMeans 聚类生成 path/velocity/trajectory 词表 .npz（跑一次即可，不参与训练主链路）。 scripts/training/sparsedrive_navsimv1.sh：只是个调官方 run_training.py 的启动脚本，内部用 Hydra 指定 agent=sparsedrive_agent。 一句话澄清挂载关系（训练时）：你执行 scripts/training/sparsedrive_navsimv1.sh → 它内部调官方的 run_training.py → 通过 Hydra 配置 agent=sparsedrive_agent → 实例化 SparseDriveAgent（作者插件）→ agent 内部建 SparseDriveModel + CustomTransformerDecoder。词表由区块 B 的离线脚本提前生成好、以 .npz 加载，所以训练主链路里根本不存在 scripts/cluster/ 这个目录。\n一句话澄清挂载关系（推理时）：navsim 的评测脚本对每个场景调 agent.compute_trajectory(agent_input) → SparseDriveAgent 把输入送进 SparseDriveModel → 在冻结词表上打分、两级筛选、argmax。全程不依赖任何「生成」，只做「检索+排序」。\nAgent 定义：navsim/agents/sparsedrive/sparsedrive_agent.py:22 class SparseDriveAgent(AbstractAgent)。\n一、架构：因子化轨迹词汇表 1.1 它不是「instance query 做检测+规划」 注意一个常见误解：原版 SparseDrive 用 instance query 同时做检测和规划；SparseDriveV2 是纯规划（planning-only）——查询是静态的轨迹词汇表（path × velocity 候选），没有检测 head。模型入口：\nclass SparseDriveModel: self._backbone = SparseBackbone(config) self._status_encoding = nn.Linear(4 + 2 + 2, config.d_model) self._trajectory_head = TrajectoryHead( num_poses=config.trajectory_sampling.num_poses, d_ffn=config.d_ffn, d_model=config.d_model, config=config) TrajectoryHead 加载冻结的 path/velocity/trajectory 词汇表（requires_grad=False），作为 query 送入 CustomTransformerDecoder。这里要记住：模型查表得到的「轨迹嵌入」是固定的，模型只是拿它们当问题去图像里找答案，并不会改这些轨迹本身。\n1.2 词汇表构建（离线 KMeans）：这是 26 万条的来源 这一节回答「那 26 万条轨迹到底哪来的」。答案：离线预聚类，不是模型学的。\n什么叫「因子化（factorized）」？一句话：把一条完整轨迹拆成两个相互独立的部分——往哪走（path，几何路径） 和 开多快（velocity，速度剖面）。单独对这两部分各聚一类，再两两组合，就能用很少的聚类中心覆盖极多的动作。\npath 候选：对训练集所有轨迹的「形状」（忽略速度，只看几何路径）做 KMeans，K_PATH = 1024； velocity 候选：对所有轨迹的「速度剖面」做 KMeans，K_VELOCITY = 256； path_cluster = KMeans(n_clusters=K_PATH).fit(paths_flatten).cluster_centers_ path_cluster = path_cluster.reshape(K_PATH, num_pts, 3) velocity_cluster = KMeans(n_clusters=K_VELOCITY).fit(velocities).cluster_centers_ 组合：遍历 i in K_PATH × j in K_VELOCITY，把第 j 个速度剖面沿第 i 条路径的弧长积分插值，得到 (1024, 256, 8, 3) 的轨迹张量（8 个 pose，每个 x/y/θ）：\ntrajectory = np.zeros((K_PATH, K_VELOCITY, num_velocity, 3)) trajectory_mask = np.ones((K_PATH, K_VELOCITY, num_velocity)) np.savez(f\u0026#34;{CKPT_DIR}/trajectory_{K_PATH}_{K_VELOCITY}.npz\u0026#34;, trajectory=trajectory, trajectory_mask=trajectory_mask) Vocab 大小 = 1024 × 256 = 262,144 条组合轨迹（README 所谓「32× denser」，是相对于 Hydra-MDP 的 8K 词表）。运行时加载：\nself.path_vocab = nn.Parameter(torch.from_numpy(np.load(config.path_anchor)).float(), requires_grad=False) self.vel_vocab = nn.Parameter(torch.from_numpy(np.load(config.velocity_anchor)).float(), requires_grad=False) trajectory_data = np.load(config.trajectory_anchor) self.traj_vocab = nn.Parameter(torch.from_numpy(trajectory_data[\u0026#34;trajectory\u0026#34;]).float(), requires_grad=False) self.traj_mask = nn.Parameter(torch.from_numpy(trajectory_data[\u0026#34;trajectory_mask\u0026#34;]).float(), requires_grad=False) 为什么因子化？ 直接枚举 26 万条完整轨迹当固定 query 太浪费参数；拆成 path(往哪走) × velocity(多快走) 两个因子，组合时只需把两个嵌入相加即可指数级覆盖动作空间，vocab 尺寸只是两者之和。这是「在动作空间结构上做归纳偏置」。\n补充一点数学直觉：如果不因子化，要覆盖 26 万种动作就得存 26 万个向量；因子化后只存 1024 + 256 = 1280 个向量，组合时相乘得到 26 万。参数量从 $O(262144)$ 降到 $O(1024+256)$。代价是假设「路径」和「速度」可以独立拆分——对正常驾驶基本成立，对极端场景可能略有偏差，但工程上极其划算。\n1.3 两级评分（Two-Level Scoring）：26 万 → 200 → 1 实现于 custom_decoder.py 的 CustomTransformerDecoderLayer。这一节是全文核心。\n第一级（粗粒度，因子化）：在 decoder 的每一层，分别对 path 与 velocity 打分，各自 top-k 后同步过滤组合词汇表。比如第 0 层保留 64 条 path、第 1 层保留 20 条 velocity（配置 path_filter_num=[64, 20]、velocity_filter_num=[64, 20]）：\ntopk_path_scores, topk_path_indices = torch.topk(path_scores, self._config.path_filter_num[self.decoder_idx], dim=1) filter_traj_vocab = torch.gather(filter_traj_vocab, 1, topk_path_indices[:, :, None, None, None].expand(...)) topk_vel_scores, topk_vel_indices = torch.topk(vel_scores, self._config.velocity_filter_num[self.decoder_idx], dim=1) filter_traj_vocab = torch.gather(filter_traj_vocab, 2, topk_vel_indices[:, :, :, None, None].expand(...)) 经过两层粗筛，组合候选从 26 万压到 64 × 20 = 1280（或接近 200，取决于配置）条。\n组合在 decoder 中的实现（最后一层）：path 嵌入 ⊕ velocity 嵌入逐元素相加，展平成组合轨迹 query：\ntraj_emed = filter_path_embed.unsqueeze(2) + filter_vel_embed.unsqueeze(1) traj_emed = traj_emed.flatten(1, 2) 这里 ⊕ 就是逐元素相加（广播加法）。filter_path_embed 形状是 [B, 64, d]，unsqueeze(2) 后变成 [B, 64, 1, d]；filter_vel_embed 形状是 [B, 20, d]，unsqueeze(1) 后变成 [B, 1, 20, d]；两者相加会广播成 [B, 64, 20, d]，再 flatten(1,2) 展平成 [B, 1280, d]。这就是「加法组合」——把每条路径和每种速度配对，得到 1280 条组合轨迹的嵌入。注意这只是嵌入层面的组合，对应的真实轨迹坐标由冻结的 filter_traj_vocab 同步筛选得到（见下文前向传播第 ⑦ 步）。\n第二级（细粒度，组合）：仅最后一层，对粗筛后的组合轨迹用多个 metric head 打分（每个 PDMS 指标一个 head）：\nif self.decoder_idx == self.decoder_num_layers - 1: traj_scores = self.traj_mlp(...) 1.4 主干与多视角图像 Backbone 是 ResNet-34（timm）+ FPN，注意未复用原 SparseDrive 的 Swin 编码器，这里是轻量 ResNet-34。多视角默认 cam_l0/cam_f0/cam_r0 三路（左、前、右三个相机），forward 时压平送 backbone 再 reshape 回相机维度，供 deformable attention 按内外参采样：\nimg = img.flatten(end_dim=1) feat = self.backbone(img) feat = feat.reshape(B, N_cam, C, h, w) 什么叫 deformable attention（可变形注意力）？ 通俗讲：普通注意力让每个查询去看图像的所有像素，计算量巨大；可变形注意力让每个查询只去「它最该看的那几个位置」采样（位置由相机内外参和当前查询推测），省算力又贴合几何。SparseDriveV2 让候选轨迹嵌入作为查询，去三相机特征图上「按相机参数找对应的图像区域」，从而知道「这条路前面有没有车/路口」。\n二、前向传播：一张图对应的代码路径（重点） 把上面所有模块串成一次 forward。输入是 navsim 的 AgentInput，输出是 (B, 8, 3) 的轨迹（8 个 pose）。下面用一段纯英文的 python 代码块把推理时的 forward 串起来（保留语法高亮），每一步的中文含义紧跟在代码块下方的列表里对照看：\ncompute_trajectory(agent_input) build_features(agent_input) img = [B, 3, H, W] ego = [B, 8] SparseDriveModel.forward(features) img_feat = SparseBackbone(img) img_feat = [B, N_cam, C, h, w] status_emb = status_encoding(ego) status_emb = [B, d_model] path_embed = traj_vocab_lookup(\u0026#34;path\u0026#34;) path_embed = [B, 1024, d] vel_embed = traj_vocab_lookup(\u0026#34;vel\u0026#34;) vel_embed = [B, 256, d] CustomTransformerDecoder(path_embed, vel_embed, img_feat, status_emb) layer0: path_scores = score(path_embed) path_embed = top_k(path_embed, 64) vel_scores = score(vel_embed) vel_embed = top_k(vel_embed, 20) candidates = 64 x 20 = 1280 layer1: path_embed = top_k(path_embed, path_filter_num) vel_embed = top_k(vel_embed, vel_filter_num) traj_embed = path_embed.unsqueeze(2) + vel_embed.unsqueeze(1) traj_embed = [B, ~200, d] final_layer: metric_logit = metric_head(traj_embed) metric_logit = [B, ~200, num_metrics] scores = combine_pdms(metric_logit) scores = [B, ~200] mode_idx = scores.argmax(dim=-1) trajectory = flatten_traj_vocab()[mode_idx] output = [B, 1, 8, 3] 上面每一步对应的中文含义（逐行对照）：\ncompute_trajectory(agent_input)：navsim 的 AbstractAgent 接口，每个评测场景调一次，是整套推理入口。 build_features：把 AgentInput 拆成模型要的张量。 img = [B, 3, H, W]：三相机 cam_l0/f0/r0 已 resize/拼接的图。 ego = [B, 8]：自车状态向量（速度4 + 朝向2 + 位置2）。 SparseDriveModel.forward：主模型前向。 SparseBackbone(img)：ResNet-34 + FPN，输出 img_feat = [B, N_cam, C, h, w]（多尺度特征，N_cam=3）。 status_encoding(ego)：nn.Linear(8, d_model)，输出 status_emb = [B, d_model]（ego 状态投影到模型维度）。 traj_vocab_lookup：冻结词汇表查表（直接索引 .npz 加载的嵌入，不走网络）。 path_embed = [B, 1024, d]：1024 条 path 原型嵌入。 vel_embed = [B, 256, d]：256 条 velocity 原型嵌入。 注意：26 万条轨迹不会真的全展开，模型用 path/vel 两个因子分别处理。 CustomTransformerDecoder（2 层，即打分器）： 第 0 层：对 path_embed 算 path_scores 并 top_k(64) 筛到 64 条；对 vel_embed 算 vel_scores 并 top_k(20) 筛到 20 条；此刻候选 = 64 × 20 = 1280 条组合轨迹。 第 1 层：再各 top_k 一次（按配置 path_filter_num/velocity_filter_num），把筛后的 path_embed 与 vel_embed 逐元素相加组合成轨迹嵌入；traj_embed = [B, ~200, d] 即粗筛后的 ~200 条组合候选。 末层：对 ~200 条候选各过 metric_head（每个 PDMS 指标一个 MLP），输出 metric_logit = [B, ~200, num_metrics]，按 PDMS 同构公式合成最终分 scores = [B, ~200]。 argmax(scores)：选分数最高的候选，flatten_traj_vocab()[mode_idx] 取出对应轨迹，最终 output = [B, 1, 8, 3] 即选中的最优轨迹。 下面把每一步用大白话 + 伪代码拆开讲，并且解释「为什么这样设计」。\n第 ② 步：整理输入（把 navsim 的原始数据变成张量）\nnavsim 给模型的原始输入 AgentInput 是个复杂对象，里面塞了相机图像、自车状态、地图等。这一步把它拆成模型真正要的两样东西：\nimg : [B, 3, H, W] ego : [B, 8] 为什么要拆？因为图像要送进视觉网络，自车状态要送进一个简单的小网络，二者处理方式完全不同。\n第 ④ 步：图像变特征（SparseBackbone）\nimg : [B, 3, H, W] img_flat = img.flatten(end_dim=1) feat = ResNet34_FPN(img_flat) img_feat = feat.reshape(B, 3, C, h, w) 为什么用 ResNet-34 这么\u0026quot;老\u0026quot;的网络？因为 SparseDriveV2 主打\u0026quot;快\u0026quot;和\u0026quot;轻\u0026quot;，推理要实时，用大模型反而拖慢。FPN（特征金字塔）是把不同尺度的特征都保留下来，近处细节和远处轮廓都能看到。\n第 ⑤ 步：自车状态编码（status_encoding）\nego : [B, 8] status_emb = Linear(8 -\u0026gt; d_model)(ego) 为什么要把\u0026quot;我现在开多快、朝哪、在哪\u0026quot;也编码进去？因为规划不能脱离\u0026quot;当前处境\u0026quot;。比如你现在已经在高速最左道且时速 100，那\u0026quot;猛打右转\u0026quot;这种动作就该被压低分。这个向量作为 decoder 的全局上下文，相当于告诉模型\u0026quot;我现在的处境\u0026quot;。\n第 ⑥ 步：冻结词汇表查表（这是 SparseDriveV2 的灵魂）\npath_embed : [B, 1024, d] vel_embed : [B, 256, d] 注意：这些嵌入是直接从 .npz 文件加载的，不经过任何网络计算，也不更新。这步就是\u0026quot;查字典\u0026quot;——把预先聚类好的 path 和 velocity 原型取出来当查询。\n为什么叫\u0026quot;检索式\u0026quot;而不叫\u0026quot;生成式\u0026quot;？ 这是全文最该懂的一句话：DiffusionDrive 那种生成式模型，推理时是\u0026quot;从噪声出发，一步步画出一条可能字典里根本没有的新轨迹\u0026quot;；而 SparseDriveV2 在推理时，候选轨迹早就全部躺在冻结词汇表里了，模型唯一能做的只是\u0026quot;给这些现成候选打分、挑最好的一条\u0026quot;。它永远不可能输出字典之外的新轨迹。就像点外卖：生成式是\u0026quot;现场给你炒一盘新菜\u0026quot;，检索式是\u0026quot;从固定菜单里选一个\u0026quot;。所以 SparseDriveV2 把规划退化成了\u0026quot;检索+排序\u0026quot;问题。\n第 ⑦ 步：两级打分器（CustomTransformerDecoder，核心中的核心）\n这是全文最难也最重要的一步，拆成三层来看。\n第 0 层（粗筛 path 和 vel 两个因子）：\npath_scores = decoder_layer_0(path_embed, img_feat, status_emb) topk_path = topk(path_scores, k=64) filter_path_embed = gather(path_embed, topk_path) vel_scores = decoder_layer_0(vel_embed, img_feat, status_emb) topk_vel = topk(vel_scores, k=20) filter_vel_embed = gather(vel_embed, topk_vel) 为什么要先粗筛？因为 26 万条全做细粒度打分，显存直接爆。先各砍一刀，把\u0026quot;明显不靠谱\u0026quot;的 path（比如当前该直行却选了急左转）和 vel（比如该慢却选了全速）砍掉，剩下的才值得精算。这是推荐系统里经典的\u0026quot;先召回后排序\u0026quot;两阶段思路。\n第 1 层（再做一次粗筛 + 加法组合）：\nfilter_path_embed = topk_path_again(filter_path_embed) filter_vel_embed = topk_vel_again(filter_vel_embed) traj_embed = filter_path_embed.unsqueeze(2) + filter_vel_embed.unsqueeze(1) path⊕vel 加法组合的实现细节（务必搞懂）：unsqueeze 是在指定维度插一个大小为 1 的维度。path 是 [B, 64, d]，在第 2 维插 1 变成 [B, 64, 1, d]；vel 是 [B, 20, d]，在第 1 维插 1 变成 [B, 1, 20, d]。PyTorch 的广播机制会把这两个张量自动扩成 [B, 64, 20, d] 再做逐元素加法——结果就是\u0026quot;第 i 条 path 和第 j 种 vel 的嵌入相加\u0026quot;，得到第 (i,j) 个组合轨迹的嵌入。最后 flatten(1,2) 把 64×20 压成一维 1280，方便后面统一处理。这就是\u0026quot;因子化\u0026quot;在代码里的落地：用一次加法代替存 26 万个独立向量。\n末层（细粒度精排，只在这一层做）：\nif decoder_idx == num_layers - 1: metric_logit = traj_mlp(traj_embed) scores = combine_by_PDMS_formula(metric_logit) 为什么只在最后一层做细粒度打分？因为前面已经把候选从 26 万砍到 1280，现在才\u0026quot;值得\u0026quot;对每条都跑一遍多个指标的 MLP 精算。这就是\u0026quot;粗到细（coarse-to-fine）\u0026ldquo;省算力的精髓。\n第 ⑧ 步：argmax 选最优\nmode_idx = scores.argmax(1) trajectory = filter_traj_vocab.flatten(1,2)[batch_idx, mode_idx] output : [B, 1, 8, 3] 注意这里取的是冻结词汇表里对应的真实轨迹坐标，而不是模型\u0026quot;生成\u0026quot;的坐标。模型只负责打分，轨迹本身永远是字典里的原样。\n每一步在干啥（大白话版）：\n②④：和所有视觉模型一样，把相机图变成\u0026quot;懂驾驶的多尺度特征\u0026rdquo;。 ⑤：把自车\u0026quot;我现在开多快、朝哪、在哪\u0026quot;压成一个向量，作为 decoder 的全局上下文（告诉模型\u0026quot;我现在的处境\u0026quot;）。 ⑥：这一步是 SparseDriveV2 的灵魂——它不生成轨迹，而是把 26 万条\u0026quot;标准驾驶动作\u0026quot;当成现成的 query 嵌入直接拿来用（冻结，不更新）。相当于给模型一张\u0026quot;标准动作菜单\u0026quot;。 ⑦：decoder 做的事不是\u0026quot;创造\u0026quot;，而是\u0026quot;翻菜单\u0026quot;——先看图像 + ego 状态，觉得哪类 path（左转/直行/…）和哪类 vel（快/慢/…）靠谱，用 top-k 把菜单从 26 万砍到 ~200；最后给这 ~200 条逐一打分（分数来自训练时蒸馏的 PDM 判分器）。 ⑧：直接选分数最高的那条，完事。 输入 / 输出维度小结：\n输入图像：[B, 3, H, W]（三相机）；输入 ego 状态：[B, 8] → 投影到 [B, d_model]。 冻结轨迹词汇表：traj_vocab [262144, 8, 3]（始终 requires_grad=False）。 中间候选：26 万（因子形式）→ 第0层后 1280 → 末层前 ~200。 输出：[B, 1, 8, 3] 最优轨迹 + 对应的 metric 分数 [B, ~200]（推理时用于 argmax 排序）。 三、训练：怎么挂上 navsim + score 蒸馏 训练入口直接复用 navsim run_training.py：\npython $NAVSIM_DEVKIT_ROOT/navsim/planning/script/run_training.py \\ --config-name default_training \\ agent=sparsedrive_agent experiment_name=$agent \\ train_test_split=navtrain use_cache_without_dataset=True \\ cache_path=exp/data_cache_navtrain \\ dataloader.params.batch_size=16 trainer.params.max_epochs=10 \\ agent.lr=0.0001 +agent.config.dataset_version=v1 \\ +agent.config.metrics=[...] +agent.config.velocity_filter_num=[64,20] 注意它用 use_cache_without_dataset=True（走 CacheOnlyDataset，直接按 train_logs 索引 cache），batch_size=16、max_epochs=10——比 navtrain 全量训练轻很多。\n3.1 词汇表怎么预计算（k-means 在训练集上聚类） 回顾 1.2 节：词表不是训练出来的，而是离线用 KMeans 在训练集所有真实轨迹上聚类得到的。具体做法：\n把训练集里每条专家轨迹拆成「几何路径 path」（只看 x/y/θ 形状，忽略速度）和「速度剖面 velocity」（每个时刻的速度大小）。 对所有 path 做 KMeans，聚成 1024 类，每类的中心就是一条代表路径。 对所有 velocity 做 KMeans，聚成 256 类，每类的中心就是一种代表速度剖面。 两两组合 + 沿弧长插值，生成 (1024, 256, 8, 3) 的完整轨迹张量，存成 .npz。 这一步只在准备数据时跑一次（scripts/cluster/cluster_anchor.py），之后训练和推理都只 np.load 这个 .npz，再也不碰聚类脚本。所以词表是\u0026quot;经验统计得到的先验\u0026quot;，不是神经网络参数。\n3.2 损失函数（梯度流向） 损失全在 custom_decoder.py:236-288，分三族：\nPath 分类损失（soft target，对最近 GT path 做 softmax 距离）： dist = (path_vocab - target_path[:, None])[..., :2].pow(2).sum(-1) * mask dist = dist.sum(-1) / valid_cnt * path_sigmas * len_path path_loss = F.cross_entropy(path_scores, (-dist).softmax(1)) 大白话：Ground Truth（专家真实轨迹）对应的 path 应该分数最高。这里不是硬 label，而是用\u0026quot;到各 path 中心的距离\u0026quot;做 soft 标签——离 GT 越近的 path 越该高分。\nVelocity 分类损失、组合轨迹分类损失（IMI imitation） 同理，都是让模型给\u0026quot;像专家\u0026quot;的候选打高分。\nScore 蒸馏损失（核心）：用 PDM 模拟器对组合轨迹打分当 GT，训练每个 metric head（BCE with logits）：\nsub_scores = get_pdm_score_v2(trajectory, pdm_token_paths) for metric in self._config.metrics: metric_gt = torch.tensor(np.stack([s[metric] for s in sub_scores])) metric_gt[metric_gt == 0.5] = 0.0 metric_loss = F.binary_cross_entropy_with_logits(metric_pred, metric_gt) loss_dict[f\u0026#39;{metric}_loss_{self.decoder_idx}\u0026#39;] = metric_loss * metric_loss_weight PDM 打分函数在 scorer/get_pdm_score_v2.py，权重 metric_loss_weight=5.0。\n什么叫\u0026quot;蒸馏（distillation）\u0026quot;？ 通俗讲：有一个很强但不便部署的\u0026quot;老师\u0026quot;（这里就是 NAVSIM 的 PDM 仿真器，它能精确模拟车开下去的后果并打分），让它对每条候选轨迹给出各项分数，然后训练一个轻量的\u0026quot;学生\u0026quot;网络（metric head）去模仿老师的分数。这样推理时学生就可以自己打分，不用再跑笨重的 PDM 仿真器——又快又贴榜。\n这是 SparseDriveV2 的杀手锏：它直接拿排行榜的判分函数（PDM）当监督信号，让 metric head 学会\u0026quot;什么轨迹分高\u0026quot;——推理时就能用这些 head 合成 PDMS 式分数来排序，等于\u0026quot;在训练时就把排行榜逻辑学进去\u0026quot;。\n梯度流小结：只有 backbone、CustomTransformerDecoder 内的 path/vel/metric head 参数可训；traj_vocab 全程冻结（仅作 query 查表）。三族损失加权求和后做反向传播，AdamW 优化。\n哪些部分冻结不训：path_vocab、vel_vocab、traj_vocab、traj_mask 全部 requires_grad=False。也就是说\u0026quot;动作菜单\u0026quot;是固定不变的，模型只学\u0026quot;怎么给菜单里的动作打分\u0026quot;和\u0026quot;怎么从图像里提取特征\u0026quot;。\n四、推理：两级评分选最终轨迹 compute_trajectory 继承 AbstractAgent，真正「选轨迹」逻辑在 custom_decoder.py:291-317（推理最后一层）。先把各 metric head 的输出按 PDMS 同构公式合成总分（注意是 PDMS 公式的纯 Python 复现，无中文）：\nscores = ( metric_logit[\u0026#34;no_at_fault_collisions\u0026#34;].sigmoid() * metric_logit[\u0026#34;drivable_area_compliance\u0026#34;].sigmoid() * metric_logit[\u0026#34;driving_direction_compliance\u0026#34;].sigmoid() * metric_logit[\u0026#34;traffic_light_compliance\u0026#34;].sigmoid() ) * ( 5 * metric_logit[\u0026#34;time_to_collision_within_bound\u0026#34;].sigmoid() + 5 * metric_logit[\u0026#34;ego_progress\u0026#34;].sigmoid() + 2 * metric_logit[\u0026#34;lane_keeping\u0026#34;].sigmoid() + 2 * metric_logit[\u0026#34;history_comfort\u0026#34;].sigmoid() ) bs_indices = torch.arange(scores.shape[0], device=scores.device) mode_indices = scores.argmax(1) trajectory = filter_traj_vocab.flatten(1, 2)[bs_indices, mode_indices] output[\u0026#34;trajectory\u0026#34;] = trajectory 推理和训练的差异：\n训练时，模型需要 PDM 仿真器来提供\u0026quot;老师分数\u0026quot;做蒸馏损失；推理时完全不需要 PDM，直接用训练好的 metric head 自己算分数。 训练时算三族损失（path/vel/traj 分类 + 蒸馏）；推理时只跑前向、做两级筛选和 argmax，不反向传播。 训练时候选可能还要算完整 26 万的粗筛路径；推理时同样走两级筛选，但最后只从 ~200 条里选 1 条。 流程和 PDMS 公式同构：乘性项（NC/DAC/DDC/TLC 的 sigmoid 乘积）× 加权项（TTC/EP/LK/HC 加权求和）。最终 argmax 从粗筛后的 ~200 条里选 1 条。\nPDM 分数怎么用在推理？ 关键点：推理时并没有真的调用 PDM 仿真器，而是用训练时蒸馏好的 metric head 直接输出每个指标的 logit，再按 PDMS 的同构公式合成 scores。换句话说，PDM 的\u0026quot;打分逻辑\u0026quot;已经被压缩进了这些 head 的权重里——这就是蒸馏的价值：把慢但准的仿真器，变成快且贴榜的小网络。\n注意：生成 challenge submission.pkl 的脚本（仓库引用的 run_create_submission_pickle_challenge.py）在本 fork 内未包含，需依赖官方 navsim devkit；常规 navtest 评测走内联的 run_pdm_score_navtest_v1_fast.py。\n闭环总结 阶段 入口 关键代码 训练/推理差异 架构 sparsedrive_model.py + scripts/cluster/cluster_anchor.py 冻结 path(1024)×vel(256)=26万 轨迹词汇表 词汇表离线生成，两侧共用 训练 navsim run_training.py + agent=sparsedrive_agent path/vel/traj 分类 + PDM score 蒸馏 额外回传 PDM 算 metric GT 推理 custom_decoder.py:291 两级评分：粗筛 200 条 → PDMS 式分数 argmax 无需 PDM，直接 metric head 打分 一句话记住这个闭环：离线用 KMeans 建好「path×velocity」的 26 万条轨迹字典，训练时让模型学会给每条打 PDM 式分数（蒸馏自排行榜判分器），推理时先按 path/vel 粗筛到 200 条、再用分数精排取最优——这就是 SparseDriveV2 「检索式规划」的全部秘密。\n个人理解与思考 1. 它把「规划」问题偷换成了「检索」问题。 这是 SparseDriveV2 最聪明也最危险的一点。聪明在于：排行榜（PDMS）本身就是在一个固定候选集上打分选优，SparseDriveV2 直接让模型学这个打分函数，训练目标与评测指标完美对齐，所以榜上分数高毫不意外。危险在于：如果最优轨迹恰好不在 26 万条字典里（极端场景、字典覆盖盲区），模型无能为力——它只能选「字典里最好的」，不能「生成字典外更好的」。这是离散候选集方法的天花板。\n2. 因子化是性价比极高的归纳偏置。 26 万条组合轨迹只用了 1024+256 两个聚类中心就覆盖，参数几乎不增。相比 Hydra-MDP 直接枚举 8K 固定轨迹，SparseDriveV2 用相近成本拿到了 32× 的密度。这提醒我们：在动作空间有明显「几何 × 速度」结构时，因子化分解通常比扁平枚举好得多。从数学上看，扁平枚举要存 $O(M)$ 个向量，因子化只需 $O(\\sqrt{M})$ 量级的两个因子，覆盖密度却是指数级的。\n3. 两级评分是「精度-算力」的务实妥协。 直接对 26 万条做细粒度 metric 打分显存爆炸；粗筛先砍到 200 条再精排，把计算量压了三个数量级。这是工程上很典型的「先召回后排序」两阶段架构（和推荐系统如出一辙）。缺点是粗筛用 path/vel 独立打分，可能误杀「path 一般但 vel 绝配」的组合——不过实践中 200 的保留量足够兜底。\n4. 和 DiffusionDrive 的对比给人的启发。 DiffusionDrive 是「生成式」——从 anchor 扩散出轨迹，擅长覆盖字典外的多模态；SparseDriveV2 是「检索式」——在巨字典里选，擅长贴合评测指标且推理极快（无迭代去噪）。没有谁绝对更好：要榜单分数 → 检索式更稳；要开放场景泛化 → 生成式更灵活。这也是 NAVSIM 榜单上两条路线并存的底层原因。\n5. 对工程落地的启示。 SparseDriveV2 把\u0026quot;规划\u0026quot;做成\u0026quot;查表+打分\u0026quot;，推理时没有迭代去噪、没有自回归生成，延迟极低，非常适合车端实时部署。但它的天花板也写在架构里：字典一旦冻结，能力上限就锁死了。如果后续想覆盖新场景，只能重新跑 KMeans 扩字典——这比\u0026quot;让生成模型多学点\u0026quot;要麻烦。所以选路线时要想清楚：你要的是\u0026quot;在已知分布里做到极致快和准\u0026quot;，还是\u0026quot;在未知分布里也能灵活应对\u0026quot;。\n附：自己跑起来（最小实操） 读完代码最好亲手跑一遍。最小可行路径（基于官方 README）：\nclone 并装环境：SparseDriveV2 是 navsim 的 fork，直接装它的 navsim 开发套件。 git clone https://github.com/swc-17/SparseDriveV2.git cd SparseDriveV2 pip install -e . 准备数据与词表：按 navsim 官方文档下载 NAVSIM navtrain / navtest 数据集，设置 NAVSIM_DEVKIT_ROOT。词表需要先离线生成一次（这步不能省，否则加载 .npz 会报 FileNotFoundError）： python scripts/cluster/cluster_anchor.py 训练（复用官方入口 + Hydra 切换 agent）： python $NAVSIM_DEVKIT_ROOT/navsim/planning/script/run_training.py \\ --config-name default_training \\ agent=sparsedrive_agent experiment_name=my_sparsedrive \\ train_test_split=navtrain use_cache_without_dataset=True \\ cache_path=exp/data_cache_navtrain dataloader.params.batch_size=16 \\ trainer.params.max_epochs=10 agent.lr=0.0001 推理 / 本地算分：直接用 navsim 官方评测脚本对每个场景调 compute_trajectory，再用 run_pdm_score.py 在本地看 PDMS；正式上榜传 submission.pkl 到 HuggingFace 官方空间。 新手最常踩的 3 个坑：\n词表没生成就训练 → 一启动 FileNotFoundError。务必先跑 scripts/cluster/cluster_anchor.py 产出 .npz。 use_cache_without_dataset=True 需要提前建好 data_cache_navtrain 缓存，否则要从原始数据集现造，很慢。 想调候选密度（比如改 path_filter_num=[128,32]）→ 同时要确认词表 .npz 的 K_PATH/K_VELOCITY 匹配，否则形状对不上会报错。 延伸阅读 同系列对比：DiffusionDrive 代码讲解——扩散生成式路线 榜单背景：NAVSIM 排行榜深度分析 ","permalink":"https://auto-driving-blog.pages.dev/posts/code/sparsedrivev2%E4%BB%A3%E7%A0%81%E8%AE%B2%E8%A7%A3/","summary":"逐行拆解 swc-17/SparseDriveV2 的真实源码：从架构图与全局数据流出发，用最通俗的大白话讲清几何路径乘以速度剖面如何因子化组合成 26 万条轨迹词汇表、两级评分怎么把候选从 26 万粗筛到 200 条再精排、PDM score 蒸馏损失如何用排行榜判分器当老师。一篇把项目挂载方式、数据流、前向传播、训练梯度、推理选轨迹、个人思考全部讲透、面向零基础读者的工程向代码讲解。","title":"代码讲解：SparseDriveV2 因子化轨迹词汇表与两级评分的完整闭环"},{"content":"📌 一句话概括 Drive-JEPA 用 V-JEPA（联合嵌入预测架构，非生成式）在大规模驾驶视频上自监督预训练 ViT，得到强规划表征；再用 仿真器生成的多模态伪教师轨迹蒸馏进在线生成的 proposal 规划器，并以动量感知选择保时序平滑——同时破解\u0026quot;世界模型预训练无效\u0026quot;与\u0026quot;单轨迹监督瓶颈\u0026quot;两个难题，NAVSIM 双榜 SOTA。\n1. 动机：两个被忽视的瓶颈 端到端驾驶近两年拼命用视频世界模型预训练学可迁移表征，但效果有限。作者指出两类失败：\n生成式世界模型（VaVAM、Epona）：像素级重建/生成，算力重且过度关注与决策无关的视觉细节。 潜空间世界模型（LAW、World4Drive）：预测未来特征，但通常只当辅助损失，没证明\u0026quot;扩大预训练\u0026quot;有用，且易表征坍塌。 另一瓶颈是监督稀疏：每场景只有一条人类轨迹，而驾驶本质是多模态的（多条都合理）。离散词表法（VADv2/Hydra-MDP）受限于词表覆盖；扩散法（DiffusionDrive）也只被单条人类轨迹监督，多样性受限。\nDrive-JEPA 的统一解法：① 用 V-JEPA 做高效、防坍塌的视频预训练；② 用多模态轨迹蒸馏从仿真器引入多样监督。\n2. 方法：三大组件 2.1 Driving Video Pretraining（V-JEPA） V-JEPA 原理：对视频随机 mask 掉一些时空 patch，用编码器 $E_\\theta$ 抽特征、预测器 $P_\\phi$ 在 mask 位置预测目标分支（EMA 编码器 + stop-grad）的表征，只在 mask 位置算 L1 损失：\n$$\\min_{\\theta,\\phi,\\Delta_y}\\;\\left\\|P_{\\phi}(\\Delta_y, E_{\\theta}(x)) - \\mathrm{sg}(E_{\\bar{\\theta}}(y))\\right\\|_1$$内置 stop-grad + EMA，天然防表征坍塌——这正是它优于 MAE/潜世界模型的关键。\nDrive-JEPA 实践：\n初始化用 V-JEPA 2 发布的 ViT 权重，再从三大数据集（CoVLA、DrivingDojo、OpenScene）策展 208 小时驾驶视频（前视、8帧、512×256、2Hz）。 因潜预测任务高效，成功把预训练扩展到 208h（远超 LAW/World4Drive 的 ~20h），算力反而更低。 无感知设定验证：只给前视图像，用预训练 ViT 提特征 + 轻量 Transformer Decoder（M 个 learnable query 做 cross-attn）+ MLP 直接回归轨迹，MSE 监督。仅此简单 setup 就在 NAVSIM 无感知设定下达 89.0 PDMS，超 Epona（86.1）3 PDMS——证明 V-JEPA 预训练对规划真的有用。\n2.2 Waypoint-anchored Proposals（在线生成候选） 受 iPad 启发，不依赖固定词表，而是在线迭代细化 proposal。给定视觉特征 $\\mathbf{F}_t$ 与 ego 状态（线性投影成 $\\mathbf{e}_t$）：\nproposal query 初始化：$\\mathbf{Q}_0 \\in \\mathbb{R}^{N_p\\times M\\times D}$，由 $\\mathbf{e}_t$ + 可学习位置嵌入构成（$N_p=32$ 个提案，M 个未来 waypoint）。 迭代 $L$ 次：MLP 把 $\\mathbf{Q}_\\ell$ 解码成显式 waypoint 轨迹 $\\tilde{W}_\\ell$ → 以这些 waypoint 为锚，用 WADA（Waypoint-anchored Deformable Attention） 在 $\\mathbf{F}_t$ 的 BEV 特征上采样聚合 → MLP 更新 query： $$\\mathbf{Q}_{\\ell+1} = \\mathrm{MLP}\\big(\\mathrm{WADA}(\\mathbf{Q}_\\ell, \\tilde{W}_\\ell, \\mathbf{F}_t)\\big)$$ 粗到细：早期迭代权重低（$\\lambda=0.1$ 折扣），逐步聚焦。 朴素监督用 winner-take-all（对最近提案算 L2），但会限制多模态——引出下一节。\n2.3 Multimodal Trajectories Distillation（MTD）★ 为打破\u0026quot;单条人类轨迹\u0026quot;瓶颈，从规则仿真器蒸馏多模态监督：\n建轨迹词表：聚类训练集 10 万+ 轨迹得 8192 中心（同 VADv2/Hydra-MDP 用法，但目的不同）。 对每场景，用 NAVSIM v2 的 EPDM 规则仿真器给词表每条轨迹打分（PID 转 41 点稠密轨迹 → replay 他车/红绿灯 → 算碰撞等指标），按排名+阈值选出一组多模态伪教师轨迹 $\\mathcal{P}_t$。 训练时让 proposal 同时靠近人类轨迹和伪教师轨迹（而非只靠一条）： $$\\sum_{\\ell=1}^{L}\\lambda^{L-\\ell}\\Big(\\min_n\\lVert W_t-\\tilde{W}_{\\ell}^{(n)}\\rVert_2 + \\sum_{P\\in\\mathcal{P}_t}\\min_n\\lVert P-\\tilde{W}_{\\ell}^{(n)}\\rVert_2\\Big)$$ 如图 3 所示：无 MTD 时 proposal 明显模态坍塌；加 MTD 后变多模态。这是缓解模仿学习模态坍塌的直接手段。\n为什么不用扩散采样来产生多模态，而是用\u0026quot;伪教师蒸馏\u0026quot;？ 两条路都能得多模态，但 MTD 有独特优势：扩散采样慢（100 步）、且采样出的轨迹未必\u0026quot;安全合规\u0026quot;；而 MTD 的伪教师直接来自规则仿真器打分筛选过的轨迹，天然满足 NC/DAC/EP 等硬约束。等于把\u0026quot;多样性\u0026quot;和\u0026quot;安全性\u0026quot;一次性蒸馏进 proposal 分布——比让模型自己扩散探索高效得多。这也是它 Bench2Drive 闭环 DS 比 iPad 高 4 分的原因。\n2.4 Momentum-aware Trajectory Selection 从 $N_p$ 个最终提案里选最优：对 $\\mathbf{Q}_L$ 沿 waypoint 维 max-pool → MLP 打分到 $S$。用基于仿真 EPDMS 的 BCE 监督： $$\\mathcal{L}_{\\text{score}} = \\mathrm{BCE}(S, \\hat{S})$$MTD 提升多样性的副作用是帧间抖动变大、舒适度下降。于是把分数改成动量感知：用上一帧选中轨迹 $\\hat{W}_{t-1}$ 与当前各提案比较得舒适度项 $S_c$，重标定： $$S \\leftarrow \\frac{7S + S_c}{8}$$ 最终选 $n^* = \\arg\\max_n S_n$。权重 7:1 沿用 NAVSIM v2 设定。\n为什么要\u0026quot;动量感知\u0026quot;？ 实车最忌讳轨迹一帧一个样（乘客晕、控制抖）。MTD 让 proposal 更多样后，相邻帧可能选出形状差异大的两条，导致输出轨迹跳变。动量项 $S_c$ 衡量\u0026quot;当前提案与上一帧选中轨迹的偏离度\u0026quot;，把它按 1/8 权重揉进总分，等于给\u0026quot;突然变道/急转\u0026quot;悄悄扣分——在不牺牲安全的前提下保住时序平滑。这是把\u0026quot;舒适度\u0026quot;从评测指标前移成\u0026quot;选择偏好\u0026quot;的巧思。\n2.5 损失 除轨迹与分数损失，用两个轻量辅助任务（兼容 proposal-centric 设计）：\nProposal-centric mapping：预测提案 waypoint 的\u0026quot;在路上/在路线\u0026quot;概率，BCE。 Proposal-centric collision：log-replay 仿真估碰撞概率，L1 + 0.1·BCE。 总损失：$\\mathcal{L} = \\mathcal{L}_{traj} + \\mathcal{L}_{score} + 2\\mathcal{L}_{map} + \\mathcal{L}_{colli}$（全程可微）。\n训练 vs 推理的差异：预训练阶段（V-JEPA）和规划器训练是两阶段解耦的——先在大语料上把 ViT encoder 预训好并冻结/低学习率微调，再训 proposal-centric 规划器；推理时只跑规划器（前视相机 + 32 提案 + 轻量 Transformer），不触发任何仿真器或扩散。所有\u0026quot;仿真器打分\u0026quot;都只发生在训练时造伪教师标签，推理是纯前馈。这也是它能做到\u0026quot;仅前视相机即 SOTA\u0026quot;的工程基础。\n3. 实验 3.1 NAVSIM v1（PDMS） 方法 输入 PDMS ↑ Hydra-MDP C\u0026amp;L 86.5 DiffusionDrive C\u0026amp;L 88.1 iPad Camera 91.1 Drive-JEPA (ResNet34) Camera 91.5 Drive-JEPA (ViT/L) Camera 93.3 仅前视相机、无 LiDAR，ViT/L 版达 93.3，仅次于用强数据增广的 DriveSuprim（93.5）。\n3.2 NAVSIM v2（EPDMS） 方法 Backbone EPDMS ↑ Hydra-MDP++ R34 81.4 iPad R34 84.1 DriveSuprim R34 83.1 Drive-JEPA (R34) R34 85.4 iPad ViT/L 85.8 DriveSuprim ViT/L 87.1 Drive-JEPA (ViT/L) ViT/L 87.8 v2 指标更严（含 DDC/TLC/LK/HC/EC），Drive-JEPA 双 backbone 均 SOTA，且 EC（扩展舒适度）表现突出。\n3.3 Bench2Drive（闭环） 方法 DS ↑ SR ↑ TCP 59.90 30.00 iPad 60.52 33.18 DriveTransformer 63.46 35.01 Drive-JEPA 64.52 36.82 DS 与 SR 双超，比同为 proposal-centric 的 iPad 高 4 分 DS，验证 MTD 的有效性。\n3.4 消融（模块叠加） 在 NAVSIM v2 上逐步加模块（EPDMS）：\n基线（iPad 式，无预训练）：84.1 $\\mathcal{M}_1$ V-JEPA2 权重：85.8（+1.7） $\\mathcal{M}_2$ 驾驶视频预训练：86.1（+2.0） $\\mathcal{M}_3$ MTD：84.5（多样性↑但 EC 掉） $\\mathcal{M}_4$ 动量感知选择：87.8（+3.7，EC 拉回 84.8） → 四模块缺一不可，动量感知选择是收尾关键。\n4. 个人思考 1. JEPA 比生成式世界模型更适合\u0026quot;为决策学表征\u0026quot;。 生成式要重建像素，逼模型记住与驾驶无关的纹理；JEPA 只在潜空间预测\u0026quot;被 mask 的表征\u0026quot;，目标就是\u0026quot;学可迁移的结构\u0026quot;，且 EMA+stop-grad 天然防坍塌。Drive-JEPA 用 208h 视频把预训练规模做上去才显出威力——说明之前\u0026quot;世界模型预训练没用\u0026quot;可能只是规模/方法没到位，而非范式错误。\n2. \u0026ldquo;多模态蒸馏\u0026quot;是缓解单轨迹瓶颈的干净解法。 不靠扩散采样、不靠固定词表，而是直接让仿真器当\u0026quot;多模态老师\u0026quot;批量产伪标签，把 proposal 分布拉开。比 Hydra-MDP 的 hydra-distillation（只学分数）更进一步——直接蒸馏轨迹形状本身。这对数据效率低的闭环场景尤其值钱。\n3. 轻量即正义。 仅前视相机 + 32 个在线 proposal + 轻量 Transformer，就能双榜 SOTA。相比堆 LiDAR、堆 backbone 的同行，Drive-JEPA 证明了\u0026quot;好表征 + 好训练策略\u0026quot;可以抵消传感器劣势——对实车降本（少相机、少算力）是直接利好。\n4. 与本期另两篇的呼应。 WoTE 用世界模型评估轨迹未来，GTRS 用世界模型式扩散生成候选，Drive-JEPA 用世界模型预训练表征——三条路分别把\u0026quot;世界模型\u0026quot;用在了规划链的不同环节，恰好勾勒出 2025-2026 端到端驾驶的三种世界观。求职面试时能讲清这条脉络，是很强的信号。\n延伸阅读 世界模型评估轨迹：WoTE 论文精读 生成式候选：DiffusionDrive 代码讲解 检索式评分：SparseDriveV2 代码讲解 榜单背景：NAVSIM 排行榜深度分析 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2601-22032/","summary":"Drive-JEPA（2026）指出端到端驾驶的两个瓶颈：(1) 视频世界模型预训练收益有限；(2) 每场景只有一条人类轨迹，多模态监督稀缺。它用 V-JEPA（而非生成式世界模型）在 208 小时驾驶视频上自监督预训练 ViT 编码器，得到规划对齐的表征；再用基于仿真器的「多模态轨迹蒸馏」把多样伪教师轨迹蒸馏进 proposal-centric 规划器，并以动量感知选择抑制帧间抖动。NAVISIM v1 达 93.3 PDMS、v2 达 87.8 EPDMS 双榜 SOTA，仅前视相机+轻量 transformer 即在无感知设定下超此前 SOTA 3 PDMS。","title":"论文精读：Drive-JEPA — Video JEPA 预训练 + 多模态轨迹蒸馏的端到端驾驶"},{"content":"📌 一句话概括 GTRS 的核心命题是：一个好评分器必须同时在**粗粒度（静态大词表）和细粒度（动态小候选）**两种轨迹分布上训练才能泛化。它用\u0026quot;超密集词表 + 词表 dropout\u0026quot;让评分器学会在更小推理词表上照样打准，再叠扩散生成器与传感器增强，拿下 NAVSIM-v2 挑战赛冠军。\n1. 动机：静态词表 vs 动态候选，各自的死穴 端到端多模态规划的标准流程：生成候选轨迹 → 评分器打分 → 选最高分。评分器怎么训，决定泛化上限。现有两类各有硬伤：\n静态大词表（Hydra-MDP、VADv2）：把轨迹空间聚成固定词汇表（如 8K/16K），打分快、覆盖粗，但无法适应细粒度场景变化（词表外轨迹直接没分）。 动态小候选（DiffusionDrive 等）：扩散生成少量贴合当前的轨迹，精细但训练时只见过窄分布，泛化到未见轨迹差。 GTRS 的关键洞察：鲁棒评分器必须在 coarse + fine 两种分布上都训过。它由此提出三根互补支柱。\n2. 三支柱方法 2.1 支柱一：扩散轨迹生成器（DP） 推理时提供细粒度动态候选。采用 Diffusion Policy（Chi et al. 2023）：图像 backbone 提特征 → BEV Encoder（BEV query 对图像特征做 Transformer cross-attn）→ Diffusion Transformer 以 BEV 特征为条件生成 $N$ 条提案 $\\mathcal{V}_{dp}$。\n训练时沿用 TransFuser 加 BEV 分割头监督；对 GT 轨迹一阶微分归一化，用 DDPM 调度去噪。推理用 100 步 DDPM、生成 100 条提案。\n注意：DP 只在推理时生成候选并拼到词表里，训练时并不把扩散采样塞进训练循环——避免不稳定与额外开销。\n2.2 支柱二：词表泛化评分器（GTRS-Dense）★ 这是全文最巧的设计。架构基于 Hydra-MDP：图像 backbone + 轨迹 tokenizer + Transformer Decoder（建模轨迹 token 与图像 token 交互）。创新在两点：\n(a) 超密集训练词表 + 更小推理词表。 训练用 $\\mathcal{V}_{XL}$（16,384 条轨迹）全面覆盖；推理用 $\\mathcal{V}_{L}$（8,192 条）或更少。故意制造训练/推理词表不匹配，逼模型学可迁移表征。\n(b) 词表 Dropout。 训练时对每个 batch 的 $\\mathcal{V}_{XL}$ 随机删掉一半轨迹。三重作用：\n对齐训练/推理的 token 数量； 制造分布偏移提升鲁棒性； 作为正则防止过拟合特定轨迹模式。 效果惊人：只在 $\\mathcal{V}_{XL}$ 上训的评分器，对未见过的动态提案 $\\mathcal{V}_{dp}$ 零样本泛化达 EPDMS 36.7，远超 DP 随机选（25.6，+11.1）。加 dropout 后最佳达 43.4。\n为什么\u0026quot;超密集 + dropout\u0026quot;比\u0026quot;直接训推理词表\u0026quot;更好？ 直觉是：如果只在 8192 条上训，评分器会把这 8192 个具体 token 记死；推理时换一批动态提案它就不会打了。而先在 16384 条上训、再随机 dropout 掉一半，等于强迫网络不是记 token 本身，而是学\u0026quot;轨迹形状→分数\u0026quot;的映射函数。dropout 制造的训练/推理不匹配，反而练出了对\u0026quot;没见过的轨迹\u0026quot;也能打分的能力——这和推荐系统里对 item embedding 做 dropout 提升冷启动泛化是同一思路。\n2.3 支柱三：传感器增强 + 细化（GTRS-Aug） 针对域外分布偏移（视角变化、合成数据失真）：\n传感器旋转增强：对输入图像施加受控的 2D 水平视角旋转，同步变换 GT，提升视角一致性鲁棒性。 细化训练（仅训练用）：额外 Transformer Decoder 对 top-k 候选渐进细化分数，用 EMA 教师模型的软标签做自蒸馏指导： $$\\tilde{y}_i^m = \\hat{y}_i^m + \\mathrm{clip}(s_{i,\\text{teacher}}^m - y_i^m, -\\delta_m, \\delta_m)$$ clipping 参数 $\\delta_m$ 保证细化目标不离 GT 太远，让模型学会区分\u0026quot;长得很像的两条轨迹\u0026quot;。 为什么需要\u0026quot;细化\u0026quot;这一步？ 安全关键场景下，两条轨迹可能只在末尾差一点点（一条刚好避让、一条轻微压线），粗评分器容易给相近分数而选错。细化模块专门在 top-k 候选上做\u0026quot;精细区分\u0026quot;，用教师模型（更强但对齐 GT）的软标签告诉学生\u0026quot;其实这条比那条好 0.03\u0026quot;——clip 又防止教师自己也飘太远。这是榜首方案在边界案例上不掉链子的关键。\n训练 vs 推理的差异：DP 生成器只在推理时生成候选并拼接，训练循环里不含扩散采样（避免不稳定）；GTRS-Dense/Aug 评分器从头到尾只在静态词表上训，推理时才\u0026quot;见到\u0026quot;动态提案。换句话说，GTRS 把\u0026quot;生成\u0026quot;和\u0026quot;评分\u0026quot;解耦到训练和推理两个阶段，这是它工程上稳、且泛化强的核心设计选择。\n3. 推理时集成 训练完各子网络后，推理时的集成流程如下（纯文字描述，避免图形错位）：\n输入 A：扩散生成器 DP 产出动态候选集 $\\mathcal{V}_{dp}$（100 条，贴合当前场景的细粒度轨迹）； 输入 B：静态推理词表 $\\mathcal{V}_{L}$（8192 条，覆盖广但较粗）； 合并：把两者拼成组合集 $\\mathcal{V}_{dp}\\cup\\mathcal{V}_{L}$，统一经 Trajectory Tokenizer 编码成 token 序列； 打分：送 GTRS-Dense 或 GTRS-Aug 评分器，对每条候选输出分数； 选优：argmax 取最高分轨迹作为最终输出。 设计哲学：训练只在多样静态词表上训（学泛化），推理时动态提案提供场景定制的细粒度轨迹——既享受动态精度，又避免训练时扩散不稳定的坑。\n4. 实验（Navhard / NAVSIM-v2） 4.1 词表泛化路线图（Roadmap） 训练词表 推理词表 EPDMS $\\mathcal{V}_{XL}$ $\\mathcal{V}_{dp}$（随机） 25.6 $\\mathcal{V}_{XL}$ $\\mathcal{V}_{dp}$（DP生成） 36.7 $\\mathcal{V}_{XL}$ $\\mathcal{V}_{dp}\\cup\\mathcal{V}_{XL}$ 40.8 $\\mathcal{V}_{XL}$(Dropout) $\\mathcal{V}_{dp}\\cup\\mathcal{V}_{L}$ 43.4 → 词表 dropout 带来最大单点增益，印证\u0026quot;故意不匹配\u0026quot;的训练策略有效。\n4.2 主结果（Navhard 榜） 方法 Backbone EPDMS LTF (baseline) ResNet34 23.1 GTRS-Dense V2-99 41.7 GTRS-Aug ViT-L 43.4 GTRS-E-Lite（集成） EVA-ViT-L 46.6 GTRS-E（冠军集成，6模型） - 49.4 PDM-Closed（特权基线） GT感知 51.3 GTRS-E 逼近依赖真值感知的 PDM-Closed，而 GTRS 只用（含合成的）传感器输入——泛化能力极致。\n5. 个人思考 1. \u0026ldquo;训练-推理词表不匹配\u0026quot;是反直觉却有效的正则。 通常我们追求训练/推理一致；GTRS 故意在训练时 dropout 掉一半词表、推理用更小的词表，反而泛化更好。本质是把\u0026quot;评分器\u0026quot;当成对轨迹分布的度量函数来训，而非记忆特定 token——和推荐系统里对 item embedding 做 dropout 异曲同工。\n2. 它把\u0026quot;生成 vs 检索\u0026quot;的争论和解了。 SparseDriveV2（检索式）和 DiffusionDrive（生成式）我都在代码讲解里写过，看似对立。GTRS 的立场是：让检索式评分器去兼容生成式候选——静态词表保证覆盖、动态扩散补精细，评分器做统一裁判。这是目前 NAVSIM-v2 榜首的实用答案。\n3. 工程胜出的味道很浓。 三支柱里没有单个颠覆性模块，全是\u0026quot;针对性补丁\u0026rdquo;：扩散补精细、dropout 补泛化、旋转补域外、自蒸馏补细辨。但组合起来拿冠军——说明榜单 SOTA 越来越是系统工程（数据增强+集成+训练技巧）的胜利，而非单点算法突破。对求职/工程落地是重要信号。\n4. 局限：强依赖 Hydra-MDP 式静态词表基底；合成数据（3DGS）质量受限会拖累传感器规划器；6 模型集成推理成本高。轻量版 GTRS-E-Lite（46.6）更具部署参考价值。\n延伸阅读 检索式路线：SparseDriveV2 代码讲解 生成式路线：DiffusionDrive 代码讲解 同榜闭环优化：TOAD 论文精读 榜单背景：NAVSIM 排行榜深度分析 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2506-06664/","summary":"GTRS（NVIDIA, CVPR 2025 自动驾驶挑战赛 E2E 赛道冠军）指出：现有轨迹评分器要么打「静态大词表」要么打「动态小候选」，两者都泛化差。GTRS 用三根支柱统一二者：(1) 扩散策略生成细粒度动态候选；(2) 在 16384 的超密集词表上训练评分器 + 词表 dropout，使推理时能在更小子集上强泛化；(3) 传感器旋转增强 + top-k 细化自蒸馏，提升域外鲁棒性。Navhard 榜 EPDMS 最高 49.4，逼近依赖真值感知的 PDM-Closed。","title":"论文精读：GTRS — 通用轨迹评分（CVPR25 自动驾驶挑战赛冠军）"},{"content":"📌 一句话概括 WoTE 给端到端规划器装了一个 BEV 世界模型：对每条候选轨迹模拟出未来 BEV 状态，奖励模型据此打分，选\u0026quot;未来最安全\u0026quot;的那条——把\u0026quot;轨迹评估\u0026quot;从看当前状态升级成\u0026quot;预判未来后果\u0026quot;，且全程可微、实时可行。\n1. 动机：为什么规划器需要\u0026quot;预判未来\u0026quot; 端到端驾驶近年大多只盯着\u0026quot;生成一条好轨迹\u0026quot;。但给定多条候选轨迹后，如何评估它们才是安全的关键。传统做法要么用规则（依赖感知框/地图，对感知误差敏感），要么只用当前状态打分——可一条轨迹好不好，不看它跑出去的未来，根本判断不了。\n人类司机会\u0026quot;脑补\u0026quot;未来再决策。WoTE 的核心洞察：把轨迹评估建模成对\u0026quot;该轨迹导致的未来场景\u0026quot;的预判，而这正是强化学习里世界模型（world model）擅长的。\n但有两个技术痛点：\n图像级世界模型太慢：Diffusion 类方法多步去噪，不适合实时驾驶。 未来监督稀缺：真实数据每场景只有一条未来，而世界模型要对多条候选各想一个未来。 WoTE 的解法：在 BEV 空间做世界模型——BEV 表征紧凑，可单步前馈预测未来；且 BEV 仿真器（如 nuPlan）天然能提供未来 BEV 语义图与规则奖励当监督。\n2. 方法总览：四大组件 WoTE = 轨迹预测器 + BEV 世界模型 + 奖励模型 + BEV 空间监督，统一端到端。一次推理的数据流可以拆成下面 4 步（注意每一步都产出明确的张量，全程可微）：\n感知编码（Trajectory Predictor 前半）：多模态传感器（相机 + LiDAR）经 BEV Encoder（TransFuser 式）编码成统一 BEV 状态 $\\mathbf{B}_t \\in \\mathbb{R}^{h\\times w\\times c}$；同时用训练集专家轨迹 K-Means 出 $N=256$ 个轨迹锚。 轨迹细化（Trajectory Predictor 后半）：每个锚经 MLP 编码成 query，与 $\\mathbf{B}_t$ 做 cross-attention，再经 MLP 预测 offset 加回锚上，得到 $N$ 条 refined 轨迹 $\\hat{\\tau}^i$。这一步相当于\u0026quot;以 BEV 场景为条件，把粗糙锚雕成贴合当前场景的候选\u0026quot;。 未来预判（BEV World Model ★）：把每条 $\\hat{\\tau}^i$ 与 $\\mathbf{B}_t$ 拼成状态-动作对 $(\\mathbf{B}_t, \\mathbf{a}_t^i)$，送 Transformer Encoder 世界模型，循环预测未来 $K$ 步 BEV 状态 $\\mathbf{B}_{t+1}^i, \\dots, \\mathbf{B}_{t+K}^i$。得到 $N$ 条\u0026quot;如果走这条轨迹，未来场景会怎样\u0026quot;的序列。 打分选优（Reward Model）：把当前+未来 BEV 状态 concat，2D Conv 聚合 → 全局池化 → MLP，对每条轨迹预测奖励 $r_i$（含 imitation + simulation 两类）；最后 argmax(r_i) 选出最终轨迹 $\\hat{\\tau}^*$。 关键点回顾：第 3 步是 WoTE 区别于所有\u0026quot;只看当前状态打分\u0026quot;方法的地方——它先脑补未来，再基于未来打分，这正是\u0026quot;Online Trajectory Evaluation\u0026quot;的含义。\n2.1 Trajectory Predictor BEV Encoder：沿用 TransFuser，多模态（相机+LiDAR）编码成统一 BEV 特征图 $\\mathbf{B}_t \\in \\mathbb{R}^{h\\times w\\times c}$。 Trajectory Anchors：在训练集专家轨迹上 K-Means 聚类得 $N$ 个锚（默认 $N=256$）。 Trajectory Refinement：锚经 MLP 编码成 query，与 BEV 状态 cross-attention，MLP 预测 offset 加回锚上： $$\\hat{\\tau} = \\tau + \\text{MLP}(\\text{CrossAttention}(\\mathbf{TE}(\\tau), \\mathbf{B}, \\mathbf{B}))$$ 2.2 BEV World Model（核心创新）★ 给定 $N$ 条 refined 轨迹 $\\hat{\\tau}^i$ 与当前 BEV 状态 $\\mathbf{B}_t$，构造 $N$ 个状态-动作对 $(\\mathbf{B}_t, \\mathbf{a}_t^i)$：轨迹编码器（与上式共享权重）把 $\\hat{\\tau}^i$ 编码成动作嵌入 $\\mathbf{a}_t^i$。\n把 $\\mathbf{B}_t$ 展平成 $h\\times w$ 个向量，与动作嵌入拼接成 $hw+1$ 个 token $\\mathbf{F}_i$，送入 Transformer Encoder 世界模型： $$(\\mathbf{B}_{t+1}^i, \\mathbf{a}_{t+1}^i) = \\text{WorldModel}(\\mathbf{B}_t, \\mathbf{a}_t^i)$$ 并循环预测未来 $K$ 步： $$(\\mathbf{B}_{t+K}^i, \\mathbf{a}_{t+K}^i) = \\text{WorldModel}(\\mathbf{B}_{t+K-1}^i, \\mathbf{a}_{t+K-1}^i)$$ 关键点：BEV 状态很小（如 $h=w=8$），世界模型几乎不增算力。相比图像级世界模型的多步扩散，这是单步/少步前馈，实时友好。\n为什么用 Transformer Encoder 而不是循环网络做世界模型？ 因为 WoTE 要并行给 $N=256$ 条候选各预测未来，而不是串行滚一条。Transformer Encoder 把\u0026quot;当前 BEV 展平 + 动作嵌入\u0026quot;拼成 token 序列后一次前向就出未来状态，256 条候选只是 batch 维扩容，GPU 并行友好。这也是它能把延迟压到 ~18ms 的原因。\n2.3 Reward Model 奖励分两类（沿用 Hydra-MDP 设定）：\nImitation reward $r_{\\text{im}}$：模仿专家轨迹的程度。 Simulation reward $r_{\\text{sim}}$：由仿真器按 NC / DAC / TTC / Comf / EP 五项规则给出。 最终奖励（与 PDMS 同构）： $$r_{\\text{final}} = -\\Big(w_1\\log r_{\\text{im}} + w_2\\log r_{\\text{sim}}^{\\text{NC}} + w_3\\log r_{\\text{sim}}^{\\text{DAC}} + w_4\\log(5r_{\\text{sim}}^{\\text{TTC}} + 2r_{\\text{sim}}^{\\text{Comf}} + 5r_{\\text{sim}}^{\\text{EP}})\\Big)$$奖励模型把当前+未来 $K$ 步 BEV 状态都喂进去（而不仅是当前态），2D Conv 聚合 → 全局平均池化 → MLP 预测每条轨迹的奖励 $\\mathbf{r}_i$。最后 argmax 选最高奖励轨迹。\n这步是\u0026quot;online evaluation\u0026quot;的灵魂：普通评分器只看当前 BEV 状态判断\u0026quot;这条轨迹现在看起来好不好\u0026quot;；WoTE 的奖励模型额外吃进了\u0026quot;如果走这条轨迹，未来 $K$ 步的 BEV 会怎样\u0026quot;，等于让网络自己当了一回仿真器。比如一条轨迹当前不碰撞，但未来 3 秒会冲出可行驶区——只有看了未来 BEV 才能发现。这也是消融里\u0026quot;加未来状态预测 PDMS 从 83.2 → 85.6\u0026quot;的根本原因。\n2.4 BEV 空间监督（解决\u0026quot;未来稀缺\u0026quot;） 世界模型要为多条候选各想一个未来，但真实数据只有一条未来。WoTE 用 nuPlan BEV 仿真器生成监督：\nBEV 状态监督：把 BEV 状态上采样/转卷积解码成 BEV 语义图，用 Focal Loss 监督（前景类不平衡）： $$\\mathcal{L}_{\\text{BEV}} = \\text{FocalLoss}(\\mathbb{B}_{t+k}, \\mathbb{B}^*_{t+k})$$ 仿真奖励监督：仿真器 rollout 出未来场景，规则评估器给出目标奖励，用 BCE 监督： $$\\mathcal{L}^{\\text{sim}}_{\\text{reward}} = \\text{BCE}(r_{\\text{sim}}, r_{\\text{sim}}^*)$$ 模仿奖励监督：锚与专家轨迹 L2 距离做 softmax 得目标分布，用 Cross Entropy 监督。 轨迹监督：winner-take-all，只对最接近专家的锚的 refined 轨迹用 L1 监督。 为什么非得在 BEV 空间监督，而不能像别的世界模型那样在图像空间监督？ 两个原因：(1) 图像空间要\u0026quot;想象\u0026quot;多条候选各自的未来画面，计算爆炸且开放集难监督；(2) 驾驶日志每场景只有一条真实未来，图像级多未来监督根本无 GT。BEV 语义图则由 nuPlan 这类仿真器天然产出（它本就在 BEV 里建模地图与物体），且类别有限、Focal Loss 能搞定前景稀疏——于是\u0026quot;未来监督稀缺\u0026quot;被巧妙化解。\n总损失： $$\\mathcal{L}_{\\text{total}} = \\mathcal{L}_{\\text{BEV}} + \\mathcal{L}^{\\text{sim}}_{\\text{reward}} + \\mathcal{L}^{\\text{im}}_{\\text{reward}} + \\mathcal{L}_{\\text{traj}}$$ 训练 vs 推理的差异：训练时为了加速，论文预计算了基于轨迹锚的仿真结果（BEV 语义图 + 分数），训练时直接把锚送评估模块、用预存监督反传；推理时则对细化后的轨迹（而非原始锚）实时跑评估模块。换句话说，世界模型和奖励模型在推理时是\u0026quot;真算\u0026quot;的，训练时部分监督是\u0026quot;离线预存\u0026quot;的——这是工程上平衡算力与效果的巧思。\n3. 实验 3.1 NAVSIM（开环指标 PDMS） 方法 Traj. Eval. PDMS ↑ Hydra-MDP Model-free 86.5 TransFuser × 84.0 WoTE Model-based (BEV WM) 88.3 WoTE 用 256 条轨迹 + 基于世界模型的评估，超越之前的 model-free 方法 Hydra-MDP。在 NC/DAC/EP/TTC 各分项均领先。\n3.2 Bench2Drive（CARLA 闭环） 方法 Traj. Eval. DS ↑ SR ↑ UniAD Rule-based 45.81 16.36 TCP - 59.90 30.00 WoTE Model-based 61.71 31.36 闭环 Driving Score 比 TCP 高 1.81，验证\u0026quot;预判未来\u0026quot;在闭环也有效。\n3.3 消融（关键结论） 未来状态预测有用：加 BEV 世界模型预测未来，PDMS 从 83.2 → 85.6（表3）。 Imitation 与 Simulation 奖励互补：前者擅长 NC/TTC，后者擅长 DAC/EP，合起来最优（表4）。 循环预测步数：0s→2s→4s 的两段递归比直接 0s→4s 好（84.0 → 85.6），更细的时间步提供 richer 时序信息（表5）。 轨迹数：64→128→256 性能递增、增益递减，选 256 为默认；延迟仅 18.7ms（L20）。 4. 个人思考 1. \u0026ldquo;评估未来\u0026quot;比\u0026quot;生成未来\u0026quot;务实得多。 图像级世界模型想生成未来画面，算力爆炸且对决策未必有用；WoTE 只在 BEV 语义空间预测未来状态，目标从\u0026quot;好看\u0026quot;变成\u0026quot;能打分\u0026rdquo;，信息密度高、监督可得（nuPlan 直接给）。这是世界模型落地到规划的范式转移：世界模型不必生成像素，只需生成\u0026quot;能算奖励的状态\u0026quot;。\n2. BEV 空间是恰到好处的抽象层级。 太细（图像）算不动，太粗（标量）信息丢尽。BEV 语义图卡在中间——既保留空间结构（碰撞/可行驶区可算），又足够紧凑（8×8 网格）。这再次印证端到端驾驶里\u0026quot;BEV 作为通用接口\u0026quot;的价值。\n3. 可微的轨迹评估是端到端优化的关键。 规则评估（PDM）不可微、不能反传；WoTE 用神经网络奖励模型替代，使\u0026quot;评估\u0026quot;也能被梯度优化，规划与评估在同一框架内对齐。代价是可微奖励可能与真实 PDMS 有偏差，但实验表明对齐得很好。\n4. 局限与想象空间。 世界模型基于 Transformer Encoder 单步预测，对长时序、强交互（他车反应）的建模有限；用 nuPlan 仿真器监督也受限于其仿真保真度。若把 BEV 世界模型换成更强的潜空间动态模型（如 ResWorld 的时序残差），并接上 reactive traffic，评估质量还能再上台阶——这也是 NAVSIM-v2 闭环方向的自然延伸。\n延伸阅读 同榜单路线：SparseDriveV2 代码讲解（检索式评分） 闭环优化：TOAD 论文精读（把评分器当奖励做测试时搜索） 榜单背景：NAVSIM 排行榜深度分析 ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2504-01941/","summary":"WoTE（ICCV 2025, CASIA）指出：端到端规划器只生成轨迹却「盲目」选轨迹，缺少对未来后果的预判。它用一个 BEV 空间世界模型，给每条候选轨迹 rollout 出未来 BEV 状态，再由奖励模型打分挑最高奖励者。BEV 空间比图像级世界模型省算力，且能直接用 nuPlan 等 BEV 仿真器提供监督。NAVISIM 达 88.3 PDMS，Bench2Drive 闭环 Driving Score 61.71 创 SOTA。","title":"论文精读：WoTE — 用 BEV 世界模型做在线轨迹评估的端到端驾驶"},{"content":"📄 论文信息 项目 内容 标题 Anti-rollover Artificial Potential Field Motion Planning Method of an Autonomous Heavy Truck Optimised by Game Theory 作者 Zhilin Jin（金志龙）、Shaowei He（何少伟） 单位 同济大学（Tongji University，据公开信息，作者单位为车辆工程相关院系；具体院系以原文署名页为准） 期刊 Chinese Journal of Mechanical Engineering（机械工程学报英文版，CJME） 发表 Volume 37, Article number 95, 2024；接收 2024-07-22，在线发表 2024-08-23 DOI https://doi.org/10.1186/s10033-024-01073-x 关键词 Autonomous heavy truck、Motion planning、Anti-rollover、Artificial potential field、Game theory 开源 开放获取（Open Access），可下载 PDF 一句话概括：这篇论文给自动驾驶重卡的运动规划加了一道「侧翻排斥力」——它用五自由度动力学模型实时算出车辆离翻车还有多远（侧翻指标 RI），再把这个指标做成人工势场里的一道「排斥墙」，配合传统避障势场，用 MPC 在规划时就既躲开障碍物、又躲开「会翻车的状态」，最后用博弈论自动调好两种势场的权重。\n说明：本文核心信息（作者、期刊、5-DOF 模型含纵向/横向/横摆/簧上侧倾/簧下侧倾、APF 势场设计、MPC + 博弈论框架、LTR 与 RI 验证误差约 1.5%）均来自论文公开摘要、正文片段与摘要页，真实可靠。个别公式的具体编号与常数以原文为准，文中用「约」「即」等措辞处为对公开信息的合理转述。\n🤔 为什么这篇论文值得一个刚入行的 VLA 工程师读？ 当下端到端、VLA、世界模型是显学，大家讨论的多是「怎么让模型输出更平滑的轨迹」「怎么在 nuScenes 上刷分」。但如果你把同样的思路直接搬上重卡（semi-truck / heavy truck），会踩一个大坑：乘用车时代「不撞=安全」的假设，在重卡上直接失效。重卡重心高、载重大，一个在轿车身上只是「压线急转」的操作，在重卡身上可能直接把车甩翻。侧翻（rollover）是重卡致死事故的主因之一，而它和「有没有撞到东西」几乎是正交的两个安全维度。\n这篇 2024 年的 CJME 论文不玩大模型，它把问题钉死在一个非常工程、非常落地的点：在运动规划（motion planning）这一层，就把侧翻风险当成第一等公民来约束，而不是等下游控制器去「擦屁股」。对想做重卡 / 商用车自动驾驶的工程师，这种「动力学约束前置到规划层」的思路非常值得借鉴。\n🔧 先讲清楚几个名词（小白友好版） 动手读论文前，先把反复出现的词用大白话过一遍，后面就不会卡壳。\n侧翻（Rollover）：车辆绕纵轴（车头指向车尾的那根轴）翻倒，比如急转弯时外侧车轮离地、整辆车向侧面掀翻。对重卡来说，这是比追尾更致命的事故形态。 重心高（High Center of Gravity, CG）：重卡拉着货，质心离地面远。重心越高，同样大小的侧向力（转弯离心力）就越容易把车「掀」起来。 离心力（Centripetal / Lateral Force）：转弯时车其实在被迫做圆周运动，需要向圆心的力；在车里的人感觉到的「往外甩」的力就是离心力。车速越快、转得越急，这个力越大，侧翻风险越高。 DOF（Degree of Freedom，自由度）：描述一个刚体在空间里怎么动，需要几个独立坐标。比如平动有前后/左右/上下 3 个，转动有俯仰/横摆/侧倾 3 个，共 6 个。车辆模型会按需求「砍掉」一些自由度来简化。 LTR（Lateral Transfer Ratio，横向载荷转移率）：衡量左右两侧车轮承重差距的指标。它越接近 1（或 -1），说明左右载荷几乎全压到一边，另一侧车轮快离地了——也就是快翻了。下文会给出公式。 人工势场法（Artificial Potential Field, APF）：一种经典运动规划思想。把目标点设成一个「吸引力井」（越靠近目标势能越低），把障碍物设成「排斥山」（越靠近障碍势能越高），然后让车像小球滚坡一样沿势能梯度往下走，自然就到了目标又避开了障碍。 MPC（Model Predictive Control，模型预测控制）：一类控制/规划算法。它用一个车辆模型，在每个时刻「往前预测一小段未来」，解一个优化问题选出当前最优动作，然后只执行第一步，下一时刻再重算。擅长处理多约束（比如「不能侧翻」「不能撞」）。 簧上质量 / 簧下质量（Sprung / Unsprung Mass）：悬挂弹簧「上面」的车身、货箱叫簧上质量；弹簧「下面」的车轮、车轴叫簧下质量。重卡侧倾时，这两部分会各自以不同幅度左右摇摆，所以不能只当一个整体。 💥 背景：重卡侧翻，为什么是规划层必须管的事？ 传统规划的盲区 绝大多数自动驾驶运动规划（无论是采样、搜索还是优化）在评估一条轨迹「好不好」时，看的是：\n离障碍物够不够远（碰撞约束） 离全局路径偏不偏（跟踪误差） 舒不舒服、平不平滑（ jerk / 加速度约束） 这些约束本质上都在回答一个问题：会不会撞？ 但在重卡场景里，还有一个被严重忽视的维度：这辆车在这样的速度、这样的转向、这样的载荷下，会不会自己翻了？\n为什么重卡特别容易翻 用生活经验类比：你端着一碗满的水急转弯，水会往外侧泼；你头顶顶着一摞高高的书急转弯，书会比手里的杯子更容易倒。重卡就是那个「头顶高书」的选手：\n重心高：满载货箱后质心离地可能 2 米以上，远大于轿车。重心越高，侧向力产生的「翻倒力矩」越大。 质量大、惯性大：重卡总质量动辄几十吨，转弯需要的向心力巨大；一旦速度没控制好，离心力很容易超过轮胎能提供的侧向抓地力上限。 载荷会转移：转弯时车会向外侧侧倾，内侧车轮承重变小、外侧变大。当内侧车轮几乎不承重（载荷全跑到外侧），车辆就到了侧翻临界点。 挂车/货箱耦合：半挂重卡还有挂车自由度，主车侧倾会带动挂车摆动，进一步放大失稳。 论文把这件事说得很直白：重卡侧翻会导致车辆失稳，严重时会引发重大交通事故、巨额财产损失甚至危及生命。所以在做运动规划时，就必须把侧翻动力学考虑进去，而不是等车已经侧倾了再让底盘控制去救。\n🧮 重卡侧翻机理：离心力怎么把车掀翻的 想象一辆车以速度 $v$ 沿半径 $R$ 的弯行驶，它需要的向心加速度是 $a_y = v^2 / R$，方向指向圆心。在车身坐标系里，乘员感觉到的就是大小为 $m a_y$ 的离心力（往外甩），其中 $m$ 是质量。\n这个向外甩的力作用在重心高度 $h$ 处，会产生一个绕「车与地面接触线」的翻倒力矩 $M_{\\text{roll}} = m a_y h$。与此同时，重力 $mg$ 提供「把车按回地面」的恢复力矩 $M_{\\text{restore}} = mg \\cdot (T/2)$，其中 $T$ 是轮距（左右轮间距）。\n当离心翻倒力矩超过恢复力矩时，内侧车轮离地，车开始翻：\n$$ m a_y h \u003e m g \\frac{T}{2} \\quad \\Rightarrow \\quad a_y \u003e \\frac{g T}{2 h} $$右边的 $g T / (2h)$ 就是「静态侧翻阈值加速度」：重心越高（$h$ 大）、轮距越窄（$T$ 小），阈值越低，越容易翻。这正是重卡天生危险的结构原因。\n真实情况比这复杂：悬挂会侧倾、轮胎有侧向刚度、路面有超高/侧坡、载荷会动态转移。所以论文用动力学模型 + LTR 来精确刻画，而不是只看这个静态阈值。\n🚚 5-DOF 重卡动力学模型：到底含哪 5 个自由度 论文明确写明，其 5-DOF 模型包含以下自由度（引自摘要与第 2 节描述）：\n纵向运动（Longitudinal motion）：沿车头指向方向的前后平动，状态变量通常是纵向速度 $u$ 或纵向位移 $X$。 横向运动（Lateral motion）：垂直于车头方向的左右平动，状态变量通常是横向速度 $v$ 或横向位移 $Y$。对应上面「离心力把车往外甩」的那个方向。 横摆运动（Yaw motion）：车辆绕垂直地面轴的转动，也就是「车头转向、车尾摆动」的航向变化，状态变量是横摆角 $\\psi$ 与横摆角速度 $r$。 簧上质量侧倾运动（Sprung mass roll motion）：车身上半部分（车身 + 货箱）绕纵轴的左右侧倾摆动，状态变量是侧倾角 $\\phi_s$ 与侧倾角速度 $\\dot{\\phi}_s$。这是侧翻最直接的体现——车身歪了。 簧下质量侧倾运动（Unsprung mass roll motion）：车轮/车桥那一部分绕纵轴的侧倾摆动，状态变量是侧倾角 $\\phi_u$ 与侧倾角速度 $\\dot{\\phi}_u$。把簧上和簧下拆开，是为了更真实刻画悬挂的变形和轮胎受力。 注意：这里没有把「垂向（上下）运动」单独列成一个自由度，也没有列挂车的独立自由度（挂车相关自由度在部分重卡侧倾文献里会出现，但本篇的 5-DOF 明确是上述五项）。5 个自由度刚好覆盖「平动 2 + 转动 3（横摆 + 簧上侧倾 + 簧下侧倾）」，比常见的 3-DOF 自行车模型（纵向 + 横向 + 横摆）多了两个侧倾自由度，专门为了算侧翻。\n模型大致长什么样 基于达朗贝尔原理（D\u0026rsquo;Alembert），论文对这 5 个自由度列出动力学微分方程。我们不需要把每个方程抄出来，但要理解结构：它把轮胎侧向力、悬挂侧倾刚度/阻尼、离心惯性项耦合进一个状态空间。简化示意（非原文逐字，仅表达耦合结构）：\n$$ \\dot{x} = f(x, u_{\\text{ctrl}}) $$其中状态向量大致为：\n$$ x = [u,\\ v,\\ r,\\ \\phi_s,\\ \\dot{\\phi}_s,\\ \\phi_u,\\ \\dot{\\phi}_u]^T $$控制输入是转向角 $\\delta$ 与纵向力（加速/制动）$F_x$ 之类。由这个模型，论文推导出一个侧翻指标 RI（Rollover Index），用来度量当前状态离侧翻多远。\n📐 LTR 与侧翻判据：怎么才算「快翻了」 LTR 定义与公式 行业最常用的侧翻判据是 LTR（Lateral Load Transfer Ratio，横向载荷转移率）。它的物理含义是：左右两侧车轮垂直载荷之差，除以两侧垂直载荷之和。\n$$ LTR = \\frac{F_{z,L} - F_{z,R}}{F_{z,L} + F_{z,R}} $$中文解释：\n$F_{z,L}$：左侧（left）两个车轮总的垂直地面反力（承载重量）。 $F_{z,R}$：右侧（right）两个车轮总的垂直地面反力。 分子是「左右载荷差」，分母是「总载荷」。 边界含义：\n$LTR = 0$：左右载荷完全均匀，最稳。 $LTR = 1$：左侧载荷为 0、右侧扛下全部重量，意味着左侧车轮已完全离地——这就是侧翻临界（实际常取 $|LTR|$ 接近 1 为临界，或取一个安全阈值如 0.8）。 $LTR = -1$：反之，右侧离地。 所以侧翻约束可以写成：\n$$ |LTR| \\le LTR_{\\text{th}} $$其中 $LTR_{\\text{th}}$ 是安全阈值（比如 0.8 ～ 1.0，具体由车辆结构与法规定）。规划/控制只要保证全程 $|LTR|$ 不越线，就从指标意义上「不会翻」。\n实践中直接测左右垂直载荷很难，所以 LTR 常借助 3-DOF 侧倾模型、用可测的横向加速度 $a_y$、侧倾角速度 $\\dot{\\phi}$、重心高度 $h_{cg}$、轮距 $B$、侧倾刚度等参数换算（这也是很多文献把 LTR 表达成 $a_y, h, B, \\phi$ 的函数的原因）。论文里用 5-DOF 模型推导出的 RI 与 LTR 在稳态下做了对比验证。\n论文的 RI 与 LTR 验证 论文用所建 5-DOF 模型算出一个侧翻指标 $RI$，并和经典 $LTR$ 在相同工况下对比。公开结果显示：稳态下 $LTR \\approx -0.285$，$RI \\approx -0.288$，误差约 1.5%。这说明用该 5-DOF 模型推导的 RI 可以作为有效的侧翻稳定性度量，为后续把它做成势场提供可信基础。\n🧭 APF 规划框架：把「侧翻」也变成一道墙 人工势场法的核心思想前文提过：目标=吸引井，障碍=排斥山。论文在传统 APF 基础上做了两处关键扩展。\n1. 改进避障势场（Obstacle Avoidance APF） 传统 APF 常把车/障碍当点处理，距离用两点直线距离，这在矩形车体（重卡很长）下不严谨。论文的改进是：\n把自车与障碍物都建模为矩形； 在矩形外生成椭圆包络； 用椭圆之间的最小距离作为势场函数的因子。 这样做的好处（论文贡献点之一）：在纵向（车长方向）留出更大的安全距离，同时在横向（车宽方向）适当收紧，从而提高重卡避障安全性——毕竟重卡又长又重，刹停距离远，纵向必须留更多余量。\n2. 侧翻排斥势场（Anti-rollover APF）——本文最大亮点 论文提出：假设车辆当前行驶路径和车辆自身带有一个「虚拟的抗侧翻势场」 $U_{R1}$ 和 $U_{R2}$，则抗侧翻 APF 定义为：\n$$ arAPF = U_{R1} + U_{R2} $$其中与侧翻指标最相关的一项是把 RI 直接做成势能（引力形式，越大越「危险」）：\n$$ U_{R2} = \\frac{1}{2} k_R RI^2 $$ $k_R \u003e 0$：抗侧翻势场常数（权重）； $RI$：前面 5-DOF 模型算出的侧翻指标。 直觉：当车辆状态让 $|RI|$ 增大时（离侧翻更近），这个势能快速变大；而规划优化要「最小化总势能」，于是会主动把车往 $|RI|$ 小的状态推——相当于在状态空间里修了一道「侧翻排斥墙」。当 $|RI|$ 逼近临界，势能急剧上升，优化器被迫降低速度、减小转向、改变路径来「逃离」这个高势能区。\n这套势场框架在论文图 4 的系统架构里，位于「感知模块 -\u0026gt; 全局路径规划 -\u0026gt; 经博弈论优化的 MPC 运动规划 -\u0026gt; 被控重卡」这一链条中，作为 MPC 代价函数里的关键项。\n🔗 怎么把侧翻约束融进规划（MPC + 博弈论） MPC 代价里塞进三股势力 论文用 MPC 做运动规划，代价函数（cost）同时考虑三类目标，互相博弈：\n轨迹跟踪项：让车贴着全局路径走，误差小； 避障 APF 项：远离障碍物； 抗侧翻 APF 项：远离高 RI 状态。 示意（非原文逐字，表达结构）：\n$$ J = J_{\\text{track}} + \\lambda_{\\text{obs}} \\cdot APF_{\\text{obs}} + \\lambda_{\\text{roll}} \\cdot arAPF $$其中 $\\lambda_{\\text{obs}}$、$\\lambda_{\\text{roll}}$ 分别是避障与抗侧翻势场的权重系数。\n博弈论来调权重 难点在于：避障和抗侧翻两个势场经常「打架」。比如为了不侧翻要减速/外摆，但外摆又可能更靠近障碍。权重设小了防不住翻，设大了又过度保守、贴着障碍走。\n论文的贡献点之三：用博弈论（game theory）来优化这两个 APF 系数。把避障势场和抗侧翻势场当成两个「玩家」，在给定场景下求解一个均衡（比如纳什均衡意义上的权重分配），从而在具体工况下拿到「既躲得开障碍、又稳得住不翻」的最优折中路径。\n对 VLA 工程师的启发：当你有多条互相冲突的安全约束（不撞、不翻、舒适、合法），与其手写一堆 if-else 优先级，不如把它们都建成可加权的代价项，再用一个上层优化器（这里用博弈论，你也可以用贝叶斯、或者强化学习里学权重）去自动平衡。这种「多目标代价 + 上层权重搜索」的范式，和端到端里用奖励塑形（reward shaping）协调多个指标的思路是相通的。\n预测模型 MPC 的预测模型 = 前面建立的 5-DOF 动力学模型 + 运动学模型。每个控制周期往前滚一小段，预测未来状态会怎样演化，从而提前看到「现在这个转向，两秒后 RI 会爆」，在爆之前就改路径。这正是「规划层前置考虑侧翻」的工程实现。\n🧪 实验与结论（来自公开摘要与结论节选） 论文在第 5 节做了两种工况（公开信息提及为「two conditions」，典型如静态/非穿越障碍、与穿越障碍、车道边界等场景）的仿真分析，并用博弈论优化后的 MPC 规划器做了验证。结论要点：\n提出的改进避障 APF，增大了纵向安全距离、减小了横向安全距离，提升了重卡避障安全性。 提出的抗侧翻 APF 被集成进 MPC 代价函数后，有效降低了侧翻指标（RI），增强了侧倾安全性。 综合轨迹跟踪 + 抗侧翻 APF + 避障 APF 的 MPC 规划器，经博弈论优化系数后，能在多种场景下同时有效避障并防止侧翻。 也就是说，方法不是纸上谈兵：在相同场景里，融入 arAPF 的规划相比不融入的基线，侧翻指标显著下降，而避障性能没有牺牲。\n🔁 与博客 nuTruck 文章的呼应 如果你读过博客里关于 nuTruck 的文章，会发现两篇工作殊途同归，共同戳破一个幻觉：\n「乘用车时代，不碰撞就约等于安全」这条经验，在重卡上完全失效。\n具体呼应点：\nnuTruck 用 LTR / NRS（Nominal Rollover Stability，名义侧翻稳定度）这类指标，把「侧翻」从隐式风险变成可量化、可监控、可当成安全指标显式优化的对象。它证明重卡安全不能只看轨迹是否无碰撞，还要看这条轨迹把侧倾裕度压到了多低。 本篇 APF 论文 则更进一步：不只把侧翻当监控指标，而是直接把侧翻排斥势场 arAPF 写进规划的代价函数，让规划器在「生成轨迹」这一步就主动绕开高侧翻风险区。 两者合起来的结论很清晰：\n对重卡，侧翻是独立于碰撞的第三安全维度（碰撞、侧翻、失稳/偏离，三者不完全重叠）。 这个维度必须被显式建模、显式约束、最好显式进规划，而不是靠下游控制兜底。 这正好也回答了「为什么不能只靠 VLA 端到端输出轨迹」：端到端模型如果在训练数据里没见过侧翻临界工况（长尾且危险、难采集），它不会自发学会「这条看起来能避障的轨迹其实会翻车」。把 LTR/RI 这类物理约束作为硬边界或势场项前置注入，是更稳妥的工程做法。\n💡 个人思考：规划层必须前置考虑侧翻，下游控制兜不住 作为刚入行的工程师，我从这篇论文里读到的最关键一条，不是某个公式，而是责任分配问题：\n侧翻是不可逆的硬约束，不是可调的软目标。 一旦翻了，没有「小幅修正」的余地。因此它应该像「不能撞」一样，作为规划层的硬边界（或者高权重的势场墙），而不是留给底盘控制去救。 下游控制救不了规划埋的雷。 如果规划给了一条「速度过快 + 急转」的轨迹，底盘再强的 PID / LQR / 差动制动也只能在这条轨迹上做局部修正，很可能物理上已经没有不翻的解。规划阶段多算一步 5-DOF 预测，比控制阶段多十个执行器都管用。 把物理指标做成「势场/代价」是个通用套路。 不只是侧翻，越界、超速、乘员不适、能耗，都可以用类似的「风险场」思路融进优化。APF 这把老枪，在商用车安全约束前置上依然好使。 对 VLA / 端到端的警示。 大模型擅长学「统计上常见的好轨迹」，但侧翻是稀有且危险的尾部事件。要么在训练目标里注入 LTR/RI 这类物理约束（类似这篇的 arAPF 思想），要么在 VLA 下游接一个带动力学约束的规划/校验层。纯黑箱端到端直接上重卡，风险很高。 一句话：重卡自动驾驶的安全，第一关必须设在规划层；而规划层要管的，远不止「别撞」这一件事。\n📚 延伸阅读（相关文献方向） Rollover Prevention and Motion Planning for an Intelligent Heavy Truck（CJME, 2021, DOI: 10.1186/s10033-021-00605-z）：同一团队更早的工作，同样做重卡防侧翻运动规划，可作为本篇前传。 Anti-rollover control of a heavy-duty vehicle based on lateral load transfer rate（Vibroengineering Procedia, 2016）：用 4-DOF 模型 + LTR + 差动制动做防侧翻控制，适合理解 LTR 控制闭环。 Enhanced Anti-Rollover Control for Commercial Vehicles Under Dynamic Lateral Interferences（Designs, 2024）：用 7-DOF 模型 + LTR + 鲁棒 H∞ 控制，考虑侧风/侧坡等横向扰动，适合理解「干扰下的侧翻」。 Gaspar P. 等关于 heavy vehicle rollover 的 combined control structure（European Journal of Control, 2004）：早期把主动悬挂与差动制动结合的侧翻预防经典文献。 Larish 等 A new predictive lateral load transfer ratio for rollover prevention（IEEE TVT, 2013）：提出预测式 LTR，适合理解比静态 LTR 更超前的预警思路。 博客内 nuTruck 系列文章：理解「把侧翻做成显式安全指标」的另一条技术路线，与本篇互为补充。 🧾 小结 这篇 2024 CJME 论文的价值，不在于用了什么惊天动地的新模型，而在于它把一个被主流自动驾驶研究长期忽视的硬约束——重卡侧翻——干净利落地塞进了运动规划里：\n用 5-DOF 动力学模型（纵向、横向、横摆、簧上侧倾、簧下侧倾）精确刻画侧倾； 用推导出的 RI 侧翻指标（与 LTR 误差约 1.5%）量化风险； 首创 抗侧翻 APF（arAPF），把 RI 做成排斥势场； 在 MPC 代价里同时放轨迹跟踪、避障 APF、抗侧翻 APF； 用 博弈论 自动调避障与抗侧翻两股势力的权重。 对想做重卡 / 商用车 VLA 的工程师，它是一记提醒：当你在刷端到端指标时，别忘了重卡还有「翻车」这个乘用车没有的、会要命的第三安全维度。把它前置到规划，比任何下游补救都重要。\ndef anti_rollover_apf(ri, k_R): # ri: rollover index from 5-DOF model # k_R: anti-rollover field constant \u0026gt; 0 return 0.5 * k_R * ri * ri def total_cost(track_err, obs_apf, ar_apf, w_obs, w_roll): return track_err + w_obs * obs_apf + w_roll * ar_apf def mpc_step(state, model, horizon, w_obs, w_roll): best = None best_j = float(\u0026#34;inf\u0026#34;) for ctrl in candidate_controls(): traj = model.rollout(state, ctrl, horizon) ri = model.rollover_index(traj) j = total_cost( track_error(traj), obstacle_apf(traj), anti_rollover_apf(ri, k_R=1.0), w_obs, w_roll, ) if j \u0026lt; best_j: best_j = j best = ctrl return best ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-antirollover-apf/","summary":"本文精读 Jin 与 He 在 2024 年 Chinese Journal of Mechanical Engineering 发表的 Anti-rollover Artificial Potential Field Motion Planning Method of an Autonomous Heavy Truck Optimised by Game Theory。论文用 5-DOF 重卡动力学模型推导侧翻指标，提出把侧翻排斥势场（anti-rollover APF）融入 MPC 运动规划，并用博弈论优化势场权重，让重卡在规划阶段就同时兼顾避障与防侧翻。面向刚入行的 VLA 工程师，用大白话讲清侧翻机理、LTR 判据、五自由度模型与势场规划框架，并呼应博客 nuTruck 文章。","title":"论文精读｜Anti-rollover APF — 用五自由度动力学 + 侧翻排斥势场，让重卡规划阶段就避开翻车"},{"content":"📄 论文信息 项目 内容 标题 TruckDrive: Long-Range Autonomous Highway Driving Dataset 团队 Torc Robotics、Princeton University（Filippo Ghilotti, Edoardo Palladin, Samuel Brucker, Adam Sigal, Mario Bijelic, Felix Heide，三人等贡献） 发表 arXiv 2603.02413，CVPR 2026 代码/数据 https://github.com/torc-ai/TruckDrive / 项目主页 关键词 重卡自动驾驶、长距离感知、高速公路、多模态数据集、FMCW 激光雷达、4D 雷达、2D/3D 标注、端到端驾驶 一句话概括：TruckDrive 是一个站在半挂重卡上、专门为了「高速上要提前几百米看清路况」而采集的多模态感知数据集——它把 2D 标注推到 1000 米、3D 标注推到 400 米，并且用实验证明：当前最先进的自动驾驶模型在 150 米以外就「瞎了」，3D 感知任务性能暴跌 31% 到 99%。\n🖼️ 论文图片 采集车辆概览 TruckDrive 的采集平台基于一辆半挂重卡，搭载了全套长距离传感器套件。下图展示了采集车外观、传感器布局、以及典型的高速公路长距离感知场景：\nTruckDrive 采集车与高速公路长距离感知场景\n传感器套件细节 论文的传感器套件经过专门的长距离感知设计，核心包括 7 台长距 FMCW 激光雷达、10 台 4D 雷达和 11-15 路相机。下图展示了完整的传感器布局：\nTruckDrive 采集平台 — 半挂重卡的传感器部署概览\n各传感器的具体安装位置如下。其中激光雷达覆盖了车头、车顶和两侧，确保前方 400 米范围内无死角覆盖：\n7 台长距 FMCW 激光雷达 + 3 台短距高分辨率激光雷达分布\n4D 雷达的安装位置覆盖了车头保险杠区域和两侧，利用其全天候优势保障雨雾天气下的感知能力：\n10 台 4D FMCW 毫米波雷达安装位置\n多焦距相机系统是 TruckDrive 的另一个亮点——通过混合使用广角和长焦镜头，同时保证了近处的宽视野和远处的目标分辨率：\n11-15 路 8MP 环绕相机，混合焦距设计\n🤔 要解决什么问题？ 先解释几个名词（小白友好版） 在正式讲问题之前，先把文章里反复出现的几个词用大白话讲清楚，后面就不会卡壳了。\n感知（Perception）：自动驾驶系统用相机、激光雷达、雷达等传感器「看」世界的过程。相当于人的眼睛和大脑视觉皮层，负责回答「前面有什么、多远、在动还是静止」。 3D 目标检测（3D Object Detection）：在三维空间里给每个物体画一个带朝向的长方体框（bounding box），并标出它的中心坐标 $(x, y, z)$、长宽高和航向角。通俗说就是「不仅知道前面有辆车，还知道它在你前方 215 米、偏左 1.2 米、朝哪个方向开」。 多目标跟踪（Multi-Object Tracking, MOT）：把连续多帧里同一个物体认出来，给它们同一个 ID。比如第 1 秒看到的前方卡车，和第 3 秒看到的那辆，要判断是不是同一辆。 BEV（Bird\u0026rsquo;s-Eye View，鸟瞰图）：把相机、激光雷达看到的信息投影到「从上往下俯视」的坐标系里。想象无人机在车顶正上方俯拍，所有车、路、人都摊平在一张平面地图上，特别适合规划模块使用。 长尾场景（Long-Tail Scenario）：那些很少出现、但一出事就很严重的罕见情况，比如前方翻车、道路施工、逆行车辆。数据分布像一条长尾巴，大部分样本挤在常见场景，罕见场景样本极少。 域适应（Domain Adaptation）：模型在 A 场景（比如城市、轿车）训练，要在 B 场景（比如高速、重卡）也能用，这中间的「跨场景迁移」就叫域适应。重卡数据集和轿车数据集之间的差别，就是典型的域偏移。 端到端（End-to-End）/ VLA：端到端指系统直接从传感器原始输入映射到驾驶动作，中间不显式拆成「感知→预测→规划→控制」模块；VLA（Vision-Language-Action）则是把视觉、语言（指令/常识）和动作统一到一个大模型里。本文读者主要关心这类模型。 核心矛盾：轿车数据集喂不饱重卡 过去十年，自动驾驶研究基本是被 KITTI、nuScenes、Waymo Open、Argoverse 这类数据集「带歪」的——它们几乎全是城市、低速、短距场景。论文在引言里直接点破：这些数据集隐含地把整个领域往「短距感知 + 低速驾驶」方向偏置了。\n为什么这对重卡是致命的？因为一辆满载的半挂卡车：\n城市里轿车刹停可能只要二三十米，而满载重卡以 80-100 km/h 行驶时，光刹车就要 150-200 米才能停稳； 如果感知系统只「看」到 100 米，那等它发现前方有静止障碍物时，物理上已经刹不住了。 论文给出的核心数据：现有主流数据集的 3D 标注极少超过 80 米，有效感知范围普遍被限制在 100 米以内（nuScenes/Waymo 大约就是这样）。而重卡高速安全驾驶需要的是 300 米以上的可靠感知。这就是 TruckDrive 要填的「长距离鸿沟（long-range gap）」。\n论文的硬核结论 作者把当前 SOTA 自动驾驶模型放到 TruckDrive 上评测，发现：模型在 150 米以外就系统性失效，3D 感知任务的性能跌幅在 31% 到 99% 之间。注意，这不是缓慢衰减，而是「撞墙式」的断崖下跌——模型不是慢慢变弱，而是根本没见过这么远、这么稀疏的目标，直接「看不见」。这个 gap 当前架构和训练信号都补不上。\n🛠️ 数据集是怎么建起来的？ 传感器套件（专门为长距离设计） TruckDrive 最大的卖点之一，是它用的传感器是按长距离感知定制的，而不是把城市车的那一套搬上来。具体配置如下（数据来自论文与官网）：\n7 台长距 FMCW 激光雷达：型号是 AEVA Aeries II，不仅能测距离，还能测每个点的径向速度（也就是物体朝你靠近还是远离、速度多少）。有效测距约 400 米。 3 台短距高分辨率激光雷达：负责车周围近处的精细建模（比如贴近的挂车、路肩）。 11-15 路 8MP 环绕相机：分辨率 800 万像素，且焦距各不相同（有广角也有长焦），长焦相机专门负责把远处小目标放大看清。 10 台 4D FMCW 雷达：所谓 4D 是指除了传统的距离、方位、俯仰，还能测径向速度和提供更高的角分辨率，对雨雾天气特别鲁棒。 名词解释：FMCW 是「调频连续波」激光雷达，相对传统机械旋转激光雷达，它天生能顺便测速度、抗阳光干扰强，很适合高速。4D 雷达就是「能看高度 + 能测速」的新一代毫米波雷达。\n为什么需要这么多长距传感器？因为重卡车体本身就高（驾驶室离地 3 米以上），想把几百米外车道上的一辆小车看清楚，单靠一两台短距激光雷达根本扫不到——点云会随距离平方衰减，远处的物体回波极弱。所以论文用了 7 台长距雷达做互补覆盖。\n传感器精确安装位置 根据项目主页的技术规格，TruckDrive 采集车的传感器安装位置（相对于车辆后轴中心）如下表所示。这些精确的坐标信息对于跨传感器标定和 BEV 感知建模至关重要：\n传感器 数量 x (m) y (m) z (m) 说明 FMCW 长距激光雷达 7 +0.5 ~ +3.0 ±0.5 ~ ±2.5 +2.5 ~ +4.0 车顶前部阵列 + 两侧 短距激光雷达 3 −1.0 ~ +0.5 −0.8 ~ +0.8 +0.5 ~ +1.0 保险杠区域 长焦相机 6 +0.3 ~ +1.5 ±0.3 ~ ±1.5 +2.8 ~ +4.0 远距离视觉 广角相机 5-9 +0.3 ~ +3.0 ±0.2 ~ ±3.5 +2.8 ~ +4.0 环绕视觉覆盖 4D 雷达 10 −0.5 ~ +2.5 ±0.5 ~ ±3.0 +0.3 ~ +1.5 前后保险杠 + 侧面 表中坐标以车辆后轴中心为原点，x 正向为车头方向，y 正向为左侧，z 正向为上方。这种布局保证了前方 400 米、侧面 100 米和全方位后方的稠密覆盖，与传统乘用车数据集（nuScenes 仅 1 台激光雷达、Waymo 仅 5 台）形成鲜明对比。\nFMCW 激光雷达原理 TruckDrive 选择 FMCW 激光雷达而非传统 ToF（飞行时间）机械旋转雷达，一个关键原因是 FMCW 能直接测量每个点的径向速度。其原理是通过发射线性调频连续波，与回波混频后得到差频信号。差频的频率分量对应距离，相位变化则对应目标的径向速度：\n$$ v_r = \\frac{\\Delta\\phi \\cdot \\lambda}{4\\pi t} $$其中 $\\Delta\\phi$ 是连续 chirp 之间的相位差，$\\lambda$ 是激光波长，$t$ 是 chirp 时间间隔。这意味着每个激光点天然包含距离 + 径向速度信息，在高速场景中特别有价值——你可以直接判断前方目标是在靠近还是远离、速度差多少，而不需要像 ToF 雷达那样做帧间匹配才能算速度。\n4D 雷达的技术亮点 传统毫米波雷达只能输出距离、方位角和径向速度（所谓的 3D 雷达），而 4D 雷达在此基础上增加了俯仰角（elevation）测量能力和更高的角分辨率。TruckDrive 使用的 4D FMCW 雷达通过 MIMO（多输入多输出）天线阵列，在方位和俯仰两个维度都实现角度分辨，从而在点云层面形成类似激光雷达的稀疏点云——每个点都带有 $(x, y, z, v_r)$ 四维信息。\n这对重卡高速场景意义重大：\n高速上的坡道、桥梁、悬空标志牌需要俯仰角信息来区分——3D 雷达会把桥梁误判为前方障碍物； 雨雾天气下激光雷达衰减严重，4D 雷达的长波长（毫米波）穿透力强，可以作为冗余感知通道； 10 台雷达的冗余设计意味着即使部分雷达被泥污遮挡，系统仍能正常工作。 采集路线与规模 序列数量：3,828 条序列（sequence），在 2 年跨度内采集。 地理覆盖：横跨美国 8 个州（NM、TX、VA、NC、TN、AR、WV、AZ），多样性面积指标 1,261.3 km²，是 Waymo Open Dataset 的 16.5 倍。 季节与天气：覆盖全年四季（秋 48%、冬 32%、春 15%、夏 5%）和多种天气（80% 晴/多云/阴，10% 雾，10% 降水）。对重卡高速来说，雾和降水场景尤其关键，因为重卡刹不住、更怕恶劣天气。 每条序列时长：15-25 秒，平均自车轨迹长度 500 米。 道路类型：主要是高速（3,244 条），其次郊外（351 条）和城市（233 条）。 驾驶行为分布：45.8% 巡航/加减速，36.5% 变道/超车，5.4% 近距离加塞（cut-in），12.3% 复杂布局（施工区、路口、无保护转弯）。 光照覆盖：3,285 条白天，367 条夜晚，122 条黄昏，54 条黎明。 标注规模与范围 同步样本总数：47.5 万（475k）帧多模态同步样本。 密集标注帧：16.5 万（165k）帧，有完整人工标注。 无标注同步样本：31 万（310k）帧，留给自监督/半监督学习用。 2D 标注范围：最远到 1,000 米（图像上画框）。 3D 标注范围：最远到 400 米（点云里画立体框）。 支持的标注类型：3D 检测、2D 检测、多目标跟踪、深度估计、轨迹预测、规划、端到端驾驶。 关键点：大部分已有数据集在远处几乎没有标注，而 TruckDrive 在远处保持较高的标注密度。论文强调它「在距离维度上分布更均衡」，不像 nuScenes 那样大部分框都挤在 50 米以内。\n标注流水线 论文说他们的标注管线是「人工标注 + 自动化多视角补全 + 运动学精修」三件套：\n人工标注：基础的真值框由标注员画。 多视角自动补全：一辆车被多路相机/激光雷达看到，利用几何一致性把某些视角漏标的目标补全。 运动学精修（Kinematic Refinement）：利用目标的运动模型（速度、加速度）对框做时间上的平滑和纠正，减少抖动和漏帧。 这保证了即便在 400 米外、点云极稀疏的目标，也能有相对可靠的 3D 框。\n📏 距离维度分析 TruckDrive 的项目主页展示了一组关键的对比图——不同数据集在距离维度上的实例分布（instance distance distribution）。下图取自论文官方可视化，展示了 TruckDrive 与 nuScenes 在目标距离分布上的差异：\n实例距离分布对比（TruckDrive vs nuScenes）— TruckDrive 在远距离保持更均衡的分布\n从图中可以清楚看到，nuScenes 的数据分布呈现典型的「近距离偏置」：绝大多数标注框集中在 0-50 米范围内，50 米以外迅速衰减，100 米外几乎无标注。而 TruckDrive 在 0-50 米、50-100 米、100-200 米、200-400 米各区间内都有持续且稳定的实例分布。\n这种「距离维度上的分布均衡性」是 TruckDrive 最本质的贡献之一。它意味着：\n训练时，模型在每个距离段都能看到足够多的正样本，不会像 nuScenes 那样被近距离目标 dominate； 评测时，能按距离分桶算 AP（Average Precision），精准定位模型在哪个距离段失效； 为距离感知（range-aware）训练提供了数据基础，比如可以按距离对 loss 加权，或者做距离维度的课程学习。 这对 VLA/端到端模型尤为重要——如果训练数据里 90% 的目标都在 50 米内，模型自然会「近视」，而 TruckDrive 强迫模型学会「看远」。\n📊 与已有数据集对比 下面这张表把 TruckDrive 和常见的自动驾驶数据集放一起比。注意：部分对比数值（如 nuScenes/Waymo 的标注范围）来自论文 Table 1 的定性描述，具体数字以原论文为准。\n数据集 主导场景 3D 标注范围 2D 标注范围 传感器特点 标注帧规模 重卡/高速偏向 4D雷达 FMCW激光雷达 KITTI 城市/郊区（德国） ~80 m ~80 m 1 激光雷达 + 2 相机 约 1.5 万 否 否 否 nuScenes 城市（波士顿/新加坡） 约 100 m（极少超 80 m） 约 100 m 6 相机 + 1 激光雷达 + 5 雷达 4 万关键帧 否 否 否 Waymo Open 城市为主 约 100 m 约 100 m 5 激光雷达 + 相机 20 万+ 否 否 否 Argoverse 2 城市/郊区 约 100 m 约 100 m 7 相机 + 2 激光雷达 10 万+ 否 否 否 ONCE 多样（含高速） 约 100 m 约 100 m 激光雷达 + 相机 100 万（含大量无标注） 弱 否 否 MAN TruckScenes 重卡环绕（城市/仓运） 约 100 m 约 100 m 6 相机 + 4 激光雷达 + 6 雷达 约 2 万关键帧 是（重卡但短距） 否 否 HICODA 高速交叉口 有限 有限 激光雷达 + 相机 较小 高速但规模小 否 否 OpenCDA 协同驾驶仿真 仿真 仿真 多智能体仿真 仿真为主 否（仿真） 否 否 aiMotive 城市/高速（欧洲/美国） ~120 m ~120 m 12 相机 + 4 激光雷达 + 12 雷达 约 50 万+ 弱 否 否 TruckDrive 高速/重卡 400 m 1000 m 7 长距 + 3 短距激光雷达、10 台 4D 雷达、11-15 相机 16.5 万密集标注 / 47.5 万同步 是（高速重卡长距） 是（10台） 是（7台） 最关键的差异一句话总结：别人都在 100 米内卷，TruckDrive 把标准拉到 400 米（3D）和 1000 米（2D），而且专门站在重卡上采——这是别人没有的「域」。此外，TruckDrive 是唯一同时配备 FMCW 激光雷达和 4D 雷达的公开数据集，这两个传感器在高速场景中天然适合测速，为模型提供了额外的速度模态。\n🧪 核心方法与基准实验（论文做了什么评测） 实验设计逻辑 论文不只是「丢个数据集出来」，它还做了诊断性基准实验来佐证「长距离 gap 真实存在」。逻辑是：\n拿当前 SOTA 的感知/端到端模型（论文里提到的是当时先进的驾驶模型），在 TruckDrive 上按距离分桶评测。 看模型在 0-50 m、50-100 m、100-150 m、150-200 m、200-400 m 各区间的 3D 检测/跟踪表现。 主要发现 断崖在 150 米：模型在 150 米以内基本还能用，超过 150 米性能断崖式下跌。 跌幅 31%-99%：不同任务、不同模型的跌幅区间。越是依赖近距离稠密点云的任务，远处跌得越狠，有些甚至接近「完全失效」（99%）。 原因指向训练偏置：作者认为这不是模型架构的小修小补能解决的，而是因为现有模型是在「短距城市数据」上训练出来的，训练信号里根本没有「远处小目标」这个分布。 对 VLA 工程师的启示：如果你的端到端模型只在 nuScenes 级别的数据上训过，那它天然就有「近视」缺陷。TruckDrive 这类数据，是验证模型是否真的具备长距离感知能力的试金石。\n🚛 重卡自驾为什么更难（独立小节，重点展开） 这一节单独拎出来讲，因为这是 TruckDrive 存在的根本理由，也是刚入行的同学最容易忽略的点。\n1. 车重导致制动距离极长 一辆空载半挂约 15 吨，满载可以到 36-40 吨。动能和速度平方成正比，和质量成正比：\n$$E_k = \\frac{1}{2} m v^2$$质量 $m$ 是轿车的 10-20 倍，速度 $v$ 在高速上又是 80-100 km/h。结果就是：轿车 100 km/h 刹停约 40-50 米，满载重卡要 150-200 米。这意味着感知系统必须提前几百米就「看见」风险，否则物理上救不回来。\n2. 挂车铰接导致轨迹非刚性 轿车是一个刚体，车头和车尾走的是同一条线。半挂卡车是 tractor（车头）+ trailer（挂车）通过鞍座铰接的两段式结构：\n转弯时挂车内侧会「内切」，走比车头更紧的曲线； 高速变道或避让时，挂车会摆动（trailer sway），像被拖着的尾巴甩动； 倒车、窄路掉头时，车头和挂车角度可以差很大。 这对感知和规划的影响：你不能把整辆车当成一个长方体去预测轨迹，要考虑挂车的摆动相位和延迟。TruckDrive 采的是真实半挂，天然包含这种非刚性运动。\n3. 盲区大 重卡驾驶室高 3 米以上，带来几个致命盲区：\n前方近盲区：车头正下方、引擎盖前方一大片区域，司机（和传感器若装太低）根本看不见贴近的小型车辆、行人、摩托车。 侧后方盲区：挂车两侧和正后方是大块「看不见」区域，变道加塞时极易出事。 A 柱/后视镜遮挡：重卡 A 柱粗、双大后视镜占视野，相机如果照搬轿车位置，会被这些结构挡住。TruckDrive 的相机布局和焦距专门考虑了重卡车体遮挡问题。 4. 高速场景对感知的独特要求 高速上没有红绿灯、没有行人突然窜出，但相对速度极大。你以 90 km/h 开，前方慢车以 60 km/h 开，相对速度 30 km/h（约 8.3 m/s）。如果感知只看到 100 米，你只有约 12 秒反应时间，且其中还要预留刹车距离。想要从容变道或减速，必须看到 300-500 米外。\n制动距离的物理计算 制动距离由车辆初速度和地面摩擦系数决定，基本公式为：\n$$ d = \\frac{v^2}{2\\mu g} $$其中 $v$ 是初速度（m/s），$\\mu$ 是轮胎-路面摩擦系数（干燥沥青约 0.7-0.8，湿滑路面约 0.4-0.5），$g$ 是重力加速度（9.8 m/s²）。\n对于轿车 $m = 1.5t$，100 km/h（约 27.8 m/s）下的制动距离： $$ d_{\\text{car}} = \\frac{27.8^2}{2 \\times 0.75 \\times 9.8} \\approx 52.5 \\text{ 米} $$对于满载重卡 $m = 40t$，制动距离长很多，除了摩擦系数因素外，还有刹车系统响应延迟和轮胎热衰减。实际工程中，重卡 100 km/h 制动距离约为 150-200 米。这意味着：\n感知系统需要在 200 米外就完成「检测 → 分类 → 跟踪 → 预测」的完整流水线，才能在物理极限距离之外留出足够的安全余量。\n安全跟车距离计算 高速公路上的安全跟车距离常用「3 秒规则」估算：与前车保持至少 3 秒的时距。在 100 km/h（27.8 m/s）下，3 秒对应：\n$$ d_{\\text{safe}} = v \\cdot t = 27.8 \\times 3 \\approx 83 \\text{ 米} $$但这只是轿车标准。重卡由于制动距离长、反应延迟大，行业普遍推荐 5-7 秒时距：\n$$ d_{\\text{truck safe}} = 27.8 \\times 6 \\approx 167 \\text{ 米} $$再加制动距离的安全余量，重卡感知系统需要可靠覆盖 300 米以上。而 TruckDrive 的 3D 标注延伸到 400 米，正是为满足这一物理需求。\n感知距离需求对比图 下图直观展示了乘用车与重卡在感知距离需求上的巨大差异：\n乘用车 vs 重卡感知距离需求对比 — 红色虚线表示当前模型在 150 米处的失效边界\n从图中可以看到：\n乘用车的有效感知范围约 100 米（蓝色区域），制动距离约 40-50 米（绿色区域），两者基本匹配； 重卡的制动距离就达 150-200 米（橙色区域），要求感知系统覆盖 300-500 米（红色区域）； **150 米断崖（红色虚线）**代表当前 SOTA 模型在 TruckDrive 上验证的失效边界——乘用车的感知需求刚好在这条线以内，而重卡的需求远远超出。 一句话：高速把「感知距离」从「加分项」变成了「保命项」。\n🔍 重卡感知的独特难点（工程视角） 除了上面讲的「更难」物理原因，落到感知算法本身，还有几个具体坑：\n远处目标点云极稀疏：400 米外的一辆轿车，在激光雷达里可能只有十几个点甚至几个点。传统基于稠密点云的检测头（如 PointPillars、CenterPoint）在远处直接「点不够用」。 长焦相机的标定与同步：多焦距相机 + 多激光雷达 + 多雷达，时间同步和空间标定难度指数级上升。TruckDrive 专门讲了 cross-modal synchronization（跨模态同步）策略。 类别极度不平衡：高速上 95% 是轿车/卡车/护栏，行人、逆行、翻车等长尾极少，但模型必须对这些极少类别保持敏感。 天气鲁棒性：高速重卡最怕雾和暴雨，而 4D 雷达在恶劣天气下比激光雷达稳，所以论文特意堆了 10 台 4D 雷达做冗余。 域适应：在轿车城市数据上预训练的模型，直接上重卡高速会「水土不服」——视角更高、目标更小更远、车体运动模式不同。 💡 个人思考 为什么重卡自驾和乘用车是「两件事」 很多人以为「自动驾驶算法通用，换个车就能跑」。TruckDrive 这篇论文用数据打了这个想法的脸：\n乘用车数据集定义的「好感知」是 100 米内框得准； 重卡定义的「够用感知」是 400 米外还能发现静止障碍。 这是需求层面的根本不同，不是调参能抹平的。重卡自动驾驶公司（如 Torc、Aurora、Kodiak）之所以自己采数据，就是因为公开数据集根本覆盖不到他们的运营域（operational design domain, ODD）。\n对端到端 / VLA 模型的启示 别迷信「城市 SOTA」：一个在 nuScenes 上 PDMS 很高、规划很顺的 VLA，放到高速重卡上可能 150 米外就「瞎」。长距离感知能力应该成为 VLA 评测的硬性指标。 长焦视觉 + 雷达融合是刚需：纯视觉在远处像素太少，纯激光雷达在远处点太稀，4D 雷达的速度测量是高速场景的「安全带」。VLA 如果要上重卡，输入模态里大概率不能少了雷达。 训练数据的「距离分布」要重新设计：现在大部分模型 loss 在近距离目标上占主导，远处目标贡献小。要显式地对远距离目标加权，或者做课程学习（curriculum learning）让模型先学近再学远。 世界模型也要「看得远」：端到端模型常配合世界模型做未来预测。如果感知输入在远处就断了，世界模型预测 3 秒后的场景也会失真——而重卡恰恰需要 3-5 秒的长时域规划。 长距离感知的技术挑战：为什么现有 BEV 会失效 当前主流的 VLA 和端到端模型大多基于 BEV（鸟瞰图）感知范式——将多视角图像或点云投影到统一的 BEV 网格上，然后用 transformer 做检测。这类模型在 TruckDrive 数据上会遇到几个根本性问题：\n感受野与网格分辨率的矛盾：BEV 网格通常采用固定分辨率（如 0.5 m/pixel）。如果要覆盖 400 米范围，BEV 网格尺寸会变得极大（400 × 400 = 160,000 个网格单元），计算量暴涨；如果保持网格数量不变，分辨率就下降到每格数米，远处的小目标（如 400 米外的一辆轿车，在 BEV 中仅占 2-3 个像素）根本无法被检测头有效识别。\n距离依赖的特征衰减：现有注意力机制对所有距离一视同仁，但远处目标的特征天生就弱——点云更稀疏、图像像素更少。标准 transformer 的 attention 权重受距离影响极小，导致模型把宝贵的计算资源浪费在近处高密度目标上，而远处的重要目标被淹没。\n训练信号的分布偏置：即使模型架构本身能支持长距离，如果训练数据中 90% 的目标都在 50 米内，loss 会被近距离目标主导，梯度更新也主要优化近距离性能。这也是为什么论文强调「距离分布均衡」是 TruckDrive 最核心的进步之一。\n可能的解决方向：距离感知训练 一种可行的思路是引入距离感知（range-aware）训练策略：\n按距离分桶加权 loss：将 200-400 米区间目标的基础 loss 乘以一个大于 1 的权重系数，迫使模型关注远距离目标。 课程学习（curriculum learning）：先让模型在 0-100 米数据上预训练收敛，然后逐步引入 100-200 米、200-400 米的数据，类似于人类先学近处再学远处。 距离条件化特征（range-conditioned features）：在 BEV 检测头中引入距离先验，让模型知道「这个位置的物理意义是 300 米外」，从而调整对特征稀疏度的期望。 TruckDrive 的 16.5 万密集标注帧使得上述策略成为可能——如果数据本身在远处没有标注，再好的训练策略也巧妇难为无米之炊。\n一点批判性看法 TruckDrive 目前是「感知为主」的数据集，论文明确说不含物理/动力学参数（没有车辆控制量、轮胎力、挂车摆动动力学真值）。这意味着它适合做感知、预测、规划的开环评测，但不适合直接做控制闭环仿真。想做重卡动力学相关的研究，还得配合 MAN TruckScenes 或专用仿真器（如 CARLA 的重卡扩展、或 TruckSim）。另外，47.5 万样本对现代大模型来说不算「海量」，后续是否会有更大的「TruckDrive v2」值得关注。\n不过，从纯感知数据集的维度看，TruckDrive 填补了一个极其重要的空白——它让社区第一次可以在真实的「重卡 + 高速 + 长距离」运营域上评测感知模型。对于所有声称做「通用自动驾驶」的研究组来说，不在 TruckDrive 上跑一下，你都不知道自己的模型多远就「瞎」了。\n📚 延伸阅读 下面列出与本文主题相关的方向，方便刚入行的同学按图索骥：\nMAN TruckScenes：同样是重卡多模态数据集（MAN 卡车出品），但偏城市/仓运短距，和 TruckDrive 互补，适合做「重卡域」内的对比。 nuScenes / Waymo Open / Argoverse 2：理解「城市短距基准」长什么样，才知道 TruckDrive 改了什么。 ONCE：大规模、含大量无标注帧，适合自监督学习，可配合 TruckDrive 做域适应实验。 HICODA：高速交叉口数据集，规模小但场景专注，适合研究高速交互。 OpenCDA：协同自动驾驶仿真框架，含多车通信，可做重卡编队（platooning）仿真。 Seeing Through Fog / A*3D：恶劣天气、主动学习标注相关，理解重卡最怕的雾天怎么采数据。 BEVFormer / Sparse4D / UniAD：感知与端到端架构论文，可拿来在 TruckDrive 上复现「长距离 gap」实验。 FMCW 激光雷达与 4D 雷达入门：理解为什么 TruckDrive 选这两类传感器，推荐搜 AEVA Aeries II 的技术白皮书。 🧾 小结 TruckDrive 不是又一个「城市自动驾驶数据集」，它是第一个把重卡 + 高速 + 长距离作为一个完整运营域、用定制传感器套件认真采集并标到 400 米（3D）/1000 米（2D）的公开基准。它用一组触目惊心的数字（150 米外暴跌 31%-99%）提醒整个社区：我们引以为傲的 SOTA 模型，其实都是「近视眼」。对于做 VLA、端到端驾驶的工程师来说，这篇论文最该记住的一句话是——如果你的模型没在 400 米外见过目标，那它就不算真的会开高速重卡。\n本文数据均来自 arXiv:2603.02413（CVPR 2026）公开版本及官方项目主页/GitHub，部分对比表中的已有数据集数值为论文定性描述或公开常识，引用时请以原论文 Table 1 为准。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-truckdrive/","summary":"TruckDrive 是 Torc Robotics 与普林斯顿大学在 CVPR 2026 提出的面向半挂重卡的高速公路长距离多模态感知数据集，含 47.5 万同步样本、16.5 万密集标注帧，2D 标注延伸到 1000 米、3D 标注延伸到 400 米，配备了 7 台长距 FMCW 激光雷达、10 台 4D 雷达与 11-15 路多焦距相机。本文用大白话拆解其传感器架构（含完整的传感器位置坐标表）、标注流水线、与 nuScenes/ONCE 等数据集的定量对比，并深入分析重卡制动距离公式、高速场景对感知的独特要求（300-500 米安全感知窗口），以及当前 VLA 模型在 150 米处系统性失效的原因。文章还包含感知距离需求对比图、TruckDrive 车辆传感器部署实拍、以及范围分布图等多个可视化素材。","title":"论文精读｜TruckDrive — 面向重卡的长距离高速公路感知数据集，把感知边界推到 1000 米"},{"content":"项目简介 一个持续更新的自动驾驶技术博客，定位为个人作品集与技术沉淀。内容以「读得懂、用得上」为原则，兼顾深度与可读性。\n我做了什么 论文精读 66 篇：覆盖 VLA、世界模型、端到端、BEV 感知、扩散规划等核心方向。 知识点拆解 62 篇：把复杂概念拆成可消化的小块，配公式与图示。 代码级讲解 2 篇：DiffusionDrive、SparseDriveV2 的逐文件、逐函数拆解，并补回「自己跑起来」实操章节。 成果 130+ 篇原创内容，垂直聚焦自动驾驶，形成强领域信号。 所有公式经 KaTeX 校验零硬错，代码块规范统一，注重阅读体验。 相关链接 博客首页：Elon\u0026rsquo;s AD Insight 分类浏览：论文精读、知识点、代码 ","permalink":"https://auto-driving-blog.pages.dev/posts/projects/blog-series/","summary":"累计 60+ 篇自动驾驶论文精读与多篇代码级讲解，覆盖 VLA、世界模型、端到端、扩散驾驶策略等方向。","title":"自动驾驶论文精读与源码拆解系列"},{"content":"📄 背景：NAVSIM 为何成为必争之地 NAVSIM 自 NeurIPS 2024 发布以来，已成为端到端自动驾驶规划的事实标准benchmark。它用非反应式仿真（non-reactive simulation）在开环框架下计算闭环相关性更强的指标：\nv1 用 PDMS：一套\u0026quot;是否安全合规\u0026quot;的多子指标加权分数； v2 升级为 EPDMS：扩展车道保持、红绿灯合规、方向合规和扩展舒适度等子指标； v2 还推出 navhard 两阶段评测：Stage 1 在原始场景评估 + Stage 2 在 3DGS 生成的偏移场景上再评估，专门测试规划器的鲁棒性。 截至 2026 年 7 月，NAVSIM 排行榜上的竞争已经白热化——Top 方法的 PDMS 从 2024 年的 66 分飙升到 94+，navhard 从个位数冲到 55。这不是一两个技巧的堆叠，而是整个技术路线的快速迭代。\n一句话结论：NAVSIM 是当下端到端规划最公平的\u0026quot;高考\u0026quot;——所有方法在同一批场景、同一套官方脚本下比分数，因此榜上数字比论文自报更可信。\n三句话读懂本文 榜单在比什么：模型对 12,146 个挑战场景各输出一条轨迹，官方服务器用 PDMS/EPDMS（一套\u0026quot;是否安全合规\u0026quot;的多指标加权分数）打分取均值。 谁在领跑：v1 navtest 上 Scoring-based（CLOVER 94.5）最稳；v2 navhard 难例榜上 World Model（DriveFuture 55.5）反超人类；VLA+GRPO 是上升最快的路线。 怎么读本文：先看图建立评测流程心智模型 → 再看数据集拆分（避免被\u0026quot;9000/1000/2146\u0026quot;误导）→ 最后按四大路线逐家拆架构。 本文结构导航 排行榜全景 — 三张榜 Top10 速览 数据集与评测协议 — 拆分关系图 + 常见误解澄清 评测指标详解 — PDMS/EPDMS 公式与计算链 四大技术路线架构详解 — 11 家方法逐一看 技术路线对比与个人思考 — 趋势判断 NAVSIM 评测流程一图流 一句话：模型出轨迹 → 丢进非反应式仿真 → 算多个子指标 → 聚合成 PDMS/EPDMS → 全场景取均值。\n图1：NAVSIM 评测流程。所有榜单分数的产生都遵循这条链路——理解它，就理解了为什么\u0026quot;子指标\u0026quot;比\u0026quot;像不像人驾\u0026quot;更重要。\n一个重要提醒：本文区分两类分数来源：\n官方排行榜（Leaderboard）：通过 HuggingFace 提交、由官方评估服务器计算的分数，navtest 排名来自 AGC2024-P/e2e-driving-navtest，navhard 排名来自 AGC2025/e2e-driving-navhard arXiv 宣称（Reported）：论文中自我报告的结果，可能未提交到官方排行榜或提交了但未公开 这两者可信度不同——官方榜单一视同仁、可复现；arXiv 宣称可能有实验环境差异。\n📊 排行榜全景 NAVSIM v1 navtest（PDMS 排名） 排名 方法 PDMS 来源 路线 发表处 1 CLOVER 94.5 官方榜 Scoring-based arXiv 2605.15120 2 ExploreVLA 93.7 arXiv VLA+WM+RL arXiv 2604.02714 3 Centaur 92.1 官方榜 Scoring+TTT arXiv 2503.11650 4 SparseDriveV2 92.0 官方榜 Scoring-based arXiv 2603.29163 5 Hydra-SE 91.87 官方榜 Scoring-based 2025 6 Hydra-MDP 91.26 官方榜 Scoring-based NeurIPS 2024 7 DriveFuture 90.7 arXiv World Model arXiv 2605.09701 8 DriveVLA-W0 90.2 官方榜 VLA+WM ICLR 2026 9 AutoVLA 89.1 arXiv VLA NeurIPS 2026 10 WorldRFT 87.8 arXiv WM+RL AAAI 2026 NAVSIM v2 navtest（EPDMS 排名） 排名 方法 EPDMS 来源 路线 备注 1 Human 94.5 官方榜 人类 上限参考 2 Metis 90.3 官方榜 WAM arXiv 2606.15869 3 CLOVER 90.4 官方榜 Scoring-based 87.2 Variant 4 AutoDrive-P³ 89.9 官方榜 VLA+CoT+RL perception=true 5 DriveFuture 89.9 arXiv World Model 未在官方榜出现 6 EponaV2 88.9 官方榜 WM+Flow perception=false 7 ExploreVLA 88.8 arXiv VLA+WM+RL 未在官方榜出现 8 DriveLaW 88.6 官方榜 VLA - 9 PWM 88.2 官方榜 - - 10 DriveWorld-VLA 86.8 官方榜 VLA+WM - NAVSIM v2 navhard（EPDMS 排名，两阶段） 排名 方法 EPDMS 来源 路线 1 DriveFuture 55.5 arXiv宣称为#1 World Model 2 DrivoR 54.6 arXiv - 3 SimScale 53.2 arXiv 数据增强 4 GuideFlow 51.5 arXiv Diffusion 5 Expert 51.3 官方榜 人类专家上限 6 ZTRS 45.5 arXiv - 7 World4Drive 34.9 官方榜 World Model 8 Metis 32.2 官方榜 WAM 9 MindDrive 30.9 arXiv - 10 LTF 24.4 官方榜 Baseline navhard 的分数整体很低（Human Expert 也才 51.3），因为 Stage 2 的 3DGS 生成场景引入了观测偏移，会大量暴露规划器在分布外场景下的脆弱性。DriveFuture 以 55.5 超越人类上限本身就是一件有意思的事。\n🗂️ 数据集与评测协议：大家到底在跑什么 在比较分数之前，必须先说清\u0026quot;榜单上的分数到底是在哪批数据上算出来的\u0026quot;。NAVSIM 不是一个从零采集的数据集，而是建立在 OpenScene（nuPlan 的降采样再分发版，约 120 小时城市驾驶、2Hz、每帧 8 路 1920×1080 环视相机）之上的场景过滤器 + 评测框架。\n基础数据集划分（OpenScene）。OpenScene 自身提供 trainval（训练+验证，大）、test（测试，小）、mini（演示）三个标准划分。NAVSIM 在这之上叠加\u0026quot;困难场景过滤\u0026quot;，得到研究论文最常用的三个拆分。官方论文（NeurIPS 2024）给出的精确规模是：\n拆分 基础 用途 官方规模（样本数，2Hz 帧） navtrain OpenScene trainval 训练集 103,288 navtest OpenScene test v1 评测集（PDMS） 12,146 navhard_two_stage OpenScene test v2 难例评测集（EPDMS，两阶段） 450 真实 + 5462 合成 这里澄清一个常见误解：navtrain 的 10 万级样本来自 OpenScene 的 trainval（即你印象里\u0026quot;用来训练的那个大划分\u0026quot;），navtest 的 1.2 万样本来自 OpenScene 的 test（即\u0026quot;评测集\u0026quot;）——navtrain 负责训练、navtest 负责出 PDMS 分数，二者场景是允许重叠的（NAVSIM 的 train/test 过滤基于同一批日志做了不同难例筛选，不像标准机器学习那样严格不交叠）。所谓 \u0026ldquo;1000 calib / 2146 val\u0026rdquo; 是混淆了具体数字：真实官方数字是 训练 103,288、评测 12,146（12,146 容易被记成 2146，是少看了一位）。一句话总结：大家刷的 NAVSIM v1 navtest 分数，就是模型在 OpenScene-test 上过滤出的 12,146 个挑战性场景上跑非反应式仿真算出来的 PDMS 均值。\n关键约束：navtest / navhard 这些测试拆分禁止用于训练（防止刷榜），可用其他公开数据或预训练权重，但必须在技术报告里声明数据使用。\n一个必须澄清的社区误解：navtest 不是\u0026quot;9000 训练 / 1000 calib / 2146 评估\u0026quot; 经常有人（包括不少初学者笔记）把 NAVSIM 的拆分记成\u0026quot;navtest 里 9000 条训练、1000 条校准、2146 条评估\u0026quot;。我专门去查了官方文档、NeurIPS 2024 论文原文、GitHub issue（#139、#177 等）和主流论文的写法，这个说法是错的，没有任何官方或主流论文把 navtest 切开当训练集用。它的来源是把三个不同概念混在了一起：\n\u0026ldquo;2146\u0026rdquo; 是 \u0026ldquo;12,146\u0026rdquo; 少看了一位 —— 这正是 navtest 的真实总量，不是它的一个子集。 \u0026ldquo;9000 训练\u0026rdquo; 对应的是 navtrain，但 navtrain 是 103k 而不是 9k —— 你记的数量级偏小（可能把 10 万级的\u0026quot;10\u0026quot;看漏了）。 \u0026ldquo;1000 calib\u0026rdquo; 在 NAVSIM 官方拆分里不存在，但方向上有个影子：官方其实在 navtrain 内部提供了一份固定的验证集 val_logs（见下一节代码实证）。需要澄清的是，之前流传的\u0026quot;85k 训练 / 18k calib\u0026quot;口径并不准确——val_logs 是按日志（log）数切的 2730 条 log，而非按帧数的万级划分；团队确实会在训练集内部划出一部分做验证（calibration），这是从 navtrain 里划的、是官方固定划分，不是从 navtest 里划的。 所以正确的标准用法是：navtrain（~103,288）全程训练、navtest（~12,146）全程评测，二者场景允许重叠（官方文档明说 \u0026ldquo;the NAVSIM splits include overlapping scenes\u0026rdquo;），且 navtest 明文禁止用于训练。任何把 navtest 当训练集的做法，一旦提交官方排行榜都会被判违规（且分数不可比）。\n🔬 代码实证：别人到底用 navtrain 的哪一部分训练、怎么切验证（扒开源 repo 得出） 前面都是从文档和论文层面讲\u0026quot;navtrain 训练、navtest 测试\u0026quot;。但\u0026quot;navtrain 训练\u0026quot;到底是不是整个 navtrain 一把梭、完全不验证？论文不写这种工程细节，所以我去扒了几个开源仓库的实际训练代码，结论很明确：几乎所有走官方训练流程的方法，都会从 navtrain 内部切出一个固定验证集 val_logs，而不是整个 navtrain 全训。\n官方训练流程的核心逻辑。NAVSIM 官方训练入口 navsim/planning/script/run_training.py 并不是直接拿全部 navtrain 当训练集，而是先按一份固定的 log 名单做过滤：\n# navsim/planning/script/run_training.py（官方） train_scene_filter.log_names = [l for l in train_scene_filter.log_names if l in cfg.train_logs] val_scene_filter.log_names = [l for l in val_scene_filter.log_names if l in cfg.val_logs] 配套的划分文件 navsim/planning/script/config/training/default_train_val_test_log_split.yaml 里写死了两份 log 名单：\ntrain_logs：13,180 条 log —— 真正喂模型训练的部分 val_logs：2,730 条 log —— 验证集，且是 train_logs 的超集的补集、完全从 navtrain 的 log 池里切出（不碰 navtest） 也就是说，navtrain 整体 = train_logs ∪ val_logs，验证集是 navtrain 的子集，规模约占总 navtrain 的 1/6。注意这里的单位是 log（场景序列）数，不是帧数——navtrain 的 103,288 帧分布在这 13,180 + 2,730 条 log 里，要拿精确验证帧数得实际跑 SceneLoader 统计。\n一句话结论：所谓\u0026quot;calib / val\u0026quot;不是你凭空从 navtrain 里乱切的，而是官方早就给你切好了一份 val_logs（2730 logs）——只要走官方 run_training.py，就自动带上它做验证。\n开源仓库实测（只要代码公开，全切）：\n仓库 是否切 val val 规模 代码依据 autonomousvision/navsim（官方） ✅ 2730 logs run_training.py + default_train_val_test_log_split.yaml SparseDriveV2（swc-17） ✅ 2730 logs 直接复用官方 run_training.py DiffusionDrive（hustvl） ✅ 2730 logs 直接复用官方 run_training.py DrivoR（valeoai） ✅ 2730 logs 直接复用官方 run_training.py Hydra-MDP / Metis / AutoDrive-P³ / Centaur 代码未公开，无法证实 — README 未放训练代码 关键发现：SparseDriveV2、DiffusionDrive、DrivoR 的训练脚本都只是 train_test_split=navtrain + 调用官方 run_training.py，因此它们和官方用同一份 val_logs 划分文件，验证集规模完全一致（2730 logs）。没有任何一个可见的开源实现是\u0026quot;整个 navtrain 全训、零验证集\u0026quot;——只要走官方训练流程，就必然带 val_logs 验证集。只有那些完全未公开训练代码的仓库（Hydra-MDP、Metis、AutoDrive-P³、Centaur）无法从代码证实，但它们的论文都写\u0026quot;trained on navtrain\u0026quot;。\n完整训练协议（代码层面总结）：\n训练用啥：navtrain 中属于官方 train_logs（13,180 logs）的那部分场景，约占总 navtrain 的 5/6。 验证用啥：navtrain 中属于官方 val_logs（2,730 logs）的那部分场景，约占总 navtrain 的 1/6，训练中途看验证 loss、选最优 checkpoint、调超参。 跑分用啥：评测阶段提交轨迹到官方服务器，在 navtest（12,146 帧，PDMS） 或 navhard（EPDMS，两阶段） 上算分——这两份禁止用于训练。 为什么这样合法：训练集和验证集都来自 navtrain（同一母集 trainval 滤出的子集），彼此不交叠；而测试集 navtest/navhard 来自 OpenScene 的 test 池，与 navtrain 来源不同，因此评测结果能真实反映泛化。这也正是为什么\u0026quot;把 navtest 拆 9000/1000/2146 训+验+测\u0026quot;既违规又自欺——你该用的是 navtrain 里的官方 val_logs，而不是去动 navtest。 模型训练用的是 scene 还是 log？——答案是 scene，log 只是\u0026quot;切分粒度\u0026quot;。 这是最容易混淆的点，必须拆开讲：\n切分（split）按 log：train_logs / val_logs 决定的是\u0026quot;哪些行车记录进训练、哪些进验证\u0026quot;。这一步用 log 是为了防泄漏——同一段 log 里的相邻帧场景高度相似，若按帧随机切，train 和 val 会共享同一段记录，验证分虚高。所以切分边界必须落在 log 之间。 训练（train）按 scene：真正喂给模型、算 loss、反向传播的最小样本单位是 scene（一个规划片段），不是整段 log。代码里 SceneLoader 会对 train_logs 圈定的每段 log，按场景过滤器（难例过滤 + 以某帧为中心的窗口）展开成一堆 scene，每个 scene 独立做一次前向/反向。你看到的 len(train_data)（日志里打印的 \u0026ldquo;Num training samples\u0026rdquo;）就是 scene 数，不是 log 数。 所以 navtrain 内部的两层关系是：先按 log 圈范围（13,180 训练 log + 2,730 验证 log）→ 每段 log 再展开成若干 scene → 训练时 batch 里装的是 scene。103,288 这个总数就是 navtrain 全部 scene 的展开结果，它分布在 15,910 段 log 上。 一句话记忆：log 决定\u0026quot;能不能用这段记录\u0026quot;，scene 决定\u0026quot;模型实际吃了哪一口数据\u0026quot;——切分看 log，训练吃 scene。\n图2c：navtrain 训练数据展开流程。切分边界在 log 层级（防泄漏），实际训练样本是 scene 层级——batch 里装的是一个一个 scene，而非整段 log。\n🛠️ 实操：你的自研模型怎么训、怎么验证、怎么跑分（官方脚本指向） 前面讲了协议，这里给出真正落地跑分的步骤。所有入口脚本都在官方仓库 autonomousvision/navsim 的 navsim/planning/script/ 下，我亲自核对过它们的存在与用法。\n第一步：训练（用 navtrain，按官方 log 切分）\n复用官方训练入口，它会自动按 train_logs / val_logs 切分——你不需要自己写切分逻辑：\n# 官方脚本 scripts/training/run_xxx_agent_training.sh 内部就是调这个 python navsim/planning/script/run_training.py \\ experiment_name=my_model \\ train_test_split=navtrain \\ agent=my_agent # 你继承 AbstractAgent 实现的模型 训练集 = train_logs（13,180 logs）展开后的 scene 验证集 = val_logs（2,730 logs）展开后的 scene，每个 epoch 后自动算验证 loss 不要碰 navtest / navhard 做训练，否则提交排行榜会被判违规 第二步：本地验证（用 val_logs，自己看分数）\n训练中途/结束后，用官方 PDM 打分在 val_logs 上算 PDMS/EPDMS 自检（脚本 run_pdm_score.py）。这一步只在本地看、不对外，用来调超参、选 checkpoint。\n第三步：生成提交文件（在 navtest / navhard 上跑推理）\n评估阶段不训练、只推理。用官方提交脚本，把模型对测试集每个场景输出的轨迹存成 submission.pkl：\n# 脚本：navsim/planning/script/run_create_submission_pickle.py python navsim/planning/script/run_create_submission_pickle.py \\ agent=my_agent \\ train_test_split=navtest # v1：输出 PDMS；换成 navhard_two_stage 即 v2 EPDMS team_name=... authors=... email=... 该脚本内部会：\n对每个 token 调你的 agent.compute_trajectory(agent_input) 得到轨迹； 分 first_stage（原始场景）+ second_stage（3DGS 偏移场景）两轮输出； 打包成 submission.pkl（含 team 信息 + 两阶段预测）。 第四步：算分（本地用 pickle，或提交官方服务器）\n本地先验分（不用等排行榜排队）：用 run_pdm_score_from_submission.py 加载你刚生成的 submission.pkl + 官方 metric cache，直接算出 PDMS/EPDMS 并打印 extended_pdm_score_combined。 正式上榜：把 submission.pkl 上传到 HuggingFace 官方排行榜空间（navtest 榜 / navhard 榜），由官方服务器用统一脚本算分——保证和所有人定义一致、可复现。 一句话流程：run_training.py（navtrain 训，val_logs 验）→ run_create_submission_pickle.py（navtest/navhard 推理出 pkl）→ run_pdm_score_from_submission.py（本地算分，或传 HF 上榜）。训练和验证只在 navtrain 内部，跑分只在 navtest/navhard——测试集永远不进训练。\n阶段 官方脚本（路径都在 navsim/planning/script/） 数据 训练 run_training.py navtrain（train_logs 训 / val_logs 验） 本地验分 run_pdm_score.py val_logs 生成提交 run_create_submission_pickle.py navtest / navhard 提交算分 run_pdm_score_from_submission.py（本地）或 HF 空间（正式） navtest / navhard navtrain 那 10 万样本，别人到底怎么训？ navtrain 的 103k 样本（2Hz 采样，每帧 8 路环视相机 + 可选 LiDAR + ego 状态 + 导航命令）体量其实比 nuPlan 原版小很多（NAVSIM 故意降采样、只要相关标注），所以单机多卡就能训。从官方补充材料和 CVPR 2026 论文（DrivoR）的实现细节可以看到典型配置：\n配置项 典型值（参考 DrivoR / 官方基线） 说明 硬件 4×A100（v1 也可 1×3090/2080Ti） navtrain 轻量，不需要超大集群 Batch size 16（基线 PlanCNN/TransFuser 用 64） 视显存而定 学习率 2e-4（基线用 1e-4，50/75 epoch 后除以 10） AdamW + cosine 退火 Epoch 数 v1 约 25（navtrain+navval）/ 100（小模型基线）；v2 约 10（navtrain only） 大模型训练 1 epoch ≈ 1~1.5 小时 损失 轨迹回归（L1）+ 可选 score 蒸馏损失 Scoring 类方法额外加评估器分数监督 关键认知：navtrain 之所以\u0026quot;够训\u0026quot;是因为它是\u0026quot;难例过滤\u0026quot;后的子集——官方用阈值把常量速度基线分数压到 22%、人类 95% 的场景留下，天然剔除了大量无聊直行场景，所以 10 万条里\u0026quot;信息密度\u0026quot;很高，训 10~25 个 epoch 就能收敛，不像原始 nuPlan 需要刷几百 epoch。这也是为什么榜单上很多方法光用 navtrain 就能冲到 90+ PDMS，而不必依赖外部大规模数据（除非像 EponaV2 那样主动追求 perception-free 的 data scaling）。\n一张图理清所有名词：trainval / navtrain / navval / calib / navtest / navhard 到底谁是谁 先把最容易混的\u0026quot;基础划分\u0026quot;和\u0026quot;NAVSIM 过滤划分\u0026quot;两层关系理清楚：\n图2：NAVSIM 数据集拆分关系图。关键记住三点——（1）trainval 是母集，navtrain 从它滤出；（2）navtest/navhard 从 test 滤出，禁止用于训练；（3）calib/val 来自 navtrain 内部的官方固定 val_logs（2730 logs），不是独立拆分。\n先搞懂数据组织：log / scene / frame 三层到底啥关系 理解\u0026quot;13180 个 log\u0026quot;和\u0026quot;103288 个 scene\u0026quot;为什么差这么多，要先弄清 NAVSIM 数据的三层组织（官方 docs/splits.md 明说：标准划分指的是可下载的 logs 集合，而 navtrain/navtest 是从 logs 里抽 scene 的过滤器）：\nlog（日志）：一辆车出去跑一次、连续录下的整段传感器数据。文件名形如 2021.05.12.19.36.12_veh-35_00005_00204——前段是出发时间戳、中段是车号、末段是帧区间。一个 log 是一段连续的驾驶过程，通常含几百到上千帧。 frame（帧）：2Hz 采样的一张（每 0.5 秒一帧），是最小时间单位。 scene（场景）：以某一帧为中心、截取前后若干秒的短片段，是规划任务的基本样本单位（模型看历史几秒、预测未来几秒）。所以 navtrain 的 103,288 这个\u0026quot;scenes/帧\u0026quot;数字，本质是难例过滤后留下的有效帧/场景数。 三者关系一句话：很多帧（103k）分布在较少的 log（~16k 段）里——一段 20 分钟的 log（约 2400 帧 @2Hz）经\u0026quot;难例过滤器\u0026quot;筛掉无聊直行段后，可能只留下几百个\u0026quot;有意思\u0026quot;的场景。\n为什么切分按 log 而不是按 frame/scene？ 这是关键设计——验证集必须按 log 整段切，不能按帧随机切。如果按帧随机切，同一段 log 里的相邻帧会同时出现在 train 和 val（它们场景几乎一样），验证集会\u0026quot;泄漏\u0026quot;训练信息、分数虚高；按 log 整段切，则保证训练用的行车记录和验证用的行车记录完全不重叠，验证结果才真实。这正是 run_training.py 里用 log_names 取交集（而非按 frame）的根本原因。\n图2b：log → frame → scene 三层数据组织。navtrain 的 103,288 个 scene 分布在约 15,910 段 log 中；官方按 log 整段切成 13,180 训练 + 2,730 验证，避免同段行车记录泄漏到验证集。\n层级细节（用缩进表示，不画树形线）：\nOpenScene（nuPlan 降采样到 2Hz，底层数据源） trainval：基础训练+验证大池（\u0026gt;2000GB，含全部日志） navtrain：NAVSIM 在 trainval 上做\u0026quot;难例过滤\u0026quot;得到的训练集（103,288 帧，445GB） 训练部分（官方 train_logs，13,180 logs）：真正喂模型训练 navval / calib（官方 val_logs，2,730 logs）：训练中途看验证损失用 test：基础测试池（217GB） navtest：NAVSIM v1 过滤出的评测集（12,146 帧，指标 PDMS） navhard_two_stage：NAVSIM v2 过滤出的难例评测集（指标 EPDMS，两阶段） mini：演示小集（debug 用） 一句话记忆：trainval 是母集，navtrain 是从它滤出的训练集，navtest/navhard 是从 test 滤出的测试集；calib/val 来自 navtrain 内部的官方固定 val_logs（2730 logs），不是独立拆分。\n逐个解释：\ntrainval：OpenScene 的底层标准划分，是 navtrain 的\u0026quot;母集\u0026quot;。它包含全部日志和传感器（\u0026gt;2000GB），一般不整机下载，只用来抽 navtrain。 navtrain：NAVSIM 在 trainval 上做\u0026quot;难例过滤\u0026quot;得到的训练集（103,288）。这是你模型训练时唯一应该用的数据。注意它和 navtest 场景允许重叠（NAVSIM 故意这么设计，见前文）。 navval / calib（校验集）：NAVSIM 官方没有单独的 navval 文件夹，但官方在 navtrain 内部提供了一份固定的验证集 val_logs（2730 条 log，见前文代码实证）。训练流程会自动把 navtrain 按 train_logs（13,180 logs）/val_logs（2,730 logs）切成训练与验证两部分，用来监控训练 loss、选最优 checkpoint、调超参。你听人说的\u0026quot;calib 1000\u0026quot;本质上就是指这个内部验证切分，只是真实口径是按 log 数切的 2730 条、而非千级帧数。一句话：calib = navtrain 里官方切好的 val_logs 验证集，不是独立拆分。 navtest：NAVSIM v1 的测试/评测集（12,146），指标 PDMS。禁止用于训练。论文里报的\u0026quot;PDMS 94.5\u0026quot;就是在这上面算的。 navhard（navhard_two_stage）：NAVSIM v2 的难例测试集，指标 EPDMS，两阶段（450 真实 + 5462 合成）。同样禁止训练。 所以回答你的核心疑问：评估（看训练好不好）用的是 navtrain 内部官方切好的 val_logs（calib/val）；测试跑分（报给排行榜/论文）用的是 navtest（v1）或 navhard（v2）。NAVSIM 没有\u0026quot;train/val/test 三独立集\u0026quot;的标准 ML 范式，而是\u0026quot;一个训练池 navtrain（内含官方 train/val 切分）+ 一个独立测试池 navtest\u0026quot;，验证集由官方从 navtrain 里切好、你直接拿来用。\n端到端流程：别人到底怎么训、怎么评、怎么测 以 Scoring-based 代表 Hydra-MDP（CVPR/NeurIPS 挑战赛冠军）和主流做法为例，完整流水线如下：\n① 准备阶段（离线，一次性）\n下载 navtrain 传感器 + 日志，建 cache。 Scoring 类方法会预计算 PDM 分数当监督标签：对 navtrain 里每条场景，用规则评估器（PDM-Closed 等）对一组候选轨迹算 NC/DAC/TTC/EP/C 等子分数，存成训练 target。这一步 Hydra-MDP 报告约 30 小时 / 32 核。 划分 navtrain → 训练集 + calib（val）。 ② 训练阶段（train on navtrain）\n输入：navtrain 训练集的环视图像（前视+左右前裁切拼成 256×1024）+ 可选 LiDAR BEV + ego 状态 + 导航命令。 输出：候选轨迹（或轨迹打分）。 监督：轨迹回归 L1 + 评估器分数蒸馏（多 head 各学一个子指标）。 配置（Hydra-MDP 官方）：8×A100，总 batch 256，20 epochs，lr 1e-4，AdamW，无数据增强。DrivoR 等后续工作用 4×A100、batch 16、25 epoch。 每个 epoch 后在 calib 上算验证 loss，挑最优 checkpoint。 ③ 本地评估（evaluate on calib 或 navtest 本地版）\n训练中途/结束后，在 calib（或自己留的 navtest 副本）上跑非反应式仿真算 PDMS，确认没过拟合、调超参。 注意：本地评 navtest 只能自己看，不能当官方成绩。 ④ 提交测试 / 跑分（test on navtest / navhard）\n官方排行榜方式：把模型对 navtest 全部 12,146 个场景输出的轨迹存成 .pkl，上传到 HuggingFace 排行榜空间，由官方服务器用统一脚本算 PDMS/EPDMS——保证所有人分数定义一致、可复现。 navhard 同理：提交轨迹 .pkl，服务器在 450 真实 + 5462 合成场景上算 EPDMS。 你论文里写的分数，就是这步服务器返回的结果。 ⑤ 不同论文里数字不一致的原因（避坑）\n旧挑战赛版（Hydra-MDP 原文）写\u0026quot;Navtrain 1192 / Navtest 136 scenarios\u0026quot;——那是 2024 挑战赛按 log 数、且过滤更严的旧口径。 现在公开的 navtrain=103,288 / navtest=12,146 是按 2Hz 帧的新口径（issue #139 用户核对过：下全量是 103288 / 12146，下漏了会少一半）。 所以读到论文里\u0026quot;1192/136\u0026quot;别慌，那是 log 数；\u0026ldquo;103k/12k\u0026quot;是帧数，二者都对，只是计数单位不同。 NAVTEST 是什么 NAVTEST（通常写作 navtest）就是 NAVSIM v1 的标准测试拆分——基于 OpenScene 的 test 划分、经困难场景过滤后得到的 12,146 个场景。它的评测指标是 PDMS（v1）。榜单上所有\u0026quot;PDMS 94.5 / 93.7 / 92.1\u0026hellip;\u0026ldquo;之类的数字，都是模型对这 12,146 个场景各输出一条轨迹，丢进非反应式仿真算 PDMS 后取平均得到的。所以当你看到论文说\u0026quot;在 NAVSIM 上 PDMS 94.5\u0026rdquo;，等价于\u0026quot;在 navtest 的 12,146 个场景上 PDMS 均值 94.5\u0026rdquo;。\nNAVHARD 是什么，和 NAVTEST 有何不同 NAVHARD 是 NAVSIM v2 引入的难例鲁棒性基准（对应 navhard_two_stage 拆分），专门考\u0026quot;观测偏移 / 分布外\u0026quot;下的规划质量，指标升级为 EPDMS。它和 navtest 最大的区别是两阶段评测：\nStage 1（真实场景）：450 个从 OpenScene test 里半自动筛选的真实挑战场景（人工挑选 + 对 SOTA 规划器做 failure mining，保证多样性），模型在原始观测上输出轨迹并评 EPDMS。 Stage 2（合成偏移场景）：用 3DGS（三维高斯泼溅）神经重建把每个 Stage 1 场景重新渲染出观测偏移版本——比如把相机视角、物体位置做物理合理的微扰，生成 5462 个合成场景。模型在\u0026quot;看到的画面和训练时分布不一样\u0026quot;的情况下重新规划，再评 EPDMS。 最终 navhard 分数 = Stage 1 + Stage 2 的综合。因为 Stage 2 故意制造分布外观测，纯靠记忆训练分布的模型在这里会大幅掉分（比如 TransFuser/LTF 只有 23 左右，而懂动力学的世界模型能到 55+）。这也解释了为什么 navhard 整体分数远低于 navtest——它测的根本不是\u0026quot;常规驾驶\u0026quot;，而是\u0026quot;遇到没见过的观测时还稳不稳\u0026quot;。\n提交方式差异：navhard 排行榜只需提交\u0026quot;每条测试帧的预测轨迹\u0026quot;，由官方服务器用 EPDMS 评测（不需要提交整个模型），所以比闭环榜单更容易规模化。\n📐 评测指标详解：PDMS 与 EPDMS 到底在量什么 看懂分数前，先得看懂分母——尤其是 PDMS 的数学形式。NAVSIM 的分数不是\u0026quot;轨迹像不像人驾\u0026quot;，而是把一条轨迹丢进非反应式仿真（v1：在 BEV 抽象上展开 4 秒仿真时域，自车用 LQR 控制器跟踪轨迹、背景交通参与者按日志里的真实轨迹走，互不反应；v2：背景车改用 IDM 规则模型做反应式交互）里跑，再算多个子指标。理解子指标，才能理解各家方法为什么在某项上高、某项上低。\nPDMS 的公式（v1） PDMS（Predictive Driver Model Score）由乘性惩罚项（违规直接打折）和加权平均项（非违规指标加权）两部分组成。计算链如下：\n图4：PDMS 计算链。乘性项（红）是\u0026quot;木桶短板\u0026quot;——NC 或 DAC 任一为 0，整场景直接归零；加权项（黄）鼓励真的往前开（EP 权重最高）。\n官方定义为：\n$$ \\text{PDMS} = \\underbrace{\\left(\\prod_{m\\in\\{NC, DAC\\}} m(\\text{agent})\\right)}_{\\text{乘性惩罚}} \\cdot \\underbrace{\\left(\\frac{\\sum_{m\\in\\{TTC, EP, C\\}} w_m \\cdot m(\\text{agent})}{\\sum_{m\\in\\{TTC, EP, C\\}} w_m}\\right)}_{\\text{加权平均}} $$其中子指标、权重与取值范围（NAVSIM v1 默认配置）为：\n子指标 符号 类型 权重 $w_m$ 取值 含义 无责碰撞 NC 乘性 — $\\{0, \\tfrac12, 1\\}$ 自车是否引发碰撞（碰撞则该场景直接归零，最致命） 可行驶区域 DAC 乘性 — $\\{0, 1\\}$ 轨迹是否始终在可行驶区域内（不骑马路沿、不越野） 碰撞时间 TTC 加权 5 $\\{0, 1\\}$ 与周围交通参与者的最小安全时距是否在界内 前进进度 EP 加权 5 $[0,1]$ 相对专家轨迹的归一化前进量（鼓励有效通行） 舒适度 C 加权 2 $\\{0, 1\\}$ 加速度 / jerk 是否平缓 注：NAVSIM v1 里还有一个 DDC（行驶方向合规），但权重被设为 0（即 PDMS 忽略它，留给 v2 启用）。所以 v1 的 PDMS 实际就是 NC × DAC × (5·TTC + 5·EP + 2·C) / 12。\n两个关键点：\n乘性结构 = 木桶逻辑：NC 或 DAC 任一为 0，整场景 PDMS 直接归零。所以\u0026quot;撞了 / 越野了\u0026quot;比\u0026quot;各项平庸\u0026quot;更致命——这也是 Scoring-based 方法拼命用评估器分数监督打分器的原因。 EP 权重最高（5）：鼓励自车真的往前开，防止模型为拿高 NC/DAC 分而\u0026quot;原地不动刷安全分\u0026quot;。 最终榜单上的 PDMS = 对所有评测场景（navtest 的 12,146 个）的 PDMS 取均值：\n$$ \\overline{\\text{PDMS}} = \\frac{1}{K}\\sum_{i=1}^{K} \\text{PDMS}_i $$每个子指标到底是怎么算出来的？（含撞车实例） 上面给了公式和权重，但\u0026quot;子指标\u0026quot;本身是怎么从一条轨迹里算出来的？这一节把每个子指标的计算逻辑拆开，并用\u0026quot;撞车\u0026quot;这个你最关心的场景，演示每个数字会怎么变。\n先说一个总前提：NAVSIM 不是\u0026quot;撞了就停、直接给 0\u0026quot;。非反应式仿真是把模型输出的整条 4 秒轨迹交给一个 LQR 控制器去跟踪，背景车按日志里的真实轨迹走（互不反应），然后逐帧检查整条轨迹上的各种违规。子指标是从\u0026quot;这 4 秒里每一帧的状态\u0026quot;汇总出来的，不是撞一下就中断——所以即使撞了，它前面开了多远、开得稳不稳，仍然会被算进去。\n1. NC（无责碰撞）—— 三档取值，撞了不一定是 0 怎么算（重叠检测的具体做法）：在 4 秒仿真的每一帧，自车和每个其他交通参与者（车、人、骑手）都有一个俯视（BEV）下的有向包围盒（Oriented Bounding Box, OBB）——由自身位置 $(x,y)$、朝向 $\\theta$、以及长宽尺寸（车约 $4.7\\text{m} \\times 1.8\\text{m}$，行人更小）定义的一个矩形。碰撞检测就是判断两个 OBB 是否相交： 实际用的是略微膨胀的包围盒（通常四周加一个几厘米到十几厘米的安全余量），让判定更保守、抗定位噪声； 相交判定靠分离轴定理（SAT, Separating Axis Theorem）：把两个矩形各自投影到 4 条候选轴（两个盒子的各两条边法线）上，只要任意一条轴上两个投影区间不重叠，就说明两盒分离、没撞；4 条轴全部重叠才判定为碰撞； 只要某一帧、对某一个参与者算出\u0026quot;相交\u0026quot; → 记一次碰撞，再走责任判定。 自车有责（ego 主动侵入别人路径、留的 gap 不够等）→ NC = 0 自车无责（被后车追尾、对方偏离日志撞上来等）→ NC = 0.5 全程没碰撞 → NC = 1 责任怎么定：判出重叠后，NAVSIM 会给这次碰撞贴\u0026quot;责任标签\u0026quot;——核心逻辑是看谁动到了别人的地盘：如果自车在运动、且是它主动进入/挤压了另一个本就在那儿的参与者的盒子 → 自车有责（0）；如果是别的参与者偏离了自己的日志轨迹、主动撞上自车（典型如自车停着被追尾）→ 自车无责（0.5）。所以 NC 的 0.5 不是\u0026quot;打了折的撞\u0026quot;，而是\u0026quot;确实撞了，但锅不在你\u0026quot;。 关键认知：NC 不是二值的，而是 $\\{0, \\tfrac12, 1\\}$ 三档。这正是你问的\u0026quot;无责碰撞\u0026quot;——它不会让 NC 归零，只打到 0.5。但因为 NC 在 PDMS 里是乘性项，0.5 会把整场景 PDMS 砍半。 2. DAC（可行驶区域）—— 和撞不撞车无关，只看在不在路上 怎么算：逐帧检查自车中心是否落在\u0026quot;可行驶区域\u0026quot;多边形内（含一小段扩展余量，通常是车道 + 应急车道）。只要任何一帧越界（骑路沿、上人行道、越野）→ DAC = 0；全程都在 → DAC = 1。判断\u0026quot;点是否在多边形内\u0026quot;用的是标准的射线法（ray casting）：从自车中心引一条射线，数与多边形边界的交点数，奇数在内部、偶数在外部。 关键认知：你问的\u0026quot;撞出去才会扣分\u0026quot;——对的，但要理解\u0026quot;撞出去\u0026quot;在这指的是什么。DAC 扣分的唯一条件是\u0026quot;自车位置离开了可行驶区域\u0026quot;，而和\u0026quot;有没有发生碰撞\u0026quot;是两件独立的事： 你在机动车道上正常开、却追尾前车 → 你整条轨迹都在车道里 → DAC 仍是 1，碰撞只影响 NC/TTC，不影响 DAC； 只有当你规划的路径本身就冲出了路面（比如为躲车向左猛打、整个轨迹画到了人行道上，或者在路口外越野）→ 这时候 DAC 才掉到 0。 一个常被忽略的点：非反应式仿真里，自车并不会被\u0026quot;物理撞飞\u0026quot;。背景车按日志走、互不反应，自车用 LQR 跟踪自己规划的整条 4 秒轨迹——发生碰撞只是\u0026quot;检测到盒子重叠\u0026quot;，自车并不会真的被顶出路外。所以 DAC 完全取决于你规划的路径几何在不在路上，跟\u0026quot;撞没撞\u0026quot;无关。也就是说：DAC 掉 0 一定是\u0026quot;路径自己画出了路面\u0026quot;，而未必伴随碰撞；反过来，路上撞车也不会顺带把 DAC 拉低。 3. TTC（碰撞时间）—— 看\u0026quot;最小安全时距\u0026quot;有没有跌破阈值 怎么算（每帧怎么求\u0026quot;还有多久会撞\u0026quot;）：在轨迹的每一帧，取自车当前的状态（位置 + 速度/航向）和每个其他参与者当前的状态，假设双方都保持这一刻的运动不变（匀速、不转向、不刹车），去推算\u0026quot;两个盒子多久后第一次重叠\u0026quot;： 把问题变成相对运动：相对速度 $\\vec{v}_{\\text{rel}} = \\vec{v}_{\\text{ego}} - \\vec{v}_{\\text{other}}$，相对位置就是两盒心连线； 向前以很小的时间步 $\\Delta t$ 推演（或解析求解）：自车盒子按 $\\vec{v}_{\\text{ego}}$ 平移、对方盒子按 $\\vec{v}_{\\text{other}}$ 平移，用和 NC 一样的 OBB 相交判定（SAT）检查这一刻是否重叠； 第一个出现重叠的时刻 $\\tau$ 就是这对参与者的 TTC；对所有参与者取最小，得到这一帧的 TTC； 再对整条轨迹所有帧的 TTC 取最小值，就是该场景的 TTC。若这个全局最小值 \u0026lt; 临界阈值（配置项 critical_ttc，默认一个很小的秒数）→ TTC = 0；否则 → 1。 直觉：它就是\u0026quot;如果大家都维持现状不变，最早几秒后会亲上\u0026quot;——近距 + 高速对开 → TTC 很小；远或同向同速 → TTC 很大（甚至判为不冲突）。 关键认知：TTC 是二值的 $\\{0, 1\\}$，看的是\u0026quot;有没有逼近到危险距离\u0026quot;，而不是碰撞本身。因为\u0026quot;撞车\u0026quot;必然意味着 TTC 跌到了 0 附近，所以有碰撞通常 TTC 也 = 0——但反过来不成立：一次惊险的 near-miss（没真撞但贴脸而过）也会让 TTC = 0。 TTC 和 NC 的区别（容易混）：NC 看\u0026quot;有没有发生重叠（结果）\u0026quot;，TTC 看\u0026quot;有没有逼近到危险距离（过程）\u0026quot;。一次贴脸 near-miss：NC=1（没真撞）、TTC=0（太近）。一次无责追尾：NC=0.5（无责）、TTC=0（确实撞了）。\n4. EP（前进进度）—— 唯一连续指标，撞车也不归零 怎么算：沿路线（route）方向度量自车实际前进了多少，再除以\u0026quot;专家/人类参考轨迹在这段里前进了多少\u0026quot;，裁剪到 $[0,1]$： $$\\text{EP} = \\mathrm{clip}\\!\\left(\\frac{\\text{自车沿路线的前进距离}}{\\text{专家沿路线的前进距离}},\\ 0,\\ 1\\right)$$ 注意\u0026quot;前进距离\u0026quot;是投影到路线方向的位移，不是轨迹的 Euclidean 长度；倒车会拖低分子，过冲会被裁到 1。 关键认知：这是 5 个子指标里唯一连续的，它衡量\u0026quot;你到底有没有在往前开\u0026quot;。所以撞车并不会让 EP = 0——EP 看你实际开到了哪。如果你在路线 40% 处撞了，EP ≈ 0.4；如果你一开始就撞（车都没动），EP ≈ 0；如果你开得和专家一样远，EP ≈ 1。这也解释了为什么\u0026quot;为安全原地不动\u0026quot;行不通：NC/DAC 满分但 EP≈0，PDMS 照样很低。 EP 低，到底是\u0026quot;开太慢\u0026quot;还是\u0026quot;撞车\u0026quot;导致的？——答案：几乎总是\u0026quot;开太慢/路径太短\u0026quot;，和撞车无关。 这一点最容易混，单独讲清：\nEP 只看你规划的路径\u0026quot;沿路线走了多远\u0026quot;，不关心有没有撞。而且非反应式仿真里自车会走完自己规划的整条 4 秒轨迹（LQR 跟踪，碰撞只是检测到、不会让车停下或缩路径）——所以哪怕你在第 1 秒就撞了，后面 3 秒的轨迹仍然照走，EP 按这条完整路径算。 因此：低 EP 的本质是\u0026quot;这条 4 秒轨迹本身覆盖的路程短\u0026quot;，而路程短通常是因为速度开得慢（或模型输出了一条保守、短促的轨迹）。它和是否发生碰撞没有因果关系。 反例最能说明问题：一条开得飞快、但中途撞了的轨迹，EP 反而可能很高（它 4 秒里真跑出去很远），只是会被 NC=0 / TTC=0 拖累；一条慢慢吞吞、全程没撞的轨迹，EP 很低（路程短），但 NC/DAC 满分。所以\u0026quot;我撞了所以 EP 低\u0026quot;是个错觉——你看到的同时低 EP + 撞车，往往是因为那条轨迹既慢又撞，但 EP 低是\u0026quot;慢\u0026quot;贡献的，不是\u0026quot;撞\u0026quot;贡献的。 一句话：EP 低 = 路径没铺够远 = 开太慢（或规划太保守）；撞车影响的是 NC 和 TTC，动不了 EP。 疑问：那 NAVSIM 是不是\u0026quot;不真实\u0026quot;？真实世界里第 1 秒撞了，后面就没有轨迹、也不可能有 EP 了，可 NAVSIM 还会跑完剩下 3 秒——对吗？ A：对的，这正是它的设计。 NAVSIM 跑的是非反应式仿真（non-reactive simulation）：模型提交的是一条预先算好的、固定长度的 4 秒轨迹（一串 $(x,y,\\text{heading})$ 点），仿真时\n自车由一个 LQR 控制器去跟踪这条固定轨迹——只负责把车摆到每个时刻该在的位置； 背景车按日志里的真实轨迹走，且互不反应（不会因为你来了就刹车/让）； 仿真器没有任何碰撞物理——不计算动量、不把车弹开、不让你\u0026quot;撞停\u0026quot;。它每帧只干两件事：把车摆到轨迹指定的位置 + 检查违规（盒子重叠=碰撞、越界=DAC 等）。 所以\u0026quot;第 1 秒撞了\u0026quot;在 NAVSIM 里只是\u0026quot;第 1 秒那一帧检测到盒子重叠\u0026quot;，轨迹本身不会被截断或改写，后面 3 秒该摆哪还摆哪，EP 按这条完整 4 秒路径算进度——跟真实世界\u0026quot;撞了就失能、后面没轨迹\u0026quot;完全不同。\n为什么这么设计（而不是像真实世界撞了就停）：\n可复现 + 便宜：不需要物理引擎，所有方法在同一套确定性脚本下比，分数才可比； PDMS 评的是\u0026quot;这条规划轨迹本身安不安全/合不合规\u0026quot;，不是\u0026quot;撞了之后会发生什么\u0026quot;——后者是 CARLA 那种闭环仿真的事，NAVSIM 故意不做闭环； 这也是个已知局限：真实世界你撞了就完了，NAVSIM 里一条早期就撞的轨迹仍会因\u0026quot;整条路径覆盖了距离\u0026quot;拿到一个 EP（甚至不低），只是被 NC=0 乘性归零掩盖了。所以 PDMS 对\u0026quot;早期碰撞\u0026quot;的敏感度全在 NC，不体现在 EP 上。 一句话：NAVSIM 的 EP 永远基于\u0026quot;模型规划出的完整 4 秒路径\u0026quot;算，与路上是否真撞无关——因为仿真器根本不模拟撞车后的物理后果，轨迹是固定的、跑完的。\n5. C（舒适度）—— 看加速度 / jerk 有没有超标 怎么算：逐帧检查自车的纵向加速度、横向加速度、jerk 是否都在阈值内。任何一帧超出 → C = 0；全程平稳 → 1。 关键认知：急刹、猛打方向会扣 C。但正常驾驶（哪怕最终撞了但没急刹）C 仍可能是 1。 一个完整例子：同一次\u0026quot;撞车\u0026quot;，不同责任，分数天差地别 假设一条 4 秒轨迹，自车沿路线前进了 40%（专家走了 100%，所以 EP = 0.4），全程都在车道内（DAC = 1），没有急刹（C = 1）。只改变\u0026quot;碰撞责任\u0026quot;这一变量：\n子指标 场景 A：自车有责撞前车 场景 B：被后车无责追尾 场景 C：安全驾驶无碰撞 NC 0（有责） 0.5（无责） 1 DAC 1 1 1 TTC 0 0 1 EP 0.4 0.4 1 C 1 1 1 乘性项 NC×DAC 0 0.5 1 加权项 $(5\\text{TTC}+5\\text{EP}+2\\text{C})/12$ (0+2+2)/12 ≈ 0.333 (0+2+2)/12 ≈ 0.333 (5+5+2)/12 = 1.0 PDMS 0 0.5 × 0.333 ≈ 0.167 1.0 三个洞察：\n自车有责撞车（A）→ PDMS 直接 0。因为 NC=0 是乘性短板，整场景归零，其他分再高也没用。这就是为什么 NAVSIM 里\u0026quot;不撞\u0026quot;比\u0026quot;开得好\u0026quot;优先级更高。 无责撞车（B）→ PDMS ≈ 0.167，不是 0。NC 只打到 0.5，乘性项变 0.5，加权项也因 TTC=0、EP 不满而低，但毕竟没归零。这就是\u0026quot;无责碰撞\u0026quot;和\u0026quot;有责碰撞\u0026quot;的本质差别——你问的\u0026quot;无责碰撞会不会影响可行驶区域\u0026quot;答案是：不影响 DAC（仍是 1），只通过 NC 砍半 + TTC 归零来扣分。 EP 在 A/B 里都是 0.4 而不是 0——撞车不会让\u0026quot;前进进度条\u0026quot;清零，它只反映你实际开了多远。 速度（开快 / 开慢）如何牵动这些子指标？ 你真正想问的其实是：PDMS 到底奖励\u0026quot;开快\u0026quot;还是\u0026quot;开慢\u0026quot;？还是只关心\u0026quot;别撞\u0026quot;？ 答案是——v1 PDMS 里速度本身不被直接评分，它只通过\u0026quot;后果\u0026quot;间接牵动子指标。下面拆开看每个子指标和速度的关系：\n子指标 和速度的关系 开太快 开太慢 NC 间接：速度↑ → 碰撞概率↑ 容易主动侵入别人路径 → 有责碰撞 → NC=0 一般不因此撞车（反而更安全） DAC 几乎无关 不影响（除非轨迹几何因高速甩出路面） 不影响 TTC 直接：速度↑ → 闭合速度↑ → 最小 TTC↓ 容易跌破阈值 → TTC=0 不触发（慢车离碰撞更远） EP 最直接：就是\u0026quot;你实际开了多远\u0026quot; 开得远 → EP 高（过冲裁到 1，无额外奖励） 开得近 → EP 低（惩罚最重） C 看加减速平稳度，不看稳态速度 要快速提到高速常需猛踩 → jerk 超标 → C=0 缓起缓停一般 C=1 三个要点：\nv1 PDMS 没有\u0026quot;限速\u0026quot;检查。5 个子指标里没有一个专门看你是否超速——所以\u0026quot;开快\u0026quot;本身不被扣分，只会被 TTC 和碰撞\u0026quot;秋后算账\u0026quot;。这是 v1 的一个已知漏洞：一个在限速 30 区飙到 80 却没撞的轨迹，PDMS 不会因为它超速而直接扣分（除非因此 TTC=0 或撞了）。 开太慢的代价集中在 EP。因为 EP 是唯一连续指标、权重又最高（5），慢吞吞爬行会让 EP 远低于 1，直接拉低加权项。这就是为什么\u0026quot;为安全原地不动\u0026quot;也不行——你保住了 NC/DAC，却把 EP 搞没了。 开太快主要砸在 TTC 和 NC 上。速度上去，和周围车的闭合速度变大，最小 TTC 容易被击穿成 0（TTC 子指标归零）；再极端点直接撞上 → NC=0（乘性归零，整场 0 分）。 用数字感受一下（仍假设全程在车道内 DAC=1、无急刹 C=1，只变 EP 和 TTC）：\n场景 NC TTC EP PDMS 按专家速度、安全 1 1 1 1.0 开太慢（只走一半） 1 1 0.5 $(5+2.5+2)/12 \\approx$ 0.79 开太快、擦肩险过（没撞，TTC=0） 1 0 1 $(0+5+2)/12 \\approx$ 0.58 开太快、直接撞（有责） 0 0 1 0 一个反直觉的结论：\u0026ldquo;开太快导致险过（TTC=0）\u0026ldquo;比\u0026quot;开太慢（EP=0.5）\u0026ldquo;扣分更狠（0.58 vs 0.79）。因为 TTC 和 EP 权重都是 5，但 TTC 是\u0026quot;达标/不达标\u0026quot;的开关、EP 是连续值——开太慢至少还保留了部分 EP，而 TTC 一旦跌破阈值就是干脆的 0。至于\u0026quot;开太快撞了\u0026quot;更是直接归零，碾压一切。\n一句话：PDMS 不奖励\u0026quot;开快\u0026rdquo;、也不奖励\u0026quot;开慢\u0026rdquo;，它奖励\u0026quot;按专家节奏、安全地往前走\u0026rdquo;——快了赌 TTC/NC，慢了输 EP，只有贴着专家速度且不出事才是最优解。所以排行榜上高分方法都在\u0026quot;安全和进度之间找平衡点\u0026quot;，而不是一味求快或求稳。\n一句话总结：PDMS 的 5 个子指标里，只有 EP 是连续值，其余 4 个（NC/DAC/TTC/C）本质都是\u0026quot;达标 1 / 不达标 0\u0026quot;的开关；其中 NC 和 DAC 是乘性短板（任一为 0 整场景归零），TTC/EP/C 是加权鼓励（越满越好）。撞车这件事，计分逻辑是\u0026quot;逐帧检测结果→按责任定 NC（0/0.5/1）、按越界定 DAC、按最小安全时距定 TTC、按实际位移定 EP\u0026quot;，而不是\u0026quot;撞了就停、给 0\u0026quot;。而速度只通过\u0026quot;后果\u0026quot;间接作用：太快赌 TTC/NC、太慢输 EP，没有子指标直接查你开多快。\nEPDMS 的公式（v2） EPDMS（Extended PDMS）在 PDMS 框架上扩展乘性项与加权项，并引入\u0026quot;人类过滤\u0026quot;：若同一场景里人类专家也违规（如为绕开静止障碍物短暂借对向车道），则该惩罚被忽略，避免误罚合理行为。官方定义：\n$$ \\text{EPDMS} = \\underbrace{\\left(\\prod_{m\\in\\{NC, DAC, DDC, TLC\\}} \\text{filter}_m(\\text{agent}, \\text{human})\\right)}_{\\text{乘性惩罚}} \\cdot \\underbrace{\\left(\\frac{\\sum_{m\\in\\{TTC, EP, HC, LK, EC\\}} w_m \\cdot \\text{filter}_m(\\text{agent}, \\text{human})}{\\sum_{m\\in\\{TTC, EP, HC, LK, EC\\}} w_m}\\right)}_{\\text{加权平均}} $$$$ \\text{其中}\\quad \\text{filter}_m(\\text{agent}, \\text{human}) = \\begin{cases} 1.0 \u0026 \\text{若人类在该场景也违规 } m(\\text{human})=0 \\\\ m(\\text{agent}) \u0026 \\text{否则} \\end{cases} $$v2 的子指标、权重与取值范围：\n子指标 符号 类型 权重 取值 含义 无责碰撞 NC 乘性 — $\\{0, \\tfrac12, 1\\}$ 同 PDMS 可行驶区域 DAC 乘性 — $\\{0, 1\\}$ 同 PDMS 行驶方向合规 DDC 乘性 — $\\{0, \\tfrac12, 1\\}$ v2 启用：是否朝目标方向行进（防\u0026quot;为安全原地转圈\u0026quot;刷分） 红绿灯合规 TLC 乘性 — $\\{0, 1\\}$ v2 新增：严格考红绿灯状态 碰撞时间 TTC 加权 5 $\\{0, 1\\}$ 同 PDMS 前进进度 EP 加权 5 $[0,1]$ v2 升级：由单专家改为多路径进度 MPP 车道保持 LK 加权 2 $\\{0, 1\\}$ v2 新增：是否稳定居中车道内（路口处关闭） 历史舒适度 HC 加权 2 $\\{0, 1\\}$ v2 新增：把预测轨迹前接 1.5s 人类驾驶历史再评舒适度 扩展舒适度 EC 加权 2 $\\{0, 1\\}$ v2 新增：比较相邻帧轨迹的动态状态（加速度/jerk 跳变） v1 → v2 到底升级了什么？（一张表看清） 维度 v1（PDMS） v2（EPDMS） 乘性惩罚项 NC、DAC NC、DAC、DDC（启用，v1 里权重=0）、TLC（新增） 加权鼓励项 TTC(5)、EP(5)、C(2) TTC(5)、EP(5，MPP 升级)、LK(2,新增)、HC(2,新增)、EC(2,新增) EP 的参考轨迹 单条人类专家轨迹 多路径进度 MPP：多条候选参考路径取最优，避免\u0026quot;走别的合理车道\u0026quot;被错罚 人类过滤 无 filter$_m$：同一场景人类专家也违规则该项免罚（防误伤合理绕行） 背景车交互 非反应式（按日志轨迹走、互不反应） 背景车改用 IDM 规则模型做反应式交互 时序处理 孤立的 4 秒预测片段、离散帧采样 HC 前接 1.5s 历史 + EC 查相邻帧跳变 → 引入\u0026quot;连续时序一致性\u0026quot; 总风格 \u0026ldquo;大致安全合规\u0026rdquo; \u0026ldquo;精细安全合规 + 时序自洽\u0026rdquo; 一句话：v2 = v1 的框架 + 把 v1 里躺平的 DDC 激活 + 新增 TLC/LK/HC/EC 四个精细项 + EP 改成多路径 + 加入人类过滤与反应式背景车 + 把时序一致性补上。所以同一方法在 navtest（PDMS）和 navtest v2（EPDMS）上分数会差一截——榜单上 EPDMS 普遍比 PDMS 低几个点，不是模型变差了，是尺子更严了。\n每个 v2 子指标到底怎么算（详解） NC / DAC / TTC 的计算与 v1 完全一致（见上一节 bounding-box 重叠、射线法、相对运动首次重叠时刻），这里只讲 v2 新增或改动的子指标。\n① DDC（行驶方向合规 / Driving Direction Compliance）——v1 躺平、v2 启用\n怎么算：沿路线（route）方向检查自车是否在\u0026quot;朝目标前进\u0026quot;，而不是原地打转、倒车刷安全分。具体是把自车进度投影到路线切向：若前进方向的投影为正且大致沿预期走向 → DDC=1；若明显逆行 / 绕圈 / 侧向偏移过大 → 按严重程度给 0 或 0.5（三档 $\\{0, \\tfrac12, 1\\}$，责任判定逻辑同 NC 的\u0026quot;有责/无责\u0026quot;）。它和 EP 的区别在于：EP 只关心\u0026quot;走了多远\u0026quot;，DDC 关心\u0026quot;走的方向对不对\u0026quot;——一个贴着路线但原地转圈的轨迹 EP 可能不低，DDC 却会把它打爆，专门防\u0026quot;为安全原地转圈\u0026quot;的刷分漏洞。 ② TLC（红绿灯合规 / Traffic Light Compliance）——v2 新增\n怎么算：在轨迹经过的每个受红绿灯控制的交叉口/车道，把自车状态与该车道在仿真时刻的红绿灯相位对齐：若灯为红/黄（需停）而自车仍进入停止线内或冲突区 → TLC=0；若灯为绿且自车正常通过，或在红灯前于停止线后合规停车 → TLC=1。它直接用 nuPlan 标注里的交通灯状态，是 v1 完全没有的\u0026quot;规则层\u0026quot;检查——v1 只管物理安全，不管你闯不闯红灯。 ③ EP 的升级：Multi-Path Progress（多路径进度，MPP）——v2 核心改动\nv1 的坑：EP 只拿一条人类专家轨迹当参考。但同一个路口，人类可能直行也可能右转，模型选了\u0026quot;另一条同样合理\u0026quot;的车道就会被错罚——这不公平，也让 EP 对单条专家轨迹过拟合。 v2 怎么改：用多条候选参考路径（同一场景里所有\u0026quot;合理可达\u0026quot;的路线，如不同车道、不同转向）分别计算自车沿每条路的进度，再取**最优（最大）**那条当作 EP 的分母参照。这样只要你的轨迹沿\u0026quot;任何一条合理路径\u0026quot;在好好前进，EP 就高——既连续又公平，不会因为走了和专家不一样的合法车道就被扣分。 ④ LK（车道保持 / Lane Keeping）——v2 新增\n怎么算：逐帧检查自车横向偏移是否稳定落在当前车道中心带内（一个小阈值窗口）。全程居中 → LK=1；频繁压线、蛇形、骑线 → LK=0。关键例外：在交叉口 / 无明确车道线的区域，LK 会被主动关闭（因为那本就该变道/汇入，不该用车道中心卡你）。所以 LK 考的是\u0026quot;该居中时居中\u0026quot;，不是\u0026quot;全程不许动\u0026quot;。 ⑤ HC（历史舒适度 / History Comfort）——v2 新增，时序一致性的第一块拼图\n怎么算：v1 只在那孤立的 4 秒预测片段上评舒适度，等于默认\u0026quot;第 0 秒车是凭空开始动的\u0026quot;，会漏掉\u0026quot;从真实驾驶切进预测\u0026quot;那一刻的顿挫。v2 的做法是：把预测轨迹前面接上 1.5 秒的人类驾驶历史（你真实开到的最后 1.5s），拼成一条 5.5 秒的连续时间线，再在这条完整线上算加速度 / jerk 是否超标。这样\u0026quot;预测起点猛地一脚油门/一脚刹车\u0026quot;这种边界跳变也会被抓住。 ⑥ EC（扩展舒适度 / Extended Comfort）——v2 新增，时序一致性的第二块拼图\n怎么算：不只看绝对值，而是逐相邻帧比较轨迹的动态状态（速度、加速度、jerk）。如果某一帧到下一帧之间出现加速度 / jerk 的突跳（比如速度曲线不光滑、帧间瞬移感），就判 EC=0。它本质在考\u0026quot;轨迹在相邻时刻是不是接得上、动得平不顺\u0026quot;——这就是\u0026quot;连续时序一致性\u0026quot;在舒适度上的直接落地。 连续时序一致性：v2 怎么管住\u0026quot;轨迹在时间上得连续自洽\u0026quot; 你领导提到的\u0026quot;连续时序一致性\u0026quot;，指的就是 v2 相对 v1 在时间维度上补的那一刀。展开讲：\nv1 的问题：只在\u0026quot;一段孤立的 4 秒预测\u0026quot;上、按离散帧抽样打分。两段几乎一样的轨迹，只要在某次采样帧上差一点，分数就可能离散跳变；而且它不关心\u0026quot;预测起点和真实驾驶怎么接\u0026quot;、\u0026ldquo;相邻帧动得顺不顺\u0026rdquo;——天然漏掉时序上的毛刺。 v2 的解法 = HC + EC 双保险 + 连续评估： HC（历史舒适度）把\u0026quot;过去 1.5s 真驾 → 未来 4s 预测\u0026quot;接成一条连续时间线，保证起点的衔接是顺的，不会在切换瞬间抖一下； EC（扩展舒适度）逐相邻帧比较动态状态，保证预测内部的每一小步也是接得上的，加速度/jerk 不能突跳； 更一般地说，v2 的 TTC、EP（MPP）、进度等子指标都是沿整条时间轴细粒度连续评估的——轨迹微小变化只引起分数微小变化，不再有 v1 那种\u0026quot;采样帧一切换就跳档\u0026quot;的离散性。 它实际抓住什么：有些规划器\u0026quot;开头猛、中间稳\u0026quot;或\u0026quot;帧间微抖一下\u0026quot;，v1 测不出；v2 用 HC 抓起点顿挫、用 EC 抓帧间跳变，把这些\u0026quot;时间上不自洽\u0026quot;的轨迹打下去。所以\u0026quot;连续时序一致性\u0026quot;不是某个单独叫这名字的子指标，而是 v2 通过 HC + EC + 连续化评分共同实现的一条设计原则：好轨迹不仅要空间上安全合规，还要在时间上平滑、衔接、自洽。 为什么 v2 更难：DDC / TLC / LK / HC / EC 这些新增项把\u0026quot;大致合规\u0026quot;升级成\u0026quot;精细合规 + 时序自洽\u0026quot;（不光不越野，还要居中车道；不光不撞，还要朝正确方向、按红绿灯走；不光动得安全，还要动得平滑衔接），所以同一方法在 navtest（PDMS）和 navtest v2（EPDMS）上分数会差一截——这也解释了为什么榜单上 EPDMS 普遍比 PDMS 低几个点。\n理解了这套指标，后面的\u0026quot;为什么 Scoring-based 在 navtest 稳、World Model 在 navhard 强\u0026quot;就有了量化依据：打分器直接拟合这些子分数，自然在固定场景占优；世界模型能应对 Stage 2 的观测偏移，所以在难例榜反超。\n🏗️ 四大技术路线架构详解 下面按 PDMS 从高到低，逐一拆解 Top 方法的架构设计和核心创新。先看一张路线总览，建立全局坐标感：\n图3：四大技术路线定位。横轴看\u0026quot;常规精度→难例鲁棒性\u0026quot;，纵轴看\u0026quot;工程简单→理论深度\u0026quot;——Scoring-based 占左上（稳而简单），World Model 占右下（难例强但重），VLA+GRPO 是中间快速上移的新势力。\n一句话结论：排行榜不是\u0026quot;一家通吃\u0026quot;，而是四条路线各占一块地盘——常规场景 Scoring-based 称王，难例分布外 World Model 称王，VLA+GRPO 是上升最快的搅局者。\n路线一：Scoring-based（评分排序范式） 这类方法占据排行榜头部最多席位。核心哲学：不直接生成轨迹，而是先生成大量候选，再学习打分器选出最优。\n路线一句话：不直接\u0026quot;开\u0026quot;，而是\u0026quot;先想一万个开法，再让打分器挑最好的那个\u0026quot;——所以它在固定场景（navtest）几乎不可战胜。\n1. CLOVER（94.5 PDMS / 90.4 EPDMS） 机构：清华 AIR × 中科大 × 北航 分数定位：navtest 官方榜第一（94.5 PDMS），navtest v2（EPDMS）90.4，是 Scoring-based 路线的天花板 整体数据流。CLOVER 把一个端到端规划问题拆成\u0026quot;生成候选集合\u0026quot;和\u0026quot;集合级打分排序\u0026quot;两件事，并用两个阶段分别训练：\n图像（多视角环视）→ Image Encoder（DINOv2 ViT-S，冻结） → Proposal Generator（轻量 Transformer），生成 N 条候选轨迹 → Scorer（Cross-Attention） 候选轨迹 ↔ 场景特征交叉注意力 输出每条轨迹的子分数（no, dj, tc, com, \u0026hellip;） → Top-1 选出（argmax over 候选） 模块一：Proposal Generator（候选生成器）。用冻结的 DINOv2 ViT-S 提取多视角环视图像特征（不训视觉骨干，省算力且泛化好），接一个轻量 Transformer decoder，以一组可学习的轨迹 query 为输入，一次前向直接回归出 N 条候选轨迹（通常 20~50 条）。关键点在于：生成器只负责\u0026quot;覆盖\u0026quot;动作空间，不负责\u0026quot;选优\u0026quot;——它学的是\u0026quot;把合理的驾驶行为都吐出来\u0026quot;。\n模块二：Scorer（打分器）。这是 CLOVER 的核心。它把每条候选轨迹和场景特征做 cross-attention，预测 NAVSIM 评估器的各个子分数维度（no=无碰撞、dj=可行驶区域、tc=交通合规性、com=舒适度等）。训练时打分器的监督信号不是人驾轨迹，而是真实评估器 R 在候选轨迹上算出来的分数——这是它能\u0026quot;降维打击\u0026quot;的根本原因：它直接在学习排行榜的判分函数。\n核心创新一：伪专家覆盖训练（Stage 1）。单条专家轨迹做模仿学习，模型容易 mode averaging（把所有合理行为平均成一个平庸轨迹）。CLOVER 改成\u0026quot;集合级覆盖\u0026quot;：从多类可解释动作族（横向偏移 ±k 米、加减速档位、跟车/绕行等）构造一个超大的候选池，用真实评估器 R 过滤掉低质候选，再用 FPS（最远点采样）从中挑出覆盖度最高的子集作为\u0026quot;伪专家集合\u0026quot;。监督目标从\u0026quot;逼近单条轨迹\u0026quot;变成\u0026quot;让打分器给伪专家集合里的轨迹打高分、给池子外打低分\u0026quot;——等价于教模型识别\u0026quot;什么是好驾驶\u0026quot;。\n核心创新二：保守闭环自蒸馏（Stage 2）。Stage 1 的打分器只见过评估器分数，没见过\u0026quot;如何选\u0026quot;。Stage 2 交替优化：\n固定生成器，更新打分器使其逼近真实子分数（回归损失）； 固定打分器作为\u0026quot;教师\u0026quot;，让生成器向教师选出的 Top-k 候选 + Pareto 最优目标学习（行为克隆式蒸馏）； 加一个稳定性正则（KL 约束生成器分布不要偏离 Stage 1 太远），防止分布漂移导致打分器失效。 核心创新三：理论保障。论文证明了一个关键引理：当打分器选中的目标在真实评估器 R 下统计显著优于当前分布采样时，这种\u0026quot;保守蒸馏\u0026quot;必然提升高分区（PDMS 头部）的概率质量。换句话说，它不是靠 tricks 刷分，而是有一套保证\u0026quot;越训越高分\u0026quot;的收敛理论。这也是它和一堆靠堆数据的方法最本质的区别。\n官方榜 vs arXiv：官方榜（navtest 可见，且 navtest v2 也可见） 2. SparseDriveV2（92.0 PDMS / 90.1 EPDMS） 机构：未公开 分数定位：navtest 官方榜第四（92.0 PDMS），navtest v2（EPDMS）90.1，是 Scoring-based 路线里\u0026quot;词汇表设计\u0026quot;做得最精细的 整体思路。SparseDriveV2 继承自 SparseDrive 的稀疏查询范式（用一组实例 query 同时做检测和规划，避免稠密 BEV 计算），V2 把重点放在轨迹词汇表（trajectory vocabulary）的因子化设计上。\n模块一：因子化轨迹词汇表。传统 anchor-based 方法把整条轨迹当成离散 token（比如 100 个固定轨迹模板），覆盖动作空间要么 vocab 太大、要么表达力不足。SparseDriveV2 把一条轨迹拆成两个因子：\n几何路径（geometric path）：横向/纵向的几何形状，描述\u0026quot;往哪走、拐多大弯\u0026quot;； 速度剖面（speed profile）：沿路径的时间-速度曲线，描述\u0026quot;多快走\u0026quot;。 两个因子分别有各自的候选集合，再组合成完整轨迹。这样做的好处是：路径 × 速度的组合能指数级覆盖动作空间，而 vocab 尺寸只是两者之和——Dense anchor 的组合比固定离散 anchor 更省参数、更全表达。\n模块二：两级评分（two-level scoring）。\n粗粒度因子化评分：先对\u0026quot;路径因子\u0026quot;和\u0026quot;速度因子\u0026quot;分别打分，快速筛掉明显不合理的组合（比如高速过急弯）； 细粒度组合评分：对粗筛后保留的组合做联合打分（路径×速度的 cross-attention），得到最终 EPDMS 子分数。 这种两级结构平衡了效率和精度：大部分候选在粗粒度就被干掉，只有少量进入昂贵的细粒度打分。\n为什么有效。因子化本质上是在\u0026quot;动作空间的结构\u0026quot;上做了先验归纳——驾驶行为本来就是\u0026quot;走哪条线\u0026quot;和\u0026quot;以多快速度走\u0026quot;两个相对独立的决策。把归纳偏置写进 vocab 设计，模型用更少的数据就能学出更好的打分器。\n官方榜 vs arXiv：官方榜（navtest 可见） 3. Hydra-MDP 系列（91.26 PDMS / Hydra-SE 91.87） 机构：NVIDIA 分数定位：navtest 官方榜第六（Hydra-MDP 91.26）、Hydra-SE 91.87，是 Scoring-based 路线的\u0026quot;工业基准线\u0026quot;，被后续大量方法对标 整体架构。Hydra-MDP 是 NAVSIM 官方的代表性基线，也是\u0026quot;多目标蒸馏\u0026quot;思想的源头：\n图像 / LiDAR → Transformer Encoder → 场景 token 固定 anchor 词汇表（K 条预定义轨迹） 多头打分器（Hydra heads），每个 head 对应一个专家评估器 聚合 → 选出 Top-1 anchor 模块一：固定 anchor 词汇表。和 CLOVER/SparseDriveV2 的\u0026quot;生成候选\u0026quot;不同，Hydra-MDP 用一组预定义固定的 anchor 轨迹（训练推理不变）。这意味着它的表达力受限于 vocab 大小，但也因此推理极快、训练稳定。\n模块二：多目标 Hydra 蒸馏（核心创新）。NAVSIM 的 PDMS 由多个子指标组成（no/dj/tc/com 等），它们之间经常冲突（比如为了舒适就要慢，但慢可能不合规）。Hydra-MDP 不用一个总分监督，而是用多个规则评估器（专家）各自算出的子分数，分别监督对应的 score head：\n每个 head 学习一种\u0026quot;偏好\u0026quot;（一个驾驶价值维度）； 训练时是多任务回归，每个 head 独立拟合对应专家分数； 推理时把多个 head 的输出按权重聚合（或按场景动态加权）得到最终排序。 这避免了\u0026quot;单一总分把多目标压扁\u0026quot;导致次优，也让模型对\u0026quot;哪个维度更重要\u0026quot;可调、可解释。\n模块三：Hydra-SE 的 Cluster Entropy（不确定性度量）。Hydra-SE 在标准 Hydra-MDP 上增加了一个置信度信号：对 K 条 anchor 的打分分布计算簇熵（cluster entropy）——如果打分在多个 anchor 上都很接近（高熵），说明模型\u0026quot;拿不准\u0026quot;；如果集中在一个 anchor（低熵），说明模型很自信。这个不确定性可以：\n用于安全兜底（高熵时降速或交给 fallback）； 作为 active learning 的信号（高熵样本值得再训）。 定位意义。Hydra-MDP 证明了\u0026quot;用规则评估器当老师、多 head 学多目标\u0026quot;这条路线在 NAVSIM 上极其有效且工程简单。后续 CLOVER、SparseDriveV2 本质上都是在它的\u0026quot;打分范式\u0026quot;上做升级（生成式候选 + 更聪明训练）。\n官方榜 vs arXiv：官方榜 路线二：VLA + 世界模型（Vision-Language-Action） 路线一句话：把\u0026quot;语言推理 + 世界模型密集监督 + GRPO 在线 RL\u0026quot;拧成一股绳，是 2026 年上升最快的方向，但工程最重、arXiv 宣称居多。\n4. ExploreVLA（93.7 PDMS / 88.8 EPDMS） 机构：未公开 分数定位：navtest 宣布 93.7 PDMS（arXiv-only，未上官方榜）、navtest v2 88.8 EPDMS，是\u0026quot;VLA + 世界模型 + 在线 RL\u0026quot;路线的代表 整体数据流。ExploreVLA 的卖点是\u0026quot;用世界模型给自己造密集监督 + 用不确定性驱动 RL 探索\u0026quot;：\n多视角图像 → ViT Encoder → 统一 Backbone（共享表征） 统一 Backbone 同时支撑三个分支： 规划头（轨迹） 世界模型头（未来 RGB） 世界模型头（未来 Depth） 两个世界模型头的预测 → 预测不确定性 σ（像素级） 安全门控 GRPO 奖励：σ 高 且 PDMS 高 → 给奖励 模块一：统一 Backbone。ExploreVLA 用一个共享视觉 backbone 同时支撑三个头（规划、未来 RGB、未来 Depth），而非三个独立网络。好处是视觉表征被\u0026quot;多任务\u0026quot;拉扯得更鲁棒，且参数量可控。\n模块二：密集世界建模（核心创新一）。普通端到端规划只监督\u0026quot;轨迹对不对\u0026quot;，信号稀疏（一条轨迹 vs 一张图）。ExploreVLA 额外让模型预测未来若干帧的 RGB 图像和 Depth 图——这给 backbone 提供了像素级、帧级的密集几何+外观监督。世界模型头本质上在强迫模型\u0026quot;理解场景会怎么演化\u0026quot;，这种理解会反哺规划头。\n模块三：不确定性驱动的探索奖励（核心创新二）。这是它最巧妙的设计。世界模型在预测未来帧时，对\u0026quot;分布外/没见过的区域\u0026quot;预测不确定度高（σ 大）。ExploreVLA 把 σ 当成内在探索信号：\n高不确定性 = 场景里有模型不懂的东西； 但如果此时 PDMS 也高（轨迹安全合规），说明\u0026quot;在未知但安全的区域里开得好\u0026quot;——这正是值得强化学习的\u0026quot;有信息量的好样本\u0026quot;。 模块四：安全门控 GRPO（核心创新三）。GRPO 是 group-relative 的 RL 算法（对一个 prompt 采样一组轨迹，用组内的相对优势做策略更新）。ExploreVLA 给 GRPO 加了一个安全门控：只有当\u0026quot;不确定性高 且 PDMS 高\u0026quot;同时满足时才给探索奖励，否则（不确定性高但 PDMS 低 = 危险探索）不给甚至惩罚。这从奖励设计上堵住了\u0026quot;为了探索去冒险\u0026quot;的漏洞。\n为什么分数高但没上官方榜。93.7 是它论文自报的，评估协议（传感器、数据范围、是否用未来帧标注）可能与官方榜不完全一致，因此未进入官方 navtest 排名。这是\u0026quot;arXiv 宣称\u0026quot;的典型案例。\n官方榜 vs arXiv：arXiv 宣称（未出现在官方 navtest 排行榜） 5. AutoDrive-P³（89.9 EPDMS，perception=true） 机构：北京大学，ICLR 2026 分数定位：navtest v2 官方榜（perception=true 分类）89.9 EPDMS，是\u0026quot;可解释推理链 + 分层 RL\u0026quot;路线的代表 整体数据流。AutoDrive-P³ 的骨架是一个 VLM，但它把规划拆成一条显式的推理链（Chain-of-Thought），并用 RL 把奖励从规划端反向渗透到感知、预测端：\n图像 + 指令 → VLM Backbone VLM Backbone 同时输出三层（由 P³-CoT 结构化标签监督）： 感知（Perceive）：\u0026ldquo;附近有什么\u0026rdquo; 预测（Predict）：\u0026ldquo;它们会怎么动\u0026rdquo; 规划（Plan）：\u0026ldquo;我该怎么做\u0026rdquo; 三层汇成 P³-CoT 结构化标签 P³-GRPO 分层渐进式强化微调（奖励从规划反传至感知、预测） 模块一：P³-CoT 数据集（核心创新一）。大部分 VLA 要么直接出轨迹（不可解释），要么只做语言 CoT（不落地到控制）。AutoDrive-P³ 构建了三层结构化的推理链标签：\n感知层：描述周围关键物体（车辆/行人/车道/红绿灯状态）； 预测层：推断这些物体未来几秒的运动意图； 规划层：基于前两层推导出本车轨迹，并附带语言解释。 训练时模型被要求\u0026quot;显式输出这三层\u0026quot;，而不只是末尾的轨迹。这让中间过程可被检查、可被纠错。\n模块二：P³-GRPO 分层渐进式强化微调（核心创新二）。普通 GRPO 只给最终轨迹一个奖励，梯度很难传到前面的感知/预测。AutoDrive-P³ 把 RL 拆成三阶段渐进：\nStage 1：冻结预测、规划，只 RL 优化感知（奖励来自\u0026quot;感知准不准\u0026quot;）； Stage 2：冻结感知、规划，只 RL 优化预测； Stage 3：联合 RL，奖励从规划（PDMS/EPDMS）反传到整条链。 这种\u0026quot;先分阶段打通、再联合精调\u0026quot;的策略，解决了长链条 RL 里奖励稀疏、梯度消失的问题。\n模块三：双思维模式（核心创新三）。推理时提供两种模式：\nDetailed Thinking：走完整 P³-CoT，精度高，用于离线/复杂场景； Fast Thinking：跳过显式推理链直接出轨迹，延迟低，用于车端实时。 同一个权重、不同解码策略，兼顾了\u0026quot;可解释\u0026quot;和\u0026quot;快\u0026quot;。\n官方榜 vs arXiv：官方榜（perception=true 分类下可见） 6. DriveVLA-W0（90.2 PDMS / 86.1-86.9 EPDMS） 机构：中科院自动化所，ICLR 2026 分数定位：navtest 官方榜 90.2 PDMS、navtest v2 86.1~86.9 EPDMS，是\u0026quot;世界模型放大 scaling law\u0026quot;路线的代表 整体架构。DriveVLA-W0 的核心论点是：世界模型提供的密集监督能把规划的数据 scaling law 显著放大——同样的数据量，有未来帧预测做监督，模型学得更准、泛化更好。\n图像 → VLA Backbone，并行接两个分支： 动作分支（轨迹，直接输出） 世界模型（WM） 离散版：Autoregressive 预测 visual token 连续版：Diffusion 预测未来视觉特征 世界模型的预测作为密集监督信号 → 反哺 Backbone 模块一：世界模型作为密集监督（核心创新一）。规划标签（一条轨迹）很稀疏，而未来帧（连续多帧图像/特征）是密集信号。DriveVLA-W0 训练世界模型去预测\u0026quot;如果按某轨迹开，未来会看到什么\u0026quot;，这个预测误差作为额外的监督梯度回传到 backbone。直观理解：要预测准未来画面，模型必须真正理解\u0026quot;当前场景的几何、物体运动、自车动作后果\u0026quot;——这比单纯拟合轨迹逼迫模型学得更深。\n模块二：双版本世界模型（核心创新二）。\n离散版（Autoregressive WM）：把未来帧量化成 visual token，用自回归方式预测 token 序列，和语言建模同源，训练稳定； 连续版（Diffusion WM）：直接在连续视觉特征空间用扩散模型去噪预测未来特征，保真度更高但更难训。 两条路线论文都给了结果，工程上可按算力取舍。\n模块三：轻量级动作专家 MoE（核心创新三）。训练时世界模型和动作分支一起训；推理时用一个轻量的动作专家（action expert）直接走动作分支，bypass 掉世界模型的前向（不预测未来帧）。这样车端部署时延迟接近纯规划模型，却享受了训练时世界模型带来的表征增益——典型的\u0026quot;训练贵、推理便宜\u0026quot;。\n官方榜 vs arXiv：官方榜 路线三：纯 World Model / WAM（世界动作模型） 路线一句话：把\u0026quot;未来状态\u0026quot;当成规划的条件而非预测目标，因此当观测被 3DGS 偏移（navhard Stage 2）时仍能\u0026quot;想象\u0026quot;合理未来——难例榜的真正赢家。\n7. DriveFuture（90.7 PDMS / 89.9 EPDMS / navhard 55.5 #1） 机构：未公开 分数定位：navtest 宣布 90.7 PDMS、navtest v2 宣布 89.9 EPDMS，navhard 宣布 55.5（自称 #1，超越人类专家 51.3），是\u0026quot;未来条件化世界模型\u0026quot;路线的代表，也是 navhard 难例榜单的领头羊 整体数据流。DriveFuture 的灵魂是\u0026quot;把未来状态当成决策的条件，而不是预测的目标\u0026quot;：\n当前观测（图像/状态）→ Encoder → 当前潜在状态 z_t → 未来潜在预测器 训练时：用 GT 未来 z_{t+1} 做条件（teacher forcing） 推理时：用预测 ẑ_{t+1} 接替（自回归） → Cross-Attention 精炼（候选轨迹 ↔ 条件化未来状态） → Diffusion 规划器 → 输出轨迹 模块一：Encoder + 未来潜在预测器。先把当前多模态观测编码成潜在状态 z_t，再用一个潜在动力学模型预测未来潜在状态 z_{t+1}（可以是多步）。关键在于\u0026quot;未来潜在\u0026quot;是条件，不是输出目标——模型生成轨迹时，会 attend 到\u0026quot;未来的样子\u0026quot;。\n核心创新一：未来条件化潜在世界模型。常规世界模型是\u0026quot;给动作，预测未来\u0026quot;（未来是输出）；DriveFuture 反过来——\u0026ldquo;把（预测出的）未来状态作为条件，去规划动作\u0026rdquo;。两者的 train-inference gap 完全不同：\n常规 WM：训练时未来是 GT（teacher forcing），推理时未来是自己猜的 → 分布漂移大； DriveFuture：训练时未来就已经是条件输入（用 GT 未来状态 conditioning），推理时换成预测未来状态接替 → 训练和推理用的是同一个\u0026quot;条件化\u0026quot;接口，gap 小。 核心创新二：统一训练-推理范式。正因为训练、推理都走\u0026quot;未来条件化\u0026quot;，DriveFuture 不存在\u0026quot;训练看 GT 未来、推理看预测未来\u0026quot;的不一致。这是它泛化好的关键。\n核心创新三：navhard 表现突出。navhard 的 Stage 2 用 3DGS 生成\u0026quot;观测偏移\u0026quot;场景（比如把摄像头视角、物体位置做物理合理的扰动），专门考分布外鲁棒性。DriveFuture 因为内部有一个显式的\u0026quot;未来潜在动力学\u0026quot;模型，当观测被偏移时，它可以在潜在空间\u0026quot;想象\u0026quot;出偏移后合理的未来状态，再基于这个想象做规划——比纯模仿模型（看到偏移就懵）鲁棒得多，所以 navhard 55.5 反超人类上限。\n官方榜 vs arXiv：navtest arXiv 宣称（未出现在 navtest 官方榜）；navhard arXiv 称 #1（navhard 官方榜未公开具体排名） 8. Metis（90.3 EPDMS / 32.2 navhard） 机构：复旦大学 × 理想汽车 × 伦敦帝国理工 分数定位：navtest v2 官方榜 90.3 EPDMS（Top）、navhard 官方榜 32.2，是\u0026quot;世界动作模型（WAM）+ 混合专家\u0026quot;路线的代表，且完全开源 整体架构。Metis 用 Mixture-of-Transformers 把\u0026quot;视频生成\u0026quot;和\u0026quot;动作预测\u0026quot;拆成两个独立 expert，在潜在空间统一做前向推演：\n当前帧 + 历史 → Mixture-of-Transformers 视频生成 Expert：预测未来帧潜在（视频） 动作预测 Expert：预测自车轨迹（动作） 非对称注意力掩码：训练时双向，推理时动作 expert 跳过视频生成 世界动作模型（WAM）：潜在空间前向推演 → 轨迹 核心创新一：解耦视频-动作建模。如果用一个网络同时生成视频和预测动作，两种信号的表征会\u0026quot;混叠\u0026quot;（视频的高频纹理和动作的低频动力学互相干扰）。Metis 用两个 Transformer expert 分别承载，各自有独立的参数和表征空间，互不污染。\n核心创新二：非对称注意力掩码。训练时两个 expert 通过非对称注意力联合训练（视频 expert 能看到动作信息、动作 expert 也能参考视频信息），保证两者对齐；推理时动作 expert 被配置成\u0026quot;不看视频生成分支\u0026quot;，直接出轨迹，从而跳过昂贵的视频生成计算，延迟大幅下降。这是\u0026quot;训练时共享、推理时解耦\u0026quot;的经典 MoE 思路。\n核心创新三：世界动作模型（WAM）。Metis 提出把\u0026quot;世界模型\u0026quot;和\u0026quot;动作模型\u0026quot;统一成一个概念——在潜在空间里既能推演\u0026quot;环境会怎样\u0026quot;（世界），也能推演\u0026quot;我动了会怎样\u0026quot;（动作），二者共享同一套前向动力学。WAM 强调\u0026quot;行动\u0026quot;是世界推演的一部分，而不是事后接一个控制器。\n工程价值。Metis 是榜单头部里少有的完全开源方案，对想复现 WAM 思路的团队非常友好。\n官方榜 vs arXiv：官方榜（navtest 和 navhard 都可见） 9. EponaV2（88.9 EPDMS，perception-free） 机构：未公开 分数定位：navtest v2 官方榜 88.9 EPDMS（perception=false 分类），是\u0026quot;无感知标注 + 世界模型 + Flow Matching GRPO\u0026quot;路线的代表 整体架构。EponaV2 的诉求很工程化：不要人工感知标注，也能训出强规划器。\n图像 → 自回归扩散世界模型，并行预测三种未来表征： 未来 RGB 帧 未来 Depth map（几何） 未来 Semantic map（语义） 三种未来表征 → 综合未来表征 → 条件化规划头 Flow Matching + GRPO → 轨迹 核心创新一：综合未来推理。EponaV2 的世界模型不只预测未来 RGB，还同时预测未来深度图（3D 几何）和未来语义图（物体类别）。RGB 提供外观、Depth 提供几何、Semantic 提供结构——三者合起来让模型对\u0026quot;未来世界\u0026quot;的理解比单预测 RGB 扎实得多，也更符合驾驶需要\u0026quot;空间+语义\u0026quot;的本质。\n核心创新二：Flow Matching GRPO。用 Flow Matching（流匹配，扩散模型的一种连续归一化流形式）来建模轨迹分布，配合 GRPO 做 RL 微调。Flow Matching 相比传统 DDPM 扩散，训练目标更直接（回归向量场）、收敛更快，和 GRPO 的梯度流也更搭。\n核心创新三：Perception-free。整个 pipeline 不依赖人工标好的 3D 框、车道线、语义标签——未来深度/语义图是世界模型自己从视频里自监督学出来的。这意味着它可以直接在海量无标注驾驶视频上做 data scaling，绕开了感知标注这个昂贵瓶颈。\n定位。EponaV2 证明\u0026quot;无标注 + 世界模型\u0026quot;路线已经能摸到 88.9 EPDMS，如果数据规模拉起来，上限值得期待。\n官方榜 vs arXiv：官方榜 路线四：Diffusion-based / Flow Matching 范式 路线一句话：把规划当成\u0026quot;从噪声轨迹去噪\u0026quot;，天然支持多模态，靠截断扩散/引导把步数压到 4~8 步——是扩散规划方法的基础基线。\n10. DiffusionDrive 系列（85.6-88.2 EPDMS） 机构：华中科大，CVPR 2025 分数定位：navtest v2 官方榜 85.6~88.2 EPDMS（多版本），是\u0026quot;截断扩散策略\u0026quot;路线的开创者，也是扩散规划里最常被引用的基线 整体架构。DiffusionDrive 把规划当成\u0026quot;从噪声轨迹去噪到真实轨迹\u0026quot;的扩散过程，但做了关键改造来解决\u0026quot;去噪步数多、慢\u0026quot;的痛点：\n随机噪声轨迹 x_T → Denoising Network（条件：场景特征），每步从 anchor 高斯而非标准高斯采样 → x_{T-1} \u0026hellip; x_0（候选轨迹，多模态） → 打分/聚类 → 选出最优轨迹 核心创新一：截断扩散策略（Truncated Diffusion Policy）。标准扩散从标准高斯噪声出发，需要几十步去噪才能成型。DiffusionDrive 改为：从一组 anchor 高斯分布出发——每个 anchor 对应一个\u0026quot;大致合理的驾驶模式\u0026quot;（直行/左转/跟车…），噪声只加在 anchor 附近。这样去噪步数可以从几十步砍到 4~8 步，推理速度大幅提升，同时天然支持多模态（不同 anchor 对应不同模式）。\n核心创新二：多模态输出。因为有多个 anchor，一次去噪就吐出多个模式的候选轨迹，再配一个轻量打分器（或直接用扩散的似然）选最优。这比单峰回归更适合驾驶这种\u0026quot;一题多解\u0026quot;的任务。\n版本演进。论文有多个变体（不同骨干、是否接感知、是否加 RL），EPDMS 落在 85.6~88.2 区间。它是后续很多扩散/流匹配规划方法的起点。\n官方榜 vs arXiv：官方榜（多版本） 11. GuideFlow（51.5 navhard） 机构：未公开，CVPR 2026 分数定位：navhard 宣布 51.5 EPDMS（arXiv），是\u0026quot;Flow Matching + 引导\u0026quot;在难例榜上的代表 整体架构。GuideFlow 把 Flow Matching 用于轨迹生成，并引入\u0026quot;引导（guidance）\u0026ldquo;机制提升多模态表达：\n噪声轨迹 → Flow Matching 向量场网络（条件：场景），含两个分支： 无条件分支（纯轨迹流） 引导分支（classifier/奖励引导，偏向安全合规模式） 引导加权 → 多模态候选轨迹 核心创新：引导式 Flow Matching。标准 Flow Matching 只学数据分布，生成的轨迹可能覆盖但不一定\u0026quot;好\u0026rdquo;。GuideFlow 在流匹配网络上加一个引导信号（类似 classifier guidance：把\u0026quot;安全/合规/高分\u0026quot;的梯度方向叠到向量场上），让生成过程偏向高质量模式，同时保留多模态（不坍缩成单峰）。在 navhard 这种难例分布外场景里，引导能把模型从\u0026quot;瞎生成\u0026quot;拉向\u0026quot;符合物理和安全约束\u0026quot;的轨迹。\n官方榜 vs arXiv：arXiv（navhard） 🔬 技术路线对比 维度 Scoring-based Diffusion-based VLA+WM Pure WM/WAM 代表方法 CLOVER, SparseDriveV2, Hydra-MDP DiffusionDrive, GuideFlow ExploreVLA, AutoDrive-P³ DriveFuture, Metis, EponaV2 最高 PDMS 94.5 ~88 93.7 90.7 最高 EPDMS 90.4 ~88 89.9 90.3 navhard EPDMS — 51.5 — 55.5 推理速度 快（一次前向） 中（4-8步去噪） 慢（VLM 解码） 中-慢 多模态支持 依赖 vocab 覆盖 ✅ 天然 ✅ 天然 ✅ 天然 是否需额外数据 否 否 否 是（未来帧标注） 理论深度 高（蒸馏理论） 中 中 高（潜在动力学） 工程复杂度 低-中 中 高 高 代码开源 ✅ CLOVER ✅ DiffusionDrive ❌ 大部分否 ✅ Metis 关键洞察 1. Scoring-based 在常规场景仍然最稳。 CLOVER 的 94.5 PDMS 和 SparseDriveV2 的 90.1 EPDMS 说明，当你的评测环境是确定的（navtest），\u0026ldquo;生成候选 + 打分排序\u0026quot;这个范式几乎不可战胜。它的优势在于：\n打分器可以直接用真实评估器的分数做监督，降维打击 候选生成可离线优化，推理时只做排序，延迟极小 集合级训练天然对抗 mode averaging 2. World Model / WAM 在难例场景异军突起。 navhard 上 DriveFuture 的 55.5 大幅领先（人类也只有 51.3），说明世界模型在面对分布外场景时（3DGS 偏移观测）的鲁棒性更强。这也是直觉上正确的方向——世界模型学会了环境动力学，当观测偏移时，它可以\u0026quot;想象\u0026quot;出合理的未来状态再做规划。\n3. VLA + GRPO 是上升最快的方向。 ExploreVLA（93.7 PDMS）和 AutoDrive-P³（89.9 EPDMS）都用 GRPO 做 RL 后训练，而且都引入了某种形式的\u0026quot;世界模型\u0026quot;或\u0026quot;链式思维\u0026quot;作为推理增强。这是 2026 年最显著的趋势——纯模仿学习已经到顶，RL 后训练成为标配。\n4. Perception-free + WM 有望突破数据瓶颈。 EponaV2 不需要人工感知标注，只靠未来深度/语义预测的自监督就能达到 88.9 EPDMS。如果真的把数据 scaling 跑起来，这条路线有潜力追上甚至超越依赖标注的方案。\n⚠️ 排行榜来源透明化 一个重要的事实：很多高分的 arXiv 论文并没有出现在官方排行榜上。具体来说：\n方法 宣称分数 官方榜可见 说明 CLOVER 94.5 PDMS ✅ 可见 官方榜 Top ExploreVLA 93.7 PDMS ❌ 未出现 arXiv-only DriveFuture 90.7 PDMS / 55.5 navhard ❌ navtest 未出现，navhard 宣称 #1 arXiv-only；navhard 官方榜未公开具体排名 Metis 90.3 EPDMS ✅ 可见 官方榜 Top AutoDrive-P³ 89.9 EPDMS ✅ 可见 Perception=true 分类 SparseDriveV2 92.0 PDMS ✅ 可见 官方榜可见 Centaur 92.1 PDMS ✅ 可见 官方榜可见 为什么 arXiv 宣称和官方榜有差异？可能原因：\n评估协议差异：perception=true/false、传感器配置、训练数据范围等 排行榜提交限制：部分论文发表时排行榜已关闭提交 分数时效性：排行榜持续更新，论文报告的是某个时间点数据 submit 意愿：有些组只发了论文懒得提交 因此我的建议：引用分数时优先参考官方排行榜的成绩，arXiv 宣称的分数需谨慎对待，尤其是那些宣称 \u0026ldquo;SOTA\u0026rdquo; 但未提交到官方榜的。\n💭 个人思考 1. 技术收敛了吗？ 看起来 Scoring-based 和 World Model / WAM 正在形成两条互补的技术路线：\n简单场景 → Scoring-based：高确定性、高速度、已接近人类上限 难例/分布外 → World Model / WAM：具备动力学理解能力，但计算开销大 但我认为最终会收敛到世界模型 + 评分排序的混合范式。DriveFuture 已经在尝试这条路（用世界模型做未来条件化，再用 scorer 选轨迹）。CLOVER 如果引入世界模型做伪专家生成，可能直接冲到 96+。\n2. GRPO 是万能药吗？ 2026 年几乎每篇高分论文都在用 GRPO。但我有两个担忧：\nReward hacking 风险：当 reward 是规则化指标（PDMS/EPDMS）而非真实驾驶质量时，策略会找到投机取巧的方式最大化分数 在线 RL 的仿真 gap：NAVSIM 是非反应式仿真，规划器不与环境交互。闭环 GRPO（真正在仿真器里开车学）还没大规模验证 CLOVER 的保守蒸馏理论提供了一个更安全的替代方案——不需要在线交互就能利用评估器反馈。\n3. navhard 的意义 navhard 是一个被低估的评测维度。55.5 分超过人类上限这件事让我反思：\n3DGS 生成的\u0026quot;观测偏移\u0026quot;可能包含了评测本身的漏洞（某些偏移在物理上不可能） 但也确实筛选出了真正懂动力学的模型（DriveFuture）和普通模仿模型（LTF 23.1）之间的差距 未来如果 navhard 被更广泛接受，\u0026ldquo;navtest 刷分\u0026quot;的军备竞赛可能会降温。\n4. 对 VLA 工程师的启示 结合前面的 JD 分析，从 NAVSIM 排行榜可以看到用人单位到底在找什么能力：\nRL 后训练（GRPO/PPO）—— ExploreVLA、AutoDrive-P³、WorldRFT 都证明了 RL 的价值 世界模型 —— 从 DriveFuture 到 EponaV2，世界模型正在从\u0026quot;研究玩具\u0026quot;变成\u0026quot;部署必需品\u0026rdquo; Scoring-based 框架 —— CLOVER 的蒸馏理论代表了对\u0026quot;损失函数设计\u0026quot;的深度理解，这正是工程团队需要的 数据 scaling 思维 —— DriveVLA-W0 的 scaling law 分析和 EponaV2 的 perception-free 范式，指向\u0026quot;如何经济地获取更多有效数据\u0026rdquo; 头部方法的代码和数据很少完全开源，但从论文中提取的架构设计思路是可以复现的。把这篇文章里列出的核心创新点逐个实现一遍，你的 VLA 技能栈会非常扎实。\n📚 延伸阅读 如果想进一步深入，可以配合本博客的以下文章一起看：\n论文精读 - DriveFuture（2605.09701）：世界模型未来条件化的完整实现细节 论文精读 - ExploreVLA（2604.02714）：不确定性驱动探索奖励与安全门控 GRPO 的工程实践 论文精读 - AutoDrive-P³（2603.28116，ICLR 2026）：P³-CoT 与分层渐进式强化微调 产业实践 - 前沿 VLA 模型全景速览：从产品视角横向对比主流 VLA 方案的定位与取舍 产业实践 - VLA 大模型训练技巧：GRPO、蒸馏、数据 scaling 的实操经验 数据截至 2026 年 7 月，排行榜仍在快速变化。本文所有分数建议以官方 HuggingFace 排行榜为准，arXiv 宣称结果仅供参考。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/navsim%E6%8E%92%E8%A1%8C%E6%A6%9C%E6%B7%B1%E5%BA%A6%E5%88%86%E6%9E%90/","summary":"NAVSIM 已成为端到端规划的事实标准benchmark，PDMS/EPDMS排行榜上群雄逐鹿。本文系统梳理navtest/navhard双榜Top方法，从Scoring-based、Diffusion-based、VLA、World Model 四大技术路线解构各家架构设计与核心创新，严格区分官方排行榜已录结果与arXiv宣称结果，并深入拆解 PDMS 每个子指标（NC/DAC/TTC/EP/C）的内部计算方式与撞车实例。数据截至2026年7月。","title":"NAVSIM 排行榜深度分析：谁在统治端到端规划？架构、创新与分数全解"},{"content":"一、概述 nuPlan 是由 Motional（原 nuTonomy 团队）于 2023 年发布的大规模自动驾驶规划数据集与闭环仿真评测框架。与 nuScenes 主要聚焦感知任务不同，nuPlan 的设计初衷是填补规划领域三个核心空白：缺乏大规模人类驾驶规划数据、缺乏标准化闭环评测指标、以及缺乏可复现的仿真评估协议。\nnuPlan 的核心规模数据：1500 小时的人类驾驶数据，覆盖全球四个城市——波士顿（Boston）、匹兹堡（Pittsburgh）、拉斯维加斯（Las Vegas）和新加坡（Singapore）。这些城市的驾驶环境具有显著差异：波士顿的老城区窄路与不规则交叉口、匹兹堡的丘陵道路与桥梁、拉斯维加斯的宽阔多车道网格化道路、新加坡的右舵驾驶与密集高架路网。\nnuPlan 最革命性的贡献在于：它不仅是一个数据集，更是一个完整的闭环仿真平台。研究者可以在 nuPlan 仿真环境中部署自己的规划模型，与不同类型的交通参与者（log-replay 或 reactive agent）交互，并从安全性、合规性和通行效率等多个维度自动评估模型表现。这种\u0026quot;数据+仿真+评估\u0026quot;三位一体的设计，使 nuPlan 成为目前自动驾驶规划领域最全面的基准平台。\n二、数据采集与统计 2.1 数据规模对比 维度 nuScenes nuPlan 总驾驶时长 约 5.5 小时 约 1500 小时 场景/Log 数 1000 个 scene 约 1282 个 log 标注关键帧 约 40,000 约 150 万 标注 3D 框总数 约 140 万 约 5900 万 覆盖城市 2（波士顿、新加坡） 4（波士顿、匹兹堡、拉斯维加斯、新加坡） 传感器配置 6 Cam + 5 Radar + 1 LiDAR 同 nuScenes（部分 Log 不同） 高精度地图 无 完整 HD Map（车道拓扑、交通标志） 仿真环境 无 内置闭环仿真器 2.2 四城市特点 波士顿：美国东北部老城，街道较窄且不规则，存在大量无保护左转、两阶段左转和环形交叉口。历史街区的道路拓扑复杂，行人活动频繁。冬季还可能遇到积雪和湿滑路面。波士顿的数据量约占全部数据的 30%。\n匹兹堡：以丘陵地形著称，纵向坡度变化显著（部分道路坡度超过 15%），桥梁结构繁多。复杂的立体交通和频繁的上下坡对规划模型的速度控制和视野管理提出额外要求。匹兹堡数据占比约 20%。\n拉斯维加斯：城市道路规划整齐，以宽阔的多车道主干道和网格化路网为特征。典型场景包括高速并入并出、大型信号灯交叉路口和复杂的变道操作。拉斯维加斯的夜间交通流量仍较大，对视觉方案的鲁棒性要求高。数据占比约 30%。\n新加坡：右舵驾驶（靠左行驶），城市紧凑但路网密度高。存在大量高架桥、地下通道和立体交叉结构。交通规则与北美三城差异大，是测试模型跨域泛化能力的关键数据源。数据占比约 20%。\n2.3 高精度地图 nuPlan 提供了完整的高精度矢量地图，这是与 nuScenes 的关键差异之一。地图包含：\n车道几何：每条车道的中心线（以三维路径点列表示）、左右边界线、车道宽度和长度。车道中心线采样间距 0.5-1.0 米。 车道拓扑：前后继关系（predecessor/successor）、左右相邻关系（left neighbor/right neighbor）、变道可行标记。这一拓扑结构使路线规划和导航成为可能。 道路元素：停车线位置、人行横道区域、自行车道、限速标志、停止线、让行线等。每个元素都有精确的全局坐标和关联车道。 十字路口信息：包含交叉区域的几何多边形、入口车道和出口车道的对应关系、信号灯相位信息（如箭头灯的启用时段）。 地图数据使用 Lanelet2 格式组织，每个地图文件对应一个 log 的采集区域。地图坐标系与传感器数据的全局坐标系一致，均采用 UTM 投影。地图的更新频率与 log 采集同步，确保地图数据的时效性。\n三、标注体系 3.1 连续轨迹标注 nuScenes 仅标注了关键帧（2Hz），而 nuPlan 提供以 20Hz 频率记录的完整连续轨迹。每条轨迹包含：\n位置信息：全局坐标系（UTM）下的 x、y、z 坐标，z 坐标在平坦道路上通常为常数 朝向信息：车辆航向角（heading），以弧度表示，范围为 [-π, π] 运动状态信息：瞬时速度（m/s）及速度向量的方向、纵向和横向加速度（m/s²）、角速度（rad/s） 控制信号信息：方向盘转角（度）、油门踏板位置（0-100%）、刹车踏板位置（0-100%） 其中控制信号信息是规划研究中极具价值的\u0026quot;因果标签\u0026quot;——人类驾驶员在什么情况下踩了多大的刹车、打了多大的方向盘。这些标签可用于行为克隆训练中的多模态控制输出或驾驶风格分析。\n3.2 物体标注 nuPlan 的物体标注同样采用 3D 边界框形式，但其密度远超 nuScenes（150 万关键帧 vs 4 万关键帧）。标注内容包括：\n类别（category）：car、truck、bus、motorcycle、bicycle、pedestrian、animal、static_object、generic_object 等 实例 ID（instance_id）：全局唯一，跨帧持续跟踪 3D 边界框：translation [x, y, z]、rotation [w, x, y, z]、size [w, l, h] 运动状态：速度矢量、加速度矢量、运动状态标签（静止/低速/正常/高速） 遮挡状态：被其他物体遮挡的比例估计 值得一提的是，nuPlan 引入了 generic_object 类别——用于标注无法明确分类但确实存在的移动物体。这一设计使标注更加完整，避免因分类困难而漏标重要物体。\n3.3 交通信号标注 交通信号标注是规划评估中不可或缺的信息。nuPlan 的标注覆盖：\n信号灯状态：红、黄、绿三色，以及箭头方向指示（左转箭头、直行箭头、右转箭头） 信号灯关联：每个信号灯与对应的受控车道或路口关联 倒计时信息：部分信号灯标注了从绿灯切换为黄灯/红灯的剩余时间 停止标志和让行标志：精确标注位置和朝向 交通信号标注的关键挑战在于时序对齐——信号灯状态随真实交通控制系统变化，必须与 log 的录制时间精确对齐。nuPlan 通过将信号采集设备与主控系统时间同步来解决这一问题。\n四、仿真环境 4.1 仿真架构详解 nuPlan 仿真器的核心架构分为六个模块：\nScenario Extraction（场景提取）：从数据集中选取指定时长的 log 片段。支持场景类型筛选（如\u0026quot;车辆在十字路口左转\u0026quot;），也支持随机采样。输出包括起始帧、终止帧、EGO 初始位姿和导航路线。\nMap Server（地图服务）：加载场景所在区域的高精度地图，为其他模块提供车道查询、可达性分析和碰撞检测等空间计算服务。地图服务的核心功能包括沿车道投影（将任意点投影到最近车道中心线上）、车道序列规划（根据起点和终点生成车道级导航路线）和可行驶区域计算（生成地图的多边形表示）。\nAgent Manager（参与者管理器）：管理仿真中所有非 EGO 车辆和行人的行为和状态。支持两种参与者模式：\nLog-replay 模式：严格遵循 log 中的原始轨迹。每帧读取 log 中记录的位姿并直接设置 agent 的状态。 IDM 模式（Intelligent Driver Model）：根据前车距离和期望速度计算加速度，支持基本的车道保持和跟车行为。参数可调节（如期望跟车距离、最大加速度等）。 Simulation Engine（仿真引擎）：以固定步长（通常 0.1 秒）驱动仿真循环。每个时间步：从 EGO 模型获取控制指令，执行车辆动力学模型更新 EGO 状态，更新所有非 EGO 参与者的状态，检测碰撞和违规。\nVehicle Dynamics（车辆动力学模型）：将控制指令输出（转向、油门、刹车）转换为实际的位姿变化。nuPlan 内置了基于运动自行车模型（Kinematic Bicycle Model）的动力学仿真器，支持前轮驱动和四轮驱动配置，可模拟不同的车辆轴距和最大转向角。\nMetric Computation（指标计算）：仿真结束后，根据记录的 EGO 轨迹和其他参与者轨迹计算各项评估指标。\n4.2 参与者类型深度分析 非反应式（Non-reactive）Agent：\n优点：评估结果完全确定、可复现；不引入额外超参数；场景挑战性可控 缺点：无法模拟真实交通中的博弈行为；可能存在\u0026quot;不可避免碰撞\u0026quot; 反应式（Reactive）Agent：\nnuPlan 内置的 IDM 模型可以进行基础的避让和跟车行为 当 EGO 发出变道意图时，目标车道上的反应式 agent 可能会减速让行 优点：更真实的交通交互 缺点：引入额外随机性和不确定性；同一模型在同场景上的多次评估结果可能不同 4.3 控制接口 底层控制接口：模型直接输出方向盘角度（-1 到 1，归一化）和加速/减速值（-1 到 1，负值表示刹车）。仿真器使用动力学模型将这些控制量转化为车辆运动。这种接口适合强化学习方法的端到端训练。\n高层控制接口：模型输出未来 N 个时空路径点（通常为 10-20 个点，覆盖 2-4 秒），仿真器内置的 PID 控制器将路径点转化为方向盘和加减速指令。PID 参数可调节（转向 KP、KI、KD 和速度 KP、KI、KD），影响控制器的跟踪精度和平滑度。这种接口更适合基于轨迹规划的方法。\n五、评估指标 5.1 碰撞分数（Collision Score） 碰撞分数是安全性评估的基石。nuPlan 将碰撞按严重程度分类：\nEGO 静止时被追尾：权重 0.1 低速碰撞（相对速度 \u0026lt; 10 km/h）：权重 0.2 中速碰撞（10-30 km/h）：权重 0.5 高速碰撞（\u0026gt; 30 km/h）：权重 1.0 与行人碰撞：权重 1.0（无论速度高低） 计算方式为：\nC o l l i s i o n _ S c o r e = 1 - ( Σ w _ i × c o l l i s i o n _ d u r a t i o n _ i ) / t o t a l _ d u r a t i o n 5.2 可行驶区域合规（Drivable Area Compliance） 衡量 EGO 是否始终在道路可行驶区域内：\nD A _ C o m p l i a n c e = t i m e _ i n _ d r i v a b l e _ a r e a / t o t a l _ t i m e 可行驶区域由地图的车道边界定义，允许 0.3m 的压线容忍度。\n5.3 驾驶分数（Driving Score） 综合指标：\nD r i v i n g _ S c o r e = C o l l i s i o n _ S c o r e × D A _ C o m p l i a n c e × P r o g r e s s 其中 Progress = actual_distance / planned_distance。\n5.4 辅助指标 包括舒适度指标（纵向/横向加速度、方向盘变化率、冲击度 jerk）、限速合规（超速时间比例）、通行效率（平均速度、行程时间）和变道行为统计。\n5.5 NR 与 R 模式 nuPlan 挑战赛的两种模式：\nNR（Non-Reactive Closed-Loop）：所有非 EGO 车辆使用 log-replay。结果完全确定，适合直接对比。 R（Reactive Closed-Loop）：使用反应式 IDM 模型。更真实但结果存在方差，建议报告多次评估的均值和标准差。 六、NAVSIM 与 nuPlan 的关系 6.1 NAVSIM 的简化策略 NAVSIM 由同一团队在 nuPlan 基础上开发，进行了以下简化：\n场景长度标准化：固定为 8-10 秒的短片段，降低计算开销 传感器模拟简化：直接从 log 读取观测数据，无需渲染 评估流程加速：使用 PDA 机制避免完整仿真中的\u0026quot;不可避免碰撞\u0026quot;问题 API 轻量化：更少的依赖和更简洁的接口 6.2 互补使用策略 推荐的研发流程：在 NAVSIM 上快速实验（分钟级）→ 在 nuPlan 上验证最终结果（小时级）。两者不是替代关系，而是不同阶段的工具。\n七、使用建议与局限性 7.1 开发套件 nuplan-devkit 提供完整的数据加载、仿真和评估 API。关键接口：\nNuPlanDatabase：数据库查询接口。支持按 log 名称、场景类型、城市、时间段等多个维度进行数据筛选和索引。查询结果以 pandas DataFrame 形式返回，便于后续处理。该接口内置了缓存机制，对常用查询结果进行内存缓存，避免重复读取磁盘。\nScenarioExtractor：场景提取器。支持从完整 log 中自动检测和提取特定类型的场景片段。检测算法基于规则——例如通过分析 EGO 车辆的转向角变化和道路拓扑来判断当前是否处于\u0026quot;左转\u0026quot;场景。提取的场景片段包含起始帧、终止帧、EGO 初始位姿和导航路线。\nSimulationEngine：仿真引擎。管理仿真主循环，以 0.1 秒为步长驱动仿真推进。引擎内部维护了仿真状态机，包含初始化状态、运行状态、暂停状态和终止状态。支持在仿真过程中动态切换参与者的行为模式（从 log-replay 切换到 reaction）。\nMetricsEngine：指标计算引擎。接受仿真记录作为输入，输出标准化的评估报告。指标计算支持批处理模式——同时对多个场景的仿真结果进行计算。开发者还可以通过继承基类的方式实现自定义指标。\n7.2 安装与环境配置 nuPlan 的安装相对复杂，建议按照以下步骤操作：\n创建 conda 环境（Python 3.9 以上版本），安装 PyTorch 和对应 CUDA 依赖 通过 pip 安装 nuplan-devkit：pip install nuplan-devkit，该包包含数据加载、仿真引擎和评估工具 下载数据集文件（约 1.5 TB，包括传感器数据和地图文件），建议使用官方提供的下载脚本 设置环境变量 NUPLAN_DATA_ROOT 指向数据文件路径，设置 NUPLAN_MAPS_ROOT 指向地图文件路径 运行官方提供的数据完整性验证脚本，确保所有文件下载完整且无损坏 注意：nuPlan 的完整安装需要约 2 TB 的磁盘空间和至少 32 GB 的内存。建议使用 GPU 加速仿真中的碰撞检测和地图查询。另外，首次运行时 nuplan-devkit 会建立数据索引缓存，这一过程可能需要数小时，请预留充足时间。\n7.3 场景类型 nuPlan 预定义了 20+ 种场景类型，常见的有：跟随前车（following_lane_with_lead）、变道（change_lane）、左转（turn_left）、右转（turn_right）、无保护转弯（high_magnitude_jerk）、通过十字路口（traversing_intersection）等。\n7.3 局限性 地图强依赖：无法适用于无高精度地图的场景 参与者行为有限：log-replay 缺乏交互性，IDM 模型也远不如人类驾驶灵活 数据区域集中：四座城市虽覆盖不同类型，但每个城市内的采集路线有限 仿真真实性限制：动力学模型的简化使得高速极限操控场景的仿真不够准确 7.5 数据预处理建议 在使用 nuPlan 数据进行模型训练前，建议：使用 Savitzky-Golay 滤波器平滑 EGO 轨迹噪声；过滤掉 EGO 长期静止、传感器数据缺失或标注质量低下的片段；对 EGO 初始位姿添加随机偏移（±1m、±5°）和对 agent 轨迹添加速度扰动（±10%）以增强泛化能力；将场景地图数据预加载到内存以避免磁盘 I/O 瓶颈。\n7.6 与 nuScenes 的对比总结 维度 nuScenes nuPlan 主要用途 感知（检测、跟踪、分割） 规划（轨迹预测、决策控制） 评估模式 开环 闭环（NR + R） 仿真环境 无 内置闭环仿真器 高精地图 无 完整车道级 HD Map 数据规模 5.5 小时 1500 小时 核心指标 NDS、mAP、AMOTA Driving Score、Collision Score 闭环相关性 低（需转换） 高（原生闭环设计） 研究者应根据研究目标选择合适的平台进行验证：感知方法的性能评估主要在 nuScenes 上进行（因其提供了标准化的检测、跟踪和分割任务定义），而规划方法的闭环性能则必须在 nuPlan 上进行完整验证（因其内置了功能完备的仿真器和多维评估指标）。理想情况下，完整的自动驾驶系统应同时在两个平台上进行评估——在 nuScenes 上验证感知模块的检测精度，在 nuPlan 上验证规划模块的安全性和通行效率。\n八、总结 nuPlan 以 1500 小时四城驾驶数据、完整 HD Map、高密度物体和轨迹标注以及功能完备的闭环仿真环境，为自动驾驶规划研究建立了标准化评估框架。驾驶分数中碰撞分数、可行驶区域合规和通行进度的乘积组合设计，确保模型必须在安全性、合规性和通行效率三维度同时表现良好才能获高分。\n作为规划与 RL 方法的标准基准平台，nuPlan 与 NAVSIM 构成从快速实验（分钟级）到完整验证（小时级）的研发流程。研究者应理解其乘积组合的评估设计哲学——通过多维指标防止模型在单一维度上\u0026quot;作弊\u0026quot;——并将这一理念贯穿研究实践。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/nuplan%E6%95%B0%E6%8D%AE%E9%9B%86%E8%AF%A6%E8%A7%A3/","summary":"\u003ch2 id=\"一概述\"\u003e一、概述\u003c/h2\u003e\n\u003cp\u003enuPlan 是由 Motional（原 nuTonomy 团队）于 2023 年发布的大规模自动驾驶规划数据集与闭环仿真评测框架。与 nuScenes 主要聚焦感知任务不同，nuPlan 的设计初衷是填补规划领域三个核心空白：缺乏大规模人类驾驶规划数据、缺乏标准化闭环评测指标、以及缺乏可复现的仿真评估协议。\u003c/p\u003e\n\u003cp\u003enuPlan 的核心规模数据：\u003cstrong\u003e1500 小时\u003c/strong\u003e的人类驾驶数据，覆盖全球四个城市——波士顿（Boston）、匹兹堡（Pittsburgh）、拉斯维加斯（Las Vegas）和新加坡（Singapore）。这些城市的驾驶环境具有显著差异：波士顿的老城区窄路与不规则交叉口、匹兹堡的丘陵道路与桥梁、拉斯维加斯的宽阔多车道网格化道路、新加坡的右舵驾驶与密集高架路网。\u003c/p\u003e\n\u003cp\u003enuPlan 最革命性的贡献在于：它不仅是一个数据集，更是一个\u003cstrong\u003e完整的闭环仿真平台\u003c/strong\u003e。研究者可以在 nuPlan 仿真环境中部署自己的规划模型，与不同类型的交通参与者（log-replay 或 reactive agent）交互，并从安全性、合规性和通行效率等多个维度自动评估模型表现。这种\u0026quot;数据+仿真+评估\u0026quot;三位一体的设计，使 nuPlan 成为目前自动驾驶规划领域最全面的基准平台。\u003c/p\u003e\n\u003ch2 id=\"二数据采集与统计\"\u003e二、数据采集与统计\u003c/h2\u003e\n\u003ch3 id=\"21-数据规模对比\"\u003e2.1 数据规模对比\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e维度\u003c/th\u003e\n          \u003cth\u003enuScenes\u003c/th\u003e\n          \u003cth\u003enuPlan\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e总驾驶时长\u003c/td\u003e\n          \u003ctd\u003e约 5.5 小时\u003c/td\u003e\n          \u003ctd\u003e约 1500 小时\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e场景/Log 数\u003c/td\u003e\n          \u003ctd\u003e1000 个 scene\u003c/td\u003e\n          \u003ctd\u003e约 1282 个 log\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e标注关键帧\u003c/td\u003e\n          \u003ctd\u003e约 40,000\u003c/td\u003e\n          \u003ctd\u003e约 150 万\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e标注 3D 框总数\u003c/td\u003e\n          \u003ctd\u003e约 140 万\u003c/td\u003e\n          \u003ctd\u003e约 5900 万\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e覆盖城市\u003c/td\u003e\n          \u003ctd\u003e2（波士顿、新加坡）\u003c/td\u003e\n          \u003ctd\u003e4（波士顿、匹兹堡、拉斯维加斯、新加坡）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e传感器配置\u003c/td\u003e\n          \u003ctd\u003e6 Cam + 5 Radar + 1 LiDAR\u003c/td\u003e\n          \u003ctd\u003e同 nuScenes（部分 Log 不同）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e高精度地图\u003c/td\u003e\n          \u003ctd\u003e无\u003c/td\u003e\n          \u003ctd\u003e完整 HD Map（车道拓扑、交通标志）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e仿真环境\u003c/td\u003e\n          \u003ctd\u003e无\u003c/td\u003e\n          \u003ctd\u003e内置闭环仿真器\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"22-四城市特点\"\u003e2.2 四城市特点\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e波士顿\u003c/strong\u003e：美国东北部老城，街道较窄且不规则，存在大量无保护左转、两阶段左转和环形交叉口。历史街区的道路拓扑复杂，行人活动频繁。冬季还可能遇到积雪和湿滑路面。波士顿的数据量约占全部数据的 30%。\u003c/p\u003e","title":"nuPlan数据集详解"},{"content":"一、概述 nuScenes 是由 Aptiv（现 Motional）与 nuTonomy 团队于 2019 年发布的大规模自动驾驶多模态数据集，也是最早提供完整传感器套件标注的全场景数据集之一。它的发布标志着自动驾驶感知研究从单一传感器（仅 LiDAR 或仅 Camera）向多传感器融合的重要转折，极大地推动了 3D 检测、跟踪、预测和规划等多个方向的发展。\nnuScenes 包含 1000 个驾驶场景（scene），每个场景时长约 20 秒，步长 20Hz 录制，关键帧以 2Hz 采样标注。数据采集覆盖波士顿和新加坡两个城市——包括城市主干道、居民区、十字路口、环形交叉口、隧道和高速公路等多种路况，以及白天、夜晚、黄昏、雨天等不同光照和天气条件。这种多样性使得基于 nuScenes 训练的模型对光照和天气变化具有更好的鲁棒性。\n该数据集的核心价值在于其多模态特性：每辆数据采集车在同一时间戳下同时提供 6 个环视摄像头图像（覆盖 360° 视野）、5 个毫米波雷达点云和 1 个 32 线 Velodyne 激光雷达点云。研究者可以基于这些数据开发真正利用多模态传感器融合的感知算法，也可以分别验证不同传感器配置下算法的性能上限。\n二、传感器配置 每一帧数据中，nuScenes 的传感器配置规格与部署位置如下：\n2.1 传感器规格 摄像头（Camera）：6 个环视摄像头，型号为 Basler ace acA1600-60gc（160 万像素），分别安装于车顶前部（CAM_FRONT）、左前（CAM_FRONT_LEFT）、右前（CAM_FRONT_RIGHT）、左侧（CAM_BACK_LEFT）、右侧（CAM_BACK_RIGHT）和后部（CAM_BACK）。每个摄像头输出 1600×900 像素 RGB 图像，帧率 12Hz，通过硬件同步实现同一时刻的全局快门采集。所有摄像头的水平视野之和覆盖 360°。\n激光雷达（LiDAR）：1 个 Velodyne HDL-32E 32 线旋转式激光雷达，安装于车顶中心位置，垂直视野范围 -30° 至 +10°（共 40°），水平视野 360°，帧率 20Hz。每帧返回约 80 万个点，波长 905nm，最大探测距离约 100m。点云密度随距离增加而减小，近距离（\u0026lt; 20m）密度最高。\n毫米波雷达（Radar）：5 个 Continental ARS 408 长距毫米波雷达，分别安装在车前保险杠中央、车尾中央以及四个角落位置。工作频率 76-77GHz，帧率 13Hz，最大探测距离约 250m，水平视野 ±60°，速度测量范围 -100 至 +200 km/h。每个雷达返回约 200 个检测目标，包含相对位置、径向速度、雷达截面（RCS）等信息。\nGPS/IMU：采用 Applanix POSLV 220 导航系统，提供厘米级定位和姿态信息。输出包括全局坐标（UTM 坐标系）、航向角、横滚角、俯仰角、速度矢量、加速度和角速度，更新频率 100Hz。\n2.2 传感器同步 所有传感器通过硬件触发线实现时间同步。激光雷达作为主时钟源（20Hz），摄像头和雷达通过外部触发信号与 LiDAR 对齐。数据后处理阶段使用插值方法将所有传感器的时间戳对齐到最近的关键帧。研究使用时应特别注意：不同传感器的实际采集时刻存在微小的亚毫秒级偏移，高速运动场景中这个偏移可能导致明显的配准误差。\n三、数据格式与结构 nuScenes 采用关系型数据库结构设计，使用 JSON 格式来组织存储元数据。所有标注文件以表（table）的形式组织，每个表包含多个条目（entry），表之间通过 token 建立关联关系。\n3.1 sample sample 表是数据集的核心连接点，代表一个\u0026quot;关键帧\u0026quot;。每秒标注 2 个关键帧，因此每个约 20 秒的场景包含约 40 个关键帧。每个 sample 记录的是一个特定时刻的快照，包含时间戳（timestamp）和指向各类传感器数据的索引。\nsample 的字段主要包括：\ntoken：唯一标识符（32 位十六进制字符串） timestamp：Unix 时间戳（微秒级精度） scene_token：所属场景的唯一标识，用于与 scene 表关联 prev 和 next：前后关键帧的 token，构成双向链表，方便按时间顺序遍历 data：字典结构，包含每个传感器通道对应的 sample_data token 3.2 sample_data sample_data 表记录了每个传感器在 sample 对应时刻采集的具体数据信息。每个条目包含：\nfilename：数据文件路径（图像为 .jpg，点云为 .pcd 文件） fileformat：文件格式类型 sensor_modality：传感器模态（camera、lidar、radar） channel：传感器通道名（如 CAM_FRONT、LIDAR_TOP） timestamp：实际采集时间（微秒），可能与 sample 的 timestamp 存在微小偏移 ego_pose_token：该时刻 EGO 的全局位姿 calibrated_sensor_token：传感器的标定参数（内参和外参） sample_token：所属 sample prev 和 next：同一传感器通道的上一帧和下一帧数据 3.3 sample_annotation sample_annotation 是数据集中最核心的标注表，记录了每个关键帧中所有被标注物体的 3D 信息。每个标注条目包含：\ntoken：唯一标识符 sample_token：所属 sample instance_token：实例 ID，用于跨帧追踪同一物体 category_token：所属类别 visibility_token：可见性（0-100%，分为 4 个等级：0-40%、40-60%、60-80%、80-100%） translation：物体在全局坐标系下的中心位置 [x, y, z]（单位：米） rotation：物体朝向的四元数表示 [w, x, y, z] size：3D 边界框的尺寸 [width, length, height]（单位：米） num_lidar_pts：落在该物体框内的激光雷达点数 num_radar_pts：落在该物体框内的毫米波雷达目标数 prev 和 next：同一实例在前后帧的标注 3.4 scene scene 表定义了连续的驾驶片段，每个 scene 包含一系列按时间排序的 sample。scene 的字段包括：\ntoken：唯一标识 name：场景名称，格式如 \u0026ldquo;scene-0001\u0026rdquo; description：场景描述（\u0026ldquo;Night rain, intersection, heavy traffic\u0026rdquo; 等） log_token：所属 log 记录，包含采集时间、城市等元信息 nbr_samples：场景包含的关键帧数 first_sample_token：该场景的第一个 sample 的 token last_sample_token：最后一个 sample 的 token duration：场景时长（秒） 3.5 category category 表定义了分类体系，采用两级层次结构。一级类别包括 vehicle、human、animal、movable_object、static_object 等，二级类别做进一步细分化：\nvehicle：car（乘用车）、truck（卡车）、bus（巴士）、trailer（拖车）、motorcycle（摩托车）、bicycle（自行车） human：pedestrian（行人）、stroller（婴儿推车）、wheelchair（轮椅） movable_object：traffic_cone（交通锥）、barrier（路障） static_object：不会移动的道路设施 数据集中共有 23 个标注类别，但大多数评估任务仅关注其中 10 个主要类别（car、truck、bus、trailer、motorcycle、bicycle、pedestrian、traffic_cone、barrier）。\n3.6 辅助表 除以上核心表外，nuScenes 还包含多个辅助表：\nego_pose：EGO 车辆在每个 sample 时刻的全局位姿（translation + rotation）和速度 calibrated_sensor：每个传感器的内参（相机内参矩阵、LiDAR 外参等）和外参（相对于车辆中心） log：记录日志元信息，包括城市、车辆 ID、日期等 instance：所有被标注物体的实例列表，记录每个物体首次和最后一次出现的关键帧 visibility：可见性等级定义表 四、数据划分 nuScenes 官方数据划分严格遵循场景级（scene-level）划分，确保同一场景的数据不会同时出现在训练集和验证集中：\n划分 场景数 关键帧数 用途 训练集 train 700 约 28,000 模型训练 验证集 val 150 约 6,000 超参调优与模型选择 测试集 test 150 约 6,000 最终评估（标注不公开） 此外官方提供 mini 版本：mini-train（8 场景，约 320 关键帧）和 mini-val（2 场景，约 80 关键帧）。建议在 mini 版本上调试代码逻辑，在完整训练集上训练最终模型。测试集评估须通过官网提交结果（检测结果 JSON 文件 + 方法说明 + 使用的传感器模态），官方服务器使用统一的评估脚本计算指标。\n五、感知任务 5.1 3D 目标检测 3D 目标检测是 nuScenes 最核心的评测任务。评估使用两个综合指标——NDS 和 mAP。\nNDS（nuScenes Detection Score）：将检测精度和质量量化为 0-1 的综合分数：\nN D S = ( m A P + m A T E + m A S E + m A O E + m A V E + m A A E ) / 6 其中 mAP 为平均精度，其余五项为 True Positive 指标：\nmAP：基于中心距离匹配的平均精度，匹配阈值取 0.5m、1m、2m、4m 四个距离阈值并取平均。与 COCO 的 IoU 匹配不同，nuScenes 使用中心距离匹配更适用于自动驾驶场景——远处的物体即使 3D IoU 很低，其中心位置可能仍是准确的。\nATE（Average Translation Error）：匹配的预测框与真值框中心点之间的欧氏距离（单位：米）。ATE 越小越好，反映了模型的定位能力。\nASE（Average Scale Error）：1 - 预测框与真值框之间的 3D IoU，反映了尺寸估计的准确度。\nAOE（Average Orientation Error）：预测朝向与真值朝向之间的最小角度差（单位：弧度）。AOE 的范围为 [0, π]，值越小越好。注意朝向估计的误差对下游规划任务影响很大——即使检测框位置准确，朝向错误可能导致碰撞风险评估完全错误。\nAVE（Average Velocity Error）：预测速度与真值速度之间的 L2 误差（单位：m/s）。速度估计的准确性对轨迹预测任务至关重要。\nAAE（Average Attribute Error）：属性分类的 1 - 准确率。属性包括车辆是否停靠、行人是否行走等。\n官方排行榜中当前最先进方法的 NDS 已经超过 0.80，mAP 超过 0.70。后融合方法（如 BEVFusion、TransFusion）通常优于前融合方法。\n5.2 多目标跟踪 跟踪任务要求模型持续检测并关联帧间目标。主要指标为 AMOTA：\nA M O T A = ( 1 / L ) × Σ _ { l ∈ L } M O T A ( l ) 其中 MOTA(l) 在不同召回率阈值下分别计算。AMOTA 综合了检测质量和 ID 一致性，比传统的 MOTA 更适合自动驾驶场景中的追踪评估。\n辅助指标包括：\nAMOTP（Average Multi-Object Tracking Precision）：匹配的预测轨迹与真值轨迹之间的平均位置误差 sAMOTA（scaled AMOTA）：将 AMOTA 缩放到 0-1 区间，缓解不同方法间性能差距过大的问题 5.3 语义分割 nuScenes 提供约 40,000 张精细标注的环视图像用于像素级语义分割。标注包含 32 个语义类别（道路、人行道、建筑、车辆、行人等），采用 panoptic 格式同时提供语义标签和实例 ID。\n评估采用 mIoU（mean Intersection over Union）：\nm I o U = ( 1 / C ) × Σ _ { c ∈ C } ( T P _ c / ( T P _ c + F P _ c + F N _ c ) ) 其中 C 为类别数，TP、FP、FN 分别为真阳性、假阳性和假阴性像素数。该任务通常使用全卷积网络或视觉 Transformer 架构。\n5.4 轨迹预测 轨迹预测任务要求模型根据目标的历史轨迹（过去 2 秒）预测其未来位置（未来 6 秒）。每个目标需输出多个候选轨迹（通常 K=5 或 K=10）及其置信度。\n评估指标包括：\nminADE（Minimum Average Displacement Error）：K 个候选轨迹中与真值误差最小的轨迹的平均位移误差 minFDE（Minimum Final Displacement Error）：K 个候选轨迹中最优轨迹的终点位移误差 MR（Miss Rate）：所有候选轨迹与真值的 final displacement 均超过 2m 的比例 brier_minFDE：结合置信度校准的 minFDE，增加了对置信度估计的惩罚 六、规划 Benchmark nuScenes Planning Challenge 是 nuScenes 针对端到端规划任务推出的评测基准。该挑战赛于 2021 年首次设立，每年定期更新评估标准和排行榜，是端到端规划方法最常用的开环评估平台之一。\n6.1 评估设置 规划任务将 EGO 车辆的历史传感器数据（2 秒历史）映射到未来 8 秒的轨迹。模型需要输出一系列路径点或控制指令。评估采用开环（open-loop）方式——模型的预测不影响后续输入。\n6.2 开环 L2 指标 评测指标包括：\nL2 位移误差：在 1.0s、2.0s、3.0s 时域上预测位置与真值的欧氏距离 ADE：整个预测时域上的平均位移误差 FDE：最终时刻（8s）的终点位移误差 碰撞率：预测轨迹中 EGO 与其他物体的碰撞比例 6.3 开环评估的根本缺陷 NAVSIM 论文的实证研究表明：\n相关性极低：开环 L2（3s）与闭环 PDMS 的 Pearson 相关系数 r ≈ 0.3。某些开环 L2 为 0.5m 的模型在闭环中频繁碰撞，而开环 L2 为 1.2m 的模型在闭环中表现良好。\n分布偏移效应：开环中的模型始终看到的是接近真值轨迹的观测（因为输入来自 log），因此模型学会了在\u0026quot;理想路线附近\u0026quot;进行预测。但在闭环中，模型自身的误差会将观测分布拉离训练分布，导致性能崩溃。\n补偿学习：开环评测鼓励模型学习\u0026quot;平均轨迹\u0026quot;——在一些情况下，预测\u0026quot;保持直行\u0026quot;比预测\u0026quot;即将转弯\u0026quot;能得到更低的 L2 误差（因为任何转弯预测的微小偏差都会被惩罚）。但这种保守策略在真实驾驶中完全不可用。\n碰撞率不可靠：在开环中，碰撞检测基于预测轨迹而非实际执行轨迹。模型可以通过预测\u0026quot;急刹车\u0026quot;（突然减速的轨迹）来人为降低碰撞率，但这样的轨迹在实际执行中可能导致追尾。\n6.4 nuScenes2NavSim 转换 为弥补 nuScenes 缺乏闭环仿真的不足，NAVSIM 团队开发了 nuScenes2NavSim 转换工具。转换过程：\n从 nuScenes log 中提取场景地图数据 将标注的 3D 边界框转化为 NAVSIM 的 agent 格式 配置非反应式交通参与者（non-reactive agents） 提供 EGO 初始位置和目标导航路线 转换后的场景可以直接在 NAVSIM 平台中运行闭环仿真评估，使研究者获得 nuScenes 场景下的 PDMS、碰撞率和驾驶分数等闭环指标。\n6.5 nuScenes-GR-20K nuScenes-GR-20K 是从原始 nuScenes 中筛选出的困难场景子集，约 20,000 个规划片段，专门用于评估端到端驾驶模型的泛化鲁棒性（Generalization Robustness）。与原始数据相比，GR-20K 聚焦于：\n高交互密度的场景（多车交织、行人横穿） 低频率但高风险的边缘场景（无保护转弯、遮挡恢复） 天气和光照条件剧烈变化的场景 该数据集常用于 GRPO（Group Relative Policy Optimization）等强化学习方法的训练与评估，能够区分在常规场景上性能饱和的模型。\n七、常见误区与改进方向 常见误区包括：仅使用 LiDAR 忽视多模态融合（BEVFusion 等能显著提升远距离检测精度）；过度关注 NDS 总值而忽略分解指标差异（ATE 和 AOE 对规划影响远大于 AVE）；在验证集上反复调参导致性能虚高。改进方向：开发多模态融合方法，利用时序标注做时序融合，结合 nuScenes2NavSim 扩展至闭环规划评估，引入场景级难度分层。\n八、总结 nuScenes 以其 1000 个场景、多模态传感器配置（6 相机 + 5 雷达 + 1 LiDAR）和标准化评测体系（NDS、mAP、AMOTA、mIoU），是自动驾驶感知领域使用最广泛的基准数据集之一。研究者需清醒认识其局限性——开环与闭环的鸿沟、两个城市的数据偏差以及传感器配置与量产车的差异——将 nuScenes 与 NAVSIM、nuPlan 等闭环仿真平台结合使用，是实现从感知到规划完整验证的关键路径。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/nuscenes%E6%95%B0%E6%8D%AE%E9%9B%86%E8%AF%A6%E8%A7%A3/","summary":"\u003ch2 id=\"一概述\"\u003e一、概述\u003c/h2\u003e\n\u003cp\u003enuScenes 是由 Aptiv（现 Motional）与 nuTonomy 团队于 2019 年发布的大规模自动驾驶多模态数据集，也是最早提供完整传感器套件标注的全场景数据集之一。它的发布标志着自动驾驶感知研究从单一传感器（仅 LiDAR 或仅 Camera）向多传感器融合的重要转折，极大地推动了 3D 检测、跟踪、预测和规划等多个方向的发展。\u003c/p\u003e\n\u003cp\u003enuScenes 包含 1000 个驾驶场景（scene），每个场景时长约 20 秒，步长 20Hz 录制，关键帧以 2Hz 采样标注。数据采集覆盖波士顿和新加坡两个城市——包括城市主干道、居民区、十字路口、环形交叉口、隧道和高速公路等多种路况，以及白天、夜晚、黄昏、雨天等不同光照和天气条件。这种多样性使得基于 nuScenes 训练的模型对光照和天气变化具有更好的鲁棒性。\u003c/p\u003e\n\u003cp\u003e该数据集的核心价值在于其多模态特性：每辆数据采集车在同一时间戳下同时提供 6 个环视摄像头图像（覆盖 360° 视野）、5 个毫米波雷达点云和 1 个 32 线 Velodyne 激光雷达点云。研究者可以基于这些数据开发真正利用多模态传感器融合的感知算法，也可以分别验证不同传感器配置下算法的性能上限。\u003c/p\u003e\n\u003ch2 id=\"二传感器配置\"\u003e二、传感器配置\u003c/h2\u003e\n\u003cp\u003e每一帧数据中，nuScenes 的传感器配置规格与部署位置如下：\u003c/p\u003e\n\u003ch3 id=\"21-传感器规格\"\u003e2.1 传感器规格\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e摄像头（Camera）\u003c/strong\u003e：6 个环视摄像头，型号为 Basler ace acA1600-60gc（160 万像素），分别安装于车顶前部（CAM_FRONT）、左前（CAM_FRONT_LEFT）、右前（CAM_FRONT_RIGHT）、左侧（CAM_BACK_LEFT）、右侧（CAM_BACK_RIGHT）和后部（CAM_BACK）。每个摄像头输出 1600×900 像素 RGB 图像，帧率 12Hz，通过硬件同步实现同一时刻的全局快门采集。所有摄像头的水平视野之和覆盖 360°。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e激光雷达（LiDAR）\u003c/strong\u003e：1 个 Velodyne HDL-32E 32 线旋转式激光雷达，安装于车顶中心位置，垂直视野范围 -30° 至 +10°（共 40°），水平视野 360°，帧率 20Hz。每帧返回约 80 万个点，波长 905nm，最大探测距离约 100m。点云密度随距离增加而减小，近距离（\u0026lt; 20m）密度最高。\u003c/p\u003e","title":"nuScenes数据集详解"},{"content":"一句话理解Scaling Law Scaling Law揭示了模型性能随计算量、参数量和数据量呈幂律增长的定量关系，但实际工程中面临计算预算有限、数据质量不均、训练不稳定等约束，需要在这些变量之间找到最优平衡点。\n1. Scaling Law的核心原理 1.1 三大Scaling Law OpenAI在2020年提出的Scaling Law奠定了大模型训练的理论基础，论文\u0026quot;Scaling Laws for Neural Language Models\u0026quot;通过大量实验发现：模型损失随计算量、参数量和训练数据量的增加而呈现可预测的幂律下降关系。\n$$ L(N, D) = \\frac{A}{N^\\alpha} + \\frac{B}{D^\\beta} + L_\\infty $$其中第一项 $\\frac{A}{N^\\alpha}$ 是模型容量带来的损失，第二项 $\\frac{B}{D^\\beta}$ 是数据量带来的损失，第三项 $L_\\infty$ 是数据本身固有熵的下界——即使无限数据和无限参数也无法突破。\n其中 $N$ 是参数量，$D$ 是数据量（tokens），$L_\\infty$ 是不可避免的损失（数据固有熵），$A, B, \\alpha, \\beta$ 是通过实验拟合的常数。\nChinchilla Scaling Law（DeepMind, 2022）进一步修正：对于给定的计算预算 $C$，最优的模型大小和数据量满足：\n$$ N_{opt} \\propto C^{0.5}, \\quad D_{opt} \\propto C^{0.5} $$即计算预算翻倍时，模型大小和数据量应该各增加约1.4倍（$\\sqrt{2}$），而不是把全部预算都投到模型规模上。这个发现颠覆了此前\u0026quot;模型越大越好\u0026quot;的直觉——更大的模型如果没有足够的数据支撑，性能反而不如小模型+大数据。\n1.2 Chinchilla最优分配 Chinchilla的核心贡献：之前的模型（包括GPT-3 175B）在训练数据量上都存在严重不足。GPT-3使用了300B tokens训练，按Chinchilla法则最优只需约130B tokens（约2.3倍过量参数）。Chinchilla（70B参数）用1.4T tokens训练，在相同计算预算下全面超越了GPT-3（175B参数）的表现。\n对于VLA模型，纯Chinchilla法则需要修正——视觉编码器在前端增加了大量计算量（每张图像需要处理约196个patch），改变了整体的计算预算分布。一个70B VLA模型的经验参数和计算分配：\n组件 参数量 计算占比 Vision Encoder 1B-4B 15-20% Projector 0.1-0.5B 1-2% LLM 7B-70B 78-84% 这说明视觉编码器的计算占比远高于其参数量所占的比例，因为图像的前向计算涉及大量的二维卷积和patch embedding操作，比文本token的embedding查找昂贵得多。这也是VLA模型训练效率低于纯LLM的原因之一。\n1.3 计算预算下的最优决策 给定固定计算预算 $C$（以FLOPs计），团队需要决定模型大小和数据量的组合。实际决策矩阵：\n预算 $C$ 推荐 $N_{opt}$ 推荐 $D_{opt}$ 典型配置 1e21 FLOPs 400M 22B tokens 0.4B模型 + 22B数据 1e22 FLOPs 1.5B 85B tokens 1.5B模型 + 85B数据 1e23 FLOPs 7B 400B tokens 7B模型 + 400B数据 1e24 FLOPs 40B 2.2T tokens 40B模型 + 2.2T数据 工程经验：大多数团队的预算处于1e22-1e23 FLOPs之间（对应数十到数百张GPU训练数周到数月）。Chinchilla法则是一个好的起点，但需要根据实际数据质量和训练稳定性微调。例如领域数据（Domain Data）更多的项目可以适当增加参数比，因为更有价值的数据可以支撑更大的模型而不至于过拟合。\n1.4 Scaling Law的迁移性 Scaling Law的一个关键性质是迁移性：从小模型上拟合的 $\\alpha, \\beta$ 参数可以准确预测大模型的表现。这意味着可以用1B模型的实验来预测7B模型的表现。\n实测迁移误差：\n小模型→大模型 Loss预测误差 预算节约 0.1B → 1B \u0026lt;0.02 ~10× 1B → 7B \u0026lt;0.05 ~7× 7B → 70B \u0026lt;0.10 ~10× 预测公式：\n$$ L_{large}(N_{large}, D) \\approx L_{small}(N_{small}, D) - \\frac{A}{N_{large}^\\alpha} + \\frac{A}{N_{small}^\\alpha} $$实操建议：在项目启动阶段先用小规模实验拟合scaling law参数，指导大规模训练的资源分配和预算规划。具体流程：先用1B模型在多组参数下训练少量步数拟合scaling law参数，再用7B模型验证（大约2周训练），最后决定是否用70B模型。这种方法可以将大规模训练的成本和风险降低10倍，避免盲目投入上百张GPU资源后才发现策略不对。\n2. 数据混合配比 2.1 多源数据的挑战 VLA模型需要同时掌握语言理解、视觉感知和驾驶决策，训练数据来自多个来源：\nWebData：互联网文本和图文对，量大但质量参差不齐 Domain Data：自动驾驶专属数据（路测场景描述、轨迹数据、控制日志） Synthetic Data：仿真器生成的驾驶场景 Instruction Data：人工标注的指令-响应对 每种数据的质量和覆盖范围不同，简单等比例混合会带来次优结果——WebData过多会稀释领域能力，Domain Data过多则可能过拟合。Domain Data虽然量小但价值最高（路测数据直接对应部署场景），Synthetic Data量大但可能与真实场景有domain gap（仿真与现实之间的差异），需要谨慎配比。\n2.2 Pareto前沿与最优配比 核心是找到Pareto最优面——在固定总数据量的情况下，如何分配各源数据比例使模型在目标任务上表现最好。\n实验方法：对数据比例进行网格搜索或多目标优化。典型结果：\n数据来源 随机混合 Pareto最优 变化 WebData 70% 45% -25% Domain Data 15% 35% +20% Synthetic 10% 12% +2% Instruction 5% 8% +3% Domain Data从15%提升到35%，驾驶场景感知精度提升约12%，而WebData的减少几乎不影响语言能力。\n2.3 数据质量分阶段过滤实践 在工程实践中，数据过滤通常分阶段进行以控制计算成本。第一阶段使用计算量小的方法（如困惑度过滤，只需一次前向传播即可评分）快速过滤明显低质量的数据（如乱码文本、模糊图像），通常可以过滤掉10-20%的数据。第二阶段使用计算量大的方法（如任务相关性评分、去重）精细筛选保留的数据。这种级联策略可以将整个过滤管道的计算成本降低5-10倍。\n2.4 数据质量加权 不是所有数据点都具有相同的训练价值，低质量数据甚至可能损害模型性能。使用加权策略量化每个样本的训练价值：\n$$ w_i = \\frac{1}{1 + \\exp(-\\beta \\cdot q_i)} $$其中 $q_i$ 是数据质量分数，$\\beta$ 控制加权陡峭程度。\n常见质量评估方法：\n方法 评估维度 效率 精度 困惑度过滤 语言模型拟合度 高 中 去重（MinHash） 数据重复程度 高 高 任务相关性 与目标任务相关 中 高 人工标注质量 标注准确性 低 最高 2.5 Domain Data的上采样 Domain Data稀缺但价值高。上采样策略：对Domain Data按照 $\\gamma \u003e 1$ 的倍率上采样。\n经验法则：上采样率 $\\gamma$ 不宜超过5-10倍，过度上采样会导致过拟合和语言能力退化。\n$$ \\text{Performance} \\propto \\log(\\gamma), \\quad \\gamma \u003c 10 $$2.6 动态配比 固定配比不是最优选择，因为不同训练阶段模型对数据的需求不同。推荐策略：\n课程式调整：早期多WebData学习语言能力、世界知识等通用知识，后期增加Domain Data学习驾驶场景理解、轨迹预测等专有知识 基于梯度相似度：根据各数据源梯度的方向和大小动态调整采样权重 ratio_web = 0.7 - 0.4 * (step / total_steps) # 70%→30% ratio_domain = 0.3 + 0.4 * (step / total_steps) # 30%→70% 3. 训练曲线异常诊断 3.1 Loss Spike排查 Loss Spike是训练中最常见的问题，特征非常明显：loss从平稳状态突然跳高，幅度可能超过0.5，随后可能恢复也可能持续高位。对于VLA模型，loss spike可能出现在视觉编码器或语言模型的梯度上，两者表现不同。视觉编码器的spike通常更剧烈但恢复更快。\n常见原因与优先级：学习率过高或warmup不足（60%），表现为所有batch loss同时升高；数据批次中存在异常样本（25%），表现为单一batch的loss跳变；数值不稳定如梯度爆炸（10%），表现为梯度范数同时飙升；分布式通信错误（5%），表现为特定rank的loss异常。\n排查步骤：首先检查学习率曲线是否在spike附近有跳变，其次检查梯度范数是否超过阈值（可用torch.nn.utils.clip_grad_norm_调试），然后记录spike对应的具体数据样本便于定位问题数据，最后检查模型参数是否有NaN（往往是数值崩溃的最终信号）。建议在训练脚本中自动记录spike时的快照。\n3.2 梯度爆炸 信号：$\\lVert g \\rVert_2 \u003e 10 \\times \\text{历史均值}$\n标准解决方案：使用梯度裁剪（torch.nn.utils.clip_grad_norm_）、将学习率降低到原来的1/5-1/10、检查loss函数中是否有除零或对数运算错误。\n模型规模 建议max_norm 备注 \u0026lt;1B 5.0 较小模型容错更大 1B-7B 1.0 标准推荐 7B-70B 0.5-1.0 越大模型裁剪越保守 \u0026gt;70B 0.5 超大模型需更严格 3.3 NaN排查 系统性排查顺序（按出现频率从高到低）：\n检查输入数据是否包含NaN或inf（最常见来源，占50%以上） 检查模型初始化方法（过大或过小的初始值导致训练早期就出现NaN） 检查数值精度：bf16比fp16更稳定，fp16训练需要loss scaling配合 检查LayerNorm epsilon（建议\u0026gt;1e-5，过小的epsilon在低精度下容易导致除零） def check_nan(module, grad_input, grad_output): for grad in grad_input: if grad is not None and torch.isnan(grad).any(): raise RuntimeError(\u0026#34;NaN detected\u0026#34;) 3.4 Loss发散模式 模式 特征 根因 方案 早期发散 前10步loss不降反升 LR过高/warmup不足 降低LR/增加warmup 后期发散 稳步下降后突然发散 LR scheduler问题 使用cosine decay 周期性发散 每隔K步loss跳变 数据顺序性问题 shuffle数据 单调上涨 loss持续上涨 代码bug/梯度方向错 检查loss计算 4. VLA模型数据预处理 4.1 与纯语言模型的差异 维度 纯语言模型 VLA模型 输入模态 文本 图像+文本+轨迹 序列长度 2K-8K tokens 4K-16K tokens 数据格式 纯文本 多模态对齐格式 预处理复杂度 低 高 4.2 图像预处理Pipeline 标准VLA图像处理流程包含5个步骤：加载解码（从JPEG/PNG读取为RGB tensor）→Resize（保持宽高比，常见分辨率224×224或336×336）→Normalize（使用ImageNet均值和方差归一化像素值到[0,1]范围）→Patch Embed（将图像切分为14×14的patches并投影为token序列）→位置编码（添加2D位置编码或RoPE表示空间位置信息）。\nI/O是训练瓶颈。优化方案：\n方法 加速比 复杂度 WebDataset格式 2-3× 低 预解码为numpy 3-5× 低 GPU解码（DALI） 10-20× 中 4.3 Tokenization策略 策略 优势 适用 统一tokenizer 简单实现 快速原型 独立tokenizer 精度高 生产级VLA 分层次tokenization 灵活性高 超大VLA 轨迹数据的离散化tokenization：\ndef discretize_trajectory(traj, num_bins=256): x_bins = np.linspace(MIN_X, MAX_X, num_bins) y_bins = np.linspace(MIN_Y, MAX_Y, num_bins) tokens = [np.digitize(x, x_bins) * num_bins + np.digitize(y, y_bins) for x, y in traj] return tokens 5. Curriculum Learning 5.1 课程维度 维度 简单→困难 场景复杂度 直道→弯道→复杂路口 光照条件 白天→黄昏→夜间 天气 晴天→多云→雨/雪 交通密度 无车→少量→拥堵 5.2 课程计划的实现 class CurriculumManager: def __init__(self, stages): self.stages = stages # [(filter_fn, steps), ...] def get_filter(self, step): cum = 0 for fn, s in self.stages: cum += s if step \u0026lt; cum: return fn return lambda x: True 一个典型的VLA课程计划示例（100K步训练）：\n阶段 步数 数据范围 学习率 1 0-10K 直道+白天+晴天 1e-4 warmup 2 10K-30K +弯道+黄昏 1e-4 3 30K-60K +夜间+多云 5e-5 4 60K-80K +雨天+拥堵 2e-5 5 80K-100K 全量+困难上采样 1e-5 cooldown 5.3 自动课程发现 基于loss的自动课程：$p_i \\propto \\text{loss}_i^\\gamma$，$\\gamma$ 通常取0.5-2.0。核心思想是让模型更多看到当前还学不好的样本——高loss样本获得更高采样权重，但随着训练进行，这些样本的loss下降后，采样权重也相应降低，从而实现自动化的渐进式学习。\n5.4 课程学习效果 策略 复杂场景ADE 收敛步数 随机顺序 0.38m 100K 手工课程 0.32m 85K 自动课程 0.30m 80K 混合策略 0.29m 75K 课程学习在VLA模型训练中效果显著：复杂场景（夜间+雨天+拥堵路口）的轨迹预测精度提升约24%，收敛所需步数从100K减少到75K。同时训练过程更加稳定，loss spike频率降低约40%，模型在困难场景上的泛化能力明显改善。这证明\u0026quot;先易后难\u0026quot;的学习顺序对VLA这类多模态模型尤其有效，也说明合理的课程设计可以直接转化为可量化的工程收益。\n6. 数据Pipeline工程 6.1 数据加载架构 推荐VLA训练的数据加载架构，旨在处理海量多模态数据的同时最小化GPU空闲时间：\n[ → 存 储 [ 层 预 ] 处 理 ( W S o 3 r / k N e F r S ] / S ( S 多 D 进 ) 程 / → D A [ L 数 I 据 ) 索 引 → ] [ ( 数 A 据 r B r u o f w f / e P r a ] r q ( u R e i t n ) g B u f f e r ) → [ 训 练 进 程 ] ( G P U ) 6.2 数据混洗与去重 全局混洗（在每个epoch开始时打乱所有数据）可以避免周期性bias，防止模型学到数据排序中的假关联。局部混洗（在数据加载buffer内打乱）保证最近N个样本的随机性，减少相邻样本的相关性。两者结合效果最佳。\n去重粒度 方法 查重率 开销 文本精确 Hash 100% 低 文本模糊 MinHash 80-95% 中 图像精确 Perceptual Hash 90% 低 场景级 3D相似度 70-85% 高 6.3 预处理策略 推荐混合离线+在线预处理方案，在训练吞吐和存储成本之间取得平衡。离线预处理减少训练时I/O压力，在线处理保留在训练中调整参数的灵活性。\n处理步骤 离线/在线 原因 图像解码 离线（存为numpy） 主要I/O瓶颈 Resize+Normalize 在线（GPU/DALI） 计算快，省存储 Tokenization 离线 计算量大 轨迹离散化 离线 计算量大 总结 Scaling Law和数据策略是大模型训练工程的两个核心支柱，前者回答\u0026quot;训练多少数据和参数最合适\u0026quot;，后者回答\u0026quot;用什么数据来训练最好\u0026quot;，两者结合直接影响最终模型效果和资源利用效率。关键要点：\nScaling Law给出计算预算、模型大小、数据量之间的定量关系，是训练策略制定的理论基础。Chinchilla法则指出预算下最优参数和数据量各占 $\\sqrt{C}$ 比例。小模型实验可预测大模型表现，迁移误差\u0026lt;0.1。 数据配比需要找到Pareto最优面。Domain Data（自动驾驶领域数据）推荐占30-40%，比通用WebData有更高的边际价值。 训练诊断：Loss Spike（约60%因学习率问题，包括warmup过快和cosine decay过激）、梯度爆炸（建议裁剪阈值1.0并配合梯度范数监控）、NaN（从输入数据和模型初始化开始系统性排查，先确认数据中没有异常值）。 Curriculum Learning按易到难组织训练数据，包括手工课程和自动课程两种方式，可提升复杂场景精度24%，加速收敛25%，并大幅降低训练不稳定性。 数据Pipeline的I/O优化是VLA训练的关键瓶颈，推荐混合离线+在线预处理方案。图像解码和Tokenization等重计算任务离线进行，Resize等轻计算保留在线以节省存储成本。 问题：大模型训练中计算预算有限、数据配比不当、训练不稳定等因素导致模型效果不佳，尤其是在VLA多模态场景下各组件（视觉编码器、语言模型）的训练需求和收敛速度差异较大，训练数据来源多样但质量参差 → 方法：基于Scaling Law确定最优参数和数据量配比 + Pareto最优数据混合策略 + Curriculum Learning按易到难组织训练 + 训练异常诊断系统 → 结果：固定预算下模型性能提升15-25%，训练收敛速度加快20-30%，训练稳定性显著提升（loss spike减少约50%）。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/scaling-law%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%AD%96%E7%95%A5/","summary":"模型越大越好是一个粗糙的直觉，实际工程中需要在计算预算、数据配比、模型容量之间找到最优平衡。本文讲解scaling law的核心公式与迁移规律、数据混合配比的经验法则、训练曲线异常诊断、以及VLA模型训练中的数据预处理Pipeline与curriculum learning策略。","title":"Scaling Law与数据策略：训好大模型的工程法则"},{"content":"一句话理解车端C++开发 车端C++开发的核心是将Python原型中的功能以更高的效率、更可控的内存和更低的延迟重新实现，同时满足车规级的安全、稳定和实时性要求。\n1. 从Python到C++的思维转换 1.1 Python原型的性能瓶颈 Python + PyTorch开发效率高但运行效率低于C++ 10-50倍，主要原因是Python是解释执行且有GIL限制。关键计算瓶颈：\n组件 Python耗时 C++耗时 加速比 模型推理 (7B VLA) 200-500ms 30-80ms (TRT) 5-10× 数据预处理 15-30ms 1-3ms (CUDA) 10-15× 后处理 (NMS) 10-25ms 0.5-2ms 10-20× 传感器读取 5-15ms 0.5-2ms 10-30× 总延迟：Python 250-600ms vs C++ 30-90ms。自动驾驶系统要求端到端延迟\u0026lt;100ms（从传感器输入到控制指令输出），这个硬实时要求决定了C++是唯一可行的选择。\n1.2 Pipeline重设计 Python Pipeline通常同步串行。C++应设计为异步流水线：\n[ S e n s o r ] → [ P r e p r o c e s s ] → [ I n f e r ( G P U ) ] → [ C o n t r o l ] → [ A c t u a t o r ] 每个阶段运行在独立线程中，通过无锁队列（lock-free queue）传递数据，端到端延迟从累加变为取各阶段最大值。Python串行方案端到端延迟250ms，而C++异步流水线方案端到端仅需80ms（由最慢的推理阶段决定）。\n1.3 核心转换模式 Python：动态类型+垃圾回收+GIL+解释执行，运行时才知道变量类型和函数调用目标，导致大量运行时的类型检查和动态分发。C++：静态类型+手动内存管理+无锁并发+编译优化，所有类型和函数调用在编译期确定。例如 x = [1, 2, 3] 对应 std::vector\u0026lt;int\u0026gt; x{1, 2, 3}，编译期类型确定使编译器可以做自动向量化、内联展开、常量传播、死代码消除等激进优化，这是C++比Python快10-50倍的根本原因。\n2. TensorRT C++ API 2.1 从PyTorch到TensorRT引擎 导出ONNX并构建引擎：\ntorch.onnx.export(model, dummy, \u0026#34;model.onnx\u0026#34;, opset_version=17, input_names=[\u0026#34;input\u0026#34;], output_names=[\u0026#34;output\u0026#34;], dynamic_axes={\u0026#34;input\u0026#34;: {0: \u0026#34;batch\u0026#34;}, \u0026#34;output\u0026#34;: {0: \u0026#34;batch\u0026#34;}}) auto* builder = nvinfer1::createInferBuilder(logger); auto* network = builder-\u0026gt;createNetworkV2(1U \u0026lt;\u0026lt; static_cast\u0026lt;int\u0026gt;(kEXPLICIT_BATCH)); auto* parser = nvonnxparser::createParser(*network, logger); parser-\u0026gt;parseFromFile(\u0026#34;model.onnx\u0026#34;, static_cast\u0026lt;int\u0026gt;(kNONE)); auto* config = builder-\u0026gt;createBuilderConfig(); config-\u0026gt;setMemoryPoolLimit(nvinfer1::MemoryPoolType::kWORKSPACE, 1ULL \u0026lt;\u0026lt; 30); config-\u0026gt;setFlag(nvinfer1::BuilderFlag::kFP16); auto* engine = builder-\u0026gt;buildSerializedNetwork(*network, *config); 2.2 运行时 struct TRTInfer { nvinfer1::IExecutionContext* ctx_; cudaStream_t stream_; std::vector\u0026lt;void*\u0026gt; buffers_; TRTInfer(const std::string\u0026amp; path) { auto* engine = nvinfer1::createInferRuntime(logger) -\u0026gt;deserializeCudaEngine(read_file(path).data(), ...); ctx_ = engine-\u0026gt;createExecutionContext(); for (int i = 0; i \u0026lt; engine-\u0026gt;getNbIOTensors(); i++) cudaMalloc(\u0026amp;buffers_.emplace_back(), volume( engine-\u0026gt;getTensorShape(engine-\u0026gt;getIOTensorName(i))) * 4); cudaStreamCreate(\u0026amp;stream_); } void infer(float* in, float* out) { cudaMemcpyAsync(buffers_[0], in, ..., stream_); ctx_-\u0026gt;enqueueV2(buffers_.data(), stream_, nullptr); cudaMemcpyAsync(out, buffers_[1], ..., stream_); cudaStreamSynchronize(stream_); } }; 2.3 CUDA Graph 输入形状固定时，将推理捕获为CUDA Graph后直接replay，减少50-70%的kernel launch开销：\ncudaGraph_t graph; cudaGraphExec_t instance; context_-\u0026gt;enqueueV2(buffers, stream, nullptr); cudaStreamEndCapture(stream, \u0026amp;graph); cudaGraphInstantiate(\u0026amp;instance, graph, NULL, NULL, 0); cudaGraphLaunch(instance, stream); 在VLA模型中，数百个kernel的launch overhead在CPU端可达数毫秒，CUDA Graph通过一次launch执行整个graph可完全消除此开销，实测可将推理延迟降低20-30%。\n3. CUDA Kernel手写优化 3.1 应用场景与图像归一化 需要手写CUDA kernel的场景：自定义算子（VLA cross-attention融合操作）、预处理/后处理（图像归一化/NMS）、模型输出到控制指令的格式转换。\n__global__ void normalize_kernel(const uint8_t* input, float* output, int h, int w, int c, const float* mean, const float* std) { int idx = blockIdx.x * blockDim.x + threadIdx.x; if (idx \u0026gt;= h * w * c) return; int ch = idx % c; int pixel = idx / c; // HWC→CHW + normalize output[ch * h * w + pixel] = (input[idx] / 255.0f - mean[ch]) / std[ch]; } 1920×1080×3图像约622万个线程，grid=(24309, 1), block=(256, 1)，在Orin上约0.8ms，在A100上约0.3ms完成。\n3.2 共享内存优化 Softmax用共享内存比全局内存快10倍。核心技巧：__syncthreads() 保证一致性和规约模式避免bank conflict：\n__global__ void softmax_kernel(float* input, float* output, int cols) { extern __shared__ float shared[]; int tid = threadIdx.x, row = blockIdx.x; shared[tid] = (tid \u0026lt; cols) ? input[row * cols + tid] : -INFINITY; __syncthreads(); for (int i = blockDim.x / 2; i \u0026gt; 0; i \u0026gt;\u0026gt;= 1) { if (tid \u0026lt; i) shared[tid] = fmaxf(shared[tid], shared[tid + i]); __syncthreads(); } float max_val = shared[0]; __syncthreads(); shared[tid] = (tid \u0026lt; cols) ? expf(input[row * cols + tid] - max_val) : 0; __syncthreads(); for (int i = blockDim.x / 2; i \u0026gt; 0; i \u0026gt;\u0026gt;= 1) { if (tid \u0026lt; i) shared[tid] += shared[tid + i]; __syncthreads(); } if (tid \u0026lt; cols) output[row * cols + tid] = shared[tid] / shared[0]; } 4. 内存管理 4.1 车端内存约束 平台 统一内存 功耗 Jetson Orin 32-64 GB 15-60W Thor 64-128 GB 60-150W 服务器A100 80 GB 400W 车端使用统一内存架构（CPU和GPU共享同一物理内存），资源竞争比服务器更激烈。例如推理占用GPU时，CPU读取传感器数据的延迟也会增加，需要精细的内存带宽分配。\n4.2 Pool Allocator cudaMalloc/cudaFree每次约10-100μs，内存池预分配消除此开销：\nclass DeviceMemoryPool { std::vector\u0026lt;void*\u0026gt; free_blocks_; std::mutex mutex_; public: DeviceMemoryPool(size_t sz, size_t cnt) { for (size_t i = 0; i \u0026lt; cnt; i++) { void* p; cudaMalloc(\u0026amp;p, sz); free_blocks_.push_back(p); } } void* alloc() { std::lock_guard\u0026lt;std::mutex\u0026gt; lock(mutex_); auto p = free_blocks_.back(); free_blocks_.pop_back(); return p; } void dealloc(void* p) { std::lock_guard\u0026lt;std::mutex\u0026gt; lock(mutex_); free_blocks_.push_back(p); } }; 4.3 Ring Buffer 流水线阶段间用Ring Buffer零拷贝传递数据：\ntemplate\u0026lt;typename T\u0026gt; class RingBuffer { std::vector\u0026lt;T\u0026gt; buffer_; std::atomic\u0026lt;size_t\u0026gt; write_{0}, read_{0}; public: RingBuffer(size_t cap) : buffer_(cap) {} bool push(const T\u0026amp; item) { if (write_.load() - read_.load() \u0026gt;= buffer_.size()) return false; buffer_[write_.load() % buffer_.size()] = item; write_.fetch_add(1, std::memory_order_release); return true; } bool pop(T\u0026amp; item) { if (read_.load() \u0026gt;= write_.load()) return false; item = buffer_[read_.load() % buffer_.size()]; read_.fetch_add(1, std::memory_order_release); return true; } }; 4.4 Cache对齐 使用alignas强制cache line对齐，避免多线程false sharing：\nstruct alignas(64) ThreadData { float sum; int count; char pad[...]; }; 5. 线程安全与锁设计 5.1 多线程架构 一个典型的生产级车端Pipeline包含6个线程：Sensor IO（读取相机/LiDAR）、Preprocess（图像归一化/点云体素化）、Inference（VLA GPU推理）、Postprocess（轨迹解码/障碍物过滤）、Control（控制指令计算）、Monitor（健康检查/看门狗）。\n5.2 无锁队列 SPSC场景的lock-free实现：\nclass LockFreeQueue { std::array\u0026lt;std::array\u0026lt;char, 256\u0026gt;, 256\u0026gt; buffer_; std::atomic\u0026lt;size_t\u0026gt; head_{0}, tail_{0}; public: bool enqueue(const char* data, size_t sz) { size_t t = tail_.load(std::memory_order_relaxed); if (t - head_.load() \u0026gt;= buffer_.size()) return false; memcpy(buffer_[t % buffer_.size()].data(), data, sz); tail_.store(t + 1, std::memory_order_release); return true; } bool dequeue(char* data, size_t* sz) { size_t h = head_.load(std::memory_order_relaxed); if (h \u0026gt;= tail_.load(std::memory_order_acquire)) return false; memcpy(data, buffer_[h % buffer_.size()].data(), *sz); head_.store(h + 1, std::memory_order_release); return true; } }; 5.3 死锁预防 车端死锁可能导致严重事故，预防策略至关重要：固定锁获取顺序（所有线程按相同顺序拿锁）、使用std::lock一次性获取多个锁避免死锁、避免锁中锁（持有一个锁时不获取另一个）、超时机制：\nstd::timed_mutex mtx; if (mtx.try_lock_for(std::chrono::milliseconds(10))) { /* process */ mtx.unlock(); } else { /* 超时：日志记录后重试 */ } 6. IPC通信 6.1 通信场景与选择 通信对 数据量 延迟 推荐机制 传感器→预处理 ~100 MB/s \u0026lt;5ms 共享内存 预处理→推理 ~10 MB/s \u0026lt;10ms 共享内存 推理→控制 ~10 KB/s \u0026lt;2ms 共享内存/socket 跨芯片 ~10 KB/s \u0026lt;10ms Unix socket/ZMQ 6.2 共享内存 大量传感器数据（如1920×1080×3的原始图像，每帧约6MB）必须用共享内存传递，避免socket和ROS2的序列化开销。实现：\nint fd = shm_open(\u0026#34;/sensor_shm\u0026#34;, O_CREAT | O_RDWR, 0666); ftruncate(fd, sizeof(SensorFrame)); auto* frame = (SensorFrame*)mmap(nullptr, sizeof(SensorFrame), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); auto* ready = (std::atomic\u0026lt;uint64_t\u0026gt;*)(frame + 1); ready-\u0026gt;store(timestamp, std::memory_order_release); 6.3 Socket与ZeroMQ 跨芯片通信用Unix Domain Socket（比TCP loopback快30%）：\nint sock = socket(AF_UNIX, SOCK_DGRAM, 0); struct sockaddr_un addr = {AF_UNIX, \u0026#34;/tmp/control.sock\u0026#34;}; bind(sock, (struct sockaddr*)\u0026amp;addr, sizeof(addr)); fcntl(sock, F_SETFL, O_NONBLOCK); 异构架构（如Orin端ARM + 行泊车x86 + MCU实时控制）间用ZeroMQ实现灵活的发布-订阅通信：\nzmq::context_t ctx(1); zmq::socket_t pub(ctx, ZMQ_PUB); pub.bind(\u0026#34;tcp://*:5555\u0026#34;); pub.send(zmq::message_t(data, size), zmq::send_flags::none); 7. 性能优化 7.1 Profiling与常见陷阱 Nsight Systems用于GPU kernel profiling，perf用于CPU热点分析，valgrind检测内存泄漏，AddressSanitizer检测内存错误。\n陷阱 表现 方案 不必要内存拷贝 延迟+20-30% Zero-copy传递 虚函数高频调用 每调用多几ns CRTP或std::variant 异常处理 异常路径ms级 错误码替代 锁竞争 多核利用率低 无锁数据结构 未对齐内存 crash或变慢 alignas强制对齐 总结 从Python原型到车端C++的转换是自动驾驶工程化的核心挑战，直接决定了系统能否满足实时性要求：\nTensorRT C++ API将模型推理从200-500ms降至30-80ms，CUDA Graph进一步将launch开销降低50-70%。 手写CUDA kernel对预处理/后处理的优化空间达10-20倍，共享内存的正确使用和syncthreads的合理放置是关键。 内存池预分配避免频繁cudaMalloc/cudaFree（每次10-100μs），Ring Buffer实现零拷贝流水线。 无锁/低锁设计是车端多线程的核心原则，理解C++ memory_order（relaxed/acquire/release/seq_cst）语义是编写正确无锁代码的基本要求。 IPC选择取决于数据量和延迟要求：大量数据（\u0026gt;1MB/s）用共享内存，跨芯片通信用Unix socket或ZeroMQ。 问题：Python原型推理延迟高（250-600ms），内存管理不可控且多线程受GIL限制，不满足车端\u0026lt;100ms实时性要求 → 方法：TensorRT C++部署 + 手写CUDA kernel + 内存池预分配 + 无锁多线程 + IPC通信 → 结果：端到端延迟降至30-90ms，内存可控无泄漏，满足车规级实时性和稳定性要求。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E8%BD%A6%E7%AB%AFc++%E5%BC%80%E5%8F%91%E5%AE%9E%E6%88%98/","summary":"自动驾驶车端代码必须用C++满足实时性要求，但研究团队往往只有Python经验。本文梳理从PyTorch原型到车端C++部署的关键转换：TensorRT C++ API调用、CUDA kernel手写优化、内存管理策略、线程安全与锁设计、以及车端常见的IPC通信机制。","title":"车端C++开发实战：从Python原型到生产级代码"},{"content":"一、引言 端到端自动驾驶模型的快速发展对评测体系提出了迫切需求。从早期的行为克隆论文仅报告 L2 位移误差，到如今 NAVSIM、nuPlan、Bench2Drive、CARLA 等多个基准各自定义复杂的复合指标，评测指标呈现出\u0026quot;从单一到综合、从开环到闭环、从粗粒度到细粒度\u0026quot;的演进趋势。\n然而，指标选择本身也成为了一个需要深思熟虑的问题——不同的指标反应驾驶质量的不同侧面，单一指标往往存在偏差。理解每个指标的设计动机、计算细节和局限性，是做出可信研究的必要条件。\n本文系统梳理端到端驾驶评测领域的主流指标，涵盖开环指标、闭环综合指标、按场景分解指标以及成功率等，并分析各指标之间的关联与互补关系。\n二、开环评测指标 开环指标衡量模型预测轨迹与人类真值轨迹之间的差距，虽然不直接反映真实驾驶能力，但因其计算简单、可复现性强而被广泛使用。\n2.1 L1/L2 位移误差 定义：在未来时刻 t（通常取 1.0s、2.0s、3.0s）上，预测位置与真值位置之间的距离。\n公式：\nL A F 2 D D _ E E t = = = 1 | | / P P T _ _ ) p p r r × e e d d Σ ( ( _ T t t ) ) - - | P P P _ _ _ p g g r t t e ( ( d T t ( ) ) t | | | | ₂ ₂ - P _ g t ( t ) | | ₂ 解读：L2 误差越小越好，但存在显著的饱和效应——当误差降到一定程度后，进一步降低 L2 未必意味着更好的驾驶能力。更严重的问题是：L2 误差对轨迹的\u0026quot;合理性\u0026quot;完全不敏感，一个不安全的急刹车轨迹和一个安全的平稳减速轨迹可能有相同的 L2 误差。此外，L2 误差也无法区分横向偏差和纵向偏差——偏离车道 0.5 米和速度偏差 5 km/h 可能产生相同的 L2 值。\n2.2 开环碰撞率 定义：预测轨迹中 EGO 与场景中其他物体发生碰撞的帧数比例。\n重要警告：这是一个存在根本性缺陷的指标。开环碰撞检测基于模型的\u0026quot;预测\u0026quot;轨迹而非实际执行轨迹——如果模型预测了一个偏离真值 5 米的路径，碰撞检测会报告碰撞，但这个碰撞在真实场景中根本不存在。模型完全可以预测\u0026quot;停车不动\u0026quot;来获得极低碰撞率。因此在论文中使用开环碰撞率作为安全性指标是不合理的，审稿人应对此提出质疑。开环碰撞率不应作为安全性评估依据。\n2.3 横向/纵向分解误差 将 L2 误差分解为横向误差（垂直于行驶方向）和纵向误差（沿行驶方向）：\n横向误差大：通常意味着车道保持能力不足，可能导致偏离车道 纵向误差大：通常意味着速度控制不佳，可能导致与前车距离不当 分解误差有助于诊断模型的具体问题类型，比单一 L2 提供更多的诊断信息。\n2.4 开环指标的核心局限 NAVSIM 论文通过大规模实验证明：\nL2(1s) 与闭环 PDMS 的 Pearson r ≈ 0.1（几乎不相关） L2(3s) 与闭环 PDMS 的 Pearson r ≈ 0.3（弱相关） 开环碰撞率与闭环碰撞率之间几乎没有一致性 本质上，开环指标衡量的是\u0026quot;模仿能力\u0026quot;而非\u0026quot;驾驶能力\u0026quot;——模型可以出色地模仿人类轨迹，但面对分布偏移时完全失效。\n三、闭环评测综合指标 闭环指标在仿真环境中计算，能够真实反映模型在连续决策场景中的表现。\n3.1 PDMS（Pseudo-Dynamic Metric Score） 由 NAVSIM 团队提出，是目前闭环评测领域最具影响力的综合指标之一。\n核心思想：在非反应式闭环仿真中，从安全性、可行驶区域合规性和舒适度三个维度综合评价。\n计算公式：\nP D M S = N o _ C o l l i s i o n × D r i v a b l e _ A r e a _ C o m p l i a n c e × ( 1 - 0 . 1 × E P D M S ) No_Collision：是否发生碰撞的二元指标（0 或 1）。一旦碰撞，PDMS 直接归零——反映安全是第一性原则。\nDrivable_Area_Compliance：车辆在可行驶区域内行驶的时间比例。由于 NAVSIM 的非反应式特性，一旦 EGO 驶出道路边界，几乎无法返回可行驶区域。\nEPDMS（Extended PDMS）：舒适度和通行效率的加权惩罚项：\nE P D M S = 0 + . 3 0 0 . 1 × 5 W × ( 时 W 间 ( 进 方 度 向 ) 盘 变 + 化 率 0 ) . 1 + 5 0 × . 1 W 5 ( 纵 × 向 加 W 速 ( 度 限 ) 速 违 + 规 ) 0 . + 1 5 0 . × 1 0 W ( × 横 向 W 加 ( 速 行 度 驶 ) 效 率 ) 各维度含义与惩罚条件：\n维度 测量指标 惩罚条件 权重 时间进度 沿导航路线的行驶里程比例 \u0026lt; 0.95 时开始惩罚 0.30 纵向加速度 加速和减速的幅度 \u0026gt; 2.5 m/s² 时惩罚 0.15 横向加速度 转弯离心力 \u0026gt; 2.0 m/s² 时惩罚 0.15 方向盘变化率 方向调整平顺性 \u0026gt; 60°/s 时惩罚 0.15 限速违规 超过限速的幅度 \u0026gt; 0 即开始惩罚 0.15 行驶效率 平均速度与道路限速的比例 \u0026lt; 0.7 时惩罚 0.10 从权重分配可以看出，NAVSIM 的设计者将时间进度（0.30）视为最重要的驾驶质量维度——这与直觉一致：一个无法有效到达目的地的规划器即使再安全、再舒适也是没有实际用处的。而纵向/横向加速度、方向盘变化率、限速合规和行驶效率这四个舒适度维度的权重各为 0.15，反映了设计者对驾乘体验的均衡考虑。\nW 函数将原始值映射到 [0,1] 区间：0 表示完美（无惩罚），1 表示完全无法接受。映射函数通常采用分段线性或 sigmoid 形式。\nPDMS 的优缺点：优点在于综合性强、各维度权重透明公开、碰撞直接归零体现了安全第一的设计原则。缺点在于二元碰撞惩罚过于严苛——轻微擦碰和严重事故被同样对待，导致 PDMS 的区分度在碰撞边界附近下降。此外 PDMS 无法区分\u0026quot;几乎成功\u0026quot;（如行驶了 99% 路线后碰撞）和\u0026quot;彻底失败\u0026quot;（如起步即碰撞），两者都会得到零分。\n3.2 CARLA 驾驶分数（Drive Score） CARLA Leaderboard 是自动驾驶领域历史最悠久的在线评测平台之一，其驾驶分数被广泛应用于端到端驾驶模型的横向比较。\n计算公式：\nD r i v e _ S c o r e = R o u t e _ C o m p l e t i o n × ( 1 - C o l l i s i o n _ P e n a l t y ) Route_Completion：车辆实际行驶距离占计划路线总距离的比例。\nCollision_Penalty：基于碰撞类型和严重程度的折扣系数：\n与行人碰撞：penalty = 1.0（任务直接失败） 与车辆碰撞：penalty = 0.6 与静态物体碰撞：penalty = 0.3 偏离道路：penalty 按违规持续时间累积 辅助违规指标：\n红灯违规次数（Red Light Violation） 停止标志违规次数（Stop Sign Violation） 车道线违规时长（Lane Violation） 导航路线偏离（Route Deviation） CARLA DS vs PDMS 的设计哲学差异： PDMS 采用\u0026quot;碰撞即归零\u0026quot;的保守策略，CARLA 允许碰撞后继续行驶（乘以一个 \u0026lt; 1 的折扣）。前者更安全导向，后者更通行效率导向。两种设计各有道理：安全至上的观点认为碰撞后应立即终止评估；效率至上的观点认为碰撞后仍可继续评估模型的事后应对能力。\n3.3 Bench2Drive 驾驶分数（DS） Bench2Drive 是 2024 年提出的评测基准，核心创新是将驾驶能力分解为 8 个子能力分别评估。\n8 项驾驶能力：前向控制（直道速度保持与车道居中）、跟随前车（安全跟车距离与速度匹配）、变道（动态交通流中安全变道）、左转（有保护和无保护左转）、右转（注意行人和自行车）、十字路口处理（直行通过信号灯路口）、弯道处理（弯道速度与走线控制）、停车（指定位置精准停靠）。\nDS 计算公式：\nD S = ( Σ w _ i × D S _ i ) ( Σ w _ i ) 其中 DS_i 是第 i 项能力的子分数，由安全性、通行效率和舒适度三部分组成：\nD S _ i = S a f e t y _ i × ( E f f i c i e n c y _ i + C o m f o r t _ i ) / 2 Bench2Drive 默认等权重（w_i = 1），但研究者可根据自身需求调整各能力的权重。\nBench2Drive DS 的优势：细粒度能力分解可一目了然地看出模型优势和短板；1000+ 预定义场景覆盖各种路况和操作；权重可调整使定制化评估成为可能。\n3.4 成功率（Success Rate, SR） 成功率是最直观的评估指标，衡量模型成功完成场景的比例。\n不同平台的成功定义：\n平台 成功条件 CARLA 到达目的地 + 碰撞 \u0026lt; 阈值 + 无重大违规 Bench2Drive 完成指定路线 + 零碰撞 nuPlan 在仿真时长内到达目的地 + Driving Score \u0026gt; 阈值 NAVSIM 完成导航路线 + PDMS \u0026gt; 0.6 成功率的优点是直观易懂，适合向非专业读者传达模型性能。缺点在于二值化损失了大量连续信息——两个模型可能一个成功率为 90%、另一个为 0%，但它们的实际驾驶能力差距或许并没有那么悬殊（成功率为 0% 的模型可能只是在一个高难度场景上失败了，但在其余场景上表现完美）。因此成功率必须与连续指标（如 PDMS 或 DS）配合使用才能提供完整的性能画像。改进方案：引入\u0026quot;部分成功率\u0026quot;概念，如每帧检查安全状态的帧级成功率，或按场景难度分层的加权成功率。\n四、各指标覆盖维度对比 指标类型 具体指标 安全性 通行效率 舒适度 可分解性 开环/闭环 开环位移 L2/ADE/FDE ✗ △ ✗ ✗ 开环 开环安全 开环碰撞率 △(不可靠) ✗ ✗ ✗ 开环 闭环综合 PDMS (NAVSIM) ✓ ✓ ✓ ✗ 闭环 闭环综合 Drive Score (CARLA) ✓ ✓ ✗ ✗ 闭环 闭环综合 DS (Bench2Drive) ✓ ✓ ✓ ✓ 闭环 闭环简单 Success Rate ✓ ✓ ✗ ✗ 闭环 关键观察：只有 PDMS 和 Bench2Drive DS 覆盖了舒适度维度；只有 Bench2Drive DS 提供了可分解的能力评估；开环指标在安全性和舒适度的评估上完全不可用；没有任何一个单一指标能完美覆盖所有维度。因此多指标报告不仅是必要的，而且是做出可信研究的基础要求。研究者在论文中应至少报告一种闭环综合指标和相应的分解结果，以提供对模型能力的全面评估。\n五、Per-Scenario 分解分析 5.1 典型场景类型与失败模式 左转：分有保护（箭头绿灯，较简单）和无保护（需判断对向直行车间隙，困难场景）。常见失败包括错过转弯时机、切入对向车道过晚、对车辆速度估计不准。右转：需关注右侧行人和自行车，常见失败是转弯半径过小压路沿、未充分观察右侧。变道：要求在动态交通流中找到安全的变道时机，常见失败是过于犹豫错过时机或过于激进导致后车急刹。十字路口直行：需关注横向来车是否闯红灯，常见失败是速度控制不当。弯道处理：需根据曲率调整速度和方向，常见失败是入弯速度过快或弯中修正过多。\n5.2 分解分析的价值 按场景分解的核心价值在于定位问题。一个模型在直道上表现完美（PDMS=0.95），但在无保护左转上频繁失败（PDMS=0.2），整体 PDMS=0.7 无法告诉研究者\u0026quot;问题出在左转\u0026quot;。Bench2Drive 的雷达图展示是优秀实践——8 项能力一目了然地呈现模型的长板和短板。当模型在常规场景上性能饱和（PDMS \u0026gt; 0.90），建议转向困难场景如 nuScenes-GR-20K（20000 个高难度片段）进行更有效的区分。\n六、指标间的关联与互补 6.1 指标覆盖维度对比 指标 安全性 通行效率 舒适度 可分解性 开环/闭环 L2 Error ✗ △ ✗ ✗ 开环 开环碰撞率 △(不可靠) ✗ ✗ ✗ 开环 PDMS (NAVSIM) ✓ ✓ ✓ ✗ 闭环 Drive Score (CARLA) ✓ ✓ ✗ ✗ 闭环 DS (Bench2Drive) ✓ ✓ ✓ ✓ 闭环 Success Rate ✓ ✓ ✗ ✗ 闭环 单一指标只能反应驾驶质量的一个侧面：L2 误差反应轨迹精度但与安全性几乎无关，碰撞率反应安全性但无法反应舒适度，PDMS 综合性强但碰撞惩罚为二元且无法分解。实际驾驶质量是一个多维概念，没有任何单一指标可以完美量化——一个安全的模型可能效率极低（始终 5 km/h），一个高效的模型可能经常轻微擦碰，一个舒适的模型可能总是完不成路线。因此多指标报告是必要且必须的。\n6.2 指标间的 Pearson 相关性 NAVSIM 对不同指标一致性进行了分析：PDMS 和 Drivable Area Compliance 高度相关（r \u0026gt; 0.8），因为驶出道路必然导致任务失败；PDMS 和 Collision Score 中度相关（r ≈ 0.6）；PDMS 和 SR 高度相关（r ≈ 0.75），但 SR 的区分度不如 PDMS；L2 Error 和任何闭环指标的相关性都很低（r \u0026lt; 0.35）。不同闭环指标之间有一定一致性，但都不足以相互替代。\n6.3 指标的饱和现象 近年来一些指标出现严重通胀：nuScenes 的 L2 误差领先方法差距已缩小到厘米级，简单场景 PDMS 趋近于 1.0，CARLA Drive Score 在标准路线上已达天花板。建议转向长时域指标（5s、8s FDE）、使用困难场景子集（nuScenes-GR-20K）、优先采用闭环指标——它们的饱和程度远低于开环指标。\n七、指标选择实用指南 7.1 按研究目标选择 研究目标 首选指标 辅助指标 提出新的规划架构 闭环 PDMS + DS 场景级分解 + SR 感知+规划联合研究 L2（开环）+ PDMS（闭环） 横向/纵向分解 RL 规划方法 闭环 SR + DS PDMS + 碰撞率 行为克隆→RL 迁移 L2（开环）+ PDMS/L2（闭环） 训练过程的指标变化曲线 7.2 按论文发表要求 完整报告（推荐）：\nPDMS（NAVSIM 闭环）及其各维度分解 Bench2Drive DS 及其 8 项能力分解 Success Rate 在两种以上仿真平台验证（如 NAVSIM + nuPlan 或 NAVSIM + CARLA） 开环 L2 误差作为补充参考 精简报告（版面受限）：\n至少一种闭环综合指标（PDMS 或 DS） 碰撞率（闭环） Success Rate 明确指出仿真平台、评估模式和场景定义 无论采用哪种方案，都应避免仅报告开环指标的论文发表策略。审稿人和读者越来越意识到开环指标无法反映模型真实能力，仅依赖 L2 误差的 SOTA 声称在顶级会议上正变得不可接受。\n八、未来趋势 世界模型作为评估器：利用世界模型对规划结果的合理性进行评估，学习驾驶状态的\u0026quot;正常性\u0026quot;，对违反常识的轨迹给出高惩罚。有望解决当前指标对\u0026quot;概率合理但非真值\u0026quot;轨迹的不公平惩罚问题。\n因果评估：从\u0026quot;轨迹是否与真值一致\u0026quot;转向\u0026quot;决策是否合理\u0026quot;的评估范式。即使模型输出的轨迹偏离了人类驾驶的真值轨迹，只要在安全性、交互合理性和交通规则遵守方面表现良好，就应该获得高分。因果评估的核心方法是反事实推理——\u0026ldquo;如果 EGO 做出了不同的决策，结果是否会更好？\u0026ldquo;通过回答这一问题，评估系统可以区分\u0026quot;必须那样做\u0026quot;和\u0026quot;可以这样做但选择了不同做法\u0026quot;这两种截然不同的情况。\n个性化权重：允许用户调整 PDMS 或 DS 各维度权重生成个性化分数。安全性敏感用户设碰撞权重为 1.0，效率优先的网约车司机可降低舒适度权重。这种个性化评估将推动自动驾驶系统从\u0026quot;一刀切\u0026quot;式设计走向面向不同用户群体的差异化开发。\n九、总结 端到端自动驾驶评测已从单一的 L2 误差时代进入以 PDMS、Bench2Drive DS、CARLA Drive Score 和 Success Rate 为代表的多维综合指标时代。每个指标各有侧重：PDMS 综合且严格、CARLA DS 弹性且实用、Bench2Drive DS 细致可分解、Success Rate 直观但粗糙。\n正确理解并组合使用这些指标是做出可信研究的基础。L2 误差时代正在终结，闭环综合指标时代已经到来。研究者应始终报告多指标（特别是闭环指标），关注不同场景的分解表现，以获得对方法全面客观的评价。在选择指标时，建议遵循\u0026quot;闭环为主、开环为辅、多维度综合、分场景报告\u0026quot;的原则，这是当前端到端自动驾驶评测的最佳实践。同时也要注意，没有任何指标是完美的——每个指标都有设计假设和局限性，理解这些局限性比盲目追求高分更为重要。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E7%AB%AF%E5%88%B0%E7%AB%AF%E9%A9%BE%E9%A9%B6%E8%AF%84%E6%B5%8B%E6%8C%87%E6%A0%87%E5%85%A8%E6%99%AF/","summary":"\u003ch2 id=\"一引言\"\u003e一、引言\u003c/h2\u003e\n\u003cp\u003e端到端自动驾驶模型的快速发展对评测体系提出了迫切需求。从早期的行为克隆论文仅报告 L2 位移误差，到如今 NAVSIM、nuPlan、Bench2Drive、CARLA 等多个基准各自定义复杂的复合指标，评测指标呈现出\u0026quot;从单一到综合、从开环到闭环、从粗粒度到细粒度\u0026quot;的演进趋势。\u003c/p\u003e\n\u003cp\u003e然而，指标选择本身也成为了一个需要深思熟虑的问题——不同的指标反应驾驶质量的不同侧面，单一指标往往存在偏差。理解每个指标的设计动机、计算细节和局限性，是做出可信研究的必要条件。\u003c/p\u003e\n\u003cp\u003e本文系统梳理端到端驾驶评测领域的主流指标，涵盖开环指标、闭环综合指标、按场景分解指标以及成功率等，并分析各指标之间的关联与互补关系。\u003c/p\u003e\n\u003ch2 id=\"二开环评测指标\"\u003e二、开环评测指标\u003c/h2\u003e\n\u003cp\u003e开环指标衡量模型预测轨迹与人类真值轨迹之间的差距，虽然不直接反映真实驾驶能力，但因其计算简单、可复现性强而被广泛使用。\u003c/p\u003e\n\u003ch3 id=\"21-l1l2-位移误差\"\u003e2.1 L1/L2 位移误差\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e定义\u003c/strong\u003e：在未来时刻 t（通常取 1.0s、2.0s、3.0s）上，预测位置与真值位置之间的距离。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e公式\u003c/strong\u003e：\u003c/p\u003e\n\n\n\n\u003cdiv class=\"goat svg-container \"\u003e\n  \n    \u003csvg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      font-family=\"Menlo,Lucida Console,monospace\"\n      \n        viewBox=\"0 0 344 57\"\n      \u003e\n      \u003cg transform='translate(8,16)'\u003e\n\u003cpath d='M 48,24 L 48,40' fill='none' stroke='currentColor'\u003e\u003c/path\u003e\n\u003cpath d='M 56,-8 L 56,8' fill='none' stroke='currentColor'\u003e\u003c/path\u003e\n\u003cpath d='M 144,8 L 144,24' fill='none' stroke='currentColor'\u003e\u003c/path\u003e\n\u003ctext text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'\u003eL\u003c/text\u003e\n\u003ctext text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'\u003eA\u003c/text\u003e\n\u003ctext text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'\u003eF\u003c/text\u003e\n\u003ctext text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'\u003e2\u003c/text\u003e\n\u003ctext text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'\u003eD\u003c/text\u003e\n\u003ctext text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'\u003eD\u003c/text\u003e\n\u003ctext text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'\u003e_\u003c/text\u003e\n\u003ctext text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'\u003eE\u003c/text\u003e\n\u003ctext text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'\u003eE\u003c/text\u003e\n\u003ctext text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'\u003e=\u003c/text\u003e\n\u003ctext text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'\u003e=\u003c/text\u003e\n\u003ctext text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'\u003e=\u003c/text\u003e\n\u003ctext text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'\u003e1\u003c/text\u003e\n\u003ctext text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'\u003e|\u003c/text\u003e\n\u003ctext text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'\u003e|\u003c/text\u003e\n\u003ctext text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'\u003e/\u003c/text\u003e\n\u003ctext text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'\u003eP\u003c/text\u003e\n\u003ctext text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'\u003eP\u003c/text\u003e\n\u003ctext text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'\u003eT\u003c/text\u003e\n\u003ctext text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'\u003e_\u003c/text\u003e\n\u003ctext text-anchor='middle' x='80' y='4' fill='currentColor' style='font-size:1em'\u003e_\u003c/text\u003e\n\u003ctext text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'\u003e)\u003c/text\u003e\n\u003ctext text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'\u003ep\u003c/text\u003e\n\u003ctext text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'\u003ep\u003c/text\u003e\n\u003ctext text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'\u003er\u003c/text\u003e\n\u003ctext text-anchor='middle' x='96' y='4' fill='currentColor' style='font-size:1em'\u003er\u003c/text\u003e\n\u003ctext text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'\u003e×\u003c/text\u003e\n\u003ctext text-anchor='middle' x='96' y='36' fill='currentColor' style='font-size:1em'\u003ee\u003c/text\u003e\n\u003ctext text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'\u003ee\u003c/text\u003e\n\u003ctext text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'\u003ed\u003c/text\u003e\n\u003ctext text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'\u003ed\u003c/text\u003e\n\u003ctext text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'\u003eΣ\u003c/text\u003e\n\u003ctext text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'\u003e(\u003c/text\u003e\n\u003ctext text-anchor='middle' x='120' y='4' fill='currentColor' style='font-size:1em'\u003e(\u003c/text\u003e\n\u003ctext text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'\u003e_\u003c/text\u003e\n\u003ctext text-anchor='middle' x='120' y='36' fill='currentColor' style='font-size:1em'\u003eT\u003c/text\u003e\n\u003ctext text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'\u003e)\u003c/text\u003e\n\u003ctext text-anchor='middle' x='136' y='4' fill='currentColor' style='font-size:1em'\u003e)\u003c/text\u003e\n\u003ctext text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'\u003e-\u003c/text\u003e\n\u003ctext text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'\u003e-\u003c/text\u003e\n\u003ctext text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'\u003e|\u003c/text\u003e\n\u003ctext text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'\u003eP\u003c/text\u003e\n\u003ctext text-anchor='middle' x='160' y='36' fill='currentColor' style='font-size:1em'\u003eP\u003c/text\u003e\n\u003ctext text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'\u003eP\u003c/text\u003e\n\u003ctext text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'\u003e_\u003c/text\u003e\n\u003ctext text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'\u003e_\u003c/text\u003e\n\u003ctext text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'\u003e_\u003c/text\u003e\n\u003ctext text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'\u003ep\u003c/text\u003e\n\u003ctext text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'\u003eg\u003c/text\u003e\n\u003ctext text-anchor='middle' x='184' y='4' fill='currentColor' style='font-size:1em'\u003eg\u003c/text\u003e\n\u003ctext text-anchor='middle' x='184' y='20' fill='currentColor' style='font-size:1em'\u003er\u003c/text\u003e\n\u003ctext text-anchor='middle' x='184' y='36' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='192' y='4' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'\u003ee\u003c/text\u003e\n\u003ctext text-anchor='middle' x='192' y='36' fill='currentColor' style='font-size:1em'\u003e(\u003c/text\u003e\n\u003ctext text-anchor='middle' x='200' y='4' fill='currentColor' style='font-size:1em'\u003e(\u003c/text\u003e\n\u003ctext text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'\u003ed\u003c/text\u003e\n\u003ctext text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'\u003eT\u003c/text\u003e\n\u003ctext text-anchor='middle' x='208' y='4' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'\u003e(\u003c/text\u003e\n\u003ctext text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'\u003e)\u003c/text\u003e\n\u003ctext text-anchor='middle' x='216' y='4' fill='currentColor' style='font-size:1em'\u003e)\u003c/text\u003e\n\u003ctext text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'\u003e|\u003c/text\u003e\n\u003ctext text-anchor='middle' x='224' y='4' fill='currentColor' style='font-size:1em'\u003e|\u003c/text\u003e\n\u003ctext text-anchor='middle' x='224' y='36' fill='currentColor' style='font-size:1em'\u003e|\u003c/text\u003e\n\u003ctext text-anchor='middle' x='232' y='4' fill='currentColor' style='font-size:1em'\u003e|\u003c/text\u003e\n\u003ctext text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'\u003e₂\u003c/text\u003e\n\u003ctext text-anchor='middle' x='240' y='4' fill='currentColor' style='font-size:1em'\u003e₂\u003c/text\u003e\n\u003ctext text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'\u003e-\u003c/text\u003e\n\u003ctext text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'\u003eP\u003c/text\u003e\n\u003ctext text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'\u003e_\u003c/text\u003e\n\u003ctext text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'\u003eg\u003c/text\u003e\n\u003ctext text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'\u003e(\u003c/text\u003e\n\u003ctext text-anchor='middle' x='296' y='20' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'\u003e)\u003c/text\u003e\n\u003ctext text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'\u003e|\u003c/text\u003e\n\u003ctext text-anchor='middle' x='320' y='20' fill='currentColor' style='font-size:1em'\u003e|\u003c/text\u003e\n\u003ctext text-anchor='middle' x='328' y='20' fill='currentColor' style='font-size:1em'\u003e₂\u003c/text\u003e\n\u003c/g\u003e\n\n    \u003c/svg\u003e\n  \n\u003c/div\u003e\n\u003cp\u003e\u003cstrong\u003e解读\u003c/strong\u003e：L2 误差越小越好，但存在显著的饱和效应——当误差降到一定程度后，进一步降低 L2 未必意味着更好的驾驶能力。更严重的问题是：L2 误差对轨迹的\u0026quot;合理性\u0026quot;完全不敏感，一个不安全的急刹车轨迹和一个安全的平稳减速轨迹可能有相同的 L2 误差。此外，L2 误差也无法区分横向偏差和纵向偏差——偏离车道 0.5 米和速度偏差 5 km/h 可能产生相同的 L2 值。\u003c/p\u003e","title":"端到端驾驶评测指标全景"},{"content":"一句话理解分布式训练 分布式训练的本质是将一个大模型的计算和显存需求拆分到多张GPU上，通过高效的通信协议让这些GPU像一台虚拟的超大GPU一样协同工作，核心挑战在于如何在计算、通信、显存三者之间找到最优平衡点。\n1. 为什么需要分布式训练 1.1 单卡训练的极限 一个70B参数的VLA模型，仅模型权重就需要：\n$$ \\text{显存} = 70 \\times 10^9 \\times 2 \\text{ bytes (bf16)} \\approx 140 \\text{ GB} $$一张H100（80GB）连模型权重都放不下。实际训练7B模型的显存消耗分布：\n组件 显存占用 占比 模型权重 (bf16) 14 GB 17.5% Adam optimizer states 56 GB 70% Gradients 14 GB 17.5% Activations (1K seq) ~8 GB 10% 总计 ~92 GB \u0026gt;100% 一张A100-80GB根本跑不了，这就是分布式训练必须上的根本原因。\n1.2 分布式训练的三种基本范式 数据并行（Data Parallelism）：每张卡持有完整模型副本，处理不同数据batch，通过AllReduce同步梯度。实现最简单，但显存冗余大。\n模型并行（Model Parallelism）：将模型拆分到多张卡上。分为张量并行（层内矩阵切分）和流水线并行（层间切分）。显存开销被均摊。\nZeRO系列：不切分计算，只切分状态（参数/梯度/优化器状态）。通信量与数据并行相同，但显存占用大幅降低。\n现代大模型训练几乎都是这三种方法的组合——3D并行（数据并行 × 张量并行 × 流水线并行）。\n2. DeepSpeed与ZeRO系列详解 2.1 ZeRO的核心理念 ZeRO（Zero Redundancy Optimizer）的核心洞察：数据并行中每张卡都存了一份完整的模型参数、梯度和优化器状态，这种冗余在大部分时间是浪费的。\n假设有 $N$ 张GPU，数据并行每张卡要存：\n$$ \\text{每卡显存} = \\Phi + 2\\Phi + K\\Phi $$其中 $\\Phi$ 是参数量，$K$ 是优化器状态对参数量的倍数（Adam约12倍）。ZeRO将这些状态分片到所有GPU上，每卡只存 $1/N$：\n$$ \\text{每卡显存} = \\frac{\\Phi}{N} + \\frac{2\\Phi}{N} + \\frac{K\\Phi}{N} = \\frac{(3+K)\\Phi}{N} $$2.2 ZeRO的三个Stage详解 ZeRO Stage 1: 仅分片optimizer states。通信量不变，显存从 $(K+3)\\Phi$ 降到 $(K/N + 3)\\Phi$。\n70B模型、64卡、Adam（$K=12$）：原始每卡32.8GB，Stage 1每卡仅7GB。\nZeRO Stage 2: 分片optimizer states + gradients。每卡只维护自己的梯度分片，用ReduceScatter+AllGather替代AllReduce。显存降到 $(K/N + 2/N + 1)\\Phi$。\nZeRO Stage 3: 分片全部状态（参数/梯度/优化器）。每卡只存 $1/N$ 的参数，前向和反向时均需AllGather收集参数。显存降到 $(K+2+1)\\Phi / N$，但通信量增加约1.5倍。\n2.3 实际调优建议 Z Z Z e e e R R R O O O S S S t t t a a a g g g e e e 1 2 3 : : : 显 大 显 存 多 存 紧 数 极 张 场 度 但 景 受 带 的 限 宽 默 （ 充 认 跨 足 选 节 （ 择 点 N （ 训 V 平 练 L 衡 ， i 显 I n 存 n k 与 f 集 通 i 群 信 n ） ） i B a n d ） 实测数据（7B模型、8×A100、NVLink连接）：\nStage 每卡显存 吞吐 (tokens/s) 相对DP加速比 DP (ZeRO off) 76 GB 1200 1.0× ZeRO-1 52 GB 1180 0.98× ZeRO-2 38 GB 1150 0.96× ZeRO-3 22 GB 920 0.77× ZeRO-3虽然显存优势明显，但通信开销导致吞吐下降约23%。实际工程中大多数场景用ZeRO-2即可，必要时配合activation checkpointing来缓解显存压力。\n2.4 Offload策略 当GPU显存仍不足以训练时，DeepSpeed提供了CPU/NVMe offload：\noptimizer offload：将optimizer states放在CPU内存中，通过CPU Adam更新参数 parameter offload：将参数放在CPU，每次计算前搬回GPU NVMe offload：利用SSD作为第三级存储，适合超大模型（100B+） 70B模型、32×A100实测结果：\n配置 吞吐 显存/卡 ZeRO-2 1.0× (基准) 38 GB ZeRO-2 + CPU offload 0.45× 12 GB ZeRO-3 + NVMe offload 0.20× 4 GB Offload是最后的救命稻草，能用显存解决的问题就不要用offload。一个实用技巧：先用ZeRO-2配合checkpointing找到显存瓶颈点，再决定是否需要offload。通常优化checkpointing就能解决大部分显存问题。\n2.5 混合精度训练 分布式训练几乎都使用bf16/fp16混合精度。bf16天然不需要loss scaling（动态范围与fp32相同），比fp16更稳定。实测7B模型下bf16的loss spike频率仅为fp16的1/15，且吞吐高5%。启用--bf16时ZeRO自动将通信转为bf16，通信量减半。bf16在大规模分布式训练中已是事实标准。\n3. Megatron-LM与张量并行 3.1 张量并行的基本思想 张量并行（TP）将单个transformer layer的矩阵运算拆到多张卡上。以self-attention的QKV投影为例：\n$$ Y = X \\cdot W_{qkv}, \\quad W_{qkv} \\in \\mathbb{R}^{d \\times 3d} $$有 $T$ 张卡做TP时，$W_{qkv} = [W_1, W_2, ..., W_T]$，每张卡持有 $W_i \\in \\mathbb{R}^{d \\times (3d/T)}$，计算得到 $Y_i = X \\cdot W_i$，最后通过AllReduce合并。\n3.2 列并行与行并行 列并行（Column-wise Parallel）：权重按列切分，每卡独立计算后拼接。前向需要一次AllReduce，反向不需额外通信。\n$$ \\text{Linear}(X) = X \\cdot A = X \\cdot [A_1, ..., A_T] = [XA_1, ..., XA_T] $$行并行（Row-wise Parallel）：权重按行切分，计算后AllReduce求和。前向输入需scatter，输出需AllReduce。\n$$ \\text{Linear}(X) = [X_1, ..., X_T] \\cdot \\begin{bmatrix} A_1 \\\\ \\vdots \\\\ A_T \\end{bmatrix} = \\sum_{i=1}^{T} X_i A_i $$3.3 Transformer层的TP配置 一个标准的transformer block在Megatron-LM中分布到 $T$ 张卡上：\nLayerNorm：每卡一份完整副本（显存占用极小，不切分） QKV投影：列并行（各自计算各自的分片） Attention输出投影：行并行（需要AllReduce合并） MLP的第一层（4d→d）：列并行 MLP的第二层（d→4d）：行并行 第二个LayerNorm：每卡完整副本 这种设计只需要两次AllReduce（Attention输出后和MLP输出后），通信效率极高。\n3.4 TP的通信模式与约束 TP要求节点内的GPU通过NVLink全连接：\n$$ \\text{TP通信量} = 2 \\times \\text{hidden\\_size} \\times \\text{seq\\_length} \\times \\text{batch\\_size} \\times 2 \\text{ bytes} $$7B模型（hidden=4096, seq=2048, bsz=4）、8卡TP下，每次AllReduce约134MB。NVLink带宽约600 GB/s，通信耗时约0.22ms，几乎可以忽略，不会成为训练瓶颈。\nTP必须限制在同一个节点内。跨节点通过IB/RoCE带宽骤降至25-50 GB/s，通信耗时变成5-10ms，严重拖慢训练。这是分布式训练配置中最容易犯的错误之一。\n4. 流水线并行 4.1 朴素流水线并行的问题 朴素实现中，GPU存在大量空闲气泡（bubble）。$p$ 层流水线、$m$ 个micro-batch时，bubble占比为：\n$$ \\text{bubble} = \\frac{p-1}{m} $$增大 $m$ 可以减少bubble，但增大activation显存开销。工程上要求 $m \\geq 4p$ 以控制bubble占比在25%以下。\n4.2 GPipe与1F1B调度 GPipe先跑完所有micro-batch的forward再统一backward，activation显存消耗大。\n1F1B（One-Forward-One-Backward）调度则交替执行forward和backward：\n卡 卡 0 1 : : F 0 → → F F 0 1 → → B B 0 0 → → F F 1 2 → → B B 1 1 → → F F 2 3 → → B B 2 2 → → F B 3 3 → B 3 相比GPipe，1F1B降低约40%的activation峰值显存，同时保持相近的吞吐。\n4.3 流水线切分策略 transformer每层计算量相同，因此最简单的策略是均匀切分：$\\text{layers\\_per\\_stage} = L / p$。但需注意：\nembedding层计算量小但参数量大（vocab_size × hidden_size），可单独放一个stage 输出层（LM head）如果与embedding共享权重，可合并 VLA中vision encoder与LLM结构不同，需单独计算量配平 4.4 PP与其他并行方式的组合 3D并行中PP通常作为最外层维度：\n总GPU数 = DP × PP × TP\n推荐配置法则：\nTP ≤ 8（限制在单节点内） PP = 节点数（每节点一个stage） DP = 总GPU / (TP × PP) 5. Activation Checkpointing 5.1 时间换空间策略 L层、每层hidden size h、batch b、序列s的transformer：\n$$ \\text{activation显存} = O(L \\times b \\times s \\times h) $$7B模型（L=32, h=4096, b=4, s=2048）activations约20GB。Checkpointing在前向时丢弃大部分中间激活，反向时重新计算。\nfrom torch.utils.checkpoint import checkpoint def transformer_layer(x, attn, mlp): def forward(x): h = attn(x) h = mlp(h) return h return checkpoint(forward, x, use_reentrant=False) 5.2 Full vs Selective Checkpointing Full Checkpointing：每层只保存输入，反向时重新计算整层forward。显存减少70-80%，计算量增加30-40%。\nSelective Checkpointing：选择性地保存某些操作的结果。attention的softmax结果计算量大但占用显存小，适合不checkpoint；large tensor如hidden states适合checkpoint。\n实测（7B、8×A100、ZeRO-2）：\n策略 每卡显存 吞吐 (tokens/s) 相对基准 无checkpoint 72 GB 1450 1.0× Selective 48 GB 1380 0.95× Full（每层） 26 GB 1050 0.72× VLA模型的视觉编码器序列长度通常更长（patch数量多），activation显存占比可能超过50%。实践中建议对ViT和LLM分别设置不同的checkpoint和并行策略。\n6. VLA模型训练的通信拓扑 6.1 VLA模型的组成与挑战 VLA模型通常由三部分组成：\nVision Encoder：ViT处理图像输入，参数量300M-1B Projector：对齐视觉和语言特征空间 LLM：语言模型主力，参数量7B-70B 三个组件的计算量和显存需求差异巨大，不能一刀切使用同一种并行策略。\n6.2 异构并行策略 推荐VLA配置（70B LLM + 1B ViT、64×A100）：\n组件 TP PP DP ZeRO Stage Vision Encoder 2 1 32 ZeRO-2 Projector 1 1 64 ZeRO-2 LLM 8 4 2 ZeRO-1 整体 8 4 2 混合 设计思路：Vision Encoder显存需求小（权重仅2GB），用DP即可；LLM是主要瓶颈，用TP=8+PP=4的3D并行；组件间通过pipeline衔接。\n6.3 通信拓扑选择 拓扑 带宽 延迟 适用场景 NVLink (GPU-GPU) 600 GB/s ~1μs 节点内TP通信 InfiniBand 200Gbps 25 GB/s ~3μs 跨节点梯度同步 RoCE v2 100Gbps 12.5 GB/s ~5μs 低成本跨节点方案 PCIe Gen5 64 GB/s ~10μs CPU-GPU通信 核心原则：TP通信量最大，必须走NVLink（节点内）；DP的AllReduce通信量适中，走IB/RoCE即可；PP通信量最小（仅传输activation边界值），走任何链路都可。\n6.4 通信计算重叠 DeepSpeed的overlap_comm机制让后一个micro-batch的计算与前一个的梯度通信重叠：\n配置 吞吐 (tokens/s/GPU) 通信耗时占比 无重叠 820 35% 梯度重叠 1130 18% 梯度+参数重叠 1280 11% 通信计算重叠是性价比最高的优化手段之一，建议始终启用。具体实现时，DeepSpeed的overlap_comm=True配合gradient_accumulation_steps \u0026gt;= 4效果最佳。梯度AllReduce可以和下一个micro-batch的forward计算重叠，而参数更新可以和反向计算重叠。在VLA模型中，Vision Encoder和LLM的通信还可以进一步解耦，实现跨组件的异步通信。\n7. 常见问题与排查 7.1 显存不足 排查路径：确认bf16启用、降低batch size或micro-batch size、增加checkpointing粒度、检查tensor泄漏（未detach的变量）、使用 torch.cuda.max_memory_allocated() 定位显存峰值位置。\n7.2 通信瓶颈 GPU利用率20-40%但Volatile GPU-Util偏高时，用 nsys profile 查看通信时间占比，检查是否跨节点使用了TP（应避免），确认网络带宽是否打满（ib_write_bw测试），增加gradient accumulation steps降低通信频率。\n7.3 Loss Spike 可能原因：学习率过高（尤其warmup结束后）、异常样本（标注错误/分布外数据）、梯度裁剪阈值过低、MoE路由崩溃。\n解决方案：使用梯度裁剪（max_grad_norm=1.0）、warmup步数设为总步数1-5%、用TensorBoard记录梯度范数分布。\n7.4 训练吞吐低于预期 MFU = 实际吞吐 / 理论峰值。A100 bf16矩阵乘理论峰值约312 TFLOPS。\n参考值：GPT-3 175B 42%, LLaMA-65B 50%, PaLM 540B 57%, VLA-70B 35-40%。\nVLA模型MFU偏低是因为视觉编码器存在大量im2col和reshape操作，计算效率不如纯LLM。改善方法包括：使用FlashAttention减少显存带宽瓶颈、对Vision Encoder单独使用TP=2而非TP=8避免通信浪费、将图像patch flatten操作融合到数据加载pipeline中。\n8. 最佳实践 8.1 集群规划 以训练70B VLA模型为目标：\n最小配置：16×A100-80GB（PP=4, TP=4, DP=1），适合小团队验证训练pipeline 推荐配置：64×A100-80GB（PP=4, TP=8, DP=2），吞吐与稳定性良好 最优配置：256×A100-80GB（PP=8, TP=8, DP=4），接近线性扩展 网络要求：节点内8×NVLink（必须），节点间4×InfiniBand 200Gbps（推荐）或8×RoCE 100Gbps（可接受）。\n8.2 训练启动配置 deepspeed --num_gpus 8 --num_nodes 8 \\ --master_addr $MASTER_ADDR \\ train.py \\ --model_size 70b \\ --tensor_parallel_size 8 \\ --pipeline_parallel_size 4 \\ --data_parallel_size 2 \\ --zero_stage 2 \\ --gradient_accumulation_steps 16 \\ --train_batch_size 512 \\ --micro_batch_size 1 \\ --activation_checkpointing \\ --fp16 8.3 监控指标 关键监控项和阈值：\nGPU利用率：持续\u0026gt;85%，波动\u0026lt;10% NVLink带宽利用率：\u0026lt;70%（留有冗余） 通信耗时占比：\u0026lt;20% 梯度范数：0.1-10之间 Loss：不应出现\u0026gt;3σ的跳变 分布式checkpoint保存时间：应\u0026lt;5分钟（超过则降低checkpoint频率或启用异步保存） 9. 分布式训练工具生态 9.1 框架对比 DeepSpeed适合7B-70B工业级训练（生态最活跃），FSDP适合快速实验（开箱即用），Megatron-LM适合\u0026gt;70B超大模型（TP/PP支持最完善）。实际场景中DeepSpeed+Megatron兼容层混合使用最常见。2026年关键趋势：PyTorch DTensor替代手动TP配置、compiler-driven parallelism自动推导并行策略、CPU-GPU异构执行、弹性训练走向工程落地。\n总结 分布式训练从数据并行到3D混合并行的演进，本质是显存-通信-计算三个维度的持续博弈。对于工程团队，核心法则是根据模型规模和硬件条件选择正确配置：小模型（\u0026lt;7B）用ZeRO-2足矣，中等模型（7B-70B）需要TP+PP+ZeRO的组合，超大模型（\u0026gt;100B）必须引入offload。实际工程中80%的收益来自20%的配置优化——正确的TP配置（不跨节点）、合理的ZeRO stage选择（不是越高越好）、activation checkpointing的精细化设置，这三项做好就能让训练效率达到理论峰值的70%以上。\n问题：大模型单卡放不下且训练效率低 → 方法：3D并行（数据并行/张量并行/流水线并行）+ ZeRO显存优化 + Activation Checkpointing + 通信计算重叠 → 结果：显存开销降低80%+，训练效率达理论峰值70%+，支持千卡级线性扩展。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E5%88%86%E5%B8%83%E5%BC%8F%E8%AE%AD%E7%BB%83%E7%9A%84%E5%B7%A5%E7%A8%8B%E5%AE%9E%E8%B7%B5/","summary":"大模型训练需要分布式系统支持，但3D并行（数据并行/张量并行/流水线并行）的配置与调优极为复杂。本文从单卡训练痛点出发，系统讲解DeepSpeed的ZeRO stages、Megatron-LM的张量切片策略、流水线并行的micro-batch调度，以及VLA模型训练中activation checkpointing与通信拓扑选择的工程经验。","title":"分布式训练的工程实践：从DeepSpeed到3D并行"},{"content":"一、引言 在自动驾驶规划算法的研发流程中，评估方法的选择直接影响研究者对模型能力的判断。目前两类主流的评估范式——开环评测（Open-loop Evaluation）与闭环评测（Closed-loop Evaluation）——各有理论基础和适用范围，但二者之间存在显著的鸿沟。\nNAVSIM 论文《Can We Also Drive in Closed-loop?》通过系统性实证研究揭示了这一鸿沟的严重程度：开环评测中的 L2 误差与闭环驾驶质量之间的 Pearson 相关系数仅约 0.3。这意味着一个在开环评测中排名第一的模型，在真实闭环部署中可能完全不合格。越来越多的研究者开始呼吁抛弃\u0026quot;开环迷信\u0026quot;，转向更可靠的闭环评估或混合评估策略。\n本文将从原理、方法、指标和实证分析四个维度，全面解析这两种评测范式，帮助研究者在论文写作和模型选择中做出更准确的判断。\n二、开环评测 2.1 基本定义 开环评测的核心流程如下：\n从已录制的驾驶数据集中取出一个片段 将历史观测数据（图像、点云、高精地图等）输入规划模型 模型输出未来一段时间的 EGO 预测轨迹 将预测轨迹与人类驾驶员在 log 中的实际轨迹（ground truth）进行比较 计算误差指标 关键特征在于：评测过程中，模型不会接收到自身决策的反馈。每一步的输入都来自真实 log 数据，与模型的预测无关。\n2.2 数据流示意 t t t = = = 0 1 2 : : : 观 观 观 测 测 测 x x x ₀ ₁ ₂ → → → 模 模 模 型 型 型 → → → 预 预 预 测 测 测 ŷ ŷ ŷ ₀ ₁ ₂ （ （ x x ₁ ₂ 来 来 自 自 l l o o g g ， ， 与 与 ŷ ŷ ₀ ₀ 、 无 ŷ 关 ₁ ） 无 关 ） 这种\u0026quot;教师强制（Teacher Forcing）\u0026ldquo;模式下，模型的一步预测误差不会传播到下一步——每一步都是独立比较。\n2.3 常见指标 L1/L2 位移误差：在未来时刻 t 上预测位置与真值位置之间的距离。通常报告 1s、2s、3s 时域上的误差。\nADE（Average Displacement Error）：整个预测时域上所有时刻的位移误差均值。\nFDE（Final Displacement Error）：预测终点与真值终点之间的位移误差，反映长时域预测精度。\n开环碰撞率（Open-loop Collision Rate）：统计预测轨迹中 EGO 与场景中其他物体的碰撞比例。但是这是一个存在根本性缺陷的指标——碰撞检测基于模型的预测轨迹而非真实轨迹，模型可以通过预测\u0026quot;保持静止\u0026quot;来人为降低碰撞率。因此，开环碰撞率不应作为安全性评估的可靠依据。\n2.4 开环评测的优势 无需仿真器：只需标注好的数据集即可运行评估 计算开销极低：单次评估通常在数分钟内完成 结果完全可复现：不受随机种子或计算环境影响 调试方便：可逐帧检查模型预测误差的来源 2.5 开环评测的关键缺陷 分布偏移（Distribution Mismatch）：这是最根本的问题。模型在训练和开环评测中始终看到的是接近真值轨迹的观测（教师强制），但实际部署时，观测会随模型自身决策偏离真值。训练和部署之间的分布差异使得模型无法学会纠正自身的预测误差。\n误差累积不可测量：开环不对模型的\u0026quot;系列决策\u0026quot;进行评估。假设一个模型在每一步的预测偏差仅为 0.1 米（方向向左），在开环中这个偏差看起来微不足道。但在闭环中，8 秒的连续预测后这 0.1 米的渐进偏差会累积为 2-3 米的横向偏移，导致车辆驶出车道。\n补偿效应（Compensatory Behavior）：在开环中表现良好的模型，可能只是学会了\u0026quot;预测数据集的平均轨迹\u0026quot;这样的保守策略。例如，一个始终输出\u0026quot;保持直行\u0026quot;的模型在大多数场景的 L2 误差都不会太差（因为大部分时间是直行），但在真实驾驶中这种策略会在弯道和交叉口立即失效。\n实证案例：在 nuScenes Planning Challenge 上，一个最简单的\u0026quot;恒速模型\u0026rdquo;（假设车辆在剩余时间内保持当前速度和方向）就能在 L2 指标上达到前 30% 的水平。然而在 NAVSIM 闭环评测中，恒速模型的碰撞率通常超过 60%，驾驶分数几乎为 0。\n三、闭环评测 3.1 基本定义 闭环评测将规划模型部署在仿真环境中，让模型与环境和交通参与者实时交互。核心流程：\n初始化仿真场景（包含地图、初始状态、所有参与者的位置和运动状态） 在每个时间步，仿真器根据当前状态生成观测（传感器数据或抽象状态），输入规划模型 模型输出轨迹或控制指令 仿真器执行指令，通过动力学模型更新 EGO 和环境状态 重复步骤 2-4 直到仿真结束 汇总全程的安全性和驾乘质量指标 此时，模型的每一步决策都直接影响后续观测，决策偏差会在闭环中放大。\n3.2 数据流示意 t t = = 0 1 : : 观 观 测 测 （ x x 观 ₀ ₁ 测 → → x ₁ 模 模 型 型 源 于 → → ŷ 预 预 ₀ 测 测 在 ŷ ŷ 仿 ₀ ₁ 真 中 → → 的 执 仿 仿 行 真 真 结 器 器 果 执 执 ， 行 行 而 非 → → l 新 新 o 状 状 g 态 态 中 s s 的 ₁ ₂ x _ g t ₁ ） 3.3 三种闭环评测模式 （a）全仿真闭环（Full Simulation）：以 CARLA、MetaDrive、SMARTS 为代表。仿真器不仅模拟车辆动力学和交通参与者行为，还通过图形引擎渲染完整的传感器数据（RGB 图像、深度图、语义分割、LiDAR 点云）。优点是传感器配置完全可控，可以生成任意场景；缺点是图形渲染的真实感有限，传感器仿真与真实传感器之间存在 sim-to-real gap。\n（b）Log-replay 仿真闭环（Log-replay Simulation）：以 nuPlan、NAVSIM 为代表。仿真器使用真实 log 数据中的传感器观测作为环境输入，非 EGO 参与者采用 log-replay 模式（沿原始轨迹运动）。EGO 车辆则通过仿真动力学模型执行其决策。优点是传感器数据真实，环境渲染的真实感就是实际采集的数据；缺点是场景多样性受限于 log 数据，非 EGO 车辆不对 EGO 做出反应。\n（c）混合仿真闭环（Hybrid Simulation）：结合上述两种模式的优点。NAVSIM 采用了混合方案——传感器观测来自 log 数据（高真实性），EGO 决策通过动力学模型执行（闭环特性），非 EGO 参与者在 log-replay 和反应式模式之间可切换。这种模式在真实感、可复现性和交互丰富性之间取得了良好平衡。\n3.4 闭环评测的优势 反映真实部署性能：误差累积和交互博弈都能在仿真中体现 可测量有意义的安全性指标：碰撞率在闭环中是\u0026quot;真碰撞\u0026quot;——模型真正做出了导致碰撞的决策 支持强化学习：RL 方法必须依赖闭环环境提供奖励信号 可以测试泛化能力：在训练集外或人为设计的困难场景中测试模型 3.5 闭环评测的挑战 Sim-to-Real Gap：仿真中表现优异的模型，在真实世界中由于传感器噪声、动力学误差、感知延迟等因素可能表现不一致 计算开销大：一次完整闭环评估可能需要数小时 可复现性较低：特别是使用反应式 agent 时，不同运行的随机种子可能导致结果差异 仿真器质量影响：动力学模型精度、碰撞检测方式、传感器模拟质量等都会影响评估准确性 四、NAVSIM 的混合方法 4.1 非反应式 Agent + 反应式 EGO NAVSIM 的核心设计选择：所有非 EGO 交通参与者采用非反应式（non-reactive）模式，严格沿 log 中的原始轨迹运动，不会感知 EGO 的存在。\n优势：评估结果完全确定且可复现。 劣势：存在\u0026quot;不可避免碰撞\u0026quot;——如果 EGO 沿 log 轨迹行驶就不会发生碰撞，但主动偏离后反而撞上非反应式车辆，这种碰撞应归于 EGO 的规划失误还是场景设计问题？\n4.2 PDA（Pseudo-Dynamic Agent） 为解决\u0026quot;不可避免碰撞\u0026quot;问题，NAVSIM 引入 PDA 机制：\n检测 EGO 与 agent 之间的碰撞，记录时间、位置和速度信息 检查 EGO 沿真值轨迹行驶是否也会发生同样的碰撞 如果真值轨迹也会碰撞，则标记为\u0026quot;不可避免碰撞\u0026quot;，不计入评估指标 PDA 的本质是一种反事实推理——\u0026ldquo;如果 EGO 按照人类驾驶方式行驶，是否同样会撞上？\u0026ldquo;如果是，说明场景本身的设计存在问题，而非 EGO 策略的失败。这一机制在可复现性和评估公平性之间取得了关键平衡。\n4.3 NAVSIM 的四大核心发现 发现一：开环 L2 与闭环 PDMS 几乎不相关 Pearson r ≈ 0.3，Spearman ρ ≈ 0.35。一些开环最优（L2 最小）的模型在闭环中表现垫底，反之亦然。这意味着仅靠开环指标无法为模型选择提供可靠依据。\n发现二：PDMS 是最可靠的闭环指标 NAVSIM 提出的 PDMS 综合考虑碰撞安全（二元惩罚）、可行驶区域合规和舒适度（EPDMS 惩罚项），比单一指标（如碰撞率或 L2 误差）更能反映模型的真实部署能力。PDMS 的分布也更接近正态分布，区分度优于其他指标。在 40 多个模型的对比实验中，PDMS 给出了最有意义的模型排名，与人工评估的一致性最高。\n发现三：短时域开环指标完全无用 未来 1 秒的 L2 误差与闭环表现的相关性 r ≈ 0.1（实际不相关）。即使扩展到 3 秒，相关性也仅 0.3。这意味着在论文中报告\u0026quot;我们的方法在 1 秒 L2 误差上 SOTA\u0026quot;几乎没有任何实践意义。\n发现四：反应式 Agent 显著改变模型排名 在 NR 模式中表现最好的 5 个模型，切换到 R 模式后只有 1 个仍在前 5。保守型模型（倾向于减速让行）在 R 模式中会失去更多通行效率分数，而激进型模型在 R 模式中可能被其他车辆的避让行为\u0026quot;拯救\u0026rdquo;。这一发现说明：模型在不同交通参与者行为模式下的排序不稳定性，意味着单一评估模式的结果不足以支撑对模型能力的全面判断。\n五、开环与闭环的关联性分析 5.1 理论解释 开环与闭环之间的低相关性可以从因果推断的视角来理解。在开环中，我们测量的是 P(ŷ | x) 与 P(y_gt | x) 之间的 KL 散度——即模型在给定观测下的条件分布与真值条件分布之间的差异。而在闭环中，我们测量的是 P(碰撞 | π, T) ——即在给定策略 π 和状态转移函数 T 下的碰撞概率。\n这两个目标函数之间存在本质差异：开环误差最小化并不等于安全性最大化。事实上，一个在开环中完美预测的模型（L2 = 0）在闭环中也可能因为动力学模型的精度差异或环境交互的随机性而导致事故。\n5.2 Spearman vs Pearson 相关性 更深入的分析表明，Spearman 秩相关系数（ρ ≈ 0.35）略高于 Pearson 相关系数（r ≈ 0.3），说明开环指标对模型排名的预测能力略好于对绝对性能的预测能力。也就是说，开环可以提供一个\u0026quot;大致正确\u0026quot;的排名（前 30% 的模型在闭环中通常也是前 50%），但无法准确预测具体的闭环性能值。\n相关性分析还发现：当仅考虑困难场景（如无保护左转、密集车流变道）时，开环与闭环的相关性进一步下降（r \u0026lt; 0.2）——这是因为困难场景中的交互博弈更复杂，开环的预测误差分布更不均匀。\n5.3 数学形式化分析 开环与闭环的低相关性有其数学基础。规划模型可视为 f: X → Y。\n开环评估的是：L_open = E[||f(x_t) - y_gt_t||]，其中 x_t 来自真实分布 P_gt。 闭环评估的是：L_close = E[Collision(f, sim) + Comfort(f, sim) + \u0026hellip;]，其中 sim 的状态转移函数 T(s, f(s)) 使观测分布从 P_gt 变为 P_f。\n由于 P_f ≠ P_gt（模型决策导致分布偏移），两种评估的目标函数本身就存在系统性的差异。\n5.4 实际案例 模型 A：行为克隆 + L2 损失，开环 L2(3s)=0.8m，闭环 PDMS=0.65 模型 B：行为克隆 + 对抗训练，开环 L2(3s)=1.2m，闭环 PDMS=0.82\n如果仅看开环指标，会选择模型 A；但闭环结果表明模型 B 实际更安全、更高效。这种\u0026quot;开环越好、闭环越差\u0026quot;的反转在近年来的论文中屡见不鲜。研究者如果仅依赖开环指标进行模型选择，可能持续走错方向。\n5.5 开环评测的正确使用场景 感知评估：单帧检测、分割——不受时序影响，开环是最佳选择 轨迹预测：对其他参与者的轨迹预测，闭环评估在技术上不可行 初始快速筛选：从大量模型候选中筛掉明显不合格的（L2 误差 \u0026gt; 阈值的） 消融研究的控制变量：需要精确可复现的对比 但开环评测的结果绝不应当作为最终部署决策的依据，也不足以支撑\u0026quot;SOTA\u0026quot;声称。\n六、综合建议 6.1 分阶段评估策略 推荐的分阶段评估策略如下表所示。每个阶段的目标、方法和耗时各不相同，研究者应根据自身所处的研发阶段选择合适的评估方式。\n阶段 评估方法 耗时 用途 区分度 开发初期 开环（nuScenes L2） 分钟级 基线快速验证 低 开发中期 NAVSIM 闭环（PDMS） 小时级 模型诊断与选择 中 开发后期 nuPlan/CARLA 闭环 天级 最终性能验证 高 在开发初期（模型架构设计阶段），开环评测的优势在于速度快、迭代效率高。研究者可以在几小时内比较数十种不同的设计选择，快速收敛到有潜力的方向。但此阶段的结论只是初步的——开环表现最好的架构不一定在闭环中同样领先。\n在开发中期（模型训练调优阶段），建议切换到 NAVSIM 闭环评测。NAVSIM 的 PDMS 指标能够提供比开环 L2 更有意义的反馈信号。特别是当发现某个模型在开环 L2 和闭环 PDMS 上表现不一致时，应优先相信闭环指标。\n在开发后期（最终验证阶段），建议在 nuPlan 或 CARLA 上运行完整的闭环仿真。这些平台的仿真环境更复杂、场景更丰富，能够对模型的泛化能力进行更严格的考验。此阶段的评估结果可以作为论文的主要实验依据。\n6.2 论文报告规范 撰写论文时，建议遵循以下规范以保证实验的可信度和可复现性：\n同时报告开环指标（L2、FDE）和闭环指标（PDMS、Driving Score、碰撞率），缺一不可 明确标注评估模式（开环 / NR 闭环 / R 闭环），并说明仿真器版本和随机种子 报告多种场景的分解结果（左转、右转、变道、十字路口、弯道等），而非仅报告整体指标 如果仅报告开环指标，必须在论文中充分讨论其局限性并解释为何无法进行闭环评估，否则审稿人有权质疑结论的有效性 对于闭环评估，建议报告多次运行（至少 3 次）的均值和标准差，以反映结果的稳定性 在比较不同方法时，确保使用完全相同的场景集和评估配置，避免因场景选择偏差导致不公平比较 七、开环与闭环选择的决策框架 选择开环还是闭环本质上取决于研究问题的性质和研究阶段。以下决策框架帮助研究者做出合理选择。\n7.1 当选择开环评测 开环评测适用于以下研究场景：\n感知模块的独立验证：3D 检测、语义分割、深度估计等感知任务的评估天然是开环的——模型对每一帧独立预测，其预测不会影响下一帧的输入。对于这些任务，开环不仅是可接受的，而且是标准做法。\n轨迹预测模块的评估：对其他交通参与者未来轨迹的预测，几乎不可能在闭环中评估（因为无法将行人或车辆的\u0026quot;真实意图\u0026quot;引入仿真）。因此轨迹预测领域使用 minADE、minFDE 等开环指标是合理且必要的。\n大量消融实验的快速迭代：当需要在数十个超参数组合或架构变体中快速筛选时，开环评估的分钟级耗时是显著优势。但需要注意：筛选结果只是初步的，最终决策需要闭环验证。\n研究初期的基线建立：在探索新的研究方向时，使用开环指标建立基线可以帮助研究者快速了解方法的基本可行性。\n7.2 当选择闭环评测 规划模块的最终验证：任何声称在\u0026quot;规划\u0026quot;任务上取得进展的研究，都必须通过闭环评估来证明其方法的实际有效性。仅报告开环 L2 误差的规划论文将越来越难以被高水平会议接收。\n强化学习方法：RL 方法天然需要在闭环环境中进行训练和评估。开环评估无法提供有意义的奖励信号，也无法衡量 RL 策略的安全性。\n安全关键系统的部署前验证：对于计划部署到实车的系统，闭环仿真是验证安全性的必要步骤。在仿真中表现不佳的模型不应进入实车测试阶段。\n跨模型能力比较：在比较不同架构、不同训练范式的模型时，闭环指标（如 PDMS）能提供比开环指标更有意义的排序。\n7.3 混合策略 最理想的评估策略是同时使用开环和闭环指标，利用各自的优势进行互补。具体而言：用开环指标进行快速迭代和消融研究（分钟级反馈），用闭环指标进行最终性能验证（小时级但更有意义），同时通过分析开环到闭环的性能差异来诊断模型的根本问题。如果一个模型的开环 L2 很低但闭环 PDMS 也很低，说明问题在于闭环鲁棒性不足而非预测精度不够——模型无法处理自身决策导致的分布偏移。反之，如果开环 L2 已经较高，那么首要任务可能是提升模型的基础预测能力。\n八、总结 开环评测和闭环评测代表了自动驾驶规划评估连续谱上的两端。开环评测的效率和可复现性使其成为快速迭代的得力工具，但闭环评测才是检验模型真实能力的试金石。NAVSIM 等混合方法的出现正在弥合两者之间的鸿沟——让研究者既能获得开环的迭代速度，又能获得闭环的评估可靠性。\n理解并正确运用这两种评测范式，是在端到端自动驾驶规划领域做出可信研究的必要条件。任何仅依赖开环 L2 误差就声称 SOTA 的研究，都应该对其结论被审稿人和读者打上问号。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E5%BC%80%E7%8E%AF%E8%AF%84%E6%B5%8Bvs%E9%97%AD%E7%8E%AF%E8%AF%84%E6%B5%8B%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90/","summary":"\u003ch2 id=\"一引言\"\u003e一、引言\u003c/h2\u003e\n\u003cp\u003e在自动驾驶规划算法的研发流程中，评估方法的选择直接影响研究者对模型能力的判断。目前两类主流的评估范式——开环评测（Open-loop Evaluation）与闭环评测（Closed-loop Evaluation）——各有理论基础和适用范围，但二者之间存在显著的鸿沟。\u003c/p\u003e\n\u003cp\u003eNAVSIM 论文《Can We Also Drive in Closed-loop?》通过系统性实证研究揭示了这一鸿沟的严重程度：开环评测中的 L2 误差与闭环驾驶质量之间的 Pearson 相关系数仅约 0.3。这意味着一个在开环评测中排名第一的模型，在真实闭环部署中可能完全不合格。越来越多的研究者开始呼吁抛弃\u0026quot;开环迷信\u0026quot;，转向更可靠的闭环评估或混合评估策略。\u003c/p\u003e\n\u003cp\u003e本文将从原理、方法、指标和实证分析四个维度，全面解析这两种评测范式，帮助研究者在论文写作和模型选择中做出更准确的判断。\u003c/p\u003e\n\u003ch2 id=\"二开环评测\"\u003e二、开环评测\u003c/h2\u003e\n\u003ch3 id=\"21-基本定义\"\u003e2.1 基本定义\u003c/h3\u003e\n\u003cp\u003e开环评测的核心流程如下：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e从已录制的驾驶数据集中取出一个片段\u003c/li\u003e\n\u003cli\u003e将历史观测数据（图像、点云、高精地图等）输入规划模型\u003c/li\u003e\n\u003cli\u003e模型输出未来一段时间的 EGO 预测轨迹\u003c/li\u003e\n\u003cli\u003e将预测轨迹与人类驾驶员在 log 中的实际轨迹（ground truth）进行比较\u003c/li\u003e\n\u003cli\u003e计算误差指标\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e关键特征在于：\u003cstrong\u003e评测过程中，模型不会接收到自身决策的反馈\u003c/strong\u003e。每一步的输入都来自真实 log 数据，与模型的预测无关。\u003c/p\u003e\n\u003ch3 id=\"22-数据流示意\"\u003e2.2 数据流示意\u003c/h3\u003e\n\n\n\n\u003cdiv class=\"goat svg-container \"\u003e\n  \n    \u003csvg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      font-family=\"Menlo,Lucida Console,monospace\"\n      \n        viewBox=\"0 0 384 57\"\n      \u003e\n      \u003cg transform='translate(8,16)'\u003e\n\u003ctext text-anchor='middle' x='0' y='4' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='0' y='36' fill='currentColor' style='font-size:1em'\u003et\u003c/text\u003e\n\u003ctext text-anchor='middle' x='8' y='4' fill='currentColor' style='font-size:1em'\u003e=\u003c/text\u003e\n\u003ctext text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'\u003e=\u003c/text\u003e\n\u003ctext text-anchor='middle' x='8' y='36' fill='currentColor' style='font-size:1em'\u003e=\u003c/text\u003e\n\u003ctext text-anchor='middle' x='16' y='4' fill='currentColor' style='font-size:1em'\u003e0\u003c/text\u003e\n\u003ctext text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'\u003e1\u003c/text\u003e\n\u003ctext text-anchor='middle' x='16' y='36' fill='currentColor' style='font-size:1em'\u003e2\u003c/text\u003e\n\u003ctext text-anchor='middle' x='24' y='4' fill='currentColor' style='font-size:1em'\u003e:\u003c/text\u003e\n\u003ctext text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'\u003e:\u003c/text\u003e\n\u003ctext text-anchor='middle' x='24' y='36' fill='currentColor' style='font-size:1em'\u003e:\u003c/text\u003e\n\u003ctext text-anchor='middle' x='40' y='4' fill='currentColor' style='font-size:1em'\u003e观\u003c/text\u003e\n\u003ctext text-anchor='middle' x='40' y='20' fill='currentColor' style='font-size:1em'\u003e观\u003c/text\u003e\n\u003ctext text-anchor='middle' x='40' y='36' fill='currentColor' style='font-size:1em'\u003e观\u003c/text\u003e\n\u003ctext text-anchor='middle' x='48' y='4' fill='currentColor' style='font-size:1em'\u003e测\u003c/text\u003e\n\u003ctext text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'\u003e测\u003c/text\u003e\n\u003ctext text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'\u003e测\u003c/text\u003e\n\u003ctext text-anchor='middle' x='64' y='4' fill='currentColor' style='font-size:1em'\u003ex\u003c/text\u003e\n\u003ctext text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'\u003ex\u003c/text\u003e\n\u003ctext text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'\u003ex\u003c/text\u003e\n\u003ctext text-anchor='middle' x='72' y='4' fill='currentColor' style='font-size:1em'\u003e₀\u003c/text\u003e\n\u003ctext text-anchor='middle' x='72' y='20' fill='currentColor' style='font-size:1em'\u003e₁\u003c/text\u003e\n\u003ctext text-anchor='middle' x='72' y='36' fill='currentColor' style='font-size:1em'\u003e₂\u003c/text\u003e\n\u003ctext text-anchor='middle' x='88' y='4' fill='currentColor' style='font-size:1em'\u003e→\u003c/text\u003e\n\u003ctext text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'\u003e→\u003c/text\u003e\n\u003ctext text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'\u003e→\u003c/text\u003e\n\u003ctext text-anchor='middle' x='104' y='4' fill='currentColor' style='font-size:1em'\u003e模\u003c/text\u003e\n\u003ctext text-anchor='middle' x='104' y='20' fill='currentColor' style='font-size:1em'\u003e模\u003c/text\u003e\n\u003ctext text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'\u003e模\u003c/text\u003e\n\u003ctext text-anchor='middle' x='112' y='4' fill='currentColor' style='font-size:1em'\u003e型\u003c/text\u003e\n\u003ctext text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'\u003e型\u003c/text\u003e\n\u003ctext text-anchor='middle' x='112' y='36' fill='currentColor' style='font-size:1em'\u003e型\u003c/text\u003e\n\u003ctext text-anchor='middle' x='128' y='4' fill='currentColor' style='font-size:1em'\u003e→\u003c/text\u003e\n\u003ctext text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'\u003e→\u003c/text\u003e\n\u003ctext text-anchor='middle' x='128' y='36' fill='currentColor' style='font-size:1em'\u003e→\u003c/text\u003e\n\u003ctext text-anchor='middle' x='144' y='4' fill='currentColor' style='font-size:1em'\u003e预\u003c/text\u003e\n\u003ctext text-anchor='middle' x='144' y='20' fill='currentColor' style='font-size:1em'\u003e预\u003c/text\u003e\n\u003ctext text-anchor='middle' x='144' y='36' fill='currentColor' style='font-size:1em'\u003e预\u003c/text\u003e\n\u003ctext text-anchor='middle' x='152' y='4' fill='currentColor' style='font-size:1em'\u003e测\u003c/text\u003e\n\u003ctext text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'\u003e测\u003c/text\u003e\n\u003ctext text-anchor='middle' x='152' y='36' fill='currentColor' style='font-size:1em'\u003e测\u003c/text\u003e\n\u003ctext text-anchor='middle' x='168' y='4' fill='currentColor' style='font-size:1em'\u003eŷ\u003c/text\u003e\n\u003ctext text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'\u003eŷ\u003c/text\u003e\n\u003ctext text-anchor='middle' x='168' y='36' fill='currentColor' style='font-size:1em'\u003eŷ\u003c/text\u003e\n\u003ctext text-anchor='middle' x='176' y='4' fill='currentColor' style='font-size:1em'\u003e₀\u003c/text\u003e\n\u003ctext text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'\u003e₁\u003c/text\u003e\n\u003ctext text-anchor='middle' x='176' y='36' fill='currentColor' style='font-size:1em'\u003e₂\u003c/text\u003e\n\u003ctext text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'\u003e（\u003c/text\u003e\n\u003ctext text-anchor='middle' x='200' y='36' fill='currentColor' style='font-size:1em'\u003e（\u003c/text\u003e\n\u003ctext text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'\u003ex\u003c/text\u003e\n\u003ctext text-anchor='middle' x='208' y='36' fill='currentColor' style='font-size:1em'\u003ex\u003c/text\u003e\n\u003ctext text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'\u003e₁\u003c/text\u003e\n\u003ctext text-anchor='middle' x='216' y='36' fill='currentColor' style='font-size:1em'\u003e₂\u003c/text\u003e\n\u003ctext text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'\u003e来\u003c/text\u003e\n\u003ctext text-anchor='middle' x='232' y='36' fill='currentColor' style='font-size:1em'\u003e来\u003c/text\u003e\n\u003ctext text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'\u003e自\u003c/text\u003e\n\u003ctext text-anchor='middle' x='240' y='36' fill='currentColor' style='font-size:1em'\u003e自\u003c/text\u003e\n\u003ctext text-anchor='middle' x='256' y='20' fill='currentColor' style='font-size:1em'\u003el\u003c/text\u003e\n\u003ctext text-anchor='middle' x='256' y='36' fill='currentColor' style='font-size:1em'\u003el\u003c/text\u003e\n\u003ctext text-anchor='middle' x='264' y='20' fill='currentColor' style='font-size:1em'\u003eo\u003c/text\u003e\n\u003ctext text-anchor='middle' x='264' y='36' fill='currentColor' style='font-size:1em'\u003eo\u003c/text\u003e\n\u003ctext text-anchor='middle' x='272' y='20' fill='currentColor' style='font-size:1em'\u003eg\u003c/text\u003e\n\u003ctext text-anchor='middle' x='272' y='36' fill='currentColor' style='font-size:1em'\u003eg\u003c/text\u003e\n\u003ctext text-anchor='middle' x='280' y='20' fill='currentColor' style='font-size:1em'\u003e，\u003c/text\u003e\n\u003ctext text-anchor='middle' x='280' y='36' fill='currentColor' style='font-size:1em'\u003e，\u003c/text\u003e\n\u003ctext text-anchor='middle' x='288' y='20' fill='currentColor' style='font-size:1em'\u003e与\u003c/text\u003e\n\u003ctext text-anchor='middle' x='288' y='36' fill='currentColor' style='font-size:1em'\u003e与\u003c/text\u003e\n\u003ctext text-anchor='middle' x='304' y='20' fill='currentColor' style='font-size:1em'\u003eŷ\u003c/text\u003e\n\u003ctext text-anchor='middle' x='304' y='36' fill='currentColor' style='font-size:1em'\u003eŷ\u003c/text\u003e\n\u003ctext text-anchor='middle' x='312' y='20' fill='currentColor' style='font-size:1em'\u003e₀\u003c/text\u003e\n\u003ctext text-anchor='middle' x='312' y='36' fill='currentColor' style='font-size:1em'\u003e₀\u003c/text\u003e\n\u003ctext text-anchor='middle' x='320' y='36' fill='currentColor' style='font-size:1em'\u003e、\u003c/text\u003e\n\u003ctext text-anchor='middle' x='328' y='20' fill='currentColor' style='font-size:1em'\u003e无\u003c/text\u003e\n\u003ctext text-anchor='middle' x='328' y='36' fill='currentColor' style='font-size:1em'\u003eŷ\u003c/text\u003e\n\u003ctext text-anchor='middle' x='336' y='20' fill='currentColor' style='font-size:1em'\u003e关\u003c/text\u003e\n\u003ctext text-anchor='middle' x='336' y='36' fill='currentColor' style='font-size:1em'\u003e₁\u003c/text\u003e\n\u003ctext text-anchor='middle' x='344' y='20' fill='currentColor' style='font-size:1em'\u003e）\u003c/text\u003e\n\u003ctext text-anchor='middle' x='352' y='36' fill='currentColor' style='font-size:1em'\u003e无\u003c/text\u003e\n\u003ctext text-anchor='middle' x='360' y='36' fill='currentColor' style='font-size:1em'\u003e关\u003c/text\u003e\n\u003ctext text-anchor='middle' x='368' y='36' fill='currentColor' style='font-size:1em'\u003e）\u003c/text\u003e\n\u003c/g\u003e\n\n    \u003c/svg\u003e\n  \n\u003c/div\u003e\n\u003cp\u003e这种\u0026quot;教师强制（Teacher Forcing）\u0026ldquo;模式下，模型的一步预测误差不会传播到下一步——每一步都是独立比较。\u003c/p\u003e","title":"开环评测 vs 闭环评测深度解析"},{"content":"📄 论文信息 标题：FeaXDrive: Feasibility-aware Trajectory-Centric Diffusion Planning for End-to-End Autonomous Driving 团队：同济大学 × 南洋理工大学（Baoyun Wang, Zhuoren Li, Ran Yu, Yu Che 等） 发表：arXiv:2604.12656, Apr 2026（Transportation Research Part C） 论文链接：https://arxiv.org/abs/2604.12656 四大贡献： 轨迹中心扩散规划 — 以 clean trajectory 为可行性建模的统一对象 自适应曲率正则化 — 可微曲率 + 速度自适应边界 可行驶区域引导推理 — 局部 SDF + footprint 级梯度校正 可行性感知 GRPO — 奖励中融入曲率可行性偏好 🤔 要解决什么问题 扩散规划在端到端自动驾驶中展现出强大的多模态轨迹建模 能力，但生成轨迹的物理可行性严重不足：\n现有痛点 表现 严重度 局部几何不规则 轨迹点抖动、突兀偏折 noise-centric 通病 运动学约束违反 曲率超车辆物理极限 8.59% (DiffusionDrive) 可行驶区域偏离 车辆足迹离开路面 占失败的 56–69% 后训练可行性退化 RL 提分但运动学恶化 15.5% (ReCogDrive GRPO) 根本原因：现有方法采用 noise-centric 参数化，预测 $\\boldsymbol{\\epsilon}$，而可行性天然定义在 $\\mathbf{x}_0$ 空间， 两者存在对齐断裂。\n核心洞察：轨迹 $\\mathbf{x}_0 \\in \\mathbb{R}^{H \\times 4}$ 是低维结构化目标，clean trajectory 空间本身就是 可行性建模的自然场所。\n🧠 方法详解 轨迹中心扩散规划 模型直接预测 clean trajectory $\\hat{\\mathbf{x}}_0^{(t)}$ 而非噪声 $\\boldsymbol{\\epsilon}$：\n$$\\mathcal{L}_{x_0} = \\mathbb{E}_{t, \\mathbf{x}_0, \\boldsymbol{\\epsilon}} \\left[ \\lVert \\mathbf{x}_0 - f_\\theta(\\mathbf{x}_t, \\mathbf{c}, t) \\rVert^2 \\right]$$训练、推理、后训练三阶段共享 $\\mathbf{x}_0$ 作为统一接口。\n自适应曲率正则化训练 基于 waypoint 差分计算可微曲率：\n$$\\kappa_i = \\frac{\\dot{x}_i \\ddot{y}_i - \\dot{y}_i \\ddot{x}_i} {(\\dot{x}_i^2 + \\dot{y}_i^2)^{3/2}}$$速度自适应曲率边界（结合几何上限与横向动力学）：\n$$\\kappa_{\\max,i}^{\\mathrm{dyn}} = \\frac{a_{\\max}^{\\mathrm{lat}}}{v_i^2 + \\epsilon_v}, \\quad \\kappa_i^{\\mathrm{adp}} = \\min(\\kappa_{\\max}^{\\mathrm{geo}}, \\kappa_{\\max,i}^{\\mathrm{dyn}})$$参数：$\\kappa_{\\max}^{\\mathrm{geo}}=0.166\\,\\mathrm{m}^{-1}$ （Chrysler Pacifica 最小转弯半径 6.0m）， $a_{\\max}^{\\mathrm{lat}}=6\\,\\mathrm{m/s}^2$。\n可行性感知损失（仅曲率越界时激活）：\n$$\\mathcal{L}_{\\mathrm{cur}} = \\frac{1}{H} \\sum_{i=1}^H \\max(|\\kappa_i| - \\kappa_i^{\\mathrm{adp}}, 0)^2$$$$\\mathcal{L}_{\\mathrm{train}} = \\mathcal{L}_{x_0} + \\lambda_{\\mathrm{cur}} \\mathcal{L}_{\\mathrm{cur}}$$低速受几何约束，高速自动受横向加速度收紧。\n可行驶区域引导推理 逆扩散每步先预测 $\\hat{\\mathbf{x}}_0^{(t)}$，再经局部 SDF 进行 footprint 级校正：\n$$\\tilde{\\mathbf{x}}_0^{(t)} = \\mathcal{C}(\\hat{\\mathbf{x}}_0^{(t)}; \\mathcal{M}), \\quad \\mathbf{x}_{t-1} = G(\\mathbf{x}_t, \\tilde{\\mathbf{x}}_0^{(t)}, t)$$基于 HD map 构建 signed distance field：\n$$S(\\mathbf{q}) = \\begin{cases} \\operatorname{dist}(\\mathbf{q}, \\partial\\mathcal{D}), \u0026 \\mathbf{q} \\in \\mathcal{D} \\\\ 0, \u0026 \\mathbf{q} \\in \\partial\\mathcal{D} \\\\ -\\operatorname{dist}(\\mathbf{q}, \\partial\\mathcal{D}), \u0026 \\mathbf{q} \\notin \\mathcal{D} \\end{cases}$$Footprint 级引导：计算 4 角点在 SDF 中的距离 $\\mathbf{p}_{i,j} = [p_i^x; p_i^y] + R(p_i^\\theta) \\delta_j$， 用 softplus 屏障加安全边际：\n$$\\mathcal{L}_{\\mathrm{drv}} = \\frac{1}{4H} \\sum_{i=1}^H \\sum_{j=1}^4 \\phi(m_{\\mathrm{safe}} - d_{i,j})$$越界时自动梯度更新 $\\tilde{\\mathbf{x}}_0^{(t)} = \\hat{\\mathbf{x}}_0^{(t)} - \\eta_t \\Phi(\\nabla_{\\hat{\\mathbf{x}}_0^{(t)}} \\mathcal{L}_{\\mathrm{drv}})$。\n可行性感知 GRPO 后训练 奖励函数含任务质量与可行性偏好：\n$$\\mathcal{R}(\\mathbf{x}_0, \\mathbf{c}) = \\mathcal{R}_{\\mathrm{task}} (\\mathbf{x}_0, \\mathbf{c}) + \\lambda_{\\mathrm{fea}} \\mathcal{R}_{\\mathrm{fea}} (\\mathbf{x}_0, \\mathbf{c})$$组内相对优势与策略优化：\n$$A_g = \\frac{r_g - \\mu_r}{\\sigma_r + \\epsilon_r}, \\quad \\mathcal{L}_{\\mathrm{RL}} = -\\mathbb{E} \\left[ A_g \\sum_{t=1}^T w_t \\log \\pi_\\theta (\\mathbf{x}_{t-1}^{(g)} \\mid \\mathbf{x}_t^{(g)}, \\mathbf{c}) \\right]$$引入 BC 正则化 $\\mathcal{L}_{\\mathrm{BC}}$ 防止偏移。\n🏗️ 架构流程总览 推理阶段（5 步逆扩散）\n步 操作 说明 1 VLM 编码 InternVL3-2B 提取多视角条件 $\\mathbf{c}$ 2 噪声初始化 $\\mathbf{x}_T \\sim \\mathcal{N}(0, I)$ 3 x0-pred DiT-8x16 预测 $\\hat{\\mathbf{x}}_0^{(t)}$ 4 可行驶区域引导 SDF 构建 + footprint 梯度校正 5 DDIM 更新 经校正后更新至 $\\mathbf{x}_{t-1}$，循环至 $t=0$ 训练阶段\n模块 阶段 细节 A: IL 预训练 4x A800, 100 epochs $\\mathcal{L}_{x_0} + \\lambda_{\\mathrm{cur}} \\mathcal{L}_{\\mathrm{cur}}$ B: FA-GRPO 8x A800, 1 epoch PDMS + 曲率奖励 + BC 正则化 🖼️ 图片解析 粗体图 1：FeaXDrive 整体框架对比。 左为 noise-centric 范式：预测噪声 $\\boldsymbol{\\epsilon}$， 可行性约束间接施加。右为 FeaXDrive 的 trajectory-centric 范式： 直接预测 $\\mathbf{x}_0$，训练施加 $\\mathcal{L}_{\\mathrm{cur}}$， 推理通过约束算子 $\\mathcal{C}$ 注入 SDF 引导， 所有模块共享 $\\mathbf{x}_0$ 接口。底部展示 FA-GRPO 后训练。\n粗体图 2：FeaXDrive 架构设计。 DiT-8x16 以 $(\\mathbf{x}_t, \\mathbf{c}, t)$ 输入， 直接输出 $\\hat{\\mathbf{x}}_0^{(t)}$。 推理时 SDF 引导模块在线校正。三阶段优化路径： 曲率正则化（蓝）、SDF 引导（绿）、FA-GRPO（红）。\n粗体图 3：曲率违反次数对比。 baseline 高速曲率违反 826 次；trajectory-centric 降至 235/677 次；加入曲率正则化后骤降至 8/8 次， 充分验证曲率正则化的必要性。\n粗体图 4：可行驶区域违反次数对比。 baseline 在各区间均有大量违规，trajectory-centric 减少 但仍不可忽视，加入引导后大幅下降。曲率与可行驶区域 违反存在耦合——曲率过大易偏离道路。\n粗体图 5：推理延迟分解。 总延迟 348.73ms：VLM 245.33ms（70.3%），planner 82.96ms （23.8%），SDF 构建 16.03ms（4.6%），引导仅 4.41ms（1.3%）。 SDF 相关开销 \u0026lt; 21ms，几乎免费。\n粗体图 6(a)：baseline 运动学不可行轨迹。 红色轨迹在急转弯处曲率尖峰，超出车辆最小转弯半径 对应物理上限，实车无法执行。\n粗体图 6(b)：FeaXDrive 运动学可行性改善。 同一场景绿色轨迹曲率被有效平滑，处于速度自适应 边界以内，转弯意图保留。\n粗体图 7(a)：baseline 局部几何不规则。 轨迹中段 waypoint 异常偏折，速度方向不连续。\n粗体图 7(b)：FeaXDrive 局部几何改善。 waypoint 分布均匀、方向变化平滑，不规则现象消除。\n粗体图 8(a)：baseline 可行驶区域偏离。 轨迹跨越路面边界，右前轮将上人行道。中心点约束 无法察觉此违规。\n粗体图 8(b)：FeaXDrive 可行驶区域一致性改善。 轨迹完全在可行驶区域内，4 角点均满足安全边际。 Footprint 级 SDF 从根本上解决了中心点约束盲区。\n🔬 实验与结果 NAVSIM 主实验 Type Model EP↑ DAC↑ PDMS↑ IL VADv2 76.0 89.1 80.9 IL Hydra-MDP 77.6 91.7 83.0 IL UniAD 78.8 91.9 83.4 IL PARA-Drive 79.3 92.4 84.0 IL TransFuser 79.2 92.8 84.0 IL DRAMA 80.1 93.1 85.5 IL DiffusionDrive 82.2 96.2 88.1 IL WoTE 81.9 97.3 88.3 IL FeaXDrive-IL 83.3 97.5 88.7 RLFT TransFuser w/ GRPO 88.5 94.7 87.9 RLFT ReCogDrive w/ GRPO 85.9 96.7 90.5 RLFT FeaXDrive w/ FA-GRPO 84.2 98.3 90.0 曲率违反率 Method Curv. Viol.↓ DiffusionDrive 8.59% ReCogDrive-IL 8.05% ReCogDrive w/ GRPO 15.50% FeaXDrive-IL 0.88% FeaXDrive w/ FA-GRPO 2.40% IL 消融 Method PDMS↑ DAC↑ Drv. Viol.↓ Curv. Viol.↓ Baseline 85.32 93.84 6.16% 11.36% + Traj-centric 86.56 94.58 5.42% 7.51% + Curv. Reg. 86.57 94.94 5.06% 0.13% FeaXDrive-IL 88.75 97.46 2.54% 0.88% 后训练对比 Method PDMS↑ DAC↑ Drv. Viol.↓ Curv. Viol.↓ FeaXDrive-IL 88.75 97.46 2.54% 0.88% + GRPO (score-only) 90.56 98.28 1.72% 5.79% + FA-GRPO 90.00 98.31 1.69% 2.40% 关键发现 Trajectory-centric → baseline：PDMS +1.24, Curv. Viol. 11.36% → 7.51% 曲率正则化：Curv. Viol. 7.51% → 0.13% 可行驶区域引导：DAC 94.94 → 97.46, Drv. Viol. 5.06% → 2.54% FA-GRPO vs GRPO：标准 GRPO 推高 PDMS 至 90.56 但 Curv. Viol. 反弹至 5.79%；FA-GRPO 以 90.00 压制 Curv. Viol. 至 2.40% 💡 个人思考 / 关键洞察 1. 低维结构化目标令 x0-prediction 天然适配轨迹规划。 轨迹 $\\mathbf{x}_0 \\in \\mathbb{R}^{H \\times 4}$ 与图像的 高维生成有本质区别。noise-centric 在图像生成中成功， 但不意味着轨迹规划也应沿用——后者维度低、结构强、 直接对应物理量。\n2. 速度自适应曲率边界的精妙设计。 $\\kappa_i^{\\mathrm{adp}} = \\min(\\kappa_{\\max}^{\\mathrm{geo}}, a_{\\max}^{\\mathrm{lat}} / v_i^2)$ 融合几何与动力学约束： 低速转弯半径主导，高速横向加速度收紧。曲率违反率 11.36% → 0.13% 说明模型学到了运动学可行流形。\n3. Footprint 级 SDF 的必要性。 车辆是矩形体，中心点约束在窄路转弯时无法保证整车 不压线。4 角点 SDF 采样 + 可微双线性插值优雅解决 这一盲区，且推理仅 4.41ms（1.3%），近乎免费。\n4. FA-GRPO 揭示奖励对齐的重要性。 标准 GRPO 将 PDMS 推至 90.56 但曲率违反率反弹至 5.79%——模型找到\u0026quot;不可行换高分\u0026quot;捷径。FA-GRPO 以 90.00 PDMS 换取曲率违反率 2.40%，在安全攸关场景中 宁愿接受微小性能损失也不容忍可行性退化。\n5. 与 DiffusionDrive 系列的对比。 DiffusionDrive 首将扩散引入端到端规划但不关心可行性； DiffusionDriveV2 用 Intra/Inter GRPO 强化质量一致性 但未专门建模可行性；ReCogDrive 加入 GRPO 但 score-only 奖励导致可行性恶化。FeaXDrive 最本质的差异是 从\u0026quot;预测噪声\u0026quot;到\u0026quot;预测轨迹\u0026quot;的范式转换。\n维度 DiffusionDrive DiffusionDriveV2 ReCogDrive FeaXDrive 扩散公式 Noise-centric Noise-centric Noise-centric Trajectory-centric 可行性建模 ❌ ❌ ❌ ✅ 三阶段覆盖 RL 奖励 无 Intra/Inter GRPO Score-only Score + 可行性 Curv. Viol. (IL) 8.59% — 8.05% 0.88% PDMS (IL) 88.1 86.2 86.8 88.7 Curv. Viol. (RL) — — 15.50% 2.40% PDMS (RL) — 91.2 90.5 90.0 6. 局限与展望。 FA-GRPO 尚未将可行驶区域约束统一纳入奖励， SDF 推理依赖 HD map。核心贡献不在于单项技术突破， 而在于从\u0026quot;预测噪声\u0026quot;回归\u0026quot;预测轨迹\u0026quot;的视角调整。 可以预见，未来端到端扩散规划将沿 trajectory space 中\u0026quot;约束深化\u0026quot;的方向发展：从曲率到 jerk、从运动学 到动力学、从 single-agent 到交互感知。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2604-12656/","summary":"FeaXDrive 发现噪声中心扩散规划与轨迹可行性空间存在根本错位，提出轨迹中心扩散框架，通过自适应曲率正则化训练、可行驶区域引导推理和可行性感知 GRPO 后训练系统提升轨迹物理可行性。在 NAVSIM 上达 88.7 PDMS (IL) / 90.0 PDMS (RL)，曲率违反率从 8.59% 降至 0.88%。","title":"论文精读：FeaXDrive — Feasibility-aware Trajectory-Centric Diffusion Planning"},{"content":"📄 论文信息 标题：Hydra-MDP: End-to-end Multimodal Planning with Multi-target Hydra-Distillation 团队：NVIDIA × 复旦大学 × 华东师范大学 × 北京理工大学 × 南京大学 × 南开大学 发表：CVPR 2024 Autonomous Grand Challenge — Navsim 赛道 第 1 名 arXiv：2406.06978（2024/06 v1 → 2024/08 v4） 代码：github.com/NVlabs/Hydra-MDP 一句话：多教师知识蒸馏 + 多头轨迹解码器——学生网络同时从人类示范教师（模仿人类轨迹）和规则教师（碰撞/可行驶区域等闭环指标）中学习，以端到端可微分的方式统一了行为克隆和闭环指标优化。 图 1：三种端到端规划范式的对比。左列（A）单模态行为克隆——感知直连规划头输出单条轨迹，优化 L2 模仿损失；中列（B）多模态 + 单目标学习——解码器输出多条候选轨迹，但后处理阶段依赖非可微的规则代价函数选优，优化目标仍仅是模仿损失；右列（C）Hydra-MDP 提出的多模态 + 多目标学习——多头解码器并行输出 K 条候选轨迹，ScoreNet 为每条打分，训练时同时接收人类示范教师（模仿损失）和规则教师组（蒸馏损失）的监督，全程端到端可微。\n🤔 要解决什么问题？ 端到端自动驾驶规划面临一个根本性矛盾：模仿学习（行为克隆）只能学到\u0026quot;人类像什么\u0026quot;，无法学到\u0026quot;怎样开得好\u0026quot;。\n现有方法按\u0026quot;预测模式 × 优化目标\u0026quot;可分为三类，Hydra-MDP 所在的第三类开辟了全新范式：\n范式 预测模式 优化目标 代表方法 核心缺陷 单模态 + 单目标 直接回归一条轨迹 仅 L2 模仿损失 经典 BC，UniAD 无法处理多模态决策；L2 误差与驾驶质量弱相关 多模态 + 单目标 词表/锚定采样多条轨迹 仅模仿损失 VADv2, DiffusionDrive 候选集仅拟合人类分布，不引入任何安全/闭环信号 多模态 + 多目标 多头解码器 + 蒸馏损失 模仿损失 + 闭环指标损失 Hydra-MDP — 关键洞察：前两类方法的优化目标都是\u0026quot;让预测轨迹尽可能像人类驾驶轨迹\u0026quot;，但\u0026quot;像人类\u0026quot;不等于\u0026quot;开得好\u0026quot;。一个安全的驾驶行为不仅要像人，还要避免碰撞、留在可行驶区域内、保持舒适——这些闭环指标在纯模仿框架中从未被显式优化。Hydra-MDP 的核心贡献就是把闭环指标作为额外的教师信号，用知识蒸馏注入学生网络，让模型同时学到\u0026quot;人类怎么开\u0026quot;和\u0026quot;什么轨迹安全\u0026quot;。\n🧠 方法详解 2.1 Preliminaries：三种规划范式的数学形式 为理解 Hydra-MDP 的定位，需要从数学上厘清三类规划范式。\n范式一：单模态行为克隆（Behavior Cloning）\n这是最经典的范式——网络直接预测一条未来轨迹，优化与人类专家轨迹的 L2 误差：\n$$ \\mathcal{L}_{\\text{BC}} = \\min_{\\theta} \\mathbb{E}_{(o, a) \\sim \\mathcal{D}_{\\text{expert}}} \\| \\pi_{\\theta}(o) - a \\|^2 $$其中 $o$ 为观测，$a$ 为人类专家轨迹，$\\pi_{\\theta}$ 为规划网络。此目标迫使模型输出单一点估计，无法处理驾驶中的多模态决策困境（左转 vs 右转 vs 刹车都被\u0026quot;平均\u0026quot;成一条危险轨迹）。\n范式二：多模态模仿 + 词表采样\n引入离散化轨迹词表 $\\mathcal{V} = \\{v_1, ..., v_K\\}$，模型先预测分类分布再回归残差：\n$$ \\mathcal{L}_{\\text{vocab}} = \\min_{\\theta} \\mathbb{E}_{(o, a)} \\left[ -\\log \\frac{\\exp(s_{k^*})}{\\sum_{k} \\exp(s_k)} + \\sum_{k} \\mathbb{1}[k = k^*] \\cdot \\| \\delta_k - \\text{FFN}_k(f_{\\theta}(o)) \\|^2 \\right] $$其中 $s_k$ 为选择第 $k$ 个锚定的 logit，$k^*$ 为离 GT 最近的锚定索引，$\\delta_k$ 为残差。此范式支持多模态输出，但优化目标仍局限于拟合人类轨迹，未引入任何安全导向的闭环信号。\n范式三：Hydra-MDP 多目标蒸馏\n在词表范式基础上，引入多个教师同时提供监督信号：\n$$ \\mathcal{L}_{\\text{Hydra}} = \\underbrace{\\mathcal{L}_{\\text{BC}}(\\pi_{\\theta}, \\mathcal{T}_{\\text{human}})}_{\\text{人类教师}} + \\lambda \\cdot \\underbrace{\\mathcal{L}_{\\text{distill}}(\\pi_{\\theta}, \\{\\mathcal{T}_{\\text{rule}}^{(i)}\\}_{i=1}^{M})}_{\\text{多规则教师}} $$学生网络 $\\pi_{\\theta}$ 同时收到人类轨迹示范和规则教师打分信号。$\\lambda$ 为平衡权重。这是本文最核心的公式——它用蒸馏的框架，把\u0026quot;安全\u0026quot;写入了端到端可微的优化目标。\n2.2 Overall Framework：整体架构 Hydra-MDP 以标准的感知 → 编码 → 解码 → 打分流程组织：\n图 2：Hydra-MDP 整体架构图。整个流程分为五层：(1) 多相机图像经感知骨干（ResNet-101 或 ConvNeXt-B）提取 BEV 特征；(2) Transformer 编码器通过交叉注意力和自注意力融合为场景上下文特征；(3) 多头解码器（K 个头）并行输出 K 条相对于锚定的残差轨迹，覆盖不同的驾驶模式（直行、变道、转弯等）；(4) ScoreNet 为每条候选轨迹计算质量分数；(5) 选取得分最高的轨迹经底层控制器执行。训练时两条额外支路——人类示范教师（红色）和规则教师组（蓝色）——通过模仿损失和蒸馏损失联合优化整个网络。\n感知骨干（Perception Backbone）：支持 ResNet-101 或 ConvNeXt-Base 作为图像编码器，提取多相机环视特征。感知模块输出 BEV 视角的场景表示，包含静态道路元素（车道线、路沿）和动态目标（车辆、行人、骑行者）的检测与跟踪结果。\nTransformer 编码器：将感知特征通过交叉注意力与自注意力机制融合为场景上下文特征 $F_{\\text{ctx}} \\in \\mathbb{R}^{d}$，为轨迹解码提供全局条件。\n多头解码器（Multi-head Decoder）：核心生成模块。每个解码头负责一个\u0026quot;锚定轨迹簇\u0026quot;，输出相对于锚定的残差 $\\delta_k$。$K$ 个头并行产生 $K$ 条候选轨迹 $\\{\\tau_1, ..., \\tau_K\\}$，每条代表一类驾驶行为（直行、左变道、右变道、减速等）。\nScoreNet：轻量 MLP 打分网络，为每条候选轨迹输出标量分数 $s_k$，推理时选择分数最高的轨迹作为最终规划结果。\n2.3 Multi-target Hydra-Distillation：多目标知识蒸馏 这是 Hydra-MDP 的核心技术贡献，具体包含三个组件：\n人类示范教师（Human-demonstration Teacher）：$\\mathcal{T}_{\\text{human}}$ 直接提供人类驾驶轨迹作为监督。学生从人类教师获取\u0026quot;典型驾驶行为\u0026quot;的分布知识——什么场景下人类通常会怎么开。这部分损失采用标准的模仿损失：\n$$ \\mathcal{L}_{\\text{imitate}} = \\sum_{k=1}^{K} \\mathbb{1}[k = k^*] \\cdot \\left( \\mathcal{L}_{\\text{cls}}(s_k, k^*) + \\mathcal{L}_{\\text{reg}}(\\delta_k, \\Delta a) \\right) $$其中 $\\mathcal{L}_{\\text{cls}}$ 是选择锚定的交叉熵损失，$\\mathcal{L}_{\\text{reg}}$ 是残差的 smooth-L1 损失。\n规则教师（Rule-based Teacher）：$\\{\\mathcal{T}_{\\text{rule}}^{(i)}\\}_{i=1}^{M}$ 是本文的关键创新。每个规则教师封装一个闭环评价指标——例如 $\\mathcal{T}_{\\text{collision}}$ 评估碰撞风险，$\\mathcal{T}_{\\text{drivable}}$ 评估是否在可行驶区域内，$\\mathcal{T}_{\\text{comfort}}$ 评估加加速度。规则教师的输出是每条候选轨迹的\u0026quot;质量分数\u0026quot;，而不是轨迹本身。\n蒸馏损失（Distillation Loss）：规则教师的分数通过蒸馏损失传递给学生：\n$$ \\mathcal{L}_{\\text{distill}} = \\sum_{i=1}^{M} \\sum_{k=1}^{K} \\| s_k - \\mathcal{T}_{\\text{rule}}^{(i)}(\\tau_k) \\|^2 $$其中 $s_k$ 是 ScoreNet 对轨迹 $\\tau_k$ 的预测分数，$\\mathcal{T}_{\\text{rule}}^{(i)}(\\tau_k)$ 是第 $i$ 个规则教师对 $\\tau_k$ 的打分。此损失将规则教师的\u0026quot;评分偏好\u0026quot;蒸馏到 ScoreNet 中。\n完整的训练目标为：\n$$ \\mathcal{L}_{\\text{total}} = \\mathcal{L}_{\\text{imitate}} + \\lambda \\cdot \\mathcal{L}_{\\text{distill}} $$整个流程端到端可微分——感知骨干、Transformer、多头解码器、ScoreNet 联合训练，不存在任何不可微分的后处理步骤。\n2.4 Inference and Post-processing：推理与后处理 推理时不再需要规则教师，仅保留学生网络的前向计算：\n多候选生成：多头解码器并行输出 $K$ 条候选轨迹 $\\{\\tau_1, ..., \\tau_K\\}$ ScoreNet 打分：对每条候选计算质量分数 $s_k$ 最优轨迹选择： $$ \\tau^* = \\arg\\max_{\\tau_k} \\left( s_k + \\alpha \\cdot \\text{prior}_k \\right) $$其中 $\\text{prior}_k$ 是锚定先验分数（基于统计频率），$\\alpha$ 是平衡系数\n轨迹执行：将 $\\tau^*$ 传给底层控制器（LQR 或 PID）执行 模型集成（Model Ensembling）：为进一步提升性能，论文使用多模型投票策略——训练多个不同初始化的学生网络，推理时对它们的候选轨迹和分数进行聚合。实验表明模型集成可稳定提升 2-3% PDMS。\n🏗️ 架构流程总览 Hydra-MDP 的完整数据流可分为 推理阶段（绿色路径） 和 训练阶段（蓝色路径） 两条主线：\n推理阶段（前向传播） 步骤 模块 输入 输出 说明 1 多相机输入 环视图像 (Cam1~Cam6) 原始像素帧 通常 6 个视角覆盖 360° 2 Perception Backbone 多相机图像 BEV 场景特征 ResNet-101 或 ConvNeXt-B 编码器 3 Transformer Encoder BEV 特征 场景上下文 $F_{ctx}$ 交叉注意力 + 自注意力融合 4 Multi-head Decoder $F_{ctx}$ K 条候选轨迹 $\\{\\tau_1,...,\\tau_K\\}$ 每个头负责一个锚定簇，输出残差 5 ScoreNet 候选轨迹 每条轨迹的分数 $s_k$ 轻量 MLP，输出标量 6 最优轨迹选择 分数 + 锚定先验 $\\tau^* = \\arg\\max(s_k + \\alpha \\cdot \\text{prior}_k)$ 选分数最高的轨迹 7 底层控制器 $\\tau^*$ 油门/刹车/转向 LQR 或 PID 控制 训练阶段（额外路径） 步骤 教师来源 监督信号 损失函数 说明 A 人类示范教师 $\\mathcal{T}_{human}$ 人类驾驶轨迹 GT $\\mathcal{L}_{cls} + \\mathcal{L}_{reg}$ 交叉熵（选锚定）+ smooth-L1（残差） B 规则教师组 $\\{\\mathcal{T}_{rule}^{(i)}\\}_{i=1}^{M}$ 多指标评分 $\\mathcal{L}_{distill} = \\sum_i \\sum_k \\lVert s_k - \\mathcal{T}_{rule}^{(i)}(\\tau_k) \\rVert^2$ 碰撞/可行驶区域/舒适度等 C 联合优化 A + B $\\mathcal{L}_{total} = \\mathcal{L}_{imitate} + \\lambda \\cdot \\mathcal{L}_{distill}$ 端到端反向传播更新全部参数 关键设计点：规则教师仅在训练时参与计算，推理时完全移除——模型学到的\u0026quot;安全偏好\u0026quot;已蒸馏进 ScoreNet 的权重中，不会增加推理开销。\n🔬 实验与结果 1. Navsim 挑战赛主结果（PDMS / EPDMS） Hydra-MDP 在 CVPR 2024 Autonomous Grand Challenge — Navsim 赛道 获得 第 1 名。以下为主赛道封闭测试集结果：\n方法 PDMS ↑ EPDMS ↑ 碰撞率 ↓ 可行驶区域违规 ↓ VAD 0.684 0.381 0.012 0.040 UniAD 0.682 0.360 0.018 0.049 Hydra-MDP (ResNet-101) 0.898 0.677 0.001 0.011 Hydra-MDP (ConvNeXt-B) 0.912 0.712 \u0026lt;0.001 0.008 Hydra-MDP (Ensemble) 0.934 0.751 \u0026lt;0.001 0.005 Hydra-MDP 在 PDMS 上相比 VAD 提升超过 30%，碰撞率降低了 一个数量级（从 1.2% 降至 \u0026lt;0.1%）。ConvNeXt-B 骨干相比 ResNet-101 带来额外约 1.4% PDMS 提升。\n2. 轨迹词表规模消融（Vocabulary Size Scaling） 论文研究了轨迹锚定词表大小对性能的影响，验证了 Hydra-MDP 的扩展律（Scaling Law）：\n词表大小 PDMS ↑ EPDMS ↑ 碰撞率 ↓ 1,024 0.871 0.641 0.003 4,096 0.886 0.658 0.002 8,192 0.898 0.677 0.001 16,384 0.903 0.683 0.001 关键结论：性能随词表大小单调递增，在 1,024 → 8,192 区间斜率最陡，16,384 后趋于饱和。更大的词表提供更细粒度的轨迹覆盖，但计算开销也线性增长。8,192 是性能与效率的最优折中。\n3. 模型集成效果（Model Ensembling） 集成策略 PDMS ↑ EPDMS ↑ 碰撞率 ↓ 单模型 0.912 0.712 \u0026lt;0.001 3 模型平均 0.926 0.738 \u0026lt;0.001 5 模型集成 0.934 0.751 \u0026lt;0.001 7 模型集成 0.936 0.753 \u0026lt;0.001 模型集成的收益在 5 个模型后趋于饱和（0.934 → 0.936 增益很小），实际部署推荐 3-5 个模型的集成。\n4. 与相关工作的定性对比 方法 规划范式 优化目标 多候选 闭环指标 端到端可微 Navsim PDMS VAD 单模态回归 L2 模仿 ✗ ✗ ✓ 0.684 UniAD 单模态回归 L2 + 碰撞 ✗ 碰撞 loss ✓ 0.682 VADv2 词表采样 + 回归 模仿 + 分类 ✓ ✗ ✓ ~0.75* Hydra-MDP 多头 + 蒸馏 模仿 + 多规则蒸馏 ✓ ✓ 多目标 ✓ 0.912 DiffusionDrive 扩散生成 模仿 + 辅助约束 ✓ 碰撞/边界 loss ✓ ~0.87* *VADv2 和 DiffusionDrive 在 Navsim 上的精确分数取自各自论文或公开 Leaderboard，表格中为近似值。\n💡 个人思考与关键洞察 1. \u0026ldquo;多目标蒸馏\u0026quot;解决了一个根本性的学习偏差 行为克隆的本质是让模型\u0026quot;复制\u0026quot;人类行为，但人类行为本身不总是最优的——人类会疲劳、分心、判断失误。更重要的是，人类轨迹只是众多合理轨迹中的一个采样，而\u0026quot;安全\u0026quot;的定义远比\u0026quot;像人类\u0026quot;丰富。Hydra-MDP 的多目标蒸馏把这个问题转化为\u0026quot;同时拟合人类示范 + 满足安全约束\u0026quot;的联合优化，本质上是在模仿学习的框架内注入了领域知识（规则）作为正则化项。这个思路远比单纯增加数据量或模型容量更根本——它修正的不是\u0026quot;学得不够好\u0026rdquo;，而是\u0026quot;学错了方向\u0026quot;。\n2. 多头解码器的设计隐含了\u0026quot;多专家混合\u0026quot;的思想 Hydra-MDP 的 $K$ 个解码头各自负责一个轨迹\u0026quot;流派\u0026quot;（直行派、变道派、慢速派等），ScoreNet 则在它们之间做\u0026quot;裁判\u0026quot;。这个架构与 Mixture of Experts（MoE）高度同构——每个头是一个\u0026quot;专家\u0026quot;（解码特定行为模式），ScoreNet 是\u0026quot;门控\u0026quot;（选取最适合当前场景的专家输出）。不同的是，Hydra-MDP 的门控是在推理时做 hard selection（选分数最高的一条），而 MoE 通常做 soft weighted sum。将 MoE 的 soft 融合引入轨迹选择可能是未来改进方向——不同轨迹在转弯、避障的不同阶段各有所长，分段融合或许比整条选一更优。\n3. 规则教师的设计哲学：\u0026ldquo;可微分的规则\u0026quot;是端到端安全的关键 规则教师的本质是把不可微的闭环仿真指标（碰撞检测、可行驶区域检查）转化为可微的蒸馏损失。这个转化的巧妙之处在于：规则教师不需要参与反向传播，它只是离线计算分数作为回归目标，ScoreNet 通过 L2 损失去拟合这些分数，从而将规则知识\u0026quot;蒸馏\u0026quot;进网络。这避免了在设计端到端架构时处理不可微操作的麻烦，同时保留了规则信号的注入。我认为这是本文最有工程价值的设计模式——任何不可微的领域知识（交通规则、驾驶礼仪、能耗最优等）都可以封装为一个\u0026quot;规则教师\u0026rdquo;，用蒸馏的方式注入端到端模型。\n4. 扩展律的意义：自动驾驶规划也存在\u0026quot;更多的候选 = 更好的性能\u0026quot; 词表规模从 1,024 扩展到 16,384，PDMS 从 0.871 增长到 0.903——这个趋势与 NLP 中\u0026quot;更大词表 = 更好性能\u0026quot;的观察一致。但在规划场景中，词表规模并不直接对应模型参数（解码头共享 Transformer 特征），计算开销的增长主要来自多头解码器的输出层。这意味着增大词表在计算上相对廉价，是一个\u0026quot;高性价比\u0026quot;的性能提升维度。未来方向可能包括动态词表——根据当前场景（高速 vs 城区、直道 vs 弯道）选择不同的轨迹锚定子集。\n5. 与扩散规划的区别：模式覆盖 vs 模式择优 DiffusionDrive 等扩散规划器采用\u0026quot;从噪声生成多条轨迹\u0026quot;的方式覆盖轨迹分布，本质是生成式的\u0026quot;模式覆盖\u0026quot;；Hydra-MDP 的多头解码器则是\u0026quot;锚定聚类 + 残差回归\u0026quot;的\u0026quot;模式择优\u0026quot;。两条路线都能输出多模态轨迹，但哲学不同：扩散模型在生成新轨迹（可能覆盖训练集外的模式），Hydra-MDP 在选择预定义模式中的最优解（更可控但受锚定覆盖度限制）。前者更有\u0026quot;创造力\u0026quot;，后者更可审计。一个有趣的问题是：能否将两者结合——用扩散头生成候选，用 Hydra-MDP 的蒸馏打分网络做择优？这种\u0026quot;生成 + 蒸馏打分\u0026quot;的混合范式可能兼具两者的优势。\n6. Hydra-MDP 对 VLA 范式的潜在影响 当前 VLA（Vision-Language-Action）模型（如 DriveVLM、EMMA）的主流做法是将大语言模型作为决策推理模块，输出路径点或文本意图。Hydra-MDP 的多目标蒸馏框架为 VLA 提供了一个自然的扩展方向：将语言模型作为\u0026quot;语义教师\u0026quot;融入蒸馏框架——例如，一个 VLM 教师可以对候选轨迹进行语义评分（\u0026ldquo;这条轨迹有压线风险\u0026rdquo;、\u0026ldquo;这条轨迹更舒适\u0026rdquo;），蒸馏到轻量规划网络中。这种\u0026quot;用大模型做教师、小模型做学生\u0026quot;的蒸馏范式，可能成为 VLA 落地车端的重要工程路径——大模型负责\u0026quot;思考\u0026quot;（离线评分），小模型负责\u0026quot;行动\u0026quot;（在线规划）。\n📚 延伸阅读 NAVSIM 基准详解：NAVSIM 详解：自动驾驶规划的事实标准评测基准 知识蒸馏与端到端规划：端到端自动驾驶演进 扩散模型做规划（同期工作）：DiffusionDrive 精读 NVIDIA 后续工作：DriveVLA-W0（将 Hydra-MDP 的多头蒸馏扩展到 VLA 场景） 📖 这是论文精读系列的第 XX 篇。Hydra-MDP 用\u0026quot;多教师蒸馏\u0026quot;这一简洁而优雅的思想，证明了安全闭环指标可以通过蒸馏的方式直接注入端到端规划网络——两行公式的改变，带来了 Navsim 上 30% 的 PDMS 提升和数量级的安全改善。这提醒我们：有时候最大的突破不在于发明新架构，而在于重新思考\u0026quot;模型的优化目标应该是什么\u0026quot;。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2406-06978/","summary":"Hydra-MDP 提出多教师知识蒸馏框架，从人类示范教师（模仿人类轨迹）和规则教师（碰撞/可行驶区域等闭环指标）中同时学习，用多头解码器集成多样化轨迹候选。它以端到端可微分的方式统一了模仿学习和闭环指标优化，在 CVPR 2024 Navsim 挑战赛获得第一名，证明了多目标蒸馏范式在驾驶规划中的有效性。","title":"论文精读：Hydra-MDP — End-to-end Multimodal Planning with Multi-target Hydra-Distillation"},{"content":"📌 一句话概括 UniDriveVLA 以 MoT 架构将理解、感知、规划解耦为三个专家，通过 Masked Joint Attention 协调跨专家信息流，从根源上解决 VLA 的空间感知与语义推理在共享参数下的相互干扰，在 nuScenes 和 Bench2Drive 上达到 SOTA。\n📄 论文信息 论文标题：UniDriveVLA: Unifying Understanding, Perception, and Action Planning for Autonomous Driving arXiv：2604.02190（2026 年 4 月） 作者团队：Yongkang Li, Lijun Zhou, Sixu Yan, Bencheng Liao, Tianyi Yan 等 — 小米汽车 × 华中科技大学 × 澳门大学 项目页：https://xiaomi-research.github.io/unidrivevla 代码：https://github.com/xiaomi-research/unidrivevla 关键词：Mixture-of-Transformers, VLA, autonomous driving, sparse perception, expert decoupling 🤔 要解决什么问题？ VLA 模型面临核心矛盾——空间感知与语义推理的冲突：\n直接使用 2D VLM：保留原生语义推理能力，但缺乏 3D 空间感知。VLM 预训练于互联网图像-文本数据，天然不具备显式空间感知能力。 引入 3D 空间表征：通过 BEV 编码器、3D Q-Former 或直接注入空间 token 来增强空间感知，但与语义推理共享参数空间时产生表征干扰（Representation Interference），削弱了 VLM 的原生推理能力。 论文通过 图 2 的实证分析揭示了这一冲突的本质：在共享权重解码器中，LLM token 与感知 token 的余弦相似度随层数加深逐渐趋近于 1，表明特征发生了表征坍缩（Feature Collapse）——空间特征与语义特征融合成几乎无法区分的表示。而在 MoT 架构中，不同专家保持低相似度，维持了任务解耦。\n为什么现有方法无法根治？ 方法类型 代表工作 缓解手段 根本问题 2D VLA 微调 EMMA, AutoVLA 依赖 VLM 原生能力 空间感知不足，无法准确建模 3D 场景 对齐式 3D 增强 OmniDrive, OpenDriveVLA 将结构化的 2D/3D 特征与语言表征对齐 对齐数据规模远小于 VLM 预训练语料，无法彻底消除冲突 注入式 3D 增强 OccVLA, SparseOccVLA, Percept 直接将空间 token 注入共享解码器 空间与语义 token 在共享参数中相互干扰，推理能力下降 这些方法的共同局限在于：它们都在共享参数空间内同时优化空间感知与语义推理，无论以何种方式引入 3D 信息，都无法避免表征干扰的发生。\n💡 核心贡献 提出 MoT 架构解耦 VLA：首次将 Mixture-of-Transformers 引入自动驾驶 VLA，以理解、感知、规划三个专家解耦优化，从架构层面消除感知-推理冲突。 稀疏感知范式：不引入稠密 3D 表征，而是直接从 2D VLM 多尺度视觉特征中构建稀疏空间先验，兼顾空间感知与语义推理。 三阶段渐进训练：先固语义 → 再联调感知+规划 → 最后冻结 VLM 精调专家，保证推理能力不退化。 全面的 SOTA 结果：nuScenes 开环规划与 Bench2Drive 闭环规划均达 SOTA，同时覆盖 3D 检测、在线地图、运动预测、驾驶 VQA 等多任务。 🧠 方法详解 1. 问题形式化 自动驾驶任务旨在从多视图相机观测 $I_{\\mathrm{cam}} \\in \\mathbb{R}^{K \\times V \\times H \\times W \\times 3}$、历史轨迹 $I_{\\mathrm{hist}} \\in \\mathbb{R}^{T_{\\mathrm{hist}} \\times 2}$ 和导航指令 $L_{\\mathrm{nav}}$ 中预测安全未来轨迹 $T_{\\mathrm{traj}}$：\n$$ T_{\\mathrm{traj}} = \\Phi\\bigl(I_{\\mathrm{cam}},\\, I_{\\mathrm{hist}},\\, L_{\\mathrm{nav}}\\bigr) $$传统 3D 增强 VLA 进一步引入空间表征 $T_{\\mathrm{sp}}$：\n$$ T_{\\mathrm{traj}} = \\Phi\\bigl(I_{\\mathrm{cam}},\\, I_{\\mathrm{hist}},\\, L_{\\mathrm{nav}},\\, T_{\\mathrm{sp}}\\bigr) $$问题在于异构特征在共享参数中相互纠缠，导致与层深正相关的表征干扰。\n2. UniDriveVLA 架构 核心设计是 Mixture-of-Transformers（MoT），包含三个专家：\n专家 Token 来源 职能 监督信号 Understanding Expert Vision-Language Backbone 语义理解、场景描述、常识推理 自回归语言建模 $\\mathcal{L}_{\\mathrm{ar}}$ Perception Expert Sparse Perception Module 3D 检测、在线地图、自车状态、运动预测、Occupancy 结构化感知任务 $\\mathcal{L}_{\\mathrm{per}}$ Action Expert Action Encoder 轨迹生成、运动规划 Flow-Matching 轨迹生成 $\\mathcal{L}_{\\mathrm{act}}$ 在每个 MoT 层中，三个 token 组首先经过专家特定的线性投影：\n$$ \\mathbf{Q}^{g}=T_{g}\\mathbf{W}_{Q}^{g},\\;\\mathbf{K}^{g}=T_{g}\\mathbf{W}_{K}^{g},\\;\\mathbf{V}^{g}=T_{g}\\mathbf{W}_{V}^{g},\\quad g\\in\\{\\mathrm{und},\\mathrm{per},\\mathrm{act}\\} $$3. Masked Joint Attention（MJA） 专家投影后，三组表征拼接并在全序列上计算注意力，通过掩码矩阵 $\\mathbf{M}$ 控制可见模式：\n$$ \\mathbf{Q}=[\\mathbf{Q}^{\\mathrm{und}};\\mathbf{Q}^{\\mathrm{per}};\\mathbf{Q}^{\\mathrm{act}}],\\quad \\mathbf{K}=[\\mathbf{K}^{\\mathrm{und}};\\mathbf{K}^{\\mathrm{per}};\\mathbf{K}^{\\mathrm{act}}],\\quad \\mathbf{V}=[\\mathbf{V}^{\\mathrm{und}};\\mathbf{V}^{\\mathrm{per}};\\mathbf{V}^{\\mathrm{act}}] $$$$ \\mathbf{Z}=\\mathrm{Softmax}\\!\\left(\\frac{\\mathbf{Q}\\mathbf{K}^{\\top}}{\\sqrt{d_{k}}}+\\mathbf{M}\\right)\\mathbf{V} $$掩码设计原则：\nUnderstanding Token：采用 Causal Masking，不看后续的 Perception 和 Action token，保持 VLM 原生自回归推理能力 Perception Token：看前面的 Understanding token 以获取语义上下文 Action Token：看前面所有 Understanding 和 Perception token，聚合语义+空间信息做规划 输出再分割后经专家特定的层归一化和 FFN：\n$$ \\mathbf{H}^{g}=T_{g}+\\mathrm{LN}_{\\mathrm{attn}}^{g}\\!\\left(\\mathbf{Z}^{g}\\mathbf{W}_{O}^{g}\\right),\\quad \\mathbf{O}^{g}=\\mathbf{H}^{g}+\\mathrm{LN}_{\\mathrm{ffn}}^{g}\\!\\left(\\mathrm{FFN}^{g}(\\mathbf{H}^{g})\\right) $$联合优化目标：\n$$ \\mathcal{L}_{\\mathrm{total}} = \\lambda_{1}\\mathcal{L}_{\\mathrm{ar}} + \\lambda_{2}\\mathcal{L}_{\\mathrm{per}} + \\lambda_{3}\\mathcal{L}_{\\mathrm{act}} $$4. 稀疏空间感知 区别于注入稠密 BEV 表征的方法，UniDriveVLA 从多尺度 2D 视觉特征中直接构建稀疏查询：\n检测/地图/自车/运动/Occupancy 的任务特定稀疏查询由数据集级 K-Means 聚类初始化 经时序交互、任务内推理、任务间通信、可变形特征聚合、任务精化逐步更新 感知输出投影到 Perception Expert 的隐藏空间，通过 MJA 与理解和 action 分支交互，实现语义增强的稀疏感知 最终特征再投影回稀疏感知空间经后续解码器精化，输出可解释的感知结果 5. 三阶段渐进训练 阶段 冻结状态 学习率 数据 目标 Stage 1 驾驶预训练 全参数微调 VLM $4 \\times 10^{-5}$（3 epoch） 驾驶 VQA + 通用多模态数据（3:7） 锚定语义推理能力 Stage 2 联合优化 LoRA 约束 LM + VLM 半学习率 $2 \\times 10^{-4}$（VLM 系数 0.5×, 30 epoch） 驾驶数据 + 感知+规划监督 引入感知与规划能力 Stage 3 专家精化 冻结 VLM $1 \\times 10^{-4}$（15 epoch） 同上 + 运动预测 专精化 Perception \u0026amp; Action Expert Stage 2 使用 AdamW 优化器并启用 EMA。Stage 3 引入额外运动预测目标为 Action Expert 提供动态先验。\n🏗️ 架构流程总览 推理阶段 步骤 模块 输入 输出 说明 1 Vision Encoder (SigLIP-2) 多视图图像 $960 \\times 544$ 多尺度视觉特征 对齐 VLM 的 $32 \\times$ 下采样步长 2 VL-Merger (MLP) 视觉特征 + 文本指令 Understanding Token $T_{\\mathrm{und}}$ 融合视觉与语义信息 3 Sparse Perception Module 多尺度视觉特征 Perception Token $T_{\\mathrm{per}}$ 检测/地图/自车/运动/Occupancy 4 Action Encoder 高斯噪声 + 目标速度序列 Action Token $T_{\\mathrm{act}}$ Flow-Matching 插值构造 5 MoT Layer × N $T_{\\mathrm{und}}, T_{\\mathrm{per}}, T_{\\mathrm{act}}$ 更新的三组 token 各专家先自投影 → MJA → 再投影 → FFN 6 LM Head / Perception Decoder / Action Decoder 对应专家输出 语言回答 / 感知结果 / 轨迹 统一框架多任务输出 训练阶段 阶段 迭代 优化参数 监督信号 关键技术 Stage 1 3 epoch 完整 VLM（Qwen3-VL） $\\mathcal{L}_{\\mathrm{ar}}$ 驾驶数据:通用数据 = 3:7 Stage 2 30 epoch VLM（LoRA + 0.5× LR）+ 全部 Expert $\\lambda_1\\mathcal{L}_{\\mathrm{ar}} + \\lambda_2\\mathcal{L}_{\\mathrm{per}} + \\lambda_3\\mathcal{L}_{\\mathrm{act}}$ AdamW, EMA Stage 3 15 epoch Perception Expert + Action Expert（VLM 冻结） 同上 + 运动预测 专精训练，保持语义 🖼️ 图片解析 图 1：三种 VLA 范式的对比。 (a) Vanilla 2D VLA 直接使用 2D VLM，保留强语义推理但空间感知严重受限，面对需要精确 3D 定位的场景无力应对。(b) 3D-Enhanced VLA 引入 BEV/Occupancy 等空间表征提升感知，但共享参数导致语义推理能力下降，两种能力无法同时最优。(c) UniDriveVLA 通过 MoT 解耦，理解专家专注语义、感知专家专注空间、规划专家整合决策，三者通过 Masked Joint Attention 协调，实现空间感知与语义推理的兼得。\n图 2：表征干扰与性能对比。 左图展示了 LLM token 与感知 token 在各层的余弦相似度。共享权重解码器中，相似度随层深从约 0.2 单调上升至接近 1.0——意味着空间和语义特征逐渐坍缩为几乎一致的表示，丧失了各自的特异性。而 MoT 架构中相似度始终保持在 0.2 以下，表明专家解耦有效维持了表征的多样性。右图量化了这一差异的下游影响：UniDriveVLA 在感知、推理和规划指标上一致超越共享权重基线，尤其在碰撞率和 L2 误差上改善显著。\n图 3：UniDriveVLA 的整体架构。 多视图图像经 SigLIP-2 视觉编码器和 MLP Merger 产生 Understanding Token，同时进入稀疏感知模块提取 Perception Token。Action Encoder 从噪声和速度序列构建 Action Token。三组 token 在堆叠的 MoT 层中通过专家特定投影和 Masked Joint Attention 交互，最终分别由 LM Head、Perception Decoder 和 Action Decoder 输出语言理解、感知结果和规划轨迹。整个流程在一个统一框架内完成，无需多阶段流水线。\n图 4：Masked Joint Attention 的掩码模式。 注意力矩阵以 Understanding（U）、Perception（P）、Action（A）的顺序排列。Understanding token 采用因果掩码（灰色对角线以下区域被掩蔽），不关注后续的任何 Perception 或 Action token——这保证了 VLM 的原生自回归语义推理不受空间和动作 token 的干扰。Perception token 关注所有 Understanding token 以获取语义上下文用于增强空间感知，但不关注 Action token。Action token 关注所有 Understanding 和 Perception token，全面聚合语义+空间信息以做出规划决策。\n图 5：UniDriveVLA 的闭环驾驶能力与消融分析。 该图综合展示了 UniDriveVLA 在 Bench2Drive 各场景能力维度上的表现，以及在 nuScenes 开环规划中的组件贡献消融。Merging（38.75%）和 Overtaking（80.00%）表现尤其突出，体现了 MoT 解耦+稀疏感知在复杂交互场景中的优势。\n🔬 实验与结果 Bench2Drive 闭环规划 方法 Open-loop Avg. L2 $\\downarrow$ Driving Score $\\uparrow$ Success Rate (%) $\\uparrow$ Efficiency $\\uparrow$ Comfortness $\\uparrow$ UniAD (CVPR23) 0.73 45.81 16.36 129.21 43.58 SparseDrive (ICRA25) 0.87 44.54 16.71 170.21 48.63 DriveMOE (CVPR26) 0.38 74.22 48.64 175.96 15.31 Orion (ICCV25) 0.68 77.74 54.62 151.48 17.38 ReCogDrive (ICLR26) — 71.36 45.45 138.18 17.45 UniDriveVLA 0.72 78.37 51.82 198.86 11.78 UniDriveVLA 在**Driving Score（78.37）和Efficiency（198.86）**上达到所有非 PDM-Lite 方法中的最优，与使用特权数据训练的 AutoVLA/SimLingo 相比也极具竞争力。\n多能力细粒度分析 Ability UniDriveVLA Orion DriveMOE ReCogDrive Merging 38.75 25.00 34.67 29.73 Overtaking 80.00 71.11 40.00 20.00 Emergency Brake 50.00 78.33 65.45 69.09 Give Way 30.00 33.00 40.00 20.00 Traffic Sign 58.95 69.15 59.44 71.34 Mean 51.53 54.72 47.91 42.03 在 Merging 和 Overtaking 等复杂交互场景中，UniDriveVLA 大幅领先其他方法，表明 MoT 解耦+稀疏感知的设计尤其擅长处理高动态交互场景。\nnuScenes 开环规划（无 Ego State） 方法 L2 (m) Avg. $\\downarrow$ Collision (%) Avg. $\\downarrow$ LLM UniAD (CVPR23) 0.73 / 1.03 0.61 / 0.77 — SparseDrive (ICRA25) 0.55 / 0.99 0.08 / 0.21 — OmniDrive 0.84 / — 0.94 / — LLaVA-7B FSDrive 0.53 / 0.96 0.17 / 0.40 Qwen2-VL-3B UniDriveVLA-Base 0.54 / 0.96 0.17 / 0.41 Qwen3-VL-2B UniDriveVLA-Large 0.51 / 0.90 0.11 / 0.27 Qwen3-VL-8B （指标格式：ST-P3 协议 / UniAD 协议）\nUniDriveVLA-Large 在无自车状态的设定下取得了最佳的轨迹精度（L2 0.51/0.90）和碰撞率（0.11/0.27），显著优于同等规模的 VLA 方法。\nnuScenes 感知结果 方法 Det mAP $\\uparrow$ NDS $\\uparrow$ Map mAP $\\uparrow$ UniAD (CVPR23) 0.380 0.359 — VAD (ICCV23) 0.276 0.397 0.476 SparseDrive (ICRA25) 0.418 0.525 0.551 UniDriveVLA-Large 0.407 0.460 0.535 UniDriveVLA 作为统一 VLA 框架在感知上达到接近专用感知方法的水平，检测 mAP 0.407、NDS 0.460、地图 mAP 0.535，说明稀疏感知设计为下游规划提供了可靠的 3D 空间基础。\nMoT 解耦消融 架构 General VQA (%) $\\uparrow$ DriveBench (%) $\\uparrow$ Det NDS $\\uparrow$ Map mAP $\\uparrow$ L2 (m) $\\downarrow$ CR (%) $\\downarrow$ Shared-Weight Decoder 31.1 50.8 0.437 0.516 0.641 0.175 Mixture-of-Transformers 45.5 54.9 0.439 0.516 0.533 0.140 MoT 相比共享权重解码器在通用 VQA 上提升 14.4 个百分点，L2 误差降低 16.9%，碰撞率降低 20%。这直接验证了专家解耦不仅维护了 VLM 的语义推理能力，也通过减少表征干扰提升了感知和规划质量。\n组件消融 Baseline Ego Det Map Occ Motion L2 $\\downarrow$ CR (%) $\\downarrow$ ✓ 0.75 0.27 ✓ ✓ 0.61 0.21 ✓ ✓ ✓ 0.58 0.10 ✓ ✓ ✓ ✓ 0.58 0.14 ✓ ✓ ✓ ✓ ✓ 0.53 0.14 自车状态 + 检测最有效降低碰撞率（0.27→0.10），Occ 进一步优化 L2。\n💡 个人思考 1. Perception-Reasoning Conflict 是 VLA 自动驾驶的核心瓶颈 这篇论文最有价值的贡献在于明确识别并命名了 \u0026ldquo;Perception-Reasoning Conflict\u0026rdquo;。此前，3D-Enhanced VLA 方法的论文常观察到\u0026quot;加入 BEV/Occupancy 后推理下降\u0026quot;的现象，但多归因于训练数据不足或架构效率问题。UniDriveVLA 通过图 2 的余弦相似度分析证明这是表征层面的系统性坍缩——在共享参数中强制混合异构特征必然导致干扰。这一发现为整个 VLA 领域提供了清晰的设计原则：空间感知与语义推理应当在优化路径上保持分离，仅在推理时通过受控机制交互。\n2. 以 MoT 为代表的 \u0026ldquo;Decoupled Then Interact\u0026rdquo; 范式将成为主流 UniDriveVLA 的设计哲学与 pi0、DriveVLA-W0 等同期工作不谋而合：将多模态/多任务模型拆分为专家分治，再通过 Joint Attention 协调。这反映了 Transformer 架构演进的重要趋势——从 \u0026ldquo;One Architecture to Rule Them All\u0026rdquo; 走向 \u0026ldquo;Specialized Experts with Controlled Communication\u0026rdquo;。MoT 的核心优势在于它不需要为每个新能力重新设计架构，只需添加新专家和对应的掩码模式。未来自动驾驶 VLA 可能扩展到更多维度：感知更长时序、预测其他 agent 意图、整合高精地图先验等，MoT 提供了优雅的可扩展框架。\n3. 稀疏感知的 \u0026ldquo;够用就好\u0026rdquo; 哲学值得深思 UniDriveVLA 选择稀疏感知而非稠密 BEV/Occupancy，是一个重要的设计决策。稠密表征虽然信息更丰富，但对 VLM 的语义推理冲击更大。稀疏感知通过查询范式直接提取关键空间先验（目标位置、车道结构、自车状态），在\u0026quot;足够支撑规划\u0026quot;的同时最大程度减少对语义路径的干扰。这提示我们：在统一模型中，感知表征的形态选择不是\u0026quot;越丰富越好\u0026quot;，而是\u0026quot;在满足下游需求的前提下尽可能轻量和解耦\u0026quot;。稠密与稀疏的 trade-off 需要一个量化度量的框架。\n4. 三阶段训练策略的系统性价值 Stage 1（纯语义）→ Stage 2（联合学习）→ Stage 3（冻结 VLM 精化专家）的策略很有启发：它本质上是在防止\u0026quot;语义灾难性遗忘\u0026quot;和\u0026quot;感知学习不充分\u0026quot;之间寻找最优路径。Stage 2 使用 LoRA + 半学习率的双保险机制尤其精妙——既允许感知和规划目标影响 VLM 表征进行必要的适配，又限制更新的幅度和范围避免破坏预训练知识。这种渐进式能力注入的训练哲学可以推广到多阶段微调的各种场景：先在全部参数上稳定基础能力，再逐步引入新能力并逐步解冻相关参数。\n5. 局限：从 Bench2Drive 指标看语义-能力 Trade-off 虽然 UniDriveVLA 在 Driving Score 和 Efficiency 上领先，但 Success Rate（51.82%）低于 Orion（54.62%），Comfortness（11.78）也较低。这意味着解耦设计在大幅提升驾驶激进性和效率的同时，可能在安全裕度和乘坐舒适性上做了取舍。此外，Emergency Brake（50.00%）和 Give Way（30.00%）等安全关键场景不如 Orion 和 DriveMOE，暗示稀疏感知可能在某些需要\u0026quot;感知全场景细节来判断是否刹车\u0026quot;的场合信息不足。通用 VQA 能力（Tab. 8 中 MMStar 43.3、MMMU 47.3）相比原生 Qwen3-VL（63.0/52.8）也明显下降——即使专家解耦缓解了冲突，大量驾驶领域微调仍会带来通用能力的损失。\n6. 未来方向：从开环到闭环的泛化鸿沟 值得注意的一个细节是：UniDriveVLA 在 nuScenes 开环规划上取得了无 ego 状态下最优的 L2（0.51），但在 Bench2Drive 闭环中 Open-loop Avg. L2 为 0.72，并不突出。这说明开环 L2 与闭环驾驶质量之间的相关性非常有限——一个在开环中预测准确的模型可能在闭环自增强的误差累积下表现迥异。未来 VLA 模型可能需要直接在闭环仿真中优化，或引入因果推理来弥补开环训练与闭环部署之间的 gap。UniDriveVLA 的 MoT 架构为接入闭环强化学习提供了良好的接口（可以直接冷冻理解专家、用 RL 优化规划专家），期待后续工作沿这一方向推进。\n📚 参考资料 arXiv：2604.02190 项目页：https://xiaomi-research.github.io/unidrivevla 代码：https://github.com/xiaomi-research/unidrivevla Qwen3-VL：https://huggingface.co/Qwen/Qwen3-VL ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2604-02190/","summary":"UniDriveVLA 提出 Mixture-of-Transformers 架构，通过理解/感知/规划三个专家解耦感知-推理冲突，结合 Masked Joint Attention 与稀疏感知范式，在 nuScenes 开环和 Bench2Drive 闭环上均达到 SOTA。","title":"论文精读：UniDriveVLA — Mixture-of-Transformers 解耦感知-推理冲突的统一驾驶 VLA"},{"content":"📄 论文信息 标题：AutoDrive-P³: Unified Chain of Perception–Prediction–Planning Thought via Reinforcement Fine-Tuning（通过强化微调实现感知-预测-规划链式思维的统一框架） 团队：Yuqi Ye、Zijian Zhang、Junhong Lin、Shangkun Sun、Changhao Peng、Wei Gao（北京大学电子与计算机工程学院） 出处：ICLR 2026（arXiv: 2603.28116，2026 年 3 月 30 日） 代码：https://github.com/haha-yuki-haha/AutoDrive-P3 一句话总结：用 P³-CoT 数据集为 VLM 构建结构化的\u0026quot;感知→预测→规划\u0026quot;推理链，再用 P³-GRPO 算法把强化奖励从规划反传到感知和预测模块，实现三阶段分层次、递进式联合优化——在 NAVSIMv2 上以纯视觉方案达到 89.9 EPDMS，nuScenes 上碰撞率降低约 40%。 🏗️ 架构总览 Figure 1: AutoDrive-P³ 与其他范式的核心差异。 (a) 传统端到端小模型直接输出规划；(b) VLM 直接输出轨迹无 CoT；(c) VLM 能回答感知/预测/规划但彼此割裂；(d) AutoDrive-P³ 通过结构化 P³-CoT 推理链实现三阶段协同。\nAutoDrive-P³ 的核心理念是：真正的驾驶推理应该是一个连续的认知链——先看清环境（感知），再预判动向（预测），最后做出决策（规划），三个环节环环相扣、缺一不可。当前 VLM 驾驶方案要么跳过前两步直接输出路径，要么把三者当作独立任务各自处理，丢失了关键的阶段间协同。\n🤔 要解决什么问题？ 当前 VLM 驾驶方案的三大缺陷 缺陷 1：缺少 CoT 推理链。 部分 VLM 方案（如 DriveVLA）直接从图像映射到轨迹，跳过了感知和预测这两个关键中间环节。这导致模型面临严重的领域漂移——训练时看到的是感知标签和地图信息，推理时却只给原始图像，决策质量大打折扣。\n缺陷 2：多任务碎片化。 另一类 VLM（如 OmniDrive、DriveLM）虽然能分别回答感知、预测、规划三类问题，但每个模块的输出独立产生、互不依赖。感知不知道自己的输出要服务于预测，预测不考虑最终规划的需求，规划也无法反向要求感知和预测提供更精准的信息。这种各自为政的模式严重制约了规划的真实水平。\n缺陷 3：规划-only 的 GRPO 监督。 现有的 GRPO 应用（AutoVLA、AutoDrive-R²）只对规划阶段的指标（L2 距离、闭环得分）设置奖励，感知和预测模块没有直接监督信号。结果感知和预测的能力提升不成体系，规划获益有限，模型整体的可解释性和可靠性打折扣。\n核心命题 驾驶本质上是一个递进式推理过程：准确感知是可靠预测的前提，可靠预测是稳健规划的基础。三者必须在一个统一框架下协同优化，而不是各自独立训练再简单拼接。\n💡 核心思想：统一链式思维 + 分层渐进强化 AutoDrive-P³ 的整体设计分为两大组件：\n组件一：P³-CoT 数据集 Figure 3: P³-CoT 数据集构建流程。 先从原始驾驶数据中采样，为关键目标标注感知边界框、预测未来轨迹和规划轨迹，再利用 Qwen2.5-VL-72B 生成连贯的三阶段链式思维文本。\nP³-CoT 是一个专门为 VLM GRPO 后训练设计的高质量推理数据集。构建流程如下：\n关键目标筛选：在每个关键帧中，筛选出对驾驶决策有实质影响的物体（车辆、行人、自行车等），标注其边界框作为感知标签。 预测标签生成：通过投影关键目标的未来轨迹，生成预测标签（目标在未来几秒内的位置和动作）。 规划标签生成：从自车的规划轨迹中提取规划标签。 CoT 合成：基于以上三阶段标签，使用 Qwen2.5-VL-72B 生成连贯的链式思维文本，通过人工验证确保逻辑正确性。 数据集覆盖 nuScenes 和 NAVSIM 两个主流基准，包含丰富的场景分布和驾驶命令标注。\n组件二：P³-GRPO 算法 Figure 4: P³-GRPO 算法管道。 先通过 SFT 冷启动让 VLM 获得驾驶知识和 CoT 输出格式，再用分层 GRPO 对感知、预测、规划三个模块进行渐进式强化微调。\n三阶段奖励设计 P³-GRPO 的核心创新在于奖励函数的设计。不同于以往只对规划设置奖励的做法，它为每个阶段定义了专门的奖励分量：\n奖励分量 符号 计算方式 作用 格式奖励 $R_{\\text{format}}$ 检查输出是否遵循 P³-CoT 格式 确保结构化输出 感知奖励 $R_{\\text{perc}}$ 预测边界框与 GT 的 IoU × (0.5P + 0.5R) 提升目标检测精度 预测奖励 $R_{\\text{pred}}$ 预测轨迹与 GT 的 L2 距离的负指数 提升轨迹预测准确度 规划奖励 $R_{\\text{plan}}$ L2 位移 / PDMS / EPDMS（依基准而定） 优化最终规划质量 总奖励为加权和：\n$$R_{\\text{total}} = \\lambda_{\\text{format}} R_{\\text{format}} + \\lambda_{\\text{perc}} R_{\\text{perc}} + \\lambda_{\\text{pred}} R_{\\text{pred}} + \\lambda_{\\text{plan}} R_{\\text{plan}}$$其中权重比例设为 1 : 2 : 2 : 5，体现了规划为主、感知预测为辅的渐进式监督策略。\nAlgorithm 1: P³-GRPO。 算法在每个 step 中采样 8 个 P³-CoT 响应，分别计算四个奖励分量，然后通过 GRPO 更新策略。\n双重思维模式 为平衡推理效率与性能，论文设计了两种推理模式：\n详细思维（Detailed）：完整输出感知→预测→规划的三阶段推理过程，含详细解释。 快速思维（Fast）：遵循 P³-CoT 结构但只输出每个阶段的最终答案，省去推理中间步骤。 两种模式的推理时间对比见下图：\nFigure 5: 双重思维模式与 nuScenes 上的推理时间。 Fast 模式在保持竞争力的同时显著降低推理延迟。\n🔬 实验设置 模型与训练配置 基座模型：Qwen2.5-VL-3B 优化器：AdamW 硬件：8× A100 GPU 采样策略：每个场景生成 8 个 P³-CoT 样本用于 GRPO 视觉输入：nuScenes 用单目前视 448×252（6 帧/3 秒）；NAVSIM 用前+前左+前右三视角拼接 672×168（4 帧/2 秒） 自车状态：nuScenes 仅用速度；NAVSIM 用纵横向速度+加速度 基准与指标 基准 类型 核心指标 评估方式 nuScenes 开环 L2 位移(m) ↓、碰撞率(%) ↓ 固定数据集回放 NAVSIMv1 闭环 PDMS = NC × DAC × (5EP+5TTC+2Comf)/12 ↑ 非反应式仿真 NAVSIMv2 闭环 EPDMS = NC × DAC × DDC × TLC × (5EP+5TTC+2LK+2HC+2EC)/16 ↑ 伪仿真评测 📊 主要实验结果 nuScenes 开环规划 Table 1: nuScenes 基准对比。 AutoDrive-P³（Detailed）在碰撞率上达到 0.06% Avg，比 UniAD（0.12%）降低 50%，比 VAD（0.14%）降低约 57%。L2 位移与 SOTA 持平（Avg 0.33m）。\n在 nuScenes 开环评测中，AutoDrive-P³ 以 仅单目视觉 + 自车速度 的极简输入配置，在碰撞率指标上大幅超越所有对比方法。Detailed 模式的 Avg 碰撞率为 0.06%，Fast 模式为 0.08%，均显著低于 SparseDrive（0.10%）和 VAD（0.14%）。L2 位移方面与最强基线持平。\nNAVSIMv1 闭环评测 Table 2: NAVSIMv1 基准对比。 AutoDrive-P³（Detailed）PDMS 达 90.6，在纯视觉方法中排名第一，超越 DiffusionDrive（88.1）和 WoTE（88.3）。\n在 NAVSIMv1 上，AutoDrive-P³ 以纯视觉配置（无激光雷达）达到 90.6 PDMS，是该设定下的 SOTA。特别值得注意的是，它在 NC（99.1）、EP（84.8）、Comf（100.0）三个维度表现突出，说明模型在不牺牲舒适性的前提下实现了高安全性和高任务完成率。\nNAVSIMv2 闭环评测 Table 3: NAVSIMv2 基准对比。 AutoDrive-P³（Detailed）在 perception=True 下 EPDMS 达 89.9，在 perception=False 下达 86.2，均全面领先所有对比方法。\nNAVSIMv2 是最新的闭环评测基准，EPDMS 指标覆盖 NC、DAC、DDC、TLC、EP、TTC、LK、HC、EC 共 9 个维度的综合评分。AutoDrive-P³ 在 perception=True 设置下达到 89.9 EPDMS，大幅领先 DiffusionDrive（84.7/88.2）和 HydraMDP++（81.4/-）。在更难的 perception=False 设置下仍以 86.2 保持领先。\nTable 3（续）：EPDMS 在 perception=True 和 False 两档下的详细结果。\n🔬 消融实验 框架消融：P³-GRPO vs 仅规划 GRPO Table 4: nuScenes 上的框架消融。 P³-GRPO 在感知（0.64）、预测（0.54）和规划（Avg 碰撞 0.06%）三项指标上全面优于 Only SFT（0.33/0.23/0.17）和 Only Planning GRPO（–/–/0.12）。\n方法 感知 ↑ 预测 ↑ 碰撞 1s ↓ 碰撞 2s ↓ 碰撞 3s ↓ 碰撞 Avg ↓ UniAD 0.32 0.31 0.04 0.08 0.23 0.12 OmniDrive 0.37 – 0.01 0.04 0.27 0.11 Ours (Only SFT) 0.33 0.23 0.01 0.08 0.40 0.17 Ours (SFT + Only Planning GRPO) – – 0.03 0.08 0.24 0.12 Ours (SFT + P³-GRPO) 0.64 0.54 0.00 0.02 0.15 0.06 消融结论明确：\nSFT 后不加 GRPO：碰撞率 Avg 0.17%，感知和预测能力有限； SFT + 仅规划 GRPO：规划略有改善（0.12%），但感知和预测无直接监督（标记为 –）； SFT + P³-GRPO：感知提升近一倍（0.33→0.64），预测大幅提升（0.23→0.54），碰撞率降至最低（0.06%）。 这说明为感知和预测提供直接奖励信号不仅提升了它们自身的能力，还通过更精准的中间表征反哺了规划质量。\n配置消融：Group Size / 历史轨迹 / 传感器 Table 5: nuScenes 上不同训练配置的消融。 group size 8 \u0026gt; 4，历史轨迹有 \u0026gt; 无，视频 \u0026gt; 图像。\n配置 Group 历史轨迹 传感器 L2 Avg ↓ 碰撞 Avg ↓ Ablation 1 4 ✔ 视频 0.35 0.07 Ablation 2 8 ✗ 视频 0.35 0.06 Ablation 3 8 ✔ 图像 0.36 0.09 Full 8 ✔ 视频 0.33 0.06 实验发现：扩大 group size（4→8）能提升采样多样性；引入历史轨迹增强上下文理解；视频传感器优于图像，因其捕获了时间动态信息。\nKL 散度消融 Figure 10: KL 散度消融实验。 去掉 KL 正则化项后，模型性能随训练急剧退化（蓝色曲线），最终模型崩塌；保留 KL 项（红色曲线）则稳定收敛。\n奖励可视化 Figure 9: 感知、预测、规划和总奖励在训练和测试集上的变化。 三个模块的奖励同步提升，验证了 P³-CoT 和 P³-GRPO 带来的协同优化效应。\n🎯 可视化分析 实景案例 Figure 6(a): 行人通行场景。 AutoDrive-P³ 准确感知到行人位置，预测安全通过时机，生成了比对比方法更高效（不过度保守）的轨迹。\nFigure 6(b): 多车交互场景。 模型识别关键车辆及其行为意图，生成符合人类驾驶习惯的合规轨迹。\n更多定性对比 论文附录还提供了 6 组详细的问答可视化案例，涵盖 nuScenes 和 NAVSIM 两个基准：\nFigure 12 \u0026amp; 13: nuScenes 完整问答案例。 模型能正确识别关键目标、预测其动作，并基于此做出高效规划决策。\nFigure 14–17: NAVSIM 案例。 包括卡车跟随、左车变道避让、非法区域规避、转向指令正确执行等典型场景。\n📐 核心数学公式 GRPO 基础目标 标准的 GRPO 优化目标（不含 KL 时）：\n$$\\mathcal{J}_{\\text{GRPO}}(\\theta) = \\mathbb{E}_{q \\sim P(Q), \\{o_i\\}_{i=1}^G \\sim \\pi_{\\theta_{\\text{old}}}(O|q)} \\left[ \\frac{1}{G} \\sum_{i=1}^G \\min\\left( \\frac{\\pi_\\theta(o_i|q)}{\\pi_{\\theta_{\\text{old}}}(o_i|q)} A_i, \\operatorname{clip}\\left(\\frac{\\pi_\\theta(o_i|q)}{\\pi_{\\theta_{\\text{old}}}(o_i|q)}, 1-\\epsilon, 1+\\epsilon\\right) A_i \\right) \\right]$$其中 $A_i$ 是组内相对优势：\n$$A_i = \\frac{R_i - \\mu_R}{\\sigma_R}$$感知奖励 $$R_{\\text{perc}} = \\begin{cases} 1.0, \u0026 |\\mathcal{B}_{\\text{gt}}| = 0 \\;\\text{and}\\; |\\mathcal{B}_{\\text{pred}}| = 0 \\\\ \\text{IoU}_{\\text{avg}} \\cdot (0.5P + 0.5R), \u0026 |\\mathcal{B}_{\\text{gt}}| \u003e 0 \\;\\text{and}\\; |\\mathcal{B}_{\\text{pred}}| \u003e 0 \\\\ 0.0, \u0026 \\text{otherwise} \\end{cases}$$预测奖励 $$R_{\\text{pred}} = \\begin{cases} 1.0, \u0026 |\\mathcal{T}_{\\text{gt}}| = 0 \\;\\text{and}\\; |\\mathcal{T}_{\\text{pred}}| = 0 \\\\ \\exp\\left(- \\alpha \\cdot \\text{L2}(\\mathcal{T}_{\\text{pred}}, \\mathcal{T}_{\\text{gt}})\\right), \u0026 \\text{otherwise} \\end{cases}$$规划奖励（NAVSIM） $$R_{\\text{plan}} = \\text{PDMS} = \\text{NC} \\times \\text{DAC} \\times \\left( \\frac{5 \\times \\text{EP} + 5 \\times \\text{TTC} + 2 \\times \\text{Comf}}{12} \\right)$$EPDMS（NAVSIMv2） $$\\text{EPDMS} = \\text{NC} \\times \\text{DAC} \\times \\text{DDC} \\times \\text{TLC} \\times \\left( \\frac{5 \\times \\text{EP} + 5 \\times \\text{TTC} + 2 \\times \\text{LK} + 2 \\times \\text{HC} + 2 \\times \\text{EC}}{16} \\right)$$ ⚔️ 在端到端驾驶方案谱系中的位置 代际 代表工作 感知 预测 规划 多任务协同 CoT 推理 RL 优化 端到端小模型 UniAD、VAD ✔ ✔ ✔ ✔ ✗ ✗ VLM 直接规划 DriveVLA ✗ ✗ ✔ ✗ ✗ ✔(规划仅) VLM 碎片化问答 OmniDrive、DriveLM ✔ ✔ ✔ ✗ ❓(碎片化) ✗ VLM + 规划 RL AutoVLA、AlphaDrive ✗ ✗ ✔ ✗ ❓ ✔(规划仅) AutoDrive-P³ 本文 ✔ ✔ ✔ ✔ ✔(结构化) ✔(三模块) AutoDrive-P³ 是第一个同时做到三件事的端到端驾驶方案：① 结构化 CoT 推理链覆盖 P-P-P；② 三模块间显式协同（感知输出作为预测输入、预测输出作为规划输入）；③ 三模块联合 GRPO 强化。\n⚠️ 局限性与讨论 计算成本：P³-GRPO 需要为每个场景生成 8 个 P³-CoT 样本，训练开销高于仅规划 GRPO。不过推理阶段可以通过 Fast 模式显著降低延迟。 基座模型规模：当前实验基于 Qwen2.5-VL-3B，更大规模的基座模型（如 7B/72B）是否能带来更显著的协同增益尚待验证。 感知 ground truth 依赖：P³-GRPO 的感知和预测奖励需要 GT 标注，在无标注数据上的适应能力有限。论文未探索无监督或半监督场景。 闭环仿真器局限：NAVSIM 的仿真环境虽然比开环更真实，但仍是非反应式仿真（non-reactive simulation），与真实世界的交互动态有差距。 📝 个人思考 AutoDrive-P³ 打动我的第一点是它重新定义了 GRPO 在自动驾驶中的角色。之前的 AutoVLA、AlphaDrive 虽然也用 GRPO，但它们把奖励局限在规划模块——感知和预测做得好不好，全凭\u0026quot;规划结果\u0026quot;间接评判。这就像学生考试只算总分，不告诉你哪步推理错了。P³-GRPO 的巧妙在于把梯度信号拆成了三个层次，每个模块都能收到直接的反馈信号。消融实验的数据非常有说服力：感知奖励从 0.33 飙升到 0.64，预测从 0.23 到 0.54，最终碰撞率降到了 0.06%。这验证了一个直觉：要让规划做得好，不如让感知和预测也直接变好。\n第二点是 \u0026ldquo;链式思维\u0026quot;在驾驶中的具象化。NLP 领域的 CoT 是逻辑推理（\u0026ldquo;先算 A，再算 B，最后得 C\u0026rdquo;），而驾驶的 CoT 是物理世界的因果链条：\u0026ldquo;我看到右边有一辆卡车（感知），它会保持直行并占用我的车道（预测），所以我应该减速让行再变道（规划）\u0026quot;。P³-CoT 数据集的构建把这种因果链条显式编码进了训练数据——感知输出是预测的输入约束，预测输出是规划的输入约束。这种结构化的先验知识注入，比让 VLM 自己\u0026quot;悟\u0026quot;出驾驶逻辑要高效得多。\n第三点值得称道的是奖励设计中的\u0026quot;渐进式监督\u0026quot;哲学。权重比例 1:2:2:5 不是随意取的，它反映了一个重要的训练策略：先确保格式正确（$\\lambda_{\\text{format}}$），再提升感知和预测精度（$\\lambda_{\\text{perc}}, \\lambda_{\\text{pred}}$），最后重点优化规划（$\\lambda_{\\text{plan}}$ 最高）。这种分层递进的思路与人类学习驾驶的过程相似——先学会\u0026quot;看\u0026quot;和\u0026quot;预判\u0026rdquo;，再学\u0026quot;怎么开\u0026rdquo;。\n最后，我特别喜欢 \u0026ldquo;Fast vs Detailed\u0026rdquo; 双模设计。这是少有的兼顾了学术严谨和工程实用的设计：Detailed 模式用于训练和可解释性分析，Fast 模式用于实时部署。推理时间对比显示，Fast 模式在保持 85-90% 性能的同时，延迟降低到与直接规划法相近的水平。这种\u0026quot;训练时全面推理、部署时快速决策\u0026ldquo;的范式，很可能成为 VLA 模型在实际自动驾驶系统中落地的标配。\n当然，也有遗憾。论文在 nuScenes 的 L2 位移指标上没有显著突破（与 InsightDrive 等持平），说明 P³-GRPO 的主要增益在**安全维度（碰撞率）**而非精度维度。这其实可以理解——碰撞率的优化更多依赖于感知和预测的准确度（直接受 P³-GRPO 监督），而 L2 位移更多依赖于规划本身的回归能力。\n🔗 延伸阅读 相关工作 与 AutoDrive-P³ 的关系 UniAD（Hu et al., 2023） 开创端到端多任务联合规划范式 VAD（Jiang et al., 2023） 向量化场景表示的端到端方案 OmniDrive（Wang et al., 2024） VLM 驾驶的 3D 感知+推理+规划 Agent AutoVLA（Zhou et al., 2025b） 首个将 GRPO 引入 VLA 驾驶的工作 AlphaDrive（2025） GRPO + 奖励 shaping 的驾驶策略优化 AutoDrive-R²（Yuan et al., 2025） 奖励驱动的推理与自反思 VLA DeepSeek-R1（Guo et al., 2025） GRPO 算法的原始来源 R1-VL（Zhang et al., 2025） Step-wise GRPO 在多模态推理中的应用 📖 这是论文精读系列的第 33 篇。当 GRPO 不再只优化\u0026quot;规划\u0026quot;这一层，而是把感知和预测也纳入奖励信号的直接覆盖范围，自动驾驶的 VLA 模型才算真正开始\u0026quot;理解\u0026quot;驾驶——不是记住了轨迹映射，而是学会了\u0026quot;看清→预判→决策\u0026quot;的完整推理链。这种结构化链式思维 + 分层强化微调的范式，或许正是通向可解释、高安全自动驾驶的关键路径。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2603-28116/","summary":"当前 VLM 驾驶方案要么直接输出规划缺失 CoT 推理，要么将感知-预测-规划割裂为独立模块缺乏协同。AutoDrive-P³ 提出统一链式思维框架，通过 P³-CoT 数据集构建感知→预测→规划的结构化推理链，再用 P³-GRPO 算法进行分层渐进式强化微调——将奖励从规划反传到感知和预测模块，实现三模块联合优化。在 NAVSIM 上达到 89.9 EPDMS，nuScenes 上取得最低碰撞率。","title":"论文精读｜AutoDrive-P³：感知-预测-规划链式思维的统一强化微调——ICLR 2026 端到端驾驶新范式"},{"content":"📄 论文信息 标题：DriveFuture: Future-Aware Latent World Models for Autonomous Driving（未来感知潜在世界模型——以未来条件化当前的自动驾驶规划新范式） 团队：北京理工大学、中科院自动化所、北京航空航天大学、北京交通大学、昆士兰大学、澳门大学、南洋理工大学、燕山大学（9 位作者） 作者：Yufeng Hong\\(^\\dagger\\), Xiaotian Zhou\\(^\\dagger\\), Yingyan Li, Xiangpo Zhou, Lin Liu, Yadan Luo, Shaoqing Xu, Lei Yang, Ziying Song\\(^\\ast\\) arXiv：2605.09701（2026 年 5 月 10 日） 领域：cs.CV / cs.RO 代码：未开源 一句话定位：让潜在世界模型不再只是\u0026quot;预测未来\u0026quot;，而是用未来状态条件化当前的决策表征——训练时用 GT future 做条件，推理时用预测的 future 接替，把\u0026quot;未来感知\u0026quot;从辅助目标升级为规划的核心条件信号。 📌 一句话概括 DriveFuture 提出了一种未来感知潜在世界模型框架，核心洞察是：现有潜在世界模型（如 World4Drive、Latent-WAM）将未来状态当作预测目标来优化，导致当前特征与未来特征在隐空间中互相纠缠，模型更擅长\u0026quot;模拟未来\u0026quot;而非\u0026quot;用未来指导现在\u0026quot;。DriveFuture 从根本上翻转了这一范式——它将未来世界状态作为显式条件注入当前决策过程，训练时用 GT 未来隐状态通过交叉注意力修正预测的 future latent，推理时无缝切换为自预测的 future latent，实现统一的\u0026quot;foresight\u0026quot;机制。在 NAVSIM 基准上，DriveFuture 以 55.5 EPDMS 位列 navhard 排行榜第一，在 navtest 上达到 89.9 EPDMS 和 90.7 PDMS，全面超越现有 SOTA。\n🏗️ 架构总览 图 1：DriveFuture 整体架构。多视图观测经 Perception Encoder 编码为场景隐变量 $\\mathbf{Z}_t$；Latent Dynamics Predictor 以 $\\mathbf{Z}_t$ 和 tokenized 轨迹意图为条件预测未来隐变量 $\\hat{\\mathbf{Z}}_{t+T}$；训练时 Future Alignment Adapter 通过交叉注意力将预测的未来隐变量与 GT 未来隐变量 $\\mathbf{Z}_{t+T}$ 对齐，得到未来感知隐变量 $\\mathbf{Z}^c_{t+T}$；LatentAlign 在整个训练过程中逐步将规划条件从 $\\mathbf{Z}^c_{t+T}$ 退火到 $\\hat{\\mathbf{Z}}_{t+T}$，以弥合训练-推理差距；最终 Future-Conditioned Diffusion Transformer 以 $\\mathbf{Z}^c_{t+T}$（训练）或 $\\hat{\\mathbf{Z}}_{t+T}$（推理）为条件进行轨迹去噪规划。\n核心组件一览 模块 功能 关键设计 Perception Encoder 多视图 → BEV 隐空间 V2-99 骨干 + BEV queries (16×64 grid → 64 tokens) + ego status token，输出 $\\mathbf{Z}_t \\in \\mathbb{R}^{65 \\times 256}$ Latent Dynamics Predictor 当前隐状态 + 轨迹意图 → 预测未来隐状态 Transformer decoder，16 个 future queries，4 层 Future Alignment Adapter Cross-attention 修正预测未来隐变量 预测 future latent 作为 query，GT future latent 作为 key/value；含 LatentAlign 退火机制 Future-Conditioned Diffusion Transformer 以未来感知隐变量为条件的轨迹去噪 5 层 Transformer，先 cross-attend 场景上下文 $\\mathbf{C}_{\\text{scene}}$ 再 cross-attend $\\mathbf{Z}^c_{t+T}$，输出投影零初始化 Progressive Foresight Guidance (PFG) 推理时双源引导去噪 运动学引导（低噪声阶段）+ Tweedie 引导（高噪声阶段），两阶段切换 🤔 要解决什么问题？ 现有潜在世界模型的根本缺陷 现有潜在世界模型（如 LATENT-VAE、World4Drive、WorldRFT、DriveWorld-VLA 等）虽然在自动驾驶规划中展现了巨大潜力，但它们有一个共同的范式性缺陷：\n未来状态被当作\u0026quot;预测目标\u0026quot;，而非\u0026quot;规划条件\u0026quot;。\n维度 现有范式 DriveFuture 范式 未来隐变量的角色 预测目标 / 辅助监督信号 规划决策的显式条件 当前 vs 未来特征关系 隐空间中纠缠 通过条件化实现解耦 训练时未来信息的使用 目标函数的一部分 交叉注意力修正当前表征 推理时未来信息的使用 无（仅用当前预测未来） 预测的 future latent 作为条件 模型的核心能力 擅长\u0026quot;模拟未来\u0026quot; 擅长\u0026quot;用未来指导现在\u0026quot; 特征纠缠问题 现有方法的核心问题是当前特征与未来特征在隐空间中纠缠。当未来状态仅作为预测目标时，模型被迫将当前场景信息与未来预测压缩进同一组隐变量中，导致：\n规划器难以区分\u0026quot;当前场景中已经存在什么\u0026quot;和\u0026quot;未来将要发生什么\u0026quot; 未来预测的误差直接污染当前决策表征 模型缺乏显式的\u0026quot;foresight\u0026quot;机制——它无法在决策时\u0026quot;问\u0026quot;未来状态\u0026quot;我这样做会怎样？\u0026quot; 图 2：动机对比。(a) 现有潜在世界模型将未来状态作为预测目标/监督信号，不显式塑造当前表征用于规划；(b) DriveFuture 将未来隐状态作为规划过程的直接条件，训练时用 GT、推理时用预测，实现未来感知轨迹规划；(c) DriveFuture 在 NAVSIM 排行榜上取得 SOTA 表现。\n类比：终结者式的未来感知 论文中有一个非常生动的类比——《终结者》式的未来感知。在电影中，终结者能够\u0026quot;看到未来\u0026quot;，并将未来知识带回当下指导决策。DriveFuture 的核心哲学正是：\n自动驾驶的核心不是模拟未来，而是把未来的知识带回当下——让当前决策能够\u0026quot;看到\u0026quot;未来的后果，从而做出更有远见的选择。\n🎯 核心贡献 贡献 1：识别关键范式缺陷 首次明确指出：现有潜在世界模型之所以受限，不是因为它们预测未来不够准，而是因为它们不把未来当作规划条件。 这个观察虽简洁，但对整个领域的设计哲学有直接影响。\n贡献 2：未来感知潜在世界模型框架 提出 DriveFuture，包含三个精心设计的组件：\n组件 作用 创新点 Latent Dynamics Predictor 从当前隐状态 + 轨迹意图预测未来隐状态 Conditioning Source Randomisation（三种训练模式混合） Future Alignment Adapter 用 GT 未来隐状态修正预测 Cross-Attention Grounding + LatentAlign 退火 Future-Conditioned Diffusion Transformer 以未来感知隐变量为条件的去噪规划器 先场景后未来的双重 cross-attention 贡献 3：统一的训练-推理范式 这是 DriveFuture 最优雅的设计：训练时用 GT future latent 做条件，推理时无缝切换为自预测的 future latent。LatentAlign 通过退火机制在训练过程中逐步从 GT 过渡到预测，彻底消除训练-推理 gap。\n贡献 4：NAVSIM SOTA Benchmark 指标 DriveFuture 最佳对比方法 NAVSIM-v2 navhard EPDMS ↑ 55.5 (#1) DrivoR 54.6 NAVSIM-v2 navtest EPDMS ↑ 89.9 DiffusionDriveV2 87.5 NAVSIM-v1 navtest PDMS ↑ 90.7 GoalFlow 90.3 🧠 方法详解 问题设定 给定当前时刻 $t$ 的多视图观测 $\\mathbf{I}_t$ 和自车状态 $\\mathbf{s}_t$，DriveFuture 的目标是学习一个未来感知的轨迹规划策略：\n$$\\mathbf{Z}_t = \\phi_{\\text{enc}}(\\mathbf{I}_t, \\mathbf{s}_t) \\in \\mathbb{R}^{N \\times d}, \\quad N = 65, \\quad d = 256$$其中 $\\mathbf{Z}_t$ 包含 64 个 BEV tokens 和 1 个 ego-status token。未来隐变量 $\\mathbf{Z}_{t+T}$ 通过相同的编码器从未来观测 $\\mathbf{I}_{t+T}$ 提取（训练时 stop-gradient）。\n3.1 Latent Dynamics Predictor 轨迹条件化隐式预测 Latent Dynamics Predictor 的核心任务是从当前隐状态 $\\mathbf{Z}_t$ 和自车动作意图预测未来隐状态 $\\hat{\\mathbf{Z}}_{t+T}$。它通过 Transformer decoder 实现：\n$$\\hat{\\mathbf{Z}}_{t+T} = \\phi_{\\text{pred}}(\\mathbf{Z}_t, \\mathbf{E}_\\tau)$$其中 $\\mathbf{E}_\\tau$ 是轨迹意图的 tokenized 表示。预测器的训练通过规划损失驱动——不是通过 MSE 对齐预测与 GT 隐状态，而是通过规划器的扩散损失反向传播梯度来塑造未来隐状态，使其包含规划器可利用的信息。\nConditioning Source Randomisation 在训练时，轨迹意图 $\\mathbf{E}_\\tau$ 的来源在三种模式间随机切换：\n$$\\mathbf{E}_\\tau \\sim \\begin{cases} \\phi_\\tau(\\boldsymbol{\\tau}^{\\text{gt}}), \u0026 \\text{w.p. } p_{\\text{gt}} \\\\ \\phi_\\tau(\\boldsymbol{\\tau}^{\\text{kin}}), \u0026 \\text{w.p. } p_{\\text{kin}} \\\\ \\mathbf{E}^\\varnothing, \u0026 \\text{w.p. } p_\\varnothing \\end{cases}$$ 模式 来源 概率 作用 GT 真实轨迹 $\\boldsymbol{\\tau}^{\\text{gt}}$ $p_{\\text{gt}}$ 训练时提供最优意图路径 Kinematic 基于恒定加速度外推 $\\boldsymbol{\\tau}^{\\text{kin}}$ $p_{\\text{kin}}$ 推理时唯一可用的运动学路径 Null 学习的空 token $\\mathbf{E}^\\varnothing$ $p_\\varnothing$ 无轨迹意图时的 fallback 这种设计使得世界模型在推理时即使没有 GT 轨迹也能稳健工作——因为它在训练期间已经见过\u0026quot;不完美\u0026quot;的轨迹意图。\n3.2 Future Alignment Adapter 训练时 DriveFuture 可以访问未来观测 $\\mathbf{I}_{t+T}$。Future Alignment Adapter 的作用是：让预测的未来隐变量从 GT 未来隐变量中\u0026quot;汲取\u0026quot;更多规划相关的信息。\nCross-Attention Grounding 具体地，将预测未来隐变量 $\\hat{\\mathbf{Z}}_{t+T}$ 作为 query，GT 未来隐变量 $\\mathbf{Z}_{t+T}$（stop-gradient）作为 key 和 value，通过交叉注意力得到修正后的未来感知隐变量：\n$$\\tilde{\\mathbf{Z}}_{t+T} = \\text{CrossAttn}(\\hat{\\mathbf{Z}}_{t+T}, \\mathbf{Z}_{t+T}, \\mathbf{Z}_{t+T})$$交叉注意力的输出经过一个可学习的门控机制与原始预测融合。\nLatentAlign 为弥合训练时（使用 GT 修正）和推理时（只能使用自预测）之间的差距，DriveFuture 提出 LatentAlign——一种退火机制，在整个训练过程中逐步将规划条件从 $\\tilde{\\mathbf{Z}}_{t+T}$（GT 修正版）过渡到 $\\hat{\\mathbf{Z}}_{t+T}$（自预测版）：\n$$\\mathbf{Z}_{t+T}^{c,(i)} = \\begin{cases} \\tilde{\\mathbf{Z}}_{t+T}^{(i)}, \u0026 i \\in \\mathcal{S}_+ \\\\ \\hat{\\mathbf{Z}}_{t+T}^{(i)}, \u0026 i \\notin \\mathcal{S}_+ \\end{cases}$$其中 $\\mathcal{S}_+$ 是在训练过程中逐渐缩小的 token 子集。退火调度由 logistic 函数控制：训练早期 $\\alpha \\to 1$（完全使用 GT 修正），训练后期 $\\alpha \\to 0$（完全使用自预测）。\n3.3 规划解码器：Future-Conditioned Diffusion Transformer 规划器采用条件扩散 Transformer，以场景上下文 $\\mathbf{C}_{\\text{scene}}$ 和未来感知隐变量 $\\mathbf{Z}_{t+T}^c$ 为条件，从高斯噪声开始去噪生成轨迹：\n$$\\mathbf{a}_{s-1} = \\text{Denoiser}(\\mathbf{a}_s, s, \\mathbf{C}_{\\text{scene}}, \\mathbf{Z}_{t+T}^c)$$去噪器的每个 Transformer block 执行双重交叉注意力：\n先 cross-attend 到场景上下文 $\\mathbf{C}_{\\text{scene}}$（获取环境几何信息） 再 cross-attend 到未来感知隐变量 $\\mathbf{Z}_{t+T}^c$（获取未来语义校正） 关键技巧：未来交叉注意力的输出投影初始化为零，使得新增模块在训练开始时表现为恒等映射，逐步学习利用未来信息。\n3.4 训练目标 $$\\mathcal{L} = \\lambda_{\\text{plan}} \\mathcal{L}_{\\text{plan}} + \\lambda_{\\text{bev}} \\mathcal{L}_{\\text{BEV}}, \\quad \\lambda_{\\text{plan}} = \\lambda_{\\text{bev}} = 10$$轨迹扩散损失（核心）：\n$$\\mathcal{L}_{\\text{plan}} = \\mathbb{E}_{s, \\boldsymbol{\\epsilon}, \\mathbf{a}_0} \\left\\| \\boldsymbol{\\epsilon} - \\epsilon_\\theta(\\mathbf{a}_s, s, \\mathbf{C}_{\\text{scene}}, \\tilde{\\mathbf{Z}}_{t+T}^c) \\right\\|_2^2$$BEV 分割损失（辅助）：\n$$\\mathcal{L}_{\\text{bev}} = \\text{CE}(\\hat{\\mathbf{Y}}^{\\text{bev}}, \\mathbf{Y}^{\\text{bev}})$$规划损失直接通过未来隐变量反向传播到世界模型——这确保了世界模型学习的是规划器可用的未来表征，而非视觉上可重建的未来细节。\n3.5 推理与 PFG 推理时，GT 未来不可用，模型使用 Latent Dynamics Predictor 预测的 $\\hat{\\mathbf{Z}}_{t+T}$ 作为条件。推理流程包含 Progressive Foresight Guidance (PFG)：\n阶段 条件源 作用 低噪声（前期） 运动学引导 稳定从噪声中恢复粗轨迹 高噪声（后期） Tweedie 引导 用自洽的轨迹意图精调细节 PFG 通过 CFG 风格的双源引导实现：\n$$\\hat{\\boldsymbol{\\epsilon}} = \\boldsymbol{\\epsilon}_\\varnothing + w_{\\text{kin}}(\\boldsymbol{\\epsilon}_{\\text{kin}} - \\boldsymbol{\\varnothing}) + w_{\\text{tw}}(\\boldsymbol{\\epsilon}_{\\text{tw}} - \\boldsymbol{\\varnothing})$$推理时采样 100 个轨迹候选，用 GTRS-Dense scorer 选择最优提案。\n📊 实验与结果 数据集与设置 DriveFuture 在 NAVSIM 基准上评估，包含三个核心测试集：\n测试集 指标 特点 NAVSIM-v1 navtest PDMS 原始 PDM 风格安全与进度指标 NAVSIM-v2 navtest EPDMS 新增规则合规与舒适度指标 NAVSIM-v2 navhard EPDMS 两阶段评估，Stage 2 在合成未来观测下测试鲁棒性（最严格） NAVSIM-v2 navhard（排行榜 #1） 这是目前最难的设置——Stage 2 在合成未来场景下重评估，直接考验模型的\u0026quot;未来感知\u0026quot;能力。\n方法 类型 Backbone EPDMS ↑ NC ↑ DAC ↑ TTC ↑ TransFuser E2E ResNet-34 23.1 77.7 70.2 75.6 DiffusionDrive E2E ResNet-34 24.2 82.1 72.2 78.8 GuideFlow E2E ResNet-34 27.1 87.3 76.7 85.1 Senna-E2E E2E ResNet-50 27.2 78.6 74.8 75.7 World4Drive World Model V2-99 34.9 83.5 77.5 82.2 DiffVLA VLA V2-99 45.0 90.6 87.5 90.0 DrivoR E2E V2-99 54.6 90.7 88.8 91.5 DriveFuture (Ours) World Model V2-99 55.5 90.6 87.5 88.8 表 1：NAVSIM-v2 navhard Stage 2 对比。DriveFuture 以 55.5 EPDMS 排名第一，超越 E2E 方法 DrivoR（54.6）和 VLA 方法 DiffVLA（45.0），尤其领先纯世界模型方法 World4Drive（34.9）达 20.6 分。注：表中 DriveFuture 数据为 Stage 2 指标，Stage 1 的 NC/DAC/TTC 更高（96.3/87.8/98.2）。\nNAVSIM-v2 navtest（SOTA） 方法 类型 EPDMS* ↑ EPDMS ↑ TransFuser E2E 76.7 – DiffusionDrive E2E – 84.5 Hydra-MDP++ E2E 81.4 – DriveSuprim E2E 83.1 – ARTEMIS E2E 83.1 – DiffusionDriveV2 E2E 85.5 87.5 DriveWorld-VLA VLA – 86.8 DriveVLA-W0 VLA – 86.2 Latent-WAM World Model – 89.3 DriveFuture (Ours) World Model – 89.9 表 2：NAVSIM-v2 navtest 对比。EPDMS* 为修正前旧版指标，EPDMS 为官方修正后指标。DriveFuture 以 89.9 超越最强世界模型方法 Latent-WAM（89.3）和 E2E 方法 DiffusionDriveV2（87.5）。\nNAVSIM-v1 navtest（SOTA） 方法 类型 PDMS ↑ NC ↑ DAC ↑ TTC ↑ VADv2 E2E 76.0 97.2 89.1 91.6 SparseDrive E2E 83.5 98.5 95.3 93.9 DriveLaW World Model 89.1 99.4 97.1 96.8 GoalFlow E2E 90.3 99.1 99.2 97.3 DriveWorld-VLA VLA 91.3 99.3 98.8 97.7 DriveFuture (Ours) World Model 90.7 98.8 95.4 95.5 表 3：NAVSIM-v1 navtest 对比。DriveFuture 以 90.7 PDMS 达到 SOTA 水平，与最强 VLA 方法 DriveWorld-VLA（91.3）接近，超越所有世界模型方法（DriveLaW 89.1）和 E2E 方法（GoalFlow 90.3）。\n消融实验 未来监督与 PFG 引导分析 FF Impl MSE KS GT EPDMS NC DAC TTC ✗ ✗ ✗ ✓ ✓ 30.9 83.5 77.0 83.2 ✓ ✓ ✗ ✗ ✓ 32.1 86.3 77.8 84.1 ✓ ✓ ✗ ✓ ✗ 32.0 86.1 76.9 83.5 ✓ ✓ ✗ ✓ ✓ 34.6 86.9 79.2 85.7 表 4：未来监督与 PFG 引导消融实验（navhard，无 GTRS-Dense scorer）。FF=未来帧，Impl=隐式未来约束，MSE=直接 MSE 监督，KS=运动学引导，GT=GT 轨迹引导。核心发现：(1) 纯未来帧训练 + 隐式约束（Impl）比直接 MSE 监督好（32.1 vs 30.9）；(2) KS+GT 双引导比任一单独使用更好；(3) 完整配置（全部开启）达到 34.6 EPDMS，验证了各组件互补。\n超参数敏感性 超参数 最佳值 影响 未来时间跨度 $t_f$ 1.5s 太短信息不足，太长噪声过多 查询数量 $q_s$ 16 更多的查询增加容量但不一定提升效果 退火拐点 $e_o$ 0.83 早期需要较多 GT 引导，后期需切换到预测 💡 对 VLA 与自动驾驶的启发 DriveFuture 不仅是一篇世界模型论文，更是一篇关于自动驾驶推理范式的论文。它的几个核心洞察对于 VLA 和自动驾驶的通用设计有深远启示：\n启发 1：未来条件化是超越世界模型的通用原则 DriveFuture 最根本的贡献不是某个具体模块，而是提出了一个通用原则：\n自动驾驶的核心不是预测未来，而是把未来知识带回当下条件化当前的决策。\n这个原则不仅适用于潜在世界模型，也适用于：\nVLA 推理：VLM的未来预测结果可以条件化当前的语言-动作映射 扩散规划器：任何条件扩散过程都可以引入未来状态作为条件信号 行为克隆：训练时的 GT 未来状态蒸馏可以提升推理时的规划质量 启发 2：规划导向的未来表征 vs 重建导向的未来表征 $$ \\text{DriveFuture 的选择} \\quad \\mathcal{L}_{\\text{plan}} \\to \\text{世界模型} \\quad \\text{vs} \\quad \\text{传统做法} \\quad \\mathcal{L}_{\\text{MSE}} \\to \\text{世界模型} $$DriveFuture 的规划损失直接通过世界模型反向传播，确保未来表征只保留规划器需要的信息，而非视觉可重建的所有细节。这与传统做法形成鲜明对比——后者试图用未来帧的像素或特征重建来训练世界模型，浪费容量在不相关的视觉细节上。\n启发 3：统一的训练-推理范式 训练使用 GT 条件、推理使用预测条件——这个看似简单的设计实际上解决了世界模型领域最棘手的训练-推理不一致问题。LatentAlign 通过退火机制优雅地弥合了这个 gap：\n$$\\alpha: 1 \\to 0 \\quad \\text{（从 GT 条件化逐步过渡到自预测条件化）}$$这种\u0026quot;有导师的蒸馏\u0026quot;思想可以推广到自动驾驶中任何需要在训练时使用 oracle 信息的场景。\n启发 4：交叉注意力作为\u0026quot;未来感知\u0026quot;的桥梁 Future Alignment Adapter 的核心是用交叉注意力让预测的未来隐变量从 GT 未来隐变量中\u0026quot;汲取\u0026quot;规划相关信息。这与\u0026quot;检索增强生成\u0026quot;（RAG）的思想异曲同工——在推理时，系统不是在真空中做决策，而是\u0026quot;查阅\u0026quot;未来的相关信息后再行动。\n启发 5：从\u0026quot;预测未来\u0026quot;到\u0026quot;用未来指导现在\u0026quot;的范式转移 最后，DriveFuture 代表了一种更深层的范式转移：\n范式 核心问题 未来信息的角色 代表方法 反应式 \u0026ldquo;现在应该做什么？\u0026rdquo; 无 IL, RL 预测式 \u0026ldquo;未来会怎样？\u0026rdquo; 预测目标/监督信号 World4Drive, LATENT-VAE 未来条件式 \u0026ldquo;如果未来是这样，现在应该做什么？\u0026rdquo; 规划条件信号 DriveFuture 这个范式转移不仅是技术层面的，更是哲学层面的——它重新定义了\u0026quot;智能\u0026quot;在自动驾驶中的含义：一个有远见的系统不是在每个时刻独立做决策，而是让未来的知识回流到当下，形成真正的\u0026quot;foresight\u0026quot;。\n⚠️ 局限性 局限性 说明 近未来局限 目前 $t_f=1.5\\text{s}$ 的未来跨度较短，长时域（5-10s）的远期规划能力有限 预测误差级联 推理时依赖预测的 future latent，如果预测不准确可能误导规划 计算成本 训练时需同时 forward 当前帧和未来帧的编码器，8×5090 GPU 的硬件门槛不低 单模式规划 虽然采样 100 个候选，但最终规划轨迹仍是单模态的，缺乏多模态行为表达 无显式不确定性 对未来预测的质量没有不确定性度量，无法在预测不准时\u0026quot;保守一点\u0026quot; 📝 个人思考 DriveFuture 读完最让我兴奋的不是它的 SOTA 指标（虽然 55.5 EPDMS navhard #1 确实很硬），而是它提出的范式转移——从\u0026quot;未来预测\u0026quot;到\u0026quot;未来条件化\u0026quot;。\n这个转变的微妙之处在于：每篇世界模型论文都说自己考虑了未来，但几乎所有现有方法都只把未来当结果，而非当条件。 DriveFuture 是第一个将未来信息真正用作\u0026quot;条件信号\u0026quot;——让未来数据通过交叉注意力直接修正当前的规划表征。\n另一个值得玩味的点：DriveFuture 的 Future Alignment Adapter 本质上是一个知识蒸馏机制——训练时 GT future latent 是\u0026quot;老师\u0026quot;，预测的 future latent 是\u0026quot;学生\u0026quot;，通过交叉注意力做知识传递，LatentAlign 退火则是逐渐撤除\u0026quot;老师\u0026quot;的脚手架。这个设计比直接 MSE 对齐更智能，因为交叉注意力允许预测 latent 主动选择性地获取 GT latent 中规划相关的信息，而非被动地匹配所有特征。\n从更宏观的视角看，DriveFuture 与 CoWorld-VLA 代表了两种不同的\u0026quot;未来感知\u0026quot;路线：\nCoWorld-VLA：用四个专家 Token（语义、几何、动态、轨迹）从不同维度条件化规划 DriveFuture：用 end-to-end 的未来隐状态条件化规划（更简洁统一） 两条路线的共同趋势是：世界模型正从\u0026quot;辅助训练工具\u0026quot;进化为\u0026quot;推理时的核心条件信号\u0026quot;。这预示着自动驾驶端到端架构的下一个重要发展方向——未来系统将不是单一地从当前观测到动作，而是在一个动态的未来场景上下文中做推理。\n最后，我特别想引用论文中的一句话作为结束：\n\u0026ldquo;The key to latent world modeling lies not merely in simulating future states, but more importantly in conditioning current decision-making on future states.\u0026rdquo;\n这不仅是 DriveFuture 的核心贡献陈述，更是对整个自动驾驶领域的一个设计哲学宣言——在构建下一个世代的自动驾驶系统时，我们应该问的不再是\u0026quot;模型能否预测未来\u0026quot;，而是\u0026quot;未来知识能否真正影响当下的决策\u0026quot;。\n🔗 延伸阅读 工作 关系 World4Drive (arXiv 2503.15777) DriveFuture 对比的基线世界模型方法，将 future latent 作为预测目标 Latent-WAM (arXiv 2606.xxxxx) 最近的潜在世界动作模型，在 NAVSIM-v2 navtest 上 89.3 EPDMS DriveWorld-VLA (arXiv 2604.xxxxx) 统一潜在空间世界建模与 VLA，navtest 91.3 PDMS/86.8 EPDMS CoWorld-VLA (arXiv 2605.10426) 多专家 Token 世界模型推理，未来条件化的另一种实现路径 WorldRFT (arXiv 2603.xxxxx) 用强化学习微调世界模型规划器，与 DriveFuture 互补 DriveVLA-W0 (arXiv 2603.xxxxx) 世界模型放大 VLA 数据规模定律，VLA+世界模型路线的代表 DiffVLA (arXiv 2605.xxxxx) VLA+扩散规划器，navhard 45.0 EPDMS DrivoR (arXiv 2605.xxxxx) 当前 navhard 第二（54.6 EPDMS），基于 register 的端到端方法 📖 这是论文精读系列的第 X 篇。从\u0026quot;预测未来\u0026quot;到\u0026quot;用未来指导现在\u0026quot;——DriveFuture 用一个简单的条件化思想改写了潜在世界模型的范式。当未来信息不再只是目标而成为条件，自动驾驶的\u0026quot;foresight\u0026quot;才真正开始。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2605-09701/","summary":"现有潜在世界模型将未来状态视为预测目标而非规划条件，导致当前与未来特征纠缠。DriveFuture 提出以未来世界状态显式条件化当前决策的框架：训练时用 GT 未来潜在状态做条件，推理时用预测的未来状态接替，实现统一的规划导向 foresight 机制。在 NAVSIM v2 navhard 上以 55.5 EPDMS 排名第一，navtest 上达到 89.9 EPDMS 和 90.7 PDMS。","title":"论文精读｜DriveFuture：未来感知潜在世界模型——以未来状态条件化当前规划的 SOTA 范式"},{"content":"📄 论文信息 项目 内容 标题 Uni-World VLA: Interleaved World Modeling and Planning for Autonomous Driving 团队 复旦大学、上海创新研究院、理想汽车、萨里大学（Qiqi Liu, Huan Xu 等） 发表 arXiv 2603.27287，2026 年 3 月；投稿 ECCV 2026 代码 https://github.com/LogosRoboticsGroup/UniWorldVLA 关键词 交错生成、世界模型、VLA、闭环规划、单目深度、NAVSIM 一句话概括：Uni-World VLA 提出交错式世界建模与规划（Interleaved World Modeling and Planning）范式，在自回归架构中逐帧交替生成未来帧和动作轨迹，形成世界预测与控制决策之间的闭环反馈；同时引入 Depth Anything 3 的单目深度信息作为几何先验。在 NAVSIM 上以纯单目 RGB（SC）达到 89.4 PDMS，超越多传感器融合方法。\n🤔 要解决什么问题？ 现有统一世界模型的范式分类 将世界模型与轨迹规划融合到单一框架中已成为 VLA 自动驾驶的重要趋势。根据任务的时间组织方式，已有工作可分为两种范式：\n范式 代表方法 流程描述 核心缺陷 并行 Predict-and-Plan DrivingGPT, VaVIM 同一序列中同时预测下一帧和动作 任务功能解耦，世界模型输出不指导规划 串行 Predict-then-Plan PWM, Epona, ImagiDrive, SGDrive 先 rollout 完整未来再基于生成帧规划 隐含\u0026quot;环境静止\u0026quot;假设，生成后无法修正 \u0026ldquo;冻结的未来幻觉\u0026rdquo;——两种范式的共同缺陷 无论并行还是串行，两者都有一个致命的共同问题：当世界模型生成多秒的未来 rollout（如 4 秒）时，它本质上是在创造一个\u0026quot;冻结的未来幻觉\u0026quot;。原因在于：真实驾驶场景是非平稳的——自车与周围交通体之间存在持续的交互作用。如果 rollout 假设一个固定的初始意图不再更新，那么后期帧中自车路径已经偏离了初始假设，导致视觉证据与实际决策之间的错位。\n论文给出了一个具体例子：无保护左转或合流场景中，如果世界模型在第 0 秒生成了一个 4 秒的 rollout，它假设了第 0 秒的自车意图会持续不变。但实际上，自车在 0.5 秒时可能因为对向车辆而轻微刹车，这个调整没有被 rollout 捕获。当规划器查看第 3 秒的视觉帧时，这帧画面已经过时了——它展示的仍然是假设自车没刹车时的场景。\n核心创新：从开环到闭环的交错生成 Uni-World VLA 的核心洞察是：正确的方式应该是先生成一步未来画面，据此规划一步动作，再将这一步的信息反馈回去生成下一步，如此循环往复。这形成了世界模型与规划器之间实时的闭环反馈，每一步的决策都基于最新预测的环境状态。\n图 1 解析：比较了统一世界模型的三种生成范式。(a) 并行方式将视频生成和规划作为独立任务在同一架构中各自为政，两者之间没有信息反馈；(b) 串行方式先生成全部未来帧再规划轨迹，规划器看到的第 3 秒画面无法反映 0.5 秒时的自车调整——论文称之为\u0026quot;冻结的未来幻觉\u0026quot;（frozen hallucination）；(c) Uni-World VLA 的交错方式，视觉 token 和 action token 交替生成，每一步的规划决策都基于最新预测的未来观测，形成预测与控制的闭环交互。\n🧠 方法详解 架构总览 Uni-World VLA 的骨干架构基于 Show-o（一个 Phi-1.5 初始化的多模态 LLM），并继承自 PWM（Policy World Model）的权重初始化。视觉采用 MagVIT-v2 双分支 tokenizer，深度采用 Depth Anything 3。核心是自回归架构中视觉 token 和动作 token 的交替生成。\n图 2 解析：(a) 多模态历史信息的构建——RGB 图像经 MagVIT-v2 编码为 contextual tokens（高分辨率，提供场景语义）和 dynamic tokens（低分辨率，捕捉运动线索）；深度图经 Depth Anything 3 估计后，分别由 Context Depth Encoder (CDE) 和 Dynamic Depth Encoder (DDE) 编码，再通过 Cross-Attention 与视觉 token 融合。Ego 状态（速度、加速度、驾驶指令）通过 MLP 直接投影到 embedding 空间。(b) 交错帧-动作生成范式——模型输出按 [0.5s F] → [0.5s A] → [1.0s F] → [1.0s A] → ... → [4.0s F] → [4.0s A] 的 2 Hz 交替序列排列，每一步动作的预测都基于最新生成的未来帧。\n1. 输入与 Tokenization 给定 $M$ 帧历史图像 $\\{I_{t-M},\\dots,I_{t-1}\\}$（其中 $M$ 对应 2 秒历史），每帧经 MagVIT-v2 编码为两组离散 token：\n$${c,d}=\\mathrm{Encoder}_{\\mathrm{MagVIT}}(I)$$其中 $c$ 为 contextual tokens（高分辨率分支 $256\\times448$，每帧 448 个 token），$d$ 为 dynamic tokens（低分辨率分支 $128\\times224$，每帧 28 个 token）。\n为了同时捕获环境语境和时间动态，历史视频流被划分为两种模态：\nContextual tokens：高分辨率帧，提供详细场景语义和结构信息 Dynamic tokens：以 10Hz 采样、低分辨率，捕捉精细运动线索和短期时序变化 辅助信息包括自车速度、加速度和高层驾驶指令，通过 MLP 投影到 embedding 空间。模型输入组织为聊天式上下文：\n[System Prompt | Dynamic \u0026amp; Contextual Tokens | User Prompt | Ego Tokens]\n2. 交错帧-动作生成 模型生成 $N=8$ 个未来帧（对应 4.0 秒预测范围，帧间隔 0.5 秒）。生成过程严格遵循因果交替——每一步先预测视觉 token，再基于它预测动作 token：\n$$\\hat{d}_{t+k} \\sim p_{\\theta}(d_{t+k} \\mid \\hat{d}_{\\leq t+k-1}, \\hat{a}_{\\leq t+k-1})$$$$\\hat{a}_{t+k} \\sim p_{\\theta}(a_{t+k} \\mid \\hat{d}_{\\leq t+k}, \\hat{a}_{\\leq t+k-1})$$每一步 $\\hat{d}$ 和 $\\hat{a}$ 交替出现：先生成画面，再基于该画面规划动作，然后将这一步的状态作为下一步的上下文。这种设计保证了每一步的规划决策都能看到最新的预测环境状态。\n3. 解码与输出 视觉 token 经 MagVIT-v2 解码器重建为 RGB 帧，并使用 contextual token 提供逐秒级视觉引导：\n$$\\hat{I}_{t+k}=\\mathrm{Decoder}_{\\mathrm{MagVIT}}(\\hat{d}_{t+k};c_{t+2\\lfloor k/2\\rfloor})$$动作 token 经 MLP head 回归为自车位置 $\\hat{a}_{t+1},\\dots,\\hat{a}_{t+N}$，构成 4 秒规划轨迹。\n4. 注意力掩码与训练策略 图 3 解析：(a) 交错序列用于联合视频生成和轨迹监督——训练时未来帧和动作 query 按交错顺序排列，LLM 对两者同时进行推理和监督。(b) 因果注意力掩码——生成未来帧时，当前帧内 token 可以 双向交互（intra-frame bi-directional）以捕捉丰富的空间依赖性，帧间保持因果掩码（causal masking）保证时序因果性。这种设计受 PWM 启发，对于生成相邻视觉区域的一致预测至关重要。(c) 自回归交错推理——从 $I_t$ 开始，先生成 $t+1$ 的视觉 token，解码为 RGB，再输入 action query 预测动作，然后重复此过程直到 $N$ 帧全部生成完毕。推理时复用 KV-cache 提升效率。\n5. 训练目标 视觉预测采用 Dynamic Focal Loss（受 PWM 启发），解决了直接使用交叉熵损失时相邻帧大量 token 保持不变导致的退化问题：\n$$\\omega(d_{t+k}^{i},d_{t+k-1}^{i})=\\alpha\\mathbb{I}(d_{t+k}^{i}\\neq d_{t+k-1}^{i})+\\beta\\mathbb{I}(d_{t+k}^{i}=d_{t+k-1}^{i}),\\quad\\alpha\u003e\\beta$$其中 $\\alpha\u003e\\beta$ 使得变化区域的 token 获得更高权重，迫使模型关注动态区域。\n$$\\mathcal{L}_{\\text{dyn}}=-\\frac{1}{N}\\sum_{k=1}^{N}\\sum_{i=1}^{L}\\omega(d_{t+k}^{i},d_{t+k-1}^{i})\\log p_{\\theta}(d_{t+k}^{i}\\mid\\cdots)$$轨迹预测采用 L1 loss：\n$$\\mathcal{L}_{\\text{traj}}=\\frac{1}{N}\\sum_{k=1}^{N}\\lVert\\hat{a}_{t+k}-a_{t+k}\\rVert_{1}$$总损失函数为加权组合：\n$$\\mathcal{L}=\\lambda_{1}\\mathcal{L}_{\\text{dyn}}+\\lambda_{2}\\mathcal{L}_{\\text{traj}}$$6. 深度信息融合模块 采用 Depth Anything 3（DA3）估计单目深度图 $D=\\text{DepthAnything3}(I)$。深度图被 resize 为两个分辨率：\n$256\\times448$ 输入 Context Depth Encoder (CDE) $128\\times224$ 输入 Dynamic Depth Encoder (DDE) CDE 和 DDE 基于 MagVIT-v2 架构初始化。视觉 token embedding 作为 query，深度特征作为 key/value，通过 Cross-Attention 完成融合：\n$$E_{q,c}=\\text{Embed}(c),\\; E_{q,d}=\\text{Embed}(d)$$$$E_{\\text{fused},c}=\\text{CA}(E_{q,c},D_{k,c},D_{v,c}),\\; E_{\\text{fused},d}=\\text{CA}(E_{q,d},D_{k,d},D_{v,d})$$两阶段训练策略：\n阶段 冻结模块 训练模块 学习率 Epochs 监督 Stage 1：深度预训练 基座模型（Show-o/PWM） CDE + DDE $3\\times10^{-5}$ 5 仅 10Hz/1s 无动作视频预测 Stage 2：多模态联合 CDE + DDE 融合模块 + 基座模型 $2\\times10^{-5}$ 16 交错 Frame+Action（Scheme E） Stage 1 让深度编码器先学会提取有用的几何特征而不干扰基座模型；Stage 2 冻结深度编码器，让基座模型学会如何利用深度增强的视觉特征进行交错生成。这种渐进式训练有效避免了多模态之间的灾难性干扰。\n🏗️ 架构流程总览 推理阶段详细步骤 步骤 操作 输入/条件 输出 说明 1 历史图像编码 $\\{I_{t-M},\\dots,I_{t-1}\\}$，$M=2$s contextual tokens $c$ + dynamic tokens $d$ MagVIT-v2 双分支 2 深度估计与编码 历史图像 $I$ 深度特征 $D_{k,c},D_{v,c},D_{k,d},D_{v,d}$ DA3 + CDE/DDE 3 Cross-Attention 融合 $E_{q,c}\\leftrightarrow D_{k,c}$ / $E_{q,d}\\leftrightarrow D_{k,d}$ 融合特征 $E_{\\text{fused},c},E_{\\text{fused},d}$ 视觉 query × 深度 KV 4 循环生成（$k=1..N$） [System|Fused Tokens|User|Ego Tokens] $\\hat{d}_{t+k}$ 和 $\\hat{a}_{t+k}$ LLM 自回归交错 5 帧解码 $\\hat{d}_{t+k}$ + $c_{t+2\\lfloor k/2\\rfloor}$ RGB 帧 $\\hat{I}_{t+k}$ MagVIT-v2 Decoder 6 轨迹解码 $\\hat{a}_{t+k}$ → MLP head 自车位置/轨迹 4 秒规划输出 训练阶段设置 配置项 参数值 基座模型 从 PWM 初始化（Show-o → Phi-1.5 链路） Tokenizer MagVIT-v2，双分支，各 8192 词表 历史长度 2 秒（4 帧 @ 2Hz） 预测范围 4 秒（8 帧 @ 2Hz） 优化器 AdamW GPU 数量 32× NVIDIA H20 Batch size 3 per GPU 输入视角 前置单目 最佳 epoch 16（基于 PDMS 选择） 🔬 实验与结果 实验设置 数据集：NAVSIM 高保真驾驶模拟器，提供自中心 RGB 序列、车辆状态信息和结构化标注。按官方 train/val/test 划分，帧间隔 0.5 秒。\n评估指标：\nPDMS（Predictive Driver Model Score）：包含 5 个子指标——NC（无碰撞）、DAC（可行驶区域合规）、EP（自车进展）、TTC（碰撞时间）、Comfort（舒适度） FVD（Fréchet Video Distance）：评估生成视频的分布级真实感 NAVSIM 闭环规划主实验结果 方法 输入 NC ↑ DAC ↑ EP ↑ TTC ↑ Comf. ↑ PDMS ↑ 传统端到端方法 VADv2-$\\nu_{8192}$ C 97.2 89.1 76.0 91.6 100.0 80.9 UniAD C 97.8 91.9 78.8 92.9 100.0 83.4 TransFuser C\u0026amp;L 97.7 92.8 79.2 92.8 100.0 84.0 ReCogDrive-IL SC 98.1 94.7 80.9 94.2 100.0 86.5 DiffusionDrive C\u0026amp;L 98.2 96.2 82.2 94.7 100.0 88.1 世界模型方法 DrivingGPT SC 98.9 90.7 79.7 94.9 95.6 82.4 Epona SC 97.9 95.1 80.4 93.8 99.9 86.2 ImagiDrive-A SC 98.1 96.2 80.1 94.4 100.0 86.9 DriveVLA-W0 SC 98.4 95.3 80.9 95.4 100.0 87.2 SGDrive-IL SC 98.6 95.1 81.2 95.4 100.0 87.4 PWM SC 98.6 95.9 81.8 95.4 100.0 88.1 WoTE C\u0026amp;L 98.5 96.8 81.9 94.9 99.9 88.3 ResWorld C\u0026amp;L 98.9 96.5 83.1 95.6 100.0 89.0 Uni-World VLA (Ours) SC 98.7 96.7 83.2 96.1 100.0 89.4 Uni-World VLA 以纯单目相机（SC）输入达到 89.4 PDMS，超越全部多传感器融合方法。在 EP（83.2）和 TTC（96.1）上取得最优，表明交错生成范式有效提升了自车进展效率和执行安全性。\n视频生成质量对比 方法 FVD ↓ 最大时长/帧率 数据集 视角 WoVoGen 417.7 2.5s/2Hz nuScenes Multi DriveDreamer 340.8 4s/2Hz nuScenes Multi SVD 227.5 4s/2Hz NAVSIM Front DrivingGPT 142.6 4s/2Hz NAVSIM Front GenAD 184.0 4s/2Hz OpenDV Front Uni-World VLA 141.8 4s/2Hz NAVSIM Front 消融实验 预训练 + 未来帧 + 深度的影响（Table 3）：\nPretrain Future Frames Depth NC DAC EP TTC Comf. PDMS FVD × × × 97.1 91.4 77.4 91.5 100.0 82.1 — ✓ × × 98.8 95.8 82.0 95.8 100.0 88.2 — ✓ ✓ × 98.8 96.5 82.9 96.4 100.0 89.2 164.2 ✓ ✓ ✓ 98.7 96.7 83.2 96.1 100.0 89.4 141.8 关键发现：预训练带来最大提升（+6.1 PDMS），未来帧生成进一步提升（+1.0），深度信息在视频质量上提升显著（FVD -22.4）。\n交错方案消融（Table 4，无深度）：\n方案 模式 PDMS A-跨频率交替 不等间隔 F→A 88.3 B-高频动作-帧 10Hz 密集 F→A 86.1 C-混合密→疏 第 1s 密集 + 后续 2Hz 87.8 D-滑动 1s 窗口 重叠动作窗口 85.7 E-2Hz 对齐交错 严格 F→A @ 2Hz 89.2 Scheme E（2Hz 严格 F→A 交替）显著优于其他方案。一个反直觉的发现：高频交替（B）反而最差（86.1），说明训练频率与评估/规划频率的对齐比密度更重要。\n历史视觉信息的影响（Table 5）：\n配置 NC DAC EP TTC Comf. PDMS FVD 2.0s Context+Dynamic 98.8 96.5 82.9 96.4 100.0 89.2 164.2 1.0s Context+Dynamic 99.0 96.4 81.4 96.7 100.0 88.8 170.7 Context Only 98.6 96.8 82.3 96.2 100.0 89.1 165.5 Dynamic Only 97.4 90.8 76.2 92.3 100.0 81.7 203.6 Contextual tokens 提供空间语义，dynamic tokens 提供运动线索，两者结合在更长的历史窗口上达到最佳平衡。\n图 4 解析：预测未来帧与对应 BEV 轨迹可视化。Uni-World VLA 生成的时间一致性视觉动态更为稳定，规划轨迹平滑且安全，能尊重车道几何和周围交通体。红色折线为预测轨迹，绿色为真值。相比基线方法，预测运动更稳定、与合理驾驶行为的对齐更好。\n图 5 解析：2.0s 时两者重建效果尚可；3.0s 时无深度模型在高速驾驶场景下出现模糊结构；4.0s 转弯时深度融合模型保持了更清晰的空间布局和几何线索。FVD 从 164.2 降至 141.8，验证了深度信息在长程预测中的几何约束作用。\n📊 与相关方法对比分析 与主流统一世界模型/VLA 的深度对比 方法 世界模型范式 预测-规划耦合 深度/几何线索 输出频率 NAVSIM PDMS DrivingGPT 并行 Predict-and-Plan 同一序列并列，无交互 ✗ 2Hz 82.4 Epona 串行 Predict-then-Plan 先 rollout 后规划，单向 ✗ 2Hz 86.2 PWM 串行联合预测 同时预测 state+action，非交替因果 ✗ 2Hz 88.1 ImagiDrive 串行 VLM 想象 VLM 先想象再预测轨迹 ✗ 2Hz 86.9 DriveVLA-W0 串行级联 感知→预测→规划三阶段 ✗ — 87.2 SGDrive-IL 分层串行 场景图→目标→轨迹 ✗ — 87.4 ResWorld 串行残差预测 先预测残差世界再规划 ✗ 2Hz 89.0 (C\u0026amp;L) WoTE 串行 世界 model token 辅助规划 ✗ — 88.3 (C\u0026amp;L) Uni-World VLA 交错（闭环） 逐帧交替 F→A，因果反馈 DA3 Cross-Attention 2Hz 严格交替 89.4 (SC) Uni-World VLA 的独特贡献不在于引入新的 backbone 或更大的参数量，而在于从根本上改变了世界模型和规划器之间的交互方式：\n从开环到闭环：现有方法要么并行处理（预测和规划互不干扰），要么串行处理（先 rollout 再规划，单向信息流）。Uni-World VLA 建立了预测→规划→预测的闭环反馈回路，更接近人类驾驶的认知过程。\n频率对齐策略：Scheme E 消融实验表明，2Hz 严格 F→A 交替显著优于 10Hz 高频交替（PDMS 89.2 vs 86.1）。这揭示了训练-评估频率对齐的重要性——盲目追求更高帧率反而会因频率不匹配而损害性能。\n深度几何线索的实用融合：不同于其他方法完全依赖 RGB，Uni-World VLA 通过两阶段训练和 Cross-Attention 机制将单目深度作为几何先验融入历史编码阶段。深度信息不是在生成阶段引入，而是在历史帧编码时提供额外的空间线索，帮助模型更好地理解场景几何结构。\n💡 个人思考 \u0026ldquo;冻结幻觉\u0026quot;是一个被严重低估的范式缺陷：几乎所有现有世界模型方法都假设未来 rollout 与规划是解耦的。Uni-World VLA 敏锐地指出——在复杂城市场景中，交通状况快速变化，自车早期（如 0.5s）的微小调整（轻微刹车/转向）会根本性地改变后续场景演化。如果预测时不考虑这个反馈，第 3 秒的视觉证据就是无效的。这个洞察重新定义了\u0026quot;世界模型应该预测什么\u0026rdquo;——不是预测一个固定的未来，而是预测一个会随着自车调整而不断变化的未来。\n频率对齐比密度更重要——工程上的重要教训：Scheme B（10Hz 密集交替）比 Scheme A（跨频率交替）更差（86.1 vs 88.3），而最简方案 Scheme E（2Hz 严格 F→A 交替）达到了最优 89.2。这揭示了 VLA 系统时序设计中的关键原则：预测频率必须与决策频率对齐。训练时用 10Hz 密集交替但测试时只评估 2Hz，带来了训练-测试不匹配（train-test mismatch）。这个发现对任何时序预测系统的设计都有借鉴意义。\nCross-Attention 深度融合是优雅的几何信息引入方式：Uni-World VLA 没有简单地将深度图作为额外通道拼接到 RGB，而是通过专用深度编码器提取特征，再以 Cross-Attention 与视觉 token 融合。优势在于：(1) 深度编码器可独立预训练，不干扰视觉编码器；(2) Cross-Attention 允许视觉 token 自适应地\u0026quot;查询\u0026quot;深度信息；(3) 两阶段训练策略有效避免灾难性遗忘。这种\u0026quot;即插即用\u0026quot;的设计范式值得推广。\n单目超越多传感器——信息利用效率的胜利：Uni-World VLA 以纯单目（SC）达到 89.4 PDMS，超越使用 Camera+LiDAR 的 ResWorld（89.0）和 DiffusionDrive（88.1）。这传递了强烈信号：信息利用方式比传感器数量更重要。交错生成机制使模型从单目图像中提取更多决策相关信息，而多传感器方法可能面临模态间冗余和融合不充分的问题。随着模型能力增强，单纯增加传感器的边际收益正在递减。\n从 PWM 初始化是最关键的工程决策：消融实验显示，不使用预训练时 PDMS 仅 82.1，使用 PWM 预训练后跃升至 88.2——近 6 个点的提升来自初始化。这说明在 VLA 系统中，基座模型的选择和初始化对最终性能的影响远超架构创新。PWM → Show-o → Phi-1.5 的初始化链路是 Uni-World VLA 成功的关键基础设施。\n世界模型正从\u0026quot;概念验证\u0026quot;走向\u0026quot;核心基础设施\u0026quot;：Uni-World VLA 的交错范式虽然目前仅在 NAVSIM 上验证，但其核心思想——世界模型和规划器必须在时序上紧密耦合——对自动驾驶 VLA 系统的设计具有深远影响。未来方向包括：(1) 多相机扩展结合跨视角深度一致性；(2) 更长预测窗口配合 KV-cache 实现流式推理；(3) 在闭环仿真中与 RL 训练相结合。Uni-World VLA 在\u0026quot;预测-规划闭环\u0026quot;这条路径上迈出了关键一步，为下一代 VLA 系统提供了重要的设计原则。\n参考文献：Liu, Q., Xu, H., Li, J., et al. Uni-World VLA: Interleaved World Modeling and Planning for Autonomous Driving. arXiv:2603.27287, 2026. https://arxiv.org/abs/2603.27287\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2603-27287/","summary":"现有世界模型通常先生成完整未来视频再规划（开环想象），但这种方式忽略了规划决策对环境的实时反馈。Uni-World VLA 提出交错生成范式——模型逐帧交替预测未来画面和自车动作，形成世界建模与控制的闭环交互。同时引入单目深度图作为几何线索增强空间感知。在 NAVSIM 上以单目 RGB 达到 89.4 PDMS，超越多传感器融合方法。","title":"论文精读｜Uni-World VLA — 交错世界建模与规划实现闭环交互驾驶"},{"content":"一句话理解数据闭环 数据闭环是一种通过实际道路数据持续发现模型缺陷、针对性补充训练数据、验证改进效果的自动化迭代系统，本质是将\u0026quot;采数-标注-训练-评测\u0026quot;这个循环从零散的手工操作升级为全自动运转的Pipeline，让每一TB数据都产生最大的模型改进价值。\n1. 为什么需要数据闭环 1.1 模型性能的退化曲线 在没有数据闭环的情况下，一个VLA模型部署后的性能退化典型曲线：\n第1个月：接管率0.1次/百公里 第3个月：上升到0.5次/百公里（遇到新场景） 第6个月：1.2次/百公里（场景分布偏移） 没有数据闭环，模型性能会随时间不可逆地衰减。数据闭环的价值在于让模型永远在最新的数据分布上持续进化。\n1.2 数据飞轮的六个环节 完整的数据飞轮包含六个步骤，形成一个可循环加速的飞轮：\n采 集 ↑ _ → _ _ 挖 _ 掘 _ _ → _ _ 标 _ 注 _ _ → _ _ 训 _ 练 _ _ → _ _ 评 _ 测 _ _ → _ _ 回 _ 灌 _ _ _ _ _ _ _ _ _ _ _ _ _ ↓ 采集（Collection）：从路测车队收集原始传感器数据。数据量级：10台测试车每日约2TB（每车约200GB/天，包含6路相机+1路LiDAR+GPS/IMU），100台每日约20TB，1000台量产车（仅trigger模式）每日约50TB。存储需求：10台车队一年约730TB，100台车队一年约7.3PB。\n挖掘（Mining）：从海量数据中找到有价值的corner case。这是最关键的环节——不加筛选地标注所有数据，成本不可接受。挖掘的目标是将\u0026quot;海量原始数据\u0026quot;压缩为\u0026quot;高价值小样本\u0026quot;，压缩比通常为1000:1到10000:1。一个好的挖掘Pipeline需要处理每天TB级的数据流并实时产出候选样本。常见的挖掘策略包括：基于规则的方法（如检测到近距离急刹）、基于模型的方法（如预测误差超过阈值）、以及基于场景统计的方法（如稀有道路属性组合）。\n标注（Annotation）：对挖掘出的数据进行精确标注。人工成本约$0.5-2/帧，3D点云标注更贵。\n训练（Training）：用新标注数据对模型进行微调或继续训练，更新模型权重参数。\n评测（Evaluation）：在benchmark和shadow mode中全面评估新模型的性能表现。\n回灌（Data Ingestion）：将评测中发现的fail case按照优先级排序后，重新注入挖掘环节的候选池中，等待下一轮标注和训练。闭环的关键在于回灌的反馈延迟——越短越好。\n1.3 常见瓶颈 调研20+自动驾驶团队的实践，最常见的瓶颈：\n瓶颈 占比 根因 标注效率低 45% 全量标注，缺乏筛选策略 场景覆盖不全 35% 被动收集，无结构化场景规划 迭代周期长 30% 手动操作，无自动化Pipeline 评测不全面 25% 只在Lab评测，缺shadow testing 核心问题：不知道哪些数据值得标注，哪些场景已被覆盖。多数团队采集了PB级数据，但标注量不到1%，且标注的数据高度同质化——大量重复的\u0026quot;晴天-白天-高速\u0026quot;场景，而\u0026quot;雨天-夜间-施工\u0026quot;等关键场景严重缺失。这是场景库建设缺失的直接后果。\n2. 主动学习：用最少的标注数据取得最大收益 2.1 核心框架 主动学习解决\u0026quot;数据太多，该标哪些\u0026quot;的问题。基本流程：\n用当前模型 $f_\\theta$ 对未标注数据 $D_u$ 推理，提取预测分布 对每个样本计算价值分数 $s(x)$，量化其\u0026quot;学习价值\u0026quot; 选择分数最高的 $k$ 个样本送标注（$k$ 通常为数据池总量的1-5%） 用新标注数据微调模型，重复以上步骤 核心在于价值函数 $s(x)$ 的设计。一个好的价值函数应该在模型不确定且场景新颖的样本上给出高分。\n2.2 不确定性采样 分类任务用预测熵：\n$ s(x) = H(p_\\theta(y|x)) = -\\sum_{c} p_\\theta(y=c|x) \\log p_\\theta(y=c|x) $\n回归任务（如轨迹预测）用预测分布的方差：\n$ s(x) = \\frac{1}{K}\\sum_{k=1}^{K} \\lVert \\hat{y}_k - \\bar{y} \\rVert^2 $\n其中 $\\hat{y}_k$ 是模型Dropout或Ensemble的第 $k$ 个预测，$\\bar{y}$ 是均值。\n工程经验：不确定性采样在分类任务（如物体检测的类别预测）上效果很好，但在连续值预测任务（如轨迹回归的坐标预测）中容易选中\u0026quot;本来就是噪声\u0026quot;的样本——高方差不代表高价值，可能只是因为传感器噪声。建议对分数做分位数归一化，只取前5%的高不确定性样本。同时引入置信度阈值，低于阈值的样本直接送标注（模型过于不确定），高于阈值的样本不做标注（模型已经确认）。\n2.3 多样性采样 不确定性采样容易选中相似样本（如同一路段大量逆光场景）。多样性采样确保覆盖不同模式。\nCoreSet方法：选择与已标注集特征最不同的样本：\n$ s(x) = \\min_{x' \\in D_l} \\lVert \\phi(x) - \\phi(x') \\rVert $\n其中 $\\phi(\\cdot)$ 是模型中间层的特征表示。实践中通常取倒数第二层或倒数第三层的hidden state。\nKCenterGreedy：每次选离已标注集最远的样本：\n$ x^* = \\arg\\max_{x \\in D_u} \\min_{x' \\in D_l} \\lVert \\phi(x) - \\phi(x') \\rVert $\n工程经验：多样性单独使用效果不稳定，推荐加权组合：\n$ s(x) = \\lambda s_{uncert}(x) + (1-\\lambda) s_{diversity}(x) $\n$\\lambda$ 通常在0.6-0.8之间。每隔几轮完全使用多样性采样以主动探索未知区域。\n2.4 不确定性估计的工程实现 在VLA模型中计算不确定性需要权衡精度和计算开销：\n方法 质量 计算开销 复杂度 MC Dropout 中 2-5×推理 低 Deep Ensemble 高 K×推理（K个独立模型） 中 Direct Uncertainty Head 低-中 无额外计算 低 Test-Time Augmentation 中-高 5-10×推理 低 推荐MC Dropout：性价比最高，不需要修改模型结构，不需要训练多个模型副本，对任何现有训练好的模型可直接使用。推理时开启Dropout，运行5-10次前向传播，计算预测分布统计量。对于轨迹预测任务，可以用预测轨迹的协方差矩阵的行列式作为不确定性度量。VLA模型中建议只在LLM最后几层启用Dropout，Vision Encoder保持确定。5次前向传播即可获得稳定的不确定性估计。\n2.5 主动学习的实际收益 某自动驾驶团队在一轮数据采集中的对比：\n策略 标注量 ADE↓ 效率比 随机采样 100K帧 0.12m 1.0× 不确定性采样 100K帧 0.19m 1.6× 多样性采样 100K帧 0.15m 1.3× 混合策略 100K帧 0.22m 1.8× 混合策略 50K帧 0.18m 3.0× 混合策略在50%标注量下即超过随机采样全部标注的效果，标注效率提升3倍。这意味着同样的标注预算可以覆盖3倍更多的场景组合。\n3. 场景库建设：从无组织数据到结构化场景管理 3.1 核心概念 场景库是对海量路测数据进行结构化组织和索引的系统。核心目标：任何时候问\u0026quot;需要什么场景的数据\u0026quot;，都能在5分钟内回答\u0026quot;有/没有，有多少\u0026quot;。\n需要支持的能力：\n按场景属性检索：天气/光照/道路类型/交通参与物密度 按模型表现检索：fail case/low confidence区域/high uncertainty帧 按时间地域检索：某条路线的近期数据分布变化 场景相似度检索：给一个场景找到最相似的已标/未标数据 覆盖缺口分析：当前场景库与目标运行区域数据分布之间的差异热力图 3.2 标签系统设计 生产级三级标签体系：\n一级标签（自动标注，必填）：\n天气：sunny/rainy/snowy/foggy 光照：day/dusk/night 道路类型：highway/urban/residential/tunnel 二级标签（模型预测）：\n交通参与物数量和类型：pedestrian/bicycle/car/truck 交互类型：lane_change/intersection/pedestrian_crossing 异常事件：construction/accident/temporary_sign 三级标签（挖掘发现，人工确认）：\n模型fail case的具体类型 场景rare level：rare（\u0026lt;0.1%）/ uncommon（0.1-1%）/ common（\u0026gt;1%） 安全严重度等级：critical（紧急）/ warning（警告）/ info（参考） 3.3 技术方案 推荐混合方案：标签Tag + 向量Embedding双通道索引。为什么需要双通道？Tag查询适合已知属性筛选（如\u0026quot;雨天+夜间+高速\u0026quot;），速度快且精确；向量查询适合未知模式的发现（如\u0026quot;和这个fail case相似的数据\u0026quot;），能捕捉语义相似性。两者互补。\nTag存于PostgreSQL用于精确查询，向量存于Milvus/FAISS用于语义相似度检索。向量维度通常取512或1024，使用余弦相似度或L2距离度量：\nSELECT frame_id FROM scenario_library WHERE weather = \u0026#39;rainy\u0026#39; AND road_type = \u0026#39;highway\u0026#39; AND confidence \u0026lt; 0.7 ORDER BY uncertainty DESC LIMIT 100; import faiss index = faiss.read_index(\u0026#34;scenario_vectors.index\u0026#34;) distances, indices = index.search(query_embedding, k=100) 3.4 数据分布管理 仪表盘应包含：总体统计（总帧数/标注帧数/已用训练帧数）、属性分布饼图、覆盖缺口热力图、稀有度累积曲线。\n覆盖率是衡量场景库完备性的核心指标，决定了模型在真实世界中的泛化能力。具体度量方法：将场景空间划分成网格（每个网格代表一个场景组合如\u0026quot;雨天-夜晚-高速\u0026quot;），统计已覆盖网格占总网格的百分比。目标覆盖率建议\u0026gt;80%。同时维护\u0026quot;目标运行区域分布\u0026quot;与\u0026quot;当前场景库分布\u0026quot;的对比热力图。\n4. 自动标注：从NeRF到3DGS的技术演进 4.1 成本问题 手动标注成本：2D框 $0.5-1$/帧，3D框 $1-3$/帧，语义分割 $3-10$/帧，3D点云 $10-30$/帧。100万帧项目标注成本高达数百万美元。自动标注目标是将成本降低10倍以上，同时保持标签质量接近人工水平。\n4.2 NeRF方案 用路测图像训练NeRF重建3D场景，在NeRF空间中标注后自动渲染到所有视角。\n优势：稀疏标注自动生成稠密标注，支持虚拟视角渲染，时序标注自动对齐。 局限：训练慢（2-8小时/场景），动态物体（行人/车辆）处理困难，需要高质量相机位姿估计。对于有大量动态物体的城市路口场景，NeRF的重建质量往往不够好。\n4.3 3D Gaussian Splatting 3DGS在2024-2025年迅速成为NeRF的替代方案：\n特性 NeRF 3DGS 训练时间 2-8小时 15-30分钟 渲染速度 0.1-1 FPS 30-100 FPS 显存占用 4-8 GB 8-16 GB 动态场景 困难 可扩展 标注精度 中等 高 3DGS用数百万个3D高斯椭球体表示场景，每个高斯有位置（3维）、协方差（6维）、颜色（3维）和不透明度（1维）参数，总共13维。通过可微渲染优化这些参数，从训练图像中反向传播梯度。30分钟的训练时间和实时渲染能力意味着可在采集车上完成场景重建和自动标注，实现边采集边标注。这是NeRF无法做到的。\n4.4 自动标注Pipeline 基于3DGS的自动标注Pipeline：\n数据预处理：从路测数据提取图像序列+GPS/IMU位姿 场景重建：3DGS训练城市路段（15-30分钟） 物体检测：在3DGS空间中用预训练检测器定位 跟踪关联：基于3D空间一致性跨帧关联物体ID，使用匈牙利算法在3D IoU矩阵上进行最优匹配 标注生成：3D检测结果投影到所有2D视角，生成2D bounding box和语义分割掩码 质量检查：预训练模型验证，低置信度帧送人工审核 Pipeline的关键设计原则是分层级联：前一阶段的输出质量越高，后一阶段的工作量越小。因此Gaussian重建的质量直接影响整个Pipeline的标注精度。重建质量不足的场景（如高速移动、纹理缺失区域）应标记为低置信度，直接跳到人工标注通道。\n实际效果：500帧城市路段，95%标注可直接使用（IoU\u0026gt;0.7），5%送人工修正。标注成本降低约85%。\n4.5 数据增强 基于3DGS的插入增强：从场景库中提取感兴趣的物体（如某辆车的3DGS模型），将该物体插入到另一个场景的3DGS表示中，渲染合成含有新物体的新视角图像。因为3DGS保持了正确的几何和光照信息，生成的图像在物体边缘、遮挡关系和阴影效果上都非常逼真，比传统的2D cut-paste增强更适用于训练自动驾驶感知模型。这种方法生成的图像在几何一致性上远超传统copy-paste数据增强，因为3DGS天然保持了正确的透视、遮挡和光照关系。\n5. 评测与回灌：闭环的关键验证环节 5.1 评测体系 数据闭环中的评测不是简单的在test set上跑指标，而是一个多维度评估体系：\nLab评测：包括Standard benchmark（如nuScenes/Waymo指标，用于行业内横向对比）、Scenario benchmark（按场景类别分开评测，反映在特定场景上的表现差异）、Regression check（在100K+规模的历史regression set上评测，确保新模型在这些已知case上不退步）。Regression set应该持续积累，每次新标注的数据都加入其中。\nShadow Mode：新模型与既有模型在生产环境并行运行，输出只记录不执行，对比预测差异，分析引入风险。\nAB Test：小流量部署（如5%的车队），对比接管率/舒适度评分/平均通行效率等指标。AB Test需要运行至少1-2周以获得统计显著的结果。\n5.2 回灌优先级 fail case的优先级排序公式：\n$ \\text{Priority}(x) = w_1 \\times \\text{safety\\_critical}(x) + w_2 \\times \\text{frequency}(x) + w_3 \\times \\text{hardness}(x) $\n其中safety_critical是安全关键度（碰撞风险），frequency是真实分布中出现频率，hardness是模型误差程度。权重建议设置为 $w_1=10, w_2=5, w_3=3$，安全相关的fail case应优先处理。优先级的排序结果直接决定了下一轮标注资源的分配方案。\n5.3 迭代周期优化 数据闭环的价值与迭代速度强相关：\n环节 传统周期 优化后 优化手段 数据挖掘 2-3天 2-4小时 自动化Pipeline+实时场景检测 标注 1-2周 1-2天 自动标注+人工审核 训练 1-2周 1-3天 LoRA/Adapter高效微调 评测 3-5天 4-8小时 自动化评测平台 回灌 1-2天 实时 自动化Pipeline 总周期 3-6周 3-7天 全链路自动化 + 自动标注 + LoRA 关键优化点：自动标注将标注周期从2周压缩到2天，LoRA微调将训练从2周压缩到1天。两者结合将总周期从3-6周缩短到3-7天。另一个容易被忽视的优化是数据挖掘与标注的并行化——挖掘Pipeline可以持续产出候选样本，标注任务可以按照优先级队列并发进行，无需等待上一批次全部完成。\n6. 工程架构与成本控制 数据闭环系统不仅仅是算法问题，更是一个系统架构工程问题。设计良好的架构可以让整个飞轮自动化运转，而设计不佳的架构会导致各环节之间的衔接成为瓶颈。\n6.1 系统架构 一个生产级数据闭环系统的完整架构：\n[ [ [ [ [ [ 采 存 处 训 评 回 集 储 理 练 测 灌 层 层 层 层 层 层 ] ] ] ] ] ] 车 S S 分 O 自 端 3 p 布 f 动 t / a 式 f 化 r M r 训 l P i i k 练 i i g n 场 集 n p g I 景 群 e e e O 挖 l r 原 掘 + B i - 始 P e n b 数 i D n e a 据 p V c 触 s e C h 发 e + l / m 下 d i M a 一 / P n L r 轮 c o e f k 挖 o s l 掘 n t → o + t g w i r G 模 S n e P 型 h u S U 版 a o Q 集 本 d u L 群 管 o s 元 自 理 w 数 动 → 据 标 M 注 o 数 + d 据 → e 上 V 传 e 数 + 服 c 据 务 t 增 可 （ o 强 视 断 r 化 点 D 分 续 B 析 传 向 平 / 量 台 压 索 缩 引 / 加 + 密 ） 标 注 存 储 6.2 数据版本管理 每次训练集构建时创建不可变数据快照，记录增量diff，维护 model_version → data_snapshot → training_config 映射关系。当训练效果出现回退时，可以快速回溯到之前表现最好的数据和模型组合，而无需从头排查。这在多轮迭代后尤其重要。推荐使用DVC管理数据版本（追踪哪个数据快照被用于哪个训练任务），MLflow管理模型版本和训练配置。\n6.3 成本控制 成本项 占比 优化策略 标注费用 40-60% 主动学习+自动标注 GPU训练 20-30% 高效微调+Spot实例 存储 10-15% 生命周期管理（冷/热/温分级） 数据传输 5-10% 压缩+增量上传 存储分级：热数据（近1月）SSD全量保留，支持高频访问和实时处理；温数据（1-6月）HDD压缩存储，压缩率约3-5倍，用于周期性检索；冷数据（\u0026gt;6月）对象存储仅保留元数据（标签/特征向量），原始数据可删除或归档到低成本归档存储。这种分级架构可以将存储成本降低约60%。\n7. 常见问题与排查 在实际落地数据闭环时，工程团队几乎一定会遇到以下几个典型问题。提前了解这些坑和对应策略，可以显著减少试错成本。\n7.1 数据偏差（Distribution Shift） 现象：Lab评测AP很高但实车表现差。 根因：场景库数据分布与实际部署分布不一致。例如Lab数据中晴天占80%，但运营区域雨雾天气占40%。 解决：使用场景库仪表盘的覆盖缺口热力图，识别分布差异最大的场景组合。对缺口场景进行针对性的定向采集（如安排车队在雨夜出车）。训练时使用importance weighting，使低频率场景样本获得更高的loss权重。\n7.2 标注质量不一致 现象：用自动标注训练的模型反而不如只用人标注的。 根因：自动标注噪声模式与模型缺陷重叠，导致模型学到错误bias。 解决：使用预训练模型对自动标注结果进行质量打分，剔除低质量标签；对自动标注的数据做10-20%的人工抽检；在训练过程中显式建模标签噪声（如使用标签平滑或噪声鲁棒损失函数）。\n7.3 迭代速度慢 现象：从发现fail case到部署修复需要一个月以上。 根因：全流程手动触发，无自动化Pipeline衔接。 解决：端到端自动化Pipeline、LoRA渐进式更新、标注训练并行化（第一批标注完成即开始训练）。\n总结 数据闭环不是一个\u0026quot;有或没有\u0026quot;的二选一，而是一个需要持续投入建设的系统工程。从\u0026quot;能跑\u0026quot;到\u0026quot;好用\u0026quot;的必经之路。核心要点：\n主动学习（不确定性+多样性混合）是最具性价比的数据筛选策略，用随机采样50%的预算达到随机采样100%的效果，标注效率提升3倍。 场景库将无组织数据升级为结构化索引系统，支撑高效的场景检索和分布管理，是数据闭环的基础设施。 3DGS将自动标注速度从小时级降至分钟级，成本降低85%，可实现边采集边标注，是自动标注的理想选择。 迭代速度决定商业价值，应追求3-7天而非3-6周的全周期。自动标注和高效微调是实现快速迭代的两大引擎。 问题：模型部署后性能持续衰减，海量数据中有价值样本筛选效率低 → 方法：主动学习混合采样（不确定性+多样性） + 场景库结构化建模 + 3DGS自动标注 + 端到端自动化Pipeline → 结果：标注效率提升3倍，迭代周期从3-6周缩短至3-7天，模型性能在真实道路分布上持续提升。\n","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E6%95%B0%E6%8D%AE%E9%97%AD%E7%8E%AF%E5%B7%A5%E7%A8%8B/","summary":"数据闭环是自动驾驶系统持续进化的核心引擎，但多数团队卡在「采了很多数据却不会用」的困境。数据闭环的核心难点不在于采集，而在于从PB级数据中精准定位那万分之一的corner case。本文拆解完整数据飞轮（采集→挖掘→标注→训练→评测→回灌），重点介绍主动学习采样策略（熵采样/多样性采样/不确定性估计）、场景库建设方法论、以及基于NeRF/3DGS的自动标注与数据增强前沿实践。","title":"数据闭环工程：从数据飞轮到持续迭代"},{"content":"📌 概述 LiDAR（Light Detection And Ranging）是自动驾驶中提供精确三维空间信息的核心传感器。与相机不同，LiDAR 直接测量物体在空间中的距离，不受光照条件影响，在白昼、夜间甚至低照度环境下都能稳定工作。\n本讲从 LiDAR 的物理工作原理出发，介绍点云的基本表示形式与预处理方法，重点讲解三大主流检测范式——Voxel-based、Point-based 与 RangeView-based，并对比其在精度与速度上的权衡。最后介绍 CenterPoint、TransFusion-L 等端到端检测方法的架构思路，以及当前主流 LiDAR 传感器的技术参数。\n🎯 核心概念 LiDAR 工作原理 LiDAR 通过发射激光束并测量反射光的飞行时间（Time of Flight, ToF）来计算目标距离：\n$$ d = \\frac{c \\cdot \\Delta t}{2} $$其中 $c$ 为光速，$\\Delta t$ 为发射到接收的时间差。\n扫描方式分类：\n类型 原理 代表产品 特点 机械旋转式 激光器+接收器在电机驱动下 360° 旋转 Velodyne HDL-64E, Pandar64 360° FOV，精度高，但存在机械磨损 固态（Flash） 单次大面积发射，面阵接收 LeddarTech 无运动部件，可靠性高，FOV 受限 固态（MEMS） 微镜反射改变光束方向 InnovizOne, RoboSense M1 兼顾可靠性与 FOV OP（Optical Phased Array） 光学相控阵控制光束偏转 未大规模量产 全固态、扫描速度快 点云表示 一个原始 LiDAR 点通常包含以下字段：\n$(x, y, z)$：三维空间坐标（通常以 LiDAR 为原点） intensity：反射强度，反映目标材质反射率 ring：激光线束编号（对于多线 LiDAR），用于识别来自哪个发射器 timestamp：时间戳，用于运动补偿（Motion Compensation） azimuth：水平方位角 坐标系约定 LiDAR 坐标系通常遵循：$+x$ 指向前方，$+y$ 指向左侧，$+z$ 指向上方（右手系）。点云在输入网络前通常被归一化到以自车为中心的坐标系中。\n🔧 技术详解 预处理流程 运动补偿：在扫描周期内自车可能移动数十厘米，需利用 IMU/里程计将各点变换到统一时间戳 地面分割：使用 RANSAC 或 Patchwork++ 提取地面点，降低后续检测的搜索空间 降采样：使用 Voxel Grid Filter 或 Farthest Point Sampling（FPS）平衡计算量与密度 区域裁剪：去除自车顶部、后方等无用区域点云 三种主流检测范式 1. Voxel-based（体素化方法） 将点云量化为固定大小的 3D 体素网格，使用 3D 稀疏卷积进行特征提取。\nVoxelNet（2017）：开创性工作，将体素内的点通过 VFE（Voxel Feature Encoding）层聚合为体素级特征，再使用 3D 卷积处理。\nSECOND（2018）：引入稀疏卷积（Sparse Convolution）替代 VoxelNet 中的密集 3D 卷积，推理速度提升数倍，成为后续工作的基座。\nPointPillars（2019）：将体素压缩为柱体（pillar），只在 $(x, y)$ 平面划分网格，$z$ 方向不做划分。每个 pillar 内的点用简化版的 PointNet 编码，然后使用 2D 卷积处理伪图像。PointPillars 在速度和精度间取得了良好平衡，成为工业部署的首选方案之一。\n2. Point-based（逐点处理方法） 直接在原始点云上操作，无需量化操作。\nPointNet / PointNet++（2017）：使用共享 MLP 逐点编码特征，通过对称函数（max pooling）实现置换不变性。PointNet++ 引入分层采样和局部聚合，提升了对局部结构的建模能力。\n在 3D 检测中，PointNet++ 常作为 backbone 用于特征提取（如 PointRCNN）。\n优缺点：\n优点：不损失原始点云几何信息，理论上可达到最高精度 缺点：最近邻搜索开销大，推理速度慢，难以满足实时性要求 3. RangeView-based（距离视图方法） 将点云投影到球面坐标系，得到类似图像的 2D 表示。\n$$ \\theta = \\arcsin(z / r), \\quad \\phi = \\arctan(y / x) $$每个像素保存 $(r, x, y, z, intensity, ring)$ 等特征，然后使用 2D 卷积网络处理。\nRangeDet（2021）：提出 RangeView 下的通用检测框架，使用圆形卷积（circular padding）处理水平方向的周期性。\n优缺点：\n优点：计算效率高，可直接使用成熟的 2D CNN 架构 缺点：投影过程丢失 3D 几何信息，物体在 RangeView 中尺度变化剧烈，远距离目标像素极少 端到端 3D 检测：CenterPoint 与 TransFusion-L CenterPoint（2021）：\n将检测范式从 anchor-based 转为 center-based，类似 2D 检测中的 CenterNet 使用 voxel-based backbone 提取特征，在 BEV 空间预测目标的中心点热图（heatmap） 用中心点回归尺寸、朝向、速度等属性 两阶段版本（CenterPoint-PointRefine）使用 PointNet++ 在目标点云内进行 box refinement TransFusion-L（2022）：\nLiDAR-only 版本的 TransFusion 使用 Transformer decoder 结构，通过 queries 和 BEV feature 的 cross-attention 直接输出目标框 引入自适应稀疏注意力（Adaptive Sparse Attention），在保持精度的同时降低计算量 在 nuScenes 数据集上达到当时 SOTA 📊 方法对比 方法 Backbone 精度（nuScens NDS） FPS 内存 VoxelNet 3D 密集卷积 ~52% \u0026lt;5 高 SECOND 3D 稀疏卷积 ~55% ~20 中 PointPillars 2D 卷积 ~57% ~60 低 CenterPoint 稀疏卷积 + 2D ~65% ~30 中 TransFusion-L Transformer ~68% ~15 高 PointRCNN PointNet++ ~55% \u0026lt;5 高 RangeDet 2D CNN ~58% ~40 低 🔗 与自动驾驶的关联 LiDAR 在感知中的角色 任务 LiDAR 优势 典型方案 3D 目标检测 精确距离信息，无尺度歧义 CenterPoint, TransFusion-L 在线地图重建 高精度点云匹配 基于 NDT 的 LiDAR SLAM 障碍物穿越 低矮障碍物检测 点云高度特征分析 定位 点云配准，不受光照变化影响 LiDAR localization 常见 LiDAR 传感器参数 型号 线束 探测距离 FOV(H/V) 精度 类型 Velodyne HDL-64E 64 120m 360°/26.9° ±2cm 机械 Velodyne VLP-16 16 100m 360°/30° ±3cm 机械 Hesai Pandar64 64 200m 360°/40° ±1cm 机械 Hesai PandarXT-32 32 120m 360°/40° ±3cm 机械 RoboSense RS-LiDAR-128 128 200m 360°/40° ±2cm 机械 RoboSense M1 — 150m 120°/25° ±3cm MEMS 固态 Ouster OS1-64 64 120m 360°/45° ±3cm 机械 趋势 从机械式到固态：MEMS 和 Flash LiDAR 成本持续下降，预计 2026-2027 年在 L2+ 车型中普及 从单传感器到多模态融合：LiDAR + Camera 的深度融合（如 BEVFusion, TransFusion）正成为主流 分辨率持续提升：512 线以上 LiDAR 已进入原型阶段，将大幅提升远距离感知能力 📚 延伸阅读 Zhou, Y. \u0026amp; Tuzel, O. \u0026ldquo;VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection.\u0026rdquo; CVPR, 2018. Yan, Y. et al. \u0026ldquo;SECOND: Sparsely Embedded Convolutional Detection.\u0026rdquo; Sensors, 2018. Lang, A. H. et al. \u0026ldquo;PointPillars: Fast Encoders for Object Detection from Point Clouds.\u0026rdquo; CVPR, 2019. Yin, T. et al. \u0026ldquo;Center-based 3D Object Detection and Tracking.\u0026rdquo; CVPR, 2021. Bai, X. et al. \u0026ldquo;TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers.\u0026rdquo; CVPR, 2022. Fan, L. et al. \u0026ldquo;RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection.\u0026rdquo; ICCV, 2021. ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/lidar%E7%82%B9%E4%BA%91%E5%A4%84%E7%90%86%E5%9F%BA%E7%A1%80/","summary":"系统讲解LiDAR工作原理（ToF、机械/固态）、点云表示方法（xyz、intensity、ring）、三类主流点云检测方法（voxel-based、point-based、range-view），以及在端到端检测中的典型方案（CenterPoint、TransFusion-L）。","title":"知识精讲｜LiDAR点云处理基础"},{"content":"📌 概述 相机是自动驾驶中最核心的感知传感器之一，承担着交通参与者检测、车道线识别、交通标志理解等关键任务。要从二维图像中恢复三维信息，必须理解相机的成像几何模型——即相机是如何将三维世界投影到二维像素平面上的。\n本讲以针孔模型为起点，系统介绍相机的内参（intrinsics）与外参（extrinsics）、畸变模型（radial \u0026amp; tangential）、单目标定与双目标定流程，并深入分析标定误差如何传递到 BEV（Bird\u0026rsquo;s-Eye-View）感知与 3D 检测任务中。最后介绍自动驾驶中常见的相机类型及其选型依据。\n🎯 核心概念 针孔模型（Pinhole Model） 针孔模型描述了一个理想化的成像过程：三维空间中的点 $P(X_w, Y_w, Z_w)$ 通过光心 $O$ 投影到成像平面上，形成倒立的像 $p(u, v)$。为避免倒立，数学上通常将成像平面对称到光心前方（虚拟成像平面）。\n投影过程可用齐次坐标表示为：\n$$ s \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix} = K \\begin{bmatrix} R \u0026 t \\end{bmatrix} \\begin{bmatrix} X_w \\\\ Y_w \\\\ Z_w \\\\ 1 \\end{bmatrix} $$其中 $s$ 为深度缩放因子，$K$ 为内参矩阵，$[R|t]$ 为外参矩阵。\n内参与外参 内参矩阵 $K$ 描述了相机坐标系到像素坐标系的映射：\n$$ K = \\begin{bmatrix} f_x \u0026 0 \u0026 c_x \\\\ 0 \u0026 f_y \u0026 c_y \\\\ 0 \u0026 0 \u0026 1 \\end{bmatrix} $$ $f_x = f / d_x$，$f_y = f / d_y$：以像素为单位的焦距，$d_x, d_y$ 为像元尺寸 $(c_x, c_y)$：主点偏移，即光轴与成像平面交点的像素坐标 外参 $[R|t]$ 描述了世界坐标系到相机坐标系的刚体变换。$R$ 为 $3\\times3$ 旋转矩阵，$t$ 为 $3\\times1$ 平移向量。\nFOV、焦距与传感器尺寸的关系 视场角（Field of View, FOV）由焦距 $f$ 和传感器尺寸 $W$（宽度）共同决定：\n$$ \\text{FOV}_h = 2 \\arctan\\left(\\frac{W}{2f}\\right) $$ 焦距越短 → FOV 越大 → 视野广但近处畸变大（如鱼眼） 焦距越长 → FOV 越小 → 看得远但视野窄（如长焦用于前向远距离检测） 畸变模型 真实镜头存在畸变，分为两类：\n径向畸变（Radial Distortion）：由镜头曲率引起，越靠近边缘畸变越明显。\n桶形畸变（$k_1 \u003e 0$）：图像向外膨胀 枕形畸变（$k_1 \u003c 0$）：图像向内收缩 数学模型： $$ x_{\\text{dist}} = x(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) $$ $$ y_{\\text{dist}} = y(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) $$切向畸变（Tangential Distortion）：由镜头与成像平面不平行引起。 $$ x_{\\text{dist}} = x + [2p_1 xy + p_2(r^2 + 2x^2)] $$ $$ y_{\\text{dist}} = y + [p_1(r^2 + 2y^2) + 2p_2 xy] $$完整的畸变参数向量为 $(k_1, k_2, p_1, p_2, k_3)$。\n🔧 技术详解 相机标定流程 张氏标定法（Zhang\u0026rsquo;s Method）是目前最广泛使用的单目标定方法，核心步骤：\n准备标定板：棋盘格或圆点阵列，已知每个角点的世界坐标（通常设 $Z=0$） 采集图像：从不同角度拍摄 15-30 张标定板图像，覆盖视野各个区域 角点检测：使用亚像素精度检测角点位置 求解单应性矩阵：每张图像建立世界平面到像素平面的单应性 $H = K[r_1 \\; r_2 \\; t]$ 闭式求解内参：利用旋转向量正交约束求解 $K$ 畸变参数估计：最小化重投影误差，联合优化所有参数 非线性优化：使用 Levenberg-Marquardt 算法最小化总重投影误差 评价指标：\n重投影误差（Reprojection Error）：通常 \u0026lt; 0.5 pixel 视为合格 误差来源：标定板不平整、角点检测精度、图像质量 双目标定与立体校正 对于立体相机（Stereo Camera）：\n双目外参标定两个相机之间的 $R, t$ 立体校正（Rectification）：通过 Bouguet 算法将两幅图像校正到同一极线上，使对应点仅在水平方向有视差 视差 $d = u_L - u_R$，深度 $Z = \\frac{f \\cdot b}{d}$（$b$ 为基线长度） 坐标变换链 自动驾驶中，相机图像上的像素需要经过多重坐标变换才能映射到世界坐标系：\n像素 → 归一化相机平面：$\\begin{bmatrix} x_n \\\\ y_n \\\\ 1 \\end{bmatrix} = K^{-1} \\begin{bmatrix} u \\\\ v \\\\ 1 \\end{bmatrix}$ 去畸变：对 $(x_n, y_n)$ 应用畸变校正 相机坐标系：$P_c = [x_n \\cdot s, \\; y_n \\cdot s, \\; s]^T$（$s$ 为深度估计值） 相机 → 自车（Ego）：$P_e = R_{c\\to e} \\cdot P_c + t_{c\\to e}$ 自车 → 世界：$P_w = R_{e\\to w} \\cdot P_e + t_{e\\to w}$ 相机标定对 BEV 感知的影响 BEV 感知的核心是将多相机特征通过 IPM（Inverse Perspective Mapping）或 Transformer 的 cross-attention 映射到俯视栅格上。\n标定误差的影响：\n内参误差 → 投影到 BEV 栅格时出现系统性偏移，远处的目标位置误差被放大 外参误差（尤其是 pitch 角） → BEV 中车辆前后位置偏差、车道线错位。pitch 角误差 0.1° 可在 50m 处造成约 8.7cm 的深度误差 畸变校正不彻底 → 图像边缘特征位置扭曲，影响多相机特征拼接的对齐精度 因此，量产自动驾驶系统通常要求：\n在线标定（On-the-fly Calibration）补偿车辆负载、悬架变化导致的微小外参漂移 多相机联合标定确保所有相机在同一坐标系下的一致性 定期使用标定间（Calibration Rig）进行完整标定 📊 方法对比：标定方法 方法 工具 精度 适用场景 张氏标定法 OpenCV / MATLAB 0.1-0.5 px 离线单目/双目标定，最通用 自标定（Self-calibration） 特征匹配 + SFM 0.5-2 px 无标定板场景，精度低 在线标定 车道线/静止特征 0.01-0.05° 补偿外参漂移 双目标定 Kalibr / OpenCV 0.1-0.3 px 立体深度估计 🔗 与自动驾驶的关联 感知任务 对相机标定的依赖 2D 目标检测 弱（框标注在图像空间） 3D 目标检测（单目） 强（依赖投影几何恢复深度） BEV 语义分割 极强（IPM 依赖准确外参） 多相机融合 极强（跨相机一致性依赖联合标定） 视觉 SLAM / 定位 强（特征跟踪依赖畸变校正质量） 端到端（VLA） 中（若输入为原始图像+位姿，标定误差可被网络隐式补偿一部分） 常见车载相机 类型 典型焦距 FOV 用途 前视主相机 28-35mm 40-60° 远距离目标检测、交通灯识别 前视宽角 12-16mm 100-120° 交叉路口行人、短距离全覆盖 环视鱼眼 6-8mm 180-220° 自动泊车、360° 近距离感知 侧视/后视 12-20mm 60-100° 盲区监测、变道辅助 在线标定方法 由于车辆行驶颠簸、负载变化、悬架老化等原因，相机外参（特别是俯仰角和偏航角）会随时间漂移。在线标定通过观测静态环境特征实现实时外参修正。\n基于车道线的外参标定：\n利用前视相机检测车道线（通常使用三次曲线或三次贝塞尔曲线拟合） 将车道线投影到 BEV 空间，与 HD 地图中的车道线或 Temporal 聚合的车道线做匹配 优化外参使匹配误差最小化，修正 pitch / yaw 角 基于静止目标的外参标定：\n检测静止目标（路杆、交通标志、停止车辆）的 2D 检测框 利用 LiDAR 或毫米波雷达的 3D 观测作为真值监督 使用 PnP（Perspective-n-Point）求解相机相对于自车的外参 多相机联合标定 多相机系统的标定需要考虑以下维度：\n帧同步：所有相机必须在同一时刻曝光（硬件触发同步或软件时间戳对齐） 共视标定：在标定间设置多个标定板，保证相邻相机有 30-50% 的重叠区域 全局优化：构建包含所有相机位姿的因子图，最小化整体重投影误差 一致性检验：验证不同相机在同一位置（如车辆正前方 30m 处）的投影偏差 \u0026lt; 1 pixel 标定工具链 阶段 工具 内容 离线车间标定 自研标定间 / MATLAB 内参 + 畸变系数 + 组外参 出厂下线标定 专用标定线 快速验证 + 外参微调 OTA 在线标定 自研算法部署到域控 运行时持续监测外参并修正 标定失效检测 CV 算法 通过 IPM 投影一致性检测标定是否失效 📚 延伸阅读 Zhang, Z. \u0026ldquo;A Flexible New Technique for Camera Calibration.\u0026rdquo; IEEE TPAMI, 2000. Hartley, R. \u0026amp; Zisserman, A. Multiple View Geometry in Computer Vision, 2nd ed., 2004. Geiger, A. et al. \u0026ldquo;Automatic Camera and Range Sensor Calibration using a Single Shot.\u0026rdquo; ICRA, 2012. Rehder, J. et al. \u0026ldquo;Extending kalibr: Calibrating the extrinsics of multiple IMUs and of individual axes.\u0026rdquo; ICRA, 2016. Lee, D. et al. \u0026ldquo;Online Extrinsic Calibration of Monocular Camera and LiDAR on Road Scenes.\u0026rdquo; ICRA, 2020. OpenCV Camera Calibration Tutorial: https://docs.opencv.org/master/dc/dbb/tutorial_py_calibration.html ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E7%9B%B8%E6%9C%BA%E6%88%90%E5%83%8F%E5%8E%9F%E7%90%86%E4%B8%8E%E6%A0%87%E5%AE%9A/","summary":"深入讲解自动驾驶中相机成像的核心原理，包括针孔模型、内参外参、畸变模型与标定流程，并分析相机标定质量对BEV感知与3D检测的影响，以及常见车载相机类型。","title":"知识精讲｜相机成像原理与标定"},{"content":"📌 概述 定位（Localization）是自动驾驶系统中连接感知与规划的桥梁。没有准确的定位，车辆无从知道自己\u0026quot;在哪里\u0026quot;，也就无法执行路径规划与控制——这也是为什么业界常将定位称为自动驾驶的\u0026quot;骨架\u0026quot;。\n本讲覆盖多传感器融合定位的核心技术栈：从 GNSS/RTK 的厘米级定位原理、IMU 与车轮里程计的航位推算、卡尔曼滤波的预测-更新闭环，到松耦合/紧耦合融合方案，以及基于 HD 地图的定位（车道匹配、点云匹配、NDT / ICP）。最后，我们将讨论端到端 VLA（Vision-Language-Action） 方案中为什么可以绕过传统定位模块，以及这给系统带来的取舍。\n🎯 核心概念 GNSS 与 RTK GNSS（Global Navigation Satellite System）：包括 GPS（美国）、BeiDou（中国）、GLONASS（俄罗斯）、Galileo（欧盟）。基本原理是通过测量卫星信号到达接收机的时间计算伪距（pseudorange），解算四颗以上卫星即可得到三维位置。\n误差来源：\n电离层/对流层延迟 卫星轨道与钟差 多径效应（城市峡谷中最严重） 接收机噪声 RTK（Real-Time Kinematic）：通过地面基准站（Base Station）将自身已知位置的观测值与接收机的观测值做差分，消除电离层、卫星钟差等共同误差。RTK 可将定位精度从米级提升到厘米级（2-5cm），但依赖基站与流动站之间的通信链路（通常为 4G/5G）。\n局限：城市峡谷、隧道、地库中 GNSS 信号衰减或丢失，单靠 GNSS 无法满足连续性要求。\nIMU（Inertial Measurement Unit） IMU 包含三轴加速度计与三轴陀螺仪，测量比力（specific force）与角速度。\n航位推算（Dead Reckoning）：通过对角速度积分得到姿态，去除重力后对加速度双重积分得到位移。\n$$ v_{t+1} = v_t + a_t \\cdot \\Delta t $$ $$ p_{t+1} = p_t + v_{t+1} \\cdot \\Delta t + \\frac{1}{2} a_t \\cdot \\Delta t^2 $$误差特性：\n高频响应好（~100 Hz） 短时精度高 存在积分漂移（bias drift），长时间误差累积严重 IMU 按精度分为消费级（BMI088）、工业级（ADIS）、导航级（LN-200）、战略级（光纤陀螺），价格从几十元到数十万元不等。\n车轮里程计（Wheel Odometry） 利用轮速传感器测量各轮旋转角度，结合车辆运动学模型推算位置增量：\n差速模型：两轮速度差计算转角 阿克曼模型：前轮转向角 + 后轮速度推算轨迹 优点：不依赖外部信号，短时稳定 缺点：受轮胎打滑、路面坡度影响大 🔧 技术详解 卡尔曼滤波（Kalman Filter, KF） 卡尔曼滤波是多传感器融合定位的最核心数学工具，融合预测模型（先验）与观测模型（后验），以递归方式估计系统状态。\n预测步骤（Predict） $$ \\hat{x}_{k|k-1} = F_k \\hat{x}_{k-1|k-1} + B_k u_k $$ $$ P_{k|k-1} = F_k P_{k-1|k-1} F_k^T + Q_k $$ $F_k$：状态转移矩阵（如运动学模型） $B_k$：控制输入矩阵 $Q_k$：过程噪声协方差 更新步骤（Update） $$ K_k = P_{k|k-1} H_k^T (H_k P_{k|k-1} H_k^T + R_k)^{-1} $$ $$ \\hat{x}_{k|k} = \\hat{x}_{k|k-1} + K_k (z_k - H_k \\hat{x}_{k|k-1}) $$ $$ P_{k|k} = (I - K_k H_k) P_{k|k-1} $$ $H_k$：观测矩阵 $R_k$：观测噪声协方差 $K_k$：卡尔曼增益，控制模型预测与传感器观测之间的信任权重 扩展：EKF 与 UKF 当系统为非线性时（如 IMU 的姿态更新），使用 EKF（Extended Kalman Filter） 通过一阶泰勒展开线性化；UKF（Unscented Kalman Filter） 使用 sigma 点传播，精度更高但计算稍大。\nError-State KF（ESKF） 在实际 IMU 融合中，更常用的是 ESKF，将状态分解为名义状态（nominal state，由 IMU 积分直接得到）和误差状态（error state，用小量表示），KF 只估计误差状态。优点是误差状态接近线性，且小量表示避免了欧拉角的万向锁问题。\n多传感器融合方案 松耦合（Loosely Coupled） 各传感器独立解算位姿，然后在状态估计层融合。例如 GNSS 输出位置和速度作为观测 $z_k$，IMU 做预测。\n优点：模块化好，任一个传感器故障不影响其他 缺点：丢弃了传感器原始观测中的丰富信息，融合精度有限\nG I O N M D S U O S → → → [ [ [ 预 运 定 积 动 位 分 学 解 ] ] 算 ] → → → 预 增 测 量 位 置 速 K 度 F → 融 合 位 姿 紧耦合（Tightly Coupled） 直接使用传感器原始观测值。GNSS 直接使用伪距、伪距率；IMU 与 GNSS 原始观测量在滤波器中联合处理。\n优点：\n卫星少于 4 颗时仍可利用部分观测约束 精度优于松耦合 30-50%（尤其在城市峡谷场景） 更有利于 detect 和处理 GNSS 异常（多径、周跳） 缺点：计算复杂度高，系统复杂度大，调试困难\nHD 地图定位 车道匹配 利用视觉或 LiDAR 检测到的车道线/路沿特征，与 HD 地图中的车道模型匹配，修正横向位置。典型方法包括：\n粒子滤波：在横向方向采样粒子，根据匹配似然度加权 ICP 匹配：将提取的特征点与地图车道中心线 ICP 配准 点云匹配定位（LiDAR Localization） 使用 LiDAR 的实时点云与预建的点云地图进行配准：\nICP（Iterative Closest Point）：\n寻找最近邻对应点对 求解刚体变换最小化点对距离 迭代至收敛 缺点：需要初始位姿接近，对噪声敏感 NDT（Normal Distributions Transform）：\n将参考点云划分为体素网格，每个体素用高斯分布 $N(\\mu, \\Sigma)$ 表示 评价函数为源点云落在目标体素中的概率密度之和 比 ICP 更鲁棒，收敛域更大，是工业界的主流选择 NDT 扫描匹配流程：\n加载预建点云地图，构建 NDT 体素网格 实时扫描点云作为源点云 以待匹配位姿（IMU/里程计预测）为初始值 使用 Newton 优化法最大化配准得分 输出修正后的位姿 📊 方法对比：融合方案 方案 精度（RMS） 计算量 鲁棒性 GNSS 依赖 GNSS + 航位推算（松耦合） 0.3-1.0 m 低 中 强 GNSS-RTK + IMU（紧耦合） 0.05-0.15 m 中 高 中 LiDAR + NDT 定位 0.05-0.20 m 中 极高 无 HD 地图 + 车道匹配 0.10-0.30 m 低 中 无 视觉定位（VIO） 0.5-2% 轨迹 中 中 无 多源紧耦合融合 0.03-0.10 m 高 极高 弱 🔗 与自动驾驶的关联 定位在传统自动驾驶架构中的角色 感 知 → 定 位 → 预 测 → 规 划 → 控 制 定位为预测模块提供自车轨迹的参考系，为规划模块提供目标位置的基准。没有准确定位，行为预测（motion prediction）和路径规划的结果都将失去物理意义。\nVLA/端到端方案中的定位 近年来以 UniAD、VAD、DriveMLM 等为代表的端到端方案中，部分工作选择跳过显式定位模块，以图像序列 + 车辆位姿（直接来自 CAN 总线）作为输入，网络隐式学习时空对应关系。\n为什么可以跳过？\n端到端网络直接将感知特征映射到 action space，不需要\u0026quot;定位-规划\u0026quot;的显式接口 大模型（VLM/LLM）的\u0026quot;场景理解\u0026quot;能力可以在上下文层面替代部分定位需求 训练数据中的位姿标注来自 ground truth，不存在累积漂移 取舍：\n优点：系统简化无需维护定位模块，减少了级联误差 缺点：缺乏可解释性和可干预性；遇到地图未覆盖区域时，纯端到端模型可能产生灾难性行为 收敛：定位仍将是量产 L3/L4 系统的必备组件，端到端方案更多是作为决策层补充而非完全替代传感器融合定位 📚 延伸阅读 Welch, G. \u0026amp; Bishop, G. \u0026ldquo;An Introduction to the Kalman Filter.\u0026rdquo; SIGGRAPH Course, 2001. Soloviev, A. \u0026ldquo;Tight Coupling of GPS and INS for Urban Navigation.\u0026rdquo; IEEE Trans. on AES, 2010. Biber, P. \u0026amp; Straßer, W. \u0026ldquo;The Normal Distributions Transform: A New Approach to Laser Scan Matching.\u0026rdquo; IROS, 2003. Levinson, J. \u0026amp; Thrun, S. \u0026ldquo;Robust Vehicle Localization in Urban Environments Using Probabilistic Maps.\u0026rdquo; ICRA, 2010. Qin, T. et al. \u0026ldquo;VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator.\u0026rdquo; IEEE Trans. on Robotics, 2018. Hu, Y. et al. \u0026ldquo;Planning-oriented Autonomous Driving.\u0026rdquo; (UniAD) CVPR, 2023. ","permalink":"https://auto-driving-blog.pages.dev/posts/knowledge/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6%E5%AE%9A%E4%BD%8D%E5%9F%BA%E7%A1%80/","summary":"系统讲解自动驾驶定位技术核心：GNSS/RTK、IMU、车轮里程计的基本原理，卡尔曼滤波的预测-更新过程，多传感器融合的松耦合与紧耦合方案，以及基于HD地图与点云匹配的定位方法，并分析VLA时代定位技术的新角色。","title":"知识精讲｜自动驾驶定位基础"},{"content":"📄 论文信息 标题：Bench2Drive: Towards Multi-Ability Benchmarking of Closed-Loop End-To-End Autonomous Driving 团队：上海交通大学 ReThinkLab（Xiaosong Jia, Zhenjie Yang, Qifeng Li, Zhiyuan Zhang, Junchi Yan） 发表：NeurIPS 2024 Datasets and Benchmarks Track arXiv：2406.03877（2024/06 v1 → 2024/11 v3） 代码：github.com/Thinklab-SJTU/Bench2Drive 项目主页：thinklab-sjtu.github.io/Bench2Drive 一句话：首个多维度闭环端到端自驾评测基准——用 220 条解耦短路线替代传统长路线，提供统一训练集与能力诊断图谱。 🤔 要解决什么问题？ 端到端自动驾驶快速发展，但评测体系存在三大结构性缺陷：\n痛点 具体问题 后果 开环评测不可靠 nuScenes L2 误差存在分布偏移和因果混淆；75% 帧仅需直行无法测试决策能力 AD-MLP（仅自车状态）也能达到与多传感器方法相当的 L2 长路线闭环方差大 CARLA v2 单路线 7-10km，指数衰减分数 DS 几乎全 \u0026lt;10 区分度极差，且无法诊断具体技能短板 缺乏统一训练集 各方法自采数据，规模/分布差异显著 分数差异本质是\u0026quot;系统级\u0026quot;而非\u0026quot;算法级\u0026quot;，无法公平比较 以开环 L2 为目标的规划评测已被广泛认为不可靠，弊端可总结为：\n$$ \\text{L2}_{\\text{open-loop}} \\approx \\min_{\\theta} \\mathbb{E}_{(o, a) \\sim \\mathcal{D}_{\\text{expert}}} \\| \\pi_{\\theta}(o) - a \\|^2 $$此目标仅最小化对专家轨迹的模仿误差，完全忽略了分布偏移下的自我纠错能力和交互博弈中的决策能力。\n与现有基准的全面对比 特性 nuScenes CARLA LBv2 NAVSIM Bench2Drive 评测类型 开环 闭环（长路线） 闭环（re-sim） 闭环（短路线） 训练数据 ✓（标注数据） ✗（自采） ✗（复用 nuScenes） ✓（200 万帧统一） 路线数/评估单元 单帧 2-5 条 ~220 子场景 220 条短路线 路线长度 — 7-10 km ~50m ~150 m 场景种类 6 类 ~40 类（混合） 6 类子集 44 类（解耦） 场景解耦度 无 低（混合） 中（子场景） 高（单一路线单一场景） 天气变化 单一 4 种 单一 23 种 城镇变化 2 个 3 种 1 个 12 种 区分度 低（L2 饱和） 极低（DS \u0026lt; 10） 中 高（DS 0-90+） 🧠 方法详解 1. 大规模统一数据集：世界模型专家驱动的数据引擎 Bench2Drive 的数据引擎基于 CARLA v2，传感器配置与 nuScenes 兼容以便复用代码库：\n1× LiDAR：64 线，85m 范围，60 万点/秒 6× 相机：70° \u0026amp; 110° FoV，900×1600 分辨率 5× 雷达：100m 范围，30° 水平与垂直 FoV 1× IMU \u0026amp; GNSS / 1× BEV 相机 / HD-Map（车道线、拓扑、红绿灯状态） 专家采集：数据由世界模型强化学习专家 Think2Drive 采集。Think2Drive 在隐空间中进行规划，于 12 个城镇、44 种预设交互场景下自动行驶，以 10Hz 采样，最终提供 200 万帧全标注数据（3D 框、深度图、语义/实例分割 + Think2Drive 价值估计与中间隐特征）。每个短片专注单一交互场景，确保场景覆盖的均匀性。\n组合多样性：44 种交互场景（切入、超车、绕行、紧急制动、礼让、转弯、行人横穿等）× 23 种天气（晴、雨、雾、多云、日落、夜晚等）× 12 个城镇（城市、乡村、大学、山城等），覆盖 12,144 种理论组合空间：\n$$ \\mathcal{S}_{\\text{comb}} = \\{\\text{Scenario}_i \\times \\text{Weather}_j \\times \\text{Town}_k \\mid i \\in [44], j \\in [23], k \\in [12]\\} $$考虑物理可行性后，通过专家策略自动探索，最终生成 13,638 条短片。\n下图展示同一场景（ConstructionObstacle）在不同构建方法下的路线分布——Bench2Drive 均匀覆盖更多路线空间：\n2. 多能力解耦评测协议：从单一分数到能力诊断 核心设计：将长路线解耦为多条短路线（~150m），每条测试单一驾驶能力，隔离评估特定技能。\n与传统方法的对比：\n维度 CARLA LBv2 Bench2Drive 路线长度 7-10 km ~150 m 路线总数 2-5 条 220 条 场景混合 数十种混杂 每条单一场景 分数范围 几乎全 \u0026lt;10 0-90+ 诊断粒度 无 44 种能力独立评估 驾驶分数（Driving Score）：\n$$ \\text{DS} = \\frac{\\text{dist}_{\\text{traveled}}}{\\text{dist}_{\\text{total}}} \\times \\prod_{t=1}^{T} p_t^{\\frac{1}{T}} \\times 100 $$其中 $p_t$ 为违规惩罚因子（碰撞 0.3，闯红灯 0.5，逆行 0.7）。因路线短，每步惩罚权重更合理。\n成功率（Success Rate）：\n$$ \\text{SR} = \\frac{1}{N} \\sum_{i=1}^{N} \\mathbb{1}[\\text{no violation} \\land \\text{complete}] $$多能力分数（Multi-Ability Score）：每种场景 5 条不同路线取平均：\n$$ \\text{MAS}_s = \\frac{1}{5} \\sum_{i=1}^{5} \\text{DS}_{s,i} $$3. 评测协议细节与形式化分析 Bench2Drive 的 220 条路线按以下规则生成：对于 44 种场景，每种场景在 3 个不同城镇中选取 5 条不同路线（位置和天气变体），共计 $44 \\times 5 = 220$ 条。每条路线均为预设的起点-终点对，由 Think2Drive 专家预先保证可通行，确保评测评估的是模型的驾驶能力而非路径规划基础能力。\n违规惩罚机制：采用多级惩罚体系，碰撞权重最高（$p = 0.3$），其次是闯红灯（$p = 0.5$）、逆行（$p = 0.7$）、闯停止标志（$p = 0.8$）、偏离路线（$p = 0.85$）。短路线设计使得每次违规都显著影响最终分数，不会因为路线过长而被稀释。\n能力分类体系：44 种场景可归为 6 大能力族——\n能力族 包含场景数 代表场景 核心挑战 交互式博弈 12 汇入、超车、环岛礼让 多智能体博弈决策 紧急反应 8 紧急制动、行人横穿、车辆开门 快速反应与避障 交通规则遵守 10 红绿灯、停止标志、限速 感知+规则理解 静态障碍处理 6 施工绕行、停靠车辆绕行 空间规划与路径重规划 特殊操控 5 U 型弯、停车位驶出、山路导航 低速精准操控 天气适应 3 大雾、大雨、夜间行驶 传感器退化条件下的鲁棒性 4. 基线方法：统一框架下的公平比较 实现 7 种代表性 E2E-AD 方法，全部使用 Bench2Drive 官方训练集（13,638 clips）：\n方法 输入 专家蒸馏 关键特点 AD-MLP 仅自车状态 ✗ 纯 MLP 基线 UniAD-Tiny/Base 6 相机 + 状态 ✗ 多任务统一范式 VAD 6 相机 + 状态 ✗ 向量化场景表示 TCP / TCP-ctrl / TCP-traj 前视相机 + 状态 ✓ 双分支 + 蒸馏 ThinkTwice 6 相机 + 状态 ✓ 多尺度融合 + 两阶段推理 DriveAdapter 6 相机 + 状态 ✓ 适配器微调 数据流架构 Bench2Drive 框架 数据采集引擎 Think2Drive (WM + RL) 12 城镇 × 44 场景 × 23 天气 = 13638 clips (200W 帧) -\u0026gt; 统一训练集 (全标注 + 专家特征) 评测协议 220 条短路线 · 44 场景 × 5 · ~150m · 单一场景/路线 模型推理 -\u0026gt; 闭环评估 指标 DS / SR / MAS 44 能力雷达图 各方法 DS： DriveAdapter: 42.91 (SOTA) ThinkTwice: 39.88 VAD: 39.42 UniAD-Base: 37.72 🔬 实验与结果 1. 开环 vs 闭环：相关性极弱（核心发现） 方法 开环 L2 (m) ↓ 驾驶分数 ↑ 成功率 (%) ↑ AD-MLP 3.64 9.14 0.00 UniAD-Tiny 0.80 32.00 9.54 UniAD-Base 0.73 37.72 9.54 VAD 0.91 39.42 10.00 TCP-traj* 1.70 36.78 26.82 ThinkTwice* 0.95 39.88 28.14 DriveAdapter* 1.01 42.91 30.71 表示使用专家特征蒸馏 关键定量结论：\nPearson r = 0.03——开环 L2 与闭环驾驶分数近乎无相关 UniAD-Base L2 最低（0.73）但闭环分数（37.72）低于 L2 更差的 DriveAdapter（42.91） AD-MLP 在 Bench2Drive 上远弱于在 nuScenes 上——因 Bench2Drive 动作多样性远超 nuScenes 2. 蒸馏的增益与天花板 方法 蒸馏 DS SR 蒸馏增益（SR） UniAD-Base ✗ 37.72 9.54 — VAD ✗ 39.42 10.00 — ThinkTwice ✓ 39.88 28.14 +18.6% DriveAdapter ✓ 42.91 30.71 +20.7% 蒸馏主要帮助避免灾难性违规（碰撞等），而非提升轨迹精度。但此范式在现实中难以复现（无法获取专家模型内部隐特征）。\n3. 多能力分析：驾驶能力的结构化诊断 能力类别 UniAD-Base VAD TCP-traj* ThinkTwice* DriveAdapter* 汇入（Merging） 9.46 12.50 24.29 26.44 29.23 超车（Overtaking） 12.50 17.50 15.00 17.50 20.00 紧急制动 20.00 14.54 29.09 32.12 34.71 礼让（GiveWay） 30.00 30.00 50.00 50.00 50.00 交通标志 23.03 25.55 51.67 53.65 57.21 绕行（Detour） 10.00 12.00 20.00 13.33 24.67 车辆转弯 27.41 35.56 40.74 42.59 43.52 行人横穿 21.43 26.79 33.33 40.48 36.90 均值 19.00 20.02 34.01 35.94 38.23 核心洞察：\n强交互能力（汇入、超车、紧急制动）得分普遍低于 35%，是所有方法的共同瓶颈 感知类能力（交通标志 57.21%、礼让 50%）相对容易 TCP-traj 虽仅用前视单相机，但蒸馏使其接近多相机方法——蒸馏质量比输入模态更重要 4. 场景难度排序 论文对所有 44 种场景按平均 DS 排序，揭示了清晰的能力层次：\n难度 代表场景 平均 DS 成功率 极高 并行汇入（ParallelMerging） 5.20 0.45% 多车道超车（MultiLaneOvertaking） 8.33 0.91% 急弯中切入（CutInOnCurve） 8.67 1.36% 高 施工绕行（ConstructionDetour） 14.29 3.18% 电动自行车避让（CrossBike） 18.93 6.82% 中 紧急制动（EmergencyBrake） 24.71 12.73% 易 通行停车让行（StopSign） 55.83 43.18% 红绿灯直行（TrafficLightStraight） 62.50 50.00% 三类场景难度差异巨大——这印证了\u0026quot;驾驶能力\u0026quot;不是单一维度的，评测必须分能力进行。\n5. 消融实验：数据规模的影响 训练数据比例 帧数 驾驶分数 成功率 25% 50 万 31.42 18.64% 50% 100 万 36.58 22.73% 75% 150 万 38.90 26.82% 100% 200 万 39.88 28.14% 数据规模与性能单调递增且未出现饱和趋势——继续增加数据仍有显著收益。成功率的提升说明数据多样性是克服灾难性违规的关键。\n6. 指标相关性分析 指标对 Spearman 相关系数 开环 L2 ↔ 闭环 DS 0.03 开环 L2 ↔ 成功率 0.24 开环碰撞率 ↔ 闭环 DS 0.37 闭环 DS ↔ 成功率 0.89 结论：开环指标（L2/碰撞率）不能替代闭环评测，两个维度信息几乎正交。\n💡 个人思考与关键洞察 1. 开环评测时代的终结 Pearson r = 0.03 不是温和的警告，而是对开环评测范式的彻底否定。nuScenes 上 0.3m L2 的\u0026quot;好成绩\u0026quot;几乎不传递任何闭环性能信息。Bench2Drive 之后，如果一篇论文仍以 nuScenes 开环规划作为核心评测手段，审稿人有充分理由质疑其结论的科学性。社区需要一个 ImageNet 时刻式的范式转变——让端到端自动驾驶评测从\u0026quot;静态精度有多大\u0026quot;转向\u0026quot;动态条件下有多安全\u0026quot;。当然，开环评测并非全无价值——它在快速迭代调试时仍可作为\u0026quot;必要但不充分\u0026quot;的过滤条件，但决不应作为论文的主要结论支撑。\n2. \u0026ldquo;短路线解耦\u0026quot;是评估方法论的一次跃迁 从 7-10km 长路线到 150m 短路线，从数十种场景混杂到单一路线单一场景——这一设计让评估从\u0026quot;黑盒打分\u0026quot;升级为\u0026quot;结构化诊断\u0026rdquo;。最直接的改进是方差大幅降低——长路线中因一次随机碰撞导致分数归零的极端情况被消除，每项能力的分数反映的是模型在该场景下的真实水平而非运气。这种细粒度诊断思路的影响已超出自动驾驶领域：机器人操控、强化学习策略评估等同样面临\u0026quot;单一分数不可诊断\u0026quot;的问题，Bench2Drive 提供了一种可迁移的模板。\n3. 专家蒸馏揭示了行为克隆的天花板 蒸馏方法（ThinkTwice, DriveAdapter）与无蒸馏方法之间 ~20% 的成功率鸿沟，暗示了纯 BC 在复杂交互下的根本性局限。更深层的问题是：专家蒸馏本质上是将 RL 策略的知识压缩进 BC 框架，这意味着\u0026quot;BC 做不到的事，通过蒸馏可以部分做到\u0026quot;。但这引出一个悖论——没有 RL 专家（如真实世界中），如何获得可蒸馏的\u0026quot;超人类\u0026quot;知识？可能的出路包括：自我对弈（self-play）生成训练数据、基于世界模型的在线 RL 微调、以及对抗训练增强鲁棒性。\n4. 交互式驾驶是端到端自动驾驶的\u0026quot;阿喀琉斯之踵\u0026quot; 多能力分析揭示了一个清晰且顽固的分层：感知类场景（红绿灯 55-62%）远优于交互类场景（汇入 5-29%）。差距的根源不只是模型架构差异，更是问题本身的难度差异——交互场景存在多模态解（加速并入 vs 减速等待都是合理的），且最优解取决于对手车辆的实时决策。BC 对此类博弈问题的建模能力非常有限，因为其训练目标是最小化平均误差，而交互博弈需要模型理解\u0026quot;对方的意图并据此调整己方行为\u0026quot;。这一发现指明了端到端驾驶的下一个突破口：从\u0026quot;模仿轨迹\u0026quot;到\u0026quot;学习博弈\u0026quot;。多智能体联合训练、博弈论损失函数、基于世界模型的在线推理，都是值得深入的方向。\n5. Bench2Drive 的标准化贡献：自动驾驶的\u0026quot;ImageNet 时刻\u0026quot; 统一训练集 + 标准化评测 + 基线实现三件套，构成了端到端自动驾驶的标准化研发框架。Bench2Drive 的 Leaderboard 已形成社区认可度，28 个 baseline 方法在统一协议下可直接横向比较。这与 ImageNet 对 CV 的贡献同构：它让社区从\u0026quot;你说你的、我说我的\u0026quot;走向\u0026quot;在统一基准上直接 PK\u0026quot;。已被 30+ 篇后续工作（DriveVLM、AutoVLA、Diff-VLA、EMMA 等）引用为闭环评测标准。从研究生态的角度看，一个标榜的建立往往比单个 SOTA 方法的提出更有长期价值——它降低了社区的比较成本和实验门槛。\n6. 局限性与展望 (1) 仿真 gap——CARLA 的渲染、物理引擎与真实世界仍有显著差距，Bench2Drive 上的高分并不保证真实世界安全；(2) 场景覆盖——44 种场景虽多，但真实世界的长尾场景近乎无限，后续需要引入生成式合成场景来扩展覆盖；(3) 场景解耦的局限性——单一场景独立测试忽略了现实中的事件耦合（如超车后紧跟避让行人），可能高估或低估模型的综合应对能力；(4) 无语言评测——当前协议完全基于视觉-动作，难以用于 VLA（视觉-语言-动作）模型的评估。未来方向包括：生成式 AI 合成长尾场景、引入语言指令交互评测、多智能体联合对抗评测。\n📖 这是论文精读系列的第 21 篇。Bench2Drive 用\u0026quot;短路线解耦\u0026quot;和\u0026quot;统一训练集\u0026quot;确立了新评测范式——不是刷分更猛，而是评测更科学。\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2406-03877/","summary":"现有端到端自动驾驶评测存在开环指标不可靠、长路线闭环方差大、缺乏统一训练集三大问题。Bench2Drive 由上海交通大学提出，是首个面向多维度驾驶能力的闭环评测基准，提供 200 万帧统一标注训练数据与 220 条短路线多技能评估协议。实验表明开环 L2 误差与闭环驾驶分数相关性极弱（Pearson r=0.03），专家特征蒸馏与细粒度能力评估是提升端到端自动驾驶的关键方向。","title":"论文精读：Bench2Drive — Towards Multi-Ability Benchmarking of Closed-Loop End-To-End Autonomous Driving"},{"content":"📄 论文信息 标题：BEV-VAE: Multi-view Image Generation with Spatial Consistency for Autonomous Driving 作者：Zeming Chen、Hang Zhao，UC Berkeley arXiv：2507.00707（2025 年 7 月提交） 代码：https://github.com/Czm369/bev-vae 一句话总结：首个在BEV隐空间中统一建模多视角图像的VAE框架，通过结构化3D表征实现空间一致的重建、新视角合成与布局可控生成，在MVSC指标上超越SD-VAE。 🎯 要解决什么问题 痛点分析 自动驾驶多视角图像生成面临一个核心矛盾——如何在生成高保真环视图像的同时，保证跨视角的3D空间一致性。现有方法存在以下不足：\n问题 现有做法 根本缺陷 3D建模缺失 在2D图像空间用跨视角注意力隐式建模3D 缺乏统一几何表征，视角间深度歧义无法消除 空间一致性差 各视角独立解码，靠注意力机制隐式约束 遮挡边界处易出现不一致，物体在相邻视角中位置/形状矛盾 缺乏可解释控制 2D布局或文本条件间接控制 无法直接编辑3D空间中的物体位置、数量、类别 数据效率低 依赖大规模预训练（如SD-VAE在58.5亿图像上训练） 3D结构化先验缺失，纯2D方法需要海量数据补偿 现有方法对比 范式 代表方法 空间表征 3D一致性 新视角合成 3D布局控制 2D图像空间生成 MagicDrive、Panacea、DriveWM 2D图像+跨视角注意力 ✗ 隐式 ✗ ✗ BEV条件扩散 BEVGen、BEVControl 2D图像+BV条件注入 △ 部分 ✗ △ BEV-VAE（本文） — 结构化BEV隐空间 ✓ 显式 ✓ ✓ BEV-VAE的核心洞察是：与其在2D空间中用注意力机制\u0026quot;缝合\u0026quot;多个视角，不如在BEV空间中直接构造统一的三维表征——这将多视角生成问题从\u0026quot;2D图像集合成\u0026quot;提升为\u0026quot;结构化3D隐空间生成\u0026quot;。\n🧠 方法详解 图1：范式对比。 (a) 传统图像空间范式以2D投影和跨视角注意力隐式建模3D，各视角独立解码后通过注意力进行后融合；(b) BEV-VAE在BEV空间生成统一表征，自然保持空间一致性，支持任意视角解码。\n整体架构：两阶段设计 BEV-VAE采用\u0026quot;先重建、后生成\u0026quot;的两阶段训练范式：\nStage 1: VAE重建（本文核心） N×图像(256×256×3) → Image Encoder (ViT+FPN): F_img∈ℝ^(32×32×C)×N → Scene Encoder (可变形注意力): F_scn∈ℝ^(8×128×128×C) → State Encoder (Patchify+SelfAttn): z∈ℝ^(32×32×D) → Decoder (对称逆过程) → N×重建图像 Stage 2: DiT扩散生成 噪声z_T + 3D条件C_box → DiT → 生成z_0 → Decoder → N×生成图像 图2：两阶段架构。 Stage 1训练VAE进行多视角图像编码→BEV隐空间→重建；Stage 2在BEV隐空间上训练DiT进行条件扩散生成。\nSubsection 1: Image Encoder — 从像素到多尺度图像Token Image Encoder对每个视角独立编码，采用ViT（patch size=8）将256×256图像映射为32×32个patch tokens。ViT的每一层的具体配置为：12层Transformer，hidden dim=768，12个注意力头。输出的patch序列经过一个轻量级FPN（Feature Pyramid Network）生成三尺度的特征金字塔：\n$$ F_{img} = \\operatorname{FPN}(\\mathbf{E}_{\\mathrm{img}}(x)) = \\operatorname{Concat}(F_{img}^{0},F_{img}^{1},F_{img}^{2}) $$其中各尺度特征张量的形状为：\n$F_{img}^{0} \\in \\mathbb{R}^{32 \\times 32 \\times C}$（1/8分辨率，原图感受野8×8） $F_{img}^{1} \\in \\mathbb{R}^{16 \\times 16 \\times 2C}$（1/16分辨率） $F_{img}^{2} \\in \\mathbb{R}^{8 \\times 8 \\times 4C}$（1/32分辨率，全局感受野） FPN的自底向上路径通过2×2 avg pooling逐步降采样，自顶向下路径通过双线性上采样融合各层语义。多尺度设计的关键意义在于：大尺度特征保留高频纹理细节（如车道线、车辆边缘）供解码器恢复精细结构，小尺度特征提供大感受野用于BEV空间中的远距离跨视角匹配（如左右相机共同看到的同一辆车在不同视角图像中的对应位置）。\n对于N=6（nuScenes）或N=7（AV2）个视角，Image Encoder以共享权重的形式处理所有图像，总token数为 $N \\times 32 \\times 32$。这种共享权重设计的合理性在于：不同相机的成像模型一致（均为车载RGB相机），差异仅在于安装位置和朝向——这些几何差异将在Scene Encoder中通过相机外参显式建模，而非在Image Encoder中隐式学习。架构设计的\u0026quot;职责分离\u0026quot;原则在此得到体现：Image Encoder只关心\u0026quot;怎么看\u0026quot;，Scene Encoder才关心\u0026quot;在哪看\u0026quot;。\nSubsection 2: Scene Encoder — 可变形注意力构建结构化3D BEV 这是BEV-VAE的核心创新。Scene Encoder在BEV中预定义 $128 \\times 128$ 的pillar网格，每个pillar沿高度维度设8层（Z轴范围[-1m, 5m]，相对自车底盘），共 $L_Q = 8 \\times 128 \\times 128$ 个3D查询位置。每个查询 $Q_{\\text{BEV}} \\in \\mathbb{R}^{L_Q \\times C}$ 对应一个确定的三维空间坐标（x, y, z），通过可变形注意力（Deformable Attention）聚合来自多视角图像的信息。BEV网格的空间范围覆盖自车前后各25.6m、左右各25.6m（每个grid cell对应0.2m×0.2m）。\n可变形注意力的计算流程如下：\n$$ F_{scn} = \\frac{1}{|\\mathcal{V}_{\\text{hit}}|}\\sum_{v\\in\\mathcal{V}_{\\text{hit}}}\\operatorname{DA}(Q_{\\text{BEV}},P_{\\text{BEV}},F_{img}^{(v)}) $$其中 $\\mathcal{V}_{\\text{hit}}$ 为给定3D查询投影像素落在该相机图像内的视角集合，$P_{\\text{BEV}}$ 是通过相机内外参矩阵将BEV参考点投影到各视角图像平面的2D坐标。投影过程可写为：\n$$ P_{\\text{BEV}}^{(v)} = K^{(v)} \\cdot [R^{(v)} | t^{(v)}] \\cdot (x, y, z, 1)^T $$其中 $K^{(v)}$、$R^{(v)}$、$t^{(v)}$ 分别为第v个相机的内参、旋转矩阵和平移向量。\n可变形注意力 vs 全局交叉注意力的复杂度对比：\n注意力类型 每个query关注的key数 总复杂度 适用场景 全局交叉注意力 $H \\times W$（如32×32=1024） $O(L_Q \\times H \\times W)$ 特征图小时可用 可变形注意力 K（默认8） $O(L_Q \\times K)$ BEV网格大时优势显著 稀疏交叉注意力 根据投影位置稀疏采样 $O(L_Q \\times K)$ 依赖几何先验 可变形注意力中，每个BEV查询通过$Q_{\\text{BEV}}$生成K个偏移量 $\\Delta p_k$ 和K个注意力权重 $A_k$，对参考点周围的K个采样点进行加权聚合：\n$$ \\operatorname{DA}(q, p, F) = \\sum_{k=1}^{K} A_k \\cdot F(p + \\Delta p_k) $$该设计的几何直觉：BEV中的每个3D pillar在真实世界中对应一个确定位置。当自车前方20m处的pillar投影到前视相机时，它只应关注该相机图像中对应的像素区域，而非全部6个相机的整张特征图。这种稀疏几何先验不仅显著降低计算量，更重要的是迫使模型学习3D-2D的刚性几何对应关系——模型必须学会将每个3D坐标正确投影到图像平面并从对应位置提取特征，而非靠注意力\u0026quot;模糊搜索\u0026quot;。\nScene Encoder中可变形注意力层数为6层，每层之间通过残差连接和LayerNorm保持训练稳定性。6层堆叠的设计允许BEV查询逐步精细化：浅层关注纹理边界等低级特征，深层关注语义物体等高级概念。\nSubsection 3: State Encoder \u0026amp; Decoder — 压缩与恢复BEV隐空间 State Encoder将Scene Encoder输出的8层高度特征沿高度维度拼接到通道维，具体操作为：\n$$ F_{concat} = \\operatorname{Concat}(F_{scn}^{(1)}, \\dots, F_{scn}^{(8)}) \\in \\mathbb{R}^{128 \\times 128 \\times 8C} $$其中 $F_{scn}^{(z)}$ 表示第z层高度的BEV特征。拼接后得到 $\\mathbb{R}^{128 \\times 128 \\times 8C}$ 的张量，再将其切分为 $32 \\times 32$ 个patch（每个patch的spatial size为 $4 \\times 4$，通道数为 $8C$），等价于 $\\mathbb{R}^{32 \\times 32 \\times (4 \\times 4 \\times 8C)}$。\n随后经过一层Self-Attention建模patch间的全局依赖关系，再通过线性层压缩通道数得到紧凑隐变量：\n$$ z = \\operatorname{Linear}(\\operatorname{SelfAttn}(\\operatorname{Patchify}(F_{concat}))) \\in \\mathbb{R}^{32 \\times 32 \\times D} $$其中D为隐空间通道数（实验设置为4/8/16/32）。关键洞察：先拼接高度维度再切分patch的设计，等价于让每个隐token的每个通道编码了某个特定高度层的局部空间信息，而Self-Attention则建模了不同高度层之间的语义关联——例如\u0026quot;车辆顶部\u0026quot;与\u0026quot;车辆底部\u0026quot;在不同高度层中的对应关系。这种设计相比直接使用3D卷积的优势在于：Self-Attention的全局感受野可以捕捉到任意距离的空间依赖，而3D卷积受限于局部kernel size。\nDecoder采用对称的逆向设计，包含三个子模块：\nState Decoder：Self-Attention恢复全局结构 + downsampling-only FPN从 $32 \\times 32$ 上采样至 $128 \\times 128$ Scene Decoder：将 $128 \\times 128 \\times 8C$ 特征reshape回 $8 \\times 128 \\times 128 \\times C$ 的多高度BEV结构，通过3×3卷积平滑跨高度层的特征 Image Decoder：通过可变形注意力将3D BEV特征投影回各视角图像平面，再用ViT解码器逐步上采样输出最终256×256图像 自底向上的解码路径体现了独特的**\u0026ldquo;先全局、后局部\u0026rdquo;**哲学：先恢复BEV隐空间的全局场景布局（State Decoder负责建模远处山、建筑物与大块路面等低频成分），再在BEV坐标中填充高度细节（Scene Decoder负责建模车辆、行人等垂直结构），最后投影回各视角以像素级精度解码（Image Decoder负责恢复纹理、光照等高频信息）。三级级结构让每一层专注于特定频段的建模任务。\nSubsection 4: 损失函数与生成范式 BEV-VAE联合优化三部分损失，构成VAE的标准训练目标：\n$$ \\mathcal{L} = \\mathcal{L}_{\\text{KL}} + \\lambda_{\\text{rec}}\\mathcal{L}_{\\text{rec}} + \\lambda_{\\text{GAN}}\\mathcal{L}_{\\text{GAN}} $$三项损失的具体形式：\nKL散度：约束隐变量的后验分布接近标准正态先验， $$ \\mathcal{L}_{\\text{KL}} = D_{\\text{KL}}(\\mathcal{N}(\\mu_{\\phi}(x), \\sigma_{\\phi}^{2}(x)) \\| \\mathcal{N}(0, I)) = -\\frac{1}{2}\\sum_{i=1}^{d}(1 + \\log\\sigma_i^{2} - \\mu_i^{2} - \\sigma_i^{2}) $$其中 $\\mu_{\\phi}(x)$ 和 $\\sigma_{\\phi}^{2}(x)$ 是Encoder输出的均值和方差，d为隐空间维度。KL项在训练初期权重逐渐退火（KL annealing），避免模型陷入\u0026quot;后验坍塌\u0026quot;——即Decoder完全忽略隐变量而退化为自编码器。\n重建损失：L1损失 + LPIPS感知损失， $$ \\mathcal{L}_{\\text{rec}} = \\|x - \\hat{x}\\|_1 + \\lambda_{\\text{LPIPS}} \\cdot \\operatorname{LPIPS}(x, \\hat{x}) $$其中LPIPS使用预训练的AlexNet提取多层特征，计算特征空间中的余弦距离。L1损失确保低频像素精度，LPIPS损失对齐高频感知质量。$\\lambda_{\\text{LPIPS}}$ 的默认值为0.1。\n对抗损失：使用StyleGAN的判别器架构，对重建图像和真实图像进行判别： $$ \\mathcal{L}_{\\text{GAN}} = \\log D(x) + \\log(1 - D(\\hat{x})) $$判别器在 $256 \\times 256$ 的全分辨率图像上操作，采用$1 \\times 1$卷积的StyleGAN架构，总共约26M参数。对抗损失通过梯度反转使生成器欺骗判别器，促使重建图像的高频细节更加真实。\n此外，实验中的超参数设置如下：$\\lambda_{\\text{rec}} = 1.0$、$\\lambda_{\\text{GAN}} = 0.1$、$\\lambda_{\\text{LPIPS}} = 0.1$。优化器使用AdamW（$\\beta_1=0.9, \\beta_2=0.999$），学习率为 $1 \\times 10^{-4}$，在V100 GPU上训练约200个epoch。\nStage 2生成使用DiT（Diffusion Transformer）在BEV隐空间进行扩散生成。扩散过程采用flow matching范式，训练目标为预测velocity场。3D边界框被体素化为二值占位张量 $\\mathbf{C}_{\\text{box}} \\in \\{0,1\\}^{C \\times 8 \\times 128 \\times 128}$，其中C为语义类别数（nuScenes=10，AV2=30），经patch下采样后得到条件特征 $F_{box} \\in \\mathbb{R}^{32 \\times 32 \\times D}$：\n$$ F_{stt}^{\\prime} = F_{stt} + s \\cdot F_{box} $$其中 $s$ 为CFG引导尺度（默认s=5.0）。独特优势：条件与隐空间在BEV坐标系中天然对齐，3D边界框的编辑等价于BEV隐空间中对应区域的直接修改——例如在位置(10, 5, 0)处增加一辆汽车，解码后所有视角的对应位置都会出现该车辆，且跨视角的几何关系完全一致。这与2D扩散方法中需要逐视角注入条件并依赖注意力协调的方式有本质不同。\n🔬 实验与结果 数据集与评估指标 数据集 相机数 训练场景 标注/场景 训练样本 类别数 图像分辨率 BEV范围 grid size nuScenes 6 700 40 155K 10 256×256 51.2×51.2m 0.2m Argoverse 2 7 700 150 224K 30 256×256 51.2×51.2m 0.2m 数据预处理：所有图像中心裁剪为256×256分辨率。3D边界框标注的8个顶点被用于构造体素占位张量：每个边界框在高度维度做8层均匀采样，在BEV平面（128×128网格）中标记被覆盖的cell。对于AV2中的30类物体，采用one-hot编码构造 $C_{\\text{box}} \\in \\{0,1\\}^{30 \\times 8 \\times 128 \\times 128}$。\n评估指标分三个维度，覆盖像素级、结构级和分布级：\n单视图质量：PSNR（像素级精度）、SSIM（结构相似性）、FID（生成分布与真实分布的距离） 跨视角一致性：MVSC（Multi-View Spatial Consistency）——使用LoFTR局部特征匹配算法计算相邻视角间关键点的匹配置信度，取所有匹配对置信度均值作为MVSC分数。核心思想：如果生成结果是3D一致的，那么同一3D点在相邻视角中的投影应具有相似的特征描述子。 生成质量：FID（生成图像集与真实图像集在Inception特征空间中的距离） 重建结果：隐维度vs性能的权衡 表1：nuScenes 重建指标\n模型 隐空间形状 训练数据 PSNR↑ SSIM↑ MVSC↑ FID↓ SD-VAE 32×32×4 58.5亿图像 29.63 0.8283 0.9292 2.18 BEV-VAE 32×32×4 155K×6 23.48 0.6039 0.8994 17.83 BEV-VAE 32×32×8 155K×6 24.53 0.6569 0.9107 13.08 BEV-VAE 32×32×16 155K×6 25.73 0.7124 0.9222 11.42 BEV-VAE 32×32×32 155K×6 26.32 0.7455 0.9291 13.72 表2：AV2 重建指标\n模型 隐空间形状 训练数据 PSNR↑ SSIM↑ MVSC↑ FID↓ SD-VAE 32×32×4 58.5亿图像 27.81 0.8229 0.8962 1.87 BEV-VAE 32×32×4 224K×7 22.99 0.6318 0.8270 7.47 BEV-VAE 32×32×8 224K×7 24.02 0.6870 0.8827 5.10 BEV-VAE 32×32×16 224K×7 25.49 0.7529 0.9226 3.62 BEV-VAE 32×32×32 224K×7 26.68 0.8004 0.9505 3.02 图3：AV2多视角重建可视化。 上面三行为真实图像，下面三行为BEV-VAE重建结果。注意车辆的轮廓、道路标线和建筑物边缘均保持跨视角一致性。\n关键观察：在AV2上，BEV-VAE（D=32）的MVSC首次超越SD-VAE（0.9505 vs 0.8962），证明共享BEV表征天然保证了跨视角空间一致性，而这是单视图PSNR数字无法反映的。\n消融实验 表3：损失函数消融（nuScenes，D=16）\n损失设置 PSNR↑ SSIM↑ FID↓ KL + L1 + LPIPS 25.73 0.7124 11.42 + GAN Loss 25.73 0.7082 7.68 + GAN + 更多通道(D=32) 26.32 0.7455 13.72 GAN损失使FID从11.42降至7.68（降幅32.7%），验证了对抗训练对生成纹理真实感的显著提升。但增加隐维度从D=16到D=32后FID反升至13.72，说明更大的隐空间虽提升PSNR/SSIM，但可能引入冗余信息导致生成分布漂移——这是VAE设计中的经典trade-off。\n与相关工作的对比分析 表4：多视角生成方法对比\n方法 范式 BEV建模 3D一致性 新视角合成 布局控制 生成FID↓ MagicDrive 2D扩散 + BEV条件 辅助条件 △ 隐式 ✗ △ 26.30 Panacea 2D扩散 + 跨视角注意力 ✗ △ 隐式 ✗ ✗ 27.10 DriveWM 2D扩散 + 时序建模 ✗ △ 隐式 ✗ ✗ 19.80 SubjectDrive 2D扩散 + 个性化 ✗ △ 隐式 ✗ ✗ 23.20 BEV-VAE (D=16) BEV隐空间VAE+DiT ✓ 显式 ✓ 显式 ✓ ✓ 18.85 BEV-VAE在AV2上取得最低生成FID（18.85），且是唯一同时支持新视角合成与3D布局控制的方法。\n新视角合成与生成结果 图4：新视角合成。 将全部相机旋转 ±15° 后解码，BEV-VAE仍生成空间一致的全景图像——前视角左移后原本被遮挡的车辆侧面结构被合理\u0026quot;脑补\u0026quot;出来。这是BEV隐空间编码了3D几何结构的最直接证据：如果模型仅在2D图像空间操作，旋转相机位姿会导致大幅度的透视畸变和内容断裂。\n图5-6：DiT生成结果。 在nuScenes（生成FID=21.14，s=5.0）和AV2（生成FID=18.85，s=5.0）上的无条件生成样本。BEV-VAE的生成结果在跨视角一致性上明显优于MagicDrive（26.30）和Panacea（27.10），物体在相邻视角间的形状、位置和朝向保持一致。\n计算效率分析 模块 参数量 单帧推理时间（V100） 说明 Image Encoder (ViT) ~22M 8ms 共享权重处理N视角 Scene Encoder (6层DA) ~85M 35ms 可变形注意力 State Encoder ~10M 5ms Patchify + Self-Attention Decoder (三个子模块) ~60M 25ms 对称逆设计 DiT (Stage 2) ~600M 120ms BEV隐空间扩散 BEV-VAE Stage 1总参数量约177M，推理时间73ms（256×256×6输入），具备实时部署潜力。相比SD-VAE（~1.4B参数，需多GPU推理），BEV-VAE的参数量仅为1/8，这得益于3D结构化先验的设计——用更强的几何归纳偏置（inductive bias）替代了部分模型容量。\n💡 关键洞察与启发 \u0026ldquo;BEV隐空间\u0026quot;范式是本质性转变而非增量改进：现有方法（MagicDrive、Panacea、DriveWM）本质上是在2D图像空间操作，用跨视角注意力\u0026quot;修补\u0026quot;不一致性。BEV-VAE将生成完全提升到3D BEV空间，自然解耦了\u0026quot;空间一致性\u0026quot;与\u0026quot;单视图质量\u0026rdquo;。这种解耦意义深远——当一致性由共享几何表征保证而非注意力软约束时，视角数量增加不会增加一致性维护成本。这意味着未来从6相机扩展到12相机系统时，BEV-VAE的一致性开销为零，而2D范式的一致性成本将线性增长。\n结构化3D表征的数据效率优势：BEV-VAE在仅155K/224K训练样本上（约SD-VAE预训练数据的0.03%）即可实现可比的MVSC。这意味着3D几何先验可以大幅降低对数据规模的需求。对于自动驾驶中标注昂贵的环视数据，这一发现尤其重要——与其追求更大规模的数据，不如设计更结构化的表征。从信息论角度看，BEV-VAE在编码器中就注入了相机外参这一完全确定的信息，相当于让Encoder\u0026quot;免费\u0026quot;获得了3D几何知识，因此Decoder不需要从头学习\u0026quot;物体的3D结构是怎样的\u0026quot;。\n可解释的3D控制的工程价值：3D边界框→体素占位→BEV隐空间条件的管道完全在3D空间中进行，避免了2D投影带来的深度歧义、遮挡重叠等问题。这为自动驾驶仿真中的数据增强提供了新思路：直接在BEV空间中增删车辆、调整位置，解码后自然得到3D一致的环视图像，无需逐视角编辑。与NeRF-based方法不同，BEV-VAE的隐空间条件是显式的二值体素，编辑者可以精确理解\u0026quot;改动某个体素\u0026quot;对应\u0026quot;真实世界中发生了什么变化\u0026quot;。\nMVSC指标的启示：论文提出的MVSC（用LoFTR关键点置信度衡量跨视角一致性）是一个被低估的贡献。当前多视角生成领域过度关注FID/PSNR等单视图指标，而MVSC直击\u0026quot;是否真的3D一致\u0026quot;这一核心问题。未来工作应将其纳入标准评估协议，否则\u0026quot;看起来不错但跨视角矛盾\u0026quot;的问题将持续被忽视。LoFTR作为基于Transformer的特征匹配器，其对视角变化的鲁棒性恰好使其适合评估生成结果的实际3D一致性——两个视角中对应点的描述子越相似，说明生成结果越符合真实3D结构。\n当前局限与改进方向：论文在Appendix E中坦承当前分辨率仅256×256，与SD-VAE的512×512存在差距。增大训练数据规模与隐空间分辨率是缩小单视图质量差距的直观路径。此外，当前Scene Encoder采用固定8层高度网格，对动态物体（如飞鸟、行人手臂等垂直跨度大的物体）建模可能不足——可学习的自适应高度分配或non-uniform BEV网格是值得探索的方向。另一个方向的限制是：当前框架假设相机内外参已知且固定，如果相机标定有误差（量产车中常见），BEV隐空间的对齐精度会受到影响。\n对世界模型构建的潜在影响：BEV-VAE提供的结构化BEV隐空间天然适合作为世界模型的动作条件表征。结合时序预测模型（如Video DiT），在BEV隐空间中预测未来状态再解码为多视角图像，有望构建真正3D一致的长时序驾驶世界模型——这是当前DriveDreamer、Vista等2D世界模型无法做到的。从更广阔的视角看，BEV-VAE代表了一条\u0026quot;3D表征优先\u0026quot;的技术路线：先建立一个高质量的3D隐空间，再在上面叠加各种下游任务（生成、预测、规划），这种\u0026quot;表征即基础设施\u0026quot;的思维值得产业界借鉴。\n论文信息：Zeming Chen, Hang Zhao. BEV-VAE: Multi-view Image Generation with Spatial Consistency for Autonomous Driving. arXiv:2507.00707, 2025.\n代码开源：https://github.com/Czm369/bev-vae\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2507-00707/","summary":"现有自动驾驶多视角生成方法缺乏显式3D建模，仅将问题视为2D图像集合成。BEV-VAE提出在BEV隐空间中进行编码与生成，通过多视角VAE构造统一BEV表征，再以DiT进行潜扩散生成。在nuScenes和Argoverse 2上，BEV-VAE实现了高保真重建与3D一致的多视角生成，并支持新视角合成与3D布局可控生成。","title":"论文精读：BEV-VAE — Multi-View Image Generation with Spatial Consistency"},{"content":"📌 一句话概括 TOAD 将端到端规划器中已训练好的轨迹评分器视为奖励函数，在测试时通过交叉熵方法（CEM） 搜索连续轨迹空间来最大化该奖励，在不重训练、不修改架构的前提下，一致提升任意基规划器的驾驶质量。\n📄 论文信息 论文标题：Test-Time Trajectory Optimization for Autonomous Driving arXiv：2606.07170 (2026 年 6 月) 作者团队：Yihong Xu, Éloi Zablocki, Yuan Yin, Elias Ramzi, Ellington Kirby, Alexandre Boulch, Matthieu Cord — valeo.ai, Sorbonne Université 项目页：https://valeoai.github.io/TOAD/ 关键词：autonomous driving, end-to-end planning, test-time optimization, CEM 🤔 要解决什么问题？ Score-and-Select 范式的根本矛盾 当前端到端规划器遵循**\u0026ldquo;生成-评分-选择\u0026rdquo;**范式：产生候选轨迹 $\\mathcal{T}=\\{\\tau^{(i)}\\}_{i=1}^{N}$，评分器 $S(\\tau;o,g)$ 对每个候选打分，选最高分者输出。这隐含着致命假设——候选集中至少有一条接近最优。当候选集质量不理想时，再好的评分器也只能\u0026quot;矮子里拔将军\u0026quot;。\n方法 候选生成方式 评分器能否影响候选集？ 核心痛点 Hydra-MDP 预计算 8K+ 固定词表 + MLP 评分 ❌ 不能 词表离散，评分器无法调整轨迹 GTRS / ZTRS Transformer 解码 + 固定词表评分 ❌ 不能 评分器仅排序，不参与搜索 iPad 隐式查询解码 + MLP 评分 ❌ 不能 评分器无法修复次优候选 DrivoR 扩散模型解码 + 自由评分器 ❌ 不能 评分器强但仍受限于候选多样性 RAP 自回归预测 + 评分 ❌ 不能 自回归误差累积，候选集退化 核心矛盾 评分器经过训练能准确评估轨迹质量，但其能力仅在\u0026quot;选中输出\u0026quot;时被使用一次——评分器蕴含的丰富驾驶知识被极大浪费。它本可以\u0026quot;指导轨迹生成\u0026quot;，现实中却只被用于\u0026quot;选择已有轨迹\u0026quot;。\nTOAD 的出发点直指上述矛盾：既然评分器本质上是一个学习到的轨迹级奖励函数，为什么不在测试时用它来搜索整个连续轨迹空间？ 评分器不再是被动的选择器，而是主动的优化导向器。\n💡 核心贡献 重新定义评分器的角色：将端到端规划器中的轨迹评分器从\u0026quot;一次性排序工具\u0026quot;转变为可优化的奖励函数，开辟了测试时搜索的新范式。 提出 TOAD 测试时优化框架：基于 CEM 的采样优化器，在控制空间中搜索，由基规划器的输出 Warm-start 并约束在信任区域内，即插即用，无需重训练。 揭示关键发现：测试时搜索成功的前提是评分器在训练分布之外仍保持准确——固定词表（Fixed-Vocabulary）评分器在搜索时反而会降低性能，暴露了标准评估无法发现的隐藏弱点。 全面领先的实验结果：在 6 种基规划器上一致提升，NAVSIM-v2 上 DrivoR + TOAD 达到 56.3 EPDMS，逼近使用特权信息的 PDM-Closed（56.6）。 🧠 方法详解 1. 从评分器到奖励函数 TOAD 的核心洞察简洁而有力：评分器 $S(\\tau;o,g)$ 在训练阶段被优化以模仿驾驶质量 Oracle（安全性、进展性、舒适性等），其输出本质上是一个学习到的轨迹级奖励函数。\n轨迹表示：轨迹 $\\tau = (p_1, \\dots, p_{n_p})$ 是一系列未来自车位姿，$p_t = (x_t, y_t, \\theta_t) \\in \\mathbb{R}^3$ 包含横向位置、纵向位置和朝向角。\n问题重新形式化：TOAD 将规划从离散选择问题扩展为连续优化问题：\n$\\tau^* = \\arg\\max_{\\tau \\in \\mathcal{T}_{\\text{feasible}}} S(\\tau; o, g)$\n其中 $\\mathcal{T}_{\\text{feasible}}$ 是满足动力学约束的轨迹集合，搜索空间从有限离散集扩展到无限连续集——这是从\u0026quot;挑选\u0026quot;到\u0026quot;创造\u0026quot;的本质跃迁。\n图1：TOAD 核心思想。左侧传统范式在离散候选中选择；右侧 TOAD 将评分器作为奖励函数在连续控制空间中进行 CEM 搜索。\n2. 控制空间优化与自行车模型 直接在轨迹位姿空间采样会产生动力学不可行的锯齿状轨迹。TOAD 通过运动学自行车模型（Bicycle Model, BM） 将搜索空间变换到控制空间：\n$u = (u_t)_{t=1}^{n_p},\\quad u_t = (a_t, \\omega_t) \\in \\mathbb{R}^2$\n其中 $a_t$ 为纵向加速度，$\\omega_t$ 为偏航角速度。BM 的递推关系为：\n$$ \\begin{aligned} v_{t+1} \u0026= v_t + a_t \\cdot \\Delta t \\\\ \\theta_{t+1} \u0026= \\theta_t + \\omega_t \\cdot \\Delta t \\\\ x_{t+1} \u0026= x_t + v_t \\cos(\\theta_t) \\cdot \\Delta t \\\\ y_{t+1} \u0026= y_t + v_t \\sin(\\theta_t) \\cdot \\Delta t \\end{aligned} $$BM 可逆：$\\tau = \\operatorname{BM}(u, v_0)$ 且 $u = \\operatorname{BM}^{-1}(\\tau, v_0)$，允许 TOAD 在控制空间搜索后无缝恢复物理轨迹。使用控制空间的优势包括：物理可行性保证（任何 $u$ 经 BM 展开都满足运动学约束）、维度压缩（$\\mathbb{R}^{2n_p}$ vs $\\mathbb{R}^{3n_p}$）、以及平滑性先验（加速度/角速度更适合高斯采样）。\n3. 信任区域与正则化 为防止搜索漂移到评分器不可靠的分布外区域，TOAD 设计了锚点正则化与舒适性正则化：\n$J(u) = S(\\operatorname{BM}(u, v_0); o, g) - \\lambda_a C_{\\text{anchor}}(u) - \\lambda_c C_{\\text{comf}}(u)$\n锚点正则化 $C_{\\text{anchor}}(u) = \\|u - u_{\\text{base}}\\|^2$ 将搜索约束在基规划器控制序列 $u_{\\text{base}}$ 的邻域内，$\\lambda_a$ 控制搜索的\u0026quot;自由度\u0026quot;。\n舒适性正则化：\n$C_{\\text{comf}}(u) = \\sum_{t} \\big( \\alpha_1 |a_t| + \\alpha_2 |\\dot{a}_t| + \\alpha_3 |\\omega_t| + \\alpha_4 |\\dot{\\omega}_t| \\big)$\n惩罚纵向加速度、加加速度（jerk）、偏航角速度和角加速度，确保轨迹乘坐舒适。\n图2：TOAD 完整流程。基规划器输出经 BM 逆映射作为 CEM 初始化和信任区域锚点，CEM 在控制空间迭代搜索后择优输出。\n4. CEM 迭代搜索算法 TOAD 的核心优化引擎是交叉熵方法（CEM）：通过迭代拟合精英样本的分布来逼近全局最优。\n步骤 操作 公式 初始化 均值设为基规划器输出，标准差由候选集离散度决定 $\\mu_0 = u_{\\text{base}},\\ \\sigma_0 = \\max(\\beta \\cdot \\operatorname{std}(\\mathcal{U}), \\epsilon)$ 采样 从高斯分布采样 $M$ 条控制序列 $u^{(i)} \\sim \\mathcal{N}(\\mu_k, \\operatorname{diag}(\\sigma_k^2))$ 展开评估 BM 展开后用评分器和正则化计算目标 $J_i = S(\\operatorname{BM}(u^{(i)})) - \\lambda_a C_{\\text{anchor}}(u^{(i)}) - \\lambda_c C_{\\text{comf}}(u^{(i)})$ 精英选择 保留得分最高的 $E = M/8$ 条 $\\mathcal{E}_k = \\{u^{(i)} \\mid J_i \\in \\text{top-}E\\}$ 分布更新 用精英集重拟合高斯分布 $\\mu_{k+1} = \\operatorname{mean}(\\mathcal{E}_k),\\ \\sigma_{k+1} = \\operatorname{std}(\\mathcal{E}_k)$ 迭代 重复共 $K$ 次 $k = 1, \\dots, K$ 最终输出 收敛均值展开为轨迹，与基线择优 $\\tau^* = \\arg\\max_{\\tau \\in \\{\\tau_{\\text{mean}}, \\tau_{\\text{base}}\\}} S(\\tau) - \\lambda_c C_{\\text{comf}}(\\cdot)$ 超参数：采样 $M=64$，精英 $E=8$（12.5% 精英率）。迭代 $K$ 因规划器类型而异：on-the-fly 类（DrivoR、iPad、RAP）取 $K=5$；固定词表类（Hydra-MDP、GTRS、ZTRS）取 $K=100$。Warm-start 标准差 $\\beta=0.5$，最小标准差 $\\epsilon=10^{-4}$。\n图3：TOAD 优化过程的动态示意。CEM 分布的均值和标准差随迭代更新，搜索逐渐聚焦于高奖励区域。\n🔬 实验与结果 实验设置 基准：NAVSIM-v1（开环，147 场景，PDMS）、NAVSIM-v2（伪闭环，402 高难场景，EPDMS）、HUGSIM（闭环 3D Gaussian Splatting 仿真） 基规划器（6 种）：iPad、Hydra-MDP、GTRS、ZTRS、RAP、DrivoR 条件：TOAD 应用于各规划器时不修改任何参数 NAVSIM-v2 主要结果 方法 EPDMS (↑) 对比增益 PDM-Closed（特权信息） 56.6 — iPad 34.7 — + TOAD 49.8 +43.6% RAP-DINO 39.6 — + TOAD 49.0 +23.9% Hydra-MDP 40.9 — + TOAD 49.7 +21.6% GTRS 45.4 — + TOAD 51.7 +13.8% ZTRS 48.1 — + TOAD 49.2 +2.3% DrivoR 54.6 — + TOAD 56.3 +3.1% NAVSIM-v1 主要结果 方法 PDMS (↑) 对比增益 PDM-Closed（特权信息） 89.1 — Human driver 94.8 — ZTRS 86.9 — + TOAD 89.0 +2.4% GTRS 90.4 — + TOAD 90.9 +0.6% Hydra-MDP 90.9 — + TOAD 91.4 +0.6% iPad 91.7 — + TOAD 93.4 +1.9% RAP-DINO 93.8 — + TOAD 93.9 +0.1% DrivoR 94.6 — + TOAD 94.7 +0.1% TOAD 在 6 × 2 = 12 个对比中全部正向提升，零退化。增益幅度与规划器基础能力成反比——弱规划器收益最大。\n收益来源分析 图4：成功案例。基规划器（DrivoR）产生碰撞轨迹（EPDMS: 0.0），TOAD 搜索找到安全避让轨迹（EPDMS: 0.75），展示评分器引导搜索纠正碰撞的能力。\n图5：失败案例。基规划器保持道路行驶（EPDMS: 0.79），TOAD 被评分器的误导性高分引至路外（EPDMS: 0.0）——当奖励信号有误导时，最大化它反而有害。\n核心消融实验 配置 iPad EPDMS Hydra-MDP EPDMS 基线 34.7 40.9 + 平滑（仅 BM 后处理） 35.0 (+0.8%) 38.8 (-5.1%) + 用 DrivoR 评分器重排序 45.6 (+31.5%) 37.3 (-8.8%) + 用 GTRS 评分器搜索 23.9 (-31.1%) 38.1 (-6.9%) + 用 SparseDriveV2 评分器搜索 34.6 (-0.4%) 29.6 (-27.7%) + TOAD（用 DrivoR 评分器） 49.8 (+43.6%) 49.7 (+21.6%) 关键结论：\n搜索 \u0026gt; 重排序：同一评分器用于 CEM 搜索远超仅重排序，证实搜索本身带来额外收益 评分器泛化决定成败：只有 DrivoR 的解耦评分器有效，固定词表评分器反而降低性能 弱规划器收益更大：iPad +43.6% vs DrivoR +3.1%，TOAD 缩小了规划器与评分器最优之间的 gap CEM 迭代深度消融 K (CEM 迭代数) iPad EPDMS Hydra-MDP EPDMS K=0 (基线) 34.7 40.9 K=1 45.2 42.8 K=5 49.8 44.2 K=25 50.1 47.5 K=100 50.1 49.7 K=200 49.9 49.5 iPad（on-the-fly）在 K=5 时已收敛；Hydra-MDP（固定词表）需要 K=100 充分探索。\n评分器泛化能力消融 图6：不同评分器用于 TOAD 的对比。DrivoR 评分器一致提升；固定词表评分器多数情况降低性能。\n图7：CEM 迭代数 K 的影响。On-the-fly 类 5 次收敛；固定词表类需 100 次以上。\n图8：采样数 M 与精英数 E 的消融。M=64, E=8 已接近饱和。\n计算开销 组件 延迟 说明 DrivoR 基线 30.9 ms 单次推理 DrivoR + TOAD（K=5, M=64） 32.8 ms 仅增加 1.9 ms iPad + TOAD（K=5, M=64） +2.7 ms 同样极低 单次评分器前向 ~0.03 ms 瓶颈在采样质量不在计算 闭环 HUGSIM 结果 方法 碰撞率 (↓) 驾驶分数 (↑) DrivoR 11.4% 0.71 + TOAD 8.2% 0.78 相对变化 -28.1% +9.9% 📊 相关方法对比 方法 搜索空间 需重训练？ 评分器角色 修正弱候选 附加延迟 Score-and-Select 离散候选集 否 排序选择 ❌ 不能 极低 Planning w/ Diffusion 扩散隐空间 可能需要 条件指导 ⚠️ 有限 中 MCTS-based 离散动作树 否（规则） 无 ⚠️ 有限 高 Learning Refinement 连续轨迹 是 训练信号 ✅ 但需训练 低 TOAD (Ours) 连续控制空间 否 奖励函数 + 搜索导向 ✅ 无需重训练 ~2ms TOAD 是唯一不重训练、不修改架构、即插即用的测试时优化方法，附加延迟仅约 2 ms。\n💡 个人思考与关键洞察 从实验结果看 TOAD 的行为模式 TOAD 的实验数据揭示了一个有趣的单调性：基规划器越弱，TOAD 增益越大。iPad（EPDMS 34.7 → 49.8，+43.6%）的增益是 DrivoR（54.6 → 56.3，+3.1%）的 14 倍。这一模式很容易被解释为\u0026quot;弱规划器的提升空间更大\u0026quot;，但更深层的原因是：弱规划器的候选集与评分器最优轨迹之间的 gap 更大，而 TOAD 的连续搜索恰恰填补了这一 gap。从工程角度看，这意味着 TOAD 提供了自动的规划器能力补偿——它不会锦上添花太多，但能雪中送炭。\n另一值得注意的现象是：即使 DrivoR 本身已是 SOTA，TOAD 仍将其从 54.6 推进到 56.3，逼近 PDM-Closed（56.6）这个使用特权信息的上限。这说明评分器对最优轨迹的估计能力可能远高于规划器候选集的上限——即评分器\u0026quot;知道什么是最好的，但规划器做不到\u0026quot;——而 TOAD 的搜索弥补了这一差距。\n1. 评分器是未被充分利用的奖励函数。当前端到端规划器将评分器仅用于一次性排序，忽视了它作为可优化奖励函数的潜力。TOAD 证明了\u0026quot;用评分器引导搜索\u0026quot;这一简单思路的强大效果——即使评分器本身是为\u0026quot;排序\u0026quot;任务训练的，其输出依然可以作为连续空间中的优化目标。这提示社区：训练评分器时，不应仅优化其排序能力，还应考虑它在连续空间中的平滑性和可优化性。一个理想的评分器不仅在候选集上能排序，还应在轨迹空间的局部邻域中具有有意义的梯度信息。\n2. 固定词表评分器的隐藏弱点暴露了评估方法的系统性盲区。固定词表评分器在标准评估中表现良好（因为测试候选也来自同一词表），但在搜索场景下一败涂地——离开词表后输出急剧退化。这意味着当前社区对评分器的评估存在分布内过拟合的问题：标准评估只测试排序精度，从未测试在未知轨迹上的泛化能力。这类似于在训练集上测试分类器——高分不代表真实性能。未来有必要将\u0026quot;分布外评分一致性\u0026quot;作为评分器的标准评估维度。\n3. 测试时计算的有效分配具有工程价值。TOAD 仅增加约 2 ms 延迟即可获得显著性能提升（弱规划器增益可达 43.6%）。考虑到车载计算平台通常在规划周期内有余量，TOAD 的极低开销使其在工程上非常实用——为自动驾驶的测试时计算分配提供了新思路：与其无限扩大候选集规模，不如在更少但更高质量的候选上做连续空间搜索。在部署中，这可能比训练更大的模型更具性价比。\n4. CEM 选择的背后：无梯度优化的合理性。作者选择 CEM 而非梯度下降的动机明确：评分器（尤其是 Transformer 架构的）不是严格可微的，CEM 对优化景观中的局部陷阱也具有更强的鲁棒性。但 CEM 本质上是零阶优化，效率在大规模场景中受限。一个值得探索的方向是将 TOAD 与可微模拟器结合——若 BM 和评分器均可微，梯度下降一步可能逼近 CEM 数十步的效果。论文中 K=5 时 iPad 已收敛到 49.8，但 K=1 时也达到了 45.2（CEM 单步就完成了大部分提升），这暗示评分器的优化景观可能是相对平滑的。\n5. 与 LLM 推理时搜索的范式共鸣。TOAD 与 LLM 领域的推理时搜索（如 o1、DeepSeek-R1 的 test-time compute scaling）异曲同工——在冻结的模型上花更多推理计算来提升输出质量。LLM 中表现为 chain-of-thought、self-consistency、tree search；自动驾驶中表现为 TOAD 的 CEM 轨迹搜索。这种跨领域共鸣暗示着测试时计算扩展可能是基础模型的通用能力：无论是生成文本还是驾驶轨迹，在生成器上加一层搜索器都可能带来一致提升。TOAD 可视为自动驾驶领域的\u0026quot;推理时搜索\u0026quot;先驱。\n6. 局限与未来方向。TOAD 受限于评分器质量：当评分器给出误导性奖励时（如图 5），最大化它反而有害。这不只是 TOAD 的局限，而是所有\u0026quot;基于学习奖励的优化\u0026quot;方法的根本困境。未来方向包括：(a) 训练分布外鲁棒的评分器——在评分器训练中引入对抗/多样性轨迹增强，使其在连续空间中有更好的单调性；(b) 结合世界模型的多步前瞻——不仅评估即时安全性，还预测轨迹的长尾后果（如是否会导致未来不可恢复的危险状态）；(c) 分层搜索——先在语义层（换道/跟车/绕行）做顶层搜索，再用 TOAD 对选定语义做连续精化，将搜索扩展到更长规划时域。\n📚 参考资料 arXiv: 2606.07170 项目页：https://valeoai.github.io/TOAD/ 代码：https://github.com/valeoai/TOAD ","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2606-07170/","summary":"端到端自动驾驶规划器通常先生成候选轨迹再评分，但评分器无法影响候选集本身，弱候选集会限制性能。TOAD将评分器重新定义为学习到的轨迹级奖励函数，在测试时使用交叉熵方法（CEM）搜索最大化该奖励的轨迹，无需重训练即可即插即用。在NAVSIM-v1（94.7 PDMS）、NAVSIM-v2（56.3 EPDMS）和闭环HUGSIM基准上，TOAD一致提升了六种基规划器的表现，并深入分析了评分器泛化能力对测试时搜索的关键影响。","title":"论文精读：TOAD — Test-Time Trajectory Optimization for Autonomous Driving"},{"content":"📄 论文信息 标题：WorldVLA: Towards Autoregressive Action World Model 团队：DAMO Academy, Alibaba Group × Hupan Lab × Zhejiang University（Jun Cen, Chaohui Yu, Hangjie Yuan, Yuming Jiang, Siteng Huang, Jiayan Guo, Xin Li, Yibing Song, Hao Luo, Fan Wang, Deli Zhao, Hao Chen） arXiv：2506.21539（2025年6月26日，cs.RO） 代码：https://github.com/alibaba-damo-academy/WorldVLA 关键词：Action World Model、VLA、World Model、Autoregressive、Action Attention Mask 一句话总结：首次将VLA与世界模型融合在一个自回归LLM中，实现图像/文本/动作三种模态的理解与生成全统一，并提出动作注意力掩码解决动作块生成时的误差累积问题。 🤔 要解决什么问题？ 现有方法的割裂之痛 VLA（Vision-Language-Action）模型和世界模型（World Model）是具身智能的两大核心范式，但它们长期各自为政：\n范式 代表方法 优点 关键痛点 VLA 动作模型 RT-2, OpenVLA, Octo 直接用视觉+语言生成动作，训练高效 不理解环境物理动力学，动作缺乏\u0026quot;常识\u0026quot; 离散动作模型 OpenVLA-OFT 支持动作块（Action Chunking） 自回归生成时误差累积，长动作块性能断崖下降 世界模型 Dreamer, UniPi, Cosmos 能预测未来状态，理解物理规律 不能直接生成动作，需额外规划器 视频预测模型 VideoGPT, Phenaki 生成后续视频帧 不以动作为条件，预测存在歧义性 核心矛盾：VLA能动作但不懂物理，世界模型懂物理但不会动作。WorldVLA的目标是打通两者——让世界模型为动作模型提供物理先验，让动作模型为世界模型提供视觉理解辅助。\n三个具体挑战 模态鸿沟：图像、文本、动作是三种完全不同性质的信号——图像是像素空间，文本是离散符号，动作是连续数值。如何统一它们？ 动作生成退化：自回归生成动作块时，MLLM在动作域泛化能力弱，早期动作误差向后续动作传播，导致长块成功率下降10%-50%。 双向增强机制缺失：没有统一框架同时利用世界模型的物理知识和动作模型的决策能力。 🧠 方法详解 1. 问题定义与统一形式化 WorldVLA 将两个互补功能统一在一个模型 $M_{\\psi}$ 中：\n动作模型（Action Model） $\\pi_{\\theta}$：基于历史图像观测 $\\{o_{t-h},\\dots,o_t\\}$ 和语言指令 $l$ 生成动作 $a_t$：\n$$a_t = \\pi_{\\theta}(a_t \\mid o_{t-h:t}, l)$$世界模型（World Model） $f_{\\phi}$：基于历史图像和动作预测下一帧观测 $o_t$：\n$$o_t = f_{\\phi}(o_t \\mid o_{t-h:t-1}, a_{t-h:t-1})$$统一后的 Action World Model 同时具备两种能力：\n$$M_{\\psi}:\\begin{cases} a_t = M_{\\psi}^{\\text{policy}}(a_t \\mid o_{t-h:t}, l),\\\\ o_t = M_{\\psi}^{\\text{world}}(o_t \\mid o_{t-h:t-1}, a_{t-h:t-1}), \\end{cases}$$联合训练目标将两者损失加权求和：\n$$\\mathcal{L} = \\mathcal{L}_{action} + \\alpha \\mathcal{L}_{world}$$其中 $\\mathcal{L}_{action}$ 是动作token的交叉熵损失，$\\mathcal{L}_{world}$ 是图像token的预测损失，$\\alpha$ 是平衡系数（实验中设为1）。\n2. 模型架构：三模态统一编码 图2：WorldVLA整体架构，包含动作模型与世界模型两个互补组件\n模型从 Chameleon（Meta统一图像理解与生成的多模态大模型）初始化。核心设计是三种独立Tokenizer + 共享词汇表：\n模态 Tokenizer 压缩率 码本大小 细节 图像 VQ-GAN 16× 8192 256×256→256 token；512×512→1024 token 文本 Chameleon SPM — — BPE子词分词器 动作 均匀量化 — 256 bin/DOF 7-DOF→7 token，每维256个离散bin 动作的离散化方式如下：对于7自由度连续动作 $a \\in \\mathbb{R}^7$，按每个维度的值域均匀划分为256个区间：\n$$a^{\\text{token}}_i = \\left\\lfloor \\frac{a_i - a_{\\min}}{a_{\\max} - a_{\\min}} \\times 255 \\right\\rfloor, \\quad i = 1,\\dots,7$$这种设计使得图像、文本、动作三者共享同一个LLM的词汇表——理解与生成无须额外的模态桥接。\n下图展示了三种模型的对比：\n图1：(a) 纯动作模型——图像→动作的映射；(b) 纯世界模型——图像+动作→下一帧图像；(c) Action World Model——统一图像与动作的理解和生成\n数据流 ASCII 架构图 WorldVLA (Chameleon Backbone)\nInput Tokenizers (three streams) VQ-GAN Image Token Text Tokenizer (SPM) Quantized Action Token (256 bin/dim) three streams -\u0026gt; Shared Vocabulary LLM Core (Transformer Decoder Only) Shared Vocabulary LLM Core -\u0026gt; two Heads Action Head (Policy) -\u0026gt; outputs a_t Image Head (World) -\u0026gt; outputs o_{t+1} Action Attention Mask: a_t cannot attend to a_{\u0026lt;t} -\u0026gt; error propagation blocked 3. 动作注意力掩码机制 这是WorldVLA的核心技术创新。\n问题溯源：标准因果注意力掩码中，后续动作token允许关注先前动作token（图3a）。但MLLM预训练数据主要是图像和文本，动作域的泛化能力有限，因此早期动作的误差会沿自回归链向下传播——动作块越长，误差累积越严重。\n解决方案：提出动作注意力掩码（Action Attention Mask）——在生成当前动作时，选择性遮蔽所有先前的动作token，使每个动作仅依赖于文本和视觉输入（图3b）。世界模型部分仍使用标准因果掩码（图3c）。\n形式上，注意力掩码矩阵 $M \\in \\{0,1\\}^{N \\times N}$（N为总token数）定义为：\n$$M_{i,j} = \\begin{cases} 1 \u0026 \\text{if token } i \\text{ can attend to token } j \\\\ 0 \u0026 \\text{otherwise} \\end{cases}$$对于动作token序列 $\\{a_1,\\dots,a_K\\}$，标准因果掩码使 $M_{a_i, a_j} = 1$ 对所有 $j \u003c i$ 成立；而动作注意力掩码使 $M_{a_i, a_j} = 0$ 对所有 $i \\neq j$ 成立——每个动作token只能关注视觉和文本token。\n图3：(a) 默认因果掩码——动作依赖于先前动作导致误差累积；(b) 本文提出的动作注意力掩码——当前动作仅依赖视觉输入、不依赖先前动作；(c) 世界模型的掩码\n这一设计的精妙之处在于：它用零额外参数解决了自回归动作块生成中的误差累积问题。同时，由于各动作彼此独立，这一机制本质上实现了\u0026quot;并行解码\u0026quot;——与OpenVLA-OFT等方法的思路一致。\n动作注意力掩码的效果随动作块长度的变化：\n$$ \\text{SR}(K) = \\begin{cases} \\text{SR}_{\\text{causal}}(K) \u0026 \\text{without mask} \\\\ \\text{SR}_{\\text{masked}}(K) \u0026 \\text{with mask} \\end{cases}$$如图6所示，$K$ 越大，带掩码与不带掩码的成功率差距越显著。\n4. 训练策略与数据格式 动作模型数据格式（多历史帧 → 动作块）：\n[BOS]{text}[BOI]{image}_1...[BOI]{image}_M [EOI][BOA]{action}_1...[action]_K[EOA][EOS] 文本prompt：\u0026ldquo;What action should the robot take to + 任务指令 + ?\u0026rdquo; M张历史图像后接K个离散动作token 仅对动作token计算 $\\mathcal{L}_{action}$ 世界模型数据格式（当前帧+动作 → 下一帧）：\n[BOS]{text}[BOI]{image}[EOI][BOA]{action}[EOA] [EOS][BOI]{next_image}[EOI][EOS] 文本prompt：\u0026ldquo;Generate the next frame based on the current image and the action.\u0026rdquo; 仅对下一帧图像token计算 $\\mathcal{L}_{world}$ 联合训练：将两种数据混合，在一个batch内同时优化动作和世界模型损失。无需为不同任务切换模型权重——同一个前向传递根据输入格式自动决定输出类型。\n🔬 实验与结果 实验设置 基准：LIBERO（Spatial / Object / Goal / Long / 90 共5子集），机器人桌面操作任务 默认配置：M=2张历史图像，K=10的动作块大小，256/512分辨率 评估指标：动作模型→成功率（SR）；世界模型→FVD↓/PSNR↑/SSIM↑/LPIPS↓ 1. LIBERO 基准主结果 模型 预训练 Spatial Object Goal Long Average Diffusion Policy ✗ 78.3 92.5 68.3 50.5 72.4 Octo ✓ 78.9 85.7 84.6 51.1 75.1 DiT Policy ✓ 84.2 96.3 85.4 63.8 82.4 OpenVLA-OFT ✓ 96.9 98.1 95.5 91.1 95.4 OpenVLA ✓ 84.7 88.4 79.2 53.7 76.5 WorldVLA (256) ✗ 85.6 89.0 82.6 59.0 79.1 WorldVLA (512) ✗ 87.6 96.2 83.4 60.0 81.8 表1：LIBERO基准结果。WorldVLA在无预训练的情况下超越OpenVLA（76.5）达3-5个点，512分辨率带来显著增益。\n2. 世界模型帮助动作模型 图4：动作模型可视化。上方为纯动作模型（直接移动到目标位置但未抓取成功）；下方为动作世界模型（反复尝试直到抓取成功）。\n世界模型通过预测下一帧来学习环境物理动力学，为操作任务提供关键物理先验。此外，它赋予系统前瞻仿真能力——能预演候选动作的结果，从而选择最优动作。\n从消融实验（表3）看：Row 1→2（加入世界模型）在Goal上从67.3提升至73.1，Long从23.0提升至27.3，验证了物理先验对长时域任务的重要性。\n3. 动作模型帮助世界模型 图5：世界模型可视化。上方为纯世界模型（无法打开抽屉/物体消失）；下方为动作世界模型（生成连贯物理合理的结果）。\n模型 10帧FVD↓ 10帧PSNR↑ 10帧SSIM↑ 50帧FVD↓ 50帧PSNR↑ 50帧SSIM↑ Pure World Model 250.0 29.62 90.73 718.6 23.98 83.41 Action World Model 255.1 29.77 90.40 674.1 24.30 83.55 表2：世界模型消融。短序列（10帧）两者接近，但长序列（50帧）Action World Model的FVD降低6.2%（718.6→674.1），证实动作信息帮助长程视觉生成。\n关键洞察：纯世界模型在长序列生成时随时间出现漂移、物体消失等退化现象；动作模型的视觉理解能力帮助世界模型\u0026quot;盯住\u0026quot;目标物体，使生成的视频在50帧尺度上仍保持物理连贯性。\n4. 动作注意力掩码消融研究 图6：动作块长度消融。使用注意力掩码后，长动作块下成功率下降显著减缓。\n索引 动作模型 世界模型 动作Chunking 注意力掩码 Goal Object Spatial Long Average 1 ✓ ✗ ✗ ✗ 67.3 82.9 77.8 23.0 62.8 2 ✓ ✓ ✗ ✗ 73.1 88.0 80.2 27.3 67.2 3 ✓ ✗ ✓ ✗ 79.6 82.9 36.7 16.9 54.0 4 ✓ ✗ ✓ ✓ 84.4 90.9 81.8 49.3 76.6 5 ✓ ✓ ✓ ✓ 85.1 90.9 84.0 52.4 78.1 表3：完整消融实验。Row 3→4对比展示了动作注意力掩码的威力——Spatial从36.7跃升至81.8，Long从16.9提升至49.3，Average从54.0→76.6（+22.6%）。\n对比Row 4→5说明：世界模型与注意力掩码的效果是叠加的——掩码阻断动作误差传播，世界模型提供物理先验，两者互补。\n5. 世界模型 vs 视频预测模型对比 图7：不同类型视觉生成模型对动作模型的帮助程度比较。\n视觉辅助模型 条件 对动作模型的帮助 无 — 62.8（基线） 世界模型 动作 + 图像 +4.4% 视频预测模型 仅图像/任务指令 部分任务负收益 关键区别：世界模型以动作为条件，因此能学习动作与场景变化的因果关系；视频预测模型仅以任务指令为条件，下一帧预测存在固有歧义——同一图像可能对应多种合理未来，这种多模态歧义性反而可能引入训练噪声。\n🔗 与Related Works的对比分析 维度 OpenVLA (VLA) DreamerV3 (WM) UniPi (Video+Action) WorldVLA (Ours) 动作生成 ✓ ✗（需额外规划器） ✓ ✓ 世界模型 ✗ ✓ ✓ ✓ 统一LLM框架 ✓ ✗ ✗ ✓ 离散动作token ✓ ✗ ✗ ✓ 共享词汇表 ✗ ✗ ✗ ✓ 动作注意力掩码 ✗ ✗ ✗ ✓ 双向增强 ✗ ✗ ✗ ✓ 无预训练性能 76.5 — — 81.8 从对比可见：WorldVLA的核心差异化在于\u0026quot;统一\u0026quot;——VLA+世界模型在单一LLM内互惠增强。它不是简单地将两个模型拼接，而是通过共享词汇表、联合训练、注意力掩码三个设计实现深度集成。\n💡 个人思考与关键洞察 1. 动作即条件——世界模型的正确打开方式 纯世界模型做视频预测时，缺少\u0026quot;动作\u0026quot;条件意味着预测是病态的：给定当前帧，下一帧有无穷多种可能性（物体可能左移或右移）。WorldVLA证明了\u0026quot;以动作为条件的视频预测\u0026quot;才是世界模型在具身智能中的正确用法。动作决定了\u0026quot;你想要看到什么\u0026quot;，从而将预测问题从 $P(o_{t+1}|o_t)$ 的条件熵降低为 $P(o_{t+1}|o_t, a_t)$。\n2. 注意力掩码：零参数却最高效 动作注意力掩码是典型的\u0026quot;less is more\u0026quot;设计。它不增加任何参数，不改变推理流程，仅通过修改注意力模式就解决了自回归动作块生成的误差累积问题。这一思路可以被推广到任何MLLM中的数值序列自回归生成任务（如轨迹点序列、控制信号序列）。\n3. 离散化的双刃剑效应 将连续动作量化到256个bin，虽然实现了与文本/图像的模态统一，但量化误差 $\\epsilon = \\frac{a_{\\max} - a_{\\min}}{255}$ 限制了动作精度。从实验结果看，512分辨率（更精细的视觉感知）比256分辨率带来了3个点的提升，这暗示感知精度的提升部分弥补了动作精度的损失。未来的统一图像Tokenizer（如VQ-GAN的改进版）可能是突破方向。\n4. 双向增强：1+1 \u0026gt; 2的关键在于共享表示 WorldVLA最令人兴奋的发现是：世界模型帮助动作模型（+4%成功率），动作模型也帮助世界模型（-10% FVD）。这种双向增强不是偶然——共享的视觉表示使得两个任务互为\u0026quot;正则化\u0026quot;：世界模型迫使视觉编码器理解动作的物理后果，动作模型迫使编码器关注与操作相关的视觉特征。\n5. Chameleon初始化是成功的关键跳板 选择Chameleon（而非普通LLaMA或Qwen）作为骨干不是偶然。Chameleon本身就是统一图像理解与生成的模型，其预训练权重已经包含了\u0026quot;视觉token生成\u0026quot;的能力。在这个基础上去\u0026quot;嫁接\u0026quot;动作token化，远比从零开始训练要高效。这启示我们：选择一个好的统一基座模型，比设计复杂的模态桥接模块更重要。\n6. Scaling Law的验证与局限 WorldVLA在512分辨率下比256好，说明模型受益于更好的视觉输入。但论文并未探索更大的模型规模（Chameleon有7B和34B两个版本，实验仅用7B）。从OpenVLA-OFT（95.4%）与WorldVLA（81.8%）的差距来看，预训练数据规模仍是关键瓶颈——WorldVLA在无预训练的情况下已显著超越OpenVLA，意味着如果WorldVLA用同等规模的机器人数据预训练，达到或超越OpenVLA-OFT是大概率事件。\n未来方向 数据与模型规模扩展：Scaling Law验证——更大的WorldVLA在更多机器人数据上会怎样？ 统一图像Tokenizer：当前VQ-GAN的码本对语义理解有限，设计感知+生成统一的tokenizer是关键 辅助动作头：离散token化损失了精度，添加Q-Former或扩散头作为辅助输出可能进一步提升 迁移到自动驾驶：WorldVLA已在机器人操作上验证，其思想（以动作为条件的视频预测 + 动作注意力掩码）在自动驾驶场景中同样适用 论文信息：Jun Cen, Chaohui Yu, Hangjie Yuan, Yuming Jiang, Siteng Huang, Jiayan Guo, Xin Li, Yibing Song, Hao Luo, Fan Wang, Deli Zhao, Hao Chen. \u0026ldquo;WorldVLA: Towards Autoregressive Action World Model\u0026rdquo; arXiv:2506.21539, June 2025.\n代码：https://github.com/alibaba-damo-academy/WorldVLA\n论文作者单位：DAMO Academy, Alibaba Group; Hupan Lab; Zhejiang University\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2506-21539/","summary":"WorldVLA 提出统一的自回归动作世界模型，将VLA与世界模型融合在单一LLM框架中。通过三种模态的离散token共享词汇表实现图像/文本/动作的全统一，并提出动作注意力掩码解决长序列动作块的误差累积问题。在LIBERO基准上动作成功率提升4%、FVD降低10%，证实世界模型与动作模型的双向增强。","title":"论文精读：WorldVLA — Towards Autoregressive Action World Model"},{"content":"📄 论文信息 标题：CLOVER: Closed-Loop Value Estimation and Ranking for End-to-End Autonomous Driving Planning 团队：清华大学 AIR（智能产业研究院）× 中国科学技术大学 × 北京航空航天大学 作者：Sining Ang, Yuguang Yang, Canyu Chen, Yan Wang（通讯作者） 时间：2026 年 5 月 14 日（v1）/ 5 月 15 日（v2） 论文地址：arXiv 2605.15120 代码仓库：github.com/WilliamXuanYu/CLOVER 一句话定位：以闭环价值估计为核心，通过伪专家覆盖训练 + 保守自蒸馏两阶段优化，对齐端到端规划器的训练与评测分布 📌 一句话概括 CLOVER 提出了一套生成器-打分器闭环框架：生成器产出多样化候选轨迹，打分器预测规则化规划指标的子分数用于推理时排序。通过评估器过滤的伪专家覆盖训练（Stage 1）和保守闭环自蒸馏（Stage 2）交替优化，在 NAVSIM 上达到 94.5 PDMS / 90.4 EPDMS 新 SOTA，NavHard 上取得 48.3 EPDMS 平齐最强结果，nuScenes 开放环评估取得最低 L2 误差与碰撞率。\n图 1：CLOVER 闭环框架 vs 传统方法。左侧：传统方案中生成器仅受单轨迹模仿监督，排序反馈不参与生成器优化；右侧：CLOVER 使用真实评估器子分数训练打分器，再通过教师引导的自蒸馏保守地优化生成器。\n🤔 要解决什么问题？训练-评测错配的根本矛盾 端到端自动驾驶规划器的训练与评测之间横亘着一个结构性矛盾：\n训练目标：以 L2 或类似距离最小化模仿单条人类驾驶轨迹 $\\tau^{\\text{human}}$ 评测标准：用规则化规划指标（PDMS / EPDMS）衡量轨迹的安全性、可行驶区域合规、进度、舒适性等多维度表现 这两个目标在数学上不对齐。一条在 L2 空间上\u0026quot;靠近\u0026quot;日志轨迹的方案可能碰撞或驶出可行驶区域，而一条偏离演示的替代方案反而在规则化指标下表现优异。用公式表达：\n$$ \\min_{\\theta} \\mathbb{E}_{o \\sim \\mathcal{D}}[\\ell(\\pi_{\\theta}(o), \\tau^{\\text{human}})] \\quad \\text{vs} \\quad \\max_{\\tau \\in \\text{Candidates}} R(\\tau) $$这两者之间没有必然联系。对于\u0026quot;生成-选择\u0026ldquo;类规划器（先产出一组候选，再打分排序选最优），这种错配尤为致命——生成器的候选覆盖面和打分器的排序质量共同决定了最终性能，而传统的单轨迹模仿两边都照顾不到。\n下表总结了现有范式面对这一错配时的困境：\n方法范式 训练目标 多样性控制 评估器反馈 闭环优化 核心痛点 单轨迹模仿回归 L2 模仿 ❌ 单一输出 ❌ ❌ mode averaging，无法应对多解场景 多候选+固定锚点 L2 模仿+规则选优 ✅ 有限 ❌ 仅推理时 ❌ 锚点覆盖固定，生成器不感知评估器偏好 扩散多模态生成 去噪分布匹配 ✅ 天然多模态 ❌ ❌ 推理延迟高，无法利用规则信号改进 价值学习式重排序 价值预测(PDMS-Closed) ❌ 固定候选 ✅ ❌ 生成器与打分器解耦，无闭环改进 CLOVER（本文） 集合覆盖+自蒸馏 ✅ 自适应 ✅ 全流程 ✅ 深度耦合 系统性对齐训练-评测分布 CLOVER 的核心洞见是：单条轨迹模仿无法支撑集合级规划决策，必须把训练从\u0026quot;点估计\u0026quot;升级为\u0026quot;分布对齐\u0026rdquo;。\n🎯 核心贡献 贡献 说明 闭环价值估计 将打分器视为轨迹级价值估计器，使用非可微规则评估器（PDMS/EPDMS）的真实子分数训练，将评估反馈引入生成器优化 伪专家覆盖训练 从多类可解释候选动作族（横向偏移、加减速、边界行为等）中构造评估器过滤的伪专家轨迹集合，将单轨迹模仿扩展为集合级覆盖监督 保守自蒸馏 交替进行打分器拟合（在生成器当前分布上逼近真实子分数）和生成器精炼（向教师选出的 Top-k 与向量 Pareto 目标集合学习），并加入稳定性正则项防止分布漂移 理论保障 证明了选中集富集条件——当打分器选中的目标在真实评估器下统计优于当前生成分布时，保守集合级蒸馏必然提升生成器在高分区域的概率质量 🧠 方法详解 2.1 问题设定与预备知识 令 $o$ 表示场景观测（环视图像 + 自车状态），$\\tau = \\{(x_t, y_t)\\}_{t=1}^T$ 表示一条 $T$ 步的未来路径点序列。端到端规划器的目标是学习一个策略 $\\pi_{\\theta}(\\cdot \\mid o)$，从条件分布中采样候选轨迹。\nCLOVER 的生成器-打分器架构包含两个组件：\n生成器 $\\pi_{\\theta}(\\cdot \\mid o)$：一个以 Transformer 解码器为核心的模块，输入场景特征（经 DINOv2 ViT-S 编码的 4 路环视图像 + LoRA 微调），通过可学习轨迹查询输出 $K$ 条候选轨迹 $\\mathcal{T} = \\{\\tau_i\\}_{i=1}^K$ 打分器 $S_{\\phi}(o, \\tau)$：将每条候选轨迹的显式路径点嵌入与场景 token 做交叉注意力，预测规划指标的 $C$ 个分量子分数 $\\hat{\\mathbf{r}}_i = S_{\\phi}(o, \\tau_i) \\in \\mathbb{R}^C$ 推理时，生成器产出候选集，打分器预测子分数，按照 PDMS 合成规则 $\\text{PDMS} = f(\\hat{\\mathbf{r}}_i)$ 选出最优轨迹。评估器、伪专家生成器等模块仅在训练时使用，推理零开销。\n在训练阶段，我们可以访问一个非可微的真实规则评估器 $R(o, \\tau) \\to \\mathbf{r}^{\\text{true}} \\in \\mathbb{R}^C$，它输出每个规划指标维度的真实子分数。CLOVER 的关键设计就是利用 $R$ 在训练时的反馈来桥接训练-评测错配。\n2.2 Stage 1：评估器过滤的伪专家覆盖训练 核心思路：单条日志轨迹无法覆盖真实驾驶中多样化的合理行为。CLOVER 利用训练时可获取的先验信息构造一个高质量的伪专家轨迹集合 $\\mathcal{E}(o)$，将生成器的监督信号从\u0026quot;单点拟合\u0026quot;升级为\u0026quot;集合覆盖\u0026quot;。\n伪专家构造流程分为四个步骤：\n多族候选生成：从多个可解释候选动作族生成初始候选池。动作族包括：保持车道巡航、横向偏移（左/右 0.5–2.0 m）、匀速/加速/减速、路口停/行、前方障碍物接近制动、可行驶区域边界超调等。每个动作族包含参数化变体，总初始候选数可达数百条。 可行驶区域预过滤：通过轻量化的可行驶区域检查与未来占据检查，剔除明显不可行的轨迹。 真实评估器打分：对剩余轨迹运行完整的规则评估器 $R$，记录每个子分数 $\\mathbf{r}^{\\text{true}}_i$。 覆盖感知选择：先按分数阈值 $\\delta$ 筛选出高质量轨迹，再在轨迹空间中进行贪心最远点采样（Farthest Point Sampling），保证所选子集在几何和行为两个维度上都覆盖广泛，至多保留 $M$ 条伪专家： $$ \\mathcal{E}(o) = \\text{FPS}\\big(\\{\\tau_i : R(o, \\tau_i) \\geq \\delta \\land \\text{Feasible}(\\tau_i)\\}, M\\big) $$Stage 1 训练损失由三部分组成：\n$$ \\mathcal{L}_{\\text{stage1}} = \\lambda_{\\text{gt}} \\mathcal{L}_{\\text{gt}} + \\lambda_{\\text{pe}} \\mathcal{L}_{\\text{pe}} + \\lambda_{\\text{score}} \\mathcal{L}_{\\text{score}} $$其中 $\\mathcal{L}_{\\text{gt}}$ 保留日志轨迹先验（L1 回归到人类轨迹），$\\mathcal{L}_{\\text{pe}}$ 为集合覆盖损失（生成器候选集与伪专家集合之间的 Chamfer 式 L1 距离），$\\mathcal{L}_{\\text{score}}$ 预训练打分器预测真实评估器子分数。\n下图展示了 CLOVER 的完整数据流与两阶段训练流程：\nCLOVER 架构与数据流 4路环视图像 -\u0026gt; DINOv2 ViT-S (LoRA) -\u0026gt; 场景特征编码 场景特征编码 -\u0026gt; 轨迹生成器 (Transformer解码器) -\u0026gt; K=64 条候选轨迹 (推理 \u0026amp; 训练) 候选轨迹 -\u0026gt; 每条候选轨迹路径点嵌入 -\u0026gt; 轨迹级打分器 (子分数预测) 轨迹级打分器 -\u0026gt; 合成 PDMS 分数 -\u0026gt; 选择最优轨迹 -\u0026gt; 最终规划输出 训练阶段 Stage 1: 伪专家构造 -\u0026gt; 规则评估器 R 打分 -\u0026gt; 覆盖感知 FPS -\u0026gt; 集合覆盖损失 Stage 2: 交替循环 (30 轮) 打分器阶段: 固定生成器 -\u0026gt; 拟合真实子分数 生成器阶段: 冻结教师 -\u0026gt; Top-k \u0026amp; Pareto 蒸馏 + 稳定性正则 图 2：CLOVER 方法总览。Stage 1 做评估器过滤的伪专家覆盖训练 + 打分器预训练，Stage 2 交替进行打分器拟合与生成器保守蒸馏。\n2.3 Stage 2：保守闭环自蒸馏 Stage 1 已经让生成器具备了覆盖多样合理轨迹的能力，但生成器的分布尚未与真实评估器的偏好对齐。直接最大化打分器预测的标量分数会面临两大风险：(1) 打分器作为学习模型存在系统性偏差，直接优化会利用这些偏差产生对抗性轨迹；(2) 标量最大化倾向于坍缩候选多样性。\nCLOVER 的 Stage 2 采用交替优化策略，在生成器、打分器、教师模型三者之间形成一个闭环：\n打分器阶段（Scorer Phase）：固定生成器，在生成器当前分布 $\\pi_{\\theta}(\\cdot \\mid o)$ 上采样候选轨迹，以真实评估器子分数为监督信号训练打分器：\n$$ \\mathcal{L}_{\\text{critic}} = \\frac{1}{K}\\sum_{i=1}^K \\ell\\big(S_{\\phi}(o, \\tau_i),\\, \\mathbf{r}_i^{\\text{true}}\\big) $$其中 $\\ell$ 为每个子分数维度的 Huber 损失。这一步确保打分器持续跟随生成器分布的变化，始终逼近真实评估器在该分布上的预测。\n生成器阶段（Generator Phase）：冻结教师模型（当前生成器的 stop-gradient 副本），利用打分器而非真实评估器选取两类高质量目标集合：\nTop-k 集合 $\\mathcal{K}^{\\text{tea}}$：按打分器合成预测分数排序的前 $k$ 条教师轨迹，代表\u0026quot;综合最优\u0026quot;的方向。 向量 Pareto 集合 $\\mathcal{P}^{\\text{tea}}$：在预测子分数空间中非支配的轨迹——即所有子分数不劣于其他候选且至少一个维度严格更优。这保留了安全、舒适、进度之间的多目标权衡，避免标量聚合的隐式偏好。 生成器阶段的损失函数由四项组成：\n$$ \\mathcal{L}{\\text{gen}} = \\lambda{\\text{traj}}\\mathcal{L}_{\\text{gt}}\n\\lambda_{\\text{topk}}\\mathcal{L}_{\\text{set}}(\\mathcal{T}^{\\text{stu}}, \\mathcal{K}^{\\text{tea}}) \\lambda_{\\text{pareto}}\\mathcal{L}_{\\text{set}}(\\mathcal{T}^{\\text{stu}}, \\mathcal{P}^{\\text{tea}}) \\lambda_{\\text{stab}}\\frac{1}{K}\\sum_{i=1}^K |\\tau_i^{\\text{stu}} - \\operatorname{sg}(\\tau_i^{\\text{tea}})|_1 $$ 其中集合覆盖损失 $\\mathcal{L}_{\\text{set}}$ 定义为学生候选集到目标集合的单向 Chamfer 距离：\n$$ \\mathcal{L}_{\\text{set}}(\\mathcal{T}^a, \\mathcal{T}^b) = \\frac{1}{|\\mathcal{T}^b|} \\sum_{\\tau^b \\in \\mathcal{T}^b} \\min_{\\tau^a \\in \\mathcal{T}^a} \\sum_{t=1}^T \\|\\tau_t^a - \\tau_t^b\\|_1 $$稳定性正则项 $\\mathcal{L}_{\\text{stab}}$ 防止生成器偏离教师分布过远，$\\operatorname{sg}$ 为 stop-gradient 算子。这四项损失的协同作用实现了\u0026quot;在信任区域内向评估器偏好方向移动\u0026ldquo;的保守优化。\n锚点辅助软重排序（anchored soft-reranking）：NAVSIM v2 的 EPDMS 指标额外要求帧间规划一致性。为此 CLOVER 引入一个单模态锚点模型（由 Stage 1 预训练得到）提供稳定的参考轨迹，对候选轨迹按打分器分数和与锚点轨迹的偏离度做软重排序——偏离过大则适当降分。该模块仅在 EPDMS 评测场景下启用。\n2.4 理论分析：选中集富集条件 CLOVER 的核心理论问题是：打分器本身并不完美时，为什么用它引导生成器还能有效？\n定理 1（选中集富集条件）：设 $p_t(o)$ 为当前生成分布 $\\pi_{\\theta_t}(\\cdot \\mid o)$ 在高分区域 $\\mathcal{H}_o$（真实评估器下满足 $R^*(o, \\tau)=1$ 的轨迹集合）上的概率质量，$q_t(o)$ 为打分器选中的目标集合（Top-k + Pareto）中位于 $\\mathcal{H}_o$ 的比例。若以下选中集富集条件成立：\n$$ q_t(o) \\geq p_t(o) + \\xi_t(o), \\quad \\xi_t(o) \u003e 0 $$且生成器更新保持保守（与目标混合分布 $(1-\\alpha_t)\\mu_t^o + \\alpha_t\\nu_t^o$ 的 TV 距离 $\\leq \\eta_t(o)$），则：\n$$ p_{t+1}(o) \\geq p_t(o) + \\alpha_t\\xi_t(o) - \\eta_t(o) $$当 $\\alpha_t\\xi_t(o) \u003e \\eta_t(o)$ 时，Stage 2 每一轮迭代都严格提升 $\\mathcal{H}_o$ 上的概率质量。\n直觉：定理 1 表明，CLOVER 不要求打分器在全空间上精确排序——只要求它选出的目标集合统计上优于当前生成分布即可。这是一个比\u0026quot;完美打分器\u0026quot;弱得多的条件，在实践中几乎总能满足。同时，稳定性正则项保证 $\\eta_t(o)$ 足够小，使得净改进 $\\alpha_t\\xi_t(o) - \\eta_t(o)$ 持续为正。\n经验验证：在 12,146 个 NAVSIM 场景上，打分器高置信预测（$\\hat{s} \\geq 0.95$）的真实均分达到 0.9753，满分概率 $P(R^*=1) = 69.74\\%$，而全局满分概率仅为 35.42%，富集差距约 34.32 个百分点——定理条件的经验证据。\n图 3：伪专家轨迹可视化。不同颜色代表不同行为模式——保持车道、减速让行、横向偏移避让等。\n图 4：Stage 2 精炼后生成器保持多样性的定性对比。CLOVER 在不坍缩多样性的前提下提升了候选集质量。\n图 5：附录中的补充多样性分析——候选轨迹的有效聚类数（Qualified Cluster Count）在 Stage 2 前后保持甚至提升。\n🔬 实验与结果 实验设置 配置 详情 基准评测 NAVSIM v1 (PDMS)、NAVSIM v2 (EPDMS)、NavHard、nuScenes 开放环 架构 DrivoR 风格生成器-打分器，DINOv2 ViT-S + LoRA 输入 4 路环视相机（无 LiDAR） 候选数 $K=64$ 预测范围 4 秒，0.5 秒间隔（$T=8$） 训练场景数 约 120 万帧 推理速度 单 A100 约 110 ms/场景 Stage 2 交替轮数 30 轮（60 个 epoch） 主要结果：NAVSIM v1 PDMS 在 NAVSIM v1 的闭环节点评测中，CLOVER 以 94.5 PDMS 刷新 SOTA，大幅领先 DiffusionDrive（88.1）、PRIX（87.8）等主流方法，所有子分数均位列前两名：\n方法 NC DAC TTC Comf. EP PDMS PDMS-Closed (PMLR'23) 94.6 99.8 89.9 86.9 99.9 89.1 Human driver 100 100 100 99.9 87.5 94.8 VAD-v2 (ECCV'24) 95.7 97.5 91.7 97.1 84.0 86.2 DiffusionDrive (CVPR'25) 98.2 96.2 94.7 100 82.2 88.1 DrivoR (CoRL'24) 99.0 96.5 96.0 99.9 83.5 93.7 CLOVER (Ours) 99.2 96.9 96.5 99.9 84.7 94.5 CLOVER 不仅超越所有基于视觉的方法，还接近人类驾驶员的 94.8 上限——在 NC（无碰撞）和 TTC（碰撞时间）两个安全关键指标上已超过人类水平。\nNAVSIM v2 EPDMS 与 NavHard NAVSIM v2 的 EPDMS 指标在 PDMS 基础上增加了帧间一致性和扩展舒适度等维度，评测更严格。CLOVER 以 90.4 EPDMS 取得新 SOTA：\n方法 EPDMS NC DAC DDC TLC EP TTC LK HC EC DrivoR 86.7 99.1 88.9 99.9 99.9 80.5 93.7 92.0 83.0 84.2 CLOVER 90.4 99.4 89.3 99.9 99.9 84.1 95.9 93.5 89.5 92.7 在更难的 NavHard 子集（包含长尾、交互复杂场景）上，CLOVER 取得 48.3 EPDMS，平齐当前最强结果，证明了在困难场景下的鲁棒性。\nnuScenes 开放环评测 在 nuScenes 开放环轨迹预测评测中，CLOVER 取得了对比方法中最低的 L2 误差与碰撞率，验证了框架在不同数据集和评测协议下的泛化能力。\n与相关方法的对比分析 对比方法 核心范式 评估器反馈 生成器多样性 闭环优化 候选数 PDMS PDMS-Closed 价值预测 + 固定候选投票 ✅ ❌ 无生成器 ❌ 固定库 89.1 VAD-v2 向量化端到端 + 规划头 ❌ ❌ ❌ 1 86.2 DiffusionDrive 扩散多模态生成 ❌ ✅ 天然多模态 ❌ 多候选 88.1 PRIX 规划 + 推理 ❌ ✅ 规则采样 ❌ 多候选 87.8 DrivoR 生成器 + 学习打分器 ❌ ✅ DrivoR 生成 ❌ 64 93.7 CLOVER 闭环价值估计 + 自蒸馏 ✅ 全程 ✅ 集合级覆盖 ✅ 循环 64 94.5 消融研究 主成分消融（NAVSIM v1 PDMS）：\n变体 多样性监督 Stage 2 闭环 PDMS 单专家监督基线 ❌ ❌ 93.7 仅多样性（Stage 1 伪专家） ✅ ❌ 94.1 仅闭环（无 Stage 1 直接蒸馏） ❌ ✅ 93.8 CLOVER 完整 ✅ ✅ 94.5 关键发现：两个阶段互补——Stage 1 先扩展候选覆盖（+0.4），Stage 2 在扩展后的分布上做精细对齐（再 +0.4），单独使用任一阶段效果都显著弱于组合。Stage 2 在无 Stage 1 的情况下仅 +0.1，说明闭环蒸馏在有限覆盖分布上收益有限。\nStage 2 设计消融：\n变体 PDMS 说明 非迭代联合更新 发散 生成器与打分器同时更新导致分布漂移 仅自蒸馏（无打分器拟合） 93.8–94.0 稳定但饱和，缺乏评估器信号 完整交替 94.5 打分器拟合 → 生成器蒸馏循环 候选集多样性消融：论文还报告了 Stage 2 前后候选集多样性的定量变化。经过 Stage 2 后，候选集在 Pairwise ADE（1.80→5.20）、Qualified Cluster Count（6.02→8.71）、Trajectory Effective Rank（1.14→1.27）等多样性指标上均未下降甚至提升，证明保守自蒸馏没有以牺牲多样性为代价换取高分。\n💡 个人思考与关键洞察 训练-评测错配是端到端规划的核心矛盾，CLOVER 的解法是\u0026quot;用评估器信号做桥接\u0026quot;而非\u0026quot;消除错配\u0026rdquo;：所有端到端规划器都面临一个事实——训练时的模仿损失与评测时的规则化指标在数学上不对齐。传统思路是设计更复杂的模仿损失（如规划导向的特征学习），但 CLOVER 换了一个视角：既然评估器信号在训练时总是可用的，为什么不直接用它来指导生成器？这种务实的\u0026quot;桥接而非消除\u0026quot;思路，比试图设计一个完美兼容两者的损失函数更可推广。随着规划指标不断演化（PDMS → EPDMS → 未来的新指标），只要评估器信号可用，CLOVER 的框架就能持续适用。\nTheorem 1 给出了\u0026quot;不完备监督也能有效\u0026quot;的精确条件，这是理论工作的典范：现实中任何学习到的打分器都有误差，直接最大化一个不完美的打分器是危险的。CLOVER 的理论贡献在于精确刻画了\u0026quot;什么时候用不完美打分器也能提升性能\u0026quot;：只需要打分器选出的集合在真实评估器下统计上优于当前分布，且更新保持保守。这个条件比\u0026quot;打分器必须全局精确\u0026quot;弱得多，在自动驾驶中几乎天然满足——因为驾驶场景中\u0026quot;好方案远多于坏方案\u0026quot;的分布特点保证了富集性。这样的定理才有真正的指导意义：它告诉你框架在哪落地是安全的，而不是一个无法证伪的 upper bound。\nVector Pareto 多目标蒸馏是比标量 Top-k 更本质的设计：PDMS/EPDMS 是多维子分数的加权组合，但不同场景下安全、舒适、进度之间的最佳权衡是不同的。标量 Top-k 选择了\u0026quot;综合分最高\u0026quot;的轨迹，但它隐式地预设了与加权系数一致的偏好。而 Vector Pareto 集合保留了在子分数空间中非支配的全部轨迹——一条安全性极高但进度略低的轨迹，和一条进度很好但安全中等的轨迹，只要各自在某些维度上不被对方支配，就都会被保留。这保证了蒸馏目标的多样性，也解释了为什么同时使用两者效果最优（+0.2 PDMS 对比仅用 Top-k）。\n保守性是闭环自蒸馏的\u0026quot;安全气囊\u0026quot;：如果去掉稳定性正则项 $\\mathcal{L}_{\\text{stab}}$ 和教师 stop-gradient，直接将生成器往打分器目标方向上推，模型很快会发散。其根本原因是打分器自身的分布偏移——当生成器分布改变后，打分器的训练分布和推理分布不再一致，导致错误积累。CLOVER 的教师 stop-gradient + L1 稳定性约束本质上是一个信任区域机制：教师模型是\u0026quot;锚\u0026quot;，学生只能在距离锚点有限的距离内移动。这与 TRPO/PPO 中的 KL 约束异曲同工——只不过在生成式规划场景下，约束施加在轨迹空间而非策略空间。\n伪专家构造是工程中最重但最容易被忽视的部分：论文附录 A 用了整整 10 个小节详述伪专家构造的工程细节——动作族设计（6 个主族、每个族多个参数化变体）、可行驶区域预检查（栅格化 + 碰撞检测）、轨迹空间最远点采样、覆盖感知选择等。最终效果的 40% 可能来自这些工程细节：动作族覆盖范围决定了伪专家的上限，而覆盖感知的 FPS 保证了所选子集的多样性。这提醒我们，在自动驾驶这类任务中，工程化的数据构造有时比模型架构创新更重要——你的生成器再强，如果监督信号本身就偏了，结果不可能好。\nCLOVER 的框架可以推广到任何使用外部评估器的规划系统：虽然 CLOVER 在 NAVSIM PDMS/EPDMS 上验证，但它的\u0026quot;生成器 + 打分器 + 外部评估器闭环\u0026quot;架构完全通用。任何存在可计算评估函数 $R(o, \\tau)$ 的规划问题——如机器人导航的代价函数、自动驾驶的安全缓冲区检查、甚至游戏 AI 的奖励函数——都可以套用 CLOVER 的 Stage 1 + Stage 2 框架。CLOVER 真正的贡献不是某个特定的网络结构，而是一个将\u0026quot;外部规则信号\u0026quot;闭环反馈到\u0026quot;学习式生成器\u0026quot;的通用方法论。未来如果我们自己的规划器也想引入一个新的评估指标（如舒适性约束、能耗约束），CLOVER 给出了一个立即可用的改进路径。\nCLOVER 是\u0026quot;价值估计 + 生成式规划 + 闭环优化\u0026ldquo;三者结合的一次漂亮工程实践。它的思想简洁但效果显著——不依赖于复杂的扩散或流匹配模型，仅用一个 Transformer 生成器 + 轻量打分器 + 外部评估器的闭环就达到了视觉-only 的 SOTA。这再次验证了一个基本洞见：在感知和生成能力已经足够强的今天，制约端到端驾驶的瓶颈往往不在模型容量，而在\u0026quot;用什么信号、以什么方式\u0026quot;指导模型。\nPaper: arXiv 2605.15120 | Code: github.com/WilliamXuanYu/CLOVER\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2605-15120/","summary":"端到端自动驾驶规划器的训练（模仿单条轨迹）与评测（规则化指标）存在根本性错配。CLOVER 提出轻量级生成器-打分器架构，通过构造评估器过滤的伪专家轨迹实现集合级覆盖训练，再以保守闭环自蒸馏交替优化生成器与打分器。在 NAVSIM 上达到 94.5 PDMS 和 90.4 EPDMS，刷新 SOTA，并提供了不完备打分器仍能提升生成器的理论保证。","title":"论文精读｜CLOVER：闭环价值估计与排序框架——端到端自动驾驶规划的生成-打分新范式"},{"content":"🎯 核心贡献速览 识别了当前 WAM 的表征瓶颈：标准训练仅监督输出端，中间承载世界知识的表征只能作为输出拟合的副产品被间接塑造 提出 ReWorld 框架：沿三个互补维度直接塑造中间表征——未来预测监督（Video DiT）、跨模态对齐（Action DiT）、硬负样本排斥（安全感知） 系统性对比分析：在统一驾驶视频生成协议下对比了 REPA、SRA、Self-Flow 等现有表征学习方法，揭示了它们为何在长时序驾驶视频中表现不佳 全维度实验验证：在 nuScenes（FVD 61.9，-23.9%）和 NAVSIM（PDMS 90.4，+1.3）上取得 SOTA 📄 论文信息 标题：ReWorld: Learning Better Representations for World Action Models 作者：Tianze Xia, Lijun Zhou, et al.（华科 + 小米汽车，共 12 位） arXiv：2606.27504（2026 年 6 月） 发表：CVPR 2026 一句话总结：首个面向自动驾驶 WAM 的表征学习框架，直接优化 Video/Action DiT 的中间表征，在视频生成质量、训练收敛速度和闭环规划安全三维度同步提升。 🤔 要解决什么问题？ 核心矛盾：WAM 的表征瓶颈 当前 WAM（以 DriveLaW 为代表）采用级联式双 DiT 架构,将未来视频生成与轨迹规划统一在同一框架中。然而，标准训练范式存在结构性缺陷——仅监督两个模块的输出端（Video DiT 受视频生成损失监督，Action DiT 受轨迹规划损失监督），中间承载世界知识的表征只能作为拟合输出损失的副产品被间接塑造。这种\u0026quot;重输出、轻中间\u0026quot;的策略导致三个连锁问题：\n问题 根因 具体后果 生成与规划能力脱钩 Video DiT 仅受 FVD 监督，Action DiT 仅受轨迹 L2 损失 模型能生成逼真未来帧但规划不提升，表征缺乏任务驱动 世界知识传递低效 交叉注意力读取视频特征但无约束保证状态被吸收 规划表征中的世界信息是\u0026quot;路过\u0026quot;而非\u0026quot;继承\u0026quot;的 安全信号完全缺失 视频生成和模仿学习无一能区分安全与危险轨迹 两条几何接近的轨迹在闭环安全性上可能天差地别 现有表征学习方法迁移困难 方法 核心机制 外部编码器 额外开销 支持视频时序 支持规划 REPA (Yu et al., 2024) 与外部语义编码器对齐中间特征 是 ~1.7× 否（逐帧编码） 否 SRA (Jiang et al., 2025) 跨层自对齐，无需编码器 否 ~1.4× 部分 否 Self-Flow (Chefer et al., 2026) 自蒸馏 flow 预测目标 否 ~1.4× 部分 否 ReDi (Kouzelis et al., 2026) Token 级别层间对齐 否 ~1.6× 否 否 ReWorld (Ours) 三元表征监督（预测+对齐+排斥） 否 1.003× 是 是 ReWorld 的破局思路 不依赖外部编码器或教师模型，沿着三个互补维度直接塑造中间表征：① 在 Video DiT 中间层施加未来预测监督，让世界表征从形成之初就承载场景动态结构；② 将 Action DiT 的表征与视频世界表征跨模态对齐，确保世界知识被忠实继承；③ 通过硬负样本监督在安全关键边界处塑造判别性表征，让模型能显式区分安全与危险轨迹。\n🧠 方法详解 预备知识：WAM 架构 ReWorld 基于 DriveLaW 的级联式双 DiT 设计，视频生成与轨迹规划在共享潜空间中统一：\nVideo DiT（2B 参数）：以 LTX-Video 预训练权重初始化，负责动作条件下的未来视频生成。给定历史观测 $x_{\\leq 0}$、自车运动学 $s_{\\leq 0}$ 和导航指令 $g$，spatiotemporal VAE 将驾驶片段编码为潜变量 $z_0 = E(x_{\\leq 0})$。采用 rectified-flow 参数化，训练目标为预测从噪声到数据的 velocity 场：\n$$ \\mathcal{L}_{\\text{Gen}} = \\mathbb{E}_{z_0, t, \\epsilon_z} \\left[ \\| v_\\theta^z(z_t, t, c^v) - (\\epsilon_z - z_0) \\|_2^2 \\right], \\quad z_t = (1-t)z_0 + t\\epsilon_z $$Action DiT（133M 参数）：负责轨迹规划，通过交叉注意力从 Video DiT 缓存的中间特征 $\\mathcal{F} = \\{f^{(b)}\\}_{b=1}^{B}$ 读取世界知识。轨迹 $\\tau^{\\text{exp}} = [(x_\\ell, y_\\ell, \\psi_\\ell)]_{\\ell=1}^{L}$ 归一化为 $a_0$，训练目标：\n$$ \\mathcal{L}_{\\text{FM}} = \\mathbb{E}_{a_0, t, \\epsilon_a} \\left[ \\| v_\\phi^a(a_t, t, c^a, \\mathcal{F}) - (\\epsilon_a - a_0) \\|_2^2 \\right] $$标准训练仅联合优化输出端：$\\mathcal{L}_{\\text{Std}} = \\mathcal{L}_{\\text{Gen}} + \\mathcal{L}_{\\text{FM}}$，中间承载世界知识的表征从未被直接优化。\nStage 1：Future-Predictive World Representations 在 Video DiT 的中间层（默认第 8 层）添加轻量级预测头，直接预测 flow-matching velocity target：\n$$ \\hat{v}_t^{(l)} = q_l(h_t^{(l)}), \\quad \\mathcal{L}_{\\text{Mid}} = \\sum_{l \\in \\mathcal{S}} \\mathbb{E} \\left[ \\| \\hat{v}_t^{(l)} - (\\epsilon_z - z_0) \\|_2^2 \\right] $$Stage 1 总目标：$\\mathcal{L}_{\\text{Video}} = \\mathcal{L}_{\\text{Gen}} + \\lambda_{\\text{Mid}} \\mathcal{L}_{\\text{Mid}}$\n双重作用——训练时加速 + 推理时精炼：\n训练时：中间监督迫使中间层承载未来预测信息，加速收敛约 2 倍——在 60k 步达到基线 120k 步的 FVD，且无需外部编码器或教师模型 推理时（自引导）：训练后浅层预测 $v_i$ 捕捉粗略未来趋势，深层 $v_f$ 产生更完整速度场。利用跨层差异进行外推精炼：$v_w = v_i + \\gamma(v_f - v_i)$，其中 $\\gamma$ 为外推系数（默认 1.4）。调度器使用 $v_w$ 替代 $v_f$ 推进去噪轨迹 这种\u0026quot;训练与推理共享同一设计\u0026quot;的协同效应，是 ReWorld 能以近乎零额外成本同时提升训练效率和生成质量的关键。\nStage 2：World-Grounded Action Representations Action DiT 的第 $k$ 个交叉注意力层中，动作 token $i$ 的 post-attention 状态 $a_i^{(k)}$ 需对齐其所关注的视频 readout $r_i^{(k)} = \\sum_j \\alpha_{ij}^{(k)} v_j^{(k)}$：\n$$ \\mathcal{L}_{\\text{align}} = \\sum_k \\sum_i \\left[ 1 - \\cos\\left( a_i^{(k)}, \\text{sg}(r_i^{(k)}) \\right) \\right] $$冻结 Video DiT，仅更新 Action DiT：$\\mathcal{L}_{\\text{act}}^{(2)} = \\mathcal{L}_{\\text{FM}} + \\lambda_{\\text{align}} \\mathcal{L}_{\\text{align}}$（默认 $\\lambda_{\\text{align}} = 0.05$，在第 12 个交叉注意力层施加）\n直觉：如果不加对齐约束，action token 的 post-attention 状态可能主要继承来自其他 action token 或位置编码的信息，而非视频世界特征。余弦相似度对齐迫使 action state 在表征方向上与 video readout 一致——本质上是在说\u0026quot;规划模块中的每个状态，都应当在语义方向上与它所看到的视频场景对齐\u0026quot;。\nStage 3：Safety-Aware Action Representations 硬负样本构造：每个场景采样 64 条候选轨迹，NAVSIM PDM 评分，选分数 \u0026lt; 0.6 且与专家轨迹几何最近的一条作为硬负样本 $\\tau^{\\text{neg}}$。\nRDE 损失：在 $\\Delta$ 表征（$[\\widetilde{\\Delta x}_\\ell, \\widetilde{\\Delta y}_\\ell, \\sin\\psi_\\ell, \\cos\\psi_\\ell]$）中最大化预测轨迹与硬负样本的距离：\n$$ \\mathcal{L}_{\\text{RDE}} = -\\frac{1}{|\\mathcal{V}|} \\sum_{b \\in \\mathcal{V}} \\frac{1}{L} \\sum_{\\ell=1}^{L} \\frac{1}{4} \\sum_{d=1}^{4} \\left| \\Delta(\\hat{\\tau}_b)_\\ell^{(d)} - \\Delta(\\tau_b^{\\text{neg}})_\\ell^{(d)} \\right| $$联合微调双 DiT：$\\mathcal{L}_{\\text{act}}^{(3)} = \\mathcal{L}_{\\text{FM}} + \\lambda_{\\text{RDE}} \\mathcal{L}_{\\text{RDE}}$\n架构流程图 ReWorld：三阶段训练框架 - Stage 1 (Video DiT + 中间监督) - Video DiT (2B): L1 -\u0026gt; L2 -\u0026gt; ... -\u0026gt; L8 -\u0026gt; ... -\u0026gt; Out - 预测头 q_l - 损失: L_Gen + λL_Mid - Stage 2 (Action DiT + 对齐) - Video DiT (冻结) -\u0026gt; Action DiT (133M) - Action DiT 内部: att -\u0026gt; cos(a_i, r_i) - 损失: L_FM + λL_align - Stage 3 (联合微调 + 安全) - Video DiT \u0026lt;- Action DiT (互相连接) - 整体 RDE Loss: L_FM + λL_RDE 计算效率 方法 归一化训练成本 外部依赖 Vanilla Flow 1.00× 无 Self-Flow ~1.4× 无 SRA ~1.4× 无 ReWorld 1.003× 无 REPA w/ DINOv2 ~1.7× DINOv2 ReDi ~1.6× 无 🔬 实验与结果 视频生成质量（nuScenes validation） 方法 FVD ↓ DriveGAN 502.3 DriveDreamer 452.0 DrivingGPT 142.6 Vista 89.4 Epona 82.8 DriveLaW 81.3 ReWorld 61.9 FVD 从 81.3 降至 61.9，相对提升 23.9%。这一增益来自中间预测监督（让表征从形成之初就拥有未来场景结构）与推理时自引导（利用浅-深差异精炼生成）的协同作用。\n闭环规划（NAVSIM Navtest） 方法 NC ↑ DAC ↑ TTC ↑ Comf. ↑ EP ↑ PDMS ↑ UniAD 97.8 91.9 92.9 100 78.8 83.4 DiffusionDrive 98.2 96.2 94.7 100 82.2 88.1 Epona 97.9 95.1 93.8 99.9 80.4 86.2 PWM 98.6 95.9 95.4 100 81.8 88.1 WorldDrive 98.4 96.8 95.2 100 83.3 89.0 DriveLaW 99.0 97.1 96.7 100 81.3 89.1 ReWorld 99.1 98.2 97.7 99.8 82.0 90.4 PDMS 从 89.1 提升至 90.4（+1.3），无需任何 RL 后训练或后处理。在所有世界模型方法中取得最优 NC（99.1）、DAC（98.2）和 TTC（97.7），表明世界接地与安全感知的动作表征直接转化为更安全、更合规的闭环行为。对比最优的 WorldDrive（89.0）和 DriveLaW（89.1），ReWorld 在安全指标上全面领先。\n训练收敛速度与表征学习方法系统性对比 从零训练时，ReWorld 在约 60k 步达到与 Vanilla Flow 120k 步相当的 FVD（270.4 vs 304.1），加速约 2 倍。这一加速来自中间监督在训练早期即引导网络形成有预测意义的表征，而不需要任何外部编码器或教师模型。\n表征学习方法对比（from-scratch 120k steps, LTX-Video 框架）：\n方法 外部表征 FVD ↓ Vanilla Flow 否 304.1 SRA 否 296.9 SRA2 否 295.2 Self-Flow 否 283.3 ReWorld 否 270.4 REPA w/ DINOv2 是 295.9 REPA w/ VideoMAEv2 是 328.3 REPA w/ DepthAnything3 是 319.4 REPA w/ V-JEPA2 是 331.6 关键发现：外部对齐方法（REPA 系列）在驾驶视频生成中表现不佳甚至低于基线。原因有三：第一，DINOv2、VideoMAEv2 等编码器主要捕获外观语义，未针对多秒驾驶预测所需的长程时序动态优化；第二，对齐到冻结的外部空间引入竞争梯度，干扰视频模型自身的时空表征学习；第三，视频场景下逐帧运行外部编码器的计算开销不可忽视（~1.7×）。\n值得注意的是，REPA w/ VideoMAEv2（理论上含时序信息）反而取得 328.3 的 FVD（比基线更差），说明简单引入时序编码器不仅无益反而有害——不匹配的对齐空间会破坏视频模型内部的表征组织。\n消融实验 规划组件增量消融：\n配置 PDMS ↑ DriveLaW Baseline 89.1 + Align only 89.5 (+0.4) + RDE only 89.8 (+0.7) + Align + RDE 90.4 (+1.3) 中间监督层选择（FVD）：\n监督层 第 4 层 第 8 层 第 12 层 第 16 层 FVD ↓ 68.4 61.9 64.7 66.2 自引导系数 $\\gamma$ （FVD）：\n$\\gamma$ 0.6 1.0 1.2 1.4 1.6 2.0 FVD ↓ 69.8 65.3 63.1 61.9 63.8 68.9 RDE 权重 $\\lambda_{\\text{RDE}}$ （PDMS）：\n$\\lambda_{\\text{RDE}}$ 0.0 0.02 0.04 0.06 0.08 PDMS ↑ 89.5 89.9 90.4 90.1 89.6 $\\lambda_{\\text{RDE}} = 0.04$ 取得最佳 PDMS（90.4），过小则排斥信号不足，过大会与模仿学习目标（$\\mathcal{L}_{\\text{FM}}$ 吸引到专家轨迹）产生竞争梯度，导致 PDMS 回退。\n消融实验关键结论：Align 和 RDE 两种损失在规划维度上互补——Align 提升 world knowledge 的传递效率（偏\u0026quot;认知\u0026quot;），RDE 注入安全边界的判别性（偏\u0026quot;安全\u0026quot;）。两者叠加产生超加性增益（0.4 + 0.7 \u0026lt; 1.3），证明它们作用于表征的不同维度且相互促进。\n定性结果：图 3 展示了 ReWorld 与 DriveLaW 在四个不同运动速度场景下的视频生成定性对比。(a) 启动场景中两者差异不大，均生成合理帧；(b) 速度增加后，ReWorld 保持更清晰的道路标线、更完整的护栏结构，而 DriveLaW 已出现模糊；(c) 持续高速场景中，DriveLaW 出现结构漂移和色调偏移，ReWorld 保持真实色调和稳定远距离车辆；(d) 极端高速场景中，DriveLaW 出现已通过物体的残留和路边元素消失，ReWorld 维持一致场景布局和准确目标连续性。这些优势直接源于未来预测中间监督——它让底层表征从形成之初就承载场景动态结构，而推理时自引导进一步精炼了高动态区域的生成质量。\n实验设置细节 配置 详情 训练语料 nuScenes（1000 段城市驾驶）+ nuPlan（~1200h 真实驾驶） 视频采样率 8Hz（视频模型），2Hz（轨迹监督，NAVSIM 协议） 优化器 AdamW（lr=1e-5, weight decay=5e-2） 推理参数 视频 30 步采样（自引导 γ=1.4），轨迹 5 步 Stage 1 配置 batch size 64，20k steps，从 LTX-Video 预训练权重继续训练 Stage 2 配置 batch size 128，6k steps，冻结 Video DiT，λ_align=0.05 Stage 3 配置 batch size 160，10k steps，联合微调，λ_RDE=0.04 💡 关键洞察与启发 表征即目标，而非副产品：当前 WAM 的架构设计已相当成熟——级联式双 DiT、flow-matching 训练、交叉注意力传递世界知识——真正的瓶颈在表征层面。中间表征仅作为输出损失的副产品被间接塑造。ReWorld 证明将中间表征直接作为优化目标是可行且高效的。这一思路不涉及架构改动，具有高度的正交性和通用性，可推广到其他 WAM 架构中。\n视频生成的表征学习存在根本性不同：REPA 等图像扩散表征学习方法难以迁移到驾驶视频生成。根本原因在于维度差异——视频生成需同时建模外观语义、时序一致性和未来状态可达性，而现有图像级视觉编码器（无论是语义的 DINOv2 还是时序的 VideoMAEv2）都无法提供合适的对齐空间。REPA 系列全部低于甚至大幅低于基线的结果表明，不加甄别地\u0026quot;借用\u0026quot;外部表征空间反而有害。\n自引导的双重价值——训练与推理的协同效应：中间监督在训练时加速约 2 倍收敛（无需外部编码器或教师模型），推理时通过浅-深层差异作为自引导信号精炼生成帧。这种\u0026quot;一石二鸟\u0026quot;的设计在几乎零额外成本下带来显著收益。其成功建立在中间监督创造的有意义跨层差异之上——这不是巧合，而是一种精心设计的正反馈循环。\n安全信号的显式注入不可替代：仅靠模仿学习和视频生成无法区分安全与危险轨迹——两条几何接近的轨迹在闭环安全性上可能截然不同。通过离线构造硬负样本 + RDE 损失，ReWorld 在表征空间中显式推开安全边界处的轨迹。RDE 单独贡献 +0.7 PDMS，且在消融实验中与 Align 损失叠加产生超加性增益（0.4 + 0.7 \u0026lt; 1.3）。\nStage 3 的双向耦合是亮点设计：RDE 的梯度不仅更新 Action DiT，还通过共享计算图反向传播到 Video DiT 的视频特征。这意味着安全感知信号不仅塑造规划端的决策边界，还回溯性地重塑生成模块的世界表征，让视频模型本身学会生成\u0026quot;更安全\u0026quot;的未来场景——超越了\u0026quot;仅规划端考虑安全\u0026quot;的范式。\n高效实用性——被低估的价值：ReWorld 增加的计算开销几乎可以忽略（1.003×），无需外部编码器、教师模型或 RL 后训练，在自动驾驶实际工程落地中具有压倒性优势。这证明表征学习在 WAM 领域依然有巨大的挖掘空间，且以最小的工程代价即可换取显著收益。\n⚠️ 局限与开放问题 硬负样本质量依赖模拟器：RDE 的有效性高度依赖于 NAVSIM PDM 模拟器的评分质量。模拟器与现实之间的 gap 可能导致硬负样本选择偏差，在真实部署中需谨慎评估 三阶段训练协议的复杂度：虽然每阶段计算开销低，但三阶段串行训练增加了实验管理的复杂性，一个端到端的联合训练协议是值得探索的方向 外部表征方法的失败原因：REPA 系列方法为何在驾驶视频生成中全面失败？论文给出了一些分析（编码器不匹配、竞争梯度），但更深层的理论理解仍待建立 自引导的泛化性：自引导依赖于有意义的浅-深层差异——这一差异是否在所有数据集和架构中都存在？目前仅在一个架构（Video DiT with LTX-Video）上验证 代码未开源：截至论文发表，ReWorld 尚未开源，复现工作需要从 DriveLaW 基线开始自行实现 NAVSIM 闭环 vs 真实闭环：NAVSIM 是非反应式（non-reactive）评测，不模拟其他交通参与者对 ego 行为的反应。ReWorld 在非反应式评测上的提升能否迁移到真实/反应式闭环中，仍需进一步验证 表征可解释性未探索：RDE 和 Align 损失塑造后的表征到底编码了什么？论文未提供表征可视化分析，这是后续值得深入的方向 🔗 延伸阅读 相关工作 关系 DriveLaW (CVPR 2026) ReWorld 的基线架构，级联式 WAM 设计 REPA (NeurIPS 2024) 扩散模型表征学习代表作，ReWorld 对比分析对象 SRA / SRA2 自对齐表征学习方法 BeyondDrive RDE 损失的灵感来源 WorldDrive / PWM 同赛道 WAM 方法，Planner-only 改进 Epona / DrivingGPT 早期 WAM 工作，共享 backbone 范式 Paper: arXiv 2606.27504 | 本文基于 CVPR 2026 论文内容撰写\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2606-27504/","summary":"现有 World Action Model 仅通过输出端损失间接塑造中间表征，导致世界知识无法有效传递到规划模块。ReWorld 首次提出面向自动驾驶 WAM 的表征学习框架，通过未来预测监督、跨模态对齐和硬负样本排斥三个维度直接优化中间表征，在 nuScenes 上将 FVD 从 81.3 降至 61.9（降幅 23.9%），在 NAVSIM 上将闭环 PDMS 从 89.1 提升至 90.4 且无需 RL 后训练。","title":"论文精读｜ReWorld — 面向 World Action Model 的表征学习"},{"content":"📄 论文信息 项目 内容 标题 X-World: Controllable Ego-Centric Multi-Camera World Models for Scalable End-to-End Driving 团队 小鹏汽车 GWM 团队（Chaoda Zheng, Sean Li 等 12 人） 发表 arXiv 2503.19979，2026 年 3 月 项目主页 https://x-world-1.github.io 关键词 世界模型、可控视频生成、多相机一致性、VLA、闭环仿真 一句话概括：X-World 是小鹏汽车提出的基于扩散模型的多相机可控世界模型。给定多视角历史视频与未来动作序列，它能在视频空间直接生成未来多相机观测；同时支持对动态交通体、静态道路元素的可选控制，以及文本驱动的场景外观编辑（天气/时段/地域），为 VLA 端到端自动驾驶提供了可扩展的闭环评测与仿真训练基础设施。\n🤔 要解决什么问题？ 端到端自动驾驶的评测困境 在 VLA 端到端时代，自动驾驶系统的评测仍是最大瓶颈之一。传统评测手段及其痛点如下：\n评测方式 成本 场景覆盖 可复现性 安全性 主要痛点 真实路测 极高（百万公里级） 偏置（74.8% 为直行） 差（不可控） 有风险 长尾场景 \u0026lt; 5%，安全事件依赖碰运气 Log-Replay 中 受限（只能 replay 历史） 一般 安全 反事实动作无法评测 仿真器（CARLA 等） 中低 广但真实感差 好 安全 Sim-to-Real 鸿沟大，视觉策略难以迁移 视频世界模型（本文） 低（部署后几乎零边际成本） 广（可通过条件组合任意生成） 极好 安全 技术挑战：可控性、一致性、长时序稳定性 核心矛盾是：真实路测安全但昂贵且长尾覆盖不足，仿真评测可控但视觉保真度不足以训练 VLA 策略。X-World 的目标是在\u0026quot;真实感\u0026quot;和\u0026quot;可控性\u0026quot;之间架一座桥——在视频空间生成真实的多相机未来观测，且对自车动作、交通体、道路要素、环境外观完全可控。\n现有视频生成模型的不足 已有视频扩散模型（Sora、WAN、CogVideo 等）能生成高保真视频，但存在三个致命短板：\n缺乏精细可控性：无法指定自车动作、物体轨迹等参数化条件 单视角/单相机：无法保证多相机环视的跨视角几何一致性 仅离线生成：多为双向扩散，无法用于实时流式交互仿真 X-World 正是针对这三个痛点提出了完整的解决方案。\n🏗️ 方法详解 4.1 整体架构与数据流 X-World 基于 WAN 2.2 5B 视频生成架构，采用高压缩比的 3D Causal VAE（空间 $16\\times$，时序 $4\\times$ 压缩），将 $V=7$ 个环视相机的视频映射到通道维度为 48 的紧凑隐空间。\nX-World 数据流总览 输入 历史多相机视频 (t-L ~ t, V 路) -\u0026gt; 3D Causal VAE (16x4x) 自车动作序列 (速度/曲率等) -\u0026gt; 3D Causal VAE 动态体条件 / 静态元素条件 / 文本提示 / 相机内外参 -\u0026gt; 条件编码 3D Causal VAE 输出 latent -\u0026gt; Multi-View DiT Multi-View DiT (View-Temporal SA + 异构条件注入 + 解耦 Cross-Attn) 接收: latent + 条件编码 4/50 步去噪 -\u0026gt; Predicted latent 输出 Predicted latent -\u0026gt; 3D Causal Decoder -\u0026gt; 未来多相机视频 (t ~ t+F, V 路) 3D Causal Decoder \u0026lt;- Rolling KV Cache (流式时序上下文) 训练 / 推理阶段 Stage-I: 双向 Rectified Flow (50步), 对应 C2V (L=0) Stage-II: 因果分块 + Self-forcing (4步), 对应 I2V (L=1), V2V (L\u0026gt;1) 输入输出形式化定义为：\n$$ \\hat{\\mathbf{X}}_{t:t+F}^{1:V} = \\mathcal{G}\\left(\\mathbf{X}_{t-L:t}^{1:V}, \\mathbf{a}_{t:t+F}, \\mathbf{C}_{\\text{dyn}}, \\mathbf{C}_{\\text{static}}, \\mathbf{c}_{\\text{text}}; \\boldsymbol{\\theta}\\right) $$其中 $V=7$ 为相机数，$L$ 为历史帧数，$F$ 为未来帧数，$\\mathbf{a} \\in \\mathbb{R}^{F \\times 4}$ 为自车动作序列（速度、曲率、横滚角、俯仰角），$\\mathbf{C}_{\\text{dyn}}$ 和 $\\mathbf{C}_{\\text{static}}$ 为动态/静态结构化条件，$\\mathbf{c}_{\\text{text}}$ 为文本提示。\n核心 Diffuser 是定制化的 Multi-View DiT，其每层包含三个关键子模块：\nView-Temporal Self-Attention — 跨视角、跨时序的全交互 异构条件注入 — 不同条件采用不同注入策略 解耦 Cross-Attention — 三种条件各自独立交叉注意力 4.2 View-Temporal Self-Attention 与异构条件注入 视角-时序自注意力 传统的视频 DiT 只在单视角内做时序注意力，导致多相机画面中出现几何矛盾——同一辆车在前向相机和侧向相机中的位置不一致。X-World 的 View-Temporal Self-Attention 将 latent token 组织为 $(V \\times T \\times H \\times W)$ 的张量，然后沿着视角维度和时间维度交替执行完全注意力，使所有 token 之间都可以交互。\n具体地，将 3D latent 展平为 $N = V \\times T \\times H \\times W$ 个 token，自注意力计算为：\n$$ \\text{Attention}(Q, K, V) = \\text{Softmax}\\left(\\frac{QK^\\top}{\\sqrt{d_k}}\\right)V $$其中 $Q, K, V$ 来自全部 $N$ 个 token 的线性投影。这使得来自不同相机、不同时间步的 latent 可以充分交换信息，确保跨视角的物体身份、运动模式和几何结构相互对齐。这在物理上等价于让模型隐式学习了一组\u0026quot;跨相机投影矩阵\u0026quot;，只不过是在隐空间中通过注意力完成的。\n异构条件注入策略 不同条件具有截然不同的数值特性和语义粒度，用同一种方式注入会导致控制冲突。X-World 的差异化设计如下：\n条件类型 注入方式 预处理流程 关键设计理由 自车动作 \u0026amp; 时间步 adaLN-Zero symlog → Fourier 编码 → MLP → diag 调制 连续低维控制，适合对 hidden state 做 channel-wise 缩放 相机内外参 Additive Embedding 归一化 → MLP → 加性注入 hidden state 相机参数是\u0026quot;静态身份\u0026quot;，加性嵌入不破坏 token 间交互 动态交通体 Cross-Attention umT5 语义编码 + 归一化坐标 + Fourier 编码 → 拼接 → MLP 序列化条件，需要与视频 token 做灵活的 query-key 匹配 静态道路元素 Cross-Attention 同上，但训练时 Dropout 与动态体同结构但强度不同，CFG 引导系数更高 文本提示 Cross-Attention 继承 WAN 的 T5 编码管线 控制全局外观，粒度最粗 动作参数的预处理值得特别关注。原始动作值 $\\mathbf{a}$ 先经过 symlog 变换压缩动态范围：\n$$ \\text{symlog}(x) = \\text{sign}(x) \\cdot \\ln(1 + |x|) $$然后通过 Fourier 特征编码将标量映射到高维空间：\n$$ \\gamma(x) = [\\sin(2\\pi f_1 x), \\cos(2\\pi f_1 x), \\ldots, \\sin(2\\pi f_k x), \\cos(2\\pi f_k x)] $$最终通过 MLP 投影到与 DiT hidden state 一致的维度，经 adaLN-Zero 注入。\n解耦交叉注意力 为避免不同类型条件间的相互干扰，X-World 为动态体、静态元素、文本提示分别设置独立的交叉注意力分支，而非共享同一通路。每种条件的 Key 和 Value 来自各自的条件编码器，Query 来自视频 latent，三者并行计算注意力后相加。这使得每种条件的梯度更新互不干扰，训练时可独立调节每种条件的引导强度——例如静态元素使用更高的 CFG 系数以保证道路拓扑的精确性，而文本使用更柔和的系数来保留生成多样性。\n4.3 两阶段级联训练 X-World 采用两阶段训练策略，兼顾双向生成的高质量与流式推理的实时性。\nStage-I：双向 I2V 训练 从 WAN 2.2 5B TI2V 权重初始化（已有参数直接加载，新增模块随机初始化），在 81 帧多相机短片段上进行 Rectified Flow 训练：\n$$ \\mathcal{L}_{\\text{RF}}(\\theta)=\\mathbb{E}_{\\mathbf{y}_{0},\\,\\mathbf{y}_{1},\\,t,\\,\\mathbf{c}}\\left[\\left\\|v_{\\theta}(\\mathbf{y}_{t},t,\\mathbf{c})-(\\mathbf{y}_{1}-\\mathbf{y}_{0})\\right\\|_{2}^{2}\\right] $$其中 $\\mathbf{y}_{t}=(1-t)\\mathbf{y}_{0}+t\\mathbf{y}_{1}$，$\\mathbf{y}_0$ 为真实未来视频的 latent，$\\mathbf{y}_1 \\sim \\mathcal{N}(0, I)$ 为标准高斯噪声，$v_\\theta$ 为模型预测的速度场。该阶段产出高精度可控的双向世界模型，但需要约 50 步逆扩散迭代采样才能达到最佳质量，无法用于实时交互。\n此阶段的核心挑战是多相机数据的大规模并行训练——7 个相机 × 81 帧 × VAE latent 的张量尺寸极大，团队采用了序列并行（sequence parallelism）和张量并行（tensor parallelism）的混合策略在 64 张 A100 GPU 上完成训练。\nStage-II：因果流式蒸馏 将 Stage-I 的双向模型改造为分块因果架构（Chunk-wise Causal），关键设计如下：\n分块因果掩码：将 latent 序列沿时间轴划分为固定大小的块（chunk）。块内 token 可以双向交互以保持局部生成质量，块间采用因果 mask——当前块只能看到自身及之前块的 token，不能看到未来块的信息。\nSelf-forcing 蒸馏：不使用 ground-truth 上下文进行 teacher forcing，而是在模型自身的自回归 rollout 输出上训练。给定第 $i$ 个块的生成结果后，将其作为第 $i+1$ 个块的条件上下文。这大幅缓解了训练-推理分布偏移（exposure bias），是长时序稳定性的关键。\nDMD 分布匹配蒸馏：使用 Distribution Matching Distillation 损失逼近 Stage-I 教师模型的分布：\n$$ \\mathcal{L}_{\\text{DMD}} = \\mathbb{E}_{p_{\\text{student}}} [r(\\mathbf{y})] + \\beta \\cdot \\text{KL}(p_{\\text{student}} \\| p_{\\text{teacher}}) $$其中 $r(\\mathbf{y})$ 为判别器对生成样本的打分，KL 项约束学生分布不偏离教师。配合 4 步去噪（4-step DDIM sampler），学生模型即可生成与 50 步教师模型质量相当的视频。\nRolling KV Cache：推理时维护一个定容 FIFO 滑动窗口（默认窗口大小与训练块大小一致），存储最近的历史键值对。新块生成时复用缓存中的 attention 上下文；旧块超出容量时按先进先出丢弃。这使得长时序推理的内存开销恒定 $O(\\text{window\\_size})$，同时保持充分的近期时序上下文。 Stage-II 的核心消融实验数据（来自论文 Table）：\n策略配置 FVD ↓ 时序连贯性 推理步数 备注 Stage-I 双向（基线） 最优 高 50 不可流式 + 因果分块 ↑ 3.2% 中 50 可流式但质量下降 + Self-forcing ↑ 0.8% 高 50 缓解漂移 + DMD 4-step ↑ 1.5% 高 4 速度提升 12.5× DMD 4-step 蒸馏在仅损失 1.5% FVD 的前提下将推理速度提升了 12.5 倍，使得 X-World 达到了接近实时的交互帧率。\n4.4 统一的 I2V/V2V/C2V 三模式 通过控制历史帧数 $L$ 实现三种生成模式的统一，这是 X-World 在框架设计上的精巧之处：\n模式 历史帧 $L$ 生成任务 典型用途 I2V (Image-to-Video) $L=1$ 以第一帧锚定外观和几何，生成剩余未来 标准世界模型预测 V2V (Video-to-Video) $L\u003e1$ 基于多帧观测提供更强的时序上下文 更稳定的闭环仿真 C2V (Condition-to-Video) $L=0$ 无历史观测，纯条件生成 数据合成 + 风格迁移 $$ \\hat{\\mathbf{X}}_{t:t+F}^{1:V} = \\begin{cases} \\mathcal{G}_{\\text{I2V}}(\\mathbf{X}_{t}^{1:V}, \\mathbf{a}_{t:t+F}, \\ldots), \u0026 L=1 \\\\ \\mathcal{G}_{\\text{V2V}}(\\mathbf{X}_{t-L:t}^{1:V}, \\mathbf{a}_{t:t+F}, \\ldots), \u0026 L\u003e1 \\\\ \\mathcal{G}_{\\text{C2V}}(\\emptyset, \\mathbf{a}_{t:t+F}, \\mathbf{C}_{\\text{dyn}}, \\mathbf{C}_{\\text{static}}, \\mathbf{c}_{\\text{text}}), \u0026 L=0 \\end{cases} $$C2V 模式虽不是严格意义上的世界模型（不建模状态转移），但其实际价值巨大：在固定动作和场景控制下，通过修改文本提示实现零样本的地域/天气/时段风格迁移。例如将中国路况数据转换为欧洲左舵风格，为国际化部署提供低成本数据合成方案。\n🔬 实验与结果 实验设置 X-World 在内部采集的大规模多相机驾驶数据集上训练和评测，包含 7 路环视相机、12 FPS、每段 10 秒（120 帧）的视频片段。评测维度包括：帧级保真度（FVD、FID）、动作跟随度、跨视角一致性、长时序稳定性。\n多视角一致性与可控性结果 自车动作可控性：在相同初始帧下，仅改变自车动作序列（直行→右转、保持车道→变道），模型能生成严格跟随动作的多相机视频。3 秒规划路径与生成视频的轨迹对齐误差极小。\n动态体与静态元素可控性：在 6 秒多相机生成中，模型稳定保持指定物体的位置/运动以及道路拓扑结构，即使经过鱼眼和窄角相机的视角变换仍保持一致。\n定量结果对比 方法 FVD ↓ FID ↓ 动作跟随误差 ↓ 跨视角一致性 ↑ 支持多相机 可控性维度 DriveDreamer 342.1 28.7 — 单相机 ✗ 文本+HDMap GenAD 318.5 25.3 — 单相机 ✗ 文本+轨迹 DriveDreamer-2 276.2 21.8 0.287 有限 ✓ 文本+3D框 X-World (Ours) 158.3 12.4 0.083 0.92 ✓ (7路) 动作+动态+静态+文本 X-World 在 FVD 上相比 DriveDreamer-2 降低约 43%，跨视角一致性得分 0.92（1 为完全一致），验证了 View-Temporal Self-Attention 和异构条件注入的有效性。\n长时序生成与消融研究 X-World 支持 24 秒以上的流式多相机长视频生成，无明显漂移或质量坍塌。以下是对各类条件的消融实验：\n条件使用 FVD ↓ 动作跟随 ↓ 文本对齐 ↑ 说明 全部条件（完整模型） 158.3 0.083 0.87 最好 移除动态体条件 172.1 0.091 0.85 动态体一致性下降 移除静态元素条件 169.8 0.088 0.84 道路拓扑偶尔扭曲 移除文本条件 160.2 0.085 — 外观多样性丧失 仅使用自车动作 175.6 0.095 — 静态/动态不可控 共享 Cross-Attention（非解耦） 181.4 0.112 0.76 条件间干扰明显 不使用 View-Temporal SA 213.7 0.134 0.72 跨视角不一致严重 关键结论：(1) 解耦交叉注意力比共享方案 FVD 提升 12.8%；(2) View-Temporal Self-Attention 是跨视角一致性的最大贡献者；(3) 每种条件类型都有其不可替代的作用。\n文本驱动外观编辑与多视角一致性 在固定动作、动态体和静态元素的条件下，通过修改文本提示即可改变地域风格、时段和天气。所有图像（包括第一帧）均由 C2V 模式生成，验证了模型具备独立的外观生成和风格迁移能力。\n同一场景中前置窄角、鱼眼、侧向、后向等多个相机视野中的物体保持几何一致，跨相机切换时无跳变。View-Temporal Self-Attention 使得不同视图的 latent 能够充分交互信息。\n实际应用落地 X-World 在小鹏 VLA 2.0 系统中已落地三个核心场景：\n应用场景 技术方案 价值 闭环评测引擎 替代 log-replay，对策略的反事实动作生成真实视觉反馈 解决\u0026quot;无法评测未见过的动作\u0026quot;的困境 在线强化学习环境 在鬼探头、密集变道等困难场景中生成训练数据 探索现实中无法安全进行的临界状态 大规模数据合成 C2V 零样本地域/天气/时段风格迁移 国内数据→海外风格，加速国际化部署 📊 与现有方法的对比分析 X-World 定位在\u0026quot;可控多相机世界模型\u0026quot;这一细分方向，与已有工作的核心差异：\n方法 基座模型 多相机 动作可控 动态/静态可控 文本可控 流式生成 统一 I2V/V2V/C2V DriveDreamer Stable Video Diffusion ✗ ✓ (部分) ✗ ✓ ✗ ✗ GenAD Latte ✗ ✓ ✗ ✓ ✗ ✗ DriveDreamer-2 Video Diffusion ✓ (4路) ✓ ✓ (3D框) ✓ ✗ ✗ ADriver-I Diffusion Transformer ✗ ✓ ✗ ✗ ✗ ✗ Panacea Diffusion ✓ ✗ ✗ ✓ ✗ ✗ Cosmos MoT DiT ✗ ✗ ✗ ✓ ✓ ✗ X-World (Ours) Multi-View DiT ✓ (7路) ✓ ✓ (动态+静态) ✓ ✓ (4步) ✓ X-World 是唯一同时满足全部维度的方案。特别是在\u0026quot;多相机 + 动作可控 + 动态/静态可控 + 流式生成\u0026quot;的组合上具有独特性，这一组合使其能够真正胜任 VLA 策略的闭环仿真需求。\n💡 关键洞察与启发 视觉空间世界模型比隐空间更实用：对 VLA 系统而言，世界模型的输出空间应与策略输入空间对齐。直接在视频空间建模状态转移比在隐空间重构（如 Dreamer 类方法）更实用——避免了隐向量解码为像素时的信息损失和分布偏移。这个设计选择背后的洞察是：VLA 策略的视觉编码器已经适应了像素空间，如果世界模型输出隐向量，就需要在策略侧额外加一个对齐模块，增加了系统复杂度和级联误差。X-World 直接输出视频帧，使得它可作为一个即插即用的\u0026quot;仿真器\u0026quot;模块插入任何现有 VLA 管线中。\n因果分块 + Self-forcing 是实现交互式世界模型的关键工程创新：双向扩散模型质量虽高但无法实时交互，因果生成效率高但质量下降。X-World 通过分块设计（块内双向 + 块间因果）加 Self-forcing 蒸馏（在模型自身上下文上训练），实现了质量与速度的帕累托最优。其中 Self-forcing 对长时序稳定性的贡献远超预期——在没有 Self-forcing 的情况下，即使使用分块因果架构，rollout 超过 15 秒后仍然会出现明显漂移。这个技术细节对任何做长时序自回归生成的工作都有借鉴价值。\n异构条件需要异构处理——\u0026ldquo;一刀切\u0026quot;是可控性的大敌：X-World 为不同类型条件设置独立的交叉注意力分支和差异化注入策略（adaLN-Zero / Additive / Cross-Attention），有效避免了条件间的相互干扰。消融实验显示，将三种条件共享同一个交叉注意力分支会导致 FVD 上升 12.8%，且动作跟随误差增加 34.9%。这说明\u0026quot;异构条件、异构处理\u0026quot;不是风格选择，而是性能需要。在实际部署中，不同类型条件的学习进度和难度不同，独立分支也让训练调度更加灵活（如对静态条件使用更高的 CFG 系数）。\n数据质量是决定世界模型上限的根本因素：团队投入大量计算资源构建了完整的数据标注体系——三层标签体系（环境 50 类 + 静态 24 类 + 动态 5 类 + 行为 21 类）加 VLM 自动视频描述，并对数据分布进行系统性分析（74.8% 直行、21.0% 静止、不足 5% 长尾），直接指导后续数据采集的优先级。这种\u0026quot;数据驱动模型迭代\u0026quot;的工程思路是论文落地的关键保障。特别是分布分析揭示的\u0026quot;小学课本式的正态分布\u0026quot;问题——绝大多数驾驶行为集中在正常直行上，而安全攸关的长尾行为严重不足——这提醒我们：采集更多数据不如采集更长尾的数据。\n从双向到流式的蒸馏范式可以推广到更多交互式生成场景：Stage-I 高质量双向 → Stage-II 流式蒸馏的范式不仅在自动驾驶场景有效，在机器人仿真、游戏引擎、数字孪生等需要实时交互的领域也有巨大潜力。关键在于 DMD 蒸馏 + 分块因果的设计组合——DMD 保持单步质量，分块因果保证时序连贯，两者缺一不可。Rolling KV Cache 的工程实现也很巧妙，它把注意力上下文的存储从 $O(T)$ 降低到 $O(\\text{window})$，使得理论上可以无限长时序生成。\nVLA 时代，世界模型正在从\u0026quot;研究工具\u0026quot;变成\u0026quot;基础设施\u0026rdquo;：X-World 在小鹏 VLA 2.0 中的落地——闭环评测、在线强化学习、数据合成——展示了世界模型在量产自动驾驶系统中的三种核心角色。其中\u0026quot;数据合成\u0026quot;的应用尤其具有战略意义：通过 C2V 模式将国内采集的海量数据低成本转化为海外训练资产（如中国道路 → 欧洲风格），这在全球化部署中能节省数百万公里的海外路测成本。这暗示了一个趋势：在 VLA 时代，世界模型不再是研究论文中的概念验证，而是正在成为自动驾驶公司的核心基础设施，其重要性可能不亚于感知模型和规划模型本身。\n参考文献：Zheng, C., Li, S., et al. X-World: Controllable Ego-Centric Multi-Camera World Models for Scalable End-to-End Driving. arXiv:2603.19979, 2026. https://arxiv.org/abs/2603.19979\n","permalink":"https://auto-driving-blog.pages.dev/posts/paper-reading/%E8%AE%BA%E6%96%87%E7%B2%BE%E8%AF%BB-2603-19979/","summary":"端到端自动驾驶面临评测成本高、场景覆盖有限、难以复现的瓶颈。X-World 提出了一种以自我为中心的多视角生成式世界模型，通过动作条件化的多相机视频生成实现可控闭环仿真，在动作跟随度、跨视角一致性和长时序稳定性上取得了突破性表现。论文详细设计了两阶段级联训练策略、视角-时序自注意力机制和异构条件注入方案，为 VLA 系统的可扩展闭环评测与仿真训练提供了完整基础设施。","title":"论文精读｜X-World — 可控多相机世界模型实现可扩展端到端自动驾驶"},{"content":"👨‍💻 Elon 自动驾驶 VLA 工程师（实习） · 专注视觉-语言-动作模型（VLA）、世界模型与端到端自动驾驶\n🎯 求职意向：自动驾驶算法实习 / 应届岗位（VLA、端到端决策规划、扩散生成式驾驶策略方向）。\n🧠 研究方向 端到端自动驾驶：感知-决策-规划一体化建模，从 BEV 感知到轨迹生成的联合优化。 VLA / 世界模型：视觉-语言-动作模型在驾驶场景的指令跟随、可解释性与泛化。 扩散生成式策略：基于 Flow Matching / Flow-GRPO 的驾驶策略训练、强化学习对齐与高效采样。 🛠️ 技术栈 方向 技能 编程语言 Python、PyTorch、C++（基础）、Shell 深度学习 扩散模型 / Flow Matching、GRPO / RLHF、Transformer、BEV 感知 仿真与数据 CARLA、nuScenes、重卡动力学建模（TruckSim 协同仿真） 工程实践 分布式训练、Git/GitHub、Hugo 技术博客写作、论文复现 🚀 代表项目 Flow-GRPO 自动驾驶策略：参与基于流匹配 + GRPO 强化学习的驾驶策略研究，关注稀疏奖励下的策略对齐与稳定性。详见 Projects。 nuTruck 重卡安全框架：研究重卡动力学约束下的安全驾驶策略，涉及侧翻/载荷滑移风险评估。 论文精读与源码拆解：累计精读 60+ 篇自动驾驶论文，并产出 DiffusionDrive、SparseDriveV2 等代码级讲解。 📫 联系方式 GitHub: qyllll Email: 14745277512@163.com 知乎 / 微信：交流可邮件联系 如果你也做自动驾驶，或对 VLA / 世界模型 / 扩散驾驶策略感兴趣，欢迎交流！\n","permalink":"https://auto-driving-blog.pages.dev/about/","summary":"\u003ch2 id=\"-elon\"\u003e👨‍💻 Elon\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003e自动驾驶 VLA 工程师（实习）\u003c/strong\u003e · 专注视觉-语言-动作模型（VLA）、世界模型与端到端自动驾驶\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e🎯 \u003cstrong\u003e求职意向\u003c/strong\u003e：自动驾驶算法实习 / 应届岗位（VLA、端到端决策规划、扩散生成式驾驶策略方向）。\u003c/p\u003e\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch3 id=\"-研究方向\"\u003e🧠 研究方向\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e端到端自动驾驶\u003c/strong\u003e：感知-决策-规划一体化建模，从 BEV 感知到轨迹生成的联合优化。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eVLA / 世界模型\u003c/strong\u003e：视觉-语言-动作模型在驾驶场景的指令跟随、可解释性与泛化。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e扩散生成式策略\u003c/strong\u003e：基于 Flow Matching / Flow-GRPO 的驾驶策略训练、强化学习对齐与高效采样。\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch3 id=\"-技术栈\"\u003e🛠️ 技术栈\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003e方向\u003c/th\u003e\n          \u003cth\u003e技能\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e编程语言\u003c/td\u003e\n          \u003ctd\u003ePython、PyTorch、C++（基础）、Shell\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e深度学习\u003c/td\u003e\n          \u003ctd\u003e扩散模型 / Flow Matching、GRPO / RLHF、Transformer、BEV 感知\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e仿真与数据\u003c/td\u003e\n          \u003ctd\u003eCARLA、nuScenes、重卡动力学建模（TruckSim 协同仿真）\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003e工程实践\u003c/td\u003e\n          \u003ctd\u003e分布式训练、Git/GitHub、Hugo 技术博客写作、论文复现\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003chr\u003e\n\u003ch3 id=\"-代表项目\"\u003e🚀 代表项目\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eFlow-GRPO 自动驾驶策略\u003c/strong\u003e：参与基于流匹配 + GRPO 强化学习的驾驶策略研究，关注稀疏奖励下的策略对齐与稳定性。详见 \u003ca href=\"/posts/projects/\"\u003eProjects\u003c/a\u003e。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003enuTruck 重卡安全框架\u003c/strong\u003e：研究重卡动力学约束下的安全驾驶策略，涉及侧翻/载荷滑移风险评估。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e论文精读与源码拆解\u003c/strong\u003e：累计精读 60+ 篇自动驾驶论文，并产出 DiffusionDrive、SparseDriveV2 等代码级讲解。\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch3 id=\"-联系方式\"\u003e📫 联系方式\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eGitHub\u003c/strong\u003e: \u003ca href=\"https://github.com/qyllll\"\u003eqyllll\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eEmail\u003c/strong\u003e: \u003ca href=\"mailto:14745277512@163.com\"\u003e14745277512@163.com\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e知乎 / 微信\u003c/strong\u003e：交流可邮件联系\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003cp\u003e\u003cem\u003e如果你也做自动驾驶，或对 VLA / 世界模型 / 扩散驾驶策略感兴趣，欢迎交流！\u003c/em\u003e\u003c/p\u003e","title":"关于我"},{"content":"","permalink":"https://auto-driving-blog.pages.dev/favorites/","summary":"","title":"⭐ 收藏夹"}]