← 自动驾驶主线

第 4 章 · 共 8 章

预测

从当前状态推演交通参与者的多种未来

约 9 分钟阅读

知道每辆车现在在哪、开多快,仍然不足以安全驾驶——因为你不知道它下一秒想干什么。


同一辆车,三种未来

接着上一章。感知已经把场景交付得很完整:深色轿车的位置、速度、朝向都有,它正带着不小的横向速度靠向你要汇入的目标车道。看起来信息够了?

课件里有一张图把这个错觉戳破了。同样一辆正在靠近车道边界的车,同样的位置和速度,画出三条完全不同的未来:快速切入、缓慢切入、保持直行。三条线在图上从同一个点出发,几秒之后相距十几米。如果系统按"保持当前速度直行"外推——这是最省事的预测——它会完全错过这次切入,直到对方车头已经压进车道才反应过来。

预测模块的三个工程指标也从这张图里长出来:召回率(漏掉一次真实切入,就是一次危险)、准确率(把没有切入意图的车判成切入,就是一脚多余的急刹,乘客最讨厌的体感)、以及对决策规划的影响——预测从来不是单独考核的模块,它的错误全部会在下游变成动作。

这一章讲预测怎么从"沿着现在外推"一路进化到"给出多个带概率的未来"。


物理外推能走多远

最朴素的预测是匀速模型(CV,Constant Velocity):假设对方保持当前速度直行,速度扰动当高斯噪声处理。它朴素到什么程度?nuScenes 里的实现就是一行循环:x + t·vx, y + t·vy。

别急着嘲笑它。短时间内它相当准——物理惯性是真实存在的,一辆车再怎么想变道,0.5 秒内的位置基本被当前状态锁死。问题出在场景弯曲的地方:课件给的 Bad Case 是一段弯道,CV 沿切线方向直挺挺外推出去,预测对方"冲出弯道"。它不知道路是弯的。

改进版是定曲率模型:假设对方沿当前转弯半径继续走,弯道里比 CV 准。但课件的对照表在两列下面用红字写了同一句话:长时间区间会失准。匀速也好、恒曲率也好,都是在延长"现在",而司机的脑子里装的是"接下来"——他要去哪个出口、让不让你、赶不赶时间。物理状态里没有这些。

课件给了一条经验分界:短时预测约 3 秒以内,物理外推还能用;长时预测 8 秒以上,必须知道意图。而规划真正需要的恰恰是后者——你决定要不要汇入,看的是未来五到八秒的车流。


先猜"想去哪":意图预测的量产形态

意图预测的第一代是手工特征 + 小模型。这里有一个值得看清楚的量产细节:Apollo 5.0 预测障碍车会选哪条车道,用的是一个 62 维手工特征向量(目标车道横向距离、横向速度、道路曲率这类)加一个 4 层全连接网络,最后一层 Sigmoid 输出每条候选车道的概率。旁边还有一个纯手写的几何 cost:车道半宽减去车辆到车道中心线的横向距离,过一个 sigmoid。

这就是"我们用神经网络做预测"在量产系统里的真实规模——62 维特征、4 层 MLP,不是大模型。 它便宜、快、可解释,也确实工作。它的天花板课件说得很直白:「人工构造的输入特征有天然局限性」——你想到的特征才存在,你没想到的交互模式永远进不了输入。

出路是让网络自己看:把障碍车的历史轨迹、车道形状、周围车的运动全部渲染成图像或编码成向量,特征提取交给网络。这一步把预测从规则栈带进了数据驱动时代。


数据驱动:输入怎么编,输出怎么给

输入侧的演进是一条清晰的线。第一代栅格化:把场景画成一张以目标车为中心的俯视图片(典型规格 300×300 像素、每像素 0.2 米,即 60 米见方的视野),交给 CNN。直观,但几何精度被压进了像素,算力浪费在大片空白路面上。第二代向量化:VectorNet 不再画图,把车道线和轨迹全表示成折线点集,先在每条折线内部聚合,再让所有折线在一张全局交互图里做注意力。精确、稀疏,2020 年前后成为主流。再往后是点云多模态和 Transformer 的统一编码——把智能体历史、交互、道路结构、红绿灯状态各自整理成张量,一起送进 Scene Encoder。

输出侧有一个所有预测模型都绕不开的坑:多模态坍缩。如果只让网络回归一条轨迹、用平均误差训练,它面对"可能左转也可能直行"的车会输出一条不左不直的平均线——哪个未来都不像。解法是显式多模态:一次输出 M 条轨迹,每条带概率;训练时只把回归损失记在离真值最近的那条上,分类损失负责学概率。"选模态"和"拟合轨迹"必须分开,这是多模态预测的第一原则。

长时预测还有专门的技巧。误差是逐步累积的,直接回归 8 秒 80 个点,后半段基本在飘。KEMP 的思路是先预测几个关键帧,再补全中间——把一个长序列问题降维成几个短序列问题。和"先预测终点、再倒推轨迹"的目标点方法是同一个思想:给长时预测先钉几个锚。


交互:你的预测里有没有别人对你的反应

到这里,每辆车都能给出多条带概率的轨迹了。但还有一个更深的坑,课件用一张对比图讲得极清楚。

边际预测:每辆车独立预测。图里蓝车轨迹 0.3 概率、橙车轨迹 0.7 概率——看起来都合理,但这两条轨迹在路口中央交叉了。物理上,这两件事不能同时发生;数学上,模型根本没被要求让它们相容。下游规划拿到这种预测,要么自己去解矛盾,要么被逼成"哪条都躲"的过度保守。

联合预测:概率不再标在单条轨迹上,而是标在整个场景上——"70% 的可能性整个路口这样演化",场景内所有车的轨迹互相配套、互不穿越。

在我们的汇入口,这个区别是生死攸关的。深色轿车"完成切入"还是"退回原车道",和主路后车"减速让行"还是"保持速度"不是独立事件:后车让了,切入更可能完成;后车不让,轿车更可能缩回去。边际预测给你四个概率数字,联合预测给你两三个自洽的场景分支——决策层需要的是后者。

再往前一步是把自车也放进预测。他车的行为取决于你怎么开:你开始探出,后车可能提前减速。Planning-informed 一类方法把自车的候选规划作为预测输入;DTPP 更进一步,把"自车动作树 × 他车反应"做成可微分的场景树,预测模型和代价模型都从数据里学。预测在这里不再是规划的上游,而是和规划纠缠成了一个环——这个环,第七章的端到端会把它整个吃进一个网络里。


评测:minADE 的猫腻

预测的标准指标是一组缩写,值得花一分钟看懂它们各自在防什么。

minADE / minFDE:模型输出 K 条轨迹,取和真值最接近的那条算平均/终点误差。注意那个 min——K 条里蒙对一条就算赢。所以模型可以靠多撒几条候选来刷分,哪怕它根本不知道哪条是对的。p- 系列和 brier- 系列是补丁:如果模型给正确那条轨迹的概率很低,即使几何上蒙对了也要扣分——惩罚"广撒网"。Miss Rate:所有预测端点都不在真值 2 米内的比例。DAC:预测轨迹有没有开出可行驶区域——几何合理性,和误差无关。

所以看一份预测评测报告,要问的第一句话是:报的是 minADE 还是 brier-minFDE?K 是多少? 只报 min 系列、不报概率指标的模型,可能"什么都预测了,就是不知道哪个会发生"。


预测交付什么

回到汇入口,预测模块最终交给决策层的是:深色轿车两个主要分支——完成切入(概率较高,因为横向速度还在增加)、退回原车道;主路后车两个分支——保持速度、减速让行;以及关键的联合信息:立即汇入只在"切入中止 且 后车让行"这一个组合里无冲突,其余组合都会在冲突区相遇,附带各分支可能占据的时空区域。

注意预测没有说"该不该汇入"。它给的是若干个带概率的未来和每个未来的代价暗示——愿意为哪种概率承担哪种后果,是下一章的事。


本章速查

概念 一句话
短时 vs 长时 ~3 秒内物理外推可用;8 秒以上必须引入意图;规划需要的是后者
CV / 定曲率 延长"现在"的两种方式,弯道和长时都会失准
意图预测 先离散化(哪条车道/哪个出口),再打分;量产形态可以小到 62 维特征 + 4 层 MLP
栅格化 vs 向量化 画成图片给 CNN vs 折线点集给图网络;向量化保精度、省算力
多模态输出 M 条轨迹 + 概率;回归损失只记在最近的模态上,防坍缩
边际 vs 联合 独立预测会产生物理上不可能的组合;联合预测把概率标在整个场景上
规划条件预测 把自车候选动作作为预测输入,回答"如果我这么开,他会怎样"
minADE 的坑 K 条蒙对一条就算赢;要看概率加权的 p-/brier- 系列才知道模型是否真的懂

材料来源

课程 章节 页码 用在哪
C C-02 基于模型的预测方法 p4-p7, p9-p17 cut-in 三种未来、召回/准确/下游影响三问、CV 模型与弯道 Bad Case、定曲率、短时长时分界
C C-02 基于模型的预测方法 p18-p27 SVM/HMM 意图、Apollo 5.0 的 62 维特征 + 4 层 MLP、手工特征局限与语义地图渲染
C C-07 数据驱动的预测方法 p3-p26 栅格化 MTP(300×300/0.2m)、VectorNet 向量化、多模态张量编码
C C-07 数据驱动的预测方法 p27-p48 多模态输出与 mode collapse、目标点预测、边际 vs 联合、Planning-informed、DTPP
C C-07 数据驱动的预测方法 p49-p62 KEMP 关键帧长时预测、minADE/minFDE/p-/brier-/DAC 指标及其刷分问题

继续深挖

02

Planner:一段式端到端怎样生成一条可执行轨迹

当感知、导航与自车状态已经被编码,一段式端到端究竟怎样用 Query、AR、Diffusion 或 Flow Matching 产生轨迹,并在实时预算内选出最后一条?