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

基本简介

论文下载地址:https://arxiv.org/abs/1612.00593
代码开源地址:https://github.com/charlesq34/pointnet
作者以及论文信息如下:
在这里插入图片描述
论文作者的公开课链接https://www.shenlanxueyuan.com/channel/8hQkB6hqr2/detail(大佬的课必须去感受下啊~~)

最近,开始研究基于3D点云的深度学习算法。PointNet 作为基于3D点的特征提取的开创性论文,非常有必要好好研究总结。在翻译论文时,会结合代码来解释每一个关键点或者关键模块。同时,本文翻译会附英文原文和中文翻译对照,目的是为了让大家能够通过中文理解该论文的同时,也可以参照英文原文,形成自己的理解以及对翻译的勘误。作为算法工程师,坚持阅读英文论文,并能达到熟练的程度,也是必备技能之一。


Abstract

在这里插入图片描述
点云(point cloud)是一种非常重要的几何数据结构。由于点云的无规律性(irregular format),大部分研究者将点云转换为规律的3D体素网格(3D voxel grids)或者一组不同视角的2D图像。这种转换数据的方式,增加了数据的规模,同时也会带来一系列问题。在本篇论文中,我们设计了一种可以直接处理点云的神经网络,并且考虑了输入点云序列不变性的特征。我们的网络,PointNet,提供了统一的应用架构,可以用于分类(classification),块分割(part segmentation),语义理解(semantic parsing)。尽管网络很简单,但是非常有效。从实验结果上看,它超越了经典的方法,至少也达到同样的水平。理论上,我们进行了分析,包括网络学习了什么,以及当数据被一定程度的干扰后,网络为什么能保持稳定。

摘要介绍的主要内容:

  1. 点云数据的特征:无规律性,无序性。
  2. 本文提出网络 PointNet, 可以直接处理原始点云,无需转换输入点云为3D体素或者多个视角的2D图像。
  3. 该网络用于提取点云特征,架构统一,可以适应不同的3D识别任务。
  4. 最后对网络学习的内容和网络的鲁棒性进行理论分析和实验验证。

1. Introtuction

在这里插入图片描述在这里插入图片描述
本篇论文中,我们探究了深度神经网络处理诸如点云(Point Cloud)或者网格(Mesh)等3D几何数据的能力。为了能够进行权重共享或者其它核优化,传统的神经网络需要输入高度规律的数据,比如图像块或者3D体素网格。因为点云或者网格不是规律的数据,因此常被处理为3D体素网格,或者多视角2D图像,然后输入到传统的网络。这样的数据处理方式,增大了数据的规模,量化过程中,会掩盖数据本身的特性。

下面图片的左边是3D模型多视角生成一些列图像,右图是3D模型的体素化(左边的兔子是原始的模型,右边的兔子是体素化的模型)

基于这些原因,我们关注不同于体素或者图像的数据表达方式(使用原始点云数据,比如xyz坐标),并提出新的神经网络——PointNet. 点云是简单并且统一的结构,也就避免了组合的不规律性以及拓扑的复杂性,因此,容易被网络学习。当然,也不能忽略点云本身仅仅是一系列点,因此具有序列不变性,网络中添加特定得对称计算是有必要的。刚性变换不变性也需要考虑。


在这里插入图片描述
我们的 PointNet 是统一的结构,输入是点云,输出是整个输入的类别标签或者每个输入点的分割或者分块的标签。我们的网络非常的简单,在最初的几个阶段,每一个点都是被独立、同等的处理。每个点只包含(x,y,z)坐标,也可以加入额外的特征维度,比如法线,或者其它局部或者全局特征。


在这里插入图片描述在这里插入图片描述

本文方法的关键是使用了一个简单的对称函数(max-pooling)。 网络能够高效地学习最优函数或准则集合,它们可以从点云中选择感兴趣点或者信息点,并且编码了选择有效点的原因。网络最后的全连接层将这些学习的最优值聚合为全局特征描述子,并用于分类,分割等任务。

因为输入的点是独立的,所以可以很容易应用刚性变换或者仿射变换。那么,我们可以在数据送入网络(PointNet)之前,对数据进行数据依赖的空间转换,目的是为了规范化输入数据,进而进一步改善训练结果。


在这里插入图片描述
我们对提出的算法进行理论分析和实验评估。结果显示,我们的模型可以逼近任意连续的函数集。更加有趣的是,我们的网络可以学习一些关键的稀疏点,它们可以表达整个输入点云。根据可视化的结果,这些稀疏点分布在目标的骨骼部位(可以认为是足够表征目标的关键点)。理论上,我们解释了为什么 PointNet 对于输入数据小的波动,添加噪声点或者删除部分点,仍然具有高度稳定性。

对于当前的分类,Part分割以及场景分割等任务,我们训练了 PointNet ,并与经典算法(基于多视角图像或者体素)进行比对。我们的算法不仅更快,而且效果更好。


在这里插入图片描述
我们的主要贡献如下:

  • 我们设计了新的神经网络架构,可以直接处理无序的3D点云。
  • PointNet 可以进行3D形状的分类,Part分割,场景理解等任务。
  • 我们从理论和实验分析了网络的鲁棒性和高效率。
  • 我们可视化了网络部分节点学习的3D特征,为算法高效的表现提供了证明。

使用神经网络处理无序的点云所面临的问题是非常基础和普遍的,我们期望该算法能够迁移到其它应用领域。


2. Related Work

该部分内容不是很多,与理解 PointNet 算法并没有太大的关系,暂不作翻译,如有需要,请自行查看原文章。

3. Problem

在这里插入图片描述
点云是一组3D点的集合, { P i ∣ i = 1 , 2 , . . . , n } \lbrace P_i|i=1,2,...,n\rbrace {Pii=1,2,...,n},每一个点最基本应包含(x,y,z),还可以包含颜色,法向量等特征。为了简化以及便于陈述,除非有特别说明,否则我们的3D点集只有(x,y,z)3个通道。

对于目标分类任务,输入点云要么从一个目标形状中采样一部分点,要么是从场景中分割的部分点。对于 k k k 分类问题,网络输出 k k k 个分数。对于语义分割,输入可以是对单个目标进行part分割,或者一个3D场景内进行目标区域分割。网络会输出 N × M N\times M N×M 个分数, N N N 表示点数, M M M 表示语义类别数量。


4. Deep Learning on Point Sets

在这里插入图片描述
我们的网络架构(Sec 4.2)设计受启发于3D点集的特性(Sec 4.1)。

4.1 Properties of Point Sets in R n R^n Rn

我们的输入是来自于欧式空间的子集,它具有如下三大主要特性:

  • 无序性(Unordered) 与图像中的像素数组或者体素网格中的体素数组不同,点云是一系列无序点的集合。换句话说,神经网络在处理 N 个3D点时,应该对 N ! N! N! 种输入顺序具有不变性(即是:不同的输入顺序,网络学习的结果应该相差不大)。
  • 点之间的相互关系(Interaction Among Points) 来自空间的点在一定的度量距离内。这就意味着,点集中大部分点不是孤立的,邻域点一定属于一个有意义的子集。因此,网络需要从近邻点学习到局部结构,以及局部结构的相互关系。
  • 变换不变性(Invariance Under Transformations) 作为一个几何目标,学习的点特征应该对特定的变换具有不变性。比如,旋转和平移变换不会改变全局点云的类别以及每个点的分割结果。

4.2. PointNet Architecture

在这里插入图片描述在这里插入图片描述

我们的整体网络架构如 Fig2 所示,分类网络和分割网络共享了网络的大部分结构。整体的流程可以参考 Fig2 的文字说明。

在这里插入图片描述
我们的网络主要有三个关键的模块:最大池化层(对称函数),用于聚合所有点的特征信息;局部信息和全局信息合并结构(针对分割类任务);2个联合对齐网络用于对齐输入和点特征。

  • 对称函数(Symentric Function)的开源代码实现

    # Symmetric function: max pooling
    print('net: ', net)
    net = tf_util.max_pool2d(net, [num_point,1], padding='VALID', scope='maxpool')
    print('net-maxpool: ', net)
    
    # Input and Output of max pooling
    net:  Tensor("conv5/Relu:0", shape=(32, 1024, 1, 1024), dtype=float32)
    net-maxpool:  Tensor("maxpool/maxpool:0", shape=(32, 1, 1, 1024), dtype=float32)
    

    a. 如上述代码所示,输入为【BxHxWxC】——>【32,1024,1,1024】,池化层核的大小为【num_point,1】——> 【1024,1】,在没有有填充的情况下(padding=VALID),对 H,W 维度进行最大池化操作,【1024,1】转换为 【1,1】。
    b. 对称函数正是为了解决3D点集无序性输入的问题。
    c. 对称函数将所有独立的点特征聚合为全局的点集特征,进而进行后续的3D识别任务。

  • 联合对齐模块(Joint Alignment Network):分别对齐输入数据和点集特征

    该模块的作用:点云的预测结果应该对特定的变换具有不变性,比如刚性变换。为此,本文提出 T-Net 变换矩阵,将输入以及不同点的特征进行对齐,使得网络学习的表达也具有这种特性。
    对齐模块的结构:下面,我们将展示输入和特征对齐模块具体的结构,包括每一层的输入和输出。

    下面的模块是输入点云的对齐模块,每一层的卷积尺寸以及输入、输出均已明确标示。 下图中的 input transform 模块,通过构建的 T-Net 网络,可以生成变换矩阵 transform,进而得到输入的转换输出,形状为【32x1024x3】,32是 Batch 值。单独使用输入模块的转换,网络确实有提升,但是很有限(提升0.8%)。

    在这里插入图片描述
    在这里插入图片描述

    下面的模块是对特征的对齐,与输入对齐的 T-Net 非常相似,只是个别卷积核的大小略有差别,具体就是第一个卷积核的尺寸和 T-Net 输出的变换矩阵尺寸。后面的实验数据表明,单独使用该模块的效果有提升,但是也很有限(提升大概0.3%)。
    在这里插入图片描述
    在这里插入图片描述

  • 合并局部和全局特征

    在分割任务中,需要提取更为精细的特征。为此,需要将局部特征和全局特征合并,这在2D图像中语义分割也是常见的操作。本文中,作者的操作很简单,将前面几层的输出和全局特征进行聚合(concate),得到新的特征,然后输入到后面的卷积层。


在这里插入图片描述
我们将在下面的段落中分别讨论网络设计的背后逻辑。

Symmetry Function for Unordered Input 为了使得模型对输入顺序具有不变性,总共有三种策略:(1)将输入顺序规范化;(2)将每一种输入顺序当做是一个序列样本,然后分别输入到 RNN训练;(3)使用对称函数将每一个点的信息聚合,它的输入是 n 维向量,输出是新的向量,并且对输入顺序具有不变性。比如,加法和乘法就是对称的二元函数。


在这里插入图片描述
听起来, 固定的排序是一个简单的解决方案。考虑到一般场景中,点云存在波动,那么在高维空间中,不存在一个固定的顺序能保持稳定。可以用逆推法说明这个问题。假设存在一个这样的特定顺序,那么它定义了高维空间和1d 实数轴的双射。不难看出,在考虑点波动的情况下,保证顺序的稳定性等价于在维度降低的情况下,这种映射需要保持空间的近邻性,这是很难达到的(一维的实数轴不可能保证点的近邻性)。因此,排序无法解决顺序的问题,网络也很难学习到一致的映射。Fig5 中的实验结果表明,直接将 MLP 应用于固定排序的点集,网络的表现很差,尽管比直接作用于无序点略好。


在这里插入图片描述在这里插入图片描述
将所有的点集排序当作 RNN 的一个输入样本,然后训练该网络。但是,在论文【25】中,作者表明顺序是有关系的,也不能全部省略。当然, RNN 对输入顺序的变化、短序列(比如长度为几十)有较好的鲁棒性。但是很难扩展到较长的输入元素(上千长度),然而对于3D的点集,这种长度是很常见的。而且,从实验来看, RNN 并没有比我们提出的模型效果好,见 Fig5.


在这里插入图片描述
我们的想法:逼近一个定义在点集上的一般函数,然后对转换后的函数使用对称函数(Symmetric Function),表现形式如上图的 公式(1)所示。实际上,我们的基本模块非常简单:使用多层感知机近似 h 函数,以及通过组合的单变量函数和最大池化函数近似 g 函数。实验发现,这种结构效果很好。通过一系列 h 函数,我们学习到了一些列 f 函数来抓取点集的不同特性。

我们的模块看起来很简单,它具有很多有意思的特性(Sec 5.3)以及在一些应用得到不错的效果(Sec 5.1)。由于模块的简单性,我们在(Sec4.3)提供理论分析。


在这里插入图片描述

Local and Global Information Aggregation 上面的函数 f 的输出向量为 [ f 1 , f 2 , . . . , f K ] [f_1,f_2,...,f_K] [f1,f2,...,fK],它是输入点集的全局特征。基于这样的全局特征,我们可以很容易训练SVM或者多层感知机进行分类。但是,点集分割需要融合局部特征和全局特征才能达到一定的效果。这里我们使用了一个简单高效的方式。

我们的解决办法可以参考 Fig2(分割网络部分)。当得到全局向量后,与前面层的每一个点特征连接。那么我们可以得到每个点新的特征,这样每一个新的点特征融合了全局和局部特征。

基于这样的改变, 我们的网络可以预测每一个点的特性(基于局部几何和全局语义而来)。比如,我们精准预测了每一个点的法线(见下图Fig16),表明网络可以提取点的局部特征。在Part分割和场景分割实验中,我们的网络可以到经典算法的水平。

在这里插入图片描述


在这里插入图片描述
Joint Alignment Network 点云的语义标签应该对特定的几何变换具有不变性,比如刚性变换。因此,我们希望网络学习的表达也具有这种特性。

一个自然的解决方案是在特征提取之前将点云对齐到特定的规范空间。Jaderberg[9] 引入空间变换的思想,通过采样和插值对齐2D图像,也即是应用在GPU上的裁判层(tailored layer)。

与论文【9】相比,点云的输入形式使得可以更简单的达到这样的目标。不像在2D图像中,我们不需要添加新的网络层或者其它的别名被引入。借助一个很小的网络(mini-network),我们预测了一个仿射变换矩阵(Fig2 中的T-net),然后直接作用在输入点云上。类似于一些大的网络,这个迷你网络也包含一些基本的模块,比如独立的特征提取,最大池化,全连接层。更多的细节,参考补充材料。


在这里插入图片描述
上面对齐输入点云的思想可以进一步扩展,应用在特征空间的对齐。我们可以嵌入一个针对特征对齐的网络,预测一个特征变换矩阵,将不同输入点云的特征对齐。与空间变换矩阵相比,特征转换矩阵具有更高的维度,极大提高了优化的困难度。因此,我们给损失函数添加了正则项。使得特征变换矩阵尽量接近正交矩阵:
L r e g = ∣ ∣ I − A A T ∣ ∣ F 2 (2) L_{reg}=||I-AA^T||^2_F \tag 2 Lreg=IAATF2(2)
  这里,A 是迷你网络预测的特征对齐矩阵。正交矩阵不会丢失输入的信息,正式我们所期待的。我们发现,通过添加正则项,优化变得更加稳定,模型也得到更好的效果。


4.3. Theoretical Analysis

在这里插入图片描述
Univeral approximation 我们首先展示了网络拟合连续函数集的基本能力。直觉上来说,对于连续函数,轻微的点云波动并不会改变函数的值,也即是最终分类和分割的分数。

公式的定义如上图所示,S 表示点集集合中的一个点集,f 是函数集(可以由网络近似拟合)。根据点集的特性,只要最大池化层的(max-pooling)神经元个数足够多,那么我们的网络应该可以逼近任意函数集。


在这里插入图片描述
理论的证明,参考补充材料,这里不作叙述。理论的核心思想是,最坏的情况下,网络可以将点云转换为体素表达,也就是将整个点云空间分割为相等大小的立方块。实际上,我们的网络可以学习更加智能的策略来探测点云空间,后面将可以看到点函数的可视化。


在这里插入图片描述在这里插入图片描述
这一部分的公式证明,有兴趣的可以参考补充材料,这里就不证明了,没有太多意义,定理也是比较数学分析中常见的。这一部分还是想说,对于针对输入点云的波动,删除部分点以及添加额外的噪声,网络仍具有一定鲁棒性,预测结果没有大的影响。而且,网络最终学习到的是目标的少量关键点,但是分布在目标的骨干位置,能够表征该目标。


5. Experiment

在这里插入图片描述
  实验分为四个部分:(1)Sec 5.1 中展示了 PointNet 可以应用于多个3D识别任务。(2)Sec 5.2 提供了详细的实验分析结果,进一步验证网络的设计原理。(3)Sec 5.3 可视化了网络学习的内容是什么;(4)Sec 5.4 分析了时间和空间复杂度。

5.1. Applications

在这里插入图片描述
这一部分,我们展示了我们的网络是如何成功应用于3D目标分类,目标Part分割以及语义场景分割等任务。尽管我们的网络在多个分布不同的数据集上训练,但是仍可以达到经典网络的水平,有些甚至超越了经典算法。


在这里插入图片描述在这里插入图片描述
3D Object Classification 我们的网络学习全局的特征,可以用于目标分类。我们在 ModelNet40 上评估 PointNet 网络。该数据集有12311个手工制作的CAD模型,总共40类,98443个模型用于训练,2468个用于测试。然而,之前的算法都是将原始CAD模型转换为体素或者多视角图像表达,我们是第一个直接处理原始CAD点云模型。根据面片的面积,我们均匀采集1024个点,并且归一化到单位球。在训练过程中,我们对数据进行增强,包括沿着垂直轴随机旋转目标,以及给点添加均值为0,标准差为0.02的高斯噪声。

Table 1 中,我们与之前的模型进行对比,也包括我们的基准模型(在传统的特征上用 MLP 训练),这些传统的特征包括点密度,D2,目标轮廓等。在这些基于点云和体素输入的方法中,我们的模型表现最好。因为仅仅使用全连接层和最大池化层,我们的网络具有更快的推理速度,并且很容易在CPU上并行运算。当然,我们的方法与MVCNN 仍有一些差距,可能是丢失了一些模型的几何细节,但是这些细节刚好能够被多视角图像捕捉。

在这里插入图片描述


在这里插入图片描述
3D Object Part Segmentation Part 相比于分类任务,块分割是一个更加精细的3D识别任务,也具有更大的挑战性。给定一个扫描模型或者网格模型,网络会预测出目标某个部位的分类(比如椅子腿,杯子手柄)等。

我们在来自论文【29】的 ShapeNet Part 数据集上评估,包含16881个形状,总共16类,总共50个Part. 每一个目标类大概标注2-5个Part. 真实标签是在采样点上标注。

我们将 Part分割(Part Segmentation)任务转换为逐点分类问题,评估标准为 IoU 。对于类别C中的每一个shape,计算 IoU 的方式如下:对于类别C中的每一个分块形状,计算真实标签与预测值的 IoU . 如果真实标签与预测点的并集是空的(那么说明,标签和预测的值都是空),那么 IoU 加1(不理解为什么要+1)。 然后,可以计算类别C中的所有 PartIoU的平均值。 整个测试集所有类的平均交并比(mIoUs)也就是计算每一类的 mIoU 的平均值。

  • 如何计算IoU?

    下面是开源代码中【part_seg/test.py】中的代码片段,用于计算一个目标形状的 IoU 值。这里解释下为什么存在并集为空的情况(也就是n_gt值为0),比如椅子类,最大的分块数量是4(统一编号见代码中的注释),但是有的椅子只有其中的任意3个分块,那么可能存在其中一个 oid(分块的编号)值不存在于seg(该椅子的真实分类标签编号)中,那么 n_gt的值为零。

    # 循环一个分类中每一个目标的各个分块(Part),数据集中总共有50个分块,
    # 每一类都有固定的分块编号(也就是块的类别编号),比如椅子最多分为4个
    # 块,编号为【12,13,14,15】	
    for oid in iou_oids:
       n_pred = np.sum(seg_pred_val == oid)
       n_gt = np.sum(seg == oid)
       n_intersect = np.sum(np.int32(seg == oid) * mask)
       n_union = n_pred + n_gt - n_intersect
       iou_log += '_' + str(n_pred)+'_'+str(n_gt)+'_'+str(n_intersect)+'_'+str(n_union)+'_'
       if n_union == 0:
           total_iou += 1
           iou_log += '_1\n'
       else:
           total_iou += n_intersect * 1.0 / n_union
           iou_log += '_'+str(n_intersect * 1.0 / n_union)+'\n'
    
    avg_iou = total_iou / len(iou_oids)
    total_acc_iou += avg_iou
    total_per_cat_iou[cur_gt_label] += avg_iou
    

    上述代码片段的运行结果,椅子的分块编号为 iou_oids【12,13,14,15】,其中一个数据只有分块【12,13,14】,另外只有【12,13,15】,这样计算的并集就为空。
    在这里插入图片描述

    下面的两张图片是来自 ShapeNet Part 的椅子类(Chair),该类别最多被分为4个Part,当然有的椅子是3个Part,有的是4个Part 等等。
    在这里插入图片描述在这里插入图片描述


在这里插入图片描述在这里插入图片描述
在这一部分,我们将自己分割版本的 PointNet 与【27】和【29】(这两个算法充分利用逐点的几何特征和shapes之间的对应关系)对比,以及和我们的 3DCNN 基准。

下图是补充材料给出的 3DCNN 的网络结构:首先输入点云体素化为【32x32x32】的体素块;然后使用3D-CONV,核大小为【5x5x5】,卷积核数量为32个;最后,由于要进行Part分割任务,使用一系列【1x1x1】的卷积核计算每个像素的分类分数。除了最后一层,其它层都有【BN+ReLU】。

在这里插入图片描述

Table2 中,我们计算了每一类和所有类的平均 IoU 分数。与之前的算法相比,我们的算法得到平均2.3%的 IoU 提升,并且我们的网络在大部分类都优于基准方法。对于 ShapeNet Part 中的每一个CAD模型,我们模拟了Kinect的扫描方式,得到测试数据,进而评估算法的稳定性。对于 ShapeNet Part 数据集中的每一个数据,我们使用 Blensor Kinect Simulator模拟器随机从六个不同的视角生成不完整的扫描数据。我们使用完整的shapes和模拟扫描的数据训练PointNet,训练参数设置一样。结果显示,平均IOU降低了5.3%. 在 Fig3 中,我们呈现了定性的结果。从结果可以看出,尽管数据残缺是很有挑战的,但是我们的预测也在合理范围内。

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述在这里插入图片描述

Semantic Segmentation in Scenes 我们的网络很容易从 Part Segmentation 扩展到 Semantic Scene Segmentation 分割任务,只需将每一个点的标签从目标Part类变为语义类。

我们在 Standford 3D Semantic Parsing 数据集上实验。该数据集包含 271 个房间。每个扫描数据的每一个点标注有语义标签,总共 13 类(chair,table,floor,wall等等)。

为了准备训练数据,我们首先按照房间划分点,然后按照【1mx1m】的大小划分每个房间。我们训练了 Segmentation 版本的PointNet,然后在每一个块内预测每一个点的类别。每一个点是个9维向量,包括XYZ,RGB和相对于整个房间的位置(范围为0到1)。训练过程中,我们随机从每一个块中选择4096个点。测试过程中,我们在所有的点上测试。按照论文【1】的方式,我们使用K折交叉验证进行训练和测试。


在这里插入图片描述
我们的方法与基于手工特征的基准算法进行对比。基准算法包含同样的9维局部特征以及另外三个:局部点密度,局部曲率和法线。我们使用标准的MLP作为分类器。Table3 显示,我们的方法明显优于基准算法。Fig4 显示的分割结果表明,我们的网络能够得到平滑的预测结果,对于丢失点和遮挡也有一定的稳定性。

基于语义分割的输出,我们使用连接模块进一步建立了3D目标检测系统(见补充材料)。Table4 中,我们比对了之前的经典算法。之前的算法基于滑动shape算法(CRF后处理),并添加多个SVM。我们的算法明显更优,特别是在家具分类。

在这里插入图片描述


5.2. Architecture Design Analysis

这一部分我们将通过控制实验验证我们的设计选择,并实验测试网络参数的影响。

在这里插入图片描述在这里插入图片描述

Comparison with Alternative Order-invariant Methods 正如 Sec 4.2 提到,至少有三种方法可以处理无序的输入点云。我们使用 ModelNet40 形状分类任务作为测试实验。

Fig5 所示,作为比对的基础算法是将MLP应用在有序输入和无序输入(Nx3数组),RNN将输入点云看作是一个序列,以及基于对称函数的模型。对称性操作包含三种方式, max-poolingaverage-poolingattention based weighted sum. 注意力方法与论文【25】类似,每一个点特征预测一个标量分数,然后使用softmax将所有的分数归一化。基于点特征和归一化分数,可以求权重和(weighted sum) 。如 Fig5 所示,最大池化的效果更好,也验证了我们的选择。

在这里插入图片描述


在这里插入图片描述在这里插入图片描述

Effectiveness of Input and Feature TransformationsTable5 中,我们证明了输入和特征的变换(for alignment)是有意义的。有趣的是,大部分基础结构已经获得了不错的效果。使用输入变换能够提高0.8%. 对于高维特征变换,正则化损失是很有必要的。通过结合变换以及正则化项,我们获得了最好的结果。

在这里插入图片描述

Robustness Test 我们的网络简单,高效,而且对于不同形式的输入点集波动,网络仍能保持很强的稳定性。我们使用 Fig5 中同样的最大池化网络。输入点集被归一化到单位球邻域,结果见 Fig6 .

在这里插入图片描述


在这里插入图片描述在这里插入图片描述
对于缺失点的情况,在最远点和随机采样算法下,当点缺失50%时,精度分别降低2.4%和3.8%. 如果能够在训练中看到,我们的网络对外点非常鲁棒。我们评估了2个模型:(1)每一个点只有(x,y,z)坐标;(2)除了(x,y,z),还有点密度。尽管超过20%的点是外点,网络仍能够达到80%的精度。 Fig6 右边显示了网络对点集波动的稳定性。


5.3. Visualizing PointNet

在这里插入图片描述
Fig7 中,我们可视化了 一些目标形状 S S S 的 critical point sets(关键点集) C S C_S CS 和 upper-bound shapes(上边界形状) N S N_S NS. 那么,处于两个shape之间的点集具有相同的全局形状特征 f ( S ) f(S) f(S).

我们可以清楚地从 Fig7 中看到 critical point sets C S C_S CS,他们有助于形成最大池化特征,表征着形状的骨骼点。而 upper-bound shapes N S N_S NS 表示能够得到同样全局特征 f ( S ) f(S) f(S) 的最大输入点集。 C S C_S CS N S N_S NS 反映了 PointNet 的鲁棒性,意味着丢失一些 non-critical points并不会更改全局特征。

N S N_S NS 产生方式:将边长为2的立方体内的点进行前向推理,并选择那些点函数值 ( h 1 ( p ) , h 2 ( p ) , . . . , h K ( p ) ) (h_1(p),h_2(p),...,h_K(p)) (h1(p),h2(p),...,hK(p)) 的长度不大于全局描述符的点。

在这里插入图片描述


5.4. Time and Space Complexity Analysis

在这里插入图片描述
Table6 给出了 PointNet 分类网络的空间(number of parameters in the network)和时间(floating-point operations/sample)复杂度,并与之前经典网络进行对比。

MVCNN 和 Subvolume(3D CNN)取得更好的效果, PointNet 计算效率更高,并且网络参数更少。而且, PointNet 的扩展性更好,相对于输入点数,时间和空间复杂度是 O ( N ) O(N) O(N)的线性增长。 由于卷积占据大量的计算时间,多视角方法会随着图像数据量和图像尺寸增加而迅速增大。

经验上来说,对于点云分类, PointNet 可以每秒处理100万个点。对于语义分割,每秒可以处理2个房间,GPU为1080X,展现出能够实时处理的潜力。

在这里插入图片描述


6. Conclusion

在这里插入图片描述
在本文工作中,我们提出新的深度神经网络——PointNet ,可以直接处理点云。我们的网络提供了统一的方法,可以处理目标分类,Part分割以及语义分割等3D识别任务,并且取得较好的预测结果,甚至优于一些经典算法。为了进一步理解网络,我们提供了理论分析和可视化。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值