高 工,杨红雨,2,刘 洪,2*
(1.视觉合成图形图像技术国防重点实验室(四川大学),成都 610064;2.四川大学计算机学院,成都 610065)
(*通信作者电子邮箱g18438613630@126.com)
近年来,人工智能和计算机视觉高速发展,人脸识别凭借其高效性、便捷性、实用性,成为了目前最流行的生物安全验证手段,在金融支付、视频监控、考勤等领域的相关应用越来越广泛。虽然基于二维图像人脸识别有很高的识别率,但二维图像是三维物体在平面上的投影,三维物体投影到平面会丧失一部分信息,并且二维图像人脸识别容易受到光照、姿态、表情的影响,因此使用三维人脸数据进行识别更有优势。
传统的基于点云的三维人脸识别首先使用鼻尖点检测算法找到三维人脸的鼻尖点,根据鼻尖截取一定范围内的人脸区域,然后手工设计面部特征提取特征,比如脸型、鼻子、眼睛等,然后利用特征相似性度量进行识别[1]。Drira 等[2]把径向线引入三维人脸,以鼻尖点为起点构建径向线来表示人脸表面,使用径向线的弹性形状进行分析人脸表面的形状,通过弹性黎曼度量标准测量面部形状的差异实现人脸识别。在此基础上,Lei 等[3]设计出角径向特征(Angular Radial Signature,ARS),针对人脸多表情的问题,仅提取上半部分脸的特征,然后使用核主成分分析(Kernel Principal Component Analysis,KPCA)方法将ARS 映射到更具区分度空间,最后使用支持向量机(Support Vector Machine,SVM)进行人脸识别。Russ等[4]针对三维人脸对齐中存在的最大数量压缩以及未训练人脸的良好泛化性能,提出了一种基于主成分分析(Principal Component Analysis,PCA)的三维人脸识别方法。这种方法将三维面注册到一个通用的三维参考面上,然后执行一个曲面法向搜索算法实现面部点的对应,在FRGC v1 数据集可以达到98.5%的识别率。Xu 等[5]使用局部形状变化信息和全局的集合特征进行三维人脸识别。首先,将三维点云转换为网格,然后使用网格的每个顶点的z坐标构建几何向量,在人脸的某些区域(嘴、鼻子、左眼和右眼)提取形状特征。随着深度学习在二维人脸识别取得飞速发展,研究人员进一步使用深度学习框架实现三维人脸识别。Gilani 等[6]将有限的三维人脸扫描数据通过旋转进行数据集扩增,将每个三维人脸点云转换成深度图,以深度值、法向量的方向角、仰角三通道作为网络输入,训练出卷积神经网络(Convolutional Neural Network,CNN)提取特征进行人脸识别,在FRGC v2数据库上识别正确率为97.1%,在Bosphorus 数据库上为96.2%。Jiang等[7]针对训练数据不均衡的问题提出了一种属性感知的损失函数,将三维点云的x、y、z坐标组成三通道图输入残差网络(Residual Network,ResNet)进行人脸识别,在FRGC v2 数据库上获得98.5%的准确度。
三维人脸点云数据是由其三个坐标(x,y,z)表示的一组数据点空间,有时还包括颜色信息(R、G、B)和纹理信息。最有代表性的获取点云数据的方法是光探测和测距数据,它通过在靶区照射脉冲激光并通过激光返回到传感器的时间差计算出距离来进行点云采集[8]。点云数据主要有三个特性:稀疏性、无序性和刚体变换不变性[9]。2017年,Qi等[10]使用深度学习方法结合三维点云提出了PointNet 网络,解决了点云的无序性。PointNet的分类网络只提取了全局特征,缺失了局部特征提取。同年,Qi等[11]在PointNet基础上提出了PointNet++,使用了采样、分组、PointNet 模块,增加了全局特征提取,分类精度得到了提升。2019 年,Liu 等[12]将经典的2D CNN 拓展到3D点云关系卷积中提出了关系型卷积神经网络(Relation-Shape CNN,RS-CNN),实现了置换不变性并在分类任务中精度最高。
三维人脸点云与物体和场景点云不同,由于表情变化和姿态变化,三维人脸点云在采集时会导致数据缺失,本文针对这一问题使用了跳跃连接增强点云缺失时的鲁棒性。本文使用ResPoint 网络中特征提取方法,增强了三维人脸点云特征提取能力,使用ArcFace 损失函数扩大了不同三维人脸之间的差异性,提高了人脸识别的正确率。本文使用不同的网络进行训练,对比并分析不同网络在分类任务中的特征提取能力并验证识别准确性。
为了降低头发、肩部等冗余信息的影响,需要从获取的三维点云数据中切割出有效面部区域。由于人脸面部起伏产生的遮挡、局部区域反射率较大等影响,会导致切割后的数据可能包含孔洞、离群点等问题,对识别效果产生负面影响,因此需要进行人脸切割、高斯滤波和孔洞补全,获取较为准确的面部数据。
本文采用了CASIA 人脸数据集(http://www.cbsr.ia.ac.cn/english/3DFace Databases.asp)进行实验,对CASIA 数据库的点云做了鼻尖点检测,对鼻尖点周围R=90 mm 范围内的人脸切割,对切割后的人脸进行滤波处理和孔洞补全。本文对切割后的点云进行高斯滤波和孔洞补全,在一定程度上消除了随机噪声和结构噪声的影响。
由于基于z最大值的鼻尖点检测算法对于姿态敏感,不能很好地切割侧脸等问题,本文采用了对姿态鲁棒的鼻尖点快速定位算法。在局部基准坐标下计算顶点的平面距离能量,先计算出鼻尖置信点,并对置信点进一步筛选,最终得到鼻尖点;然后再以鼻尖点为球心,在R=90 mm的范围内切割出有效面部区域。如图1(a)是采集到的原始点云信息,图1(b)是点云数据,图1(c)是切割后的人脸区域。
高斯滤波使用采样点及其邻域点位置加权平均进行三维点云平滑实现降噪[13],适用于散乱点云去噪,能够保持原始点云的原貌。
点云数据噪声和孔洞对特征提取有重大影响。以R=90 mm 切割的点云数据具有噪声和孔洞,进行高斯滤波处理后,点云数量在5 200~7 300。对每个点的邻域进行统计分析,计算出输入数据点到邻近点的距离分布,假设距离分布是高斯分布,其形状是由均值和标准差决定,平均距离在标准范围之外的点可以被定义为离群点,进行剔除[14]。使用高斯统计去除离群点的算法思想如下:
切割后的人脸点云数据可以表示为P={pi(xi,yi,zi)|i=1,2,…,n},对其建立KD-tree 搜索树后,KNN(p)是p点的k邻域点集,pij(xij,yij,zij)∈KNN(pi)为点pi的邻域点,其中j=1,2,…,k。
定义di为某一已知点pi到其k个邻域点的平均距离为di的平均值,σ为di的标准差。
灵感的捕捉是一个优秀产品诞生的大前提,在小型代步工具设计的初期,基于绿色理念的设计构想,然后出现的一些想法不断地消失又重组。此次的设计点就是“环境污染最小化”以这点作为设计的出发点,随即而来的展开“回收利用最大化,拆卸重组完全化,材质选择零污化”等等的几个方面。
对每个点进行邻域分析,假设di服从高斯分布,即),那么根据高斯函数曲线的特点,设置阈值ε(为表示标准差倍数的阈值):对于原始点云中的某一点,当时,将这点看作离群点从点云数据中剔除,其中ε为预设定的去噪参数。当ε=1 时,理论上可滤除的点数量为原始点云的31.73%。如图2 所示,图2(c)是三维立方插值到26 000个点。
图2 点云滤波和三维立方插值Fig.2 Point cloud filtering and 3D cubic interpolation
ResPoint 网络结构如图3 所示,受PointNet++网络的启发,本文采用了4 个特征提取模块,每个模块都使用了局部特征提取模块(ResConv)。PointNet 网络直接从不规则点云学习,实现点的置换不变性;但PointNet 只学习了全局特征,忽略了局部特征的提取。PointNet++将点云分组,并通过PointNet 对其进行学习,这种设计符合提取高级语义特征的CNN 模式。PointNet++由三个局部特征提取模块组成,每个模块内包含3 个多层感知机(Multi-Layer Perceptron,MLP)层和1 个pooling 层,一共9 个MLP 层用于特征提取。PointNet++局部特征提取时使用MLP,有以下两个缺点:其卷积核为1,感受野过小,点云信息少,获得的特征不好;每层只用一种尺寸的卷积核,不能获得不同尺度的特征。RS-CNN从集合拓扑中学习点云关系信息实现分类任务,只使用了全局特征,没有不同尺度特征。ResPoint 网络在局部信息提取时使用ResConv,使用了(3,1)和(1,1)两种不同尺度的卷积核,还增加了跳跃连接(skip connection),提取不同尺度的特征进行融合,既增加了感受野,又融合不同尺度的特征,获得较好的分类效果。
图3 ResPoint网络结构Fig.3 ResPoint network structure
ResPoint 网络中用不同大小的卷积核,可以更好地捕获点云局部形状信息[6]。因此ResPoint 网络在每个局部特征提取器中采用了大小不同的卷积核增加不同的感受野,更好地学习不同的特征,并新增了跳跃连接,使提取到的特征能传到下一层网络。
ResPoint网络有4个特征提取模块,在提取高维特征方面很有优势。如图4 所示,ResConv 模块采用作为输入,具有d维坐标和C维特征的N个点;前三个SA(Set Abstraction)模块选取一定数量的关键点,再把每个点周围一定半径内的区域设为一组,经过分组之后,使用局部特征提取层ResConv 模块进行特征提取;第四个模块把每个组提取到的点云局部特征做最大池化得到全局特征;然后经过三个全连接层进行特征组合,最后得到类别分数,实现分类任务。
图4 ResConv架构Fig.4 ResConv architecture
本文借鉴了ResNet 的残差结构的思想,在局部特征提取层ResConv,在卷积、批归一化、激活层之间加入跳跃式连接,在人脸识别任务中取得很好的结果。ResConv 与PointNet++的局部特征有很大不同。前者使用大小不同的卷积核感知多尺度信息并聚合多层次信息,后者只在同一层使用卷积核为1 来收集信息,这导致每个层的上下文信息较少[15]。ResConv用(3,1)卷积核和(1,1)的卷积核提取特征,同时用(1,1)的卷积核提取特征之后,把不同感受野的特征结合。当网络的层数变深时,所提取的信息更抽象,学习到的特征更好。因此ResPoint使用了4个特征提取模块,对不同尺度的信息进行特征融合,网络学习能力更强。
在分类任务中常用的损失函数是Softmax,其作用是将特征的线性组成映射到(0,1)内,使用交叉熵给出每个分类的概率,Softmax定义如公式[16]:
其中:分子是K个类别中第j个值;分母则表示所有值之和;Qj是指该样本属于第j类对应的概率值。交叉熵函数公式:
其中:yj表示样本的真实标签。Softmax 只在分类任务中有很好的表现,而对于不同类别之间的角度空间上没有很好地区分开,所以本文使用了ArcFace 损失函数,在角度空间中最大化分类界限。ArcFace损失函数不仅对权重进行了正则化,还对特征进行了正则化。另外乘上一个scale 参数(s),使分类映射到一个更大的超球面上,分类更方便。ArcFace 公式如下:
图5 损失函数对比Fig.5 Comparison of loss functions
本文对人脸点云样本的处理及使用深度学习框架进行训练和测试的过程、结果进行比较分析。在人脸点云预处理之后,使用ResPoint 对点云数据进行分类,完成三维人脸识别任务。最后测试了在主成分分析(PCA)[17]、法向迭代最近点(Normal Iterative Closest Point,NICP)[18]、PointNet、PointNet++、RS-CNN 和ResPoint 网络对三维点云人脸识别的准确性。
本文使用Ubuntu 16.04,在Matlab2016 编写实现了三维点云鼻尖点检测以及三维插值等算法,并使用Anaconda 开源管理器编写人脸识别的代码,基于Pytorch1.4 框架,在Python3.7,CUDA10.1 上进行测试[14]。程序运行的硬件配置为Intel Core i7-8700K 8 GB,GTX1060 6 GB。
CASIA 三维人脸数据库包括123 个对象,每个对象有37或38 个WRL 格式数据和对应的BMP 图片。123 个对象都有姿态、光照、表情、遮挡多种变化。如表1,本文使用正脸、旋转脸和小姿态视角作为实验数据。三维点云数据预处理之后,点云数量不一致,为了恢复原始点云的规模,使用三维立方插值统一上采样到26 000 个点;然后对点云使用随机旋转扩充数据集,生成123个对象,每个对象有80个不同姿态的点云数据。
表1 CASIA人脸数据库姿态分布Tab.1 Pose distribution of CASIA face database
在CASIA 数据集上,分别使用PCA 和NICP 传统方法和PointNet、PointNet++、RS-CNN 等深度分类网络进行三维人脸识别实验,与本文的ResPoint 进行了对比分析。由于点云数据预处理后体量很大,基于深度学习的点云数据处理一般经过下采样。本文统一使用最远点采样统一抽取1 024 个点作为输入,使用标准的反向传播和随机梯度下降(Stochastic Gradient Descent,SGD)进行训练。训练集数据与验证集数据按4∶1 进行划分,学习率固定为0.001。本文训练ResPoint 网络使用参数与其他网络一致,以下是对比实验结果。
NICP 是基于迭代最近点(Iterative Closest Point,ICP)算法的改进,在进行匹配时,不仅在距离上接近,而且所处的法向量也要相同。人脸表面作为非刚体受表情影响较大,只获得了87.2%的识别正确率。PCA用一种点云匹配算法把整个人脸编码为向量,缺失了眼睛、鼻子、嘴等人脸的局部信息,其识别正确率为91.8%。PointNet 跟PCA 的思想类似,把人脸编码为向量之后,用三个全连接实现分类,获得了66.7%的识别正确率。PointNet++的采样、分组、提取特征与CNN 的思想一致,对人脸点云特征有比较好的提取能力,获得了92.1%的识别正确率。RS-CNN 设计了一种在点云上可以运用的卷积方式,从集合关系中学习推理3D 形状,其识别正确率为92.9%。本文提出的ResPoint 网络改进了局部特征提取,使用不同的感受野更好地提取人脸点云的特征,获得了97.6%的识别正确率,高于多个深度学习网络和传统方法的识别率,与RS-CNN相比,ResPoint网络识别正确率提高了5.06%。
图6 ResPoint网络与其他方法的实验结果Fig.6 Experimental results of ResPoint network and other methods
总体来说,ResPoint 网络在CASIA 上的错误率降低了66.20%,这些结果表明ResPoint 网络在CASIA 数据集上的有效性。
本文还测试了在CASIA 数据集上缺失点云的鲁棒性,并进行了分析,图7是在三维人脸点云分别采样1 024、512、256、128、64个点的结果。
图7 不同采样密度的点云Fig.7 Point clouds with different sampling densities
本文使用了不同的采样点数作为三维人脸点云数据,作为输入训练了1 024 个点的模型。训练过程中随机丢失一定数量的点云,并与PointNet、PointNet++、PCA、RS-CNN 进行了比较。图8 显示ResPoint 在测试中表现更好,这表明ResPoint模型获得的语义比PointNet++多尺度信息更多,显示了模型很有竞争力。
图8 稀疏点测试结果Fig.8 Test results of sparse points
本文针对三维人脸点云识别任务中人脸多姿态、多角度以及三维点云缺失等问题,提出了一种新的网络模型ResPoint。ResPoint 网络使用了大小不同的卷积核和跳跃连接提取特征,提高了三维点云网络特征提取能力;使用ArcFace 作为损失函数,提高了识别正确率;ResPoint 使用了ResConv 进行特征提取,增强了对人脸点云的特征提取能力。模型有效地提取了人脸的三维特征,可以进行三维点云的识别工作。在ResPoint 网络中,点云数据经过采样、分组后使用ResConv 进行特征提取,充分保证了特征信息不丢失[19]。实验结果表明,ResPoint 网络对人脸点云有较好的特征提取能力,人脸识别任务精度较高。同时使用ResPoint 网络对不同采样密度进行测试,均取得了较好的结果,表明ResPoint 有很强的鲁棒性。
由于ResPoint 网络还达不到实时性的要求,在接下来的研究工作中,对如何提升ResPoint 网络的实时性仍需进一步探索。