基于神经网络的移动端人脸特征点检测
2018-10-17陈科宇贾玉祥
陈科宇 贾玉祥
摘 要: 将人脸特征点检测技术融合到移动端,通过摄像头获取图像信息并实时地检测人脸特征点是一个很有前景的研究课题。本文使用ARM开发板作为技术实现平台,通过USB摄像头收集图像信息,使用基于多任务级联卷积神经网络的人脸检测算法结合基于回归树的人脸对齐算法进行人脸特征点检测。实验表明,该方法切实可行,人脸特征点检测更准确、高效,移动端平台使得人脸检测程序更加实用方便。
关键词: 人脸特征点检测; 神经网络; ARM平台; USB摄像头
中图分类号:TP391 文献标志码:A 文章编号:1006-8228(2018)08-05-04
Facial feature point detection on mobile terminal based on neural network
Chen Keyu, Jia Yuxiang
(School of Information Engineering, Zhengzhou University, Zhengzhou, Henan 450001, China)
Abstract: It is a promising research topic to integrate facial feature point detection technology into mobile terminal, obtain information by camera and detect facial feature point in real time. This paper uses the ARM development board as the technology platform, combining a face detection algorithm based on multi-task cascaded neural network with the face alignment algorithm based on regression tree, and collects image information via USB camera to detect facial feature point. The experiments show that the proposed algorithm is feasible, making the facial feature point detection more accurate and efficient, and the mobile terminal platform makes the face detection procedure more practical and convenient.
Key words: facial feature point detection; neural network; ARM platform; USB camera
0 引言
近年來,在人工智能与深度学习领域中,人脸识别成为了一个研究热点,准确地识别人脸的基础是正确地获取合适的人脸特征,其基本特征有:眼睛、鼻子、嘴巴等,对基本特征进行定位是人脸识别中必不可少的步骤。
人脸识别大致分为三种方法。第一种是在特征空间中,根据图片信息在变换域空间中不同的能量分布进行识别,代表算法有奇异值分解、因子分析、独立成分分析等降维算法。第二种是通过判断人脸几何信息特征的相似程度进行人脸检测。第三种是基于多层神经网络,在图片信息空间投射到的子空间中进行识别,虽然该方法与第一种方法类似,但针对不同的需要,可以根据其降维、分维、非正交等特性来构造不同的网络结构。本文提出使用基于多任务级联卷积神经网络的人脸检测算法[1]结合基于回归树的人脸对齐算法[2]在移动设备中实时地进行人脸特征点检测。
1 人脸检测与人脸对齐算法
人脸识别大致分为四个步骤,按先后顺序为人脸检测、人脸对齐、人脸校验、人脸识别。人脸检测就是在图片信息中寻找人脸的位置,而人脸对齐则在寻找到的人脸位置中自动找到具有标志性的特征位置并最终定位其准确的形状。
人脸检测算法很早就比较成熟了,Viola-Jones(简称VJ)算法是非常经典的人脸检测算法,因其高效快速的检测效率,至今仍然被广泛使用。VJ算法[9]使用haar特征与Adaboost算法对分类器进行训练以建立级联分类器,并提出了积分图,能够对haar特征进行更快速的运算,在实时中表现出色,但大量研究表明,该算法在现实世界中检测效率会显著降低。在各种计算机视觉任务中,例如人脸识别、面部分类等,卷积神经网络表现出显著优势,结合多任务级联的思想,在人脸检测中将会取得更加优秀的效果。
人脸对齐算法有两种,分别为模板拟合的方法与基于回归的方法,常用的较为传统的算法有基于点分布模型的主动形状模型算法ASM,在主动形状模型的基础上进一步处理纹理以将纹理和形状融合为外观模型的主动外观模型算法AAM,以及结合了主动形状模型与主动外观模型优点的约束局部模型算法CLM。比较流行的人脸对齐算法有对牛顿法进行改进的算法SDM、基于回归的算法ESR、调试参数比较困难的算法LBF以及基于回归树的算法等。
2 算法的设计与实现
本节介绍软硬件开发平台的选择、算法的设计原理以及算法的实现与移植。
2.1 开发平台
经过考量,硬件方面最终选择使用HiKey960开发板。它是华为目前发布的性能最高的移动SoC平台,开发板本身适配AOSP硬件开源系统,可以基于安卓系统进行目标实用性很强的APP应用开发。
软件方面选择了安卓8.0系统,原因是其在流畅且稳定的基础上加强了人工智能方面的性能,更利于人脸识别程序的运行,可以提高效率。更重要的一点是安卓系统是完全开源的,具有很好的开放性,开发所需的资料也非常充足。
2.2 算法的设计
对人脸检测算法的选择,本文使用了基于多任务级联卷积神经网络的算法[1]。该算法结合有效的人脸检测与人脸对齐两种任务之间内在的联系,使用多任务级联卷积神经网络框架进行整合。
算法一开始将图片调整比例大小并构造出图像金字塔[1,4,5],以对不同比例的人脸进行检测。算法本身使用了由粗到精的三阶级联子网络框架,第一个子网络简称提案网络,是全卷积,即:没有全连接层的卷积神经网络,其特点是可以输入不同大小的图片,可进行端到端的训练并更好地学习上下文信息,是非常适合输出为图像的一种神经网络框架。提案网络的主要作用是生成候选框,在训练的过程中网络有三条支路,分别用来进行人脸分类、对人脸框进行回归以及人脸关键点的定位,而在测试中只输出了候选框及其四个坐标信息的分数,该网络使用边界框回归以校正候选框,并使用非极大值抑制的方法对候选框的重叠进行合并。第二个子网络简称提取网络,其输入为提案网络获取的候选框,由于该网络添加了一个全连接层,所以会起到更好的抑制作用,照比提案网络会获取更加精确的候选框信息。第三个网络简称为输出网络,该网络类似于提取网络,其调整了输入大小并增加了对地标位置的回归和一层卷积层,在更进一步地对候选框筛选的基础上,还会输出五个人脸特征点位置信息。该算法与[3]比较,在获取良好的人脸检测效果的情况下,运行时间也比较短。
在人脸对齐算法的选择中,本文使用了基于回归樹的算法[2,11],该算法通过建立级联回归树将人脸真实形状还原,整体流程如图1所示。
其中每个回归树的每一个叶子节点都存储一个残差,当算法执行到叶子节点时会将残差与输入量相加以起到回归的作用,最终通过叠加所有残差以获取人脸对齐的位置信息。
算法使用了GBDT(Gradient Boosting Decision Tree) 梯度提升决策树,与随机森林类似,都是许多棵决策树联合在一起的,不同点是每棵GBDT树之间都不是并行的而是串行的,即一棵树的构造是建立在其他树之上的[6,7,8,10]。回归器级联回归树的流程如图2所示。
GBDT的建立以将人脸的初始形状回归为真实形状为目标,使用像素差作为特征,对于每一幅图片在合格的特征池中随机挑选两个点,计算图片在该两点处的像素差值,并将差值与随机生成的分裂阈值相比较,如果像素差小于该阈值则向左分裂,否则向右分裂,重复执行直到叶子节点。对落入叶子节点所有图片的差值作平均,即可获取该叶子节点所对应的残差值,在构造下一棵树之前,需要对图像进行更新,以初始形状与残差的和来表示图像,使得其更接近真实形状。最终当可以用当前形状表示真实形状时,即成功建立了一棵GBDT树,如图3所示为回归树的建立过程。
该算法具有良好的实时性,但是依赖于光照,即在明亮且均衡的光照下可以获得相对更好的检测效果。
2.3 算法的移植与实现
算法的移植分为三个步骤,依次为USB摄像头视频输入驱动的编写、人脸检测算法的实现并编译成动态链接库以及对人脸对齐算法的实现。最终实现对人脸特征点的检测并在安卓平台运行。
2.3.1 USB摄像头的视频输入驱动
由于在开发板Hikey960中并没有配备MIPI接口的摄像头而是外置了USB接口,所以我们选择使用USB摄像头来作为视频输入设备,为此需要编写驱动来对设备进行调用。
通过获取通用串行总线摄像头视频输入驱动相关资料,选择使用开源库来驱动设备。首先获取libusb库,它是一套以简单的方式访问USB设备的应用程序编程接口且无需特殊权限。然后获取libuvc库,它是在libusb库之上建立的,可以对USB视频设备进行调用,同时支持对设备进行细粒度的控制,可以获取视频流。最后,获取安卓图片压缩库libjpeg-turbo以对视频流信息进行处理,该库是图像编解码器,可使用单指令多数据流对JPEG图像进行编码与解码。最终使用Native Development Kit(NDK)将这些开源库编译为动态链接库,经测试,可以成功访问目标设备、获取视频输入流,并正确地处理以获取图像信息。具体流程如图4所示。
2.3.2 人脸检测算法移植
人脸检测算法[1]源代码是使用Matlab结合卷积神经网络框架caffe所编写的。移植工作分为两部分,第一部分是将算法使用计算机视觉库OpenCV、卷积神经网络框架caffe和编程语言C++实现并且可以成功地检测出人脸与五个特征点的位置信息,本文结合以上开源库成功实现人脸检测算法,经测试表明,实现的人脸检测算法精确度和速度与原论文[1]基本一致。第二部分是使用NDK将实现的人脸检测程序结合卷积神经网络框编译成安卓所使用动态链接库。基本步骤为首先使用命令将源代码编译生成.class文件和头文件,创建对应的源文件并添加人脸检测代码,编写配置文件Android.mk与Application.mk以引入标准模板库,包括头文件目录与静态库目录,最后使用NDK指令将其编译为动态链接库。
最终结合安卓项目,调用相应的动态链接库,使用人脸检测算法,对USB视频输入设备获取的图像信息进行处理,经测试可以正确、快速地检测出人脸以及五个人脸特征点的位置信息。
2.3.3 人脸对齐算法移植
结合上文对人脸检测算法的移植,将获取的人脸图像传送给人脸对齐算法以进行人脸特征点检测。具体过程如图5所示。
首先获取Dlib库,它是一个包含机器学习算法的开源库,以在多平台运行人脸识别程序为目的,并且对人脸特征点检测算法[2]进行了实现。对该库的移植总共分为四个步骤。
第一步编写代码以实现对图像和文件的操作,例如将位图文件转换为矩阵、图像格式转换、文件的创建删除加载等,并布置到项目中进行调用。
第二步将上文实现人脸检测算法运算后所获取的人脸图像信息传给算法以实现人脸对齐功能,结合计算机视觉库使用NDK命令将其编译成动态链接库。
第三步實现对动态链接库调用、加载训练好的模型等函数,并且在主工程中实现对这些函数进行调用。
最后改写build.gradle、setting.gradle等配置文件,使用gradlew命令集实现对整体项目的构建,生成安卓安装包并使用adb命令集将其安装到开发板中,经测试,可以快速、准确地获取人脸和68个人脸特征点的位置信息,并将检测结果展示到显示器中。
3 实验结果与分析
本文使用基于多任务级联卷积神经网络的人脸检测算法结合基于回归树的人脸对齐算法进行人脸特征点检测,成功在Hikey960开发板(安卓系统8.0)中运行,并通过对USB视频输入设备获取图像信息,获得了较高的检测速度与效率。图6为检测效果图,可见人脸特征点检测数目基本维持在68个左右。
4 结束语
本文将基于神经网络的人脸检测算法结合人脸对齐算法实现了对人脸特征点的检测,并通过手机摄像头或者USB摄像头获取视频图像信息。初步实验显示,与经典的人脸特征点检测程序相比,本文方法运行速度更快、检测效率更高。
参考文献(References):
[1] Zhang K, Zhang Z, Li Z, et al. Joint Face Detection and
Alignment Using Multitask Cascaded Convolutional Networks[J]. IEEE Signal Processing Letters,2016.23(10):1499-1503
[2] Kazemi V, Sullivan J. One millisecond face alignment with
an ensemble of regression trees[C]// Computer Vision and Pattern Recognition(CVPR),IEEE,2014:1867-1874
[3] Li H, Lin Z, Shen X, et al. A convolutional neural network
cascade for face detection[C]// Computer Vision and Pattern Recognition (CVPR), IEEE,2015:5325-5334
[4] A. Krizhevsky, I. Sutskever, G. E. Hinton, Imagenet
classification with deep convolutional neural networks[C]//Advances in neural information processing systems (NIPS),2012:1097-1105
[5] X. Zhu, D. Ramanan, Face detection, pose estimation, and
landmark localization in the wild[C]//Computer Vision and Pattern Recognition(CVPR), IEEE,2012:2879-2886
[6] P.N.Belhumeur, J.P.Hespanha, and D.J.Kriegman. Eigen
faces vs. Fisherfaces:recognition using class specific linear projection [J].IEEE transactions on pattern analysis and machine intelligence,1997.19(7):711-720
[7] D.Chen, X.Cao,F.Wen, and J.Sun. Blessing of
dimensionality:High-dimensional feature and its efficient compression for face verification[C]//Computer Vision and Pattern Recognition (CVPR), IEEE,2013:3025-3032
[8] Taigman Y, Yang M, Ranzato MA, et al. Deepface:
Closing the gap to human-level performance in face verification[C]//Computer Vision and Pattern Recognition (CVPR), IEEE,2014:1701-1708
[9] Huang G B, Lee H, Learned-Miller E. Learning
hierarchical representations for face verification with convolutional deep belief networks[C]//Computer Vision and Pattern Recognition (CVPR), IEEE,2012: 2518-2525
[10] Wen D,Han H, Jain A K. Face spoof detection with
image distortion analysis[J].IEEE Transactions on Information Forensics and Security,2015.10(4):746-761
[11] Schroff F, Kalenichenko D, Philbin J.FaceNet: a
unified embedding for face recognition and clustering[C]//Computer Vision and Pattern Recognition (CVPR), IEEE,2015:815-823