[论文阅读]PointNet: Deep Learning on Point Sets for 3D Classfication and Segmentation

PointNet是一个比较经典的将点云输入深度神经网络来进行分割,分类的模型,对于无序化的点云有了自己的处理手段。

Posted by Xuehui Wang on 2019-05-15

Abstract

点云,是一种无序的三维表达方式,之前的方法通常是将点云做变换为规则的3D体素(voxel)或者图像的集合来输入CNN等网络,但作者比较嫌弃之前的方法,因为这些方法很繁琐并且可能会造成某些问题,所以作者提出了直接利用点云的PointNet。实验证明这种方法是高效并且鲁棒的。作者对此作了一些理论分析。

Introduction

PointNet是一个统一性的框架,其直接将点云作为了输入,输出是对整幅图像点云的分类结果,或者对一部分(甚至单个)点云的label标注结果。从论文阐述来看,他们的网络非常简单(论文中说是surprisingly simple)即在最开始的阶段,每一个点云都被独立且给予相同的处理。在最基础的设置中,每一个点云仅需使用它的坐标 $(x, y, z)$ 来表示,当然论文也说可以增加一些更多的维度,比如法向量或者其他的全局or局部的特征,我觉得这是对该模型的一种可拓展性的说明。

论文中说明,PointNet的关键是使用了单对称的函数-最大池化(max pooling)。这使得网络可以有效的学习一系列优化函数,这可以调出感兴趣或者有信息含量的point,然后进行编码。最后网络的全连接层将学到的最优参数聚集在用来预测点云label或者图形的全局的描述子中。

同时,PointNet的输入很容易使用刚体或者仿射变换,因为每一个点云都是单独进行变换的。因此可以增加一个数据独立的空间变换网络,这样可以在PointNet处理前将点云做一个规范化的转换,这样可以提高最终的结果。

论文不仅仅提供了实验测试结果,还做了一些理论分析。最有趣,也是最重要的,实验结果显示PointNet学会了通过一些关键的点云来概括整个输入点云,根据可视化结果这些关键点几乎都对应着目标的大致骨架。之后的理论分析也说明了PointNet为何比较具有鲁棒性,也就是对于输入点云的微小扰动或者一些错误点可以做到抗干扰。

综上所述,这篇论文的contribution有以下几个:

  1. 设计了一个可以应对无序3D点云的深度学习网络框架
  2. 展示了如何来训练这个网络以应对classification以及segmentation问题
  3. 对于方法本身的稳定性以及高效性做了基于经验以及理论上的分析
  4. 对节选的一些神经节点计算出的3D特征做了说明,并且对他的性能做了直觉上的解释

Problem Statement

在本论文中,作者说如果没有特别的说明,仅使用 $(x, y, z)$ 作为每个点云的channel,而不考虑颜色、向量等信息。实际上这些都可以是每一个点(point)的特征量。

对于目标分类这种任务,输入的点云是点云集中采样出来的一个形状区域(比如扣一个长方体出来)或者预先分割出来的一块区域,也就是位置直接给定了,网络负责识别类别即可,Point的输出是对 $k$ 个类别的打分。对于语义分割,输入的点云可以是一个单物体区域,来识别该物体的不同部分,或者是一个三维场景,用来识别不同的物体。输出的就是一个 $n \times m$ 的打分,其中n就是$n$个点云,$m$就是类别。

Deep Learning on Point Sets

Properties of the Point Sets in $\reals^n$

作者说到,PointNet这个想法的主要灵感来源于点云的以下几个性质:

  • 无序。它不像图片的像素或者立方体的体素那样是方方正正规则的排列,点云是一些无特定顺序的点的集合,换句话说,一个网络要来处理点云的话,需要应对 $N!$ 种干扰。
  • 点与点之间是有相互关系的。这些点来源于带有距离度量的一个空间,这意味着这些点不是独立或者说相互隔离的,相邻的点可以构成一个有意义的子集。因此网络需要能够捕捉相近点的局部结构,以及这些局部结构之间组合的相互关系(应该是说这些局部结构如何组合成一个物体)。
  • 应对变换的不变性。作为一个几何物体,学习到点云表达应该对变换具有不变性的特点。比如旋转或者平移等,都不应该改变全局点云的类别以及他们的分割结果。(就是你再咋变换,初心不能变!原来是啥现在就是啥)。

PointNet Architecture

architecture

先看一下PointNet的框架,包含了两个大的部分,一个是分类网络,一个是分割网络。分割网络将n个点云作为输入,然后做输入变换和特征变换,最后使用最大池化得到点云的特征。分割网络是对分类网络的一个拓展,他聚合了全局和局部特征以及每一个点云分数的输出。mlp代表着多层感知机,括号里的数字是每一个layer的size。这样来看,他的框架里包括了一个最大池化作为对称函数来聚合信息,包括一个局部和全局的信息整合模块,包括两个联合对齐网络,可以用来对输入点云和点云特征进行对齐操作。

Sysmetry Function for Unordered Input.

论文阐述为了使得模型对于输入的抖动具有不变性,设置了以下三个策略:

  • 将输入排列为有序的
  • 将输入看做序列来训练RNN,但同时也通过引入不同类型的抖动来增强训练数据
  • 使用一个简单的对称函数来对每一个点云进行信息聚合。

对称函数是指对于向量 $n$ 作为输入然后输出新的向量,且输出是与输入的次序无关的(即不会因为输入次序的不同而产生变化),比如 $+$ 和 $*$ 操作。

随后,论文阐述了在现有的维度空间中,没有很稳定的排序方式。作者认为这也很容易使用矛盾法来证明,即如果这里存在一种排序策略使得高维空间和一个一维的实线相对应的话,如果要求排序方式对于点的扰动是稳定的话就等同于说要求这种对应关系在维度下降的时候依然能够保证空间的近似度,很明显这是不现实的。所以排序并没有解决点云的序列问题,这使得网络很难学习得到一个从输入到输出的一致性映射。

使用RNN来认为点云是一个顺序信号并且寄希望于通过随机排列顺序来训练RNN可能会对输入顺序具有不变性特征。但是在一些文章,有作者证明输入顺序是重要的,无法被忽视。尽管RNN对于一些短的输入序列有相对鲁棒的性能,但是在处理成千上万的点云的时候还是不太行啊。在这篇论文中,作者也证明了RNN的方法不如他们的方法。

论文是通过在变换部分使用一个对称函数来大约估计出一个定义在点集上的通用函数。这个基础的模块非常的简单,作者通过多层感知机来得到 $h$ ,通过一个单变量函数(我觉得应该就是指Relu)和一个最大池化函数的组合来得到 $g$ ,通过不同的 $h$ ,可以学到一系列的 $f$ 来捕捉点集不同的性质。

Local and Global Information Aggregation

通过上一部分后,可以得到一个全局特征的向量 $[f_1,…, f_K]$ ,对于分类任务,可以利用这个向量做SVM或者多层感知机的运算得到分类结果。但对于分割任务,则需要加入一下局部特征。这篇论文利用了一个特别粗鲁的方式,即直接拼接在一起。

在Architecture图中的segmentation network中可以看到,在得到全局点云特征向量 $[1024]$ 后,将其和前边的局部特征 $[n \times 64]$ 拼接在一起得到了一个 $[n \times 1088]$ 大小的综合特征(猜测是将1024拓展为 $n$个1024,然后直接把局部的64加在尾部,这样每个点都是1088个特征,其中1024个都是一样的,剩下64是各自的局部特征),这样这个综合特征就包括了局部信息也包括了全局信息。

这样的改变使得网络可以依赖于局部几何和全局语义预测每一个点的性质。比如可以预测每一个点的向量,这证明了 网络能从点的局部临近点归纳更多信息。在论文的实验中也证明了在图形的分割和场景的分割中获得最好的效果。

Joint Alignment Network

每一个点云的语义标签其实不应该随着对点做几何变换(比如刚体变换)而发生改变的,因此论文的方法也希望对于变换而言最后的表达结果是不变的。

一个想当然的方法就是在做特征提取前把这些输入排列(或者说对齐??)到一个特定且稳定的空间。这个想法来源于在二维图像中通过采样来达到空间变换的目的。

未完待续……



支付宝打赏 微信打赏

赞赏一下