CVPR 2021 文章专题
目前大多数用于自动驾驶场景的3D检测器都需要基于体素 (Voxel) 来表示点云,然后将体素投影到俯瞰图 (Bird’s-eye View) 下接入一个2D目标检测网络进行检测。为了提升检测性能,之前一些工作会在CNN降采样后的网络上抽取特征来进行二阶段的refine。然而不论是体素化还是CNN降采样,难免会损失很多精确的几何信息。
为了重新在网络中引入这些信息,图森未来团队提出了一种直接基于原始点云坐标(xyz)的第二阶段检测器Lidar RCNN。它很小巧,仅需增加4.5ms的延迟,即可将模型性能提升2-4个点。它也很通用,在多种一阶段模型上,无需提取特征、无需再次训练一阶段网络,即可实现涨点。一、引言
由于激光雷达扫描到的点云通常不像图像那样有规则的排列,当前的3D点云目标检测器要么需要对点云进行体素化 (Voxelization) 使其形成规则的形状,如VoxelNet、PointPillars等;要么直接在点上抽取特征,如Point RCNN、SA-SSD等。但这两类方法各有缺点:体素化方法在量化过程中损失了点级别的精确几何信息;点上抽取特征的方法由于点云的不规则性,不论是提取关键点还是寻找邻域的过程都需要引入大量的计算量,导致无法在大规模点云上实时运行。为了引入精确的几何信息,而又不增加过多的计算量,图森团队想到了二阶段网络。其中第一阶段我们使用常见的体素化方法进行检测,排除掉大部分的背景点,之后在第一阶段的proposal的基础上,利用原始点云信息来得到更精确的包围框。由于proposal中的大部分点都是前景点,点云数量大大降低,所以第二阶段的网络可以完美规避基于点的方法计算量大的缺点,同时保留住了原始点云中目标的精确几何形状。
二、基于原始点云的二阶段网络
三、碰到的问题和解决方案
虽然我们的二阶段网络非常简单,但是经过一系列实验后,我们发现并没有那么容易就把它做work。当我们直接套用这样一个网络时,对于单个类别还好,当网络需要同时预测多个类别时,部分类别竟然发生了掉点现象。我们仔细分析了掉点的原因,发现了一个潜在的新问题:RCNN网络并不知道proposal的大小,那它如何能判断proposal是否准确、如何能在proposal的基础上回归出更准确的框呢?
不同于2D图像中像素空间是规则且稠密的,3D点云空间是非常稀疏的。如果使用基于点的特征表示,那么proposal中的空白部分将无法在特征中表示,因为像PointNet这样的网络,只会提取有扫描点部分的特征并融合。如图2和图3a所示,在我们所感兴趣的物体如车和行人的周围,通常来说是没有点云的。如果我们将一个本身比较准的proposal扩大1米,提取到的点云往往是不变的或者只引入了少量地面点,但这样的proposal显然是不准确的,我们会给它一个负的label来进行分类。同样的,对于框的尺寸回归,其目标是基于proposal的对数相对值,当propsal尺寸扩大时,回归目标会跟着变小。
点云不变就意味着PointNet提取到的特征是不变的,但我们的目标却在变化,这样网络显然无法进行准确的预测。我们将这个由proposal大小带来的问题称为尺寸歧义问题(Size Ambiguity Problem)。
大部分情况下,当我们定义清楚了一个问题之后,其解决方案往往就呼之欲出了。对于这个尺寸歧义问题,其核心就是RCNN网络对proposal的大小没有任何感知能力,那我们想个办法把proposal的大小告诉它即可。本文中我们列举了5种解决方案,其中前三种是之前的工作常见的手段,我们将一一说明它们为什么解决不了这一问题;后两种是我们新提出的方案,我们也将一一说明它们是如何将proposal的大小输入进RCNN网络,从而解决尺寸歧义问题的。
1) 尺寸归一化
由于我们的回归目标是用proposal的尺寸进行了归一化的,所以如果对点云也进行归一化,网络就可以隐式地知道proposal处于由{-1,1}包围的矩形框中了,这样能否解决问题呢?
如果我们的任务是单分类,这样做确实解决了问题,但在多分类情况下,虽然这样可以将proposal的大小隐式地告诉RCNN,但归一化之后物体的形状就改变了,一辆大卡车和一个行人压缩到同一个尺度,并不利于PointNet判断其类别。
2) 锚点(Anchor)
既然归一化的回归目标会造成歧义问题,那我不归一化了,或者我每个类别用一个统一的anchor来进行归一化行不行?这样确实可以解决回归目标上的尺寸歧义问题,但注意到分类上也存在尺寸歧义问题,修改回归目标的方法并不解决分类的问题,所以这个方案也不可行。
3) 体素化
我们参照2D图像的表示形式将proposal体素化,形成类似图像的规则方格,是否能解决问题?其实图像上不存在这个歧义问题的主要原因是图像是非常致密的,不存在前景的地方会有背景的存在,只要网络能区分前景和背景,当proposal变大时,网络会发现背景变大了,从而给出proposal不准的信息。但3D点云中,proposal变大时,网络虽然能看到最外围的voxel中没有点的存在,但网络所能感知到的边界只能到达voxel级别,而无法做到point级别的精度。而且如果对于每个类别都设置同样数量的voxel,也会存在类似第一种尺寸归一化带来的多类别分类不容易区分的问题。
4) 边界距离
既然原因是网络不知道边界的位置,那把边界的位置告诉网络就好了。这里我们在每个点后面串联上它们到上下左右前后6条边的归一化距离,即可将边界信息输入进RCNN网络。网络通过这些信息,就可以清楚地知道目标上的点到proposal边界还有多远,也能够准确地判断出proposal是否过大或过小、边界需要移动多远了。
5) 虚点
之前我们提到,2D图像上不存在歧义问题是因为图像上有背景的存在,而3D空间中目标的周围都是空的,无法通过背景点的多少来判断框的大小。从这个角度出发,如果我们将这片空间手动填满,让这些虚点起到图像中背景的作用,应该也可以让RCNN网络感知到prospoal框的大小。具体做法是在proposal中均匀地放入网格状的虚点(如图3f所示),这些虚点和真实的点通过额外加入的一维的0-1特征加以区分。这样网络通过最近的实点到边界上的虚点的距离,即可判断proposal是否框大或框小。
总结一下,解决尺寸歧义问题的关键在于要将proposal尺寸的信息传递到RCNN网络中,但同时要注意不能引入新的问题,比如将点云按proposal尺寸进行归一化会导致多分类无法准确判断类别的新问题。
四、实验
通过以上5种或可行和或不可行的方案,相信大家对尺寸歧义问题有了清晰的认识,下面就要通过实验来验证这些方案的有效性了。
我们的实验是在目前最大的公开自动驾驶数据集Waymo Open Dataset (WOD)上进行的,它包含约16万帧点云,超过1200万个目标3D框,远大于之前的公开数据集。
我们的baseline来自于MMDetection3D框架,它是由MMLab维护的3D检测框架,里面实现了多种state-of-the-art的3D检测器。我们选用了最常见的SECOND和Point Pillars作为baseline,其中Point Pillars的Vehicle类别在waymo上有高达72的AP,这一结果甚至超过了之前在CVPR 2020上发表的PV-RCNN paper上汇报的结果,所以这是一个很强的baseline。
可以看到原始的PointNet RCNN即可将AP提升2.5个点,可以算是不小的提升了,而在解决了尺寸歧义问题后,还能进一步提升1.5个点,达到75.6的AP。
而一系列之前分析的不可行方案,也确实没有解决问题,均存在或多或少的掉点现象, 而我们提出的两种有效的策略均能实现显著涨点。在此基础上,我们还做了进一步的实验,将网络宽度增加两倍,以及参考Cascade RCNN套用两次Lidar RCNN策略,将结果进一步提升到了76AP:
本文提出了一种快速且通用的第二阶段3D检测器,仅需增加4.5ms的延迟,即可将模型性能提升2-4个点,它只依赖于第一阶段检测器的预测结果和原始点云,而无需提取特征和再次训练,所以它可以灵活地用在各种现有3D检测器上。
在应用过程中,我们发现了基于原始点云的二阶段检测器中潜藏的尺寸歧义问题,通过一系列的分析,我们指出解决这一问题的关键在于将第一阶段预测框的尺寸信息传入第二阶段。我们提出了两种不同的解决思路,它们均可以有效地解决问题并能带来显著的性能提升。
全部评论
(1) 回帖