Deep Learning for 3D Point Clouds: A Survey
为了促进未来的
idea
生成和鉴别,此处对该篇[Submitted on 27 Dec 2019 (v1), last revised 23 Jun 2020 (this version, v2)]
的Deep Learning for 3D Point Clouds: A Survey
做一个了结。
1. INTRODUCTION
随着各种3D
采集技术的快速发展,3D
传感器的可用性和价格越来越便宜,包括各种类型3D扫描仪,LiDARS
和RGB-D
相机。这些3D
采集设备可以提供丰富的几何,形状和比例信息。通过2D
图像的补充,3D
数据提供了更好的了解机器周围环境的机会。3D数据在不同的领域有着广泛的应用,包括自动驾驶,机器人技术,遥感和医疗。
3D
数据由很多格式的表示方式,例如RGB-D
,point cloud
,mesh
,volumetric grids
。其中点云在不进行任何离散化的情况下保留了原始的几何信息。因此它是许多场景理解相关应用(autopilot,rebotics)
的首选表示。几年来深度学习很吊,但是他在三维点云的深入学习方面依然由一些重大挑战,如数据集规模小
,三维点云的高维性
和非结构化的性质
。\(\color{green}{本文主要分析用于处理电文的深度学习方法}\)。
最近也公布了很多公开可用的数据集,如ModelNet
,ScanObjectNN
,ShapeNet
,PartNet
,S3DIS
,ScanNet
,Semantic3D
,ApolloCar3D
和KITTI Vision
。上面数据集也推动了3D点云的深度学习研究,提出了越来越多的方法来解决换个点云处理的相关问题,包括3D shape classification
,3D Object detection and tracking
,3D point cloud segmentation
,3D point cloud registration
,6-DOF pose estimation
,3D reconstruction
。改论文是第一篇专门关注点云理解的深度学习方法论文。现有3D
点云的深度学习方法如图1所示。和现有文献相比本文主要贡献如下:
- 据我们所知,这是第一篇综述论文,全面介绍了几个重要点云理解任务的深度学习方法,包括3D形状分类、3D对象检测和跟踪以及3D点云分割。
- 和现有关注点在
3D
数据类型表示方面的论文不同,本文主要关注3D点云的深度学习方法。 - 本文介绍了点云深度学习最新的进展,因此他为读者提供了最先进的方法。
- 提供了几种公开数据集上现有方法的综合比较,并提供简要总结和深入讨论。
本文结构如下:第二节介绍各个项目数据集和评估指标任务,第三节回顾三维形状分类方法,第四节概述现有三维目标检测和跟踪方法,第五节对点云分割方法进行了综述,包括语义分割、实例分割和部件分割。最后第六节对全文进行总结。
2. 背景
2.1 数据集
为了评估深度学习算法,我们收集了很多数据集并在不同的3D点云应用中评估性能。上表1,列出了一些用于3D形状分类、3D对象检测和跟踪以及3D点云分割的典型数据集。特别是还总结了这些数据的属性。
分类数据集的特点。
对于3D形状分类,这里由两种数据集,合成数据
和真实世界数据集
。合成数据集中的对象是完整的,没有任何的遮挡和背景。相比之下,真实世界数据集中的对象在不同级别被遮挡,一些对象收到背景噪声的污染。
物体检测和追踪数据集特点
对于3D物体检测和追踪,这里也有两种数据。室内场景和室外城市场景。室内数据集中的点云要么从密集深度贴图转换,要么从三维网格采样。室外城市数据集设计用于自动驾驶,其中对象在空间上很好分离,并且这些点云很稀疏。
3D点云分割
对于3D点云分割,这些数据集由不同类型的传感器获取,包括移动激光扫描仪、航空激光扫描仪、静态地面激光扫描仪、RGBD相机和其他3D扫描仪。这些数据集可用于开发解决各种挑战的算法,包含干扰物、形状不完整、类别不均衡。
2.2 评估指标
针对不同的点云任务,提出了不同的评估指标来测试这些方法。对于3D形状分类Overall Accuracy(OA)
and mean class accuracy
是最常用的性能标准。
对于三维目标检测,平均精度(AP)
是最常用的标准。他的计算方式是precision-recall
曲线的面积。Precision
和Success
通常用于3D单目标追踪的整体性能。 平均多目标跟踪准确率和平均多目标追踪精确率是评估三位多目标跟踪最常用的标准。对于3D点云分割OA
、并集平均交点(mIoU)
和平均类精度(mAcc)
是最常用的性能评估标准。特别是mAP
也用于3D点云的实例分割。
3. 3D形状分类
对于这一类任务下学习每个点的编码方法,然后用聚合函数从整个点云中提取全局特征编码方法,最后通过讲全局编码信息输入到几个全连接层以实现分类\(\color{green}{针对点的处理方式}\)。根据神经网络输入的数据类型不同,现有的三维形状分类方法可分为基于多视图,基于体积和基于点云的方法。下图介绍了几种里程碑式的方法。
- 基于多视图的方法是将非结构、无序化的点云数据投影为二维图像
- 基于体积的方法将点云转化为三维体积表示方法。然后利用现有的二维或三维卷积对形状进行分类。
- 基于点云的方法直接处理原始点云,无序任何体素化或投影,这种数据结构可以保留最多的原始信息,也是我认为的最好的处理方法。
基于点的方法不会引入噪声以及造成信息丢失,所以越来越受欢迎。因此本论文也主要关注基于点的方法,至于体素化和多视图也会因为完整性而略有涉猎。
MVCNN
一项2015年开创性的工作来自ICCV
,它只是将多视图的特征做一个MaxPooling
到全局描述特征,然而Max-pooling
仅仅在指定视角中保留了最大值所以会造成信息损失。
MHBN
一项2018年的补充性工作来自CVPR
,它提出MVCNN
将视图通过max-pooling
特征合并为全局特征,作为对3D对象的表示。但是对于每个神经节点,max-pooling
操作只保留了针对某个视角的最大特征值,而忽略了出最大值的所有因素,因此造成了视觉信息的丢失。\(\color{red}{当前的直接对于点云进行处理的任务,是否也有这种误区?}\),本文对max-pooling
是否可以改为sum-pooling
以解决上述问题做出解释,结论是效果会更差。
对于上述max
和sum
的限制,本文提出一种利用patch
级别的特征去替代view
级别的特征(意思是将一个view分为多个patch,patch越多,上面max带来的loss越小。)
如上图所示,通过patch
化之后,它具有以下优点。
- 看图C,它可以在两个完全不同的view中获取到相关
patch
对,以做到聚类效果。 - 即使在两个对应的view中,他也只计算由相关
patch
组成的对,而将不相关的patch
解耦。
本文提出一个名为bilinear pooling
的方法,去对patch
的相似性进行打分,降低了每个patch要和所有patch对比的高额杂度。
3.1 基于多视角的方法
View-gcn
一项2020年CVPR,这一篇文章,属于找多视图之间的关系,建立起来多视图之间的关系从而更好地还原点云本身信息的一个操作。其中包含了图网络的一些思想应用。
在不同的视角看物体,得到的信息也是不同的。例如上图,不同视角中的椅子有很明显的区别,而茶杯基本没有区别。所以不同图像的联系可能隐藏了3D物体的潜在信息,这个联系会给3D物体的形状识别带了有价值的信息。因此本文的主要工作就是设计一个GCN
在聚合多视图特征的时候自动调查view
之间的关系。
之前有人将
multi-view
视为一个序列,并通过RNN
去探索多视图特征,但是一维的顺序可以很好的模拟相机顺序位于围绕对象上的位置,但是对于更一般的情况,它会忽略多个view的3D几何图形。
主要挑战:如何聚合多视图特征为一个全局的3D形状描述。
传统方法:通过最大池化来聚合多视图特征,该方法是置换不变的,但忽略了view
和view
之间的关系。
本文目的:通过view-Graph
来表示物体的3D形状,每一个view对应graph中的一个节点。节点间的边由摄像机坐标的k近邻确定。在此基础上设计了一种图卷积神经网络view-GCN用于聚合多视图特征以学习全局形状描述子。
上图由三个部分组成。首先,通过主干网络从一个三维图像获得多个view,并在其中提取特征,使用multi-view
特征表示节点,构建view-graph
。其次我们设计GCN
来分层聚合view-graph
的多视图特征,以生成一个全局性状描述符。最后使用全局形状描述符进行形状识别。
3.2 基于体素的方法
此类方法通常将点云体素化为3D grids,然后利用3D-CNN
去提取特征进行分类。
Maturana这些人引入了一种称为VoxNet
的体积占用网络,以实现鲁棒的3D对象识别。Wu使用基于3D shape的深度卷积网络去学习3D shape的点的分布,但是因为运算量立方式增长,所以无法运用到密集的三维数据上。
为此引入了层次结构和紧凑结构(如八叉树),以降低这些方法的计算难度,节省内存成本。OctNet一篇2017的CVPR,首次使用混合网格八叉树结构分层划分点云,该结构表示场景中沿规则网格具有多个浅八叉树的场景。采用a bit string
的表示方法对八叉树进行高效的编码,并通过简单的算法对每个voxel
的特征向量进行索引。wang提出了一种基于八叉树的CNN三维形状分类方法,提高了效率和减少内存消耗。
3.3 基于点云的方法
根据每个点的特征进行学习的网络结构,这类方法可以被分为逐点MLP
、基于卷积、基于图、基于层次数据结构的方法和其他经典方法。
3.3.1 逐点法
此种方法使用多个共享参数的MLP
对每个点进行独立编码,然后使用对称函数将其聚合为全局特征。如下图所示:
因为点云的不规则性,所以2D的操作方法无法直接推广到3D上,作为一项开创性的工作PointNet
直接将点云作为输入,然后过一遍共享参数的MLP
,然后使用聚合函数实现置换不变性并聚合出整体特征。DeepSet是总结所有表示和应用非线性变换实现置换不变性的一篇论文。因为PointNet
中是讲每个点的特征独立学习的,所以无法捕获点之间的局部结构信息,因此后来提出了一种分层的网络PointNet++
,用于从每个带你的邻域捕获精细的几何结构。PointNet从局部几何中学习特征,并逐层抽象局部特征。
因为它简单和强大的能力,许多网络都是基于PointNet
开发的,Mo-Net
(2018,ICCVW)
这个Mo-Net
应该是受到DGCNN
中那个KNN
操作的启发,然后水出来的一篇文章,就是利用knn
获取到了多一点的信息,我这边也没仔细看,有不同的可以补充一下。
PointWeb(19年的一篇CVPR)本文提出从点云局部邻域中提取上下文特征的新方法,我们在局部邻域紧密的链接每个点和其他点,目的是该区域的每个点的特征可以更好地表示该区域。提出了一个新颖的特征调整模块,即自适应特征调整模块,用于发现点之间的相互作用。对
PointWeb和DGCNN的对比:DGCNN是讲挑选的中心点的特征及其邻域之间的\(k\)个特征连接起来,形成多几个输入维度的特征差,然后去MLP
和max-pooling
。PointWeb
认为DGCNN
还是只对挑选出的中心点的特征考虑关系,并且区域信息的合并依然是有限的,区域的聚合操作也通过简单的最大池来实现(诟病的最大池应该和这个MHBN是一样的,无法获取到除max feature之外的信息,所以取patch去做)。
这边具体值得读一读的文章有:
PointNet
,DGCNN
,View-GCN
3.3.2 基于卷积的方法
以PointCNN
中的\(\mathcal{X}-Conv\)为例,此处做个引子带出来卷积的方法。
\(\mathcal{X}-Conv\)来鹅城只为两件事:
- 对每个代表点周围的点特征做集成。
- 在隐空间对输入做重排去除输入顺序的影响。
和二维网格结构上定义的核相比,三维点云的卷积核由于点云的不规则性而难以设计。根据卷积核的类型,现有的三维卷积方法可分为连续卷积和离散卷积,如下图:
点的局部邻域的连续和离散卷积的图示:(a),表示以\(p\)为中心的局部邻域\(q_i\)。(b)和(c),分别表示三维连续卷积,和离散卷积
3D连续卷积的方法:该方法在连续空间上定义了卷积核,其中相邻点的权重和中心点的空间分布有关。
DGCNN
:通过动态的方法,在每一层使用KNN
找到最近的K
个点,然后在特征层面上将K
个点和中心点concatenate
起来,以利用local feature
。
PointWeb
:在DGCNN
的基础上更进一步提出AFA
,\(F'_i=(1+MLP(F_i))\cdot F_i-\sum_{j=1,j\neq i}^MMLP(F_i-F_j)\cdot(F_j-F_i)\),更好地利用周围点的信息。
3D卷积可以解释为给定子集上加权和。作为RS-CNN
的核心层,RS-Conv
以某一中心点的周围的子集点作为其输入,通过学习局部子集中点之间的低级关系(欧式距离和相对距离)到高级关系的映射使用MLP
实现卷积。\(\color{red}{和上面逐点法的利用local\ feature信息的操作差不多。}\)