当前位置: 首页 > article >正文

一段式端到端自动驾驶:VAD:Vectorized Scene Representation for Efficient Autonomous Driving

论文地址:https://github.com/hustvl/VAD

代码地址:https://arxiv.org/pdf/2303.12077

1. 摘要

自动驾驶需要对周围环境进行全面理解,以实现可靠的轨迹规划。以往的方法依赖于密集的栅格化场景表示(如:占据图、语义地图)来进行规划,这种方式计算量大,且缺乏实例级的结构信息。
本文提出了 VAD(Vectorized Autonomous Driving),一种端到端的向量化自动驾驶范式,将驾驶场景建模为完全向量化的表示方式。这一范式具有两大优势:
一方面,VAD 利用向量化的动态目标运动信息与地图元素作为显式的实例级规划约束,从而有效提升了规划的安全性;
另一方面,VAD 摒弃了计算密集的栅格表示和手工设计的后处理步骤,因此比以往端到端方法运行速度更快。
在 nuScenes 数据集上,VAD 实现了当前最优的端到端规划性能,在多个指标上大幅超越现有最优方法。基础模型 VAD-Base 将平均碰撞率降低了 29.0%,运行速度提升了 2.5 倍;而轻量版本 VAD-Tiny 在保持可比规划性能的同时,实现了高达 9.3 倍的推理速度提升。

2. 方法

VAD 的整体框架如图 2所示。输入为多帧、多视角的图像,输出为自车未来的规划轨迹。VAD 的框架分为四个阶段:

Backbone:提取图像特征并投影为 BEV(Bird’s-Eye View)特征;

Vectorized Scene Learning:构建向量化的地图与运动表示;

Planning(推理阶段):通过 ego query 与地图/目标交互,生成未来轨迹;

Planning(训练阶段):引入三种向量化约束,对轨迹进行训练正则化。

2.1 向量化场景学习

VAD使用 ResNet50 提取图像特征,经过多层卷积神经网络提取图像的低级和高级特征。使用 BEV Encoder 将图像特征通过空间映射转换为 Bird’s Eye View(BEV)特征图,并使用 Transformer 对其进行进一步的处理,学习图像的全局语义和空间关系。

向量化地图

相比栅格化语义地图,向量化表示能保留更细致的结构信息。论文使用一组 Map Query Q_m,从 BEV 特征中提取地图元素,如:车道线(lane divider)、道路边界(road boundary)以及人行道(pedestrian crossing),每个地图元素表示为 一组点(polyline),并附带类别信息。Q_m是可学习的embedding,类似 DETR 中的 Object Query,维度为100xC(例如100个地图目标),Vecorized Map Transformer使用的是典型的Transformer Decoder结构,先进行self-attention,然后在进行cross-attention,最终输出向量维度为MxD,然后经过地图head可以解析出来就是100x20x2,也就是100个目标,每个目标数据点个数为20个,二维坐标。

向量化交通参与者运动预测

为了高效预测交通参与者(如其他车辆、行人等)的未来轨迹,VAD 使用了一种基于向量化表示的方法来描述它们的运动。这一部分的目标是通过 Agent Queries(交通参与者查询)来学习每个交通参与者的运动特征,并通过 Deformable Attention 机制与环境的 BEV(Bird's-Eye View)特征进行交互,从而预测它们的未来行为。

Agent Queries 是一组表示交通参与者(例如其他车辆、行人等)运动特征的查询向量,每个 Agent Query 用来捕捉交通参与者的状态信息,如位置、速度、加速度、方向等。论文采用一组可学习的向量Q_a,首先进行self-attention,获得agent-agent之间的交互,然后query与BEV特征和更新的map queries进行交叉注意力,其中与BEV特征进行交叉注意力采用deformable attention的方法,最终获得输出的特征向量AxD。经过运动预测head输出维度为300x6x12,300个目标,每个目标6个模态,每个模态6帧,每帧2个坐标点。

交互式规划

在预测模块之后,VAD 使用一个规划模块来为自车(ego vehicle)规划一条可行的轨迹。与预测模块中用于运动建模的 Motion Queries 相似,引入了一个专用于 ego vehicle 的查询向量,称为 Ego Query,它被输入到一个新的 Transformer 解码器中,用于轨迹规划。为了捕捉自车与其他交通参与者之间的相互作用(agent-agent interaction),将预测模块中输出的 Motion Queries 作为上下文(context)输入到规划模块的解码器中。该机制允许 ego vehicle 考虑其他交通参与者的未来意图,并进行反应。论文采用一组可学习的向量Q_{ego},维度为N_{q}\times D,其中N_{q}表示时间步数,如取6。Q_{ego}先进行self-attention,然后ego-agent和ego-map分别进行cross-attention,输出维度为N_{q}\times D。经过轨迹规划head,输出为3*6*2,3个模态,每个莫模态6个时间步,每步2个坐标点,其中3个模态论文中设定为右转、左转和直行。

3. 总结

论文探索了一种完全向量化的驾驶场景表示方法,以及如何有效地将这种向量化场景信息融合到系统中以提升自动驾驶的规划性能。VAD 同时达成了高性能与高效率的结合,使用 NVIDIA GeForce RTX 3090 GPU,VAD-Tiny推理时间在50-60ms之间。此外,VAD 支持对其他动态交通参与者的多模态运动轨迹预测。与此同时,如何将更多的交通信息(例如:车道图、交通标志、信号灯、限速信息等)融入此类自动驾驶系统,也是一个具有发展前景的研究方向。

相关文章:

一段式端到端自动驾驶:VAD:Vectorized Scene Representation for Efficient Autonomous Driving

论文地址:https://github.com/hustvl/VAD 代码地址:https://arxiv.org/pdf/2303.12077 1. 摘要 自动驾驶需要对周围环境进行全面理解,以实现可靠的轨迹规划。以往的方法依赖于密集的栅格化场景表示(如:占据图、语义…...

17.整体代码讲解

从入门AI到手写Transformer-17.整体代码讲解 17.整体代码讲解代码 整理自视频 老袁不说话 。 17.整体代码讲解 代码 import collectionsimport math import torch from torch import nn import os import time import numpy as np from matplotlib import pyplot as plt fro…...

把dll模块注入到游戏进程的方法_基于文件修改的注入方式

1、概述 本文主要是介绍两种基于文件修改的注入方式,一种是“DLL劫持”,另一种是“修改导入表”。这两种注入方式都是利用操作系统加载PE时的特点来实现的,我们在实现这两种注入方式时只需专注于注入dll的实现,而不用花费额外的精力去关注注入器的实现。要想深入了解这两种…...

4月21日星期一今日早报简报微语报早读

4月21日星期一,农历三月廿四,早报#微语早读。 1、女子伸腿阻止列车关门等待同行人员,被深圳铁路警方行政拘留; 2、北理工再通报:开除宫某党籍,免去行政职务,解除聘用关系; 3、澳门…...

Spark(20)spark和Hadoop的区别

Apache Spark 和 Apache Hadoop 都是广泛使用的开源大数据处理框架,但它们在设计理念、架构、性能和适用场景等方面存在显著区别。以下是它们的主要区别: ### **1. 架构设计** - **Hadoop**: - **HDFS(Hadoop Distributed File…...

Kubeflow 快速入门实战(二) - Pipelines / Katib / KServer

承接前文博客 Kubeflow 快速入门实战(一) Kubeflow 快速入门实战(一) - 简介 / Notebooks-CSDN博客文章浏览阅读441次,点赞19次,收藏6次。本文主要介绍了 Kubeflow 的主要功能和能力,适用场景,基本用法。以及Notebook&#xff0c…...

【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(一)

本篇博客给大家带来的是多线程中常见的所策略和CAS知识点. 🐎文章专栏: JavaEE初阶 🚀若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅🚀 要开心要快…...

ECA 注意力机制:让你的卷积神经网络更上一层楼

ECA 注意力机制:让你的卷积神经网络更上一层楼 在深度学习领域,注意力机制已经成为提升模型性能的重要手段。从自注意力(Self-Attention)到各种变体,研究人员不断探索更高效、更有效的注意方法。今天我们要介绍一种轻…...

基于定时器查询模式的LED闪烁(STC89C52单片机)

#include <reg52.h> sbit LED P0^0; sbit ADDR0 P1^0; sbit ADDR1 P1^1; sbit ADDR2 P1^2; sbit ADDR3 P1^3; sbit ENLED P1^4; void main() { unsigned char cnt 0; //定义一个计数变量&#xff0c;记录T0溢出次数 ENLED 0; //使能U3&#xff0c;选择…...

SAP系统生产跟踪报表入库数异常

生产跟踪报表入库数异常 交库21820,入库43588是不可能的 原因排查: 报表的入库数取值,是取移动类型321 (即系检验合格后过账到非限制使用)的数. 查凭证,101过账2次21807,321过账了2次21794,然后用102退1次21794.就是说这批物料重复交库了. 解决&#xff1a; 方案一:开发增强设…...

Kubernetes控制平面组件:调度器Scheduler(一)

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

08-DevOps-向Harbor上传自定义镜像

harbor创建完成&#xff0c;往harbor镜像仓库中上传自定义的镜像&#xff0c;包括新建项目、docker配置镜像地址、镜像重命名、登录harbor、推送镜像这几个步骤&#xff0c;具体操作如下&#xff1a; harbor中新建项目 访问级别公开&#xff0c;代表任何人都可以拉取仓库中的镜…...

Vue v-for 循环DOM 指定dom个数展示一行

在Vue.js中&#xff0c;如果想根据v-for循环的结果来控制哪些元素应该在一行中展示&#xff0c;你可以通过计算属性或者方法来实现。这里使用CSS改变样式和js脚本两种方式做到这一点&#xff0c;根据你的具体需求选择适合的方法。 方法1&#xff1a;使用计算属性 如果你想要基…...

mysql控制单表数据存储及单实例表创建

1. 单表数据存储不要过大 主流建议 保守建议。100万以内保持最佳性能其他。不超过2000万 理论依据。 B树层级可能变多。从3增加到4。导致索引查询路径边长&#xff0c;增加IO开销 优化 加索引。对高频查询字段增加索引。避免全表扫描低频历史数据通过分区表或归档隔离。足够的…...

极验4滑块笔记:整理思路--填坑各种问题

最近在研究某验4逆向分析&#xff0c;以前没弄过这种&#xff0c;所以爬了很多坑&#xff0c;就是把分享给大家~ 1.这个gcaptcha4.js需要逆向&#xff0c;我的方法很笨就是将_ᕶᕴᕹᕶ()这个蝌蚪文打印处来&#xff0c;全局替换一下&#xff0c;然后Unicode这种代码&#xff0…...

LX3-初识是单片机

初识单片机 一 什么是单片机 单片机:单片微型计算机单片机的组成:CPU,RAM(内存),flash(硬盘),总线,时钟,外设…… 二 Coretex-M系列介绍 了解ARM公司与ST公司ARM内核系列: A 高性能应用,如手机,电脑…R 实时性强,如汽车电子,军工…M 超低功耗,如消费电子,家电,医疗器械 三…...

2025年渗透测试面试题总结-拷打题库10(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库10 1. CSRF成因及防御措施 | 非Token防御 2. XSS Worm原理 3. Co…...

Linux系统下docker 安装 MySQL

踩坑解决&#xff1a; 1、docker安装mysql&#xff0c;不需要执行search 2、pull时&#xff0c;需要指定版本号 3、连接Navicat需要看阿里云端口号是否开启 在拉取镜像的时候&#xff0c;如果不使用代理服务器&#xff0c;docker search mysql不需要执行 本人在未使用代理服…...

配置 VS Code 使用 ESLint 格式化

1、在设置里面搜索Default Formatter&#xff0c;下拉框里选择eslint 2、并勾选Enables ESlint as a formatter 3、再在settings.json文件中添加配置代码&#xff0c;如下所示&#xff1a; 1&#xff09; 、打开 VS Code 设置 快捷键&#xff1a;Ctrl ,&#xff08;Mac: ⌘ ,…...

从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析

从代码实现理解Vision Permutator&#xff1a;WeightedPermuteMLP模型解析 随着人工智能的快速发展&#xff0c;视觉识别任务变得越来越重要。最近提出的Vision Permutator架构为这一领域带来了新的思路&#xff0c;它通过可学习的排列操作重新定义了特征交互的方式。 今天我…...

Web开发:ABP框架10——使用数据库存储文件,完成文件的下载和上传

一、简要介绍 字节数组&#xff1a;字节数组是存储数据的字节序列&#xff0c;常用于二进制数据&#xff08;如图片、音视频、文档等&#xff09;的表示。 文件和字节的关系&#xff1a;文件是由字节构成&#xff0c;字节是文件内容的基本单位。 文件以字节形式存储在服务器数…...

SystemVerilog语法之内建数据类型

简介&#xff1a;SystemVerilog引进了一些新的数据类型&#xff0c;具有以下的优点&#xff1a;&#xff08;1&#xff09;双状态数据类型&#xff0c;更好的性能&#xff0c;更低的内存消耗&#xff1b;&#xff08;2&#xff09;队列、动态和关联数组&#xff0c;减少内存消耗…...

NestJS-Knife4j

文章目录 前言✅ 一、什么是 Knife4j&#xff1f;✅ 二、Knife4j 与 Swagger 对比✅ 三、NestJS-Knife4j 集成1. 安装依赖2. 配置 Swagger 与 Knife4j3. 启动应用并访问接口文档 ✅ 四、功能增强1. **接口分组**2. **请求/响应示例**3. **接口文档的美化** ✅ 五、总结 前言 N…...

【项目管理】成本类计算 笔记

项目管理-相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 &#xff08;一&#xff09;知识总览 项目管理知识域 知识点&#xff1a; &#xff08;项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域&#xff09; 对应&…...

手机投屏到电视方法

一、投屏软件 比如乐播投屏 二、视频软件 腾讯视频、爱奇艺 三、手机无线投屏功能 四、有线投屏 五、投屏器...

(三十)安卓开发中的MVP模式详解

在安卓开发中&#xff0c;MVP&#xff08;Model-View-Presenter&#xff09; 是一种常见的软件架构模式&#xff0c;它通过将应用程序的逻辑与用户界面分离&#xff0c;使得代码更加模块化、易于维护和测试。本文将详细讲解MVP模式的组成部分、工作流程、优点&#xff0c;并结合…...

基于MuJoCo物理引擎的机器人学习仿真框架robosuite

Robosuite 基于 MuJoCo 物理引擎&#xff0c;能支持多种机器人模型&#xff0c;提供丰富多样的任务场景&#xff0c;像基础的抓取、推物&#xff0c;精细的开门、拧瓶盖等操作。它可灵活配置多种传感器&#xff0c;提供本体、视觉、力 / 触觉等感知数据。因其对强化学习友好&am…...

配置管理CM

以下是关于项目管理中 配置管理 的详细解析,结合高项(如软考高级信息系统项目管理师)教材内容,从理论到实践进行系统阐述: 一、配置管理的基本概念 1. 定义 配置管理(Configuration Management, CM)是识别、记录、控制项目成果(产品、服务或过程)的物理和功能特征,…...

13.编码器的结构

从入门AI到手写Transformer-13.编码器的结构 13.编码器的结构代码 整理自视频 老袁不说话 。 13.编码器的结构 T r a n s f o r m e r E n c o d e r : 输入 [ b , n ] TransformerEncoder:输入[b,n] TransformerEncoder:输入[b,n] E m b e d d i n g : − > [ b , n , d ]…...

[原理分析]安卓15系统大升级:Doze打盹模式提速50%,续航大幅增强,省电提升率5%

技术原理:借鉴中国友商思路缩短进入Doze的时序 开发者米沙尔・拉赫曼(Mishaal Rahman)在其博文中透露&#xff0c;谷歌对安卓15系统进行了显著优化&#xff0c;使得设备进入“打盹模式”(Doze Mode)的速度提升了50%&#xff0c;并且部分机型的待机时间因此得以延长三小时。设备…...