3D点云深度学习
3D点云深度学习
在自动驾驶中关于三维点云的深度学习方法应用、三维场景语义理解的方法以及对应的关键技术介绍。
1. 数据
但是对于3D点云,数据正在迅速增长。大有从2D向3D发展的趋势,比如在opencv中就已经慢慢包含了3D点云的处理的相关模块,在数据方面点云的获取也是有多种渠道, 无论是源于CAD模型还是来自LiDAR传感器或RGBD相机的扫描点云,无处不在。 另外,大多数系统直接获取3D点云而不是拍摄图像并进行处理。因此,在深度学习大火的年代,应该如何应用这些令人惊叹的深度学习工具,在3D点云上的处理上达到对二维图像那样起到很好的作用呢?
3D点云应用深度学习面临的挑战。首先在神经网络上面临的挑战:
(1)非结构化数据(无网格):点云是分布在空间中的XYZ点。 没有结构化的网格来帮助CNN滤波器。
(2)不变性排列:点云本质上是一长串点(nx3矩阵,其中n是点数)。 在几何上,点的顺序不影响它在底层矩阵结构中的表示方式,例如,
相同的点云可以由两个完全不同的矩阵表示。 如下图所示:
图1
(3)点云数量上的变化:在图像中,像素的数量是一个给定的常数,取决于相机。 然而,点云的数量可能会有很大的变化,这取决于各种传感器。
在点云数据方面的挑战:
(1)缺少数据:扫描的模型通常被遮挡,部分数据丢失。
(2)噪音:所有传感器都是嘈杂的。
有几种类型的噪声,包括点云扰动和异常值。 这意味着一个点有一定的概率位于它被采样的地方(扰动)附近的某一半径范围内,或者它可能出现在空间的任意位置(异常值)。
(3)旋转:一辆车向左转,同一辆车向右转,会有不同的点云代表同一辆车
Princeton’s Modelnet40 dataset。 它包含约40个对象类别(如飞机,表格,植物等),用三角形网格表示的12311个CAD模型。 数据分为9843个培训模式和2468个测试模式,如下图
图2
在点云上应用深度学习的直接方法是将数据转换为体积表示。 例如体素网格。 这样我们就可以用没有神经网络问题的3D滤波器来训练一个CNN(网格提供了结构,网格的转换解决了排列问题,体素的数量也是不变的)。
但是,这有一些不利因素。 体积数据可能变得非常大,非常快。 让我们考虑256×256 = 65536像素的典型图像大小,现在让我们添加一个维度256x256x256
= 16777216体素。 这是很大的数据量(尽管GPU一直在发展)。 这也意味着非常缓慢的处理时间。
因此,通常我们需要妥协并采取较低的分辨率(一些方法使用64x64x64),但是它带来了量化误差的代价。所以,所需的解决方案是一个直接的深度学习的方法,将是3D点云应用深度学习的重点。
作者调查了三种最近发表的文章,主要针对对点云进行深度学习的论文。 正如下图所示,展示了3D点云分类准确性出版(准确性,年份和数据类型),它总结了数据集上的最新准确性结果。 以及每种方法正在处理的数据的类型。 可以看到,在2015年,大多数方法都用于多视图数据(这是一种简短的说法 – 让我们拍摄3D模型的几张照片并使用2D方法处理它们),2016年更多的方法使用了体素表示的点云学习和2017年的基于点的方法有了大幅度的增长。
图3
2. 三维点云深度学习
在深度学习引入前,传统方法大多使用人工设计的特征[26-29] 以及随机森林(Random Forest) 等分类器进行点云的语义理解。近年来,深度学习[30] 在图像处理、语音识别等领域已有较多成果。
深度学习的成功之处在于其可以利用如前所述的大规模数据集,进行特征的自动学习,避免人工设计特征的局限。卷积神经网络 (Convolutional Neural Network, CNN) 是深度学习中强有力的特征提取工具,其应用的条件之一是所处理的数据为规则数据。值得注意的是,语音为一维空间上规则排列的信号,图像为二维空间上栅格排列的像素,视频为三维空间上的规则数据,均满足 CNN 应用的条件。受制于原始点云数据的无序性,直接在点云上应用卷积神经网络(Convolutional Neural Network, CNN) 并不现实。针对此问题,众多学者进行了大量有价值的研究。
图 4. 三维点云的四种表示
三维点云有多种表示方法(如图1所示),不同的表示对应着不同的处理方法。
比较容易的处理方式为将其投影为二维图像或者转换为三维体素 (Voxel),从而将无序的空间点转变为规则的数据排列;也可以使用原始点作为表示,不做任何变换,该方式的好处为最大可能保留所有原始信息。此外,点云作为空间无序点集,可以被看作普适意义上的图数据。点云还有另外一种表示,称作网格 (Mesh),其也可以被看作是构建了局部连接关系的点,即为图。将点云看作图数据,可以使用图领域新兴的图卷积 (Graph Convolution) 技术进行处理。需要提及的是,原始点的表示和图表示之间并无明确界限(事实上原始点云和网格 (Mesh) 之间有一定区别,但若从语义理解方法的角度看,可暂时忽略此区别,将Mesh看作是增加了一种连接关系),本文将其划分为两类,是为了更加详细地介绍图卷积的发展背景与脉络。综上,本节从四种点云表示切入,介绍深度学习在三维点云上的应用,分别为:基于二维投影的方法、基于三维体素的方法、基于原始点的方法和基于图的方法。
2.1 基于二维投影的方法
CNN 最好的应用领域在于图像处理,将三维点云数据投影到二维图像平面,即可使得 CNN 应用于点云数据成为可能。
在文献 [31] 中,作者将原始的三维点云从不同视角进行投影,得到 12 个视角下的投影图片,并使用 CNN 对不同视角的图片分别提取特征,通过池化结合不同视角的信息,进行最终的点云物体分类。在文献 [32, 33] 中,作者使用类似的思路对三维场景进行多视角投影,生成一系列 RGB 图、深度图及其他属性图片,并使用全卷积 (Fully
Convolutional Networks, FCN)[34] 进行像素级语义分割,最终通过反向投影得到点云的语义分割结果。在文献 [35] 中,作者将单帧 64 线激光雷达数据投影为鸟瞰图和前视图,并结合摄像头采集的 RGB 图,并列输入进三个CNN,其中,鸟瞰图和前视图编码了高度、密度、强度等一系列信息,三个网络的特征相互融合得到物体的三维边界框。在文献 [36] 中,作者使用类似于 [31] 的思路,设置多个不同尺度的投影视角,并结合条件随机场(Conditional
Random Field,CRF)[37],进行三维点云物体的部件分割。在文献 [38] 中,作者对单帧 64 线激光雷达数据进行球面投影 (Spherical Projection),得到对应的图像,图像的像素值编码为 x 坐标、强度和深度三通道,使用运行效率较高的 SqueezeNet[39] 进行图像的语义分割,使用 CRF 进行后处理优化,最终将分割结果投影至点云。在文献 [40]中,作者将层次分组概念引入到多视角投影中,提出“视角-组别-形状”由低到高的三个层次,实现更加具有可分度的特征学习。在文献 [41] 中,作者沿着点云表面法线方向,将局部点云投影至切平面,对切平面上的投影图像使用 FCN 进行语义分割。在文献 [42] 中,作者使用类似于 [35] 的点云投影方法,进行三维目标的边框预测。与 [35] 不同的是, [42] 未使用前视图,并舍弃了鸟瞰图中的强度信息。
2.2 基于三维体素的方法
对三维点云进行二维投影降低了算法处理的难度,但是三维到二维的投影必然带来几何结构信息的损失,直接进行三维特征的提取在一些场景下是非常有必要的。
一种最自然的想法便是 CNN 的延拓,将二维卷积神经网络拓展一个维度,使其可以处理三维排列的数据;同时,对点云进行体素化 (Voxelization),将其转换为空间上规则排布的栅格,使得三维卷积神经网络(Three
Dimension Convolutional Neural Network, 3DCNN) 可以直接应用在这种表示上。文献 [43, 44] 是较早将 3DCNN 应用于三维点云处理的工作,他们将原始点云转换为体素 (Voxel),并使用 3DCNN 进行点云物体的特征提取。在文献 [45] 中,作者深入探讨了基于二维投影的方法和基于三维体素的方法的优劣,尝试寻找这两种方法精度差异的来源,并针对 3DCNN 提出两种优化措施:使用完整物体的一部分进行辅助训练以及使用各向异性的 3D卷积核。在文献 [46] 中,作者使用三维卷积构建三维全卷积网络,串联以三线性插值和条件随机场,实现室内、室外点云场景的语义分割。在文献 [47] 中,作者提出体素特征编码模块,使用 PointNet[48]编码同一体素内的特征,并使用 3DCNN 进行体素间的特征提取。在文献 [49, 50] 中,作者使用八叉树数据结构对三维点云进行编码,以降低3DCNN 的显存占用与计算耗时,使得体素的分辨率可以进一步提高,从而可以学习到空间上更加精细的特征。在文献 [51, 52] 中,作者提出类似的降低 3DCNN 显存占用的方法,不过省略了使用八叉树作为中间表示,直接通过哈希表构建了稀疏矩阵的索引关系。这类思路极大提高了 3DCNN 提取特征的能力。在文献 [53]中,作者将稀疏编码技术应用于点云的目标检测,其整体框架类似于 [47]。由于稀疏编码的优势,使得该方法相比 [47] 取得了更好的效果。在文献 [54] 中,作者将稀疏优化的卷积[51] 用作点云目标检测的特征提取网络,借鉴传统两阶段目标检测框架[55],提升了三维目标检测的性能。
2.3 基于原始点的方法
无论是二维投影还是三位体素,均需要对原始点云进行一定的转换,而转换必然带来数据信息的损失。在文献 [48] 中,作者开创性地提出 PointNet,一个用于直接处理原始点云数据的神经网络。该方法使用多层感知机进行逐点特征提取,使用池化进行全局特征提取,可用于三维点云的分类、部件分割、语义分割等多种任务,开辟了基于原始点方法的先河。但是 PointNet 没有考虑点云的局部特征,该研究者在随后发表的 [56] 中,对 PointNet 进行改进,通过设计点云数据的层次结构以及多尺度特征,实现局部特征与全局特征的融合。点云局部特征的有效提取是点云理解中较为本质的问题之一。在文献 [57] 中,作者根据点云局部坐标信息学习置换矩阵,对局部点云的特征进行变换和加权,试图实现点云局部排序的一致性。在文献 [58] 中,作者通过自组织映射从原始点云中计算得到自组织节点,并将近邻点的特征汇聚至自组织节点处。在文献 [59]中,作者将点云转换到 Lattice 坐标系下,并定义了在该坐标系下的卷积操作。在文献 [60] 中,作者沿三个坐标轴对点云进行空间分块,使用三组循环神经网络(RecurrentNeural Network, RNN) 进行块与块之间特征的传递,构建局部联系。在文献 [61] 中,作者使用金字塔池化方法和双向 RNN 进行局部特征的传递。文献[62] 借鉴 SIFT[63] 特征点的思路,将局部点云划分为八个区域,解决仅根据离进行近邻搜索所带来的问题。类似的思路有 [64],其提出一种逐点的 3D 卷积,对于每个点,将其局部邻域按照卷积核的排列规则,划分到不同的栅格中,并将 3D卷积核应用于该局部栅格。在文献 [65] 中,作者通过公式推导提出一种高效的点云卷积,在不改变计算精度的情况下,大幅降低了模型显存的需求。在文献 [66]中,作者定义了一种新的点云卷积核函数,其不同于规则的固定栅格式卷积,而是通过插值计算每个点处的卷积参数,在使用上更加灵活。基于原始点的方法从 2017 年开始兴起,并已经取得了较大的进步,其在语义分割[56, 62]、目标检测[67-69]、实例分割[70, 71]、点云匹配[72, 73] 等任务上应用并取得不错的效果。
2.4 基于图的方法
现实生活中存在大量的非结构化数据,如交通网络、社交网络等,这些数据的节点间存在联系,可以表示为图。研究图数据的学习是近年来学界的热点。
三维点云数据可以看作图数据的一种,图网络的很多思想可以被借鉴于点云数据的特征学习中。图卷积 (Graph Convolution
Network, GCN) 可分为基于谱的图卷积(Spectralbased GCN) 和基于空间的图卷积 (Spatial-based GCN)。
基于谱的图卷积的基本思路是:依据卷积定理,首先根据图的傅里叶变换将图数据从空间域变换到谱域,并在谱域上进行卷积,随后再通过图的傅里叶反变换将卷积结果转换到空间域。
早期的图卷积大多为基于谱的方法,在文献 [74]
中,作者使用拉普拉斯矩阵 (Laplacian Matrix) 定义图的傅里叶变换,并定义了图数据上的卷积操作,构建了图卷积网络。在文献 [75] 中,作者对 [74] 的工作进行了改进,使用切比雪夫多项式代替先前工作中的傅里叶变换,避免了矩阵的特征值分解,同时使得图卷积操作的感受野变为近邻的 k 个节点 (K-localized),参数复杂度也由