核心思想
本文提出一种基于深度学习的CAD模型实例配准方法。作者发现在复杂的CAD工程中(如建筑图纸),通常包含成千上万个部件,为了储存这些模型信息,通常要占据非常大的储存空间。但是其中很多的部件其结构的都是重复或者相似的,因此作者就希望将其中重复或相似的模型提取出来,并将其分类为基础的几何形状(圆柱,箱形,半球形,圆锥和圆环等)。通过仿射变换矩阵来记录每个模型实例和对应的基础几何形状之间的变换关系,最终每个部件实例都可以通过一个基础几何形状和一个仿射变换矩阵来表示,这样就大大减少了CAD工程储存的信息量。在这个过程中需要解决一个问题,就是如何准确的计算出一个部件实例与基础几何形状之间的仿射变换矩阵(包含旋转、平移和放缩),即解决一个CAD模型之间的配准(Registration)问题。
实现过程
首先,输入一个CAD模型对应的三角网格图(这是CAD模型常用的表示方式,可以利用CAD模型的STL文件获取),对其进行归一化处理。通过将每个顶点的坐标都减去整个网格坐标的算术平均值,将模型的重心平移至坐标原点。根据顶点坐标协方差矩阵的特征向量,利用PCA(主成分分析)的方式获得一组正交基。然后通过给每个顶点都进行一个逆旋转变换
M
e
v
−
1
M^{-1}_{ev}
Mev−1(该旋转矩阵是由前文获得的正交基定义的),将模型与坐标系的X,Y,Z轴对齐。简单来说,就是根据协方差矩阵的特征向量找到了模型的三个主方向,并通过旋转矩阵,将模型的主方向和坐标系的坐标轴对齐。最后,将模型顶点的坐标都归一化到
[
−
0.5
,
0.5
]
[-0.5,0.5]
[−0.5,0.5]之间,对于每个轴的坐标都是单独进行归一化处理的,因此各个轴的放缩变化是不均匀的,比如一个细长条的圆柱经过归一化处理后会变成一个矮胖的圆柱。归一化处理的主要目的是让模型更接近基础基础几何形状,以便更容易分类。
经过归一化处理后,要从归一化的模型(三角网格图)中均匀采样得到一个稠密的点云,每个随机点属于某个三角形的概率与三角形的面积成正比,简单地说就是某个三角网格的面积越大,其获得随机点的概率越大,最终得到的随机点也就越多。而每个点在三角形内的位置,是根据两个新生成的随机数
r
1
,
r
2
∈
[
0
,
1
]
r_1,r_2\in[0,1]
r1,r2∈[0,1]和三角形的顶点坐标
(
a
,
b
,
c
)
(a,b,c)
(a,b,c)计算得到的:
得到模型的点云后,本文利用PointNet++深度神经网络算法对模型的点云进行分类。PointNet++算法先将点云划分成多个重叠的局部区域,每个区域都用欧氏空间中的一个球形邻域定义。然后利用PointNet算法提取每个局部区域的特征信息,局部特征聚合起来构成更高级的特征,这个过程不断重复,直到所有的点云特征都被捕捉到。最后利用一个全连接层输出类别预测结果,本文选择得分最高的预测结果。
经过分类预测后,每个模型实例都被分类为一个基础的几何形状,接下来则是计算模型实例和基础几何形状之间的仿射变换矩阵。我们称基础几何形状为参考网格
S
\mathcal{S}
S,经归一化处理的模型实例为目标网格
T
\mathcal{T}
T,二者之间的仿射变换矩阵为
M
M
M,
Q
Q
Q是从目标网格
T
\mathcal{T}
T中采样得到的点云。通过对
M
M
M进行迭代优化,使得目标网格
T
\mathcal{T}
T和变换后的参考网格
S
∗
M
\mathcal{S}*M
S∗M之间的表面误差
E
s
E_s
Es不断变小,表面误差
E
s
E_s
Es的计算方法如下:
其中
N
Q
N_Q
NQ表示点云
Q
Q
Q中点的数量。如果误差
E
s
E_s
Es小于或等于阈值
α
1
\alpha_1
α1,则矩阵
M
M
M即为优化结果,否则就要继续进行优化迭代,迭代过程包含内外两个循环。首先分别从目标网格
T
\mathcal{T}
T和变换后的参考网格
S
∗
M
\mathcal{S}*M
S∗M中均匀采样得到两个点云
P
T
P_{T}
PT和
P
S
P_S
PS,并将
P
S
P_S
PS乘以逆变换
M
−
1
M^{-1}
M−1来方便后续迭代计算。然后进入内循环,内循环主要是计算两个点云
P
T
P_{T}
PT和
P
S
P_S
PS之间的相似性,并根据二者之间的Chamfer距离(CD)采用Adam算法对矩阵
M
M
M进行更新:
X
X
X表示目标点云
P
T
P_T
PT,
Y
Y
Y表示变换过后的参考点云
P
S
∗
M
P_S * M
PS∗M。如果迭代
K
/
2
K/2
K/2次(
K
K
K表示内循环的最大迭代次数)之后,CD值没有降低则提前终止内循环,以避免计算时间过久。内循环结束后,增加点云的采样数量
N
p
N_p
Np,进入下一次的外循环。内循环流程图如下
外循环则是根据内循环输出的矩阵
M
M
M计算表面误差
E
s
E_s
Es,并判断其是否小于等于阈值
α
1
\alpha_1
α1,如果循环迭代次数超过
i
i
i次,还没满足阈值条件则认为该模型实例不是重复的模型,而是一个独有的几何形状,不能用基础几何模型来表示。这一条件的限制避免了将误差较大的模型引入到最终CAD模型中。外循环流程如下:
实验过程中发现,优化容易陷入局部最小值,为了解决这个问题,本文利用点云
P
S
P_S
PS和
P
T
P_T
PT的正交基描述的结合旋转(combined rotations)来对
M
M
M进行初始化,计算方式如下:
B
S
B_{\mathcal{S}}
BS表示点云
P
S
P_S
PS用PCA方法提取的正交基,
B
T
B_{\mathcal{T}}
BT表示点云
P
T
P_T
PT用PCA方法提取的正交基。整个优化流程如下:
创新点
- 利用PointNet++算法对均匀采样的点云进行分类,得到CAD模型所属的基础几何形状类别
- 结合Adam算法和PCA算法,通过最小化表面误差,对仿射变换矩阵 M M M进行迭代优化,得到最优结果
算法评价
本文主要是利用了模型的点云信息对CAD模型进行分类和配准,点云信息相较于三角网格或者顶点其表现模型特征的细粒度更高,并且没有顺序的约束,即使是不同方法绘制的同一个3D模型,其生成的点云信息也是一致的。由于点云的生成是带有随机性的,所以点和点之间并不是绝对匹配的。通过迭代优化计算变换矩阵的方法是值得借鉴的。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。