DeepRoute Lab | 点云分割

DeepRoute Lab | 点云分割_第1张图片
本次将会给大家带来一个简单的关于点云分割的survey分享。首先什么是点云,点云是激光雷达产生的离散数据,具备稀疏性、无序性、尺度不变性等特性。
什么是点云分割,点云分割其实是为了给每个点打上语义标签,整个任务对于自动驾驶、机器人、AR\VR都特别重要,可以用来去噪、地面检测等等。

点云分割的挑战性

1. 点数过多,尤其是对于自动驾驶的场景,整体的点数可能超过10W;
2. 稀疏性,需要设计一系列的算法去应对点云的稀疏性,相比于图像数据,需要设计高效的算法去处理稀疏的点云数据;
3. 无序性。

一个好的点云网络应该能够考虑到这几个特性。

接下来,我会根据点云的表征方式给大家介绍一些经典的点云分割的paper。

首先根据点云的表征方式可以分为point-based,voxel-based, range-view-based,multi-representation based methods。当前基于transformer的方式我们暂时不介绍。

point-based的方法

1.PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation

Pointnet是point-based方案里面开阔性的方案。整个PointNet的结构非常简单、简洁。通过不断堆叠conv1d、bn1d提取每个点的特征,接着通过global-max-pooling层进行global information aggregation。

PointNet的特点就是简单,方法也是具有intuitive。在pointnet提出的 global-max-pooling其实是 symmetric的,具有permutation-invariant的特性,对于不同的输入的点序能够产生相同的输出结果。
DeepRoute Lab | 点云分割_第2张图片
但是PointNet最大的缺点是缺少了局部特征,整个信息的聚合是通过global-max-pooling得到,这里会有信息损失。

2.PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

DeepRoute Lab | 点云分割_第3张图片
基于上面的观察跟分析,PointNet的作者提出了PointNet++,相比于pointnet,Pointnet++引入了locality的概念。首先PointNet++使用furthest sampling的策略得到一些列的keypoint,接着对于每个keypoint, 通过KNN建立了不同的邻域信息。在不同邻域内应用了PointNet,这个过程叫做set abstraction。通过不同的radius,或者不同邻域数量达到类似于卷积中扩大感受野的过程。如果是做点云分割的任务的话,那么还会有上采样的过程,整个架构就比较类似UNet。

整体来说,PointNet++核心是局部信息跟全局信息的提取的融合。那么基于PointNet++的架构,接下来就是百花齐放的状态了。

3.PointSIFT: A SIFT-like Network Module for 3D Point Cloud Semantic Segmentation

DeepRoute Lab | 点云分割_第4张图片
PointSIFT基于Pointnet++的架构,引入了传统视觉特征提取算子SIFT。简单来说,PointSIFT提出了orientation encoding unit. 对于每一个点,首先沿着x,y,z三个轴的方向搜索临近的8个点。接着OE unit会使用CONV1D沿着x,y,z三个方向提取特征,这样就能得到最终的feature embedding。
DeepRoute Lab | 点云分割_第5张图片
先做一个简单的总结,这些算法其实更多关于室内的场景,大家可以想象一下这些方法应用在自动驾驶场景还有一些效率性的问题。同样的方法还有PointConv: Deep Convolutional Networks on 3D Point Clouds。

大家感兴趣的话可以自己去翻阅。

接下来给大家介绍一下应用在室外点云的方法。

4.KPConv: Flexible and Deformable Convolution for Point Clouds

KPConv有一些不同,首先对于kernel point的产生,它不是使用FPS(furthest sampling)的方法。KPConv采用的是一种迭代式优化的方式,在给定的区域内,一个kernel point的优化目标是,尽量远离其他的点。

同时kpconv提出了kernel point convolution,KPC其实是在模拟一个卷积的过程。对于每一个输入的点,他会去查找K个最临近的kernel point,接着会计算相关性。卷积的weight其实是这些相关性的加权求和。最终的output feature会是输入特征跟这些权重的加权求和。
DeepRoute Lab | 点云分割_第6张图片

DeepRoute Lab | 点云分割_第7张图片
整体的kpconv的架构,实际上也是建立在PointNet++的架构上。

5.RandLA-Net: Efficient Semantic Segmentation of Large-Scale Point Clouds

上述的文章其实都隐含了一个痛点:Sampling。首先FPS或者KPConv里面kernel point的产生其实会花费一定的预处理的时间,其次,sampling其实会带来性能上面的下降。过多的sampling虽然会让网络的性能提升,但是会让整体的表现下降。RandLA非常暴力,直接采用了随机采样的方式。
DeepRoute Lab | 点云分割_第8张图片

DeepRoute Lab | 点云分割_第9张图片
基于点云的几何特性,提出了Local spatial encoding。首先在给定的局部的邻域中,LocSE计算一下几何信息,比如所有点的均值、方差等。接着,利用pointwise的特征提取器(fc/conv1d)的layer进行特征的提取,通过local-neighborhood attentive-pooling达到set-abstraction。在当时RANDLA取得了sota,特别是在semantic kitti这样的室外大规模数据集。​
DeepRoute Lab | 点云分割_第10张图片

Summary

对于point-based的方法进行一个简单总结。
优点 
1.有丰富的几何信息;
2.非常直接的表征方式;
3.很少的后处理。

缺点
1.KDTree或者其他距离索引需要花费额外的时间;
2.Sampling,正如上面说的sampling会加速网络的处理,但是同时也会降低performance。

对于之后的内容,我们放在下一次….

你可能感兴趣的:(DeepRoute Lab | 点云分割)