PointNet++原文翻译+学习理解(上)

PointNet++原文翻译+学习理解

  PointNet++针对PointNet存在的不足做了很好的改进与创新。这里希望大家可以通过对PointNet++原文的阅读,增加对PointNet++的理解和思考。翻译过程尽量保证原汁原味。


PointNet++原文链接:https://arxiv.org/abs/1706.02413
PointNet++代码链接:https://github.com/charlesq34/pointnet2


PointNet++:在度量空间中的点集上进行深层特征学习
摘要
  以前很少有人研究深度学习在点集中的应用。PointNet是这方面的先驱。然而,PointNet并不能捕捉到由度量(metric)空间点所产生的局部结构,从而限制了它识别分类精密模型(fine-grained patterns)和对复杂场景的通用性。在PointNet++中,我们引入了一个多层次神经网络模型,该模型将PointNet循环应用于输入点集的内嵌分组的。通过度量空间距离,我们的网络能够通过增加相关尺度来学习局部特征(local features)。通过进一步观察,我们发现在学习过程中点集通常以不同的密度被采样,这大大降低了网络在训练密度均匀的点云的性能。实验表明,我们的网络PointNet++能够有效地学习深度点集的特征。特别地,在具有挑战性的3D点云基准测试(benchmarks of 3D point clouds)中获得的结果明显优于最先进(state-of-the-art)的技术。

1    引言
   我们感兴趣的是分析几何点集(欧几里得空间中点的集合)。点云是由3D扫描仪获取的一个特别重要的几何点集类型。例如,机载三维激光扫描技术。作为一个集合,这样的数据必须对其元素的排列具有不变性。此外,距离度量定义了可能显示不同属性的局部特征。例如,点的密度或其他属性在不同的位置上可能不一致——在三维扫描中,密度变化可以来自透视效果、径向密度变化、移动等。
  以前很少有人研究深度学习在点集中的应用。PointNet是这方面的先驱。PointNet的基本思想是学习每个点的空间编码,然后将所有单个点特征(point features)聚合到点云的全局特征( global point cloud signature)中。由于这样的设计,PointNet没有捕获到由度量(metric)引起的局部结构特征。然而,局部结构特征对于卷积架构(CNN)的成功与否至关重要。CNN将常规2D网格上定义的数据作为输入,并能够在多分辨率层次上以越来越大的尺度上逐步捕获特征。较低层的神经元接受域较小,而较高层的神经元接受域较大。这种沿着多层结构逐步抽象局部特征的能力使得CNN允许对深层不可见的特征有更好的概括性。
  我们引入了一个多层神经网络,称为PointNet++,以分层方式处理在度量空间中采样的每一组点。PointNet++的基本思想很简单。首先,我们用基础空间的距离度量将点集划分为重叠的局部区域。与CNN相似,我们从小区域内提取点云得局部特征,捕捉精细的几何结构;这些局部特征被进一步分组成更大的单元,并被处理用来产生更高级别的特征。重复这个过程直到我们得到整个点集的特征。
  PointNet++必须解决两个问题:如何对数据集进行分割,以及如何通过局部特征学习模块来抽象点集或局部特征集这两个问题它们是密切相关的,因为点集的分割必然会产生跨越区域间的公共结构部分,这样局部特征学习模块的权重就可以共享,就像卷积设置一样。我们选择局部特征学习模块作为切入点。PointNet是一种有效的结构体系,可以用于处理用于语义特征提取的无序点集。此外,该结构对于输入数据具有很强的提取能力。作为一个基本的构建块,PointNet将点集或局部特性集抽象为更高级别的表示。如下图所示,PointNet++递归地在输入集的嵌套分区上应用PointNet。
  如何生成点集的重叠分区这个问题依然存在。每个分区被定义为底层欧式空间中的一个邻居球,其参数包括质心位置和体积大小。为了均匀地覆盖整个集合,在输入点集之间使用最远点采样(FPS)算法对中心进行检测。与以固定步长扫描2D图像的CNN相比,我们的局部接受域既依赖于输入数据,也依赖于度量元素,因此更加高效。

PointNet++原文翻译+学习理解(上)

  然而,由于特征尺度的不确定和输入点集的不均匀性,选择合适的局部邻域球尺度是一个更有挑战性但又耐人寻味的问题。这在结构传感器扫描等真实数据中很常见(如图一),因此我们的输入点集与CNN输入有很大的不同,CNN输入可以看作是在均匀恒定密度的规则网格上定义的数据。在CNNs中,与局部分区范围对应的是内核的大小。相关学者指出,使用更小的内核有助于提高CNNs的能力。然而,我们对点集数据的实验却为这一规则提供了相反的论证。由于抽样点不足,小邻域可能包含的点太少,这可能不足以使切入点能够充分地获取特征。
  本文的一个重要贡献是,PointNet+在多个尺度上利用邻近球法,以实现健壮性和细节捕获。在训练过程中对训练数据辅以随机弃权,网络学习将自适应检测到不同尺度的权重模式,并根据输入数据结合多尺度特征。实验表明,我们的PointNet+能够高效、健壮地处理点集。特别地,在具有挑战性的3D点云基准测试中获得了明显优于最先进水平的结果。
  
2    问题阐述
  假设x=(M,d)x=(M,d)是一个离散度量空间的度量,存在于欧式空间RnR^n中,其中MRnM⊆R^n是点集,dd是距离度量。此外,欧几里德空间中MM周围区域的密度可能不是处处均匀的。我们感兴趣的是集合学习函数ff,它以xx作为输入(以及每个点的附加属性),并生成语义特征来重新评估xx的信息。实际上,ff可以理解为给XX分配标签的分类函数,也可以是给MM中的每个元素分配每个点标签的分割函数。
  
3    方法
   我们的工作可以看作是PointNet的扩展,添加了层次结构。首先回顾了PointNet(3.1小节),然后介绍了具有层次结构的PointNet的基本扩展(3.2小节)。最后,我们提出了我们的PointNet++,它能够在非均匀采样点集(3.3小节)中很好地学习特征。
3.1   PointNet[20]的概述:一种通用的连续数集函数拟合器
给定一个无序点集{x1,x2xnx_1, x_2,…x_n}其中xiRnx_i∈R^n ,可以定义一组函数f:xRf:x→R将一组点映射到一个向量上:
         PointNet++原文翻译+学习理解(上)
  PointNet++原文翻译+学习理解(上)
   图2:以二维欧氏空间中的点为例,说明了我们的分层特征学习结构体系及其在点集分割和分类中的应用。这里显示了单尺度点分组。密度自适应分组详见图3
  
  γγhh通常是多层感知器(MLP)网络。
  
  这里点集函数ff 属于EqEq。对任何连续集函数都可以进行近似。注意,hh的反馈可以解释为一个点的空间编码(详见PointNet)。在一些标准测试中,PointNet取得了令人印象深刻的性能。然而,它缺乏在不同尺度上捕获局部特征结构的能力。在下一节中,我们将介绍一个层次化的特性学习框架来解决这个问题。
3.2    多层次点云特征学习
  当PointNet使用单个最大池化(max pooling)操作来聚合整个点集时,新的结构体系构建了点的层次分组,并沿着层次结构逐步提取越来越抽象的局部特征区域。
  网络的层次结构是由一系列集合抽象层(图2)(set abstraction)组成的。在每个层次上,处理和抽象一组点,产生一组元素更少的集合。抽象层由三个关键层组成:采样层、分组层和PointNet层。采样层从输入点中选择一组点,定义局部区域的质心。分组层通过寻找质心周围的“相邻”点来构造局部区域集。PointNet层使用一个迷你PointNet结构作为局部特征学习模块,将输入编码为特征向量。
  一组抽象层需要一个N×(d+C)N×(d + C)矩阵作为输入与ddimd-dimNN个点坐标和CdimC-dim点特性。它输出一个N×(d+C)N'×(d + C')矩阵ddimd-dimNN'子样本点的坐标和新CdimC'-dim局部特征向量。我们将在下面的段落中介绍集合抽象级别的层。
  
采样层: 给定输入点{x1,x2,,xnx_1, x_2,…,x_n},我们使用迭代最远点采样(FPS)来选择点{xi1,xi2ximx_i1, x_i2,…, x_im},使xijx_ij为距离集合{xi1,xi2,xij1xi_1, xi_2,,…,x_ij−1}中所有点的最远点。与随机抽样相比,在相同质心数下,它对整个点集具有更好的覆盖。与CNNs扫描数据分布的向量空间无关性相反,我们的采样策略以数据依赖的方式生成接受域。
  
分组层: 这一层的输入是大小为N×(d+C)N×(d + C)的一组点和一组尺寸为N×dN'×d的质心坐标。输出是大小为N×K×(d+C)N'×K×(d + C)的点集组,每组点集对应于一个局部区域。KK是质心邻域点的数量。注意,KK在不同的组之间是不同的,但是随后的PointNet层能够灵活的将点数转换为固定长度的局部区域特征向量。
  在卷积神经网络中,像素的局部区域是由像素在一定的曼哈顿距离(卷积核大小)内具有数组索引的像素组成的。但在从度量空间采样的点集中,点的邻域由度量距离定义的。
  Ball query方法查询质心点半径范围内的所有点(在调配网络时设置K的上限)。另一种范围查询是K邻近(K nearest neighbor,KNN)搜索,它可以找到固定数量的相邻点。与KNN相比,ball query 的局部邻域保证了一个固定的区域尺度,从而使局部区域特征在空间上具有更好的可泛化性,这对于需要局部模式识别(例如语义点标记)的任务是最好不过的。
  
PonetNet层: 在这一层,输入为大小N×K×(d+C)N'×K×(d + C)的局部区域点。输出中的每个局部区域都由它的质心和质心邻域的局部特征抽象出来。输出数据大小是N×(d+C)N'×(d + C')
  局部区域内点的坐标首先被转换为相对于质心点的局部特征框架:xi(j)=xi(j)x^(j)x_i^{(j)}= x_i^{(j)}−\hat x^{(j)}(i=1,2,...,Ki = 1,2,..., K)和(j=1,2,,dj = 1,2,…,d),其中x^\hat x是质心坐标。我们使用3.1节中描述的PointNet作为局部特征学习模块的基本构件。利用相对坐标与点特征相结合的方法,可以在局部区域内捕获点对点的关系。
3.3    非均匀采样密度下的鲁棒特征学习
  正如前面所讨论的,在不同区域点集的密度不一致是非常普遍的。这种不均匀性给点集特征学习带来了很大的挑战。在密集数据中学习到的特性可能无法推广到稀疏采样区域。当然,为稀疏点云训练的模型可能无法识别细粒级高精度的局部结构。
  理想情况下,我们希望尽可能仔细地检查一个点集,以便在密集采样区域捕获最精细的细节。然而,在低密度地区,这种近距离检查是无法做到的,因为抽样不足可能破坏局部区域模式。在这种情况下,我们应该在更大范围内寻找更大规模的模式。为了实现这一目标,我们提出了密度自适应点网层(图3),当输入采样密度发生变化时,该层学会了结合来自不同尺度区域的特征。我们将具有密度自适应切入点网络层的层次网络称为PointNet++。
  在之前的3.2节中,每个抽象级别都包含单个尺度的分组和特征提取。在PointNet++中,每个抽象层提取多个局部模式尺度,并根据局部点密度特征聪明地组合它们。对于局部区域的分组和不同尺度特征的组合方式,我们提出了两种类型的密度自适应层,如下图所示。

PointNet++原文翻译+学习理解(上)

Multi-scale grouping (MSG). 如图3 (a)所示,应用不同尺度的分组层是获取多尺度模式的一种简单而有效的方法,然后根据不同的切入点提取每个尺度的特征。不同尺度的特征被连接起来形成一个多尺度的特征。
  我们运用结合多尺度特征的优化学习策略来训练网络。这种策略这是通过对每个实例的输入点随机弃权来实现的,我们称之为随机输入弃权。具体来说,对于每个训练点集,我们选择一个弃权比例θθ[0,p]p1[0,p]p≤1中均匀采样。对于每一个点来说,就是以θθ的概率随机弃权一个点。在实践中,我们设置p=0.95p = 0.95以避免生成空点集。这样做我们提出各种稀疏的网络训练集(由θθ决定)和不一致性的网络训练集(随机性弃权产生)。在测试集中,我们保留所有可用点。

Multi-resolution grouping (MRG). 上面的MSG方法在计算成本非常昂贵,因为它在每个质心点的大范围邻域中运行局部特征学习模块PointNet。而且,由于质心点的数量通常在网络的前几层是相当大的,运算的时间成本非常高昂。
  在这里,我们提出了一种替代方法,它避免了如此昂贵的计算,但仍然保留了根据点的分布特性自适应地聚合信息的能力。在图3 (b)中,某一层LiL_i区域的特征是两个向量的结合。一个向量(图左)通过运用几何抽象层,并将提取到的Li1L_{i-1}层中的每一组点邻域集特征综合起来的方式来获取,另一个向量(图右)是通过使用单个PointNet层直接处理局部区域中的所有原始点而获得的特性。
  当局部区域密度较低时,第一个向量可能不如第二个向量可靠。因为计算第一个向量的子区域包含更稀疏的点,而且更容易受到抽样不足的影响。在这种情况下,第二个向量的权重应该更高。相反,当局部区域的密度很高时,第一个向量提供了更详细的特征信息。因为它具有在较浅网络层中循环地在较高分辨率下进行自我检查的能力。
  与MSG相比,该方法计算效率更高,因为我们避免了在低层次的大范围地进行局部特征提取。


以上是这篇文章的模型结构设计思想和核心算法解释。希望能够帮助到大家

PointNet++原文翻译+学习理解(上)