[论文解读+复现] PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

时间:2024-03-29 17:07:56

一、摘要

        本文提出了一种结构简单的物体检测与点云分割、语义分析的深度学习网络,网络具有置换不变性,文章最后对网络的鲁棒性做出了解释。

                                         [论文解读+复现] PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

二、介绍

        典型卷积网络需要规则的输入,例如像素和体素,目的是可以共享权重参数(weight),一些研究学者会将点云转化为体素或者图像集再传入神经网络,这会导致数据量变得巨大并造成模糊;为此本文使用简单的统一的结构—点云来进行训练,网络名为:PointNet,但是点云也只是一些点的集合,因此需要满足一些对称性与刚体运动不变性。PointNet可以直接将点云作为输入输出,网络对所有点云统一且独立的做预处理,最开始只传入三坐标,额外的信息可以通过计算法线或者其他本地或全局特征添加。

        PointNet关键是对称变换最大池化层的运用,而且在PointNet处理之前还通过仿射变换来标准化点云来提高处理效果,此外本文还从理论和经验两方面对网络做出了评估,评估表明PointNet可以逼近任何一个连续函数,并且可以根据稀疏点去概括一个点云输入;在多个基准数据集上,PointNet与当前最好的方法相比,速度更快、精度更好、鲁棒性更强,具体工作总结如下:

  • 设计了一个新型深度学习结构可以处理无序点云集
  • 展示网络如何用于三维形状分类、形状分割、场景语义分割
  • 从理论和经验上最方法鲁棒性做出评估
  • 图示网络计算过程

三、相关工作

(这一部分就不多说了,一二十篇文章的引用)

四、问题陈述

        本文如无特殊说明,点云中的点只用三坐标,不使用其他信息例如颜色、法矢,对于识别任务,输入为直接采集到的点云数据,输出k个分数代表k个类别;对于语义分割,输入可以是用于部分区域分割的单个对象,也可以是3D场景中的子个体,模型将输出n×m个分数,代表n个点分别属于m个类(类似概率)。

五、点云的深度学习

1.点云属性

输入点云是欧式空间中的,具有:无序性点之间具有相互作用(只是说点与点之间都不是简单独立的)、刚体变换不变性

2.PointNet结构

[论文解读+复现] PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

        在分类网络中,输入n个点,对输入做特征变换,再进行最大池化输出k个种类;分割网络是分类网络的一个拓展,它考虑了全局和局部的特征以及每个点的输出分数。mlp代表多层感知机,括号中是感知机的层数,批标准化(Batchnorm)本用于所有带有ReLU函数的层,Dropout层被用于分类网络中最后一个多层感知机中。网络的特点有:

  1. 最大池化(对称变换)去合计所有点的信息
  2. 局部和全局特征的连接
  3. 两个联合对准网络用来匹配输入点与特征

        下边分别讨论为什么选用上边三种方法

3.无序输入的对称变换

        为了保证模型输入不变性,有三种方案:简单排序、作为序列输入RNN、使用对称变换聚集点的信息。在高维空间中,简单排序是不能保证稳定性的;RNN对长度几十的序列具有鲁棒性,但是几千几万个点就变得很差;经验来讲,本文用的模型很简单,多层感知机+最大池化

4.局部和全局特征的连接

        在计算了全局点云特征向量之后,通过将全局特征与每个点特征连接起来,将其反馈给每个点特征。然后,我们基于组合的点特 征提取新的每点特征,每点特征既了解本地信息又了解全局信息。

5.联合对准网络

        在softmax训练损失中添加了一个正规化项,将特征变换矩阵约束为接近正交矩阵

六、实验

        首先该网络的分类、语义分割实验结果均达到了当前最佳水平(图表的比较省略),下边是语义分割的结果:

                                 [论文解读+复现] PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

        关于鲁棒性的论证等等一些表格、图像、性质,这里不再进行记录,感兴趣的可以去看看原文

七、论文复现

        先参考这个链接吧:https://blog.csdn.net/pikachu_777/article/details/83541115

        随后我会尝试复现并对代码进行详细解释