前言

常见的3D数据表示方式有点云、多视图、体素、mesh网格等。

深度学习3D网络---PointNet_语言模型

PointNet是直接处理点云数据的网络,可以实现对点云的分类和分割,其首页地址为: http://stanford.edu/~rqi/pointnet/。 主要从解决点云的无序性和保证旋转一致性两个方向出发,提出了以点云作为输入的分类网络和分割网络。

深度学习3D网络---PointNet_3d_02

一、点云存在的两个问题
1、 点序不同排列(无序性)结果应该一致

深度学习3D网络---PointNet_ai_03

可以选择以下几种方式:
方式1. 按照一定规则对点集进行排序
方式2. 将点集的所有排列作为增强数据,训练一个循环网络
方式3. 利用一个对称函数将所有信息进行聚合

方式1看起来最简单,但是在高维空间中,实际上不存在一个在一般意义上相对于点扰动稳定的排序方式,方式2也被证明对于长度小的序列有较好的鲁棒性,但对于动不动上千的点云数据不太合适,因此PointNet采用第三种,以下是不同方式实验对比结果。

深度学习3D网络---PointNet_ai_04

常见的对称函数有取最大、求和等

深度学习3D网络---PointNet_ai_05

PointNet选择采用多层感知机(MLP)和最大池化(Max Pooling)

深度学习3D网络---PointNet_人工智能_06

2、旋转后分类结果一致

要做到旋转的一致性,PointNet引入T-Net得到一个旋转矩阵,对输入特征进行自动对齐。将正则化项添加到我们的softmax训练损失中,即将特征变换矩阵约束为接近正交矩阵(正交变换不会丢失输入中的信息)

深度学习3D网络---PointNet_语言模型_07


深度学习3D网络---PointNet_人工智能_08

实验发现,通过添加正则化项,优化变得更加稳定,并且模型也获得了更好的性能。

深度学习3D网络---PointNet_3d_09

二、网络结构
分类网络

深度学习3D网络---PointNet_深度学习_10

分割网络

深度学习3D网络---PointNet_ai_11

三、实验结果
分类

深度学习3D网络---PointNet_深度学习_12

部件分割

深度学习3D网络---PointNet_3d_13


深度学习3D网络---PointNet_人工智能_14

场景语义解析

深度学习3D网络---PointNet_3d_15

四、其他细节:
Shared MLP

**网络结构中的Shared MLP是什么?**这一点论文中没有提,但从代码实现上来看其将点云变为B * N * 3,采用1*1的一维卷积,其实相当于每个顶点都共用了同一个卷积权重

深度学习3D网络---PointNet_深度学习_16

如下图所示某种程度上是类似于MLP的,因此称为Shared MLP(个人理解,不知道对不对)。

深度学习3D网络---PointNet_深度学习_17

鲁棒性好

PointNet对缺失数据鲁棒性较好,如下图所示,数据下采样至原来的50%,精度值只下降2%, 其中Furthest表示最远点采样,Random表示随机采样。

深度学习3D网络---PointNet_深度学习_18


而VoxNet对缺失数据鲁棒性就很差。

深度学习3D网络---PointNet_ai_19

可视化

可视化显示出哪些点对最后全局特征有影响,输出为Critical Points

深度学习3D网络---PointNet_3d_20


深度学习3D网络---PointNet_语言模型_21

具体操作步骤是输出maxpooling之前的特征N*1024, 然后获取最大值的索引,得到这些索引对应的点即为Critical Points。