本文亮点:
直接把点云数据作为神经网络的输入,该网络既可以用于分类也可以用于分割。
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。
关键点:
- 最大池化层-------对称函数
文中用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系列详解(一):https://blog.csdn.net/qq_15332903/article/details/80224387
3D分类与分割之PointNet 论文笔记:https://zhuanlan.zhihu.com/p/73086704