Voxel R-CNN: Towards High Performance Voxel-based 3D Object Detection
Abstract
3D 对象检测的最新进展很大程度上依赖于 3D 数据的表示方式,即基于体素或基于点的表示。许多现有的高性能 3D 检测器都是基于点的,因为这种结构可以更好地保留精确的点位置。然而,由于无序存储,点级特征会导致高计算开销。相比之下,基于体素的结构更适合特征提取,但通常会产生较低的精度,因为输入数据被划分为网格(divided into grids)。在本文中,我们采取了一个稍微不同的观点——我们发现原始点的精确定位对于高性能 3D 对象检测并不是必需的,并且粗体素粒度也可以提供足够的检测精度(读这种文章)。考虑到这一观点,我们设计了一个简单但有效的基于体素的框架,名为 Voxel R-CNN。通过在两阶段方法中充分利用体素特征,我们的方法实现了与最先进的基于点的模型相当的检测精度,但计算成本只是其中的一小部分。
Voxel R-CNN 由一个 3D 主干网络、一个 2D 鸟瞰(BEV)区域建议网络和一个检测头组成。体素 RoI 池被设计为直接从体素特征中提取 RoI 特征以进一步细化。
与现有的基于体素的方法相比,Voxel R-CNN 在保持实时帧处理速率的同时提供更高的检测精度。
Introduction
这里介绍了VoxelNet、SECOND、PointPillar,说体素化的缺点是会导致精确位置信息的丢失。当前最先进的是基于点的,STD、PointRCNN、3DSSD(用的VoteNet思想)、PV-RCNN。因此,这导致了一种流行的观点,即原始点云中的精确位置信息对于准确的对象定位至关重要。尽管检测精度更高,但基于点的方法通常效率较低,因为使用点表示搜索最近邻以进行点集抽象的成本更高。
一个新的挑战:我们能否设计出一种与先进的基于点的方法一样准确且与基于体素的方法一样快的方法?
在这项工作中,为了实现这一目标,我们采用基于体素的框架并尝试提高其准确性(boost its accuracy)。
基于体素的方法通常在鸟瞰图 (BEV) 表示上执行对象检测,即使输入数据是 3D 体素**(2D的好检测)**。相反,基于点的方法通常依赖于抽象的点表示来恢复 3D 结构上下文并基于逐点特征进行进一步细化,
通过仔细研究底层机制,我们发现现有基于体素的方法的主要缺点在于它们将 3D 特征量转换为 BEV 表示,而无需恢复 3D 结构上下文。
考虑到这一点,我们proposal从 3D 特征量中聚合 3D 结构上下文。具体来说,我们引入了一种新颖的基于体素的检测器,即Voxel R-CNN,以充分利用两阶段管道(a two stage pipeline)中的体素特征。VoxelRCNN包括(1)一个3d backbone network。(2)一个2d backbone network followed by RPN。(3)一个detect head with 一个 voxel RoI pooling。
第一步逐渐将体素抽象为 3D 特征体。第二步通过2D backbone和RPN生成dense region proposals。第三步通过voxel RoI pooling,将3D feature直接生成RoI feature。
Voxel RoI Pooling利用邻居感知属性(这有助于更好的内存局部性)来提取相邻体素特征并设计一个局部特征聚合模块以进一步加速。(有点像Voxel版的VFE)
contribution
设计了一个VoxelRCNN,在精度和效率上取得平衡。实验证明了我们的观点:原始点的精确定位对于高性能 3D 对象检测不是必需的,更粗的体素粒度也可以为这项任务提供足够的空间上下文线索。我们的 Voxel R-CNN 框架是一个简单但有效的基线,有助于进一步调查和下游任务。
Reflection on 3D Object Detection
首先回顾SECOND和PV-RCNN
SECOND
输入Voxel,经过3D backbone做特征提取,然后将 3D 特征体转换为 BEV 表示。最后,应用 2D 主干网络和区域建议网络 (RPN) 来执行检测。(其实就是通过view操作把向量压缩到二维)
PV-RCNN
通过添加关键点分支来扩展 SECOND 以保留 3D 结构信息。引入体素集抽象(VSA)以将多尺度 3D 体素特征集成到关键点中。通过 RoI-grid pooling 从关键点进一步提取每个 3D 区域建议的特征,以进行框细化。
Reflection on 3D Object Detection
SECOND
将点云数据转换为Voxel,到3D backbone网络进行特征提取,然后将3D特征转换为BEV表示,最后应用到2D主干网络和RPN来执行检测。
PV-RCNN
PV-RCNN通过添加关键点分支来扩展 SECOND 以保留 3D 结构信息。引入体素集抽象(VSA)以将多尺度 3D 体素特征集成到关键点中。通过 RoI-grid pooling 从关键点进一步提取每个 3D 区域建议的特征,以进行框细化。
SECOND 和 PV-RCNN 在检测性能(即准确性和效率)方面存在很大差距。这两种方法在以下方面有所不同。首先,SECOND 是一种单阶段方法,而 PV-RCNN 采用检测头进行框细化。其次,PV-RCNN 中的关键点保留了 3D 结构信息,而 SECOND 直接对 BEV 表示进行检测。为了验证框细化和 3D 结构信息对检测性能的影响,我们在 SECOND 的 2D 主干网络顶部添加了一个检测头。由于 BEV 框未与轴对齐,我们设计了 Rotated RoI Align 进行 RoI 特征提取。
直接在 BEV 特征之上添加 BEV 检测头可使 KITTI 汽车中度数据的 AP 提高 0.6%,但迄今为止仍落后于 PV-RCNN 的准确性。这验证了框细化的有效性,也证明了 BEV 表示的能力相当有限。
通常,PV-RCNN 使用体素集抽象将体素特征集成到采样的关键点中,关键点作为中间特征表示有效地保留 3D 结构信息。点体素交互几乎占了总运行时间的一半,这使得 PV-RCNN 比 SECOND 慢得多。
综上所述,通过分析 SECOND 中鸟瞰图(BEV)特征表示的局限性以及 PV-RCNN 中每个组件的计算成本,我们观察到以下几点:(a)3D 结构对于 3D 对象检测器非常重要,因为单独的 BEV 表示不足以精确预测 3D 空间中的边界框; (b) 点体素特征交互耗时且影响检测器的效率。这些观察促使我们直接利用 3D 体素张量并开发一种仅体素的 3D 对象检测器。
Voxel R-CNN Design
在 Voxel R-CNN 中,我们首先将原始点云划分为规则体素,并利用 3D 主干网络进行特征提取**(到这都和前面的一样)**。然后我们将稀疏的 3D 体素转换为 BEV 表示,在其上应用 2D 骨干网络和 RPN 来生成 3D 区域建议。随后(Subsequently),我们使用体素 RoI 池来提取 RoI 特征,这些特征被送入检测子网进行框细化。下面我们详细讨论这些模块。创新点在于voxel RoI pooling。
Voxel RoI pooling
为了直接从 3D 体素特征体积聚合空间上下文,我们提出体素 RoI 池化。
Voxel Volumes as Points
将划分好的非空体素看做是一组中心点集合和其特征向量的表示。体素中心的 3D 坐标使用索引、体素大小和点云边界计算。
Voxel Query
提出了一种名为体素查询的新操作,用于从 3D 特征体中查找相邻体素。**与无序点云相比,体素有规律地排列在量化空间中,便于邻居访问。**在Voxel的indice上,通过偏移,可以找到某体素周围26个相邻体素(3*9-1)。通过利用这一特性,我们设计了体素查询来有效地对体素进行分组。首先将查询点量化为一个体素,然后可以通过索引转换有效地获得相邻体素。我们在体素查询中利用曼哈顿距离,并在距离阈值内最多采样 K 个体素。
具体来说,体素α和β的曼哈顿距离计算方式为:
D m ( α