赞
踩
点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
Abstract:在点云深度学习中,主要包含的任务有:3D形状分类、3D目标检测和跟踪、3D点云分割。
Introduction:3D数据通常有许多种表现形式:深度图、点云、网格、体积网格(volumetric grids)。点云表示的好处是:保持了最原始的3D空间中的几何信息,并且没有任何的离散化。因此在无人驾驶和机器人领域更偏向使用点云表示。
2. 3D点云深度学习的挑战主要在于:数据集较小,3D点云的高维度以及非结构化。
点云深度学习的分类图
接下来的文章组织。第二部分主要介绍3D形状分类;第三部分介绍3D目标检测和跟踪;第四部分介绍点云分割,其中包括语义分割,实例分割以及部分分割。
2 3D形状分类
这类方法通常先学习到每个点的Embedding,再使用聚合的方法, 在所有点云中提取全局的形状Embedding。分类通常是用一些全连接层得到的。基于这种在各个点上提取特征的方法,目前的3D形状分类方法可以被分成基于投影的方法和基于点的方法。
基于投影的方法通常将非结构化的点云投影至中间的规则表示,接着利用2D或者3D卷积来实现形状分类。而基于点的方法直接在原始数据上进行处理,并不需要体素化或是投影。基于点的方法不引入其它的信息损失且变得越来越流行。此文章主要介绍基于点的网络。
2.1 基于投影的方法
这类方法将3D点云投影至不同的表示模态(多视角,体素表示等)来进行特征学习和形状分类。
2.1.1 多视角表示
这类方法首先将3D物体映射至多种视角,并且提取出对应的view-wise特征,将这些特征融合后进行准确的物体识别。如何将多视角的特征融合成一个判别的全局表示是主要的挑战。MVCNN[15]将多视角的特征进行最大池化,从而得到全局的描述子。然而由于其中的max pooling,最大元素仅仅来自于某个特定的视角,因此造成了一定的信息损失。MHBN[16]通过harmonized双线性池化,将局部的卷积特征集成起来,产生笑容的全局描述子。[17]利用关系网络,在视角中来得到相互关系(区域-区域相互关系和视角-视角相互关系),接着将这些视角集成起来得到判别式的3D物体表示。
2.1.2 体素表示(Volumetric Representation)
早些的方法在3D点云体素表示上使用3D的CNN来提取特征。[22]引入了体素占据网络(Volumetric Occupancy Network)VoxNet来得到鲁棒的3D物体识别。[6]提出了3D ShapeNet,在不同的3D形状中学习点的分布。3D的形状通常可以用二进制变量在体素网格上的分布来表示。由于计算量和内存随着分辨率3次增长,这样的方法在稠密的3D数据上表现较差。为了解决该问题,一些图结构(八叉树)被引入用来减小计算量和内存使用。OctNet[23]首先将点云用网格八叉树结构分成不同层次,八叉树的结构用a bit string representation编码。[24]提出了基于八叉树的CNN实现3D形状分类。[25]提出了混合的网络PointGrid,它将点和网格表示集成在一起。
2.2 基于点的方法
基于网络结构的不同,这类方法可以被分为以下几类,包括:点光滑的MLP(PointWise);基于卷积的方法;基于图的方法;基于数据索引的方法以及其它网络。
2.2.1 Pointwise MLP
这类方法使用MLP对各个点进行独立的建模,接着使用对称的函数来集成到全局特征。对于无序的3D点云数据,这类网络可以得到置换不变性。然而这样的方法并未考虑到3D点之间的几何关系。
PointNet的网络结构。n表示输入点的个数,M表示各个点特征的维度。在进行最大池化后,全局特征的维度仍然为M
作为先驱工作,PointNet[5]使用MLP学习Pointwise特征,接着使用最大池化层来提取全局的形状特征。最后的分类结果也使用MLP来得到。[26]也论证了,得到置换不变性的关键在于将所有表示加起来并且使用非线性变化。[26]也设计了基础的网络DeepSets来进行多种应用的实现,包括形状分类。
由于[5]中的特征是各个点独立学习到的,因此各个点之间的局部结构信息无法得到。[27]提出了一种分层次的网络PointNet++,从各个点之间的邻居来获取细粒度的几何特征。
因为[5]PointNet的简单和有效性,许多工作都基于PointNet开展。[28]引入了深度自编码网络在学习点云表示。它的编码是在PointNet之后,并且使用1-D卷积、ReLU非线性激活、BN和最大池化来提取各个点的特征。在[29]中,使用每个点的绝对坐标以及相对其邻居的相对坐标对其进行表示。接着使用Group Shuffle Attention来获取点与点之间的关系,再使用具有置换不变性、可微分、端到端可训练的Gumbel Subset Sampling层来训练层级特征。[30]Mo-Net的结构与PointNet类似,使用一组有限的moments作为网络的输入。PointWeb[31]同样基于PointNet++,利用Adaptive Feature Adjustment, 使用了局部邻居之间的关系来提升点的特征。[32]提出使用Structural Relational Network来学习不同局部结构之间的结构化关系特征。[34]首次将点云投影来获得旋转不变性的表示,并且利用基于PointNet的backbone来提取全局特征,基于图的集成方法来提取局部特征。
2.2.2 基于卷积的网络
与2D卷积相比,由于点云的不规则性,3D点云的卷积核更难设置。根据卷积核的不同,目前的3D卷积网络可以被分为连续卷积网络和离散卷积网络,如下图所示。
连续卷积和离散卷积的实例。(a)表示局部的邻居;(b)表示3D连续卷积;(c)表示3D离散卷积
3D连续卷积网络
这类方法在连续的空间中定义卷积核,其中邻居点的权重与它和中心点的空间分布有关。3D卷积可被认为是在给定子集上的加权。MLP是一种简单的学习权重的方法。作为RS-CNN[35]的核心层,RS-Conv将某个点周围的局部子集作为其输入,使用MLP的方法来进行卷积,学习低维关系到高维关系的映射。(“And the convolution is implemented using an MLP by learning the mapping from low-level relations to high-level relations between points in the local subset”)。在[36]中,卷积核的元素是在单位球中随机选取的,接着使用基于MLP的连续函数来确定核元素的位置与点云的关系。在DensePoint[37]中,卷积被定义为单层感知机(Single-Layer Perceptron)。某层的特征是将其之前所有层的特征级联起来,从而使得空间信息被充分利用。
有些方法使用已有的算法来进行卷积。在PointConv[38]中,卷积被定义为对重要性采样的连续3D卷积的蒙特卡洛估计。卷积核由加权函数(由MLP层学到)和密度函数(由核密度估计和MLP层学到)组成。为了提升内存和计算效率,3D卷积被简化成两部分:矩阵乘法和2D卷积,在相同的参数设置下,内存消耗可减小64倍。在MCCNN[39]中,卷积被当做是蒙特卡洛估计的过程(依赖样本的密度函数,用MLP实现),使用泊松圆盘采样(Poisson disk sampling)来构建点云等级。
3D离散卷积网络
这类方法在标准的网格上定义卷积核,其中的邻居点的权重是其关于中心点的补偿(offset)。[49]将非归一化的点云变换至归一化的网格,接着在各个网格上定义卷积核。与2D卷积不同(在各个像素上分配权重),所提的3D卷积核在网格内的所有点赋予相同的权重。对于给定点,邻域内所有点(在相同网格上)的平均特征通过之前的层来计算得到。接着,所有网格的平均特征通过加权和产生当前层的输出。[50]定义了球状的卷积核,通过将3D球体邻域分成多个体素bins,并且将各个bin通过学到的加权矩阵联系到一起。球状卷积核的输出由其邻域点的加权均值 通过非线性激活层得到。
2.2.3 基于图的网络
基于图的网络将点云中的各个点当做是图中的顶点,然后产生有向边。接着在空间中或谱域中学习特征。典型的基于图的网络如下图所示。
基于图的网络的示例。
空间域中的基于图的方法
这类方法在空间域中定义卷积和池化操作。卷积通过在空间邻域内的MLP实现,池化操作通过集成信息产生新的较粗的图。各个顶点的特征由坐标、激光强度、颜色来确定,各个边的特征由两个连接点的几何属性确定。
作为先驱工作,[58]将各个点视为图的顶点,利用有向边将顶点与其邻域内的点相连,接着使用Edge-Condition Convolution(使用生成filter的网络得到,MLP等)。最大池化用来集成邻域信息,图的粗化使用VoxelGrid[59]算法得到。首先通过卷积和池化的相互交错,再跟着为全局平均池化和全连接层来产生分类score。
谱域中的基于图的方法
这类方法将卷积定义为谱的滤波,是通过在图上的拉普拉斯矩阵的特征向量上的乘法来实现的[70][71]。与上述方法不同的是,RGCNN[72]将点云中的点与其余所有的点相连得到图,接着在各层当中更新图的拉普拉斯矩阵。为了使相邻顶点的特征更加相似,图信号光滑的先验被加入到了损失函数中。
2.2.4 基于索引数据的网络
这类网络是基于不同的数据索引结构(八叉树、KD树)构建的。在这类方法中,点的特征是从叶节点到根节点中分级学习的道德。[50]提出了八叉树导向的CNN,利用了球状卷积核。网络中的每一层对应八叉树的一层,球状的卷积核在各层中均使用。当前神经元的值是:在之前层中相关的子节点的均值。而Kd-Net[78]由多重的K-d树构成,这些K-d树在每次迭代时有着不同的分裂方向。根据从下到上的方法,非叶节点的表示是由其子节点通过MLP计算得到的。根节点的特征(描述整个点云)最终被送入至全连接层来得到分类输出。值得注意的是,Kd-Net在各级之间共享参数。3DContextNet[79]使用标准的平衡K-d树进行特征提取和集成。
2.2.5 其它网络
3D形状分类在ModelNet10/40上的基准。‘OA’表示Overall accuracy, 'mAcc'表示mean Accuracy.
3 3D物体检测与跟踪
3.1 3D物体检测
与普通2D中的目标检测方法类似,3D中的目标检测方法也可分为两类:基于候选区域的方法和直接映射的方法。
3.1.1 基于候选区域的方法
这些方法首先产生一些可能包含物体的区域(Proposals),接着对各个区域提取特征,来决定各个候选区域的物体类别。
根据不同的产生候选区域的方法,这些方法可进一步分为三类:基于多视角的方法;基于分割的方法以及基于锥体的方法。
3.1.1.1 多视角的方法
这类方法从不同的视角图像(雷达前景图,鸟瞰图,图像等)中融合各个候选框的特征,来产生3D旋转盒。在[4]中,Chen等人从鸟瞰图中产生一组准确的3D候选框,并且将其投影到其它视角中(雷达前景图,RGB图像),接着将各个区域的特征组合到一起,来预测有方向的3D bounding boxes。尽管这种方法在0.25IOU, 300个候选框设置时达到了99.1%的recall,但是速度非常慢。后续的基于多视角的3D物体检测方法主要从以下两个方面来提升。
(1)提出了很多方法来有效的融合不同模态之间的信息。为了针对小物体产生有较高recall的候选框,[97]提出了多模态的基于融合融合的区域生成网络。首先从鸟瞰图和普通图像视角提取相同大小的特征,然后在各个元素位置使用了平均池化来融合特征。[98]利用了连续的卷积来进行图像与3D雷达前景图的特征融合。具体而言,他们对BEV(鸟瞰视角)空间中的每个点提取最近的对应点的图像特征,接着通过将图像特征投影至BEV空间的方法,使用双线性插值得到稠密的BEV的特征图。实验结果证明稠密的BEV特征图比起离散的图像特征图和LiDAR(雷达激光)特征图更加适合3D物体检测。[99]提出了多任务,多感知器的3D物体检测网络来进行端到端的训练。具体而言,利用多种任务(2D物体检测,背景估计,深度补偿),帮助网络学习到更好的特征表示。学习到的跨模态的表示,可进一步用来产生更准确的物体检测结果。实验证明这类方法在2D,3D,BEV识别任务上有着非常好的提升,在TOR4D基准[100, 101]上超越了之前的SOTA。
(2)其它的一些方法致力于提取更鲁棒的表示。[102]通过引入空间Channel注意力机制模块(Spatial Channel Attention Module),探索了多尺度的环境信息,其捕获了全局的以及多尺度的场景环境,加强了有用的特征。同样的,通过将不同尺度的低层次特征融合的方法,他们提出了Extension Spatial Unsample模块来得到有着更丰富空间信息的高层次特征,接着来产生更可靠的3D物体候选框。尽管达到了更好的检测效果,但上述所提的多视角方法都需要较长的运行时间,因为他们在各个候选框都进行了特征的池化。因此,[103]使用了提前的ROI池化卷积(pre-ROI pooling convolution)来提高[4]的效率。具体而言,他们将大部分的卷及操作移动到ROI pooling模块之前。因此,对于所有的物体候选框,ROI卷积只使用一次。实验结果显示这类方法可达到11.1fps, 速度达到了MV3D[4]的5倍。
3.1.1.2 基于分割的方法
这类方法首先利用现有的语义分割技术来移除多数的背景点,接着在前景点上,产生大量的高质量的候选框来节约计算。与多视角的方法[4],[97],[103]相比,这类方法达到了更好的物体recall,并且更适合一些复杂的场景。
[104]中,Yang et al使用了2D的分割网络来预测前景的像素并将其投影至点云中,以此来剔除掉多数的背景点。接着在这些前景点中生成候选框,并且设计了一种新的标准称之为PointsIoU来减少候选框的冗余性和模棱两可之处。跟着[104]的脚步,[105]提出了PointRCNN的框架。具体而言,他们直接对3D点云进行分割,得到前景点,并且将语义特征和局部空间特征融合从而得到高质量的3D boxes。[106] following [105]中的RPN,提出了一种利用图卷积网络来进行3D物体检测。具体而言,利用图卷积,在此处引入了两个模块来修复物体的候选框。第一个模块R-GCN利用一个候选框中的所有点,得到每个候选框的特征集成。第二个模块C-GCN将所有候选框中的每一帧信息融合起来,利用环境来回归准确的物体boxes。[107]将点云投影至基于图像的分割网络的输出,将其附加至语义的预测值。[109]得到了显著的性能提升,通过将涂色的点送入至一些检测器中[105, 108]。[110]将每个点与spherical anchor相关联,每个点的语义值用来移除多余的anchors。这样的方法得到了更好的recall以及有着更小的计算消耗。与此同时,文中提出了PointsPool层,对候选框中的内部点学习相容的特征,并且引入了并行的IOU来提高位置的准确度的检测性能。实验结果正式这样的方法在KITTI数据集[10]上较难的集合(car class)的性能比[99, 105, 111]的性能优越很多,并达到了12.5fps。
3.1.1.3 基于椎体的方法
这类方法首先利用现有的2D物体检测子,产生2D的候选矩形框,接着对每个2D的候选框提取3D的锥体候选框,如下图所示。尽管这类方法可以有效地给出3D物体的坐标,但step-by-step的pipeline使得性能受限(受限于2D图像的检测子)。
F-PointNets[112]为此类方向的先驱工作。它在每个2D区域上产生锥形的候选框,并且应用PointNet[5](或PointNet++[27])来学习各个3D锥体的点云特征,从而进行3D box的估计。在随后的工作中,[113]提出了Point-SENet模块,来预测一系列的缩放因子,从而被用来突出有用特征和抑制无用特征。同时他们也将PointSIFT[114]模块集成至网络中,来获取点云的方向信息,其可以得到对形状尺度的强鲁棒性。该方法在[10], [115]的数据集上,与F-PointNets[112]相比得到了显著的提高。
方法[116]利用了2D图像区域和对应的锥体点来回归3D boxes。为了融合图像特征和点云的全局特征,他们提出了全局的融合网络来直接回归box的角坐标。他们也提出了稠密的网络网络来预测各个点对于各个角的补偿(offsets)。[117]第一次从2D图像中估计2D的bounding boxes和3D物体姿态,从而提取物体候选框。这类3D候选框被送入至box 回归网络来预测准确的3D物体boxes。[111]对于各个2D区域,在锥体轴上产生一系列的锥体,并使用PointNet来对各个锥体提取特征。锥体层次的特征用来产生2D特征图,再被送入至FCN来估计3D box。该方法在基于2D图像的方法中达到了state-of-the-art的性能,并且在KITTI积分榜上排在很靠前的位置。[118]首先在鸟瞰图上得到初步的检测结果,接着基于鸟瞰图的预测结果,提取小部分点的子集,再应用局部的微调网络来学习局部特征,预测高精度的3D bounding boxes。
3.1.1.4 其它方法
待补充。
3.1.2 Single Shot Methods
这类方法使用单阶段的网络,直接预测类别概率和回归物体的3D bounding boxes。这类方法不需要产生区域候选框和后处理。结果是,这类方法有着很快的速度,很适合实时的应用。根据输入数据的形式,single shot方法可分为两类:基于鸟瞰图的方法和基于点云的方法。
3.1.2.1 基于鸟瞰图的方法
这类方法将BEV表示作为输入。[100]将场景的点云离散化,使用FCN来预测位置和物体的航向角。该方法超越了大多数的single shot方法([125], [126], [127])并且达到了28.6fps。之后,[128]利用HP map提供的几何和语义先验信息,提高了[100]的鲁棒性和检测性能。
3.1.2.2 基于点云的方法
这类方法将点云转换至一般的表示(例如2D map),接着使用CNN来预测各个类别和3D boxes。[125]提出了使用FCN进行3D物体检测。他们将点云转换至2D point map,使用2D FCN来预测bounding boxes和物体的置信度。之后,[126]将点云离散化至4D的张量,其维度分别为:长度,宽度,高度和channel,接着将2D FCN的方法延伸至3D来进行3D的物体检测。与[125]相比,基于FCN的3D方法达到了大于20%准确率的收益,但是由于3D卷积核数据的稀疏性,消耗了更多的计算资源。为了借体素稀疏性的问题,[127]利用了feature-centric voting scheme,对每个非空的体素来产生一系列的votes,最后通过将votes相加的方式得到卷积的结果。它的计算复杂度与被占据的体素数量成正比。[130]通过堆叠多个稀疏3D CNN,构建了3D的backbone网络。这样的设计节约了内存并且加速了计算。这个3Dbackbone网络提取了丰富的物体检测的3D特征,并且并未引入计算量的负担。
[108]提出了基于体素的端到端的可训练框架VoxelNet。他们将点云分入等空间尺寸的体素,将每个体素的特征编码成4D的张量。RPN网络用来产生检测结果。尽管该方法效果很好,但由于体素的稀疏性和3D卷积操作,该方法运行速度很慢。之后,[120]使用了稀疏的卷及网络[134]来提高[108]的推断效率。同时他们提出了sine-error angle loss来解决方向0和Pi的歧义。[131]通过将图像和点云特征在早期融合的方式,扩展了VoxelNet的工作。具体而言,他们将[108]产生的非空体素投影至图像,使用预训练的网络对各个投影的体素提取图像特征。这些图像特征与体素特征相级联,来预测准确的3D boxes。这类方法利用了多模态的信息,来减少false postivies and negatives。[109]提出了3D物体检测子称为PointPillars。该方法利用了PointNet来学习点云的特征,将这些学到的特征编码成pesudo images。利用2D的物体检测pipeline来预测3D bounding boxes。PointPillars在Average Precision的指标上,超越了大多数的融合方法(MV3D[4], RoarNet[117], AVOD[97])。并且,PointPillars在3D和BEV KITTI benchmarks上达到了62fps。
3.1.2.3 其余方法
[132]提出了一种有效的3D目标检测子称之为LaserNet。鬼方法在各个点上预测bounding boxes的概率分布,接着讲各个点的分布组合起来产生最后的3D物体boxes。接着,点云的dense range view representation 作为输入,使用快速的mean-shift算法来减少噪声。LaserNet达到了0-50米范围的SOTA性能,并且运行时间很少。[133]接着讲LaserNet扩展至稠密的纹理信息。该方法在50-70米范围内得到了非常好的性能。
3.2 3D物体跟踪
给定一个物体在第一帧时的位置,目标跟踪的任务是估计它在之后帧的状态。由于3D物体跟踪可以使用点云中丰富的几何信息,人们期待用它来克服在2D图像上追踪任务的困难,包括遮挡,光照以及尺度的变化。
由于孪生网络[137]在目标跟踪上的成果, [138]提出了有着形状补偿正则化的3D孪生网络。具体而言,首先用Kalman滤波器产生candidates,接着利用形状正则化,将模型与candidates编码成相容的表示,使用余弦相似度来寻找被追踪物体下一帧的位置。该方法可当做目标跟踪中的一种可选方案,并且超越了大多数的2D目标跟踪方法,包括Staple-CA[139]和SiamFC[137]. 为了更有效地寻找目标物体,[140]利用了2D孪生网络,在BEV上产生大量的粗略的物体候选框。接着利用3D孪生网络中的余弦相似度来修正候选框。该方法在precision和success rate上显著地超越了[138]。[141]提出了3D物体检测和跟踪的框架,应用于有语义信息的点云上。首先通过融合2D视觉语义信息,产生体素化的带语义的点云,急着利用短时的信息来提高多物体跟踪的准确性和鲁棒性。此外,他们引入了有效、简化的度量(Scale-Rotation-Translation scores, SRFs)来加速训练和度量。他们提出的Complexer-YOLO 达到了有前景的跟踪性能,并且可以达到实时。
3.3 3D场景流估计
与2D视觉中的光流场估计类似,许多方法开始在一系列的点云中学习一些有用知识。
[142]提出了FlowNet3D,在一系列连续点云中直接学习场景流。FlowNet3D通过flow embedding layer, 学习point-level的特征和运动特征。然而FlowNet3D存在两个问题。第一,一些预测的运动向量与真实值差别非常大;第二,很难将FlowNet应用至非静态的场景,尤其是有着可形变物体的场景。为了解决该问题,[143]引入了余弦距离的损失函数来最小化预测值与真实值之间的夹角。同时,他们提出了point-to-plane的距离损失函数,来提高刚性的和动态的场景的准确率。实验结果显示这两种损失函数将FlowNet3D的准确率从57.85%提升至63.43%,并且加速和稳定了训练过程。[144]提出了HPLFlowNet,从大规模的点云中直接估计场景流。文中提出了一些bilateral convolutional layers来存储结构信息,同时降低计算消耗。
为了有效地处理序列点云,[145]提出了PointRNN, PointGRU和PointLSTM,以及一个序列到序列的模型来追踪移动点。PointRNN, PointGRU和PointLSTM能够捕捉空间-时间信息,并且建模动态的点云。类似地,[146]提出了MeteorNet来直接从动态点云中学习表示。该方法试图从时间和空间上的邻近点学习总体特征。[147]提出额两个自监督的损失函数,在大量无标签的数据集上训练网络。他们的主要思想是:一种鲁棒的场景流估计方法应该在向前预测和向后预测时均有效。由于场景流标注的不可行性,预测得到的转换后的点的最近点,被当做是假想的真实值。然而,真正的真实值可能与它不同。为了避免这个问题,他们在相反的方向计算场景流,并且提出了cycle consistency loss。实验结果显示这种自监督的方法超过了现有自监督学习方法中的SOTA性能。
3.4 总结
KITTI基准是自动驾驶领域中最有影响力的,并且在学术和工业领域有着广泛的应用。表2和表3展示了不同方法在KITTI test 3D and BEV benchmark上的结果。
可以观察到:
a. 基于区域生成的方法是最常见的方法,在KITTI test 3D, BEV上的性能均超出了single shot methods。
b. 现有的3D目标检测子有两个限制。第一,长范围的检测能力较弱。第二,如何全面的利用纹理图像仍然是个公开的问题。
c. 多任务学习是在3D目标检测中未来的方向。例如,[99]通过合并多种任务,学习跨模态的表示来得到SOTA的检测效果。
d. 3D物体跟踪和场景流估计是较新的研究方向。
4. 3D 点云分割
3D点云分割要求了解全局的几何结构以及各个点的细粒度的细节。根据分割的细粒度,3D 点云分割方法可分为以下三类:语义分割(场景级)、实例分割(物体级)和part segmentation(part level)。
4.1 3D 语义分割
给定一个点云,语义分割的目标是,根据语义信息,将各个点分成一定的子集。与3D形状分类的分类类似,语义分割可分为两种方法:基于投影的方法和基于点的方法。
4.1.1 基于投影的网络
Intermediate regular representations可被分成以下几种:多视角表示[148], [149]、球状表示[150], [151], [152]、体素表示[153], [154], [155]、超多面体晶格表示[156], [157]以及混合表示[158], [159]。具体可见下图。
4.1.1.1 多视角表示
[148]首先将3D点云从多个虚拟的相机视角投影至2D平面上,接着,使用多流的FCN在人造的图像上预测各个像素的scores。最终各个点的语义标签为不同视角上scores的融合。相似地,[149]首先利用多组相机的位置,得到点云的一些RGB和深度图。接着使用2D的分割网络,在这些图片上得到各个像素的label,这些从RGB和深度图上得到的scores用来融合(使用redisual correction[160])。基于点云是从局部欧式曲面上采样得到的假设, [161]引入了tangent convolutions进行稠密的点云分割。该方法首先将各个点周围的局部曲面投影至虚拟的切平面。Tangent convolutions在曲面上直接进行。总的来说,多视角分割方法的性能对视角的选择和遮挡非常敏感。同时,这类方法并未能完全利用潜在的几何和结构信息,因为投影操作不可避免地引入了信息损失。
4.1.1.2 球状表示
为了得到更快更准确的3D点云分割,[150]提出了基于SqueezeNet和条件随机场的端到端的网络。为了进一步提升分割准确率,引入了SqueezeSegV2[151]利用无监督的domain adaptation解决domain shift。[152]提出了RangeNet++,针对LiDAR点云进行实时的语义分割。2D深度图的语义标签首先转移至3D点云上,接着使用基于KNN的后处理步骤来减轻离散化误差的问题。与单一的视角映射相比,球映射保持了更多的信息,并且更适合LiDAR点云。然而,这样的中间表示不可避免地引入了一些问题,比如离散化误差和遮挡问题。
4.1.1.3 体素表示
[163]首先将点云分成一系列占有的体素。接着将这些过渡数据送入至fully-3D CNN中进行体素级别的分割。最后,一格体素中的所有点的语义信息与该体素的label相同。该方法的性能极其受限于体素的细粒度和边界的伪影。之后,[164]提出SEGCloud来得到更细粒度和global consistent的语义分割。该方法引入了确定性的三线性插值,将由3D-FCNN产生的粗糙的网格预测映射回点云中,接着使用Fully Connected CRF,确保推测出的点云有着空间上的一致性。[153]引入了一种基于核的变分自编码器结构地局部几何结构进行编码。这里摒弃了binary occupancy representations, 使用RBF得到连续的表示,并且捕获到每个体素中点的分布。再使用VAE将各个体素中的点映射至隐空间,最后使用CNN得到鲁棒的特征表示。
良好的尺度扩展性质是体素表示中的优点之一。具体而言,基于体素的网络对于有着不同空间尺寸的点云,其训练和测试是不受限制的。在Fully-Convolutional Point Network(FCPN)中,不同级别的几何相关性从点云中提取出来,再使用3D卷积核加权的均值池化来提取特征。该方法可处理大规模的点云,并且在推断时有着良好的尺度扩展性质。[166]提出了ScanComplete来实现3D补全,以及对各个体素进行语义预测。该方法利用了全卷积网络的尺度扩展性,在训练和测试阶段应对不同的输入数据大小。使用从粗到细的策略来提高预测结果的分辨率。
很自然地,体素表示是稀疏的,其中非零元素的数量仅仅占很小一部分。因此,在空间上稀疏的数据使用稠密的卷积网络是比较无效的。为此,[155]提出了子流形的稀疏卷积网络。该方法显著地减小了内存拟合计算消耗,通过限制卷积的输出只能与被占据的体素有关。同时,该稀疏卷积也可以通知提取出的特征的稀疏性。该子流形稀疏卷积很适合处理高维度且空间较稀疏的数据。更进一步,[167]提出的“MinkowskiNet”,即4D时间-空间卷积网络用以3D视频感知。广义上的稀疏卷积来处理高维数据。
综上所述,体素表示很自然地保留了3D点云的邻域结构。其规范的数据形式也是的标准的3D卷积可师姐应用。这些因素在这一领域有着不错的性能提升。然而,体素化的过程内在地引入了离散化的伪影和信息损失。通常,高分辨率会导致较高的内存和计算消耗,低分辨率引入了信息的损失。在实际中如何选择合适的网格分辨率是non-trivial的。
4.1.1.4 超多面体晶格表示
[156]提出了基于双边卷积层(Bilateral convolution layers)的稀疏晶格网络(Sparse Lattice Networks)。该方法首先将原始点云插入至超多面体稀疏晶格,再使用BCL对占据的部分进行卷积。得到的输出再重新映射回原始点云。更进一步,[157]提出了LatticeNet来实现有效的处理大规模点云。
4.1.1.5 混合表示
为了进一步利用所有可用信息,许多方法试图学习多模态特征。[158]提出了joint 3D-mult-view网络,来组合RGB和几何特征。一个3D CNN流和一些2D CNN流用来提取特征,另一个可微分的back-projection layer用来合并3D和2D特征。更进一步,[168]提出了unified point-based network来学习2D纹理信息,3D结构和全局特征。该方法直接应用基于点的网络来提取局部几何特征和环境信息。[159]提出了Multiview PointNet(MVPNet)来集成2D多视角特征和空间几何特征。
4.1.2 基于点的网络
基于点的网络直接在点云上进行操作。然而,点云通常是无序且无结构的,使得直接应用标准的CNN不现实。为此,先驱的工作PointNet[5]用来对每个点进行特征学习,使用的是标准的MLP和全局特征。基于PointNet,一系列基于点的网络被提出。总体而言,这类方法可悲简单的分为以下几类:基于各个点的MLP方法,基于点卷积的方法,基于RNN的方法和基于图的方法。
4.1.2.1 Pointwise MLP Methods
这类方法通常利用共享的MLP作为网络中的基本单元。然而,由共享MLP提取出的各个点上的特征,并不能获取到点云中的局部几何关系,以及点与点之间的关系[5]。为了获取各个点周围更广泛的信息,以及学习到更丰富的局部结构,有很多方法被提出,包括基于邻近点特征池化的方法,基于注意力机制的集成(attention-based aggregation)以及局部-全局的特征级联。
Neighboring feature pooling: 为了获取局部的几何形式,这类方法通过将局部邻域点集成的方式,对各个点学习特征。具体而言,PointNet++[27]将点分层次,逐步地分成一些组,如下图所示。多尺度的grouping和多分辨率的grouping来克服点云多样性造成的问题。之后,[114]提出了PointSIFT模块来实现方向的编码和scale awareness。该模块通过使用3阶段的有向的卷积操作,将8个空间方向的信息堆叠并且编码,将多尺度的特征提取并级联来实现对不同尺度的适应性。与PointNet++中使用GROUPING的方法不同,[169]利用K-Means聚类和KNN的方法在世界空间和特征空间定义两种邻域。基于这样的假设:来自于同一类的点在特征空间中应当接近,该论文提出了pairwise distance loss and a centroid loss来对特征学习进行正则。为了建模点与点之间的相互关系,[31]提出了PointWeb来寻找局部区域内所有点对之间的关系。[170]提出了置换不变性的卷积称之为Shellconv。[95]提出了有效、轻量的网络称为RandLA-Net实现大规模的点云处理。该方法利用随机样本采样,在内存和计算方面提升很多。提出的局部特征集成用来获取和保持几何特征。
Attention-based aggregation:为了进一步提升分割的准确率,[90]针对点云分割,提出了基于注意力的机制。[29]提出了组随机注意力机制(group shuffle attention)来建模点之间的关系,并且提出了具有置换不变性、task-agnostic以及可微分的Gumbel Subset Sampling(GSS)来替代被广泛应用的Furthest Point Sampling(FPS)方法。该方法对离群点不敏感,并且可以选择具有代表性的点的子集。为了更好地获取点云的空间分布,[171]提出了Local Spatial Aware(LSA)层来学习空间感知权重。与CRF类似,[172]提出了Attention-based Score Refinement(ASR)模块对分割的结果进行后处理。初始分割结果通过pooling的方式进行修正。该模块很容易被集成至其他的深度网络中来提升分割效果。
Local-global concatenation:[85]提出了置换不变性的PS2-Net,将点云的局部结构和全局信息合并。Edgeconv[60]与NetVLAD[173]重复的级联起来,来获取局部信息和场景级别的全局特征。
4.1.2.2 Point Convolution Methods
这类方法通常试图提出在点云上进行更有效的卷积操作。[49]提出了在各个点上的卷积操作,其中邻域点被分入至kernel cell,卷积时卷积核有权重。[174]提出了称之为PCCN的网络,该网络基于参数化的连续卷积层。该层的核参数通过MLP和张成的连续向量空间所参数化。[42]提出了Kernel Point Fully Convolutional Network(KP-FCNN),基于Kernel Point Convolution(KPConv).具体而言,KPConv的卷积权重由欧式空间的距离决定,卷积核的点数也并不固定。卷积核点的位置由一个最优化问题确定。在[175]中,作者提供了丰富的消融实验(ablation experiments)和可视化结果展示了集成方法中,感受野的重要性。同时他们提出了Dilated Point Convolution(DPC)操作,来集成邻近点的特征,进而取代KNN的方法。该方法在提升感受野上非常有效,并且可以容易地集成至aggregation-based networks。
4.1.2.3 RNN-based Methods
为了获取点云中的内在环境特征,RNN也比用来进行点云的语义分割。基于PointNet[5], [180]首先将一大块点云转换成多尺度的块和网格块来获取输入级别的环境。接着,使用PointNet对各个块提取特征并送入Consolidation Units 或Recurrent Consolidation Units来获取输出级别的环境信息。实验结果显示,这样处理空间环境信息的方法在提高分割性能时是很重要的。[179]提出了一种轻量的模块,利用了slice pooling layer将无序的点云特征转换成有序的特征向量。[181]提出了Pointwise Pyramid Pooling (3P)模块来获取从粗到细的局部特征,并利用双向的RNN来实现端到端学习。然而这类方法损失了丰富的几何特征和密度分布[189]。[189]提出了Dynamic Aggregation Network(DAR-Net)来同时考虑全局场景复杂度和局部几何特征。[190]提出了3DCNN-DQN-RNN。该网络首先使用3DCNN学习空间分布和颜色特征,使用DQN进一步定位类别物体。最后级联的特征向量送入RNN中获取最后的分割结果。
4.1.2.4 Graph-based Methods
为了获取3D点云中潜在的形状和几何结构,一些方法使用了图神经网络。[182]将点云看做是一些相连的简单形状和Superpoint的集合,并且使用有向图来获取结构和环境信息。接着讲大规模的点云分割问题分成三个子问题,即,geometrically homogeneous partition, superpoint embedding and contextual segmentation. 为了进一步提升,[183]提出了有监督的框架 to oversegment a point cloud into pure superpoints. 为了更好地获取高维空间中的局部几何关系,[191]提出了基于Graph Embedding Module(GEM)和Pyramid Attention Network(PAN)的网络PyramNet。GEM模块将点云表述为有向无环图,并且在构建相似度矩阵时,利用协方差矩阵代替欧式距离。在PAN模块中,使用4个不同尺寸的卷积核来提取特征。在[184]中,提出的Graph Attention Convolution用来选择性地提取特征。
4.2 Instance Segmentation
与语义分割相比,实例分割更具有挑战性因为它需要更准确和更小的细粒度,具体而言,他不仅需要将有着不同语义的点分辨出来,还需要将有着相同语义的实例分出来。总体而言,目前的方法可分为两个方向:基于候选框的方法以及不需要候选框的方法。一些里程碑式的方法具体见下图。
4.2.1 Proposal-based Methods
这类方法将实例分割问题分成两个子任务:3D物体检测和实例mask的预测。[192]提出了3D fully-convolutional Semantic Instance Segmentation (3D-SIS) network,来实现在RGB-D数据上的语义实例分割。该网络从颜色和几何中学习特征。与3D目标检测类似,3D Region Proposal Network(3D-RPN)和3D ROI layer用来预测bounding box的位置,物体类别和实例的mask。根据合成分析策略,[193]提出了Generative Shape Proposal Network(GSPN)来产生3D候选框。这些候选框再通过R-PointNet修正。最终的标签通过预测各个点的二进制mask来得到。与直接从点云中回归3D bounding boxes不同,该方法移除了许多无用的候选框。[194]通过将2D panoptic分割延伸至3D映射,提出了在线的体素化3D行社系统来实现大规模的3D重建,给语义标签以及实例分割。该方法首先利用2D语义和实例分割获得像素级别的panoptic 标签,接着将这些标签集成至体素map中。使用全连接的CRF来实现准确的分割。该语义映射系统可得到高质量的语义映射和具有判别性的目标检测。[195]提出了单阶段的,不需要anchor的可训练网络称为3D-BoNet,来实现点云上的实例分割。该方法对所有可能的实例直接回归大致的3D bounding boxes,接着利用点级别的二分类器来获取实例标签。特别地,该bounding boxe的任务是被当做是最优分配问题。同时,使用了multi-criteria 损失函数来正则化生成的bounding boxes。该方法不需要任何的后处理操作,并且有很高的计算效率。[196]提出了针对大规模户外LiDAR点云进行实例分割的网络。该方法使用self-attention blocks,在点云的鸟瞰图上学习特征表示,最后获取的实例分割标签基于预测的水平中心和高度限制。
总的来说,基于候选框的方法较为直观,并且实例分割的结果通常较好。然而该方法需要多阶段的训练并且需要对多余候选框进行裁剪。因此通常都需要更多的时间和计算资源。
4.2.2 Proposal-free Methods
不需要候选框的方法[197-202]并没有目标检测的模块。作为替代的是,他们通常将实例分割认为是语义分割后的聚类步骤。具体而言,需要现有的方法都基于这样的假设:属于同一实例的点应当有着相似的特征。因此这类方法通常聚焦于判别式的特征学习和点云聚类。
[197]作为先驱性的工作,首次提出了Similarity Group Proposal Network(SGPN)。该方法首先对每个点学习特征和语义map,接着引入相似度矩阵来表示各对点之间的相似度。为了学习到更多的判别式特征,使用了double-hinge loss来互相适应相似度矩阵和语义分割的结果。最后使用启发式的NMS方法将相似的点归并进一个实例中。由于相似度矩阵的构建需要大量的内存消耗,该方法应用的规模收到了限制。类似地,[201]首先利用子流形稀疏卷积来预测各个体素的语义scores,急着引入聚类算法将点聚集至实例中。更进一步,[202]提出了structure-aware loss来学习判别式的embeddings。该损失函数同时考虑了特征的相似度和点之间的几何关系。最后使用基于注意力机制的graph CNN来自适应地对特征进行修正。
由于一个点的语义分类和实例标签通常互相决定,许多方法将该两个任务合并成一个任务。[198]通过引入端到端可学习的Associatively Segmenting Instances and Semantics (ASIS)模块,将两个任务集成到一起。实验结果显示语义特征和实例特征可相互支撑,达到了一定的性能提升。[199]首先引入了Multi-Task Point-Wise Network(MT-PNet), 给各个点分配标签信息,并且对特征空间的embedding进行正则。接着将预测的语义标签和embeddings融合至Multi-Value Conditional Random Field(MV-CRF)进行联合优化。最后,mean-field variational inference用来得到语义标签和实例标签。[204]提出了Dynamic Region Growing (DRG) method,自动地将点云分成一系列的块,接着使用无监督的K-means++ 算法进行聚类。接着在环境信息的指导下进行大规模的patch segmentation。最后,这类有标签的patches融合进物体级别,得到最后的语义和实例标签。
为了实现在整个3D场景上的实例分割,[200]提出了混合的2D-3D网络,该网络学习全局一致性的实例特征和局部的几何特征。学习到的特征被组合起来实现语义和实例分割。在将点聚集成实例时,并非使用GroupMerging算法[197],而是更灵活的Meanshift[205]。[206]同时学习了每个实例的独特的特征表示,以及对于物体中心的方向信息。使用feature embedding loss and directional loss 在隐空间中学习特征。Mean-shift 聚类和NMS用来将体素积聚成实例。该方法在ScanNet[8]基准上达到了SOTA性能。同时,预测出的方向信息可以确定实例的边界。[207]引入了概率embeddings进行点云的实例分割。该方法也继承了不确定估计并且提出了新的损失函数。
总体而言,不需要候选框的方法不需要耗费资源的区域生成步骤。然而,该方法的准确率较低因为该方法不检测物体的边界。
4.3 Part Segmentation
零件分割的主要困难来自于两方面。第一,有相同语义标签的部件有着较大的几何变化和不确定性;第二,该方法需要对噪声和采样具有鲁棒性。
[208]提出了VoxSegNet,在3D体素数据上来实现细粒度的零件分割。Spatial Dense Extraction(SDE)模块用来在稀疏体素数据上提取大规模的具有判别性的e特征。学习到的特征被重新赋予权重,并且使用Attention Feature Aggregation (AFA)模块进行融合。[209]将FCN与surface-based CRF组合,实现端到端的3D 零件分割。他们首先从不同的视角产生图像来实现optimal surface coverage,并将这些图片送入至2D网络产生置信 图。接着,使用surface-based CRF将置信图集成起来,用来对整个场景打标签。[210]引入了Synchronized Spectral CNN(SyncSpecCNN),在不规则非同构形状图上实现卷积。
[211]通过引入Shape Fully Convolutional Networks(SFCN),在3D网格上实现了形状分割,并且将三种低层次的几何特征作为输入。接着利用基于投票的多标签graph cut来修正分割结果。[212]提出了弱监督的CoSegNet进行3D形状分割。该网络将一些未分割的3D点云形状作为输入,接着通过最小化group consistency loss,产生形状零件的标签。与CRF类似,预训练的part-refinement网络用来修正并且去噪。[213]提出了Branched Auto-encoder network(BAE-NET)用来无监督,one-shot和弱监督3D形状分割。该方法将形状分割任务看做是特征学习问题并试图找到最简单的零件表示(通过最小化形状重建损失函数)。基于编码-解码的结构,该网络的每个分支都在学习特定零件形状的相容表示。学到的特征与点坐标一起送入解码器中,产生二进制的值(该值表示该点是否属于这一part)。该方法有着良好的繁华性,并且可以处理大规模的3D形状几何。然而该方法对处值较为敏感,并且并未利用到形状的语义信息,妨碍了该方法在每次迭代中得到鲁棒、稳定的估计。
4.4 Summary
下表展示了已有方法在公开数据集上的结果,包括:S3DIS[176], Semantic3D[9], ScanNet[102]和SemanticKITTI[177].
接下来这些问题需要进一步的探索。
a. 基于点的网络是最常见的方法。然而,点的表示通常没有明确的邻域信息,大多数基于点的方法不得不试图使用好非自愿的邻域查找方法(KNN, ball query)。这自然地限制了这类方法的有效性,因为邻域查找方法需要很高的计算资源和内存。
b. 在点云分割中,从不平衡的数据中学习仍然是具有挑战性的问题。尽管许多方法[42], [170], [182]达到了不错的结果,但性能在较小类别的数据上仍然较差。
c. 大多数的方法[5], [27], [52], [170], [171]在较少点的点云上进行(4096)。实际上,从深度sensor上得到的点云是非常稠密的。因此需要寻求处理大规模点云的有效分割方法。
d. 一些工作[145], [146], [167]开始在动态点云中学习空间-时间的信息,空间-时间信息可以帮助提高3D目标检测,分割和补全是值得期待的。
5 Conclusion
本文章提出了当前针对3D understanding的一些SOTA方法,包括3D形状分类,3D目标检测与跟踪以及3D场景和物体分割。
6 Reference
参考文献太多就不放了,见论文“Deep Learning for 3D Point Clouds: A Survey”里的参考文献。
本文仅做学术分享,如有侵权,请联系删文。
下载1
在「3D视觉工坊」公众号后台回复:3D视觉,即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。
下载2
在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总,即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。
下载3
在「3D视觉工坊」公众号后台回复:相机标定,即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配,即可下载独家立体匹配学习课件与视频网址。
重磅!3DCVer-学术论文写作投稿 交流群已成立
扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。
同时也可申请加入我们的细分方向交流群,目前主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。
一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按加微信群或投稿
▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
圈里有高质量教程资料、可答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。