PETR/PETRv2/StreamPETR论文阅读

1. PETR

PETR网络结构如下,主要包括image-backbone,3D Coordinates Generator,3D Position Encoder,transformer Decoder四个模块。

把N 个视角的图像输入到骨干网络中以提取 2D 多视图特征。在 3D 坐标生成器中,首先将相机视锥体空间离散化为 3D 网格。然后,通过相机参数对网格的坐标进行变换,并生成 3D 世界空间中的坐标。3D 坐标与 2D 多视图特征一起被输入到 3D 位置编码器,生成 3D 位置感知特征。3D 特征进一步被输入到 Transformer 解码器中,并与从查询生成器生成的对象查询进行交互。更新后的对象查询用于预测对象类别以及 3D 边界框。

1.1. Images Backbone

采用resnet 或者 vovNet,下面的x表示concatenate

1.2. 3D Coordinates Generator

坐标生成跟ISS类似,假设一系列深度值,再有相机内存进行坐标转换

1.3. 3D Position Encoder

将多视图2D图像特征输入到1×1卷积层以进行降维。这个由三维坐标生成器生成的三维坐标被转换为通过多层感知的3D位置嵌入。3D位置嵌入与同一视图的2D图像特征相加,生成3D位置感知功能。最后,3D位置感知特征被展平并且用作变换器解码器的输入。

这里2D部分是经过三角函数编码后与3DpositionEmb相加作为K,原始的image feature作为V 输入transformer Decoder。

1.4. Transformer Decoder

​DET Query Generator

为了缓解在3D场景中的收敛困难,类似于Anchor DETR,我们首先在均匀分布的3D世界空间中初始化一组可学习的锚点从0到1。然后将3D锚点的坐标输入到小MLP具有两个线性层的网络,并生成初始对象查询Q0。在我们的实践中,在三维空间中使用锚点可以保证收敛在采用DETR中的设置或生成锚点的同时在BEV空间中不能实现令人满意的检测性能。

1.5. Head and Loss

检测头主要包含用于分类和回归的两个分支。来自解码器的更新后的对象查询被输入到检测头,以预测对象类别的概率以及 3D 边界框。请注意,回归分支相对于锚点的坐标预测相对偏移量。为了与 DETR3D 进行公平比较,我们在分类中也采用了焦点损失,在 3D 边界框回归中采用了 L1 损失。令 y = (c, b) 和\hat{y} = (\hat{c}, \hat{b})分别表示真实值和预测值的集合。匈牙利算法用于在真实值和预测值之间进行标签分配。假设 σ 是最优分配函数,那么 3D 对象检测的损失可以总结为:

这里L_{cls}表示分类的焦点损失,L_{reg}是回归的 L1 损失。\lambda_{cls}是一个超参数,用于平衡不同的损失。 

1.6. 实验

训练资源如下:

​代码执行图:

​可视化效果

​时延测试:

extract_feat_time0.0166
positional_encod_time0.0150
transformer_time0.0074
fnn_time0.0031
get_bboxes_time0.0015

2. PETRv2

PETRv2的整体框图如下,与PETR不同的地方在于加入了时序模块,分割头,以及改变了 3D Position Encoder。

2.1. Temporal Modeling

对于某一个view的相机来说,t时刻和t-1时刻构建的视锥模型(坐标值)是一模一样的,通过内外参变换到lidar/ego坐标系后的值也是一模一样的。但是不管从哪个坐标系来说,如果自车运动,上一时刻的坐标和当前时刻的坐标一定是不同的,因此需要进行坐标对齐。

全局坐标系作为一个桥梁可以很好的将t时刻和t-1时刻进行连接。本文以lidar坐标系为基础进行计算。t-1时刻到t时刻坐标的变换就是将t-1时刻的坐标从lidar坐标系变到ego坐标系,再到global坐标系(固定不变),再从global坐标系到t时刻的ego坐标系,再到t时刻lidar坐标系,这就完成了t-1时刻lidar坐标系坐标到t时刻lidar坐标系坐标的变换。

公式2中表示的就是在t-1时刻的lidar坐标系中的坐标变换到t时刻的lidar坐标系中的坐标。左侧的P就是t-1时刻的lidar坐标系中的坐标在t时刻lidar坐标系中的坐标值。t时刻的lidar坐标系和t-1时刻的lidar坐标系是不同的,是变化了的,所以需要一个不会变化的global坐标系作为桥梁。

3D坐标在对齐之后,前后帧直接cat起来,同时前后帧的2D特征也直接cat起来。个人感觉可以这样理解,对于一个视锥模型(D*4, H, W),变换到lidar坐标系后也是这样的tensor结构,也就是空间上看,还是这样一个视椎体。前后帧如果单独来看没有区别,数值都是一样的。但是在对t-1时刻的坐标进行变换后,这些坐标的值发生了变化,但是tensor结构没有发生变化依旧是(D*4, H, W),那么对于H, W的某个位置x和y来说,t时刻是一条射线上的若干点坐标,t-1时刻变换到t时刻,同样的位置x和y处是上一时刻的一一对应的坐标,这表示的就是坐标的变化,这条射线上每个点在△t内坐标的变化。而2D特征的cat就是t时刻和t-1时刻特征的组合,用来增强特征表达。

2.2. Multi-task Learning

不同的任务使用task-specific的queries,anchor points的选择不同。

3d目标检测的检测头和PETR中是一样的,learnable anchors通过mlp形成queries。

分割是把高分辨率的bev map分成小的patch,每个query负责一个特定的patch,比如bev map中左上25*25像素的patch。在bev空间中使用固定的anchor points初始化queries,然后通过一个2层的MLP生成seg queries,这些queries在decoder中不断更新最后输入到分割头,和CVT中的decoder相似,预测最终的分割结果。

车道线的表达使用的是一系列的3D坐标,比如在深度方向(y)上均匀采样100个点,每条车道线如果在y上的某个点可见就有相对应的x和z值,如果不可见就不关注,说明这个y值的地方没有车道线,一般可见性都是连续的,某一段y值区域连续可见,有对应的x和z,这样通过散点的形式表示一条线。

定义anchor lane平行于y轴,选择anchor points生成lane quereis,最后预测类别,相对于anchor lane的x和z轴的offsets和每个位置的可见性。

3. StreamPETR

StreamPETR的总体架构。内存队列存储历史对象查询。在Propagation Transformer中,最近的对象查询依次与历史查询和当前图像特征交互,以获得时间和空间信息。输出查询被进一步用于生成检测结果,并且前K个非背景目标查询被推送到存储器队列中。通过存储器队列的循环更新,长期时间信息被逐帧传播。

3.1. Propagation Transformer模块

Propagation Transformer和MLN 的细节。在PT中,object查询与混合查询和图像特征进行迭代交互。运动感知层规范化对运动属性进行编码(姿态、时间戳、速度),并隐式地执行补偿。不同色调的矩形象征着来自不同帧,灰色矩形表示当前帧的初始化查询,虚线矩形对应于背景查询。

3.2. Hybrid Attention

Hybrid Attention在这里用于取代原生的self-attention。首先它起到self-attention的作用,对于当前帧的重复框进行抑制。其次,当前帧的object query还需要和历史帧object query做类似cross attention操作,进行时序的交互。 由于hybrid queries远小于cross attention中 image token的数量,因此所带来的额外计算量可以忽略不计。此外历史object query也会传递到当前帧为当前帧提供更好的初始化(propagate query)。

参考文献

https://zhuanlan.zhihu.com/p/660293688

https://zhuanlan.zhihu.com/p/689481109

PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

PETR: Position Embedding Transformation for Multi-View 3D Object Detection 

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

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

相关文章

EHOME视频平台EasyCVR多品牌摄像机视频平台监控视频编码H.265与Smart 265的区别?

在视频监控领域,技术的不断进步推动着行业向更高效、更智能的方向发展。特别是在编码技术方面,Smart 265作为一种新型的视频编码技术,相较于传统的H.265,有明显优势。这种技术的优势在EasyCVR视频监控汇聚管理平台中得到了充分的体…

《基于深度学习的车辆行驶三维环境双目感知方法研究》

复原论文思路: 《基于深度学习的车辆行驶三维环境双目感知方法研究》 1、双目测距的原理 按照上述公式算的话,求d的话,只和xl-xr有关系,这样一来,是不是只要两张图像上一个测试点的像素位置确定,对应的深…

新手小白学习docker第八弹------实现MySQL主从复制搭建

目录 0 引言1 实操1.1 新建主服务器容器1.2 书写配置文件1.3 重启master实例1.4 进入mysql-master容器master容器实例内创建数据同步用户 1.5 新建从服务器容器1.6 书写配置文件1.7 重启slave实例1.8 查看主从同步状态1.9 进入mysql-slave容器1.9.1 配置主从复制1.9.2 查看主从…

微信小程序之路由跳转传数据及接收

跳转并传id或者对象 1.home/index.wxml <!--点击goto方法 将spu_id传过去--> <view class"item" bind:tap"goto" data-id"{{item.spu_id}}"> 结果: 2.home/index.js goto(event){// 路由跳转页面,并把id传传过去//获取商品idlet i…

前海华海金融创新中心的工地餐点探寻

​前海的工地餐大部分都是13元一份的哈。我在前海华海金融创新中心的工地餐点吃过一份猪杂饭&#xff0c;现做13元一份。我一般打包后回公司吃或直接桂湾公园找个环境优美的地方吃饭。 ​我点的这份猪杂汤粉主要是瘦肉、猪肝、肉饼片、豆芽和生菜&#xff0c;老板依旧贴心问需要…

reduce-scatter:适合分布式计算;Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响

目录 Gather Scatter Reduce reduce-scatter:适合分布式计算 Reduce、LayerNorm和Broadcast算子的执行顺序对计算结果的影响,以及它们对资源消耗的影响 计算结果理论正确性 资源消耗方面 Gather 这个也很好理解,就是把多个进程的数据拼凑在一起。 Scatter 不同于Br…

移门缓冲支架:减少噪音,提升生活质量

移门缓冲支架不仅是一个简单的五金配件&#xff0c;更是提升家居生活质量的有效工具。通过减少门关闭时的噪音&#xff0c;移门缓冲支架能够创造一个安静、舒适的生活环境。以下是移门缓冲支架在减少噪音、提升生活质量方面的详细解析&#xff1a; 1. 显著降低关门噪音问题&…

模型运行速度笔记: s/epoch VS s/iter

1 概念介绍 在模型训练中&#xff1a; s/epoch 表示每个epoch所需的秒数&#xff0c;即完成一轮完整数据集训练的时间。s/iter 表示每个iteration&#xff08;迭代&#xff09;所需的秒数&#xff0c;即处理一个batch的时间。 它们的关系是&#xff1a; 2 举例 比如我tra…

JavaWeb笔记整理——Spring Task、WebSocket

目录 SpringTask ​cron表达式 WebSocket SpringTask cron表达式 WebSocket

PET-文件包含-FINISHED

include发生错误报warning&#xff0c;继续执行。require发生错误直接error&#xff0c;不继续执行 无视扩展名&#xff0c;只要能解析&#xff0c;就能当可执行文件执行&#xff0c;哪怕文件后缀或没后缀 1 条件竞争 pass17 只需要知道tmp的路径。把xieshell.jpg上传&…

rust逆向初探

rust 逆向葵花宝典 rust逆向技巧 rust逆向三板斧&#xff1a; [!NOTE] 快速定位关键函数 (真正的main函数)&#xff1a;观察输出、输入&#xff0c;字符串搜索&#xff0c;断点等方法。定位关键 加密区 &#xff1a;根据输入的flag&#xff0c;打硬件断点&#xff0c;快速捕获…

vue项目npm run serve出现【- Network: unavailable】(从排查到放弃)

1. 问题现象 环境&#xff1a; 系统&#xff1a;win11node&#xff1a;v16.20.2“vue”: “2.6.10” 执行npm run serve启动vue项目&#xff0c;期望&#xff1a; App running at:- Local: http://localhost:9528/ - Network: http://x.x.x.x:9528/实际&#xff1a; App runn…

项目技术栈-解决方案-web3去中心化

web3去中心化 Web3 DApp区块链:钱包:智能合约:UI:ETH系开发技能树DeFi应用 去中心化金融P2P 去中心化网络参考Web3 DApp 区块链: 以以太坊(Ethereum)为主流,也包括Solana、Aptos等其他非EVM链。 区块链本身是软件,需要运行在一系列节点上,这些节点组成P2P网络或者半…

贝叶斯网络——基于概率的图模型(详解)

贝叶斯网络&#xff08;Bayesian Network&#xff0c;简称BN&#xff09;是一种基于概率图模型的表示方法&#xff0c;用于表示变量之间的依赖关系&#xff0c;并通过条件概率推断变量间的关系。它通过有向无环图&#xff08;DAG&#xff09;来描述变量之间的依赖关系&#xff…

组件间通信(组件间传递数据)

组件间通信(组件间传递数据) 在 Vue.js 中&#xff0c;组件间通信是开发者需要经常处理的任务&#xff0c;特别是在构建具有多层次组件的复杂应用时。根据组件之间的关系和数据流的复杂程度&#xff0c;可以采用不同的通信方式。以下是常用的几种组件间通信方式&#xff1a; …

使用Element UI实现前端分页,及el-table表格跨页选择数据,切换分页保留分页数据,限制多选数量

文章目录 一、前端分页1、模板部分 (\<template>)2、数据部分 (data)3、计算属性 (computed)4、方法 (methods) 二、跨页选择1、模板部分 (\<template>)2、数据部分 (data)3、方法 (methods) 三、限制数量1、模板部分 (\<template>)2、数据部分 (data)3、方法…

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知&#xff0c;GitLab 的升级必须要严格遵循升级路径&#xff0c;否则就会出现问题&#xff0c;导致升级失败。因此&#xff0c;在 GitLab 升级之前需要做好两件事情&#xff1a; 当前版本的确认升级路径的确认 极狐GitLa…

网上商城系统设计与Spring Boot框架

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…

LabVIEW 实现 find_nearest_neighbors 功能(二维平面上的最近邻查找)

1. 背景介绍 在数据分析和图像处理领域&#xff0c;经常需要查找给定点的最近邻居点。在LabVIEW中&#xff0c;计算二维平面上多个点之间的欧氏距离&#xff0c;并返回距离最近的几个点是一种常见操作。find_nearest_neighbors 函数用于实现这个功能。 2. 欧氏距离计算 在二维…

Python如何从HTML提取img标签下的src属性

目录 前提准备步骤1. 解析HTML内容2. 查找所有的img标签3. 提取src属性 完整代码 前提准备 在处理网页数据时&#xff0c;我们经常需要从HTML中提取特定的信息&#xff0c;比如图片的URL。 这通常通过获取img标签的src属性来实现。 在开始之前&#xff0c;你需要确保已经安装…