零、概要
- 论文: RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds
- tag:
CVPR 2020
;Segmentation
- 代码: https://github.com/QingyongHu/RandLA-Net
- 作者: Qingyong Hu, Bo Yang, Linhai Xie, Stefano Rosa, Yulan Guo, Zhihua Wang, Niki Trigoni, Andrew Markham
- 机构: University of Oxford, Sun Yat-sen University, National University of Defense Technology
- 笔者整理了一个最近几年150多篇点云的论文列表,欢迎大家一块学习交流。
论文研究了大规模点云有效的语义分割方法。大多数现有的方法,由于耗时的采样技术和计算量大的前/后处理步骤,只能在小规模点云上训练和操作。论文中提出了RandLA网络,一种高效、轻量级的神经网络架构,用于直接对大规模点云进行逐点语义预测。论文方法的关键是使用随机点抽样,而不是复杂的采样方式。尽管随机抽样有显著的计算和内存效率,但也会偶尔丢弃一些关键特征。为了克服这一问题,作者引入了一个新的局部特征聚合(local feature aggregation)的模块,来逐步增加每个3D点的感受野,从而有效保留了集合细节。大量的实验表明,RandLA网络可以在一次操作中除了100万个点,比现有方法快200多倍。而且,RandLA网络在两个大规模基准数据集Semantic3D和SemanticKITTI上明显优于最先进的语义分割方法。
一、论文的出发点和贡献
对大规模3D点云进行有效地语义分割是实现实时智能系统(自动驾驶、增强现实等)的一项基本且必不可少的能力。一个关键的挑战是深度传感器采集的元素点云通常是不规则的、非结构化的、无序的。最近几年已有不少基于学习的点云工作被提出,但存在以下问题:
- PointNet网络学习了每个点的特征和全局特征,虽然在计算上是有效的,但其忽略的局部特征
- 一些考虑局部特征的网络,如基于neighbouring feature pooling(PointNet++, PointWeb等), graph passing(DGCNN, ClusterNet等), kernel-based convolution(PointConv, KPConv等)和attention-based(PCAN, PATs等)的方法,随机在分类和语义分割等任务上取得了令人印象深刻的结果,但几乎这些方法都局限于非常小规模(~4000 points或者1m x 1m 的block)的点云,不能直接扩展到大的点云(百万点或者200m x 200m):
- 上述网络中的点云下采样方法(FPS, IDIS等)存在计算开销大或者内存效率低等
- 大多数局部特征学习器依赖于计算昂贵的kernelisation或者graph construction, 无法处理大点云
- 现有的局部特征学习器由于感受野有限,无法捕捉到复杂的结构
- 一些用于处理大规模点云的方法SPG, FCPN, PCT等方法虽然可以达到相当高的分割精度,但是其预处理和体素化的步骤计算量太大,无法用于实时应用程序。
论文的贡献:
- 分析和比较了现有的采样方法,确定随机采样是在大规模点云上进行有效学习的最合适的组成部分。
- 提出了一个有效的局部特征聚合(local feature aggregation)模块,通过逐步增加每个点的感受野来保持复杂的局部结构
- 在多个大规模的基准测试(benchmarks)中证明了,相对于baselines有显著的内存和计算增益,并超过了最先进的语义分割方法。
论文提出的RandLA网络是一种内存和计算效率高的神经网络,它能够一次直接处理大规模3D点云,而不需要预处理或者后处理步骤,如体素化、块分割和图构造等; 同时,在两个大规模基准数据集Semantic3D和SemanticKITTI上明显优于最先进的语义分割方法。
二、论文的方法
2.1 下采样
论文中提出的下采样方法就是随机下采样:从原始的N个点中均匀的选取K个点。到此,论文下采样方法介绍完毕。
当然,这里的重点是作者在理论和经验上分析了一下现有下采样方法存在的问题。现有的下采样方法大致被分成两类:启发式下采样和基于学习的下采样。
- 启发式下采样
- Fathest Point Sampling(FPS),收敛好,时间复杂度O(N^2), N为点云的数量。在处理10^个点时,在GPU上大约需要200s。
- Inverse Density Importance Sampling(IDIS): 为了从N个点中选择K个点,IDIS算法根据每个点的密度对N个点进行重排序,然后选择Top K个点。时间复杂度近似为O(N)[论文是这么写的,还没有太明白为什么是O(N),排序依据是O(NlogN)了]。根据经验表明,处理10^6个点需要10s,对于实时系统仍旧太慢;而且它对噪声多更加敏感。
- Random Sampling(RS): 从原始的N个点中均匀的选取K个点。时间复杂度O(1),与输入总点数无关,即时间常数。在处理10^个点时需要0.004s。
- 基于学习的下采样(下面的三个方法对应的论文我也没有细读过,在这里只介绍RandLA网络中提及的缺点)
- Generator-based Sampling(GS): 在推理阶段,为了使学习到的子集与原始集合相匹配,通常使用FPS算法,增加了计算量。从10^6个点采样10%需要1200s。
- Continuous Relaxation based Sampling(CRS): 当用一次矩阵乘法同时对所有新点进行采样时,会导致一个较大的权重矩阵,从而导致无法负担的内存开销。据估计,需要300GB以上的内存对10^6个点采样到10%。
- Policy Gradient based Sampling(PGS): 作者通过经验发现,将PGS用于大型点云,则网络很难收敛。
从而可以看到,随机抽样计算效率高(time),而且不需要额外的内存进行计算(memory)。因此,作者得出结论,与现有方案相比,随机抽样是迄今为止处理大规模点云最合适的方法。
随机抽样有缺点吗 ??
有的,随机抽样会导致需要有用的点特征被丢弃。为了克服这个问题,作者提出了一个强大的局部特征聚合模块,这也就是下一章节要介绍的内容。
2.2 局部特征聚合(Local Feature Aggregation)
局部特征聚合模块对每个点进行提取特征,它包括以下三个模块:local spatial encoding(locSE), attention pooling和dilated residual block, 如Figure3所示。
-
Local Spatial Encoding(LocSE)
LocSE模块主要是对位置(x, y, z)的编码。如Figure3的左上角所示,该模块的输入是 N x (3 + d)的向量P,N表示有N个点,3表示(x, y, z)信息,d表示每个点特征的维度。以N个点中的第i个点为例,说明此模块是如何处理的。设第i个点的位置信息为 p i ∈ R 3 p_i \in \mathbb R^3 pi∈R3, 特征信息为 f i ∈ R d f_i \in \mathbb R^d fi∈Rd。
首先对i个点进行K近邻搜索,得到K个紧邻点的位置信息 { p i 1 . . . p i k . . . p i K } \lbrace p_i^1...p_i^k...p_i^K \rbrace {pi1...pik...piK}和特征信息 { f i 1 . . . f i k . . . f i K } \lbrace f_i^1...f_i^k...f_i^K \rbrace {fi1...fik...fiK}。对第k个近邻的位置信息进行如下操作:
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 \bigoplus p_i^k \bigoplus (p_i - p_i^k) \bigoplus ||p_i - p_i^k||) rik=MLP(pi⨁pik⨁(pi−pik)⨁∣∣pi−pik∣∣)
⨁ \bigoplus ⨁表示concate操作, ∣ ∣ ⋅ ∣ ∣ ||\cdot|| ∣∣⋅∣∣表示欧式距离, r i k ∈ R d r_i^k \in \mathbb R^d rik∈Rd。
对K近邻中的每个点进行位置编码得到 { r i 1 . . . r i k . . . r i K } \lbrace r_i^1...r_i^k...r_i^K \rbrace {ri1...rik...riK},将位置编码信息与特征信息进行concat操作,得到了新的K个近邻点的特征 F ^ i ∈ R K × 2 d \hat F_i \in \mathbb R^{K \times 2d} F^i∈RK×2d:
F ^ i = { f ^ i 1 . . . f i k . . . f ^ i K } = { r i 1 ⨁ f i 1 . . . r i k ⨁ f i k . . . r i K ⨁ f i K } \hat F_i = \lbrace \hat f_i^1...f_i^k...\hat f_i^K\rbrace = \lbrace r_i^1 \bigoplus f_i^1...r_i^k \bigoplus f_i^k...r_i^K \bigoplus f_i^K\rbrace F^i={f^i1...fik...f^iK}={ri1⨁fi1...rik⨁fik...riK⨁fiK}
LoSE显示地对相对位置进行编码以增加相邻点的特征。在得到了增强的相邻点的特征后,如何用相邻点的特征表示当前点i的特征,一种方式是使用Max/Mean Pooling,但这会引起大部分信息的丢失。那该如何解决呢?这就是接下来Attention Pooling需要解决的问题。
-
Attention Pooling
作者采用强大的注意力机制来自动学习重要的局部特征,如Figure 3的右上部分。
Attention Pooling的输入是K个近邻点的特征 F ^ i ∈ R K × 2 d \hat F_i \in \mathbb R^{K \times 2d} F^i∈RK×2d,对这个点经过一个共享全连接层(2d -> 2d),并对每个点的特征进行softmax操作,生成 S i = { S i 1 . . . S i k . . . S i K } ∈ R K × 2 d S_i = \lbrace S_i^1...S_i^k...S_i^K \rbrace \in \mathbb R^{K \times 2d} Si={Si1...Sik...SiK}∈RK×2d,表示attention scores。用attention scores作为soft mask自动地选择重要的特征并经过MLP(2d -> d’),得到 f ˇ i ∈ R d ′ \check f_i \in \mathbb R^{d'} fˇi∈Rd′:
f ˇ i = M L P ( Σ k = 1 K s i k ⋅ f ^ i k ) \check f_i = MLP(\Sigma_{k=1}^Ks_i^k \cdot \hat f_i^k) fˇi=MLP(Σk=1Ksik⋅f^ik)这样N个点的点云 P ∈ R N × ( 3 + d ) P \in \mathbb R^{N \times (3 + d)} P∈RN×(3+d),经过LocSE和Attention Pooling之后,得到特征 F ˇ ∈ R N × d ′ \check F \in \mathbb R^{N \times d'} Fˇ∈RN×d′。可以看到上述两个模块只改变了特征的维度,没有改变点的数量。
-
Dilated Residual Block
由于大的点云将被大幅度地下采样,该怎么弥补这些因下采样丢失的点呢? 作者的想法是增加每个点的感受野,这样即使某些点被丢弃,其他保留的点也可能保留有丢弃点的信息,从而输入点云的几何细节也有可能被保留。如何增大感受野呢?
作者是通过Dilated Residual Block实现的,如Figure3的下部分所示。假设它的输入的点云数据是 P ∈ R ( N , d i n ) P \in \mathbb R^{(N, d_{in})} P∈R(N,din),则输出的数据是 O ∈ R ( N , d o u t ) O \in \mathbb R^{(N, d_{out})} O∈R(N,dout),同样是只改变了特征维度,没有改变点云中点的数量。其内部是一个是一个残差结构: 一个shortcut分支,另一个是两个(MLP, LocSE, Attention Pooling)层。
作者在Dilated Residual Block模块采用两个(MLP, LocSE, Attention Pooling)的原因是增加感受野,如Figure 4所示。作者只采用两个(MLP, LocSE, Attention Pooling)的原因是为了balance efficiency和effectiveness; 另一方面也是为了防止过拟合。
2.3 整体框架
RandLA网络的整体架构如Figure 7所示。它是编码-解码的架构,编码部分由FC,Local Feature Aggregation和Random Sample组成;解码部分是由上采样,MLP和Skip连接组成。最后对的点分类是由三个FC层组成。
解码部分前面已经介绍的很清楚了,但解码部分的上采样是如何实现的呢?作者实现的方式比较简单,对每一个query point,从support points选择距离最近的点的特征作为其特征。
三、论文的实验
作者从采样的效率、RandLA网络的效率、语义分割的性能等方面进行了实验;最后通过Ablation Study来分析论文创新点的重要性。
3.1 采样的效率
Figure 5 左图是点云中点的数量对于时间的影响,右图是点的数量对于内存的影响。
- 对于小尺度点云(~ 10^3),所有采样方法都有相似的时间和内存消耗
- 对于大尺度点云(~ 10^6),大部分采样方法是比较耗时或者耗内存的。
随机采样在处理大尺度点云时,时间和内存上都明显更优。
3.2 RandLA网络的效率
作者在SemanticKTIIT数据上进行了实验,每个网络输入点云的点的数量均是81920。实验结
果如Table 1所示。RandLA-Net在推理时间上和可处理的点云规模上均优于其他方法。
3.3 语义分割性能
作者在Semantic3D, SemanticKITTI和S3DIS数据集上对RandLA网络进行了评估。
-
Semantic3D
Semantic3D数据集包括15个训练点云和15个测试点云。每个点云具有多达10^8个点,覆盖现实世界的尺寸是160 x 240 x 30米。原始的3D点云有8个类别,包含3D坐标,RGB信息和强度。作者只使用了3D坐标和颜色信息进行训练和测试。如Table 2,作者采用mIoU(mean Intersection-over-Union)和所有类别的Overall Accuracy(OA)作为评价指标。RandLA-Net明显优于现存其他方法(但现在在榜单上排名第6)。
-
SemanticKITTI
SemanticKITIT包括43552各密集标注的LIDAR点云(scan),属于21个sequences。每个scan是一个大规模的点云(~ 10^5)点,实际空间大约是 160 x 160 x 20米。00-07和09-10 sequences(19130 scans)用于训练,08 sequence(4071 scans)用于验证,11-21 sequences(20351 scans)用于线上测试。原始的3D点云只包含3D坐标,论文中使用mIoU来评估在19个类别的性能。
RandLA-Net在SemanticKITTI上的性能如图Table 3所示。考虑mIoU和参数量,RandLA-Net明显优于其他方法。
-
S3DIS
S3DIS数据集包括271房间,属于6个Areas。每个房间属于中等大小的单人房(20 x 15 x 5米)。作者使用了标准的6-fold交叉验证。mIoU, mean class Accuracy(mAcc)和Overall Accuracy(OA)被用于评估在S3DIS 13类数据中的性能,如 Table 4所示。
RandLA-Net达到了同等水平或者比最先进方法更好的性能。但上述大部分网络采用复杂的操作或者在小的(1 x 1米)的block进行优化,相对较小的房间有利于将其划分为小的block。RandLA-Net将整个房间作为输入,并能够在一次传递中高效的预测每个点的语义信息。
3.4 Ablation Study
作者在SemanticKITTI数据集上进行了Ablation Study实验。所有的网络在sequences 00-07上进行训练,在sequence 08上进行测试,实验结果如Table 5所示,这里不再进行文字描述。