Planning-oriented Autonomous Driving 解析

news/2024/11/29 4:04:30/

abstract

现代自动驾驶系统通常是模块化的序列任务,这种方式很容易造成累积误差和任务协调不足,因此设计一个端到端架构,从全局的视角出发为agent的交互提供互补的特征提取。

introduction

compare
(a) Most industrial solutions deploy separate models for different tasks. 虽然简化了团队难度,但是可能会有跨模块信息丢失、错误积累和特征错位的问题。
(b) The multi-task learning scheme shares a backbone with divided task heads. 将多个任务整合到多任务学习中。这种可以利用feature abstraction协同训练,可以扩展任务,节约计算。 同时也可能会导致‘negative transfer’。
端到端自动驾驶的出现将感知perception、预测prediction和规划planning的所有节点统一为一个整体。这样的系统,前期任务的选择和优先级应有利于规划。系统应以规划为导向,设计精巧,涉及到一定的组成部分,使得独立选项的累积误差或MTL方案的negative transfer都很少。
© The end-to-end paradigm unites modules in perception and prediction.
以前的尝试要么在 (c.1) 中采用直接优化规划,即直接预测计划轨迹,而不对感知和预测进行任何明确监督, 但在安全保障和可解释性方面存在不足,特别是对于高度动态的城市场景。
要么在 (c.2) 中设计具有部分组件的系统, 一种直观的解决方案是感知周围的物体、预测未来的行为并明确计划安全操作, 这个就取决于这个中间的细节考虑。
为了实现可靠且面向规划的自动驾驶系统,如何设计有利于规划的管道?哪些前置任务是必需的?
(c.3) : A desirable system should be planning-oriented as well as properly organize preceding tasks to facilitate planning.(理想的系统应该以规划为导向,并适当组织前期任务以促进规划。)UniAD,一个统一的自动驾驶算法框架,可以利用五个基本任务来实现如图所示的safe and robust的系统。UniAD 本着 planning-oriented 精神设计,不仅仅是简单的工程任务堆栈。

Contributions

UniAD拥抱了一种面向planning哲学的自动驾驶新框架,完成感知、预测和规划等多种任务的联合协作
一个关键组件是连接所有nodes的基于query的设计;与经典的边界框表示相比,query受益于更大的感受野,可以减轻上游预测的compounding error;此外,query可以灵活地对各种交互进行建模和编码,例如多个agents之间的关系。

method

method

UniAD 包括四个基于 Transformer 解码器的感知Perception和预测Prediction模块,最后还有一个规划器Planer。Queries Q 扮演连接pipeline的角色,以模拟驾驶场景中实体的不同交互。
In backbone : 将一系列多相机图像输入特征提取器,并将生成的perspective-view特征通过 BEVFormer 中的现成 BEV 编码器转换为统一鸟瞰图 (BEV) 特征 B。 请注意,UniAD 并不局限于特定的 BEV 编码器,并且可以利用其他替代方案通过长期时间融合 或多模态融合 来提取更丰富的 BEV 表示。
In perception: 在 TrackFormer 中,我们称为track queries的可学习嵌入, 用来查询(inquire)来自 B 的agents信息以检测和跟踪agents。MapFormer 将map queries作为道路元素(例如,车道和分隔线)的语义抽象(semantic abstractions),并对地图进行全景分割。
In prediction: 通过上述代表agents和map的queries,MotionFormer 捕获agents和map之间的交互并预测每个agent的未来轨迹。 由于每个agent的动作都会显著影响场景中的其他agents,因此该模块对所有考虑的agents进行联合预测。 同时,设计了一个ego-vehicle query来明确地对ego-vehicle进行建模,并使其能够在这种以场景为中心(scene-centric)的范式中与其他agents进行交互。OccFormer 使用 BEV 特征 B 作为queries,配备agent-wise knowledge知识作为keys和values,并在保留agent identity的情况下预测多步未来占用(multi-step future occupancy)。
in planning: Planner 利用来自 MotionFormer 的expressive ego-vehicle query来预测规划结果,并使自己远离 OccFormer 预测的占用区域(occupied regions)以避免碰撞。

perception: trackformer

它联合执行检测和多目标跟踪 (MOT),而无需进行不可微分的后处理。 受 [MOTR, MUTR3D] 的启发,文章采用了类似的query设计。 除了对象检测中使用的常规detection queries 之外,还引入了额外的track queries来跨帧跟踪agent。 具体来说,在每个时间步,初始化的detection queries负责检测第一次被感知的newborn agents,而track queries则对在先前帧中检测到的agents保持建模。 Detection queries和track queries都通过关注(attending) BEV 特征 B 来捕获agent abstractions。 随着场景的不断演化,当前帧的track queries与先前记录的track queries在自注意力模块中交互, 以聚合temporal信息,直到相应的agents完全消失(在特定时间段内未被跟踪)。 与 [DETR] 类似,TrackFormer 包含 N 层,最终输出状态 Q A Q_A QA 为下游预测任务提供 N a N_a Na 个有效agents的知识(knowledge)。 除了编码ego-vehicle周围其他agents的query外,我们在query set中引入了一个特定的ego-vehicle query,以明确地对自动驾驶车辆本身进行建模,并将其进一步用于规划。
figext1

perception: mapformer

我们基于 2D 全景分割方法 Panoptic SegFormer 设计它。 我们将道路元素稀疏地表示为map queries,以帮助下游运动预测,并对位置和结构知识进行编码。 对于驾驶场景,我们将车道、分隔线和十字路口设置为things,将可行驶区域设置为stuff 。 Map Former 也有 N 个堆叠层,每层的输出结果都是有监督的,而只有最后一层更新的queries Q M Q_M QM 被转发给 MotionFormer 进行agent-map交互。

Prediction: Motion Forecasting

通过分别从 TrackFormer 和 MapFormer 对dynamic agents Q A Q_A QA 和static map Q M Q_M QM 进行高度abstract queries,MotionFormer 以场景为中心的方式预测所有agents的多模态未来运动,即前 k 个可能轨迹。 这种范式通过一次前向传播在帧中产生multi-agent轨迹,这大大节省了将整个场景与每个agent的坐标对齐的计算成本。 同时,考虑到未来动态,来自 TrackFormer 的ego-vehicle query经过 MotionFormer 传递,让ego-vehicle与其他agents进行交互。 形式上,输出运动被表述为 X ^ i , k ∈ R T × 2 ∣ i = 1.... , N a ; k = 1 , . . . . , K {\hat{X}_{i,k}∈R^{T \times 2} | i=1....,N_a; k=1,....,K} X^i,kRT×2i=1....,Na;k=1,....,K,其中 i 索引agent,k 索引轨迹的模态,T 是预测范围的长度。

MotionFormer它由 N 层组成,每层捕获三种类型的交互:agent-agent、agent-map 和 agent-goal point。 对于每个motion query Q_{ik},其与其他agents Q A Q_A QA 或地图元素 Q M Q_M QM 之间的交互可以表示为:
1
MHCA, MHSA denote multi-head cross-attention and multi-head self-attention.
由于关注intended posiiton(即目标点)以细化预测轨迹也很重要,因此我们通过deformable attention设计了agent-goal point注意力,如下所示:
2
x ^ T l − 1 \hat{x}_T^{l−1} x^Tl1是上一层预测轨迹的终点。
DeformAttn(q,r,x), 一个稀疏attention模块, 输入query q, reference point r 以及 spatial feature x. DeformAttn对参考点周围的空间特征进行稀疏attention。通过这个,预测的轨迹因为对端点周围环境的了解被进一步refine 。
所有三种交互都是并行建模的,其中生成的 Q a Q_a Qa Q m Q_m Qm Q g Q_g Qg 被连接起来并传递给多层感知器 (MLP),生成query context Q c t x Q_{ctx} Qctx。 然后, Q c t x Q_{ctx} Qctx被发送到后续层进行refine或解码作为最后一层的预测结果。
4
agent-agent、agent-map交互module都是构建在标准transformer decoder之上,而agent-goal构建在deformable cross-attention module之上,前面预测的轨迹的goal point作为参考点,每个参考点周围4个采样点,每个agent 6个轨迹(模态)。
5
用高斯混合模型构建每个agent的轨迹,即 x ^ l ∈ R 6 × T × 5 \hat{x}_l \in R^{6 \times T \times 5} x^lR6×T×5. 最后一个维度的前两维为最终输出轨迹点;每个轨迹预测一个分数。

Motion queries:motionformer每一层的input queries就是motion queries,由上一层的query context Q c t x Q_{ctx} Qctx,以及query position Q p o s Q_{pos} Qpos组成。 Q p o s Q_{pos} Qpos集成了四重位置知识,包括:
1.scene-level anchors I s I^s Is(prior movement statistics in a global view) ,
2.agent-level anchors I a I^a Ia(captures the possible intention in the local coordinate),
3.current location of agent i (provides customized positional embedding for each agent),
4.predict goal point(serves as a dynamic anchor optimized layer-by-layer in a coarse-to-fine fashion)

3
紧接着MLP的正弦位置编码PE(.)是用来编码位置点的, x ^ T 0 \hat{x}_{T}^0 x^T0设为第一层的 I s I^s Is(ik忽略). scene-level anchor表示全局视角下的先验移动统计,agent-level anchor捕捉局部坐标下的潜在意图。他们都在ground-truth轨迹端点上通过k-means聚类来缩小预测的不确定度。和先验知识相反,起始点为每一个agent提供了自定义的位置嵌入,预测的终点充当由粗到精逐层优化的动态anchor。

Non-linear Optimization: 和经典的motion forecast方法直接访问真值感知结果(即agents的位置与对应的track)不同,我们考虑在我们的端到端范式下上一个模块的预测不确定度。从一个不准确的检测位置或航向角暴力回归真值路径点会导致大曲率大加速度的不真实轨迹预测。为了克服这个问题,我们采用一个non-linear smoother调整目标轨迹,使得他们在给定上游模块预测的不精确起点时物理可行。过程是:
4
where x ^ \hat{x} x^ and x ^ ∗ \hat{x}^∗ x^ denote the ground-truth and smoothed trajectory, x x x is generated by multiple-shooting , 代价函数如下:
5
运动学函数集 Φ有五项,包括加加速度,曲率,曲率速率,加速度和横向加速度。代价函数正则化目标轨迹以服从运动学 约束。此目标轨迹优化仅在训练中 进行,不影响推理。

Prediction: Occupancy Prediction

Occupancy grid map是离散化的bev表示,每个cell表示是否被占据的belif, occupancy prediction任务预测occupancy未来变化。
以前的方法为从观察到的BEV特征时间扩展未来预测利用RNN结构,然而,它们依赖于高度手工制作的聚类后处理 来生成每个代理的占用图,因为它们 主要是通过将BEV特征作为 整体压缩到RNN隐藏状态而与代理无关。由于智能体知识的使用不足 ,对他们来说, 预测全局所有智能体的行为是一项挑战,这对于理解场景如何演变至关重要 。为了解决这个问题,我们提出OccFormer在两个方面结合场景级和代理级语义:(1)密集场景特征通过精心设计的 注意力模块在展开到未来视野时获得代理级特征; (2)我们通过代理级特征和密集场景特征之间的矩阵乘法轻松地产生实例占用,而无需进行繁重的后处理。

occformer由 T o T_o To个序列块组成, T o T_o To表示预测视野, 由于密集表示的occupancy计算代价很高: T o ( 5 ) < T ( 12 ) T_o(5) < T(12) To(5)<T(12)。每个序列块输入丰富的agent特征 G t G^t Gt和来自早先层状态(密集特征) F t − 1 F_{t-1} Ft1,考虑instance- 和scene-level信息生成 F t F_{t} Ft。为了获得带有动态和空间先验的agent特征 G t G_t Gt,在模态维度max-pool motion queries Q X ∈ R N a × D Q_X \in R^{N_a \times D} QXRNa×D. 然后通过一个时间特定MLP融合上游track query Q A Q_A QA和当前位置嵌入 P A P_A PA:
6

其中[.]表示concatenation。对于场景级特征,为了训练效率。BEV特征B下采样1/4 作为第一个block输入 F 0 F^0 F0。为了进一步节省内存,每个block follow一个下采样-上采样方式在1/8下采样特征上构建pixel-agent交互 F d s t F^t_{ds} Fdst
fig6
Pixel-agent interaction的设计目的是在预测未来占用时统一场景和代理级理解。密集特征 F d s t F^t_{ds} Fdst作为查询,实例级特征作为key、value在时间上更新dense feature。为了对齐pixel-agent一致性,通过一个attention mask限制cross-attention,每个像素只看时刻 t t t占用的agent,dense特征更新过程如下:
7
attention mask Q m t Q^t_m Qmt 语义类似于occupancy,由mask feature M t ( M t = M L P ( G t ) ) M^t (M^t = MLP(G^t)) Mt(Mt=MLP(Gt))和dense feature F d s t F^t_{ds} Fdst乘出来得到。
scene-level features F t F^t Ft通过卷积解码上采样到原bev特征大小得 F d e c t F^t_{dec} Fdect。对于agent-level 特征,进一步通过一个MLP更新粗糙的mask feature M t M^t Mt到occupancy feature U t U^t Ut。最终t时刻的instance-level occupancy为:
8

planning

没有HD map和 redefined routes的planning需要指示方向的高级命令,将原始导航信号(左转、右转、执行)转成可学习command embeddings。motionformer出来的自车query已经表达了多模态意图,我们再配上command embeddings来形成plan query。将plan query attend to bev features B使得其意识到周围环境,再将其解码为未来的路径点 τ ^ \hat{τ} τ^.
fig7
where τ ^ ∈ R T p × 2 , ( T p = 6 , 3 s ) \hat{τ} \in R^{T_p \times 2}, (T_p=6, 3s) τ^RTp×2,(Tp=6,3s).
为了进一步避免碰撞,我们在推理阶段基于牛顿法优化 τ ^ \hat{τ} τ^
9
τ ∗ τ^* τ是最优planning,是从multiple-shooting轨迹τ中最小化代价函数 f ( . ) f(.) f(.)选出来的。 O ^ \hat{O} O^是一个从occformer获得的实例occupancy预测合并来的经典二值occupancy map, f f f的计算如下:
10-11
其中 S = ( x , y ) ∣ ∥ ( x , y ) − τ t ∥ 2 < d , O ^ x , y t = 1 S = {(x, y)| \ ∥(x, y)−τ_t∥_2 <d, \hat{O}^t_{x,y} = 1} S=(x,y) (x,y)τt2<d,O^x,yt=1. D将预测轨迹拉远occupied grids,L2将轨迹拉向原始预测的轨迹。

learning

训练分两个阶段:
1.联合训练感知部分,即tracking和mapping模块, 6epoch
2.端到端 train 20 epoch
Detection&tracking loss:focal loss+L1
Online mapping loss:focal loss+L1+Dice loss +GIoU loss
Motion forecasting loss:multi-path loss(classification score loss L_cls + a negative log-likelihood loss)
Occupancy prediction loss: binary cross-entropy and Dice loss
Planning loss: naive imitation l2 loss + collision loss
12
b o x ( . ) box(.) box(.)是加了扰动的自车bounding box。
shared matching:tracking和mapping模块采用bipartite matching算法;track中,检测新诞生查询候选和真值配对,track queries的预测继承上一帧的分配。match结果复用到motion和occupancy结点以从历史tracks到未来motions一致性建模agents。

Experiments

实验主要在三方面:揭示任务协调优势及其对规划影响的联合结果, 各任务的模块化结果与以往方法的比较, 对特定模块设计空间的消融实验。

Joint Results

tab2

Modular Results

感知结果:track比Immortal Tracker差点,map特定类差点
tab3-4
预测结果:显著提高
tab5-6
规划结果:超过lidar-based方法
tab7

Ablation Study

MotionFormer设计的影响:
tab8
OccFormer设计影响:
tab9
planner设计影响:

tab10

Qualitative Results

市区巡航场景:
fig9

临界情况:
fig10

避障场景:
fig11

展示plan-oriented潜力:
fig12

Badcase:
fig13-14

Conclusion

planning-oriented pipeline设计;详细的子模块必要性分析;query-based设计连接各节点并促进环境中agent交互。
缺陷
1.太耗计算资源和显存
2.如何轻量化开发有待研究
3.如何嵌入更多任务,例如depth估计、行为预测等。
4.需要实时加入导航信息
5.没有考虑红绿灯信息、交通标志、地面标识等

future展望
figext3
figext4

附录

tab11


http://www.ppmy.cn/news/454997.html

相关文章

python 爬取王者壁纸

爬取思路 主要用requests请求&#xff0c;urllib保存 请求得到数据&#xff0c;str.find()方法和切片方法初步处理数据&#xff0c;再把处理好的数据转换成json数据&#xff0c;再字典取值的方式得到全部的url&#xff0c;最后请求url保存图片 代码实现 import requests fro…

VLAN基础知识2_VLAN二层通信原理

目录 1.VLAN二层通信简介 2.同一交换机VLAN二层通信 3.跨交换机VLAN二层通信 4.VLAN二层通信实验 4.1 VLAN基本配置命令 4.2 VLAN配置步骤 4.3 VLAN二层通信实验效果 1.VLAN二层通信简介 VLAN是一个逻辑上的分组&#xff0c;可以将一个物理网络端口分割成多个虚拟网络&…

python爬取王者_爬虫 抓取王者荣耀所有英雄皮肤高清壁纸+超强注释

[python]代码库import urllib.request import re # 获取主页源码 url https://pvp.qq.com/web201605/herolist.shtml a urllib.request.urlopen(url) # 访问网页 a a.read() # 读取源码 a a.decode(gbk) # 转码为gbk # 获取英雄名称和ID a (re.compile(输入英雄不…

WebView2 通过 PuppeteerSharp 实现爬取 王者 壁纸 (案例版)

王者壁纸自动化获取逻辑分析 其实它的逻辑很简单&#xff0c; 就是王者的官网&#xff0c;打开后&#xff0c;在右下角就看到了皮肤页面部分。 这个时候&#xff0c;点击更多&#xff0c;就会打开全部英雄详情的页面。 这个时候&#xff0c;单点任意一个英雄&#xff0c;就会…

python爬取王者_python 爬取王者荣耀高清壁纸

一、前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧&#xff0c;特别想把王者荣耀的英雄的高清图片当成电脑桌面 预览一下桌面吧: 是不是看着这样的桌面也很带感&#xff0c;_ (学会这个技术&#xff0c;你可以爬取其他网站的类似图片&#xff0c;哄妹子专用&#xff…

王者壁纸批量爬取

语言&#xff1a;python json格式网站&#xff1a; 爬取网址&#xff1a;王者荣耀壁纸下载-王者荣耀官方网站-腾讯游戏 思路分析&#xff1a; 分析下一页&#xff0c;发现下一页之后是在当前页面的局部重新加载 当然排除可以直接爬取目标url获取当前页面的信息以及后面的所…

【Android】-- 如何对APP版本控制/更新?

目录 一、 前提准备 1、获取服务器 2、使用工具操作云服务器 二、Json格式网页 三、创建file_paths.xml及修改AndroidManifest.xml 四、在java代码加入更新检测代码 效果如图&#xff1a; 可以强制更新和非强制更新&#xff0c;和浏览器下载安装包。 一、 前提准备 1、获取…

Gin教程--路由与控制器设计(三)

一、路由设计 1.1 介绍 1.1.1 什么是路由 路由就是URL到函数的映射&#xff0c;确定数据交换和页面展现的目标。 1.1.2 什么是路由组 就是相同路由前缀的路由集合&#xff0c;例如/admin下可以有用户、设置等等。 1.2 请求方式 请求方式介绍备注GetGet请求&#xff0c;一般…