FusionAD:用于自动驾驶预测和规划任务的多模态融合

论文背景

自动驾驶(AD)任务通常分为感知、预测和规划。在传统范式中,AD中的每个学习模块分别使用自己的主干,独立地学习任务。
在这里插入图片描述
以前,基于端到端学习的方法通常基于透视视图相机和激光雷达信息直接输出控制命令或轨迹.

论文提出了基于BEV多模态的多任务端到端学习框架,专注于自动驾驶的预测和规划任务。
在这里插入图片描述

Bev 感知

基于相机的BEV方法将多视图相机图像特征转换到BEV空间中,从而实现端到端感知,而无需对重叠区域进行后处理。但是基于相机的感知方法距离感知精度不足,激光雷达可以提供准确的位置信息。将多模态特征转换到BEV空间中有助于融合这些特征。
BEV 融合将通过 LSS 方法获得的图像BEV特征与通过 Voxelnet 获得的 LiDAR BEV 特征连接起来,以获得融合的BEV特征,这提高了感知性能。SuperFusion 进一步提出了基于多模态地图感知的多阶段融合。

运动预测

继 VectorNet 之后,主流运动预测(或轨迹预测)方法通常利用 HD 地图和基于矢量的障碍表示来预测智能体的未来轨迹;在此基础上,LaneGCN 和 PAGA 通过细化的地图要素(如车道连接属性)增强轨迹地图匹配;此外,某些基于锚点的方法对地图附近的目标点进行采样,从而能够基于这些点进行轨迹预测。但是这些方法在很大程度上依赖于预先收集的高清地图,这使得它们不适合地图不可用的地区。矢量化预测方法往往缺乏高层语义信息,需要高清地图。
PnPNet 提出了一种新的跟踪模块,该模块从检测中在线生成对象轨迹,并利用轨迹级特征进行运动预测,但其整体框架基于CNN,运动预测模块相对简单,只有单模输出。由于 Transformer 被应用于检测和跟踪,VIP3D 成功地借鉴了以前的工作,并提出了第一个基于 transformer 的联合感知预测框架。Uniad 进一步整合了更多下游任务,提出了面向规划的端到端自动驾驶模型。在前人的基础上,对运动预测任务进行了更精细化的优化,引入了 refinement mechanism 和 mode-attention,使预测指标得到了很大的提高。

学习规划

模拟学习(IL)和强化学习(RL)已用于规划。IL和RL用于端到端方法(即,使用图像和/或激光雷达作为输入),或矢量化方法(即,使用矢量化感知结果作为输入)。
早期的端到端方法,如 ALVINN 和 PilotNet 通常直接输出控制命令或轨迹,而缺乏中间结果/任务。P3 ,MP3 ,UniAD 学习端到端可学习网络,该网络执行联合感知,预测和规划,这可以产生可解释的中间表示并提高最终规划性能。
尽管使用中间感知结果进行规划可以提高泛化性和透明度,但矢量化方法遭受后处理噪声和感知结果的变化。
这些方法要么只使用激光雷达输入,要么只使用相机输入,这限制了它们的性能。Transfuser 同时使用激光雷达和相机输入,但不在BEV空间中,而且仅执行少量AD学习任务作为辅助任务。

论文内容

首先,使用基于BEVFormer的图像编码器将相机图像映射到鸟瞰图(BEV)空间。然后将这些与BEV空间中的激光雷达特征相结合。在时间融合之后,融合后的BEV特征通过基于查询的方法用于检测、跟踪和映射任务。随后,tokens 被转发到运动和占用预测任务以及规划任务。

BEV编码器和感知

从 FusionFormer 获得灵感,论文提出了一个新的 3D 目标检测多模态时间融合框架的和一个基于Transformer的架构。为了提高效率,采用了类似于BEVFormer的复发性时间融合技术。与FusionFormer不同,论文使用BEV格式的特征作为LiDAR分支的输入,而不是体素特征。
在这里插入图片描述
多模态时间融合模块包括6个编码层。首先采用一组可学习的BEV查询器,分别使用点交叉注意和图像交叉注意来融合LiDAR特征和图像特征。然后,通过时间自我注意将所得特征与来自前一帧的历史BEV特征融合。查询在用作下一层的输入之前由前馈网络更新。在6层融合编码之后,生成最终的多模态时间融合BEV特征用于后续任务。

激光雷达
原始LiDAR点云数据首先被体素化,然后用于基于 SECOND 网络生成LiDAR BEV特征。
摄像机。多视点摄像机图像首先通过 backbone 网络进行处理以进行特征提取。然后,FPN 网络被用于生成多尺度图像特征。

交叉注意点
在点交叉注意过程中,每个BEV查询仅与其对应参考点周围的LiDAR BEV特征交互。这种互动是通过变形注意力来实现的: P C A ( Q p , B L i D A R ) = D e f A t t n ( Q p , P , B L i D A R ) (1) \tag1 PCA(Q_p,B_{LiDAR})=DefAttn(Q_p,P,B_{LiDAR}) PCA(Qp,BLiDAR)=DefAttn(Qp,P,BLiDAR)(1)其中 Q p Q_p Qp表示在点 p = ( x , y ) p=(x,y) p=(x,y)处的 BEV 查询,并且 B L i D A R B_{LiDAR} BLiDAR表示从 LiDAR 分支输出的BEV 特征。P 是 BEV 空间中的坐标 p = ( x , y ) p=(x,y) p=(x,y)到 LiDAR BEV空间上的投影。

图像交叉注意
为了实现图像交叉注意,遵循与 BEVFormer 类似的方法。每个 BEV 查询都使用与支柱表示类似的高度尺寸展开。固定数量的 N r e f N_{ref} Nref 3D参考点在每个柱中沿着其 Z 轴采样。图像交叉注意过程如下所示: I C A ( Q p , F ) = 1 V h i t ∑ i = 1 V h i t ∑ j = 1 N r e f D e f A t t n ( Q p , P ( p , i , j ) , F i ) (2) \tag2 ICA(Q_p, F) =\frac{1}{V_hit}\sum_{i=1}^{V_{hit}}\sum_{j=1}^{N_{ref}} DefAttn(Q_p, P(p, i, j), F_i) ICA(Qp,F)=Vhit1i=1Vhitj=1NrefDefAttn(Qp,P(p,i,j),Fi)(2)其中 V h i t V_{hit} Vhit 表示参考点可以投影到的相机视图的数量, i i i 是相机视图的索引, F i F_i Fi 表示第 i i i 个相机的图像特征,并且 P ( p , i , j ) P(p,i,j) P(p,i,j) 表示 BEV 查询 Q p Q_p Qp 的3D参考点 ( x , y , z i ) (x,y,z_i) (xyzi) 在第 i i i 个相机的图像坐标系上的投影。

时间自注意
仿照 BEVFormer 来实现时间自我注意。具体而言,基于车辆在帧之间的运动的历史帧BEV特征的时间对准。然后,利用时间自注意来融合历史帧BEV特征,如下所示: T S A ( Q p , ( Q , B t − 1 ′ ) ) = ∑ V ∈ { Q , B t − 1 ′ } D e f A t t n ( Q p , p , V ) (3) \tag 3 TSA(Q_p,(Q,B_{t-1}^{'}))=\sum_{V\in \{ Q,B_{t-1}^{'}\}}DefAttn(Q_p,p,V) TSA(Qp,(Q,Bt1))=V{Q,Bt1}DefAttn(Qp,p,V)(3)其中, B t − 1 ′ B_{t-1}^{'} Bt1表示时间对齐后时间戳 t − 1 t−1 t1 处的 BEV 特征。
对于感知中的检测、跟踪和地图制作任务,论文主要遵循了 UniAD 的设置。

预测

由于更丰富的 BEV 特征,预测模块接收到更稳定和精细的信息。基于这一点,为了进一步捕获多模态分布并提高预测准确性,引入了模态自我关注(modality self-attention)和精炼网络(refinement net)。

在这里插入图片描述上下文感知模态关注
在 UniAD 中,数据集级统计锚被用于辅助多模态轨迹学习,锚间自注意被应用于提高锚的质量。然而,由于这些锚不考虑历史状态和地图信息,它们对多模态学习的贡献是有限的。
因此,我们正在考虑稍后添加此操作。在运动查询检索所有场景上下文以捕获 agent-agent, agent-map, and agent-goal 点信息之后,然后引入模态自注意以使各种模式之间的相互可见性,从而获得更好的质量和多样性。 Q m o d e = M H S A ( Q u ) (4) \tag4 Q_{mode}=MHSA(Q_u) Qmode=MHSA(Qu)(4)其中MHSA表示多头自注意。 Q u Q_u Qu表示获得上下文信息的查询。

精细化网络
可变形注意力使用统计锚点作为参考轨迹与BEV特征进行交互。如前所述,这个参考轨迹增加了后续学习的难度,因为需要特定的场景信息。论文引入了一个精炼网络,利用由 Motionformer 生成的轨迹作为更准确的空间先验,查询场景背景,并预测地面真实轨迹与先验轨迹之间的偏移量。如下所示: Q R = D e f A t t n ( A n c h o r p , x ^ m , B ) (5) \tag 5 Q_R = DefAttn(Anchor_p,\hat x_m,B) QR=DefAttn(Anchorp,x^m,B)(5)其中 A n c h o r p Anchor_p Anchorp 表示空间先验。使用一个简单的 MLP 对 Motionformer 输出的轨迹进行编码,并在时间维上执行 maxpool 得到 A n c h o r p Anchor_p Anchorp x ^ m \hat x_m x^m 表示Motionformer输出轨迹的终点。

规划

在评估过程中,无法访问高清(HD)地图或预定义路线。因此论文依靠可学习的命令嵌入来表示导航信号(包括左转、右转和保持前进)来指引方向。为了获得周围的嵌入,输入的计划查询,其中包括自我查询和命令嵌入,到鸟瞰图(BEV)功能。
然后,将其与自我车辆的嵌入融合,该嵌入由MLP网络处理,以获得状态嵌入。然后将该状态嵌入解码到未来的路点中。

在这里插入图片描述
L t r a = λ c o l L c o l ( τ ^ , b ) + λ i m i L i m i ( τ ^ , τ ˜ ) (6) \tag 6\mathcal L_{tra} = \lambda_{col}\mathcal L_{col}(\hat \tau , b)+ \lambda_{imi}\mathcal L_{imi}(\hat \tau , \~\tau ) Ltra=λcolLcol(τ^,b)+λimiLimi(τ^,τ˜)(6)其中 λ i m i = 1 λ_{imi} = 1 λimi=1 λ c o l = 2.5 λ_{col} = 2.5 λcol=2.5 τ ^ \hat τ τ^是原始规划结果, τ ˜ \~τ τ˜ 表示规划标签,并且 b b b表示场景中预测的代理。碰撞损失计算公式如下: L c a l ( τ ^ , b ) = 1 N 2 ∑ i = 0 N max ⁡ ( 1 , ∑ t = 0 P L p a i r ( τ ^ t , b i t ) ) L p a i r ( τ ^ t , b i t ) = { 1 − d r i + r j , if  d ≤ r i + r j 0 , otherwise (7) \tag7 \mathcal L_{cal}(\hat \tau,b) = \frac{1}{N^2}\sum_{i=0}^{N}\max (1,\sum_{t=0}^{P}\mathcal L_{pair}(\hat \tau^t,b_i^t)) \\\mathcal L_{pair}(\hat \tau^t,b_i^t)=\begin{cases} 1-\frac{d}{r_i+r_j}, &\text{if } d\leq r_i+r_j \\ 0, &\text{otherwise} \end{cases} Lcal(τ^,b)=N21i=0Nmax(1,t=0PLpair(τ^t,bit))Lpair(τ^t,bit)={1ri+rjd,0,if dri+rjotherwise(7)此外,在推理过程中,为了进一步确保轨迹的安全性和平滑性,使用 Newton’s method 执行轨迹优化,利用来自占用预测模型的占用预测结果。

训练

采用了三个阶段的培训来进行多传感器、多任务学习。
在第一阶段,只训练BEV编码器和感知任务;
在第二阶段,固定BEV编码器,然后训练感知、预测和规划任务;
在可选的第三阶段,进一步训练占据和规划任务,同时固定所有其他组件。
这种分阶段的培训方法有助于逐步构建和优化模型,以达到更好的性能和泛化能力。

总结

FusionAD 是一种利用BEV融合来促进多感官,多任务,端到端学习的新方法,从而显着增强自动驾驶领域的预测和规划任务。所提出的方法强调了扩展一个统一的端到端的框架,以融合为基础的方法有效的潜力。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【CSS】轮播图案例开发 ( 基本设置 | 子绝父相 | 浏览器水平居中 | 圆角设置 | 绝对定位居中设置 )

代码示例 : <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Banner 轮播</title><style>/* 取消浏览器或者其它标签的默认的内外边距 */* {margin: 0;padding: 0;}/* 取消列表样式 主要是…

特殊的矩阵与特殊的矩阵关系———实对称、正定、对角、零矩阵

一、特殊的矩阵 1、实对称矩阵 定义&#xff1a;都是实数&#xff0c;且 性质&#xff1a; &#xff08;1&#xff09;可以用特征值来求A的大小 &#xff08;2&#xff09;可以得到A的秩 &#xff08;3&#xff09;必定可以相似对角化 运用&#xff1a; 与实对称矩阵A合同的矩…

C#,《小白学程序》第二课:数组与排序

1 文本格式 /// <summary> /// 《小白学程序》第二课&#xff1a;数组与排序 /// </summary> /// <param name"sender"></param> /// <param name"e"></param> private void button2_Click(object sender, EventArgs …

如何选择合适的损失函数

目录 如何选择合适的损失函数 1、均方误差&#xff0c;二次损失&#xff0c;L2损失&#xff08;Mean Square Error, Quadratic Loss, L2 Loss&#xff09; 2、平均绝对误差&#xff0c;L1损失&#xff08;Mean Absolute Error, L1 Loss&#xff09; 3、MSE vs MAE &#xff…

数据增强:提高机器学习性能的有效技巧

文章目录 数据增强的原理常用的数据增强技术图像数据增强文本数据增强音频数据增强 数据增强的代码示例拓展应用与挑战结论 &#x1f389;欢迎来到AIGC人工智能专栏~数据增强&#xff1a;提高机器学习性能的有效技巧 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&a…

Rabbitmq的Federation Exchange

(broker 北京 ) &#xff0c; (broker 深圳 ) 彼此之间相距甚远&#xff0c;网络延迟是一个不得不面对的问题。有一个在北京的业务(Client 北京 ) 需要连接 (broker 北京 ) &#xff0c;向其中的交换器 exchangeA 发送消息&#xff0c;此时的网络延迟很小&#xff0c;(C…

【网络基础实战之路】基于三层架构实现一个企业内网搭建的实战详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 【网络基础实战之路】基于…

推荐前 6 名 JavaScript 和 HTML5 游戏引擎

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建3D应用场景 事实是&#xff0c;自从引入JavaScript WebGL API以来&#xff0c;现代浏览器具有直观的功能&#xff0c;使它们能够渲染更复杂和复杂的2D和3D图形&#xff0c;而无需依赖第三方插件。 你可以用纯粹的JavaScript开…

c++冒泡排序的动画演示+程序实现

冒泡排序&#xff08;Bubble Sort&#xff09;是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列&#xff0c;依次比较两个相邻的元素&#xff0c;如果顺序&#xff08;如从大到小、首字母从Z到A&#xff09;错误就把他们交换过来。走访元素的工作是重复…

小白到运维工程师自学之路 第七十九集 (基于Jenkins自动打包并部署Tomcat环境)2

紧接上文 4、新建Maven项目 clean package -Dmaven.test.skiptrue 用于构建项目并跳过执行测试 拉到最后选择构建后操作 SSH server webExec command scp 192.168.77.18:/root/.jenkins/workspace/probe/psi-probe-web/target/probe.war /usr/local/tomcat/webapps/ /usr/loca…

代码随想录算法训练营第五十天|LeetCode 739,496

目录 LeetCode 739.每日温度 LeetCode 496.下一个更大元素&#xff01; LeetCode 739.每日温度 文章讲解&#xff1a;代码随想录 力扣题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码如下&#xff08;Java&#xff09;&#xf…

W6100-EVB-PICO进行UDP组播数据回环测试(九)

前言 上一章我们用我们的开发板作为UDP客户端连接服务器进行数据回环测试&#xff0c;那么本章我们进行UDP组播数据回环测试。 什么是UDP组播&#xff1f; 组播是主机间一对多的通讯模式&#xff0c; 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将…

ubuntu22安装和部署Kettle8.2

前提 kettle是纯java编写的etl开源工具&#xff0c;目前kettle7和kettle8都需要java8或者以上才能正常运行。所以运行kettle前先检查java环境是否正确配置&#xff0c;java版本是否是8或者以上。 kettle安装 1、创建kettle目录&#xff0c;并将kettle的zip包解压到kettle目…

c++的分文件编写

前言 在C中&#xff0c;你可以将代码分割成多个文件来提高可维护性和组织性。分割文件有助于将代码模块化&#xff0c;使大型项目更易于管理。以下是C中关于分文件的一些规则和概念&#xff1a; 理论知识 头文件&#xff08;Header Files&#xff09;&#xff1a; 头文件通常…

多线程(二)

一.关于线程的常用操作 1.启动线程 run(): 对于run方法的覆写只是指定线程要做的任务清单&#xff0c;而不是真正的启动线程 start()&#xff1a; start()方法才是真正的在底层创建出一个线程&#xff0c;并且启动 2.中断线程 1.通过共享的标记来中断 package demo; impor…

交通科技与管理杂志社交通科技与管理编辑部2023年第9期目录

专家论坛 黑龙江省经济高质量发展与生态环境保护耦合协调发展研究 刘降斌;祃玉帅; 1-5142 我国省际数字经济高质量发展水平综合评价研究 耿娟;毕晨曦; 6-8 振兴龙江《交通科技与管理》投稿邮箱&#xff1a;cn7kantougao163.com(注明投稿“《交通科技与管理》”) 数…

代码随想录Day_48打卡

①、打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房…

3、当今的企业架构分析

3、当今的企业架构分析 3、分库分表水平拆分&#xff08;MySQL集群&#xff09; 因为一个数据库装不下了&#xff0c;需要分库分表&#xff0c;读写分离&#xff0c;主从复制&#xff0c;主节点M与从节点s组成了一个数据库的集群&#xff0c;组成了一个小的单元&#xff0c;前端…

Android ---使用Jenkins 打包release版本不能安装或者安装后不显示APP

大家在用 Jenkins的时候&#xff0c;是不是会觉得很爽&#xff0c;因为他在用的过程中&#xff0c;是无脑的&#xff0c;毕竟一键触发&#xff01;&#xff01;&#xff01;&#xff01; 这边记录一个昨天&#xff0c;今天遇到的一个坑货问题&#xff0c;别人提交了所有代码&am…

骨传导耳机对骨头好不好?骨传导耳机对耳朵有影响吗

骨传导耳机是通过将声音以振动的形式传递到颅骨&#xff0c;再由内耳感知而不需要通过传统的声音传导路径&#xff08;即耳道和鼓膜&#xff09;。由于不直接接触耳朵或耳道&#xff0c;骨传导耳机在一定程度上减少了对耳部的压力和刺激&#xff0c;因此对骨头相比传统耳机来说…