ChatBEV:一种理解 BEV 地图的可视化语言模型

25年3月来自上海交大、上海AI实验室、同济大学和MAGIC的论文“ChatBEV: A Visual Language Model that Understands BEV Maps”。

交通场景理解对于智能交通系统和自动驾驶至关重要,可确保车辆安全高效地运行。虽然 VLM 的最新进展已显示出整体场景理解的前景,但 VLM 在交通场景中的应用(尤其是使用 BEV 地图)仍未得到充分探索。现有方法通常受任务设计和数据量限制的影响,从而阻碍全面的场景理解。为了应对这些挑战,推出 ChatBEV-QA,这是一个BEV VQA 基准,包含超过 137,000 个问题,旨在涵盖广泛的场景理解任务,包括全局场景理解、车辆-车道交互和车辆-车辆交互。该基准使用数据收集流水线构建,为 BEV 地图生成可扩展且信息丰富的 VQA 数据。进一步微调专门的视觉语言模型 ChatBEV,使其能够解释不同的问题提示并从 BEV 地图中提取相关的上下文-觉察信息。此外,提出一种语言驱动的交通场景生成流程,其中 ChatBEV 有助于地图理解和文本对齐的导航指导,显著增强真实一致的交通场景的生成。

如图所示ChatBEV-QA和以此微调的ChatBEV模型:

请添加图片描述

自动化数据构建流程

本文提出一个三步自动化流程,用于从 nuPlan [7] 数据集生成 ChatBEV-QA 数据,如图 a 所示。首先,设计各种问题以涵盖全面理解任务。然后,提取必要的注释并生成信息丰富的 BEV 地图。最后,VQA 生成器根据问题、注释和 BEV 地图创建 VQA 数据。

请添加图片描述

步骤 1:问题设计。从三个方面获得全面理解,并据此进一步开发六种不同类型的问题:

全局理解:识别更广泛的环境背景对于预测车辆行为至关重要。不同的场景会产生不同的运动模式,例如,交叉路口的车辆更有可能转弯,而停车场的车辆则倾向于保持静止。为了捕捉这些上下文信息,引入两个关键问题:区域类型(用于对周围环境进行分类,例如交叉路口、停车场)和车道类型(用于指定车道类别,例如直行、左转),从而有助于更精确地预测车辆行为。

车-车道交互:近期研究经常忽略车-车道交互,而车-车道交互对于响应道路特征、交通规则和环境因素的自适应导航至关重要。为了增强该领域的推理能力,引入两个关键方面:位置(用于识别车辆占用的精确车道)和导航(根据左转或直行等特定引导确定最相关的车道)。这些考虑因素有助于实现更明智的轨迹预测和稳健的场景理解。

车-车交互:车-车交互对于空间关系建模至关重要,直接影响行为协调。为了评估这些相互作用,引入两个关键方面:存在性(确定特定方向上附近车辆的存在)和相对方向(评估最近和最远车辆的方向)。这些考虑因素增强了对交通动态的理解,并改进了预测模型。

这些问题提供了一个结构化的框架,用于理解场景中车辆行为和相互作用的各个维度。为了增加多样性,为每种问题类型设计多个模板。

步骤 2:数据收集和注释。nuPlan 的原始注释涵盖车辆位置、速度和车道细节等基本信息。增强数据集,并设计一个标注器,它具有广泛的基于规则函数,可以提取高级语义信息并适用于所设计的问题。通过一个迭代的人工参与审查过程,严格改进函数的设计,以确保其输出与人类判断紧密一致。对于场景中每个时间步的每辆车,利用包含以下字段的设计函数生成 JSON 格式的输出:1). 区域类型,指示车辆当前所处的区域类型;2). 车道类型,指定车辆当前所处车道的类型;3). 轨迹,描述接下来 50 个时间步长内与车辆轨迹对应的类别;4). 轨迹车道,捕获接下来 50 帧内与轨迹对应的所有车道 ID。5). 相关车辆,存储位于车辆周围四个方向上的其他车辆的 ID;6). 距离,计算当前车辆与场景中所有其他车辆之间的距离,如上图 a 的第二部分所示。

然后,根据 nuPlan 的原始地图和轨迹注释为每个场景中的每辆车生成 BEV 地图,坐标原点放在本车的位置。感兴趣的车辆以红色突出显示以引起注意,箭头指示其运动方向。生成的 BEV 地图清楚地标记车道边界和区域划分,为车辆与车道交互和整体理解提供必要的信息。

步骤 3:VQA 对生成。有了问题模板和注释,可以通过 VQA 生成器生成问答对。对于车道类型和区域类型的问题,生成器随机选择一个模板并使用相应的注释文本作为答案。对于位置和导航问题,通过提供多项选择题来简化问题。具体来说,提供两个边框:一个正确,一个来自非重叠车道的干扰项。位置问题的正确答案,是当前车道的地面真值边框,而对于导航问题,用真值轨迹类型作为问题提示,正确答案对应于与真值实轨迹相关的车道边框。对于存在性和相对方向性问题,生成器首先选择一个方向,然后根据空间关系标注得出答案。

原始 nuPlan 数据集呈现长尾分布,例如直车道上车辆数量较多,而转弯车道上车辆相对较少,这导致答案类别分布不平衡,可能会使模型性能偏向更常见的场景。为了缓解这个问题,采用一种随机欠采样技术,在数据集构建过程中选择性地从占多数的类别中移除一定比例的样本,从而促进更均衡的分布。

数据集统计数据和指标

由于整个 nuPlan 数据集非常庞大,从 nuPlan-mini 拆分中构建数据,从而提供更小、更易于管理的子集。总体而言,ChatBEV-QA 包含 25331 张 BEV 图像的 137818 个问答对,其中 21634 张 BEV 图像上有 116112 个问题用于训练,3697 张 BEV 图像上有 21706 个问题用于测试,平均每张图像约有 5.44 个问题。上图 b 和上图 c 分别显示训练集上每个问题的问题类型和答案分布,突出显示 ChatBEV-QA 的均衡组成。此外,设计的自动化数据创建流程允许无缝扩展到完整的 nuPlan 数据集,从而有助于获取更多数据用于未来的实验。这是一个专注于 BEV 地图的 VQA 数据集,旨在全面理解场景及其中各种元素之间的相互作用。 由于设计的问题的答案属于特定集合,因此用 Top-1 准确率作为评估指标,这与以往 VQA 研究中常用的做法一致。还分别评估不同类型问题的表现,以便更详细地了解模型在场景理解各个方面的表现。

ChatBEV 系列模型

除了拟议的数据集外,本文还提供基线模型。由于 BEV 表示固有的紧凑性,其包含不同于自然图像的特定结构和与任务相关的语义信息,现有的 VLM 直接应用于此任务已被证明不够充分。为了解决这个问题,通过使用 LoRA 进行视觉指令调整,对几个高级 VLM [15, 24, 27, 27] 进行微调,并根据 BEV 地图理解的独特需求进行定制。根据不同的基础 VLM,经过微调的模型分别表示为 ChatBEV-LLaVA-1.5-7b、ChatBEV-LLaVA-1.5-13b、ChatBEV-BLIP 和 ChatBEV-InternLM-XComposer2,在捕捉 BEV 地图中的空间关系和上下文推理方面表现出不同程度的性能,其中 ChatBEV-LLaVA-1.5-13b 的性能优于其他模型。

本文提出一种基于扩散的架构,其中 ChatBEV 充当地图理解提取器,提供全面的场景理解,从而生成更精确、更符合上下文的输出。推理过程如图所示。

请添加图片描述

问题表述

按照 [53, 54] 将场景生成任务表述为一个模仿学习问题。从数学上讲,给定一个包含 N 辆车的场景,将所有车辆在 T 个时间步长内的状态定义为 S = [S_1, S_2, ···, S_N],其中 S_i = [s1_i, s1_i,···, sT_i],st_i = (xt_i, y_it, v_it, θ_it) 表示车辆 i 在第 t 个时间步长的当前状态(二维位置、速度和偏航角)。类似地,可以定义相应的动作A,这里A_i = [a0_i, a1_i,···,aT−1_i],每个 at_i=(v ̇_it, θ ̇_it) 是车辆 i 在第 t 个时间步的动作(加速度和偏航角速度)。状态 s_it+1 可以通过单轮车动力学模型f计算得出,s_it+1 = f (s_it, a_it)。整体轨迹表示为 τ = [A, S]。用 C = (I, D, Sh, M) 表示决策相关上下文,其中I是局部语义图,D是文本描述,Sh = [S−H, · · · , S^0] 表示车辆的 H 个先前状态,M 是额外的 BEV 图理解信息。目标是根据与决策相关的背景生成真实且文本一致的交通轨迹。

地图理解提取器

给定场景中车辆的初始状态和相应的文本描述,首先提取地图理解信息 M,并将其与原始输入集成,形成下一个模块的最终输入。

这里,考虑两种有助于后续场景生成的地图理解信息,包括全局理解信息 V 和场景推理信息 P。考虑到车辆对场景的整体理解(例如其当前所在的区域和车道)会影响其特定的运动模式,引入全局理解信息 V = [R, L],它是区域类型 one-hot 向量 R 和车道类型 one-hot 向量 L 的串联。为了提供更精确且文本对齐的导航引导,引入导航推理信息,表示为 P。它表示车辆根据文本中描述的轨迹类型可能选择的最可能车道的中心线数据。这里 N_s 表示相关车道数,N_p 表示每条车道中心线的点数,d 表示每个点的维度。

在训练过程中,通过将车辆的初始位置转换为区域和车道类型的 one-hot 向量来获得全局理解。导航推理基于真值轨迹附近的道路。在推理过程中,根据文本描述生成一张 BEV 图像和一个问题。经过微调的 ChatBEV 会检索区域、车道类型以及合理车道的边框。通过收集该边框内的所有车道,最终完成导航推理。

条件扩散

条件编码器。条件编码器旨在有效地集成各种条件输入,并提供信息丰富的条件嵌入,从而促进后续的解码过程。在提取器之后,条件编码器为每个场景接受三种类型的输入:初始状态 S^h、文本描述 D 和地图理解信息 M = ([R, L], P)。对于每个输入,使用相应的前馈编码模块提取嵌入,然后沿时间维度广播,之后将它们连接起来形成最终的条件嵌入 E。

扩散解码器。给定条件输入,扩散解码器通过迭代细化噪声数据在每个时间步生成预测轨迹。这里采用 CTG++ [53] 作为扩散解码器模块。该过程首先将来自条件编码器的条件嵌入与来自前馈模块的预测未来轨迹嵌入沿时间维度连接起来。正弦位置编码应用于公司内时间动态。采用去噪步骤 k 的正弦位置编码来融入时间动态。编码后的轨迹,经过时间注意模块来捕捉智体关系,然后经过空间注意模块来捕捉几何关系。之后,地图注意层,将车道点转换为车道向量,从而通过多头注意机制实现地图-觉察。最后,将编码后的轨迹投影回输入维度,生成预测的动作轨迹,再经过动态函数计算得出结果。

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

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

相关文章

武装Burp Suite工具:xia SQL自动化测试_插件

武装Burp Suite工具:xia SQL自动化测试_插件 插件作者介绍:本插件仅只插入单引号,没有其他盲注啥的,且返回的结果需要人工介入去判断是否存在注入,如果需要所有注入都测试,请把burp的流量转发到xray。 目录…

线段树讲解(小进阶)

目录 前言 一、线段树知识回顾 线段树区间加减 区间修改维护: 区间修改的操作: 区间修改update: 线段树的区间查询 区间查询: 区间查询的操作: 递归查询过程: 区间查询query: 代码&…

neo4j中节点内的名称显示不全解决办法(如何让label在节点上自动换行)

因为节点过多而且想让节点中所有文字都显示出来而放大节点尺寸 从neo4j中导出png,再转成PDF来查看时,要看清节点里面的文字就得放大5倍才行 在网上看了很多让里面文字换行的办法都不行 然后找到一个比较靠谱的办法是在要显示的标签内加换行符 但是我的节点上显示的是…

SQL进阶知识:五、存储过程和函数

今天介绍下关于存储过程和函数的详细介绍,并结合MySQL数据库提供实际例子。 在MySQL中,存储过程(Stored Procedures)和函数(Functions)是数据库编程的重要组成部分,它们可以封装SQL语句&#xf…

CONDA:用于 Co-Salient 目标检测的压缩深度关联学习(总结)

摘要 一 介绍 二 有关工作 三 提出的方法 图2:我们的凝聚式深度关联(CONDA)模型的整体流程图。具体来说,凝聚式深度关联(CONDA)模型首先利用图像特征来计算超关联。然后,全像素超关联由对应诱…

node.js 实战——(path模块 知识点学习)

path 模块 提供了操作路径的功能 说明path. resolve拼接规范的绝对路径path. sep获取操作系统的路径分隔符path. parse解析路径并返回对象path. basename获取路径的基础名称path. dirname获取路径的目录名path. extname获得路径的扩展名 resolve 拼接规范的绝对路径 const…

Kimi做内容社区,剑指小红书?

原创科技新知AI新科技组作者丨樱木编辑丨江蓠 主编丨九黎 对于当前融资形势并不明朗的大模型六小龙来说,该如何生存下去,似乎成了各家急需解决的问题。 根据PitchBook数据,今年一季度风险投资机构在中国AI领域共完成144笔交易,投…

opencv--图像滤波

图像滤波 含义 方法 噪声是怎么产生的 线性滤波 概念 利用窗口对图像中的像素进行加权求和的滤波方式。 图像来源于小虎教程。 图像的滤波是二维滤波的过程。 滤波器窗口: 滤波器窗口(也称为卷积核或模板)是一个小的矩阵(通常为…

Java 实现SpringContextUtils工具类,手动获取Bean

SpringContextUtils 工具类实现 下面是一个完整的 Spring 上下文工具类实现,用于从 Spring 容器中获取 Bean。这个工具类考虑了线程安全、性能优化和易用性,并提供了多种获取 Bean 的方式。 完整实现代码 import org.springframework.beans.BeansExce…

基于 Vue 2 开发的分页卡片列表组件(带懒加载和点击事件)

功能目标&#xff1a; CardList.vue 中支持分页&#xff0c;每页显示指定数量的卡片。添加“加载中”动画。支持懒加载&#xff1a;滚动到底部自动加载下一页。点击卡片的事件逻辑由 Card.vue 内部发出&#xff0c;并由 CardList 向上传递。 主页面文件 Home.vue <templat…

【数据结构和算法】6. 哈希表

本文根据 数据结构和算法入门 视频记录 文章目录 1. 哈希表的概念1.1 哈希表的实现方式1.2 哈希函数&#xff08;Hash Function&#xff09;1.3 哈希表支持的操作 2. Java实现 在前几章的学习中&#xff0c;我们已经了解了数组和链表的基本特性&#xff0c;不管是数组还是链表…

【python】如何将文件夹及其子文件夹下的所有word文件汇总导出到一个excel文件里?

根据你的需求,这里提供一套完整的Python解决方案,支持递归遍历子文件夹、提取Word文档内容(段落+表格),并整合到Excel中。以下是代码实现及详细说明: 一个单元格一个word的全部内容 完整代码 # -*- coding: utf-8 -*- import os from docx import Document import pand…

leetcode-位运算

位运算 371. 两整数之和 题目 给你两个整数 a 和 b &#xff0c;不使用 运算符 和 - &#xff0c;计算并返回两整数之和。 示例 1&#xff1a; 输入&#xff1a; a 1, b 2 输出&#xff1a; 3 示例 2&#xff1a; 输入&#xff1a; a 2, b 3 输出&#xff1a; 5 提示&am…

飞帆控件:在编辑模式下额外加载的库

飞帆是一个自由的控件设计平台。在飞帆中&#xff0c;我们可以很方便地创建基于 Vue 2 组件的控件&#xff0c;并使用控件来搭建网页。 他山之石&#xff0c;可以攻玉。在创建控件中&#xff0c;使用 js 、css 依赖库能让我们的控件更强大。 有些时候&#xff0c;在编辑模式下…

GPLT-2025年第十届团体程序设计天梯赛总决赛题解(共计266分)

今天偶然发现天梯赛的代码还保存着&#xff0c;于是决定写下这篇题解&#xff0c;也算是复盘一下了 L1本来是打算写的稳妥点&#xff0c;最后在L1-6又想省时间&#xff0c;又忘记了insert&#xff0c;replace这些方法怎么用&#xff0c;也不想花时间写一个文件测试&#xff0c…

编码转换器

大批量转换编码 可以将整个工程文件夹从GB18030转为UTF-8 使用Qt C制作 项目背景 比较老的工程&#xff0c;尤其是keil嵌入式的工程&#xff0c;其文本文件&#xff08;.c、.cpp、.h、.txt、……&#xff09;编码为gb2312&#xff0c;这为移植维护等带来了不便。现在uit-8用…

STL 核心模块

很好&#xff01;你想深入 STL&#xff08;Standard Template Library&#xff09;和容器算法&#xff0c;是学习 C 非常关键的一步。下面我给你整理一份STL 容器 算法的入门指南&#xff0c;适合从零起步掌握这部分内容。 &#x1f31f; 一、STL 核心模块 STL 分为三大块&am…

2024沈阳区域赛,D - Dot Product Game

题目链接 树状数组求逆序对 #include<bits/stdc.h> using namespace std; using lllong long; typedef pair<int,int>PII; typedef priority_queue<int> upq; typedef priority_queue<int,vector<int>,greater<int>> dpq; const int M99…

简易博客点赞系统实现

简易博客点赞系统 好久没写 Java 了&#xff0c;整个简单的项目进行康复训练。 基于 Spring Boot SSM MySQL Mybatis-Plus Knife4j Swagger 的一个简易博客点赞系统 开源地址&#xff1a;https://github.com/FangMoyu/simple-thumb 功能 登录获取当前登录用户获取博客…

一个既简单又诡异的问题

public class DaYaoGuai {static String s;public static void main(String[] args) {Thread t1 new Thread(){Overridepublic void run() {try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}s"深圳";}};t1.start();Thre…