核心卖点:扔掉昂贵的3D标注包袱,用无监督/自监督大法实现端到端驾驶
🛑 痛点:被"模块化"和"高价标注"绑架的自动驾驶
在聊 UAD 之前,咱们先看看现有的端到端自动驾驶老大哥们(比如 UniAD)。虽然它们号称"端到端",但骨子里还是在模仿传统流水线,设计了层层递进的 感知 → 预测 → 规划 子任务。
这种设计的硬伤极其明显:
- 疯狂烧钱的"数据紧箍咒":为了训练感知和预测模块,你需要海量、极其精确的 3D 框(3D Bounding Boxes) 手工标注数据。这不仅是烧钱,更是限制模型规模扩展的致命瓶颈。
- 沉重的"显卡粉碎机":一堆复杂的子网络堆叠在一起,导致模型在训练和推理时的计算开销极大,跑起来像背着沙袋跑步。
🚀 破局者 UAD:扔掉包袱,无监督/自监督大法好!
UAD 犹如一个轻装上阵的武林高手,它认为:既然规划(开好车)才是最终目的,何必纠结于完美的 3D 标注呢? 于是,它直接抛弃了传统的监督式模块,用两个极具创意的"独门绝技"打通了从视觉输入到控制信号的任督二脉。
🗡️ 绝技一:角度感知前置任务(Angular Perception Pretext)
核心思想:“切披萨"感知法
既然不给 3D 标注数据,模型怎么理解周围的世界呢?UAD 设计了一个非常巧妙的无监督前置任务。
1. 空间表征学习(BEV 切披萨)
模型不去做精细的 3D 框检测了,而是把车辆周围的鸟瞰图(BEV)空间像切披萨一样,划分成多个 扇形区域(Angular Blocks)。
为什么要分扇区?两大绝妙好处:
- 极度压缩信息(省算力):同一条光线(同一个扇区)上的信息被压缩进了一个特征向量(Angular Query)里。对于规划模块来说,它不需要知道障碍物是在这个扇区里精确到哪怕一厘米的位置,它只需要知道"这个方向有东西,别往那开"就足够了!
- 契合相机视角:扇形的夹角天然对应了相机的视野角度(FOV),这为后面从 2D 直接白嫖标签打下了地基。
模型引入了一系列 角度查询向量(Angular Queries),每个查询专门负责盯着一个扇区,去预测这个扇区里"有没有障碍物”(即 Objectness,物体存在性)。
2. 白嫖 2D 伪标签(借力打力)
没标注怎么训练物体存在性?作者机智地利用了现成的开源 2D 开放词汇目标检测大模型(比如 GroundingDINO)。
极简投影术:角度对角度的"连连看":
传统把 2D 投影到 3D BEV 空间,最头疼的就是"深度(Depth)“算不准。UAD 巧妙地绕开了这个问题!
- 一张 2D 图像的宽度,其实对应的就是一个固定的水平视野夹角
- 如果在 2D 图像的某个位置有一个边界框,这个框的左右边界,刚好对应了以自车为中心的一段特定夹角的射线
- UAD 直接把这个 2D 框覆盖的水平角度范围,映射到 BEV 空间的对应扇形区域
- 在这个扇形范围内,模型就被打上
1的标签(有物体),其他区域则是0(空旷)
这个投影不需要猜测物体有多远,只看方向,非常稳!
3. 什么算"有东西”?全靠 GroundingDINO 的"咒语"
这里的"有东西(Objectness)",实际上是由你输入给 GroundingDINO 的文本提示词(Prompt)决定的:
- 在自动驾驶中,作者通常会输入像 “car, pedestrian, bicycle, truck, bus, obstacle” 等类别
- 树和指示牌算吗? 如果这些东西在马路边不影响行驶,通常不作为主要检测目标;但如果一棵倒塌的树横在路上,只要你的提示词里包含了"障碍物"或者泛化的词汇,GroundingDINO 就能框出它,相应的扇区就会被标记为
1 - 只要是规划需要避让的,都可以低成本地"喂"给大模型去生成标签
一分钱 3D 标注不花,就把空间感知做完了!
4. 时序梦境解码器(Angular-wise Dreaming Decoder)
光看现在的静态画面不行,还得懂未来。UAD 强制模型去预测 未来不可见的状态。
🧠 它在干什么?
Dreaming Decoder 的本质是一个 自回归的隐空间世界模型。
假设我们需要规划未来 T 步的轨迹,解码器就包含 T 层。它会结合自车未来的驾驶意图,利用 GRU(门控循环单元),一步接一步地"脑补"未来 T 帧时,各个扇区里的特征状态会变成什么样。
⚖️ 怎么监督未来的"梦"?(对答案机制)
既然没有未来的 3D 标注框,怎么知道它"梦"得对不对?这就用到了世界模型中经典的 先验 vs 后验 博弈机制:
- “闭眼猜”(先验分布 Prior):模型只看现在的图像,然后结合自车动作,推测下一秒的环境特征分布
- “睁眼看”(后验分布 Posterior):在训练阶段,模型其实是可以"作弊"看到下一秒的真实图像的!它把下一秒的真实图像输进去,提取出一个真实的环境特征分布
- “对答案”(Dreaming Loss / KL 散度):接下来,系统强迫"闭眼猜"的结果,去无限逼近"睁眼看"的真实结果
通过不断计算这两个特征分布的差异,模型被逼着学会了物理世界的运行规律(比如前车踩刹车了,它的特征在未来一秒会怎么变化)。全程不需要人类画一个框,模型自己通过"梦境对比"学会了预判未来!
5. 跨区与运动关联:靠"脑补"机制全局掌控
如果一个行人上一帧在 A 扇区,下一帧走到了 B 扇区,UAD 怎么跟踪他?
关键在于:UAD 并不是在做传统的"目标跟踪"(不需要给行人打个 ID),而是把整个场景当作一个流动的特征池。
每一个扇区都有一个专属的 角度查询向量。在时间流转中,所有的 Query 都会通过 Transformer 的交叉注意力机制去全局扫描 BEV 空间,并且输入到后续的 Dreaming Decoder(包含时间记忆单元,如 GRU) 中。
模型记住的不是"一个具体的行人",而是"特征在相邻扇区之间的动态转移"。只要这个障碍物的特征从 A 扇区"流"到了 B 扇区,负责 B 扇区的 Query 就会立刻捕捉到这个变化并拉响警报。
🛡️ 绝技二:方向感知规划与自监督一致性
感知搞定了,接下来就是关键的 路径规划。开车最怕什么?转向的时候画龙、不稳!
1. 方向感知学习(Direction Prediction)
模型会先预测自车打算去哪(左转、直行还是右转),并设置方向阈值。明确了宏观意图后,再进行微观的轨迹生成,极大地增强了车辆在十字路口等复杂转向场景下的决策能力。
2. 自监督轨迹一致性 —— 稳如老狗的"左右互搏术"
⚠️ 关键澄清:不是"裁剪缩放",而是"空间旋转"!
如果真的用大尺度的"裁剪"或"缩放",把核心的车道线、红绿灯或者前车给"裁"掉了,那根本就是一个"无解"的问题。UAD 巧妙地避开了这个死胡同。
具体是怎么操作的呢?
- 原视角预测:首先,模型看着当前的正常画面,在 BEV 空间里规划出了一条原始的轨迹($P_{orig}$)
- “转动脖子"的增强:接着,作者在特征层面,把整个 BEV 空间的特征旋转一个角度 θ(比如向左旋转 15 度、向右旋转 10 度等)。这相当于模拟了自车在当前位置,车头稍微偏左或偏右的状态。注意:在这个过程中,所有的道路、车辆信息都在,只是相对于自车的坐标系转了一个角度,没有任何核心信息被丢失!
- 旋转视角的预测:模型看着这个被旋转过的 BEV 特征,再次进行规划,得出一个新的轨迹($P_{rotated}$)
左右互搏的精髓:转回去对答案
真正的"自监督一致性"是在这一步完成的:如果模型真的懂驾驶物理学,那么它在"旋转后视角"规划出的轨迹 $P_{rotated}$,只要在数学上做个简单的逆向旋转,就应该和最初的原始轨迹 $P_{orig}$ 完美重合!
$$Loss = \text{差距}( \text{逆旋转}(P_{rotated}) , P_{orig} )$$为什么这种"旋转一致性"这么牛?
- 信息零损耗:因为只是坐标系的旋转,马路还是那条马路,障碍物还是那个障碍物,规划条件是绝对充足的
- 专治"画龙"和"方向盘不稳”:现实开车中,很多端到端模型在过十字路口时,车头稍微一偏,模型就以为到了一个新场景,规划出的轨迹就会突变,导致车辆在路口"画龙"。通过这种旋转一致性训练,模型被逼着学会了:不管车头当前偏了多少度,我的宏观行驶轨迹必须死死锚定在那里,不能动摇!
🕰️ 记忆模块:UAD 不是单帧规划器
过去的记忆:BEVFormer 风格的"流式时序融合"
UAD 并没有把前几帧的图像原封不动地存下来(那样太吃显存了),而是把记忆存在了 特征空间(BEV 空间) 里。
- 站在巨人的肩膀上:UAD 在图像特征转鸟瞰图这一步,沿用了自动驾驶经典大作 BEVFormer 的时序架构
- 流式记忆传递:当系统处理当前帧(第 T 帧)时,它不仅看当前的摄像头图像,还会把上一帧已经计算好的 BEV 特征图拿过来
- 时序自注意力:模型会通过注意力机制,将上一帧的 BEV 特征与当前帧的特征进行对齐和融合
- 效果:通过这种帧传帧的"接力赛",当前帧的 BEV 特征里自然就蕴含了过去几秒的动态信息
未来的推演:Dreaming Decoder 里的"GRU 记忆单元"
梦境解码器的底层核心就是一个经典的 时间序列记忆模块——GRU:
- 隐状态即记忆:在预测未来轨迹时,GRU 维护着一个包含环境动态的隐状态 Q
- 步步推演:当它去预测未来第 1 秒、第 2 秒、第 3 秒的状态时,GRU 会把第 1 秒预测完毕后的隐状态传递给第 2 秒的预测过程
- 脑补物理规律:通过 GRU 这种自带记忆和遗忘机制的循环网络,UAD 能够确保它规划出的轨迹和预测的环境变化在时间维度上是连贯且符合物理学常识的
⚠️ 局限性:1.5秒魔咒
历史帧数量
UAD 以及它对标的 UniAD 这种端到端模型,通常只融合 3 帧 的历史 BEV 特征(加上当前帧一共 4 帧)。在 nuScenes 数据集的标准采样率(2Hz,即每 0.5 秒一帧)下,它的"有效记忆窗口"只有短短的 1.5 秒!
现实问题:可变车道场景
问题场景:5秒前能看到空中可变车道指示牌,开过去之后该怎么办?
如果指示牌在 5 秒前从相机的视野上方消失了,而模型只有 1.5 秒的 BEV 记忆:
结论:它真的会变成"失忆症患者"!由于历史特征池里已经彻底把 5 秒前那个含有指示牌的 BEV 帧"挤压丢弃"了,UAD 在当前帧完全不知道身下的车道到底是直行还是左转。
为什么不强行融合过去 5 秒?
你可能会想,把历史帧数改成 10 帧不就行了吗?在工程上,这是一场灾难:
- 💥 显卡原地爆炸:BEV 特征是一个极其庞大的高维张量。别说 10 帧,很多模型在训练时堆 4 帧,24G 显存的 RTX 3090 就已经塞满了
- 🌀 坐标系对齐崩溃:历史 BEV 特征要融合到当前帧,必须根据车辆的运动轨迹进行空间旋转和平移对齐。车在 5 秒内可能已经开出了 60 米,累积的里程计误差会让特征图"糊成一团"
现实中的破局之道
- 导航指令:即使是 UAD,在规划轨迹时也不是无头苍蝇,它会接收宏观的导航指令
- 降维记忆法:让模型先把信息提取成一个轻量级的文本标签或矢量坐标,存到长时记忆库里
- 妥协:轻地图辅助:在实际量产中,大部分车企依然会依赖标准导航地图的先验拓扑信息作为兜底
🏆 战绩结算:数据说话
| 指标 | 成绩 |
|---|---|
| 开环测试(nuScenes) | 最佳开环评估表现 |
| 平均碰撞率 | 比 UniAD 相对降低 38.7% |
| 闭环测试(CARLA) | Town05 Long 基准 |
| 路网完成度 | 98.5% |
| 驾驶得分 | 比 VAD 高 41.32分 |
| 训练资源 | 仅消耗 UniAD 的 44.3% |
| 推理速度 | 提升 3.4倍 |
🏁 总结
UAD 这篇论文犹如给端到端自动驾驶做了一次完美的"断舍离":
- ✅ 一把扔掉了昂贵的 3D 标注包袱
- ✅ 砍掉了冗余沉重的模块化预测塔
- ✅ 用"切披萨"式的角度感知前置任务实现无监督空间感知
- ✅ 用自监督的一致性规划保证转向稳定
- ⚠️ 但在时间维度上的长效记忆依然受限于 BEV 时序架构的通病
核心结论:不烧钱堆 3D 标注,靠聪明的无监督架构设计,照样能把车开得又快、又稳、又安全!这绝对是通往"大规模、低成本、强泛化"自动驾驶大模型的一条硬核新路。
相关论文
- [[UniAD]] - 端到端自动驾驶标杆
- [[BEVFormer]] - BEV 时序融合基础架构
- [[VAD]] - 向量化端到端驾驶
- [[LAW - Latent World Model for E2E Driving]] - 隐空间世界模型
- [[World4Drive - 无需感知标注的端到端世界模型]] - 世界模型方法