MomAD: Momentum-Aware Planning in End-to-End Autonomous Driving

论文标题:《Don’t Shake the Wheel: Momentum-Aware Planning in End-to-End Autonomous Driving》


一、这篇论文在讲什么?

核心问题:AI司机的"帕金森式哆嗦"

光看标题脑海里是不是就有画面了?没错,这篇论文解决的就是自动驾驶汽车**“疯狂画龙”、“方向盘乱抖”**的痛点!

现在的端到端自动驾驶模型(如UniAD、VAD等)存在一个致命弱点:“单帧依赖(One-shot prediction)”

这就像一个新手司机,每开一秒钟都要重新做一次决定,完全不管上一秒自己是怎么想的。如果遇到短暂的视野遮挡(比如旁边大车挡了一下),或者感知模块稍微闪烁了一下,它就会立刻改变主意,导致车辆轨迹疯狂摇摆(Vehicle Trembling)。

Figure 1 的直观对比

规划模式 问题表现
确定性规划(a) 只给一条路,遇到突发情况容易撞
多模态规划(b) 给很多条路让你选,但每一帧都在不同轨迹间横跳,导致方向盘乱打
MomAD方案 用"动量"保持轨迹连贯性,同时保留多模态应对突发情况

核心洞察:老司机的"动量"智慧

人类老司机是怎么开车的?是有"惯性"和"动量"的!我们不会因为别人闪了一下大灯就猛打方向盘,我们会根据之前的行驶意图保持连贯性。

MomAD就是要赋予AI这种"老司机"的稳重感。


二、核心方法:MomAD的三大法宝

MomAD框架是怎么做到"稳如老狗"的?核心在于三大技术模块:

法宝一:拓扑轨迹匹配(TTM - Topological Trajectory Matching)

核心目标:在K个候选轨迹中,找出一个跟上一帧意图最"顺滑"衔接的轨迹。

1. 坐标系转换

因为车一直在往前开,前一帧和当前帧的坐标系不一样了。TTM第一步就是把历史轨迹转换到当前的自车坐标系下:

$$T_{past_aligned} = R^{-1}(T_{past} - \Gamma)$$

其中 $R^{-1}$ 是旋转矩阵的逆,$\Gamma$ 是位移向量。

2. 为什么不用简单的欧式距离?

很多模型比对轨迹时用的是欧氏距离(按点算距离),但这玩意儿在过弯道时极其不准,容易被局部干扰。

3. 引入豪斯多夫距离(Hausdorff Distance)

TTM祭出了这个大杀器!豪斯多夫距离测量的是两条轨迹间最大偏差的最小值(最坏情况下的对齐程度)。

$$d_H(T_a, T_b) = \max{d_{forward}(T_a, T_b), d_{backward}(T_b, T_a)}$$

生动比喻

豪斯多夫距离不仅看两个点离得近不近,更看整个轨迹的"形状(拓扑结构)“像不像。这就像比对两条弯曲的山路,不是看某个点对齐没,而是看整体走势是否吻合。

通过豪斯多夫距离,TTM选出那条和历史轨迹最吻合的当前候选轨迹。


法宝二:动量规划交互器(MPI - Momentum Planning Interactor)

核心目标:光选出来还不够,还要把历史的"经验(动量)“注入到当前的Query中。

子模块A:长时序查询混合器(Long-horizon Query Mixer)

它把历史的规划Query取出来,通过多层感知机(MLP)和**LSTM(长短期记忆网络)**进行时序演化:

# 用Sigmoid处理历史分数,并与历史Query做逐元素乘法(融合历史置信度)
historical_fusion = torch.sigmoid(S_past) * self.mlp_mixer(Q_past)

# 用LSTM模拟时序上的演化
Q_past_prime, _ = self.lstm(historical_fusion.unsqueeze(0))

这就像是把过去几秒钟的环境理解和别人车辆的意图"浓缩"了起来。

子模块B:交叉注意力融合

用选中的当前Query作为主动方,去和浓缩好的历史信息做交叉注意力计算:

# Q: 当前选出的最优 Query
# K, V: 经过时序演化的历史 Query
Q_tilde_p_star_t, _ = self.cross_attention(
    query=Q_p_star_t,
    key=Q_past_prime,
    value=Q_past_prime
)

关键理解

当前帧只提供 query(此刻我想怎么走),而 keyvalue 全是上一帧经过LSTM提纯的记忆(我过去几秒是怎么打算的)。这一步让模型长了"脑子”,不再是只会看眼前的金鱼记忆!


法宝三:鲁棒实例去噪(Robust Instance Denoising)

核心目标:锻炼模型对感知噪声的抵抗能力。

既然感知模块提供的特征(比如其他车的位置、车道线)可能不准,那就在训练时"折磨"它!

# 训练期间加入高斯噪声扰动
if self.training and self.use_noise:
    noise = torch.randn_like(features_t) * 0.1  # 论文消融实验中噪声比例为0.1最优
    features_t = features_t + noise

作用机制

让模型在训练时就习惯看"模糊、抖动"的世界。在测试时,这个去噪能力让规划预测器对环境波动极度免疫,即使遇到临时遮挡或漏检,依然能画出平滑的轨迹。


三、全新标尺:怎么量化"稳不稳”?

传统指标的局限性

以前的评价指标只看"当前帧准不准",不看"前后帧连不连贯"。

TPC(轨迹预测一致性)定义

轨迹预测一致性(Trajectory Prediction Consistency):在重叠的时间段内,计算"当前预测的轨迹"和"上一帧预测的轨迹"之间的平方差,然后再用真实的验证集轨迹做掩码过滤。

$$TPC = \frac{1}{N}\sum_{t}||T_{pred}^{t} - T_{pred}^{t-1}||^2 \cdot Mask$$

TPC越低,说明车开得越平顺,乘客越不容易晕车!


四、狂飙的成绩单

4.1 首创"弯道数据集(Turning-nuScenes)"

作者发现原来的nuScenes数据集里直道太多了,看不出谁更稳。于是专门把"转弯"的场景挑出来做测试(转弯最容易方向盘发抖)。

惊人数据(Table 3)

  • 预测未来6秒的轨迹,MomAD相比之前的SOTA模型(SparseDrive),碰撞率暴降了26%
  • TPC指标大幅优化了0.97米(提升33.45%)

4.2 长时间预测远超同行

预测1-2秒不算啥,预测4-6秒还能保持稳定才叫牛。随着时间拉长,其他模型误差飙升,而MomAD依然保持着极高的平滑度。

4.3 闭环路测(Bench2Drive)

在CARLA模拟器里跑闭环(Table 4),包含超车、避让等44个交互场景:

  • 成功率提高了惊人的16.3%
  • 舒适度提升了7.2%

4.4 消融实验亮点

历史帧数消融(Table 7)

历史帧不是越多越好。作者发现融合前 $t=2$ 帧的历史信息时,效果达到巅峰;如果融合 $t=3$ 帧,反而因为历史太久远引入了不确定性,导致效果下降。这叫"恰到好处的记忆"

噪声注入消融(Table 6)

加了Robust Instance Denoising模块后性能稳步提升,验证了训练时加噪对抵抗感知闪烁的有效性。


五、深度讨论:历史意图引入的"因果混淆"陷阱

一个极其犀利的专家级问题

引入历史意图(也就是上一帧的Query或者轨迹)虽然能让车开得"稳",但如果不加限制,模型会变成一个"闭着眼睛开车的瞎子"。

三大致命因果混淆陷阱

陷阱 现象 灾难后果
因果倒置(惯性覆盖) “上一秒我在直行 → 所以这一秒我继续直行” 无视前方突然出现的外卖小哥,直接撞上去
捷径退化(恒等映射) 网络发现直接复制上一帧输出Loss就够低 感知模块退化,变成只会根据昨天猜今天的时间序列外推器
误差雪球(蝴蝶效应) 第1帧的小误判被后续帧不断放大 即使视野恢复清晰,模型也因为历史执念拉不回来

MomAD的破局之道

1. 架构约束:用交叉注意力逼迫模型"看路"

  • 历史意图(提纯后的 $Q_{past}$)作为Key和Value
  • 当前帧的初筛意图作为Query
  • 融合后的Query必须再和当前帧最新的感知实例特征($F_{ins}$)做二次深度融合

原理:历史只提供"底色",生杀大权依然牢牢掌握在当前帧的感知特征手里。

2. 训练秘籍:历史Dropout

随机以一定概率把历史意图置为空,强制模型只凭当前帧的单帧图像去做规划。

原理:斩断捷径,让网络明白"不能总是指望抄前一秒的作业"。

3. 施加微扰:打破舒适区

Robust Instance Denoising实际上是一种因果干预,告诉模型要在噪声和历史之间找到真正的因果平衡点。

4. 终极验证:闭环评测

如果模型严重因果混淆,在闭环里不出10秒就会撞树。MomAD在Bench2Drive闭环测试中成功率提升16.3%,是克服因果混淆的最硬核证据。


六、为什么在"Query层面"融合历史?

问题本质

为什么MomAD选择融合历史Query,而不是直接把前后两帧的感知实例(几十个框)融合在一起?

直接融合感知实例的三大致命问题

1. 目标关联灾难

如果把 $t-1$ 帧和 $t$ 帧的实例特征直接堆叠,网络怎么知道上一帧的"框A"和这一帧的"框B"是同一辆车?

MomAD的高明之处:不在"环境(框)“层面做跨帧融合,而在"自我意图"层面做融合,巧妙地绕开了显式的多目标跟踪难题。

2. 信息过载与模式崩溃

把太多原始的环境特征直接丢给Planning Head,网络往往偷懒:

  • 学会直接忽略历史特征,退化回单帧模型
  • 或者预测出不左不右、直接撞墙的"平均轨迹”

MomAD通过TTM强制进行"信息漏斗"过滤:只把"你上一秒最想干的那件事"通过Query塞进去。

3. 缺乏"主观动量"

动量是属于主体的,不是属于环境的。只有交互历史Query,网络才能记住"我原本打算干什么"。


七、交叉注意力的工作机制

信息流动全景图

当前Query(我想怎么走)
    --查询--> 历史Key/Value(我过去怎么打算)
         ↓
    融合后的Query(吸收历史动量的"金丹")
         ↓
    结合当前感知特征(F_ins)
         ↓
    Planning Head再次裂变,输出K条多模态轨迹

关键理解

被选中的Query是一个"时空锚点",代表的是"自车当前最稳定、最符合物理惯性的综合运动状态"。

“一生万物"的多模态再生:这唯一一个被历史记忆开过光的Query,在和实例特征结合后,会再次裂变输出K条多模态轨迹。


八、潜在的失败模式

模式一:稀疏表示的"先天不足”——信息漏斗带来的强制失忆

稀疏Query架构的本质是一个"极度势利的安检员"。

预定义本体的诅咒:模型在设计之初,工程师会给它规定好能提取几类Query(车辆、行人、自行车、车道线、斑马线)。

边缘场景灾难

  • 当空中指示牌出现在画面里时,因为"空中指示牌的文字和状态"不在预定义的Query类别里,这个"安检员"把它当作垃圾扔掉了
  • 越过指示牌后,历史记忆中根本不存在"刚才有个牌子"这件事
  • Planning Head完全不知道这是一条特定时段只能左转的可变车道

模式二:稀疏实例特征的材质丢失

$F_{ins}$ 虽然是一个256维的隐式特征向量(包含纹理、反光度、边缘锐利度等信息),但:

  • 如果图像分辨率不够,或夜间噪点大,Deformable Attention没采样准
  • 砖块和塑料袋的256维特征就会混淆
  • 出于安全保守策略,自动驾驶车大概率会选择急刹或猛打方向盘避让那个塑料袋

这就是幽灵刹车问题的根源。


九、行业趋势与未来方向

从"空间单帧感知"到"时空连续决策"的跨越

四大解题流派

流派 代表作 核心思想
流式架构 StreamPETR, SparseDrive 不存庞大的图像特征,只存上一帧"提纯后的结果"
世界模型 GAIA-1, MILE, DriveDreamer 不仅预测方向盘和油门,还逼着预测未来的世界长什么样
反事实推断 基于CARLA的闭环端到端 故意把车推向危险边缘,看模型怎么救回来
4D占据栅格 OccNet, UniOcc 在3D体素空间里加上时间维度,预测场景流

终极前沿:Mamba(状态空间模型)

比Transformer更适合处理无限长序列:

  • Transformer算注意力机制,时间序列越长,算力呈 $O(N^2)$ 爆炸
  • Mamba可以在保持恒定显存占用的情况下,将历史感受野拉长到过去几十上百帧

进化方向

方向一:视觉-语言-动作大模型(VLA + LLM)

用大语言模型来记忆语义信息,用文本/概念来做记忆,而不是用几何框做记忆。

方向二:混合记忆架构

对动态物体用高效的Sparse Query,同时维护一个低分辨率的Dense BEV/Occupancy记忆网格作为兜底。


十、总结

《Don’t Shake the Wheel》这篇论文极其精准地抓住了端到端自动驾驶"缺乏时序一致性"的命门:

  1. TTM(豪斯多夫拓扑匹配):保证动作的连贯
  2. MPI(交叉注意力记忆融合):拓展视野的深度
  3. TPC新指标:重新定义什么是"好"的自动驾驶

通过"Query与特征的强制二次校验(架构)" + “加噪与阻断(训练策略)",在保证轨迹平滑的同时,保住了模型对突发危险的敬畏之心。

下一次,当你坐在一辆变道丝滑、转弯稳当的自动驾驶汽车里时,它的算法底层,或许就闪烁着这种"动量感知(Momentum-Aware)“的智慧光芒!


十一、深度追问:只输入历史环境特征能避免捷径学习吗?

一个极具诱惑力的假设

既然输入历史轨迹或历史运动状态都会导致模型走捷径,那是不是意味着:我不直接输入历史的轨迹结果,也不输入历史的运动状态,只输入历史的环境特征,就不会导致模型走捷径的行为?

这是一个非常敏锐的假设,逻辑看似完美:既然网络是个"偷懒的作弊狂”,那我干脆把"答案(历史轨迹)“和"公式(历史物理速度)“全给它藏起来,只给它看"历史风景(环境特征)",逼着它每一帧都自己重新做题,这样不就能彻底根治"捷径学习(Shortcut Learning)“了吗?

残酷的真相:神经网络依然有 100 种方法找到捷径!

即使只输入历史的环境特征,神经网络依然能找到隐蔽的作弊路径:

捷径一:化身"视觉里程计”,反向推导隐藏数据

  • 作弊手法: 当你把 $t-1$ 和 $t-2$ 的环境特征(周围的树木、静止的建筑物、车道线)喂给模型时,网络内部的 Self-Attention 或 3D 卷积会瞬间计算出这些静态物体在相邻两帧之间的像素位移
  • 物理学的降维打击: 如果一棵树在 0.1 秒内向后移动了 1 米,网络根本不需要你告诉它速度,它自己就能计算出"自车速度是 10 m/s,且没有打方向盘”。
  • 最终结果: 网络在几层隐藏层之后,原封不动地把你辛苦藏起来的"自车历史状态和轨迹"重新还原了出来

捷径二:患上"领头羊依赖症”

  • 作弊手法: 训练数据集里,绝大部分时间车都是在跟车行驶。网络发现:“我只要死死咬住正前方那辆车,它的位置就是我的轨迹!”
  • 致命灾难: 一旦前车是个闯红灯的疯子,你的模型会因为极度依赖"前车环境特征"而毫无判断力地跟上去,直接车毁人亡。

捷径三:“静态环境假象"导致的感知休眠

  • 作弊手法: 网络发现 $t-1$ 的环境和 $t$ 的环境有 99% 是一模一样的,何必费劲去处理当前帧的那 1% 的变化?
  • 致命灾难: 这就是为什么很多只输入环境特征的模型,在遇到"鬼探头"时反应总是慢半拍。

核心结论

解决因果混淆,不能靠"堵(隐藏信息)",只能靠"疏(机制约束)“和"骗(对抗训练)"!

只要输入序列包含时间维度,神经网络就一定能复原出物理运动学捷径。因此,现代端到端自动驾驶的哲学已经变成了:我不怕你知道历史,我怕你沉迷历史。


十二、Cross-Attention 的数学本质:为什么"当前为主,历史为辅”?

权力的游戏:谁掌握 Query,谁就掌握"生杀大权”

在 Cross-Attention 的公式中: $$Attention(Q, K, V) = Softmax(\frac{Q K^T}{\sqrt{d}}) V$$

这三个字母的地位是绝对不平等的:

  • Query (Q) 是"带资进组的甲方/大老板”:它是主动方,带着当下的需求去数据库里发起检索。
  • Key (K) 和 Value (V) 是"被动的资料库/顾问":它们只能安静地躺在那里,等待被点名。

在 MomAD 的架构中:

  • 当前帧提取的初筛意图 = Query (大老板):代表"我此时此刻眼前看到的战况"
  • 历史意图 = Key/Value (历史顾问):代表"我过去几秒钟的惯性和计划"

致命对比:如果用 Concat 或 Add 会怎样?

假设网络设计为:最终特征 = MLP(当前特征 + 历史特征)

  • 网络的作弊手段: 网络会在 MLP 权重矩阵里,给"当前特征"分配极低权重($0.01$),给"历史特征"分配极高权重($0.99$)。
  • 灾难结果: 不管当前帧发生什么,历史惯性都会强行碾压当前视觉,这就是典型的捷径学习

Cross-Attention 凭什么能防作弊? 因为它的融合是乘法约束(Dot Product $Q \cdot K^T$),而不是加法线性组合!

  • 如果当前帧 $Q$ 看到前方空旷,历史 $K$ 也是直行,内积很大,历史 $V$ 被顺利吸收。
  • 关键时刻: 如果当前帧 $Q$ 突然看到窜出来的行人,大老板 $Q$ 的特征向量会瞬间变成"紧急避让"。此时,“紧急避让的 $Q$” 和"历史直行的 $K$" 方向完全不一致,它们的内积会接近于 0
  • 物理绞杀: 经过 Softmax 后,这个历史顾问的权重会被死死地压在 $0.00001$,历史信息直接被乘法物理清零

反向作死实验:如果把"历史"作为 Query 会怎样?

这被称为**“确认偏误的架构放大器”**!

  • 历史(大老板)拿着"左转"的 $Q$,去当前帧的画面里死抠能支持它左转的证据。
  • 哪怕当前画面里有一辆大卡车挡住了左转道,历史 $Q$ 也会对大卡车视而不见,只把注意力放在远处的左转红绿灯上,最终导致直接撞上卡车。

十三、模型的走捷径方法讨论

问题

  • 有没有可能模型让当前帧的 Query变成一个无脑接受历史信息的傀儡,从而实现拷贝历史的捷径 ?

答案

  • Cross-Attention机制下理论上不可行。因为为了让V完全被采纳,我们需要构造出一个和历史K的内积为单位阵的Q,但是我们在构造当前帧的Q时,没有提供任何关于历史的信息,所以它没办法和历史K“串供”。所以理论上通过Cross-Attention去融合历史信息是可以防止模型走捷径照抄历史的。
  • 但是如果是通过concat和mlp去获取历史信息,模型只需要把mlp网络中对应到历史信息的那部分权重调到0.99即可。所以concat+mlp是个很糟糕的融合历史的设计,很容易让模型走捷径。

十四、为什么 Dropout 和扰动仍然必不可少?

高级偷懒法:基于统计先验的"盲猜串供"

虽然 Cross-Attention 切断了 Q 提前看 K 的通道,但模型发现一个宇宙级统计规律:

  1. 自动驾驶的长尾诅咒: 汽车 95% 的时间都在沿着车道线匀速直行。
  2. K 的高度同质化: 95% 的训练样本里,历史 $K$ 长得几乎一模一样(都是"直行"向量)。
  3. Q 的终极摆烂策略: 把所有 $Q$ 都无脑映射成能和"直行K"完美匹配的形状,不就能拿 95% 的高分吗?

这叫"没有串供,但达成了默契"。 这种偷懒比直接改 MLP 权重更难被发现!

为什么必须上"酷刑"?

既然 Cross-Attention 无法阻止模型利用统计先验"盲猜",就必须动用物理手段(拔网线和给历史下毒),打破这个 95% 的稳定预期

第一道金牌:信息隔离墙(不准串供)

在生成当前候选 Query 时,网络绝对接触不到历史状态!它只能从当前帧的图像像素里提特征,强行生成一组代表当前意图的 Query。只有当这组无法作弊的 Query 生成完毕后,大门才打开,让它去和历史做 Cross-Attention。

第二道金牌:历史 Dropout(拔网线)

对付"摸鱼大师"最好的办法,就是时不时抽查它的真本事。

  • 在训练迭代中,设置一个概率(比如 30%),强行把传入的历史特征(Key 和 Value)全部清零。
  • 当网络正准备"无脑抱历史大腿"时,突然发现大腿没了!Loss 直接爆炸。
  • 为了在"断电时刻"活下来,网络被迫疯狂压榨当前帧的图像编码器,让它必须具备极强的单帧看路能力。

第三道金牌:给历史"下毒"(MomAD 的灵魂——Robust Instance Denoising)

既然网络喜欢"无脑信任历史",那我就故意让历史变得不可信

  • 在训练阶段,给输入的特征人为加上高斯噪声
  • 假设上一帧真实情况是"直行",但扰动让历史顾问传递出"我要向左猛打方向盘"的错觉信号。
  • 网络经过成千上万次"受骗"与"惩罚",终于悟出:“历史顾问经常发神经,我必须坚决相信我这双眼睛看到的真相!”

十五、终局总结:架构防"小人",训练防"懒汉"

防御层级 方法 防住什么 防不住什么
Concat + MLP 无防御 - 一切捷径
Cross-Attention (只用架构) 关上了串供的门 直接改参数躺平 统计先验盲猜
Cross-Attention + Dropout + 扰动 关门 + 放狗 + 拆门 几乎所有捷径 -

真正的护城河是组合拳: 物理隔离(不能提前偷看)+ 拔网线(History Dropout)+ 钓鱼执法(加噪声微扰)。

这三招齐下,才把端到端自动驾驶网络,从一个"只会复读的录音机",逼成了一个"既懂历史规律、又对当下极其警惕的老司机"!