赞
踩
1. 本文只针对通用的人脸识别原理及实现流程做介绍,不涉及具体算法实现
2. 主要是人脸识别入门及概念理解
人脸识别,顾名思义就是使计算机能够从图像中预测人的身份。
两者背后的想法是一样的,只是应用领域不同。
面部校验是识别固定的一个人。例如,手机的面部解锁,只需要识别出用户就可以。这是1:1的比较。
面部识别系统,可以理解为在已知人的数据库中查找该人并试图预测该人是谁。这是一对多的比较。如果此人不在数据库中,则表示我们之前从未见过这个人。因此,您可以将它们添加到数据库中,或者只是说他/她是一个不知名的人。这可以用于监视,考勤系统等应用。
总之,
1. 面部校验:这是某某人吗?
2. 面部识别:这个人是谁?
人类对面部的认知就是记忆每一个人的特别之处。
那么计算机是如何实现人脸识别,首先可能想到的是比较两张图片是否一致。但是这就存在一个很大的弊端,如果比较原始像素强度,光线,拍摄的角度等因素也足以破坏比较结果。 计算机需要更健壮的东西作为比较指标。
从人类视觉系统中汲取灵感,计算机视觉研究人员通过提取图像的特征,以有效地描述每个人脸的独特性。
最简单的特征一般是面部像素强度的均值和方差,高度比:面部宽度等。
人脸识别四大特征
1、几何特征:从面部点之间的距离和比率作为特征,识别速度快,内存要求比较小,对于光照敏感度降低。
2、基于模型特征:根据不同特征状态所具有概率不同而提取人脸图像特征。
3、基于统计特征:将人脸图像视为随机向量,并用统计方法辨别不同人脸特征模式,比较典型的有特征脸、独立成分分析、奇异值分解等。
4、基于神经网络特征:利用大量神经单元对人脸图像特征进行联想存储和记忆,根据不同神经单元状态的概率实现对人脸图像准确识别。
简而言之,将人脸抽象为可以反映人脸差异的特征值。
随着深度学习的出现,这些人工特征已经退居次席,现在可以通过CNN为他们寻找合适的特征。
我们需要学习一个能够区分不同人物面部的高维特征空间。一旦我们拥有这样的模型,我们就可以使用它为每个面部生成独特的特征。最后,我们可以比较新面孔的特征与已知面部的特征,以识别人物。
如果我们想要将新人添加到已知面的数据库中,我们只需生成这些功能并将其添加到数据库中。此过程称为“注册”。
3.1 训练人脸识别模型
如上所述,人脸识别系统中最重要的部分是生成训练模型,该模型可以区分两个不同人的面部。让我们更详细地了解训练过程,并讨论人脸识别中使用的各种术语。
生成面部表示或编码
卷积神经网络(CNN)是非常好的特征提取器[1]。它们查看图像的小部分并使用多层上的卷积来生成可靠的特征,以区分视觉上不同的对象。
第一步是从输入面部图像生成紧凑的面部表示。假设我们有一个CNN,它将面部图像作为输入,并产生一个长度为“n”数组作为输出。我们将此数组称为编码,因为现在只使用此数组对面进行编码。编码可以理解为提取的特征。
没有经过训练的模型,图像生成的编码是随机的,并不能区分每个人的差异,所以训练网络很重要。
训练模型的目的是学习一个很好的特征空间,其中绿点聚集在一起,彼此靠近并远离红点。
误差与迭代
为了理解任何事情,我们需要告诉网络它的表现如何,以便它可以在下一次迭代中做得更好。 因此,我们定义了一个损失度量,它作为网络指示它能够完成任务的能力。 这里需要注意的是,我们想要实现的目标非常重要:
1. 使同一个人的脸部编码更近
2. 推动不同人的脸部编码更远
经过训练,绿色点接近,远离红色点
该损失度量被正确地称为三元组损失,并且是用于面部识别的最广泛使用的损失度量之一。
因此,使用CNN作为特征提取器和三元组丢失作为损失度量,网络应该能够学习面部编码映射,其中同一人的面部聚集在一起并且不同人的面部被分离。
一旦网络被训练并且为训练图像生成嵌入,我们就可以安全地使用它来预测新面部的身份。
新的图像导入,提取特征(编码),靠近红色,为红色人。
从上图可以看出,对于新的人脸图像,我们使用模型进行人脸嵌入。接下来,我们需要计算此面嵌入与数据库中所有其他面嵌入的距离。预测的人将是嵌入最接近新面部嵌入的人。
用于该比较的最常见距离测量是L2距离,其简单地是n维空间中的2个点之间的欧氏距离。
在这个例子中,我们可以看到新面部图像生成的面部嵌入更接近属于Elon Musk的红点。因此,我们可以预测新面孔也是埃隆。
除了将新嵌入与数据库中的每个嵌入进行比较之外,还有更好的推理方法。可以使用机器学习技术来训练使用这些面部嵌入作为输入的模型。让我们简要讨论两种这样的算法。
支持向量机
我们可以使用面向嵌入作为输入的SVM训练多类分类器。每个班级将对应一个不同的人。每当我们想要对新的面部嵌入进行分类时,我们只需将其与支持向量进行比较,并预测新面部所属的类。
这将在很大程度上降低计算成本,因为您不必将新嵌入与数百或数千个嵌入在数据库中进行比较。要了解有关SVM的更多信息,请参阅我们关于SVM的帖子。
k-最近邻(k-NN)
虽然SVM方法更快,但它有一个缺点。 SVM是一种参数化机器学习方法,这意味着如果将新人添加到数据库中,旧参数可能不起作用,因此,我们需要重新训练SVM模型。如果有非参数方法怎么办? - 是的! k-NN算法。
k-最近邻分类器是最简单的机器学习算法之一。它不会在推理时间执行距离的强力计算。对于每个新点,它只是比较k-最近邻居并采用多数投票方案来做出决定。
例如,考虑嵌入,如下所示。如果我们使用k = 5,则将蓝点(新嵌入)与其邻居进行比较,并且我们从其中的5个进行多数投票。其中3个邻居投票选举红色,2个投票选举绿色课程。因此,最终预测将是红色的!
使用k-NN(k = 5)的多数投票预测新点为红色类
3.3。 注册一个新人
到目前为止,我们已经看到了如何使用面部数据库生成嵌入空间。 但是,如果我们想要向数据库中添加新人,会发生什么? 我们需要再次训练模型吗? - 没有。 这很简单。
我们可以使用相同的模型为新人创建嵌入。 由于模型已经过训练并且这是一个不同的人,因此生成的嵌入将远离数据库中其他人的嵌入。 我们只是相应地更新已知面部的数据库。
由于数据库现在已更新,我们可以采用与上述相同的方式进行预测。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。