三维点云语义分割模型介绍
1 三维深度学习简介
前段时间调试了上海交大卢策吾教授团队提出的PointSIFT模型,也在此过程中阅读了一些三维点云语义分割的深度学习模型,下面对每个模型进行介绍(在文末会有模型对应的论文),并且展示一下我自己调试的PointSIFT模型的运行结果。
1.1 三维数据表达方式
目前用于深度学习的三维数据有如下几种表达方式:
1) 多视角(multi-view):通过多视角二维图片组合为三维物体,此方法将传统CNN应用于多张二维视角的图片,特征被view pooling procedure聚合起来形成三维物体;
2) 体素(volumetric):通过将物体表现为空间中的体素进行类似于二维的三维卷积(例如,卷积核大小为5 x 5 x 5),是规律化的并且易于类比二维的,但同时因为多了一个维度出来,时间和空间复杂度都非常高,目前已经不是主流的方法了;
3) 点云(point clouds):直接将三维点云抛入网络进行训练,数据量小。主要任务有分类、分割以及大场景下语义分割;
4) 非欧式(manifold graph):在流形或图的结构上进行卷积,三维点云可以表现为mesh结构,可以通过点对之间临接关系表现为图的结构。
2 PointNet
2.1 点云的属性
三维空间中的点云存在下面三个主要的属性,文章根据点云的这三个属性提出了对应的三个模型从而解决了直接利用点云进行深度学习存在的问题。
2.1.1 无序性
点云本质上是一长串点(nx3矩阵,其中n是点数)。在几何上,点的顺序不影响它在空间中对整体形状的表示,相同的点云可以由两个完全不同的矩阵表示,如图2.2.1所示。
![](https://i-blog.csdnimg.cn/blog_migrate/031d7e6af50e95c720c879c90ba3f7b6.png)
而实际情况下,不论点云的输入顺序如何,都希望模型能够提取出相同的特征。
2.1.2 关联性
点云中的每个点不是孤立的,点与点之间存在着关联,相邻的许多点可能组成一个具有重要意义的子集,它包含了点云的局部特征。因此希望模型能够捕捉到点与点之间的关联、点云的局部结构从而提取出点云的局部特征。
2.1.3 不变性
相同的点云在空间中经过一定的刚性变化(旋转或平移),点的坐标会发生变化,但是模型进行分类或者语义分割的结果不会发生变化。
2.2 key modules
2.2.1 Symmetry Function for Unordered Input
如2.1所述,为了使模型对相同点云的不同顺序的输出不变,文章中提出了3种方法:1)将不同输入按一定规则排列成统一的顺序;2)将输入的点云当成是一个序列用来训练循环神经网络(RNN),通过改变顺序来增加训练数据,从而使得RNN的输出结果对顺序不变;3)通过一个形式简单的对称函数聚合每个点的信息。第3种方法为作者提出,经验证,第3种方法效果最好,精度可达87.1%。第三种方法如图2.2.1所示。
![](https://i-blog.csdnimg.cn/blog_migrate/022b6f299589f20a6ef0128f2accce1d.png)
第3种方法首先先利用多层神经网络提取每个点的特征(n x c),最后通过对称函数g对C维特征种每一维都选取n个点中对应的最大特征值或特征值总和,这样就可以通过g来解决无序性问题。PointNet采用了max-pooling策略。
2.2.2 Local and Global Information Aggregation
2.2.1中的模型最终输出了一个向量V(维度为1 x C1),它代表输入点云的全局特征,对于分类任务来说,可以采用一个全连接层得出分类结果,但是对于分割任务来说需要结合点云的局部信息和全局信息。
所以在分割任务中,在得到点云的全局特征后,将全局特征和每一个点的特征进行连接,得到一个矩阵(维度为n x(C1+C2)),此时每个点的特征中都包含各自的局部信息和全局信息。
2.2.3 Joint Alignment Network
PointNet通过T-Net这一小型神经网络,通过学习一个C x C的仿射变换矩阵,并在特征提取之前,将这个矩阵和输入进行矩阵运算,将输入变换到一个统一的特征空间中,使得模型的输出结果不会因为点云发生刚性变换后而改变。
2.3 网络结构
PointNet的网络结构如图2.3.1所示。
![](https://i-blog.csdnimg.cn/blog_migrate/ce9479e55f0897b8dbb8331cb75633ba.png)
图中蓝色部分是处理分类任务时的网络,网络直接采用原始点云数据作为输入(n x 3),输出是点云在k个类别上的得分。粉色部分是处理分割任务时的额外网络,输出是每个点在各个类别上的得分(n x m)。
其中,mlp是通过共享权重的卷积实现的,第一层卷积核大小是1 x 3(因为每个点的维度是xyz),之后的每一层卷积核大小都是1 x 1。经过两个空间变换网络和两个mlp之后,对每一个点提取1024维特征,经过max pool变成1x1024的全局特征。再经过一个mlp(代码中运用全连接)得到k个score,分类网络最后接的loss是softmax。
T-net与一般的网络类似,由特征提取层、池化层和全连接层组成。T-net在PointNet中应用了2次,第一次是