SparseDrive 论文学习

论文链接:https://arxiv.org/pdf/2405.19620
代码链接:https://github.com/swc-17/SparseDrive

解决了什么问题?

传统模块化的自动驾驶系统可以被解耦为不同的独立模块,如感知、预测和规划,这种范式会面临信息丢失和模块之间错误累积的问题。然而,端到端范式将多个任务整合为一个完全可微的框架,以规划为导向来优化整个系统。尽管端到端范式具有极大的潜力,但是在性能和效率方面而言,目前的方案仍无法令人满意,尤其是在规划安全性方面。

传统的自动驾驶系统基本是模块化的序列。虽然这套范式可解释性强、易于调试错误,但是不可避免地会造成信息丢失和模块之间的错误累积,制约了方案的性能。

最近,端到端驾驶范式是一个极有潜力的研究方向。该范式将所有的任务都整合为一个模型,朝着规划这一终极目标做优化。但是,在表现和效率方面,现有的方案都不太令人满意。一方面,之前的方法都依赖于计算成本高昂的 BEV 特征,另一方面,直接预测和规划制约了模型的表现。作者在下图(a)中将之前的方法总结为 BEV-Centric 范式。

为了充分发掘端到端范式的潜能,作者回顾了现有方案的任务设计,并认为在处理运动预测和规划模块时,它们忽略了三个主要的相似点:

  • 高阶双向交互:为了预测其它交通参与者和自车的未来轨迹,运动预测和规划应考虑不同道路使用者之间高阶的、双向的关系,但是之前的方法都采用顺序设计来处理运动预测和规划,忽略了自车对周围参与者的影响。
  • 语义和几何信息:准确地预测未来轨迹需要场景理解的语义信息和几何信息,这些信息对运动预测和规划都适用。虽然在上游的感知任务,已经提取了其它交通参与者的信息,但是忽略了自车的信息。
  • 多模态问题和不确定性:运动预测和规划都是多模态问题,具有内在的不确定性,但是之前的方法只预测确定性的轨迹来做规划。

相关工作

多视图 3D 检测

多视图 3D 检测是自动驾驶系统安全性的前提。LSS 利用深度估计,将图像特征提升到 3D 空间,然后拍扁到 BEV 平面。后续,一些 3D 检测工作使用了 lift-splat 操作,极大提升了准确性和效率。另一些工作则预先定义一组 BEV queries,将它们映射到透视视图,再采样特征。另一条研究方向则排除了对 BEV 特征的依赖,PETR 系列引入了 3D 位置编码和全局注意力,隐式地学习视图的变换关系。Sparse4D 直接在 3D 空间设置 anchors,然后以迭代的方式,将 anchors 投影到图像视图,聚合局部特征再优化 anchors。

端到端跟踪

大多数多目标跟踪算法采用了“先检测再跟踪”的方式,需要一些后处理操作来跟踪目标,如数据关联。这样的方式无法充分利用神经网络的能力,因为数据关联通常是在检测之后进行的,而不是作为一个端到端的过程。一些工作引入了轨迹查询(track queries),以流的方式建模跟踪实例。MOTR 提出了轨迹感知的标签分配,迫使 track query 持续地检测相同的目标,但在检测和匹配之间存在冲突。Sparse4Dv3 表明在时域传递的实例已经具有了 ID 一致性,只用简单的 ID 分配过程即可取得了 SOTA 的跟踪表现。

在线建图

构建 HD 地图的成本很高,需要大量人工的付出,因此提出了一个替代方案:在线建图。HDMapNet 通过后处理,将 BEV 语义分割组合起来,得到矢量化的地图实例。VectorMapNet 利用了一个两阶段的自回归 transformer 来在线建图。MapTR 将地图元素建模为等价排列组合的点集合,避免了地图元素之间存在模糊的定义。BeMapNet 采用了分段的 Bezier 曲线来描述地图元素的细节。StreamMapNet 针对时域建模,提出了 BEV 融合和查询传递。

端到端的运动预测

提出端到端的运动预测是为了避免传统范式的错误累积。FaF 使用单个卷积网络来预测当前和未来的边框。IntentNet 进一步推理高层级的行为和长期轨迹。PnPNet 为了做运动预测,提出了一个在线跟踪模块,聚合轨迹层级的特征。ViP3D 利用 agent queries,进行跟踪和预测,输入是相机画面和高精地图。PIP 将人工标注的高精地图替换为局部的矢量地图。

端到端规划

上个世纪,人们就已经开始研究端到端的规划了。早期的工作忽略了中间任务,如感知和运动预测。由于缺乏可解释性,难以优化。一些工作直接从感知或预测结果构建代价图,以增强可解释性,但是需要人工规则来选取代价最低的最佳轨迹。UniAD 提出了一个统一的查询设计,将多项任务整合为一个目标导向的模型,在感知、预测和规划任务上都取得了优异的表现。VAD 使用矢量化的表示来学习场景和规划约束。GraphAD 利用图模型,对复杂的交通场景中的关系做建模。FusionAD 将端到端方案扩展到了多传感器输入。但是,之前的方法主要关注在场景学习,它们直接做预测和规划,没有充分地考虑这俩任务之间的相似性,极大制约了模型的性能。

提出了什么方法?

于是作者提出了稀疏表示,回顾了端到端自动驾驶的任务设计,并提出了一个新的范式 SparseDrive,如上图(b) 所示。SparseDrive 包括一个对称的稀疏感知模块和一个并行的运动规划器。对于一个实例(动态道路使用者或静态地图元素),作者用解耦的实例特征和几何 anchor 来完整地表示该实例。稀疏感知模块采用对称的模型架构,学习完全稀疏的场景表示,整合了检测、跟踪和在线建图任务。

在并行的运动规划器中,首先从自车实例初始化模块获得一个语义和几何感知的自车实例。有了自车实例和从稀疏感知获得的其它交通参与者的实例后,同时进行运动预测和规划,获得所有道路使用者的多模态轨迹。为了确保规划路径的合理性和安全性,使用一个分层的规划选择策略(融合了碰撞感知重打分模块),从多模态候选轨迹中选取最终的规划轨迹。

在全部的任务上,SparseDrive 都大幅度领先于当前的 SOTA 方法,并实现了更高的训练和推理效率。SparseDrive 显著地提升了端到端自动驾驶算法的性能,如上图c 所示。SparseDrive-B 降低了 19.4 % 19.4\% 19.4% 的平均 L2 误差和 71.4 % 71.4\% 71.4% 的碰撞率。与 UniAD 相比,小模型 SparseDrive-S 在所有的任务上都取得了优异的表现,训练速度提升了 7.2 × 7.2\times 7.2×,推理速度提升了 5.0 × 5.0\times 5.0×

概览

SparseDrive 的架构如上图所示,包括三个部分:图像编码器、对称的稀疏感知和并行的运动规划器。给定多视图图像,图像编码器包括主干网络和 neck,首先将图像编码为多视图、多尺度的特征图 I = { I s ∈ R N × C × H s × W s ∣ 1 ≤ s ≤ S } I=\{I_s\in\mathbb{R}^{N\times C\times H_s\times W_s}|1\leq s\leq S\} I={IsRN×C×Hs×Ws∣1sS} S S S 是尺度的个数, N N N 是相机视角的个数。在对称的稀疏感知模块,将特征图 I I I聚合为两组实例,学习驾驶场景的稀疏表示。这两组实例分别表示其它交通参与者和地图元素,输入进并行的运动规划器,和初始化的自车实例做交流。运动规划器同时预测其它交通参与者和自车的多模态轨迹,通过分层规划选取策略,选择一条最安全的轨迹作为最终规划的结果。

对称的稀疏感知

如下图,稀疏感知模块的模型架构具有结构对称性,统一了检测、跟踪和在线建图模块。

稀疏检测

用一组实例特征 F d ∈ R N d × C F_d \in \mathbb{R}^{N_d\times C} FdRNd×C 和 anchor boxes B d ∈ R N d × 11 B_d\in\mathbb{R}^{N_d\times 11} BdRNd×11 来表示其它交通参与者,其中 N d N_d Nd 是 anchors 的个数, C C C 是特征的通道维度。每个 anchor box 都用坐标、维度、偏航角和速度表示:

{ x , y , z , ln ⁡ w , ln ⁡ h , ln ⁡ l , sin ⁡ y a w , cos ⁡ y a w , v x , v y , v z } \{x,y,z,\ln{w}, \ln{h}, \ln{l}, \sin{yaw}, \cos{yaw}, vx, vy, vz\} {x,y,z,lnw,lnh,lnl,sinyaw,cosyaw,vx,vy,vz}

稀疏检测分支包括 N d e c N_{dec} Ndec 个解码器,有 1 1 1 个非时域解码器和 N d e c − 1 N_{dec}-1 Ndec1 个时域解码器。每个解码器的输入是特征图 I I I、实例特征 F d F_d Fd 和 anchor boxes B d B_d Bd,输出更新后的实例特征和 anchor boxes。非时域解码器的初始输入是随机初始化的实例,时域解码器的输入则来自于当前帧和历史帧。非时域解码器包括三个子模块:可变形聚合模块、前馈神经网络、做优化和分类的输出层。可变形聚合模块输出 anchor boxes B d B_d Bd 附近的固定或可学习的关键点,将它们映射到特征图 I I I 上做特征采样。将实例特征 F d F_d Fd 与采样特征求和,更新 F d F_d Fd。在输出层, F d F_d Fd 负责预测分类得分和 anchor boxes 的偏移量。时域解码器有两个额外的 multi-head 注意力层:计算最后一帧的时域实例和当前实例之间的时域 cross attention,计算当前帧的时域实例之间的 self-attention。在 multi-head 注意力层中,将 anchor boxes 变换为高维度的 anchor embedding E d ∈ R N d × C E_d\in\mathbb{R}^{N_d\times C} EdRNd×C,作为位置编码使用。

稀疏在线建图

在线建图分支与检测分支共享模型结构,除了实例定义不同。对于静态地图元素,anchor 表示为一个由 N p N_p Np个点组成的多段线:

{ x 0 , y 0 , x 1 , y 1 , . . . , x N p − 1 , y N p − 1 } \{x_0, y_0,x_1,y_1,...,x_{N_p-1}, y_{N_p-1}\} {x0,y0,x1,y1,...,xNp1,yNp1}

然后,所有的地图元素都可以表示为地图实例特征 F m ∈ R N m × C F_m\in\mathbb{R}^{N_m\times C} FmRNm×C和 anchor 多段线 L m ∈ R N m × N p × 2 L_m\in\mathbb{R}^{N_m\times N_p\times 2} LmRNm×Np×2

稀疏跟踪

对于跟踪,作者遵循了 Sparse4Dv3 的 ID 匹配过程:当一个实例的检测置信度高于阈值 T t h r e s h T_{thresh} Tthresh,它就被锁定为一个目标,并被分配一个 ID,在时域传播时该 ID 保持不变。这个跟踪策略无需任何的跟踪约束条件。该对称的设计对于稀疏感知模块而言,非常优雅、简洁。

并行的运动规划器

如下图所示,并行的运动规划器包括三个部分:自车实例初始化、时空交流、分层规划选择。

自车实例初始化

与其它交通参与者相似,用自车实例特征 F e ∈ R 1 × C F_e\in\mathbb{R}^{1\times C} FeR1×C 和自车 ego box B e ∈ R 1 × 11 B_e\in\mathbb{R}^{1\times 11} BeR1×11 表示自车。虽然在以前的方法中,自车的特征通常是随机初始化的,但本文作者认为为了做规划,自车特征应该需要丰富的语义和几何信息。但是,其它交通参与者的实例特征是从图像特征图 I I I 聚合得到,这对自车来说就不可行了,因为自车位于画面的盲区里面。因此,我们使用前视相机的最小特征图来初始化自车实例特征:

F e = AveragePool ( I f r o n t , S ) F_e = \text{AveragePool}(I_{front,S}) Fe=AveragePool(Ifront,S)

这么做有两个好处:

  • 最小的特征图已经编码了驾驶场景的上下文信息,
  • 密集特征图可作为稀疏场景表示的补充使用,以防出现一些稀疏感知检测不到的障碍物。

对于自车 anchor B e B_e Be,我们知道自车的位置、维度和偏航角。对于速度,直接用 ground-truth 速度初始化会造成自车状态的泄露。因此,作者增加了一个辅助任务来解码当前自车的状态 E S T ES_T EST,包括速度、加速度、角速度和转向角。在每一帧,我们使用上一帧的预测速度来初始化当前自车的 anchor 速度。

时空交流

为了考虑交通参与者之间的高层级交流,作者将自车实例和其它参与者实例 concat 起来,得到 agent-level 的实例:

F a = Concat ( F d , F e ) , B a = Concat ( B d , B e ) F_a = \text{Concat}(F_d, F_e), \ B_a = \text{Concat}(B_d, B_e) Fa=Concat(Fd,Fe), Ba=Concat(Bd,Be)

因为自车实例初始化时没有用到时域信息,作者设计了一个实例记忆队列(大小是 ( N d + 1 ) × H (N_d+1)\times H (Nd+1)×H)来做时域建模, H H H 是存储帧的个数。然后进行三种交流,聚合时空上下文信息:agent-temporal cross-attention, agent-agent self-attention 和 agent-map cross-attention。注意,在稀疏感知模块的时域交叉注意力中,当前帧的实例会与所有的时域实例做交流,作者称之为场景级交流。对于这里的 agent-temporal cross-attention,作者采用了实例级的交流,每个实例只关注自己的历史信息。

然后,预测其他交通参与者和自车的多模态轨迹 τ m ∈ R N d × K m × T m × 2 , τ p ∈ R N c × K p × T p × 2 \tau_m \in \mathbb{R}^{N_d\times \mathcal{K}_m \times T_m \times 2}, \tau_p \in\mathbb{R}^{N_c\times \mathcal{K}_p\times T_p\times 2} τmRNd×Km×Tm×2,τpRNc×Kp×Tp×2,以及得分 s m ∈ R N d × K m , s p ∈ R N c m d × K p s_m \in\mathbb{R}^{N_d\times \mathcal{K}_m}, s_p \in \mathbb{R}^{N_{cmd}\times \mathcal{K}_p} smRNd×Km,spRNcmd×Kp K m \mathcal{K}_m Km K p \mathcal{K}_p Kp 是运动预测和规划的轨迹个数, T m T_m Tm T p T_p Tp 是未来时间戳的个数, N c m d N_{cmd} Ncmd 是规划用的驾驶指令个数。作者使用了三种驾驶指令:左转、右转、直行。对于规划任务,从自车实例特征,本文方法额外预测了当前自车的状态。

分层规划选择

现在我们有了多模态的候选轨迹,为了选择一条安全的轨迹 τ p ∗ \tau_p^\ast τp,作者设计了一个分层的规划选择策略。首先,选择候选轨迹的一个子集 τ p , c m d ∈ K p × T p × 2 \tau_{p, cmd}\in \mathcal{K}_p\times T_p \times 2 τp,cmdKp×Tp×2,对应高层级指令 c m d cmd cmd。然后,采用一个碰撞感知重打分模块来确保安全性。有了运动预测的结果后,我们可以评估每条规划轨迹的碰撞风险,对于高碰撞风险的轨迹,我们降低这条轨迹的得分。在实际操作时,将碰撞轨迹的分数设为 0 0 0。最后,选择得分最高的那条轨迹作为规划输出。

端到端学习

多阶段训练

SparseDrive 分为两个阶段。在第一阶段,从头训练对称的稀疏感知模块,学习稀疏的场景表示。在第二阶段,联合训练稀疏感知模块和并行的运动规划器,不冻结参数,完全以端到端的方式做优化。

损失函数

损失函数包括四个任务,每个任务的损失可以进一步分为分类和回归损失。对于多模态运动预测和规划任务,作者采用了 winner-takes-all 策略。对于规划任务,有一个额外的回归损失来监督自车状态。作者也加入了深度估计作为辅助的任务,增强感知模块训练的稳定性。整体损失如下:

L = L d e t + L m a p + L m o t i o n + L p l a n + L d e p t h \mathcal{L}=\mathcal{L}_{det} + \mathcal{L}_{map} + \mathcal{L}_{motion} + \mathcal{L}_{plan}+ \mathcal{L}_{depth} L=Ldet+Lmap+Lmotion+Lplan+Ldepth

实验

感知

对于稀疏感知模块,解码层的个数 N d e c N_{dec} Ndec 设为 6 6 6 1 1 1 个非时域解码层、 5 5 5 个时域解码层。通过对训练数据集做 K-means 聚类获得 Anchor boxes B d B_d Bd 的位置,以及 anchor 多段线 L m L_m Lm,anchor boxes 的其它参数都被初始化为 { 1 , 1 , 1 , 0 , 1 , 0 , 0 , 0 } \{1,1,1,0,1,0,0,0\} {1,1,1,0,1,0,0,0}。每个地图元素都用 20 20 20 个点来表示。Anchor boxes 的个数 N d N_d Nd 和多段线的个数 N m N_m Nm 设为 900 和 100。检测和在线建图的时域实例的个数分别设为 600 和 33 个。跟踪阈值 T t h r e s h = 0.2 T_{thresh}=0.2 Tthresh=0.2。对于检测任务,感知范围的半径为 55米。对于在线建图,感知范围是 60 m × 30 m 60m\times 30m 60m×30m(纵向和横向)。对于 multi-head 注意力,作者采用了 Flash Attention 来降低 GPU 内存。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/12220.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何提高自动驾驶中惯性和卫星组合导航pbox的精度?

Mems纯惯导里程推算精度做到千分之一,两分钟航向精度保持0.001弧度,是如何做到的? 简单的来说,导航系统的误差来源于这三方面:1.传感器误差 2.时间和迭代频率 3.算法精度。 接下来逐一分析。 1.传感器误差,传感器误差…

机器学习——贝叶斯

🌺历史文章列表🌺 机器学习——损失函数、代价函数、KL散度机器学习——特征工程、正则化、强化学习机器学习——常见算法汇总机器学习——感知机、MLP、SVM机器学习——KNN机器学习——贝叶斯机器学习——决策树机器学习——随机森林、Bagging、Boostin…

20241111,LeetCode 每日一题,用 Go 实现旋转链表

题目 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 解题思路 计算链表长度:遍历链表来获取链表的长度 n,因为链表的旋转其实是循环移动,所以将 k 对 n 取模 k k % n,这样可以…

Linux驱动开发(4):Linux的设备模型

在前面写的驱动中,我们发现编写驱动有个固定的模式只有往里面套代码就可以了,它们之间的大致流程可以总结如下: 实现入口函数xxx_init()和卸载函数xxx_exit() 申请设备号 register_chrdev_region() 初始化字符设备,cdev_init函数…

在线项目管理系统有哪些选择?2024年9款推荐

本文提及的2024值得关注的9款在线项目管理系统有: 1.PingCode; 2.Worktile; 3.华炎魔方; 4.企业微信; 5.Tapd; 6.青云客; 7.ClickUp; 8.Wrike; 9.Smartsheet。 许多企业在选择在线项…

pytorch量化训练

训练时量化(Quantization-aware Training, QAT)是一种在模型训练过程中,通过模拟低精度量化效应来增强模型对量化操作的鲁棒性的技术。与后训练量化不同,QAT 允许模型在训练过程中考虑到量化引入的误差,从而在实际部署…

datastage在升级版本到11.7之后,部分在11.3上正常执行的SP报错SQLSTATE = 22007: 本机错误代码 = -180

在升级版本到11.7之后,部分在11.3上正常执行的SP开始报错,报的SQL错误是时间参数问题,但是一样的SP可以直接call sp执行,也可以手动调用作业执行,只有设置定时调度时作业会报错, CALLXXX.XXX(1,CURRENT TIM…

Windows VSCode .NET CORE WebAPI Debug配置

1.安装C#插件 全名C# for Visual Studio Code,选择微软的 2. 安装C# Dev Kit插件 全名C# Dev Kit for Visual Studio Code,同样是选择微软的 3.安装Debugger for Unity 4.配置launch.json 文件 {"version": "0.2.0","config…

Docker使用docker-compose一键部署nacos、Mysql、redis

下面是一个简单的例子,展示如何通过Docker Compose文件部署Nacos、MySQL和Redis。请确保您的机器上已经安装了Docker和Docker Compose。 1,准备好mysql、redis、nacos镜像 sudo docker pull mysql:8 && sudo docker pull redis:7.2 &&…

【模块一】kubernetes容器编排进阶实战之k8s基础概念

kubernetes 基本介绍 kubernetes 组件简介 - master: 主人,并不部署服务,而是管理salve节点。 后期更名为: controll plane,控制面板。 etcd: 2379(客户端通信)、2…

【MPC-Simulink】EX04 信号归一化简化权重调节过程与提高数值计算质量

【MPC-Simulink】EX04 信号归一化简化权重调节过程与提高数值计算质量 参考 Matlab 官网提供的 Model Predictive Control Toolbox - Getting Started Guide,在 MPC 控制器中指定缩放因子,可以简化权重调节过程,提高数值计算质量。 当被控对…

Dubbo分布式日志跟踪实现

前言 随着越来越多的应用逐渐微服务化后,分布式服务之间的RPC调用使得异常排查的难度骤增,最明显的一个问题,就是整个调用链路的日志不在一台机器上,往往定位问题就要花费大量时间。如何在一个分布式网络中把单次请求的整个调用日…

企业网络转型:优势与挑战

◎ 网络研究观 事实上,现代企业网络是一个由相互连接的数据、应用程序和基础设施组成的复杂网络。然而,企业不应让这种复杂性成为服务不可靠、安全漏洞或网络停机的借口。 由于组织和公司面临着从并购到云扩展的诸多挑战,以及网络技术日益复…

【算法一周目】双指针(1)

目录 1.双指针介绍 2.移动零 解题思路 C代码实现 3.复写零 解题思路 C代码实现 4.快乐数 解题思路 C代码实现 5.盛水最多的容器 解题思路 C代码实现 1.双指针介绍 常见的双指针有两种形式,一种是对撞指针,一种是快慢指针。 对撞指针&#x…

6547网:青少年软件编程Python等级考试(六级)真题试卷

2024年9月青少年软件编程Python等级考试(六级)真题试卷 题目总数:38 总分数:100 选择题 第 1 题 单选题 下面Python代码运行后出现的图像是?( ) import matplotlib.pyplot as plt im…

【5种灵活有效方式】如何从死机手机中恢复内部数据?

本文介绍了5种方法来从死机的Android设备中恢复数据,包括使用U1tData安卓数据恢复软件、SD卡、OTG、Google云端硬盘和SamsungCloud。这些方法覆盖了不同情况下的数据恢复需求。 摘要由CSDN通过智能技术生成 我的手机掉在地上,现在无法开机。我丢失了所…

【安全测试】sqlmap工具(sql注入)学习

前言:sqimap是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。它有一个强大的检测引擎,许多适合于终极渗透测试的小众特性和广泛的开关,从数据库指纹、从数据库获 取数据到访问底层文件系…

行业类别-智慧城市-子类别智能交通-细分类别自动驾驶技术-应用场景城市公共交通优化

1.大纲分析 针对题目“8.0 行业类别-智慧城市-子类别智能交通-细分类别自动驾驶技术-应用场景城市公共交通优化”的大纲分析,可以从以下几个方面进行展开: 一、引言 简述智慧城市的概念及其重要性。强调智能交通在智慧城市中的核心地位。引出自动驾驶…

24.11.11 JavaScript1

JavaScript(简称js)是⼀种描述语⾔,基于对象和事件驱动的脚本语⾔ JavaScript特点:脚本语⾔(⼀种轻量级的编程语⾔) ⼀种解释性语⾔(⽆需预编译) 被设计为向HTML⻚⾯添加交互⾏为 运⾏于客户端&…

PDF24:多功能 PDF 工具使用指南

PDF24:多功能 PDF 工具使用指南 在日常工作和学习中,PDF 是一种常见且重要的文档格式。无论是查看、编辑、合并,还是转换 PDF 文件,能够快速高效地处理 PDF 文档对于提高工作效率至关重要。PDF24 是一款免费、功能全面的 PDF 工具…