基于深度学习方法的三维模型相似度计算
2020-10-26华顺刚李春泽
华顺刚,李春泽
(大连理工大学机械工程学院,辽宁大连 116024)
0 引言
作为数字化制造技术的基础,三维模型是重要的设计资源。研究和统计分析表明,通过重用三维模型,可有效降低产品的设计成本,加速产品再创新[1]。实现资源重用的三维模型检索技术成为了计算机视觉、计算机图形学领域的研究热点[2]。其中,三维模型的识别与相似性比较是研究重点。目前主流的基于深度学习的三维模型识别方法主要有基于体素化、基于多视角及基于点云这3类方法。
(1)基于体素化(Volumetric)法。基于体素化法通过将三维模型表征为空间中的体素,然后对体素化模型进行三维卷积处理来识别模型[3]。体素化特征处理手段需要将三维模型变换成一个个小的三维特征块,若分隔成较大的三维特征块,则计算耗时短,但特征表达精度不足。若分割成较小三维特征块,虽然特征表达精度可以满足需求,但是后期处理的计算复杂度较高。因此这种处理手段存在难以平横计算复杂度与精度的问题,在实际应用中受限。
(2)基于多视角(Multi-View)法。多视角法使用对三维模型的多视角采样获得的二维图片来表征三维物体,此方法将传统CNN(卷积神经网络)应用于多张二维视角的图片来表征三维模型[4]。这种方法相比于体素化方法,可以降低计算复杂度,提高识别效率。然而该方法受制于视角数量,无法感知三维模型的内部信息,因此对于特定形状的三维模型识别精度较差。
(3)基于点云(Point Clouds)法。通过在三维模型的表面采样出三维点云,然后用深度学习网络来识别三维模型,这种基于点云采样方式的采样复杂度相比于体素化方法的计算复杂度较低,而又不受多视角方法的视角数量限制,同时可以感知到模型的内侧表面信息,在深度神经网络建模中,可以直接将三维点云输入网络进行建模识别,而无需进行特征预处理,因此成为了一种理想的三维模型的识别方法。其中PointNet[5]是相关工作的先驱,它直接处理三维点云数据,利用三维变换和特征转换实现了点云数据的识别,PointNet++[6]是PointNet 的改进版本,它将点云划分局部来识别。PointCNN[7]提出了直接在三维点云数据上进行卷积操作,PointConv[8]可以高效地对非均匀采样的3D 点云数据进行卷积操作,该方法在多个数据集上实现了优秀的性能。因深度学习方法的可适应能力高,可以处理复杂的三维模型的点云,成为了目前的相关研究热点。
本文将构建多种基于深度学习技术的点云模型识别方法,对各种方法进行优劣分析,并将这些方法应用于三维模型的识别中。同时将深度神经网络中的抽象特征用于模型相似度计算中。本文的研究技术路线如图1所示。
图1 研究路线
首先在三维模型的表面采样出三维点云,然后利用有标签的三维点云数据训练一个深度神经网络模型,将网络参数保存起来,再用训练好的网络来对新的三维点云模型进行识别,同时可利用网络提取的的特征来计算两个模型的形状相似度。使用QT和C++语言编程实现了三维模型识别与模型相似度计算来验证模型的应用可行性。该工具在输入未知三维模型时可以识别模型的分类;输入不同的三维模型时,则可以计算出它们的形状相似度。
1 点云深度学习网络
1.1 PointNet网络
PointNet 是一个点云深度学习识别网络,它采用了两次STN(空间变换),第一次是对空间中点云进行调整,直观上理解是旋转出一个更有利于分类或分割的角度,比如把物体转到正面;第二次是对提取出的64维特征进行对齐,即在特征层面对点云进行变换,然后采用MaxPooling(最大化池化)解决点云数据的无序性问题。网络对每个点进行了一定程度的特征提取之后,MaxPooling 可以对点云的整体提取出全局特征。
1.2 PointNet++网络
PointNet++是基于PoinNet 的改进版本,核心就是提出了多层次特征提取结构。具体来说就是先在输入点集中选择一些点作为中心点,然后围绕每个中心点选择周围的点组成一个区域,之后每个区域作为PointNet的一个输入样本,得到一组特征,这个特征就是这个区域的特征。之后中心点不变,扩大区域,把上一步得到的那些特征作为输入送入PointNet,以此类推。这个过程就是不断的提取局部特征,然后扩大局部范围,最后得到一组全局的特征,然后进行分类PointNet++还采用多尺度的方法解决样本不均匀的问题,在样本稀疏时模型更有鲁棒性。
1.3 PointCNN网络
PointCNN 提出了一种称为X-变换的方法(X-Conv)。X-变换从输入点学习到的一组权值X,这组权值可以对各点相关联的特征进行重新加权和重排列。X-变换可以实现“随机应变”,即当输入点的顺序变化时,X-变换能够相应地变化,使加权和重排列之后的特征近似不变。输入特征在经过X-变换的处理之后能够实现计算结果与输入点顺序无关,同时也编码了输入点形状信息的归一化特征。在经过X-变换之后的特征上进行卷积能够极大提高卷积核的利用率,从而大大提高卷积操作在无序数据上提取特征的能力。
1.4 PointConv网络
PointConv 可以在点云上构建深度卷积网络。它将卷积核看作3D点局部坐标的非线性函数,该函数由权重和概率密度函数组成。对于给定点,利用多层感知器学习权重函数,通过高斯核密度估计学习该概率密度函数。为了高效地计算权重函数,它提出了一种新型计算方法,使网络规模显著扩大,性能显著提高。学习到的卷积核可用于计算3D空间中任何点集上的平移不变卷积和置换不变卷积。
2 三维模型识别
根据本文的研究路线(图1),进行三维模型识别主要分为以下几个步骤:点云扫描采样,构建神经网络,调用网络识别模型。
2.1 点云扫描采样
点云扫描采样是指对三维模型的表面进行采样,三维模型由网格构成,所含有的点数量不多,尤其在三维模型存在平面或者是简单立方体的情况下点的数量更少。所以需要利用PCL[9](Point Cloud Library)库的Pcl_mesh_sampling 来提取更多点,因此本文先调用VTK[10](Visualization ToolKit)读取模型,设置需要的点数,以及采样距离等参数,然后在三维模型表面采样出固定点数的三维点生成点云。扫描采样结果如图2所示。
图2 点云采样
2.2 构建神经网络
本文的软件环境主要基于TensorFlow[11]平台和Python 语言,硬件环境配置为Quad-Core Intel Core i7+16g,训练集采用普林斯顿大学Modelnet40[12],它包含约40 个对象类别(如飞机、汽车、家具等),用三角形网格表示的12 311个三维模型。每个模型采样出2 048个点,数据为训练集和测试集,训练集有9 843 个模型,测试集有2 468 个模型。硬件环境配置为GTX1060+Intel 酷睿i5 8400+16g,内存软件配置为Win10+TensorFlow1.10+Python3.7+CUDA9.0+cuDNN7.3,用时9 h训练完成,训练集准确度达到了97%左右,测试集准确度为85.3%左右。用TensorFlow平台和Python编程语言搭建了PointNet++神经网络,软件配置Ubuntu16.0+TensorFlow1.14+Python3.5+CUDA9.0+cuDNN7.3,训练集采用普林斯顿大学Modelnet40,迭代了8k次后,在测试集上准确率达到87.2%。用TensorFlow和Python语言搭建了PointCNN网络,训练集采用普林斯顿大学Modelnet40,软件环境为MacOS+TensorFlow1.13+Python3.7,迭代26k次后。在测试数据集上的准确率达到了91.1%,在Py-Torch[13]平台用Python语言搭建了PointConv网络,软件配置为MacOS+PyTorch+Python3.7,训练集采用普林斯顿大学Modelnet40,迭代12k次后。在测试数据集上的准确度达到了92.1%。
2.3 对比分析
基于以上设置,对上述方法的准确率、参数量、迭代次数进行了对比。其中PointConv的识别准确率最高,但参数量较大,PointCNN的参数量最小,也能较快的收敛。PointNet的参数量最多,收敛也较慢。PoinNet++的收敛速度最快但是准确率一般。表1所示为各种点云识别模型的性能对比。
表1 基于深度学习的点云识别模型对比
2.4 识别三维模型
本文使用QT[14]和C++语言编程实现了三维模型识别工具,它先将三维模型采样出固定点数的点云,然后输入到训练好的深度学习网络中,得到该三维模型的预测分类。该工具在输入未知三维模型时可以自动识别模型的分类,当输入两个三维模型时可以计算出它们的形状相似度。如图3所示为软件界面及识别的实例,可见软件成功识别了2个杯子模型并计算出了它们的相似度。
图3 三维模型的识别
3 特征提取及相似度计算
3.1 特征提取
模型的特征是一组可以表征三维模型的形状特点的信息,从训练好的网络中可以提取出三维模型的特征,然后基于提取的特征计算两个模型的相似度。分别运用训练好的PointNet、PointNet++、PointCNN、PointConv 网络提取三维模型的特征。本文先将点云输入到已经训练完成的深度神经网络中,提取出深度神经网络的抽象特征层(输入到分类器之前的一层)。因网络结构不同,本文从PointNet 和PointNet++及PointConv提取了1 024维的数据,PointCNN提取了256维数据,每一维数据的范围在0~1之间,因为这些特征具有识别能力的网络的输出特征,所以这些抽象出的特征信息表征了三维模型的形状特点。为了验证特征的相似性,本文使用TensorBoard 的t-SNE 将提取出的高维度的特征向量投影到二维空间,图4所示为Modelnet40测试集输入PointNet网络后特征的投影图,可见同一类型的三维模型投影在二维平面内的距离也是相近的。
图4 PointNet中高维特征的t-SNE低维投影
3.2 相似度计算
相似度是衡量两个三维模型结构形状相似程度的一个值,通常用百分数来表示,利用提取出的抽象特征可以计算三维模型的相似度。特征的相似性度量方法主要有皮尔逊相关系数、欧式距离和余弦相似度等,一个好的三维模型相似性度量方法就是应该和人的视觉观察一致。经试验其中皮尔逊相关系数效果最好,它是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关),它的计算公式如下:
式中:E(X)、E(Y)为变量的期望;D(X)、D(Y)为变量的方差。
使用该公式计算出两个模型提取出的特征的相关系数,用来表征模型的形状相似度。用一个被检索模型(杯子)分别与其他模型计算相似度,图5所示为基于各种网络提取的特征用皮尔逊相关性计算相似度的结果,图片下方为皮尔逊相关系数。由图可知,形状相似的模型计算出形似度也相应较高。证明基于深度学习提取特征的方法计算的相似度与实际情况具有较高的吻合度,有一定的应用价值。
图5 采用不同神经网络的相似度计算结果比较
4 结束语
本文分析了多种目前最先进的点云数据的深度学习识别技术,并将其应用于三维模型的识别中。同时提出可利用深度神经网络的抽象特征来进行模型的相似性计算。经过仿真实验证明深度学习方法可以用于三维模型的建模识别中,且这种识别方法可以感知三维模型的内部信息。同时,将深度神经网络的输出特征作为三维模型的形状特征,应用到三维模型检索的相似度计算中来,弥补了一些底层特征与上层语义之间的鸿沟,可以有效地计算模型的相似度,在三维模型的检索中具有一定的应用价值。