《Master Opencv…读书笔记》非刚性人脸跟踪 III

上篇文章中,我们获得了人脸的各种表情模式,也就是一堆标注点的形变参数。这次我们需要训练一中人脸特征(团块模型),它能够对人脸的不同部位(即“标注点”)分别进行描述,作为后面人脸跟踪、表情识别的区分依据。本次博文的主要内容:

a.介绍下人脸特征检测器大概有哪些类别

b.详细介绍随机梯度法,并介绍在人脸团块特征提取时的应用

c.为了提高训练/跟踪的健壮性,利用上一讲对输入的图像进行大小、角度的约束

人脸特征检测器综述

人脸特征检测与普通的物体检测非常相似,opencv工具也为人脸检测提供了一系列复杂功能接口。但它们的不同之处,大致可以从以下三个维度进行考虑:

1.精确性与健壮性程度(Precisionversus robustness)

对于普通的目标检测,只是从图像中找到目标对象的大致位置。而对于人脸特征的检测需要对特征的位置进行高度精确的估计。少量像素位置的错误估计也许对于普通目标跟踪无关紧要,但是对于人脸特征跟踪这意味着后面无法区分人脸的表情(微笑与皱眉)。

2.数据支撑程度(Ambiguityfrom limited spatial support)

大家普遍认为,对于普通的目标检测,它的ROI区域包含了足够多的图像信息,我们可以通过它非常稳定的从图像中剔除非目标区域。但是人脸特征的情况则不容乐观,图像中包含人脸特征的区域非常有限,,少量的数据不足以支撑人脸特征的结构表达。比如人脸轮廓的特征,非常容易和其他包含强烈边缘的图像块混淆。

3.计算复杂度(Computationalcomplexity)

普通的目标检测侧重寻找图像中所有符合要求的目标对象实体的位置,而人脸跟踪则需要知道每个脸部特征的位置(通常包含20-100个特征点才能描述人脸,可认为是几何特征点),有效评估每个人脸特征点检测的计算能力对于实时的人脸跟踪非常重要。

由于以上差别,经常有普通的目标检测算法被用于人脸跟踪,但是这种做法并不被业内人事认可,毕竟它们无法精确表达人脸结构。

这次我们将用线性的图像团块来表达人脸特征,虽然它的构造非常简单,通过精心设计它的学习过程,我们了解到这种表达方式在人脸跟踪时能合理的估计人脸特征的位置。此外,由于设计简单,它的计算速度非常快,使得实时人脸跟踪成为了可能。

而在特征检测器训练算法主要有两类:侧重于描述对象外观结构的算法(generative)和侧重于从多个物体中区分出目标对象的算法(discriminative)【我认为一个尽可能复原整个对象特征,一个仅仅是根据某几个特征来挑选目标】。Generative算法的优点是结果模型通过对特定对象的属性进行编码使得其图像的细节在视觉上可以被观察到,比如特征脸Eigenfaces:。discriminative算法的优点是模型集合的全集包含所有对象实例,直接面向求解的问题,比较代表性的算法SVM:。

(注意:特征脸和支持向量机算法设计的初衷是分类,而不是检测与图像配准。但是这两个算法所运用的数学技巧证明它们可以被运用于人脸跟踪领域)

虽然很多场合上述两种算法都能取得不错的效果,但是本次以图像块对人脸特征进行建模,利用discriminative类型的算法得到的效果更好。接下来就详细介绍这种团块模型(Patch Model)的训练过程.

discriminative patch models

1.是什么patch models?

它是一种特征模版,当用它覆盖在原始图像上进行搜索时,含有人脸特征的区域在该模版上会有强烈的反馈,而不含人脸特征的区域反馈则较弱,可以用如下数学公式表达:

上式中矩阵Ii表示第i幅样本图像,Ii(.)表示手工标注的包含人脸特征的样本区域(TrainingPatch)的范围(之前是手工标准的几何特征点,现在由点化面啦~);矩阵P就是团块模型(Patch Model),其长和宽分别为w和h;矩阵R表示理想的反馈结果。

我们本节的目标是像来训练团块特征模版(为了完整描述人脸所有细节特征,通常需要多个这样的团块特征模版,因此称为correlation-basedpatch models)。这里也就是利用最小二乘法从上式中求解矩阵P(矩阵R和I是不变量,P是自变量)。上述公式表达了在所有经特征模版P扫描过的区域而产生的响应图像,平均来说最接近理想响应图像(二者的差最小)。

那么理想反馈图像R该如何选取呢?最直接的方式,构造一个周围全0而中间非零的矩阵。并且这种做法的前提是假设手工标注的训练样本所包含的人脸特征位于其窗口中央。但是人脸特征在图像中的位置都是手工标注的,因此总是有错误的标注(或者说是偏差)。为了克服这个问题,可以将R设计成一个由中间向外逐渐衰减的函数。这里选取二维高斯分布来表达R,即等价于认为手工标注的错误服从高斯分布。下图为检测人脸左眼眼角的特征模版在手工标注的不同训练样本上产生的不同响应图像,右侧为理想响应图像:

2.如何训练和获取团块模型(stochasticgradient descent)

(1)为什么要用随机梯度下降算法

对于上述公式,如果用最小二乘法求解矩阵P,那它的计算量实在太大。因为问题解的数量和团块模型中像素数量的个数一样多,比如若团块模型的大小为40*40,则方程的解(自变量)的数量将有1600个(维),这么大的计算量对于一个实时跟踪系统是不能忍受的。

比较有效的替代方案是采用随机梯度下降法,该算法将团块模型的解集看成一幅地势图,通过不断迭代获得地势图梯度方向的近似估计,并每次向梯度的反方向前进,直到走到目标函数的极小值(达到阈值或迭代次数上限)。另外,随机梯度法每次随机选取样本,只需要很少的样本就能达到最优解,非常适合实时性要求较高的系统。

上面的三维图仅仅是为了演示,真实的维数为团块模型中像素的数量

(2)梯度下降法理论及算法步骤

做自己的决定。然后准备好承担后果。

《Master Opencv…读书笔记》非刚性人脸跟踪 III

相关文章:

你感兴趣的文章:

标签云: