PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
PointNet是深度学习应用到点云数据的先驱。在此之前,传统的机器学习方法大多基于点云的手工设计的特征,并使用机器学习模型如SVM。深度学习方法将点云进行体素化形成体素网格并使用3D卷积神经网络,或者将点云经过投影生成多视角的图片,并使用传统的2D卷积神经网络。这些方法将点云数据转换成中间表示(体素网格、图片),造成了数据不必要的增大,同时还会损失点云的几何信息。
PointNet是一个端到端的网络,直接处理原始的点云数据,同时解决了点云的排列不变性和变换不变性问题,在点云的分类、部件分割和场景语义分割的任务上取得了与之前相比最好的性能,为这些任务提供了一个统一的架构,同时能够对点的缺失、点的插入、点的扰动保持一定的鲁棒性。
PointNet的两个关键点是shared mlp 和对称函数。shared mlp单独处理每个点,并且共享权重,对称函数能够保持排列不变性。下面来仔细介绍一些这篇文章。
任务
给定一个3D点云\(\{P_i | i=1,...,n\}\),每个点\(P_i\)是一个它对应的坐标\(\left(x, y, z\right)\)加上它额外的特征如颜色、法向量等等。为了简单清晰地陈述问题,我们就将\(P_i\)简化为他的三维坐标\(\left(x, y, z\right)\)。
对于分类任务,网络要输出一个点云的在数据集上的k个类别上的得分。对于部件分割或场景语义分割,网络要能输出每个点在m个语义子类别的得分,即输出为\(n \times m\)。
点云的性质
- 无序性:点云中的点不像图像中的网格一样规则,其无序性是指无论一个点云中的点以何种顺序排列,对于分类等任务来讲,其结果是一样的。网络对其\(N!\)排列具有不变性。PointNet通过单独处理每个点以及使用对称函数解决了这个问题。
- 点与点之间的相互作用:点云中的点来自一个具有距离度量的空间,每个点不是独立的,临近的点来自一个有意义的子集。也就是说,点云具有局部特征。该问题实际上没有得到解决,PointNet并没有捕获点云的局部特征。
- 变换不变性:作为一个几何物体,无论施加什么样的刚体变换,如平移、旋转所有的点,都不会改变它的类别,每个点所属的类别。PointNet通过T-Net解决了这个问题。
网络结构
上图是该PointNet的网络结构。蓝色框内是用于分类的网络结构,蓝色框内除了最后的mlp,加上黄色框的网络是用于部件分割或或者语义分割的网络。网络中的重点包括T-Net、shared mlp和max pool。
shared mlp和max pool
shared mlp的意思是多层感知机,这个多层感知机特别的地方在于它的权重是对每个点共享的,自然而然,它的实现使用的是大小为1的卷积核,卷积用的是1D卷积。通过对输入的点云的每个点单独地进行维度提升,最后通过一个max pool进行特征聚合。max pool是一个对称函数,对称函数诸如max、min、average等等,其结果对输入序列的顺序保持不变性。而这里之所以用max pool操作是因为通过对比试验,max pool的效果是最好的。这个max pool的操作也是有些特别的,它实际上是对的得到的\(n \times 1024\)这个特征矩阵的第0维求max,得到一个1024维的向量,这个向量就是点云的全局特征。
可以看到,前面的shared mlp是对每个点单独地进行处理,最后max pool操作又能保持排列不变性,因此整个网络能够对点云实现排列不变性。
T-Net
T-Net实际上是一个mini-PointNet,最终的输出是一个与\(channel^{2}\)维的向量,将其通过reshape操作得到\(channel \times channel\)的矩阵,用这个矩阵对输入的每个点或者每个特征进行空间变换,能够保证变换不变性。论文中说的是,通过T-Net,将输入空间或特征空间对齐到基准空间。补充材料中有给出T-Net的结构,下面是自己画的一个图:
通过对特征空间使用T-Net,还需要对最终的损失加上一个正则项:
部件分割网络
部件分割网络中,通过将全局特征重复n次,形成一个\(n \times 1024\)的矩阵,并与之前提取的每个点的特征\(n \times 64\)做一个拼接操作形成一个\(n \times 1088\)的矩阵,用包含了局部特征和全局特征的混合特征做分割,效果会更好。因为分割不仅仅需要全局特征,还需要局部特征。而实际在实验部分,作者得到的最好的结果使用的不是Figure 2的结构,而是下图的结构:

可以看到,该结构将前面多个阶段提取的点的特征与全局特征拼接在一起,并且将该物体所属类别的one-hot编码拼接了进去,形成一个\(n \times 3024\)的矩阵。
实验
本文重点的三个实验包括在ModelNet40上的分类,在ShapeNet上的部件分割,以及在S3DIS上的场景语义分割。除此之外还有一些消融实验,如验证T-Net的作用、PointNet的鲁棒性。
分类

至于为什么没有MVCCN效果好,作者原文中说的是PointNet没有捕捉到精细的几何结构。
部件分割

场景语义分割

T-Net消融实验

鲁棒性实验
