Bevformer:通过时空变换从多摄像机图像学习鸟瞰图表示

news2024/12/23 9:41:07

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

代码地址:https://github.com/zhiqi-li/BEVFormer

论文背景

三维视觉感知任务,包括基于多摄像机图像的三维检测和地图分割,是自动驾驶系统中必不可少的任务。

1.利用相机
尽管基于激光雷达的方法取得了显著的进展,但相机也有其不可忽略的优势。
相机优势:除了部署成本低之外,与基于激光雷达的同类设备相比,摄像机在探测远距离物体和识别基于视觉的道路元素(如红绿灯、停车线)方面具有理想的优势。

自动驾驶中对周围场景的视觉感知可以从多个摄像头给出的二维线索中预测出三维 bounding box 或 semantic maps。
基于单目框架和跨相机后处理。 这种框架的缺点是,它单独处理不同的视图,不能跨摄像机捕捉信息,导致性能和效率低下。
作为单目框架的替代,一个更统一的框架是从多摄像机图像中提取BEV。
但是 3D 目标检测任务需要很强的BEV特征来支持精确的三维 bounding box 预测,而从二维平面生成BEV是不适定的。
此外,基于深度信息的BEV框架生成BEV特征对深度值或深度分布的准确性非常敏感。因此,基于BEV的方法的检测性能受到复合误差的影响,不准确的BEV特征会严重损害最终性能。

论文动机是设计一种不依赖深度信息,能够自适应学习BEV特征而不是严格依赖三维先验的BEV生成方法。 Transformer 通过注意力机制动态聚合有价值的特征,从概念上满足了需求。

2.利用时间信息
现有的最先进的多摄像机三维检测方法很少利用时间信息。自动驾驶面临的重大挑战是短时间内,场景中的物体变化迅速,因此简单地叠加交叉时间戳的BEV特征会带来额外的计算成本和干扰信息,这可能并不理想。
受递归神经网络的启发,论文利用BEV特征递归地传递过去到现在的时间信息,这与RNN模型的隐状态类似。

论文内容

论文提出了 BEVformer,能够有效地融合多视点摄像机的时空特征和历史Bev特征。
三个关键点:
1.通过注意力机制灵活融合时空特征的网格BEV查询;
2.空间交叉注意模块用于多摄像机图像空间特征的聚合;
3.时间自注意模块从历史特征中提取时间信息,有利于运动目标的速度估计和严重遮挡目标的检测,且计算开销可忽略不计。
利用 Bevformer 生成的统一特征,该模型可以与不同的任务特定头(如可变形 DETR 和 mask decoder)协作,进行端到端的 3D 目标检测和地图分割。

基于 transformer 的 2D 感知

DETR 使用一组对象查询直接由 cross-attention decoder 产生检测结果。 然而,DETR 的主要缺点是训练时间长。可变形DETR 通过提出的 deformable attention 来解决这个问题。与常规的全局注意不同的是,变形注意与局部感兴趣区域相互作用,仅对每个参考点附近的K个点进行采样,计算出注意结果,提高了训练效率,显著缩短了训练时间。deformable attention 机制: D e f o r m A t t n ( q , p , x ) = ∑ i = 1 N h e a d W i ∑ j = 1 N k e y A i j ⋅ W i ′ x ( p + Δ p i j ) (1) \tag 1DeformAttn(q,p,x)=\sum_{i=1}^{N_{head}}\mathcal W_i \sum_{j=1}^{N_{key}} \mathcal A_{ij} \cdot W_{i}^{'}x(p+\Delta p_{ij}) DeformAttn(q,p,x)=i=1NheadWij=1NkeyAijWix(p+Δpij)(1) 其中 q 、 p 、 x q、p、x qpx 分别表示查询、参考点和输入特征。 i i i 索引了注意头, N h e a d N_{head} Nhead 表示注意头的总数。 j j j 对采样的 key 进行索引, N k e y N_{key} Nkey 是每个头的总采样 key 数。 W i ∈ R C × ( C / H h e a d ) W_i \in \R^{C \times (C/H_{head})} WiRC×(C/Hhead) W i ′ × R ( C / H h e a d ) × C W_{i}^{'} \times \R^{(C/H_{head}) \times C} Wi×R(C/Hhead)×C 是可学习权重,其中 C C C 是特征维度。 A i , j ∈ [ 0 , 1 ] A_{i,j}\in [0,1] Ai,j[0,1]是预测的注意力权重, 并通过 ∑ j = 1 N k e y A i j = 1. \sum_{j=1}^{N_{key}}A_{ij}=1. j=1NkeyAij=1. Δ p i j ∈ R 2 \Delta p_{ij} \in \R^2 ΔpijR2是对参考点 p 的预测偏移量。 x ( p + Δ p i j ) x(p+\Delta p_{ij}) x(p+Δpij) 表示位置 p + Δ p i j p + \Delta p_{ij} p+Δpij 上的特征。

论文中将 deformable attention 拓展到三维感知任务,以有效地聚合空间和时间信息。

基于相机的 3D 感知

对于 3D 目标检测任务,早期的方法类似于二维检测方法,通常是在二维包围盒的基础上预测三维 bounding box。
将多摄像机图像特征转换为鸟瞰(BEV)特征,可以为各种自动驾驶感知任务提供统一的周围环境表示。
一种简单的方法是通过逆透视映射(IPM)将透视图转换为BEV。
此外,Lift-Splat 基于深度分布生成BEV特征。 也有多种方法利用多层感知器学习从透视图到BEV的平移。
Pyva 提出了一种将前视单目图像转换为BEV的交叉视图 transformer,但由于全局注意力机制的计算代价,这种范式不适用于融合多摄像机特征。
除空间信息外,前人的工作有些还考虑了从多个时间戳中叠加BEV特征的时间信息。
叠加BEV特征约束了固定时间范围内的可用时间信息,带来了额外的计算开销。
论文文提出的时空 transformer 通过同时考虑空间和时间线索生成当前时间的BEV特征,而时间信息是通过 RNN 方法从之前的BEV特征中获取的,其计算开销很小。

BEVFormer

在这里插入图片描述

总体结构

Bevformer 有 6 个编码器层,每个编码器层都遵循传统的 transformers 结构,除了三个定制的设计,即 BEV 查询、空间交叉注意和时间自注意层。

具体地说,BEV查询是网格状的可学习参数,它旨在通过注意力机制从多摄像机视图查询BEV空间中的特征。 空间交叉注意和时间自注意是一种处理BEV查询的注意层,用于根据BEV查询从多摄像机图像中查找和聚集空间特征以及从历史BEV中查找和聚集时间特征。

在推断过程中,在时间戳 t t t 处,将多个摄像机图像馈送到 backbone,并获得不同摄像机视图的特征 F t = { F t i } i = 1 N v i e w F_t=\{F_t^i \}_{i=1}^{N_{view}} Ft={Fti}i=1Nview,其中fi t是第i个视图的特征, N v i e w N_{view} Nview是摄像机视图的总数。 同时,在之前的时间戳 t − 1 t-1 t1 处保留了BEV特征 B t − 1 B_{t-1} Bt1

在每个编码层中,首先使用 BEV 查询 Q,通过时间自注意从先前的 BEV 特征 B t − 1 B_{t−1} Bt1 中查询时间信息。然后利用 BEV 查询Q 通过空间交叉注意从多摄像机特征 F t F_t Ft 中查询空间信息。

在前馈网络之后,编码器层输出精炼的BEV特征,这是下一个编码器层的输入。 经过6个堆叠编码器层后,生成当前时间戳 t t t 处的统一BEV特征 B t B_t Bt。 以BEV特征 B t B_t Bt 为输入,通过三维检测头和地图分割头预测三维 bounding box 和语义地图等感知结果。

BEV 查询

预先定义了一组网格状的可学习参数 Q ∈ R H × W × C Q∈\R^{H×W×C} QRH×W×C 作为 Bevformer 的查询, 式中 H , W H,W H,W 为 BEV 平面的空间形状。其中,位于 Q Q Q p = ( x , y ) p = (x, y) p=(x,y) 处的查询 Q p ∈ R 1 × C Q_p∈\R^{1×C} QpR1×C 负责 BEV 平面中相应的网格单元区域。BEV 平面上的每个网格单元对应于真实世界中 s s s 米的大小。BEV特征中心默认对应 ego 车的位置。在BEV查询 Q 输入到 BEVFormer 之前添加了可学习的 positional embedding。

空间 Corss-Attention

在这里插入图片描述
首先将 BEV 平面上的每个查询提升为 pillar-like query,从柱子上取样 N r e f N_{ref} Nref 3D参考点,然后将这些点投影到 2D 视图上。对于一个BEV查询,投影的2D点只能落在某些视图上,其他视图不会被 hit。 在这里,将 hit 视图称为 V h i t \mathcal V_{hit} Vhit。之后,将这些2D点作为查询 Q p Q_p Qp 的参考点,并围绕这些参考点对命中视图 V h i t \mathcal V_{hit} Vhit 的特征进行采样。 最后,对采样的特征进行加权和,作为空间 Corss-Attention 的输出。 空间 Corss-Attention (SCA) 的过程可以表述为: S C A ( Q p , F t ) = 1 ∣ V h i t ∣ ∑ i ∈ V h i t ∑ j = 1 N r e f D e f o r m A t t n ( Q p , P ( p , i , j ) , F t i ) , (2) \tag 2 SCA(Q_p,F_t)=\frac{1}{|\mathcal V_{hit}|}\sum_{i \in \mathcal V_{hit}} \sum_{j=1}^{N_{ref}}DeformAttn(Q_p,\mathcal P(p,i,j),F_t^i), SCA(Qp,Ft)=Vhit1iVhitj=1NrefDeformAttn(Qp,P(p,i,j),Fti),(2)其中, i i i 索引相机视图, j j j 索引参考点, N r e f N_{ref} Nref 是每个 BEV 查询的总参考点。 F t i F_t^i Fti 是第 i i i 个相机视图的特性。对于每个BEV查询 Q p Q_p Qp,我们使用投影函数 P ( p , i , j ) \mathcal P(p, i, j) P(p,i,j) 来获得第 i i i 个视图图像上的第 j j j 个参考点。

从投影函数 P \mathcal P P 中获取视图图像上的参考点,首先计算真实世界的位置 ( x ′ , y ′ ) (x^{'},y^{'}) (x,y),对应于位于 Q Q Q p = ( x , y ) p =(x, y) p=(x,y) 处的查询 Q p Q_p Qp x ′ = ( x − W 2 ) × s ;   y ′ = ( y − H 2 ) × s , (3) \tag 3 x^{'} = (x- \frac{W}{2}) \times s; \space y^{'}=(y-\frac{H}{2}) \times s, x=(x2W)×s; y=(y2H)×s,(3) H H H W W W 是 BEV 查询的空间形状, s s s 是BEV网格的分辨率大小, ( x ′ , y ′ ) (x^{'},y^{'}) (x,y) 是以 ego 车的位置为原点的坐标。

在三维空间中,位于 ( x ′ , y ′ ) (x^{'},y^{'}) (x,y) 处的目标将出现在z轴的高度 z ′ z^{'} z 上。 因此,预先定义了一组锚点高度 { z j ′ } N j = 1 N r e f \{ z_j^{'}\} N_{j=1}^{N_{ref}} {zj}Nj=1Nref,以确保我们能够捕捉到出现在不同高度的 clues. 这样,对于每个查询 Q p Q_p Qp,我们得到一个3D参考点柱 ( x ′ , y ′ , z j ′ ) N j = 1 N r e f (x^{'},y^{'}, z_j^{'}) N_{j=1}^{N_{ref}} (x,y,zj)Nj=1Nref。最后,通过摄像机的投影矩阵,将三维参考点投影到不同的图像视图上 : P ( p , i , j ) = ( x i j , y i j ) w h e r e   z i j ⋅ [ x i j   y i j   1 ] T = T i ⋅ [ x ′   y ′   z ′   1 ] T (4) \tag4\mathcal P(p,i,j) = (x_{ij},y_{ij}) \\ where \space z_{ij}\cdot [x_{ij} \space y_{ij} \space 1]^T=T_i \cdot[x^{'}\space y^{'} \space z^{'} \space 1]^T P(p,i,j)=(xij,yij)where zij[xij yij 1]T=Ti[x y z 1]T(4) P ( p , i , j ) \mathcal P(p,i,j) P(p,i,j)是从第 j j j 个3D点 ( x ′ , y ′ , z j ′ ) (x^{'},y^{'}, z_j^{'}) (x,y,zj) 投影的第 i i i 个视图上的 2D 点。 T I ∈ R 3 × 4 T_I \in \R^{3 \times 4} TIR3×4 是第 i i i 个摄像机的已知投影矩阵.

时间 Self-Attention

除了空间信息外,时间信息也是视觉系统理解周围环境的关键。
例如,在没有时间 clues 的情况下,从静态图像中推断运动物体的速度或检测高度遮挡的物体是很难的。 为了解决这个问题,论文设计了时间 Self-Attention,它可以通过结合历史BEV特征来表示当前环境。

给定当前时间戳 t t t 处的 BEV 查询 Q Q Q 和时间戳 t − 1 t-1 t1 处保留的历史 BEV 特征 B t − 1 B_{t-1} Bt1,首先根据 ego-motion 将 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,可移动目标在现实世界中以各种偏移量移动。
难点就是在在不同时间的BEV特征之间构造相同对象的精确关联,因此,论文通过时间 Self-Attention (TSA) 层对特征之间的这种时间联系进行建模,可以表示为: T S A ( Q p , { Q , B t − 1 ′ } ) = ∑ V ∈ { Q , B t − 1 ′ } D e f o r m A t t n ( Q p , p , V ) (5) \tag 5 TSA(Q_p,\{Q,B_{t-1}^{'}\})=\sum_{V \in \{ Q,B_{t-1}^{'} \}}DeformAttn(Q_p,p,V) TSA(Qp,{Q,Bt1})=V{Q,Bt1}DeformAttn(Qp,p,V)(5)其中, Q p Q_p Qp 表示位于 p = ( x , y ) p=(x,y) p=(x,y) 的 BEV 查询。 另外,不同于 vanilla deformable attention, 通过 Q Q Q B t − 1 ′ B_{t-1}^{'} Bt1的串联来预测时间 Self-Attention 的偏移量 Δ p Δp Δp。 需要注意的是,对于每个序列的第一个样本,时间Self-Attention 将退化为没有时间信息的 Self-Attention ,其中用重复的BEV查询 { Q , Q } \{Q,Q\} {Q,Q} 代替BEV特征 { Q , B t − 1 ′ } \{Q,B_{t-1}^{'}\} {Q,Bt1}

与简单地将BEV叠加相比,时间 Self-Attention 可以更有效地模拟长时间依赖。 Bevformer 从先前的BEV特征中提取时间信息,而不是多个叠加的 BEV 特征,因此所需的计算量和所受的干扰信息较少。

BEV特征的应用

由于BEV特征 B t ∈ R H × W × C Bt \in R^{H×W×C} BtRH×W×C 是一个通用的二维特征图,可以用于各种自动驾驶感知任务,因此可以在二维感知方法的基础上进行小的修改,开发出 3D 目标检测和地图分割任务头。

总结

论文提出了Bevformer来从多点输入生成鸟瞰特征。 Bevformer可以有效地聚合空间和时间信息,生成强大的BEV特征,同时支持三维检测和地图分割任务。利用多点输入的时空信息可以显著提高视觉感知模型的性能。
但是,基于摄像机的方法在效果和效率上与基于激光雷达的方法还有很大的差距, 从二维信息准确地推断三维位置仍然是基于摄像机的方法的一个长期挑战。

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

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

相关文章

外贸soho不要随便给客户推荐供应商

我们常常以为大公司做事会更稳妥,更有保障,很多时候愿意选择大公司合作,为的就是图个心安,最近碰到的事实恰好相反! 事情经过是这样的,有个客户除了找家具之外,还找很多其他的产品,…

芯片开发之难如何破解?龙智诚邀您前往DR IP-SoC China 2023 Day

2023年9月6日(周三),龙智即将亮相D&R IP-SoC China 2023 Day,呈现集成了Perforce与Atlassian产品的芯片开发解决方案,助力企业更好、更快地进行芯片开发。 龙智资深顾问、技术支持部门负责人李培将带来主题演讲—…

无网安装OpenLDAP

一、服务器操作系统 CentsOS8.2 二、软件获取 2.1、OpenLDAP 官网下载OpenLDAP 2.2、BDB berkeley-db-5.1.29 (OpenLDAP当前与6.x版本不兼容,READEME中明确写出兼容4.44.8或5.05.1): BerkeleyDB下载 2.3、LDAP Administrtor LDAP Administrtor…

基于改进莱维飞行和混沌映射的粒子群优化BP神经网络分类研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

VScode SSH无法免密登录

配置方法 引用高赞贴:点击 debug方法 连不上需要找到问题原因,看ssh的 log Linux服务器:2222是我们指定的端口,可以是1234等 sudo /usr/sbin/sshd -d -p 2222windows这边:端口号要一致 ssh -vvv ubuntusername192…

Windows NUMA编程实践 – 处理器组、组亲和性、处理器亲和性及版本变化

Windows在设计之初没有考虑过对大数量的多CPU和NUMA架构的设备的支持,大部分关于CPU的设计按照64个为上限来设计。核心数越来越多的多核处理器的进入市场使得微软不得不做较大的改动来进行支持,因此Windows 的进程、线程和NUMA API在各个版本中行为不一样…

NoSQL技术——Redis

简单介绍 Redis是当下最流行的NoSQL数据库。在Redis中,数据的存储格式是以键值对的方式进行存储的。在键值对的存储形式中,值除了是常见的字符串,也可以是类似于Json对象的形式,或者是List,Map等数组格式,…

NVIDIA CUDA Win10安装步骤

前言 windows10 版本安装 CUDA ,首先需要下载两个安装包 CUDA toolkit(toolkit就是指工具包)cuDNN 1. 安装前准备 在安装CUDA之前,需要完成以下准备工作: 确认你的显卡已经正确安装,在设备管理器中可以看…

大模型重塑区域人才培养,飞桨(重庆)人工智能教育创新中心正式启动

2023年8月22日,重庆市高校人工智能产教融合院长研讨会暨飞桨(重庆)人工智能教育创新中心启动仪式在重庆大学成功召开。会上,由百度飞桨、重庆大学组织重庆市二十一所高校共建的飞桨(重庆)人工智能教育创新中…

5.(Python数模)固定费用问题

Python解决固定费用问题 具体文章参考博文 问题描述 源代码 import pulp # 导入 pulp 库# 主程序 def main():# 固定费用问题(Fixed cost problem)print("固定费用问题(Fixed cost problem)")# 问题建模:"""决策变量:y…

stable diffusion实践操作-原理

本文专门开一节SD原理相关的内容,在看之前,可以同步关注: stable diffusion实践操作 正文 1 原理

linux定时删除服务器日志

不说废话。直接进入操作流程 linux 定时任务是用的crontab 查看 crontab是否启动 service crond statusdead 死的 启动crontab service crond start 再次查看状态 running 运转的 查看 crontab cat /etc/crontab 查看 crontab任务 crontab -l 编辑 crontab任务 crontab …

ebay测评,物理环境与IP环境:解决平台风控问题的关键

近期eBay平台出现了大量风控问题,导致许多买家账号受到影响。实际上,这主要是由于环境搭建方面存在主要问题。时至2023年,许多人的技术方案仍停留在几年前,要么使用一键新机工具配合国外IP,要么使用指纹浏览器配合国外…

SpringCloudAlibaba Gateway(三)-整合Sentinel功能路由维度、API维度进行流控

Gateway整合Sentinel ​ 前面使用过Sentinel组件对服务提供者、服务消费者进行流控、限流等操作。除此之外,Sentinel还支持对Gateway、Zuul等主流网关进行限流。 ​ 自sentinel1.6.0版开始,Sentinel提供了Gateway的适配模块,能针对路由(rou…

SingletonSystem 单例管理系统

SingletonSystem 单例管理系统 单例模式是项目中最为常见的设计模式之一,但是写法都不够优雅不方便查找和管理,下面介绍一种使用反射实现的单例管理架构,需要基于之前介绍过的AssemblyManager 程序集管理器 1.AssemblyManager 每次加载程序…

Kubernetes技术--k8s核心技术 Secret

1.概述 Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec中。Secret可以以 Volume 或者环境变量的方式使用。 作用 加密数据存储在/etc中,使得pod容器以挂载volume方式进行访问。在进行的数据存储中是以base64加密的方式…

Gromacs模拟体系构建----进阶版

Gromacs是目前广泛使用的分子模拟软件,其在生物、材料等领域的模拟表现出较为突出的优势。之前,本公众号介绍过一系列体系的模拟以及gromacs的使用办法和教程。本次,将为大家介绍一种进阶版的模型构建方法。 在之前的介绍中,我们…

Windows修改电脑DNS

访问浏览器出现无法访问此页面,找不到DNS地址,则可以通过如下方式修改DNS 按下windows键R键(两个键一起按) 出现下面窗口 输入control按回车键(Enter键)就会出现下面的窗口 DNS可以填下面这些: 114.114.114.114 和 114.114.115.115 阿里DNS&a…

Virtualenvwrapper 的安装教程

Virtualenvwrapper Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境,它可以做: 将所有虚拟环境整合在一个目录下管理(新增,删除,复制)虚拟环境快速切换虚拟环境 安装方法 Li…

Java String类(2)

String方法 字符串拆分 可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串 相关方法如下: 方法功能String[ ] split(String regex)//以regex分割将字符串根据regex全部拆分String[ ] split(String regex, int limit)将字符串以指定的格式,拆…