[论文阅读]Voxel R-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(α, β) 计算如下:
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.hqwc.cn/news/155732.html

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

相关文章

可视化 | 数据可视化降维算法梳理

文章目录 &#x1f4da;数据描述&#x1f407;iris&#x1f407;MNIST &#x1f4da;PCA&#x1f407;算法流程&#x1f407;图像描述 &#x1f4da;Kernel-PCA&#x1f407;算法流程&#x1f407;图像描述 &#x1f4da;MDS&#x1f407;算法流程&#x1f407;图像描述 &#…

我在Vscode学OpenCV 初步接触

OpenCV是一个开源的计算机视觉库&#xff0c;可以处理图像和视频数据。它包含了超过2500个优化过的算法&#xff0c;用于对图像和视频进行处理&#xff0c;包括目标识别、面部识别、运动跟踪、立体视觉等。OpenCV支持多种编程语言&#xff0c;包括C、Python、Java等&#xff0c…

20.3 OpenSSL 对称AES加解密算法

AES算法是一种对称加密算法&#xff0c;全称为高级加密标准&#xff08;Advanced Encryption Standard&#xff09;。它是一种分组密码&#xff0c;以128比特为一个分组进行加密&#xff0c;其密钥长度可以是128比特、192比特或256比特&#xff0c;因此可以提供不同等级的安全性…

linux驱动开发-点亮第一个led灯

linux驱动开发-点亮第一个led灯 一.背景知识二.如何写驱动程序三.实战演练3.1 查询原理图3.2 配置引脚为gpio模式3.3 配置引脚为输出模式3.4 DR寄存器 四.代码实例4.1 驱动层4.2 应用层 一.背景知识 我们这里使用的是百问网的imx_6ullpro的开发板。这里和裸机不同的是&#xf…

python爬虫selenium和ddddocr使用

python爬虫selenium和ddddocr使用 selenium使用 selenium实际上是web自动化测试工具&#xff0c;能够通过代码完全模拟人使用浏览器自动访问目标站点并操作来进行web测试。 通过pythonselenium结合来实现爬虫十分巧妙。 由于是模拟人的点击来操作&#xff0c;所以实际上被反…

SSM培训报名管理系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 培训报名管理系统是一套完善的信息系统&#xff0c;结合SSM框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开…

BUUCTF 小明的保险箱 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 小明有一个保险箱&#xff0c;里面珍藏了小明的日记本&#xff0c;他记录了什么秘密呢&#xff1f;。。。告诉你&#xff0c;其实保险箱的密码四位纯数字密码。 密文&#xff1a; 下载附件&#xff0c;得到一张.jpg…

【CPP】类和对象

1- Classes and Objects Structures A struct in C is a type consisting of a sequence of data membersSome functions/Statements are needed to operate the data members of an object of a struct type 不不小心操作错误&#xff0c;不小心越界 Classes You should b…

【SVN内网穿透】实现远程访问Linux SVN服务

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…

Django实战项目-学习任务系统-用户管理

接着上期代码框架&#xff0c;开发第6个功能&#xff0c;用户管理&#xff0c;查看用户信息和学生用户属性值&#xff0c;尤其是总积分值&#xff0c;还可以查看积分流水明细&#xff0c;完成任务奖励积分&#xff0c;兑换物品消耗积分。 第一步&#xff1a;编写第6个功能-用户…

uniapp中APP端使用echarts用formatter设置y轴保留2位小数点不生效

uniapp使用echarts&#xff0c;在内置浏览器中&#xff0c;设置保留2位小数能正常显示&#xff08;代码如下&#xff09;&#xff0c;但是在APP端这个设置不起作用。 yAxis: {type: value,axisLabel: {formatter: function (val) {return val.toFixed(2); //y轴始终保留小数点…

idea使用MyBatisX插件

1.MyBatisX功能 (1).实现mapper和xml的跳转 (2).自动生成java文件&#xff0c;比如mapper、service、dao、pojo 2.安装MyBatisX插件 install后然后重启idea即可 3.使用MyBatieX实现mapper和xml跳转 &#xff08;1&#xff09;.点击mapper中的红色图标即可跳转到对应的xml方…