X-Foresight 论文阅读笔记
论文:X-Foresight: Driving with Temporal Foresight(小鹏汽车,2026年5月) 一句话总结:给自动驾驶 AI 装上"第六感"——通过在训练时预测高保真多视角未来画面,让模型理解物理世界的因果规律,从而在实车推理时做出更有前瞻性的驾驶决策。
一、背景与动机
现有 VLA 模型的原罪
现有视觉-语言-动作模型(VLA,如 RT-2、PaLM-E、小鹏自家的 VLA 2.0)有一个致命弱点:它们是纯"反应型"的,只能根据当前观测做决策,完全不会模拟未来。就像一个只会看后视镜开车的司机——遇到前方突然变化的情况,必然手忙脚乱。
为什么视频是解法的关键
视频是承载物理世界知识最丰富的载体——颜色、纹理、物体形状、车辆与行人的运动模式,摄像头画面里应有尽有。如果能让 AI 学会"预测未来视频帧",它就自然而然地学到了物理世界的运作规律,不需要任何额外的人工标注。
直接建模视频的两大拦路虎
把大语言模型"预测下一个词"的范式直接搬到视频上,会遭遇两个问题:
1. 视频 token 的低熵病
文字 token 每个语义差异极大(“猫"和"狗"完全不同),但视频相邻两帧几乎一模一样。用 L2 损失训练时,模型很容易学会"偷懒”——把上一帧直接复制过去,损失接近于零,却完全没学到任何动力学知识。这种现象叫做模式塌陷。
2. 时间尺度的两难困境
- 捕捉"刹车"这样的瞬时动作 → 需要密集帧(高时间分辨率)
- 理解"这条路会不会堵"这样的长期因果 → 需要跨越很长时间
两者对时间分辨率的要求完全矛盾。
二、数据
规模
这不是小打小闹的学术数据集,而是工业级的真实世界数据:
| 指标 | 数值 |
|---|---|
| 驾驶时长 | 约 28 万小时 |
| 视频片段数 | 3400 万条(每条最长 30 秒) |
| Token 总量 | 13.8 万亿个 |
| 摄像头数量 | 7 路(360° 全覆盖) |
| 采集/训练频率 | 12Hz 采集,训练降采样至 4Hz |
7 路摄像头的布局:1 个前置鱼眼(广角近场)、1 个前置窄角(远距)、4 个侧向摄像头、1 个后置摄像头。全部经过精确的几何标定,保证多路视图空间一致。
场景分布
近 200 个细粒度场景标签,汇总为 8 大类:
| 场景 | 占比 |
|---|---|
| 直道保持车道 | 21.0% |
| 换道 | 20.1% |
| 复杂车道(压线、无标线) | 16.0% |
| 路口与转弯 | 13.1% |
| 障碍物与加塞 | 9.9% |
| 跟车与拥堵 | 9.6% |
| 弱势道路使用者(行人、非机动车) | 6.2% |
| 特殊道路(匝道、收费站、环岛) | 4.1% |
城市驾驶占 86.8%,高速公路占 13.2%,与真实使用场景高度吻合。
三、方法论
系统由两大核心模块组成:
- 大驾驶模型(LDM):负责"想象未来"和"规划行动",输出抽象的 latent token 和具体的驾驶动作
- 视觉渲染器(Vision Renderer):把 LDM 脑中模糊的"想象"变成逼真的多路摄像头画面
3.1 大驾驶模型(LDM)
多模态 Prompt 设计
输入格式像一本"时间章节书":
[全局系统提示] | [Chunk₀] | [Chunk₁] | ... | [Chunkₕ]
每个 Chunk 包含四类 token,并行拼接:
| Token 类型 | 内容 |
|---|---|
| $l_i$ | 文字 token(时间窗口描述、导航指令) |
| $O_i$ | 观测 token(ViT 编码的 7 路摄像头帧) |
| $A_i$ | 状态 token(历史轨迹、车速等) |
| $Q_i$ | 查询 token(触发预测用的可学习 token) |
模型输出三路:驾驶动作(方向盘、油门刹车)、相机 latent token(未来场景的压缩摘要)、鸟瞰图 BEV token(辅助空间感知)。
训练损失是三者的加权和:
$$L_{total} = L_{act} + \alpha L_{cam} + \beta L_{bev}$$分块预测:同时解决两大拦路虎
核心设计是分块自回归(chunk-wise autoregressive):每次预测一整个"块"(1 秒内的 $K=4$ 帧),而非单帧。
这个设计一石二鸟:
- 逃脱低熵陷阱:预测目标从"相邻帧(差异≈0)“变成"未来整块(跨越 1 秒的有意义变化)",L2 损失有了真正的学习信号
- 兼顾两种时间尺度:块内帧密集(捕捉瞬时动态),块间跨越(捕捉长期因果)
系统提示的全局可见性(Global Sink)
系统提示对所有 Chunk 都可见,作用是解决长距信息衰减问题。
自回归 Transformer 靠注意力传递信息,但信息在 Chunk 之间是间接传递的——就像"电话游戏”,传到最后必然失真。系统提示作为 global sink token,相当于在每个 Chunk 旁边都放了一本永不失真的"参考手册",存放导航目标、车速基准、任务描述等跨越整个序列都不变的信息。每个 Chunk 直接查这本手册,不靠前面的 Chunk 转达。
工程上还有额外好处:系统提示的 KV 缓存只需计算一次,所有 Chunk 共享。
跨 Chunk 的稀疏注意力规则
跨 Chunk 的注意力不是全连接的,而是有精心设计的稀疏规则:
“对应位置 + 空间邻居"机制
每个 Chunk 内部结构完全相同(文字→7路摄像头→动作→查询,顺序固定)。跨 Chunk 时,某个 token 只能看早期 Chunk 中"相同位置及其空间邻居"的 token。
前提假设的重要说明:这里有一个隐含前提——摄像头编号相邻则物理布局也相邻。如果前视是 0 号、后视是 1 号,编号相邻但几乎没有共享视野,邻居机制就会失效。实际实现中,7 路摄像头很可能是按车身环形顺序编号(前窄角→左前→左后→后→右后→右前→前鱼眼),确保编号相邻≈空间相邻。但论文对这个细节的描述是模糊的,这是一个明显的文档空白。
这个设计让模型天然支持两件事:
- 时序追踪:前置摄像头只看历史帧里同样是前置摄像头的 token,可以直接追踪"这辆车在 $t-1$、$t-2$ 时刻长什么样”
- 空间推理:前置摄像头也可以看左前摄像头的历史 token,因为两者有重叠视野
邻居窗口随时间距离收窄
| 时间距离 | 允许访问的空间位置范围 | 逻辑 |
|---|---|---|
| dist = 0(同 Chunk) | 完全双向,全部可见 | 同一时刻多模态信息需充分交互 |
| dist = 1(相邻 Chunk) | 同位置 ± 1~2 格 | 最近一秒,多路摄像头间有强相关 |
| dist = 2 | 仅同位置(± 0) | 较远,只保留同摄像头的时序 |
| dist ≥ 3 | 全部屏蔽 | 太久远,跨摄像头相关性趋近于零 |
查询 token 的特殊规则
查询 token $Q_i$ 严格禁止看其他 Chunk 的查询 token $Q_j$,防止"用预测结果来影响这一步的预测",避免误差级联放大。
工程收益:通过把注意力头按奇偶分成两组,每组只覆盖一半时间偏移量,总的有效块连接数从 O(n²) 降到近似线性 O(n)——训练速度比 FlashAttention-2 快 1.59 倍。
长视野训练:课程学习 + CLEF
为什么要拉长预测视野
训练时预测目标越远,梯度信号能监督的因果链条越长。模型被迫学习"3秒后的场景取决于现在怎么做"这类长程依赖,而这种知识在 $H=1$ 的训练中根本不会出现在梯度里。
论文消融实验验证了这一点:$H=21$ 比 $H=1$ 碰撞率更低,安全性更好。
关于这个训练方式的重要澄清
在 teacher forcing 下,训练时前 $H-1$ 个 Chunk 的输入永远是真实历史数据,而不是模型自己预测出来的数据。这导致一个问题:
每一步在数学上等价于"给定更长的真实历史,预测下一秒"。从这个角度看,$H=21$ 和 $H=1$ 的区别,看起来只是输入侧的历史更长了(类似扩大上下文窗口)。
但这个视角遗漏了关键的一面——输出侧(监督信号)同时也在变化:
- $H=1$:只有 $C_{t+1}$ 的预测误差参与梯度
- $H=21$:$C_{t+1}$ 到 $C_{t+21}$ 共 21 个预测目标的误差全部参与梯度
这 21 路梯度同时反传到共享的编码器和注意力层,塑造了模型的中间表示:让它倾向于保留"对预测远期有用的特征",而不只是"对预测下一步有用的特征"。
用特征的角度来理解:假设存在特征 A(对预测下一秒有用)和特征 B(对预测 5 秒后有用但对预测下一秒帮助不大)。$H=1$ 的训练只强化特征 A,特征 B 的梯度为零。$H=21$ 同时强化 A 和 B,因为 $C_{t+5}$ 的预测误差会给特征 B 一个明确的梯度信号。推理时两个模型看到的历史长度相同,但 $H=21$ 训练出的模型的隐层表示里多了特征 B。
这个区别不来自历史长度,而来自训练时监督信号的覆盖范围。
课程学习的具体步骤
- 第一阶段:相邻块之间步长 1 秒,学近期预测
- 第二阶段(CLEF):块间步长扩大到 3 秒,总预测跨度可达 10 秒
非对称设计:视觉预测可以跳帧(学长期因果),动作预测始终保持高时间分辨率(不能跳帧,实时控制不等人)。计算代价不变(序列长度相同),但监督信号覆盖的物理时间跨度大幅提升。
时序重要性采样(TIS)
均匀采样会让 AI 把大量训练时间花在"直道巡航"这种无聊场景上。TIS 对每个候选训练步计算重要性分数:
$$w_k = \sum_{W \in \{W_1^k, W_2^k, W_3^k\}} \max_{t \in W}(\lambda_x |a_x(t)| + \lambda_y |a_y(t)|)$$把纵向加速度和横向加速度的最大值加权求和,覆盖三个时间窗口(即将发生的、正在发酵的、刚完成的)。凡是有剧烈加减速或转向的时刻,评分高,被抽到的概率大。温度参数 $\tau$ 控制采样集中程度。
Exposure Bias:训练与推理的裂缝
Teacher forcing 带来一个经典问题:训练时模型永远看到完美的真实 Chunk,但推理时(闭环场景下)它要消化自己预测出来的(有误差的)Chunk。模型从未在训练中练习过"在有误差的输入下继续预测",推理时一旦第 i 步出了偏差,误差会在后续步骤里雪球式累积。
这正是论文引入 latent augmentation 和 latent sink 两个补救手段的根本原因——它们的存在本身就是在承认 exposure bias 是一个需要处理的真实问题。
$H$ 越大,这个问题越严重——更长的预测视野带来更深的因果理解,但同时带来更严重的训练推理不一致性,两个效果部分相互抵消。这解释了为什么论文观察到 $H=21$ 相比 $H=6$ 在某些指标上改善有限。
3.2 视觉渲染器(Vision Renderer)
为什么 LDM 的 latent 输出是"模糊的"
LDM 用 L2 损失训练相机 latent token,L2 的本质是最小化均方误差,对应的最优解是所有可能未来的条件期望值。
当未来有多种可能(前方车辆可能直行也可能突然变道),L2 会把它们平均掉,输出一个"模糊的中间态"——即论文承认的 smearing effect(涂抹效应)。这个现象叫均值塌陷(mean collapse):多峰分布被强行压成一个均值点,而这个均值点在物理世界中可能根本不存在。
扩散渲染器的作用正是把这个模糊的均值 latent “补充细节”,还原成一个清晰、真实的场景图像。
均值塌陷问题的严重程度
均值塌陷的危害取决于场景类型:
| 场景类型 | 危害程度 | 原因 |
|---|---|---|
| 正常跟车、变道 | 小 | 未来分布接近单峰,均值≈真实 |
| 多出口环岛、复杂路口 | 中 | 导航指令能部分补偿 |
| 对手车辆博弈(加塞、逼车) | 大 | 真正需要对未来建模 |
| 长尾危险场景 | 最大 | 训练分布覆盖不足且单模态误差最显著 |
对驾驶控制的实际影响是间接的:相机 latent 主要用于下一步的"观测输入",动作输出是另一路独立的预测头,有自己的 L1 损失直接对应真实动作标注。只有当均值幽灵状态被喂回 LDM 并严重误导下一步动作预测时,问题才真正显现。在短视野内影响可控,但随闭环 rollout 步数增加,误差累积效应越来越明显。
VQVAE 能解决均值塌陷吗
VQVAE 通过离散化把连续的多模态问题转换成离散的分类问题:强制所有 latent 向量只能取码本中有限个离散值之一,“直行"和"变道"对应两个不同的槽位,不存在"半直行半变道"的槽位,均值塌陷在物理上无法发生。
下游自回归模型预测"下一步场景"变成了在 $K$ 个类上做 softmax 分类,可以同时表达"码字 $e_2$ 概率 0.6,码字 $e_7$ 概率 0.4”——天然的多模态表示。
但 VQVAE 解决不了贪心自回归的非全局最优问题。
这是两个独立的问题:
- 表示层(均值塌陷):单步预测的分布能否正确描述多种可能的未来同时存在 → VQVAE 可以解决
- 搜索层(贪心非最优):即使每步分布完全正确,按贪心策略逐步推进仍可能陷入局部最优 → VQVAE 无法解决,需要 beam search、MCTS、RL 等搜索算法介入
渲染器不看动作 token 的设计决策
如果渲染器同时能看到相机 token 和动作 token,它很可能走捷径——靠动作 token(信息密度低、容易利用)来预测,完全忽视相机 token,导致 LDM 和渲染器脱钩。
所以论文规定:渲染器只能看相机 token(和历史帧),不能看动作 token。这同时验证了相机 token 确实编码了足够丰富的场景信息——论文图 8 展示了一个有力的佐证:把 LDM 的动作 token 预测出的轨迹叠加在渲染帧上,渲染器完全没见过动作 token,但蓝色轨迹竟然与渲染出的场景高度一致。
架构与漂移问题
渲染器基于小鹏自家的 X-World 扩散 Transformer,使用整流流(Rectified Flow)目标函数,走"直线路径",采样步数少、质量高。跨视角注意力(cross-view attention)确保 7 路摄像头画面几何一致。
闭环推理中的漂移问题(自己生成的帧作为下一步输入,误差雪球越滚越大)用两个轻量方案解决:
- Latent sink:每步 rollout 中锚定稳定的参考上下文
- Latent augmentation:训练时对当前步的 latent 加扰动,让模型提前适应"不完美输入"
3.3 三阶段训练流水线
| 阶段 | 训练对象 | 监督信号 |
|---|---|---|
| Stage I | LDM(独立训练) | GT 动作 + GT 相机 latent + GT BEV |
| Stage II | 渲染器(独立训练) | GT 真实动作条件下的真实帧 |
| Stage III | 渲染器微调 + LDM 冻结 | LDM 预测的相机 token(完成"对齐") |
“先分开练、再合体对齐”——Stage I 和 II 各自独立高效训练,Stage III 只是把两者接驳在一起,成本很低。
四、关键设计的深层逻辑
推演未来是训练时的辅助监督,不是推理时的实际操作
这是理解整篇论文最核心的一个洞察。
训练时:模型被要求预测未来 H 个 Chunk 的摄像头画面,这个"强迫题"迫使模型的权重里编码进物理世界的因果知识——哪种场景会导致什么结果,哪个动作会引发连锁反应。这叫辅助任务学习(auxiliary task learning)。
推理时(实车):模型直接用真实摄像头帧作为输入,预测下一秒的驾驶动作并立即执行,不进行长链自回归闭环。训练时建立的因果模型已经内化成了"直觉",体现在隐层表示的结构上——模型看到黄灯就能隐含地感知到"3秒后需要停车",而不需要真的把未来 3 秒逐帧算出来。
这个模式在深度学习里非常普遍:
- BERT 的 Masked Language Model:训练时预测被遮住的词,推理时根本不做这件事,但语言理解能力留下来了
- 深度估计的自监督:训练时用双目互相预测学立体感知,推理时只用单目
- AlphaGo:训练时通过自弈学会评估局面,推理时直接查价值函数
渲染画面、自回归推理未来 N 秒的闭环,是云端仿真测试用的可视化验证工具,而非实车控制链路。
实时性问题的解答
扩散渲染器每步耗时数百毫秒,远超 4Hz(每步 250ms)的实时预算。实车部署不跑渲染器——latent 循环路径速度够(LDM 单步约 80-100ms),但均值塌陷会导致误差累积。
真正的解法是:实车根本不做长链 latent 循环。每 250ms,真实摄像头提供一次新鲜输入,LDM 做单步推理,输出动作立即执行,预测出的未来 latent 只用于当步内部规划,不循环喂回。自回归链条长度永远是 1,均值塌陷的误差永远不会积累,速度和质量的矛盾自然消解。
五、实验结果
评估指标
- ADE/FDE:预测轨迹与真实轨迹的平均/最终位移误差
- CCES 套件(4 维度,以基准行为 1.0 为参考,越低越好):
- Compliance(合规性):车道居中、不闯红灯
- Comfort(舒适性):方向盘平稳度
- Efficiency(效率):是否进展太慢
- Safety(安全性):碰撞、TTC 违规、压边界
- 碰撞率:单独报告的头条安全指标
所有模型推理时只做一次前向计算,严格隔离训练策略的影响。
消融实验
长视野 H 的影响(H 从 1 增长到 21)
| 方案 | 碰撞率 | Safety |
|---|---|---|
| $H=1$ | 0.263% | 1.0000 |
| $H=6$ | 0.262% | 0.9927 |
| $H=21$ | 0.245% | 0.9481 |
安全性和合规性单调改善,但 Comfort 和 Efficiency 在 $H=21$ 略有下滑——这正是 exposure bias 效应在消融实验中的体现:更长的预测视野带来更深的因果理解,但同时带来更严重的训练推理不一致性,两个效果部分相互抵消。
各组件的贡献(从 $H=6$ checkpoint 继续训练)
| 方案 | 碰撞率 | Safety | Total |
|---|---|---|---|
| 继续 $H=6$ | 0.270% | 0.9726 | 3.952 |
| +$H=21$, CL | 0.238% | 0.9310 | 3.875 |
| +$H=21$, CLEF | 0.230% | 0.9387 | 3.873 |
| +$H=21$, TIS | 0.216% | 0.9264 | 3.845 |
TIS 在 CLEF 基础上进一步将碰撞率降低 6.1%,效果显著。
生产规模最终对比(1024 张 GPU)
| 方案 | 碰撞率 | Safety | Total |
|---|---|---|---|
| Baseline | 0.228% | 0.9441 | 3.830 |
| X-Foresight | 0.191% | 0.8583 | 3.654 |
碰撞率降低 16.2%,安全性提升 9.1%,合规性提升 8.2%。
两个典型案例
多出口环岛:Baseline 看到最近出口就想转出去,偏离真实轨迹;X-Foresight 理解导航指令"走更远的出口",耐心绕行,完美跟上真实轨迹。
夜间路口红灯:Baseline 看到红灯就停下,预测轨迹截断在停止线前;X-Foresight 预测到"红灯即将变绿",持续前行,匹配真实轨迹。
渲染器量化结果
| 方案 | FID@1s | FID@6s | FVD@1s | FVD@6s |
|---|---|---|---|---|
| 相机 latent 直接解码 | 10.97 | 11.82 | 135.56 | 158.39 |
| Vision Renderer | 1.51 | 2.84 | 11.28 | 29.52 |
渲染器将 FID 降低 7 倍,FVD 降低 12 倍。6 秒 horizon 的退化有限(FID 仅增加 1.33),说明闭环漂移被有效控制。
训练速度
| 注意力实现 | 每步时间 | 加速比 |
|---|---|---|
| FlashAttention-2 | 24.50 秒 | 1.00× |
| 块稀疏注意力(本文) | 15.40 秒 | 1.59× |
六、论文的局限性与未解问题
论文自己提出的未来方向
- 在闭环 rollout 中加入更多监督信号,进一步提升长尾场景性能
- 融合 3D 几何监督(点云、深度图),让模型的物理世界知识更扎实
- 粗到细的世界重建训练策略
讨论中发现的深层问题
单模态预测 + 贪心自回归的双重局限
即使用 VQVAE 解决均值塌陷(表示层问题),贪心自回归的非全局最优问题(搜索层问题)依然存在。每步选局部最优的路径,可能导致全局最差的结果。解决方向包括:beam search、MCTS、RL 价值函数、轨迹空间扩散规划。
摄像头邻居关系的文档空白
论文描述跨 Chunk 注意力时用了"spatial neighbourhood",但没有说明摄像头的编号顺序是否与物理布局对齐。这是一个可能影响实现正确性的细节,论文没有充分交代。
“闭环推理"概念的二义性
论文同时使用"闭环推理"描述两件不同的事:训练时的长视野预测能力(真正有价值的),和演示时的像素级视频生成(主要用于可视化)。两者的实现路径完全不同,混用容易造成对实车部署方式的误解。
七、总结
X-Foresight 的核心贡献用一句话概括:通过把"预测未来高保真多视角画面"作为辅助训练任务,把更深的物理因果知识烙进模型权重,从而在实车单步推理时就能做出更有前瞻性的驾驶决策。
碰撞率降低 16.2% 是一个在安全要求极高的自动驾驶领域相当显著的进步。这篇论文是"世界模型辅助自动驾驶"方向的一块重要垫脚石,但单模态预测和贪心搜索的局限性指向了下一代方法需要攻克的地方。
笔记整理自论文原文及深度讨论,包含对架构细节的批判性分析