PointNet:Deep Learning on Point Sets for 3D Classificatiion and Segmentation

本文亮点:

直接把点云数据作为神经网络的输入,该网络既可以用于分类也可以用于分割。

1,通过空间变换网络解决旋转不变问题。

2,利用maxpooling作为对称函数解决点云无序问题。

一,点云数据存在的问题

(1)无序性

     点云本质上是一长串点(nx3矩阵,其中n是点数)。在几何上,点的顺序不影响它在空间中对整体形状的表示。因此,在提取点云特征时需要对无序数据做处理,使其对不同排列数据都有相同结果。

  (2)旋转性

     相同的点云在空间中经过一定的刚性变化(旋转或平移),坐标发生变化。

   (3)点间的相互联系(Interaction among points)

      各点间不是孤立的。

二,PointNet网络结构

  • 输入为一帧的全部点云数据的集合,表示为一个nx3的2d tensor,其中n代表点云数量,3对应xyz坐标
  • 输入的数据首先经过一次空间转换,从而对空间中点云进行调整;直观上理解是旋转出一个更有利于分类或分割的角度,比如把物体转到正面;第二次是在特征层面上的空间变化,对64维特征进行对齐。

通过mlp提取点云特征。其中,mlp是通过共享权重的卷积实现的,第一层卷积核大小是1x3(因为每个点的维度是xyz),之后的每一层卷积核大小都是1x1。即特征提取层只是把每个点连接起来而已。经过两个空间变换网络和两个mlp之后,对每一个点提取1024维特征,经过maxpool变成1x1024的全局特征。再经过一个mlp(代码中运用全连接)得到k个score。分类网络最后接的loss是softmax。

关键点:

  1. 最大池化层-------对称函数      

文中用maxpooling作为sysmmetry function,处理无序的点云数据。也就是说,无论输入数据顺序如何,输出的结果的不会改变。

为什么maxpooling可以用做对称函数呢?

 

 

如上述公式所表示的,h表示特征提取层,即通过前面mlp多层感知机获得。通过不同的h,可以习得表征不同属性的多个f。g表示对称函数也就是文章中的maxpooling。最后的D维特征对每一维都选取N个点中对应的最大特征值或特征值总和,这样就可以通过g来解决无序性问题。

通过不同的h(x)可以获得不同点的特征,比如颜色。不同点的颜色是不同的,用maxpooling将不同点的颜色特征综合,从而获得全局特征。

2,Local and Global Information Aggregation

通过maxpooling获得的全局特征可以用于分类;然而,要做点云分割还需要有局部特征,因此将获得的1*1024为特征和局部特征nx64相结合就可以获得局部和全局特征,用于分割。

3,Joint Alignment Network(联合对其网络)

用来对齐输入的点和点特征,来解决旋转不变性。为了保证变换下的不变性,需要选对点云数据进行对齐操作。

对齐操作是通过训练一个小型网络T-Net来获得变换矩阵,经过统一的变换,原本无序的点就相当一变换到了一个统一的空间里。

不足之处:

论文中的操作都是对单个点云的操作,可能导致提取特征的能力较弱

参考:

三维深度学习之pointnet系列详解(一):http://www.javashuo.com/article/p-hrqbxepb-kz.html

3D分类与分割之PointNet 论文笔记:https://zhuanlan.zhihu.com/p/73086704