点云中的点分割方法

引言


前一段时间,我需要解决在点云中分割点的问题(点云是从激光雷达获得的数据)。


示例数据和要解决的任务:
样本数据


对现有方法的总体概述的搜索失败,因此我必须自己收集信息。 您可以看到结果:这里收集了过去几年中最重要,最有趣的文章(以我的观点)。 所有考虑的模型都解决了分割点云(每个点所属的类)的问题。


本文对于那些熟悉神经网络并想了解如何将其应用于非结构化数据(例如图形)的人很有用。


现有数据集


现在,在公共领域中,有关于该主题的以下数据集:



点云的工作功能


神经网络最近才进入这个领域。 而且,诸如完全连接和卷积网络之类的标准体系结构不适用于解决此问题。 怎么了


因为点的顺序在这里并不重要。 一个对象是一组点,以什么顺序查看它们都无关紧要。 如果每个像素在图像中都有其位置,那么我们可以安全地混合点,并且对象不变。 相反,标准神经网络的结果取决于数据的位置。 如果将像素混合到图像上,则会得到一个新对象。


现在,让我们看看神经网络如何解决这一问题。


最重要的文章


这个领域没有很多基本架构。 如果打算使用图形或非结构化数据,则需要了解以下模型:


  • 点网
  • PointNet ++
  • 神经网络

让我们更详细地考虑它们。


  • PointNet:针对3D分类和分割的点集深度学习
    处理非结构化数据的先驱。
    • 他们如何决定:本文介绍了两种模型:点的分割和对象的分类。 常规部分包括以下块:
      • 用于确定变换(坐标系的平移)的网络,然后将其应用于所有点
      • 分别应用于每个点的变换(常规感知器)
      • maxpooling,它合并了来自不同点的信息,并为整个对象创建了全局特征向量。
      • 然后模型之间的差异开始了:
        1. 分类模型:全局特征向量进入全连接层的输入以确定整个点云的类别
        2. 分割模型:全局特征向量和每个点的计算特征进入定义每个点类的完全连接层的输入。
    • 代号

PointNet体系结构


  • PointNet ++:度量空间中点集的深度层次特征学习
    斯坦福大学的那些人描述了PointNet。
    • 他们如何决定:pointNet递归地应用于较小的子云,类似于卷积网络。 也就是说,多维数据集划分空间,将PointNet应用于每个多维数据集,然后由这些多维数据集组成新的多维数据集。 这使您可以突出显示网络早期版本丢失的本地迹象。
    • 代号

PointNet ++体系结构


  • 用于点云学习的动态图CNN


    • 他们如何决定:基于可用的点,构建一个图形:顶点是点,边仅存在于当前点和最接近它的k个点之间。 接下来,定义Edge conv-对来自当前点的边缘进行特殊的卷积。 本文为这种卷积提供了几种选择。 结果,使用以下公式 :对于每个点x [i],在其所有J个相邻点上,将M个符号视为特征[i,m] = max_j(Relu(θ[m] *(x [i] -x [j])+φ [m] * x [i])) 。 接收到的值被记住为新的点嵌入。 在此,局部(x [j] -x [i])和全局(x [j])坐标用作卷积的输入。
      在图上定义卷积后,便会构建一个卷积网络。 您还可以注意到转换的数量及其在每个点上的应用,类似于PointNet。
      在本文中,您将找到其他解决方案的出色概述。


    • 代号




DGCNN架构


基于PointNet和PointNet ++的文章:


大多数文章在错误计数或复杂块的深度和复杂性方面有所不同。


  • PointWise:无监督的逐点特征学习网络
    工作特色-无需老师进行培训


    • 他们如何决定:针对每个点,对嵌入向量进行训练,然后对它们进行分割。
      本文的主要假设是,尽管相似的对象距离遥远,但它们仍应具有相似的嵌入(例如,椅子的两条不同的腿)。 PointNet用作基本模型。 主要创新是误差函数。 它由两部分组成:重构误差和平滑度误差。
      重建错误使用点上下文信息。 她的任务是使具有相同几何上下文的点的嵌入相似。 为了进行计算,根据所选点的嵌入矢量,在其附近生成新的点。 即,该点的特征描述应包含有关该点周围对象形状的信息。 接下来,考虑生成的点有多少落在对象的真实形状之外。
      需要平滑度误差,以便在相邻点处嵌入相似,而在远处点嵌入不同。 这里最漂亮的东西是接近度的测量,不仅是欧几里德空间中两点之间的范数,还包括对物体两点之间的距离进行计数。 对于每个点,从最近的k和进一步的k中选择一个点。
      当前嵌入应该比之前更接近某个最小值。

  • SGPN:用于3D点云实例细分的相似性提案网络


    • 他们如何决定:就像PointWise一样,计算误差最有趣的地方是这里。 PointNet ++是基础,首先,我们类似于PointNet ++来考虑特征向量和对象分别属于每个点。
      接下来,根据特征,我们考虑3个矩阵(相似性,置信度和分段)。
      学习错误将是由相应矩阵计算的三个错误的总和: L = L1 + L2 + L3
      设N为点数
      相似度矩阵-正方形,大小N *N。 第i行和第j列相交处的元素指示这些点是否属于同一对象。 属于同一对象的点必须具有相似的特征向量。 矩阵的元素可以采用以下三个值之一:点i和j属于一个对象,点属于一类对象,但是属于不同的对象(此椅子和那个椅子,但椅子都不同),或者这些通常是来自不同类别的对象的点。 该矩阵是根据真实值计算的。
      相似度误差
      置信矩阵是长度为N的向量。对于每个点,根据我们算法的工作,属于对象的一组点与实际上属于该对象的一组点与当前点之间的联合相交(IoU)被考虑。 误差只是真值和计算出的矩阵之间的L2范数。 也就是说,网络正在尝试预测其在对对象上的点进行类预测时的信心。
      分割矩阵的大小为-N *类数。 此处的错误被视为多类分类问题中的交叉熵。
    • 代号


SGPN架构


  • 知道邻居的行为:点云的3D语义分割
    • 他们如何决定:首先,他们考虑了很长时间,比PointNet更为复杂,带有大量的剩余连接和数量,但总的来说是一样的。 略有差异-他们在全局和局部坐标中计算每个点的符号。
      这里的主要区别是错误计数再次出现。 这不是标准的交叉熵,而是两个误差的总和:
      1. 来自一个对象的成对距离损失点应比τ_near更近,而来自不同对象的点的长度应比τ_far长
        成对距离损失
      2. 质心损失-来自一个物体的点应彼此靠近

基于DGCNN的文章:


DGCNN最近于2018年发布,因此基于该架构的文章很少。 我想提请您注意一件事:



链接DGCNN架构


结论


在这里,您可以找到有关解决点云中分类和分割问题的现代方法的简要信息。 有两个主要模型(PointNet ++,DGCNN),现在对其进行了修改以解决这些问题。 通常,为了进行修改,会更改错误功能,并且通过添加层和链接使这些体系结构变得复杂。

Source: https://habr.com/ru/post/zh-CN459088/


All Articles