Model abstract
RandLA-Net是一个有效且轻便的能够很好的识别每一个点的语义的运用在大规模点云上的网络。
RandLA-Net优势:
- 计算速度快,在Semantic KITTI数据集上Pointnet++为2.4s,SPG为10.8s而RandLA只需要0.04s。
Random Sampling 优势:
- 拥有显著的计算效率而且对于点云中的所有点来讲它是不可见的
- 不需要额外的存储空间
Motivation
当前的很多语义分割算法需要很昂贵并且很大计算量的预处理过程,而且大多数的现有模型只能在小规模的点云上进行运算。
具体来说,目前的模型主要采用的采样方式是最远点采样(farthest point sampling)和逆密度采样(inverse density sampling)而这两种采样方式限制了模型所能使用的点云规模,也是让模型运算速度的瓶颈,因此提出了random sampling来打破这个瓶颈。
Key-point
模型的关键是使用随机采样(random sampling)来替代更为复杂的选择点的方法。
但是随机采样有几率会丢失具有关键信息的节点特征。
解决方法:采用了一个局部特征聚合的模型来逐渐提高每一个3D点的感受域,这样能够有效的保存点云的几何细节。
如图所示,采样过程通过不断使用多个LA模块来逐渐提高每个中心点的感受域,使得中心点可以聚集到更多的局部几何结构信息。
Related Work
Related Model
-
SPG 将大规模的点云预处理成super graph 在使用神经网络去学习super-point的分割。
-
FCPN和PCT将体素和点层面的网络连接在一起来处理大量的点云。
Types of Sampling
Heuristic Sampling
-
Farthest Point Sampling (FPS): 计算复杂度为 O ( N 2 ) O(N^2) O(N2)对于大规模的点云( N > 1 0 6 N>10^6 N>106)FPS的计算时间要超过200s
-
Inverse Density Importance Sampling (IDIS): 记录全体点的密度并对其进行排序,从上往下取出 K K K个点作为sample,计算复杂度为 O ( N ) O(N) O(N)
这里插一个知识点,为什么计算复杂度是 O ( N ) O(N) O(N)。如果采用对所有点的密度进行排序之后取出其中密度最大的K个点的话,计算复杂度为 O ( N l o g N ) O(NlogN) O(NlogN)但是这里我们不需要完全排序,只需要找到第K大的数,然后取出所有大于K的数即可。
这种算法运用了快速排序的思想。对于快速排序来讲,每一次都会确定一个值在最终排序完成数组中的位置,所以如果当前的值确定的位置为k,那它就是第k大的数,如果当前值得位置大于k,那说明第k大的数在其左侧(从大到小排),只需要递归的运用这个方法即可,最后的时间复杂度最好平均为 O ( N ) O(N) O(N)
Learning-based Sampling
- Generator-based Sampling (GS): 学习产生一小组点来近似代表整个点云,但是这个方法往往需要FPS生成的点云来比较并且产生损失函数,所以总体运算很慢
- Continuous Relaxation based Sampling (CRS): 每一个采样的点都通过对于所有点赋予一个权重之后产生采样点。
- Policy Gradient based Sampling (PGS): 学习到点的概率分布来采样,但是搜索域过大,所以在面对大规模点云的时候效果不好。
Challenges
C1:需要一个高效的点云采样方法来将大规模的点云downsample到能够在给出的GPU中运行。
R1:采用random sampling
C2: 需要有效的局部特征学习模型来逐渐提升感受域的规模以达到保存复杂的几何结构的效果。
Architecture
Local Spatial Encoding(LocSE)
Input:
点云P中一个点(中心点)以及该点邻近的K个点的坐标以及特征
Steps:
- Finding Neighbouring Points:对于第i个点,利用K-nearest neighbours(KNN)算法来确定离其最近的K个点,KNN中对于最近的判断基于两点之间的欧氏距离。
- Relative Point Position Encoding: 对于每一个中心点 p i p_i pi的最领近的K个点 p i 1 . . . p i k . . . p i K {p_i^1...p_i^k...p_i^K} pi1...pik...piK我们用下面这种方法来对其的位置进行Encode
r i k = M L P ( p i ⊕ p i k ⊕ ( p i − p i k ) ⊕ ∣ ∣ p i − p i k ∣ ∣ ) r_i^k=MLP(p_i\oplus p_i^k\oplus (p_i-p_i^k)\oplus ||p_i-p_i^k||) rik=MLP(pi⊕pik⊕(pi−pik)⊕∣∣pi−pik∣∣)
其中 p i p_i pi和 p i k p_i^k pik表示的是点的xyz坐标, ⊕ \oplus ⊕表示的是concatenation(这里的意思是将维度进行拼接,np.concatenation()), ∣ ∣ . ∣ ∣ ||.|| ∣∣.∣∣表示的 是计算相邻点到中心点的距离。从这里看来 r i k r_i^k rik的生成非常的冗长,但是根据实验结果来看这种生成方式可以很好的学习到局部特征
- Point Feature Augmentation:如图所示,将每个点的特征和前一个步骤编码产生的 r i k r_i^k rik拼接在一起。
Output:
中心点一个新的邻接的特征 F i = { f i 1 . . . f i k . . . f i K } F_i=\{f_i^1...f_i^k...f_i^K\} Fi={fi1...fik...fiK}。该特征给中心点 p i p_i pi编码了局部的几何特征。
Function:
显著的学习到点云的局部几何特征,而这最终对整个网络学习复杂的局部结构信息起到有益作用。
Attentive Pooling
Input:
LocSE的输出
Steps:
- Computing Attention Scores:对于局部特征 F i = { f i 1 . . . f i k . . . f i K } F_i=\{f_i^1...f_i^k...f_i^K\} Fi={fi1...fik...fiK}模型设计了一个函数 g ( f i k , W ) g(f_i^k,W) g(fik,W)来学习到每一个特征的注意力得分,这个函数由MLP+softmax组成.
- Weighted Summation:学习到的注意力矩阵可以作为mask矩阵来选取重要的特征,其中计算公式为
f
i
=
∑
k
=
1
K
(
f
~
i
k
.
s
i
k
)
f_i=\sum_{k=1}^K(\tilde f_i^k.s_i^k)
fi=∑k=1K(f~ik.sik)
- 最后将产生的 ( K , 2 d ) (K,2d) (K,2d)维度的特征聚合起来过一个共享权重的全连接层变为 ( 1 , d ′ ) (1,d^{\prime}) (1,d′)作为中心点的特征。
Output:
中心点的聚合了局部特征产生的特征向量,维度为 ( 1 , d ′ ) (1,d^{\prime}) (1,d′)。
Dilated Residual Block
通过多个LocSE和Attentive Pooling层加上skip connection来组成
Thinking
-
这篇论文所用的方法和PointNet++最大的区别就是,为了聚合局部信息,PointNet++在点云采样的时候尽量均匀的在点云中划分中心点进行采样,这样不容易错失关键位置的信息,同时也通过划分合适的采样半径来尽可能的覆盖整个点云并保留局部几何信息。但是这样采样的方法在面对大规模点云的时候计算速度很慢,所以无法在大规模点云中运用。
-
RandLA其实想法和PointNet++类似,但是它的巧妙之处就在于它很清楚在大规模点云中选取合适数量和位置的中心点是一个计算量很大的事情,因此它干脆将每一个点都当做中心点,每个点都把周围的点的信息聚合到自己身上。同时根据随机采样在整个点云中采样出来点应该符合正态分布的原理,直接采用随机采样。这样采样的速度就可以大大的加快。
于它很清楚在大规模点云中选取合适数量和位置的中心点是一个计算量很大的事情,因此它干脆将每一个点都当做中心点,每个点都把周围的点的信息聚合到自己身上。同时根据随机采样在整个点云中采样出来点应该符合正态分布的原理,直接采用随机采样。这样采样的速度就可以大大的加快。