即插即用!高德西交的PriorDrive:统一的矢量先验地图编码,辅助无图自动驾驶

news2024/9/20 22:43:03

Driving with Prior Maps: Unified Vector Prior Encoding for Autonomous Vehicle Mapping

在这里插入图片描述

论文主页:https://misstl.github.io/PriorDrive.github.io/

论文链接:https://arxiv.org/pdf/2409.05352

代码链接:https://github.com/missTL/PriorDrive

写在前面&笔者的个人理解

最近出现了很多先验地图的论文,高德地图和西交的这篇工作PriorDrive也给出了他们的方法。使用车载传感器来在线构建高精地图已经成为一种很有前途的解决方案;然而,由于遮挡和恶劣天气等,这些方法可能会受到数据不完整的阻碍。本文提出了PriorDrive框架,通过利用先验地图来解决这些限制,显著提高了在线高精地图构建的鲁棒性和准确性。PriorDrive集成了各种先验地图,例如OpenStreetMap的SDMap,图商提供的过时高精地图,以及根据历史车辆数据预测的在线局部地图。为了有效地将这些先验信息编码到在线建图模型中,本文引入了一种混合先验表示(HPQuery)来表示所有地图元素。 PriorDrive的核心是统一矢量编码器(UVE),采用双重编码机制来处理任意的矢量数据。此外,本文提出了一种片段级和点级的矢量预训练策略,以提高UVE编码器的泛化性。通过对nuScenes数据集的广泛测试,证明PriorDrive与各种在线建图模型高度兼容,并大大提高了地图预测能力。通过PriorDrive框架整合先验地图,为单次感知的挑战提供了强大的解决方案,为更可靠的自动驾驶汽车导航铺平了道路。读完发现这篇文章提出的范式可以即插即用到其他矢量任务,特别是提出的UVE和预训练。

总的来说,本文的贡献如下:

1、本文介绍了一种统一的矢量编码器(UVE),它通过双重编码机制有效地编码各种矢量数据:矢量内编码器捕获精细的局部特征,而矢量间编码器融合全局上下文信息。

2、本文提出了一种向量数据的预训练范式,通过在片段级和点级别添加高斯噪声或掩码来学习向量数据的先验分布,并重建整个矢量地图。

3、本文提出了一个混合先验表示(HPQuery)来表示所有元素,并提出了一个带有矢量先验地图的PriorDrive框架来解决单次感知的局限性。对nuScenes数据集的综合评估表明, PriorDrive显着提高了在线地图模型的性能。
在这里插入图片描述

相关工作回顾

在线矢量高精地图构建。与基于SLAM的方法离线构建HDMaps不同,最近的研究直接使用车载传感器实现在线构建HDMaps,以降低成本并提供最新的道路。一些方法将HDMaps构建视为分割任务来预测像素级的光栅化地图,但是需要复杂的后处理以进行矢量化构建。所以后续的工作试图构建一个端到端的矢量化地图学习框架。VectorMapNet探索了关键点表示和从粗到细的两阶段网络。MapTR提出了点集的置换等效建模和类似DETR的一阶段网络。然而这些方法仅依赖于车载传感器的单次感知,在处理具有挑战性的场景(如遮挡或不利的天气)存在局限性。

基于先验地图的在线建图。最近的研究开始结合先验地图来提升模型建图性能。P-MapNet将SDMap编码为额外的条件分支,并利用masked autoencoder来捕捉HDMap的先验分布。NeuralMapPrior维护和更新全局神经地图先验,这种表示会自动更新自身并提高局部地图推理的性能。MapEX设计了三种合理类型的现有地图并改进基于查询的地图估计模型的匹配算法。现有的研究经常忽略了在线历史预测地图,本文将其作为先验地图为当前感知提供所需信息。并且本文直接以矢量的形式对现有的各种先验地图进行了广泛的研究。

基于掩码的预训练方法。在自然语言处理和计算机视觉领域,掩码预训练已经成为自监督表示学习的一种有效策略。BERT使用掩码语言建模来预测具有双向上下文的随机掩码token。Masked AutoEncoder (MAE)会屏蔽掉输入图像的随机patches,并根据未屏蔽的patches进行重建。与以前主要为文本和图像设计的工作不同,本文提出了面向矢量数据的预训练范式。

概述PriorDrive
在这里插入图片描述

集成方法

先验地图特征的提取。本文提出的UVE作为一个统一的矢量编码器,可以直接编码各种矢量数据信息,如位置 ( x ,   y ) (x,\:y) (x,y)、方向 ( v x ,   v y ) (v_{x},\:v_{y}) (vx,vy)和点的类型(c)。使用表示点 p   =   [ x , y , v x , v y , c ] p\:=\:[x,y,v_{x},v_{y},c] p=[x,y,vx,vy,c],向量通常由多个有序的点集合组成, v = v= v= [ p 1 , p 2 , … , p n ] [p_1,p_2,\ldots,p_n] [p1,p2,,pn] ,其中n变化。先验地图由多个向量组成, M p r i o r = { v 1 , v 2 , … , v m } M_{prior}=\{v_{1},v_{2},\ldots,v_{m}\} Mprior={v1,v2,,vm}其中m是可变的。用 E u v e E_{uve} Euve表示UVE模型,对先验地图特征的提取过程,记为 f p r i o r f_{prior} fprior,可表示为:
f p r i o r = E u v e ( M p r i o r ) . f_{prior}=E_{uve}(M_{prior}). fprior=Euve(Mprior).

集成方法。本文总共提出了多种方法将先验地图特征整合到在线建图模型中。对于没有可学习查询Q的方法,如HDMapNet,本文直接reshape先验特征 f p r i o r f_{prior} fprior,并使用Deconv上采样来匹配BEV特征的形状,然后将其与BEV特性连接,并通过Conv对齐:
f b e v ∗ = C o n v ( c a t [ f b e v ,   D e c o n v ( r e s h a p e ( f p r i o r ) ) ] ) , f_{bev}^*=Conv(cat[f_{bev},\:Deconv(reshape(f_{prior}))]), fbev=Conv(cat[fbev,Deconv(reshape(fprior))]),

对于基于可学习查询Q的方法,如矢量化模型MapTR系列,本文提出了包含add/replace/concat三种操作的HPQuery。具体来说,Q通常由两部分组成, Q = { q i j } i = 0 , j = 0 m , n = Q=\{q_{ij}\}_{i=0,j=0}^{m,n}= Q={qij}i=0,j=0m,n= { q i i n s   +   q j p t } i = 0 , j = 0 m , n \{q_{i}^{ins}\:+\:q_{j}^{pt}\}_{i=0,j=0}^{m,n} {qiins+qjpt}i=0,j=0m,n , q i i n s q_i^{ins} qiins q i p t q_{i}^{pt} qipt分别表示实例级和点级的可学习查询。先验特征也由实例级特征和点级特征组成, f p r i o r = { ( f i i n s , f j p t ) } i = 0 , j = 0 m ′ , n ′ f_{prior}=\{(f_{i}^{ins},f_{j}^{pt})\}_{i=0,j=0}^{m^{\prime},n^{\prime}} fprior={(fiins,fjpt)}i=0,j=0m,n。因此,本文分别在实例级和点级与查询Q交互。add/replace/concat三种操作的HPQuery可以分别表示为:

q i j ∗ = q i i n s . a d d ( f i i n s ) + q j p t . a d d ( f j p t ) , q_{ij}^*=q_i^{ins}.add(f_i^{ins})+q_j^{pt}.add(f_j^{pt}), qij=qiins.add(fiins)+qjpt.add(fjpt),

q i j ∗ = q i i n s . r e p l a c e ( f i i n s ) + q j p t . r e p l a c e ( f j p t ) , q_{ij}^*=q_i^{ins}.replace(f_i^{ins})+q_j^{pt}.replace(f_j^{pt}), qij=qiins.replace(fiins)+qjpt.replace(fjpt),

q i j ∗ = c o n c a t [ q i i n s ,   f i i n s ] + c o n c a t [ q j p t ,   f j p t ] . q_{ij}^*=concat[q_i^{ins},\:f_i^{ins}]+concat[q_j^{pt},\:f_j^{pt}]. qij=concat[qiins,fiins]+concat[qjpt,fjpt].

UVE模型结构
在这里插入图片描述

受BERT在文本相关任务上的启发,本文提出了一个统一的矢量编码器(UVE),将矢量点类比为单词,矢量地图元素类比为句子。

Hybrid Prior Embedding. 对于给定的先验地图,本文首先构造UVE的输入,称为混合先验嵌入(Hybrid Prior Embedding,HPE)。本文使用正弦嵌入获得(x, y)和(v_x, v_y)的点位置嵌入和方向嵌入。本文将这两个嵌入拼接为点级嵌入。 为了获得整个矢量的特征表示,本文在每个矢量的开头添加一个特殊的[VEC]标记,并使用该标记的嵌入作为实例级嵌入。 此外,本文引入了可学习的实例嵌入和类型嵌入来区分矢量实例。为了保证点的顺序,本文还引入了二维可学习位置嵌入。最后,这些嵌入被聚合成HPE,然后作为UVE的输入嵌入。

Intra and Inter-Vector Encoder. 由于矢量点本身的信息量有限,学习矢量实例的概念对模型来说具有挑战性,需要矢量内的点之间进行更多的交互,以增强每个点对同一矢量中其他点的感知能力。因此,UVE编码器使用M层矢量内注意编码器和N层矢量间注意力编码器,使用注意掩蔽机制促进不同矢量实例内部和之间的特征交互。通过这种双重编码机制,UVE可以深度理解和表示矢量数据,为在线高精地图建设等关键任务提供有力支持。

预训练:位置建模
在这里插入图片描述

由于在线建图模型的推理能力有限,历史预测地图存在一定的误差。因此,本文使用位置建模对UVE进行预训练,以提高其编码和降噪能力。

Noise & Mask Generator. 噪声主要分为片段级噪声和点级噪声。在点级噪声中,随机噪声被添加到整个地图上5%矢量点。对于段级噪声,在随机选择10\%的地图元素后,将随机噪声添加到子矢量段内的所有矢量点。使用 M o r g M_{org} Morg表示原始地图元素,加入高斯噪声的过程可以用以下公式表示:
M o r g ∗ = M o r g [ r a n d o m i n d e x ] + ϵ , M_{org}^*=M_{org}[random_index]+\epsilon, Morg=Morg[randomindex]+ϵ,
其中 ϵ ∼ N ( 0 , 1 ) \epsilon\sim\mathcal{N}(0,1) ϵN(0,1)是一个随机高斯噪声,它只被添加到每个点的横纵坐标上。

与添加噪声类似,添加掩码选择也分为点级和片段级。选择要添加掩码的点后,这些点的坐标将被掩码为-1。
M o r g ∗ = M o r g [ r a n d o m i n d e x ] . r e p l a c e ( M a s k ) . M_{org}^*=M_{org}[random_index].replace(Mask). Morg=Morg[randomindex].replace(Mask).
Loss Function. 本文将矢量地图经过噪声掩码生成器后送入UVE编码,然后使用MLP对所有矢量点的坐标进行解码,并计算到真实坐标的平均欧几里德距离作为监督:
L = R M S E ( P ,   m l p ( E u v e ( M o r g ∗ ) ) ) , \mathcal{L}=RMSE(P,\:mlp(E_{uve}(M_{org}^{*}))), L=RMSE(P,mlp(Euve(Morg))),

其中 P = { ( x i , y i ) } i = 0 k P=\{(x_{i},y_{i})\}_{i=0}^{k} P={(xi,yi)}i=0k代表 M o r g M_{org} Morg中所有的矢量点。

实验分析

主要结果
在这里插入图片描述

为了评估本文的方法在不同模型架构、评估指标和矢量先验图中的有效性,本文将uve编码的先验地图集成到HDMapNet和矢量化模型MapTRv2中。SD地图提供的先验信息主要由简单中心线骨架组成,导致了最小的改进,分别提升3.0 mAP和1.9 mIoU。对于基于查询的模型,本文的方法有更大的改进,因为本文提出的HPQuery更好地利用了先验信息。提供最新道路状况的在线局部地图带来了更显著的改进分别提升 4.2 mAP和2.2 mIoU的增强中。这些结果表明局部地图通过提供更全面和最新的信息有助于提高性能。下图说明了在线局部地图有效地恢复遮挡的车道分隔线、人行横道和道路边界。虽然离线高精地图的精度很高,但由于缺乏完整的先验信息,分别提升了3.6 mAP和3.2 mIoU。此外,本文使用更严格的阈值0.5m来评估结果,SD地图、在线局部地图和过时高精地图分别提升了4.1 map、6.1 map和5.7 map。这些结果强调了本文的方法在更严格的评价条件下提供了更实质性的改进。总的来说,本文的方法在所有不同先验建图的基线模型中展示了一致的性能改进,突出了其通用性和对其他建图框架的潜在适用性。
在这里插入图片描述

结论

在本文中介绍了一个新的框架PriorDrive,它有效地利用各种类型的先验地图来提高自动驾驶汽车在线高精地图构建的准确性和鲁棒性。本文的方法的核心是UVE,本文设计它来有效地编码各种矢量数据。通过综合实验,本文证明了UVE与本文提出的预训练策略相结合,显著提高了最先进的映射模型的性能。本文的方法不仅解决了动态和复杂环境中实时高精地图构建相关的挑战,而且还提供了一个可扩展的解决方案,随着时间的推移不断提高地图精度。迭代使用历史预测地图作为先验,导致逐步细化的地图输出,从而确保最新的道路信息可用于自主导航。

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

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

相关文章

【数据结构】排序算法---直接插入排序

文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 7. 折半插入排序代码实现——C 结语 1. 定义 直接插入排序是一种简单直观的排序算法。它的工作原理为将待排列元素划分为「已排序」和「未排序」两部分,每次从「未排序的」…

PHP Swoole实现简易聊天室,附加小程序端连接websocket简易代码

目录 用到的工具: PHP Swoole拓展 | PHP Redis拓展 | Redis 7 一、安装上述必要工具(下面是以宝塔面板中操作为例) 给PHP安装Swoole和Redis拓展: 安装Redis软件 二、创建websocket服务器文件"wss_server.php" 具…

node.js+Koa框架+MySQL实现注册登录

完整视频展示:https://item.taobao.com/item.htm?ftt&id831092436619&spma21dvs.23580594.0.0.52de2c1bg9gTfM 效果展示: 一、项目介绍 本项目是基于node.jsKoamysql的注册登录的项目,主要是给才学习node.js和Koa框架的萌新才写的。 二、项目…

java数据结构----图

图的存储结构: 代码实现 public class Graph {// 标记顶点数目private int V;// 标记边数目private int E;// 邻接表private Queue<Integer>[] adj;public Graph(int v) {V v;this.E 0;this.adj new Queue[v];for (int i 0; i < adj.length; i) {adj[i] new Queu…

C++的类与对象中(主讲默认成员函数)

目录 1.类的默认成员函数 2.构造函数 1.全缺省构造函数 2.第7点中的对自定义类型的成员变量构造&#xff08;调用编译器自动生成的默认构造函数&#xff09; 3.析构函数 4.拷贝构造函数 5.运算符重载 1.概念 2.赋值运算符重载 6.const成员函数 1.类的默认成员函数 默…

微服务——网关路由(Spring Cloud Gateway)

网关路由 1.什么是网关 网关又称网间连接器、协议转换器&#xff0c;是在网络层以上实现网络互连的复杂设备&#xff0c;主要用于两个高层协议不同的网络之间的互连。网关就是网络的关口。数据在网络间传输&#xff0c;从一个网络传输到另一网络时就需要经过网关来做数据的路由…

【深度智能】:迈向高级时代的人工智能全景指南

​ ​ 前几天偶然发现了一个超棒的人工智能学习网站&#xff0c;内容通俗易懂&#xff0c;讲解风趣幽默&#xff0c;简直让人欲罢不能。忍不住分享给大家&#xff0c;人工智能立刻跳转&#xff0c;开启你的AI学习之旅吧&#xff01; 第一阶段&#xff1a;基础知识 1. 计算机科…

人脸防伪检测系统源码分享

人脸防伪检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

【Python基础】Python 装饰器(优雅的代码增强工具)

本文收录于 《Python编程入门》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程基础知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、装饰器基础三、语法糖 四、带参数的装饰器五、多层装饰器六、总结 一、前言 在Python编程的世界里…

【手撕】快排-分治

1. 颜色分类 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/sort-colors/description/ 代码 class Solution {public…

Neo4j入门案例:三星堆

创建一个关于三星堆的知识图谱可以是一个非常有趣的项目&#xff0c;它可以帮助理解如何使用Neo4j来存储和查询复杂的关系数据。三星堆文化以其独特的青铜器、金器和其他文物而闻名&#xff0c;这为我们提供了一个丰富的历史背景来构建知识图谱。 数据模型定义 实体类型&#…

数据安全查询-—SAAS本地化及未来之窗行业应用跨平台架构

一、数据库安全查询 默认数据库查询是不区分大小写的&#xff0c;这样无法区分Mm&#xff0c;Admin&#xff0c;admin 二、thinkphp 区分大小写 $condition "binary appdhj_sn {$应用sn}"; 三、原始mysql select * from TableA where binary columnA aaa; 四、…

mtk7628 网口灯问题

板子上电插入网线到网口&#xff0c;只有wan口灯会亮&#xff0c;插入lan口灯不会亮。对比了ok的代码&#xff0c;先对比设备树&#xff0c;未看到网口相关的GPIO。 mt7628an_WMD-7688A-12816.dts mt7628an_hilink_hlk-7628n.dts 继续查看网口相关代码&#xff0c;加打印&…

Android应用程序启动源码分析

文章目录 Android应用程序启动源码分析一、启动流程二、Launcher通知AndroidOS(用户点击图标)2.1 Activity.java2.2 Instrumentation.java2.3 ActivityTaskManagerService.java2.4 ActivityStarter.java2.5 RootWindowContainer.java2.5.1 Task.java2.5.2 TaskFragment.java 2.…

基于python+django+vue的个性化餐饮管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的视…

勇于尝试,永远行动 - 《洛克菲勒写给儿子的38封信》读书笔记

两倍速听过好几遍的书&#xff0c;洛克菲勒的思想和志向&#xff0c;配得上他的成就。 “在尝试中寻找突破&#xff0c;在行动中成就自我。”这是洛克菲勒写给儿子的箴言&#xff0c;也是他一生的真实写照。在这38封信中&#xff0c;他不仅分享了自己的工作心得&#xff0c;更…

Docker安装mysql安装nginx安装Redis

Docker安装mysql 下载镜像 docker pull mysql:8.0注意,使用此方法安装镜像需要提前配置镜像源,详情看之前的文章 安装 docker run -d -p 3306:3306 \ --name mysql \ --restartalways \ --privilegedtrue \ -e TZAsia/Shanghai \ -e MYSQL_ROOT_PASSWORDroot \ mysql:8.0进…

【重学 MySQL】二十九、函数的理解

【重学 MySQL】二十九、函数的理解 什么是函数不同 DBMS 函数的差异函数名称和参数功能实现数据类型支持性能和优化兼容性和可移植性 MySQL 的内置函数及分类单行函数多行函数&#xff08;聚合函数&#xff09;使用注意事项 什么是函数 函数&#xff08;Function&#xff09;在…

【PHP代码审计】 PHP环境搭建

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 安装phpstudy 泥菩萨-CSDN博客 安装vscode 直接去官网下载安装包&#xff0c;然后双击安装即可。官网地址&#xff1a;htt…

24/9/15 kaggle数字识别器

这次做的是数字识别器&#xff0c;借鉴了大佬的文章Kaggle竞赛实战系列&#xff08;一&#xff09;&#xff1a;手写数字识别器&#xff08;Digit Recognizer&#xff09;得分99.53&#xff05;、99.91%和100%_手写数字识别实现 digist-CSDN博客 加入了自己对大佬里面步骤的解…