[论文阅读]Voxel R-CNN——迈向高性能基于体素的3D目标检测

news/2024/7/10 2:43:43 标签: 论文阅读, cnn, 3d, 人工智能, 目标检测, 深度学习

Voxel R-CNN

Voxel R-CNN: Towards High Performance Voxel-based 3D Object Detection
迈向高性能基于体素的3D目标检测
论文网址:Voxel R-CNN
论文代码:Voxel R-CNN

简读论文

该论文提出了 Voxel R-CNN,这是一种基于体素的高性能 3D 对象检测框架。作者认为,原始点的精确定位对于准确的目标检测并不重要,粗体素粒度可以提供足够的检测精度。Voxel R-CNN 由 3D 主干网络、2D 鸟瞰 (BEV) 区域提议网络 (RPN) 和检测头组成。该框架利用两阶段方法中的体素特征,实现了与最先进的基于点的模型相当的检测精度,但计算成本仅为其一小部分。作者在 KITTI 数据集和 Waymo 开放数据集上进行了大量实验,证明 Voxel R-CNN 在保持实时帧处理速率的同时提供了更高的检测精度。

Voxel R-CNN前向传播过程

Voxel R-CNN
Voxel R-CNN网络的前向传播过程可以总结如下:

  1. Voxelization:原始点云数据被划分为规则的体素,体素是表示物体空间占用情况的3D网格单元。

  2. 3D骨干网络:体素化数据被输入到3D骨干网络中,该网络逐渐将体素抽象成3D特征体积。该网络从体素数据中提取高级特征。

  3. 2D骨干网络和RPN:3D特征体积被转换为鸟瞰图(BEV)表示。2D骨干网络和Region Proposal Network(RPN)被应用于在BEV空间中生成密集的区域建议。这些建议表示潜在的物体位置。

  4. Voxel RoI池化:为了从3D特征体积中提取感兴趣区域(RoI)特征,进行Voxel RoI池化操作。该操作从体素特征体积中聚合空间上下文。它利用邻居感知属性提取相邻体素特征,并使用局部特征聚合模块进行加速。

  5. 检测头:从Voxel RoI池化获得的RoI特征被输入到检测头中,该头部进一步细化边界框的预测。这一步提高了物体检测的准确性。

总体而言,Voxel R-CNN网络将体素化表示的优势与点云模型的准确性相结合。它通过利用体素特征体积中的3D结构上下文,并使用Voxel RoI池化从体素数据中直接提取RoI特征,实现了这一目标。

摘要

3D 目标检测的最新进展在很大程度上依赖于 3D 数据的表示方式,即基于体素或基于点的表示。许多现有的高性能3D 检测器都是基于点的,因为这种结构可以更好地保留精确的点位置。然而,由于无序存储,点级特征会导致较高的计算开销。相比之下,基于体素的结构更适合特征提取,但由于输入数据被划分为网格,因此精度通常较低。本文采取了略有不同的观点 - 本文发现原始点的精确定位对于高性能 3D 目标检测来说并不是必需的,并且粗体素粒度也可以提供足够的检测精度。考虑到这一观点,本文设计了一个简单但有效的基于体素的框架,名为 Voxel R-CNN。通过在两阶段方法中充分利用体素特征,本文的方法实现了与最先进的基于点的模型相当的检测精度,但计算成本仅为其一小部分。 Voxel R-CNN 由 3D 主干网络、2D 鸟瞰(BEV)区域提议网络和检测头组成。体素 RoI 池化旨在直接从体素特征中提取 RoI 特征以进行进一步细化。在广泛使用的 KITTI 数据集和更新的 Waymo 开放数据集上进行了大量的实验。结果表明,与现有的基于体素的方法相比,Voxel R-CNN 提供了更高的检测精度,同时保持了实时帧处理速率,即在 NVIDIA RTX 2080 Ti GPU 上的速度为 25 FPS。

引言

使用点云的 3D 目标检测在自动驾驶汽车、机器人和增强/虚拟现实领域受到了广泛关注。尽管深度学习的最新发展使得二维图像目标检测的效果激增,但它仍然是不能直接将这些 2D 方法应用于 3D 点云,特别是在处理点云的稀疏性和非结构化特性时。此外,这些应用通常要求检测系统具有高效率,由于 3D 空间更大,因此设计 3D 检测器变得更加困难。
现有的 3D 检测方法可大致分为两类,即基于体素的和基于点的。基于体素的方法将点云划分为规则网格,这更适用于卷积神经网络(CNN),并且由于其优越的内存定位性,在特征提取方面更为高效。然而,其缺点是体素化通常会导致精确位置信息的丢失。当前最先进的 3D 检测器主要是基于点的,它以原始点云作为输入,并通过迭代采样和分组抽象出一组点表示。先进的基于点的方法在各种基准上排名最高。因此,这导致了一种流行的观点,即原始点云中的精确位置信息对于准确的目标定位至关重要。尽管检测精度较高,但基于点的方法一般来说效率较低,因为用点表示法搜索近邻进行点集抽象的成本较高。
随着检测算法的成熟,本文已经准备好将这些算法部署在现实系统上。这里,出现了一个新的挑战:能否设计出一种与先进的基于点的方法一样准确、与基于体素的方法一样快的方法?在这项工作中,为了实现这一目标,采用基于体素的框架并尝试提高其准确性。本文首先认为原始点云的精确定位很好但没有必要。本文观察到,基于体素的方法通常在鸟瞰图 (BEV) 表示上执行目标检测,即使输入数据是 3D 体素。相比之下,基于点的方法通常依赖抽象的点表示来恢复 3D 结构上下文,并根据逐点特征进行进一步细化,如图 1 (a) (b) 所示。通过仔细研究底层机制,本文发现,现有的基于体素的方法的主要缺点在于,它们将三维特征体积转换为 BEV 表示,但却没有恢复三维结构上下文。
在这里插入图片描述
考虑到这一点,本文建议从 3D 特征体中聚合 3D 结构上下文。具体来说,引入了一种新颖的基于体素的检测器,即Voxel R-CNN,以充分利用两阶段pipeline中的体素特征(见图 1 ©)。 Voxel R-CNN 由三个核心模块组成:(1) 3D 主干网络,(2) 2D 主干网络,后跟区域提议网络 (RPN),以及 (3) 具有新体素 RoI 池化操作的检测头。 3D骨干网络逐渐将体素抽象为3D特征体。密集区域提案由 2D 主干和 RPN 生成。然后,通过体素 RoI 池化直接从 3D 特征体中提取 RoI 特征。在设计体素 RoI 池化时,利用邻居感知属性(有利于更好的内存局部性)来提取相邻体素特征,并设计一个局部特征聚合模块以进一步加速。最后,采用 3D RoI 特征进行进一步的框细化
这项工作的主要贡献源于 Voxel R-CNN 的设计,它在准确性和效率之间取得了谨慎的平衡。 Voxel R-CNN 令人鼓舞的实验结果也证实了本文的观点:原始点的精确定位对于高性能 3D 目标检测并不重要,较粗的体素粒度也可以为此任务提供足够的空间上下文线索。请注意,本文的 Voxel R-CNN 框架作为一个简单但有效的基线,有助于进一步的调查和下游任务。

对3D目标检测的思考

本节首先回顾两种代表性的基线方法,即 SECOND 和 PVRCNN ,然后研究开发高性能 3D 物体检测器的关键因素。

Revisiting

SECOND. : SECOND是一种基于体素的单阶段目标检测器。它将体素化数据馈送到 3D 主干网络以进行特征提取。然后将 3D 特征体积转换为 BEV 表示。最后,应用 2D 主干和区域提议网络 (RPN) 来执行检测。
PV-RCNN. : PV-RCNN 通过添加关键点分支来保留 3D 结构信息来扩展 SECOND。引入体素集抽象 (VSA) 将多尺度 3D 体素特征集成到关键点中。通过 RoI 网格池化从关键点进一步提取每个 3D 区域提案的特征以进行框细化。

Analysis

SECOND和PV-RCNN在检测性能(即准确率和效率)方面存在很大差距。这两种方法有以下不同点。首先,SECOND 是一种单阶段方法,而 PV-RCNN 采用检测头进行框细化。其次,PV-RCNN 中的关键点保留了 3D 结构信息,而 SECOND 直接对 BEV 表示进行检测。为了验证框细化和 3D 结构信息对检测性能的影响,本文在 SECOND 的 2D 主干网络顶部添加了一个检测头。由于 BEV 框未与轴对齐,因此利用旋转 RoI 对齐进行 RoI 特征提取。
在 BEV 特征之上直接添加 BEV 检测头可使 KITTI 汽车适度数据的 AP 提高 0.6%,但迄今为止仍落后于 PV-RCNN 的准确性。这验证了边界框细化的有效性,也表明BEV表示的能力相当有限。通常,PV-RCNN 通过体素集抽象将体素特征集成到采样关键点中。关键点作为中间特征表示来有效保留 3D 结构信息。然而,点-体素交互几乎占据了整体运行时间的一半,这使得 PV-RCNN 比 SECOND 慢得多。
Summary. 总之,通过分析 SECOND 中鸟瞰图(BEV)特征表示的局限性以及 PV-RCNN 中每个组件的计算成本,观察到以下几点:(a)3D 结构对于 3D 目标检测器非常重要,因为仅 BEV 表示不足以精确预测 3D 空间中的边界框; (b)点-体素特征交互非常耗时并且影响检测器的效率。这些观察结果促使本文直接利用 3D 体素张量并开发仅体素的 3D 目标检测器。

Voxel R-CNN Design

Voxel R-CNN 是一种基于体素的 3D 目标检测两阶段框架。如图 2 所示,体素 R-CNN 包括:(a) 3D 主干网络,(b) 2D 主干网络,后跟区域提议网络 (RPN),以及 © 体素 RoI 池化和检测头框细化。在 Voxel RCNN 中,首先将原始点云划分为规则体素,并利用 3D 主干网络进行特征提取。然后,将稀疏 3D 体素转换为 BEV 表示,并在其上应用 2D 主干网络和 RPN 来生成 3D 区域提案。随后,使用体素 RoI 池化来提取 RoI 特征,并将其输入到检测头中进行框细化。下面详细讨论这些模块。由于创新主要在于体素RoI池化,所以首先讨论它。
Voxel R-CNN

Voxel RoI pooling

为了直接聚合来自 3D 体素特征量的空间上下文,本文提出了体素 RoI 池化。
Voxel Volumes as Points. : 本文将稀疏 3D 体积表示为一组非空体素中心点及其相应的特征向量。具体来说,体素中心的 3D 坐标是通过索引、体素大小和点云边界来计算的。
Voxel Query. : 本文提出了一种名为体素查询的新操作,用于从 3D 特征体积中查找邻近体素。与无序点云相比,体素规则排列在量化空间中,易于邻居访问。例如,查询体素的 26 个相邻体素可以通过添加三元组偏移量来轻松计算体素索引 (i, j, k)。通过利用这一特性,本文设计了体素查询来有效地对体素进行分组。体素查询如图3所示。
在这里插入图片描述
首先将查询点量化为体素,然后通过索引翻译可以有效地获得邻近体素。本文在体素查询中利用曼哈顿距离,并在距离阈值内采样最多 K 个体素。具体来说,体素 α = (iα, jα, kα) 和 β = (iβ, jβ, kβ) 之间的曼哈顿距离 D(α, β) 计算如下:
3deaa57.png" alt="D" />
假设 3D 特征体积中有 N 个非空体素,我们利用球查询来查找给定查询点的相邻体素,时间复杂度为 O(N)。然而,进行体素查询的时间复杂度仅为 O(K),其中 K 是邻居的数量。 Neighboraware 属性使得使用体素查询对邻近体素特征进行分组比使用球查询对邻近点特征进行分组更加有效。
Voxel RoI Pooling Layer. : 本文设计体素 RoI 池化层如下。它首先将区域提议划分为 G×G×G 规则子体素。取中心点作为相应子体素的网格点。由于 3D 特征量极其稀疏(非空体素占空间 < 3%),不能像 (Fast rcnn) 那样直接对每个子体素的特征利用最大池化。相反,将相邻体素的特征集成到网格点中以进行特征提取。具体来说,给定一个网格点gi,首先利用体素查询来对一组相邻体素进行分组 Γi = {vi1 , vi2 , ··· , vik }。然后,使用 PointNet 模块聚合相邻体素特征,如下所示:
在这里插入图片描述
其中 vi − gi 表示相对坐标,φk i 是 vk i 的体素特征,Ψ(·) 表示 MLP。沿通道执行最大池化操作max(·)以获得聚合特征向量ηi。特别是,利用体素 RoI 池化从 3D 主干网络最后两个阶段的 3D 特征体中提取体素特征。对于每个阶段,设置两个曼哈顿距离阈值以对具有多个尺度的体素进行分组。然后,将从不同阶段和规模汇集的聚合特征连接起来以获得 RoI 特征。
Accelerated Local Aggregation. : 即使使用本文提出的体素查询,体素 RoI 池化中的局部聚合操作(即 PointNet 模块)仍然涉及很大的计算复杂度。如图4(a)所示,总共有M个网格点(M = r × G3,其中r是RoI的数量,G是网格大小),每个网格点分为K个体素。分组特征向量的维度为C+3,包括C维体素特征和3维相对坐标。当应用 FC 层时,分组体素占用大量内存并导致大量计算 FLOP(O(M×K × (C + 3) ×C’))。
在这里插入图片描述
本文另外引入了加速的 PointNet 模块,以进一步降低体素查询的计算复杂度。通常,如图 4 (b) 所示,体素特征和相对坐标被分解为两个流。给定权重为W ∈ R(C’,C+3) 的FC 层,将其分为WF ∈ R(C’,C) 和WC ∈ R(C’,3)。由于体素特征与网格点无关,因此在执行体素查询之前,在体素特征上应用带有 WF 的 FC 层。然后,在体素查询之后,只需将分组的相对坐标乘以WC即可获得相对位置特征并将其添加到分组的体素特征中。本文的加速 PointNet 模块的 FLOP 为 O(N×C×C’ +M×K× 3×C’)。由于分组体素的数量(M×K)比N高一个数量级,因此加速后的PointNet模块比原始模块更高效。

Backbone and Region Proposal Networks

本文遵循类似的设计(Second ;PV-RCNN)来构建本文的骨干网络。 3D 主干网络逐渐将体素化输入转换为特征量。然后,输出张量沿 Z 轴堆叠以生成 BEV 特征图。 2D 主干网络由两个组件组成:一个具有两块标准 3×3 卷积层的自顶向下特征提取子网络,以及一个对自顶向下特征进行上采样和连接的多尺度特征融合子网络。最后,2D 主干网络的输出与两个同级 1 × 1 卷积层进行卷积,以生成 3D 区域提案。

Detect Head

检测头将 RoI 特征作为框细化的输入。具体来说,共享 2 层 MLP 首先将 RoI 特征转换为特征向量。然后,将展平的特征注入两个兄弟分支:一个用于边界框回归,另一个用于置信度预测。框回归分支预测 3D 区域提案到地面真值框的残差,置信分支预测 IoU-相关置信度得分。

Training Objectives

Losses of RPN. : RPN 的损失设计为分类损失和框回归损失的组合,如下所示:
losses of rpn
Losses of detect head. : 分配给置信分支的目标是 IoU 相关值,如下:

其中IoUi是第i个proposal和对应的groundtruth box之间的IoU,θH和θL是前景和背景IoU阈值。这里利用二元交叉熵损失进行置信度预测。框回归分支也像 RPN 中一样使用 Huber Loss。检测头的损失计算如下:
loss

结论

本文提出了 Voxel R-CNN,一种具有基于体素表示的新型 3D 目标检测器。以体素为输入,Voxel R-CNN 首先从鸟瞰图特征表示中生成密集区域建议,然后利用体素 RoI 池化从 3D 体素特征中提取区域特征以进行进一步细化。通过充分利用体素表示,本文的体素 R-CNN 在准确性和效率之间取得了谨慎的平衡。 KITTI 数据集和 Waymo 开放数据集的令人鼓舞的结果表明,本文的 Voxel-RCNN 可以作为简单但有效的基线,以促进 3D 对象检测和其他下游任务的研究。


http://www.niftyadmin.cn/n/5131170.html

相关文章

听GPT 讲Rust源代码--library/std(6)

题图来自 Why you should use Python and Rust together[1] File: rust/library/std/src/sys/unix/thread_parking/netbsd.rs 文件netbsd.rs位于Rust源代码的rust/library/std/src/sys/unix/thread_parking目录下。该文件是Rust标准库中用于Unix操作系统的线程等待和唤醒机制的…

37基于MATLAB平台的图像去噪,锐化,边缘检测,程序已调试通过,可直接运行。

基于MATLAB平台的图像去噪&#xff0c;锐化&#xff0c;边缘检测&#xff0c;程序已调试通过&#xff0c;可直接运行。 37matlab边缘检测图像处理 (xiaohongshu.com)

Python基础汇总、

python的优点 易于学习&#xff1a;Python有相对较少的关键字&#xff0c;结构简单&#xff0c;和一个明确定义的语法&#xff0c;学习起来更加简单。易于阅读&#xff1a;Python代码定义的更清晰。易于维护&#xff1a;Python的成功在于它的源代码是相当容易维护的。一个广泛的…

解决git action定时任务执行失败的方法

为了测试git action定时任务是否有效&#xff0c;你可能选择一个最近的时间测试&#xff0c; 但是发现怎么也触发不了&#xff0c;是不是觉得很苦恼。但是同样的时间&#xff0c;在第二天的定时任务又能成功运行。 这是什么原因&#xff1f; 原因就在上图&#xff0c;git act…

从零开始的LINUX(三)

bc&#xff1a;进行浮点数运算 uname&#xff1a;查看当前的操作系统 ctrlc&#xff1a;中止当前正在执行的程序 ctrld&#xff1a;退出xshell shutdown&#xff1a;关机 reboot&#xff1a;重启 shell外壳&#xff1a; 作用&#xff1a;1、命令解释&#xff08;将输入的程序…

从工厂到社会:探索如何应用设计模式工厂模式

文章目录 &#x1f31f; 将设计模式工厂模式运用到社会当中&#x1f34a; 工厂模式在社会中的应用&#x1f389; 工厂&#x1f389; 餐厅&#x1f389; 运输 &#x1f34a; 工厂模式的优势&#x1f389; 代码简洁&#x1f389; 扩展性强&#x1f389; 便于维护和管理 &#x1f…

数据结构【DS】B树

m阶B树的核心特性: Q&#xff1a;根节点的子树数范围是多少&#xff1f;关键字数的范围是多少&#xff1f; A&#xff1a;根节点的子树数∈[2, m],关键字数∈[1, m-1]。 Q&#xff1a;其他结点的子树数范围是多少&#xff1f;关键字数范围是多少&#xff1f; Q&#xff1a;对任…

C现代方法(第14章)笔记——预处理器

文章目录 第14章 预处理器14.1 预处理器的工作原理14.2 预处理指令14.3 宏定义14.3.1 简单的宏14.3.2 带参数的宏14.3.3 #运算符14.3.4 ##运算符14.3.5 宏的通用属性14.3.6 宏定义中的圆括号14.3.7 创建较长的宏14.3.8 预定义宏14.3.9 C99中新增的预定义宏14.3.10 空的宏参数(C…