论文《RandLaNet: Efficient Semantic Segmentation of Large-Scale Point Clouds》阅读笔记

论文:https://arxiv.org/pdf/1911.11236.pdf

源码:https://github.com/QingyongHu/RandLA-Net

应用领域:大场景(如室外)的点云语义分割

数据集:

  1. Semantic3D
  2. SemanticKITTI
  3. S3DIS

主要贡献:提出更快的点云语义分割模型。

  1. 对比现有的采样方法,发现随机采样最好。
  2. 为了减小随机采样丢失的信息,提出局部特征采样器,包括 Local Spatial Encoding (LocSE) 和 Attentive Pooling。

  总的来说,这篇论文讲述详实,内容容易理解,简单而又高效。

采样

  作者对比了现有的几种采样方法,包括 PointNet、PointNet++ 等中使用的最远点采样(Farthest Point Sampling,FPS),其计算复杂度为 O(N2)O(N^{2}),处理 N 106N ~ 10^{6} 点云数据需要约 200 秒;逆密度采样(Inverse Density Importance Sampling,IDIS),其计算复杂度为 O(N)O(N),处理等量点云需要约 10 秒;随机采样的计算复杂度为 O(1)O(1),与数据量无关,处理等量点云需要约 0.004 秒;其他基于学习的采样方法或花费更多时间,或有更大的内存需求。

局部特征聚集

  随机采样会丢失部分有用的信息,所以在丢失这些信息之前,先把信息收集起来。这部分可分为三步:局部空间编码(Local Spatial Encoding,LocSe)、下采样(Attentive Pooling) 和 残差模块。如图1所示。
论文《RandLaNet: Efficient Semantic Segmentation of Large-Scale Point Clouds》阅读笔记

局部特征编码

  输入数据为 N×(3+d)N \times (3+d) 的点云数据,其中 33 为点的空间坐标 (x,y,z)(x,y,z)dd 为点的特征 ff,可以是点云原始特征,也可以是通过前一网络层获得的特征。

  1. 与大部分处理点云的方法一样,先找到每个点的邻域,使用 K 近邻方法(K-Nearset Neighbouts,KNN)。
  2. 针对每一个点,编码其邻域中所有 k 个点的三维坐标,即 (x,y,z)(x,y,z)。用 pip_{i} 表示某中心点,pikp^{k}_{i} 表示其邻域点,那么通过如下公式可得到新的坐标编码:

rik=MLP(pipik(pipik)pipik) r^{k}_{i} = MLP(p_{i} \oplus p^{k}_{i} \oplus (p_{i} - p^{k}_{i}) \oplus \Vert p_{i} - p^{k}_{i} \Vert)

其中,\oplus 表示级联运算,\Vert \cdot \Vert 为二范式。
3. 将 rikr^{k}_{i} 与点原有的特征 fikf^{k}_{i} 级联得到增强的特征 f^ik\hat{f}^{k}_{i}

下采样

  1. 计算每个特征的得分,其作用类似于掩码。定义函数 g()g() 是一个参数共享的多层感知机(MLP)和 softmax,WW为 MLP 的可学习权重,那么掩码为:

sik=g(f^ik,W) s^{k}_{i} = g(\hat{f}^{k}_{i}, W)

  1. 通过掩码去掉不重要的特征:

f~i=k=1K(f^iksik) \tilde{f}_{i} = \sum_{k=1}^{K}(\hat{f}^{k}_{i} \cdot s^{k}_{i})

残差模块

  参考 ResNet,用局部特征聚集和下采样搭建了残差模块。作者认为一个残差块中有两个由局部特征聚集和下采样组成的单元是合适的。

性能

论文《RandLaNet: Efficient Semantic Segmentation of Large-Scale Point Clouds》阅读笔记