一些点云数据采样方法简介

点云数据的特点

  1. 数据量大。实际场景中的点云中由大量的点组成。
  2. 无序性。点云相当于是一个点的集合,与其中点的排列顺序没有关系。
  3. 点与点之间的距离可度量。
  4. 点的分布不均匀。由于采样方式的限制,点在一些地方分布密集,有的地方就分布的比较稀疏。

点云数据采样

由于实际场景中的点云中包含着大量的点,如果直接对这些点进行处理的话,将会严重限制数据的处理速度。所以需要从原始点云数据中选取部分点来作为神经网络的输入。一个理想的点云采样方法应该具有以下特点:参考文献

  • 采样结果与点云的顺序无关
  • 采样结果与任务无关
  • 易用性,能够方便的融入到神经网络中

对于其中的第二条,也有研究表明训练一个和任务有关的采样网络能够显著提高采样的效果。

点云的采样方法可以分为两大类,一类是启发式采样,就是根据一些启发式规则来对点云进行采样,另一种是基于学习的采样,就是通过构建网络模型来完成采样过程。

一、启发式采样

1. 随机采样

顾名思义,就是随机的从点云数据中选取一些点。该方法的特点是一方面采样的效率高,但是由于其采样的随机性,可能会丢失一些信息。本文提出了一个解决该弊端的方法。

2. 最远点采样(FPS)

最远点相对于随机采样,其比较好的一点是能够尽可能的覆盖空间中的所有点。算法实现步骤如下:

  1. 输入点云有N个点,从点云中选取一个点P0作为起始点,得到采样点集合\(S=\left \{ P_0 \right \}\);

  2. 计算所有点到P0的距离,构成N维数组L,从中选择最大值对应的点作为P1,更新采样点集合\(S= \left \{  P_0, P_1 \right \} \);

  3. 计算所有点到\(P_1\)的距离,对于每一个点\(P_i\),其距离\(P_1\)的距离如果小于\(L[i]\),则更新\(L[i] = d(Pi, P1)\),因此,数组L中存储的一直是每一个点到采样点集合S的最近距离;

  4. 选取\(L\)中最大的点作为\(p_2\),更新采样点集合\(S= \left \{  P_0, P_1, P_3\right \} \)
  5. 重复step2-4, 直到采样点集中的数目达到需要的采样点数为止。

tips: \(L\)数组中存储的距离表示对额是未采样点集中的任意一点距离已采样点集中的任意一点的最大值。从整个算法流程来看,最远点采样的效率并不是很好,其时间复杂度为\(O(N^2)\)

FPS存在的问题:

  1. 采样结果依赖于初始化点的位置,采样结果不是顺序无关的。
  2. 为低维的欧几里得空间设计的
  3. 对于离群值比较敏感

3. Inverse Density Importance Sampling(IDIS)

从该方法的名称可以看出其采用的策略。就是点密度越大的地方,该点的重要性越低,被采样的可能性也越小。算法的基本流程如下:

  1. 对于点云中的每一个点,计算其密度。其密度可以表示为:\[ \rho(p_i) = \sum\limits_{j=1}^{t}\left \| p_i – p_i^j \right \| ,p_i^j \in N(p_i) \] 其中\(p_i^j\)表示离点\(p_i\)最近的第\(j\)个点。\(t\)被设为16.
  2. 所有点被根据密度的导数\(\frac{1}{\rho}\).
  3. 选取前\(K\)个点作为采样点。

二、基于学习的采样

基于学习的方法采样就是从原始点集中选则子集,根据任务不断的优化子集。但是由于采样操作的离散性,采样的操作是可岛的,所以不能直接在原始点集上进行采样,下面的方法针对此问题提出了一些解决方案。

1. 基于生成器的采样

参考文献

该方法是一种基于任务的方法,即根据任务的不同,采样结果也有所差异。整个算法的大致流程如下:

首先是对采样网络S-Net进行训练,S-Net的输入是一组n个的3D坐标集。S-Net的输出是k个点。然后将生成的k个点输入到任务网络。任务网络是一个已经预训练好的网络。在训练和测试S-Net期间,任务网络的参数保持不变,这样才能保证优化是对采样网络进行的,而不是对任意的采样和任务网络进行优化。

在S-Net的训练阶段,将生成的点输入到任务网络中,通过使损失函数最小化来对S-Net进行优化。其中损失函数由两部分组成,一部分是Task Loss,另一部分是Sampling Loss.其中Sampling Loss的作用是鼓励每个生成的点靠近输入点云,并强置生成的点散布在点云上。

在Inference阶段,将生成的点云与输入点云进行匹配,计算距离S-Net产生的虚拟点最近的输入点,将其作为采样点。

2. SampleNet

参考文献

本文作者提出得一种方法是对前面基于生成器采样得改进.其基本步骤如下图:

首先对原始输入点云进行简化,生成点集\(Q\), 然后将点集\(Q\)在原始点集\(P\)上进行软投影,产生点集\(R\)。然后将\(R\)作为任务网络的输入。通过训练,产生子集R。

下面是软投影的具体步骤:

投影点产生的公式为:\[ r= \sum\limits _{i \in N_p(q)}{w_iq_i} \] 其中\(N_p\)表示的是原始点集\(Q\)中距离\(p\)点最近的\(k\)个点的下标。\(p_i\)表示的是点\(q\)在原始点集\(P\)中某一个邻居。权重是由距离个点的距离决定的,做了一个softmax。

整个网络的训练过程由以下几部分组成:\[ L_{total}=\sum(L_{task}(R_c) + \alpha L_{simplify}(Q_c,P)) + \lambda L_{project} \]  其中,\( L_{project}\)表示的是投影的损失。

值得主义的是,软投影产生的点并不是原始点集中的点。所以在最后还需要做一次选择。由于前面使用了softmax,所以作者选择了权重最高的点作为采样点。如果采样点的数量达不到要求的话,使用FPS补充。S-Net中也是使用的该方法。

3. Gumbel子集采样(Gumbel Subset Sampling GSS)

参考文献

本文作者提出了一种端到端得可训练得采样模型。使用得是\(gumnel\_softmax\)函数; \[ y_{gumbel}=gumbel\_softmax(wX^{T}_i)\cdot X_i \] 对输入得样本点进行采样。其中\(w\)是可以学习得,可以使用MLP代替。

 

 

Leave a Reply

发表评论

邮箱地址不会被公开。 必填项已用*标注

本站所有文章均为原创,若需转载,请注明出处©twn29004 | 陕ICP备 20000896 网站备案号

总访问量:9605376    今日访问量:446    您是今天第:446 个访问者