回归树算法在嵌入式人脸置换的应用
2017-07-10南世慧张俊杰
南世慧 张俊杰
(北京师范大学 北京 100875)
回归树算法在嵌入式人脸置换的应用
南世慧 张俊杰
(北京师范大学 北京 100875)
已有的人脸识别算法虽有较好的效果,但对于嵌入式应用不都适用。针对终端人脸置换场景,提出使用迭代的方式来减少因光线等原因无法得到标准图像的状况。同时使用回归树的方法对图像的局部特征进行拟合以提高其识别速度,并在此基础上使用普氏分析等图像处理技术对图像的颜色平衡进行校正。在平衡效率的前提下,针对移动设备使用胶水语言Python进行模拟实现该算法,实现准确快速的人脸置换。实验表明,该方法在提高检测效率的同时,降低了对人脸的误判率并为高复杂度算法在移动终端的应用提供了借鉴。
人脸检测 回归树 特征提取
0 引 言
近年来,社会的快速发展,科技进一步提升,计算机软硬件的性能以及计算机视觉、人工智能模式识别等这一类技术发展得尤为快速。在人们的生活中,对移动设备人脸识别能力的需求越来越大。目前,人脸识别在安全、军事等方面已有很好的应用[1],而对于人脸的编辑也随之产生,诸如美图秀秀这样的应用软件,深受女生的喜欢。然而目前的应用软件,需要借助于用户的手势来对人脸的具体特征位置进行相关的操作。虽然在PC上有着良好的识别人脸的处理方式,然而在嵌入式设备上面使用就不一定有很好的效果,因此,如何在手机上快速识别与合成人脸的图像需要进一步研究。几年前,有研究者详细地总结了国外人脸合成的相关技术[2],本文在此基础上,结合移动环境下的人脸识别特征,采用适合在移动平台下运行的语言Python,将基于回归树的人脸识别技术和图像处理技术相互结合从而实现人脸置换功能。
1 人脸识别模型选取
1.1 拟合函数的选取
模型的选取有两种模型:一种是全局模型,另一种是局部模型。其中,全局模型对于线性和非线性模型的数据都能很好地拟合并得到相应的参数,但是现实过程中的数据,并不一定都是规则的。因此,构建全局模型显得不合适,就需要采用局部模型,构建相应的决策的节点把数据分割成不同区域,然后针对部分的数据区域进行相应的回归拟合,这就需要回归树。与通过香农熵最小作为度量所得结果中树的节点都是离散的相比,回归树通过计算分割数据的方差,得到的节点均为连续的数值。节点都是误差最小的数据。
1.2 回归函数的组成部分选取
图片因为光线、人为操作或其他原因不能得到我们想要的标准的图像,使得人脸图像空间实际上并不是一个视觉上面的最优空间,这时可通过迭代的方法来避免无法得到理想的特征这一问题。对于当前的图像,迭代后会产生一个标准坐标,从而得到模型参数[3-6]。
此外,虽然高维的向量更加符合图像数据,但是存在非凸的局部最优问题[7]。通过设置回归量以及假设建立的模型都是线性的子空间[8](可以通过查找训练集的主成分),可以减少一些潜在的非线性模型,来避免非凸的局部最优问题,从而使预测更为理想。
以上即是回归函数的两个组成部分:一个是回归形状参数(标准坐标),一个是模型都是线性的子空间。
1.3 回归方程独立变量的选取
常规的误差函数是实际值减去预测值,然后对误差函数进行求导,如式(1)所示,其中1/2是为了方便积分。
(1)
对每次得到的梯度,都会朝着梯度减少的方向。
(2)
在式(2)中θ有很多纬度,每个纬度都能求出一个梯度减小的方向,将它们相结合就能求出一个整体梯度下降的方向,不断的下降,最终就能找到最小的点,而不管它是局部的还是全部的。结合梯度下降算法以及两个像素输入的偏差选择出合适的稀疏像素集,作为回归方程独立变量进行输入。
通过以上模型的设定,能够得到一个尽量标准的图像,得到标准的图像后,就要对图像中的人脸进行识别。
2 人脸识别模型选取
2.1 拟合函数的选取
2.2 回归量的学习过程
πi∈{1,2,…,n}
(3)
(4)
对于i=1,2,…,N,我们设N=nR,R为每个图像Ii用于初始化的数量。对于每个图像的初始化模型是从{Z1,Z2,…,Zn}均匀的无替代抽取。
(5)
(6)
这个过程不断迭代,直到所得出的回归量能足够精确。值得注意的是,这里要使用平方误差损失,以及在每个训练样本中得出的误差函数的梯度是和最内层循环的残差相对应。学习率的范围是小于1,可以防止过度拟合[9]。
在梯度下降算法中,每个回归函数rt的核心是基于回归树来拟合残差的。因为人脸在大致上具有相似性,但在局部位置是有差异的,而回归树能够很好地拟合局部的特征。
2.3 局部形状不变的分割测试
在每个回归树的分割节点,决策是建立在不同像素二值化后的大小。像素是建立在平均模型的标准坐标(u,v)。对于一张人脸的任意形状,索引在基准模型(u,v)下具有同样位置相关性的点。为了实现这样的效果,图像在提取特征之前要封装成具有基准模型的图像,因此我们只要使用图片的表达方式变得相对稀疏,相对于用整张完整的图片,这样更加有效。这样做的前提是,图片是全局相似而局部不同,而人脸恰好符合这样的特征。
通过使用以上算法,我们能够成功地识别出人脸,接下来就需要对不同位置的两张人脸进行切换。
3 人脸置换算法
3.1 面部标签处理
对于两张已识别出人脸的图像,我们旋转变形一张图像,另一张与之保持对应,根据上面的步骤获得两个具有标记的矩阵,并且每一个脸部的局部细节都有一个坐标和他相互关联。为了能够使两个标记尽量相似,我们将第一个图像进行相同的变换,并使得与另一幅图像能够尽量覆盖。
(8)
式中W是一个二维的向量,R是一个2×2的正交矩阵,其中q0和z0是具有标记的行以及列。X是一个标量,我们要做的是寻找W、X以及R,使得结果尽量小[10]。
在此使用了Pythondlib库,通过get_landmarks()函数将一个图像转化成numpy数组,并返回一个68×2元素矩阵,输入图像的每个特征点对应每行的一个(x,y)坐标。
获得一个标准的坐标后,则要开始对两张图像进行调整,为了能够计算人脸在几何变换时候所经历的过程,还需要使用常规的普氏分析。
3.2 普氏分析
普氏分析是分析形状分布的一种方法。在为人脸构建一个形变模型时,首先要做的就是从当前的特征中除去无用的部分,也就是保留模型在除缩放、旋转等几何变换因素外所遗留的几何信息。通过不断的迭代从而找到一个标准的形状,并在此基础上使用最小二乘法找出每一个样本,从最初始的形状一直变化到标准形状所经历的仿射变换方式[11]。
普氏分析的具体步骤先是:
1) 计算每一个样本点在每一个图像中的均值。
(9)
2) 然后通过对所有形状进行一次归一化,得到的是每一个样本减去对应样本点的均值。
(10)
3) 在此基础上,对于每幅图像,计算对应的重心。
(11)
4) 经过上面重心和角度的计算,将样本的形状和标准的形状进行对齐,使得对应形状的普氏距离越小。式(12)就是普氏距离的表达方式。
(12)
其具体的过程,即不断重复下面的计算过程。
(1) 计算所有样本点的归一化平均值,通过数学运算得到每一个具体图像的标准形状。
(2) 计算每一个图像想要变到标准形状所需要经历多少次旋转。或者旋转的角度是多少。具体求解用最小二乘法。
(13)
在上面的公式中,a、b即对应旋转变化的参数。
(14)
通过求偏导,就能得出a、b的值。
(15)
(3) 当得出a、b的值就对样本的形状进行一次旋转,使得它与标准图像相对齐。
(16)
(4) 不断地循环这个步骤直到达到规定的循环次数。
5) 其实现的普氏分析具体核心代码片段为:
def transformation(points1,points2):
points1 = points1.astype(numpy.float64)
points2 = points2.astype(numpy.float64)
c1 = numpy.mean(points1, axis=0)
c2 = numpy.mean(points2, axis=0)
points1 -= c1
points2 -= c2
s1 = numpy.std(points1)
s2 = numpy.std(points2)
points1 /= s1
points2 /= s2
U, S, Vt = numpy.linalg.svd(points1.T * points2)
R = (U * Vt).T
return numpy.vstack([numpy.hstack(((s2 / s1) * R,c2.T - (s2 / s1) * R * c1.T)), numpy.matrix([0., 0., 1.])])
3.3 矫正图像的色彩平衡
当两个图像相互对齐的时候,为了使两幅图像能够更好匹配,可以将它们相互重合。采用RGB缩放的方法,先将第二张图片除以第二张图片的高斯模糊,接着乘以第一张图片的高斯模糊。该方法在一定程度上可以修正存在光线差异较大情况的两张照片。
当两张图片相互混合的时候,通过遮罩来决定哪一张图片的部分应显示,哪一部分不显示。因为人脸的差异集中体现在眉梁、眼睛到鼻子、嘴巴这一区域,这里使用这一区域进行显示,其他部分用另一张照片显示。其主要色彩平衡代码如下:
def correct_colour(im1, im2, landmarks1):
blur_amount = COLOUR_CORRECT_BLUR_FRAC *
numpy.linalg.norm( numpy.mean(landmarks1[LEFT_EYE_POINTS], axis=0) -
numpy.mean(landmarks1[RIGHT_EYE_POINTS], axis=0))
blur_amount = int(blur_amount)
if blur_amount % 2 == 0:
blur_amount += 1
im1_blur = cv2.GaussianBlur(im1, (blur_amount, blur_amount), 0)
im2_blur = cv2.GaussianBlur(im2, (blur_amount, blur_amount), 0)
im2_blur += 128 * (im2_blur <= 1.0)
return (im2.astype(numpy.float64) *
im1_blur.astype(numpy.float64) /
im2_blur.astype(numpy.float64))
3.4 移植到手机
在测试调通后,使用Python for Android将核心的Python代码移植到Android上面。因为CLE支持Python和Java之间的交互,将Android类封装成为CLE对象,就可以被其他语言调用[12]。同时借助于SL4A(Scripting layer for Android)使得通过JSON RPC通信接口,就能够调用SL4A的RPC服务端程序,从而实现本地脚本和原生Android程序内部通信。
3.5 结果对比
在对人脸数据库的学习过程中,我们使用上文的算法对扩展YaleB[13]以及PIE[14]人脸数据库进行学习。然后通过faceswap官方应用进行比对。
由图1、图2可以体会到本程序与其他程序效果最直观的区别就是不需要用户通过手动拖拽人脸进行匹配,其次,在图3以及图4中可以看见faceswap应用是直接将人脸裁下来就覆盖到目标脸上,所以结果看起来会有点不协调,而本程序不需要拖拽,通过寻找人脸特征点进行匹配变换,因此生成的效果更生动。考虑到不同人种的特点不同,我们还对东方人脸置换进行了模拟。
图1 原图 图2 操作图
图3 facewap生成图 图4 本应用facewap生成图
在图5-图7中就是将图6的脸移到图5上面得到的,就是图7。从眼睛、鼻子到嘴巴能较清楚的观察到,移植的脸相对比较精准。这是因为在使用遮罩的时候,集中将这部分器官标定显示出来。所以看上去很自然,其次由于对图像的色彩平衡做了处理,使得生成图的色彩更自然、均匀。相比较图6、图7的色彩更加协调。
图5 人形A 图6人形B 图7 合成图
为了让实验结果更加准确,我们将1 000组合成的图像随机的分成10组,让10名志愿者对合成的图像进行选择,结果分为“真实”、“无法判断”、“合成效果明显”。当然志愿者的主观因素会存在一定影响,因此我们最后统计的时候,采用合并统计以在一定程度上避免个人因素的影响。
如表1所示,通过对比可以看出本程序在无刘海的情况下,合成的成功率较高,然后在有物体遮挡的情况下,成功率相对低一些,但是总体上效果有提升。
表1 实验结果表
注:成功率:结果真实/总合成图片数;失败率:合成效果明显/总合成图片数;A: 真实(有刘海/无刘海);B: 真假难辨(有刘海/无刘海);C: 明显合成效果(有刘海/无刘海)
在识别算法方面,通过在Aber-dee人脸数据库中抽取合成60张320×240的单张人脸图片,计算平均值,得出采用回归树的方法大约用时为140 ms,而在相同的环境下文献[14,15]的平均匹配时间分别为1.75 s和2.38 s。
在图像合成方面,考虑到移动设备的图像处理能力,没有一些针对发型做定点人脸图像修复,所以相较于采用Criminisi算法的图像合成效果会弱一点。但是采用高斯模糊也能在一定程度上缓解这样的现象
4 结 语
随着终端的硬件性能越来越好,基于人脸的操作将会在终端得到广泛的应用,但目前的人脸识别功能,在PC上可以模拟得很好,然而在移动终端相对来说偏弱,而且目前Android应用市场的人脸置换应用,均依赖用户手动的拖拽识别,并没有达到智能的层面。为此,本文针对移动设备采用了基于回归树的人脸识别算法,并结合图像处理技术,完成一款基于移动终端的人脸置换应用。
其中图像识别在学习的过程中,通过迭代的方式避免了因光照或者其他原因引起的图像不均匀,同时为了使画面更协调,采用了普氏分析,使得图像在光线不统一的时候,在一定程度上也能够得到调整。基于回归树的人脸检测,识别的速度比较快,在手机上比较合适,因人脸置换的场景,主要以娱乐的方式呈现,如果用户表情过度扭曲,还需要改进。实验表明,本方法在移动终端的置换效果相较于其他应用效果良好。
[1] Cao X,Wei Y,Wen F,et al.Face alignment by explicit shape regression[J].International Journal of Computer Vision,2014,107(2):177-190.
[2] Sheng Y,Kucharski K,Sadka A H,et al.Automatic Face Synthesis and Analysis.A Quick Survey[M]//Computer Vision and Graphics.Springer Netherlands,2006:147-160.
[3] Xiong X,Torre F D L.Supervised Descent Method for Solving Nonlinear Least Squares Problems in Computer Vision[J].Eprint Arxiv,2014.
[4] Cristinacce D,Cootes T F.Boosted Regression Active Shape Models[C]//British Machine Vision Conference 2007,University of Warwick,Uk,September.2007:1-10.
[5] Yan J,Lei Z,Yang Y,et al.Stacked deformable part model with shape regression for object part localization[M]//Computer Vision-ECCV 2014.Springer International Publishing,2014:568-583.
[6] Yang B,Yan J,Lei Z,et al.Fine-grained evaluation on face detection in the wild[C]//Automatic Face and Gesture Recognition (FG),2015 11th IEEE International Conference and Workshops on.IEEE,2015,1:1-7.
[7] Forsgren A.Optimality conditions for nonconvex semidefinite programming[J].Mathematical Programming,2000,88(1):105-128.
[8] Zhang Z,Luo P,Chen C L,et al.Learning and Transferring Multi-task Deep Representation for Face Alignment[J].IEEE Transactions on Pattern Analysis & Machine Intelligence,2014,38(5):1-1.
[9] Cao X,Wei Y,Wen F,et al.Face alignment by explicit shape regression[J].International Journal of Computer Vision,2014,107(2):177-190.
[10] 刘光灿.基于机器学习的物体识别[D].上海交通大学,2013.
[11] Beazley D M.Python essential reference[M].Addison-Wesley Professional,2009.
[12] 马小虎,谭延琪.基于鉴别稀疏保持嵌入的人脸识别算法[J].自动化学报,2014,40(1):73-82.
[13] Han H,Shan S,Chen X,et al.A comparative study on illumination preprocessing in face recognition[J].Pattern Recognition,2013,46(6):1691-1699.
[14] 王俊艳,苏光大,林行刚.用于人脸识别的下颌轮廓线分类方法[J].光电子·激光,2005,16(11):1368-1372.
[15] 杜立强.基于主动形状模型的面部关键特征点定位技术研究[D].国防科学技术大学,2009.
APPLICATION OF REGRESSION TREE ALGORITHM IN EMBEDDED FACE REPLACEMENT
Nan Shihui Zhang Junjie
(BeijingNormalUniversity,Beijing100875,China)
Although the existing face recognition algorithm has a good effect, but for embedded applications are not applicable. Aiming at the terminal face replacement scene, it is proposed to use iterative method to reduce the situation of failing to get standard image due to light and other reasons. At the same time, the regression tree method is used to fit the local features of the image to improve its recognition speed. On this basis, the color balance of the image is corrected by using image processing techniques such as Platts analysis. In the premise of balance efficiency, it uses the glue language Python for mobile devices to simulate the algorithm, to achieve accurate and rapid face replacement. Experimental results show that this method can improve the detection efficiency and reduce the misjudgment rate of face recognition, and provides a reference for the application of high complexity algorithm in mobile terminal.
Face detection Regression tree Feature extraction
2016-05-31。南世慧,硕士生,主研领域:信息安全,图像识别。张俊杰,助教。
TP391.4
A
10.3969/j.issn.1000-386x.2017.06.037