PointNet系列文献小结

参考文章:https://zhuanlan.zhihu.com/p/44809266

此系列论文首先提出了一种新型的处理点云数据的深度学习模型-PointNet,并验证了它能够用于点云数据的多种认知任务,如分类、语义分割和目标识别。不同于图像数据在计算机中的表示通常编码了像素点之间的空间关系,点云数据由无序的数据点构成一个集合来表示。因此,在使用图像识别任务的深度学习模型处理点云数据之前,需要对点云数据进行一些处理。目前采用的方式主要有两种:

 

1、将点云数据投影到二维平面。此种方式不直接处理三维的点云数据,而是先将点云投影到某些特定视角再处理,如前视视角和鸟瞰视角。同时,也可以融合使用来自相机的图像信息。通过将这些不同视角的数据相结合,来实现点云数据的认知任务。比较典型的算法有MV3D和AVOD。

2、将点云数据划分到有空间依赖关系的voxel。此种方式通过分割三维空间,引入空间依赖关系到点云数据中,再使用3D卷积等方式来进行处理。这种方法的精度依赖于三维空间的分割细腻度,而且3D卷积的运算复杂度也较高。

 

不同于以上两种方法对点云数据先预处理再使用的方式,此论文的作者提出了直接在点云数据上应用深度学习模型的方法,称为PointNet。

2 理论基础

点云数据是在欧式空间下的点的一个子集,它具有以下三个特征:

无序
点云数据是一个集合,对数据的顺序是不敏感的。这就意味这处理点云数据的模型需要对数据的不同排列保持不变性。目前文献中使用的方法包括将无序的数据重排序、用数据的所有排列进行数据增强然后使用RNN模型、用对称函数来保证排列不变性。由于第三种方式的简洁性且容易在模型中实现,论文作者选择使用第三种方式,既使用 maxpooling这个对称函数来提取点云数据的特征。

点与点之间的空间关系。
一个物体通常由特定空间内的一定数量的点云构成,也就是说这些点云之间存在空间关系。为了能有效利用这种空间关系,论文作者提出了将局部特征和全局特征进行 串联的方式来聚合信息。

不变性。
点云数据所代表的目标对某些空间转换应该具有不变性,如旋转和平移。论文作者提出了在进行特征提取之前,先对点云数据进行对齐的方式来保证不变性。对齐操作是通过训练一个小型的网络来得到转换矩阵,并将之和输入点云数据相乘来实现。

 

作者对他们模型进行了进一步的理论分析,并提出了两个定理:

PointNet系列文献小结_第1张图片

定理1

定理1证明了PointNet的网络结构能够拟合任意的连续集合函数。其作用类似证明神经网络能够拟合任意连续函数一样【1】。同时,作者发现PointNet模型的表征能力和maxpooling操作输出的数据维度(K)相关,K值越大,模型的表征能力越强。

 

PointNet系列文献小结_第2张图片

定理2

定理2(a)说明对于任何输入数据集S,都存在一个最小集Cs和一个最大集Ns,使得对Cs和Ns之间的任何集合T,其网络输出都和S一样。这也就是说,模型对输入数据在有噪声(引入额外的数据点,趋于Ns)和有数据损坏(缺少数据点,趋于Cs)的情况都是鲁棒的。定理2(b)说明了最小集Cs的数据多少由maxpooling操作输出数据的维度K给出上界。换个角度来讲,PointNet能够总结出表示某类物体形状的关键点,基于这些关键点PointNet能够判别物体的类别。这样的能力决定了PointNet对噪声和数据缺失的鲁棒性。如图所示,作者通过实验列出了PointNet学习到的以下几个物体的关键点。

 

PointNet系列文献小结_第3张图片

3 PointNet系列模型结构

3.1 PointNet

PointNet系列文献小结_第4张图片

 

PointNet的模型结构如上图所示,其关键流程介绍如下:

1、输入为一帧的全部点云数据的集合,表示为一个nx3的2d tensor,其中n代表点云数量,3对应xyz坐标。
2、输入数据先通过和一个T-Net学习到的转换矩阵相乘来对齐,保证了模型的对特定空间转换的不变性。
3、通过多次mlp对各点云数据进行特征提取后,再用一个T-Net对特征进行对齐。
4、在特征的各个维度上执行maxpooling操作来得到最终的全局特征。
5、对分类任务,将全局特征通过mlp来预测最后的分类分数;对分割任务,将全局特征和之前学习到的各点云的局部特征进行串联,再通过mlp得到每个数据点的分类结果。

 

3.2 PointNet++

 

▎网络构成

PointNet提取特征的方式是对所有点云数据提取了一个全局的特征,显然,这和目前流行的CNN逐层提取局部特征的方式不一样。受到CNN的启发,作者提出了PointNet++,它能够在不同尺度提取局部特征,通过多层网络结构得到深层特征。PointNet++由以下几个关键部分构成:

采样层(sampling)
激光雷达单帧的数据点可以多达100k个,如果对每一个点都提取局部特征,计算量是非常巨大的。因此,作者提出了先对数据点进行采样。作者使用的采样算法是最远点采样(farthest point sampling, FPS),相对于随机采样,这种采样算法能够更好地覆盖整个采样空间。

组合层(grouping)
为了提取一个点的局部特征,首先需要定义这个点的“局部”是什么。一个图片像素点的局部是其周围一定曼哈顿距离下的像素点,通常由卷积层的卷积核大小确定。同理,点云数据中的一个点的局部由其周围给定半径划出的球形空间内的其他点构成。组合层的作用就是找出通过采样层后的每一个点的所有构成其局部的点,以方便后续对每个局部提取特征。

特征提取层(feature learning)
因为PointNet给出了一个基于点云数据的特征提取网络,因此可以用PointNet对组合层给出的各个局部进行特征提取来得到局部特征。值得注意的是,虽然组合层给出的各个局部可能由不同数量的点构成,但是通过PointNet后都能得到维度一致的特征(由上述K值决定)。

 

上述各层构成了PointNet++的基础处理模块。如果将多个这样的处理模块级联组合起来,PointNet++就能像CNN一样从浅层特征得到深层语义特征。对于分割任务的网络,还需要将下采样后的特征进行上采样,使得原始点云中的每个点都有对应的特征。这个上采样的过程通过最近的k个临近点进行插值计算得到。完整的PointNet++的网络示意图如下图所示。

PointNet系列文献小结_第5张图片

 

▎不均匀点云数据的特征提取

不同于图片数据分布在规则的像素网格上且有均匀的数据密度,点云数据在空间中的分布是不规则且不均匀的。虽然PointNet能够用于对各个点云局部提取特征,但是由于点云在各个局部均匀性不一致,很可能导致学习到的PointNet不能提取到很好的局部特征。比如说,在越远的地方激光雷达数据通常变得越稀疏,因此在稀疏的地方应该考虑更大的尺度范围来提取特征。为此,作者提出了两种组合策略来保证更优的特征提取。

多尺度组合(multi-scale grouping, MSG):
比较直接的想法是对不同尺度的局部提取特征并将它们串联在一起,如下图(a)所示。但是因为需要对每个局部的每个尺度提取特征,其计算量的增加也是很显著的。

多分辨率组合(multi-resolution grouping, MRG):
为了解决MSG计算量太大的问题,作者提出了MRG。此种方法在某一层对每个局部提取到的特征由两个向量串联构成,如下图(b)所示。第一部分由其前一层提取到的特征再次通过特征提取网络得到,第二部分则通过直接对这个局部对应的原始点云数据中的所有点进行特征提取得到。

PointNet系列文献小结_第6张图片

3.3 Frustum-PointNet

上述的PointNet和PointNet++主要用于点云数据的分类和分割问题,Frustum-PointNet(F-PointNet)将PointNet的应用拓展到了3D目标检测上。目前单纯基于Lidar数据的3D目标检测算法通常对小目标检测效果不佳,为了处理这个问题,F-PointNet提出了结合基于图像的2D检测算法来定位目标,再用其对应的点云数据视锥进行bbox回归的方法来实现3D目标检测。F-PointNet的网络结构如下图所示。

 

PointNet系列文献小结_第7张图片

 

可以看到,F-PointNet主要由以下几部分构成:

视锥生成(frustum proposal):
首先通过2D目标检测器来定位图片中的目标以及 判断它们的类别。对每一个检测到的目标,通过标定好的传感器的内参和它们之间的转换矩阵得到其对应的点云数据中的各点,即点云视锥。作者使用的2D目标检测模型是基于VGG网络的FPN作为特征提取器,并用Fast R-CNN来预测最终的2D bbox。

3D实例分割(3D instance segmentation):
对每个得到的点云视锥,通过旋转得到以中心视角为坐标轴的点云数据。对转换后的点云数据用PointNet(或PointNet++)进行实例分割。实例分割是一个二分类问题,用于判断每个点属于某个目标或者不属于。

3D边界框回归(3D box estimation):
将上一步实例分割的结果作为mask得到属于某个实例的所有点云,计算其质心作为新的坐标系原点。通过一个T-Net进行回归得到目标质心和当前坐标原点的残差。将点云平移到计算得到的目标质心后,通过PointNet(或PointNet++)对3D bbox的中心、尺寸和朝向进行回归得到最终的输出。此步骤采用的回归方式和Faster R-CNN中类似,不直接回归,而是回归到不同尺寸和朝向的锚点(anchors)。

 

综上所述,F-PointNet是一个多步骤的3D目标检测算法。如下图所示,为了应对点云数据中各个目标的视角不变性和得到更准确的bbox回归(通过缩小需要回归的值的取值范围),算法需要进行三次坐标转换。模型的loss和2D的目标检测一样是包含分类以及回归的多任务loss。同时,作者提出了一种被称为corner loss的损失函数来对目标的中心、朝向和大小进行联合优化,避免由于某一方面的不准确而主导loss。

PointNet系列文献小结_第8张图片

4 目标检测效果

因为目前我们主要考虑点云的目标检测问题,在此忽略PointNet和PointNet++论文中提出的分类和语义分割的效果,只考虑F-PointNet的检测效果。下图为论文给出的在KITTI测试集上的检测效果。

PointNet系列文献小结_第9张图片

 

从KITTI的排行榜上[2],F-PointNet对car,pedestrian和cyclist的检测效果分别排第四,第一和第二。可以看到,得益于精确的基于图像的2D检测模型,F-PointNet对小目标的检测效果确实处于领先地位。官方给出的单帧处理速度是0.17s。

作者在附录中给出了结合点云鸟瞰视角的F-PointNet的实验,结果显示,对于hard的场景,结合鸟瞰图的F-PointNet有3.82%的提升。这是因为,hard场景下目标遮挡很严重,2D目标检测根据图片不能很好地检测到目标,而鸟瞰图能很好地分辨出不同目标。

5 思考

如前所述,F-PointNet由2D目标检测模型和3D分割和回归网络构成,并非为端到端的模型。可以考虑将其组合成一个端到端的网络。

在做3D分割和bbox回归的时候,目前只使用了点云特征,可以考虑融合2D检测模型给出的图像特征。

参考资料

  1. Universal_approximation_theorem
  2. http://www.cvlibs.net/datasets/kitti/eval_object.php?obj_benchmark=3d
  3. PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
  4. PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
  5. Frustum PointNets for 3D Object Detection from RGB-D Data

你可能感兴趣的:(3D,recon,&,scene,understanding)