脑瓜子嗡嗡的小刘炼丹之路—PointNet论文解析
小刘最近摸鱼的时候,看了一篇关于point (点云,目前在自动驾驶,激光雷达中用的蛮多的)的paper,感觉非常好玩,然后就在这里唠嗑一哈论文!虽然论文是2017年的,但是想一下VGG现在不都还用的蛮好的嘛,经得住时间考验嘛。部门的这边大哥说,PointNet非常的简单,也确实就maxpooling,还有T-net()。emmmmm~~~ 读论文嘛,一千个读者,就有一千个哈姆雷特啦。哈哈哈,因此每个人的理解也是不同的啦!!!芜湖,✈!(我这里可能有点translate那味,有什么不对的,希望各位大佬指正~记得悄咪咪的发§(* ̄▽ ̄*)§)
前言(Preface)
PointNet的由来是Charles R. Qi* & Hao Su* & Kaichun Mo & Leonidas J. Guibas ,在2017年发表的研究3D的paper: 《PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation》 。其中PointNet的基本思想,学习其输入点云(point)的每一个点对应的空间编码,之后再利用所有点的特征,得到一个全局的点云特征,并且基于均匀采样的点云进行训练。
1、未考虑局部特征的处理,只使用了全局特征;
2、在实际的场景中,point的疏密程度不同,因此在实测效果准确率较低;
(这些在PointNet++中有所改善)
摘要(Abstract)
1、通常的做法:将数据转换为规则的三维体素网格(3D voxels)或者图像集合(collections of images)。
2、paper中直接提出一种新型的直接消耗点云的神经网络。
(传统的在数据庞大的情况下,会很鸡肋。在paper中提出的新网络,避免了网格的组合不规则和复杂性,因此更容易学习,并且网络更为简单。)
1、介绍(Introduction)
1、主要介绍了如何使用DL去推理3D几何数据,Traditional CNN需要高度同一的数据格式,以便于优化内核和共享权值。而point是不同的格式,在输入网络结构之前,需要转换为regular 3D voxel grids 或 collections of images (这样数据会complex,并且掩盖数据的不变量)。
2、综上所述,作者就提出了一个PointNet的网络结构,其避免了不规则性和复杂性,因此更加的容易去学习。而因为point是简单的数据结构,并且为点集中的一员,所有在计算的时候,也需要考虑点云的不规则性、无序性和刚性不变性等问题。
3、PointNet直接以点云为输入,输出则为label,在网络架构上,PointNet非常的简单,开始每一个点都是被单独的处理,后网络会学习感兴趣点,并encoding,在最后几层的全连接(FC layers)层,则将这些的信息综合作为全局特征。PointNet在基本设置中,每个点仅由它的三个坐标(x,y,z)表示。其他额外的维度,可以通过计算法线和其他局部或全局的功能补充。
4、PointNet关键只是使用了maxpooling(在实验的时候作者似乎做了sum pooling 和average pooling),以及有效的网络学习的一组优化的功能/标准,最后就是FC层。
PointNet-task如下图:

6、主要是讲述其在PointNet论文中作者主要做出的贡献,以及网络的优势。概括如下:
1) 进行了理论和实验的分析,证明了PointNet能够连续的逼近,任何连续行数;
2) 该网络学会采用稀疏关键的来进行分类;
3) 对于小的干扰以及离群点,其都有较好的鲁班性;
4) 在许多的dataset上进行分类、分割、语义效果都较好,并且泛化能力好等特点。
然后后面就是作者完成的贡献,这一部分就不介绍了,哈哈哈哈,反正就是能往好的写就往好的写。写论文通式!(✿◕‿◕✿)
2、相关工作(Related Work)
1、点云特征(Point Cloud Features)
1) 无序性:一团点云数据中有很多个点数据,这些点在点云文件里无论以什么顺序出现,它们指代的信息并不改变,因此,PointNet使用对称函数—maxpooling,来提取点云中的数据特征。
2)不变性:就是在某些编码如刚性变换后,其基本的特征(shape)不会发生改变。paper在进行特征提取之前,先对点云数据进行对齐来保证不变性。通过训练一个小型的网络得到一个旋转矩阵,用这个矩阵与点云数据相乘来实现对齐操作。
2、DL在3D上的运用
paper 中介绍了5中方法:
①、Volumetric CNNs:第一个提出来的,但是数据稀疏计算能力不强导致该种方法的像素精确度并不是很好。
②、FPNN and Vote3D:解决了稀疏性问题,但是还有稀疏性问题,处理起来大的点云依然捉襟见肘。
③、Multiview CNNs:将3D转到2D,再用2D去做卷积,但是在某些特点的task上差人强意。
④、Spectral CNNs:对mesh应用光谱CNN,但是只能用在流形mesh上面比如有机对象,对于一些非等距的物体比如家具就不是很适合。
⑤、Feature-based DNNs:第一次把3D的数据特征格式转化成一个向量,然后用一个全连接层对其分类,但是我们认为这种方法受限于这些特征数据的表达力度。
3、问题陈述(Problem Statement)
PointNet输入为一个没有做处理的point数据,许多点组成了一个集合,每一个用特征向量来表示,其可以描述为(x,y,z)和一个颜色通道等信息。但是文章只使用了(x,y,z)这三个信息。
对于分类任务来说,输入的点云要么从形状中采样,要么就是从场景点云中分割,最后的输出就是k个score。对于语义分割,输入可以是用于部分区域分割的单个对象,也可以是来自三维场景的用于对象区域分割的子集。而这种输入就是为n个点和m个语义,输出得分为n*m。
4、点集在深度学习上(Deep Learning on Point Sets)
先了解的一下这里的 R {R} R 代表什么, R {R} R :实数域。对任意一个正整数n,实数的n元组的全体构成了 R {R} R 上的一个n维向量空间,用 R n {R}^{n} Rn 表示,有时候称为实数坐标。理解为欧氏空间了,单纯的认为是空间坐标系啦,n为维度。详细的,大哥们可以看一下欧几里得空间。
4.1、 R n {R}^{n} Rn 中点集的性质(Properties of Point Sets in R n {R}^{n} Rn )
①点集的无序性
②点之间的相互作用
③刚性不变性
这些在前面都介绍过了,①③在这里就不重复介绍了。②:这些点来自具有距离度量的空间,因此每个点都不是孤立的,每个相邻的点构成了子集,在计算的过程中需要考虑局部结果的相互作用。
4.2、PointNet网络结构(PointNet Architecture)
1、其输入为一帧的全部点云数据,表示为n*3的二维tensor,n代表着 点云的数量,3为(X,Y,Z)空间坐标;
2、输入数据先通过和一个T-Net学习到的转换矩阵矩阵对齐(这个我看别人的博客说他的作用不大),这样保证了模型对特定空间的不变性;
3、通过多次MLP对点云进行特征提取,再用一个T-net来对其对齐。(T-Net是Input Transformer network & feature transform的部分,它的任务是产生一个仿射变换矩阵,然后利用这个矩阵进行矩阵变化);
4、将得到的各个维度上特征输入maxpooling层,得到最终的全局特征(global feature);
5、对分类(Classification)任务、将全局特征通过MLP来预测最后的分类分数;
6、对分割任务,将全局特征和之前学习到的各点云的局部特征进行串联,在通过MLP(多层感知网络)得到每个数据的分类结果。
pointnet网络架构,如下图:


4.2.1、如何处理无序性(Symmetry Function for Unordered Input)
paper主要提出了3点:
1、将输入排序规范,但是会存在w.r.t扰动(这里的w.r.t我也不知道是什么,失策!);
2、将输入作为序列,先对数据进行增强(将所有的刚性考虑到),再输入RNN中;
3、设计一个对称函数(maxpooling),将所有的点通过这个平衡函数聚合起来,其输入为n个点输出为一个与输入顺序相同的新向量(不变性)。
作者表示虽然RNN在较小序列的输入排序下,具有较强的鲁棒性,但是千条以上的数据,会影响性能,因此作者采用了第三种方式,通过MLP(多层感知机:multi-layer perceptron network)学习得到h,再用单变量函数(single variable function) 和maxpooling来得到g,通过不同的h,可以学习得到表征不同属性的多个f。
PointNet采用的是maxpooling。

X:point中的某个点,h:特征提取层,g:对称方法,γ:更高维度特征提取
4.2.2、聚合局部与全局信息(Local and Global Information Aggregation)
作者在paper中写道,对上述的输出向量 [f1,...,fK],可以直接采用svm和MLP来对全局特征进行分类,但是对于point分割问题,就需要结合局部和全局特征的组合来。paper中的做法是,将全部级联在每个点的局部特征后面。在此基础上再学习得到新的点局部特征,这每个点特征知道局部和全局信息了。
4.2.3、联合对齐网络(Joint Alignment Network)
不论point如何变换下,作者希望point set学得到的东西还保留着语义label信息,是不变的。paper中提出了两种方法:
1)