论文阅读笔记 | 三维目标检测——VoxelRCNN算法


如有错误,恳请指出。


文章目录

  • 1. 背景
  • 2. 网络结构
    • Voxel Query
    • Voxel ROI Pooling
    • Accelerated Aggregation
    • Loss Compute
  • 3. 实验结果

paper:《Voxel R-CNN: Towards High Performance Voxel-based 3D Object Detection》

1. 背景

现有很多的point-based检测器获得比较好的效果,精确度要比voxel-based检测器要好,为此不少观点认为原始点云中的精确位置信息对于精确的目标定位是至关重要的。VoxelRCNN的动机就是能否保持voxel-based方法速度优势下,获取与point-based方法相当的性能,希望在准确性和效率之间取得平衡。作者通过实验分析,发现现有voxel-based方法的主要缺点是将3d特征体转换为BEV表示,而从未恢复3D结构上下文,这样就找到了需要提高的方向。对于voxel-based的方法,BEV表征能力不足,所以需要转换成BEV前的3d voxel-wise特征。

VoxelRCNN的主要创新点是提出了一种Voxel ROI pooling方式,利用生成的候选框直接在3d tensor中获取对应的voxel-wise特征进行特征聚合操作,提出了neighbor-aware聚合策略。实验结果也表面,这种粗粒度信息同样可以为检测任务提供足够的空间上下文信息,VoxelRCNN的实验结果超过了那时最好的point-based方法,进一步说明3d的tensor结构信息对检测器至关重要,而BEV的表征能力是不足以精确预测3d空间的边界框的。这也很好理解,毕竟丢失了z轴上的信息,只投影到了xy平面进行后续处理。


2. 网络结构

VoxelRCNN是一个two-stage、anchor-based的voxel-based检测方法(这里的anchor-based存疑,后续我会讨论讨论),其网络结构如下所示。其核心是提出了Voxel ROI pooling,通过候选框在3d tensor中聚合相关的voxel query信息。
论文阅读笔记 | 三维目标检测——VoxelRCNN算法_第1张图片

对于体素化后的3d特征,这里通过3d稀疏卷积进行(3D backbone network)特征提取,随后将z轴的特征进行拼接转化成bev视图上的一个二维特征,再进行过一个2d卷积backbone进行特征提取,后续接两个分支来进行候选框的生成以及socre预测。这里的3d稀疏卷积网络以及RPN的2d卷积网络与SECOND、PV-RCNN的一致。

Voxel Query

对于以往的ROI操作,一般是对候选框中的point-wise特征进行聚合操作,这种方法称为Ball Query。在voxel-based的方法中,由于点云被转化为了规则化的一个个体素,所以在这些规则化的体素空间中进行距离的偏移是比较容易的一件事情。因此VoxelRCNN中提出了Voxel Query的概念,从三维的特征体中寻找相邻的voxel,以有效地对体素进行分组。如下所示。假设3d空间中有N个非空体素,通过Voxel Query寻找K个邻值,其时间复杂度为O(K),而这里Ball Query的时间复杂度是O(N),所以从效率上Voxel Query是更加高效的。
论文阅读笔记 | 三维目标检测——VoxelRCNN算法_第2张图片

Voxel ROI Pooling

具体来说,对于生成的候选框先切分为GxGxG大小的体素(称为subvoxel),每一个subvoxel也可以看成是候选框中的一个网格grid。此时,不再是简单的聚合候选框中的voxel-wise特征,而是利用Voxel Query,对每一个grid利用设定的哈曼顿距离获取其相邻K个voxel特征。此时,这grid网格点与其K个neighboring voxel就是一个groups,可以利用PointNet网络对其特征进行聚合。假设这里每个voxel的特征维度是C,对于每个邻居voxel都可以分别构建起与grid的相对位置信息(xp,yp,zp),将相对位置信息与原本的voxel-wise特征拼接在一起,其维度即为C+3。后续进行PointNet网络聚合,即可输出dim=C’的特征向量。如下图(a)所示。
论文阅读笔记 | 三维目标检测——VoxelRCNN算法_第3张图片

此外,考虑到多尺度信息,这里的ROI Pooling是从3d稀疏卷积骨干网络最后两个阶段的3d特征图中提取voxel特征,同时对于每个阶段再设置两个曼哈顿距离阈值进行分组。对于每一个阶段的某个曼哈顿距离分组都可以聚合一个vector特征,所以这里的多尺度处理会将不同阶段不同尺度的特征进行拼接,作为最后的ROI特征。所以这里每一个ROI特征一共会结合4种不同层次与尺度信息。

Accelerated Aggregation

上述所提出的聚合方法计算复杂度仍然比较高,假设阶段一生成r个候选框,每个候选框中切分G3的大小,那么一共需要处理的grid网格数量M=rxG3。这里每个网格假设分组的Neighbor为K,每个邻居voxel具有3维度的相对位置信息以及C维度的voxel-wise特征,拼接起来的特征维度即为(3+C),对其进行全连接操作降维到C‘的浮点计算量为:FLOPs (O(M×K × (C + 3) ×C’))。这么庞大的计算量需要进一步优化,所有聚合网络改进为如下图(b)所示。

简单来说就是对voxel-wise特征以及相对信息特征进行分开编码。对于每个网格的K个邻居,将其相对位置特征信息编码为C’,这个步骤的计算量为:MxKx3xC‘。而但由于邻居的C维voxel特征信息是独立,直接利用fc层对其编码为C’,计算量只为:NxCxC’,选取Voxel Query所选取的K个voxel特征,与位置信息进行相加再聚合。于分组体素的数量(M×K)比N高一个数量级,因此加速的PointNet模块比原始模块更有效。
论文阅读笔记 | 三维目标检测——VoxelRCNN算法_第4张图片

这里以实际例子进行对比,一般来说KITTI数据集中非空体素的数量最多也就16k左右,但假设生成的候选框为150,分成6x6x6的大小,那么需要处理的网格点数也达到了43.2k个,大约是非空体素N的3倍。所以在实际上还是存在一定的加速效果的。

Loss Compute

以上即为VoxelRCNN的重点内容,对于其他部分paper中没有细说。对于3d稀疏卷积backbone采用类似SECOND、SA-SSD、PV-RCNN的设计。其中,2d的RPN网络应该是也是与SECODN的一致。

在损失设计这里,paper也没有提到什么,只是简要说了声是follow前人SECOND与PointPillars的工作,对于这两个工作都是one-sate、anchor-based的工作,损失是包括边界框直接回归,候选框类别以及边界框方向分类三个部分,所以这里也只能认为其RPN网络也是anchor-based的方法进行设置。但是,全文没有提及先验框尺寸等信息,这一点比较奇怪。


3. 实验结果

VoxelRCNN在kitti数据集上只提供了car类别的精度对比:
论文阅读笔记 | 三维目标检测——VoxelRCNN算法_第5张图片

此外,分别对detect head、voxel query以及acceleated module在验证集上进行消融实验
论文阅读笔记 | 三维目标检测——VoxelRCNN算法_第6张图片

思考:

这个消融实验的结果个人觉得相当尴尬,增加使用Voxel Query的精度只提高了0.12%。感觉整个消融实验做得不算太完整,比如:
1)在具体的pooling操作时,如果只使用单一的曼哈顿距离以及只使用单一的3d特征层时是否有影响,使用多尺度多阶段带来的提升有多大?
2)使用这种voxel roi pooling比普通的直接聚合候选框中的point-wise特征会带来多少提升?

总的来说,VoxelRCNN又是在ROI聚合这个点上进行改进,继承了PaetA2中对候选框进行切分的想法,通过Voxel Query对每个候选框的subvoxel进行分组聚合其K个Neighbor的3d tensor信息,在数据集上证明3d稀疏卷积提取出来的特征的有效性。但是消融实验的结果让我对Voxel Query的有效性存疑。


你可能感兴趣的:(#,三维点云论文,论文阅读,自动驾驶,3d检测,点云检测,VoxelRCNN)