【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。

效果对比:

分享完成~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EasyExcel合并相同内容单元格及动态标题功能的实现

一、最初版本 导出的结果: 对应实体类代码: import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentLoopMerge; import com.al…

markdown文档主题颜色修改

目录 1、选择任意想选择的markdown文档主题css文件: 2、修改背景颜色 1、选择任意想选择的markdown文档主题css文件: 使用工具Typora文件主题路径: C:\Users\AppData\Roaming\Typora\themes,此处我这边就是copy了xydark的css文…

Java 自定义注解

Java 自定义注解, 以及interface Target Retention Around Before After ProceedingJoinPoint JoinPoint 等用法 注解应用非常广泛,我们自定义注解能简化开发各种各种业务 一、关键字解释 (1) 定义注解时,关键字 interface 来表示注解类的类…

高级算法设计与分析(二) -- 递归与分治策略

系列文章目录 高级算法设计与分析(一) -- 算法引论 高级算法设计与分析(二) -- 递归与分治策略 高级算法设计与分析(三) -- 动态规划 未完待续【 高级算法设计与分析(四) -- 贪…

谷歌新款 Pixel 8 更小、更智能!

一、谷歌 Pixel 8 更小、更智能——比去年的 Pixel 7 贵了 100 美元——不是一点点——贵 与 Pixel 7 一样,Pixel同样在今天 8 比正式发布的更大的 Pixel 8 Pro 兄弟产品更小、更便宜。但今年价格有所上涨,128GB 存储型号的 Pixel 8 起售价为 699.99 美…

腾讯云消息队列11月产品月报 | RocketMQ 5.x 国际站上线

2023年 11月动态 消息队列 RocketMQ 版 1、5.x 形态国际站上线 国际站上线 5.x 集群全系列,第一批先开放新加坡和硅谷地域。 控制台链接:https://console.tencentcloud.com/trocketmq 2、 无感迁移能力 支持用户白屏化操作,将自建的 Roc…

夜莺项目发布 v6.5.0 版本,暗黑菜单来了

大家好,夜莺项目发布 v6.5.0 版本,启用新 logo,菜单支持换肤,支持了暗黑版本的菜单,下一步会支持全站暗黑主题,敬请期待,下面是新 logo。 暗黑菜单 页面右上角点击用户名,在下拉框里…

盘点ASO优化过去到现在的进步

ASO优化行业十年老兵报道!从以下几个方面总结了ASO优化的一些变化和进步,给大家分享。 一、优化手段: 过去,ASO优化主要依赖于机刷,通过破解苹果的算法,对苹果账号进行一系列的定向操作行为(搜…

React Jsx转换成真实DOM过程?

面试官:说说React Jsx转换成真实DOM过程? 一、是什么 react通过将组件编写的JSX映射到屏幕,以及组件中的状态发生了变化之后 React会将这些「变化」更新到屏幕上 在前面文章了解中,JSX通过babel最终转化成React.createElement这…

双碳背景下能耗在线监测系统硬件选型详述

Acrel-5000web建筑能耗分析系统是用户端能源管理分析系统,在电能管理系统的基础上增加了对水、气、煤、油、热(冷)量等集中采集与分析,通过对用户端所有能耗进行细分和统计,以直观的数据和图表向管理人员或决策层展示各类能源的使用消耗情况&…

SpringBoot访问外部接口的常见方式

文章目录 SpringBoot访问外部接口模拟服务接口RestTemplatepom.xmlRestTemplateConfigClientTestRestTemplateController.java结果 WebClientpom.xmlClientTestWebClientController.java结果 HttpClientpom.xmlClientTestHttpClientController.java结果 OkHttppom.xmlClientTes…

《数据结构、算法与应用C++语言描述》- 最小赢者树模板的C++实现

赢者树 完整可编译运行代码见:Github::Data-Structures-Algorithms-and-Applications/_30winnerTree 比赛规则 假定有 n 个选手参加一次网球比赛。比赛规则是“突然死亡法”(sudden-death mode):一名选手只要输掉一场球,就被淘汰。一对一对…

【Linux 驱动】Linux设备树(四)—— 设备树驱动LED

有了设备树以后,我们可以将寄存器信息保存到设备树,即便是更换了一个设备,我们也无需修改驱动文件,只需要修改设备树文件并重新编译。 下面介绍两种通过设备树驱动 LED 的最简单的方式,这两种方式的主要是设备树中 re…

自营商城与多商户入驻商城功能与开发流程_OctShop

如今互联网以及电子商务的大趋势下,很多企业或商家都意识到自营商城的重要性。当然,要搭建一个属于自己的自营商城并非简单。需要综合考虑众多的因素,如:用户体验、商品管理、在线支付、功能需求、市场分析等等多个方面。如果是自…

dell服务器 R740xd安装windows server 2019过程记录

公司有两台dell服务器型号是R740xd,增加了存储,更新系统到windows server 2019标准版。 查找了网上的系统安装方式,都没有实践成功,做一下工作记录,给大家做参考。 网络搜索到的两种方式,进行安装 &#x…

全都没有问题(二点五)

java 接口默认方法冲突等问题 基础基础基础 子接口覆盖父接口的默认方法 package com.book;interface AA{public abstract void print();public default void ID(){System.out.println("AA");} } interface BB extends AA{ //接口BB继承AAOverridepublic default…

C#线程的定义和使用方法

引言 在C#编程语言中,线程是一种并发执行的机制,允许程序同时执行多个任务。线程的使用使得我们能够利用计算机的多核处理器,实现程序的并行执行,提高系统的性能和响应能力。本文将详细介绍C#中线程的定义和使用方法,涵…

学习体系结构 - AArch64 虚拟化

学习体系结构 - AArch64 虚拟化 Learn the architecture - AArch64 virtualization Version 1.0 借助 Deepl 翻译文档 个人对文档补充的一部分解释, 仅供学习参考 前 3 章为了解内容,引入虚拟化 第 4-7 章为虚拟化比较核心的内容 第 4 章为第二阶段地址…

windows安装、基本使用vim

标题:windows安装、基本使用vim 1.下载并安装GVIM 百度网盘链接 提取码:2apr 进入安装界面,如下,勾选 其它都是默认即可 参考; 2.在powershell中使用vim 参考blog:window10安装vim编辑器 安装好后&…

机器人制作开源方案 | “校园卫士”-智能巡检机器人

作者:程训聪、柳贺凯、赵坤峰、叶智超、高仁伟 单位:黑龙江科技大学 指导老师:邵文冕、李杨 1. 摘要 针对校园巡检需求设计机器人本体结构,借助Arduino作为控制核心的巡检机器人控制系统构建方法研究了巡检机器人在校园环境下的…