[论文阅读]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.mzph.cn/news/125246.shtml

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

相关文章

Go 语言gin框架的web

节省时间与精力&#xff0c;更高效地打造稳定可靠的Web项目&#xff1a;基于Go语言和Gin框架的完善Web项目骨架。无需从零开始&#xff0c;直接利用这个骨架&#xff0c;快速搭建一个功能齐全、性能优异的Web应用。充分发挥Go语言和Gin框架的优势&#xff0c;轻松处理高并发、大…

Qt实现卡牌对对碰游戏

效果 闲来无事&#xff0c;实现一个对对碰游戏&#xff0c;卡牌样式是火影动漫。 先上效果&#xff1a; 卡牌对对碰_火影主题 玩法 启动游戏&#xff0c;进入第一关卡&#xff0c;所有卡牌都为未翻开状态&#xff0c;即背面朝上&#xff1b;点击卡牌&#xff0c;则将卡牌翻开…

jenkins工具系列 —— 删除Jenkins JOB后清理workspace

文章目录 问题现象分析解决思路脚本实现问题现象分析 Jenkins使用过程中,占用空间最大的两个位置: 1 、workspace: 工作空间,可以随便删除,删除后再次构建时间可能会比较长,因为要重新获取一些资源。 2 、job: 存放的是项目的配置、构建结果、日志等。不建议手动删除,…

双亲委派模式

双亲委派模型 双亲委派的工作过程 一个类加载器收到类加载的请求时&#xff0c;它不会马上加载该类&#xff0c;而是把这个请求委托给父加载器去完成&#xff0c;每一个层次的类加载器都是如此&#xff0c;因此所有的类加载请求都必须先通过启动类加载器尝试加载&#xff0c;只…

【快报】正在把教学视频搬运到B站和油管

hello 大家好&#xff0c;我是老戴。 熟悉我的同学知道&#xff0c;我从14年开始录制GIS相关的教学视频&#xff0c;之前是放到优酷上给大家下载&#xff0c;后期发现很多人把视频弄下来淘宝上卖&#xff0c;然后我就把视频整体放到了我自己的网站上。 随着视频录制的数量越来…

HBuilderX实现安卓真机调试

1. 简介 HBuilderX 简称 HX&#xff0c;HBuilder&#xff0c;H 是 HTML 的缩写&#xff0c;Builder 是建设者。是为前端开发者服务的通用 IDE&#xff0c;或者称为编辑器。与 vscode、sublime、webstorm 类似。 它可以开发普通 web 项目&#xff0c;也可以开发 DCloud 出品的 u…

nodejs+vue+python+php基于微信小程序的在线学习平台设计与实现-计算机毕业设计

困扰管理层的许多问题当中,在线学习也是不敢忽视的一块。但是管理好在线学习又面临很多麻烦需要解决,例如&#xff1a;如何在工作琐碎,记录繁多的情况下将在线学习的当前情况反应给课程问题管理员决策,等等。 流,开发一个在线学习平台小程序一方面的可能会更合乎时宜,另一方面来…

Java IDEA设置环境变量 以及代码获取

IDEA 设置环境变量 1.进入如图设置&#xff0c;一般的 java 程序和 spring Boot &#xff0c;还是tomcat 都可以从这里进入 2.可以在如下地方手动添加 3. tomcat 类 4.spring boot 类 代码获取指定值 假定我设置如下 代码则如下获取&#xff08;类均为JDK 自带类&…

代理模式代理模式

目录 1、使用场景 2、静态代理 3、动态代理 JDK动态代理 CGlib 动态代理实现 1、使用场景 使用代理模式主要有两个目的&#xff1a;一是保护目标对象&#xff0c;二是增强目标对象。 2、静态代理 NO.1 抽象接口&#xff1a;定义视频播放器接口Player public interface P…

http1,https,http2,http3总结

1.HTTP 当我们浏览网页时&#xff0c;地址栏中使用最多的多是https://开头的url&#xff0c;它与我们所学的http协议有什么区别&#xff1f; http协议又叫超文本传输协议&#xff0c;它是应用层中使用最多的协议&#xff0c; http与我们常说的socket有什么区别吗&#xff1f; …

怎么在电脑桌面上添加待办事项?

在电脑桌面上选择一款待办事项工具&#xff0c;可以高效率地督促各项任务的按时完成&#xff0c;大大地提高工作的效率&#xff0c;支持在电脑上安装待办事项的工具类型是比较多的&#xff0c;为更好的辅助日常办公&#xff0c;建议大家可以选择高效率辅助办公的电脑便签工具&a…

网络协议--TCP的未来和性能

24.1 引言 TCP已经在从1200 b/s的拨号SLIP链路到以太数据链路上运行了许多年。在80年代和90年代初期&#xff0c;以太网是运行TCP/IP最主要的数据链路方式。虽然TCP在比以太网速率高的环境&#xff08;如T2电话线、FDDI及千兆比网络&#xff09;中也能够正确运行&#xff0c;但…

高并发和存储之间的关系是什么?

文章目录 &#x1f50a;博主介绍&#x1f916;博主的简介&#x1f4e5;博主的目标 &#x1f964;本文内容&#x1f34a; 一、高并发对存储的压力&#x1f34a; 二、存储的性能和可扩展性 &#x1f4e2;总结 &#x1f50a;博主介绍 &#x1f4d5;我是廖志伟&#xff0c;一名Java…

[Unity+智谱AI开放平台]调用ChatGLM Tuobo模型驱动AI小姐姐数字人

1.简述 本篇文章主要介绍一下&#xff0c;在Unity端&#xff0c;集成智谱AI开放平台提供的chatglm模型api&#xff0c;实现AI聊天互动相关的功能。从智谱AI官方站点上看到&#xff0c;提供有chatglm turbo的公共模型服务&#xff0c;能够实现32K超长上下文&#xff0c;应用到我…

Spring Security 6.1.x 系列(3)—— 基于过滤器的基础原理(二)

四、SecurityFilterChain 在Serlvet中&#xff0c;一组Security Filter组成SecurityFilterChain&#xff0c;SecurityFilterChain的概念就比较好理解&#xff0c;是Spring Security 提供的过滤器链&#xff0c;用于管理本身所有的过滤器&#xff0c;在上面的流程图中已有说明。…

【嵌入式】Linux C编程——C要注意的东西

1、语法分析中的“贪心法”&#xff1a; 编译器将程序分解成符号的方法是&#xff0c;从左到右一个字符一个字符地读入&#xff0c;如果该字符可能组成一个符号&#xff0c;那么再读入下一个字符&#xff0c;判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分&…

Lvs+Nginx+NDS

什么是&#xff1f;为什么&#xff1f;需要负载均衡 一个网站在创建初期&#xff0c;一般来说都是只有一台服务器对用户提供服务 ​ 从图里可以看出&#xff0c;用户经过互联网直接连接了后端服务器&#xff0c;如果这台服务器什么时候突然 GG 了&#xff0c;用户将无法访问这…

Python构造代理IP池提高访问量

目录 前言 一、代理IP是什么 二、代理IP池是什么 三、如何构建代理 IP 池 1. 从网上获取代理 IP 地址 2. 对 IP 地址进行筛选 3. 使用筛选出来的 IP 地址进行数据的爬取 四、总结 前言 爬虫程序是批量获取互联网上的信息的重要工具&#xff0c;在访问目标网站时需要频…

QT实现用本地资源管理器来打开文件夹

QString path"文件夹路径";QDesktopServices::openUrl(QUrl("file:"path, QUrl::TolerantMode)); 在windows中QT编程&#xff0c;使用资源管理器来打开指定本地文件夹的方法&#xff1a; 第一种&#xff1a;使用Qprocess命令&#xff08;相当于在cmd命令管…

【面试经典150 | 链表】反转链表 II

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;迭代 其他语言python3 写在最后 Tag 【头插法】【迭代】【链表】 题目来源 92. 反转链表 II 题目解读 返回部分链表。 解题思路 方法一&#xff1a;迭代 我们首先需要找到开始反转链表的前一个节点&#xff0c;为此…