PETRv2 论文学习

news/2024/11/9 10:04:17/

1. 解决了什么问题?

过去,一般使用基于单目视觉进行 3D 目标检测。现在进行 3D 任务的方法大致分两类。一类是基于 BEV,将多视角图像映射为 BEV 表征,然后使用 3D 目标检测方法。另一类是基于 DETR,如 DETR3D 和 PETR,定义了 3D 空间的 object queries,在 transformer decoder 中 object queries 与多视角的图像互相作用。像 BEVFormer 和 BEVDet4D 都使用了时域建模,在 BEV 空间对齐连续帧的特征,改进速度预测。因此,本文的 PETRv2 也尝试在 PETR 中加入时域建模,在时域里对齐 3D position embedding。

2. 提出了什么方法?

基于 PETR,PETRv2 尝试对时域建模,使用之前帧的时域信息来优化 3D 目标检测和 BEV 分割。PETRv2 拓展了 PETR 的 3D position embedding,用于时间建模。在不同帧之间,3D PE 在时域内对齐目标位位置。

如下图,PETRv2 使用主干网络从多视角图像中提取 2D 特征,从相机视锥空间生成世界坐标系的 3D 坐标。考虑到车自身的运动,为了实现时域对齐,首先通过姿态变换,将第 t − 1 t-1 t1帧的 3D 坐标转换为第 t t t帧的坐标系。然后将相邻帧的 2D 特征和 3D 坐标 concat 起来,输入 feature-guided position encoder,生成 transformer decoder 所需的 keys 和 values。Det queries 和 seg queries 分别用 learnable 3D anchor points 和 fixed BEV points 初始化,然后在 transformer decoder 中与多相机视角的图像特征(keys 和 values)发生作用。更新完成的 queries 用于预测 3D 边框和 BEV 分割。 A ◯ \textcircled{\text{A}} A是将第 t − 1 t-1 t1帧到第 t t t帧的 3D 坐标对齐操作。 C ◯ \textcircled{\text{C}} C是 batch 维度的 concat 操作。
在这里插入图片描述

2.1 Temporal Modeling

通过 3D coordinate alignment(CA) 和 feature-guided position encoder(FPE) 实现时域建模,让定位和速度预测更加准确。

2.1.1 3D Coordinate Alignment

如下图 (a) 所示,时域对齐操作将第 t − 1 t-1 t1帧的 3D 坐标变换到第 t t t帧的坐标系。在第 t t t帧,我们共有 4 个坐标系:相机坐标系 c ( t ) c(t) c(t),激光雷达坐标系 l ( t ) l(t) l(t),车辆自身(ego)坐标系 e ( t ) e(t) e(t),世界坐标系 g g g T s r c d s t T_{src}^{dst} Tsrcdst是从 src 坐标系到 dst 坐标系的变换矩阵。
我们将 l ( t ) l(t) l(t)作为默认的 3D 空间,生成多相机带有 3D 位置的特征。第 i i i个相机投影的 3D 点 P i l ( t ) ( t ) P_i^{l(t)}(t) Pil(t)(t)可以表示为:
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)}\ast K_i^{-1}\ast P^m(t) Pil(t)(t)=Tci(t)l(t)Ki1Pm(t)

P m ( t ) P^m(t) Pm(t)是一个点集合,代表第 t t t帧相机视锥空间 meshgrid。 K i ∈ R 4 × 4 K_i\in \mathcal{R}^{4\times 4} KiR4×4是第 i i i个相机的内参矩阵。将第 t − 1 t-1 t1帧的 3D 点坐标对齐到第 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)}\ast P_i^{l(t-1)}(t-1) Pil(t)(t1)=Tl(t1)l(t)Pil(t1)(t1)

T l ( t − 1 ) l ( t ) T_{l(t-1)}^{l(t)} Tl(t1)l(t)的计算如下,世界坐标系 (global) 将第 t t t帧和第 t − 1 t-1 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)} \ast T_g^{e(t)}\ast {T_g^{e(t-1)}}^{-1}\ast {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

对齐后的点 [ P i l ( t ) ( t − 1 ) , P i l ( t ) ( t ) ] \left[P_i^{l(t)}(t-1), P_i^{l(t)}(t)\right] [Pil(t)(t1),Pil(t)(t)]将用于生成 3D position embedding。
在这里插入图片描述

2.1.2 Feature-guided Position Encoder

在 PETR 中,3D PE 的生成过程如下:
P E i 3 d ( t ) = ψ ( P i l ( t ) ( t ) ) PE_i^{3d}(t)=\psi(P_i^{l(t)}(t)) PEi3d(t)=ψ(Pil(t)(t))
其中 ψ ( ⋅ ) \psi(\cdot) ψ()是 MLP。3D PE 是独立于输入图像特征的。但是,作者认为图像特征能提供一些有用的信息,如深度值。于是提出了 feature-guided position encoder,引入视觉先验知识。
P E i 3 d ( t ) = ξ ( F i ( t ) ) ∗ ψ ( P i l ( t ) ( t ) ) PE_i^{3d}(t)=\xi(F_i(t))\ast \psi(P_i^{l(t)}(t)) PEi3d(t)=ξ(Fi(t))ψ(Pil(t)(t))
ξ \xi ξ也是一个 MLP。 F i ( t ) F_i(t) Fi(t)是第 i i i个相机的 2D 图像特征。如上图 (b),先用 1 × 1 1\times 1 1×1卷积映射 2D 特征,然后输入 ξ \xi ξ和 sigmoid 函数,得到注意力权重。用 ψ \psi ψ对 3D 坐标进行变换,与注意力权重相乘得到 3D PE。将 3D PE 和 2D 特征相加,即 transformer decoder 的 key。 1 × 1 1\times 1 1×1卷积映射的 2D 特征作为 transformer decoder 的 value 使用。

2.2 BEV Segmentation

在这里插入图片描述

本文提出用 seg queries 实现高质量的 BEV 分割。一个高分辨率的 BEV map 可以划分为若干个小 patches。每个 seg query 对应着 BEV map 上的一个 patch( 16 × 16 16\times 16 16×16像素)。如上图,用 BEV 空间中固定的 anchor points 初始化 seg queries。然后通过 MLP 将 anchor points 映射为 seg queries。随后,seg queries 输入进 transformer decoder,与图像特征相互作用。更新后的 seg queries 输入进 segmentation head (MLP + sigmoid) 预测 BEV embeddings。将每个 BEV embedding 变形为 BEV patch ( 16 × 16 16\times 16 16×16大小), R ◯ \textcircled{\text{R}} R是 reshape 操作。最后将所有的 BEV patches 连接起来,产生分割预测结果 ( 256 × 256 256\times 256 256×256大小)。分割分支使用交叉熵损失:

l s e g = 1 N ∑ j = 0 C ∑ i = 0 N [ ω y ^ i log ⁡ ( y i ) + ( 1 − y ^ i ) log ⁡ ( 1 − y i ) ] \mathcal{l}_{seg}=\frac{1}{N}\sum_{j=0}^C \sum_{i=0}^N \left[\omega \hat{y}_i \log(y_i) + (1-\hat{y}_i)\log(1-y_i)\right] lseg=N1j=0Ci=0N[ωy^ilog(yi)+(1y^i)log(1yi)]
其中 N N N是 ground-truth 像素个数, C C C是目标类别数。 y ^ \hat{y} y^是分割标签, y y y是预测 BEV map。 ω \omega ω是正样本权重,计算 ground-truth 中正负样本比例得到。

2.3 实验

2.3.1 Datasets and Metrics

使用 nuScenes 基准,本文只关注 3D 目标检测和 BEV 分割。

对于 3D 检测,每个场景包含 20 秒视频帧,每 0.5 秒标注一帧画面的 3D 边框。与官方评测标准一样,报告了 NDS, mAP, mATE, mASE, mAOE, mAVE 指标。

对于 BEV 分割,使用 IoU 得分作为度量。Ground-truth 包括 3 个不同的类别:可行驶区域、车道线和 vehicle。车道线类别由 2 个 map layers 组成:Lane-Divider 和 Road-Divider。对于 vehicle 分割,将 3D ground-truth 边框投影到 BEV 平面,得到 BEV ground truth。Vehicle ground-truth 分割包括所有 Vehicle 类别的边框:自行车、巴士、汽车、建筑卡车、摩托车、导轨电车、一般卡车。

2.3.2 实现细节

主干网络是 ResNet 和 VoVNetV2。P4 特征(将 C4 和 C5 特征融合起来,分辨率为输入图像的 1 / 16 1/16 1/16)作为 2D 特征使用。3D 坐标的生成保持和 PETR 一致。使用了 AdamW 训练模型,weight decay 是 0.01 0.01 0.01。初始学习率为 2.0 × 1 0 − 4 2.0\times 10^{-4} 2.0×104,使用余弦退火策略。所有试验在 8 张 Tesla A100 上训练了 24 个 epochs,batch size 为 8。

对于 3D 检测,在 nuScenes 测试集上使用了 1500 个 det queries 进行试验。在 3D 世界坐标系初始化一组 learnable anchor points,通过一个 MLP 生成 det queries。分类损失使用 focal loss,3D 边框回归使用 L1 损失。使用 Hungarian 算法匹配 ground-truths 和预测框。

对于 BEV 分割,用 nuScenes 数据集提供的 map layers 生成 256 × 256 256\times 256 256×256 ground-truth BEV map。Patch size 为 16 × 16 16\times 16 16×16,共有 256 个 seg queries 来预测最终的 BEV 分割结果。

为了模拟外参噪声,作者对相机外参随机应用 3D 旋转,3D 旋转在真实场景中很常见。随机选择一个相机进行 3D 旋转。 α , β , γ \alpha,\beta,\gamma α,β,γ 分别是 X , Y , Z X,Y,Z X,Y,Z轴的角度,研究了多种旋转设定,最大的幅度是 α m a x , β m a x , γ m a x ∈ { 2 , 4 , 6 , 8 } \alpha_{max},\beta_{max},\gamma_{max}\in\lbrace 2,4,6,8 \rbrace αmax,βmax,γmax{2,4,6,8} α m a x = 2 \alpha_{max}=2 αmax=2表示 α \alpha α是从 [ − 2 , 2 ] \left[-2,2\right] [2,2]之间均匀采样。

2.4 Ablation

使用 VoVNet-99 为主干网络。主干网络在 DDAM15M 数据集和 nuScenes 上预训练。输入尺寸是 800 × 320 800\times 320 800×320,训练 24 个 epochs。Det queries 设为 900。

2.4.1 时域建模

研究了 3D coordinate alignment 和 feature-guided position encoder 的作用。如下表所示,没有 CA,PETRv2 只会提升 2.7 % 2.7\% 2.7%NDS, 0.5 % 0.5\% 0.5%mAP;加入了 CA,会进一步提升 2.1 % 2.1\% 2.1%NDS 和 0.9 % 0.9\% 0.9%mAP。对于 FPE,作者将 PETR 中的 3D PE 替换为 FPE,NDS 提升了 1.5 % 1.5\% 1.5%,mAP 却只提升 0.2 % 0.2\% 0.2%,而将 FPE 应用在 PETRv2 中,mAP 提升了 0.8 % 0.8\% 0.8%,说明 FPE 对时域建模有帮助。
在这里插入图片描述

2.4.2 Seg Query

研究了 seg query 的作用,以及每个 query 分配的 patch size 的影响。分割分支的损失权重为 1。如下面左边表格,当 patch size × 2 \times 2 ×2 时,queries 的个数就会相应地 × 1 / 4 \times 1/4 ×1/4。实验表明,当 query 个数为 256,patch size 为 32 × 32 32\times 32 32×32时表现最好。
在这里插入图片描述

2.4.3 多任务学习

作者也研究了多任务学习的影响。可以发现,3D 检测和 BEV 分割任务不能相互提升。当检测和分割分支的权重都是 1.0 1.0 1.0,BEV 分割在 IoU-lane 的表现会比只有分割分支时下降 3.1 % 3.1\% 3.1%。当分割分支的权重为 2 时,表现还算不错。
在这里插入图片描述

3. 有什么优点?

PETRv2 为 3D 感知任务提供了一个强大而统一的基线方案。


http://www.ppmy.cn/news/73894.html

相关文章

11. Mysql执行原理之索引合并详解

MySQL性能调优 1. Intersection合并1.1 情况一:等值匹配1.2 情况二:主键列可以是范围匹配 2. Union合并2.1 情况一:等值匹配2.2 情况二:主键列可以是范围匹配2.3 情况三:使用Intersection索引合并的搜索条件 3. Sort-U…

GIT常用命令大全

系列文章目录 文章目录 系列文章目录1.git clone xxx2.git add .3.git commit -m "xxx"4.git checkout -b xx origin/xx5.git push --set-upstream origin newbranch:origin/branch6.git branch --set-upstream-toorigin/branch newbranch7.git reset --soft HEAD^8.…

从零开始学习JVM(五)-运行时数据区的方法区

1. 方法区基本介绍 官方文档:The Java Virtual Machine Specification 《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言&…

Godot引擎 4.0 文档 - 循序渐进教程 - 节点和场景

本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面: Nodes and Scenes — Godot Engine (stable) documentation in English 节点和场景 在Godot 关键概念概述中,我们看到 Godot 游戏是一棵场景树&#xff0…

面试官:你的技术看起来像是初级

最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。 在沟通中发现,由…

敏捷项目管理阶段框架-推测阶段实践

推测阶段实践 关注产品和项目,创造和理解产品待办事项列表和发布计划 怎么做计划、怎么做需求 产品需求规划(怎么做计划) 洋葱圈 愿景、产品路线图、产品发布计划、迭代发布计划、每日计划 滚动式规划,渐进明细,走一…

“GPT+医疗健康”:给予医疗领域新机遇

现如今,GPT十分火热。随着人们对健康医疗的关注越来越热切,GPT已逐渐成为健康医疗领域的重要角色之一。GPT可以用于许多医疗语境中,如医学咨询、病症诊断、健康建议、在线问诊、患者教育、健康数据跟踪等。 GPT是一种基于深度学习的自然语言处…

Linux-搭建web服务器

综合练习:请给openlab搭建web网站 ​ 网站需求: ​ 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! ​ 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于[www.…