文章信息
标题:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
作者:Charles Ruizhongtai Qi et.al 文章主页
来源:arXiv:1612.00593
代码:官方(tf) / Pytorch
实现任务
点云特征
点云数据是在欧式空间下的点的一个子集,它具有以下三个特征:
1、无序
点云数据是一个集合,对数据的顺序是不敏感的。这就意味这处理点云数据的模型需要对数据的不同排列保持不变性。因此,我们需要设计一个函数,使得函数值与输入数据的顺序无关。
目前文献中使用的方法包括将无序的数据重排序、用数据的所有排列进行数据增强然后使用RNN模型、用对称函数来保证排列不变性。
由于第三种方式的简洁性且容易在模型中实现,本文选择使用第三种方式,既使用max pooling这个对称函数来提取点云数据的特征。
2、点与点之间的空间关系。
一个物体通常由特定空间内的一定数量的点云构成,也就是说这些点云之间存在空间关系。
为了能有效利用这种空间关系,本文提出了将局部特征和全局特征进行串联的方式来聚合信息。
3、转换不变性。
点云数据所代表的目标对某些空间转换应该具有不变性,如旋转和平移。
本文提出了在进行特征提取之前,先对点云数据进行对齐的方式来保证不变性。对齐操作是通过训练一个小型的网络来得到转换矩阵,并将之和输入点云数据相乘来实现。
框架
输入:点云(x,y,z)
输出:一张图的类别标签(K个分数), 输入的每个点的分割/部分标签(n x m,n个点,m个分割子类)
关键结构:
(对应点云的三个特征)
- max pooling作为对称函数聚合信息
- 一个局部和全局信息组合结构
- 两个联合对齐网络:T-net作为仿射变换矩阵
PointNet关键流程介绍如下:
1、输入为一帧的全部点云数据的集合,表示为一个nx3的2d tensor,其中n代表点云数量,3对应xyz坐标。
2、输入数据先通过和一个T-Net学习到的转换矩阵相乘来对齐,保证了模型的对特定空间转换的不变性。
3、通过多次mlp对各点云数据进行特征提取后,再用一个T-Net对特征进行对齐。
4、在特征的各个维度上执行maxpooling操作来得到最终的全局特征。
5、对分类任务,将全局特征通过mlp来预测最后的分类分数;对分割任务,将全局特征和之前学习到的各点云的局部特征进行串联,再通过mlp得到每个数据点的分类结果。
数据集
-
ModelNet40 分类
包含40类物体的12311个CAD模型,训练集:9843,测试集:2468。
-
ShapeNet part data set 物体零件分割
包含16个类别的16,881个形状,总共50个零件。大多数对象类别都有2-5部分。gt标注在形状的采样点上。
-
Stanford 3D semantic parsing data set 室内场景语义分割
包含来自Matterport扫描仪的3D扫描,分布在6个区域,包括271个房间,13个类别。
训练集:根据房间分割成1m x 1m(9个值:XYZ、RGB、在场景中的归一化坐标),每个block含4096个点
测试集:所有点
k-fold策略
实验结果
分类:
分割:
对数据的鲁棒性:
时间和空间复杂度:
论文作者问答
Q:输入的原始三维点云数据需要做归一化吗?
A:和其他网络的输入一样,输入点云数据需要做零均值的归一化,这样才能保证比较好的实验性能。
Q:深层神经网络处理三维离散点云的难点在哪里?PointNet是如何解决这些难点的?
A:深度神经网络处理三维离散点云数据的难点主要在于点云的无序性和输入维度变化。在本篇文章中,我使用了深度神经网络中的常用对称函数——Max Pooling 来解决无序性问题,使用共享网络参数的方式来处理输入维度的变化,取得了比较好的效果。
Q:是否可以使用RNN/LSTM来处理三维点云数据?
A:RNN/LSTM可以处理序列数据,可以是时间序列也可以是空间序列。因此从输入输出的角度来讲,他们可以用来处理三维点云数据。但是点云数据是无序的,这种点和点之间的先后输入顺序并没有规律,因此直接使用RNN/LSTM效果不会太好。
Q:T-Net在网络结构中起的本质作用是什么?需要预训练吗?
A:T-Net 是一个预测特征空间变换矩阵的子网络,它从输入数据中学习出与特征空间维度一致的变换矩阵,然后用这个变换矩阵与原始数据向乘,实现对输入特征空间的变换操作,使得后续的每一个点都与输入数据中的每一个点都有关系。通过这样的数据融合,实现对原始点云数据包含特征的逐级抽象。
Q:PointNet 与 MVCNN 的实验结果比较中,有些指标稍差,背后的原因是什么?
A:PointNet提取的是每一个独立的点的特征描述以及全局点云特征的描述,并没有考虑到点的局部特征和结构约束,因此与MVCNN相比,在局部特征描述方面能力稍弱。面对这样的问题,我们基于PointNet已经做了一些改进和提升,新的网络命名为 PointNet++。
论文不足
Pointnet的大部分或说几乎全部的处理都是针对单个采样点的,无论提取多么精细的feature,都是针对某一个采样点的。而整合所有采样点特征的网络只有max pooling,甚至连可训练的变量都没有。因此,网络对模型局部信息的提取能力远不如卷积神经网络来的那么solid。
参考
[1] https://zhuanlan.zhihu.com/p/44809266
[2] https://yq.aliyun.com/articles/176867
[3] 作者的讲解 可以看看,会有很大的收获