Deep Learning on Point Sets for 3D Classification and Segmentation
https://github.com/charlesq34/pointnet
PointNet
摘要(Abstract)
点云是一种非常重要的几何数据结构类型。因为它的格式不规则,许多的研究人员通常会将点云数据转换为规则的3D体素网格或者图像集合。然而,这会造成大量的不必要的数据,并且很容易带来问题。在本文中,我们设计了一个直接以点云为输入的神经网络模型,这一模型很好的遵循了输入点的排列不变性。我们的网络模型叫做PointNet,它提供了一种从目标分类、零件分割到场景语义分析的通用模型结构。虽然它很简单,但PointNet非常高效而且有效。从经验上讲,它的效果甚至超过了目前最先进的水平。我们从理论上分析了PointNet学到了什么和为什么PointNet在输入有所干扰和损坏时有很强的鲁棒性。
1.引言(Introduction)
在本文中,我们探讨了能够处理点云或者网格等3D几何数据的深度学习结构。通常,为了实现权重共享和内核优化,卷积结构对输入数据的格式有非常高的要求。由于点云或网格的格式不规则,大多数研究人员通常在将这些数据输入到深度网络之前,会将其转换为规则的3D体素网格或图像集合(如视图)。然而,这种数据表示转换会导致大量不必要的数据,同时也会带来量化伪影(不太明白这个是啥),这些伪影会掩盖数据自身的不变性。
图1 PointNet的应用 我们提出了一种以不需要体素化和渲染的原始点云(点集)数据为输入的深度网络框架。这是一个通用框架,可以学习全局和局部特征,为大量3D识别任务提供了一种简单有效的放法。
考虑到这一问题我们致力于一种不同的3D几何数据输入形式,即使用简单的点云,并将我们的深度网络命名为PointNets。点云是一种简单统一的结构,避免了网格的组合不规则性和复杂性,并且也因此更易于学习。然而,PointNet仍然不得不承认点云也只是一组点的集合,因此由于各个点的排列不变性,网络计算时必须是对称的。此外还需要考虑刚性运动的不变性。
我们的PointNet是一个通用模型,以点云作为输入并输出整个输入的类别标签或每个输入点的部分标签。PointNet的基本框架非常简单,因为在初始阶段,每个点都经过了相同的、独立的处理。在基本设置中,每个点都用三个坐标来表示。此外还通过计算法线和其他局部或全局特征来添加其他维度。
我们方法的关键在于使用最大池化这一单一对称函数。PointNet学习了一组选择点云中有趣点或信息点并对其选择原因进行编码的优化函数/规则。PointNet最后的全连接层将学习到的最优值综合为整个形状的全局描述(形状分类)或者用于预测每个点的标签(形状分割)。
我们输入的格式非常易于使用刚性或仿射变换,因为每个点的变换都是独立的。因此为了提高结果准确率,在使用PointNet之前,我们可以添加一些依赖数据的空间转换网络来规范化数据。
我们对PointNet进行了理论分析和实验评估。我们的网络可以近似任何连续函数。更有趣的是,根据可视化,我们的网络学习通过一组稀疏关键点来表示输入点云,这些关键点大致对应于目标的骨架。理论分析解释了为什么我们的PointNet对于通过点插入(异常值)或删除(丢失数据)导致有所损坏的输入点仍具有高度的鲁棒性。
在大量基准数据集上,从形状分类、分割到场景分割,我们通过实验对比了PointNet与其他现有的基于多态目标的方法。在一个通用的框架下,PointNet不只速度更快而且性能也超过了现有的方法。
我们的主要贡献如下:
- 我们设计了一个适用于无序点集合的深度网络框架;
- 我们展示了如何训练这样一个网络来实现3D形状分类,形状部分分割和场景语义分析任务;
- 我们分析了该方法的稳定性和有效性;
- 我们说明了由网络中所选神经元计算出的3D特征,并为其性能提供了直观的解释。
通过神经网络处理无序点集合是一种非常常见的基本问题,我们希望我们的想法也可以迁移到其他领域。
2.相关工作(Related Work)
点云特征 大多已有的点云特征都是针对特定的任务人工设计的。点的特征通常被编码为某些统计特征,而且往往对某些变换保持不变,这些变换分为内在的[2, 24, 3]和外在的[20, 19, 14, 10, 5]。他们可以被分为局部特征和全局特征。对于特定的任务,找到最优的特征组合并不简单。
基于3D数据的深度学习 3D数据有多种常用的表示方法,也对应着许多的深度学习方法。CNNs:[28, 17, 18]中先驱们在体素上应用3D卷积神经。然而,由于3D卷积的数据稀疏性和计算成本,体积表示受到其分辨率的限制。FPNN [13]和Vote3D[26]提出了一种特殊的方法来解决稀疏性问题;然而他们的操作仍然是对针对稀疏数据的卷积,大规模点云对它们来说具有挑战性。Multiview CNNs:[23, 18]尝试将3D点云或者形状转换为二维图像,然后使用二维卷积网络来进行分类。图像CNN在形状分类和检索任务中取得了一席之地。然而,把它们拓展到场景语义理解或其他3D任务,如点分类和形状完成(这里指?)是不容易的。Spectral CNNs:一些最新的工作[4,16]在网格上使用光谱CNN。然而,这些方法目前被限制在多个网格上,如有机对象,如何将它们扩展到非等距形状(如家距)的方法并不明确。Feature-based DNNs:[6, 8]首先通过提取传统形状特征将3D数据转化为向量,然后使用全连接网络来进行形状分类。我们认为这些方法受到所提取特征的表示能力的限制。
深度学习在无序集上的应用 从数据结构的角度来看,点云是一种无序的向量集合。当众多深度学习工作都集中于输入表示的规则上,如序列(在语音和语言处理中),图像和体积(视频或者3D数据),但在点集方面做的工作却不多。
Oriol Vinyals等人近期的工作研究了这一问题。他们使用了一种带有注意力机制的读进程写来处理无序集合,并展示了他们网络的排序能力。但是,因为他们的工作专注于基因集合和NLP应用,因此缺乏在几何集合上的应用。
3.问题陈述(Problem Statement)
我们设计了一种直接以无序点集为输入的深度学习网络。一个点云就是一组3D点集合的表示方式,其中,每个点是一个由坐标加上额外的特征通道,如颜色、法线等组成的向量。为了简单说明,除非有其他的注释,我们只使用坐标作为我们点的通道。
对于目标分类任务,输入点云或者直接从形状中采样,或者从场景点云中预先分割。我们提出的深度学习网络输出k个分类的k个分值。对于语义分割任务,输入可以是用于部分区域分割的单个对象,或者来自用于对象区域分割的3D场景的子部分。对于个点中的每个点和个语义子类别,我们的模型会输出个得分。
图2. PointNet结构 这一分类网络以n个点为输入,应用输入和特征转换,然后使用最大池化聚合点的特征。输出是k个类别的得分。分割网络与分类网络密切相连。他结合了全局和局部特征并输出每个点的得分。"mlp"代表多层感知机,括号里的数字为层的大小。对于所有使用ReLU的层使用Batchnorm。分类网络中的最后一个mlp使用dropout。
4.点集上的深度学习
我们的网络架构(4.2节)受到来自(4.1节)中的点集属性的启发。
4.1 中的点集属性
我们的输出是一个欧氏空间点集的子集。它有如下三个主要属性:
- 无序。 与图像中的像素阵列或体积网格中的体素阵列不同,点云是一组没有特定顺序的点集。换句话说,一个消耗个3D点集的网络对种排列顺序的输入点集数据的应是不变的。
- 点之间的交互。 这些点来自于具有距离度量的空间。这意味着点与点之间不是孤立的,并且相邻点可以形成一个有意义的集合。因此,这个模型需要从相邻点中捕捉局部结构,以及局部结构之间的结合相互作用。
- 变换下的不变性。 作为一个几何物体,点集的学习表示对某些变换应该是不变的。例如,旋转和平移不能改变全局点云类别或点的分割情况。
4.2 PointNet的架构
我们的网络架构在图2中展示,其中分类网络和分割网络共享了大部分结构。请查阅图2的标题。
我们的网络有三个关键模块:最大池化层作为聚集所有点信息的非对称函数,一个本地和全局信息组合结构,以及两个同时对齐输入点和点特征的联合对齐网络。
我们将在下面的段落中讨论这些设计选择的原因。
无序输入的对称函数 为了使模型对于不同排列组合的顺序是不变的,有三种策略:1)将输入排序为特定的顺序;2)将输入作为序列来训练RNN,通过各种排列增强训练数据;3)使用简单的对称函数整合来自每个点的信息。一个对称函数以n个向量作为输入,输出一个与输入顺序无关的新向量。例如,和运算符是对称二元函数。
虽然排序听起来像一个简单的解决方案,但在高维空间中实际上并不存在相对于一般意义上的点扰动稳定的排序。通过比较很容易发现。如果存在这样的排序策略,那么在高维空间与一维实线之间存在双射映射。不难看出,要求对点扰动稳定的排序等价于要求该映射在维数减少时保持空间接近度,一般情况下这是无法实现的。因此,排序不能完全解决顺序问题,而且当顺序问题依然存在时,网络很难学习到从输入到输出的一致映射。如实验所示(图5),我们发现直接将MLP应用于排序点集的性能很差,尽管略优于直接处理未排序的输入。
使用RNN的思想是将点集看作一个序列信号,并希望通过随机排列序列训练RNN,使RNN对输入序列具有不变性。然而,在“顺序问题”中[25]作者指出顺序问题不能完全忽略。虽然RNN对较短的(几十个)序列的输入序列具有较好的鲁棒性,但很难扩展到像点集这样有数千个输入元素的问题。从经验上讲,我们也证明了基于RNN的模型在性能上不如我们提出的方法(图5)。
我们的想法是在集合中应用对称函数对变换单元中的一般函数进行逼近:
其中是一个对称函数
从经验上讲,我们的基本模块非常简单:我们用由一个单变量函数和最大池化函数组成的多层感知器机和来近似。实验证明这是有效的。通过,我们可以学习一些来捕捉集合的不同属性。
虽然我们的关键模块看起来很简单,但它具有有趣的特性(见第5.3节),可以在几个不同的应用中实现非常好的效果(见第5.1节)。因为我们模块非常简单,我们也能够提供第4.3节的理论分析。
本地和全局信息整合 此前几节的输出形成一个向量,这是输入集合的全局签名。我们可以轻松地训练支持全局形状特征分类的SVM或多层感知机。但是,点分割需要结合局部和全局信息。我们可以通过简单而高效的方式来实现这一目标。
我们的解决方案可以在图2(分割网络)中看到。在计算全局点云特征向量之后,通过将全局特征与每个点特征相连接,将其反馈给每点特征。然后我们基于组合的点特征提取新点特征——这次每点特征都是结合了局部和全局信息的。
通过这种修改,我们的网络能够预测每点依赖于局部几何和全局语义的数量。 例如,我们可以准确预测每点法线(附图中的图),验证网络能够整合来自该点的邻域信息。在实验环节中,我们还展示了我们的模型可以在形状部分分割和场景分割上实现非常好的效果。
联合校准网络 如果点云经过了一些特定的集合变换,如刚性变换,这些点云的语义标签必须是不变的。因此我们希望学习到的点集的表示对这些变换而言也是不变的。
一个很自然的解决方案是在进行特征提取之前将所有的输入集合调整到一个规范空间。Jaderberg[9]等人提出了空间变换的思想,通过采样和插值来对齐到二维图像,并专门设计网络层在GPU上实现。
与[9]相比,我们点云的输入形式使得我们能够通过更简单的方法来实现这一目标。我们不需要创建任何新的图层,并且不会像在图像任务中那样引入别名。我们通过一个小型网络(图2中的T-Net)来预测一个精细的变换矩阵,并将该变换直接应用到输入点的坐标系上。这一小型网络本身类似于一个大型网络,由独立的点特征提取、最大池化和全连接层模块组成。关于T-net的细节将在附录中介绍。
这一想法也可以进一步扩展到特征空间的校准。我们可以在点特征上插入另一校准网络,然后预测一个特征变换矩阵来校准对不同输入点云的特征。但是,特征空间中的变换矩阵具有比空间变换矩阵更高的维度,这大大增加了优化的难度。因此我们对softmax训练损失添加了正则化。我们将特征转换矩阵近似为如下正交矩阵:
其中,是有小型网络预测得到的特征校准矩阵。正如我们所期待的,一个正交变换将不会损失任何输入的信息。我们发现通过添加正则化项,优化过程变得更加稳定,并且我们的模型取得了更好的效果。
4.3 理论分析
全局逼近我们首先展示了我们的神经网络对连续函数的全局逼近能力。直观的说,通过设定函数的连续性,对输入点集的微小扰动不会对函数值(如分类或者分割得分)产生过大的影响。
设是一个关于Hausdorff距离连续集函数,例如,,对于所有的,如果,那么。定理说明,如果我们的网络在最大池化层有足够的神经元,如(1)中的K足够大,那么可以足够近似。
图3. 部分分割的定性结果。 我们对所有16个类别的CAD部分分割结果进行了可视化。我们展示了Kinect扫描的部分结果和(左侧)和完整的ShapeNet CAD模型(右侧)。
定理1. 假设是一个关于Hausdorff距离连续集函数,例如,一个连续函数和一个对称函数那么,
其中,是中所有元素经过随机排列得到的列表,是一个连续函数,是一个向量的max操作,输入个向量,得到一个元素最大值组成的新向量。
对这一定理的证明可以在附录材料中找到。关键的想法是,在最坏的情况下,网络依然可以通过将空间划分成相等大小的体素来学习如何将点云转换为体积表示。 然而,事实上,网络学习了一个更加聪明的探测空间的策略,正如我们将在点函数可视化中看到的那样。
瓶颈维度和稳定性 从理论和实验上我们发现,我们网络的表现力受到最大池化层维度的影响。这里我们提供一个分析,它也揭示了与我们模型的稳定性相关的属性。
我们定义为将之间的点映射到维向量的子网络。下面的定理告诉我们输入数据中小的扰动或额外的噪声点不会对我们网络的输出有影响:
定理2. 假设,那么且。所以,
表1. ModelNet20的分类结果. 我们的网络在上述基于3D输入的深度学习网络中取得了较好的效果
我们解释这个定理的含义。(a)表明如果所有中的点被保留,保持不变直至输入有所扰动或者有额外的噪声点。(b)表明只包含有限数量的点,且由(1)中的所决定。换句话说,由小于或等于个元素的有限子集决定。因此我们称为的临界点集,为的瓶颈维数。
结合的连续性,这说明了模型在遇到点扰动、损坏和额外噪声点情况下的鲁棒性。获得鲁棒性的原理与机器学习模型中的稀疏性原理类似。直观地说,我们的网络是通过一组稀疏的关键点集来实现的。在实验部分,我们看到关键点构成了一个对象的骨架。
5.实验(Experiment)
实验被分为了四部分,首先,我们展示了PointNets可以应用于多种3D识别任务(5.1节)。其次,我们提供了详细的实验来验证我们的网络设计(5.2节)。最后,我们可以看到网络学习到了什么(5.3节)并分析时间和空间的复杂度(5.4节)。
5.1 应用(Applications)
在本节,我们将展示如何训练我们的网络来执行3D目标分类,对象部分分割和语义场景分割。尽管我们正在研究一种全新的数据表示(点集),但我们已经能够在几项任务的基准测试中实现可比较好甚至更好的性能。
3D目标分类 我们的网络学习到的全局点云特征可以用于目标分类。我们在ModelNet40[28]形状分类基准上评估了我们的模型。其中有40种人造类别的12311个CAD模型,98413个作为训练集,2468个作为测试集。以前的方法专注于体积和多视图图像表示,我们是第一个直接处理原始点云的。
我们根据面部区域在网格面上均匀采样1024个点,并将它们归一化为单位球体。在训练过程中,我们通过沿上轴随机旋转物体来实时增强点云,并将零均值和0.02标准偏差的高斯噪声加到每个点的位置上。
在表1中,我们将我们的模型与以前的工作以及使用MLP对点云中提取的传统特征(点密度,D2,形状轮廓等)处理的基线进行比较。我们的模型在基于3D输入(体积和点云)的方法中表现出了较好的性能。只有全连接层和最大池化层,我们的网络在推理速度方面具有了强大的领先优势,并且可以在CPU中轻松并行化。我们的方法和基于多视图的方法(MVCNN [20])之间仍然存在一些差距,我们认为这是由于渲染图像捕获的精细几何细节的丢失。
3D目标部分分割 部分分割是一项具有挑战性的细粒度3D识别任务。给定3D扫描或网格模型,任务是将部件类别标签(例如椅子腿,杯柄)分配给每个点或面。
我们对来自[26]的ShapeNet零件数据集进行评估,其中包含来自16个类别,16,881个形状,总共标注了50个部分。大多数对象类别标有2到5个部分。真实注释标注在形状的采样点上。
我们将部分分割作为每点分类问题。评估指标为点的mIoU。对于类中的每个形状,计算形状的mIoU:对于类中的每个部分类型,计算真实值和预测之间的IoU。如果真实点与预测点的交集为空,则将IoU计为1。然后,我们对类中的所有零件类型计算IoUs,以获得该形状的mIoU。为了计算该类别的mIoU,我们对该类别中的所有形状取平均值mIoU。
在本节中,我们将我们的分割版本PointNet(图2的修改版本,分割网络)与两种传统方法[27]和[29],以及我们自己的3D CNN基准进行了比较,两种传统方法都利用了形状之间的点向几何特征和对应关系。有关3D CNN的详细修改和网络架构,请查阅附录内容。
在表2中,我们展示了每个类别和平均IoU(%)分数。我们观察到mIoU改善了2.3%,我们的网络在大多数类别中都超过了基准方法。
我们还对模拟Kinect扫描进行了实验,以测试这些方法的鲁棒性。对于ShapeNet零件数据集中的每个CAD模型,我们使用Blensor Kinect模拟器[7]从六个随机视点生成不完整的点云。我们使用相同的网络架构和设置对我们的PointNet进行完整形状和部分扫描的训练。结果显示我们的仅损失了5.3%的mIoU。在图3中,我们给出了完整和部分数据的定性结果。可以看到,虽然部分数据相当具有挑战性,但我们的预测是合理的。
场景语义分割 我们在部分分割的网络可以轻松的扩展到场景语义分割,其中点的标签是语义目标类别而不是目标部分标签。
我们在斯坦福的3D语义分析数据集[1]上进行了实验。这个数据集包括来自Matterport扫描仪的6个区域,271个房间。每一个扫描到的点都标注了13个类别标签(椅子、桌子、地板、墙等)中的一个。
为了准备训练集,我们首先按空间分割点,然后将空间样本分割为的区域。我们训练PointNet的分割网络来预测每个块中每个点的类别。每个点被表示为一个由、以及归一化后的位置组成的9维向量。在训练时,我们在每个模块中随机采样4096个点。在测试时,我们在所有点上进行测试。我们遵循与[1]相同的方案,使用k-fold交叉验证进行训练和测试。
我们将我们的方法与使用手工特征的基线进行了比较。这一方法提取了相同的9维局部特征和三个附加点:局部密度、局部曲率和法线。我们使用标准的多层感知机作为分类器。结果见表3,其中我们的PointNet明显优于基线方法。在图4中,我们展示了定性分割的结果。我们的网络可以平滑的预测结果,并且对于丢失点和遮挡点具有鲁棒性。
于我们网络输出的语义分割,我们进一步设计了一个使用连接组件进行3D目标检测系统(详见附录)。我们与表4中现有的方法进行了比较。过去的方法都是基于滑动形状前一种方法基于滑动形状方法(使用CRF后处理),并在局部几何特征和体素格网中的全局空间上下文特征上训练了SVM。我们的方法在家具类别上大幅超越了它。
5.2 结构设计分析(Architecture Design Analysis)
在本节中,我们通过控制实验验证了我们的设计选择。我们还展示了我们的网络超参数的影响。
与备选顺序不变方法的比较 如4.2节所述,至少有三个方法可用于无序数据输入。我们使用ModelNet40形状分类问题作为比较这些方法的测试平台,以下两个实验也将用于此任务。
我们比较的基线(如图5所示)包括的未排序和排序点阵列上的多层感知机,将输入点视为序列的RNN模型以及基于对称函数的模型。我们实验的对称操作包括最大池化,平均池化和基于注意力的加权和。注意力方法类似于[22]中的方法,其中从每个点特征预测出标量分数,然后通过计算softmax将分数标准化到点之间。在归一化的分数和点特征上计算加权和。如图5所示,最大池化操作性能最佳,这证实了我们的选择。
输入和特征转换的有效性 在表5中,我们展示了输入和特征变换的有效性。有趣的是,最基本的架构已经取得了相当合理的结果。使用输入转换可提高0.8%的准确率。正则化损失对于更高维度变换是必要的。通过结合特征变换和正则化项,我们实现了最佳性能。
鲁棒性测试 我们展示了PointNet,虽然简单而有效,但对各种输入损坏都很有效。我们使用与图5的最大池网络相同的架构。输入点标准化为单位球体。结果在图6中。
至于缺失的点,当50%的点丢失时,相对于最远和随机采样输入,精度仅下降2.4%和3.8%。在训练期间看到这些,我们的网络对于异常点也很有效。我们评估两个模型:一个用坐标点进行训练; 另一个在上加上点密度。即使20%的点是异常的,网络的准确率也超过80%。图6右图显示了网络对点扰动的鲁棒性。
5.3 可视化PointNet(Visualizing PointNet )
在图7中,我们展示了一些样本形状的临界点集合和上限形状的一些结果可视化(如在Thm 2中讨论的)。两个形状之间的点集合将给出完全相同的全局形状特征。
从图7我们可以清楚地看到,临界点集合,这些贡献了最大合并特征,总结了形状的骨架。上界形状表示给出与输入点云相同的全局形状特征的最有可能的点云。和反映了PointNet的鲁棒性,这意味着丢失一些非临界点不会改变全局形状特征。
是通过网络前向传递边长为2的立方体中的所有点,并选择点函数值为不大于全局形状描述符的点。
5.4 时间和空间复杂度分析(Timeand Space Complexity Analysis)
表6总结了我们分类PointNet的空间(网络中的参数数量)和时间(浮点运算/样本)复杂度。 我们还将PointNet与以前工作中基于体积和多视图的体系结构进行比较。
尽管MVCNN [23]和Subvolume(3D CNN)[18]实现了高性能,但PointNet在计算成本方面效率更高(以浮点运算/样本进行测量:分别为141x和8x)。 此外,就网络中参数而言,PointNet比MVCNN更节省空间(参数少17倍)。PointNet更具可扩展性 - 空间和时间复杂度为O(N) - 与输入点数量呈线性。 然而,由于卷积占主导地位,多视图方法的时间复杂度在图像分辨率上正常增长,而基于体积卷积的方法随着卷大小以立方速度增长。
从经验上来看,PointNet能够在TensorFlow上使用1080X GPU处理每秒超过100万点的点云分类(约1K个对象/秒)或语义分割(约2个块/秒)任务,显示出实时应用的巨大潜力。
6. 结论(Conclusion )
在这项工作中,我们提出了一种新的直接以点云为输入的深度神经网络PointNet。我们的网络为许多3D识别任务提供了一个通用的框架,包括目标分类,部分分割和语义分割,同时获得比标准基准更好的结果。我们还提供理论分析和可视化,以对我们网络的理解。
Acknowledgement. 作者非常感谢三星GRO授予的资助,ONR MURI N00014-13-1-0341资助,NSF资助IIS-1528025,Google聚焦研究奖,Adobe公司的礼物以及NVIDIA的硬件捐赠。
来源:CSDN
作者:Egoist_
链接:https://blog.csdn.net/qq_37314249/article/details/103605076