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

【BEV感知】BEVFormer 融合多视角图形的空间特征和时序特征 ECCV 2022

前言

本文分享BEV感知方案中,具有代表性的方法:BEVFormer。

它基于Deformable Attention,实现了一种融合多视角相机空间特征时序特征端到端框架,适用于多种自动驾驶感知任务。

主要由3个关键模块组成:

  • BEV Queries Q:用于查询得到BEV特征图
  • Spatial Cross-Attention:用于融合多视角空间特征
  • Temporal Self-Attention:用于融合时序BEV特征

基本思想:使用可学习的查询Queries表示BEV特征查找图像中的空间特征先前BEV地图中的时间特征

采用3D到2D的方式,先在BEV空间初始化特征,通过在BEV高度维度“升维”形成3D特征。再通过映射关系,使用多层transformer与每个图像2D特征进行交互融合,最终再得到BEV特征。

论文地址:BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers

代码地址:https://github.com/fundamentalvision/BEVFormer 

一、框架思路

看看BEVFormer的设计思路,它使用可学习的查询Queries表示BEV特征。BEV Queries是一种栅格形状的可学习参数,它通过注意力机制在多视角图像中查询和聚合特征。

通过BEV Queries,查找图像中的空间特征先前BEV地图中的时间特征,得到融合和更新后查询特征,也就是BEV特征。

一开始得到BEV特征并不准确,通过不断融合特征和更新后,得到的BEV Queries也就是准确的BEV特征了。

下面看看BEVFormer的框架思路,可以分为7步组成,如下图所示:

  • 输入多视角图像,经过主干网络提取图像特征,形成多视角特征图。
  • 通过BEV Queries,首先查询先前时序的BEV特征,融合对应的特征再融合图像的空间特征
  • 融合了时间和空间特征的BEV Queries,也就是BEV特征。
  • BEV特征后面接不同任务头,比如:3D检测、BEV分割、轨迹预测等等。

BEVFormer的主体由6层结构相同的编码器层组成,每一层都是基于:

  • 时序自注意力(Temporal Self-attention)
  • 加法(Add)标准化(Norm)
  • 空间交叉注意力(Spatial Cross-attention)
  • 加法(Add)标准化(Norm)
  • 前馈网络(Feed Forward)
  • 加法(Add)标准化(Norm)

详细分析模型前向推理过程:

  1. 在时间点t,将车辆上多个视角的相机图像输入到主干网络中,输出各图像的多尺度特征,表示为 F_{t}^{i},其中 i 是第i个视角相机的特征, n是相机视角的总数。同时,保留时间点t-1的BEV特征 BEV _{t-1}

  2. 在每个BEVFormer编码器层中,首先使用BEV Queries Q 通过时间自注意力(Temporal Self-attention, TSA)模块从BEV _{t-1}中查询并融合时域信息,得到修正后的BEV Queries Q′。

  3. 然后,对TSA修正过的BEV Queries Q′,通过空间交叉注意力(Spatial Cross-attention, SCA)模块从多摄像头特征F_{t}^{i}中查询并融合空间信息,得到进一步修正的BEV Queries Q′′。

  4. 将经过两次修正的BEV Queries Q′′ 输入到前馈网络计算,然后输出,作为下一个编码器层的输入。

  5. 如此堆叠6层,即经过6轮微调,时间点t的统一BEV特征 BEV _{t} 就生成了。

  6. 最后,将BEV特征作为任务头的输入,比如:3D检测头和地图分割头。

二、关键设计——BEV Queries 查询得到BEV特征图

BEV平面(Bird's-Eye View,鸟瞰视图)是一个以车辆自身为中心的,被划分成许多小方格的二维平面

这个平面的高度H和宽度W代表了:在x轴(横向)和y轴(纵向)上的栅格数量。

BEV平面直观地反映了车辆周围的物理空间,其中每个小方格代表现实世界中的一定面积,例如s米。

比如针对nuScenes数据集,可能会定义BEV平面的栅格尺寸为200x200,这意味着这个平面可以覆盖从车辆中心向各个方向延伸51.2米的区域。在这种情况下,每个小方格(栅格)代表的实际面积是0.512米。

关键要的:

1、BEV Queries是一组预先定义的、具有栅格形状的可学习参数, 维度是H*W*C,用来捕获围绕自车的BEV特征。

简单来说,一旦学习完成,BEV Queries就会变成BEV features,即鸟瞰视图特征。

2、BEV Queries的高度H和宽度W,与BEV平面在x轴(横向)和y轴(纵向)的栅格尺寸保持一致,这意味着它们也具有与BEV平面类似的特性,即直观地映射车辆周围的物理空间。

然而,BEV Queries的C维,即在通道(channel)维度上的尺寸,并不直接对应于BEV平面z轴的物理空间尺寸。

3、每个位于(x, y)位置的query都仅负责表征其对应的小范围区域。轮番查询“空间信息”和“时间信息”,生成BEV特征图。

重点:BEV Queries在模型中经过连续的微调和转换,最终成为BEV features。

三、核心内容——Spatial Cross-Attention融合多视角空间特征

通过BEV Queries查询和融合空间信息,BEV Queries表示整幅栅格图,BEV Query表示其中一个网格,步骤如下:

  1. 将每个BEV Query拉升为一个支柱。在z方向进行lift操作,预测该网格的离散高度形成N个高度值预定义它们对应的高度范围是-5m到3m。结合该网格的x,y坐标,生成N个3D参考点。
  2. 通过相机内外参,将柱子中的3D参考点投影到视图中得到2D点,数量记为V_num。正常一个3D参考点,对应1~2幅多视图,毕竟不能所有相机都看到同一个物体。
  3. 从命中视图中的区域中采样特征。采用Deformable Attention,把像平面上的这些投影点作为2D图像参考点在其周围进行特征采样
  4. 最后,每个3D参考点有V_num个特征图,进行加权求和。每个网格有N个3D参考点,形成的特征图,进行加权求和,最终输出多视角空间特征。

如下图所示,一个3D参考点(x, y, z),投影到多视角图中,只有2幅是对应的。这样很正常,毕竟相机是四周安装的,不可能所有相机都看到同一个物体。

四、核心内容——Temporal Self-Attention融合时序BEV特征

受到经典的循环神经网络(RNN)的启发,BEV特征 B _{t}可以被视作一种能够传递序列信息的“记忆体”。

在这种框架下,每一个时刻生成的BEV特征B_{t} 都是基于上一时刻的BEV特征 B_{t-1}获取所需的时序信息

  • 这种方法的优势在于,它能够动态地获取所需的时序特征,而不是像简单地堆叠不同时刻的BEV特征那样,仅能获取固定长度的时序信息。
  • 这种动态获取时序特征的方式使得BEV特征能够更加有效地反映出环境的动态变化,比如车辆的移动或周围环境的变化。

融合时序BEV特征,通过BEV Queries 查询时间信息,步骤如下:

  1. 根据自我运动对齐两个时刻的BEV图。两个时刻是指上一时刻和当前时刻。目前是使得相同索引位置的栅格对应于现实世界中的同一位置
  2. 过去时刻BEV图的和当前采样特征
  3. 对过去和当前BEV图中采样的特征进行加权求和。
  4. 使用RNN风格迭代收集历史BEV图特征。

 思路流程:

  • 在给定时间点t-1的BEV特征B_{t-1}的情况下,首先需要根据自我运动(ego motion)将B_{t-1}对齐到时间点t
  • 这个对齐过程确保了B_{t-1}B_{t} 在相同索引位置的栅格对应于现实世界中的同一位置。这样对齐后的BEV特征记作 {B_{t-1}}^{'}
  • 在时间点t,位于网格中A处的BEV query所代表的物体可能是静态的(不动的)或者是动态的(在移动中)。
  • 这个物体在时间点t-1会出现在{B_{t-1}}^{'}的 A周围。因此,为了采集特征,使用可变形注意力机制(deformable attention)以 A为参考点,在其周围进行特征采样

通过这种方式,模型能够更加准确地捕捉到物体随时间的动态变化。

可变形注意力允许模型关注于相邻时刻在空间上对应但位置可能略有变化的特征,从而有效地捕捉动态物体的运动轨迹和静态物体的稳定性。

这种方法在处理时序数据时,特别是在动态和复杂的环境中,如自动驾驶场景下,显得尤为重要和有效。

五、任务头

得到的BEV特征用于后面的感知任务,具体以下特征。

  • 多任务学习:3D目标检测和地图语义分割。
  • 可迁移性:常用的2D检测头,都可以通过很小的修改迁移到3D检测上。

在3D目标检测方面,论文借鉴了2D目标检测器Deformable DETR(可变形的DEtection TRansformer)的设计思路,并发展出了一种端到端的3D目标检测头。这种检测头的修改和特点包括:

  1. 输入:使用单尺度的BEV特征 作为检测头的输入。这与Deformable DETR通常使用多尺度特征的做法不同。

  2. 预测输出:与预测2D边界框不同,3D目标检测头预测3D边界框和物体的速度。。

  3. 候选目标集合:继承DETR方法的优势,在预测时生成有限数量的候选目标集合。在开源工程中,这个集合的大小通常设置为300个目标。

  4. 无需NMS后处理:由于这种end-to-end的检测头直接预测目标集合,因此不需要传统的非极大值抑制(Non-Maximum Suppression, NMS)后处理。这是一个显著的优势,因为NMS通常是目标检测流程中的一个复杂且效率较低的步骤。

在地图分割方面,论文参考了2D分割方法Panoptic SegFormer来设计map segmentation head。

基于BEV的地图分割在本质上与常见的语义分割任务类似。作者采用了以下关键设计:

  1. Mask Decoder:使用mask decoder,这是一种专门用于分割任务的解码器,能够有效地处理不同尺寸的特征图,并产生准确的分割mask。

  2. Class-Fixed Queries:采用类别固定的查询(class-fixed queries)设计。这种设计方式允许模型为每个特定的语义类别(如汽车、车辆、道路可通行区域和车道线)生成特定的查询。这些查询随后被用于查找和分割图像中对应的对象或区域。

通过这种方式,map segmentation head可以有效地对各种道路和交通元素进行精确的分割,如区分车辆、道路、车道线等。这种方法的优势在于,它能够直接从BEV特征中提取出复杂的道路和交通场景信息,为自动驾驶车辆提供准确的环境理解和导航信息。

六、训练和推理设计

训练设计:

  1. 时间选择:对于给定的时间点t,在过去2秒内随机选择3个时刻,分别是t-3、t-2和t-1。

  2. BEV特征生成:在这3个初始时刻,循环生成BEV特征集 { B_{t-3}, B_{t-2}​, B_{t-1} }。在此阶段,不计算梯度,即不进行反向传播优化。

  3. Temporal Self-Attention的特殊情况:在计算第一个时刻t-3的temporal self-attention输出时,由于它之前没有BEV特征,因此使用它自身的特征作为前序时刻的输入。在这种情况下,temporal self-attention暂时退化成了普通的self-attention。

推理设计: 

  1. 时间序列处理:在推理过程中,按照时间顺序计算图像序列中的每一帧。

  2. BEV特征的持续利用:前序时刻的BEV特征被保持并用于后续时刻的处理。这样,模型在每个时刻都能利用之前时刻的信息。

  3. 在线推理策略:这种按时间顺序处理并保留前序BEV特征的方法是一种在线(online)推理策略。这种策略在实际应用中通常更高效,因为它能够实时处理连续的输入数据,并持续更新对环境的理解。

七、实现测试与效果

在论文中,针对BEV模型的实现和实验,采取了以下关键的配置和设计决策:

Backbone的选择:

  1. ResNet101-DCN:使用了从FCOS3D训练得到的参数。
  2. VoVnet-99:采用了从DD3D训练得到的参数。

多尺度特征和FPN输出:

  • 默认情况下,使用FPN(Feature Pyramid Network)输出的多尺度特征,其尺寸包含1/16、1/32、1/64。值得注意的是,在代码中实际上使用了1/8尺寸的特征,例如nuScenes数据集中的116x200的FPN输出。
  • 同时,将维度C(通道数)设置为256。

BEV Queries的尺寸设置:

  • 在nuScenes数据集实验中,BEV queries的尺寸设置为200x200,对应在x和y方向的感知范围均为[-51.2m, 51.2m],BEV Grid的尺寸精度为0.512m。
  • 在Waymo数据集实验中,BEV queries的尺寸设置为300x220,x方向的感知范围为[-35.0m, 75.0m],y方向为[-75.0m, 75.0m],BEV Grid的尺寸精度为0.5m。自车中心位于BEV的(70,150)位置。

Spatial Cross-Attention模块:

  • 对每个BEV query,在spatial cross-attention模块中设置 N 个3D参考点,预定义它们对应的高度范围是-5m到3m。

采样点的选择:

  • 对每个2D图像参考点(即3D参考点在2D视图上的投影点),在其周围选取4个采样点送入Spatial Cross-Attention。

训练配置:

  • 默认情况下,训练24个epoch,学习率设定为一个特定值。

Baselines的选择:

  • 为了合理评估task heads的影响并与其他生成BEV方法进行公平比较,选择了VPN和Lift-Splat作为baselines。在这些baseline模型中,保留了原有的task heads和其他设置,但将它们head之前的部分替换为BEVFormer。

BEVFormer的静态版本:

  • 在论文中,通过将temporal self-attention修改为普通的self-attention,从而将BEVFormer转变为一个静态模型,命名为BEVFormer-S。这个版本不使用历史BEV Features。

效果对比:

分享完成~

相关文章:

【BEV感知】BEVFormer 融合多视角图形的空间特征和时序特征 ECCV 2022

前言 本文分享BEV感知方案中,具有代表性的方法:BEVFormer。 它基于Deformable Attention,实现了一种融合多视角相机空间特征和时序特征的端到端框架,适用于多种自动驾驶感知任务。 主要由3个关键模块组成: BEV Que…...

Amazon Toolkit — CodeWhisperer 使用

tFragment--> 官网:https://aws.amazon.com/cn/codewhisperer/?trkcndc-detail 最近学习了亚马逊云科技的 代码工具,感慨颇多。下面是安装 和使用的分享。 CodeWhisperer,亚马逊推出的实时 AI 编程助手,是一项基于机器学习…...

Flink SQL填坑记2:Flink和MySQL的Bigdata类型不同导致ClassCastException报错

最近在开发Flink SQL的时候,需要关联Kafka事实表和MySQL维表,得到的数据写入Phoenix表中,但是其中有个字段,Kafka表、MySQL表和Phoenix表都是BigData类型,但是在实现的时候却报“java.math.BigInteger cannot be cast to java.lang.Long”异常,从报错信息来看,是由于Big…...

本地MinIO存储服务如何创建Buckets并实现公网访问上传文件

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 前言 MinIO是一款高性能、分布式的对象存储系统,它可以100%的运行在标准硬件上,即X86等…...

通过https协议访问Tomcat部署并使用Shiro认证的应用跳转登到录页时协议变为http的问题

问题描述: 在最近的一个项目中,有一个存在较久,并且只在内部城域网可访问的一个使用Shiro框架进行安全管理的Java应用,该应用部署在Tomcat服务器上。起初,应用程序可以通过HTTP协议访问,一切运行都没…...

Backend - Django 项目创建 运行

目录 一、配置环境 二、创建 Django 项目 (一)新建文件夹 (二)打开文件夹 (三)打开运行终端 (四)创建基础项目 (五)创建app 1. 安装Django &#xf…...

C# .Net学习笔记—— Expression 表达式目录树

一、什么是表达式目录树 (1)Expression我们称为是表达式树,是一种数据结构体,用于存储需要计算,运算的一种结构,这种结构可以只是存储,而不进行运算。通常表达式目录树是配合Lambda一起来使用的…...

《论文阅读28》Unsupervised 3D Shape Completion through GAN Inversion

GAN,全称GenerativeAdversarialNetworks,中文叫生成式对抗网络。顾名思义GAN分为两个模块,生成网络以及判别网络,其中 生成网络负责根据随机向量产生图片、语音等内容,产生的内容是数据集中没有见过的,也可…...

一个正则快速找到在ES中使用profile的时产生慢查询的分片

在es中使用profile分析慢查询的时候,往往因为分片过多,或者因为查询条件太复杂,分析的结果几十万行。在kibana上点半天,也找不到一个耗时长的分片。 kibana上可以通过正则来匹配。其实我们只需要匹配到耗时大于10秒的请求。 检索语…...

链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)

在上一篇文章中,我们探索了顺序表这一基础的数据结构,它提供了一种有序存储数据的方法,使得数据的访 问和操作变得更加高效。想要进一步了解,大家可以移步于上一篇文章:探索顺序表:数据结构中的秩序之美 今…...

Python tkinter控件全集之组合选择框 ttk.ComboBox

Tkinter标准库 Tkinter是Python的标准GUI库,也是最常用的Python GUI库之一,提供了丰富的组件和功能,包括窗口、按钮、标签、文本框、列表框、滚动条、画布、菜单等,方便开发者进行图形界面的开发。Tkinter库基于Tk for Unix/Wind…...

Axure之中继器的使用(交互动作reperter属性Item属性)

目录 一.中继器的基本使用 二.中继器的动作(增删改查) 2.1 新增 2.2 删除 2.3 更新行 2.4 效果展示 2.5 模糊查询 三.reperter属性 在Axure中,中继器(Repeater)是一种功能强大的组件,用于创建重复…...

数字化医疗新篇章:构建智能医保支付购药系统

在迎接数字化医疗时代的挑战和机遇中,智能医保支付购药系统的建设显得尤为重要。本文将深入介绍如何通过先进的技术实现,构建一套智能、高效的医保支付购药系统,为全面建设健康中国贡献力量。 1. 引言 随着医疗科技的飞速发展,…...

11_12-Golang中的运算符

**Golang **中的运算符 主讲教师:(大地) 合作网站:www.itying.com** **(IT 营) 我的专栏:https://www.itying.com/category-79-b0.html 1、Golang 内置的运算符 算术运算符关系运算符逻辑运…...

k8s-ingress特性 9

TLS加密 创建证书 测试访问 auth认证 创建认证文件 rewrite重定向 进入域名时,会自动重定向到hostname.html 示例: 测试 版本的升级迭代,之前利用控制器进行滚动更新,在升级过程中无法做到快速回滚 更加平滑的升级&#xff1…...

【redis】redis系统实现发布订阅的标准模板

目录 简介参数配置代码模板 简介 Redis发布订阅功能是Redis的一种消息传递模式,允许多个客户端之间通过消息通道进行实时的消息传递。在发布订阅模式下,消息的发送者被称为发布者(publisher),而接收消息的客户端被称为…...

Python 时间日期处理库函数

标准库 datetime >>> import datetime >>> date datetime.date(2023, 12, 20) >>> print(date) 2023-12-20 >>> date datetime.datetime(2023, 12, 20) >>> print(date) 2023-12-20 00:00:00 >>> print(date.strfti…...

第二十二章 : Spring Boot 集成定时任务(一)

第二十二章 : Spring Boot 集成定时任务(一) 前言 本章知识点: 介绍使用Spring Boot内置的Scheduled注解来实现定时任务-单线程和多线程;以及介绍Quartz定时任务调度框架:简单定时调度器(Simp…...

关于“Python”的核心知识点整理大全32

目录 12.6.4 调整飞船的速度 settings.py ship.py alien_invasion.py 12.6.5 限制飞船的活动范围 ship.py 12.6.6 重构 check_events() game_functions.py 12.7 简单回顾 12.7.1 alien_invasion.py 12.7.2 settings.py 12.7.3 game_functions.py 12.7.4 ship.py …...

【krita】实时绘画 入门到精通 海报+电商+装修+人物

安装插件 首先打开comfyUI,再打开krita,出现问题提示, 打开 cd custom_nodes 输入命令 安装控件 git clone https://github.com/Acly/comfyui-tooling-nodes.git krita基础设置 设置模型 设置lora (可设置lora强度 增加更多…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...