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扫描仪,LiDARSRGB-D相机。这些3D采集设备可以提供丰富的几何,形状和比例信息。通过2D图像的补充,3D数据提供了更好的了解机器周围环境的机会。3D数据在不同的领域有着广泛的应用,包括自动驾驶,机器人技术,遥感和医疗。


3D数据由很多格式的表示方式,例如RGB-Dpoint cloudmeshvolumetric grids。其中点云在不进行任何离散化的情况下保留了原始的几何信息。因此它是许多场景理解相关应用(autopilot,rebotics)的首选表示。几年来深度学习很吊,但是他在三维点云的深入学习方面依然由一些重大挑战,如数据集规模小,三维点云的高维性非结构化的性质\(\color{green}{本文主要分析用于处理电文的深度学习方法}\)


最近也公布了很多公开可用的数据集,如ModelNetScanObjectNNShapeNetPartNetS3DISScanNetSemantic3DApolloCar3DKITTI Vision。上面数据集也推动了3D点云的深度学习研究,提出了越来越多的方法来解决换个点云处理的相关问题,包括3D shape classification3D Object detection and tracking3D point cloud segmentation3D point cloud registration6-DOF pose estimation3D reconstruction。改论文是第一篇专门关注点云理解的深度学习方法论文。现有3D点云的深度学习方法如图1所示。和现有文献相比本文主要贡献如下:

  1. 据我们所知,这是第一篇综述论文,全面介绍了几个重要点云理解任务的深度学习方法,包括3D形状分类、3D对象检测和跟踪以及3D点云分割。
  2. 和现有关注点在3D数据类型表示方面的论文不同,本文主要关注3D点云的深度学习方法。
  3. 本文介绍了点云深度学习最新的进展,因此他为读者提供了最先进的方法。
  4. 提供了几种公开数据集上现有方法的综合比较,并提供简要总结和深入讨论。

本文结构如下:第二节介绍各个项目数据集和评估指标任务,第三节回顾三维形状分类方法,第四节概述现有三维目标检测和跟踪方法,第五节对点云分割方法进行了综述,包括语义分割、实例分割和部件分割。最后第六节对全文进行总结。
image

2. 背景

2.1 数据集

image

为了评估深度学习算法,我们收集了很多数据集并在不同的3D点云应用中评估性能。上表1,列出了一些用于3D形状分类、3D对象检测和跟踪以及3D点云分割的典型数据集。特别是还总结了这些数据的属性。


分类数据集的特点。

对于3D形状分类,这里由两种数据集,合成数据真实世界数据集。合成数据集中的对象是完整的,没有任何的遮挡和背景。相比之下,真实世界数据集中的对象在不同级别被遮挡,一些对象收到背景噪声的污染。


物体检测和追踪数据集特点

对于3D物体检测和追踪,这里也有两种数据。室内场景和室外城市场景。室内数据集中的点云要么从密集深度贴图转换,要么从三维网格采样。室外城市数据集设计用于自动驾驶,其中对象在空间上很好分离,并且这些点云很稀疏。


3D点云分割

对于3D点云分割,这些数据集由不同类型的传感器获取,包括移动激光扫描仪、航空激光扫描仪、静态地面激光扫描仪、RGBD相机和其他3D扫描仪。这些数据集可用于开发解决各种挑战的算法,包含干扰物形状不完整类别不均衡

2.2 评估指标

针对不同的点云任务,提出了不同的评估指标来测试这些方法。对于3D形状分类Overall Accuracy(OA) and mean class accuracy是最常用的性能标准。


对于三维目标检测,平均精度(AP)是最常用的标准。他的计算方式是precision-recall曲线的面积。PrecisionSuccess通常用于3D单目标追踪的整体性能。 平均多目标跟踪准确率和平均多目标追踪精确率是评估三位多目标跟踪最常用的标准。对于3D点云分割OA、并集平均交点(mIoU)和平均类精度(mAcc)是最常用的性能评估标准。特别是mAP也用于3D点云的实例分割。

3. 3D形状分类

对于这一类任务下学习每个点的编码方法,然后用聚合函数从整个点云中提取全局特征编码方法,最后通过讲全局编码信息输入到几个全连接层以实现分类\(\color{green}{针对点的处理方式}\)。根据神经网络输入的数据类型不同,现有的三维形状分类方法可分为基于多视图,基于体积和基于点云的方法。下图介绍了几种里程碑式的方法。

image

其中PointNet解析在这里
其中DGCNN解析在这里

  1. 基于多视图的方法是将非结构、无序化的点云数据投影为二维图像
  2. 基于体积的方法将点云转化为三维体积表示方法。然后利用现有的二维或三维卷积对形状进行分类。
  3. 基于点云的方法直接处理原始点云,无序任何体素化或投影,这种数据结构可以保留最多的原始信息,也是我认为的最好的处理方法。

基于点的方法不会引入噪声以及造成信息丢失,所以越来越受欢迎。因此本论文也主要关注基于点的方法,至于体素化和多视图也会因为完整性而略有涉猎。

image

MVCNN一项2015年开创性的工作来自ICCV,它只是将多视图的特征做一个MaxPooling到全局描述特征,然而Max-pooling仅仅在指定视角中保留了最大值所以会造成信息损失。


image

MHBN一项2018年的补充性工作来自CVPR,它提出MVCNN将视图通过max-pooling特征合并为全局特征,作为对3D对象的表示。但是对于每个神经节点,max-pooling操作只保留了针对某个视角的最大特征值,而忽略了出最大值的所有因素,因此造成了视觉信息的丢失。\(\color{red}{当前的直接对于点云进行处理的任务,是否也有这种误区?}\),本文对max-pooling是否可以改为sum-pooling以解决上述问题做出解释,结论是效果会更差。
对于上述maxsum的限制,本文提出一种利用patch级别的特征去替代view级别的特征(意思是将一个view分为多个patch,patch越多,上面max带来的loss越小。)
image

如上图所示,通过patch化之后,它具有以下优点。

  1. 看图C,它可以在两个完全不同的view中获取到相关patch对,以做到聚类效果。
  2. 即使在两个对应的view中,他也只计算由相关patch组成的对,而将不相关的patch解耦。

本文提出一个名为bilinear pooling的方法,去对patch的相似性进行打分,降低了每个patch要和所有patch对比的高额杂度。


3.1 基于多视角的方法

View-gcn一项2020年CVPR,这一篇文章,属于找多视图之间的关系,建立起来多视图之间的关系从而更好地还原点云本身信息的一个操作。其中包含了图网络的一些思想应用。

image
在不同的视角看物体,得到的信息也是不同的。例如上图,不同视角中的椅子有很明显的区别,而茶杯基本没有区别。所以不同图像的联系可能隐藏了3D物体的潜在信息,这个联系会给3D物体的形状识别带了有价值的信息。因此本文的主要工作就是设计一个GCN在聚合多视图特征的时候自动调查view之间的关系。

之前有人将multi-view视为一个序列,并通过RNN去探索多视图特征,但是一维的顺序可以很好的模拟相机顺序位于围绕对象上的位置,但是对于更一般的情况,它会忽略多个view的3D几何图形。

主要挑战:如何聚合多视图特征为一个全局的3D形状描述。
传统方法:通过最大池化来聚合多视图特征,该方法是置换不变的,但忽略了viewview之间的关系。
本文目的:通过view-Graph来表示物体的3D形状,每一个view对应graph中的一个节点。节点间的边由摄像机坐标的k近邻确定。在此基础上设计了一种图卷积神经网络view-GCN用于聚合多视图特征以学习全局形状描述子。

image

上图由三个部分组成。首先,通过主干网络从一个三维图像获得多个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从局部几何中学习特征,并逐层抽象局部特征。
image


因为它简单和强大的能力,许多网络都是基于PointNet开发的,Mo-Net(2018,ICCVW)
image
这个Mo-Net应该是受到DGCNN中那个KNN操作的启发,然后水出来的一篇文章,就是利用knn获取到了多一点的信息,我这边也没仔细看,有不同的可以补充一下。

PointWeb(19年的一篇CVPR)本文提出从点云局部邻域中提取上下文特征的新方法,我们在局部邻域紧密的链接每个点和其他点,目的是该区域的每个点的特征可以更好地表示该区域。提出了一个新颖的特征调整模块,即自适应特征调整模块,用于发现点之间的相互作用。对
PointWeb和DGCNN的对比:DGCNN是讲挑选的中心点的特征及其邻域之间的\(k\)个特征连接起来,形成多几个输入维度的特征差,然后去MLPmax-poolingPointWeb认为DGCNN还是只对挑选出的中心点的特征考虑关系,并且区域信息的合并依然是有限的,区域的聚合操作也通过简单的最大池来实现(诟病的最大池应该和这个MHBN是一样的,无法获取到除max feature之外的信息,所以取patch去做)。

这边具体值得读一读的文章有:PointNetDGCNNView-GCN

3.3.2 基于卷积的方法

PointCNN中的\(\mathcal{X}-Conv\)为例,此处做个引子带出来卷积的方法。
\(\mathcal{X}-Conv\)来鹅城只为两件事:

  • 对每个代表点周围的点特征做集成。
  • 在隐空间对输入做重排去除输入顺序的影响。

和二维网格结构上定义的核相比,三维点云的卷积核由于点云的不规则性而难以设计。根据卷积核的类型,现有的三维卷积方法可分为连续卷积和离散卷积,如下图:
image
点的局部邻域的连续和离散卷积的图示:(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信息的操作差不多。}\)

posted @ 2021-11-24 14:17  X-POWER  阅读(494)  评论(2编辑  收藏  举报