人脸识别是指通过照片中的人脸来识别和验证身份的问题。
对人类来说,即使在光线变化、人脸因年龄变化或被配饰、胡须遮挡的情况下,这项任务也轻而易举。然而,在最近之前,它几十年来一直是一个具有挑战性的计算机视觉问题。
深度学习方法能够利用非常庞大的人脸数据集,学习丰富而紧凑的人脸表示,使现代模型首先达到,然后超越人类的人脸识别能力。
在这篇文章中,您将了解人脸识别问题以及深度学习方法如何实现超人性能。
阅读本文后,你将了解:
- 人脸识别是一个广泛的问题,涉及识别或验证照片和视频中的人物。
- 人脸识别是一个包含检测、对齐、特征提取和识别任务的过程。
- 深度学习模型首先接近,然后超越了人脸识别任务的人类表现。
使用我的新书《计算机视觉深度学习》来**启动您的项目**,其中包括**分步教程**和所有示例的**Python源代码文件**。
让我们开始吧。

人脸识别深度学习入门
照片来自Susanne Nilsson,保留部分权利。
概述
本教程分为五个部分;它们是:
- 照片中的人脸
- 自动人脸识别过程
- 人脸检测任务
- 人脸识别任务
- 人脸识别深度学习
照片中的人脸
通常需要自动识别照片中的人物。
我们可能希望自动识别照片中的人物的原因有很多。
例如:
- 我们可能希望限制某一个人对资源的访问,这称为人脸认证。
- 我们可能希望确认此人与其ID匹配,这称为人脸验证。
- 我们可能希望为人脸分配姓名,这称为人脸识别。
通常,我们将此称为自动“*人脸识别*”问题,它可能适用于静态照片或视频流中的人脸。
人类可以非常轻松地执行此任务。
我们可以找到图像中的人脸并评论他们是谁(如果已知)。我们可以做得很好,例如当人们年老、戴墨镜、发色不同、看向不同方向等等。我们甚至可以做得非常好,以至于我们能在没有脸的地方找到脸,比如在云朵中。
然而,即使经过60多年的研究,使用软件自动执行此操作仍然是一个难题。直到最近才有所改变。
例如,在照明和/或姿态变化多样的室外环境中获取的人脸图像识别仍然是一个很大程度上未解决的问题。换句话说,目前的系统仍远远未能达到人类感知系统的能力。
——《人脸识别:文献综述》,2003年。
想通过深度学习实现计算机视觉成果吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
自动人脸识别过程
人脸识别是识别或验证照片中人脸的问题。
机器识别人脸的一般问题可以表述如下:给定场景的静态或视频图像,使用存储的人脸数据库识别或验证场景中的一个人或多人
——《人脸识别:文献综述》,2003年。
人脸识别通常被描述为一个首先涉及四个步骤的过程:它们是:人脸检测、人脸对齐、特征提取,最后是人脸识别。
- 人脸检测。在图像中定位一个或多个人脸并用边界框标记。
- 人脸对齐。将人脸标准化,使其与数据库保持一致,例如几何和光度。
- 特征提取。从人脸中提取可用于识别任务的特征。
- 人脸识别。将人脸与准备好的数据库中的一个或多个人脸进行匹配。
一个给定的系统可能为每个步骤都有一个单独的模块或程序,这在传统上是这样的,或者可以将部分或所有步骤合并到一个单一过程中。
“人脸识别手册”一书提供了这个过程的有用概述,如下所示。

人脸识别过程步骤概述。摘自《人脸识别手册》,2011年。
人脸检测任务
人脸检测是人脸识别中非凡的第一步。
这是一个物体识别问题,它要求识别照片中每个人脸的位置(例如,位置)和人脸的范围(例如,用边界框)。物体识别本身就是一个具有挑战性的问题,尽管在这种情况下,它很相似,因为只有一种类型的物体,例如人脸,需要定位,尽管人脸可以千变万化。
人脸是一个动态的物体,其外观具有高度的可变性,这使得人脸检测成为计算机视觉中的一个难题。
——《人脸检测:一项调查》,2001年。
此外,由于人脸检测是更广泛的人脸识别系统的第一步,它必须具有鲁棒性。例如,如果无法首先检测到人脸,则无法识别人脸。这意味着必须在各种方向、角度、光照水平、发型、帽子、眼镜、面部毛发、化妆、年龄等情况下检测到人脸。
作为视觉前端处理器,人脸检测系统还应该能够无论光照、方向和相机距离如何都完成任务
——《人脸检测:一项调查》,2001年。
2001年题为“人脸检测:一项调查”的论文提供了一个人脸检测方法的分类法,大致可分为两大类:
- 基于特征。
- 基于图像。
基于特征的人脸检测使用手工设计的滤波器,它们根据领域深厚的知识搜索并定位照片中的人脸。当滤波器匹配时,它们可以非常快速和有效,但当它们不匹配时,它们可能会大幅失败,这使得它们有些脆弱。
…明确利用人脸知识,并遵循经典的检测方法,其中在基于知识的分析之前导出低级特征。人脸的明显属性,如肤色和人脸几何形状,在不同系统级别被利用。
——《人脸检测:一项调查》,2001年。
或者,基于图像的人脸检测是整体性的,它学习如何从整个图像中自动定位和提取人脸。神经网络属于这类方法。
…将人脸检测视为一个通用识别问题。人脸的基于图像的表示,例如2D强度数组,通过训练算法直接分类为一个人脸组,无需特征派生和分析。[…]这些相对较新的技术通过映射和训练方案将人脸知识隐式地纳入系统。
——《人脸检测:一项调查》,2001年。
多年来(并被许多相机使用)的主导人脸检测方法可能是在2004年题为“鲁棒实时目标检测”的论文中描述的,称为检测器级联或简称为“*级联*”。
他们的检测器,称为检测器级联,由一系列从简单到复杂的人脸分类器组成,并吸引了广泛的研究工作。此外,检测器级联已部署在许多商业产品中,如智能手机和数码相机。虽然级联检测器可以准确地找到可见的直立人脸,但它们通常无法检测不同角度的人脸,例如侧视图或部分遮挡的人脸。
——《使用深度卷积神经网络的多视角人脸检测》,2015年。
有关深度学习人脸检测的教程,请参见
人脸识别任务
人脸识别任务范围广泛,可以根据预测问题的具体需求进行调整。
例如,在1995年题为“人脸的人工和机器识别:一项调查”的论文中,作者描述了三个人脸识别任务:
- 人脸匹配:为给定人脸找到最佳匹配。
- 人脸相似度:找到与给定人脸最相似的人脸。
- 人脸转换:生成与给定人脸相似的新人脸。
他们将这三个独立的任务总结如下:
匹配要求候选匹配人脸图像在系统选择的某些人脸图像集合中。相似度检测除了匹配之外,还需要找到与召回人脸相似的人脸图像,这要求识别系统使用的相似度度量与人类使用的相似度度量紧密匹配。转换应用要求系统创建的新图像与人类对人脸的记忆相似。
——《人脸的人机识别:一项调查》,1995年。
2011年关于人脸识别的书籍《人脸识别手册》描述了人脸识别的两种主要模式:
- 人脸验证。将给定人脸与已知身份进行一对一匹配(例如,*这是这个人吗?*)。
- 人脸识别。将给定人脸与已知人脸数据库进行一对多匹配(例如,*这个人是谁?*)。
人脸识别系统有望自动识别图像和视频中出现的人脸。它可以在两种模式中的一种或两种模式下运行:(1)人脸验证(或身份验证),以及(2)人脸识别(或识别)。
——《人脸识别手册》第1页。2011年。
我们可以将人脸识别问题描述为一种有监督的预测建模任务,它在带有输入和输出的样本上进行训练。
在所有任务中,输入都是一张包含至少一张人脸的照片,最可能是一张经过检测并可能已对齐的人脸。
输出根据任务所需的预测类型而异;例如
- 在人脸验证任务中,它可能是二元类别标签或二元类别概率。
- 在人脸识别任务中,它可能是分类类别标签或一组概率。
- 在相似度类型任务中,它可能是相似度度量。
人脸识别深度学习
人脸识别一直是计算机视觉领域的一个活跃研究领域。
也许人脸识别领域更广为人知和采用的“机器学习”方法之一是1991年题为“使用特征脸的人脸识别”的论文中描述的。他们的方法,简称为“*特征脸*”,是一个里程碑,因为它取得了令人印象深刻的结果,并展示了简单整体方法的能力。
人脸图像被投影到特征空间(“人脸空间”)中,该空间最能编码已知人脸图像之间的变化。人脸空间由“特征脸”定义,这些特征脸是人脸集合的特征向量;它们不一定对应于孤立的特征,如眼睛、耳朵和鼻子。
——《使用特征脸的人脸识别》,1991年。
2018年题为“深度人脸识别:一项调查”的论文对过去近30年人脸识别研究的现状进行了有益的总结,强调了从整体学习方法(如特征脸)到局部手工特征检测,再到浅层学习方法,最后到目前最先进的深度学习方法的广泛趋势。
整体方法在1990年代主导了人脸识别社区。在2000年代初期,手工制作的局部描述符变得流行,局部特征学习方法在2000年代后期被引入。[...] [浅层学习方法]的性能稳步从60%左右提高到90%以上,而深度学习在短短三年内将性能提升到99.80%。
——《深度人脸识别:一项调查》,2018年。
鉴于AlexNet在2012年针对更简单的图像分类问题取得了突破,2014年和2015年出现了大量关于人脸识别深度学习方法的研究和出版物。能力迅速达到接近人类的水平,然后在三年内超越了标准人脸识别数据集上的人类水平表现,考虑到之前几十年的努力,这是一个惊人的改进速度。
人脸识别深度学习领域或许有四个里程碑式的系统推动了这些创新:DeepFace、DeepID系列系统、VGGFace和FaceNet。让我们简要介绍一下它们。
DeepFace是由Facebook AI Research和特拉维夫大学的Yaniv Taigman等人描述的基于深度卷积神经网络的系统。它在2014年题为“DeepFace:缩小与人脸验证人类水平性能的差距”的论文中进行了描述。它也许是使用深度学习进行人脸识别的第一个重大飞跃,在标准基准数据集上取得了接近人类水平的性能。
我们的方法在“野外标记人脸”(LFW)数据集上达到了97.35%的准确率,将当前最先进技术的错误率降低了27%以上,非常接近人类水平的表现。
——《DeepFace:缩小与人脸验证人类水平性能的差距》,2014年。
DeepID,或“*深度隐藏身份特征*”,是一系列系统(例如DeepID、DeepID2等),最初由Yi Sun等人在其2014年题为“从预测10,000个类别中进行深度学习人脸表示”的论文中描述。他们的系统最初与DeepFace非常相似,但随后在后续出版物中通过对比损失训练扩展为支持识别和验证任务。
人脸识别的关键挑战是开发有效的特征表示,以减少个体内差异,同时扩大个体间差异。[...]人脸识别任务通过将从不同身份提取的DeepID2特征拉开来增加个体间差异,而人脸验证任务通过将从相同身份提取的DeepID2特征拉近来减少个体内差异,这两者对人脸识别都至关重要。
——《通过联合识别-验证进行深度学习人脸表示》,2014年。
DeepID系统是首批在任务中实现优于人类性能的深度学习模型之一,例如DeepID2在野外标记人脸(LFW)数据集上达到了99.15%的准确率,这优于人类97.53%的性能。随后的系统,如FaceNet和VGGFace,在这些结果上进行了改进。
FaceNet 由 Google 的 Florian Schroff 等人在其 2015 年的论文“FaceNet:人脸识别与聚类的统一嵌入”中描述。他们的系统当时取得了最先进的结果,并提出了一项名为“*三元组损失*”的创新,该技术允许将图像有效地编码为特征向量,从而通过距离计算实现快速相似度计算和匹配。
FaceNet 直接学习从人脸图像到紧凑欧几里得空间的映射,其中距离直接对应于人脸相似度的度量。[...]我们的方法使用深度卷积网络进行训练,直接优化嵌入本身,而不是像以前的深度学习方法那样使用中间瓶颈层。为了训练,我们使用通过新颖的在线三元组挖掘方法生成的粗略对齐的匹配/不匹配人脸块三元组。
——《FaceNet:人脸识别与聚类的统一嵌入》,2015年。
有关FaceNet的教程,请参见
VGGFace(暂且没有更好的名称)由牛津大学视觉几何组(VGG)的Omkar Parkhi等人开发,并在其2015年题为“深度人脸识别”的论文中进行了描述。除了一个经过更好调整的模型外,他们的工作重点是如何收集一个非常大的训练数据集,并利用它来训练一个非常深的CNN模型进行人脸识别,从而使他们在标准数据集上取得了当时最先进的成果。
…我们展示了如何通过自动化和人工相结合的方式,构建一个非常大规模的数据集(2.6M图像,超过2.6K人)
——《深度人脸识别》,2015年。
有关VGGFace的教程,请参见
尽管这些可能是计算机视觉深度学习领域的关键早期里程碑,但进展仍在继续,许多创新集中在有效训练模型的损失函数上。
有关最新总结,请参阅2018年论文“深度人脸识别:一项调查”。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
书籍
- 《人脸识别手册》,第二版,2011年。
人脸识别论文
- 人脸识别:文献综述, 2003.
- 人脸检测:一项调查, 2001.
- 人脸的人工和机器识别:一项调查, 1995.
- 鲁棒实时目标检测, 2004.
- 使用特征脸进行人脸识别, 1991.
深度学习人脸识别论文
- 深度人脸识别:一项调查, 2018.
- 深度人脸识别, 2015.
- FaceNet:人脸识别与聚类的统一嵌入, 2015.
- DeepFace:缩小与人脸验证人类水平性能的差距, 2014.
- 通过联合识别-验证进行深度学习人脸表示, 2014.
- 从预测10,000个类别中进行深度学习人脸表示, 2014.
- 使用深度卷积神经网络的多视角人脸检测, 2015.
- 从面部部分响应到人脸检测:一种深度学习方法, 2015.
- 使用 GaussianFace 在 LFW 数据集上超越人类水平的人脸验证性能, 2014.
文章
总结
在这篇文章中,您了解了人脸识别问题以及深度学习方法如何实现超人性能。
具体来说,你学到了:
- 人脸识别是一个广泛的问题,涉及识别或验证照片和视频中的人物。
- 人脸识别是一个包含检测、对齐、特征提取和识别任务的过程。
- 深度学习模型首先接近,然后超越了人脸识别任务的人类表现。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。
有趣的帖子,谢谢分享。
谢谢,很高兴你觉得有趣。
非常感谢,非常有帮助。
不客气。
你好 Jason,帖子很棒。目前我正在使用开源库“dlib”来获取人脸嵌入进行人脸识别。现在我想尝试人脸反欺骗。我需要一个训练数据集。我找到了一些开源数据集,但这些网站要求签署协议。有没有不需要任何协议的人脸反欺骗开源数据集?
我不知道,抱歉。
非常有趣,信息量很大。如果允许,我有一个问题。如果我有一个深度学习模型,其检测我人脸一对多识别的准确率为70%。我能否声称,模型从一张图像中无法识别我的概率为30%;然而,如果模型分析我的两张不同照片,无法识别我的概率为9%?
谢谢!
抱歉,我不太明白。
70% 的准确率意味着平均每 10 次预测中会有 3 次错误。
谢谢您的回复,
我暗示的概念类似于掷硬币,我给你举个例子。
假设你有一枚公平的硬币:这意味着它有50%的几率正面朝上,50%的几率反面朝上。假设你掷了三次,这些掷硬币都是独立的。它连续三次正面朝上的概率是多少?答案大约是12%。
我们能否将相同的概念应用于一个准确率为70%的深度学习模型(人脸识别1:多)?
我给模型的输入是同一张脸的三张不同照片。
问题是:模型在识别这三张照片中的人物时给出错误预测的概率是多少?
谢谢
或许可以像你的公平硬币一样,将正确/错误序列建模为二项式概率分布?
连续 3 个错误的结果是 2.7% 左右。
https://stattrek.com/online-calculator/binomial.aspx
如果允许,我有一个问题。我尝试在keras中使用CNN进行人脸识别。
对于LFW数据集…
但是当我将VGG16添加到我的代码中时……我遇到了错误。
我可以把我的代码发给你吗?
这是我在这里回答的一个常见问题
https://machinelearning.org.cn/faq/single-faq/can-you-read-review-or-debug-my-code
先生……人脸识别必须用到数学……所以
....
如果人脸识别需要数学……
那么先生,请您建议我……人脸识别的数学主题应该是什么……
我不同意。
编写 Python 程序不需要数学知识
https://machinelearning.org.cn/faq/single-faq/what-mathematical-background-do-i-need-for-machine-learning
很棒的帖子,谢谢分享。
谢谢!
您好,Jason,这真是信息宝库。您太好了。
我不是程序员或开发人员。我是一位母亲,正在为我成年儿子的照片寻找人脸比较工具。到目前为止还没有成功。您知道有什么可靠的应用程序或专家吗?
谢谢你
嗨,凯瑟琳……虽然我们不能直接回答您的问题,但似乎有很多选择
https://mxface.ai/face-comparing