PointNet Deep Learning on Point Sets for 3D Classification and Segmentation

PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

Abstract

由于点云数据的无序性,大多数研究者把它转化为规则的 3D 体素网格或者转化为图像数据集来处理。这样会不必要的增大数据集并且产生一些(像素点失真)问题。本文作者设计了一个新的网络,直接处理点云数据。

1、Introduction

传统的卷积结构为了权值共享、进行卷积操作,要求高度规则的输入数据形式,就像image和3D体素。而点云数据是点的无序集合,无法像处理2D数据那样直接处理。文章提到了在处理点云数据时,主要有三个问题:输入的无序性、点与点之间的相关性、旋转不变性。

本文直接使用点云数据,点云数据是相对简单、统一的结构,可以避免网格组合的不规则性和复杂性,因此更容易学习。针对点云数据的无序性,需要在网络中使用对称函数。

本文提出的 PointNet 是直接以点云数据作为输入,输出每个输入所属的类别(classification)或者输入中每个点的标签(segmentation)。

文章所述方法的关键在于对称函数——max-pooling的使用。网络可以有效的学习一组优化函数,从而选择感兴趣或有用的特征,最终的全连接层将这些学到的有用特征聚合到整个形状的全局描述符中。(换到后面)

文章通过理论分析与实验验证表明,PointNet 可以近似任何连续函数。并且表明网络通过学习一组稀疏的关键点来概括输入点云,这些关键点可视化出来的结果大致对应于对象的骨架。同时结合理论分析,解释了 PointNet 能够对输入点的扰动、异常值、缺失数据有较高的鲁棒性。

作者在许多基准数据集上,对于分类、区域分割、语义分割等任务,将 PointNet 与基于多视图和体积表示的最先进方法进行了比较。表明,在统一的架构下,PointNet 不仅速度更快,而且还能够具有与当前最优模型相当甚至更好的性能。

文章的主要贡献有:

  • 设计了一个全新的深度神经网络架构,适合于无序的 3D 点云数据
  • 展示了这样一个网络该如何训练,从而应用于 3D 点云数据的分类、形状分割和场景语义分析任务
  • 对所提出方法的稳定性和效率进行了实验和理论分析
  • 可视化出了网络中神经元计算出的 3D 特征,进行了直观的解释

2、Related Work

  • Point Cloud Features

点云的大多数现有特征都是根据特定的任务手工制作的,点特征通常编码点的某些统计特性,并且被设计为对某些变换具有不变性,它们也可以归类为本地特征和全局特征。 对于特定任务,找到最佳特征组合并非易事。

  • Deep Learning on 3D Data

    3D 数据有多种流行的表示,导致了多种不同的学习方法。

    Volumetric CNNs 是最早在体素上应用卷积神经网络的。但是,由于数据稀疏性和计算成本,体素表示受其分辨率的限制。

    FPNN 和 Vote3D 提出了处理稀疏数据的方法,但是他们的操作依然是基于稀疏的数据,处理非常大的点云数据依然是很大的挑战。

    Multiview CNNs 尝试将 3D 点云转换为 2D 图像,从而应用 2D 卷积来进行分类。虽然通过精心设计的网络,这种方法在分类和检索任务中取得了突出的性能。但是,更重要的是将他们扩展到其他场景如 3D 点云分类等任务中。

    Spectral CNNs 等一些最新的方法使用了光谱 CNN ,但是这些方法被限制在有机物体之类的流行网格上,而如何将他们扩展到家具之类的非等距形状上,目前还并不明显。

    Feature-based DNNs首先将3D数据转化为一个向量,通过提取传统的形状特征,然后使用全连接层对其进行分类,这一方法会受到所提取特征的表示能力的约束。

  • Deep Learning on Unordered Sets

    从数据结构的角度来说,点云数据就是向量的无序集合(一组无序的向量集合)。然而之前深度学习的许多工作仅专注于规则的数据表示(如序列、图像),深度学习在点云数据上没有太多相关工作。最近的一项工作来自于 Oriol Vinyals 等人,他们使用了一个带注意力机制的网络来处理无序的输入数据,但是他们的工作重点是 NLP 任务。

3、Problem Statement

一个点云由 3D 点的集合表示,每个 3D 点由(x,y,z)坐标加上其他如颜色等特征通道组成。一般如果没有特殊说明,本文仅使用(x,y,z)坐标来表示。

对于分类任务,输入点云直接从真实形状或者预分割的场景中采集,输出对应于k个类别的k个值。

对于语义分割任务,输入可以是用于区域分割的单个对象,也可以是 3D 场景的子块。模型输出 n*m 的分数,对应于n个点的m个语义子类。

4、Deep Learning on Point Sets

4.1、Properties of Point Sets

点云数据是一组无序的向量集合,有已下三个性质:

  • 无序性

    从数据结构的角度,点云数据不像图像中的像素序列,它是点的无序集合(一组无序的向量集合)。如果只考虑点的坐标,那么点云数据就是一组n*3的点的集合。对这n个点以不同顺序读入,理应得到相同的结果(分类抑或是分割任务)。因此,一个处理点云数据的网络需要对点云数据的N!种排列具有不变性。

    在本文中,作者使用最大池化来处理无序性问题。作者证明,当数据特征维度足够大时,最大池化可以近似论文中所述的任意对称函数f。在此基础上还论述了模型的稳定性,即网络学到的是概括形状的关键点集,即点云的骨架,因此可以robust to small pertubation of input points。

  • 点之间的相互作用

    点来自于一个具有距离度量的空间,每个点都不是孤立的,所以邻近点的子集是有意义的。因此,模型需要能够捕获邻近点中的局部结构,以及局部结构之间的相互作用。这一问题相比较分割任务,在分类任务中相对不是那么重要,因为分类问题中只要对提取出的全局特征使用MLP或SVM等分类器,就可以得到分类结果。作者针对分割问题的处理方法是,将提取出的全局特征再与点特征结合,得到n*(64+1024)的特征矩阵,在此基础上重新提取每个点的特征,得到包含局部特征以及全局特征的点特征(信息)。

  • 转换不变性

    作为一个集合对象,学习到的对点集的表示应该对某些变换具有不变性。比如,对所有点集进行旋转和平移不应该改变点云的类别或者是对点的分割。

    作者的做法是引入一个旋转矩阵(T-net,Transform-net),对原始输入点矩阵进行仿射变换。

    输入的形式很容易应用刚性或仿射变换,所以每个点的转换都是独立的。因此,作者试图在PointNet处理数据之前应用一个转换网络(transform network),这个网络是从数据中学习来的,以期进一步提升结果。

4.2、PointNet Architecture

PointNet Deep Learning on Point Sets for 3D Classification and Segmentation

网络的流程大体是这样的:对于输入的点云数据,先通过 T-net (3 * 3)进行仿射变换,通过MLP(64,64)进行特征提取,再接入另一个 T-net(64 * 64),之后通过MLP(64,128,1024),再进入最大池化层、MLP(512,256,K),最后通过softmax函数得到结果。

其中,MLP后括号中的数字表示卷积核数量,除第一层卷积的卷积核大小为1 * 3,其他卷积层都使用1 * 1的卷积核来代替全连接层。k表示具体的分类任务中的类别个数。

用于分类和分割的网络共享很大部分的结构,模型中包含三个关键的模块:

  • max-pooling 层作为对称函数,处理无序输入问题,从所有点中汇集信息

    目前针对输入数据的无序性,主要有三种策略,将输入看作序列来训练一个RNN,通过各种排列来做数据增强、使用一个简单的对称函数聚合来自每个点的信息。在这里,对称函数的意思是,输出的向量对于n个输入向量的顺序具有不变性。

    排序方法的问题在于:虽然听起来简单,但是在高维空间中实际上并不存在一个稳定的顺序。假设存在一个从高维空间到1维实线的映射。那么要求对排列顺序稳定,相当于要求这个映射在降低维度的同时保持空间中的相似性,这在一般情况下是无法实现的。因此,排序无法完全解决无序输入问题,并且由于无序问题的存在,网络难以学习一个从输入到输出的持续的映射。经验表明,尽管将点集排序后应用一个MLP层要比直接处理未排序的输入表现要好一点,但依然不尽人意。

    使用RNN的想法将点集视为序列信息,将序列的全排列作为输入,期望将序列的所有排列顺序都学习到,以期能够对新的输入的顺序具有不变性。虽然RNN对长度较短的序列的输入顺序具有较好的鲁棒性,但是很难处理成千上万的输入元素,这对于点云数据集来说却是很常见的。作者通过实验表明基于RNN的方法表现不如本文所提出的网络。

    本文提出的方法是在点集上近似一个通用函数,通过在经过变换的元素上应用一个对称函数

    PointNet Deep Learning on Point Sets for 3D Classification and Segmentation
    模型比较简单,使用MLP来近似h函数(其中MLP使用1*1的卷积来实现),使用单变量函数和最大池化函数的组合来近似g函数,实验表明此法效果不错。通过h的集合,我们可以学习一些f来捕获集合的不同属性。虽然模型比较简单,但是具有有趣的特性,可以在一些不同的应用中实现强大的性能。

  • 一个本地和全局的信息组合结构

    对于分类任务,上述得到的输出是一个向量,可以训练一个SVM或者MLP分类器,作用于全局特征进行分类。但是点云分割需要组合局部和全局特征,本文使用了一个简单又高效的方法。

    计算出全局点云特征向量后,通过将全局特征与每个点连接起来,将全局特征再反馈到网络中去。然后对组合后的特征进行特征抽取,这时候得到的每个点就同时带有局部和全局信息。通过这种修改,网络能够预测依赖于局部几何和全局语义的点量。 例如,可以准确地预测每点法线,验证网络是否能够汇总点的本地邻域的信息。

  • 两个联合对齐网络,对齐输入点集和特征点集

    输入点云的语义标签需要在经过几何变换后依然保持不变。因此,为了使得我们的点集学习到的表示对这些变换具有不变性。一个自然的解决方案是在特征提取之前将所有的输入对齐到一个规范空间。作者借鉴了在二维图像中通过采样和插值来对齐两个图像的思想。使用一个迷你网络(T-net)来预测仿射变换矩阵,并直接将此变换应用于输入点的坐标。T-net本身也是一个深度神经网络,由特征提取层、最大池化层、全连接层组成。

    上述想法也可以进一步推广,用于对齐特征点集。具体的,在特征点集中加入另一个对齐(T-net)网络,预测一个转换矩阵以对齐来自不同输入点云的特征。但是,在特征空间中的转换矩阵具有比输入点集的转换矩阵更高的维度,大大增加了优化的难度。因此,作者在softmax的训练损失后面增加了一个正则化项,迫使学习出的对齐矩阵更接近正交。作者表示正交变换不会丢失输入中的信息,结合实验表明通过添加正则化项对转换矩阵进行正交约束,使优化变得更稳定,模型实现了更好的性能。

4.3、Theoretical Analysis

  • Universal approximation(通用近似)

    首先,神经网络能够近似任何连续函数,通过函数的连续性,直观地,对输入点集的小扰动不应该极大地改变函数值,例如分类或分割的值。

    假设 f 是一个连续函数,存在一个连续函数 h 和一个对称函数 g(下式中为MAX函数),用 h 和 g 能够近似 f 。

PointNet Deep Learning on Point Sets for 3D Classification and Segmentation

  • Bottleneck dimension and stability

    作者在理论与实验中发现,网络的表现受最大池化层维度的影响很大。作者为此提供了一个分析,揭示了一些与模型稳定性相关的因素。证明了输入数据中的异常或噪声不太可能改变网络的输出。结合 h 的连续性,解释了模型对样本点扰动、异常和噪声点的鲁棒性。获得鲁棒性的原因类似于机器学习模型中的稀疏性原理。直观上看,网络通过学习一组稀疏的关键点来概括一个形状。在本文的实验部分,能够看到这些关键点能够形成一个对象的骨架。

5、Experiment

分为四个部分:首先展示了 PointNet 可以应用于多个 3D 识别任务。其次,提供了详细的实验来验证网络设计。接着,可视化展示了网络到底学习了什么。最后,分析了模型的时间、空间复杂度。

5.1、Applications

本节展示了如何训练 PointNet 模型来应用于分类、分割任务。模型在多个任务的基准测试中实现了相当甚至更好的性能。

  • 3D Object Classification

    在 ModelNet40 形状分类基准上评估模型,有 12311 个 CAD 模型,来自 40 个物体类别,9843 个划分为训练集,2468 个划分为测试集。在网格面上均匀地采样 1024 个点,并将它们标准化为单位球体。训练期间,通过旋转以及 0 均值、0.02 标准差的高斯噪声来增加抖动。

PointNet Deep Learning on Point Sets for 3D Classification and Segmentation

在表1中,PointNet 的结果与基于多视角的 MVCNN 依然有差距,作者认为是由于丢失了可以通过渲染图像捕获的精细几何细节。

  • 3D Object Part Segmentation

    区域分割是一项具有挑战性的细粒度 3D 识别任务。给定 3D 扫描或网格模型,任务是为每个点或面分配区域类别标签(例如,椅子腿,杯柄)。

    文章使用 ShapeNet 数据集来做区域分割,其中包含 16 个类别的 16881 个形状,总共标注了 50 个区域。 大多数对象的类别标有2-5个区域。我们也可以将点云的区域分割表示(理解)为一个逐点识别的问题。

    分割任务的评价指标为 mIoU(mean IoU),其计算包括 category 的 mIoU、shape 的 mIoU 和 part type 的 mIoU。

    具体的:对于类别 C 中的每个形状 S ,计算该形状 S 的 mIoU :对于 C 中每个部分(part type),计算 groundtruth 和 prediction 之间的 IoU,如果他们的并集是空的,就计 IoU 为 1。然后对类别 C 中所有部分(part type)的 IoU 取平均,获得该形状(shape)的 mIoU。最后,要计算该类别(category)的 mIoU,取当前类别(category)中所有形状(shape)的 mIoU 的平均值,即为该类别(category)的 mIoU。作者在训练中将 IoU 的阈值设为 0.5 。

    PointNet Deep Learning on Point Sets for 3D Classification and Segmentation

    表2展示了模型在每个类别上的 mIoU

  • Semantic Segmentation in Scenes

    在区域分割中的网络很容易扩展到场景语义分割,可以理解为是将点的标签从对象标签转换为语义对象的类别。

    PointNet Deep Learning on Point Sets for 3D Classification and Segmentation
    PointNet Deep Learning on Point Sets for 3D Classification and Segmentation

    对于基础的分割网络(Segmentation Network),它是识别网络的一个扩展。将局部点特征(第二个T-net的输出)和全局点特征(最大池化层的输出)关联在一起,其训练参数是相同的。

    对于基础的分割网络,作者还作了一些修改:增加了一个 one-hot 向量来表示输入的类型,并把它和最大池化层的输出联系在一起;在某些层增加了神经元,并且增加了 skip links 跳转链接来收集不同层的局部点特征,把他们连接在一起,共同组成分割网络的作为输入的点特征。

    文章最后还提到法向量估计(法向量预测结果在某些区域甚至比真实值更平滑,连续性更好)。通过实验验证了分割网络的健壮性。对于识别网络的部分,网络对数据损坏和数据缺失并不是特别敏感,因为点的全局特征是从关键点的集合中提取的。对于分割网络来说,它同样具有稳定性。结合逐点特征和学习到的全局形状特征,对每点部分的标签进行了预测。

5.2、Architecture Design Analysis

在本节中,通过对照实验验证了模型设计的选择,还展示网络中不同超参数的影响。

  • 与不改变顺序的方法的比较(Comparison with Alternative Order-invariant Methods)

PointNet Deep Learning on Point Sets for 3D Classification and Segmentation

在对称函数的选择上,作者比较了最大池化、平均池化、带有注意力的加权和,最大池化表现出了最佳的性能。

  • 输入、特征转换的影响(Effectiveness of Input and Feature Transformations)

    PointNet Deep Learning on Point Sets for 3D Classification and Segmentation

    表5展示了输入和特征转换(用于对齐)的积极作用,可以看出添加正则化损失对于高维度的转换矩阵是很有效的。

  • 鲁棒性测试(Robustness Test)

    PointNet Deep Learning on Point Sets for 3D Classification and Segmentation

    左图展示的是随机丢弃一些点对测试集上准确率的影响,当有 50% 的缺失数据时,准确率只降低了 2-3 个百分点。中间的图展示了模型对异常样本点的鲁棒性,在单位球体中均匀的插入异常值。模型在 20% 的点为异常值(outliers)时依然有 80% 的准确率。右图展示了不同方差的高斯噪声的扰动对模型的影响(高斯噪声是独立地加到每个点上的)。

5.3、Visualizing PointNet

PointNet Deep Learning on Point Sets for 3D Classification and Segmentation

图7为一些简单的形状可视化了关键点集和上限形状点集。关键点集组成了该形状的骨架,有助于最大池化。上限点集提供了与输入点云完全相同的形状,说明了最大可能的点集。落在关键点集和上限点集之间的任何点(点集)都会得到完全相同的特征,由此体现了模型的鲁棒性。这意味着失去一些非关键点不会改变全局形状标签。图中的颜色用来表示深度信息。

5.4、Time and Space Complexity Analysis

PointNet Deep Learning on Point Sets for 3D Classification and Segmentation
表6展示了 PointNet 分类模型的空间(网络中的参数量)和时间(FLOPs,每秒浮点运算次数)复杂度。可以看到对比 Subvolume 和 MVCNN,PointNet 在时间复杂度上有 8 倍和 141 倍的优化,在空间复杂度上有 4 倍和 17 倍的优化。此外,PointNet 的可扩展性更高,它的时间和空间复杂度与输入点数量呈线性关系(O(N))。而尽管计算时间主要由卷积操作决定,基于多视角的方法的复杂度与图像分辨率呈二次相关(O(N2)),基于体积卷积的方法随着体积大小呈立方式增长(O(N3))。作者的实验表明,以一张 GTX 1080,PointNet 在点云分类任务中能够每秒处理 100 万个点云,大约为每秒 1 千个目标,在实时性应用中有较好的潜力。

6、Conclusion

文章提出了一个全新的直接处理点云数据的深度神经网络——PointNet。使用对称函数——Max Pooling 来处理点云数据的无序性问题,该网络能够为许多 3D 识别任务提供统一的方法,包括分类、区域分割、语义分割,在基准测试中取得了与现有方法相近甚至更好的结果。

补充(Supplementary)

A. Overview

B. Comparison between PointNet and VoxNet

C. Network Architecture and Training Details

  • PointNet Classification NetWork
  • PointNet Segmentation NetWork

D. Details on Detection Pipeline

E. More Applications

F. More Architecture Analysis

G. Proof of Theorem

H. More Visualizations

待补充:模型训练的参数细节、代码梳理

Reference

论文原文

github源码