Pointnet++ _语义分割实践(一)

数据集:Scannet

数据集包含xyz和label信息,并不包含颜色信息。

一共1513个采集场景数据(每个场景中点数不一样),其中,1201个场景用于训练,312个场景用于测试。

这里的每一个场景8192点是一个样本,跟pointnet中单位平方4096点为一样本不同。

(注:github上回答s3dis数据集直接用于pointnet++的效果可能并不好的问题,说可能是s3dis采用的9通道信息,后六个通道占主要特征导致的,建议采用前三个通道! what???待测)

理论部分

Pointnet++ _语义分割实践(一)_第1张图片

这就是pointe++的核心结构图了。

pointe++提出的目的:改善pointnet没有很好地捕获局部特征的问题。

我们可以把网络分为前端+后端,前端为特征提取层,后端按功能分为分类模块和分割模块。(这里主要讲语义分割模块)

特征提取层

特征提取层的每个小块的组成:sampling(采样层:质心)--> grouping(分组层)--> pointnet(局部特征提取)

  1. 采样层:主要是为了质心点的选取,采用的是 FPS算法,即最远点采样。这里的质心点的个数是固定的,可能有重复点。
  2. 分组层:为了克服常常在同一密度上训练而实际点集密度分布不均匀的情况,提出通过多尺度的方法实现自适应的特征提取,这里包括SSG(单尺度)、MSG(多尺度同一级,说计算成本很高)、MRG(多尺度不同级)三种方式。
  3. pointnet:pointnet++在采样和分组后采用类似于pointnet几个特征层嵌入到网络中,分级式网络结构就是在这里体现的。

       Pointnet++ _语义分割实践(一)_第2张图片          Pointnet++ _语义分割实践(一)_第3张图片

  • figure 3:
    • MSG(左边):不同半径的区域的特征连接在一起,附近的点数是固定的,由随机采样得到的;但计算成本很高,所以提出MRG;
    • MRG(右边):不同网络级中综合不同半径的信号;根据当前局部密,上级特征和这级特征分以不同的权重:当前局部密度比较小,上一级(右侧)的权重比较大;当前局部密度比较大时,这一级(左侧)的权重比较大。 

:以上的多尺度方式的分组层并没有开源代码,仅开源了SSG单尺度的代码。

SSG:每一层球查询的质心点数逐渐减少,半径逐渐增大,附近点一直是32个。TiTAN XP上训练约7个小时。

  • figure 5:
    • 不同方式在均匀和不均匀的场景数据集上的准确率的比较;MSG、MRG鲁棒性更强。
    • DP:means random input dropout during training,均匀点随机丢失;(其它??)

你可能感兴趣的:(点云,深度学习,点云,深度学习)