(PointNet++是PointNet结构的改良,它增强了对点云模型细节的捕捉能力)
摘要:PointNet并没有捕捉到点云的局部结构,而本文介绍了一种分层神经网络,用于捕捉点云的局部特征。
Introduction
背景:几何点集,即点云,是欧几里得空间中点的集合,通常由3D扫描仪获得。点云的处理需要有排列不变性(不同顺序的输入有相同输出)。此外,距离度量定义了点云局部区域的不同性质。如不同位置不同的密度定义了局部点不同的属性。
现有缺陷:PointNet不捕获局部结构特征。但是,CNN的成功证明了学习过程中利用局部结构信息对学习也非常重要。
本文概述:引入一种分层神经网络,被称为PointNet++,它以分层的形式处理点云。PointNet++的总体思想很简单。首先通过底层空间的距离度量将点集划分为重叠的局部区域。与CNN类似,我们从小邻域中提取捕捉精细几何结构的局部特征;这样的局部特征被进一步分组为更大的单元并且被处理以产生更高级别的特征。重复这个过程,直到我们获得整个点集的特征。
需要解决的两个问题:如何分区,如何通过局部特征学习器提取局部特征以及整个点云。
分区的过程需要使各个分区的结构相同,以便共享局部特征学习器的权重。本文使用PointNet作为局部学习器,它能将局部点集抽象为特征向量。
用球形邻域进行分区,参数包括质心位置和半径。通过最远点采样(farthest point sampling,FPS,FPS的核心思想是使得所有采样点之间的距离尽可能的远,也就是数据尽可能的离散均匀。详细算法可见最远点采样(Farthest Point Sampling,FPS)算法详解_生信小兔的博客-CSDN博客)选择质心。
半径的选择要考虑到两个问题:一个是点云中不同位置的点密度是不同的,另一个是较小的半径反而可能会由于无法捕获局部特征而导致效果较差。
重要贡献:PointNet++在多个尺度上利用邻域来实现鲁棒性和细节捕获。在训练过程中随机输入丢失的辅助下,网络学习自适应地加权在不同尺度上检测到的模式,并根据输入数据组合多尺度特征。
Method
该工作是PointNet的扩展,在PointNet的基础上增加了层次结构,使其在非均匀点云结构下也能学习点云特征。
回顾PointNet:给定一个点集{x1,x2,x3,...,xn},PointNet所拟合的函数f可表示如下图。h可以被解释为对某一点的空间编码。f则由于MAX的存在因此具有输入点排列不变性。PointNet缺乏捕获局部特征的能力,这也是本文所改进的。
(需要了解PointNet是什么的话可以看我的前一篇文章)
PointNet++的结构
用分层的方式学习点集的特征
构建了点的分层分组,并沿着分层架构逐渐抽象出越来越大的局部区域(就是每一层都将上一层的几个特征抽象成了一个特征,有些像CNN)。
抽象层由三个关键层组成:采样层,分组层和PointNet层。采样层从输入点中选择一组质心点。分组层通过查询质心点相邻点构造局部区域集。PointNet层使用迷你PointNet将每个局部区域集抽象为特征向量。通过几个抽象层的叠加最终生成一组稀疏点及对应的特征向量。用数学的方式讲,即集合抽象级别以N×(d+C)矩阵作为输入,该矩阵来自具有d-dim坐标和C-dim点特征的N个点。它输出N0个次采样点的N0×(d+C0)矩阵,该矩阵具有d-dim坐标和总结局部上下文的新的C0-dim特征向量。
· 采样层使用最远点采样(FPS)来选择点的子集,并作为一组质心。这种方式与随机采样相比能对点集有更高的覆盖率。
· 分组层输入是一个大小为N×(d+C)的点集(d为坐标,C为每个点的特征)和一组大小为N0×d的质心的坐标。输出是N0×K×(d+C)的多组点集,其中每组对应于一个局部区域,K是质心点附近的点数。该层通过查询点半径范围内的所有点来分组。该方法与KNN相比更能保证局部区域特征的可推广性(对固定区域内的特征进行学习能保证学习结果的合理性)。每组的K是不相同的(但实验中设置了K的上限),但PointNet能将最后输出的长度统一化。
· PointNet层输入为大小为N0×K×(d+C)的点的N0个局部区域。输出则是对每个局部区域的抽象结果,数据大小为N0×(d+C0)。需要将局部区域中的点的坐标转换为相对于质心点的相对坐标(公式如下截图),通过使用相对坐标的方式,可以更好地捕获局部特征。
采样密度非均匀情况下的鲁棒性特征学习
问题:在密集数据中学习的特征可能不会推广到稀疏采样的区域。
解决方案:问题的关键在于不同密度区域的所需的采样范围不同,高密度区域适合小范围的密集采样,而低密度区域则应使用大范围的稀疏采样。为了实现这一目标,文章提出了密度自适应PointNet层。该层学习组合来自不同尺度区域的特征。将具有该层结构的神经网络称为PointNet++;
在PointNet++中,每个抽象层提取多个尺度的局部特征,并根据局部点密度将其组合。文章提出了MSG和MRG两种组合方式。
Multi-Scale Grouping(MSG):
应用具有不同尺度的分组层,然后根据PointNets提取每个尺度的特征。不同尺度的特征被连接在一起以形成多尺度特征。文章训练网络学习一种优化的策略来组合多尺度特征。而训练集则是通过以随机概率随机丢弃每个实例的输入点来获得的,这被称之为随机输入丢弃。
对于每个训练点集,我们选择从[0,p]均匀采样的丢弃率θ,其中p≤1。对于每个点,我们随机丢弃一个概率为θ的点。在实践中,我们设置p=0.95以避免生成空的点集。在这样做的过程中,我们为网络提供了各种稀疏性(由θ引起)和变化均匀性(由丢弃的随机性引起)的训练集。在测试期间,我们保留所有可用点。
Multi-Resolution Grouping(MRG):
上面的MSG方法在计算上是昂贵的,因为它在每个质心点的大规模邻域中运行局部PointNet。而由于质心的数量级较大,因此计算时间通常很长。MRG则是一种降低了这种昂贵计算成本,同时又能根据点的分布特性自适应聚合信息的方法。该方法将某一区域的特征视为两个特征向量的级联。一个通过使用集合抽象级别汇总较低级别Li−1的每个子区域的特征获得,另一个通过使用单个PointNet直接处理局部区域中的所有原始点获得。当局部区域密度较低时,由于子区域包含信息不足,因此第二向量更加可靠。这种情况下第二向量权重会更高。相反,若局部区域点密度较高,则第一向量能提供更精细的信息。与MSG相比,该方法在计算上更高效,因为避免了在最低级别的大规模邻域中进行特征提取。
用于点云分割的点特征传播
分割任务本质是给每一个点分配语义标签。一种解决方案是始终将所有点采样为所有集合抽象级别中的质心,然而这会导致高计算成本。另一种方法是将特征从子采样点传播到原始点。文章通过基于距离差值和跳跃连接结合的分层传播策略(具体结构可以看看上面的PointNet结构图)。简单来说,就是将高层的特征通过插值的方式传播到下一层。使用基于knn的逆距离加权平均,然后将该层点上的插值特征与抽象层中对应层的对应点特征连接起来,并将连接后的特征输入到一个unit PointNet中进行处理。该unit PointNet应用几个共享的完全连接层和ReLU层来更新每个点的特征向量。重复该过程,直到将特征传播到原始点集。加权公式如下图。
Experiments
评估对象:在2D对象(MNIST)、3D对象(ModelNet40刚性对象、SHREC15非刚性对象)和真实3D场景(ScanNet)四个数据集上进行了评估。分类评估标准是准确率。通过体素分类的平均准确性来评估语义场景标记效果。
欧几里得空间下的点云分类
对模型集通过采样获得点云,并分别测试了加入和不加入点法线信息的效果。所有点集都被标准化为零均值,并且在一个单位球内(指的应该是把各坐标值规范到了-1~1之间)。使用了带三个全连接层的三级分层网络进行测试。将该方法与之前的PointNet和其他先进成果进行比较,结果如下表。从表中可以看出,在二维图像的处理上,该方案相比于PointNet错误率更低,且效果逼近成熟的针对二维图像处理的CNN架构。而在三维模型的分类上,该方案在输入相同的情况下,分类效果明显强于PointNet,是结果最佳的分类网络。
同时,文章还测试了该网络模型面对不规则采样时的鲁棒性。在测试期间随机丢弃点,并测试不同神经网络准确率的变化。测试结果如下图。
我们看到MSG+DP(训练期间具有随机输入丢弃的多尺度分组)和MRG+DP。MSG+DP性能从1024个测试点下降到256个测试点,降幅不到1%。此外,与替代方案相比,它在几乎所有采样密度上都实现了最佳性能。PointNet vanilla[20]在密度变化下相当稳健,因为它专注于全局抽象,而不是精细细节。然而,与我们的方法相比,细节的丢失也使其功能减弱。SSG(在每个级别中具有单尺度分组的烧蚀PointNet++)未能推广到稀疏采样密度,而SSG+DP通过在训练时间中随机丢弃点来修正该问题。
点云分割测试
该测试目标是预测室内扫描中的点的语义对象标签。该测试完全依赖于扫描几何体本身特征,而不使用RGB信息。为了进行公平的比较,在所有实验中RGB信息均被删除,并将点云标签预测转换为体素标记。结果如下图。可以看出该方法的效果远优于其他方法。与PointNet相比,该方法引入了分层特征学习,并捕获了不同尺度的几何特征。这对于理解多个级别的场景和标记各种大小的对象非常重要。
非均匀密度点云上的鲁棒性分析:如黄条部分所示,本文的方法中,SSG的性能易受点云密度影响。而MRG和MSG方法鲁棒性较强,尤其是MSG方法。
非欧几里得空间中的点云分类
一个好的分类应该能考虑到非刚性形状(即会变化但有一定特征)的分类,即能够考虑到姿态差异问题,学习对象的内在结构。如下图,a和c应该被分类为一种。
(数据提取这部分没大看懂,大概讲的是获得模型上的数个固有点的多种特征作为输入,并根据它们在空间中的位置进行采样分组。值得注意的是,使用XYZ坐标作为特征输入并非最佳方案。提取的特征有WKS,HKS 和 multi-scale Gaussian curvature.)
由下表可以看出,该方案在以内在特征作为输入时,结果要优于该领域的先进方法。
比较我们方法的第一个和第二个设置,我们发现内在特征对于非刚性形状分类非常重要。XY Z特征不能揭示内在结构,并且受姿态变化的影响很大。比较我们方法的第二个和第三个设置,我们发现与欧几里得邻域相比,使用测地线邻域是有益的。欧几里得邻域可能包括远离表面的点,当形状提供非刚性变形时,该邻域可能会发生显著变化。这给有效的权重分配带来了困难,因为局部结构可能会变得组合复杂。另一方面,曲面上的测地邻域消除了这个问题,提高了学习效率。
有关测地邻域的说明(来自chatGPT):Geodesic neighborhood(地球拓扑邻域)是一种在三维模型上定义邻域的方法,它使用了地球的曲面拓扑结构来计算距离和邻域。在地球表面上,两点之间的最短路径是沿着大圆弧线(geodesic)连接它们。同样,对于一个三维模型的表面,geodesic neighborhood 指的是在曲面上沿着最短路径连接到某个点的所有相邻点的集合。通常,geodesic neighborhood 是通过计算从中心点到所有其他点的最短距离来确定的。在三维模型中,这需要计算每个点与其所有相邻点之间的距离,并将这些距离转换为曲面上的最短距离。可以使用各种算法来计算 geodesic neighborhood,如 Dijkstra 算法、Fast Marching 算法等。
有关多尺度高斯曲率的说明(来自chatGPT):多尺度高斯曲率(Multiscale Gaussian Curvature)是一种计算曲面上曲率的方法,它可以在不同的尺度上对曲面进行分析。高斯曲率是描述曲面弯曲和形状的一个重要的几何量,它定义了曲面在某个点处的弯曲程度。在多尺度高斯曲率中,计算曲率的过程被分解为多个尺度,每个尺度下的曲率都被计算并组合在一起形成一个多尺度曲率图。
Conclusion
本文重点:递归地总结局部特征;通过两种抽象层来解决非均匀点采样的问题。
未来研究:在未来,值得思考的是如何通过在每个局部区域共享更多的计算来加快网络的推理速度,特别是对于MSG和MRG层。而如何应用得到的高维向量也是有趣的研究方向。