目录
- 论文相关信息
- 1. Introduction
- 2. Related Work
- 3. PointRCNN for Point Cloud 3D Detection
- 3.1. Bottom-up 3D proposal generation via point cloud segmentation
- 3.2. Point cloud region pooling
- 3.3. Canonical 3D bounding box refinement
- 4. Experiments
- 4.1. Implementation Details
- 4.2. 3D Object Detection On KITTI
论文相关信息
文献地址:https://arxiv.org/abs/1812.04244
论文源码:https://github.com/sshaoshuai/PointRCNN
Abstract:文章提出的PointRCNN直接在原始点云上进行3D目标检测,检测器由两个阶段组成:第一阶段是bottom-up的3D proposal generation,第二阶段用于在规范坐标中精炼proposals 以获得最终的检测结果。我们的第一阶段子网不是像以前的方法那样从RGB图像、投影点云到鸟瞰图或体素等表示方式中生成proposals,而是通过将整个场景的点云分为前景点和背景,从下而上直接从点云中生成少量高质量3D proposals。第二阶段子网将每个proposals中池化后点转换为规范坐标,以学习更好的局部空间特征,将该局部空间特征与在第1阶段中学习的每个点的全局语义特征相结合,以进行精确的box精炼和置信度预测。在KITTI上的 3D detection benchmark 上取得SOTA。
思考
整体而言,架构类似于2D目标检测的Faster R-CNN,这是这里一般用PointNet系列作骨干网,然后生成建议框的方式不同,但是第一阶段生成的建议框方式也和2D中的RPN比较像,如果是一阶段的3D点云目标检测可能就是一阶段子网络这样架构,没有第二阶段的精炼。所以可以思考像2D那样如何只用1阶段的方式来高效简洁的作3D目标检测。
1. Introduction
当前SOTA的3D目标检测器要么将点云投影到BEV或前视图,要么是转为规则的3D体素,从而利用成熟的2D目标检测技术,但是这样在量化的时候会有信息损失。因此PointRCNN跟随PointNet的思想,直接从点云上学习3D特征表示来进行分类和定位任务。
3D目标检测和2D目标检测不同的一点在于,3D物体很好的被标准的3D边框所分开了,3D目标检测的训练数据直接提供了用于3D 目标分割的语义掩膜,这是2D检测和3D检测训练数据上的区别。基于这一区别,作者提出了一个two-stage的3D目标检测架构——PointRCNN。
正如摘要中提到那样,通过利用3D边框来生成ground-truth的分割掩膜,第一个stage分割了前景point,同时生成了小量的边框proposals,这样就避免了从整个3D点云空间从产生大量的3D anchor box,节约计算。
PointRCNN的第二个stage规范地精炼3D边框。在生成3D proposals之后,使用一个点云区域的池化操作来池化第一stage学习得到的point representation。池化后的3D 点被转换到规范坐标,并且与池化后的点特征和第一stage学到的分割掩膜相结合,用于学习相对的坐标精炼。这样充分利用了第一阶段的分割和proposal子网络提供的信息。
为了学习得到更加有效的坐标精炼,我们提出用于生成proposals和精炼的完全的bin-based 3D 边框回归损失(regression loss),消融实验表明该损失比其他3D边框回归损失收敛快,召回率也更高。
主要贡献:
(1)提出新的bottom-up的基于点云的3D建议边框生成算法,其通过将点云划分为前景物体和背景生产力少量的高质量3D proposals。从分割中学习到的点表示(point representation)不仅利于生成建议边框而且还能用于之后的边框精炼。
(2)提出的规范化3D边框精炼充分利用了第一阶段生成的高召回率的建议框,使用bin-based loss来学习精炼规范的边框坐标。
(3)只使用点云输入,KITTI上达到当时的SOTA。
2. Related Work
介绍了使用2D图片做3D检测的方法,指出其存在不足,即由于缺少深度信息,检测是粗略的,不具有鲁棒性。然后是使用点云做3D目标检测的,分为点云投影为鸟瞰图和将点云量化为体素的,这两种方式都会造成不同程度的信息丢失,而且体素而言其3D卷积空间和内存消耗大。而且由于有些信息是只有3D空间才能获取到的信息,所以只使用2D图像生成的proposals会遭遇瓶颈。
PointRCNN和PointNet一样,直接从点云学习特征,大大增加了点云分类和分割的速度与精度。
3. PointRCNN for Point Cloud 3D Detection
PointRCNN的整体架构如图2所示。
点云作为输入,使用pointnet++作为骨干网提取特征,得到每个点的特征(包含context信息),即Point-wise 特征向量,然后再这个特征向量上有两个分支,前景点分割分支用于判断每个点是前景的概率(3D目标检测数据集有个特点,即无重叠,所以可以把物体边框视为一个初步的分割掩膜,在边框内的点label为1,对应前景,不在边框内的点label为0,表示背景。这里的前景分割分支正是基于这个特点来学习愈合分割前景点的),然后上面的分支Bin-based 3D box Generation分支则是给每个点都预测一个该点所在物体对应的边框,这里是前景点和背景点都会预测边框,但计算loss时只有前景点计算loss。然后根据每个点分割的分数,粗糙的当作其生成的边框的质量来给边框排序,通过nms筛选留下少量的框(比如300个)。这些框需要初步精炼(用到bin-based regression losses),对于预测的物体的中心,将前景点周围分为两个离散的坐标,然后物体的中心就会坐落于这些坐标内的一个bin之中,使用交叉熵loss判断是否在每个bin之中,从而将回归转换成分类任务。但是这样的话位置不够精确,所以还引入了res来回归在bin中的具体位置,res这个回归使用smoothL1来学习。这样的话物体中心位置的估计center=bin+res。这样得到第一个stage的proposal。不过这个建议框是初步的,其质量和回归判断是依据点分割的概率,没有十分的关联,所以需要进一步精炼。
在第一stage生成proposals,为了学习每个proposal更加局部的特征,池化每个点和其对应点特征。然后对于每个proposals会做轻微方法,增加长宽高以包含一些context信息。然后遍历所有点, 如果点在一个建议框内,则保留该袋年特征来精炼该边框。该点的特征包括其3D坐标,反射强度,一阶段预测的分割掩膜,和一阶段学习到的C维特征。下一stage中消除那些内部每一点的建议框。
第二阶段将建议框中的所有点坐标转为规范坐标系下的坐标,得到局部空间点,这个局部点(特征)会增加一些额外的特征,编码该局部特征到和一阶段学习得到的分割特征(全局特征)相同维度后,局部和全局特征拼接,送入一个PointNet++这样的特征编码层学习特征,然后最后再做置信度预测和基于bin的3D边框精炼。
3.1. Bottom-up 3D proposal generation via point cloud segmentation
基于整个场景的点云分割,使用准确且健壮的3D建议框生成算法作为一阶段的子网络。我们观察到3D场景中的物体与其他物体没有重叠,因此自然地相互分开。所以3D物体的分割掩膜可以直接通过他们的3D边框标注获得,如在3D边框内部的点被视为前景点。
因此我们提出以自底向上的方式来生成3D建议框,具体而言,学习point-wise 的特征来分割原始点云,同时从分割的前景点中生成3D建议框。这样避免了在3D空间中使用大量预定义的3D框,极大地限制了3D建议框的搜索空间,从而减少计算。
Learning point cloud representations.
前景点能提供丰富信息来预测相关物体的位置和方向,通过学习分割前景点,点云网络能够获取背景信息,从而做精确预测,并且也有利于生成3D建议框。3D建议框直接从前景点生成,即前景点分割和3D建议框同时进行。
如图2所示,在由骨干网编码后得到的point-wise特征上应用了一个用于分割前景点的分割头,和一个用于生成3D建议框的边框回归头。对于前景点分割,ground truth分割掩膜由3D ground truth 边框得到,而前景点数量相比背景点数量很少,有很大的类别不平衡,故使用focal loss解决这个问题:
Bin-based 3D bounding box generation. 训练时,只要求边框回归头从前景点上回归3D边框位置。虽然边框不是从背景点上回归的,但是因为点云网络的感受野,这些背景点也提供了用于生成边框的信息。(即每个点都会生成proposals,但是只有前景点才会计算loss来回归)。
一个3D边框表示为(x, y, z, h, w, l, θ),其中xyz是物体中心位置,hwl是物体尺寸,θ是物体在鸟瞰图上的朝向。为了限制生成的3D建议框,使用一个基于bin的回归损失来使其贴近物体的3D边框。
为了估计一个物体的中心,如图3所示,我们将每个前景点周围沿着X和Z轴分割成一个离散单元bin,对每个前景点沿着X和Z轴设置一个搜索范围S,每1维度的搜索范围S被等分为长度都为δ的若干bins,来表示不同物体在X-Z象限上的中心(x,z)。使用基于bin的方法来定位,然后用交叉熵损失分类每个bin比直接使用smooth L1损失回归能更加精确定位物体中心。
X或Z轴的定位损失包括两部分,一部分是沿着X和Z轴的bin分类,一部分是在被分类为含物体中心的bin中的残差回归损失。对于沿着垂直的Y轴的中心y,直接使用smooth L1,因为大部分物体的y值非常小,使用L1 loss就能获取足够的精度。因此,定位对象表示为:
$ (x^{§} ,y^{§} ,z^{§}) (xp,yp,zp)$是他对应物体中心坐标,$bin_x{§}和bin_z^{§}
res_z^{§}$是在分配的bin内进一步精炼定位的ground truth residual,C是用于归一化的bin长度。
对于物体的尺寸 (h, w, l) 和朝向 θ 的估计和F-PointNet相似,将朝向的2π划分为n个bins,然后计算每个bin的分类对象以及和X和Z轴一样的残差的回归对象
。物体尺寸 (h, w, l) 直接通过计算相对于整个训练集中每个类的平均尺寸的残差
得到。
推断时,对于基于bin的参数,首先选着置信度最高的bin,然后将res与bin相加获得最终精炼后的参数。对于直接回归的参数,则将res和其最初的值相加。
整体的3D边框回归损失如下:
其中是的前景点数,
.
是前景点预测的分配的bin,
是预测的残差。
是ground truth的bin和残差res。
为了去除冗余proposals,我们从鸟瞰的角度出发,基于oriented IoU进行了非最大抑制(NMS),以生成少量高质量的提案。 训练时,我们将0.85用作鸟瞰IoU threshold,在NMS之后,我们保留300个用于培训第二阶段子网的proposals。推断时,我们使用IoU阈值为0.8的定向NMS,并且仅保留了前100个proposals传入第二个子网络。
3.2. Point cloud region pooling
在第一stage生成proposals,为了学习每个proposal更加局部的特征,池化每个点和其对应点特征。然后对于每个proposals会做轻微方法,增加长宽高以包含一些context信息。然后遍历所有点, 如果点在一个建议框内,则保留该袋年特征来精炼该边框。该点的特征包括其3D坐标,反射强度,一阶段预测的分割掩膜,和一阶段学习到的C维特征。下一stage中消除那些内部每一点的建议框。
3.3. Canonical 3D bounding box refinement
如图2(b)所示,每个proposals的池化后的点及其相关特征(请参阅第3.2节)被送到我们的Stage-2子网中,以精炼3D框的位置以及前景对象的置信度。
Canonical transformation.为了利用第一阶段的高召回率建议框的优势并仅估算建议框参数的残差,我们将属于每个建议框的的池化后的点转换为相应3D建议框的规范坐标系。
如图4所示,一个3D提案的规范坐标系表示(1)原点位于框提案的中心; (2)局部X′和Z′轴大致平行于地平面,其中X′指向提议的头部方向,而另一Z′轴垂直于X′。 (3)Y轴保持与LiDAR坐标系相同。
建议框的所有池化后的点的坐标p应通过适当的旋转和平移转换为规范坐标系。 使用建议的规范坐标系可以使框优化阶段为每个建议学习更好的局部空间特征。
Feature learning for box proposal refinement.
精炼子网络结合变换后的局部空间点(特征)和他们的从第一阶段学习的全局语义特征
用于后续的边框和置信度精炼(refinement)。
经过规范变换使得网络有鲁棒性的局部空间特征学习能力,但是会损失深度信息,于是为了补偿深度信息的丢失,给点的特征增加一个到传感器的距离 对于每个proposal,它相关的点的局部特征
和额外特征[
]首先拼接,然后送入几个全连接层把他们的局部特征比那马尾和全局特征
一样的维度。然后局部特征和全局特征拼接,遵循PointNet++的结构将拼接后的特征输入到一个网络中,以得到用于后续置信度分类和框精化的判别特征向量。
**Losses for box proposal refinement.**我们采用了基于bin的回归损失做建议框精炼。一个真实框和一个3D建议框的IoU超过0.55则将该gt box分配给该3D建议框。3D建议框和他们对应的3D真实框都被转换到规范坐标系中,即3D建议框,3D真实框
会被转换为
第i个建议框的中心位置的训练对象和等式2的设置一样,除了搜索范围S更小。由于稀疏点无法提供足够的关于建议框尺寸的信息,所以对于相对于训练集中该类物体平均尺寸的长宽高残差
还是采用直接回归。
对于朝向的回归,假设建议框和真实框的方向差异在[−π/4,π/4]内,而建议框和真实框的IoU最少0.55,所以将π/2分为尺寸为ω的离散的bins,预测基于bin的方向的对象为:
所以,第二阶段的总损失可以表示为:
其中 B是第一阶段产生的3D建议框,Bpos存储用于回归的正样本。是建议框的置信度,
对应标签,
是用于监督预测的置信度的交叉熵损失,
类似等式3中的
最后应用有方向的NMS在鸟瞰图上以0.01的IoU来移除重叠的边框,并且生成用于检测物体的3D边框。
4. Experiments
4.1. Implementation Details
Network Architecture.
每个3D点云场景采样16384个点作为输入,如果该场景没这么多点则随机重复一些点来获取这么多个点。对于第一阶段的子网络,跟随PointNet++的网络设计(PointNet++架构如下图所示),采用4个多尺度分组(MSG)的set-abstraction层来下采样点,下采样后分别得到4096,1024,256,64个点。然后使用4个feature propagation来上采样,恢复原来的点数量,获取每个点的特征向量来做分割和生成建议框。
对于第二阶段的建议框精炼子网络,从每个建议框池化后的区域中随机采样512个点作为精炼子网络的输入,使用3个单尺度分组的set abstraction layers分组来生成一个特征向量用于物体置信度分类和建议框精炼。
The train scheme
对于第一阶段的子网络,所有在3D真实框内的点被视作前景点,其它的点被视作背景点。对于第二阶段的子网络,随机增强生成的3D建议框来增加建议框变化。3D建议框和3D真实框的3D IoU超过0.6被视为正样本,小于0.45被视为负样本。边框回归头的3D IoU阈值为0.5。
这两个子网络是分别训练的。
实现部分更多的细节(比如参数设置这些)看原论文。
4.2. 3D Object Detection On KITTI