点云网络的论文理解(三)-点云网络的优化 PointNet++的总体说明

总体说明

这个部分是为了让大家可以更好地理解文章

1.以前的网络有什么缺点

  • 1.首先第一点就是论文当中反复提到的没有局部特征的问题。
  • 2.另外一个就是PointNet不具有平移不变性,理解一下这个,PointNet最后是一个maxpooling所以决定是不是选择当前内容的唯一因素是大小,因为除了pooling之外使用的就只有mlp,之前的所有一系列处理其实都可以等价为乘上一个参数,每个的参数可能不同,有正有负,所以最终可能是:以向上平移为例,原坐标变大,结果坐标有的变大有的变小。所以不能保证平移不变性。

2.之后看现在的网络

2.1解决这些问题

从上面的问题出发,需要解决两个问题:

  • 1.没有局部特征这个地方文章中说的比较清楚,就是借鉴卷积网络的成功之处,选择一个圆形的空间,这样就可以获得一个局部区域。
  • 2.之后就是解决平移不变性的问题,我们既然选定了一个小的空间,计算特征的时候,我们直接将坐标系转化成这个小空间的中心不就行了吗?直接在计算特征的时候将这个小空间的点映射到以这个小空间中心为原点的坐标系中,之后计算特征。

接着上面的内容,就有几个新的问题:

  • 1.怎么选定这些中心点?
    当然可以随机选择,但是随机选择的效果并不好。另外就是使用 farthest point sampling (FPS)的效果更好,另外就是这个东西也更能结合数据集的具体特征。
  • 2.选定了这些点,怎么获得这些点周围临近的点?
    K nearest neighbor (kNN) 和固定半径到底选择哪个的问题就出现了。因为knn在很稀疏的区域会取到特别大的范围,不论如何操作,都不能得到很好的结果,所以选择固定半径。
  • 3.这个半径怎么选择?
    因为固定半径存在这样一个问题,就是点云的稀疏程度不同,如果半径很小的话,可能只能获得一两个点的特征,这个特征就很弱,不是最理想的选择,所以我们要根据疏密程度适当地调整半径。所以文章选择在同一个点的位置设置多种半径分别提取信息,这样就可以获得一个新的问题怎么将这些各种大小半径的信息合并。
  • 4.怎么合并各种半径?
    文章选择将他们放入同一个向量当中,并设置DropOut层,这样就可以解决两个问题,模拟一些半径的信息缺失(这个半径圈进来的点过于稀少),然后逼迫网络可以自适应的处理不完全的输入,以此来增加网络的鲁棒性。
    这里的处理我觉得是完全有必要的,因为点云的数据集不是均匀的,有的地方特别密有的地方特别疏,所以我们需要这样来逼迫网络动态适应点云的疏密变化。
    好了信息提取完了,我们现在面对一个新的问题,这个信息我们是以这个空间中心为坐标系中心而得来的,所以我们想要将其放回原图,我们得转化一下怎么转化?
  • 5.怎么合并信息?
    文章给出了一个神奇的方法,直接将获得信息加入到原来网络的后面。就是本身的点坐标有三个维度,提取信息获得6个维度,那么最后就加在一起获得9个维度。这样就相当于用一个高维空间的单个点表示低维空间的几个点的集合。数学上十分合理。
  • 6.怎么优化计算?
    因为我们这里存在一个大的问题就是我们需要独立进行大量的计算,在每一层向下传递的过程中本来每个点只需要计算一个固定范围的点的PointNet,但是经过这里的优化之后,我们就要多次传递(因为多层)。所以需要对计算量做出优化。
    我们可以看到这里a图的是比较简单的情况,就是直接选择不同的区域进行处理,也就是我们上面说的内容,但是b图的情况更好,就是从不同的层提取信息进行合并,在不同的层选取相同大小的区域进行特征提取,这样的话就会导致获得信息其实对应着对底层的不同大小的区域。也就是说理论上这个东西是相同效果的。但是关键在于这个东西重用了很多之前的计算结果,所以计算的时候更快一些。
    点云网络的论文理解(三)-点云网络的优化 PointNet++的总体说明
    文章中提出来的这个应该理解为一种动态规划的思想,尽量重用之前的计算结果。
上一篇:PointNet系列


下一篇:飞桨火力全开,重磅上线3D模型:PointNet++、PointRCNN!