【阅读笔记】pointrcnn

2019年港中文发表的pointrcnn,在KITTI数据集(仅使用点云,不用rgb图)中的行人和车辆目标检测中有着一定优势,以下把阅读过程中的一些重要内容和不理解的地方做下笔记。

摘要

整个框架有两个阶段:第一阶段是自底向上的3D提案生成,第二阶段是在规范坐标(canonical coordinates)中优化提案来获得最终检测结果。

stage1: 旨在以自下而上的方案生成3D边界框提案。将整个场景中的点云,基于3D边界框生成真实分割掩模,分割前景点并同时从分割点生成少量高质量3D提案proposals。这样的策略避免了在整个3D空间中使用大量3D锚框。

stage2: 进行规范的3D Bbox优化。在生成3D提案之后,采用点云区域池化操作来“pool”来自Stage-1学到的点表示。与直接估计全局box坐标的方法不同,“pooled”3D点被转换为规范坐标,与“pooled”的点特征(局部空间特征)以及Stage-1的分割掩模(全局语义特征)结合完成坐标优化。该策略充分利用了Stage-1的分割和提案子网络提供的信息。

two-stage网络先提出大致的region proposal,再在第一阶段输出的proposal中进行搜索,得到准确的Bounding Box,这往往比one-stage更加精细,速度略逊(one-stage的focal loss比较牛笔)

主要贡献

(1)基于点云的自底向上的3D Bbox提案,将点云分割为前景背景来生成少量高质量的提案。
(2)提出的规范3D边界框使用了Stage-1阶段生成的高召回框提案,并在带有高鲁棒性的基于区域的损失的规范坐标中学习优化框坐标。
(3)KITTI排第一(2018年11月)


检测框架

一、通过点云分割自底向上生成3D提案

3D场景中的目标通常是分离互不重叠的,所有三维目标的分割掩模都可以通过3D边界框注释直接获得,即3D框内的3D点被视为前景点。具体来说,逐点学习点的特征、分割原始点云,同时从分割的前景点生成3D提案。基于这种自底向上的策略,可避免在3D空间中使用大量预定义的3D框,并且显著限制了生成的3D提案的搜索空间。并且,作者的3D box提案方法比基于3D锚点的提案生成方法有更高的召回率。

1、learning point cloud representations

学习逐点特征,使用有multi-scale grouping(?)的pointnet++作为网络结构(backbone),或者voxelnet等

2、foreground point segmentation

前景点提供了预测目标位置和方向的丰富信息。backbone给出了编码后的逐点特征,分别经过前景掩模预测分支三维提案框回归分支完成相应任务。

点分割的真实掩模由3D边界框提供。由于前景点远比背景点少,与传统方法不同,作者的网络中没有使用RPN来生成传统的anchor,而是直接将上一步中得到的特征向量使用focal loss来区分前景与背景,focal loss本身是为了减少容易分类的样本的权重,将权重尽量集中于难分类样本上。
【阅读笔记】pointrcnn_第1张图片

3、bin-based 3D bounding box generation

三维提案框回归分支使用前景点回归生成三维提案(背景点也参与了提案的生成)。为了约束三维提案,作者提出了基于bin的回归损失估计目标的三维边界框。预测3D边界框需要预测中心位置、目标尺寸与目标方向(3+3+1=7维)。
【阅读笔记】pointrcnn_第2张图片
可以看到,作者采用了鸟瞰的方式,设定一个在X-Z平面的搜索范围 S ,之后将每个维度划分成长度为δ的小格子。之后使用一个交叉熵损失来得到这些bin-based。X-Z的定位的loss由两项组成,一个是沿着两条轴的分类项,另一类是bin在两个轴上的残差回归项。而Y轴的损失直接采用平滑的L1 loss。
由此可得到中心位置的loss,公式如下。
【阅读笔记】pointrcnn_第3张图片
至于方向与尺寸,参考文献25。方向的话是把2π分为n个bin,尺寸是与该类别训练集上的平均值取残差(没理解错的话)。
也就是说,如果我们只关心bin的位置的话,那loss就是只关乎于 x、z、θ这三个参数的,而大小的残差的loss就是只关乎于 y、h、w、θ的,那么loss的公式就如下:
【阅读笔记】pointrcnn_第4张图片
其中Npos是前景点的数目,Fcls采用交叉熵分类损失,Freg则采用smooth L1 损失。

最后采用non-maximum suppression(NMS)方法,一种IoU取阈值的方法,选取排名前100的proposals输入第二阶段。

二、点云区域pooling

获得3D Bbox提案后,我们要优化位置和方向。根据每个3D提案的位置,对每个点及其特征进行池化。稍微放大提案框。
在这里插入图片描述
对每一个前景点p而言,都应该要进一步判断其在不在bie中,若点在之中,则保留其特征。这个特征与x, y, z, r(反射强度),以及第一阶段得到的分割掩膜m∈{0,1}, C维的f(全局特征)有关。(没太理解)
没有内部点的提案将会被消除。

三、规范3D Bbox优化


如上图b所示,每个提案pool之后的点和其相关特征被喂入第二阶段的子网络,来优化3D box的位置和前景目标的可信度。

1、canonical transformation

为了利用来自stage-1的高召回率框提案,并估计提案框参数的残差,文章把每个提案框中pool过后的点转换到规范坐标,更好的学习每个提案的局部空间特征。
【阅读笔记】pointrcnn_第5张图片
其中,原点位于box中心,X’与Z’轴平行于地面,X’轴指向提案的方向,Z’轴与其垂直。Y’轴保持lidar坐标的方向(应该都垂直地面吧)。(坐标p->p一弯)

2、feature learning for box proposal refinement

优化子网络将坐标转换后的局部空间点和Stage-1阶段的全局语义特征结合优化框和置信度。尽管规范坐标后的点对局部空间信息鲁棒,但其不可避免的丢失了深度信息。比如,远处的目标(远离sensor)比近处的点密度小,为了补偿失去的深度信息,作者在p点的特征中包括了传感器的距离信息。
由此,对每个提案中,有点的局部空间特征p一弯,和额外的特征{r§, m§, d§}(强度、掩膜、深度)。把他们concat起来,喂入几个全连接层中去将局部特征编码成和全局特征一样的维度。然后把局部特征和全局特征concat起来,喂入pointnet++,获得接下来用于置信度分类和框优化的判别特征向量。

3、losses for box proposal refinement

采用相似的基于bin回归的损失用于提案优化。一个groundtruth框被分配给提案框用来优化,如果他们的3D IoU大于0.55。提案框和gt框要转换到规范坐标,即
在这里插入图片描述
公示如下,大体和第一阶段的loss一样,细节有所不同(待看)
【阅读笔记】pointrcnn_第6张图片
第二阶段的最终loss为
【阅读笔记】pointrcnn_第7张图片
其中,B是第一阶段3D提案框的集合。

以上便是pointrcnn的大致思路,有些细节还是要结合代码看才好。如果有不正确的地方希望大家批评指正。

参考
https://blog.csdn.net/taifengzikai/article/details/96840993
https://zhuanlan.zhihu.com/p/84335316

你可能感兴趣的:(自动驾驶,深度学习,人工智能)