前沿
这是一篇比较经典的基于深度学习的点云下采样方法
焦点创新点:
- 初次提出了一种学习驱动的、任务特定的点云采样方法
- 引入了两种采样网络:
S-NET:为不同采样大小训练独立网络
ProgressiveNet:可以按重要性对点进行排序,实现恣意采样比例
- 通过两个损失函数来优化采样:
任务损失:使采样点得当特定任务
采样损失:确保生成点靠近原始点云
paper:https://arxiv.org/abs/1812.01659
code:
当点云数目较多时,不得当拿来直接做下游任务,流行的采样技能是最远点采样 (FPS)。然而,FPS 与下游应用程序(分类、检索等)无关。基本假设是,最小化最远点距离,如FPS所做的那样,是其他目的函数的一个很好的代理。我们提出了一个深度网络来简化三维点云。称为 S-NET 的网络接纳点云并生成针对特定任务优化的较小点云。在两个标准数据集上进行实行,与 FPS 进行对比表现出更好的结果。
引言
点云数据比年来利用愈加频繁,点云数据的下采样方法也随之更加重要。可以降低功耗、计算成本和通信负载,等等。常规方法中,如随机采样、匀称采样、最远点采样(Farthest Point Sampling, FPS)。点云已被广泛用于分类、部门分割、语义分割、检索等任务,相关技能如自动编码、生成、补全和上采样也被广泛探索。但在这篇文章之前,还没有专门针对下采样的“学习类方法”。
我们提出了一种简化网络,称为S-NET,它基于PointNet[1]的体系结构学习生成一个较小的(简化的)点云,该点云针对下游任务进行了优化,比方分类、检索或重修。
简化的点云必须平衡两个相互冲突的约束。一方面,我们盼望它生存原始形状的相似性。另一方面,我们盼望将其优化为后续任务。
我们通过训练网络生成一组满足两个目的的点来办理这个问题:采样损失和任务的损失。采样损失驱动生成的点靠近输入点云。任务损失确保点最得当任务。
FPS的一个优点是它对原始点的子集进行采样。相比之下,S-NET 生成的简化点云不能保证是输入点云的子集,我们在推理时执行后处理步骤,我们将生成的点与输入点云进行匹配,并获得此中的一个子集,即一组采样点(见图 1)。实行表明,与 FPS 相比,利用我们的采样点实现了对多个任务的更好结果。
我们的方法可以被以为是一种特性选择机制[27,28]。每个点都是底层形状的特性,我们试图选择对任务贡献最大的特性。它还可以解释为视觉注意的一种形式[29,30],将后续任务网络会合在重要点上。
S-NET 被训练以输出固定的样本量,这意味着我们需要为每个目的大小训练不同的 S-NET。为了降服这个限定,我们引入了称为 ProgressiveNet 的 S-NET 的扩展。ProgressiveNet 对任务的重要性排序点。这允许在推理时选择样本大小,从而允许动态细节级别的管理。
所提出的采样方法应用于三个不同的任务:点云分类、检索和重修。我们将我们的方法与常见的非数据驱动方法进行比较:随机抽样和 FPS。对于第一个任务,我们展示了更好的分类精度;在第二个任务中,我们展示了改进的检索结果;末了我们得到了更低的重修毛病。
总而言之,我们的主要贡献是:
• 点云的特定任务数据驱动采样方法;
• 渐进式采样方法,根据点与任务的相关性对点进行排序;
• 利用采样点云进行点云分类、检索和重修的性能改进。
方法
问题声明
给定一个点集 P = p i ∈ R 3 , i = 1... n P = {p_i ∈ R^3, i = 1...n} P=pi∈R3,i=1...n,样本大小 k ≤ n k ≤ n k≤n 和任务网络 T T T ,找到 k k k 个点的子集 S ∗ S^∗ S∗,以最小化任务网络的目的函数 f f f
S ∗ = arg min S f ( T ( S ) ) , S ⊂ P , ∣ S ∣ = k < n . S^*=\argmin_S f(T(S)), S\subset P,|S|=k<n. S∗=Sargminf(T(S)),S⊂P,∣S∣=k<n.
这个问题带来了挑衅,因为采样似乎类似于池化,但在池化中,池化值是向前传播的,因此可以计算关于它的梯度。然而,离散采样类似于“argpooling”,此中传播的值不能增量更新。因此,不能直接训练采样操纵。因此,我们提出了一个两步过程:起首,我们利用神经网络,即 S-NET,生成一组点。其次,我们将生成的点与输入点云进行匹配,得到其点的子集,即采样点。
图 1 说明白该过程。S-NET 的输入是一组 n 个 3D 坐标,即点,表示 3D 形状。S-NET 生成点的输出。S-NET 后跟一个任务网络。任务网络在 n 个点的输入上进行了预训练,以在点云(即分类、检索或重修)上执行给定的任务。在 S-NET 的训练和测试期间保持固定。这确保了采样被优化到任务中,而不是被优化到恣意采样的任务。
在训练阶段,生成的点被馈送到任务网络。通过最小化任务损失,这些点一方面针对任务进行了优化。我们利用一个额外的采样正则化损失项,它鼓励每个生成的点靠近输入点之一,并强制生成的点分布在输入点云上。在推理时,将生成的点与输入点云进行匹配,以获得其子集。这些是采样点,我们过程的最终输出。这些点通过任务网络,并评估其性能。
我们提出了两个采样版本:S-NET 和 ProgressiveNet。在第一个版本(图 1)中,我们为每个样本大小训练不同的采样网络。在第二个(图 2)中,我们训练了一个网络**,该网络可用于生成任何小于输入大小的样本量**。
S-NET
S-NET的体系结构遵循等PointNet 网络的体系结构。输入点经历一组 1×1 的卷积层,从而产生每个点的特性向量。然后,利用对称特性最大池化操纵来获得全局特性向量。末了,我们利用几个全毗连层。末了一层的输出是生成的点集。
让我们将生成的点集表示为 G G G,输入点集表示为 P P P。我们构建了一个采样正则化损失,由三项组成:
L f ( G , P ) = 1 ∣ G ∣ ∑ g ∈ G min p ∈ P ∥ g − p ∥ 2 2 L_{f}(G, P)=\frac{1}{|G|} \sum_{g \in G} \min _{p \in P}\|g-p\|_{2}^{2} Lf(G,P)=∣G∣1g∈G∑p∈Pmin∥g−p∥22
该公式最小化生成点 G 中的每个点 g 到 P 中最近点 p 的平方距离的平均值。
L m ( G , P ) = max g ∈ G min p ∈ P ∥ g − p ∥ 2 2 L_{m}(G, P)=\max _{g \in G} \min _{p \in P}\|g-p\|_{2}^{2} Lm(G,P)=g∈Gmaxp∈Pmin∥g−p∥22
该公式起首找到生成点集G 中每个点 g 到输入点集 P 中最近点 p 的平方距离,然后选取这些最小距离中的最大值。这样做是为了镌汰生成点会合最远的点与输入点会合最近点之间的距离,从而防止生成点会合的某些点阔别输入点集,这会增长匹配过程中的不确定性。
L b ( G , P ) = 1 ∣ P ∣ ∑ p ∈ P min g ∈ G ∥ p − g ∥ 2 2 L_{b}(G, P)=\frac{1}{|P|} \sum_{p \in P} \min _{g \in G}\|p-g\|_{2}^{2} Lb(G,P)=∣P∣1p∈P∑g∈Gmin∥p−g∥22
该公式计算输入点 P 中每个点 p 到生成点 G 中最近点 g 的平方距离的平均值。
L f L_f Lf 和 L m L_m Lm 使得 G G G 中的点在平均情况和最坏情况中分别靠近 P i P_i Pi中的点。这旨在鼓励在随后的匹配过程中实现精密匹配。我们发现混淆平均和最大操纵可以加快收敛。 L b L_b Lb 确保生成的点在输入点上匀称分布,从而镌汰匹配过程中的冲突。采样正则化损失是这三项的加权和:
L s ( G , P ) = L f ( G , P ) + β L m ( G , P ) + ( γ + δ ∣ G ∣ ) L b ( G , P ) L_{s}(G, P) = L_{f}(G, P)+\beta L_{m}(G, P) +(\gamma+\delta|G|) L_{b}(G, P) Ls(G,P)=Lf(G,P)+βLm(G,P)+(γ+δ∣G∣)Lb(G,P)
请注意,这是倒角距离(chamfer distance)的推广,当 β = 0 , γ = 1 和 δ = 0 β=0,γ=1和δ=0 β=0,γ=1和δ=0时实现。别的,我们将 L t a s k L_{task} Ltask表示为任务网络损失。S-NET 总损失为:
L S − N E T ( G , P ) = L task ( G ) + α L s ( G , P ) L^{S-N E T}(G, P)=L_{\text {task }}(G)+\alpha L_{s}(G, P) LS−NET(G,P)=Ltask (G)+αLs(G,P)
此中,α 控制正则化的权衡。S-NET 的输出是一个 k×3 的矩阵,此中 k 是样本大小,我们为每个 k 单独训练。
匹配
生成的点 G G G 不能保证为输入点 P P P 的子集。为了获得输入点的子集,我们将生成的点与输入点云进行匹配。
匹配两个点集的一种广泛利用的方法是地球移动距离(EMD)[17,23,26,40]。EMD 找到最小化对应点平均距离的集合之间的双射,而点集需要具有相同的大小。然而,在我们的例子中,G 和 P 的大小不同。我们研究了两种匹配方法。第一个将 EMD 适应不匀称的点集。第二个基于最近邻 (NN) 匹配。在这里,我们形貌了后者,它产生了更好的结果。读者可以参考补充材料相识有关其他匹配方法的具体信息。
在基于 NN 的匹配中,每个点 x ∈ G 被替换为其最靠近的欧几里得对应点 y^∗ ∈ P :
这里有点类似于 VQVAE 或者 VQGAN 中的量化操纵
y ∗ = argmin y ∈ P ∥ x − y ∥ 2 . y^{*}=\underset{y \in P}{\operatorname{argmin}}\|x-y\|_{2} . y∗=y∈Pargmin∥x−y∥2.
由于 G 中的几个点大概最靠近 P 中的同一点,因此唯一采样点的数目大概小于请求样本量。
因此,我们删除重复点并获得初始采样集。然后,我们通过运行最远点采样(FPS)[2]来完成这个集合,直到G的大小,在每一步中,我们添加离当前采样集最远的P点。匹配过程仅在推理时应用,作为推理末了一步。在训练期间,生成的点由任务网络处理,因为匹配是不可微的,不能将任务损失传播回 S-NET。
ProgressiveNet: sampling as ordering
S-NET 被训练以将点采样为单个预界说的样本大小。如果需要多个样本量,则需要训练多个 S-NET。但是,如果我们想训练一个可以产生任何样本大小的网络,即以任何采样率对输入进行采样。为此,我们提出了 ProgressiveNet。ProgressiveNet被训练来取给定大小的点云并返回相同大小的点云,由相同的点组成。但是,固然输入的点是恣意排序的,但输出的点按其与任务的相关性排序。这允许对任何样本大小进行采样:为了获得大小为 k 的样本,我们只需取 ProgressiveNet 的输出点云的前 k 个点并丢弃其余部门。架构末了一个完全毗连的层大小等于输入点云大小(有3n个元素)。
为了训练 ProgressiveNet(图 2),我们界说了一组大小 C s = 2 1 , 2 2 , 。 . . , 2 l o g 2 ( n ) C_s = {2^1, 2^2,。.., 2^{log2(n)}} Cs=21,22,。..,2log2(n)。对于每个大小 c ∈ C s c ∈ C_s c∈Cs,我们计算任务损失项和采样正则化损失项,使得总 ProgressiveNet 的损失变为:
L ProgressiveNet ( G , P ) = ∑ c ∈ C s L S − N E T ( G c , P ) L^{\text {ProgressiveNet }}(G, P)=\sum_{c \in C_{s}} L^{S-N E T}\left(G_{c}, P\right) LProgressiveNet (G,P)=c∈Cs∑LS−NET(Gc,P)
此中 L S − N E T L^{S-NET} LS−NET 是等式 6 中界说的损失项, G C G_C GC 是 ProgressiveNet 生成的点的前 c 个点(输出层的前 3c 个元素)。这个损失函数界说了点子集的嵌套结构。比方,由两点组成的第一个子集在所有术语 L S − N E T ( G C , P ) L^{S-NET}(GC, P) LS−NET(GC,P) 中用于 c ≥ 2。因为这个子集在所有术语中都利用,所以它包罗在所有更大的子会合。类似地,前 4 个点界说了第二个子集,此中包罗第一个子集而且是所有更大子集的一部门。
在这个训练过程中,前 k 个生成点(对于任何 k)被优化为得当手头的任务作为一个独立集,并与前面的点集成以创建更大的集合,这将改善给定任务的结果。这确保了对任务更重要的点将出如今生成的点会合,而额外的点将给出边际效用递减,从而导致点云的面向任务的渐进分解[41]。在推理时,生成的点(ProgressiveNet 的输出层)与输入点云匹配,利用我们在第 3.2 节中用于 SNET 的相同匹配过程。我们将生成的点的顺序转移到它们的匹配点。为了获得特定的样本量 k,我们取前 k 个采样点。
实行
我们将 S-NET 应用于三个任务:点集分类 [1]、检索和重修 [17]。对于分类和检索,我们接纳Qi等人[1]和PointNet[1]提供的ModelNet40[42]点云数据作为任务网络。对于重修,我们利用ShapeNet Core55存储库[43]和Achlioptas等人[17]的点集自动编码器。随机抽样和 FPS 被用作替代的非数据驱动采样方法,以便与我们提出的方法进行比较。为了公平比较,我们**只在匹配过程之后利用 S-NET 点,因此我们的采样点和替代方法的点都是输入点云的子集。**进一步的实行细节可以在补充材料中找到。
分类
我们报告了 ModelNet40 数据集上的实例分类结果,接纳官方训练测试拆分。我们利用 PointNet 的完整版本作为 S-NET 的任务网络和 ProgressiveNet 的 PointNet 的普通版本(以节省训练时间),除非尚有说明。
图 3 表现了 PointNet 在完整数据(每个点云 1024 个点)上进行训练并在不同大小的样本上进行测试时的分类精度。我们比较了几种不同的采样方法:随机采样与输入点上的匀称分布,FPS 和 S-NET。我们训练了 10 个不同的 S-NET,对于 k ∈ {2, 4, 8,., 1024} 分。采样率界说为 n/k = 1024/k。我们观察到,利用 S-NET 采样点的分类精度等于或优于在任何采样率下利用 FPS 的点,边距高达 34.2%(对于采样率 32)。
表 1 表现,当在 S-NET 采样的点上进行训练时,PointNet 的准确度也更高。此表中的每个数字代表一个不同的 PointNet,每个 PointNet 都在利用不同采样方法采样的特定大小的点云上进行训练和测试。比方,我们看到,在利用 S-NET 时,仅在 16 个点的点云上进行训练和测试的 PointNet 实现了 85.6% 的准确率,而 FPS 仅为 76.7%。这表明 S-NET 不过度拟合它所训练的分类器的特定实例。相反,它以使采样集易于分类的方式对点进行采样,从而在数据中的不同类别之间产生强烈的区分。
ProgressiveNet 在图 4 中,我们比较了 PointNet vanilla 在 S-NET 采样的点上的准确性(在这种情况下利用 PointNet vanilla 训练)与 ProgressiveNet 采样的点的准确性。评估是针对所有样本量完成的范围[2,1024]。S-NET 结果来自 10 个不同的 SNET,每个 NET 针对特定样本大小进行训练,大小为 k ∈ {2, 4, 8,., 1024} 分。对于这些值之间的样本量,我们接纳针对较低样本量训练的 S-NET,然后利用 FPS 完成所需的大小。比方,为了获得大小为 48 的样本**,我们接纳了 S-NET 采样的点,该点颠末训练可以对 32 个点进行采样,然后进行 16 步 FPS。渐进式结果来自一个输出大小为 1024 的 ProgressiveNe**t,它利用大小为 Cs = {2, 4, 8, …, 1024}。
我们观察到 S-NET 对它训练的样本量具有更好的性能,而 ProgressiveNet 对介于两者之间的任何样本量都表现得更好。这表现了 ProgressiveNet 的优势,它按优先级对点进行排序,以便准确度在样本大小上近似单调增长。
S-NET 假设任务网络已经颠末训练。这将导致在非常大的点云的情况下出现问题。我们表明,可以在 FPS 采样的点云上训练任务网络并利用它来训练 S-NET。然后可以利用生成的 S-NET 将任务网络重新训练为更高的准确性。
有关所提出的训练和测试过程的说明,请参见图 5。以下小规模模拟证明了这一点:我们利用 FPS 为每个点云采样 ModelNet40 到 k = 32 个点,并在这些采样点上训练 PointNet。这是我们的基线。基线在测试集上的准确率为 82.2%。当我们用大小为 1024 的点云馈送这个颠末训练的 PointNet 时,准确率仅为 46.6%。然后,我们利用 32 大小的点云训练集和基线 PointNet 作为任务网络来训练 S-NET。然后我们利用 S-NET 再次采样 ModleNet40 的大小为 k = 32,这次利用 S-NET。末了,我们在 S-NET 采样的点上训练 PointNet。在测试集上重新训练 PointNet 的准确性进步到 86.0%。利用 S-NET 允许我们在不在更大的点云上进行训练的情况下进步 PointNet 的准确性。
PointNet 类网络的时间复杂度主要由它们的逐点卷积层组成,因此强烈依赖于输入点云的大小。S-NET 的空间复杂度是其输出大小 k 的线性函数。S-NET 在空间(参数数目)和推理时间(浮点运算的数目)之间进行权衡。比方,级联 S-NET 对 1024 到 16 个点的点云进行采样,与在完整点云上运行 PointNet 相比,利用以下 PointNet 将推理时间镌汰了 90% 以上,空间仅增长了 5%。请参阅补充材料中的全部细节。
我们应用匹配后处理步骤将本身与 FPS 直接比较。但是,大概存在 k 个输出点不必是原始点云的子集的设置。在这种情况下,我们可以直接利用 S-NET 生成的点,放弃匹配步骤。可以利用生成的点或采样点。第三种替代方法是在两者之间进行插值的,即利用离原始输入点很远的点。这是通过将每个生成的点与其匹配的采样点进行插值来完成的,以获得它们之间的直线上的第三个点,不超过采样点。**图 6 表现,当输入生成的点时,PointNet 的准确度更高。**对于归一化为单位球体的点云,我们发现选择 푡 = 0.05 会导致分类精度在采样点和生成点的准确度之间呈中央方向。请注意,푡 是在推理时设置的。
临界集采样 Qi等人[1]界说的临界集是导致最大池化特性的点集。我们的方法的一个合理替代方法大概是对贡献最多特性的临界点进行采样。我们实行了这种方法,发现它仅在小采样率下是可行的。请参阅补充材料中的全部细节。
检索
我们如今表明,利用 S-NET 而不是 FPS 可以带来更好的检索结果。具体来说,我们接纳用 PointNet 训练的 SNET 进行分类作为任务网络,而无需重新训练它。我们对点进行采样馈送到PointNet,并利用其倒数第二层作为形状形貌符。检索是基于该形状形貌符上的 L2 距离完成的。我们对 ModelNet40 测试会合的每个形状重复实行,用作查询形状。实行在 S-NET 和 FPS 的不同样本量下重复。表 2 总结了不同采样率和采样方法的平均精度 (mAP)。我们看到 S-NET 在大于 4 的采样率上表现更好,而且对采样率不太敏感。
图 7 表现了原始数据的精度-召回曲线和利用 FPS 和 S-NET 的采样数据,每个形状采样 tok=32 个点。我们在所有召回值上应用 S-NET 时观察到明显更好的精度
重修
我们学习利用自动编码器作为任务网络进行采样。我们利用了Achlioptas等人[17]提供的ShapeNet Core55点云数据及其自动编码器,并在表、汽车、椅子和飞机四个形状类上训练它。这些类有可用的模型。每个形状类都被分成 85%-5%-10% 用于训练验证测试集。自动编码器被训练来吸收和重修2048个点的点云。自编码器的重构毛病由倒角距离[17]测量。为了比较不同的采样方法,我们利用归一化重修毛病 (NRE)。也就是说,我们从点的子集和完整点集重修完整的点集,并取两者之间的重构毛病比。我们用以下样本大小训练了几个 S-NET:k ∈ {16, 32,., 2048},以及具有相同大小损失项的单个 ProgressiveNet。作为另一种采样方法,我们利用 FPS。
归一化重构毛病 图 8 表现了 NRE 作为采样率的函数,此中采样率界说为 n/k = 2048/k。我们将 FPS 与 S-NET 和 ProgressiveNet 进行比较。对于小采样率,我们采样点的NRE类似于FPS。然而,随着采样率的增长,我们的采样方法优于 FPS。比方,在 32 的采样率下,FPS 的 NRE 略大于 2,而 S-NET 和 ProgressiveNet 的 NRE 分别约为 1.5 和 1.75。S-NET 实现了比 ProgressiveNet 更低的 NRE,因为前者针对每个采样率单独优化,从而进步了重修性能。我们学会从看不见的形状中采样点,从而实现更低的重修毛病。
样本和重修可视化 图9比较了整个点云到来自 64 个点的样本量的重修结果,此中样本由 S-NET 或 FPS 产生。利用 S-NET 时的重修质量高于利用 FPS 和利用整个点云的方法。有趣的是,S-NET采样的点分布不匀称,而FPS采样的点的匀称分布更匀称
对抗简化 在这个概念证明中,我们展示了如何欺骗自动编码器。我们将点云简化为视觉上类似于一个类,但由自动编码器重构为来自不同类的形状。我们用一对输入和目的形状训练 S-NET,此中输入是一个类的形状,目的是另一个类的形状。采样损失介于 S-NET 生成的输入和点之间。重修损失在目的形状和重修形状之间。图 10 表现了将飞机变成汽车的结果
顶行:输入形状(蓝色)和 256 个生成点(红色)。底行:从生成的点重修目的形状和重修。固然简化的点云类似于输入飞机形状,但它被重修为完全不同的形状——汽车!
结论
我们提出了一种学习如何对针对下游任务优化的点云进行采样的方法。该方法包罗一个简化网络 S-NET,然后是一个后处理匹配步骤。我们还提出了一个称为 ProgressiveNet 的网络,用于根据每个点对任务的贡献对点云进行排序。在几个任务中,所得到的方法在采样点上优于FPS:点云的分类、检索和重修。
该方法是通用的,可以产生一个小的点云,它由不一定是原始输入形状一部门的点组成。输出点云相对于输入点云最小化多少毛病,同时优化下游任务的目的函数。我们已经表明,学习样本可以改善结果并与各种应用结合利用。
附录
Todo
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |