新智元专栏
编辑:张佳
牛津大学和国防科技大学合作的一篇题为“RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds”的论文已被今年CVPR接收,今天为大家解读这篇论文。
论文地址:https://arxiv.org/pdf/1911.11236.pdf
TensorFlow代码:https://github.com/QingyongHu/RandLA-Net
本文提出了一种针对大规模三维点云场景的轻量级、高效点云语义分割新算法RandLA-Net。通过对现有的采样策略进行全面综合的分析,本文采用简单高效的随机采样来显著地减少计算量以及内存消耗,并且引入了全新的局部特征聚合模块持续地增大每个点有效的感受野,保留大多数有效的信息。
RandLA-Net能直接处理大规模点云,不需要复杂的预处理/后处理,比基于图的方法SPG快了接近200倍,有助于解决自动驾驶和AR等领域的核心问题。
实现高效、准确的大场景三维点云语义分割是当前三维场景理解、环境智能感知的关键问题之一。然而,由于深度传感器直接获取的原始点云通常是非规则化 (irregular)、非结构化 (unstructure)并且无序 (orderless)的,目前广泛使用的卷积神经网络并不能直接应用于这类数据。
Motivation
自从2017年能够直接在非规则点云上进行处理的PointNet [1] 被提出以来,越来越多的研究者开始尝试提出能够直接处理非规则点云的网络结构,出现了许多诸如PointNet++ [2], PointCNN [3], PointConv [4] 等一系列具有代表性的工作。尽管这些方法在三维目标识别和语义分割等任务上都取得了很好的效果,但大多数方法依然还局限于在非常小(small-scale)的点云上(e.g., PointNet, PointNet++, Pointconv等一系列方法在处理S3DIS数据集时都需要先将点云切成一个个1m×1m的小点云块, 然后在每个点云块中采样得到4096个点输入网络)。这种预处理方式虽然说方便了后续的网络训练和测试,但同时也存在着一定的问题。举例来说,将整个场景切成非常小的点云块是否会损失整体的几何结构?用一个个小点云块训练出来的网络是否能够有效地学习到空间中的几何结构呢?
带着这样的疑问,我们对PointNet在S3DIS数据集Area 5上的分割结果进行了可视化。如上图highlight的区域所示,PointNet错误地将一张桌子的左半部分识别为桌子,而将右半部分识别为椅子。造成这样明显不一致结果的原因是什么呢?可以看到,这张桌子在预处理切块(左图)的时候就已经被切分成几个小的点云块,而后再分别不相关地地输入到网络中。也就是说,在点云目标几何结构已经被切块所破坏的前提下,网络是难以有效地学习到桌子的整体几何结构的。
既然切块太小会导致整几何结构被破坏,那我能不能把块切大一点?这样不就可以在一定程度上更好地保留原始点云的信息了吗?
对此,我们也进一步设计了对比实验,把切块的尺寸从最初的1m×1m增加到5m×5m(每个block中的点数也相应地从4096增加至102400),得到的实验结果如上图所示,可以看到:
上述实验结果表明:简单地增大block_size也并不能有效地解决这个问题。通过进一步分析我们发现,阻碍当前大多数方法直接处理大场景点云的原因主要有以下三点:
当然,最近也有一些工作已经开始尝试去直接处理大规模点云。比如说SPG用超图(super graph)和超点(superpoints)来表征大场景点云,FCPN和PCT等方法结合了voxel和point的优势来处理大规模点云。尽管这些方法也达到了不错的分割效果,但大多数方法的预处理计算量太大或内存占用高,难以在实际应用中部署。
本文的目标是设计一种轻量级,计算效率高(computationally-efficient)、内存占用少(memory-efficient)的网络结构,并且能够直接处理大规模3D点云,而不需要诸如voxelization/block partition/graph construction等预处理/后处理操作。然而,这个任务非常具有挑战性,因为这种网络结构需要:
基于这样的目标,我们提出了一种基于简单高效的随机降采样和局部特征聚合的网络结构(RandLA-Net)。该方法不仅在诸如Semantic3D和SemanticKITTI等大场景点云分割数据集上取得了非常好的效果,并且具有非常高的效率(e.g. 比基于图的方法SPG快了接近200倍)。本文的主要贡献包括以下三点:
随机采样&局部特征聚合模块组合,组建RandLA-Net
如下图所示,对于一个覆盖数百米范围、由百万量级的点组成的大场景点云而言,如果希望将其直接输入到深度神经网络中进行处理,那么持续有效地对点云进行逐步地降采样,同时尽可能地保留有用的几何结构信息是非常有必要的。
The quest for efficient sampling
为了寻找到一种高效的降采样方法。我们首先对现有的的降采样方法进行研究:主要可以分为Heuristic Sampling以及Learning-based Sampling两大类:
(1) Heuristic Sampling
(2) Learning-based Sampling
总结一下:
对于大场景点云,FPS, IDIS和GS的计算代价都比较高, CRS对GPU内存的要求太高,而PGS难以学到一个有效的采样策略(sampling policy)。相比之下,随机采样具有以下两个优点:1)计算效率高, 因为是常数计算复杂度, 与输入点数无关 2)内存开销少,采样过程并不需要额外的内存消耗。因此,对于大场景点云作为输入的情况,我们何不尝试下随机降采样呢?
但新的问题又来了:随机地对点云进行降采样势必会导致有用的信息被丢失,如何克服这个问题?
Local Feature Aggregation
为了缓解这个问题,我们进一步提出了与随机采样互补的局部特征聚合模块(Local feature aggregation)。如图所示,该模块主要包括三个子模块:1)局部空间编码(LocSE), 2) attentive pooling, 3)扩张残差块(dilated residual block)。
(1) 局部空间编码(Local Spatial Encoding)
此模块用于显式地对输入的点云的三维坐标信息进行编码。不同于直接将各个点的三维坐标作为一个普通的通道特征输入到网络中,LocSE模块旨在显式地去编码三维点云的空间几何形状信息,从而使得网络能够从各个点的相对位置以及距离信息中更好地学习到空间的几何结构。具体来说分为以下步骤:
(2) Attentive pooling
此模块用于将上述单元输出的邻域点特征集聚合到一起。现有的大多数算法通常采用启发式的max/mean/sum pooling来hard integrate邻域点特征集,这样做有可能导致许多有用的信息被丢失。不同于此,我们希望通过attention mechanism来自动学习和聚合邻域点特征集中有用的信息。具体来说,对于一个邻域特征点集合 ,我们首先设计一个共享函数 来为每一个点学习一个单独的attention score,其中:
是共享MLP的可学习参数。然后,我们将学习到的attention score视作一个能够自动选择重要特征的soft mask,最终得到的特征是这些邻域特征点集的加权求和,如下所示:
(3)扩张残差块(Dilated Residual Block)
考虑到输入的点云会被持续大幅度的降采样,因此显著地增加每个点的感受野是非常有必要的。换句话来说也就是,我们希望即便RandLA-Net随机地丢弃某些点的特征,输入点云的整体的几何细节也能够被保留下来。基于这样一个想法,我们将多个LocSE,Attentive Pooling以及skip connection连接在一起组成扩张残差块(Dilated Residual Block)。下图进一步说明了扩展残差块的作用,可以看到: 红色的点在第一次LocSE/Attentive Pooling操作后的有效感受野是与之相邻的 个相邻点,然后在第二次聚合以后最多能够将感受野扩展到 个邻域点。相比于直接增大K最近搜索中的K值而言,这是一种更加廉价高效的方式来增大每个点的感受野以及促进邻域点之间的feature propogation。通过后面的ablation实验,我们的扩张残差块最终使用两组LocSE和attentive pooling单元,以平衡最终的分割性能以及计算效率。
最后,我们将随机采样以及局部特征聚合模块组合到一起,基于标准的encoder-decoder结构组建了RandLA-Net。网络的详细结构如下图所示,可以看到,输入的点云在RandLA-Net中持续地进行降采样以节约计算资源及内存开销。此外,RandLA-Net中的所有模块都由简单高效的feed-forward MLP组成,因此具有非常高的计算效率。最后,在解码器中的上采样阶段,不同于广泛采用的三线性插值(trilinear interpolation),我们选择了更加高效的最近邻插值(nearest interpolation),进一步提升了算法的效率。
(1) Efficiency of Random Sampling
首先我们对上述提到的采样策略进行评估,主要从计算时间和GPU内存消耗两个方面来考量。具体来说,我们进行如下的实验:仿照PointNet++的主体框架,我们持续地对点云进行降采样,总共五次降采样,每次采样仅保留原始点云中25%的点。实验结果如下图所示,可以看出:
(2) Efficiency of RandLA-Net
我们进一步对RandLA-Net在处理真实场景中的大规模三维点云的效率进行评估。具体来说,我们选择在SemanticKITTI数据集的验证集(序列8:一共4071帧)进行对比测试。主要评估以下三个方面的指标:总时间,模型参数以及网络最多可处理点数。公平起见,我们在每一帧中将相同数量的点(81920)输入到baseline以及我们RandLA-Net中。实验结果如下表所示,可以看出:
(3) 公共数据集评估结果
Semantic3D由30个大规模的户外场景点云组成,包含真实三维空间中160×240×30米的场景,总量高达40亿个点。其中每个点包含3D坐标、RGB信息以及强度信息。RandLA-Net只用了三维坐标以及对应的颜色信息进行处理。从表中可以看出我们的方法达到了非常好的效果,相比于SPG, KPConv等方法都有较明显的提升。
SemanticKITTI数据集由21个序列, 43552帧点云组成。每一帧的点云由~10^5个点组成,包含真实三维空间中160×160×20 米的场景。我们按照官方的train-validation-test进行分类,其中序列00~07以及09~10(19130帧)作为训练集,序列08(4071帧)作为验证集,序列11~21(20351帧)用于在线测试。需要注意的是,这个数据集中的点云仅包含各个点的三维坐标,而没有相应的颜色信息。实验结果如下表所示,可以看出:RandLA-Net相比于基于点的方法(表格上半部分)有着显著的提升,同时也优于大部分基于投影的方法,并且在模型参数方面相比于DarKNet53Seg等有着比较明显的优势。
S3DIS数据集由6个区域的271个房间组成。每个点云包含真实三维空间中20×15×5米的室内场景。6-fold的交叉验证实验结果也进一步证实了我们方法的有效性。
在Ablation study中,我们也进一步证实了各个子模块对整体性能的贡献。详细的分析见paper以及supplementary。
最后总结一下,我们提出了一种针对大规模三维点云场景的轻量级、高效点云语义分割算法,与当前的大多数基于FPS等计算代价高的采样策略的算法不同,本文尝试使用简单高效的随机采样来显著地减少计算量以及内存消耗,并且引入了局部特征聚合模块持续地增大每个点有效的感受野,以确保大多数有效的信息不会因为随机采样而丢失。在Semantic3D,S3DIS以及SemanticKITTI等多个数据集上的大量实验证明了我们的方法的有效性。下一步可以尝试将我们的工作延申到大场景三维点云实例分割以及实时动态点云处理。
牛津大学出品,作者团队介绍
论文合著者包括牛津大学博士生胡庆拥,杨波,谢林海,王智华;博士后Stefano Rosa;国防科技大学副教授郭玉兰;以及牛津大学教授Niki Trigoni和Andrew Markham。
胡庆拥
杨波
其中论文一作胡庆拥研究方向是3D视觉和机器学习,专注于大规模3D点云分割和理解,动态点云处理和跟踪。论文二作(通讯作者)杨波专注于让智能机器从2D图片或3D点云中理解和重构完整3D场景。更多信息见个人主页:
https://qingyonghu.github.io
https://yang7879.github.io
Reference
[1] Charles R Qi, Hao Su, Kaichun Mo, and Leonidas J Guibas. PointNet: Deep learning on point sets for 3D classification and segmentation. CVPR, 2017.
[2] Charles R Qi, Li Yi, Hao Su, and Leonidas J Guibas. PointNet++: Deep hierarchical feature learning on point sets in a metric space. NeurIPS, 2017
[3] Yangyan Li, Rui Bu, Mingchao Sun, Wei Wu, Xinhan Di, and Baoquan Chen. PointCNN: Convolution on X-transformed points. NeurIPS, 2018.
[4] Wenxuan Wu, Zhongang Qi, and Li Fuxin. PointConv: Deep convolutional networks on 3D point clouds. CVPR, 2018.
[5] Fabian Groh, Patrick Wieschollek, and Hendrik P. A. Lensch.Flex-convolution (million-scale point-cloud learning beyond grid-worlds). ACCV, 2018
[6] Oren Dovrat, Itai Lang, and Shai Avidan. Learning to sample. CVPR, 2019.
[7] Itai Lang, Asaf Manor, and Shai Avidan. SampleNet: Differentiable Point Cloud Sampling. arXiv preprint arXiv:1912.03663 (2019).
[8] Abubakar Abid, Muhammad Fatih Balin, and James Zou. Concrete autoencoders for differentiable feature selection and reconstruction. ICML, 2019
[9] Jiancheng Yang, Qiang Zhang, Bingbing Ni, Linguo Li, Jinxian Liu, Mengdie Zhou, and Qi Tian. Modeling point clouds with self-attention and Gumbel subset sampling. CVPR, 2019.
[10] Kelvin Xu, Jimmy Ba, Ryan Kiros, Kyunghyun Cho, Aaron Courville, Ruslan Salakhudinov, Rich Zemel, and Yoshua Bengio. Show, attend and tell: Neural image caption generation with visual attention. ICML, 2015
[11] Hugues Thomas, Charles R Qi, Jean-Emmanuel Deschaud, Beatriz Marcotegui, Franc ̧ois Goulette, and Leonidas J Guibas. Kpconv: Flexible and deformable convolution for point clouds. ICCV, 2019.