论文阅读:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

论文名称:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

主要内容
本文利用点云的无序性和旋转不变性,提出了一个深度网络,直接将点云的(x,y,z)坐标作为输入,根据网络结构的不同可以完成分类、目标部分分割和场景分割任务。

解决的问题
神经网络通常处理的数据都是有规范格式的,例如图片,文本信息。然而点云作为一种不规范的、无序数据,通常转化为以下几种形式再输入网络:

1 栅格(体素)
转化为规范形状的栅格,用0或1表示是否存在物体。栅格单元小则充斥大量0数据,栅格单元大则丢失很多特征信息。

2 2D图像
将3D点云映射为2D图像,利用2D神经网络进行分类。丢失大量特征信息。

3 Mesh
由三角面片和正方形面片组成。

4 向量特征
从3D点云提取向量特征,然后用全连接网络进行分类。丢失大量信息。

本文的思想是直接利用3D点云的原始数据,x,y,z和其他信息(本文只利用了坐标信息)作为网络输入,在不丢失任何信息的情况下取得了较好的性能。

方法

点云的无序性:

3D点云可以表示为一个n×3的矩阵,它代表的信息和矩阵中每个点所处的矩阵位置无关,因此利用对称函数处理3D点云。
论文阅读:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
例如加法和乘法都是对称函数。这里采用全局最大池化作为对称函数。然而n3矩阵应用全局最大池化得到的13的特征向量丢失了很多信息,因此本文提出先将原始的n*3点云经过MLP(实际上就是一维卷积)映射到高维空间,这时候就存在大量的冗余信息,此时再利用全局最大池化就能减少特征损失。

旋转不变性:

物体的点云坐标跟选取的坐标系有关,将点云旋转则得到不同的点坐标,但是它代表的物体是不应当改变的,因此任意角度的旋转不应当改变网络对点云的处理结果。
这一点很好解决,点云用n*3的矩阵表示,那么只需要学习到一个旋转矩阵,再用这个旋转矩阵和点云矩阵相乘就得到了不变的结果,因此本文引入一个T-Net网络去学习点云的旋转矩阵。
论文阅读:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
网络的总体架构如图所示,首先对输入数据进行坐标旋转,然后利用一维卷积扩展到高维空间,类似的,对于高维特征也应用一个坐标旋转,再进行维度扩展。扩展后的点云特征利用对称函数(全局最大池化)得到点云的全局特征,最后在这个特征的基础上完成目标分类。

如果扩展为场景分割,需要将全局特征和之前得到的每个点的高维特征相结合,就是简单的拼接起来,再利用神经网络进行类别打分。

结论
目标分类:
论文阅读:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
目标部分分割:
论文阅读:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
场景分割:
论文阅读:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
3D目标检测:
论文阅读:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
鲁棒性实验:
论文阅读:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

应用:

除了提到的分类、场景分割等,此算法还可以应用到3D目标检测上。

问题
对称函数的使用使得网络提取的是所有点的特征,没办法捕获相邻点之间的依赖关系,因此场景分割的效果并不是很好。