BEVFormer 论文学习

news2024/11/27 19:39:50

1. 解决了什么问题?

3D 视觉感知任务,包括基于多相机图像的 3D 目标检测和分割,对于自动驾驶系统非常重要。与基于 LiDAR 的方法相比,基于相机图像的方法能够检测到更远距离的目标,识别交通信号灯、交通标识等信息。有一些方法使用单目画面,然后进行跨相机的后处理操作;这类方法的缺点就是各图像是分开处理的,无法取得跨相机的画面信息,因而效果和效率都比较差。

与单目方法相比,BEV 是表示周围环境的常用方法,它能清晰呈现目标的位置和大小,适合自动驾驶感知和规划任务。但现有的基于 BEV 的检测方法所提供的 BEV 特征要么不够鲁棒,无法准确地预测 3D 目标;要么深度信息不够准确。

人类视觉系统会通过时间信息推理出目标的运动状态与被遮挡物体,但现有的方法很少考虑时间信息。在驾驶过程中,目标移动速度很快,直接使用各时间戳的 BEV 特征,会增加计算成本与干扰信息,因此不是最佳的。

2. 提出了什么方法?

本文提出了 BEVFormer,一个基于 transformer 的 BEV encoder,通过预先定义的网格状 BEV queries 实现信息在时间和空间内的交互。BEVFormer 包括三个部分:

  • 网格形状的 BEV queries,通过注意力机制灵活地融合空间和时间特征;
  • 空间 cross-attention 模块,从多个相机画面聚合空间特征;
  • 时间 self-attention 模块,从历史 BEV 特征提取时间信息,有助于预测运动物体的速度以及被遮挡的目标。

在这里插入图片描述

2.1 整体架构

如上图,BEVFormer 包括 6 个标准的 encoder 层,以及 3 项特殊设计,即 BEV queries、空间 cross-attention 和时间 self-attention。BEV queries 是网格形状的可学习参数,在 BEV 空间内,对多相机的画面利用注意力机制 query 特征。

推理时,在时间戳 t t t,将多相机画面输入进主干网络 ResNet,获取不同相机画面的特征 F t = { F t i } i = 1 N v i e w F_t=\lbrace F_t^i \rbrace_{i=1}^{N_{view}} Ft={Fti}i=1Nview F t i F_t^i Fti是第 t t t时刻、第 i i i个相机画面的特征, N v i e w N_{view} Nview是画面的个数。保留时间戳 t − 1 t-1 t1的 BEV 特征 B t − 1 B_{t-1} Bt1。在每个 encoder 层,首先使用 BEV queries Q Q Q,通过时间 self-attention 对 BEV 特征 B t − 1 B_{t-1} Bt1查询时域信息。然后通过空间 cross-attention 使用 Q Q Q来查询多相机特征 F t F_t Ft的空间信息。在 FFN 后,encoder 层输出优化后的 BEV 特征,作为下一个 encoder 层的输入。一共经过 6 个 encoder 层,就得到了时间戳 t t t的 BEV 特征 B t B_t Bt。接下来,使用 B t B_t Bt进行后续的 3D 检测和语义分割任务。

2.2 BEV Queries

定义一组网格状的可学习参数 Q ∈ R H × W × C Q\in \mathbb{R}^{H\times W\times C} QRH×W×C,作为 BEVFormer 的 queries,其中 H , W H,W HW是 BEV 平面的高度和宽度。Query Q p ∈ R 1 × C Q_p\in \mathbb{R}^{1\times C} QpR1×C位于 p = ( x , y ) p=(x,y) p=(x,y),负责 BEV 平面的相应的格子。BEV 平面上的每个网格都对应着真实世界的 s s s米长度。BEV 特征的中心对应着车辆自身(ego)的位置。在输入 BEVFormer 前,在 queries Q Q Q中加入可学习的 positional encoding。

2.3 Spatial Cross-Attention

因为多相机 3D 感知的输入尺度太大,原始的 multi-head attention 的计算成本就过高。因此,作者基于 deformable attention 设计了空间 cross-attention,每个 BEV query Q Q Q只和相机画面内的兴趣区域(RoI)发生作用。
如上图(b),将 BEV 平面的每个 query 变为 pillar-like query,从该 pillar 中采样 N r e f N_{ref} Nref个 3D reference points,然后再将这些点映射到 2D 画面。对于一个 BEV query,映射的 2D 点只会落到某些画面里面,这些画面叫做 V h i t \mathcal{V}_{hit} Vhit。将这些 2D 点看作为 query Q p Q_p Qp的 reference points,然后从 V h i t \mathcal{V}_{hit} Vhit画面中提取这些 reference points 的特征。最后,计算这些采样特征的加权和,作为空间 cross-attention 的输出。SCA 计算如下:
SCA ( Q p , F t ) = 1 ∣ V h i t ∣ ∑ i ∈ V h i t ∑ j = 1 N r e f DeformAttn ( Q p , P ( p , i , j ) , F t i ) \text{SCA}(Q_p, F_t)=\frac{1}{\left| \mathcal{V}_{hit}\right|}\sum_{i\in \mathcal{V}_{hit}}\sum_{j=1}^{N_{ref}}\text{DeformAttn}(Q_p, \mathcal{P}(p,i,j),F_t^i) SCA(Qp,Ft)=Vhit1iVhitj=1NrefDeformAttn(Qp,P(p,i,j),Fti)

其中 i i i是相机画面索引, j j j是 reference point 的索引, N r e f N_{ref} Nref是每个 BEV query pillar 中 reference points 的个数。 F t i F_t^i Fti是第 i i i个相机画面的特征。对于每个 BEV query Q p Q_p Qp,使用一个映射函数 P ( p , i , j ) \mathcal{P}(p,i,j) P(p,i,j)获取第 i i i个画面上 p = ( x , y ) p=(x,y) p=(x,y)位置的第 j j j个 reference point。

接下来,介绍如何使用映射函数 P \mathcal{P} P从图像上获取 reference point。首先计算 p = ( x , y ) p=(x,y) p=(x,y)位置上 Q p Q_p Qp对应的真实世界的坐标 ( x ′ , y ′ ) (x',y') (x,y)

x ′ = ( x − W 2 ) × s ; y ′ = ( y − H 2 ) × s x'=(x-\frac{W}{2})\times s;\quad\quad y'=(y-\frac{H}{2})\times s x=(x2W)×s;y=(y2H)×s

这里 H , W H,W H,W是 BEV queries 空间的高度和宽度, s s s是 BEV 网格的大小, ( x ′ , y ′ ) (x',y') (x,y)是坐标位置。在 3D 空间, ( x ′ , y ′ ) (x',y') (x,y)处的目标可能出现在 z ′ z' z高度。因此,作者预先定义了一组 anchor heights { z j ′ } j = 1 N r e f \lbrace z'_j \rbrace_{j=1}^{N_{ref}} {zj}j=1Nref,确保我们可以获取不同高度的信息。这样,对于每个 query Q p Q_p Qp,得到一个柱状的 3D reference points ( x ′ , y ′ , z j ′ ) j = 1 N r e f (x',y',z'_j)_{j=1}^{N_{ref}} (x,y,zj)j=1Nref。最后,通过相机参数矩阵,将 3D reference points 映射到不同的相机画面中:
P ( p , i , j ) = ( x i j , y i j ) \mathcal{P}(p,i,j)=(x_{ij}, y_{ij}) P(p,i,j)=(xij,yij)
where z i j ⋅ [ x i j y i j 1 ] T = T i ⋅ [ x ′ y ′ z j ′ 1 ] T . \text{where}\quad z_{ij}\cdot \left[ x_{ij}\quad y_{ij}\quad 1 \right]^T = T_i \cdot \left[ x' \quad y'\quad z'_j\quad 1 \right]^T. wherezij[xijyij1]T=Ti[xyzj1]T.

其中, P ( p , i , j ) \mathcal{P}(p,i,j) P(p,i,j)是第 j j j个 3D reference point ( x ′ , y ′ , z j ′ ) (x',y',z'_j) (x,y,zj)映射到第 i i i个画面的 2D 点。 T i ∈ R 3 × 4 T_i\in \mathbb{R}^{3\times 4} TiR3×4是第 i i i个相机的参数矩阵。

2.4 Temporal Self-Attention

时间信息对于视觉系统也非常重要,有助于预测运动物体的速度,或者检测遮挡物体。于是,作者设计了 temporal self-attention,融合历史 BEV 特征来表征当前的环境。

给定时间戳 t t t的 BEV queries Q Q Q t − 1 t-1 t1时间戳的历史 BEV 特征 B t − 1 B_{t-1} Bt1。首先基于车辆自身的运动,将 B t − 1 B_{t-1} Bt1 Q Q Q对齐,保证同一网格内的特征对应着同一个真实的世界坐标。将对齐后的历史 BEV 特征 B t − 1 B_{t-1} Bt1记为 B t − 1 ′ B'_{t-1} Bt1。但是从 t − 1 t-1 t1 t t t,真实世界的目标运动偏移是各不相同的。因此,作者通过 TSA 层对特征间的时间关系建模:

TSA ( Q p , { Q , B t − 1 ′ } ) = ∑ V ∈ { Q , B t − 1 ′ } DeformAttn ( Q p , p , V ) \text{TSA}(Q_p, \lbrace Q,B'_{t-1} \rbrace)=\sum_{V\in\lbrace Q,B'_{t-1} \rbrace}\text{DeformAttn}(Q_p, p, V) TSA(Qp,{Q,Bt1})=V{Q,Bt1}DeformAttn(Qp,p,V)

Q p Q_p Qp表示 p = ( x , y ) p=(x,y) p=(x,y)处的 BEV query。$\lbrace Q,B’{t-1}\rbrace 是将 是将 是将Q 和 和 B’{t-1} c o n c a t 起来,预测 T S A D e f o r m A t t n 的偏移量 concat 起来,预测 TSA DeformAttn 的偏移量 concat起来,预测TSADeformAttn的偏移量\Delta p$。对于每个序列中的第一个样本,TSA 会退化为一个不带时间信息的 self-attention,用 BEV queries { Q , Q } \lbrace Q,Q \rbrace {Q,Q}代替 { Q , B t − 1 ′ } \lbrace Q,B'_{t-1} \rbrace {Q,Bt1}

2.5 实验

2.5.1 Training

对于时间戳 t t t的样本,从过去 2 秒的连续帧中另外选取 3 个样本,这个随机采样策略能增强车辆自身运动的多样性。将这4个样本的时间戳分别记做 t − 3 , t − 2 , t − 1 t-3,t-2,t-1 t3,t2,t1 t t t。前 3 个时间戳负责递归地产生 BEV 特征 { B t − 3 , B t − 2 , B t − 1 } \lbrace B_{t-3},B_{t-2},B_{t-1} \rbrace {Bt3,Bt2,Bt1}。对于 t − 3 t-3 t3时间戳的初始样本,TSA 会退化为 self-attention。在 t t t时刻,模型基于多相机输入和 B t − 1 B_{t-1} Bt1,产生 BEV 特征 B t B_t Bt,这样 B t B_t Bt就包含了横跨 4 个样本的时间和空间信息。最后将 B t B_t Bt输入进检测和分割 heads,计算相应的损失。

2.5.2 Inference

推理时,按时间顺序在视频的每一帧上做预测。保留前一时间戳的 BEV 特征在后面使用,这个在线推理策略节约了大量时间。
在这里插入图片描述

从下图可看出,BEVFormer 能够检测出高度遮挡的目标。
在这里插入图片描述

#3. 有什么优点?
在 nuScenes test 数据集上,取得了 56.9 % 56.9\% 56.9%的 NDS,与基于 LiDAR 的方法相近。BEVFormer 能够显著提高速度的预测准确率和低可见度情况下的目标召回率。

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

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

相关文章

[CTF/网络安全] 攻防世界 command_execution 解题详析

[CTF/网络安全] 攻防世界 command_execution 解题详析 ping命令ping命令的应用格式ping命令执行漏洞 ls命令cat命令姿势ping本地回环地址ping目录ping文件夹ping文件 Tips总结 题目描述:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道…

图【无向图】的创建与遍历

树:无回路 图:有回路 代码在最下面 邻接矩阵:重点:矩阵 (一)图的创建 存储方式 如图: 代码截图分析:顶点用一维数组存,边用两个点之间的值为0或1来表…

异地研发团队都使用哪些研发协同工具?盘点7类最主流的研发管理协同软件

产品研发场景下好用的协同办公软件有哪些?分享7类研发过程中主流的协同办公软件,比如项目管理协作与问题跟踪工具PingCode、代码托管与版本控制平台github、持续集成与持续部署(CI/CD)工具jinkens、文档协作与知识管理工具conflue…

【力扣周赛】第346场周赛

【力扣周赛】第346场周赛 6439. 删除子串后的字符串最小长度题目描述解题思路 6454. 字典序最小回文串题目描述解题思路 6441. 求一个整数的惩罚数题目描述解题思路 6439. 删除子串后的字符串最小长度 题目描述 描述:给你一个仅由 大写 英文字符组成的字符串 s 。…

Gradle ——Gradle安装与配置

目录 一、简介 二、功能和特点 三、安装 参考: Gradle_百度百科 Gradle 学习 ----Gradle 入门_你若不离不弃,我必生死相依的博客-CSDN博客 还有硬石科技的开源wifiAPP程序,没找到他们的码仓 一、简介 Gradle是一个基于Apache Ant和Apache Maven概念…

BPMN2.0 -条件序列流和默认序列流

序列流是流程中两个元素或者活动的连接器。在流程执行过程中访问一个元素之后,将继续执行素有的序列流,默认是并行的。传出的序列流将创建独立的并行执行路径。 顺序流需要有流程唯一的id,并引用存在的源与目标元素。 <sequenceFlow id="flow1" sourceRef=&qu…

vxe-table 对合并列的理解

行列对应关系 删除数据&#xff0c;只对一条数据进行分析 合并列代码&#xff08;_rowspan移除不影响&#xff0c;但是函数会eslint报红&#xff0c;正常运行&#xff09; 合并之后&#xff0c;从第一列开始&#xff0c;内容整体右移动&#xff0c;标题内容不对应 解决内容右移…

第三章 openEuler 文件系统

系列文章目录 第一章 openEuler 安装指南 第二章 openEuler 网络配置 第三章 openEuler 文件系统 文章目录 系列文章目录前言一、openEuler中的文件系统1.整体架构2.文件系统层次结构3. FHS定义的一级目录结构 二、常用命令1. pwd 查看当前所在的目录路径2. ls 查看当前目录下…

算法——各排序算法效率对比和总结

1. 算法效率对比 在此我们使用如下代码来测试各个算法的效率 void TestOP() {srand(time(0));const int N 100000;int* a1 (int*)malloc(sizeof(int) * N);int* a2 (int*)malloc(sizeof(int) * N);int* a3 (int*)malloc(sizeof(int) * N);int* a4 (int*)malloc(sizeof(i…

【TOP生物信息】CNS图表复现,单细胞marker基因展示的另一种方式——蜂巢图

扫码关注下方公粽号&#xff0c;回复推文合集&#xff0c;获取400页单细胞学习资源&#xff01; 本文共计1359字&#xff0c;阅读大约需要4分钟。 Sten Linnarsson大神的单细胞绘图堪称极致美学&#xff0c;在这里&#xff0c;小编选择了发表在nature上展示marker基因的绘图进…

找不到msvcp140.dll无法继续执行代码,怎么解决?

MSVCP140.dll是一个Windows操作系统中的动态链接库文件&#xff0c;它是Microsoft Visual C Redistributable for Visual Studio 2015的一部分。这些库提供了一些C程序所需的基本功能&#xff0c;例如内存管理、文件操作、字符串处理等等。丢失或者损坏会导致很多软件跟游戏无法…

由浅入深Netty简易实现RPC框架

目录 1 准备工作2 服务器 handler3 客户端代码第一版4 客户端 handler 第一版5 客户端代码 第二版6 客户端 handler 第二版 1 准备工作 这些代码可以认为是现成的&#xff0c;无需从头编写练习 为了简化起见&#xff0c;在原来聊天项目的基础上新增 Rpc 请求和响应消息 Data …

由浅入深Netty代码调优

目录 1. 优化1.1 扩展序列化算法 2 参数调优2.1 CONNECT_TIMEOUT_MILLIS2.2 SO_BACKLOG2.3 ulimit -n2.4 TCP_NODELAY2.5 SO_SNDBUF & SO_RCVBUF2.6 ALLOCATOR2.7 RCVBUF_ALLOCATOR 1. 优化 1.1 扩展序列化算法 序列化&#xff0c;反序列化主要用在消息正文的转换上 序列…

Windows11部署WSL2以及迁移操作系统位置

1 缘起 笔记本电脑Windows 10内存紧张&#xff1a;16 G&#xff0c; 但是&#xff0c;开发需要一些组件&#xff0c;如Redis&#xff08;Redisearch、ReJson&#xff09;、MySQL等&#xff0c; 在Linux容器化中部署更方便&#xff0c;易用&#xff0c; 在Windows中通过虚拟机安…

安卓与串口通信-modbus篇

前言 在之前的两篇文章中&#xff0c;我们讲解了串口的基础知识和在安卓中使用串口通信的方法&#xff0c;如果还没看过之前文章的同学们&#xff0c;建议先看一遍&#xff0c;不然可能会不理解这篇文章讲的某些内容。 事实上&#xff0c;在实际应用中&#xff0c;我们很少会…

Tip in/Out变速箱齿轮敲击过程详细分析

Tip in/Out变速箱齿轮敲击过程详细分析(模型由AMEsim例子改造而成&#xff0c;数据均虚构&#xff0c;仅学习用&#xff09; 1、发动机稳态工况2、Tip in/Out工况3、总结 1、发动机稳态工况 发动机输出力矩&#xff1a; 一轴齿轮驱动力矩&#xff08;离合器减振器输出力矩&am…

为什么要做问卷调查?企业获得用户心声的捷径

问卷调查作为一种重要的数据收集方法&#xff0c;在市场营销、社会学研究、用户研究等领域得到广泛应用。通过问卷调查&#xff0c;我们可以了解受访者的态度、行为、需求等信息&#xff0c;进而为企业和组织的决策提供支持。那么&#xff0c;为什么要做问卷调查呢&#xff1f;…

大语言模型架构设计

【大模型慢学】GPT起源以及GPT系列采用Decoder-only架构的原因探讨 - 知乎本文回顾GPT系列模型的起源论文并补充相关内容&#xff0c;中间主要篇幅分析讨论为何GPT系列从始至终选择采用Decoder-only架构。 本文首发于微信公众号&#xff0c;欢迎关注&#xff1a;AI推公式最近Ch…

一些云原生开源安全工具介绍

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130789465 一、Kubernetes安全监测工具kube-bench kube-bench是一个用Golang开发的、由Aqua Security发布的自动化Kubernetes基准测试工具&#xff0c;它运行CIS Kubernetes基准中的测试项目。这些测试…

在 uniapp 中通过 Intent 的方式启动其他APP并且传参

文章目录 前言一、其他软件调用文档中的安卓原生代码二、在uniAPP中实现上述方式三、总结四、感谢 前言 由于业务需求需要&#xff0c;我方研发的安卓APP需要调用其他安卓APP&#xff0c;并且将保存返回的文件存储路径进行读取后操作。对方软件公司提供了对接文档和一个测试调…