PETR 论文学习

news2024/11/28 0:49:11

1. 解决了什么问题?

DETR3D 为端到端的 3D 目标检测提供了一个思路。但是,DETR3D 中的 2D 到 3D 的变换会带来一些问题。

  • Reference point 的预测坐标可能不够准确,采样特征可能位于目标区域之外;
  • 只有映射点周围的特征会被选取,无法从全局角度学习特征;
  • 特征采样过程复杂,很难实际应用。

所以,要想摆脱 2D-to-3D 变换和特征采样,构建一个在线端到端的 3D 检测器仍是一个难题。

2. 提出了什么方法?

对于上述问题,作者基于 DETR 设计了一个简单而优雅的方案。通过编码 3D position embedding,将多相机的 2D 特征变换为 3D 特征,这样 object query 直接在 3D 环境下更新。作者提出了 position embedding transformation(PETR),将 3D 位置信息编码到图像特征中,输出特征就带有了 3D 位置信息。这样 object queries 能感知到 3D 位置特征,实现端到端的目标检测。
下图比较了 DETR、DETR3D 和 PETR。在 DETR 中,object query 和 2D 特征相互作用,完成 2D 检测。DETR3D 将预测的 3D reference points 投影到图像平面,采样投影点附近的 2D 特征,然后在 decoder 里面和 object queries 相互作用,重复这一过程,不断地优化。PETR 会输出带有 3D 位置信息的特征,将 3D position embedding 编码进 2D 图像特征中。Object queries 直接和带有 3D 位置的特征发生作用,输出 3D 预测结果。
在这里插入图片描述

2.1 整体架构

给定 N N N个相机视角的图像 I = { I i ∈ R 3 × H I × W I , i = 1 , 2 , . . . , N } I=\lbrace I_i\in \mathcal{R}^{3\times H_I \times W_I},i=1,2,...,N \rbrace I={IiR3×HI×WI,i=1,2,...,N},输入进主干网络(ResNet-50)提取 2D 多角度特征 F 2 d = { F i 2 d ∈ R C × H F × W F , i = 1 , 2 , . . . , N } F^{2d}=\lbrace F_i^{2d}\in \mathcal{R}^{C\times H_F \times W_F}, i=1,2,...,N \rbrace F2d={Fi2dRC×HF×WF,i=1,2,...,N}。在 3D coordinate generator 中,相机视锥空间(camera frustum space)首先会离散为一个 3D meshgrid,然后通过相机参数转换该 meshgrid 的坐标,生成 3D 世界坐标系的坐标。将 3D 坐标和多视角的 2D 特征一起输入 3D position encoder,输出带有 3D 位置的特征 F 3 d = { F i 3 d ∈ R C × H F × W F , i = 1 , 2 , . . . , N } F^{3d}=\lbrace F_i^{3d}\in \mathcal{R}^{C\times H_F\times W_F}, i=1,2,...,N \rbrace F3d={Fi3dRC×HF×WF,i=1,2,...,N}。然后将 F 3 d F^{3d} F3d 输入 transformer decoder,更新由 query generator 提出的 object queries。最后用这些 object queries 来预测目标的类别和 3D 边框。
在这里插入图片描述

2.2 3D Coordinate Generator

为了在 2D 图像和 3D 空间之间建立联系,我们将相机视锥空间的点映射到 3D 空间,这两个空间是一一对应的。首先离散化视锥空间,生成一个大小是 ( W F , H F , D ) (W_F,H_F,D) (WF,HF,D) 的 meshgrid。Meshgrid 中的每一个点可以表示为 p j m = ( u j × d j , v j × d j , d j , 1 ) T p_j^m=(u_j\times d_j, v_j\times d_j, d_j, 1)^T pjm=(uj×dj,vj×dj,dj,1)T ( u j , v j ) (u_j, v_j) (uj,vj)是图像中的像素坐标, d j d_j dj是垂直于相机平面的深度值。不同的相机视角会共享这个 meshgrid,3D 空间对应的坐标 p i , j 3 d = ( x i , j , y i , j , z i , j , 1 ) T p_{i,j}^{3d}=(x_{i,j},y_{i,j},z_{i,j},1)^T pi,j3d=(xi,j,yi,j,zi,j,1)T可通过 3D 逆映射计算得到:
p i , j 3 d = K i − 1 p j m p^{3d}_{i,j}=K_i^{-1} p_{j}^m pi,j3d=Ki1pjm

其中 K i ∈ R 4 × 4 K_i\in \mathcal{R}^{4\times 4} KiR4×4是第 i i i个相机视角的变换矩阵,执行从 3D 世界坐标系到相机视锥空间的变换。下面进一步归一化 3D 坐标:
{ x i , j = ( x i , j − x m i n ) / ( x m a x − x m i n ) y i , j = ( y i , j − y m i n ) / ( y m a x − y m i n ) z i , j = ( z i , j − z m i n ) / ( z m a x − z m i n ) \left\{ \begin{aligned} x_{i,j} & = & (x_{i,j}-x_{min})/(x_{max}-x_{min})\\ y_{i,j} & = & (y_{i,j}-y_{min})/(y_{max}-y_{min})\\ z_{i,j} & = & (z_{i,j}-z_{min})/(z_{max}-z_{min}) \end{aligned} \right. xi,jyi,jzi,j===(xi,jxmin)/(xmaxxmin)(yi,jymin)/(ymaxymin)(zi,jzmin)/(zmaxzmin)

其中 [ x m i n , y m i n , z m i n , x m a x , y m a x , z m a x ] \left[ x_{min}, y_{min}, z_{min}, x_{max}, y_{max}, z_{max}\right] [xmin,ymin,zmin,xmax,ymax,zmax]是 3D 世界坐标系中的兴趣区域。这 H F × W F × D H_F\times W_F\times D HF×WF×D个点经过归一化的坐标最终被转置为 P 3 d = { P i 3 d ∈ R ( D × 4 ) × H F × W F , i = 1 , 2 , . . . , N } . P^{3d}=\lbrace P_i^{3d}\in \mathcal{R}^{(D\times 4)\times H_F \times W_F},i=1,2,...,N \rbrace. P3d={Pi3dR(D×4)×HF×WF,i=1,2,...,N}.

2.3 3D Position Encoder

3D position encoder 将 2D 图像特征 F 2 d = { F i 2 d ∈ R C × H F × W F , i = 1 , 2 , . . . , N } F^{2d}=\lbrace F_i^{2d}\in \mathcal{R}^{C\times H_F\times W_F},i=1,2,...,N \rbrace F2d={Fi2dRC×HF×WF,i=1,2,...,N}和 3D 位置信息联系起来,得到 3D 特征 F 3 d = { F i 3 d ∈ R C × H F × W F , i = 1 , 2 , . . . , N } F^{3d}=\lbrace F_i^{3d}\in \mathcal{R}^{C\times H_F\times W_F},i=1,2,...,N \rbrace F3d={Fi3dRC×HF×WF,i=1,2,...,N}

F i 3 d = ψ ( F i 2 d , P i 3 d ) , i = 1 , 2 , . . . , N F^{3d}_i=\psi(F_i^{2d},P_i^{3d}),\quad i=1,2,...,N Fi3d=ψ(Fi2d,Pi3d),i=1,2,...,N

其中 ψ ( ⋅ ) \psi(\cdot) ψ()是位置编码函数。给定 2D 特征 F 2 d F^{2d} F2d和 3D 坐标 P 3 d P^{3d} P3d P 3 d P^{3d} P3d首先输入进一个 MLP,变换为 3D position embedding(3D PE)。然后, F 2 d F^{2d} F2d通过 1 × 1 1\times 1 1×1卷积层做变换,与 3D PE 加起来,得到带有位置信息的 3D 特征。最后,将该 3D 特征作为 key 输入进 transformer decoder。
在这里插入图片描述

2.4 Query Generator

借鉴了 Anchor-DETR,根据 uniform distribution 初始化一组 3D 世界坐标系中可学习的 anchors。这些 3D anchors 坐标会输入到一个包含 2 个线性层的 MLP,产生初始的 object queries Q 0 Q_0 Q0。在 3D 空间使用 anchor points 能保证 PETR 收敛。

2.5 Decoder

Decoder 包含了 L L L层:
Q l = Ω l ( F 3 d , Q l − 1 ) , l = 1 , . . . , L Q_l=\Omega_l(F^{3d}, Q_{l-1}),\quad l=1,...,L Ql=Ωl(F3d,Ql1),l=1,...,L

Ω l \Omega_l Ωl是第 l l l个 decoder 层。 Q l ∈ R M × C Q_l\in \mathcal{R}^{M\times C} QlRM×C是第 l l l层更新后的 object queries。 M , C M,C M,C分别是 queries 个数和通道数。在每个 decoder 层内,通过 multi-head attention 和 FFN,object queries 和带有位置的 3D 特征 F 3 d F^{3d} F3d相互作用。经过多轮迭代,object queries 就具备了足够的表征性,可用于后续的预测。

2.6 Head and Loss

检测 head 主要包括分类分支和回归分支。输入是 decoder 输出的 object queries,预测目标类别和 3D 边框。回归分支预测的是关于 anchor points 的相对偏移量。
分类损失使用的是 Focal Loss,3D 边框回归损失用的是 L1 损失。 y = ( c , b ) y=(c,b) y=(c,b) y ^ = ( c ^ , b ^ ) \hat{y}=(\hat{c},\hat{b}) y^=(c^,b^)表示 ground-truth 集合与预测框集合。使用 Hungarian 算法在 ground-truths 和预测框之间进行标签分配。假设 σ \sigma σ是最优分配函数,3D 目标检测的损失函数就是:
L ( y , y ^ ) = λ c l s ∗ L c l s ( c , σ ( c ^ ) ) + L r e g ( b , σ ( b ^ ) ) ) L(y,\hat{y})=\lambda_{cls}\ast L_{cls}(c,\sigma(\hat{c})) + L_{reg}(b,\sigma(\hat{b}))) L(y,y^)=λclsLcls(c,σ(c^))+Lreg(b,σ(b^)))

λ c l s \lambda_{cls} λcls用于平衡不同的损失。

2.7 实验

2.7.1 数据集和评价度量

使用 nuScenes 基准,用 6 个相机、1 个 LiDAR 和 5 个 Radars 采集。数据集共有 1000 个场景,700 个用于训练,150 个用于验证,150 个用于测试。每个场景有 20 秒的视频帧,每 0.5 秒标注一帧的 3D 边框。本方法提供了以下指标:nuScenes Detection Score(NDS)、mAP、mean Average Translation Error(mATE)、mean Average Scale Error (mASE)、mean Average Orientation Error(mAOE)、mean Average Velocity Error(mAVE)、mean Average Attribute Error(mAAE)。

2.7.2 实现细节

使用 ResNet、Swin-Transformer、VoVNetV2 作为主干网络。C5 特征上采样后,与 C4 特征融合,输出 P4 特征,分辨率是输入大小的 1 / 16 1/16 1/16

对于 3D coordinate generation,沿着深度轴采样 64 个点。X 轴和 Y 轴的范围是 [ − 61.2 m , 61.2 m ] \left[ -61.2m, 61.2m\right] [61.2m,61.2m],Z 轴的范围是 [ − 10 m , 10 m ] \left[-10m, 10m \right] [10m,10m]。3D 世界坐标系的坐标归一化 ∈ [ 0 , 1 ] \in\left[0,1\right] [0,1]。损失函数的 λ c l s = 2.0 \lambda_{cls}=2.0 λcls=2.0

PETR 使用 AdamW 训练,weight decay 是 0.01 0.01 0.01。初始学习率为 2.0 × 1 0 − 4 2.0\times 10^{-4} 2.0×104,采取余弦退火策略。使用了多尺度训练,短边长度随机为 [ 640 , 900 ] \left[640,900\right] [640,900],长边 ≤ 1600 \leq 1600 1600。Ground-truth 实例会在 3D 空间内随机旋转一定角度, [ − 22. 5 ∘ , 22. 5 ∘ ] \left[-22.5^{\circ}, 22.5^{\circ}\right] [22.5,22.5]。所有实验在 8 张 V100 卡上训练 24 个 epochs,batch size 为 8。

2.7.3 SOTA 比较

在这里插入图片描述

2.8 Ablation

2.8.1 3D Position Embedding

若只用 DETR 中的 2D PE,模型的 mAP 只有 6.9 % 6.9\% 6.9%。若增加一个视角先验(在 PE 中加入 view number)以区分不同的视角,可带来小幅提升。若只用 3D 坐标生成的 3D PE,PETR 取得了 30.5 % 30.5\% 30.5% mAP,说明 3D PE 能提供有效的位置先验。
在这里插入图片描述

2.8.2 3D Coordinate Generator

在 3D coordinate generator,相机视锥空间离散化为 3D meshgrid。使用一个 RoI 进一步对 3D 世界坐标系的坐标归一化。下表中,作者尝试了不同的离散方法和兴趣区域范围。Uniform discretization 和 Linear-increasing discretization 表现相近。RoI 范围为 (−61.2m, −61.2m, −10.0m, 61.2m, 61.2m, 10.0m),表现要更好。
在这里插入图片描述

2.8.3 3D Position Encoder

3D position encoder 在 2D 特征中编码 3D 位置。相较于不用 MLP,使用 MLP 能提升 4.8 % 4.8\% 4.8% NDS 和 5.3 % 5.3\% 5.3%的 mAP。使用 3 × 3 3\times 3 3×3卷积,模型不会收敛,因为 3 × 3 3\times 3 3×3卷积破坏了 2D 特征和 3D 位置的对应关系。
在这里插入图片描述

2.8.4 Query Generator

作者提出了 4 类 anchor points: “None”, “Fix-BEV”, “Fix-3D”, “Learned-3D”。原生的 DETR 直接使用一组可学习参数作为 object queries,没有用 anchor points。

  • 不用 anchor points, object query 的全局特征无法让模型收敛。
  • “Fix-BEV” 是在 BEV 空间生成的 39 × 39 39\times 39 39×39个固定的 anchor points。
  • “Fix-3D” 是在 3D 空间生成的 16 × 16 × 6 16\times 16\times 6 16×16×6个固定的 anchor points。
  • “Learnable-3D” 是 3D 空间定义的可学习的 anchor points。

“Learnable-3D” 效果是最好的。另外,anchor points 个数也会有影响,1500 时效果最好,但会增加计算成本。
在这里插入图片描述

3. 有什么优点?

PETR 保留了 DETR 端到端的思路,无需复杂的 2D-to-3D 投影以及特征采样。推理时,以离线的方式产生 3D 位置坐标,作为输入 position embedding 使用。

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

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

相关文章

“超越极限 - 如何使用 Netty 高效处理大型数据?“ - 掌握 Netty 技巧,轻松应对海量数据处理!

1 写大型数据 因为网络饱和的可能性,如何在异步框架中高效地写大块的数据是特殊问题。由于写操作是非阻塞的,所以即使没有写出所有的数据,写操作也会在完成时返回并通知 ChannelFuture。当这种情况发生时,如果仍然不停地写入&…

2023年最受欢迎的低代码平台排行榜

随着企业寻找在降低成本的同时加快软件开发的方法,低代码开发平台正变得越来越受欢迎。这些平台允许开发人员使用拖放界面和预置组件,以最少的代码创建复杂的应用程序。它不仅帮助企业加快了数字化转型的脚步,而且打破业务部门和IT部门之间的…

多元分类预测 | Matlab萤火虫算法(FA)优化BP神经网络分类预测,FA-BP分类预测,多特征输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab萤火虫算法(FA)优化BP神经网络分类预测,FA-BP分类预测,多特征输入模型,多特征输入模型,多特征输入模型,多特征输入模型,多特征输入模型,多特征输入模型 多特征输入单输出的二分类及多…

商品领域十二张基础表设计思路与实现

欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,同时欢迎大家加我微信「java_front」一起交流学习 1 文章概述 商品在电商领域中是一个非常重要的领域,交易行为前提是有…

Selenium + Java 的环境搭建

Selenium Java 的环境搭建 🔎Chrome 浏览器下载 Chrome 浏览器检查对应版本下载 Chrome 浏览器驱动 🔎配置环境变量🔎验证环境是否搭建成功🔎关于 pom.xml 出现错误的解决方案 🔎Chrome 浏览器 下载 Chrome 浏览器 下…

使用命令启动默认程序(例如启动系统默认浏览器打开指定网址)

文章目录 目的基础说明代码示例(Golang)总结 目的 通过命令调用系统默认应用程序打开对应格式的文件是比较常用的功能。这篇文章将介绍下相关内容。 基础说明 Windows windows下可以使用 start 指令来启动默认程序打开对应格式文件; 比如 …

iptables中SNAT、DNAT及iptables服务启动时会自动还原规则

目录 SNAT原理与应用​编辑 SNAT转换前提条件 临时打开: 永久打开: 示例​编辑 DNAT原理与应用​编辑 DNAT转换前提条件 示例​编辑 防火墙规则的备份和还原 导出(备份)所有表的规则 清空规则​编辑 导入(还…

【VMware】Ubunt 20.04时间设置

文章目录 设置本地时间 UTC8设置24小时制同步网络时间参考 Talk is cheap, show me the code. 设置本地时间 UTC8 查看当前时区状态 rootnode1:~/k8s# timedatectlLocal time: Sun 2023-05-21 15:24:02 CSTUniversal time: Sun 2023-05-21 07:24:02 UTCRTC time: Sun 2023-05-2…

计算机网络知识汇总(十万字超详细)

文章目录 1 计算机网络概述1.1 概念、组成、功能和分类1.2 标准化工作及相关组织1.3 速率相关的性能指标1.4 时延、时延带宽积、往返时间RTT、利用率1.5 分层结构、接口、协议、服务1.6 OSI参考模型1.7 TCP/IP与五层参考模型1.8 第一章知识大纲 2.物理层2.1 物理层基本概念2.2 …

GaussDB(for MySQL)云原生数据库技术演进和挑战

摘要:GaussDB(for MySQL)是华为自研云原生数据库,具有高性能,高扩展,高可靠的特点,完全兼容MySQL协议,自研架构和友好的生态兼容性,可以同时满足数据库管理员、应用开发者、CTO的运维、使用和业…

QT5.14.2下载安装与环境配置

1.QT5.14.2的下载 QT5.14.2的官方下载地址为 https://download.qt.io/archive/qt/5.14/5.14.2/ ![在这里插入图片描述](https://img-blog.csdnimg.cn/9ef2a92414cb48a482d3cde4dd19a9ac.png 由于exe文件名称只有x86,只能选择这个下载,但是在安装时可以选…

ChatGPT也能助力建筑设计,这么智能?

ChatGPT也称为 Generative Pre-trained Transformer,是一种强大的语言生成工具,具有生成类人文本的能力。这项技术有可能通过为建筑师提供与客户、承包商和其他利益相关者沟通和协作的新方式来彻底改变建筑行业。在这篇文章中,我们将探讨架构…

css学习-内容加载占位动画(渐变动画)

文章目录 学习链接纯CSS渐变动画结合vue指令简单使用 学习链接 Git Hub前端50天50个项目 | 第24 内容文本 纯CSS渐变动画 <style lang"scss" scoped> .card-wrapper {width: 100%;height: 100%;display: flex;align-items: center;justify-content: center; …

tinymce富文本编辑器使用到二开

tinymce tinymce 一款现代化的富文本编辑器&#xff0c;有专门团队维护&#xff0c;是目前主流的富文本编辑器选择。 安装注意事项&#xff1a; 有两种方案分别是安装对应的vue/react组件&#xff0c;然后直接用组件&#xff0c;或者直接使用tinymce去按原生操作会报找不到文…

HTML- 标签学习之- 列表、表格

无序列表/有序列表&#xff1a; 标签组成( 无序ul 有序 ol ) -> li 父子级标签&#xff0c; ul只能包含li标签&#xff0c; li标签可以包含任意内容。 自定义列表 dl :自定义列表的整体&#xff0c;用于包裹dt/dd 标签dt:自定义列表主题dd:自定义列表的针对主题的…

【VMware】VM安装虚拟机

文章目录 VMware教程创建新的虚拟机自定义安装选择稍后安装操作系统这里选择Linux操作系统&#xff0c;版本为Centos7 64位选择名称和安装位置选择处理器、内核数量&#xff08;可根据电脑硬件以及需求进行调整&#xff09;选择2G内存&#xff08;可根据电脑硬件以及需求进行调…

计算机视觉 day94 DDH - YOLOv5:基于双IoU感知解耦头改进的YOLOv5,用于对象检测

DDH - YOLOv5:基于双IoU感知解耦头改进的YOLOv5&#xff0c;用于对象检测 I. IntroductionII. Related workPrediction head 预测头 III. Methodology3.1 Decoupled Head3.2 Double IoU‑aware3.3 Training3.4 Inference IV. Experiments4.1 与YOLOv5等检测头对PASCAL VOC2007测…

Netty实战(五)

ByteBuf—Netty的数据容器 一、什么是ByteBuf二、 ByteBuf 的 API三、ByteBuf 类——Netty 的数据容器3.1 ByteBuf如何工作&#xff1f;3.2 ByteBuf 的使用模式3.2.1 堆缓冲区3.2.2 直接缓冲区3.2.3 复合缓冲区 四、字节级操作4.1 随机访问索引4.2 顺序访问索引4.3 可丢弃字节4…

使用Docker部署Jenkins

Jenkins是一款开源的持续集成&#xff08;DI&#xff09;工具&#xff0c;广泛用于项目开发&#xff0c;能提供自动构建&#xff0c;测试&#xff0c;部署等功能。 文章目录 1、安装2、配置镜像加速3、登录初始化Jenkins4、配置Jenkins 1、安装 接下来使用Docker部署Jenkins&a…

【腾讯云 Finops Crane集训营】关于Crane的认识和体验总结

一、Crane 是什么 Crane 是一个基于 FinOps 的云资源分析与成本优化平台。它的愿景是在保证客户应用运行质量的前提下实现极致的降本。Crane 是 FinOps 基金会认证的云优化方案。 Crane基于Docker和Kubernetes技术&#xff0c;支持常见的容器化应用场景&#xff0c;如部署多个…