发明内容
为解决上述问题,本发明公开了一种改进的人脸特征点定位跟踪方法,力图在多个方面全面提升算法的性能,具体体现在特征选取,模型训练以及定位跟踪等方面做了较大改进,使算法运行效率大幅提升,并同时保证了定位跟踪的准确性,能够实现在移动平台上实时进行人脸特征点的检测定位。
本发明分为训练和匹配两个阶段,训练阶段主要学习全局形状模型,角点形状模型,眼睛形状模型,嘴唇形状模型,角点局部纹理模型,特征点局部纹理模型。匹配过程采用分层的机制,首先是在人脸检测结果的基础上利用角点局部模型,定位眼角,嘴角,这些都是易于定位的特征点,通过角点形状模型对这些点进行简单校验修正,此时可以估计出人脸姿态,接着同时分别对眼睛,嘴进行特征点迭代定位,对应的平滑过程也是局部的,上述过程是不跳帧进行的,在跟踪的过程中,对角点进行光流估计和卡尔曼滤波。人脸其余特征点正常处于保持状态,在人脸运动之后进行快速调整匹配,其中的形状投影采取加权投影的方式,权重即为特征点的迭代过程中的稳定性,以此减少迭代次数,提高准确率。
为了达到上述目的,本发明提供如下技术方案:
一种基于移动平台的人脸特征点定位跟踪方法,包括如下步骤:
(1)标注训练集上的特征点,并对特征点进行标准化处理,改变形状的姿态参数使训练集上的所有的图像的角度、大小、位置一致;
(2)采用主成分分析法建立角点形状模型、左眼形状模型、右眼形状模型、嘴唇形状模型、人脸全局形状模型;
(3)提取角点的LBP特征建立角点局部纹理模型;
(4)通过人脸图像标定点周围的灰度外观信息建立特征点局部纹理模型;
(5)使用人脸检测的方法估计人脸窗口;首先定位眼角和嘴角的六个特征点,并进行局部检验修正;其后结合边缘约束对眼睛和嘴唇进行特征点定位,眼睛和嘴唇上的特征点定位结束后进行目光估计,唇动分析,以及人脸的姿态估计;随后利用已经定位的信息估计全局人脸特征点的位置,通过局部纹理匹配规则确定每个特征点的位移,进而确定姿态和形状参数,更新姿态和形状参数,进行基于加权投影的形状迭代定位至收敛。
作为本发明的一种优选方案,所述步骤(3)具体为:首先对训练集进行人脸检测,统计六个角点的位置分布,训练角点的正负样本是角点以及周围的位置的四层LBP特征,使用线性支持向量机训练局部角点的判别模型,并对模型结果中的W进行了二值基逼近的近似。
作为本发明的一种优选方案,所述的步骤(4)具体为:建立每个点的局部纹理模型,对于每个特征点的特征提取,使用边界垂直方向的剖面,每个特征点两侧各取3个点形成灰度剖面,然后计算灰度剖面的标准化差分向量,最后计算标准化差分灰度剖面的均值,用以进行特征点的搜索。
作为本发明的一种优选方案,所述的步骤(5)中进行基于加权投影的形状迭代步骤具体为:在所有特征点迭代定位时,形状约束采用加权投影的方式,其中引入搜索过程中的评价信息,从而能尽可能的避免陷入局部极值,使得最终的定位结果更鲁棒,更稳定。
作为本发明的一种优选方案,所述步骤(5)中对眼睛和嘴唇的特征点定位步骤同步进行,人脸姿态估计、目光估计和唇动分析的步骤并行处理。与全局形状先验不同的是,局部形状先验可以更有效的处理全局形状的非高斯分布,并行处理方式能够有效加速本方法的运行速度,提高处理效率。
本发明具有如下优点和有益效果:整个匹配跟踪的过程采取层级机制,每秒可以定位跟踪二十五帧以上,而目前的人脸定位跟踪方法仅仅能达到10帧/秒左右,本发明与现有的人脸定位跟踪方法相比,效率得到了大幅提升,在移动平台上实现了实时定位跟踪,在移动平台上具有良好的应用前景。本发明在定位跟踪时首先对易于定位跟踪的角点快速定位,并进行校验修正,然后通过多核多线程的方式进行眼睛和嘴唇的匹配和定位,这其中可以进行目光跟踪和唇动跟踪,以及人脸姿态估计。对于全部特征点的匹配而言,我们可以获得非常接近目标的初始化结果,然后我们通过加权投影,利用了搜索过程中的信息,又运用了多分辨率搜索策略,使得搜索结果可能跳出局部极值。加权投影的方法让之前定位的部分点尽可能少受其他点匹配误差的影响,因为这时的形状平滑不会将形状中的噪声平均到每个点。另外,我们通过光流法和卡尔曼滤波对角点进行运动估计,在变化较小的情况下,其他特征点几乎不运动,因此可以跳帧处理。
具体实施方式
以下将结合具体实施例对本发明提供的技术方案进行详细说明,应理解下述具体实施方式仅用于说明本发明而不用于限制本发明的范围。
如图1所示,本发明可分为学习定位和测试定位两个阶段,具体地说,包括如下步骤:
步骤1.训练集特征点的标注与标准化处理
本发明中涉及的人脸标定点按照MPEG-4标准选取,由于人脸定义参数FDP定义的84个特征点过于繁杂,因此我们根据需要选取了其中61个特征点,舍去了嘴唇内的七个点,仅使用了嘴唇外轮廓的特征点,同时眼睛轮廓上的特征点也仅保留了八个(即双眼眼周上、下、左、右各四个点)以提高运算效率。训练库取自MUCT和自标定的人脸图像,一共有大约四千幅人脸图像,对这些人脸图像进行镜像对称处理,最终获得有八千幅人脸图像的训练集。
其次对样本图像形状进行标准化处理:由于图像中人脸形状的姿态通过大小尺度,旋转角度,位置参数来描述,因此需要通过适当改变形状的姿态参数,包括大小,角度,位置等来尽可能使所有的图像达到一致,例如尺度变换可以让标定点之间的距离固定,旋转变换可以让标定点连线指向固定,位移变换使形状中心位置固定。这里,我们采用了加权的最小二乘法将两个标定向量对齐所需要的角度,大小,位置等姿态参数。标准化处理的过程为现有技术,在本发明中不再详述。
为了保证标定点趋于稳定,我们还进一步对标定点施加一个加权矩阵,使得标定点相对于形状中其他各点的位移达到最小值。该加权矩阵是一个关于权值的对角阵。加权矩阵中各标定点加权值的运算方法为:首先计算所有形状中每两个标定点之间的距离以及任意两个标定点之间的距离对于所有形状的变化量,对变化量求和,即是该点的不稳定性程度,再将和求倒数,即可得到该点的加权值。
具体地说,我们将第i幅图像中第k个标定点和第l个标定点之间的距离记为R
ikl,再把第k个标定点和第l个标定点之间的距离的变化量记为
则第k个标定点的加权值为
其中,0≤k≤n-1,n是标定点的数量。
于是,加权矩阵就表示为
W=diag(w0,w0,w1,w1…,wn-1,wn-1)
进行一系列的归一化过程的主要目的就是要使整个过程收敛,否则得到的形状均值会发生不确定的平移和膨胀或者收缩。当形状的变化可以控制在某个预定义的门限范围之内时,整个过程就是收敛的。
步骤2.形状模型的学习
该步骤包括全局形状模型,角点形状模型(角点指嘴角,眼角的六个特征点),左眼形状模型,右眼形状模型,嘴唇形状模型的建立。角点形状模型用来给六个关键角点的定位效果进行进行校验修正,眼睛和嘴的局部人脸器官形状模型一定程度上解决了人脸形状的非线性化问题,这是简单的局部线性化思想。全局形状模型对搜索中的形状进行平滑去噪。所有的形状模型建立都使用主成分分析的方法处理,将每个形状向量中的任意一个都表示为平均形状与完整主成分的加权和。使用主成分分析法对特征点降维,同时去除噪声和数据间的相关性。另外,主成分所形成的形状子空间可以对人脸形状进行平滑,可以通过控制参数,使得最终的人脸在可以接受的范围内,从而使人脸的变化不脱离人脸的本质属性。
各形状模型的建立过程是相似性,仅仅是调用的标定点不同,保留的主成分能量都取95%。
例如,对于全局形状模型,训练集中的每一个形状向量是122维空间的一个点,所有训练样本的形状向量在122维的空间里是一个有限的区域内分布,该区域被称为容许形状域,该区域中任何一点所对应的形状都类似于该域的其他形状。利用主成份分析法寻找该122维空间内的所有点变化所表现出来的主要规律。每个主成份是原来变量的线性组合,主成份之间相互正交,形成数据空间的一组正交基。在很多情况下,主成分分析中前几个主成分可以在很高程度上描述原始数据的变化信息,因此可以我们可以从特征值大的一些特征向量上寻求形状向量的近似表达。
步骤3.局部模型的学习
3.1建立角点局部纹理模型
角点是指眼角,嘴角的六个特征点,本发明采用四层金字塔LBP(Local Binary Pattern,局部二值模式)进行特征描述,金字塔之间的放缩比例为1/4。首先对训练集进行人脸检测,并统计了六个角点的位置分布,我们训练角点的正负样本是角点以及周围的位置的四层LBP特征,我们在此使用线性支持向量机训练局部角点的判别模型,并对模型结果中的W进行了二值基逼近的近似,加速了角点匹配定位的速度。
具体步骤为:使用支持向量机对每个角点进行训练得到相应的模型参数。至于角点检测区域的确定,我们把样本在人脸检测窗口中对应角点的位置进行了统计,由于样本本身进行过对称化扩充,所以此处每个角点的包络区域是对称的,这些矩形区域便是我们之后匹配过程中的局部搜索范围,而在跟踪的过程中,我们不对每帧进行人脸检测,角点的局部搜索范围通过跟踪的方法预估。
为了进一步降低计算复杂度,考虑到移动平台不擅长浮点计算的实际情况,并且结合LBP特征的二值特性,我们对支持向量机训练过程中的每个wj,j=1,2,…6做了近似,将其表示成一组基向量的组合:
其中
D即为特征描述子的维数。对于w
j的二值近似,是将其投影到与之同向的基向量b
i=sign(w
j),得到投影系数β
i=<b
i,w
j>/||b
i||
2。为了减少信息的损失,计算投影之后的残差w
j=w
j-β
ib
i,重复上述过程N
b次,最终得到w
j的二值近似值。
为了能够进一步加速计算,我们还考虑
其中
与
互补,所以
这样就把点积浮点运算变成了二进制位运算,可以通过“与”门快速实现。通过大量的实验测试,当Nb=4时wj二值近似结果对最终的匹配精度几乎没影响。
3.2建立特征点局部纹理模型
该步骤主要通过人脸图像标定点周围的纹理信息建立灰度外观实现,为了简单起见,我们主要考虑与当前标定点及其邻近的数个标定点所组成的边界线的垂直方向上的灰度信息,为了保证灰度尺度能够一致,使用标准化差分灰度剖面,相对于二维的局部纹理信息而言,边界垂直剖面的搜索计算复杂度较小,更适合应用在移动平台上。当然简单的使用纹理剖面容易陷入局部极值,所以我们在搜索的过程中使用多分辨率搜索策略,并且把形状进行加权投影,利用搜索过程中的信息,使得搜索能够跳出局部极值,从而得到更准确的结果。
首先需建立每个点的局部纹理模型,对于每个特征点的特征提取,使用边界垂直方向的剖面,每个特征点两侧各取3个点形成灰度剖面,然后计算灰度剖面的标准化差分向量,最后计算标准化差分灰度剖面的均值,用以进行特征点的搜索。
具体地说,与当前标定点及其邻近的数个标定点所组成的边界线的垂直方向上的灰度信息训练特征点的局部纹理模型建立过程如下:
假设训练集中有i幅图像,每幅图像中有j个标定点。对于每个标定点都可以提取一个灰度剖面gij。长度为np个像素,并且以标定点为中心分布。然而并不直接对灰度剖面进行处理,而是处理它们的标准化的差分值,这样可以保持偏移的相对不变性及灰度尺度上的一致性。
第i幅图像中的第j个标定点的灰度剖面是一个np个元素的向量,记为
于是差分向量的长度为np-1,记为
因此,标准化的差分向量记为
计算出全部训练集中的每个标定点的标准化差分灰度剖面的平均值,记为
协方差记为
每个标定点的灰度剖面均值可以用来进行搜索图像,特别是用来寻找标定点xi到xi+dxi的位移。
步骤4.模型的匹配
本步骤采用了层级机制,使得程序的框架处于松散耦合的状态,开始六个角点的迅速定位为后续所有特征点定位提供了很好的初始化。首先对每一帧图像进行预处理,关于人脸的初始定位,首先通过肤色过滤估计人脸的大体位置,由于移动平台人脸特征点定位跟踪的特殊性,还可以有更强的先验假设:可以预估人脸在图像中出现的位置和大小,并据此调整人脸检测模块的参数,使得检测效率提高。接着在人脸检测的窗口中,利用嘴角和眼角的局部纹理模型快速定位六个角点并投到其形状空间中衡量定位效果。六个角点一般情况下最多仅有一两个不太准确,这时候投到形状空间平滑后的形状便可以分析每个点的定位效果,我们也正是通过这样的策略避免了穷举的全局优化方式,减少了计算量。准确定位了六个角点之后我们通过多核多线程的方式,同步对眼睛和嘴唇进行局部特征匹配及形状平滑,匹配定位过程中引入了边缘约束:即首先针对人脸窗口进行索贝尔边缘提取,然后在最佳匹配的距离中加入索贝尔算子得到的边缘值k,最佳匹配距离
从而改进了搜索过程中的匹配。形状的平滑依靠各自独立的形状模型,这样做的理论根据是人脸的形状分布更准确的来讲是在低维流形上,将局部人脸器官的形状分离出来分别处理,有效的克服了整体形状的非线性分布。眼睛和嘴唇的特征点定位结束后同时可以完成姿态估计,目光估计,唇动分析等工作。接下来,我们通过已经定位的特征点初始化剩余特征点的位置,六个特征点的迅速定位获得了人脸旋转,放缩,平移参数,使得后续人脸所有特征点的初始化非常准确,于是迭代次数可以降低至5-8次。
本步骤的具体流程如下:首先,我们从视频流中获取一帧图像,利用OpenCV进行人脸检测,由于我们的图像默认来自移动设备的前置摄像头,人脸的位置一般在图像中间并且大小是整幅图像的20%~50%,所以人脸检测的参数可以相应做调整,即从中间向四周检测并且窗口大小与图像大小对应,当检测到一个人脸时即可停止检测,返回人脸窗口位置。为了加速人脸检测,也可以采用肤色进行粗略估计,并可通过先验知识设置参数,加快检测速度。人脸检测在程序初始化和在跟踪过程中出现人脸丢失都会进行。
然后,对于检测到的人脸窗口,我们首先进行眼角,嘴角的定位,对于角点的局部搜索,本发明基于前续步骤中建立好的角点局部纹理模型,充分利用LBP金字塔的二值表达形式,将支持向量机学习到的模型参数W进行了近似,将浮点的乘法最终转化成“AND”门操作,实现了角点的快速搜索。我们知道线性支持向量机的训练结果最终模型参数W与特征是同维度的,LBP特征可以表述成二进制的初始模式,所以本发明采用了W二值近似的方法。然而,虽然四层LBP金字塔的局部特征表现很稳定,但是也会经常出现个别点异常的情况,所以,还可以进一步采用检验校正机制。
检验校正的过程为:首先将利用局部特征定位得到的角点位置与六个角点在训练集上的平均形状进行配准,去除旋转,平移,缩放的差异,然后投到角点的形状空间得到一个可容许的形状,该形状把角点检测的误差平均到所有角点,所以,我们希望在局部匹配的角点中挑出异常的一两个点,并用生成形状相应点来代替,由此解决迭代或者穷举方式的全局优化的复杂计算。实验证明这样的方式是非常有效的,六个角点中出现一两个异常点的情况是存在的,这些点与生成形状之间的差距也在所有点中是最大的,实际上形状的平滑在约束形状的同时把个别点的误差平均到每个特征点上了,我们通过形状空间的结果对比实际形状,找到这些点并且用形状空间的点代替,这样的策略就是认为六个点当中大多数点是可信的,只有个别点存在匹配误差,通过可信的点推测不可信的点,即通过其余点结合六个角点的形状模型来修正出错的点位置,从而快速实现角点的形状约束。对于眼角和嘴角六个特征点的定位情况我们每帧都做校验,每个点按状态返回1(匹配)或0(不匹配),将定位结果存放在一个八位二进制数中,当关键角点匹配不好——即在角点平滑的过程中出现了三个点误差较大的时候的时候重新进行人脸检测初始化。
本发明中,人脸的中心靠双眼的中心和嘴中心的一半位置确定。人脸的运动速度根据人脸中心计算一般在几米每秒左右。实际上,人脸在移动平台上前置摄像头中的运动速度远没有摄像头本身受扰动时运动速度快,事实上手持移动平台的运动会相应的引起人脸在图像中的快速运动,关于这一点可以进一步调用的手机中的陀螺仪的功能进行运动补偿校正。人脸的运动相对较小的时候我们适当跳帧处理其他点的匹配,对于六个角点的定位跟踪是每帧都进行的,这样的操作可以进一步加快处理速度同时不失精度。
得到六个角点的位置后,进行人脸姿态的估计,因为初始化的时候人脸是正脸,此时可以测出双眼的距离,眼睛中心到嘴中心的距离,由于人脸旋转或俯仰会相应引起这些距离的变化,通过距离变化能够估计出人脸的姿态。
六个角点的位置决定了左眼,右眼,嘴唇形状匹配的初始化位置,由于模型独立训练,彼此之间可以进行并行计算,充分利用移动平台的计算资源,初始化的位置基本接近目标,所以迭代的次数一般五到八次之内结束,另外,还需要跟踪唇动,目光跟踪,这样的松散耦合的软件集成策略也是考虑到后续功能的扩充。其中唇动跟踪相对简单一些,至于目光跟踪,我们可以做到跟踪眼球在眼眶中的位置,结合面部姿态,我们估计了目光方向。
对于每一帧图像,我们都进行六个角点位置的定位,这些点的位置结合平均形状(即训练集中的人脸通过消除角度,平移,缩放后形成的形状平均值)进行对应点配准消除旋转,缩放和平移的差距,于是便得到了仿射变化的参数,将平均形状进行该逆变换的结果便作为人脸其余特征点定位的初始点,这些点实际上也是非常靠近目标点的。对于眼睛和嘴唇的特征点由于已经做过匹配,所以在此直接替换这些点,在此基础之上我们进行多分辨率搜索,多分辨图像形成的过程中我们需要对图像进行高斯平滑,我们可以近似横纵方向平滑核为K=[1/4 2/41/4],这个过程的计算因为可以借助移位运算大大降低了计算量,我们使用三层金字塔,原始图像以图像为中心被裁剪成长宽都是二的整数幂,局部纹理搜索每层迭代上限两次,所以最终迭代次数非常少,效率很高。我们的整个特征点定位是层级机制的,为了不让某些点的误差平均到所有点当中以至于增加了迭代次数,我们利用加权投影,与一般的形状空间的正交投影相比,加权投影利用了搜索过程中的评价信息,使得搜索尽可能跳出局部极值,从而更加准确,更加鲁棒,同时这样的投影方式也很好的保留了眼睛和嘴定位结果。所述评价信息是指特征点在搜索过程中的稳定性描述,我们把每个特征点与目标点马氏距离,以及该马氏距离在迭代过程中的变化,特征点的迭代过程中的位移变化线性组合的倒数定义权重。于是个别点的误差在形状投影中避免平均到所有点上,这里的权重是迭代过程中特征点的稳定性描述,如此利用了搜索过程中的信息,使得搜索尽可能跳出局部极值。这样的加权,让某些逼近目标点的特征点更稳定,这正好很好的保持了之前定位的结果,个别偏差较大的点的形状错误不至于平均到所有点上。
在ASM中,形状子空间模型表示为:
对于任意形状x,在ASM形状子空间中找到一个与x相似的x'。因为形状空间是正交分解的,所以x'是点x在形状子空间的正交投影,则点x'在形状子空间中的参数bt为:
ASM用正交投影对搜索中的中间形状进行校正,对形状中的所有点一视同仁,于是个别点的误差会平均到所有点上,增加了迭代次数,降低了收敛速度。其实,搜索过程中的信息如某点与目标点的相似程度,或者某点在迭代过程中稳定性描述等信息可以帮助我们解决上述问题,对于正交投影通过引入搜索过程中的评价信息形成加权投影。
ASM中的形状x'是形状x在解空间中欧式距离最近的形状,也就是最小化
dsti=(x-x')T(x-x')
我们采用加权投影改进ASM的正交投影,最小化dsti=(x-x')Tw(x-x'),其中
——当前点和目标点的相似程度的度量,与局部模型有关。
为了尽量避免搜索中的局部极值,我们定义了权重的敏感度,
l=max(|w2i-w2(i-1)|/w2i,|w2i-w2(i+1)|/w2i)
对于较大权重进行去噪处理,将相邻两点的权重均值赋予给它。眼睛,嘴,鼻子,外轮廓空间分布是不连续的,所以我们不同器官得分别处理。
接下来,我们在解空间中求使得dsti=(x-x')Tw(x-x')最小的点。
对b求导,并令其等于零,得到
即得到方程组
所以
在跟踪的过程中,我们很好的利用了帧与帧之间的关系,通过光流法和卡尔曼滤波对六个角点的位置信息进行了估计,能够算出下一帧人脸特征点出现的位置,同时也测出了人脸中心的运动速度,速度信息可以用来开发一些靠脸部运动控制的小游戏。
在Andriod平台上,我们对本方法进行了实验测试:包括对单帧图像、摄像头实时数据流和拍摄好的视频流进行测试,测试的硬件为三星I9300智能手机。实验结果显示,在三星I9300上,每帧的人脸特征点定位跟踪时间都小于40ms,完全达到了实时的目标。
本发明方案所公开的技术手段不仅限于上述实施方式所公开的技术手段,还包括由以上技术特征任意组合所组成的技术方案。