由于增强现实/虚拟现实的发展及其在计算机视觉、自动驾驶和机器人领域的广泛应用,点云学习最近引起了人们的关注。 深度学习已成功用于解决 2D 视觉问题,然而,由于其处理面临独特的挑战,深度学习技术在点云上的使用仍处于起步阶段。
推荐:用 NSDT编辑器 快速搭建可编程3D场景
深度学习的早期方法通过将点云预处理为结构化网格格式来克服这一挑战,但代价是计算成本增加或深度信息丢失。 3D点云分割是将点云分类为不同同质区域的过程,使得同一孤立且有意义的区域中的点具有相似的属性。 由于高冗余、采样密度不均匀以及点云数据缺乏明确的结构,3D 分割是一项具有挑战性的任务。
将点云分割为前景和背景是处理 3D 点云的基本步骤。 人们可以精确地确定 3D 数据中对象的形状、大小和其他属性。 然而,分割 3D 点云中的对象并不是一项简单的任务。 点云数据通常是嘈杂、稀疏且无组织的。 除此之外,点的采样密度不均匀,表面形状可以是任意的,数据没有统计分布模式。 此外,由于 3D 传感器的限制,背景与前景纠缠在一起。 此外,很难拥有计算效率高且内存占用低的深度学习模型来执行分割。
分割过程有助于分析各种应用中的场景,例如定位和识别对象、分类和特征提取。 3D点云分割可以部署在场景级别(语义分割)、对象级别(实例分割)和零件级别(零件分割)。 语义分割是一种检测每个像素所属的对象类别并将同一类的多个对象视为单个实体的技术。
给定一个点云,语义分割的目标是根据点的语义将其分成几个子集。 当前的文章重点研究基于点的方法下最先进的语义分割技术。 各种基于点的 3D 语义分割技术的分类可以由 4 种范式给出,即 (a) 逐点 MLP、(b) 点卷积、© 基于 RNN 和 (d) 基于图。
在利用本文介绍的AI模型训练或推理点云数据之前,最好先看一下点云数据。你可以使用 NSDT 3DConvert 这个在线工具,它支持PCD、XYZ、PLY等多种格式的3D点云的在线预览和转换:
https://3dconvert.nsdt.cloud
1、PointNet
卷积架构需要高度规则的输入数据格式,以便执行权重共享和其他内核优化。 由于点云和网格不是常规格式,因此大多数方法通常将数据转换为常规 3D 体素网格或图像集合,然后再将其输入深度网络架构。 然而,这种转换使得结果数据变得不必要地庞大,并且还引入了可能掩盖数据自然不变性的量化伪影。
PointNet 直接利用考虑输入排列不变性的点云。 PointNet 架构包含三个关键模块
- 最大池化层作为对称函数来聚合来自所有点的信息
- 局部和全局信息组合结构以及两个对齐输入点
- 点特征的联合对齐网络
为了找到无序输入的对称函数,PointNet通过在变换元素上应用对称函数来近似在点集上定义的通用函数。 PointNet 通过多层感知器网络来近似函数,并通过单变量函数和最大池函数的组合来变换函数。 函数的输出形成一个向量,该向量被视为输入集的全局签名,并通过将全局特征与每个点特征连接来馈送到每个点特征。 然后,基于组合点特征提取新的每点特征,因为每点将了解局部信息和全局信息。
构成第三个模块的联合对齐网络的灵感来自于这样一个事实:如果点云经历几何变换,则点云的语义标签必须保持不变。 PointNet 通过 T-net 架构预测仿射变换矩阵,并将该变换直接应用于输入点的坐标。 T-net 由点独立特征提取、最大池化和全连接层组成。 特征空间中的变换矩阵具有更高的维数。 因此,为了优化,将约束特征变换矩阵接近正交矩阵的正则化项添加到softmax训练损失中。 图中给出了PointNet的详细架构和语义分割的输出。
PointNet架构和语义分割的输出
2、PointNet++
PointNet 不会捕获由存在点的度量空间引起的局部结构,从而限制了其识别细粒度模式的能力以及对复杂场景的泛化能力。
PointNet++ 引入了一种分层神经网络,它将 PointNet 递归地应用于输入点集的嵌套分区。 通过利用度量空间距离,PointNet++ 能够学习上下文尺度不断增加的局部特征。
PointNet++ 通过底层空间的距离度量将一组点划分为重叠的局部区域。 与 CNN 类似,它从小邻域中提取捕获精细几何结构的局部特征,这些局部特征被进一步分组为更大的单元并进行处理以产生更高级别的特征。 重复这个过程直到获得整个点集的特征。
PointNet++的设计解决了两个问题:如何生成点集的划分,以及如何通过局部特征学习器抽象点集或局部特征。 PointNet 使用单个最大池操作来聚合整个点集,而 PointNet++ 构建点的分层分组,并沿着层次结构逐步抽象更大的局部区域。 这种层次结构由多个抽象级别组成,在每个级别上,都会对一组点进行处理和抽象,以生成一个包含更少元素的新集合。
抽象层由三层组成:采样层、分组层和PointNet层。 采样层从输入点中选择一组点,这定义了局部区域的质心。 然后,分组层通过查找质心周围的“相邻”点来构造局部区域集。 PointNet 层使用迷你 PointNet 将局部区域模式编码为特征向量。 图中展示了 PointNet++ 所使用的架构细节及其与 PointNet 的比较。
PointNet++ 语义分割的架构和输出
3、RandLA-Net
RandLA-Net 引入了一种轻量级神经架构,可以处理大规模点云,速度比其他架构快 200 倍,因为大多数现有架构都使用昂贵的采样技术以及计算量大的后处理和预处理方法。
PointNet 计算效率高,但无法捕获每个点的上下文信息。 RandLA-Net 单次处理大规模 3D 点云,无需任何预处理/后处理步骤,例如体素化、块分区或图形构建。 RandLA-Net 仅依赖于网络内的随机采样,因此需要更少的内存和计算。 局部特征聚合器通过考虑局部空间关系和点特征来获得逐渐变大的感受野。 整个网络包含共享的多层感知器,不依赖于图构建和核化,因此是高效的。 不同的采样方法(例如最远点采样、逆密度重要性采样、基于生成器的采样)的计算效率非常高。 然而,它们可能会导致重要功能的丢失。 因此,RandLA-Net提出了本地聚合模块。 该模块并行应用于每个 3D 点,由三个神经单元组成。
- LocSE:在给定点云的该模块中,所有特征都明确用于编码三维坐标信息。 它使用 K 最近邻算法来收集邻近点,然后执行相对点位置编码的步骤,这有助于网络学习局部特征。 最后,在点特征增强中,将编码后的相对点位置与对应的点特征连接起来,得到增强的特征向量。 该向量对局部几何结构进行编码。
- Attentive Pooling:注意力池。对于给定的一组局部特征,设计一个共享函数来学习独特的注意力分数并聚合邻域点特征集中的使用信息。 共享的多层感知器后面是一个 softmax 函数。 然后将这些学习到的注意力分数相加。
- Dilated Residual Block:由于随机采样不断对输入点云进行下采样,因此需要增加每个点的感受野。 使用 Resnet 架构和跳过连接,将多个 LocSE 和 Attentive Pooling Block 连接起来形成 Dilated Residual Block。 该块负责扩大感受野并扩大有效邻域。 图 4 给出了 RandLA-Net 与 PointNet++ 的输出比较。
RandLA-NET 语义分割输出与 PointNet++ 的比较
4、PointCNN
PointCNN 能够利用网格中密集表示的数据的空间局部相关性,并提供从点云进行特征学习的框架。 PointCNN 从输入点学习 χ 变换,以促进与点相关的输入特征的加权以及将点排列成规范顺序。 PointCNN 的架构包含两种设计:
- 分层卷积:在规则网格中,卷积被递归地应用于局部网格块,这通常会降低网格分辨率,同时增加通道数。 类似地,在点云中,χ-Conv 递归地应用于“投影”或“聚合”,将来自邻域的信息分解为较少的代表点,但每个点都具有更丰富的信息。
- χ-Conv算子:χ-Conv算子在局部区域进行运算,将关联点和邻域点作为输入并与它们进行卷积。 将相邻点转换为代表点的局部坐标系,然后将这些局部坐标单独提升并与相关特征组合。
具有两个 χ-Conv 层的 PointCNN 将输入点转换为更少的特征表示,但每个特征表示都具有更丰富的特征。 然而,顶层 χ-Conv 层的训练样本数量迅速下降,导致训练效率低下。 为了解决这个问题,PointCNN 使用更密集的连接,其中更多的代表点保留在 χ-Conv 层中。 此外,为了在保持感受野增长率的同时保持网络的深度,采用了扩张卷积。 对于分割任务,需要高分辨率逐点输出,因此使用Conv-DeConv架构并遵循U-Net设计。
5、Recurrent Slice Networks
大多数其他语义分割网络不会对点云之间所需的依赖关系进行建模。 RSNet 的关键组件是轻量级本地依赖模块。 本地依赖模块非常高效,并且切片池化/反池化层的时间复杂度为 O(n) w.r.t(输入点数量)和 O(1) w.r.t(局部上下文分辨率)。
RSNet 将原始点云作为输入并输出每个点云的语义标签。 给定一组无序点和一个候选标签集,RSNet 的任务是为每个点分配一个语义标签。 输入和输出特征提取块用于独立的特征生成。 中间是本地依赖模块。 输入特征块消耗输入点并产生特征,输出特征块将处理后的特征作为输入并为每个点生成最终预测。 两个块都使用一系列多个 1 x 1 卷积层来为每个点生成独立的特征表示。
局部依赖模块是新颖的切片池化层、双向递归神经网络(RNN)层和切片反池化层的组合。 通过首先将无序点投影为有序特征,然后应用传统的端到端学习算法来解决局部上下文问题。 该投影是通过新颖的切片池层实现的。 在这一层中,输入是无序点的特征,输出是聚合特征的有序序列。
接下来,RNN 应用于此序列中的模型依赖关系。 最后,切片反池化层将序列中的特征分配回点。 该图给出了RSNets的详细架构。 RSNet 在三个广泛使用的基准测试中被证明超越了以前最先进的方法,同时需要更少的推理时间和内存。
RSNet架构
6、DGCNN
DGCNN 是一种 EdgeConv,适用于点云上基于 CNN 的高级任务,包括分类和分割。
EdgeConv 作用于网络每一层动态计算的图。 它捕获局部几何结构,同时保持排列不变性。 EdgeConv 不是直接从嵌入生成点特征,而是生成描述点与其邻居之间关系的边缘特征。 EdgeConv 被设计为对邻居的顺序不变,因此是排列不变的。 由于 EdgeConv 构造局部图并学习边缘的嵌入,因此该模型能够对欧几里得空间和语义空间中的点进行分组。
DGCNN 不像 PointNet 那样处理单个点,而是通过构建局部邻域图并在连接相邻点对的边缘上应用类似卷积的操作来利用局部几何结构。 边缘卷积(EdgeConv)具有介于平移不变性和非局部性之间的属性。
与图 CNN 不同,DGCNN 的图不是固定的,而是在网络的每一层之后动态更新。 也就是说,一个点的 k 个近邻集在网络的层与层之间发生变化,并且是根据嵌入序列计算出来的。 DGCNN 可以执行分类和分割任务。 分类模型以 n 个点作为输入,为 EdgeConv 层的每个点计算大小为 k 的边缘特征集,并聚合每个集中的特征以计算相应点的 EdgeConv 响应。
最后一个 EdgeConv 层的输出特征被全局聚合以形成 1D 全局描述符,用于生成 cc 类的分类分数。 分割模型通过连接每个点的一维全局描述符和所有 EdgeConv 输出(用作局部描述符)来扩展分类模型。 它输出 p 个语义标签的每点分类分数。 该网络包含两个块:
- 点云变换块:该块旨在通过应用估计的 3 × 3 矩阵将输入点集与规范空间对齐。 为了估计 3 × 3 矩阵,使用连接每个点的坐标及其 k 个相邻点之间的坐标差的张量。
- EdgeConv块:该块将形状为n×f的张量作为输入,通过应用具有层神经元数量的多层感知器(MLP)来计算每个点的边缘特征,并生成形状为n×an的张量 在相邻边缘特征之间进行池化之后。 DGCNN 架构可以轻松地按原样合并到现有的管道中,用于基于点云的图形、学习和视觉。
DGCNN架构
7、总结和定量比较
下表展示了对 3 个公开数据集 S3DIS、Semantic3D、ScanNet(v2) 和 Sem 的结果的定量分析。 KITTI使用评价指标OA、mIOU。
原文链接:3D点云语义分割综述 — BimAnt