前言
pointnet++是继pointnet 后的又一佳作。
- 当前存在的两个问题:
1 pointnet最大的问题,无法捕获点的局部上下文的信息,导致识别细粒度的能力受限。
2 点云还存在各个部分的密度不均的问题- 针对这两个问题,pointnet++的应对方式:
1【点云分区】:将点云划分为重叠的区域,然后送入神经网络中学习特征。该区域为被定义为欧式空间的球邻域,其参数为质心位置和半径大小。质心位置的确定,使用最远点采样法;半径大小的确定,随着特征越抽象,半径越大,从而获取更多点云的综合信息。
2【特征的提取】:MSG、MRG(具体后面介绍)。对点云不同尺度的进行了特征提取,前者计算成本高。在分割任务中,为了上采样学习参与预测的所有点的特征,采用基于距离的插值和跨层连接的分层传播策略
Abstract
- 【PointNet的问题】以前很少有研究点集深度学习的著作,PointNet[20]是这方面的先驱。然而,通过设计,PointNet无法捕获由度量空间点所产生的局部结构(无法捕获点的局部上下文),从而限制了其识别细粒度的能力以及对复杂场景的通用性,并且对全局点云的转换和规范化非常敏感。
- 【本文方案】在这项工作中,我们介绍了一种分层神经网络,它将PointNet循环地应用于输入点集的内嵌分组。通过利用度量空间距离,我们的网络能够 在不断增加的上下文范围内学习局部特征。进一步观察到点集通常以不同的密度采样,这导致在均匀密度上训练的网络的性能大大降低,我们提出了新的集学习层来自适应地组合来自多个尺度的特征。
- 【获得效果】实验表明,我们的pointNet++网络能够高效、稳健地学习深层点集特征。特别是,在具有挑战性的3D点云基准测试中获得了明显优于最新技术的结果。
1 Introduction
我们感兴趣的是分析几何点集,它是欧式空间中点的集合。一种特别重要的几何点集类型是3D扫描仪捕获的点云,例如,从适当装备的自动车辆捕获的点云。作为一个集合,这样的数据必须对其成员的排列保持不变(这里说的其实就是点云的无序性)。此外,距离度量定义了局部邻域,它们可能表现不同的属性。例如,不同位置的点的密度和其他属性可能不一致,在3D扫描中,密度变化可能来自透视效果、径向密度变化、运动等。
以前很少有研究点集深度学习的著作。PointNet[20]是一项直接处理点集的开创性工作。PointNet的基本思想是学习每个点的空间编码,然后将所有单个点特征聚合为全局点云特征。根据其设计,PointNet不捕获由度量引起的局部结构。然而,利用局部结构已被证明是卷积结构成功的重要因素。CNN将在规则网格上定义的数据作为输入,能够沿着多分辨率层次结构以越来越大的比例逐步捕获特征。在较低水平,神经元的感受野较小,而在较高水平,神经元的感受野较大。沿着层次结构抽象局部信息的能力,允许更好地概括不可见的情况。
接下来的pointnet++操作,主要是针对两方面来完成网络的设计: 点云的分区、特征的提取。
【PointNet++的总体思想】
我们引入了一种称为PointNet++的分层神经网络,以分层方式处理在度量空间中采样的一组点。PointNet++的总体思想很简单:
- 【点云的分区】我们首先根据基础空间的距离度量将点集划分为重叠的局部区域。
- 【特征的提取】与CNN相似,我们从小区中提取局部特征,捕捉精细的几何结构;这些局部特征被进一步分组为更大的单元,并进行处理以生成更高级别的特征。重复这个过程,直到我们获得整个点集的特征。
【PointNet++的设计解决的两个问题】
如何生成点集的分区、如何通过局部特征学习器 提取点集或局部特征。
这两个问题是相互关联的,因为点集的划分必须产生跨分区的公共结构,以便可以共享局部特征学习者的权重,就像在卷积设置中一样。
- 【特征的提取】我们选择PointNet学习本地特征。正如在这项工作中所展示的,PointNet是一种有效的体系结构,用于处理无序的点集以进行语义特征提取。此外,该体系结构对输入数据损坏具有鲁棒性。作为一个基本构建块,PointNet将本地点或特征集抽象为更高级别的表示。然后,PointNet++在输入集的嵌套分区上 递归地使用PointNet。
- 【点云的分区】仍然存在的一个问题是如何生成点集的重叠分区。每个分区被定义为基础欧氏空间中的一个邻域球,其参数包括质心位置和大小。
- 【质心位置】为了均匀地覆盖整个集合,通过最远点采样(FPS)算法在输入点集中选择质心。与以固定步幅扫描空间的体积CNN相比,我们的局部感受野依赖于输入数据和度量,因此更高效。
- 【半径大小】确定合适的局部邻域球的尺度是一个更具挑战性的问题,由于区域特征会存在重叠或被遗忘的情况和输入点集的非均匀性。我们假设输入点集可能在不同区域具有可变密度,这在实际数据中非常常见,例如结构传感器扫描[18](见图1)。因此,我们的输入点集与CNN输入非常不同,CNN输入可以被视为在均匀恒定密度的规则网格上定义的数据。
在CNN中,与局部分区大小相对应的是内核的大小。[25]表明使用较小的kernels有助于提高CNN的能力。但这是由于图像是网格化的,每个区域是非常规整的。
但我们在点集数据上的实验却为这一规则提供了相反的证据。邻域球过小,采样不足,意味着可能看不到足够完整的局部特征。
本文的一个重要贡献是,PointNet++利用多尺度的邻域来实现健壮性和细节捕获。在训练过程中,借助随机输入丢失,网络学习自适应地对不同尺度下检测到的模式进行加权,并根据输入数据组合多尺度特征。实验表明,我们的PointNet++能够高效、稳健地处理点集。特别是,在具有挑战性的3D点云基准测试中获得了明显优于最新技术的结果。
2 Problem Statement
假设 X = ( M , d ) X=(M, d) X=(M,d)是一个离散度量空间,其度量继承自欧氏空间 R n \mathbb{R}^n Rn,其中 M ∈ R n M \in \mathbb{R}^n M∈Rn是点集,d是距离度量。
此外,欧氏空间中M的密度可能并非处处均匀。我们感兴趣的是学习集函数 f f f,它将 χ \chi χ 作为输入(以及每个点的附加特征),并生成语义兴趣重组信息 χ \chi χ。实际上,这样的 f f f 可以是将标签分配给 χ \chi χ 的分类函数,也可以是将逐点标签分配给M个点的分割函数。
3 Method
我们的工作可以看作是PointNet[20]的扩展,增加了层次结构。我们首先回顾PointNet(第3.1节),然后介绍具有层次结构的PointNet的基本扩展(第3.2节)。最后,我们提出了我们的PointNet++,它能够稳健地学习特性,即使在非均匀采样点集中(第3.3节)。
3.1 PointNet[20]综述:一种通用连续集函数逼近器
给定一个无序的点集 { x 1 , x 2 , … , x n } \{x_1, x_2, …, x_n\} {x1,x2,…,xn},其中 x i ∈ R d x_i \in \mathbb{R}^d xi∈Rd,可以定义一个集合函数 f : χ → R f:\chi→ \mathbb{R} f:χ→R将一组点映射到向量: f ( x 1 , x 2 , . . . , x n ) = γ ( M A X i = 1 , . . . , n { h ( x i ) } ) ( 1 ) f(x_1,x_2,...,x_n)= \gamma\left ( \underset{i=1,...,n}{MAX}\{h(x_i)\}\right ) \,\,\,\,\,\,\,\,(1) f(x1,x2,...,xn)=γ(i=1,...,nMAX{h(xi)})(1)其中 γ \gamma γ 和 h h h通常是多层感知器(MLP)网络。
等式1中的集合函数 f f f 对输入点置换是不变的,可以任意逼近任何连续集合函数[20]。请注意,h的响应可以解释为点的空间编码(有关详细信息,请参见[20])。
PointNet在一些基准测试中取得了令人印象深刻的性能。然而,它缺乏在不同尺度上捕获本地上下文的能力。在下一节中,我们将介绍一个分层特征学习框架来解决这个局限性。
3.2 分层学习点集特征
PointNet使用单个max pooling操作来聚合整个点集,在我们的新体系结构构建了点的分层分组,并沿分层结构逐步抽象出越来越大的局部区域。
图2:以二维欧式空间中的点为例,说明了我们的分层特征学习体系结构及其在集合分割和分类中的应用。此处显示了单比例点分组。有关密度自适应分组的详细信息,请参见图3。
我们的层次结构由许多抽象层次组成(图2)。在每一个层次上,对一组点进行处理和抽象,以生成一个包含较少元素的新集合。集合抽象层由三个关键层组成:
采样层从输入点选择一组点,定义局部区域的质心。
分组层通过查找质心周围的“相邻”点来构造局部区域集。
PointNet层使用mini-PointNet将局部区域模式编码为特征向量。
一个集合的抽象级别需要 N ∗ ( d + C ) N*(d+C) N∗(d+C) 矩阵作为输入,来自具有 d d d-dim坐标和 C C C-dim点特征的 N N N 个点。它输出一个子采样点集 N ′ N^{'} N′的矩阵 N ′ ∗ ( d + C ′ ) N^{'}*(d+C^{'}) N′∗(d+C′),具有 d d d-dim坐标和总结本地上下文的新 C ′ C^{'} C′-dim特征向量。我们接下来介绍集合抽象级别的层。
- 【采样层 Sample layer】 最远点采样
给定输入点 { x 1 , x 2 , … , x n } \{x_1, x_2,…,x_n\} {x1,x2,…,xn},我们使用迭代最远点采样(FPS)来选择点 { x i 1 , x i 2 , … , x i m } \{x_{i_1},x_{i_2},…,x_{i_m}\} {xi1,xi2,…,xim}的子集,使得 x i j x_{i_j} xij是集合 { x i 1 , x i 2 , … , x i j − 1 } \{x_{i_1},x_{i_2},…,x_{i_{j-1}}\} {xi1,xi2,…,xij−1}距离其余点的最远点(度量距离)。与随机抽样相比,在质心数相同的情况下,该方法对整个点集具有更好的覆盖率。与扫描向量空间不可知数据分布的CNN不同,我们的采样策略以数据依赖的方式生成感受野。- 【分组层 Grouping layer】 Ball query
输入:一个大小为 N ′ ∗ ( d + C ) N^{'}*(d+C) N′∗(d+C)的点集和一组大小为 N ′ ∗ d N^{'}*d N′∗d 的质心的坐标。
输出:一组大小为 N ′ ∗ K ∗ ( d + C ) N^{'}*K*(d+C) N′∗K∗(d+C)的点集,其中每组对应于一个局部区域,K是质心点邻域中的点数。请注意,K在不同的组中有所不同,但后续的pointnet层能够将灵活数量的点转换为固定长度的局部区域特征向量。
Ball query 查找到查询点半径范围内的所有点(在实现中设置了K的上限)。另一种范围查询是K最近邻(kNN)搜索,它查找固定数量的相邻点。与kNN相比,ball query的局部邻域保证了固定的区域比例,从而使局部区域特征在空间上更具通用性,这是需要局部模式识别(例如语义点标记)的任务的首选。- 【PointNet层】
输入:数据大小为 N ′ ∗ K ∗ ( d + C ) N^{'}*K*(d+C) N′∗K∗(d+C)的点集局部区域 N ′ N^{'} N′。
输出:每个局部区域由其质心和对质心邻域进行编码的局部特征提取。输出数据大小为 N ′ ∗ ( d + C ) N^{'}*(d+C) N′∗(d+C)。
局部区域中点的坐标首先转换为相对于质心点的局部帧: x i ( j ) = x i ( j ) − x ˇ ( j ) x_i^{(j)} = x_i^{(j)}- \check{x}^{(j)} xi(j)=xi(j)−xˇ(j),其中 i = 1 , 2 , … , K i=1,2,…,K i=1,2,…,K 和 j = 1 , 2 , … , d j=1,2,…,d j=1,2,…,d, x ˇ \check{x} xˇ是质心的坐标。我们使用PointNet[20],如第3.1节所述,作为本地模式学习的基本构建块。通过使用相对坐标和点特征,我们可以捕捉局部区域中的点对点关系。
3.3 非均匀采样密度下的鲁棒特征学习
如前所述,点集在不同区域的密度不均匀是很常见的。这种非均匀性给点集特征学习带来了重大挑战。在密集数据中学习的特征可能不会推广到稀疏采样区域。因此,为稀疏点云训练的模型可能无法识别细粒度的局部结构。
– 理想情况下,我们希望尽可能近距离地检查点集,以捕获密集采样区域中的最精细细节。但是,不允许在低密度区域进行此类近距离检查,因为取样不足可能会破坏局部模式。
– 在这种情况下,我们应该在更大的范围内寻找更大的尺度模式。为了实现这一目标,我们提出了密度自适应点网层(图3),
当输入采样密度改变时,该层学习组合来自不同尺度区域的特征。我们将具有密度自适应点网层的分层网络称为PointNet++。
每个抽象层包含单个尺度的分组和特征提取。在PointNet++中,每个抽象层多尺度提取的局部信息,并根据局部点密度智能地组合它们。对于局部区域的分组数据合并不同尺度的特征,我们提出了两种类型的密度自适应层,如下所示。
- 【多尺度分组(MSG)】
如图3(a)所示,捕获多尺度模式的一种简单但有效的方法,是使用具有不同尺度的分组层,然后通过pointnet提取每个尺度的特征。将不同比例的特征连接起来以形成多比例特征。
我们训练网络学习一种优化策略,以结合多尺度特征。这是以随机概率随机删除输入点来实现的,我们称之为随机输入删除。具体来说,对于每个训练点集,我们选择从[0,p]中均匀抽样的dropout,其中 p ≤ 1 p\leq 1 p≤1。对于每一个点,我们随机地以概率丢弃的可能为 θ \theta θ. 实际上,我们设置 p=0.95以避免生成空点集。在此过程中,我们为网络提供了各种稀疏性的训练集(由 θ \theta θ) 在测试过程中,我们保留所有可用点。- 【多分辨率分组(MRG)】
上面的MSG方法计算成本很高,因为它在大规模邻域中为每个质心点运行本地pointnet。特别是,由于质心点的数量在最低层通常相当大,因此时间成本非常大。
在这里,我们提出了一种替代方法,避免了这种昂贵的计算,但仍然保留了根据点的分布特性自适应聚合信息的能力。在图3(b)中,某一层 L i L_i Li的区域的特征是两个向量的串联。
- 一个向量(图中左图)是通过使用集合抽象层从较低层 L i − 1 L_{i-1} Li−1 汇总每个子区域的特征而获得的。
另一个向量(右)是通过使用单个点网直接处理局部区域中的所有原始点而获得的特征。- 当局部区域的密度较低时,第一向量可能不如第二向量可靠,因为计算第一向量时的子区域包含更稀疏的点,并且遭受更多的采样不足。在这种情况下,第二个向量的优势更高。
另一方面,当局部区域的密度较高时,第一个向量提供更精细细节的信息,因为它具有在较低级别以较高分辨率递归检查的能力。
与MSG相比,该方法在计算效率上更高,因为我们避免了在大规模邻域的最低级别上进行特征提取。
3.4 分割任务中 点特征传播
在集合抽象层,对原始点集进行二次抽样。然而,在语义点标注等集合分割任务中,我们需要获取所有原始点的点特征。
- 方案1:是在所有集合抽象级别中始终将所有点作为质心进行采样,但这会导致较高的计算成本。
- 方案2:将特征从子采样点传播到原始点。
我们采用基于距离的插值和跨层连接的分层传播策略(如图2所示)。在特征传播级别,我们将点特征从 N l ∗ ( d + C ) N_l*(d+C) Nl∗(d+C)点传播到 N l − 1 N_{l-1} Nl−1点,其中 N l − 1 N_{l-1} Nl−1和 N l N_{l} Nl(使用 N l ≤ N l − 1 N_l \leq N_{l-1} Nl≤Nl−1)是集合抽象层 l l l 的输入和输出的点集合大小。我们通过在 N l − 1 N_{l-1} Nl−1点的坐标处插值 N l N_l Nl 点的特征值 f f f来实现特征传播。在众多插值选择中,我们使用基于k个最近邻的反向距离加权平均(如等式2所示,默认情况下,我们使用p=2,k=3)。然后将 N l − 1 N_{l-1} Nl−1 点上的插值特征与集合抽象层上的跳过链接点特征连接起来。然后将连接的特征通过一个“单位点网”,这类似于CNN中的逐点卷积。使用几个共享的完全连接和ReLU层来更新每个点的特征向量。重复该过程,直到将特征传播到原始点集。
4 Experiments
【数据集】
我们对四个数据集进行评估,从2D对象【MNIST[11]】、3D对象【ModelNet40[31]刚性对象】、【SHREC15[12]非刚性对象】、真实3D场景【ScanNet[5]】。
目标分类通过 准确度 进行评估。语义场景标签 根据[5]的 平均体素分类精度 进行评估。 我们在下面列出了每个数据集的实验设置:
- MNIST:具有60k训练和10k测试样本的手写数字图像。
- ModelNet40:40个类别的CAD模型(主要是人造的)。我们使用官方的分割,9843个形状用于训练,2468个形状用于测试。
- SHREC15:50个类别的1200个形状。每个类别包含24个形状,这些形状大多是具有各种姿势的有机形状,如马、猫等。我们使用五重交叉验证来获取该数据集的分类精度。
- ScanNet:1513扫描和重建的室内场景。我们按照[5]中的实验设置,使用1201个场景进行训练,使用312个场景进行测试。
4.1 欧式空间中的点集分类
我们对从2D(MNIST)和3D(ModleNet40)欧式空间采样的点云进行分类,评估我们的网络。
- MNIST图像将转换为数字像素位置的二维点云。三维点云从ModelNet40形状的网格表面采样。
- 默认情况下,MNIST使用512点,ModelNet40使用1024点。
- 在表2中的最后一行(我们的法线),我们使用面法线作为额外的点特征,其中我们还使用更多的点(N=5000)来进一步提高性能。
- 所有点集均标准化为零均值,且在一个单位球内。我们使用三层完全连接的三层分层网络
【result】
在表1和表2中,我们将我们的方法与一组具有代表性的先前最新技术进行了比较。请注意,表2中的PointNet(vanilla)是[20]中不使用转换网络的版本,这相当于我们只有一个级别的分层网络。
首先,我们的分层学习体系结构实现了比非分层PointNet更好的性能[20]。
- 在MNIST中,我们看到从PointNet(vanilla)和PointNet到我们的方法,错误率分别降低了60.8%和34.6%。
- 在MNIST中,我们的方法(基于2D点集)实现了接近网络CNN中网络的精度。
- 在ModelNet40分类中,我们还看到,使用相同的输入数据大小(1024个点)和特征(仅坐标),我们的分类比PointNet强得多。其次,我们观察到,基于点集的方法甚至可以获得与成熟图像CNN更好或类似的性能。
- 在ModelNet40中,我们的正常信息显著优于先前最先进的方法MVCNN[26]。
【对采样密度变化的鲁棒性】
直接从真实世界捕获的传感器数据通常存在严重的不规则采样问题(图1)。我们的方法选择多尺度的点邻域,并通过适当加权来平衡描述性和鲁棒性。
我们在测试期间随机丢弃点(见图4),以验证我们的网络对非均匀和稀疏数据的鲁棒性。
- 在图4右侧,我们看到MSG+DP(训练期间随机输入丢失的多尺度分组)和MRG+DP(训练期间随机输入丢失的多分辨率分组)对采样密度变化非常鲁棒。
- MSG+DP性能从1024个测试点下降到256个测试点,下降幅度不到1%。此外,与备选方案相比,它在几乎所有采样密度上都达到了最佳性能。
- PointNet vanilla[20]在密度变化下相当稳健,因为它关注全局抽象而不是细节。与我们的方法相比,细节的丢失也使其功能减弱。
- SSG(单一尺度)无法推广到稀疏采样密度,而SSG+DP通过在训练时间内随机丢弃点来修正该问题。
图4:左:具有随机点丢失的点云。右:曲线显示我们的密度自适应策略在处理非均匀密度方面的优势。DP指培训期间的随机输入辍学;否则,训练是在均匀密集点上进行的。详情见第3.3节。
4.2 语义场景标注中的点集分割
【测试方案】
- 为了验证我们的方法适用于大规模点云分析,我们还对语义场景标记任务进行了评估。目标是预测室内扫描点的语义对象标签。
- [5] 在体素化扫描上使用完全卷积神经网络。它们完全依赖于扫描几何体而不是RGB信息,并以每体素为基础报告精度。
- 为了进行公平的比较,我们在所有实验中删除了RGB信息,并将点云标签预测转换为体素标签[5]。我们还与[20]进行了比较。
【测试结果】
图5(蓝色条)以每个体素为基础报告精度。 我们的方法大大优于所有的基线方法。
- 与[5]相比,在体素化扫描上学习,我们直接在点云上学习以 避免额外的量化误差,并进行数据相关采样以允许更有效的学习。
- 与[20]相比,我们的方法引入了分层特征学习,并捕获了不同尺度下的几何特征。这对于理解多个级别的场景和标记不同大小的对象非常重要。我们将示例场景标记结果显示在图6中
【鲁棒性在采样密度下的变化】
为了测试我们训练的模型如何在非均匀采样密度的扫描上执行,我们合成了类似于图1的扫描网场景的虚拟扫描,并根据这些数据评估我们的网络。我们在补充材料中向读者介绍如何生成虚拟扫描。我们在三种设置(SSG、MSG+DP、MRG+DP)下评估我们的框架,并与基线方法进行比较[20]。性能比较如图5所示(黄色条)。
- SSG:我们看到,由于采样密度从均匀点云转移到虚拟扫描场景,SSG性能大大下降。
- MRG:另一方面,MRG网络对采样密度变化更为鲁棒,因为当采样稀疏时,它能够自动切换到描述更粗粒度的特征。
- MSG:尽管训练数据(均匀点随机dropout)和密度不均匀的扫描数据之间存在领域差距,但我们的MSG网络仅受到轻微影响,在比较中,在各种方法中,其精度最高。
这些证明了我们的密度自适应层设计的有效性。
4.3 非欧式度量空间中的点集分类
(此节可略)
【非欧式空间方法的普遍性】
在非刚性形状分类(图7)中,一个好的分类器应该能够将图7中的 (a)和 ©正确地分类为同一类别,即使它们的姿势不同,这需要了解内在结构。SHREC15中的形状是嵌入在三维空间中的二维表面。沿表面的测地线距离自然会产生一个度量空间。我们通过实验证明,在这个度量空间中采用PointNet++是捕获底层点集内在结构的有效方法。
- 对于[12]中的每个形状,我们首先由成对测地距离构造度量空间。我们按照[23]获得了一个模拟测地距离的嵌入度量。接下来,我们在这个度量空间中提取内在的点特征,包括WKS[1],HKS[27]和多尺度高斯曲率[16]。我们使用这些特征作为输入,然后根据基础度量空间对点进行采样和分组。通过这种方式,我们的网络学习捕捉不受形状特定姿势影响的多尺度内在结构。
- 其他设计选择包括使用XYZ坐标作为点特征或使用欧式空间 R 3 R^3 R3作为基础度量空间。我们在下面展示这些都不是最佳选择
【Results】
我们将我们的方法和表3中先前的最新方法[14]进行了比较。
- [14] 提取测地矩作为形状特征,并使用堆叠稀疏自动编码器来消化这些特征以预测形状类别。
- 我们使用非欧式度量空间和内在特征的方法在所有设置中都实现了最佳性能,并且大大优于[14]。
- 比较我们方法的第一个和第二个设置,我们发现内在特征对于非刚性形状分类非常重要。XYZ特征无法揭示固有结构,并且受姿势变化的影响很大。
- 比较我们方法的第二个和第三个设置,我们发现使用测地邻域比使用欧式邻域更有利。欧式邻域可能包括远离表面的点,并且当形状提供非刚性变形时,该邻域可能会发生显著变化。这给有效的权重分配带来了困难,因为局部结构可能变得组合复杂。另一方面,表面上的测地线邻域解决了这个问题,提高了学习效率。
4.4 特征可视化
图8:从第一层内核学习的3D点云模式。该模型针对ModelNet40形状分类进行训练(128个核中随机选择20个)。颜色表示点深度(红色表示近,蓝色表示远)。
在图8中,我们可视化了我们的分层网络的第一级内核所学习到的内容。我们在空间中创建了一个体素网格,并聚集了局部点集,这些点集在网格单元中最能激活某些神经元(使用了最高100个示例)。高投票率的网格单元被保留并转换回3D点云,它代表神经元识别的模式。由于模型是在主要由家具组成的ModelNet40上训练的,因此我们可以在可视化中看到平面、双平面、线、角等结构。
5. Related Work
略
6. Conclusion
略