当前位置: 代码迷 >> 综合 >> PointNet++:度量空间中点云的深层层次特征学习
  详细解决方案

PointNet++:度量空间中点云的深层层次特征学习

热度:85   发布时间:2024-01-30 03:34:22.0

大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱分享、热爱开源! 这博客是我对学习的一点总结与思考。如果您也对 深度学习、机器视觉、数据结构与算法、编程 等感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客
我的Github项目地址是:【AI 菌】的Github

文章目录

    • 一、 PointNet++简介
    • 二、提出背景
    • 三、网络结构
      • 3.1 分层点集特征学习
        • (1) 集合抽象层set abstraction
        • (2) 采样层Sampling layer
        • (3) 分组层Grouping layer
        • (4) PointNet layer
      • 3.2 非均匀采样密度下的鲁棒特征学习
        • (1) 多尺度分组(MSG)
        • (2) 多分辨率分组(MRG)
      • 3.3 点特征传播在集合分割中的应用
    • 四、PointNet++的性能
      • 4.1数据集介绍
      • 4.2 性能表现
        • (1) 欧氏度量空间中的点集分类
        • (2) 点集分割
        • (3) 非欧氏度量空间中的点集分类
    • 五、结论


一、 PointNet++简介

PointNet++几乎由PointNet的原班人马提出,目的是为了解决PointNet不能捕捉到由度量空间点所产生的局部结构的问题。PointNet++提出了一种新的set learning layers来自适应地组合多尺度特征。

PointNet++在多个尺度上利用邻域来实现鲁棒性和细节捕获。该网络在训练过程中,借助于随机输入丢失,学习对不同尺度上检测到的模式进行自适应加权,并根据输入数据进行多尺度特征组合。

实验表明,PointNet++能够有效地学习深层点集特征。特别是,在具有挑战性的三维点云基准点上,取得了明显优于现有水平的结果。

二、提出背景

以前很少有研究点集的深度学习,PointNet 打开了这方面的大门。然而,PointNet不能捕捉到由度量空间点所产生的局部结构,限制了它识别细粒度模式的能力和对复杂场景的泛化能力。由此原作者提出了PointNet++,针对该问题进行了改进。

PointNet++的设计必须解决两个问题:如何生成点集的划分,以及如何通过局部特征学习器抽象点集或局部特征。

这在实际数据中,输入的点集(比如3D点云)在不同区域可能具有不同的密度,这和卷积神经网络的输入有很大不同,CNN的输入一般是图片格式的数据,被认为具有均匀的恒定密度。

在神经网络中,与局部分区尺度相对应的是核的大小。一般而言,使用较小的内核有助于提高卷积神经网络的能力。然而,我们在点集数据上的实验却有着相反的结论。由于采样不足,小邻域可能由太少的点组成,这可能不足以让PointNets稳健地捕捉这些模式。

三、网络结构

PointNet++的整体网络结构如下:
在这里插入图片描述

3.1 分层点集特征学习

如上图所示,PointNet++的层次结构由许多抽象层次组成。在每一个层次上,一组点被处理和抽象,以产生一个包含更少元素的新集合。
集合抽象层由三个关键层组成:采样层Sampling分组层GroupingPointNet层。采样层从输入点中选择一组点,这些点定义了局部区域的质心。分组层通过寻找质心周围的“相邻”点构造局部区域集。PointNet层使用一个小型PointNet网络将局部区域模式编码为特征向量。

(1) 集合抽象层set abstraction

通过集合抽象层可以得到局部环境的特征。
在这里插入图片描述

输入矩阵: N × ( d + C ) N×(d+C) 。表示具有d维坐标和C维点特征的N个点。
输出矩阵: N 0 × ( d + C 0 ) N_0 ×(d+C_0) 。表示由 N 0 N_0 个亚像素点组成,具有d维坐标和新的 C 0 C_0 维特征向量。

(2) 采样层Sampling layer

采样层从输入点中选择一组点,这些点定义了局部区域的质心。
采样的方式是:最远点抽样(FPS)
这种采样方式,与随机抽样相比,在质心数目相同的情况下,它能更好地覆盖整个点集。
具体采样的方式可参考以下原文:
在这里插入图片描述

(3) 分组层Grouping layer

分组层通过寻找质心周围的“相邻”点构造局部区域集。
在这里插入图片描述
输入:尺寸为 N × ( d + C ) N ×(d+C) 的点集、一组尺寸为 N 0 × d N_0×d 的质心的坐标。
输出:尺寸为 N 0 × K × ( d + C ) N_0×K×(d+C) 的点集,其中K是每个质心点邻域中的点数。
注意:K在不同的组中是不同的,但是随后的PointNet层能够将灵活的点数转换成固定长度的局部区域特征向量。

在卷积神经网络中,一个像素的局部区域由阵列索引在像素的一定核大小(曼哈顿距离)内的像素组成。在从度量空间采样的点集中,点的邻域由度量距离定义。

Ball query方法查找查询点半径范围内的所有点(在实现中设置了K的上限)。另一种范围查询是K最近邻(kNN)搜索,它查找固定的3个相邻点。与kNN相比,ball query的局部邻域保证了一个固定的区域尺度,从而使得局部区域特征在空间上更具普遍性,这对于需要局部模式识别(如语义点标记)的任务来说是首选的。

(4) PointNet layer

PointNet层使用一个小型PointNet网络将局部区域模式编码为特征向量
在这里插入图片描述
输入: N 0 × K × ( d + C ) N_0×K×(d+C)
输出: N 0 × ( d + C 0 ) N_0 ×(d+C_0)

首先将局部区域内点的坐标转换为相对于该组内质心点的相对坐标。再利用原来的PointNet,通过使用相对坐标和点特征,就可以捕捉局部区域内点到点关系。

3.2 非均匀采样密度下的鲁棒特征学习

点集在不同区域具有不同的密度。在密集数据中学习到的特征可能不能推广到稀疏采样区域。因此,为稀疏点云训练的模型可能无法识别细粒度的局部结构。

在低密度区域,由于采样点的不足,可能导致局部模式失效。所以在这种情况下,我们应该在更近的地方寻找更大尺度的模式。因此提出了密度自适应PointNet层,当输入采样密度改变时,学习合并来自不同尺度区域的特征。我们将具有密度自适应点网层的分层网络称为PointNet++。
在这里插入图片描述
在PointNet++中,每个抽象层提取多个尺度的局部模式,并根据局部点密度进行智能组合。在对局部区域进行分组和结合不同尺度特征的基础上,我们提出了两种密度自适应层:

(1) 多尺度分组(MSG)

如图3(a)所示,捕捉多尺度模式的一种简单而有效的方法是应用具有不同尺度的分组层,然后应用相应的PointNet来提取每个尺度的特征。将不同尺度的特征串联起来形成多尺度特征。

(2) 多分辨率分组(MRG)

上面的MSG方法计算量很高,因为它在每个质心点的大规模邻域中都要运行局部PointNet。特别是,由于质心点的数量相当多,因此时间成本非常大。

因此,提出了一种替代方法,避免了如此昂贵的计算,同时保留了根据点的分布特性自适应地聚集信息的能力。在图3(b)中,某一级别 L i L_i 的区域的特征是两个向量的级联。一个向量(如图所示)是通过使用集合抽象级别从较低级别 L i ? 1 L_{i?1} 汇总每个子区域的特征得到的。另一个向量(右)是通过使用单个PointNet直接处理局部区域中的所有原始点而获得的特征。

与MSG相比,该方法在计算上更有效,因为它避免了在低层大规模邻域中的特征提取。

3.3 点特征传播在集合分割中的应用

在集合抽象层,对原始点集进行二次采样。然而在语义点标注等集分割任务中,我们需要获取所有原始点的点特征。一种解决方案是在所有抽象层中始终将所有点采样为质心,但这会导致较高的计算成本。另一种方法是将特征从子采样点传播到原始点。

如图2所示,采用基于距离的内插跨层跳跃链路的分层传播策略。在特征传播层面,将点特征从 N l × ( d + C ) N_l×(d+C) 点传播到 N l ? 1 N_{l?1} 点,其中 N l ? 1 N_{l?1} N l N_l N l N_l N l ? 1 N_{l?1} )是集合抽象层次 l l 的输入和输出的点集大小。我们通过在 N l ? 1 N_{l?1} 点的坐标处插值 N l N_l 点的特征值 f f 来实现特征传播。在许多插值选择中,我们使用基于k个最近邻的距离加权逆平均(如等式2,默认情况下我们使用p=2,k=3)。 N l ? 1 N_{l?1} 点上的内插特征然后与集合抽象级别的跳过链接点特征连接。然后将连接的特征通过一个“单元点网”传递,这类似于CNNs中的逐个卷积。应用几个共享的完全连通层和ReLU层来更新每个点的特征向量。重复这个过程,直到我们将特征传播到原始点集。
在这里插入图片描述

四、PointNet++的性能

4.1数据集介绍

论文中提到,在四个数据集上进行了测试,它们分别是:

  1. MNIST。2D目标,具有60k训练和10k测试样本的手写数字图像。
  2. ModelNet40。3D目标,40个类别的CAD模型(大部分是人造的)。使用官方划分的9843个形状用于训练,2468个用于测试。
  3. SHREC15。在非刚性形状,包含50个类别的1200个形状。每个类别包含24个形状,大部分是有机形状,有各种姿势,如马、猫等。我们使用五倍交叉验证来获得分类精度。
  4. ScanNet。真实的3D场景,1513个扫描和重建室内场景样本。其中1201个场景用来训练,312个场景用于测试。

4.2 性能表现

(1) 欧氏度量空间中的点集分类

  1. 2D和3D分类效果明显提高。如表1中红色部分,分类的误差率较PointNet降低了很多;同时在表2中,在ModelNet40上的分类准确度表现最好。
    在这里插入图片描述
  2. 对采样密度变化具有很好的鲁棒性。如下图所示,当单位领域内的采样点减少时,PointNet++上的分类准确度仍然保持较高水准。
    在这里插入图片描述

(2) 点集分割

  1. 点云分割准确度明显优于其它的基准方法。
    在这里插入图片描述
  2. 对采样密度变化的鲁棒性。为了测试PointNet++在非均匀采样密度下的扫描效果,作者合成了场景中的虚拟扫描,并根据这些数据对模型进行评估。由下图可见,PointNet++的分割效果明显优于PointNet。
    在这里插入图片描述

(3) 非欧氏度量空间中的点集分类

在非刚性形状分类中,一个好的分类器应该能够将下图中的(a)和(c)正确地分类为同一类别,即考虑到它们的姿势差异,这需要模型了解其内在结构。
在这里插入图片描述
在包含非刚性形状物体的SHREC15数据集上进行了测试,测试效果如下表,相比于DeepGM,PointNet++的分类效果也有着明显的优势。
在这里插入图片描述

五、结论

PointNet++,一个强大的神经网络体系结构,用于处理在度量空间中采样的点集。PointNet++递归地对输入点集进行嵌套划分,并且在学习与距离度量相关的层次特征方面非常有效。针对非均匀点采样问题,提出了两种新的集抽象层,根据局部点密度智能地聚集多尺度信息。这些贡献使得PointNet++能够在具有挑战性的三维点云基准上实现最先进的性能。


【相关文章:PointNet:深度学习在3D点云分类与分割上的应用】

最好的关系是互相成就,各位的「三连」就是【AI 菌】创作的最大动力,我们下期见!