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=1∑Vhitj=1∑NrefDefAttn(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) (x,y,zi) 在第 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,Bt−1′))=V∈{Q,Bt−1′}∑DefAttn(Qp,p,V)(3)其中, B t − 1 ′ B_{t-1}^{'} Bt−1′表示时间对齐后时间戳 t − 1 t−1 t−1 处的 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=0∑Nmax(1,t=0∑PLpair(τ^t,bit))Lpair(τ^t,bit)={1−ri+rjd,0,if d≤ri+rjotherwise(7)此外,在推理过程中,为了进一步确保轨迹的安全性和平滑性,使用 Newton’s method 执行轨迹优化,利用来自占用预测模型的占用预测结果。
训练
采用了三个阶段的培训来进行多传感器、多任务学习。
在第一阶段,只训练BEV编码器和感知任务;
在第二阶段,固定BEV编码器,然后训练感知、预测和规划任务;
在可选的第三阶段,进一步训练占据和规划任务,同时固定所有其他组件。
这种分阶段的培训方法有助于逐步构建和优化模型,以达到更好的性能和泛化能力。
总结
FusionAD 是一种利用BEV融合来促进多感官,多任务,端到端学习的新方法,从而显着增强自动驾驶领域的预测和规划任务。所提出的方法强调了扩展一个统一的端到端的框架,以融合为基础的方法有效的潜力。
相关文章:

FusionAD:用于自动驾驶预测和规划任务的多模态融合
论文背景 自动驾驶(AD)任务通常分为感知、预测和规划。在传统范式中,AD中的每个学习模块分别使用自己的主干,独立地学习任务。 以前,基于端到端学习的方法通常基于透视视图相机和激光雷达信息直接输出控制命令或轨迹…...
C# 序列化json数据,datatabel转对象
datatabel直接转对象 转对象逻辑 1.将datatabel转为json格式 2.将json格式的内容转化为模型data_model的list对象 JsonConvert.DeserializeObject<List<data_model>>(JsonConvert.SerializeObject(dt))...
axios引入的详细讲解
1.安装axios:npm install axios,等待安装完毕即可 2.引用axios:在需要使用的页面中引用 import axios from axios 即可 axios请求的时候有两种方式:一种是get请求,另一种是post请求 get请求: axios({…...

16- flask-bootstrap模板的使用
Flask 中支持 flask-bootstrap模板 和 bootstrap-flask模板 # 不使用: bootstrap-flask # pip install bootstrap-flask1.3.1 # 支持bootstrap 4 # pip install flask-bootstrap # 支持bootstrap3# 中文文档:https://flask-bootstrap-zh.readthedocs.io/zh/latest/ # 样式文档…...

机器学习-神经网络(西瓜书)
神经网络 5.1 神经元模型 在生物神经网络中,神经元之间相互连接,当一个神经元受到的外界刺激足够大时,就会产生兴奋(称为"激活"),并将剩余的"刺激"向相邻的神经元传导。 神经元模型…...

Apache StreamPark系列教程第二篇——项目打包和开发
一、项目打包 项目依赖maven、jdk8.0、前端(node、npm) //下载代码 git clone//maven打包相关内容 mvn -N io.takari:maven:wrapper //前端打包相关内容 curl -sL https://rpm.nodesource.com/setup_16.x | bash - yum -y install nodejs npm -v npm install -g pnpm默认是h2…...

Visual Studio 2022的MFC框架——WinMain函数
我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 大家还记得创建Win32应用程序是怎么弄的吗? Win32应用程序的建立到运行是有一个个关系分明的步骤的: 1.进入W…...

9. 解谜游戏
目录 题目 Description Input Notes 思路 暴力方法 递归法 注意事项 C代码(递归法) 关于DFS 题目 Description 小张是一个密室逃脱爱好者,在密室逃脱的游戏中,你需要解开一系列谜题最终拿到出门的密码。现在小张需要打…...

fastjson利用templatesImpl链
fastjson1.2.24 环境: pom.xml: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoc…...
OpenCV 开启O3优化
opencv默认没有开启O3优化选项,需要进行手动设置,下面是一种优化方法: 方法一 在 /opencv-4.5.5/cmake/OpenCVCompilerOptions.cmake 中的第 269 行做出以下修改: # 修改前 set(OPENCV_EXTRA_FLAGS_RELEASE "${OPENCV_EXT…...

css background实现四角边框
2023.8.27今天我学习了如何使用css制作一个四角边框,效果如下: .style{background: linear-gradient(#33cdfa, #33cdfa) left top,linear-gradient(#33cdfa, #33cdfa) left top,linear-gradient(#33cdfa, #33cdfa) right top,linear-gradient(#33cdfa, #…...

摆动序列【贪心算法】
摆动序列 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 class Solution {public int wiggleMaxLength(int…...

【Terraform学习】使用 Terraform创建 S3 存储桶事件(Terraform-AWS最佳实战学习)
本站以分享各种运维经验和运维所需要的技能为主 《python》:python零基础入门学习 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…...
自定义String字符串工具类 StringUtils.java
自定义String字符串工具类 StringUtils.java 简介 自定义String字符串工具类 api 是否为空 checkEmpty(String str);目标字符串是目标数组中的一个 checkContains(String str, String[] target);限制最大长度 checkMaxLength(String str, Long l);是否纯数字的字符串 check…...
mongTemplate实现group分组查询aggregation
MongoService封装 <T> List<T> group(Class<T> clazz, Aggregation aggregation,String documentName); MongoServiceImpl实现类 Overridepublic <T> List<T> group(Class<T> clazz, Aggregation aggregation,String documentName) {//…...

防御网络攻击风险的4个步骤
如今,人们正在做大量工作来保护 IT 系统免受网络犯罪的侵害。令人担忧的是,对于运营技术系统来说,情况却并非如此,运营技术系统用于运行从工厂到石油管道再到发电厂的所有业务。 组织应该强化其网络安全策略,因为针对…...

相机SD卡数据丢失如何恢复?
出门在外,相机是人们记录生活点滴的重要工具,是旅游的最佳玩伴。人们每到一个地方,都喜欢用相机来见证自己来过的痕迹,拍好的照片都会被放到相机卡里,但在使用相机时,有时我们会意外删除了重要的照片或视频…...
Java小记-矩阵转置
对于给定的一个二维矩阵,请转置后进行输出。 输入描述 对于一个n*m的矩阵,输入有n行,每行是m个以空格分隔的数字。 输出描述 n*m矩阵的转置矩阵。输出m行,每行是n个空格分隔的数据。 import java.io.*; import java.util.*;pub…...
计网-控制平面
下个月前最后一篇计网笔记,再坚挺一下,网络如同海洋,任我穿梭遨游~~ ——题记 大多数的算法更新,就是枚举 路由器与交换机的区别 文章目录 概述小白Dilistra:w的邻域按权值排序,v[w,i]min(c[w,i],v[w,i-1]c[i-1,i],...…...

Markdown 扩展语法练习
风无痕 August 26, 2023 Markdown 指南中文版 Markdown 入门指南Markdown 基本语法Markdown 扩展语法Markdown 基本语法练习Markdown 扩展语法练习 代码 <h3 id"table">表格</h3>| Syntax | Description | | --- | --- | | Header | Title | | Paragrap…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...