Point-Net
Point-Net 是2017年的CVPR,是3D视觉方向非常经典的入门论文,开创了除体素、多视角外,新的数据处理方法——直接基于点云数据中的点。
论文:PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
1.之前的研究
在直接对点进行操作的方法出现之前,业界大多是对体素或者2D卷积进操作。
1.1 3D 卷积
受2D卷积对于像素操作的启发,因此可以使用3D卷积对点云数据进行卷积,但是体素,忽略了点云数据的稀疏性,而且3D卷积的计算成本非常高。
Volumetric CNNs 是将3D卷积应用于体素化形状的先驱,但是受到了计算成本的限制;FPNN、Vote3D 提出了处理稀疏性问题的相应方法,但是这仍旧是基于体素的模型,因此不能从根本上解决计算量大,数据存在稀疏性的问题。
1.2 采用2D CNN
Multiview CNNs 通过多视图投影将3D数据投影到2D,再使用2D卷积进行处理,这确实能够降低计算量,并且在形状分类和检索任务中取得了卓越的性能,但是难以扩展到场景理解或者其他三维任务(例如 点分类和形状补全)
2.存在的问题
2.1 点云数据的无序性
点云数据是无序的向量集,因此对于N!(假设有N个点,则有N!种排列,即N!种数据)种不同的输入形式,模型的输出应该是不变的。
2.2 刚性变换不变性
如果对于点云数据施加旋转或者平移等操作,点云数据的语义信息应该是不变的。
3.模型实现
3.1 输入顺序不敏感
有三个方法实现不受输入顺序影响:
-
用所有的排列组合输入训练
-
按规范顺序排序
-
使用对称函数汇总信息
在这里对称函数的输入可以是n个向量的任意排列,但是输出不随输入顺序改变,例如加法和乘法就是对称二元函数
。Point-Net选用对称函数来实现对输入顺序不敏感这一特性,具体来讲:对于每一个点采用同一个MLP进行升维,之后采用maxpooling 来实现顺序不敏感。
3.2网络架构
网络结构根据上述思想来实现,先进行多层特征提取处理,之后使用过maxpooling来获取global features。
分类网络直接对全局特征进行MLP,即可获取最后的K个类别。
而语义分割网络则需要结合全局特征和局部特征来实现。具体来说:
- 将n x 64的局部信息和1024的全局信息进行拼接,得到n x 1088 的输出。
- 将拼接后的结果输进MLP,用以降维得到nx128的结果
- 再将nx128的结果输入MLP,得到n x m的输出结果(m是类别数)
4.性能分析对比
4.1 鲁棒性测试
相比于VoxNet,PointNet对于缺失数据有更佳的鲁棒性。
4.2 模型复杂度以及速度分析
- 更稳定: 模型复杂度为O (N)
- 计算成本效率更高: 与MVCNN 和 Subvolume相比(以 FLOPs/样本衡量:分别高出141倍和8倍)
- 参数更少: PointNet 比 MVCNN 更节省空间(参数数量减少了 17 倍)。
根据经验,在 TensorFlow 上使用 1080X GPU 时,PointNet 能够每秒处理 100 多万个点,用于点云分类(约 1K 个对象/秒)或语义分割(约 2 个房间/秒),显示出实时应用的巨大潜力。