Learning to sample
- 前沿
- 引言
- 方法
- 问题声明
- S-NET
- 匹配
- ProgressiveNet: sampling as ordering
- 实验
- 分类
- 检索
- 重建
- 结论
- 附录
前沿
这是一篇比较经典的基于深度学习的点云下采样方法
核心创新点:
- 首次提出了一种学习驱动的、任务特定的点云采样方法
- 引入了两种采样网络:
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