这张图片出自于论文:Deep Learning for 3D Point Clouds: A Survey
论文地址:https://arxiv.org/abs/1912.12033
一、Abstract
RandLA-Net是基于point-wise MLP的方法。特点:之前的方法只要运用于小规模的点云语义分割,此方法可以运用在大规模点云的语义分割上面。
创新点主要是:
1、采取了随机点取样,而不是更复杂的点选择方法(比如pointnet++使用的是最远距离取样fps),可以使计算复杂度和内存效率变得显著。
2.引入了一种新的局部特征聚合模块,逐步增加每个三维点的接受域,从而有效地保留几何细节。
最后实验证明:RandLA-Net可以一次处理100万个点,比现有的方法快200倍。此外,RandLA-Net在两个大规模的基准测试、语义三维和语义kitti上明显超过了最先进的语义分割方法。
二、网络部分结构
Local Feature Aggregation模块
Local Feature Aggregation主要由局部空间编码(Local Spatial Encoding)以及注意池化层(Attentive Pooling)和残差块(Dilated Residual Block)三个模块所组成
1.Local Spatial Encoding
输入N个点云数据,点云的特征是3+d,3代表x,y,z三维空间信息,d代表其他特征,比如(RGB信息,或者其他中间可学习的特征变量),这样就可以知道它们的相对空间位置。这允许LocSE模块明确地观察局部几何模式,从而最终使整个网络能够有效地学习复杂的局部结构。LocSE主要有如下几个步骤:KNN算法可以参考这篇博客:https://www.cnblogs.com/pinard/p/6061661.html
1.1寻找最近邻点
比如对于第i个点Pi,使用基于欧式距离的KNN算法收集与之相邻的k-1个点,然后使用对这收集的总共k个点进行位置编码,编码公式如下:
pi代表第i个点,pik 代表与i相邻的第k个点,它们都采用的是x,y,z坐标信息,⊕ 为连接操作,
将上述得到的相对位置编码rik,与与之对应的fik连结,得到形状为(k,2d)的特征增强向量
2.Attentive Pooling
之前的工作大多用最大池化和平均池化,这样会导致大部分信息丢失。此网络使用注意力机制来学习重要的局部特征。
2.1计算注意力分数
通过共享的g()函数,来学习每一个特征值的注意力分数,是上面得到的局部特征集,
W是可学习的MLP的权重参数。
2.2计算加权
计算局部特征与之相对应的注意力分数的乘积,得到每个点各个维度特征的特征加权值,张量的size为(k,2d)然后对所有点的同一维度求和(也就是对每一列求和),形状变为(1,2d)经过MLP使得形状变为(1,)。
对于每一个输入点都进行如上的操这样(N,3+d)的点云将得到一组(N,)的特征向量。
Dilated Residual Block模块
该模块使用堆叠的两组LocSE和Attentive pooling模块作为残差块,然后进行残差连接组成了Dilated Residual Block 模块,该模块能够有效的增加感受野。如图
经过两次LocSE和Attentive pooling模块,使得点的感受野变大(虚线圈表示感受野),从第一次L/A模块的感受k个点,到第二次扩大了个点。
该模块的流程为:
输入(N,)尺寸的点云,经过共享MLP变为(N,C),然后将点云的空间信息x,y,z抽取出来(N,3)做LocSE模块,进行寻找最邻点和特征增强,得到(N,)。然后做一次Attentive pooling 模块输出为(N, /2),重复上面的操作再来一次,略有不同的是第二次Attentive pooling 模块输出为(N,),经过共享MLP变化为(N,2)。将这个张量与初始的点云特征x经过的共享MLP变化尺度为(N,2),使之形状匹配,进行残差连接操作。最终该模块输出
(N,2)的局部点云特征
三、网络总体架构
该网络采用encoder-decoder的架构
3.1网络输入
输入的点云(N,)N为点云数量,为点云特征维度,在S3DIS和Semantic 3D中采用的是(N,X-Y-Z-R-G-B)的输入。
3.2Enconding Layer
采用四个enconding layer 层用来减少点云的数量,而增加点云的特征维度,每个enconding layer 包括了随机取样RS和局部特征提取LFA(local feature aggregation)。在enconding层之前进行了一次FC(全连接层)使得特征维度变为8。
点云在encoding layer层以4倍的倍率进行下采样,经过4层encoding layer层使得将点云数量变化为
N--N/4--N/16--N/64--N/256 ,而特征维度变化为 8--32--128--256--512。
3.3Decoding Layer
解码层中对于每一层,先用KNN找到每个点的最近邻点然后通过最近邻插值对点特征集进行上采样,然后将上采样的特征与编码层对应维度的中间特征图连接起来,最后经过一个共享MLP。
经过四次decoding layer 上采样到维度为(N,8)
3.3语义分割预测
最后接全连接层,特征维度从8--64--32--nclass,其中还有dropout操作,dropout率为0.5,
最终得到每个点都有对应的标签完成语义分割,最终输出的维度为(N,nclass)