论文阅读:PointNet++: Deep Hierarchical Feature Learning onPoint Sets in a Metric Space

原文连接:https://arxiv.org/pdf/1706.02413.pdf

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

来源:NISP 2017

Pointnet 的改进版本,(1)利用层次化信息获取局部信息(2)自适应密度的特征提取方法

0、摘要

        很少有以前的工作研究点集的深度学习。 PointNet [20] 是这个方向的先驱。然而,根据设计,PointNet 不会捕获由所在的度量空间点引起的局部结构(缺乏局部信息),从而限制了它识别细粒度模式的能力和对复杂场景的泛化能力。在这项工作中,我们引入了一个分层神经网络,它递归地将 PointNet 应用于输入点集的嵌套划分。通过利用度量空间距离,我们的网络能够随着上下文尺度的增加而学习局部特征。通过进一步观察点集通常以不同的密度进行采样,这会导致在均匀密度下训练的网络的性能大大降低,我们提出了新的集合学习层来自适应地组合来自多个尺度的特征。实验表明,我们名为 PointNet++ 的网络能够高效、稳健地学习深度点集特征。特别是,在具有挑战性的 3D 点云基准测试中获得了明显优于现有技术的结果。

1、引言

        我们有兴趣分析几何点集,这些点集是欧几里得空间中的点的集合。一种特别重要的几何点集是3D扫描仪捕获的点云,例如,从配备适当的自主车辆捕获的点云。作为一个集合,这样的数据必须不变于其成员的排列。此外,距离度量还定义了可能显示不同属性的局部邻域。例如,点的密度和其他属性可能在不同的位置上并不统一-在3D扫描中,密度可变性可能来自透视效果、径向密度变化、运动等。

        很少有以前的工作研究点集的深度学习。 PointNet [20] 是一项直接处理点集的开创性工作。 PointNet 的基本思想是学习每个点的空间编码,然后将所有单个点特征聚合为全局点云签名。根据其设计,PointNet 不会捕获由度量引起的局部结构。然而,事实证明,利用局部结构对于卷积架构的成功非常重要。 CNN 将在规则网格上定义的数据作为输入,并且能够沿着多分辨率层次结构以越来越大的尺度逐步捕获特征。在较低级别的神经元具有较小的感受野,而在较高级别它们具有较大的感受野。沿层次结构抽象局部模式的能力允许更好地泛化到未见过的情况。

        我们引入了一个名为 PointNet++ 的分层神经网络,以分层方式处理在度量空间中采样的一组点。 PointNet++ 的总体思路很简单。我们首先通过底层空间的距离度量将点集划分为重叠的局部区域。与 CNN 类似,我们从小邻域中提取捕获精细几何结构的局部特征;这些局部特征被进一步分组为更大的单元并被处理以产生更高级别的特征。重复此过程,直到我们获得整个点集的特征。

        PointNet++的设计必须解决两个问题:如何生成点集的分区,以及如何通过本地特征学习器抽象一组点或本地特征。 这两个问题是相关的,因为点集的分区必须在分区产生共同的结构,以便可以共享局部特征学习者的权重,就像卷积设置一样。 我们选择本地功能学习者为 PointNet。 正如该作品所证明的那样,PointNet是一个有效的架构,用于处理语义特征提取的无序的点集。 此外,这种架构对于输入数据损坏非常强大。 作为一个基本构建模块,PointNet将局部点或特征集合抽象到更高层次的表示中。 在这种观点中,PointNet++将PointNet递归应用于输入集的嵌套分区。

        仍然存在的一个问题是如何生成点集的重叠分区。每个分区被定义为底层欧氏空间中的一个邻域球,其参数包括质心位置和尺度。为了均匀地覆盖整个集合,质心是通过最远点采样 (FPS) 算法在输入点集中选择的。与以固定步幅扫描空间的体积 CNN 相比,我们的局部感受野依赖于输入数据和度量,因此更加高效和有效。

        然而,由于特征尺度的纠缠和输入点集的不均匀性,决定局部邻域球的适当尺度是一个更具挑战性但更有趣的问题。我们假设输入点集在不同区域可能具有可变密度,这在真实数据中很常见,例如结构传感器扫描 [18](见图 1)。因此,我们的输入点集与 CNN 输入非常不同,CNN 输入可以看作是在具有均匀恒定密度的规则网格上定义的数据。在 CNN 中,与局部分区尺度相对应的是内核的大小。 [25] 表明使用较小的内核有助于提高 CNN 的能力。然而,我们对点集数据的实验为这条规则提供了反证。由于采样不足,小邻域可能包含太少的点,这可能不足以让 PointNets 稳健地捕获模式。

        我们论文的一个重要贡献是 PointNet++ 利用多个尺度的邻域来实现鲁棒性和细节捕获。借助训练期间的随机输入丢失,网络学习自适应地加权在不同尺度检测到的模式,并根据输入数据组合多尺度特征。实验表明,我们的 PointNet++ 能够高效、稳健地处理点集。特别是,在具有挑战性的 3D 点云基准测试中获得了明显优于现有技术的结果。

2、问题描述

        假设 X = (M, d) 是一个离散度量空间,其度量继承自欧氏空间 Rn,其中 M ⊆ Rn 是点集,d 是距离度量。此外,周围欧几里德空间中 M 的密度可能并非处处一致。我们感兴趣的是学习将 X 作为输入(连同每个点的附加特征)并产生对 X 进行语义兴趣重新分级的信息的集合函数 f。在实践中,这样的 f 可以是将标签分配给 X 或 a 的分类函数将每个点标签分配给 M 的每个成员的分割函数。

3 方法

        我们的工作可以看作是 PointNet [20] 的扩展,增加了层次结构。我们首先回顾 PointNet(第 3.1 节),然后介绍具有层次结构的 PointNet 的基本扩展(第 3.2 节)。最后,我们提出了 PointNet++,即使在非均匀采样的点集中也能够稳健地学习特征(第 3.3 节)。

3.1 PointNet回顾[20]:一种通用的连续集函数逼近器

        给定 xi ∈ Rd 的无序点集 {x1, x2, ..., xn} ,可以定义一个集合函数 f : X → R 将一组点映射到一个向量:

        其中 γ 和 h 通常是多层感知器 (MLP) 网络。方程式中的集合函数 f对于输入点排列是不变的,可以任意逼近任何连续集函数 [20]。请注意,h 的响应可以解释为一个点的空间编码(详见 [20])。

        PointNet 在一些基准测试中取得了令人印象深刻的性能。然而,它缺乏捕捉不同尺度的本地环境的能力。我们将在下一节中引入分层特征学习框架来解决该限制。

3.2 层次点集特征学习

        虽然PointNet使用单个最大池化操作来聚合整个点集,但我们的新架构构构建了点层次分组,并沿着层次结构逐渐抽象化更大和更大的局部区域。

        我们的层次结构由许多集合抽象级别组成(图 2)。在每个级别,处理和抽象一组点以生成具有更少元素的新集合。set abstraction level由三个关键层组成:Sampling层、Grouping层和PointNet层。采样层从输入点中选择一组点,这些点定义了局部区域的质心。分组层然后通过找到质心周围的“相邻”点来构造局部区域集。 PointNet 层使用 mini-PointNet 将局部区域模式编码为特征向量。

        一个 set abstraction level将 N × (d + C) 矩阵作为输入,该矩阵来自具有 d-dim 坐标和 C-dim 点特征的 N 个点。它输出一个 N' × (d +C') 矩阵,其中 N'子采样点具有 d-dim 坐标和新的 C'-dim 特征向量总结局部上下文。我们在以下段落中介绍了set abstraction level

        Sampling layer。给定输入点 {x1, x2, ..., xn},我们使用迭代最远点采样 (FPS) 来选择点的子集 {xi1 , xi2 , ..., xim},使得 xij 是最远的点(以公制距离)从集合 {xi1 , xi2 , ..., xij−1} 关于其余点。与随机采样相比,在质心数相同的情况下,它对整个点集的覆盖更好。与扫描与数据分布无关的向量空间的 CNN 相比,我们的采样策略以数据相关的方式生成感受域。(采样是根据数据分布来的,不是和cnn一样是固定的)

        Grouping layer.。该层的输入是一个大小为 N × (d + C) 的点集和一组大小为 N' × d 的质心的坐标。输出是大小为 N' ×K × (d + C) 的点集组,其中每组对应一个局部区域,K 是质心点附近的点数。请注意,K 因组而异,但后续的 PointNet 层能够将灵活数量的点转换为固定长度的局部区域特征向量。

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

        球查询会找到位于查询点半径范围内的所有点(在实现中设置K的上限)。另一种范围查询是K最近邻(kNN)搜索,它查找固定数量的相邻点。与kNN相比,球查询的局部邻域保证了固定区域的比例,从而使局部区域特征在空间上更加通用,这对于需要局部模式识别(例如语义点标记)的任务是首选。

        PointNet layer。在该层中,输入是数据大小为 N’×K×(d+C) 的点的 N‘ 局部区域。输出中的每个局部区域都由其质心和编码质心邻域的局部特征抽象而成。输出数据大小为N’×(d+C‘)。

        局部区域中点的坐标首先转换为相对于质心点的局部坐标系: x(j) i = x(j) i − ˆx(j) for i = 1, 2, ...,K 和j = 1, 2, ..., d 其中 ^x 是质心的坐标。我们使用 PointNet [20],如第 1 节所述。 3.1 作为局部模式学习的基本构建块。通过将相对坐标与点特征一起使用,我们可以捕获局部区域中的点对点关系。

(大致概括下,整体分为好几个set abstraction,每个set abstraction包含两部分,第一部分Sampling layer和Grouping layer就是可以理解为采样和采样这个点附近的点,第二部分PointNet layer就是原来的pointnet用来提取特征)

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

        如前所述,点集在不同区域的密度不均匀是很常见的。这种不均匀性给点集特征学习带来了重大挑战。在密集数据中学习到的特征可能无法推广到稀疏采样区域。因此,为稀疏点云训练的模型可能无法识别细粒度的局部结构。(大多数激光雷达点云都是近密远疏)

      理想情况下,我们希望尽可能接近地检查点集,以捕获密集采样区域中的最精细细节。但是,在低密度区域禁止进行这种仔细检查,因为局部模式可能会因采样不足而损坏。在这种情况下,我们应该在附近寻找更大尺度的模式。为了实现这一目标,我们提出了density adaptive PointNet layers密度自适应 PointNet 层(图 3),当输入采样密度发生变化时,它可以学习组合来自不同尺度区域的特征。我们将具有密度自适应 PointNet 层的分层网络称为 PointNet++。  

        在 3.2,每个抽象层次包含单个尺度的分组和特征提取。在 PointNet++ 中,每个抽象层提取多个尺度的局部模式,并根据局部点密度将它们智能组合。在对局部区域进行分组和组合不同尺度的特征方面,我们提出了两种类型的密度自适应层,如下所列。

3.3.1Multi-scale grouping (MSG).多尺度分组

        如图3(a)所示,捕获多尺度模式的简单而有效的方法是应用具有不同尺度的grouping layers,然后根据PointNets来提取每个尺度的特征。 不同尺度的特征被连接,形成多尺度的特征。

       我们训练网络,学习优化策略,结合多尺度特征。 这是通过随机放弃输入点来完成的,每个实例都具有随机概率,我们称之为随机输入退出。 具体来说,对于每个训练点集,我们选择一个辍学率 θ从 [0, p] 中均匀抽样 p ≤ 1。 对于每一点,我们随机地放弃一个概率 θ 的点。 在实践中,我们设置p = 0.95,以避免产生空点集。 在这样做的过程中,我们将网络呈现出各种稀疏(由 θ 诱导)和不同均匀性(由辍学随机引导)的训练集。 在测试中,我们保留所有可用的点。

3.3.2  Multi-resolution grouping (MRG).多分辨率分组

        上面的MSG方法是计算昂贵的,因为它在每个中心点的大规模社区运行本地PointNet。 特别是,由于中心点数通常在最低水平上相当大,因此时间成本很高。

        在这里,我们提出了一种替代方法,其避免这种昂贵的计算,但仍然保留根据点的分布性质自适应地聚合信息的能力。 在图3 (b)中,某一水平Li的区域的特征是两个向量的串联。 通过使用设定的抽象水平从下层Li − 1总结每个次区域的特征来获得一个向量(图中左侧)。 另一个向量(右)是通过使用单个PointNet直接处理局部区域中的所有原始点而获得的特征。

        当局部区域的密度较低时,第一个向量可能不如第二个向量可靠,因为计算第一个向量的子区域包含更稀疏的点并且更容易受到采样不足的影响。在这种情况下,第二个向量的权重应该更高。另一方面,当局部区域的密度高时,第一个向量提供更精细的信息,因为它具有在较低级别递归地以较高分辨率进行检查的能力。

        与 MSG 相比,这种方法在计算上更有效,因为我们避免了在最低级别的大规模邻域中进行特征提取。

3.4 集合分割的点特征传播

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

        我们采用基于距离的插值和跨级别跳跃链接的分层传播策略(如图 2 所示)。在特征传播层中,我们将点特征从 Nl × (d+C) 点传播到 Nl−1 个点,其中 Nl−1 和 Nl(Nl ≤ Nl−1)是集抽象层输入和输出的点集大小湖。我们通过在 Nl-1 个点的坐标处插入 Nl 个点的特征值 f 来实现特征传播。在插值的众多选择中,我们使用基于 k 个最近邻居的反距离加权平均(如等式 2 中,默认情况下我们使用 p = 2,k = 3)。然后将 Nl−1 点上的插值特征与来自集合抽象级别的跳过链接点特征连接起来。然后将连接的特征通过“单位点网”传递,这类似于 CNN 中的逐一卷积。应用一些共享的全连接层和 ReLU 层来更新每个点的特征向量。重复该过程,直到我们将特征传播到原始点集。

 (这里类似encode-decode结构,同时还有skip的操作,类似于u-net的跳跃连接,就是上采样的同时不丢失局部信息)

猜你喜欢

转载自blog.csdn.net/qq_53086461/article/details/128321150