现在的位置: 首页 > 综合 > 正文

基于图片距离实现相似人脸的查找

2018年02月20日 ⁄ 综合 ⁄ 共 2368字 ⁄ 字号 评论关闭

            最近研究了一下人脸识别相关问题,根据自己的理解,目前主流的人脸识别方法大概可分为两种模式:聚类方式和距离方式。

        聚类方式主要提取样本库中同一个人多张相片的共同信息,来为每个人建立一个统计模型,例如:聚类的中心和半径等等,根据信息提取方法的不同,产生的聚类表达形式也不尽相同,广义上来讲,利用支撑向量机、高斯模型、线性投影分析,人工神经网等分类器来实现人脸识别的检测方法,都属于聚类方式来查找人脸。聚类方式查找人脸的共同特征是:同类个体提取的特征应存在相似性,对不同人脸的判断通过其与不同模型的相似性比较来判断。

           用聚类方式来判断人脸可以设置判断阈值,例如:我们可以设置接收阈值为50%,假如测试人脸图片与A类的相似率最高,仅为36%,由于没能超过阈值,因此我们可以认为测试人脸图片不属于A、B、C类中的任何一类。

        从聚类方式的工作方式可以看出,聚类方式对每个个体都需要一定数量的训练样本,这样才能较好地构建出一个模型。但在现实生活中,有些情况可能无法提供足够多的样本来得到一个合格模型,例如通过一张照片在视频中检索特定人物。在这种情况下,聚类方式不太好用,而直接利用距离来判断图片相似度的方法就有用武之地了。

        距离方式直接计算测试图片和样本图片之间的距离来判断二者之间的相似性,它与聚类方式的最大区别在于它不要求同类个体样本在特征提取后必须具备相似性,直观的表达如下图所示:

          由于距离方式不用聚类,因此就不需要计算统计信息,也就对样本的数量没有了必然要求(距离方式本质上还是利用聚类假设:相同的一类应该聚在一起,但它是把每张图片单独看作一个类,只是在判断出结果后,再根据该图片的标签来输出判断结果)。

        距离方式也存在阈值设定问题,究竟两张人脸距离有多近才算是同一个人,这个阈值的选定依托于经验(训练)。

        基于距离识别人脸的著名方法有基于PCA的eigenface,基于LBP的LBPface等等,目前开源组织OpenBR【1】所实现的人脸识别也是基于距离的。

        由于工作需要,自己尝试写了一个基于LBP特征来判断人脸的demo,这里是可执行文件的链接click here(如果看不到,表示还在审核中,请过几个小时再试),能够直观展示基于距离识别人脸的方法。

        软件大致流程如下:首先从图片中检测出人脸(VJ分类器);然后标定人眼位置(这里有很多技术可以利用,如:基于人眼训练的VJ_haar分类器、ASM模型、asef滤波器等等,本人使用了asef滤波器【2】);然后根据人眼位置对人脸进行大小和方向的归一化;考虑到有些人下颚太瘦导致背景出现在照片中,这里用了一个遮罩去除照片左下和右下角的图像,而后对归一化后的人脸进行光照影响消除(这里使用了Tan/Triggs提出的处理方法【3】);再对图片提取LBP特征。

            为了提高识别的鲁棒性,需要对LBP特征图片做一次“Pooling”,这里采用了最传统的方法:将图片划分为7×7共49个格子,对每一个格子中的LBP特征建立统计直方图。

        这样做的目的在于适当放松对图片一致性的要求,当人脸照片发生小尺度的角度、平移变化时,也可得到比较相似的LBP特征。

          最后以每个格子为单位,计算对应格子之间的距离,距离计算的方法有很多种,如:correlation、欧式距离、Chi-Square等等,这里采用了Chi-Square距离,这样就得到了每个格子的Chi-Square距离,考虑到每块格子对人脸识别的贡献度不同,在计算总距离时应考虑不同加权,一种经典的加权方法如下图所示:

          其中白色、浅白色、灰色和黑色的权值分别对应4、2、1、0,每个格子计算出的距离乘以对应的权值后加到一起,就得到了最终的距离。这里的权值方式不是唯一的,要针对自己的图片来选择。

        最后是定义判断阈值,这里需要根据经验来设定,例如:当距离超过6000则认为不属于同一个人。为了表现得更直观,可以将结果映射为概率,映射的方法有很多,如分段函数:当 distance<x 时,认为相似概率为1,当x<distance<y时,将相似概率线性映射到(0,1)区间,当distance>y时,认为相似概率为0;也可以使用S型函数等来实现映射。

        软件的界面如下。如果选择清除缓存为No,点击[载入参考目录]时就会直接加载上次采样后的样本图片(前提是对应的缓存目录有样本),如果选择Yes,则重新采样。

        

            选择好参考目录后,会自动加载目录中的人脸照片(能识别常规的bmp、jpg、png等图像,但要求后缀名必须小写),软件会自动给出人眼位置,如果有误差可自行调整。

          而后选择测试视频,选好的测试视频会在软件下发显示出第一帧。

        设定好采样间隔和阈值后,就可以识别了(间隔可选择0~10之间的整数,表示隔多少秒采样1帧,0表示每帧都采样;阈值可选择0~1之间的小数,与概率对应),识别的结果会保存在对应文件夹中。

Reference:

【1】OpenBR: Open Source Biometric Recognition,http://openbiometrics.org/

【2】ASEF: Average of Synthetic Exact Filters,David S.Bolme, Bruce A.Draper, etc.CVPR2009.

【3】Enhanced Local Texture Feature Sets for Face Recognition under Difficult Lighting Conditions, XiaoyangTan, Image
Processing, IEEE Transactions on 2010.

抱歉!评论已关闭.