BEVFormer论文详细解读

文章目录

  • 1. 前言
    • 1.1 3D VS 4D
    • 1.2 .特征融合过程中可能遇到的问题
    • 1.3 .BEV提出背景
    • 1.4 .BEV最终得到了什么
    • 1.5 .输入数据格式
  • 2. 背景/Motivation
    • 2.1 为什么视觉感知要用BEV?
    • 2.2 生成BEV视角的方法有哪些?为何选用Transformer呢?
  • 3. Method/Strategy——BEVFormer
    • 3.1 Overall Architecture
    • 3.2 BEV Queries
    • 3.3 SCA: Spatial cross-attention
    • 3.4 TSA: Temporal self-attention
    • 3.5 Application of BEV Features
    • 3.6 Implementation details
  • 4. Experiments
    • 4.1 experimental settings
    • 4.2 3D目标检测结果
    • 4.3 multi-tasks perception results
    • 4.4 消融试验
      • 4.4.1Spatial Cross-attention有效性
      • 4.4.2Temporal Self-attention有效性
      • 4.4.3Model Scale and Latency
  • 5. Discussion

1. 前言

1.1 3D VS 4D

BEV空间的特征我们可以当作是3D的,但是能不能再拓展一步呢?如果再考虑到时间维度,那就是一个4D特征空间了,包括是时序信息时序特征更适合预测速度,轨迹,检测等任务而且还可以进行‘猜想’.
在这里插入图片描述

1.2 .特征融合过程中可能遇到的问题

1.自身运动补偿:车在运动,不同时刻之间的特征要对齐
2.时间差异:不同传感器可能具有时间差,要对齐这部分信息
3.空间差异:最后肯定都要映射到同一坐标系,空间位置特征也要对齐
4.谁去对齐呢?肯定不是手动完成的,这些都交给模型去学习就好了

1.3 .BEV提出背景

1.相当于我们在上帝视角下重构了一个特征空间,空间的大小我们自己定义
2.特征空间相当于一个网格,网格的间隔也可以自己定义,对应精度也会有差异
3.在特征空间中,我们可以以全局的视角来进行预测,特征都给你了,咋用你来定
4.难点:既想做的细致,还想节约计算成本,怎么办?BevFormer它来了

1.4 .BEV最终得到了什么

一个核心:纯视觉解决方案(多个视角摄像头进行特征融合)
两个策略:将Attention应用于时间与空间维度(其实就是对齐特征)
三个节约:Attention计算简化,特征映射简化,粗粒度特征空间
基本奠定了框架结构:时间+空间+DeformableAttention

1.5 .输入数据格式

输入张量(bs,queue,cam,C,H,W)

queue表示连续帧的个数,主要解决遮挡问题

cam表示每帧中包含的图像数量,nuScenes数据集中有6个

C,H,W分别表示图片的通道数,图片的高度,图片的宽度
我们只用这6个视觉的CAM数据.
在这里插入图片描述

2. 背景/Motivation

2.1 为什么视觉感知要用BEV?

相机图像描述的是一个2D像素世界,然而自动驾驶中利用相机感知结果的后续决策、路径规划都是在车辆所处的3D世界下进行。由此引入的2D和3D维度不匹配,就导致基于相机感知结果直接进行自动驾驶变得异常困难

这种感知和决策规划的空间维度不匹配的矛盾,也体现在学开车的新手上。倒车泊车时,新手通过后视镜观察车辆周围,很难直观地构建车子与周围障碍物的空间联系,容易导致误操作剐蹭或需要尝试多次才能泊车成功,本质上还是新手从2D图像到3D空间的转换能力较弱。基于相机图像平面感知结果进行决策规划的自动驾驶AI,就好比缺乏空间理解力的驾驶新手,很难把车开好。

实际上,利用感知结果进行决策和路径规划,问题还出现在多视角融合过程中:在每个相机上进行目标检测,然后对目标进行跨相机融合。如2021 TESLA AI Day给出的图1,带拖挂的卡车分布在多个相机感知野内,在这种场景下试图通过目标检测和融合来真实地描述卡车在真实世界中的姿态,存在非常大的挑战。
在这里插入图片描述

图1. 拖挂卡车在多相机中的成像

为了解决这些问题,很多公司采用硬件补充深度感知能力,如引入毫米波雷达或激光雷达与相机结合,辅助相机把图像平面感知结果转换到自车所在的3D世界,描述这个3D世界的专业术语叫做BEV map或BEV features(鸟瞰图或鸟瞰图特征),如果忽略高程信息,就把拍扁后的自车坐标系叫做BEV坐标系(即鸟瞰俯视图坐标系)。
但另外一些公司则坚持不引入深度感知传感器,他们尝试从本质入手,基于视觉学习得到从图像理解空间的能力,让自动驾驶AI系统更像老司机,例如TESLA。Elon Musk认为:人类不是超人,也不是蝙蝠侠,不能够眼放激光,也没安装雷达,但是通过眼睛捕捉到的图像,人类反复练习就可以构建出对周围世界的3D空间理解能力从而很好地掌握驾驶这项能力,那么要像人一样单纯利用眼睛(相机)进行自动驾驶就必须具备从2D图像平面到3D自车空间(BEV)的转换能力。
传统获取BEV map/features的方法有局限性,它一般是利用相机外参以及地面平面假设,即IPM(Inverse Perspective Mapping)方法,将图像平面的感知结果反投影到自车BEV坐标系。Tesla以前的方案也是这样,然而当车辆周围地面不满足平面假设,且多相机视野关联受到各种复杂环境影响的时候,这类方法就难以应付。
针对IPM方法获取BEV遇到的困难,TESLA自动驾驶感知负责人Andrej Karparthy的团队直接在神经网络中完成图像平面到BEV的空间变换,这一改变成为了2020年10月发布的FSD Beta与之前Autopilot产品最显著的差别。TESLA利用Transformer生成BEV Featrues,得到的Features通道数是256(IPM方法最多保留RGB3个channel),这样能极大程度地保留图像信息,用于后续基于BEV Features的各种任务,如动、静态目标检测和线检测等。

2.2 生成BEV视角的方法有哪些?为何选用Transformer呢?

把相机2D平面图像转换成BEV视角的方法有两种:视觉几何方法和神经网络方法。

视觉几何方法:基于IPM进行逐像素几何投影转换为BEV视角,再对多个视角的部分BEV图拼接形成完整BEV图。此方法有两个假设:1.路面与世界坐标系平行,2.车辆自身的坐标系与世界坐标系平行。前者在路面非平坦的情况下并不满足,后者依赖车辆姿态参数(Pitch和Roll)实时校正,且精度要求较高,不易实现。

神经网络方法:用神经网络生成BEV,其中的关键要找到合适的方法实现神经网络内部Feature Map空间尺寸上的变换。

实现空间尺寸变换的神经网络主流操作有两种方法,如图2所示:MLP中的Fully Connected Layer和Transformer Cross Attention(图片引用自《超长延迟的特斯拉AI Day解析:讲明白FSD车端感知》)。
在这里插入图片描述

图2. MLP和Transformer实现空间变换的对比

在这里插入图片描述
TESLA在2021年AI Day上仅介绍了用Transformer转换BEV Features的技术思想,并未披露更多实现细节。论文BEVFormer充分研究了TESLA的技术思想后,利用Transformer融合图像的时、空特征,得到BEV Features,与TESLA的关键方法、实现效果都非常接近。BEVFormer既通过论文披露了详尽方法,又在2022年6月开源了工程,接下来就围绕BEVFormer介绍如何通过Transformer获取BEV Features。

3. Method/Strategy——BEVFormer

3.1 Overall Architecture

如下图3所示:BEVFormer主体部分有6层结构相同的BEVFormer encoder layers,每一层都是由以transformer为核心的modules(TSA+SCA),再加上FF、Add和Norm组成。BEVFormer encoder layer结构中有3个特别的设计:BEV Queries, Spatial Cross-attention(SCA)和Temporal Self-attention(TSA)。其中BEV Queries是栅格形可学习参数,承载着通过attention机制在multi-camera views中查询、聚合的features。SCA和TSA是以BEV Queries作为输入的注意力层,负责实施查询、聚合空间features(来自multi-camera images)和时间features(来自历史BEV)的过程。

下面分步骤观察BEV完整模型的前向推理过程:
在这里插入图片描述
在这里插入图片描述

图3. BEVFormer架构

3.2 BEV Queries

BEVFormer采用显性定义BEV的方式,BEV Queries就是其中的显性BEV features。

可从3个概念循序渐进地认识/理解BEV Queries:BEV平面 → BEV 感知空间 → BEV Queries
在这里插入图片描述
在这里插入图片描述

3.3 SCA: Spatial cross-attention

如上图(b)所示,作者设计了一种空间交叉注意力机制,使 BEV queries 从多个相机的image Features中提取所需信息并转换为BEV Features。

每个BEV栅格的query在image features的哪些范围提取信息呢?这里有3个方案:

一、从image features的所有点上提取信息,即global attention。

二、从BEV栅格在image features的投影点上提取信息。

三、从BEV栅格在image features的投影点及其周围取信息,即deformable attention。

由于使用了多尺度图像特征和高分辨率 BEV 特征(200x200),如果采用方案一 global attention ,会带来无法负担的计算代价(显存和计算复杂度)。但是,方案一完全用不到相机内外参,这算是它独有的优势。

方案二依赖非常精确的相机内、外参,且不能充分利用image features上的局部区域信息。
在这里插入图片描述
在这里插入图片描述

3.4 TSA: Temporal self-attention

在这里插入图片描述
在这里插入图片描述
综合3.3和3.4节,观察6个 BEVFormer Encoder Layers的完整结构会发现, BEV query 既能通过 spatial cross-attention 聚合空间特征,又能通过 temporal self-attention 聚合时序特征,这个过程会重复多次,让时空特征融合能够相互促进,最终得到更好的融合BEV features。

3.5 Application of BEV Features

在这里插入图片描述

3.6 Implementation details

在这里插入图片描述

4. Experiments

4.1 experimental settings

在这里插入图片描述

4.2 3D目标检测结果

BEVFormer的3D检测性能,如Table1、Table2和Table3所示,远超之前最优方法DETR3D。

BEVFormer引入了temporal information,因此它在估计目标速度方面效果也很好。从速度估计指标mean Average Velocity (mAVE)来看,BEVFormer误差为0.378m/s,效果远好于同类基于相机的方法,甚至逼近了基于激光的方法。
在这里插入图片描述
在这里插入图片描述

4.3 multi-tasks perception results

联合训练3D detection和map segmentation任务,与单独训练比较训练效果,如Table4所示:对3D目标检测和分割中的车辆类语义感知,联合训练效果有提升;对分割中的road、lane类的语义感知,联合训练效果反而会下降。
在这里插入图片描述

4.4 消融试验

4.4.1Spatial Cross-attention有效性

为了验证SCA的有效性,利用不包含TSA的BEVFormer-S来设计消融试验,结果如Table5所示。

默认的SCA基于deformable attention,在对比试验中构建了基于2种不同attention机制的baselines:1. 用global attention取代deformable attention;2. 让每个query仅与它的图像参考点交互,而不是像SCA那样query与图像参考点周围区域交互。为了扩大对比范围,把BEVFormer中的BEV生成方法替换为了VPN和Lift-Spalt中的方法。从Table5结果可见Deformable Attention方法显著优于其它方法,且在GPU Memory使用量和query兴趣区域大小之间实现了balance。
在这里插入图片描述

4.4.2Temporal Self-attention有效性

从Table1和Table4可见,在相同的设置下,BEVFormer相比于BEVFormer-S的性能大幅提升,针对有挑战性的检测任务提升更明显。TSA主要是在以下方面影响性能提升的:1.temporal information的引入对提高目标速度估计精度非常有益;2.利用temporal information,目标预测的location和orientations更精确;3.受益于temporal information包含过去时刻object的信息,如图4所示,严重遮挡目标的recall 更高。根据nuScenes标注的遮挡程度把验证数据集进行划分成4部分,来评估BEVFormer对各种程度遮挡的性能,针对每个数据子集都会计算average recall(匹配时把中心距离的阈值设为2m)。
在这里插入图片描述

图5. BEVFormer中TSA对不同程度遮挡目标的检测性能分析

4.4.3Model Scale and Latency

针对不同Scale Settings的BEVFormer,对比检测性能和latency,结果如Table6所示。在3方面进行BEVFormer的Scale配置:1. 输入到BEVFormer Encoder的features是multi-scale还是single-scale;2.BEV Queries/features的尺寸;3. encoder layer数目。
在这里插入图片描述
从实验结果看来:Backbone的Latency远大于BEVFormer,因此Latency优化的主要瓶颈在于Backbone而不是BEVFormer(这里指BEVFormer Encoder部分),BEVFormer可以采用不同的Scale,具备支持灵活平衡性能和efficiency的特性。

5. Discussion

1.理论上视觉图像的数据比激光数据稠密,但基于视觉的BEV效果还是比基于激光的方法性能差,那么也说明了理论上视觉还有可提升空间。
2.BEV Features能用于泊车位检测么? 可能可以用BEVFormer在环视鱼眼相机上生成BEV features,用于泊车位检测或近距离目标的精确检测。
3.显性地引入BEV 特征,限制了最大检测距离,在高速公路场景,检测远处目标非常重要,如何权衡BEV的大小与检测距离是一个需要考虑的问题。
4.如何在检测精度和grid大小之间做平衡是一个问题。

针对2、3问题的一个优化方向:设计自适应尺寸的BEV特征。这里的自适应是指根据场景来调整BEV尺寸或精度。

参考文档:https://zhuanlan.zhihu.com/p/538490215

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

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

相关文章

Vapor Mode:Vue.js 的速度与激情,代码界的闪电侠

大家好,我是宝哥。 在快速发展的网络开发世界中,创新的Vue.js团队给我们带来了Vapor Mode。这个新模式优化了Vue的核心渲染过程,帮助我们的应用程序像轻烟一样运行,开发者无需深入复杂的优化工作。 在这篇文章中,我们将…

【微积分】Grant Sanderson

梯度:将各个偏导打包 定义:direction of steepest ascent 梯度向量的长度:最速上升方向的陡峭程度 方向导数:偏导的一种拓展 【托马斯微积分学习日记】13.1-线积分_哔哩哔哩_bilibili 概述 16.1line integrals of scalar funct…

直播预告:TinyVue 组件库实战解析,提升组件库构建技能!

在复杂的编码世界里,大家总希望能够寻找更高效、更简洁的解决方案来优化工作流程,提升开发效率。在5月28日晚7点 OpenTiny B站直播间,OpenTiny 非常荣幸地为大家带来一场关于 TinyVue 组件库实战分享的直播。届时,TinyVue 组件库成…

openEuler系统通过shell脚本安装openGauss 5.0.0企业版

上次提到的开机自启动的配置,获得了LD的称赞,然而LD的要求,都是“既得陇复望蜀”的,他又期望我们能实现openGauss安装的“自动化”,于是尝试了下用shell脚本部署,附件中的脚本实测有效,openEule…

图论(二)-图的建立

引言: 建图,将图放进内存的方法 常用的建图方式:邻接矩阵,邻接链表,链式前向星 一、邻接矩阵 通过一个二维数组即可将图建立,邻接矩阵,考虑节点集合 ,用一个二维数组定义邻接矩…

迭代器模式(行为型)

目录 一、前言 二、迭代器模式 三、总结 一、前言 迭代器模式(Iterator Pattern)是一种行为型设计模式,提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。总的来说就是分离了集合对象的遍历行为,抽象出…

gcc -m32 一堆报错:No such file or directory

问题:终端执行命令gcc -m32 *.c -o xxx.so 出现一堆缺失文件的报错。 解决办法:库没装全,终端执行下面的命令。 sudo apt install gcc-multilib

【设计模式】JAVA Design Patterns——Command(事务模式)

🔍目的 将请求封装为对象,从而使你可以将具有不同请求的客户端参数化,队列或记录请求,并且支持可撤销操作。 🔍解释 真实世界例子 有一个巫师在地精上施放咒语。咒语在地精上一一执行。第一个咒语使地精缩小&#xff0…

LabVIEW步开发进电机的串口控制程序

LabVIEW步开发进电机的串口控制程序 为了提高电机控制的精确度和自动化程度,开发一种基于LabVIEW的实时、自动化电机串口控制程序。利用LabVIEW软件的图形化编程特性,通过串口实时控制电机的运行参数,实现电机性能的精准控制与评估。 系统组…

nginx+nginx-http-flv-module在Linux服务器搭建

需求 在服务器搭建点播/视频平台的话需要在服务器搭建nginx和rtmp模块 rtmp模块 rtmp 模块有 nginx-rtmp-module ,但是我们这里使用 nginx-http-flv-module 来替代。因为后者是基于前者开发的,前者拥有的功能后者都有,后者是国内的开发开…

基于PostGIS的mvt动态矢量切片的后台地图服务和前端调用

目录 一、背景 二、矢量切片 三、Mapbox的矢量切片格式 四、PostGIS生成矢量切片 ST_AsMVT: ST_AsMVTGeom: 五、导入试验数据 六、编写PostGIS函数 七:Java后端实现 八、Openlayers前端调用 一、背景 矢量切片技术目前已成为互联网地图的主流技术,无论是Mapbox还…

Vue.Draggable:强大的Vue拖放组件技术探索

一、引言 随着前端技术的不断发展,拖放(Drag-and-Drop)功能已经成为许多Web应用不可或缺的一部分。Vue.js作为现代前端框架的佼佼者,为开发者提供了丰富的生态系统和强大的工具链。Vue.Draggable作为基于Sortable.js的Vue拖放组件…

Slash后台管理系统源码阅读笔记 后面面板中的折线图统计卡片是怎么实现的?

之前的笔记发表在博客和公众号以后,得到了一部分同学的喜爱的认可,所以今天继续。 目前这个管理系统的代码已经处理了一小部分: 接下来,我们看看第二栏那三个折线图统计卡片是怎么实现的。 这三个卡片还是使用的 antd 一行三列…

2024年电工杯高校数学建模竞赛(A题) 建模解析| 园区微电网风光储协调优化配置

问题重述及方法概述 问题1:各园区独立运营储能配置方案及其经济性分析 经济性分析采用成本-效益分析方法,计算购电量、弃风弃光电量、总供电成本和单位电量平均供电成本等指标。 问题2:联合园区储能配置方案及其经济性分析 经济性分析采用成…

二叉搜索树与双向链表(C++)

文章目录 1. 题目描述2.题目解析 题目来源: 牛客网…二叉搜索树与双向链表 1. 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示 数据范围:输入二叉树的节点数 0≤n≤1000,二叉树中每个节点的值…

klinecharts自定义覆盖物

import { registerFigure, registerOverlay } from "klinecharts";registerFigure({name: "custom_graphics",checkEventOn: (coordinate, attrs) => {// 当前鼠标坐标,判断事件是否可用const { x: px, y: py } = coordinate;const { x, y, r } = attr…

重生之while在鸣潮学习HTML标签

个人主页&#xff1a;终端 HTML标签 目录 2.1标题标签 2.2段落标签 2.3换行标签 2.4列表标签 2.5超链接标签 2.6图片标签 2.7表格标签 2.8-2.9表单标签&表单项 2.10布局相关标签 2.11特殊字符 2.1标题标签 标题标签 代码 <h1>鸣</h1> <h2>潮<…

高弹性架构的微服务设计模式

长期以来&#xff0c;开发人员一直使用单片架构&#xff0c;而且长期以来&#xff0c;这种架构一直有效。不幸的是&#xff0c;这些架构使用的部件较少&#xff0c;但体积较大&#xff0c;这意味着如果一个部件发生故障&#xff0c;它们更有可能整体失效。通常&#xff0c;这些…

golang session实现库 支持cookie, redis,mysql等多种存储方式

golang中官方是不支持session的&#xff0c; 如果想要实现session则需要自己动手来实现&#xff0c;或者使用第三方的go-session实现库&#xff0c; 今天就给大家介绍一个go语言的第三方session实现库 go-sessions&#xff0c;支持 的存储方式有 cookie, file, redis, mysql等众…

学习Java的日子 Day49 函数,DOM

Day48 1.流程控制语句 if else for for-in(遍历数组时&#xff0c;跟Java是否一样) While do while break 语句用于跳出循环 continue 用于跳过循环中的一个迭代 2.函数 2.1 JavaScript 函数语法 函数就是包裹在花括号中的代码块&#xff0c;前面使用了关键词 function funct…