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

【论文阅读】BEVFormer

〇、Introduction

BEVFormer是现在端到端无人驾驶中常使用的一个Backbone,用于将六个视角下的图像转换为鸟瞰图视角下的特征,转换出的BEV特征则会被用于后续模块的特征交互。然而在这个模型设计的初期,其最本质的意图是为了提取用于各种CV任务的BEV特征。相机本身作为一个简单的感知设备,具有开销小、便于检测远处物体的特点。在多视角感知的领域,最简单直接的方法是在各个视角下都进行一次检测,最后将检测结果进行融合,然而这种方法忽略了视角之间存在的联系。从整体的角度来看,BEV视角是一个很好的选择,因为BEV能够从全局角度进行感知。但是从2d的成像平面提取出BEV有些困难,这一点导致了在BEV场景中进行的CV任务比较困难。主要的困难点在于转换过程需要从图像这一2d结构转换为3d场景,得益于Transformer结构,现在我们可以不完全依赖于深度信息动态学习BEV特征。

这篇文章中作者提出了BEVFormer,利用多相机输入得到场景的BEV表示,这个输出的BEV特征可以用于各种的CV任务。提出了时间自注意力机制和空间交叉注意力机制,利用可学习的BEV query进行两种注意力的计算,得到时空关联的BEV特征输出。

一、模型结构

整体结构

BEVFormer采用的也是传统的Transformer结构,具有六个编码器层,除了BEV query、时间自注意力和空间交叉注意力,其余的部分与穿砼结构一致。其中BEV query是一个网格形状的可学习参数,用于从多视角下利用注意力进行特征的提取。空间交叉注意力和时间自注意力都会与BEV query进行交互,从而增强输出的BEV特征时间和空间联系。

在一次推理中,六个视角下的图像首先会各自利用Resnet进行特征的提取,转换为六个视角下的特征图。每次推理我们利用上一帧输出的BEV特征与BEV query进行时间自注意力机制的计算,从而增强当前帧的BEV query,之后利用空间信息与多视角的特征图进行空间交叉注意力的计算。经过六层编码器最终得到当前帧的BEV特征。
在这里插入图片描述

BEV query

因为BEV本身具有一个二维的坐标结构,所以这里BEV query也可以用二维结构来解释。BEV query是一个网格状的可学习参数,它的大小为H×W×C,其中H和W是BEV平面的大小,我们可以将其拆解为H×W个维的向量,每个query对应的就是一个坐标下的特征信息,这个H和W我们可以理解为网格的数量,所谓BEV平面实际上就是一个二维的矩形网格结构,类似于2dNDT里面的网格,每个网格的大小为超参数S,H和W就是网格在两个方向上的数量,每个query对应的位置就是每个网格的中心。对于每个query,我们为其加入最基本的可学习的空间位置编码来增强。
在这里插入图片描述

空间交叉注意力

空间交叉注意力实际上是可变形注意力的一个优化版本。对于目前的一个BEV query,其实它本身是一个二维结构,是一个H×W的矩阵,这里我们首先将其补充为3d结构,做法是将H×W直接进行拉伸。比如说原本一个BEV query的坐标是(x, y),利用预设好的高度值,我们将起补充为(x, y, z),z的取值完全是认为选择的,相当于我们将2d的平面在纵向上复制了很多次。这样子我们就得到了很多3d的点,利用点的坐标、相机的内外参,我们可以利用小孔成像原理计算在六个视角下的投影位置,也就是在六个视角下能否观测到这些点,对于能够观测到的视角,我们将其记录在Vhit里面,之后对于每个3d点,我们对所有能够观测到的视角Vhit计算可变形注意力,我们在投影点的位置的基础上,利用可学习的偏移量,加权求和得到当前视角下的特征向量,之后所有的可观测视角都进行这个操作,最后加权求和,得到的特征向量就是BEV query中一个点的特征向量。
在这里插入图片描述
这里补充一个想了很久的问题,在这个计算的过程中,既然每个BEV query的坐标(x, y)是固定的,3d点在自车坐标系下的位置固定,自车坐标系与相机坐标系的变换关系也是固定,那么它会被哪几个相机观测不就是确定的吗,这里为什么又要使用内外参动态计算会被哪个相机观测。我和ScholarGPT讨论了半天,它提供的说法是,这套解释理论上是成立的,但是太过暴力,实际上这个转换过程引入了世界坐标系,固定的3d点首先利用自车坐标系与当前位姿,转换为世界坐标系下的点,之后再根据世界坐标系和相机坐标系的关系进行投影,这个过程当前位姿是变化的或者是不完全准确的,所以哪个点能被哪个相机观测也就不确定了,所以需要动态计算。

时间自注意力

由于帧与帧之间并不是完全独立的,它们之间也存在一个相互关联的关系,所以作者引入了时间自注意力机制来优化这一点。对于上个时刻输出的BEV特征,我们首先根据位姿真值进行投影,转换到当前帧的坐标系下,这一步和SLAM中的坐标投影是一样的。转换之后,我们使用当前帧的BEV query与投影后的BEV特征进行可变形注意力的计算,这里虽然名字叫做时间自注意力,但是使用的可变形注意力计算是可变形交叉注意力,即使用可学习的偏移量对上一帧的BEV特征进行处理,将加权求和后的结果与原始的特征向量进行叠加,得到增强后的BEV query。
在这里插入图片描述
由于第一帧时没有上一帧的BEV特征,所以第一帧时采用两个BEV query进行可变形注意力的计算,也就是自己和自己计算可变形交叉注意力。

这里的投影其实存在一些问题,投影实际上相当于SLAM中的坐标系变换,那么必然会存在一个投影后裁切的问题,因为车辆在前移,以车辆坐标系来看,必然有些点变得太远而消失,有些点因为靠近而突然出现,但是BEV特征的大小是固定的,这就有可能导致投影后的BEV特征,一些部分因为超出了范围被丢弃,一些部分因为根本就投影不到而保持为0。这种情况下会通过降低该部分的权重来避免BEV query无法被强化。投影的过程实际上就是取整的过程,会根据位置自动分配一个网格,网格内如果存在多个投影点,则对于这个网格的特征向量来说,其等于所有投影过来的点对应的特征向量的平均。

整体流程

从整个流程来看,在非第一帧的情况下,每次推理的输入是上一个时刻的BEV特征和训练好的可学习参数组成的BEVquery,首先利用自车的位姿变化将上一个时刻的BEV特征转换到当前时刻,之后用BEVquery与转换后的BEV特征做可变形交叉注意力,由于BEV query和BEV特征的大小是一样的,所以如果query的坐标是xy,那么可以直接将BEV特征xy位置作为采样点的初始位置,之后利用可学习的偏移在每个位置采样并加权求和,得到一个与原BEV特征大小相同的特征图,之后将这个特征图从2d补充高度变成3d,利用内外参矩阵投影到不同视角的相机成像平面,如果点可以投影到某个相机视角下,就利用投影位置在当前视角对应的特征图中计算可变形交叉注意力,最后得到一个新的特征图,作为当前帧的BEV特征。

相关文章:

【论文阅读】BEVFormer

〇、Introduction BEVFormer是现在端到端无人驾驶中常使用的一个Backbone,用于将六个视角下的图像转换为鸟瞰图视角下的特征,转换出的BEV特征则会被用于后续模块的特征交互。然而在这个模型设计的初期,其最本质的意图是为了提取用于各种CV任…...

IDEA编辑器设置的导出导入

背景 最近新换了电脑,因为之前是 Intel 芯片的 Mac,这次换了 arm 架构的 M 芯片的 Mac,旧 Mac 上的很多软件不兼容,所以就没有选择换机数据迁移,一点一点下载、配置了所有环境。 导出 IDEA 支持设置的导入导出&…...

手动实现 Transformer 模型

本文使用 Pytorch 库手动实现了传统 Transformer 模型中的多头自注意力机制、残差连接和层归一化、前馈层、编码器、解码器等子模块,进而实现了对 Transformer 模型的构建。 """ Title: 解析 Transformer Time: 2025/5/10 Author: Michael Jie &quo…...

成功案例丨从草图到鞍座:用先进的发泡成型仿真技术变革鞍座制造

案例简介 在鞍座制造中,聚氨酯泡沫成型工艺是关键环节,传统依赖实验测试的方法耗时且成本高昂。为解决这一问题,意大利自行车鞍座制造商 Selle Royal与Altair合作,采用Altair Inspire PolyFoam软件进行发泡成型仿真。 该工具帮助团…...

BG开发者日志517:demo数据分析与修改方向

光明斗士玩法介绍预告片 1、试玩版开局不利 因为疏忽与经验不足,导致本地化出了问题,demo版本是以默认简体中文版的状态发布的, demo早就在2月就已经过审,当时客服并没有提出问题。后来多次传新版本,直接就发布了。 …...

Linux靶机网站配置:从零搭建Web靶场环境

在网络安全学习中,搭建靶机环境是进行渗透测试和防御技术研究的重要环节。本教程将详细介绍如何在Linux系统(如Kali、Debian、Ubuntu等)上配置一个基于Apache的靶机网站,支持HTTP/HTTPS、虚拟主机、SSL自签名证书、本地域名解析、…...

电机试验平台:创新科技推动电动机研究发展

电机试验平台是电机制造和研发过程中不可或缺的重要设备,其功能涵盖了电机性能测试、电机寿命测试、电机质量评估等多个方面。随着科技的不断发展和电机应用领域的日益扩大,对电机试验平台的要求也越来越高。本文将从现代化电机试验平台的设计与应用两个…...

STM32F103定时器1每毫秒中断一次

定时器溢出中断,在程序设计中经常用到。在使用TIM1和TIM8溢出中断时,需要注意“TIM_TimeBaseStructure.TIM_RepetitionCounter0;”,它表示溢出一次,并可以设置中断标志位。 TIM1_Interrupt_Initializtion(1000,72); //当arr1…...

【springcloud学习(dalston.sr1)】Zuul路由访问映射规则配置及使用(含源代码)(十二)

该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一) springcloud学习(dalston.sr1)系统文章汇总如下: 【springcloud学习(dalston…...

Qt与Hid设备通信

什么是HID? HID(Human Interface Device)是‌直接与人交互的电子设备‌,通过标准化协议实现用户与计算机或其他设备的通信,典型代表包括键盘、鼠标、游戏手柄等。‌ 为什么HID要与qt进行通信? 我这里的应…...

2024 山东省ccpc省赛

目录 I(签到) 题目简述: 思路: 代码: A(二分答案) 题目简述: 思路: 代码: K(构造) 题目: 思路: 代…...

SAP HCM 0008数据存储逻辑

0008信息类型:0008信息类型是存储员工基本薪酬的地方,因为很多企业都会都薪酬带宽,都会按岗定薪,所以在上线前为体现工资体系的标准化,都会在配置对应的薪酬关系,HCM叫间接评估,今天我们就分析下…...

Elasticsearch 查询与过滤(Query vs. Filter)面试题

Elasticsearch 查询与过滤(Query vs. Filter)面试题 🚀 目录 基础概念性能优化实战应用错误排查高级场景设计题总结基础概念 🔍 面试题1:基础概念 题目: 请解释Elasticsearch中query和filter的主要区别,并说明何时应优先使用filter。 👉 查看参考答案 核心区别…...

golang读、写、复制、创建目录、删除、重命名,文件方法总结

文章目录 一、只读文件二、写入文件三、复制文件四、创建目录五、删除目录/文件五、重命名文件 一、只读文件 file, err : os.Open("./main.go")defer file.Close() //打开文件一定要关闭关闭文件if err ! nil {fmt.Println("文件打开失败", err)}/*方案一…...

如何使用通义灵码辅助学习C++编程 - AI编程助手提升效率

一、引言 C 是一门功能强大且灵活的编程语言,在软件开发、系统编程、游戏开发等领域广泛应用。然而,其复杂的语法和丰富的特性使得学习曲线较为陡峭。对于初学者而言,在学习过程中难免会遇到各种问题,如语法理解困难、代码调试耗…...

解决LeetCode 47. 全排列 II 问题的正确姿势:深入分析剪枝与状态跟踪

文章目录 问题描述常见错误代码与问题分析错误代码示例错误分析 正确解决方案修正后的代码关键修正点 核心逻辑详解1. 为何使用 boolean[] used 而非 HashSet?2. 剪枝条件 !used[i - 1] 的作用 场景对比:何时用数组?何时用哈希表?…...

ubuntu18 设置静态ip

百度 编辑/etc/netplan/01-netcfg.yaml 系统没有就自己编写 network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [192.168.20.8/24] # 设置你的IP地址和子网掩码 gateway4: 192.168.20.1 # 网关地址 namese…...

【Docker】CentOS 8.2 安装Docker教程

目录 1.卸载 2.安装依赖 3.设置yum源 4.安装Docker 5.启动Docker 6.设置Docker开机自启 7.验证Docker是否安装成功 8.配置多个国内镜像地址 9.重启Docker 10.Docker指令大全 10.1.启动与关闭Docker 10.2.Docker镜像操作 10.3.Docker容器操作 10.4.Docker Compose操作…...

K230 ISP:一种新的白平衡标定方法

第一次遇见需要利用光谱响应曲线进行白平衡标定的方法。很好奇是如何利用光谱响应曲线进行白平衡标定的。 参考资料参考:K230 ISP图像调优指南 K230 介绍 嘉楠科技 Kendryte 系列 AIoT 芯片中的最新一代 AIoT SoC K230 芯片采用全新的多核异构单元加速计算架构&a…...

桃芯ingchips——windows HID键盘例程无法同时连接两个,但是安卓手机可以的问题

目录 环境 现象 原理及解决办法 环境 PC:windows11 安卓:Android14 例程使用的是HID Keyboard,板子使用的是91870CQ的开发板,DB870CC1A 现象 连接安卓手机时并不会出现该现象,两个开发板都可以当做键盘给手机发按…...

SQL看最多的数据,但想从小到大排列看趋势

SQL 查询:从 test 表中获取本月的数据,并对数量最多的前10个流程按数量升序排序 假设表结构 test 表包含请求信息。workflow_base 包含流程的基本信息。 CREATE TABLE test (requestid INT, -- 请求IDworkflowid INT, -- 流程IDcurr…...

Go语言 Gin框架 使用指南

Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似 martini 的 API,性能要好得多,多亏了 httprouter,速度提高了 40 倍。 如果您需要性能和良好的生产力,您一定会喜欢 Gin。Gin 相比于 Iris 和 Beego 而言,更倾向…...

[Linux] vim及gcc工具

目录 一、vim 1.vim的模式 2.vim的命令集 (1):命令模式 (2):底行模式 3.vim配置 二、gcc 1.gcc格式及选项 2.工作布置 三、自动化构建工具makefile 1.基本使用方法 2.配置文件解析 3.拓展 在linux操作系统的常用工具中,常用vim来进行程序的编写&#xff1b…...

YOLOv11改进 | Neck篇 | 轻量化跨尺度跨通道融合颈部CCFM助力YOLOv11有效涨点

YOLOv11改进 | Neck篇 | 轻量化跨尺度跨通道融合颈部CCFM助力YOLOv11有效涨点 引言 在目标检测领域,YOLO系列算法因其卓越的速度-精度平衡而广受欢迎。YOLOv11作为该系列的最新演进版本,在Neck部分引入了创新的跨尺度跨通道融合模块(CCFM, Cross-scale…...

MySQL只操作同一条记录也会死锁吗?

大家好,我是锋哥。今天分享关于【MySQL只操作同一条记录也会死锁吗?】面试题。希望对大家有帮助; MySQL里where条件的顺序影响索引使用吗? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中,死锁通常发生在多…...

数据结构与算法——双向链表

双向链表 定义链表分类双向链表:带头双向循环链表 初始化打印尾插头插尾删头删查找在pos(指定位置)之后插入结点在pos(指定位置)之前插入结点删除pos(指定位置)的结点销毁顺序表与链表的分析 定义 链表分类 单向和双向 带头和不带头 带头是指存在一个头结点&…...

MODBUS RTU调试助手使用方法详解

一、软件简介 485调试助手是一款常用的串口通信调试工具,专门用于RS-485总线设备的测试、调试和通信监控。它支持多种串口参数设置,提供数据收发功能,是工业现场调试的必备工具之一。 二、软件安装与启动 1. 系统要求 Windows 7/10/11操作…...

自由学习记录(60)

Lecture 16 Ray Tracing 4_哔哩哔哩_bilibili 老师说的“高频采样”问题是什么? 现在考虑一个特殊情况: ❗ 一个像素内,图像信号变化很剧烈(高频): 比如: 细网格纹理 马赛克背景 很高频的…...

现代计算机图形学Games101入门笔记(三)

三维变换 具体形式缩放,平移 特殊点旋转。这里涉及到坐标系,先统一定义右手坐标系,根据叉乘和右手螺旋判定方向。这里还能法线Ry Sina 正负与其他两个旋转不一样。这里可以用右手螺旋,x叉乘z,发现大拇指朝下&#xff0…...

WeakAuras Lua Script <BiaoGe>

WeakAuras Lua Script <BiaoGe> 表格拍卖插件WA字符串 表格字符串代码&#xff1a; !WA:2!S3xA3XXXrcoE2VH9l7ZFy)C969PvDpSrRgaeuhljFlUiiSWbxaqXDx(4RDd0vtulB0fMUQMhwMZJsAO5HenLnf1LPSUT4iBrjRzSepL(pS)e2bDdWp5)cBEvzLhrMvvnAkj7zWJeO7mJ8kYiJmYiImYF0b(XR)JR9JRD…...