目录
一、PointNet讲解
1.1 Point Cloud
1.2 Previous Work
1.3 Our Work
1.4 NetWork
1.5 Results
1.6 PointNet的缺陷
二、PointNet ++
2.1 PointNet++的核心思想
2.2 原理介绍
2.3 多级网络
2.4 局部区域尺寸的选择
2.5 Results
前言:本文主要讲了PointNet和PointNet++网络,该文是整理了一下PointNet 的作者Qi在youtube分享视频,它将这两个网络用简单易懂的语言来做了
详细的介绍。
一、PointNet讲解
1.1 Point Cloud
通过深度传感器和传统的方式得到的都是点云数据。
优势:Mesh需要设置面片;栅格体素化需要设置分辨率;而点云就不需要。
1.2 Previous Work
(1) 3D CNN
将点云数据转化为栅格数据,三维的conv复杂度很高(空间和时间),所以很多人都用低的分辨率,就会限制了精确度。分辨率很高的时候,就会导致有很多空格的情况。
(2) 投影转化到2D,然后使用2D CNN,这样会损失一些三维的信息,还需要考虑投影的角度,这个问题很难。
(3) 手工特征提取之后,使用全连接网络。但是这种被手工提取的特征约束住了。
1.3 Our Work
将输入点云,进行端到端的处理。避免了上述的问题。
(1)满足置换的不变性
每个点云有D个特征描述,最少的是三个特征,每个点的(x,y,z),还有颜色等等信息。比如PFH、FPFH等等都是代表点云的特征。
【1】做对称操作(这不是传统意义上的对称)可以满足置换型,就是求最大值,取平均,求和操作,使点的顺序无论怎么变换,最后得到的结果都是相同的,但是这么做会损失点的很多关键信息。
【1.1】求最大值,我们可以发现这肯定会损失大量的关键信息。下图我们可以发现这一点。
【1.2 PointNet的提出】所以我们可以首先把这个点映射到高纬度空间,然后在更高维上进行max来完成对称操作,这样就避免了损失信息;更高维空间很容易是冗余的空间,这样这不会损失信息。
最后我们通过 r 来消化这个对称的g,来得到新的点云特征,防止损失。这便是原始的PointNet结构。
如果g是对称的,则整个结构是对称的。
MLP是多层感知机,max是最大值池化效果最好。
【1.3 】hausdorff上具有连续性,则这个PointNet结构是非常稳定的。
(2) 视角的变换:
【1】基于数据变化的模块,通过T-Net得到一个变换参数,然后把原始数据进行变换得到新的数据。这样做易于计算。
【2】也可以对其他位置的数据进行数据变换。希望的到的矩阵是一个接近于正交矩阵。
1.4 网络层次:
【1】分类网络
(1)输入的点云数据[n x 3]进行矩阵变换操作。可以得到易于计算的数据(n x 3)。
(2)把得到的变换后数据投影到64维空间中去,得到(n x 64)的数据。
(3)把得到的高维数据再次进行矩阵变换操作,得到(n x 64)的变换数据。
(4)再次把高纬度变换后的数据投影到更高维的1024空间中去,得到(n x 1024)的数据。
(5)进行最大池化的操作,得到全局特征为(1 x 1024)的数据
(6)然后经过mlp操作,以及全连接层的处理,并且各层均会使用BN和ReLU进行处理,以加快网络训练速度和防止过拟合等。最后,得到k个分数,k个分类,这就完成了网络的分类。
【2】分割网络:
把全局特征和局部特征进行融合到一块,就是判断局部的特征点在全局特征中属于哪一类,就把它分到哪一类去,就完成了点云分割。
(1)使融合的数据(n x 1088)进行一次mlp(512,256,128)操作之后,得到的新的点云特征(n x 128).
(2)使得到的新的点云特征再次进行mlp(128,m)操作之后,可以把对应的点云划分到m个特征去。
1.5 Results
【3】与其他网络的分类结果的相比,可以发现我们的准确度有了很大的提升。
【2】分割效果如下
【3】局部分割的效果也是挺好的
【4】节约了大量的空间和减少了大量的计算量。
【5】对数据的丢失十分鲁棒。
原因是:只要关键点保存,就可以分类正确,所以对于点的丢失十分鲁棒。
1.6 PointNet的缺陷:
3D CNN因为有卷积操作,所以有平移不变性。
(1)PointNet其是将点投影到高维空间中去,然后最大池化,所以其要么对一个点进行处理,要么对所有点进行处理,导致其没有局部的概念,所以很难对精细的特征进行学习,分割具有局限性。
(2)不具有平移不变性,因为对对云的(x,y,z)进行平移,此时进行的池化操作就很有可能发生变化。
由于这些原因,提出了PointNet++.
二、 PointNet ++
2.1 PointNet++的基本思想
在局部区域迭代性的去使用PointNet,在小区域使用PointNet生成新的点,新的点又生成新的点集,新的点集中又可以定义新的小区域,从而实现了多级特征学习;因为在区域中可以使用局部坐标系,索引可以达到平移不变性;又因为仍然使用PointNet,点顺序无关,所以可以实现置换不变性。
2.2 实现原理
(1)先找到局部区域,把小区域的点转换到局部坐标系。
(2)对局部的点使用PointNet,来提取局部特征。
(3)最后小区域的就会得到一个点,这个点包括原来点的位置,和一个高维特征向量F。
(4)按照这种方式,我们会得到一组新的点。
这被称为点云简化。
2.3 多级网络
点越来越少,但每个点代表的区域越来越大。
【1】用它来做分类。
【2】用它作为分割网络。
2.4 局部区域的大小选择
在CNN中,选择尽可能小的Kernel。但是在本文中,这不一定。
【1】在密集的点云中,这个是没有问题的,但是在稀疏的点云中,却很难提取到有用的特征,取得太小就不太好了。
【2】可以发现PointNet++更容易因为尺寸受到影响。
【3】使用MSR和MRG后的,PointNet++受到的影响就很小。
2.5 Results
【1】全局场景的分割
【2】局部场景的分割
【3】PointNet++可以扩展到任意的尺度空间。其灵活性很好。
三 使用PointNet的场景理解
四 之前的工作
三维物体的识别