PLUTO论文阅读笔记

论文https://arxiv.org/abs/2404.14327
代码https://github.com/jchengai/pluto
1、为什么要做这个研究(理论走向和目前缺陷) ?

之前基于学习的规划器一直都没办法超越基于规则的规划器,主要是模型架构、训练方法、数据增强等层面都有很大改进空间。
2、他们怎么做这个研究 (方法,尤其是与之前不同之处) ?

采用基于query的模型架构,实现横纵向解耦建模,有利于生成更加灵活的规划轨迹;添加了一些数据增强方法,启用对比学习,帮助模型获得因果推理能力;增加辅助损失函数,确保模型不会产生有危险(和静态障碍物碰撞或冲出路网)的轨迹;后处理如人工规则的打分,结合车辆动力学用lqr进行轨迹跟踪控制确定最终的输出轨迹等,其他的还有一些trick如自车没有参考线query(如停车场场景)会启用自由轨迹预测生成一个规划轨迹、动态交通参与者的轨迹预测。
3、发现了什么(总结结果,补充和理论的关系)?

首次效果超越了基于规则的规划器,业界很多两段式的规控端到端都是基于这个方法做的。

摘要

PLUTO是一个基于模仿学习的规划器,性能超越基于规则的规划器,其提升主要源于三方面:1)模型架构具备横-纵向感知能力,可以实现灵活的驾驶行为;2)训练时设计了一种新的辅助损失计算方法,适用范围广且可以并行计算;3)使用了对比学习的训练策略,叠加数据增强可以实现规范驾驶行为并有助于理解潜在交互。在nuPlan上进行测试验证,效果很好。

1 引言

用学习的方法做规划虽然研究很热,但效果很拉胯,跟基于规则的方法差一大截。主要有如下一些原因:

1)多模态驾驶行为的规划轨迹获取困难。基于学习的规划器擅长纵向任务但不擅长横向任务,如变道、绕障。作者分析是由于缺乏显式的横向行为建模引起的,于是作者就研究采用基于query的架构来改进,通过融合横向和纵向的query来产生大量候选规划轨迹。

2)除了模型架构设计层面的问题,还有一个原因就是魔方学习有原生的缺陷,即总是倾向于找捷径、学分布和因果混淆(结果和原因对应不起来)。

针对上述两大问题,本文提出了三种解决方法:

  1. 除了模仿学习损失外多加一些辅助损失来监督不良行为。只有模仿学习损失不够,还得加对比学习的辅助损失,来限制一些涉及安全的行为,如碰撞、驶出路网。之前也有研究去这样加对比辅助损失,但其损失要么基于热力图输出要么基于可微分光栅化器(rasterizer)实现把轨迹点生成在图像上,需要限制输出分辨率来限制计算量,而且很难应用于基于vector的模型上。本文基于可微分插值来设计辅助损失,可以实现并行计算,适用深度学习网络。
  2. 数据增强:开环训练和闭环测试之间存在gap会导致很多问题,比如:累计误差可能会引起输入数据和训练分布之间产生偏差;模型倾向于学习捷径而非知识。数据增强已被证明可以有效解决此类问题,比如添加扰动可以使模型对小偏差没那么敏感,dropout增强可以避免学习捷径。本文引入了更多数据增强方法来规范驾驶行为和交互学习。
  3. 对比学习:由于缺乏交互反馈,模仿学习很难理解因果关系。比如,自车可能会因为发现旁车在减速而去减速,而不是因为红灯。我们的目标就是通过强化学习或者数据驱动的仿真器来解决这个问题。对比学习可以通过微小的差异帮助模型增强表达能力,这种可以通过原始数据和增强过的数据对比实现,比如扔掉前导车。
    总结下来,PLUTO主要有如下贡献:
    1)模型架构层面:设计了基于query的模型架构,实现输出灵活多样的驾驶行为。
    2)辅助损失:设计了一种新的高效的辅助损失计算方法,可以规范驾驶行为。
    3)对比学习(CIL):设计了一系列数据增强方法,用对比学习损失来监督。
    4)nuPlan上评估效果很好。

相关研究

A 模仿学习

人类驾驶行为数据很多且容易获得,端到端的自动驾驶模型就是通过这种数据来学习。其输入是原始摄像头或多种传感器数据,模型一般是CNN网络,输出是控制策略。最近,也有一些方法采用模块化的E2E架构,如LAV和UniAD,这种架构把感知、预测、规划任务整合到一个网络里,虽然很有潜力,但依赖一个高保真的仿真环境来训练和评估,如CARLA,所以这类方法的最大问题就是很难实现真实高且多样的仿真agent,而且依赖很多专家系统,其训练出来的模型很难适用于真实世界场景。

本文重点放在中对中(mid-to-mid)的方法,即把感知结果作为输入特征,其优点就是输入数据足够多样,因为来自真实世界的感知输出,所以训练的规划器可以直接上车应用,与真实世界无gap。

B 对比学习

通过精细设计对比数据对,对比学习可以将一些特定的能力注入的模型中,已经有一些方法在探索将对比学习应用于运动预测,如Social NCE, FEND。本文也尝试将对比学习应用于规划轨迹预测,并且设计了一些数据增强方法。

本文方案

A 问题表达

N_A个动态参与者,即agent ,共计N_A个,其特征A = A_0:NA

,其中A_0为自车特征,其他为动态参与者特征

N_S个静态障碍物,其特征O = O_1:NS

M: 高精地图

C: 其他交通相关元素,如红绿灯

PLUTO的目的 1)生成Nt个自车规划轨迹,2)预测每个动态参与者的轨迹。

最终,通过一个轨迹打分模块来选出一个最好的规划轨迹。公式表达:

B 输入表达与场景编码

动态交通参与者(agent)历史编码

给定时间t, 每个Agent的状态表达为s^t = (位置向量,朝向角,速度向量,边界框长宽,自车可见性),共计8个参数,表达为:

通过把agent历史连续多个临近时刻的状态相减后组合到一起,即可得到agent的历史特征向量:

把这些agent的历史特征向量送入FPN层来生成每个agent的编码特征,特征维度是D。

静态障碍物编码

每个(共计Ns个)可行驶区域内的静态障碍物表达为(位置向量,朝向角,边界框长宽),共5个参数,即:

直接送入到一个多层感知机来获取编码特征,特征维度也是D。

自车编码

为了避免自车学习自车历史的运动规律,故自车编码时只输入当前状态,而不输入历史状态信息,包括(位置向量,朝向角,速度向量,加速度向量,转向角),然后设计了一个基于注意力机制的自车状态编码器(SDE,state dropout encoder),生成自车编码特征E_AV,特征维度也是D。

向量地图编码

地图实际是表达可行驶区域(车道),用N_P个折线标识,每个折线代表一个车道,包含n_p个的点,每个点的特征向量包含8个维度,即(此点相对于此折线起始点偏移向量,相对上一点偏移向量,相对于当前车道左边界点偏移向量,相对于车道右边界偏移向量):

每条折线特征表达:

可以用PointNet编码为每条折线做特征编码,生成的特征维度也是D:

场景编码

把agent,静态障碍物,地图,以及自车等元素的embedding组合到一起送入到transformer编码器中:

送入编码器前需要对每个输入进行全局位置编码(PE),用的是每个元素的最近点全局位置的傅里叶embedding(参考另一篇论文做法),此外,为了捕获每个元素的特殊属性,如agent类型、限速、交通灯状态信息,还加了一个可学习的E_attr

Encoder 的每一层就是标准的transformer的编码层:

C 多模态规划轨迹解码

这里的多模态实际是指多种规划轨迹,而不是CV里的多种传感器输入。需要多条轨迹符合人类驾驶行为,面对同样的场景,驾驶员可以选择加速或减速,变道或接管,都是可行的。可以采用和DETR类似的基于query的方式来解码输出轨迹,但是直接应用可学习的anchor-free的query会有个问题,就是训练不稳定难收敛,为此作者采用把横纵向行为(即变道和加减速)作为anchor进行解码。下图所示:

以参考线作为横向query 。即找出所有自车可能的规划轨迹编码后作为anchor query。参考的是2022年的一篇论文的做法首先以自车为圆心,获取半径为R内的所有的道路段,以每个找出来的道路段为起点,使用深度优先搜索找出所有的可能的拓扑连接,然后连接这些找出的可通行的路段的中心点作为路线,对找出的每个路线取固定长度,然后下采样为固定数目的点,形成一条类似向量地图的这项,然后参考前面向量地图的编码方法用pointNet进行emb编码,即为横向query

分维度横向-纵向自注意力 。纵向query是可学习的,无anchor的,共计N_L个,emb维度也是D。横向Q_lat和纵向Q_lon首先用一个linear层做交互生成初始的共计N_L * N_R个横纵耦合query,
![[图片]

图片\]](https://i-blog.csdnimg.cn/direct/6a0869acbd0a4cbc96cca9f70c072715.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d939745b256943d5b9cbe15eccee11b3.png) N_L \* N_R个横纵耦合query直接计算自注意力计算复杂度太高了,是O(N_R*N_R* N_L*N_L)。如果先在横纵耦合query内的横向维度内计算自注意力,再在纵向维度内计算自注意力,最后的计算复杂度就是O(N_R* N_R*N_L + *N_L*N_L* N_R),可以大大降低,这个就是**分维度自注意力** 。 **规划轨迹解码** 。解码器中的每一层包含三种注意力机制,横向自注意力、纵向自注意力以及query-to-scene交叉注意力,计算过程如下: ![\[图片\]](https://i-blog.csdnimg.cn/direct/f0744b0008b5470e83b212a1271dc5eb.png) 最后一层解码层的输出即Q_dec分别输入到两个MLP中获取输出规划轨迹T_0和置信度。 ![\[图片\]](https://i-blog.csdnimg.cn/direct/878b2ce685684ff79afba959a0db09f5.png) 每条输出的规划轨迹中的每个点包含6个通道,\[横向位移,纵向位移,cos(朝向角),sin(朝向角),横向速度,纵向速度\],考虑到场景中缺乏参考轨迹的情况,会应用一个额外的MLP直接作用于编码特征来生成一个唯一的轨迹轨迹,这条轨迹也会参与损失计算和最终的打分。 ![\[图片\]](https://i-blog.csdnimg.cn/direct/b3ef8aa213c14b51a814efbc2f604df3.png) **模仿学习损失** 。首先把8秒真实驾驶轨迹距离将目标参考线分成N_L - 1段,对应N_L个参考点,即为目标参考线,按每个参考点对应一个纵向的query。通过将目标参考线和有参考线时预测的轨迹之间、以及目标参考线和预测的自由轨迹之间(无论有anchor参考线)计算L1回归损失,计算得分时用交叉熵损失。 ![\[图片

图片\]](https://i-blog.csdnimg.cn/direct/6069a1c975f74468bcdb9bad65c97923.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bdd9d3974ace4965a172cc9e7a41e020.png) **agent轨迹预测损失** 。其他动态agent的轨迹预测输入是其的embedding(不是编码器的输出),经过一个两层的MLP输出预测轨迹,所以其预测并未考虑和自车未来的交互行为,避免自车规划轨迹不稳定 ![\[图片

图片\]](https://i-blog.csdnimg.cn/direct/59a5badae7844289a37fdce3d15fcb13.png) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8b00cc2eb8ff4f9ea0a7c9785dc19854.png) ### D 高效可微分辅助损失 纯模仿学习损失不够,还得加辅助任务损失来惩罚有危险的驾驶行为,如碰撞、跑出路网,这里采用将可行驶区域等信息离散为栅格地图,然后计算预测轨迹点在栅格地图上的位置是否合规(需要计算插值)来计算损失。 代价地图构建。将可行驶区域/不可行驶区域离散为二值化的栅格地图,每个grid代表可行驶或不可行驶。 损失计算。把自车的形状用N_c个圆圈表示,规划轨迹确定了这些圆圈中心的位置,根据圆圈中心点位置计算其距离非可行使区域的距离d_i,结合圆圈半径R_c和安全边界阈值计算损失,下图所示 ![\[图片\]](https://i-blog.csdnimg.cn/direct/7d378602ee7f4cc2b9d76d4b3755f4ac.png) ![\[图片\]](https://i-blog.csdnimg.cn/direct/8b754fcacbbc45318046c7d9ba3a31ec.png) 损失计算伪代码: ![\[图片\]](https://i-blog.csdnimg.cn/direct/7649ccb3408a408f93e0a5ddd677ccf1.png) ### E 对比模仿学习框架(CIL) 用于学习因果关系,这个框架包含四步: 1. 输入训练样本x,应用数据增强生成一个正例和一个负例样本,正例样本的gt和原始输入训练样本的gt相同,但是负例样本gt和原始gt不同。 2. 训练时把原始样本和增强后的样本都输入到encoder中获取自车状态token对应的特征表达,然后经过一个MLP获取输出z, z+,z-。 3. 用triplet contrastive loss计算z, z+, z-损失,目的是使z和z+趋近相同,z和z-差异更大, 用余弦相似度计算。 4. 然后解码原始样本输出的轨迹和正例样本输出的规划轨迹,但是**不解码负例样本的规划轨迹** ,同时计算辅助损失和模仿损失。 ![\[图片\]](https://i-blog.csdnimg.cn/direct/9884fd270a7343f68789034670180b51.png) 三元组对比损失计算: ![\[图片\]](https://i-blog.csdnimg.cn/direct/43e3bc41404e436e9e2fe859f5bde850.png) 总的损失包括4部分:模仿学习损失,agent轨迹预测损失,辅助损失,对比学习损失, ![\[图片\]](https://i-blog.csdnimg.cn/direct/cad3269fb19442059089d2231b567f33.png) **数据增强** 。总共用了6种数据增强的方法。 1. 状态扰动。用于增强模型对累计误差的鲁棒性。给自车状态加入微小扰动,但是不改变GT,如位置、速度、加减速、转向角,用于生成正例样本。 2. 丢弃和自车无交互的agent。用于避免模型学习无交互车辆的行为。有无交互通过agent的未来轨迹点上bbox和自车对应轨迹点的bbox是否有交集判断,用于生成正例样本。 3. 引导车丢弃。增强模型防撞前车能力,这个增强影响自车规划轨迹,用于生成负例样本。 4. 引导车插入。这个增强影响自车规划轨迹,用于生成负例样本。 5. 有交互的agent丢弃。增强无保护左转时的博弈能力,这个增强影响自车规划轨迹,用于生成负例样本。 6. 交通灯变化。仅在有引导车时做此增强,避免模型一味学习引导车行为,生成负例样本。 ### F 轨迹规划和后处理 自车共计输出N_R\*N_L个规划轨迹和对应的得分,根据得分排一下序选前K个轨迹,由于预测的规划轨迹并未考虑车辆动力学,所以按照这个轨迹运行有时可能不现实,故考虑用LQR对模型输出的轨迹进行横向跟踪控制,输出一条经lqr跟踪控制后的轨迹,最后评估轨迹的优劣是也是评估lqr控制输出的轨迹,而非原始模型输出的轨迹。 评估规划轨迹的好坏主要考虑如下因素:行车进度、驾驶舒适性以及是否遵守交通规则。也会考虑agent的预测轨迹考虑是否碰撞来评估,最终每个输出轨迹的得分整合了模型输出的得分和基于规则的打分系统结果: ![\[图片\]](https://i-blog.csdnimg.cn/direct/13616b715a254ad3ac41290e01d3ac50.png) 后处理步骤只是用于模型推理时筛选最优的规划轨迹,不参与模型训练,后处理也可以设定规则注入驾驶员的偏好。 ## 实验 ### A 实验设置 **数据集nuPlan** : 1300小时的驾驶数据,75种标注场景类型,提供了闭环仿真框架,其仿真框架可以输出未来15s的仿真结果,帧率10,且对agent提供了和自车交互以及不和自车交互两种模式。 **benchmark(基准数据和评价指标)** :训练和测试集Val14设置参考之前论文。评价指标包含三个度量:1)开环得分NR-score(non-reactive closed-loop score),即agent不和自车未来规划轨迹交互;2)闭环得分R-score(reactive closed-loop score),本文主要关注闭环得分。nuPlan闭环得分是如下几个度量的均值: 1. 自车无碰撞:自车不能主动撞其他车,其他车撞自车不算。 2. 将碰撞时间TTC:将要碰撞的时间需要大于阈值 3. 可行驶区域限制 4. 舒适性:加减速、变道不能太猛 5. 进度(PROGRESS): 到达同一目的地时规划的轨迹长度和人类驾驶时经过的轨迹长度计算百分比,避免画龙。 6. 速度限制:不能超速 7. 行驶偏离:不能逆行 **BaseLines(基准方法)**:三类,1)基于规则的规划器IDM,PDM-Closed, ,2)基于学习的规划器PDM-Open, GC-PGP,RasterModel,UrbanDriver,()。3)混合型规划器,GameFormer,PlanTF-H。 ### B 实现细节 两个变种PLUTO†和PLUTO, 差异主要在PLUTO† 无lqr后处理。nuPlan要求输入仅提供两秒历史数据,需要输出未来8s的规划轨迹。4块3090显卡训练25个epochs, 带对比损失(CIL)时需要45个小时完成训练,不带CIL时需要22个小时。详细设置如下: ![\[图片\]](https://i-blog.csdnimg.cn/direct/1e04730c076a49048d8a4797b9f6114a.png) ## 实验结果和讨论 ### A 和sota比较 不带后处理时比所有纯学习的方法效果都好,但是不如基于规则的方法,带后处理时比基于规则或混合的方法都要好。 ![\[图片\]](https://i-blog.csdnimg.cn/direct/3fe7ab1f07114058b7ed6ac7e5f8769b.png) ### B 结果可视化 ![\[图片\]](https://i-blog.csdnimg.cn/direct/4ae213c8df7b460b952faa333245d242.png) ### C 消融实验 各组件的影响:看起来不让自车看到自己的历史行驶行为,对比学习以及后处理作用最大。 ![\[图片\]](https://i-blog.csdnimg.cn/direct/c1a5b7e2c1814af2a17466b30430726d.png) 纵向query数影响:并不是越大越好,太大会导致学习困难 ![\[图片\]](https://i-blog.csdnimg.cn/direct/761a96d6250a4cea9ad1cbca27d2898e.png) 轨迹筛选数目影响:选的越多选到模型输出的低置信度轨迹的概率越大,反倒不好。 ![\[图片\]](https://i-blog.csdnimg.cn/direct/a4fe702465f745139456e763fc9fb12d.png) 后处理中模型置信度权重:不能完全信模型,因为模型输出的轨迹有可能不能保证安全,权重0.3最好。 ![\[图片\]](https://i-blog.csdnimg.cn/direct/d104dda00eff49c3af01c2e8cb5f909a.png) agent轨迹预测方法:有助于agent embeding特征提取器区分不同agent的行为 ![\[图片\]](https://i-blog.csdnimg.cn/direct/7dc1b9aed58f4ecaa6ba96b397d78bda.png) ## 结论 PLUTO从模型框架、数据增强、学习框架层面提出一些策略改进模仿学习的问题,效果不错。

相关推荐
1379号监听员_2 小时前
PID学习笔记
笔记·学习
洁宝趴趴2 小时前
阅读笔记How to Set the Batch Size for Large-ScalePre-training?
人工智能·笔记·深度学习
claider3 小时前
Vim User Manual 阅读笔记 usr_20.txt Typing command-line commands quickly 快速键入命令行命令
笔记·编辑器·vim
叫码农就行3 小时前
spring cloud 笔记
java·笔记·spring cloud
Tina Tang3 小时前
Agentic AI学习笔记(2)
笔记·学习
zhangrelay3 小时前
ROS Noetic 与 Ubuntu 24.04
笔记·学习
后来后来啊3 小时前
2026.1.21学习笔记
笔记·学习·leetcode·#算法·#cpp
ajole3 小时前
C++学习笔记——stack和queue
开发语言·数据结构·c++·笔记·学习·stl·学习方法
峰顶听歌的鲸鱼12 小时前
Kubernetes介绍和部署
运维·笔记·云原生·容器·kubernetes·学习方法