给定一个点集 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 个采样点。
实行