PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
PointNet:三维分类与分割中点集的深度学习
论文地址:https://arxiv.org/pdf/1612.00593.pdf
代码地址:https://github.com/ModelBunker/PointNet-TensorFlow
解决的问题
前人将这些三维数据转换为规则的三维体素网格或图像集合(例如,视图),然后将其输入到深网体系结构中。然而,这种数据表示转换使生成的数据变得巨大,同时也引入了量化伪影,从而掩盖了数据的自然不变性
原理
点云数据的三大特征:无序性、稀疏性、信息量有限。
欧式空间里的点云特征(PointNet的灵感来源):
无序性:虽然输入的点云是有顺序的,但是显然这个顺序不应当影响结果。
点之间的交互:每个点不是独立的,而是与其周围的一些点共同蕴含了一些信息,因而模型应当能够抓住局部的结构和局部之间的交互。
变换不变性:比如点云整体的旋转和平移不应该影响它的分类或者分割
PointNet网络直接将点云作为输入,并为整个输入输出类标签,或者为输入的每个点输出每个点的部分标签。输入为三通道点云数据(xi,yi,zi),也可以有额外的通道比如颜色、法向量等,输出整体的类别/每个点所处的部分/每个点的类别。
对于分类任务,输出为k个分数,分别对应k个可能的类别。
对于语义分割任务,输出n×m个分数,分别对应n个点相对于m各类别的分数。
以上,方法的关键是使用单一的对称函数max pooling。网络有效地学习了一组优化函数,这些函数选择了点云中有信息的点,并对其选择的原因进行了编码。网络的最终完全连接层将这些学习到的最优值聚合为上述整个形状的全局描述符(形状分类),或用于预测每点标签(形状分段)。
其中,mlp是通过共享权重的卷积实现的,第一层卷积核大小是1x3(因为每个点的维度是xyz),之后的每一层卷积核大小都是1x1。即特征提取层只是把每个点连接起来而已。经过两个空间变换网络和两个mlp之后,对每一个点提取1024维特征,经过maxpool变成1x1024的全局特征。再经过一个mlp(代码中运用全连接)得到k个score。分类网络最后接的loss是softmax
创新点
(1)空间变换网络解决旋转问题:三维的STN可以通过学习点云本身的位姿信息学习到一个最有利于网络进行分类或分割的DxD旋转矩阵(D代表特征维度,pointnet中D采用3和64)。至于其中的原理,我的理解是,通过控制最后的loss来对变换矩阵进行调整,pointnet并不关心最后真正做了什么变换,只要有利于最后的结果都可以。pointnet采用了两次STN(空间变换网络),第一次input transform是对空间中点云进行调整,直观上理解是旋转出一个更有利于分类或分割的角度,比如把物体转到正面;第二次feature transform是对提取出的64维特征进行对齐,即在特征层面对点云进行变换。
(2)maxpooling解决无序性问题:网络对每个点进行了一定程度的特征提取之后,maxpooling可以对点云的整体提取出global feature。
优点
在模型Net40上的分类结果本文的网络在3D输入的深网中达到了最先进的水平。
缺点
PointNet使用对称函数整合全局信息,解决点的无序性问题,然而从单点使用mlp的特征提取,到max pooling进行全局特征整合,最终得到的特征,都只是从一个点上提取的,没有考虑点和点之间的相关性特征。
实验结果
在数据集ModelNet40上的分类结果:
同时由于参数少,训练快,属于轻量级网络。
鲁棒性实验:
当PointNet缺失了60%左右的点的时候,其网络的效果都不怎么减少:
临界点和上界形状可视化:
阅读论文发现,能够最大程度激活网络的点都是物体的主干点(下图第二行),将其上采样,很容易能得到原始的结构。因此这就是PointNet网络的缺失鲁棒性的来源
部分分割结果可视化
语义分割的定性结果
实现秩序不变性的三种途径,实验结果表明Maxpooling结果最好