作者 | 胡庆拥(牛津大学)
编辑 | 贾伟
CVPR 2020 已经公布录用结果, 其中有效投稿 6656 篇, 最终录用 1470 篇, 接收率 22.1 % .CVPR 2020 将于 6 月 14 日 - 6 月 19 日在美国西雅图举办. 虽然在近三年来, CVPR 的论文投稿量都在持续大涨(CVPR 2018 有 3300 篇有效投稿, CVPR 2019 有 5160 篇有效投稿, CVPR 2020 有效投稿达 6656), 然而在接收率方面, 已是 "二连降"(CVPR 2018 收录论文 979 篇, 接收率为 29% 左右; CVPR 2019 收录论文 1300 篇, 接收率为 25% 左右; CVPR 2020 收录论文 1470 篇, 接收率为 22% 左右).
本文要介绍的是 CVPR 2020 上被录用的文章《RandLA.NET: Efficient Semantic Segmentation of Large-Scale Point Clouds》
论文链接: https://arxiv.org/abs/1911.11236
TensorFlow 代码: https://github.com/QingyongHu/RandLA-Net
先上效果图:
一, 动机
实现高效, 准确的大场景三维点云语义分割是当前三维场景理解, 环境智能感知的关键问题之一. 然而, 由于深度传感器直接获取的原始点云通常是非规则化 (irregular), 非结构化 (unstructure)并且无序 (orderless)的, 目前广泛使用的卷积神经网络并不能直接应用于这类数据.
自从 2017 年能够直接在非规则点云上进行处理的 PointNet [1] 被提出以来, 越来越多的研究者开始尝试提出能够直接处理非规则点云的网络结构, 出现了许多诸如 PointNet++ [2], PointCNN [3], PointConv [4] 等一系列具有代表性的工作.
尽管这些方法在三维目标识别和语义分割等任务上都取得了很好的效果, 但大多数方法依然还局限于在非常小 (small-scale) 的点云上(e.g., PointNet, PointNet++, Pointconv 等一系列方法在处理 S3DIS 数据集时都需要先将点云切成一个个 1m*1m 的小点云块, 然后在每个点云块中采样得到 4096 个点输入网络). 这种预处理方式虽然说方便了后续的网络训练和测试, 但同时也存在着一定的问题.
举例来说, 将整个场景切成非常小的点云块是否会损失整体的几何结构? 用一个个小点云块训练出来的网络是否能够有效地学习到空间中的几何结构呢?
图 1. PointNet 在 Area 5 中的分割结果
带着这样的疑问, 我们对 PointNet 在 S3DIS 数据集 Area 5 上的分割结果进行了可视化. 如上图 highlight 的区域所示, PointNet 错误地将一张桌子的左半部分识别为桌子, 而将右半部分识别为椅子. 造成这样明显不一致结果的原因是什么呢? 可以看到, 这张桌子在预处理切块 (左图) 的时候就已经被切分成几个小的点云块, 而后再分别不相关地地输入到网络中. 也就是说, 在点云目标几何结构已经被切块所破坏的前提下, 网络是难以有效地学习到桌子的整体几何结构的.
既然切块太小会导致整几何结构被破坏, 那我能不能把块切大一点? 这样不就可以在一定程度上更好地保留原始点云的信息了吗?
图 2. PointNet 和 PointNet++ 在 S3DIS Area5 的对比实验结果. S3DIS 中的数据分别被切割为 1m*1m 到 5m*5m 的点云块, 然后再输入到网络中进行训练和测试.
对此, 我们也进一步设计了对比实验, 把切块的尺寸从最初的 1m*1m 增加到 5m*5m(每个 block 中的点数也相应地从 4096 增加至 102400), 得到的实验结果如上图所示, 可以看到:
1)PointNet 的 mIoU 结果出现了比较明显的下降. 我们分析这主要是由于在 PointNet 框架中, 每个点的特征是由 shared MLP 提取的 per-point feature 以及 global max-pooling 提取的 global feature 组成. 当输入点云的规模越来越大时, 通过简单的 global max-pooling 得到的全局特征能发挥的作用就越来越小, 进而导致分割性能随着 block size 增大而持续地下降
2)PointNet++ 的分割性能随着 block_size 的增大有了一定提升, 这是符合我们预期的. 然而, 从右边的时间变化曲线我们也可以进一步看到, 网络 inference 的时间也随着 block_size 增大而出现了显著的增长, 从最开始的每 3s / 百万点增加到需要接近 100s / 百万点.
上述实验结果表明: 简单地增大 block_size 也并不能有效地解决这个问题. 通过进一步分析我们发现, 阻碍当前大多数方法直接处理大场景点云的原因主要有以下三点:
1)网络的降采样策略. 现有的大多数算法采用的降采样策略要么计算代价比较昂贵, 要么内存占用大. 比如说, 目前广泛采用的最远点采样 (farthest-point sampling) 需要花费超过 200 秒的时间来将 100 万个点组成的点云降采样到原始规模的 10%.
2)许多方法的特征学习模块依赖于计算代价高的 kernelisation 或 graph construction.
3)现有大多数方法在提取特征时感受野 (receptive fields) 比较有限, 难以高效准确地学习到大场景点云中复杂的几何结构信息
当然, 最近也有一些工作已经开始尝试去直接处理大规模点云. 比如说 SPG 用超图 (super graph) 和超点 (superpoints) 来表征大场景点云, FCPN 和 PCT 等方法结合了 voxel 和 point 的优势来处理大规模点云. 尽管这些方法也达到了不错的分割效果, 但大多数方法的预处理计算量太大或内存占用高, 难以在实际应用中部署.
本文的目标是设计一种轻量级, 计算效率高 (computationally-efficient), 内存占用少(memory-efficient) 的网络结构, 并且能够直接处理大规模 3D 点云, 而不需要诸如 voxelization/block partition/graph construction 等预处理 / 后处理操作. 然而, 这个任务非常具有挑战性, 因为这种网络结构需要:
一种内存和计算效率高的采样方法, 以实现对大规模点云持续地降采样, 确保网络能够适应当前 GPU 内存及计算能力的限制;
一种有效的局部特征学习模块, 通过逐步增加每个点的感受野的方式来学习和感知复杂的几何空间结构.
基于这样的目标, 我们提出了一种基于简单高效的随机降采样和局部特征聚合的网络结构(RandLA.NET). 该方法不仅在诸如 Semantic3D 和 SemanticKITTI 等大场景点云分割数据集上取得了非常好的效果, 并且具有非常高的效率(e.g. 比基于图的方法 SPG 快了接近 200 倍). 本文的主要贡献包括以下三点:
1)我们对现有的降采样方法进行了分析和比较, 认为随机降采样是一种适合大规模点云高效学习的方法;
2)我们提出一种有效的局部特征聚合模块, 通过逐步增加每个点的感受野来更好地学习和保留大场景点云中复杂的几何结构;
3)RandLA.NET 在多个大场景点云的数据集上都展现出了非常好的效果以及非常优异的内存效率以及计算效率.
二, 方法总览
如下图所示, 对于一个覆盖数百米范围, 由百万量级的点组成的大场景点云而言, 如果希望将其直接输入到深度神经网络中进行处理, 那么持续有效地对点云进行逐步地降采样, 同时尽可能地保留有用的几何结构信息是非常有必要的.
图 3. 网络结构的大致流程图
1,The quest for efficient sampling
为了寻找到一种高效的降采样方法. 我们首先对现有的的降采样方法进行研究: 主要可以分为 Heuristic Sampling 以及 Learning-based Sampling 两大类:
(1) Heuristic Sampling
Farthest Point Sampling (FPS): 顾名思义, 也就是每次采样的时候都选择离之前采样得到的 k-1 个点距离最远的点. FPS 能够比较好地保证采样后的点具有较好的覆盖率, 因而在点云分割领域被广泛地使用(e.g., PointNet++, PointCNN, PointConv, Pointweb). 然而, FPS 的计算复杂度是
, 计算量与输入点云的点数呈平方相关. 这表明从 FPS 可能不适合用来处理大规模点云. 举例来说, 当输入一个具有百万量级点的大场景点云时, 使用 FPS 将其降采样到原始规模的 10% 需要多达 200 秒.
Inverse Density Importance Sampling (IDIS): 这个也比较好理解, 简而言之就是根据每个点的密度来对其重新进行排序, 尽可能地保留密度比较低的地方的点. IDIS [5] 的计算复杂度近似为
(取决于如何计算每个点的密度). 相比于 FPS, IDIS 显然更加高效, 但 IDIS 对噪点 (outliers) 也更加敏感.
Random Sampling (RS): 随机降采样均匀地从输入的 N 个点中选择 K 个点, 每个点具有相同的被选中的概率. RS 的计算复杂度为
, 其计算量与输入点云的总点数无关, 只与降采样后的点数 K 有关, 也即常数时间复杂度. 因而具有非常高的效率以及良好的可扩展性. 与 FPS 和 IDIS 相比, RS 仅需 0.004s 即可完成与 FPS 相同的降采样任务.
(2) Learning-based Sampling
Generator-based Sampling (GS): 与传统降采样方法不一样, 这类方法通过学习生成一个子集来近似表征原始的点云. GS [6,7] 是一种 task-oriented, data-driven 的 learnable 的降采样方法, 但问题在于 inference 阶段需要将生成的子集与原始点云进行匹配, 这一步依赖于 FPS matching, 进而引入了更多额外的计算. 使用 GS 将百万量级点的大场景点云降采样到原始规模的 10% 需要多达 1200 秒.
Continuous Relaxation based Sampling (CRS):CRS [8,9] 使用 reparameterization trick 来将 non-differentiable 的降采样操作松弛 (relax) 到连续域使得端到端训练变成可能. CRS 采样后得到的每个采样点其实都是整个点云的一个加权和(weighted sum). 具体来说, 对于一个大场景的输入点云(size: N*3),CRS 通过学习得到一个采样矩阵 (size: K * N) (最终会非常稀疏), 最后采样矩阵左乘输入点云即可实现降采样. 然而, 当 N 是一个非常大的值时(e.g. 10^6), 这种方式学习到的采样矩阵会带来非常大的内存消耗. 举例来说, 使用 CRS 将百万量级点的大场景点云降采样到原始规模的 10% 需要多达 300GB 的 GPU 内存.
Policy Gradient based Sampling (PGS):PGS [10] 将降采样操作表示为一个马尔科夫决策过程, 旨在学习到一种有效的降采样策略. 该方法序贯地对每一个点学习到一个概率来决定是否保留. 然而, 当输入是大场景点云时, 整个网络有着极大的搜索空间(exploration space). 举例来说, 完成与上述采样方法相同的任务的搜索空间是
. 通过进一步地实验我们发现, 将 PGS 应用到大型点云时, 网络非常难以收敛.
总结一下:
对于大场景点云, FPS, IDIS 和 GS 的计算代价都比较高, CRS 对 GPU 内存的要求太高, 而 PGS 难以学到一个有效的采样策略 (sampling policy). 相比之下, 随机采样具有以下两个优点: 1) 计算效率高, 因为是常数计算复杂度, 与输入点数无关 2)内存开销少, 采样过程并不需要额外的内存消耗. 因此, 对于大场景点云作为输入的情况, 我们何不尝试下随机降采样呢?
但新的问题又来了: 随机地对点云进行降采样势必会导致有用的信息被丢失, 如何克服这个问题?
2,Local Feature Aggregation
为了缓解这个问题, 我们进一步提出了与随机采样互补的局部特征聚合模块 (Local feature aggregation). 如图所示, 该模块主要包括三个子模块: 1) 局部空间编码 (LocSE), 2) attentive pooling, 3) 扩张残差块(dilated residual block).
图 4. 局部特征聚合模块. 包括局部空间编码(Local Spatial Encoding),Attentive Pooling 以及 Dilated Residual Block 三个子模块.
(1) 局部空间编码(Local Spatial Encoding)
此模块用于显式地对输入的点云的三维坐标信息进行编码. 不同于直接将各个点的三维坐标作为一个普通的通道特征输入到网络中, LocSE 模块旨在显式地去编码三维点云的空间几何形状信息, 从而使得网络能够从各个点的相对位置以及距离信息中更好地学习到空间的几何结构. 具体来说分为以下步骤:
首先, 我们用 K 最近邻搜索算法为每一个点
找到欧氏空间中最近的 K 个邻域点.
其次, 对于
的 K 个最近邻点
, 我们显式地对点的相对位置进行编码, 将中心点的三维坐标
, 邻域点的三维坐标
, 相对坐标
以及欧式距离
连接 (concatenation) 到一起. 如下所示:
最后, 我们将邻域点
对应的点特征
与编码后的相对点位置
连接到一起, 得到新的点特征
- .
- (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 最近搜索中的 K 值而言, 这是一种更加廉价高效的方式来增大每个点的感受野以及促进邻域点之间的 feature propogation. 通过后面的 ablation 实验, 我们的扩张残差块最终使用两组 LocSE 和 attentive pooling 单元, 以平衡最终的分割性能以及计算效率.
图 5. 扩展残差块 (Dilated residual block) 增加每个点的感受野 (虚线圈) 的过程示意图. 彩色点代表聚集后的特征. L: Local Spatial Encoding, A: Attentive Pooling.
最后, 我们将随机采样以及局部特征聚合模块组合到一起, 基于标准的 encoder-decoder 结构组建了 RandLA.NET. 网络的详细结构如下图所示, 可以看到, 输入的点云在 RandLA.NET 中持续地进行降采样以节约计算资源及内存开销.
此外, RandLA.NET 中的所有模块都由简单高效的 feed-forward MLP 组成, 因此具有非常高的计算效率. 最后, 在解码器中的上采样阶段, 不同于广泛采用的三线性插值(trilinear interpolation), 我们选择了更加高效的最近邻插值(nearest interpolation), 进一步提升了算法的效率.
图 6. RandLA.NET 的网络结构. (N, D)分别表示点的个数和特征维数. FC: 全连通层, LFA: 局部特征聚合, RS: 随机采样, MLP: 共享多层感知器, US: 上采样, DP: Dropout
三, 实验
(1) Efficiency of Random Sampling
首先我们对上述提到的采样策略进行评估, 主要从计算时间和 GPU 内存消耗两个方面来考量. 具体来说, 我们进行如下的实验: 仿照 PointNet++ 的主体框架, 我们持续地对点云进行降采样, 总共五次降采样, 每次采样仅保留原始点云中 25% 的点. 实验结果如下图所示, 可以看出:
1, 对于小规模的点云~ 10^3, 上述采样方法在计算时间和内存消耗的差距并不明显, 总体来说都是可接受的;
2, 对于大规模点云~ 10^6, FPS/IDIS/GS 所需要的计算时间显著增加, 而 CRS 需要占用大量的 GPU 内存(图 b 虚线);
3, 相比之下, RS 在计算时间和内存消耗方面都有着显著的优势, 因此非常适合处理大规模点云. 这个结果也进一步说明了为什么大多数算法选择在小规模点云上进行处理和优化, 主要是因为它们依赖于昂贵的采样方法.
图 7. 不同采样方法的时间和内存消耗. 虚线表示由于 GPU 内存有限而产生的估计值
(2) Efficiency of RandLA.NET
我们进一步对 RandLA.NET 在处理真实场景中的大规模三维点云的效率进行评估. 具体来说, 我们选择在 SemanticKITTI 数据集的验证集 (序列 8: 一共 4071 帧) 进行对比测试.
主要评估以下三个方面的指标: 总时间, 模型参数以及网络最多可处理点数. 公平起见, 我们在每一帧中将相同数量的点 (81920) 输入到 baseline 以及我们 RandLA.NET 中. 实验结果如下表所示, 可以看出:
表 1. 不同方法在处理 SemanticKITTI 数据集的序列 8 的总时间, 模型参数和最多可处理点数对比.
1,SPG[23]的模型参数最少, 但耗时最长. 主要原因是几何划分 (geometrical partitioning) 和超图构建 (super-graph construction) 等步骤的计算代价较高;
2,PointNet++ 和 PointCNN 的耗时也很长, 主要原因是 FPS 在处理大场景点云时比较耗时;
3,PointNet 和 KPConv 无法一次性处理非常大规模的点云
, 主要原因是没有降采样操作 (PointNet) 或者模型较为复杂.
4, 得益于简单的随机采样以及基于 MLP 的高效的局部特征聚合模块, RandLA.NET 的耗时最少(~23 帧 / 每秒), 并且能够一次处理总数高达 10^6 的点云.
(3) 公共数据集评估结果
Semantic3D 由 30 个大规模的户外场景点云组成, 包含真实三维空间中 160*240*30 米的场景, 总量高达 40 亿个点. 其中每个点包含 3D 坐标, RGB 信息以及强度信息. RandLA.NET 只用了三维坐标以及对应的颜色信息进行处理. 从表中可以看出我们的方法达到了非常好的效果, 相比于 SPG, KPConv 等方法都有较明显的提升.
表 2. 不同方法对 Semantic3D (reduced-8)的定量结果对比
SemanticKITTI 数据集由 21 个序列, 43552 帧点云组成. 每一帧的点云由~ 10^5 个点组成, 包含真实三维空间中 160*160*20 米的场景. 我们按照官方的 train-validation-test 进行分类, 其中序列 00~07 以及 09~10(19130 帧)作为训练集, 序列 08(4071 帧)作为验证集, 序列 11~21(20351 帧)用于在线测试.
需要注意的是, 这个数据集中的点云仅包含各个点的三维坐标, 而没有相应的颜色信息. 实验结果如下表所示, 可以看出: RandLA.NET 相比于基于点的方法 (表格上半部分) 有着显著的提升, 同时也优于大部分基于投影的方法, 并且在模型参数方面相比于 DarKNet53Seg 等有着比较明显的优势.
表 3. 不同方法对 SemanticKITTI 数据集的定量结果对比
S3DIS 数据集由 6 个区域的 271 个房间组成. 每个点云包含真实三维空间中 20*15*5 米的室内场景. 6-fold 的交叉验证实验结果也进一步证实了我们方法的有效性.
表 4. 不同方法对 S3DIS 数据集的定量结果对比
在 Ablation study 中, 我们也进一步证实了各个子模块对整体性能的贡献. 详细的分析见 paper 以及 supplementary.
表 5. Ablation study 结果对比
最后总结一下, 我们提出了一种针对大规模三维点云场景的轻量级, 高效点云语义分割算法, 与当前的大多数基于 FPS 等计算代价高的采样策略的算法不同, 本文尝试使用简单高效的随机采样来显著地减少计算量以及内存消耗, 并且引入了局部特征聚合模块持续地增大每个点有效的感受野, 以确保大多数有效的信息不会因为随机采样而丢失. 在 Semantic3D,S3DIS 以及 SemanticKITTI 等多个数据集上的大量实验证明了我们的方法的有效性. 下一步可以尝试将我们的工作延申到大场景三维点云实例分割以及实时动态点云处理.
最后放一下我们的 demo:
四, 最后的话
对于三维点云语义分割任务而言, 与其在被切割的点云上提出非常复杂的算法来提升性能, 不如直接尝试在大场景点云上进行处理, 这样更加有实际意义.
三维点云分割网络的 scalability 也是实际应用中一个比较重要的点. i.e., 理想情况下 train 好的网络应该可以用于 inference 任意点数的输入点云, 因为每个时刻采集到的点云的点数不一定是相同的. 这也是 RandLA.NET 没有使用全局特征的原因, i.e. 确保学到的参数是 agnostic to number of points.
对于刚刚进入三维点云处理领域的同学, 有一份最新的综述论文 (Deep Learning for 3D Point Clouds: A Survey) 可供参考, 内含大量主流的点云目标分类, 三维目标检测, 三位场景分割算法的最新研究进展及总结.
欢迎大家关注我们的更多新工作: 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.
来源: https://www.qcloud.com/developer/article/1594448