论文标题:《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(此刻我想怎么走),而key和value全是上一帧经过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》这篇论文极其精准地抓住了端到端自动驾驶"缺乏时序一致性"的命门:
- TTM(豪斯多夫拓扑匹配):保证动作的连贯
- MPI(交叉注意力记忆融合):拓展视野的深度
- 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 的通道,但模型发现一个宇宙级统计规律:
- 自动驾驶的长尾诅咒: 汽车 95% 的时间都在沿着车道线匀速直行。
- K 的高度同质化: 95% 的训练样本里,历史 $K$ 长得几乎一模一样(都是"直行"向量)。
- 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)+ 钓鱼执法(加噪声微扰)。
这三招齐下,才把端到端自动驾驶网络,从一个"只会复读的录音机",逼成了一个"既懂历史规律、又对当下极其警惕的老司机"!