本文提出了一种新型端到端可训练网络ParSeNet,可以将3D点云分解为参数化表面块,其中包括B样条面片和基本几何基元。它处理的基元类型比以前的工作丰富得多,与纯几何方法相比,它还可以生成重复且鲁棒的参数化表面。
开源代码地址:https://hippogriff.github.io/parsenet
文章地址:https://arxiv.org/pdf/2003.12181.pdf
Introduction
与之前的工作相比,ParSeNet 可以模拟更丰富的表面类别,之前的工作仅处理平面、长方体和圆柱体等基本几何图元。虽然这些图元是连续的和可编辑的表示,但它们缺乏形状设计中广泛使用的样条补丁的丰富性和灵活性。 ParSeNet 包括一个新颖的神经网络 (SplineNet),用于估计点云块的开放或封闭 B 样条模型。它是拟合模块的一部分,该模块也可以拟合其他几何基元类型。拟合模块接收来自分解模块的输入,分解模块将点云划分为片段,之后拟合模块估计每个片段的预测基元类型的形状参数。如图 2 所示,整个流水线是完全可微分的,并且是端到端训练的。可选的几何后处理步骤进一步细化了输出。
Method
本文方法的目标是通过预测一组非常接近其底层表面的参数块来重建输入点云。架构的第一阶段是神经分解模块(图 2),其目标是将输入点云分割成多个区域,每个区域都标有参数块类型。接下来,我们结合了一个拟合模块(图 2)来预测每个补丁的形状参数。最后,一个可选的后处理几何优化步骤细化补丁块以更好地对齐它们的边界以获得无缝表面。
pipeline的输入是一组点
P
=
{
p
i
}
i
=
1
N
\begin{aligned} \text{P}= \{\mathbf{p}_i\}_{i=1}^N \end{aligned}
P={pi}i=1N,表示为 3D 位置
p
i
=
(
x
,
y
,
z
)
\mathbf{p}_i = (x, y, z)
pi=(x,y,z),或表示为 6D 位置 + 法向量
p
i
=
(
x
,
y
,
z
,
n
x
,
n
y
,
n
z
)
\mathbf{p}_i = (x, y, z, n_x, n_y, n_z)
pi=(x,y,z,nx,ny,nz)。输出是一组表面面片
{
s
k
}
\{s_k\}
{sk},重建输入点云。面片的数量是自动确定的。每个面片都标有类型
t
k
t_k
tk,是以下类型其中之一:球体、平面、圆锥体、圆柱体、开/闭 B 样条面片。该架构输出一个定义面片几何参数的实值向量,例如球体的中心和半径,或 B 样条控制点和节点。
Decomposition module
第一个模块(图 2)将点云 P \text{P} P分解为一组片段,这样每个片段都可以通过上述表面基元面片类型之一可靠地近似。为此,该模块首先将输入点嵌入到用于显示此类片段的表示空间中。这种表示是使用度量学习(metric learning)来学习的,这样属于同一块的点彼此靠近嵌入,形成一个不同的集群。
Embedding network
为了学习这些逐点表示,结合了 DGCNN 中的边缘卷积层 (EdgeConv)。每个 EdgeConv 层都执行图卷积,以在其邻域的输入特征上使用 MLP 提取每个点的表示。邻域是通过输入特征空间中的最近邻域动态定义的。堆叠了 3 个 EdgeConv 层,每个层为每个点提取一个 256 维表示。最大池化层还用于提取整个点云的全局 1024 维表示。全局表示被平铺并与来自所有三个 EdgeConv 层的表示连接起来,形成中间的逐点 (1024 + 256)-D 表示
Q
=
{
q
i
}
Q = \{q_i\}
Q={qi}编码局部和全局形状信息。我们发现全局表示对我们的任务很有用,因为它捕获了整体几何形状结构,这通常与预测基元面片的数量和类型相关。然后通过全连接层和 ReLU 对这种表示进行转换,最后归一化为单位长度,形成位于单位超球面上的逐点嵌入
Y
=
{
y
i
}
i
=
1
N
\begin{aligned} \text{Y}= \{\mathbf{y}_i\}_{i=1}^N \end{aligned}
Y={yi}i=1N (128-D)。
Clustering
均值漂移聚类步骤应用于逐点嵌入以发现分段。与其他替代方案(例如,k 均值或混合模型)相比,均值漂移聚类的优势在于它不需要目标聚类数作为输入。由于不同的形状可能包含不同数量的补丁,我们让 mean-shift 生成为每个输入分别输出对应的分段数。我们将均值漂移迭代实现为可微循环函数,从而允许反向传播。具体来说,我们通过将所有点设置为种子
z
i
(
0
)
=
y
i
,
∀
y
i
∈
R
128
\mathbf{z}_i^{(0)}=\mathbf{y}_i,\forall y_i\in R^{128}
zi(0)=yi,∀yi∈R128 来初始化 mean-shift。然后,每轮均值漂移迭代 t 更新每个点在单位超球面上的嵌入:
z
i
(
t
+
1
)
=
∑
j
=
1
N
y
j
g
(
z
i
(
t
)
,
y
j
)
/
(
∑
j
=
1
N
g
(
z
i
(
t
)
,
y
j
)
)
\text{z}_i^{(t+1)}=\sum\limits_{j=1}^N\text{y}_j g(\text{z}_i^{(t)},\text{y}_j)/(\sum\limits_{j=1}^N g(\text{z}_i^{(t)},\text{y}_j))
zi(t+1)=j=1∑Nyjg(zi(t),yj)/(j=1∑Ng(zi(t),yj))
其中,成对相似性
g
(
z
i
(
t
)
,
y
j
)
g(\text{z}_i^{(t)},\text{y}_j)
g(zi(t),yj)基于具有带宽
β
β
β的von Mise-Fisher核:
g
(
z
i
,
y
j
)
=
exp
(
z
i
T
y
j
/
β
2
)
\begin{aligned} g(\mathbf{z}_i,\mathbf{y}_j) =\exp(\mathbf{z}_i^T\mathbf{y}_j/\beta^2) \end{aligned}
g(zi,yj)=exp(ziTyj/β2)(为清楚起见,迭代索引被删除)。在每次迭代之后,将嵌入归一化为单位向量。每个输入点云的带宽被设置为每个点到其在嵌入空间中的第150个邻近点的平均距离。Mean-Shift重复迭代,直到收敛(在我们的数据集中大约发生50次迭代)。我们使用非最大值抑制来提取聚类中心:从密度最高的点开始,删除距离
β
β
β内的所有点,然后重复。根据分段最近的簇中心将点指定给分段。点隶属关系存储在矩阵
W
W
W中,其中
W
[
i
,
k
]
=
1
W[i,k] = 1
W[i,k]=1表示点i属于段k,等于0表示不属于段k。成员关系被传递给拟合模块以确定每段的参数面片。在培训期间,我们使用软成员身份来区分这一步骤。
Segment Classification
为了对每个分段进行分类,我们通过全连接层和ReLU传递编码局部和全局几何的逐点表示 q i q_i qi,然后是针对逐点概率 P ( t i = l ) P(t_i = l) P(ti=l)的Softmax,其中 l l l是面片类型(即,球体、平面、圆锥体、圆柱体、开放/闭合的B样条片)。分段的基元类型通过对其所有点进行多数投票来确定。
Fitting Module
第二个模块(图2)旨在将参数面片拟合到每个预测的点云分段。为此,根据分段类型,该模块估计曲面片的形状参数。
Basic primitives
参照李等人的研究SPFN,我们用最小二乘拟合法估计基本基元的形状。这包括球体的中心和半径;平面的法线和偏移;圆柱体的中心、方向和半径;以及圆锥体的顶点、方向和角度。我们也遵循他们的方法来定义基元边界。
B-Splines
在存在噪声、稀疏和非均匀采样的情况下,将一组点解析地参数化为样条线面片可能容易出错。相反,直接用神经网络预测控制点可以提供稳健的结果。**我们提出了一种神经网络SplineNet,它输入分段的点,输出固定大小的控制点网格。**四个EdgeConv层的堆叠生成与从最大池化层提取的全局表示串联的逐点表示(相对于分解模块,但权重不共享)。这为片段中的每个点
i
i
i配备了1024D表示
φ
i
φ_i
φi。分段的表示是通过对其点进行max-pooling来产生的,如通过先前提取的隶属度矩阵
W
W
W所标识的:
ϕ
k
=
max
i
=
1
…
N
(
W
[
i
,
k
]
⋅
ϕ
i
)
.
\phi_k=\max\limits_{i=1\ldots N}(\mathbf{W}[i,k]\cdot\phi_i).
ϕk=i=1…Nmax(W[i,k]⋅ϕi).
最后,两个带有ReLU的全连接层将
φ
k
φ_k
φk变换为展开为1200-D输出向量的一组初始的20×20控制点
C
C
C。对于具有少量点的线段,我们将输入分段(使用最近邻内插)向上采样到1600个点。这显著提高了此类分段的性能(表2)。对于闭合的B样条曲面片,我们包裹控制点的第一行/列。请注意,用于生成开放和闭合B样条线的网络参数不是共享的。图5显示了一些预测的B样条曲面。
Post-processing module
SplineNet产生一个初始的基元表面,它近似于属于一个分段的点。然而,基元面片可能不会完全覆盖输入点云,并且补丁之间的边界不一定对齐良好。此外,可以进一步调整初始控制点网格(20 × 20)的分辨率,以匹配所需的表面分辨率。作为后处理步骤,我们执行优化以产生更好地覆盖输入点云的b样条曲面,并细化控制点以达到规定的拟合公差。
Optimization
我们首先通过对初始b样条面片的UV参数空间进行均匀采样,在其上创建一个40 × 40个点的网格。我们把它们镶嵌成四边形。然后,我们使用具有L2距离代价的匈牙利算法,在四边形顶点和线段的输入点之间执行最大匹配。然后,我们针对匹配的输入点对细分曲面进行尽可能刚性(ARAP)变形。ARAP是一种迭代的、保留细节的方法,用于变形网格,使选定的顶点(枢轴)达到目标位置,同时促进单环邻域中的局部刚性变换(而不是任意的导致剪切/拉伸的变换)。我们使用patch的边界顶点作为枢轴,以便它们靠近匹配的输入点。因此,我们提高了b样条补丁对输入点的覆盖。变形后,用最小二乘重新估计控制点。
Refinement of B-spline control points
在上述优化之后,我们再次执行四边形顶点与线段输入点之间的最大匹配。因此,输入段点在patch的UV参数空间中获得2D参数值,该参数值可用于重新拟合任何其他控制点的网格。在我们的例子中,我们迭代地将控制点网格上采样2倍,直到通过倒角距离测量的拟合公差达到。如果初始控制点网格满足公差,我们可以迭代地对其进行下采样。在我们的实验中,我们将拟合公差设置为5 × 10−4。在图5中,我们展示了后处理步骤的改进。
Training
为了训练我们架构的神经分解和拟合模块,我们使用了来自3D形状数据集的监督信号,这些数据集通过基本几何基元和b样条的组合建模。
Dataset
ABC数据集提供了机械对象的3D CAD模型的大量来源,其文件格式存储了设计者用来创建它们的曲面片和建模操作。由于我们的方法侧重于预测曲面片,特别是B样条片,所以我们从该数据集中选择包含至少一个B样条片的模型。结果,我们最终得到了一个包含32K模型的数据集(分别为24K、4K、4K训练、测试、验证集)。我们称其为ABCPartsDataset。所有形状都以原点为中心,并进行缩放,以使它们位于单位立方体内。为了训练SplineNet,我们还从ABC数据集中提取了32K闭合和开放的B-Spline曲面片,并将它们分别分割为24K、4K、4K训练集、测试集和验证集。我们称其为SplineDataset。
Preprocessing
基于ABCPartsDataset中提供的元数据,可以基于其包含的表面片和基元的集合来呈现每个形状(图4)。由于我们假设体系结构的输入是点云,因此我们首先在形状表面上随机分布10K个点对每个形状进行采样。我们还沿法向在均匀范围内添加噪波[−0.01,0.01]。法线也会受到原始方向[−3,3]度均匀范围内的随机噪波的干扰。
Loss functions
Embedding loss
为了发现与表面片很好对应的点的簇,我们使用度量学习方法。学习由我们的分解模块在Mean-Shift聚类后产生的逐点表示Z,以使得源自同一曲面面片的点对彼此嵌入得更接近以利于簇的形成。相反,源自不同曲面片的点对相互推开。给定一个三元组的点(a,b,c),我们使用三元组损失来学习嵌入:其中τ将边距设置为0.9.。给定从我们的数据集D的每个点集S采样的三元组
T
S
\mathcal{T}_\mathcal{S}
TS,嵌入目标对三元组上的损失求和:
L
e
m
b
=
∑
S
∈
D
1
∣
T
S
∣
∑
(
a
,
b
,
c
)
∈
T
S
ℓ
e
m
b
(
a
,
b
,
c
)
.
L_{emb}=\sum\limits_{\mathcal{S}\in\mathcal{D}}\dfrac{1}{|\mathcal{TS}|}\sum\limits_{(a,b,c)\in\mathcal{T}_\mathcal{S}}\ell_{emb}(a,b,c).
Lemb=S∈D∑∣TS∣1(a,b,c)∈TS∑ℓemb(a,b,c).
Segment classification loss
为了根据我们支持的类型促进正确的细分分类,我们使用交叉熵损失: L c l a s s = − ∑ i ∈ S log ( p i t ) L_{class} = -\sum_{i\in\mathcal{S}}\log(p_i^t) Lclass=−∑i∈Slog(pit)。其中 p i t p_i^t pit 是形状 S 的第 i 个点属于其地面真实类型 t 的概率,由我们的分段分类网络计算得出。
Control point regression loss
该损失函数用于训练SplineNet。SplineNet为每个B样条片生成20×20个控制点。我们包括用于该控制点网格预测的监控信号。一个问题是,在我们的数据集中,B-Spline面片的控制点数量是可变的。因此,我们通过首先对M=3600个点进行采样并使用最小二乘法估计新的20×20重建参数来对每个面片进行重新参数化,如图3所示。在我们的实验中,我们发现这种标准化在我们的数据集中的曲面重建中不会产生实际损失。最后,我们的重建损失应该是不随控制点网格在u和v方向上的翻转或交换而变化的。因此,我们定义了这样一种排列不变的损耗:
L
c
p
=
∑
S
∈
D
1
∣
S
(
b
)
∣
∑
s
k
∈
S
(
b
)
1
∣
C
k
∣
min
π
∈
H
∣
∣
C
k
−
π
(
C
^
k
)
∣
∣
2
L_{cp}=\sum_{\mathcal{S}\in\mathcal{D}}\dfrac{1}{|\mathcal{S}^{(b)}|}\sum_{s_k\in\mathcal{S}^{(b)}}\dfrac{1}{|\mathbf{C}_k|}\min\limits_{\pi\in H}||\mathbf{C}_k-\pi(\hat{\mathbf{C}}_k)||^2
Lcp=∑S∈D∣S(b)∣1∑sk∈S(b)∣Ck∣1π∈Hmin∣∣Ck−π(C^k)∣∣2
其中
S
(
b
)
{S}^{(b)}
S(b)是形状S的B样条曲面片的集合,
C
k
\mathbf{C}_k
Ck是曲面片的预测控制点网格
s
k
s_k
sk(|
C
k
\mathbf{C}_k
Ck|=400个控制点),
π
(
C
^
k
)
\pi(\hat{\mathbf{C}}_k)
π(C^k)是来自集合
Π
\varPi
Π的地面真实控制点的排列,其中8个排列用于开B-Spline,160个排列用于闭合B-Spline。
Laplacian loss
这种损失也是使用SplineNet的B样条线所特有的。对于每个地面真实B样条片,我们均匀地采样地面真实曲面,并测量捕捉其二阶导数的拉普拉斯曲面。我们还对预测的面片进行均匀采样,并测量其拉普拉斯系数。然后,我们在地面真实点和预测斑块中的采样点之间建立匈牙利匹配,并比较地面真实点
r
^
m
\hat{r}_m
r^m和对应的预测点
r
n
r_n
rn的拉普拉斯函数,以改进它们之间的导数之间的一致性如下:
L
l
a
p
=
∑
S
∈
D
1
∣
S
(
b
)
∣
⋅
M
∑
s
k
∈
S
(
b
)
∑
r
n
∈
s
k
∥
L
(
r
n
)
−
L
(
r
^
m
)
∥
2
L_{lap}=\sum_{\mathcal{S}\in\mathcal{D}}\dfrac{1}{|\mathcal{S}^{(b)}|\cdot M}\sum_{s_k\in\mathcal{S}^{(b)}}\sum_{\mathbf{r}_n\in s_k}\|\mathcal{L}(\mathbf{r}_n)-\mathcal{L}(\hat{\mathbf{r}}_m)\|^2
Llap=∑S∈D∣S(b)∣⋅M1∑sk∈S(b)∑rn∈sk∥L(rn)−L(r^m)∥2
其中
L
(
⋅
)
\mathcal{L}(·)
L(⋅)是曲面点上的拉普拉斯算子,M=1600点样本。
Patch distance loss
此损失适用于基本基元和B样条线面片。损失度量预测的基元面片
S
k
S_k
Sk与地面真实面片的均匀采样点之间的平均距离为:
L
d
i
s
t
=
∑
S
∈
D
1
K
S
∑
k
=
1
K
S
1
M
s
k
^
∑
n
∈
s
k
^
D
2
(
r
n
,
s
k
)
L_{dist}=\sum_{\mathcal{S}\in\mathcal{D}}\dfrac{1}{K_\mathcal{S}}\sum_{k=1}^{K_S}\dfrac{1}{M_{\hat{\mathbf{s}_k}}}\sum_{n\in\hat{\mathbf{s}_k}}D^2(\mathbf{r}_n,\mathbf{s}_k)
Ldist=∑S∈DKS1∑k=1KSMsk^1∑n∈sk^D2(rn,sk)
其中
K
S
K_\mathcal{S}
KS 是形状 S 的预测块数,
M
s
k
^
M_{\hat{\mathbf{s}_k}}
Msk^ 是地面块
s
^
k
\hat{s}_k
s^k 的采样点
r
n
r_n
rn的数量,
D
2
(
r
n
,
s
k
)
D^2(\mathbf{r}_n,\mathbf{s}_k)
D2(rn,sk) 是从
r
n
r_n
rn 到预测的基元块表面
s
k
s_k
sk 的平方距离。这些距离可以针对基本图元进行分析计算。对于 B 样条,我们使用基于采样点之间的倒角距离的近似值。
Training procedure
根据我们的实验,将训练过程分解为以下步骤会导致更快的收敛和更好的最小值:
- 我们首先使用 ABCPartsDataset 对分解模块的网络进行预训练,其中嵌入和分类损失的总和为: L e m b + L c l a s s L_{emb} + L_{class} Lemb+Lclass。这两种损失都是点云分解和分类所必需的。
- 然后,我们使用 SplineDataset 预训练 SplineNet,以使用 L c p + L l a p + L d i s t L_{cp} + L_{lap}+ L_{dist} Lcp+Llap+Ldist 专门在 B 样条块上进行控制点预测。
- 然后,我们使用所有损失端到端地联合训练分解和拟合模块。为了允许从基元和 B 样条拟合到嵌入网络的反向传播,均值漂移聚类被实现为循环模块。为了提高效率,我们在训练期间使用了 5 次均值漂移迭代。
Experiments
实验在三个部分将我们的方法与替代方法进行了比较:
(a) 分割和分割分类质量的评估
(b) B 样条补丁拟合的评估,因为它是我们工作的主要贡献
(c ) 整体重建质量的评估。