PointNet 可以称得上是直接对未经加工的点云(Point Cloud)数据进行处理的鼻祖文章。PointNet++是PointNet的升级版。下面分别对点云、PointNet和PointNet++逐一介绍。

一、点云

点云是通过测量仪器得到的产品外观表面的点数据集合。
  点云是几何数据处理的一种重要类型,包含有三维坐标(XYZ)、激光反射强度(Intensity)和颜色信息(RGB)等。它本身是不规则的,是非结构化数据,所以要想用点云数据来训练深度学习网络,首要问题就是数据输入格式。因为深度学习网络需要格式统一的输入数据。
  目前,将点云数据规则化主要有以下两种方式:
    1、三维体素网格法(3D Voxel Grids)。将 3D 空间划分成多个很小的体素,然后求出在同一体素内的3D点的中心点作为该体素内的唯一 一个 3D 点,通过这样达到下采样目的。它可以理解为类似于二维卷积的三维卷积,但是时间复杂度和空间复杂度很高。
    2、图像集法(或多视野法)。把三维模型变成多视野的二维图像,然后就可以直接用一些二维算子去处理,然后再将提取出的特征用池化 (Pooling)操作聚合起来,形成三维物体。
  不过,将点云做规则化转换后,数据会变得冗长,CNN 处理起来很慢,不得不妥协到较低的分辨率。而低分辨率又会造成量化伪影(Quantization Artifacts,原本被扫描物体并不存在而在图像上却出现的各种形态的影像)。
  点云是无序的。把 N 个点放到矩阵中,无论点是按什么顺序存放,表示的都是同一个点云。所以处理点云需要做到排列不变性,对表示同一点云的不同矩阵都给出一样的输出结果。2017 年之前,针对无序点云数据的深度学习方法研究进展缓慢,直到 2017 年出现可以直接处理点云数据的网络 PointNet。

二、PointNet网络

【论文笔记】PointNet和PointNet++
  PointNet可以称得上是直接处理点云数据的鼻祖。PointNet 使用了依靠数据的空间转换网络(Data-dependent Spatial Transformer Network),在点云数据输入 PointNet 之前对它们进行规范化。PointNet 学会了用一组稀疏的关键点来概括输入点云。这些关键点可以大致对应上可视化的三维物体骨架。论文分析了点云的三个特性,并提出了对策。
  
  1、无序性。
  描述:从数据结构的角度考虑,点云就是一组无序的向量。对于包含 N 个 3D 点的点云,处理点云的网络需要对 N!种输入排列给出一样的结果。
  对策:针对点云的无序性,PointNet 采用对称函数来解决。比如 ????(????1,????2) = ????1 + ????2,互换????1,????2不影响结果。论文中采用的对称函数如下,
【论文笔记】PointNet和PointNet++
  h 是由多层感知机(Multi-layer Perceptron,MLP)实现的,g 由一个单参数函数和最大值池化函数组成。通过一组 h,可以得到很多 f,用来捕捉点云的不同全局特性。然后再使用 SVM 或者 MLP 就可以训练分类模型。
  
  2、关联性。
  描述:点不是孤立的,每个点与其附近的点形成了有意义的子点集。所以,网络模型需要从邻近点中捕捉到局部结构,以及局部结构之间的拼接信息。
  对策:语义分割既需要全局信息,也需要局部信息。论文中的解决方法是,得到点云的全局特性后,将全局特性反馈给每个点,与原本的点特性结合,然后再根据结合后的点特性提取出新的点特性。这样每个点的特性就把局部信息和全局信息都包含了。
  
  3、转换不变性。
  描述:对点云数据的表示,要对某些转换具有不变性。如,同时对所有点进行旋转和平移,不应该影响到总体的点云分类和分割结果。
  对策:模型需要对刚性变换具有不变性。最自然想到的方法就是在特征提取之前,先将所有的输入集进行规范化空间对齐。这很类似于二维图像处理里的图像配准。论文提出一个迷你网络 T-net 来拟合仿射变换矩阵,并对输入点的坐标进行仿射变换。T-net 由独立点特征提取模块、池化层、全连接层等基本模块组成。

三、PointNet++网络

【论文笔记】PointNet和PointNet++
  PointNet++是 PointNet 的升级版,是一个层次神经网络。它递归地将 PointNet 应用于输入点云的嵌套分区。PointNet 的基本思想是学习一种对每个点的空间编码,然后聚合所有的独立点特征成为一个全局点云特征。PointNet 的设计架构使得它不能捕获点云所处度量空间的局部结构,从而限制了它进行细粒度识别的能力和对复杂场景的泛化能力。
  PointNet++的基本思想是,通过利用空间距离度量,随着上下文规模的增加学习局部特征。PointNet++首先根据空间距离度量将点集划分为重叠的局部区域。然后,PointNet++从小邻域中提取局部特征来捕获好的几何结构;这些局部特征进一步被分组成更大的单元,并被处理以产生更高层次的特征。重复这个过程直至得到整个点集的特征。
  实际应用中,点集通常是以不同的密度采样的,这使得在均匀密度下训练的网络性能大大降低。所以作者提出了新的网络层来自适应地结合不同规模的特征。PointNet++在训练过程中,对输入点集随机丢弃,从而使网络学会自适应地对不同尺度模式进行加权,并根据输入数据组合多尺度特征。
  PointNet++需要解决以下两个问题:
  1、如何生成点集的分区?
  论文方案:每个分区被定义为欧几里得空间的一个邻域球,其参数包括质心位置和尺度。为了均匀地覆盖整个集合,在输入点集中通过最远点采样 (FPS)算法选择质心。
  2、如何通过局部特征学习器来抽象一组点或局部特征?
  论文方案:采用 PointNet 作为局部特征学习器。PointNet 能够有效处理无序点集进行语义特征提取,并且很健壮,对输入数据损坏等都能很好的处理, 而且它可以将局部点或特征集抽象为更高层次的表示。

四、总结

PointNet、PointNet++及其扩展
  PointNet独立处理点云数据中的每个点来实现排列不变性(Permutation Invariance),忽略了点之间的局部特征。许多基于PointNet的后续研究都考虑到邻近点来使得网络获取局部特征,但是大都在局部区域独立处理每个点以保证排列不变性。这种处理方式忽视了点之间的几何关系,会对捕捉局部特征设下限制。PointNet++尝试通过局部应用PointNet的方式来获取局部结构。
  DGCNN是在PointNet和PointNet++的基础上进行的扩展研究,详细信息可以看我的另一篇博客《【论文笔记】DGCNN:Dynamic Graph CNN for Learning on Point Clouds》

相关文章: