论文阅读笔记 | 三维目标检测——PV-RCNN++算法


如有错误,恳请指出。


paper:《PV-RCNN++: Point-Voxel Feature Set Abstraction With Local Vector Representation for 3D Object Detection》(2022 IJCV)
做点云检测的肯定知道了,这又是Shaoshuai Shi大佬的另外一篇文章,Shaoshuai Shi大佬的主页介绍:https://shishaoshuai.com/

1. 背景

PV-RCNN++的基本原理延续这PV-RCNN:基于体素的策略可以更有效地编码多尺度特征,并从大规模点云生成高质量的3d候选框;而基于点的策略可以保留精确的位置信息,并具有灵活的感受野,用于细粒度的建议细化。

在PV-RCNN的基础上,PV-RCNN++对其进行了改进。改进的第一点就是关键点的采样,这里提出了分区关键点采样策略(sectorized proposal-centric keypoint sampling strategy),要比原始的距离最远点采样更加高效(D-FPS距离最远点采样的具有二次的算法复杂度)。改进的第二点是roi特征聚合的改进,这里提出了一个VectorPool聚合模块来替换SA层作用。具体来说,将局部空间进行voxel,然后利用独立的kernel weight分别对不同局部位置进行编码再拼接在一起。

对PV-RCNN进行的两点改进后,PV-RCNN++的速度提高了3倍,而且性能更佳。


2. 网络结构

paper中还包含着PV-RCNN的介绍,这里对其pass掉,直接介绍PV-RCNN++的结构。对于PV-RCNN的介绍可以查看之前的笔记。PV-RCNN++完整结构如下图所示:
在这里插入图片描述

可能由于nuSences与Waymo的单帧点云场景点数量过于庞大,相比之下KITTI数据集显得就比较小了,基于此原本的PV-RCNN会面临一个性能的问题,计算量过于复杂。为此PV-RCNN++提出了两个新模块来提高PV-RCNN的性能:一种是以分区为中心的关键点采样策略,用于更快更好地进行关键点采样;另一种是VectorPool聚合模块,用于更有效地从大规模点云中聚合局部特征。下面分别对其进行介绍。

2.1 Sectorized Proposal-Centric Sampling

距离最远点采样在之前的多个经典算法中都有使用到,作用是采样点云中的关键点。但其有两个缺点:
1)最远点采样的二次复杂度导致采样时间过长,影响了PV-RCNN的训练和推理速度,尤其是大规模点云上的关键点采样。
2)最远点采样将生成大量的背景点(这一点在3D-SSD中也有提及,其改进的方向是提出了特征最远点采样F-FPS辅助使用),这些背景关键点通常对候选框细化无用,因为RoI-grid pooling模块只能检索候选框周围的关键点。

为此,PV-RCNN++中提出了以提议为中心的过滤和分扇区的采样,其包括两个阶段:以提议为中心的过滤和扇区化采样。结构如下图所示,相关步骤画得相当清晰了。
在这里插入图片描述

Proposal-Centric Filtering

在原始的最远点采样中,会在整个3d点云场景以二次复杂度来遍历一个个获取点。这里引出了一个概念是,可以想减少关键点采样的区域,比如对每个候选框中心进行一定距离划分一个球状区域,来限制与缩小原始的采样区域,减少获得的背景点概率。
在这里插入图片描述

其中pi是原始点位置,cj是候选框中心位置,dj是候选框尺寸,rs是一个半径范围的超参数设置。通过对候选框划分采样的限制区域,可以大大的减少需要采样点的数量。比如在Waymo数据集中,采样点数量会从180k减低到90k以下。

因此,通过候选框中心区域来进行过滤限制采样范围,不仅降低了后续关键点采样的时间复杂度,而且集中在这些有限数量的关键点上可以更好地编码候选框ROI特征。

Sectorized Keypoint Sampling

在对点云场景进行区域限制后,下一步就是进行分区的操作。具体来说,对点云以场景中心为中心划分出s个扇区,这是通过bev视图对360°进行均匀的角度划分,公式如下:
在这里插入图片描述

这里的sk就表示了每个分区点集,从s/2π可以了解是全角度进行均匀分区。假设现在需要采样n个关键点,每个分区s需要采样的个数是按照过滤后的点集中占有比例来确定的,既:(sk/P’)*n。划分分区后,对每个分区进行距离最远点采样即可(距离最远点采样所获得的点是比较均匀的)。需要注意,在每个分区上进行D-FPS是可以在gpu上平行计算的,极大地加速了采样的效率。

从算法层面上来看,这里提出的采样方法将原始的采样规模P降低到了比其小得多的|sk’|中,不仅有效地加快了关键点采样的速度,而且将关键点集中到3D候选框的邻近区域,提高了关键点特征表示的能力。

2.2 VectorPool Aggregation

PV-RCNN中另外一个耗时耗资源的地方就是set abstraction(Keypoint-to-grid RoI Feature Abstraction部分),其利用了多层MLP结构分别处理邻域点集中的所有point-wise feature。此外,为了聚合邻域特征还使用了max pooling,paper提到set abstraction操作中的max pooling会丢失局部邻域的空间分布信息,损害局部聚合特征的表征能力。

为此,引出了另外一个模块。提出了一种基于VectorPool的大规模点云局部特征聚合模块,其能够更好地保持局部邻域点的空间分布,并且比常用的set abstraction操作占用更少的内存和计算资源。结构如下所示:
在这里插入图片描述

具体来说,对于候选框内的每一个目标点(target center points),需要利用周围的support points来聚合候选框的ROI信息。这里的具体操作是,对每一个目标点首先识别在其邻近区域内的立方体,具体公式如下:
在这里插入图片描述

其中(aj-qk)获取的是3d距离的最大轴对齐值(axis-aligned value)。随后和PV-RCNN类似,将这个邻域立方体切分成nxnynz大小的voxel组成。

现在需要对每个sub-voexl进行特征编码,简单的方法可以是去voxel内点特征的均值或者是随机采样一个点特征作为voxel-wise feature,但是这两种方法会在sub-voxel中产生大量的空特征降低算法性能。PV-RCNN++这里的编码方式是采取PointNet++中的反距离加权策略,从Yk中考虑k个(这里k=3)最邻近的点特征进行反距离加权来作为当前sub-voxel的voxel-wise feature。至此实现了对候选框中的每一个sub-voxel进行编码。

此外,不同局部位置的subvoxel可以表示不同的局部特征,因此这里还利用了单独的核权重对不同的局部位置的subvoxel进行编码操作。此时,对于每一个subvoxel的特征会加上其中心点与三个最邻近点的相对距离,两者进行concat再与核权重编码,公式如下所示。由于有三个临近点,所以(ai-vt)表征的相对位置特征信息维度为9。
在这里插入图片描述

随后,由于这里会考虑每个subvoxel的相对位置,所以会对每个候选框的subvoxel都进行排序操作,按照一定的位置关系进行排序拼接成一个hyper vector。
在这里插入图片描述

再利用多层MLP对这个hpyer vector进行编码操作,获得每个候选框的最终表征特征,来进行后续的Confidence Score以及Box Refinement预测。


3. 实验结果

感觉20/21年之后,3d检测主流的公开数据集使用的是nuScenes和Waymo,结果如下所示,可以注意到部分方法还利用到了多帧点云(太恐怖了,学不过来了…)。PV-RCNN++利用了多帧信息是要比单帧结果要好1-2%的。
在这里插入图片描述

其实在kitti上也做了性能测试,不过可能kitti性能已经接近饱和了,相对其其他的两个数据集也显得简单了一些。PV-RCNN++相比PV-RCNN并没有增加多少的点数。
在这里插入图片描述

此外,PV-RCNN++还同时测试了anchor-based策略(类似SECOND)与center-based策略(CenterPoint所提出),也证明了center-based策略更加有效,一般有1%以上的提升。正如CenterPoint中所说,得益于点的灵活性,避免了方向属性,减少了搜索空间。
在这里插入图片描述

还有其他的消融实验这里就不一一介绍,实验做得是非常充分。比如,paper中将分区采样与其他的一些采样方法进行了对比。
在这里插入图片描述

其他实验详细请查看论文。


猜你喜欢

转载自blog.csdn.net/weixin_44751294/article/details/128241001