ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

行为预测十年演进:从卡尔曼滤波到扩散模型与自动驾驶落地

行为预测十年演进:从卡尔曼滤波到扩散模型与自动驾驶落地

行为预测这个领域,我算是从它最“朴素”的阶段一路看过来的。十年前刚入行时,谈行为预测基本离不开马尔可夫模型、卡尔曼滤波和手工特征工程,大家围着轨迹数据转,主要任务是告诉系统“下一秒这辆车的概率分布大概长什么样”。到今天,行为预测已经变成自动驾驶、机器人、推荐系统、甚至具身智能里必不可少的基础能力,模型从统计模型变成深度学习模型,又从深度学习模型开始向大模型和生成式范式迁移,十年间戏法换了好几轮,背后的技术逻辑彻底变了。

这篇文章我想认真梳理一下这十年里行为预测怎么一步步演进,从方法范式、输入表征、评价体系、工程落地这几个维度展开。也会穿插一些我实操中踩过的坑、总结出来的经验,给还在这个领域摸索的朋友一些可以直接参考的路径。不管你是刚接触行为预测的入门者,还是已经做了几年相关项目的老手,这篇文章应该都能给你一点共鸣和启发。

1. 行为预测的技术底色:十年间的范式翻转

1.1 十年前我们怎么“预测行为”

讲行为预测,绕不开最早期的那套思路。我入行时接触的第一个实用预测系统,用的是隐马尔可夫模型加卡尔曼滤波的组合。拿自动驾驶场景举例,我们要预测一个路口左转车辆的未来轨迹,先做的是把地图离散化成 lane 级别的格子,然后统计车辆在历史数据中在这些格子之间的转移概率,建一个状态转移矩阵。卡尔曼滤波则负责处理连续量——在离散路径确定之后,预测车辆的位置和速度,用线性高斯假设输出一个带协方差的不确定性分布。

那个年代的核心工作是特征工程。我们要手动设计速度、加速度、朝向变化、道路曲率、历史轨迹序列长度等特征,组合成固定维度的向量,再喂给决策树、随机森林或者支持向量机做分类或者回归。如果要做多步轨迹预测,常见做法是递归预测——把上一步的输出重新作为输入,一步步滚下去,直到预测到达设定的时间窗口。这种方案的资源消耗很小,在嵌入式设备上都能跑,但效果上限非常明显。

1.2 经典方法的三道硬伤

用现在的眼光回看,经典方法的核心限制可以总结为三点。第一,离散化粒度太粗。车道级别或者网格级别的状态表示,天然牺牲了轨迹的连续性和精度,输出结果看起来“像那么回事”,但放到连续坐标里经常出现锯齿状轨迹。第二,假设太强。卡尔曼滤波的线性高斯假设和 HMM 的状态独立性假设,在面对真实世界中频繁的加塞、变道、人车混行场景时,几乎毫无招架之力。第三,缺失交互建模。真实交通里参与者的行为是相互影响的,前车刹车会传导到后车,行人犹豫会影响车辆让行,但传统方法基本上是“各测各的”,预测一辆车不考虑它在场景里的邻居,结果在拥挤路段经常会错得离谱。

这三道硬伤在封闭园区、低速场景里还勉强能对付,一进入开放道路就显得力不从心。这也是为什么深度学习一出现,整个领域几乎在短短三四年里就完成了技术切换。说到底,深度学习解决的最大问题不是“算得准”,而是“不用手写特征”了。

1.3 为什么老方法还值得学

有人可能会说,现在都是深度学习的天下了,老方法还有什么用?我的看法是,经典方法的学习价值仍然很大,至少体现在三个方面。一,它们是理解衡量指标的基准,你自己提出一个新模型,总得知道随机森林 baseline 能做到什么程度,否则提升多少都缺乏参照。二,它们的思想以简化形式保留在现代模型里——比如当前主流方法里的目标状态估计模块,本质上仍然是卡尔曼滤波思想的扩展,只是把更新环节换成了网络层。三,它们在算力受限的轻量场景里依然能打,我用过只有几十毫瓦功耗的边缘芯片部署系统,深度学习模型跑不动,最后还是降级方案里面塞了一个线性预测器应急。

2. 深度学习重塑行为预测的三个关键阶段

2.1 序列模型时代:从手工特征到自动特征

深度学习介入行为预测的第一个阶段,是循环神经网络全面接管轨迹序列建模。大约在2016年前后,长短期记忆网络在行为预测领域集中爆发,很多团队把历史轨迹点直接编码成序列输入,用 LSTM 做编码,再通过解码器输出未来轨迹。这个阶段最大的贡献是省去了繁琐的特征工程,模型自动学会从原始坐标序列中提取速度、加速度、转向趋势等隐含特征。

紧接着注意力机制开始渗透。最早的做法很简单,就是把历史轨迹每个时刻的隐状态做加权求和,权重由学习出来的注意力系数决定。这个改进的效果立竿见影——离当前时间越近的历史状态,天然会被赋予更高权重,因为最近的时刻信息通常和未来轨迹的相关性最强。后来 Transformer 结构进入行为预测,注意力从辅助手段变成了主干网络,序列建模进入了自注意力时代,行为预测的整体精度在这个阶段有了非常明显的提升。

2.2 图网络与交互建模:从“单体预测”到“场景预测”

行为预测真正走向成熟的转折点,是输入表征从“单条轨迹”扩展为“完整场景”。从那之后,预测的对象不再是孤立的一辆车,而是整个场景图谱里的所有交通参与者。这个转变靠的是图神经网络。

最早的做法是把车辆、行人都定义成节点,节点之间连边表示相互影响。我参与过一个比较典型的架构,把场景中每一辆车的历史状态编码为节点特征,然后通过多轮消息传递在图结构上完成信息交换,每轮消息传递就是一次“交互推理”:前车减速这个信息,经过图传播后影响后车的状态表示,再影响后车的预测输出。相比之前的逐车独立预测,建模交互后,预测结果在拥挤路段的表现好了一大截,尤其在车辆密集交互频繁的城区道路,效果提升非常直观。

这个阶段还有一个重要的工程创新,就是矢量化的地图表示。此前地图信息要靠栅格化图像来表达,一张高分辨率栅格图又大又冗余。后来大家换成了直接在车道中心线上采样的离散点序列,再输入网络做编码,地图信息量更大、内存占用更小、精度反而更高。这项技术在当时迅速普及,今天几乎所有主流方案都还在用。

2.3 多模态预测:从预测“一条轨迹”到预测“一组可能”

真实世界的行为是高度多模态的。一个左转场景里,面对对向来车,车辆可能选择等待让行,也可能选择加速抢在来车之前完成转弯,两种选择对应的轨迹空间截然不同,单条轨迹无论如何都无法覆盖这种不确定性,于是多模态预测应运而生。

多模态的方法演化得很快。最朴素的思路是让模型输出 K 个轨迹候选,配上概率分布,训练时用轨迹距离做分配,把真实轨迹分配给离它最近的候选分支去优化。这类方法简单直接,但问题在于候选轨迹之间经常高度相似——K 个候选最后收敛成了 K 条“几乎一样”的轨迹。随后陆续出现了基于目标点先验的方法、基于高斯混合的方法、基于 anchor 的方法,再到后来的基于能量模型和基于扩散模型的方法,核心目的都是让输出轨迹之间有足够的差异性,覆盖更多真实可能。

评价指标也在这个阶段发生了改变。最早的 ADE/FDE 只看“一条轨迹”的平均误差,多模态普及后变成了 minADE/minFDE——从 K 条候选里挑离真值最近的那条来算误差,另外还新增了 miss rate,刻画 K 条轨迹全部错过真值周边区域的比例。这里的思考逻辑是:对自动驾驶这种下游依赖很强的系统来说,只要 K 个候选里有一条足够准,下游规划器就有选择的空间,所以“min”形式比“mean”形式更有工程价值。

3. 走进自动驾驶量产:行为预测的工程化落地

3.1 一套量产预测系统的典型架构

行为预测从论文走向量产车的过程,比大多数外行想象的要复杂得多。我参与过某量产自动驾驶项目的预测模块设计,整个系统从结构上看可以分为四层。最底层是场景输入层,负责把感知输出的目标物列表、高精地图信息、自车状态整合成统一的场景图。第二层是特征编码层,分别编码地图结构、目标物历史轨迹、目标物之间的交互关系,输出每个目标物的语义特征张量。第三层是预测头,也就是解码多个模态轨迹,同时输出置信度和类别(车、行人、骑行者等)。最上层是后处理层,负责把预测输出的轨迹从自车坐标系投影到全局坐标系,做速度合理性校验、物理可行性筛选,最终输出给规划模块。

这套架构在当时算是比较先进的设计,今天看来其中的不少思路已经成为行业标配。但真正让项目难推进的,并不是架构本身,而是一系列工程约束。比如推理延迟,预测模块在整条感知-预测-规划链路中分到的算力和时间都很有限,模型不能太大,算子必须被优化到极低延迟;再比如内存占用,车载芯片的显存和内存都非常紧张,一个稍微大型一点的编码器就需要反复压缩容量。

量产项目的所有设计,几乎都要在精度和资源占用之间一次次折中。这个过程中我学到的最重要的一件事,是不要追求模型的“上限精度”,而要在给定算力资源下追求“能上车的精度”。模型精度再高,如果跑不动,在量产场景里就是零。

3.2 在线推理中那些论文里不写的事

论文里展示的模型往往基于离线 GPU 环境跑出来的结果,而在线推理面临的问题完全不一样,比如原本点集形式的场景数据量就很大,目标多了模型推理速度就会骤降。实际工程中就要做取舍:有的目标物离自车远、对当前决策几乎没有影响,就不必进入模型;相邻车道以外跟自车没有潜在交互的目标,也可以直接忽略。场景裁剪看似损失了“全局信息”,但实测下来延迟下降非常明显,而精度损失微小,几乎可以忽略。

还有一个经常被忽略的问题是时间对齐。感知模块输出的目标物状态,在进入预测模块的那一刻可能已经存在几十到上百毫秒的延迟。这个延迟对高速移动的目标物来说意味着几米的偏差。如果不做补偿,哪怕预测模型本身再准,上游延迟都会毁掉输出。我们的做法是在编码前做一步运动补偿,用目标物最近的观测速度把位置修正到现在时刻,再把修正后的数据送入模型。

3.3 数据闭环和仿真回归才是重头戏

自动驾驶量产圈里有一句流传很广的话,数据和仿真比模型重要。预测模块上线之后,最重要的不是再刷一个更高的公开集指标,而是把数据闭环跑起来。量产车每天在路上跑,会采集到海量真实轨迹数据,这些数据通过挖掘工具筛出难例(高交互密度场景、反常行为、近碰撞场景、模型预测置信度和实际误差偏差很大的场景),筛选出来之后做标注,加进训练集,重新训练模型,再做评测回归。这个迭代链路绕不开,也逃不掉。

仿真回归在这条链路里扮演的角色是质量守门员。通过离线回放的方式,把线上采集的真实场景重新灌入预测模块,跑批次评测。评测指标除了离线数据集的 ADE/FDE 之外,还要关注下游影响:预测轨迹变化之后,规划模块选出来的轨迹有没有变化?加减速有没有变剧烈?有没有出现新的碰撞风险?如果预测模块的升级导致下游规划出现恶化,就需要回归定位原因。

这个阶段大量的时间其实不是花在模型结构上,而是花在数据平台、评测逻辑、回归工具这些“看不见的地方”。

4. 新范式正在形成:生成式模型与通用表示

4.1 扩散模型凭什么杀进轨迹预测

行为预测这几年最热的新技术方向之一,是扩散模型跟轨迹预测的结合。扩散模型的核心思路是从带噪声的随机分布开始,通过多步去噪迭代逐步逼近目标分布。这条技术路线和轨迹预测的天然契合点在于:人类未来行为本身就是多模态、非确定性的,而扩散模型天生就是用来生成多模态分布的,它可以一次性采样出多个差异明显的轨迹样本,自然覆盖不同行为选择。

我们项目组实测过一个基于扩散模型的轨迹预测方案,最深刻的印象有两个。一是生成轨迹的多样性确实比传统的目标点采样方法好很多,不同样本之间的策略差异更真实,能做到一个样本表达“保持直行”、另一个样本表达“减速靠边停车”,而不是互相之间只是细微的速度差别。二是采样成本较高,多步去噪带来推理开销成倍上涨,工程上就需要做步数压缩、蒸馏、一步采样之类的一系列剪枝优化,效果稍有损失才能换回可以接受的推理延迟。

从实验结果看,扩散模型在长时域预测上的优势更明显,预测时域拉到8秒以后,传统回归式方法误差迅速增大,扩散模型得益于生成式分布拟合,长尾场景表现好不少。这个方向评估价值和风险并存,如果未来推理成本进一步下降,它确实有希望变成行为预测的主流框架。

4.2 大模型和“世界模型”离得有多远

大模型席卷一切的时候,行为预测领域当然也不会例外。我们能看到一些团队开始尝试用大语言模型作为行为预测主干网络,思路是把轨迹序列和道路结构都转成 token 序列,让大模型去做自回归生成。这类工作更多停留在可行性验证阶段,实际到量产还有很远的距离,但方向值得关注。

比大模型更值得关注的是“世界模型”的思路。传统行为预测更像是一个监督学习任务,给定历史告诉未来;而世界模型的目标是学习环境动态本身的通用表征,让模型理解“在这个世界里,一个物体运动会导致什么样的结果”,它必须能回答“如果我这样开,世界会怎样变化”的问题。

这正是行为预测和世界模型的交叉点:如果模型具备了世界知识,那么行为预测就不再是从数据里硬拟合出来的映射关系,而是基于因果逻辑的推理结果。某个团队曾尝试在世界模型的隐空间里做车辆轨迹预测,通过环境动态的潜在推演来代替显式轨迹回归,取得了初步成果,但离真正的通用性和稳定性还有很长的路。这个方向如果跑通,对行为预测领域来说将会是又一次范式级跃迁。

5. 十年踩坑实录:数据、评估与复现的教训

5.1 评价指标里的统计陷阱

行为预测的评价环节有不少反直觉的坑。我在多个项目里反复被同一个问题坑过,就是 minADE/minFDE 这类指标很容易被“撞大运”策略刷上去。模型输出几十条覆盖面广的候选轨迹,总能蒙中一条离真值很近的,导致 minFDE 很好看,但真实应用里下游规划不需要也不可能考察几十条候选。K 值的选择就非常重要,对比不同论文时,只看指标而对 K 取多少不做区分,结论基本没有意义。

另一个坑是不同数据集之间的指标不能直接横比。在 A 数据集上的 1.2 米误差和在 B 数据集上的 1.2 米误差,场景难度、交通密度、轨迹时域都完全不同,数值本身不说明水平高低。有段时间大家特别偏爱用公开集刷榜,但排行榜上的数字和真实道路表现之间的相关性有限,这个落差越到工程端越明显。

5.2 复现论文时最容易忽略的隐性条件

复现行为预测论文是我见过最多人踩坑的环节之一,很多隐性的实现细节不会写进论文,但这部分恰恰决定结果好坏的很大比例。比如轨迹标准化。不同数据集的地图坐标范围差异很大,不做标准化或者归一化参数选得不合适,模型收敛速度和精度都会大受影响。我第一次复现某篇知名论文时,照着网络结构搭了一个完全一样的模型,效果却比原论文差了近一倍,排查了整整一周才定位到问题,是对方用了轨迹相对自车坐标的归一化方式,而我直接用绝对坐标训练。

另外训练策略也很关键。行为预测任务大多采用教师强制训练,也就是用真实轨迹的当前步作为下一步输入的上下文,但推理时模型只能拿到预测值,这个训练和推理之间的分布差异,就需要 schedule sampling 之类的策略去缓解,否则在线测试误差会显著大。多模态预测任务的分配机制里也藏着不少细节,分配阈值取多少、离群点怎么处理、分支梯度怎么平衡,直接改变了最终预测的形态。

5.3 工程部署比离线评估更扎心

离线环境里模型表现再好,到了部署阶段还是会有一堆问题。比较典型的是算子适配问题:训练时用的某些算子在车载芯片的推理引擎里可能不支持,或者支持的版本性能很差,需要手动重写计算图,把不支持的算子替换成一组等效但开销更低的组合。这类替换往往导致精度下降零点几个百分点,需要重新微调来补回。

还有量化问题,为了性能,模型部署基本都要做 FP16 甚至 INT8 量化。量化误差在行为预测里经常不是均匀分布的,而是集中在某些特定输入模式上。比如车辆在高速大曲率弯道上的轨迹预测,量化之后经常会莫名其妙变差,排查了很久,最后发现是弯道处速度和加速度的量级在所有场景里最大,量化误差也最大。后面专门针对这个场景做了一批增强数据和量化感知训练,才把指标恢复回来。

这些工程问题,论文里通常连提都不会提。

6. 给后来者的三条建议

第一,盯紧“预测模块的下游价值”。行为预测不是一个最终产品,它的所有价值都体现在下游决策模块能不能从中受益。设计模型的时候多问问:这条轨迹的误差对下游规划影响有多大?决策模块是更看重候选轨迹的多样性还是头部精度?这些问题比刷指标重要得多。

第二,保持对老方法和新方法的同时关注。经典方法在开销和解释性上的优势,今天依然不可替代;而扩散模型、世界模型这些新方向处于快速演进中,早入局的人有先发积累。两手都要抓,工程和研究的基础都会更扎实。

第三,动手复现之前,先认真读代码数据流的细节。真正决定行为预测效果高低的,大概率不在论文公式里,而在数据预处理、评估逻辑和训练策略这些容易被忽视的地方。我建议所有新人尝试做一件事,用同一套网络结构,分别用两种不同的轨迹标准化方式、两种不同的匹配阈值做对比实验,这个实验能让你比只看论文多理解十倍。

我个人的体会是,行为预测这十年最大的进步不仅是模型结构的替换,更是整个行业对“不确定性”的理解加深了。十年前大家总想预测出一条“最可能”的轨迹,现在大家接受了一个更底层的事实:未来本质上是多分支的,系统的任务是给每个分支一个合理的概率,而不是赌一个单点答案。理解了这一点,不管是做算法还是做工程,心态都会稳很多。最后分享一个小技巧:评估行为预测模型的时候,永远记得看失败案例,不要只盯平均指标。把误差最大的那5%场景逐条拿出来分析,会比指标涨跌多给你十倍信息量。

返回列表