推广 热搜: 楼市  房产   

面部识别的工作原理–第1部分-【机器视觉原理篇】

   2020-04-08 机器视觉公众号Zbigniew2460
核心提示:这篇文章将揭开机器视觉-面部识别的神秘面纱,并以清晰的方式介绍其一般工作原理。特别在过去的5年左右的时间里,人脸识别的性能有了巨大的提高。我将按照大多数面部识别技术中采取的步骤来分解并逐一讨论每个步骤:人脸检测和对齐>人脸代表>模型训练>识别
机器视觉-报道 | 项目作者:Zbigniew


面部识别

这篇文章将揭开面部识别的神秘面纱,并以清晰的方式介绍其一般工作原理。特别在过去的5年左右的时间里,人脸识别的性能有了巨大的提高。我将按照大多数面部识别技术中采取的步骤来分解并逐一讨论每个步骤:人脸检测和对齐>人脸代表>模型训练>识别




“面部识别”,这是一个热门话题!几乎每周,它就以一种或另一种方式出现在新闻上。但是您是否想知道这项技术如何工作?直到现在它才成为如此热门的话题,而十年前却没有多少人关心它呢?


在这篇文章中,我希望揭开面部识别的神秘面纱,并以清晰的方式介绍其一般工作原理。我特别想解释一下为什么在过去的5年左右的时间里,人脸识别的性能有了巨大的提高。


我将按照大多数面部识别技术中采取的步骤来分解这篇文章,并逐一讨论每个步骤:

  1. 人脸检测和对齐

  2. 人脸代表

  3. 模型训练

  4. 识别


预告片

1.人脸检测和对齐


任何(知名的)面部识别技术的第一步都是检测图像/视频中面部的位置。此步骤称为人脸检测,不应与实际的人脸识别相混淆。一般来说,人脸检测对于人脸识别而言是一项更为简单的任务,并且在许多方面都被认为是已解决的问题。

有很多人脸检测算法。Viola-Jones算法曾经是一种流行的算法,尤其是在CPU和内存已不再是当今的时代,因为它具有令人印象深刻的速度。然而,此后已经开发了更加精确的算法。本文[2]在各种条件下对其中的一些进行了基准测试,“ Tiny Faces Detector[3]”( 于2017年在世界级的计算机视觉和模式识别会议上发布[4],可在此处下载代码[5])排在首位:


人脸表

人脸检测由Tiny Face Detector执行。(图片取自论文网站

人脸检测算法的工作原理超出了本文的范围。在这里,我想着重于实际的面部识别,并假设面部已经位于给定的图像上。

一旦检测到脸部,下一步(常规)是旋转和缩放脸部,以使其主要特征与其他检测到的脸部特征或多或少地位于同一位置。理想情况下,您希望脸部以嘴唇直接注视着您,并且眼睛的位置与地面平行。脸部对齐是非常重要的一步,非常类似于清理数据(对于那些在数据分析中起作用的对象)。这使得进一步处理变得更容易执行。


人脸表

2.人脸表示


     当我们拥有一张干净的脸部图片时,下一步就是提取它的表示形式。机器的表示形式(通常也称为  
签名)是事物的描述/摘要,其形式可以被其处理和分析。例如,在处理面部时,通常将面部表示为数字向量。最好的解释方法是一个简单的例子。


假设我们选择用二维向量表示一个面部:第一个维度表示眼睛之间的距离,第二个维度表示鼻子的宽度。我们有两个人,爱丽丝和鲍勃,以及他们每张面孔的照片。我们检测并对齐这些照片中的两个脸部,得出爱丽丝的眼睛之间的距离为12像素,鲍勃的眼睛之间的距离为15像素。同样,爱丽丝的鼻子的宽度是4像素,鲍勃的鼻子的宽度是7像素。因此,我们具有以下两种表示形式:


因此,例如,爱丽丝的脸由矢量(12,4)表示–第一个维度存储眼睛之间的距离,第二个维度存储鼻子的宽度。Bob的脸由矢量(15,7)表示。


当然,一张人的照片不足以使机器获得对人脸的可靠表现/理解。我们需要更多示例。因此,假设我们抓取了每个人的3张照片,并从每个人中提取了代表。我们可能会提出以下向量列表(请记住此列表,因为在稍后的文章中我将使用这些数字来解释更多概念):

 


对于机器而言,用这样的数字表示面孔比处理原始图片要容易得多–机器与我们不同!


现在,在上面的示例中,我们使用了两个维度来描述一张脸。我们可以轻松地增加表示的维数以包含更多功能。例如,第三维可以代表眼睛的颜色,第四维可以代表皮肤的颜色,依此类推。一般而言,我们选择用来描述每个面孔的尺寸越多,我们的描述就越精确。并且我们的描述越精确,我们的机器就越容易执行面部识别。在当今的面部识别算法中,看到具有128多个维度的矢量并不少见。


让我们谈谈制图表达中使用的面部特征。在上面的示例中,我选择了眼睛之间的距离和鼻子的宽度作为特征,这是一个非常粗糙的示例。实际上,著名的面部识别算法使用“低级”功能。例如,在1990年代后期,人脸识别算法被发布,该算法考虑了脸部每个像素周围的梯度方向(使用  局部二进制模式(LBP)[6])。也就是说,对每个像素进行分析,以查看与相邻像素相比,它的亮度更高或更暗。因此,像素的亮度/暗度是用来创建面部表示的特征。(您会看到它是如何工作的:每个像素位置的亮度/暗度得分相对不同,具体取决于人的脸部结构)。


也已经提出了针对面部识别算法的其他较低级特征。有些解决方案实际上使用了混合方法,即它们使用了多个低层功能。2018年有一篇有趣的论文(M. Wang和W. Deng,“ Deep Face Recognition:A Survey [7]”,arXiv预印本)总结了面部识别算法的历史。这张纸上的图片显示了选择用于面部识别的功能的演变:

面部识别历史


请注意,根据所使用的表示类型,面部识别算法(在LFW数据集上标有基准)的准确性如何随时间增加?还注意到上面描述的LBP算法在1990年代后期问世吗?它的准确性得分约为70%。


您在图表的最上方看到了什么?当然,深度学习! 深度学习总体上改变了计算机视觉和AI的面貌。但是,它如何使面部识别技术发生革命性的变化,以至于如今它已经达到了人类水平的精度?关键区别在于,无需机器手动选择功能(也称为“手工功能”,即当您说:“让我们使用像素亮度作为功能”时),而是让机器决定应使用哪些功能。换句话说,机器会自己生成表示。您建立一个神经网络并对其进行训练,以为您提供描述面孔的向量。您可以通过该网络放置任何面孔,最后将获得引导。


但是向量中的每个维代表什么?好吧,我们真的不知道! 我们将必须逐步分解用于查看其内部运行情况的神经网络。 由Facebook开发的算法DeepFace[8](您可以在上图中看到它)看到了128个维的向量。但是考虑到所使用的神经网络具有1.2亿个参数,将其分解以查看向量中的每个维究竟代表什么可能是不可行的。但是,重要的是该策略有效!而且效果非常好。


3.模型训练


现在是时候进行下一步:模型训练。这是我们在一个人的面部表情列表上训练分类器(一种对事物进行分类的算法)的步骤,以便能够识别这些人的面部表情的更多示例。

让我们与朋友爱丽丝(Alice)和鲍勃(Bob)一起回到示例中来解释这一步骤。还记得我们之前提出的六张面孔矢量表吗?好吧,这些矢量可以绘制在二维图上,如下所示:



面部识别图

人脸表示的散点图(度量单位是像素;在此生成的图)


请注意,爱丽丝和鲍勃的表述如何彼此聚集(以红色显示)?左下的数据点属于爱丽丝,右上的数据属于鲍勃。现在,机器的工作是学习区分这两个集群。通常,为此使用众所周知的分类算法,例如SVM[9]

如果数据中存在两个以上的集群(即,我们在数据中与两个以上的人打交道),则分类器将需要能够处理此问题。然后,如果我们在更高的维度(例如128+)上工作,则算法也需要在这些维度上运行。



4.识别


识别是面部识别过程中的最后一步。给定一张新的脸部图像,将为其生成一个表示,分类算法将提供一个分数,说明其与最近的集群的接近程度。如果分数足够高(根据某个阈值),则面部将被标记为已识别/已识别。

因此,在我们的示例案例中,假设出现了一张新照片,上面有一张脸。我们将首先生成它的表示形式,例如:(13,4)。分类算法将采用此向量,并查看其最接近的群集–在这种情况下,它将是爱丽丝的群集。由于此数据点非常接近聚类,因此还将生成较高的识别分数。下图说明了此示例:



人脸代表图
人脸表征的散点图。绿点代表将被归类为爱丽丝的新面孔


此识别步骤通常非常快。 而且其准确性在很大程度上取决于前面的步骤-其中最重要的是第二步的质量(生成面部表情的步骤)。



结论


在这篇文章中,我描述了鲁棒的面部识别算法所采取的主要步骤。然后描述每个步骤,并使用示例用例来说明这些步骤背后的概念。面部识别技术的重大突破出现在2014年,当时深度学习被用于生成面部表情,而不是手工特征技术。结果,面部识别算法现在可以达到接近人类水平的精度。


备注:

[1]:https://en.wikipedia.org/wiki/Viola%E2%80%93Jones_object_detection_framework

[2]:https://ieeexplore.ieee.org/abstract/document/8272759/ 

[3]:https://www.cs.cmu.edu/~peiyunh/tiny/

[4]:https://en.wikipedia.org/wiki/Conference_on_Computer_Vision_and_Pattern_Recognition 

[5]:https://github.com/peiyunh/tiny 

[6]:https://en.wikipedia.org/wiki/Local_binary_patterns 

[7]:https://arxiv.org/pdf/1804.06655.pdf 

[8]:https://research.fb.com/publications/deepface-closing-the-gap-to-human-level-performance-in-face-verification/ 

[9]:https://en.wikipedia.org/wiki/Support-vector_machine

参考链接:https://zbigatron.com/how-facial-recognition-works-part-1/


本文为机器视觉报道,转载请联系本公众号获得授权!


 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类行业资讯
推荐图文
推荐行业资讯
点击排行
网站首页  |  服务条款  |  网站地图  |  排名推广  |  违规举报  |  粤ICP备15041497号