发明内容
本发明的目的是克服现有技术中存在的不足,提供一种基于结构化模型的人脸检测方法,该方法在检测的时候可以根据样本进行自适应的调整。
本发明所提出的一种基于结构化模型的人脸检测方法包括如下步骤:
步骤1,对于图像数据库,手工标定含有人脸和不含有人脸的图像作为训练样本,含有人脸的图像为正样本{Ia,Ha},不含有人脸的图像为负样本{Ib},其中,Ha为训练正样本Ia中人工标定出的人脸配置;
步骤2,对所述正样本中的各个部件按照其表象特征进行聚类,得到人脸各个部件的若干子类,所述人脸所在的位置,人脸各个部件所在的位置及各个部件的子类组成一人脸配置H,其中,H={h0,h1,h2,...,hN},h0为人脸所在的位置;hi={li,ti}为人脸第i个部件所在的位置,li表示第i个部件所在的位置坐标,其包含该部件的左上角坐标(xi,yi),高度和宽度;ti为第i个部件所属子类的标签;
步骤3,建立融合了人脸全局和部件的表象特征,以及全局与部件之间的空间关系的结构化人脸检测模型
步骤4,利用结构化支持向量机的参数学习方法在所述步骤1手工标定的训练样本集上学习得到所述结构化人脸检测模型的最优参数,从而得到最优结构化人脸检测模型;
步骤5,输入待检测图像,根据所述最优结构化人脸检测模型,利用能量目标函数来寻找所述待检测图像中最优的人脸配置H*;
步骤6,对于所述数据库中的每一幅图像,通过手工标定得到带有人脸位置和身体关节点的训练样本,用于产生描述身体的短语;
步骤7,根据所述短语对应的训练样本,利用常用的形变部件模型训练基于短语的身体检测器,其中,每个短语对应一个身体检测器;
步骤8,将所述待检测图像与上述训练得到的每一个基于短语的身体检测器进行匹配,得到检测到的短语位置及其相应的匹配分数;
步骤9,基于上述得到的身体检测器的检测结果估计人脸位置;
步骤10,利用结构化的身体上下文模型融合每个身体检测器检测得到的身***置与所述最优结构化人脸检测模型检测得到的人脸位置,得到最终的检测结果。
本发明同时建模全局人脸,人脸的部件和全局人脸与部件人脸的空间关系,对人脸的每一个部件引入子类的概念,从而将最终可能表示的人脸组合达到指数级别。在利用模型检测的时候,通过优化一个目标函数来自动的求解最佳的部件位置和部件子类别,从而实现了自适应的人脸检测。为了学习模型的参数,本发明利用结构化支持向量机对模型的参数进行学习,对人的身体和人脸相对位置的空间关系进行建模,利用线性回归估计人脸位置;使用结构化的上下文模型来建模结构化人脸检测结果和身体的检测结果,推断最终的检测结果。本发明方法可以提高人脸检测精度,具有对遮挡,形变,姿态,光照等复杂变化下的鲁棒性,其检测精度高,适应范围广。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
图1是本发明基于结构化模型的人脸检测方法流程图,如图1所示,所述基于结构化模型的人脸检测方法包括如下步骤:
步骤1,对于图像数据库,手工标定含有人脸和不含有人脸的图像作为训练样本,含有人脸的图像为正样本,不含有人脸的图像为负样本,其中,对于正样本的标定包括标定整体的人脸位置和人脸的各个部件的位置。
步骤2,对所述正样本中的各个部件按照其表象特征(比如HOG特征)进行聚类,得到人脸各个部件的若干子类,所述人脸所在的位置,人脸各个部件所在的位置及各个部件的子类组成一人脸配置H,其中,H={h0,h1,h2,...,hN},h0为人脸所在的位置;hi={li,ti}为人脸第i个部件所在的位置,li表示第i个部件所在的位置坐标,其包含该部件的左上角坐标(xi,yi),高度和宽度;ti为第i个部件所属子类的标签。
所述聚类可使用现有技术中常用的聚类算法,比如K-均值、谱聚类等聚类算法。
在本发明的一实施例中,各个部件的子类集合中的子类个数设置为4。
步骤3,建立融合了人脸全局和部件的表象特征,以及全局与部件之间的空间关系的结构化人脸检测模型
所述结构化人脸检测模型
分为两个层次,第一层为全局的人脸表象模型,用来表示人脸的全局结构特征;第二层为人脸各部件的表象模型,用来表示人脸的纹理细节。除此之外,本发明对人脸各部件的表象模型与全局的人脸表象模型之间的空间关系做一个约束,那么所述结构化人脸检测模型
就可以分解为:
其中,
表示全局的人脸表象模型,其具体为线性分类器模型,参数为向量w
r,用于区分全局人脸与非人脸的表象特征;
表示人脸各部件的表象模型,也为线性分类器模型,其参数为向量w
p,用于区分人脸部件与非人脸部件的表象特征;
表示全局人脸与人脸各部件之间的空间关系模型,也为线性分类器模型,其参数为向量w
s,用于描述人脸的空间关系约束。其中,
由分别用于指代一系列的人脸部件的子模型(也为线性分类器模型)组成,其可以进一步地表示为:
其中,
为用于指代第i个部件的表象的子模型,其参数为向量
用于区分该部件与非该部件的表象特征,N是部件的个数。
考虑到对于人脸的每一个部件,一个简单的模型不足以对其进行详细的描述,比如,即使是同一个部件“鼻子”也有各种各样的形状,即使是对于同一个部件“眼睛”,睁眼和闭眼也有不同的表象,因此需要对每一个人脸部件建立子类集合。而且,每个部件的子类别都可以进行偏移,从而可以根据样本进行自适应的调整。设定K为每一人脸部件可能包括的子类数目,令
表示第i个部件的第j个子类,则
可分解为:
其中,“|”表示选择其中之一的操作,也就是说,在对某一部件进行检测时,
中有且仅有一个该部件的子类会被利用;K是部件的子类个数。
所述部件的表象模型
中包含N个部件,每一个部件包含K个子类,则对于部件的选择就存在K
N个可能的组合,这样所述结构化人脸检测模型
的变化性就能够达到指数级,也就是说,本发明的结构化人脸检测模型
可以表述K
N种不同的人脸配置,因此在实际的人脸检测中有很大的灵活性,可以包含真实场景中人脸的各种各样的变化。
此外,由于人脸部件本身的位置并非是一成不变的,因此,应当允许每一个部件可以进行偏移,从而提供更加丰富的变化。但是同时人脸部件又不能随意地移动,因此,本发明对每一个人脸部件在人脸上的位置进行约束,并针对部件所在区域与人脸所在区域之间的空间关系建立了空间关系模型
为了使得整个空间关系模型是树形的,本发明只对每个部件与全局人脸之间的空间分布关系进行建模,而忽略不同部件之间的相对位置关系。这样,全局人脸与人脸各部件之间的空间关系模型
可以分解为:
其中,
表示第i个部件与全局人脸之间的空间关系模型(也为线性分类器模型),
为
的第j个子类,“|”表示选择其中之一的操作。
的参数记为向量
用于描述该部件子类的形变。
步骤4,利用结构化支持向量机的参数学习方法在所述步骤1手工标定的训练样本集上学习得到所述结构化人脸检测模型的最优参数,从而得到最优结构化人脸检测模型;
正如上文中提到的,所述训练样本集包含两个部分:(1)正样本{Ia,Ha},其中,Ha为训练正样本Ia中人工标定出的人脸配置;(2)负样本{Ib},其中,Ib中确保没有人脸出现,也就是说,基于Ib产生的任何配置实际上都不是人脸。
为了保证所有正样本人脸配置的匹配分数都大于1,而负样本配置的匹配分数都小于-1,本发明采用如下的结构化的支持向量机对于所述结构化人脸检测模型的最优参数进行学习:
其中,ξ
a,ξ
b分别表示基于给定的模型参数w,对于正负训练样本的惩罚项,分别大于等于0;C为正则项,其为一经验值,比如可以为0.06;H
b为训练样本I
b中人工标定出的配置,Φ(I
a,H
a)为表象特征Φ
a(I,l
0)、Φ
a(I,l
i)与空间描述特征
的串联,所述表象特征Φ
a(I,l
0)、Φ
a(I,l
i)比如可以为HOG特征,所述空间描述特征
定义为(dx,dy,dx
2,dy
2),用来描述l
i与
的差异,其中,dx和dy为l
i相对于定位点
的移动距离,即
在学习参数时,首先分别对所述全局的人脸表象模型
和人脸各部件的表象模型
基于所述结构化的支持向量机独立进行模型参数学习,从而得到所述全局的人脸表象模型
和人脸各部件的表象模型
的最优参数;然后将所述全局的人脸表象模型
和人脸各部件的表象模型
的最优参数作为参数学习的初始值,再对所述结构化人脸检测模型
基于所述结构化的支持向量机进行模型参数学习,从而得到所述结构化人脸检测模型
的最优参数。
步骤5,输入待检测图像,根据所述最优结构化人脸检测模型,利用能量目标函数来寻找所述待检测图像中最优的人脸配置H*;
为了使得下文中对于最优人脸配置的描述更好理解,首先需要解释的是,对于某一个人脸配置H,该人脸配置与所述结构化人脸检测模型
做匹配得到的匹配分数为
其中,I为待检测样本;l
0为人脸在所述待检测图像中的位置;
为所述人脸配置H与所述全局的人脸表象模型
的匹配分数;
为所述人脸配置H与所述人脸各部件的表象模型
的匹配分数,
为所述人脸配置H与所述空间关系模型
之间的匹配分数。进一步地,
和
可分解为每个部件相对应的匹配分数之和:
其中,N为部件的个数,ti为第i个部件的子类别。
为了提高检测和训练模型的效率,本发明假设所有的匹配分数都遵循如下所示的线性形式:
其中,
和
分别为模型
和
的参数;Φ
a(I,l
0)、Φ
a(I,l
i)为对应区域的表象特征,比如可以为HOG特征,
为空间描述特征,定义为(dx,dy,dx
2,dy
2),用来描述l
i与
的差异,其中,dx和dy为l
i相对于定位点
的移动距离,即
l
i为在某一人脸配置H中第i个部件的实际位置,
为第i个部件的第t
i个子类在
中的定位点坐标,即该第i个部件的第t
i个子类本来应该出现的位置坐标,其值为相对于l
0的坐标值。
由于上述所有的匹配分数表达式都是线性的,因此,所述待检测图像某一配置H最终的匹配分数可等价为下面的简单形式:
其中,模型参数w由
和
串联得到,Φ(I,H)为所有表象特征按照相同的方式进行的串联。
接下来,该步骤中本发明使用标准的滑窗算法(滑窗的大小比如可为80*80)对所述待检测图像中的每一个位置进行遍历扫描。对于每个滑窗,使用能量目标函数找到其多个人脸配置中匹配分数最高的那个人脸配置,并将该人脸配置的匹配分数作为该滑窗的匹配分数,匹配分数最高的滑窗所对应的人脸配置就认为是人脸所在的位置。
所述能量目标函数表示为:
也就是说,根据所述步骤5得到的最优的人脸配置H*满足下式:
上式中,如果全局人脸的位置,即最优滑窗位置固定之后,对于某一个滑窗,每一个部件的匹配分数都是相互独立的,因此可以对H*中的每个元素分别进行优化:
其中,hi包含部件子类的标签ti和部件所在的位置li。对所有的部件及其子类进行遍历,就可以找到最优的人脸配置对于单个滑窗来说式(16)的计算比较耗时,但是在同一个图像尺度上对所有滑窗进行计算时却可以加快效率,且其计算复杂度与图像的大小成线性比例关系。
在实际应用中出现人脸的图片中大都包括有人的身体,如果能将人的身体与人脸的关系加以利用,则检测效果就会进一步加强。下面介绍如何检测身体并利用身体检测信息作为上下文来增强人脸检测效果。
步骤6,对于所述数据库中的每一幅图像,通过手工标定得到带有人脸位置和身体关节点的训练样本,用于产生描述身体的短语;
对于人的身体的检测问题本身就是很困难的,本发明只训练一个有助于人脸检测的身体检测模型,而并不一定要针对身体检测本身有很好的性能。
在本发明的身体检测模型中,采用短语模型对人的身体进行建模。由于人身体变化的多样性,检测人的身体就变得非常困难,但是加上这样的短语限制之后,只检测特定的一种身体配置(比如“在肩膀上的左侧脸”、“正面脸部和上半身”等,身体检测就变得简单了很多,这里把特定的身体配置作为一个短语。进一步地,所述短语是根据对上述人工标定的训练样本中人的身体关节点进行聚类算法而得到的。在本发明的一实施例中,采用了43个短语模型对人的身体进行建模。
步骤7,根据所述短语对应的训练样本,利用常用的形变部件模型训练基于短语的身体检测器,其中,每个短语对应一个身体检测器;
步骤8,将所述待检测图像与上述训练得到的每一个基于短语的身体检测器进行匹配,得到检测到的短语位置及其相应的匹配分数;
步骤9,基于上述得到的身体检测器的检测结果估计人脸位置;
在该步骤中,采用一个简单的线性回归模型来根据所述身体检测器预测得到人脸的位置。
对于每一个基于短语的身体检测器,都相应有一个全局意义上的模板和具体的n个部件模板,这样就可以构建一个2n+3维的向量v=(w0,x0,y0,x1,y1,…,xn,yn),其中,w0为短语模型检测到的短语所指向的区域的宽度,x0,y0为检测到的短语的全局模板的左上角位置,x1,y1,…,xn,yn为检测到的短语中每一个部件模板的左上角位置。将该向量放置入一个线性的回归模型中就可以估计得到人脸所在区域的左上角坐标和右下角坐标。
步骤10,利用结构化的身体上下文模型融合每个身体检测器检测得到的身***置与所述最优结构化人脸检测模型检测得到的人脸位置,得到最终的检测结果。
该步骤是对于检测结果进行去重的过程。由于所述结构化人脸检测模型检测得到的人脸位置和所述推断得到的人脸位置可能为同一人脸,为了避免检测结果的重复性,需要对这两个模型进行融合,这也就是本发明中提到的结构化的上下文模型。
所述步骤10进一步包括:
步骤101,分别使用所述最优结构化人脸检测模型和所述身体检测器以滑窗的方式扫描所述待检测图像I,检测得到所有可能存在的D个人脸B={b1,b2,…,bD},其中bi={ai,si,ci},ai为人脸所在的位置,si为对应的匹配分数,ci为相应的模型ID号。为集合B设置一个二值化的标签表T={t1,t2…,tD},其中,若ti=1则表示对应的bi为人脸应当被保留,否则不是人脸应当去除。
步骤102,为了能够融合身体检测器周围的一些检测结果信息,本发明对所述身体检测器周围那些与当前身体检测器的检测结果有重叠的检测结果进行了编码,并将其融入bi的特征当中,定义为xi。xi是一个3M+2维的向量,其中,M为所有检测模型的总个数,xi的前两维为人脸配置与所述结构化人脸检测模型之间的匹配分数或者待检测图像与所述基于短语的身体检测器之间的匹配分数si和一个常数项1,其余维度定义如下:对于每一个bj,j≠i,如果bi和bj存在重叠,则将第3ci维设置为重叠率,该重叠率为bi和bj的交集除以其并集,将第3ci+1维设置为bi和bj之间的尺度比例,将第3ci+2维设置为bj的匹配分数,其余没有发生重叠的维度设置为0。如果存在某一个ID号的检测模型的多个检测结果同时与bi有重叠,则取其中重叠率最大的那一个来进行编码。
步骤103,建立一个以
为参数的线性模型对所述特征x
i进行建模,以决定b
i是否应该被保留:即如果
则将b
i上的标签t
i设置为1,否则设置为0,这个过程等同于
其中,如果t
i=1,则Φ(b
i,t
i)=x
i,如果t
i=0,则Φ(b
i,t
i)=-x
i。简单起见,若对于每一个b
i标签的设定都是相互独立的,则标签表T可以用
推断出来,其中,w
c为将
连接得到的一个长向量。
步骤104,在理想情况下,w应当确保正确的检测结果H具有较高的分数
而错误的检测结果的分数则较低。利用训练集{I
n,B
n,H
n},使用下式所示的结构化支持向量机可以鉴别性地学习出来w
c:
其中,ξn为松弛变量,其大于等于0;Tn为第n个训练样本In中的任意一种检测结果Bn的标签;L(Tn,Hn)是用来衡量不同检测结果之间的损失的损失函数,在本发明的一实施例中,其定义为常用的Hamming损失函数。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。