天天看点

pointNet++创新点

目录

    • 描述3D物理世界的几种方式
    • 单层级特征学习组件
      • 采样
      • 分组
      • PointNet提取特征
      • 小结
    • 在不同的点云的采样密度下进行鲁棒的特征学习
    • 点云分割
    • 总结

描述3D物理世界的几种方式

  • 体素结构

    可以看成一个一个的立方体格子搭建起来的3D世界,比如《我的世界》游戏中,所有的物体包括建筑物、树木、人物、锤子等都是由一个一个的小立方格子按照一定的方式组合起来的。与图像类似,4k的分辨率看起来会比2k的分辨率要清晰很多,如果这个最小的小立方格子太大,就会让人感觉画面非常粗糙,很多细节丢失。

  • multi-view
  • mesh
  • pointcloud

单层级特征学习组件

pointNet++的特征学习由以下几个步骤组成:采样,分组,对每组利用pointNet网络提取特征。

采样

问题:假设由n个点,需要从这n个点中提出m个点,使得这m个点彼此之间相距尽可能远。

方法:

随机选择一个点作为初始点放入集合C中
while len(C) < m:
	遍历所有点,找到离集合中所有点最远的一个点,加入集合中。
           

分组

问题:对于集合C中的每一个点,需要找到最近的K个点以便后面pointNet能学习到以这个点为中的周围局部的特征。

方法:

  1. KNN

    使用欧式距离找到离这个点最近的K个点。

  2. 球体寻找

    固定一个半径,得到一个以这个点为中心的球体,把球体内的所有的点视为这个点的近邻。这样得到的近邻数量会不一致。但是不影响其作为pointNet的输入。

PointNet提取特征

将每一个组(共m个)都输入到PointNet中去,得到m个特征(m个向量)。输入进PointNet之前,需要先将每个组的坐标做个小变换:将原点都变成采样步骤中得到的那个点。

小结

总而言之,经过这个部分的操作后,输入为

n*d

的张量,输出为

m*d'

的张量,其中,

m<n,d'>d

在不同的点云的采样密度下进行鲁棒的特征学习

问题:我们的模型需要对不同密度的点云具有足够的泛化能力。由于采集设备的差异,我们得到的点云数据会具有不同的密度。比如,对同一个目标,64线的激光雷达采集到的点一定要比128线激光雷达采集到的点要稀疏。

方法:

  1. Multi-Scale grouping(MSG)

    一个简单的方式是对于输入的点云中的每个点(实际上是部分点,比如95%的点,这样防止得到空的点集),都以一定的概率 t h e t a theta theta舍去。这样因 t h e t a theta theta的不同,就会得到不同密度的点云。对不同密度的点云都是用上面提及的单层级特征学习组件提取特征,再做concat,这样通过反向传播就可以学习对不同密度的点云具有鲁棒性的特征。

    由于这种方式相当于是重复进行好几次特征提取操作,因此比较耗时。从后面的实验效果来看,这种方式比下一种准确率更好一些。

  2. Multi-resolution grouping(MRG)

    对于输入为

    n*d

    的点云,使用单层级特征学习组件提取特征得到

    m*d'

    的张量1,对于这个张量1,再次使用特征学习组件提取特征,得到

    q*d_2

    的张量2,其中

    n>m>q,d<d'<d_2

    。张量1和张量2就分别代表不同密度的点云提取到的特征向量。然后将这两个向量concat起来,当然,由于尺度不一样,需要对张量2进行上采样,变成

    m*d_2

    ,再做concat。

点云分割

点云分割实际上就是给点云中的每一个点分配一个类别(一个向量,向量中最大值所对应的类别即为点的类别)。因此,类似二维图像中的FCN网络,这里插值操作进行上采样。这样,经过两次上采样操作和concat操作后,就会得到

n*(d'+d_2)

的张量,再用一个1*1卷积得到

n*K

的张量,这里K指类别。

总结

相比于pointnet,pointnet++的主要贡献可以分为两部分:

  1. 通过采样+分组+pointnet组合方式提取全局特征和局部特征,得到了更加鲁棒的特征表达。
  2. 考虑了不同密度的点云的分割,并设计了两种有效的解决方式MSG和MRG。

继续阅读