PLUTO:如何通过对比学习与数据增强,突破模仿学习规划的性能瓶颈
1. 模仿学习的“天花板”与PLUTO的破局思路如果你研究过自动驾驶的规划模块可能会听过一个有点让人沮丧的说法模仿学习Imitation Learning在规划任务上似乎总差那么一口气。模型在开环测试Open-loop里看着挺像那么回事轨迹预测得挺准但一旦放进闭环仿真Closed-loop里让它自己开各种“翻车”就来了——要么是遇到训练数据里没见过的场景就懵了要么是学会了“偷懒”用一些奇怪的“捷径”来完成任务而不是真正理解驾驶的因果关系。这背后的核心问题就是模仿学习在规划任务上的几个经典瓶颈因果混淆和分布偏移。简单来说因果混淆就是模型“知其然不知其所以然”。比如数据里很多“前车减速我也减速”的案例。模型可能学会的只是“前车减速”这个表象而不是“因为前方有红灯所以前车减速所以我也要减速”这个真正的因果链。一旦遇到前车无故减速或者前方是绿灯但前车减速的场景模型就会做出错误决策。分布偏移则更直接训练时模型看到的都是专家驾驶的“完美”状态轨迹但实际运行时模型自己控制的车辆状态会逐渐偏离这个“完美”分布误差不断累积最终导致失控。我之前在项目里就踩过这个坑。我们训了一个很漂亮的轨迹预测模型开环误差极低但一上闭环车子经常在路口犹豫不决或者对突然切入的车辆反应过度。那时候我们就意识到光靠“模仿”专家的轨迹点是不够的必须给模型注入一些“常识”和“纠错”能力。而PLUTO框架正是为了解决这些问题而生。它没有抛弃模仿学习这个高效的数据驱动范式而是通过一套组合拳——创新的对比模仿学习CIL框架和一套精心设计的数据增强策略——来突破性能天花板。它的核心思想很巧妙不再只让模型看“标准答案”而是同时给它看“标准答案的变体”正样本和“错误答案”负样本通过对比学习让模型自己领悟哪些特征是关键因果哪些只是无关噪音。这就像教孩子认苹果不仅要给他看红苹果正样本还要给他看青苹果也是正样本颜色变了但本质没变甚至给他看红色的球负样本颜色像但不是苹果他才能真正学会“苹果”的概念。实测下来PLUTO在nuPlan这种顶级闭环基准测试中首次超越了长期霸榜的基于规则的规划器如PDM这可以说是模仿学习规划路线的一个里程碑。它证明了通过巧妙的设计数据驱动的规划方法完全能达到、甚至超越精心调校的规则系统。接下来我们就深入它的“心脏”看看对比学习和数据增强这两大引擎是如何协同工作的。2. 对比模仿学习CIL让模型学会“为什么”2.1 从“模仿行为”到“理解因果”传统的模仿学习可以看作一个“填鸭式”教育给模型输入当前场景状态要求它输出和专家一模一样的轨迹。模型学到的很大程度上是状态到动作的复杂映射函数但这个函数内部可能充满了“死记硬背”和“错误关联”。PLUTO提出的对比模仿学习框架则更像“启发式教学”。它的训练流程可以概括为四步构造对比样本对于一个原始训练样本x同时应用两种数据增强得到一对新样本一个正样本x和一个负样本x-。提取特征将原始样本、正样本、负样本一起送入同一个编码器得到它们的潜在特征表示h,h,h-再通过一个投影头映射到对比学习空间z,z,z-。计算对比损失核心在于拉近z和z的距离同时推远z和z-的距离。这迫使编码器去关注那些在正样本变换中保持不变的本质特征即因果特征而忽略那些在负样本变换中被篡改的虚假关联。联合训练同时计算原始样本和正样本的模仿损失以及辅助损失与对比损失一起反向传播。我举个例子帮你理解。假设原始场景x是“自动驾驶车跟随前车平稳行驶”。一个有效的正增强x可能是“对自车状态进行微小扰动”如速度稍微波动一下因为驾驶策略本质不应改变。而一个负增强x-可能是“删除前方所有车辆”。这个操作改变了场景的因果结构——自车减速是因为要跟车而不是无缘无故。如果模型之前是靠“前方有车”这个特征来关联“减速”动作那么在x-这个负样本里这个关联就被打破了。通过对比学习模型会逐渐明白“减速”这个动作应该与“与前车的相对运动关系”这个更深层的特征绑定而不是简单地与“前方有车”这个视觉特征绑定。2.2 隐式反馈无需奖励函数的“试错”你可能会问这不就是强化学习吗其实有本质区别。强化学习需要精心设计奖励函数让智能体在试错中探索。而在CIL框架中数据增强函数定义了对比任务从而提供了隐式的反馈信号。这种反馈是“隐式”的因为它不直接告诉模型“这个动作好1分那个动作坏-1分”。它通过构造正负样本对让模型在特征空间里自己去区分“好”的特征组合和“坏”的特征组合。比如“交通灯反转”这个负增强把红灯变绿灯模型如果原本学到了“红灯停”这个正确规则那么在特征空间里原始样本红灯场景和负样本绿灯场景的表示就应该被推远因为正确的驾驶策略完全不同。这个过程相当于让模型在数据层面进行了一次安全的“思想实验”体验了错误决策闯红灯对应的场景变化从而强化了对正确规则红灯停的理解。这种方法的巨大优势在于它避免了设计奖励函数的艰巨挑战也绕开了强化学习训练不稳定、采样效率低的问题。它依然在模仿学习的框架内利用了海量离线数据但获得了一部分类似强化学习的“理解因果”和“泛化”的能力。我在复现这个框架时感触很深加入CIL后模型在交叉口、环岛等复杂交互场景的通过率有肉眼可见的提升决策看起来更“有主见”了而不是单纯地复制数据中的常见模式。3. 六大数据增强精心设计的“考题”对比学习的效果高度依赖于如何构造正负样本。PLUTO设计了六种数据增强函数它们不是随机的图像变换而是紧扣驾驶语义、精心设计的“考题”。3.1 正向增强提升鲁棒性正向增强T要求增强后的场景其真实的专家轨迹仍然是合理甚至相同的。目的是提升模型对微小扰动的鲁棒性。状态扰动对自车当前的状态位置、速度、加速度、转向角添加微小随机噪声。这是最经典的增强目的是让模型学会从微小偏差中恢复对抗闭环测试中的误差累积。相当于告诉模型“老司机握方向盘也会有点抖但策略核心不变。”非交互代理丢弃移除那些在未来一段时间内与自车轨迹没有交集的周围车辆。这个增强非常关键它直接对抗“因果混淆”。模型很容易学会模仿周围所有车的宏观流量模式但这个增强强迫模型去关注真正与自车有交互的“关键智能体”忽略“背景板”。比如在一条多车道上旁边车道远远后方的一辆车其实不影响你当前决策就应该被丢弃。3.2 负向增强注入驾驶常识与规则负向增强T-会改变场景的因果结构使得原始的真实轨迹不再适用甚至变得危险。它们是模型学习“什么不该做”的关键。前导车辆丢弃移除自车前方的所有车辆。这是针对“跟车”这一最常见交互的专项训练。如果模型之前是盲目跟随前车那么这个增强后前方没车了模型如果还输出减速轨迹就会在对比学习中被惩罚。这迫使模型理解减速是因为需要保持安全距离而不是因为前面有个车。前导车辆插入在自车预期的轨迹上强行插入一个来自其他场景的车辆轨迹造成一个“必然碰撞”的假想场景。这个增强极具创造性它直接在数据中制造了“危险情况”。模型需要学习识别出这种不可能安全通过的场景并输出与原始轨迹直行截然不同的策略如刹车或绕行。这极大地增强了模型对潜在碰撞的警觉性。交互代理丢弃与正向增强相反这里专门丢弃那些与自车有交互的车辆。这用于训练模型处理更复杂、更不直观的交互。比如在无保护左转时对向直行车流是关键交互对象。丢弃它们后模型必须依赖交通灯、路权等更高层次的规则来做决策而不是简单地“等没车再走”。交通灯反转在自车接近无前车的信号灯路口时将信号灯状态反转红变绿绿变红。这是最“硬核”的规则注入。它直接测试模型是否记住了“红灯停、绿灯行”这条铁律。如果模型在红灯变绿的负样本中其表示与原始红灯样本很接近说明它觉得策略差不多那就大错特错了对比损失会把它拉回来。这六种增强从状态鲁棒性、交互识别、安全规则等多个维度为对比学习提供了丰富的、有语义的“考题”。它们共同作用引导模型去学习那些对决策真正重要的、因果性的特征而不是数据中表面的、虚假的统计关联。4. 高效辅助损失可微分的“物理护栏”光有“理解”还不够规划器必须遵守基本的物理和安全约束。传统模仿学习通过添加辅助损失来惩罚碰撞、驶出道路等行为但实现起来有门槛。特别是对于现在主流的基于向量Vector-based的模型如何高效地计算这些损失是个问题。PLUTO提出了一种非常巧妙的基于可微分插值的辅助损失计算方法。我把它理解为给模型装上了一套可微分的“物理护栏”。以前的一些方法需要把车辆轨迹用可微分的方式渲染Rasterize成一张张图像然后在图像空间计算是否压到障碍物像素。这个过程计算量大而且分辨率受限。PLUTO的思路则更直接构建代价地图比如对于“不可行驶区域”我们预先计算好一个欧几里得有符号距离场ESDF地图。地图上每个点的值代表到最近可行驶区域边界的距离内部为正外部为负。轨迹点映射与查询模型预测的轨迹是一系列点。我们将每个点映射到这张代价地图的坐标上然后利用双线性插值可微分地查询出该点所在位置的“到道路边界的距离”。计算损失如果查询出的距离小于安全阈值比如车身半径就意味着轨迹点可能压线或出界我们就通过一个损失函数如Hinge Loss来惩罚它。碰撞损失的计算同理只需换一张“到最近障碍物距离”的代价地图。这个方法的美妙之处在于整个流程映射、插值、计算损失完全可微分可以轻松地嵌入到现代深度学习框架中进行批量并行计算。它不再需要渲染图像计算效率高且精度不受图像分辨率限制。在实际代码实现中这几乎就是一个前向传播的步骤对训练速度的影响微乎其微但却能给模型带来至关重要的安全约束。5. 模型架构与实战启示5.1 纵横解耦的查询式解码器PLUTO的模型架构也为其成功奠定了基础。它采用了一种基于参考线的横向-纵向解耦查询机制。横向查询来源于高精地图中自车周围的车道中心线参考线。每条参考线代表一种可能的横向选择直行、左换道、右换道。纵向查询一组可学习的嵌入向量代表不同的纵向行为模式激进跟车、保守跟车、减速停车等。模型通过一种分解式的自注意力机制将横向查询和纵向查询进行组合最终产生N_R * N_L条多模态轨迹候选。这种设计非常符合人类驾驶的思维方式先选择走哪条车道横向决策再决定在这条车道上怎么开纵向决策。它显式地建模了驾驶行为的多模态特性让模型能够同时考虑“变道超车”和“跟车行驶”等多种可能并给出各自的置信度。5.2 给实践者的建议与“踩坑”点如果你也想在自己的项目或实验中借鉴PLUTO的思想这里有一些实战建议数据增强是核心但需谨慎设计PLUTO的增强函数是基于驾驶语义的。直接照搬图像领域的随机裁剪、颜色抖动可能收效甚微。你需要深入理解你的任务领域设计那些能改变“决策依据”的增强。例如在机器人抓取任务中“遮挡目标物体”可能就是一个很好的负增强。对比损失的温度系数τ需要调优这个参数控制着对比学习的“宽容度”。τ小模型对相似性判断更严格τ大则更宽松。这是一个关键的超参数需要在验证集上仔细调整。辅助损失的代价地图生成是关键前置步骤ESDF地图的生成需要离线处理。确保你的地图坐标系、车辆坐标系和轨迹预测坐标系一致否则“护栏”就装歪了。双线性插值虽然简单但要处理好边界情况轨迹点落在代价地图外。从开环到闭环的鸿沟依然存在即使加入了CIL和辅助损失开环训练好的模型直接部署到闭环依然可能表现不佳。PLUTO采用了一个轻量级的后处理选择器它用简单的运动模型对多条轨迹进行闭环推演并结合规则成本如舒适度、进度和学习到的置信度来挑选最终轨迹。这是一个实用且有效的工程折中相当于给神经网络的“黑箱”输出加了一道安全的、可解释的过滤网。在我自己的尝试中最初直接应用所有增强导致训练不稳定。后来发现需要逐步引入增强策略。先只用模仿损失和基础增强如状态扰动训练一个基线模型然后依次加入辅助损失、对比损失和更复杂的语义增强让模型有一个循序渐进的学习过程。同时监控对比损失与模仿损失的比例也很重要确保模型在“学习对比”和“模仿专家”之间取得平衡。PLUTO框架的成功标志着模仿学习规划从“形似”走向“神似”的关键一步。它通过对比学习让模型触及了驾驶行为的“因果内核”又通过数据增强和辅助损失为这个内核套上了“安全外壳”。这套组合拳不仅适用于自动驾驶规划对于机器人控制、游戏AI等任何需要从演示中学习复杂决策的领域都具有很强的启发性。它的出现告诉我们当数据驱动的方法配上了正确的归纳偏置和学习目标其性能天花板远比我们想象的要高。