BEV感知PETR-V1和PETR-V2

news2025/1/18 7:42:16

参考代码:PETR

1. 概述

介绍:这两篇文章提出了以位置编码转换(PETR,position embedding transformation)为基础的BEV感知方法,按照方法中组件不同可将PETR划分为V1和V2版本。在V1版本中提出了基础版本的PETR,首先使用一种类似LSS的方法构建相机视锥,里面编码了图像中每个点在不同深度下的3D空间位置,这些3D空间位置经过编码网络之后(几层1*1的卷积)得到3D空间位置的embedding编码,embedding编码再与2D相机特征做融合将3D空间位置信息嵌入到2D图像特征中去,最后在生成的特征图上使用DETR方法检测3D目标。V2版本相对V1版本增加了时间序列的支持,特别的是对于时序带来位置空间相对变化导致的位置不匹配问题,对于该问题文章通过pose变换对齐的方式实现特征图对齐。在下游任务中除了3D目标检测任务之外,还引入了分割分支。

2. BEV特征提取

2.1 PETR-V1

在V1版本中数据处理流程见下图所示:
在这里插入图片描述
对于2D图像可以根据相机内外参数和假定的3D空间范围内生成相机视锥数据,对应上图中的3D Coordinates Generator部分,3D视锥数据再与图像2D图像特征融合得到具备感知3D位置信息的2D图像特征,之后在接下游检测任务。这里的核心便是如何将3D位置信息如何添加到2D中,与之对应的部分便是上图中的3D Position Encoder。该部分的具体结构见下图所示:
在这里插入图片描述
对于图像特征生成的视锥数据维度为 P 3 d = { P i 3 d ∈ R ( D ∗ 4 ) ∗ H F ∗ W F } P^{3d}=\{P_i^{3d}\in R^{(D*4)*H_F*W_F}\} P3d={Pi3dR(D4)HFWF},其中 W F , H F W_F,H_F WF,HF代表生成视锥时特征图的宽高, D D D代表深度划分的steps。这些数据经过几个 1 ∗ 1 1*1 11的卷积之后得到3D位置编码,再与图像2D特征相加便使得2D图像特征中嵌入了3D位置信息。对于产生位置编码时使用的操作,以及3D位置编码和2D图像特征融合操作,它们对性能带来的影响见下表:
在这里插入图片描述
其中感到惊讶的是 3 ∗ 3 3*3 33的卷积竟然带来这大的负收益-_-||。

2.2 PETR-V2

2.2.1 网络结构

V2版本在V1版本上添加了对时序的支持,但是引入时序信息带来的问题便是在不同时刻下图像物体的3D相对位置是不一致的。这就要求在新版的PETR中对图像中的3D位置信息进行了对齐,对于对齐文中是使用pose变换的形式实现的。同时对于3D位置编码还引入了2D图像特征引导的attention操作用于优化3D位置编码

在V2版本中算法的流程图见下图所示:
在这里插入图片描述
可以看到在图像的数据输入端添加了来自之前时序的数据。对于2D图像域的数据是直接通过concat组合起来,但是对于3D位置编码数据就不是直接这样处理了,其通过pose变换使其在车体坐标下对齐,也就是下图所示的样子:
在这里插入图片描述
t t t时刻的相机坐标系记为 c ( t ) c(t) c(t),激光雷达坐标系 l ( t ) l(t) l(t),车体坐标系 e ( t ) e(t) e(t),全局坐标系 g g g。对于一个从src到dst的变换记为 T s r c d s t T_{src}^{dst} Tsrcdst。则从图像坐标系到激光雷达坐标系的变换为:
P i l ( t ) ( t ) = T c i ( t ) l ( t ) K i − 1 P m ( t ) P_i^{l(t)}(t)=T_{c_i(t)}^{l(t)}K_i^{-1}P^m(t) Pil(t)(t)=Tci(t)l(t)Ki1Pm(t)
而激光雷达坐标系下 t − 1 t-1 t1 t t t的变换描述为:
P i l ( t ) ( t − 1 ) = T l ( t − 1 ) l ( t ) P i l ( t − 1 ) ( t − 1 ) P_i^{l(t)}(t-1)=T_{l(t-1)}^{l(t)}P_i^{l(t-1)}(t-1) Pil(t)(t1)=Tl(t1)l(t)Pil(t1)(t1)
其中的变换矩阵是借用了车体坐标系和全局坐标系作为中间变量迭代得到的:
T l ( t − 1 ) l ( t ) = T e ( t ) l ( t ) T g e ( t ) T g e ( t − 1 ) − 1 T e ( t − 1 ) l ( t − 1 ) − 1 T_{l(t-1)}^{l(t)}=T_{e(t)}^{l(t)}T_g^{e(t)}T_g^{e(t-1)^{-1}}T_{e(t-1)}^{l(t-1)^{-1}} Tl(t1)l(t)=Te(t)l(t)Tge(t)Tge(t1)1Te(t1)l(t1)1

在V2版本中通过2D特征给3D位置编码做attention优化,也就是使用下图中的结构实现:
在这里插入图片描述

2.2.2 鲁棒性分析

此外,文章还分析了相机外参、相机缺失、时序对齐异常情况进行分析,从下表中可以观察网络的鲁棒性:
在这里插入图片描述
在这里插入图片描述

3. 下游任务

3.1 PETR-V1

在V1版本中下游检测任务DETR的anchor point类型和transformer decoder中points-num对向能的影响:
在这里插入图片描述

PETR收敛性和速度分析:
在这里插入图片描述

在nuScenes test下的性能比较:
在这里插入图片描述

3.2 PETR-V2

V2的版本在V1基础上添加了分割分支,这里为了减少计算量对分割query的数量进行限制,使用一个query代表一个 16 ∗ 16 16*16 1616大小的网格,之后这个query负责这个区域的分割任务,其流程见下图所示:
在这里插入图片描述

nuScenes下检测检测性能比较:
在这里插入图片描述

nuScenes下分割性能比较:
在这里插入图片描述

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

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

相关文章

【C++】c++11学习-常用特性总结

前言 由于种种历史原因,C的C11版本更新带来了很多有用的东西~,在C98的基础语法体系之上,来看看C11新增了哪些实用的特性吧~ (加把劲~~(๑╹◡╹)ノ""") 目录 一、列表初始化 1.原始的列…

Mysql8.x版本主从加读写分离(二) mysql8.x读写分离

Mysql8.x版本主从加读写分离(一) mysql8.x主从_争取不加班!的博客-CSDN博客 Mycata需要使用jdk 单独一台服务器部署的mycat 192.168.11.143 手动上传jdk的包 tar zxvf jdk-8u121-linux-x64.tar.gz -C /usr/local/ 解压 cd /usr/local…

c++ - 第14节 - c++中的多态

1. 多态的概念 多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。举个栗子:比如买票这个行为,当普通人买票时,是全价买票;学生…

如何运行黑马程序员redis项目黑马点评(hm-dianping)、常见报错解决与部分接口的测试方法

文章目录一、相关链接二、下载代码方法一:使用git clone方法二:直接下载程序zip压缩包三、如何运行这份代码运行sql文件1、先新建数据库hmdp2、导入项目中的hmdp.sql文件修改application.yaml配置文件配置Mysql1、配置驱动2、配置url(这个不一…

Allwinner T3 汽车级处理器为工业级 SoM 提供动力

Allwinner T3 是一款四核 Cortex-A7 汽车级处理器,支持 -40C 至 85C 的宽工业温度范围。对比了全志T3的规格后,我觉得和全志A40i差不多,因为全志有不同的事业部,T系列是面向车规级市场,而A系列一直以来都是面向平板市场…

python之Matplotlib

1.数据可视化是什么? 数据可视化是将数据转换为图或表等信息图像,以一种更直观的方式展示和呈现数据.可视化,是通过图形化的手段进行有效地表达,准确高效,简洁全面地传递某种信息,甚至帮助我们发现某种规律和特征,挖掘数据背后的价值. 2. Matplotlib是什么? matplotlib是一…

教程:如何将一首歌生成一个二维码?

大雨打在树叶上的声音、烟花绽放的声音、邻居家的狗叫声、海浪和沙滩的决斗声、冬天的风掀翻路人衣服的声音、小孩练琴的声音、啤酒冒泡的声音…… 哦,还有你唱歌的声音,这些都可以做成一个二维码。扫码后就可以听到。 如今,声音二维码已经…

华为云GaussDB打造金融行业坚实数据底座,共创数字金融新未来

近期,由北京金融信息化研究所主办的首届中国金融业数据库技术大会在京顺利举行,大会邀请了金融主管单位领导、金融机构高层、以及数据库企业代表和众多数据库领域专家,共同畅谈金融行业数据库应用的创新发展和实践成果。华为云数据库服务产品…

为什么重写 equals 还要重写 hashCode 方法?

关于equals与hashCode关系的描述 我们可以先来看一下这个定理 (1)如果两个对象的 hashCode 值相等的情况下,对象的内容值不一定相等(hash碰撞问题) (2)如果使用 equals 方法比较两个对象内容值…

世界杯“引爆”东南亚电商狂潮,电商人如何选品和营销?

世界杯,作为最受关注的国际赛事之一,2022年的世界杯已经在卡塔尔拉开帷幕,中国元素无处不在,为跨境电商行业带来很多新机遇。对于跨境电商来说,更是要牢牢抓住这场全球赛事的商机!那么跨境电商人应该如何紧…

全面焕新|详解 Grafana v9.0.x 新增功能特性

Grafana 9.0 是一个提升 Grafana 易用性的版本,通过全新的和改进的操作界面来获取数据,以及默认的 Grafana 警报体验。 Grafana 的一个主要使命是让可观测性、数据可视化和分析更容易的惠及到每个人。对于像 Prometheus 和 Loki 这样的流行数据源&#…

基于Jeecgboot前后端分离的ERP系统开发代码生成(四)

今天主要做一个采购入库单的功能 这个是主从表,所以也是通过online表单设计完成基本功能 1、采购入库单 按照上面生成代码,基本的录入编辑等功能就可以了,当然一些细节需要后续完善 选择商品 2、审核通过 对于库存的更新,需要进行…

跨境电商独立站站群模式

首先我们来了解一下什么是独立站组模式?独立站群模式是指通过建站工具快速建立多个网站。每个网站都有独立的域名,每个网站只存放某个垂直领域的产品,包装成专业的工厂和卖家。每个网站的产品详情和公司实力展示尽量完美(不是市面上的复制品)…

Spring——IOC容器启动及Bean生成流程

IOC容器启动及Bean生成流程一、容器启动IOC启动流程重点二、扫描并注册BeanDefination加载并过滤资源注册BeanDefination三、BeanFactory后置处理四、注册Bean后置处理器五、遍历BeanDefination,实例化单例BeanpreInstantiateSingletonsdoGetBean(我们只…

idea配置tomcat,解决控制台乱码问题

问题描述: 配置tomcat,解决idea运行tomcat8.5.27版本控制台输出乱码。 版本: jdk1.8.0_172 IntelliJ IDEA 2019.3 3 (Ultimate Edition) apache-tomcat-8.5.27 解决步骤: 1、打开目录 apache-tomcat-8.5.27\conf\ 目录下 logging…

编译原理—运行环境、局部存储分配、活动记录、全局栈式存储分配、非局部名字的访问、参数传递

编译原理—运行环境、局部存储分配、全局栈式存储分配、非局部名字的访问、参数传递#pic_center 65%x55%1. 运行环境1.1存储组织与分配1.2运行时内存划分2.活动记录2.1活动记录的内容2.2活动记录内容的存取3.静态存储分配3.1FORTRAN静态存储分配4. 动态存储分配4.1 栈式分配下的…

Java反射(Reflex)机制

反射概述 Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。 加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象&#x…

【linux】linux实操篇之软件包管理

前言 关于这一快软件包管理知识点不多,我们主要认识一下rpm和yum这两个软件包管理工具,主要还是yum的使用! rpm 包的管理 一种用于互联网下载包的打包及安装工具,它包含在某些 Linux 分发版中。它生成具有 .rpm 扩展名的文件。…

QQ plot 的解读

QQ plot全称是Quantile-Quantile Plot,分位数-分位数图是通过比较两个概率分布的分位数对这两个概率分布进行比较的概率图方法。 这个图形的形式非常简单,有点类似RNA-seq中评价两个样本相关性的散点图(图1)。这类图形为什么那么…

Java小技能:多级菜单排序并返回树结构菜单列表

文章目录 引言I 生成树形结构菜单列表1.1 获取全部菜单1.2 获取一级菜单,递归获取子节点。1.3 实体1.4 DtoII 常见问题2.1 no instance(s) of type variable(s) R exist so that void conforms to R,2.2 集合filter过滤Integer数值为空问题解决方案引言 需求: 服务商角色配置…