0.摘要
基于 3D视觉的新兴应用场景蓬勃发展,3D点云越来越受到人们的广泛关注。点云有着广泛的应用领域包括机器人技术、3D图形、自动驾驶、虚拟现实(AR/VR/MR)等。为了跟上不断增长的应用需要,研究和开发有效存储、处理的相关算法来处理点云的意义正显著上升。传统的分析算法处理点云,主要侧重于对点的局部几何特征进行编码。深度学习在图像数据处理领域取得了巨大的成功,这使得研究相应的点云神经网络结构有极其现实的迫切需求。当前的研究热点主要涉及发展用于各种点云处理任务的深度神经网络。
1. 3D点云数据
1.1 3D点云定义
3D数据的表述形式一般分为以下四种:
a) 点云:由N 个D维的点组成,当这个D =3的时候一般代表着(x,y,z)的坐标,当然也可以包括一些法向量、强度等别的特征。这是今天主要讲述的数据类型。
b) Mesh:由三角面片和正方形面片组成。
c) 体素:由三维栅格将物体用0和1表征。
d) 多角度的RGB图像或者RGB-D图像
3D 点云是三维空间中的点的数据集, 点云用来表示对象的 3D 表面。 每个点由三个坐标(X,YZ)组成唯一标识其相对于正交轴的位置。通常,R、G、B 颜色值和表面法线等附加信息也可以嵌入为点属性,具体取决于用于捕获点的传感器。 通常意义上的点云包含大量的点(成千上万甚至更多)。 与采用规则网格表示的 2D 图像不同,3D 点云是无组织的,没有特定的顺序。 这种无序的性质使得在处理点云和设计方法时需考虑其特殊性。
1.2 点云数据的获取
3D 点云的形成与 2D 图像的形成方式显著不同。 2D 图像是一种光学现象,对于来自环境的光线使用镜头捕获,该镜头在 2D 图像平面上产生倒置图像,然后调整形成正立图像。相比之下,通常使用 LiDAR 传感器获取 3D 点云。 激光雷达(LiDAR)代表光检测和测距。 与之类似的传感器有雷达和声纳。 雷达和声纳使用无线电波和声波,激光雷达则使用光波,通常使用近红外波段光,避开人肉眼可识别的可见光。 激光雷达由三个主要部件:发射器、旋转器和光电探测器组成,示意图如下。
具体原理如下:激光雷达发射高密度的激光束,光束沿直行传播打到物体的表面,然后以相同的方向反射回去(忽略少量光线发生衍射现象),反射回去的光线由光电探测器(光敏传感器)检测收集,结合激光束往返传播的距离与方向信息就可以生成物体的3D几何形状。实际在使用过程中,激光发射器置于连续旋转的底座上,从而使得发射的激光束能以不同方向到达物体表面(前、后、左、右)。
1.3 3D点云数据主要特点
与传统2D图像数据相比,3D点云的主要特点对比如下。
2D 图像 | 3D点云 | |
表现形式 | 3D世界的2D投影,不包含Z值 | 3D数据,包含Z值 |
数据结构 | 有序,依次连接 | 各数据点无序 |
环境敏感性 | 对环境光照条件敏感 | 对环境光照条件不敏感 |
处理方法 | 直接使用CNN等 | 不能直接使用CNN |
2. 点云数据处理
对于点云数据的处理,主要涉及点云滤波、点云配准、点云分类、点云语义分割、点云目标识别等。
2.1 点云滤波(数据预处理)
点云滤波,顾名思义,就是滤掉噪声。原始采集的点云数据往往包含大量散列点、孤立点,比如下图为滤波前后的点云效果对比。
点云滤波的主要方法有:双边滤波、高斯滤波、条件滤波、直通滤波、随机采样一致滤波、VoxelGrid滤波等,这些算法都被封装在了PCL点云库中。
2.2 特征与特征描述
如果要对一个三维点云进行描述,光有点云的位置还不够,常常需要计算一些额外的参数,比如法线方向、曲率、纹理特征等等。如同图像的特征一样,我们需要使用类似的方式来描述三维点云的特征。
常用的特征描述算法:法线和曲率计算及特征值分析、PFH、FPFH、3D Shape Context、Spin Image等。
PFH:点特征直方图描述子,FPFH:跨苏点特征直方图描述子,FPFH是PFH的简化形式。
2.3 点云关键点提取
在二维图像上,有Harris、SIFT、SURF、KAZE这样的关键点提取算法,将特征点的思想推广到三维空间。从技术上来说,关键点的数量相比于原始点云或图像的数据量减小很多,与局部特征描述子结合在一起,组成关键点描述子用来形成原始数据的表示,而且不失代表性和描述性,从而加快了后续的识别,追踪等对数据的处理速度,关键点技术成为在2D和3D 信息处理中非常关键的技术。
常见的三维点云关键点提取算法有一下几种:ISS3D、Harris3D、NARF、SIFT3D
这些算法在PCL库中都有实现,其中NARF算法应用较为常见。
2.4 点云配准
点云配准的概念也可以类比于二维图像中的配准,相比二维图像配准获取得到的是x,y,alpha,beta等放射变化参数,二三维点云配准可以模拟三维点云的旋转和移动,也就是会获得一个旋转矩阵和一个平移向量,通常表达为一个4×3的矩阵,其中3×3是旋转矩阵,1*3是平移向量。严格说来是6个参数,因为旋转矩阵也可以通过罗格里德斯变换转变成1*3的旋转向量。
常用的点云配准算法有两种:正态分布变换和著名的ICP点云配准,此外还有许多其它算法,列举如下:
ICP:稳健ICP、point to plane ICP、point to line ICP、MBICP、GICP
NDT 3D、Multil-Layer NDT
FPCS、KFPSC、SAC-IA
Line Segment Matching、ICL
2.5 点云分割与分类
点云的分割与分类处理比二维图像的处理复杂很多,点云分割又分为区域提取、线面提取、语义分割与聚类等。同样是分割问题,点云分割涉及面太广,一般说来,点云分割是目标识别的基础。
分割:区域声场、Ransac线面提取、NDT-RANSAC、K-Means、Normalize Cut、3D Hough Transform(线面提取)、连通分析
分类:基于点的分类,基于分割的分类,监督分类与非监督分类。
2.6 目标识别与检测
这是点云数据处理中一个偏应用层面的问题,简单说来就是Hausdorff距离常被用来进行深度图的目标识别和检测,现在很多三维人脸识别都采用这种技术。
2.7 SLAM图优化
SLAM技术中,在图像前端主要获取点云数据,而在后端优化主要就是依靠图优化工具。而SLAM技术近年来的发展也已经改变了这种技术策略。在过去的经典策略中,为了求解LandMark和Location,将它转化为一个稀疏图的优化,常常使用g2o工具来进行图优化。常用的工具和方法如下。
g2o、LUM、ELCH、Toro、SPA
SLAM方法:ICP、MBICP、IDC、likehood Field、 Cross Correlation、NDT
2.8 变化检测
当无序点云在连续变化中,八叉树算法常常被用于检测变化,这种算法需要和关键点提取技术结合起来,八叉树算法也算是经典中的经典了。
2.9 三维重建
获取到的点云数据都是一个个孤立的点,从一个个孤立的点得到整个曲面就是三维重建的问题。
直接采集到的点云是充满噪声和孤立点的,三维重建算法为了重构出曲面,常常要应对这种噪声,获得看上去很光滑的曲面。
常用的三维重建算法和技术有:
泊松重建、Delauary triangulatoins
表面重建,人体重建,建筑物重建,输入重建
实时重建:重建纸杯或者农作物4D生长态势,人体姿势识别,表情识别
3. 点云数据集
已有的3D点云数据集主要有ModelNet40,ShapeNet,S3DIS,3D Match,KITTI,其中前3者主要应用于CAD模型,室内建筑物分割,室内场景配准等,KITTI数据集主要应用于自动驾驶、ADAS、外部场景视觉SLAM等。
4. 基于点云数据的目标识别
针对当前视觉SLAM采集的数据,下文重点对比点云数据的目标识别方法,包括传统方法和深度学习方法。
4.1 传统方法
1) 基于边缘的方法
检测点强度快速变化的边缘。这些边通常是点云中不同区域的边界。因此,点云的区域被分割。
2) 基于区域的方法
首先搜索邻域。附近的点具有相似模式的区域被组合成孤立区域,然后是发现不同区域之间的差异。
3)基于属性的方法
首先计算点云数据的属性,然后基于属性对点云进行聚类。
4.基于模型的方法
该方法是纯几何的。相同的点数学表示为几何形状,如球体、圆锥体、平面和圆柱体被分组为一个段。
5) 基于图的方法
将点云视为图。一个简单的模型是每个顶点对应一个点,边连接到特定的点与邻近点。
一般来说,分割点云有两个传统的分支。这个首先涉及纯数学模型和几何推理技术比如区域生长或模型拟合。第二个是3D图像的提取,使用特征描述符的特征和使用机器的对象类别分类学习技巧。
第一种方法提供了更快的计算速度,但它只适用于简单的场景。因此,第二种方法更为有效通常在实践中使用,通常表现更好。考虑到第二种方法,分割通常被表述为逐点分类问题。每个点首先由特征描述符描述例如FPFH或SHOT,它们依靠手工设计特征和点的局部几何特性。然后,提取特征被连接到特征向量并输入到分类器中,如支持向量机机器(SVM)和随机森林(RF)。
4.2深度学习方法
目前对于点云数据的分类与分割,深度学习方法已经成为主流。比较常用的有PointNet,PointNet++, DGCNN, PointCNN, PointSIFT, Point Transformer, and RandLANet等。其中以前两者应用居多。
1)PointNet
PointNet 网络结构如下所示。
由图可以看出,由于点云的旋转非常的简单,只需要对一个N×D的点云矩阵乘以一个D×D的旋转矩阵即可,因此对输入点云学习一个3×3的矩阵,即可将其矫正;同样的将点云映射到K维的冗余空间后,再对K维的点云特征做一次校对,只不过这次校对需要引入一个正则化惩罚项,希望其尽可能接近于一个正交矩阵。
具体来说,对于每一个N×3的点云输入,对应于原始N个点的3D坐标信息,网络先通过一个T-Net将其在空间上对齐(旋转到正面),其中T-Net就像一个迷你型-point-net网络,可学习得到3×3仿射变换矩阵。再通过MLP将其映射到64维的空间上,再进行对齐,最后映射到1024维的空间上。这时对于每一个点,都有一个1024维的向量表征,而这样的向量表征对于一个3维的点云明显是冗余的,因此这个时候引入最大池化操作,将1024维所有通道上都只保留最大的那一个,这样得到的1×1024的向量就是N个点云的全局特征。
如果做的是分类的问题,直接将这个全局特征再进过MLP去输出每一类的概率即可;但如果是分割问题,由于需要输出的是逐点的类别,因此其将全局特征拼接在了点云64维的逐点特征上,网络能够同时利用局部和全局特征的几何和全局语义,最后通过MLP,输出逐点的分类概率。
2)PointNet++
从很多实验结果都可以看出,PointNet对于场景的分割效果十分一般,由于其网络直接暴力地将所有的点最大池化为了一个全局特征,因此局部点与点之间的联系并没有被网络学习到。在分类和物体的Part Segmentation中,这样的问题还可以通过中心化物体的坐标轴部分地解决,但在场景分割中,这就导致效果十分一般了。
进一步地研究人员提出了一个分层特征学习框架PointNet++来解决这个问题,从而改善PointNet的一些局限性。分层学习过程是通过一系列设定的抽象级别。每个集合抽象级别由一个采样组层、分组层和PointNet层。PointNet++网络结构
如下所示。
PointNet++中主要借鉴了CNN的多层感受野的思想。CNN通过分层不断地使用卷积核扫描图像上的像素并做内积,使得越到后面的特征图感受野越大,同时每个像素包含的信息也越多。而PointNet++就是仿照了这样的结构,具体如下:
其先通过在整个点云的局部采样并划一个范围,将里面的点作为局部的特征,用PointNet进行一次特征的提取。因此,通过了多次这样的操作以后,原本的点的个数变得越来越少,而每个点都是有上一层更多的点通过PointNet提取出来的局部特征,也就是每个点包含的信息变多了。文章将这样的一个层成为Set Abstraction。
一个Set Abstraction主要由三部分组成:
- Sampling:利用FPS(最远点采样)随机采样点
- Grouping:利用Ball Query划一个R为半径的圈,将每个圈里面的点云作为一簇
- PointNet: 对Sampling+Grouping以后的点云进行局部的全局特征提取
3)DGCNN
点云这种数据结构是离散的,缺乏拓扑信息(也就是单个点与点之间的关联并没有显式建立,但是它们之间应该是有实际意义的)。
自然而然地,如果我们能够通过某种方式建立点与点之间的拓扑关系,应该可以增强表征的能力。
通过设计EdgeConv,能够非常好地提取点云局部形状的特征,同时还能够保持排列不变性。
DGCNN模型能够通过动态更新层与层之间的图结构来更好地学习点集的语义信息。
所设计的EdgeConv具有普适性,可以很好地集成到多个已经存在的点云处理的pipeline中。
4)PointCNN
PointCNN也是直接对点云数据进行处理,并没有转化为其他的数据形式。借鉴卷积操作对规则数据的处理,想到先对无序点云进行一个X操作,将其转化为规则数据。
整个过程,感觉应该是在knn的部分实现了一个结构化,然后在X操作之后实现了对整个数据的规则化。
相较于PointNet,对点云数据是进行逐点卷积的一维卷积操作,PointCNN类似于图片的卷积操作,充分考虑到了局部信息。
5)PointSIFT
PointSIFT属于PointNet系列,是在PointNet++的基础上提出来的,里面的很多概念都直接用了PointNet++。
因为CNN和SIFT在2D领域提取特征有不错的表现,之前用了CNN,构成了pointCNN,所以这里尝试SIFT,就形成了PointSIFT。
PointNet++在grouping的时候采用KNN,这可能导致这些点都是一个方向的,PointSIFT找到的点是8个方向的。
PointNet++的max pooling会忽略很多信息,而有序的描述子能保留更多信息,所以用了conv提取特征。
ordering of the three coordinatesOE unit在八个八分圆上找最近点得到(2,2,2)的最近点集合,八分圆是通过三个坐标的顺序划分的orientation-encoding convolution, 分别沿着XYZ进行卷积,得到(2,2,2,d)的特征,其中(2,2,2)对应三个坐标轴,pointnet++的multi scale grouping。
PointSIFT的主要特点:
(1)捕获所有方向的信息
(2)具有尺度感知能力
(3)具有很强的可移植性
6)Point Transformer
Transformer模型特别适合于点云处理,因为自注意力是Transformer的核心,本质上是一个集合算子:它对输入元素具有顺序不变性和数量不变性,因此,将自注意力机制用于点云是自然而然的,因为点云本质上也是嵌入在3D空间的集合。
通过将这种直觉具体化,并开发了一个用于3D点云处理的自注意层。
Point Transformer主要特点在于:
1)为点云处理设计了一个表达能力非常强的Point Transformer Layer。该层具有顺序不变性和数量不变性,因此天生适合点云处理。
2)在Point Transformer Layer的基础上,构建了高性能的Point Transformer networks,用于点云的分类和密度预测dense prediction,这些网络可以作为3D场景理解的一般骨干。
7)RandLANet
RandLANet是一种基于随机降采样和局部特征聚合的网络结构。在Semantic3D和SemanticKITTI等大场景点云分割数据集上取得了较好的效果,具有很高的效率,实验称相比基于图的方法SPG效率提升200倍。
主要特点在于:
1)分析和比较了现有的点云降采样方法,将降采样方式分为Heuristic Sampling以及Learning-based Sampling两大类。并且认为随机降采样是一种适合大规模点云高效学习的方法。
2)为了降低随机采样的信息丢失,进一步提出了局部特征聚合模块(Local feature aggregation),包括三个子模块:
1) 局部空间编码(LocSE):显式地编码三维点云的空间几何形状信息,网络能够从各个点的相对位置以及距离信息中更好地学习到空间的几何结构;
2) 注意力池化(attentive pooling):上一步的邻域特征点集的加权求和,进行特征聚合(特征深度融合);
3) 扩张残差块(dilated residual block): 增大每个点的感受野,通过逐步增加每个点的感受野来更好地学习和保留大场景点云中复杂的几何结构。
RandLA-Net网络在多个大场景点云的数据集上都展现出较好的效果,及较高的计算效率,
与之前的采样方法不同,论文使用了最简单高效的RS(Random Sampling)。RS的优点在于:
- 时间复杂度低,高效
- 空间复杂度低,基本不需要额外的内存
因此,作者认为,Random Sampling是最适合处理大规模点云的采样方式。这种采样带来的问题是:可能会丢失一些重要的点。为了解决重要点可能丢失的问题,论文提出了局部特征整合模块LFA(local feature aggregation module)。
5. 参考文献
1.3D Point Cloud Analysis: Traditional, Deep Learning, and Explainable Machine Learning Methods
2.A comprehensive survey on point cloud registration
3.PointNet-Deep Learning on Point Sets for 3D Classification and Segmentation
4.RandLA-Net Efficient Semantic Segmentation of Large-Scale Point Clouds