人脸识别笔记
参考资料:
- 人脸识别技术看这一篇就够了(附国内人脸识别20强公司)
- 人脸识别的十个关键技术组成及原理
- 人脸识别技术百度百科
- 人脸识别技术及应用,了解一下
- 深度干货!一文读懂人脸识别技术(建议收藏)
- 人脸识别技术及应用概览 全在这里
人脸识别 :也叫面部识别,是一种基于人的脸部特征信息进行身份识别的生物识别技术。它用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术。
人脸识别系统的组成
当前的人脸识别系统主要包括四个组成部分:人脸图像采集及检测、人脸图像预处理、人脸图像特征提取以及匹配与识别。
1. 人脸采集
(1)简介
不同的人脸图像通过摄像镜头采集得到,比如静态图像、动态图像、不同的位置、不同表情等,当采集对象在设备的拍摄范围内时,采集设备会自动搜索并拍摄人脸图像。
(2)人脸采集的主要影响因素
-
图像大小:人脸图像过小会影响识别效果,人脸图像过大会影响识别速度。非专业人脸识别摄像头常见规定的最小识别人脸像素为6060或100100以上。在规定的图像大小内,算法更容易提升准确率和召回率。图像大小反映在实际应用场景就是人脸离摄像头的距离。
-
图像分辨率:越低的图像分辨率越难识别。图像大小综合图像分辨率,直接影响摄像头识别距离。现4K摄像头看清人脸的最远距离是10米,7K摄像头是20米。
-
光照环境:过曝或过暗的光照环境都会影响人脸识别效果。可以从摄像头自带的功能补光或滤光平衡光照影响,也可以利用算法模型优化图像光线。
-
模糊程度:实际场景主要着力解决运动模糊,人脸相对于摄像头的移动经常会产生运动模糊。部分摄像头有抗模糊的功能,而在成本有限的情况下,考虑通过算法模型优化此问题。
-
遮挡程度:五官无遮挡、脸部边缘清晰的图像为最佳。而在实际场景中,很多人脸都会被帽子、眼镜、口罩等遮挡物遮挡,这部分数据需要根据算法要求决定是否留用训练。
-
采集角度:人脸相对于摄像头角度为正脸最佳。但实际场景中往往很难抓拍正脸。因此算法模型需训练包含左右侧人脸、上下侧人脸的数据。工业施工上摄像头安置的角度,需满足人脸与摄像头构成的角度在算法识别范围内的要求。
2. 人脸检测
人脸检测在实际中主要用于人脸识别的预处理,即在图像中准确标定出人脸的位置和大小。人脸图像中包含的模式特征十分丰富,如直方图特征、颜色特征、模板特征、结构特征及Haar特征等。人脸检测就是把这其中有用的信息挑出来,并利用这些特征实现人脸检测。
主流的人脸检测方法基于以上特征采用Adaboost学习算法,Adaboost算法是一种用来分类的方法,它把一些比较弱的分类方法合在一起,组合出新的很强的分类方法。
人脸检测过程中使用Adaboost算法挑选出一些最能代表人脸的矩形特征(弱分类器),按照加权投票的方式将弱分类器构造为一个强分类器,再将训练得到的若干强分类器串联组成一个级联结构的层叠分类器,有效地提高分类器的检测速度。
最近人脸检测算法模型的流派包括三类及其之间的组合:viola-jones框架(性能一般速度尚可,适合移动端、嵌入式上使用),dpm(速度较慢),cnn(性能不错)。
3. 人脸图像预处理
系统获取的原始图像由于受到各种条件的限制和随机干扰,往往不能直接使用,必须在图像处理的早期阶段对它进行灰度矫正、噪声过滤等图像预处理。
人脸图像预处理是基于人脸检测结果,对图像进行处理并最终服务于特征提取的过程。
主要预处理过程:人脸对准(得到人脸位置端正的图像),人脸图像的光线补偿,灰度变换、直方图均衡化、归一化(取得尺寸一致,灰度取值范围相同的标准化人脸图像),几何校正、中值滤波(图片的平滑操作以消除噪声)以及锐化等。
4. 人脸图像特征提取
人脸识别系统可使用的特征通常分为视觉特征、像素统计特征、人脸图像变换系数特征、人脸图像代数特征等。人脸特征提取就是针对人脸的某些特征进行的。人脸特征提取,也称人脸表征,它是对人脸进行特征建模的过程。
5. 人脸图像匹配与识别
提取的人脸图像的特征数据与数据库中存储的特征模板进行搜索匹配,通过设定一个阈值,当相似度超过这一阈值,则把匹配得到的结果输出。人脸识别就是将待识别的人脸特征与已得到的人脸特征模板进行比较,根据相似程度对人脸的身份信息进行判断。这一过程又分为两类:一类是确认,是一对一进行图像比较的过程,另一类是辨认,是一对多进行图像匹配对比的过程。
人脸识别的主要技术及原理
1. 人脸检测(Face Detection):是检测出图像中人脸所在位置的一项技术
人脸检测用于确定人脸在图像中的大小和位置,即解决“人脸在哪里”的问题,把真正的人脸区域从图像中裁剪出来,便于后续的人脸特征分析和识别。
人脸检测算法的输入是一张图片,输出是人脸框坐标序列(0个人脸框或1个人脸框或多个人脸框)。一般情况下,输出的人脸坐标框为一个正朝上的正方形,但也有一些人脸检测技术输出的是正朝上的矩形,或者是带旋转方向的矩形。
常见的人脸检测算法基本是一个“扫描”加“判别”的过程,即算法在图像范围内扫描,再逐个判定候选区域是否是人脸的过程。因此人脸检测算法的计算速度会跟图像尺寸、图像内容相关。开发过程中,我们可以通过设置“输入图像尺寸”、或“最小脸尺寸限制”、或“人脸数量上限”的方式来加速算法。
人脸检测的几大关键技术包括:
- 基于特征的人脸检测技术——通过采用颜色、轮廓、纹理、结构或者直方图特征等进行人脸检测。
- 基于模板匹配人脸检测技术——从数据库当中提取人脸模板,接着采取一定模板匹配策略,使抓取人脸图像与从模板库提取图片相匹配,由相关性的高低和所匹配的模板大小确定人脸大小以及位置信息。
- 基于统计的人脸检测技术——通过对于“人脸”和“非人脸”的图像大量搜集构成的人脸正、负样本库,采用统计方法强化训练该系统,从而实现对人脸和非人脸的模式进行检测和分类。
2. 人脸对齐(Face Alignment):是定位出人脸上五官关键点坐标的一项技术
同一个人在不同的图像序列中可能呈现出不同的姿态和表情,这种情况是不利于人脸识别的。所以有必要将人脸图像都变换到一个统一的角度和姿态,这就是人脸对齐。它的原理是找到人脸的若干个关键点(基准点,如眼角,鼻尖,嘴角等),然后利用这些对应的关键点通过相似变换(Similarity Transform,旋转、缩放和平移)将人脸尽可能变换到标准人脸。
人脸配准算法的输入是“一张人脸图片”加“人脸坐标框”,输出五官关键点的坐标序列。五官关键点的数量是预先设定好的一个固定数值,可以根据不同的语义来定义(常见的有5点、68点、90点等等)。
当前效果的较好的一些人脸配准技术,基本通过深度学习框架实现,这些方法都是基于人脸检测的坐标框,按某种事先设定规则将人脸区域扣取出来,缩放的固定尺寸,然后进行关键点位置的计算。因此,若不计入图像缩放过程的耗时,人脸配准算法是可以计算量固定的过程。另外,相对于人脸检测,或者是后面将提到的人脸提特征过程,人脸配准算法的计算耗时都要少很多。
3. 人脸属性识别(Face Attribute):是识别出人脸的性别、年龄、姿态、表情等属性值的一项技术
一般的人脸属性识别算法的输入是“一张人脸图”和“人脸五官关键点坐标”,输出是人脸相应的属性值。人脸属性识别算法一般会根据人脸五官关键点坐标将人脸对齐(旋转、缩放、扣取等操作后,将人脸调整到预定的大小和形态),然后进行属性分析。
常规的人脸属性识别算法识别每一个人脸属性时都是一个独立的过程,即人脸属性识别只是对一类算法的统称,性别识别、年龄估计、姿态估计、表情识别都是相互独立的算法。但最新的一些基于深度学习的人脸属性识别也具有一个算法同时输入性别、年龄、姿态等属性值的能力。
4. 人脸特征提取(Face Feature Extraction):是将一张人脸图像转化为一串固定长度的数值的过程
人脸特征定位指的是对于识别出来的人脸图像区域的五官进行精准定位,得到图片中人脸五官的坐标和特征值。
人脸特征提取过程的输入也是 “一张人脸图”和“人脸五官关键点坐标”,输出是人脸相应的一个数值串(特征)。人脸特征提取算法会根据人脸五官关键点坐标将人脸对齐预定模式,然后计算特征。
近几年来,深度学习方法基本统治了人脸特征提取算法,这些算法都是固定时长的算法。早前的人脸特征提取模型都较大,速度慢,仅使用于后台服务。但最新的一些研究,可以在基本保证算法效果的前提下,将模型大小和运算速度优化到移动端可用的状态。
人脸提特征过程(最右侧数值串为“人脸特征”)
人脸特征提取的方法:
-
基于知识的表征方法(主要包括基于几何特征法和模板匹配法):根据人脸器官的形状描述以及它们之间的距离特性来获得有助于人脸分类的特征数据,其特征分量通常包括特征点间的欧氏距离、曲率、和角度等。人脸由眼睛、鼻子、嘴、下巴等局部构成,对这些局部和他们之间结构关系的几何描述,可作为识别人脸的重要特征,这些特征被称为几何特征。
-
基于代数特征或统计学习的表征方法:基于代数特征方法的基本思想是将人脸在空域内的高维描述转化为频域或者其他空间内的低维描述,其表征方法为线性投影表征方法和非线性投影表征方法。基于线性投影的方法主要有主成分分析法或称K-L变化、独立成分分析法和Fisher线性判别分析法。非线性特征提取方法有两个重要的分支:基于核的特征提取技术和以流形学习为主导的特征提取技术。
5. 人脸比对(Face Compare):是衡量两个人脸之间相似度的算法
人脸比对算法的输入是两个人脸特征(注:人脸特征由前面的人脸特征提取算法获得),输出是两个特征之间的相似度。人脸验证、人脸识别、人脸检索都是在人脸比对的基础上加一些策略来实现。相对人脸提特征过程,单次的人脸比对耗时极短,几乎可以忽略。
基于人脸比对可衍生出人脸验证(Face Verification)、人脸识别(Face Recognition)、人脸检索(Face Retrieval)、人脸聚类(Face Cluster)等算法。
人脸对比过程(右侧的相似度为人脸比对输出的结果)
6. 人脸验证(Face Verification):是判定两个人脸图是否为同一人的算法
它的输入是两个人脸特征,通过人脸比对获得两个人脸特征的相似度,通过与预设的阈值比较来验证这两个人脸特征是否属于同一人(即相似度大于阈值,为同一人;小于阈值为不同)。
人脸验证过程说明(最右侧“是同一人”为人脸验证的输出)
7. 人脸识别(Face Recognition):是识别出输入人脸图对应身份的算法
它的输入一个人脸特征,通过和注册在库中N个身份对应的特征进行逐个比对,找出“一个”与输入特征相似度最高的特征。将这个最高相似度值和预设的阈值相比较,如果大于阈值,则返回该特征对应的身份,否则返回“不在库中”。
人脸识别过程(右侧身份“jason”为人脸识别结果)
8. 人脸检索:是查找和输入人脸相似的人脸序列的算法
人脸检索指的是将输入的人脸与数据库中的人脸进行比对,确定输入的人脸是否属于特定角色的身份验证的一种技术,在人脸闸机、会员刷脸识别等领域进行产品应用。
目前人脸检索技术最知名的应该是苹果的Face ID,Face ID通过多种传感器实现3D头部建模并存储在手机中,每次登陆解锁都通过多种传感器绘制3D图像与存储的模型进行人脸比对,从而实现登录和解锁。据宣传重合率可以达到百万分之一的级别。
人脸检索通过将输入的人脸和一个集合中的说有人脸进行比对,根据比对后的相似度对集合中的人脸进行排序。根据相似度从高到低排序的人脸序列即使人脸检索的结果。
人脸检索过程(右侧绿框内排序序列为检索结果)
9. 人脸聚类(Face Cluster):是将一个集合内的人脸根据身份进行分组的算法
人脸聚类也通过将集合内所有的人脸两两之间做人脸比对,再根据这些相似度值进行分析,将属于同一个身份的人划分到一个组里。
在没有进行人工身份标注前,只知道分到一个组的人脸是属于同一个身份,但不知道确切身份。另外假设集合中有N个人脸,那么人脸聚类的算法复杂度为O(N2)
人脸聚类过程(右侧绿框内按身份的分组结果为聚类结果)
10. 人脸核身(Face Liveness):是判断人脸图像是来自真人还是来自攻击假体(照片、视频等)的方法
在人脸比对技术投入应用中,自然会遇到一个问题:进行比对的图像或者视频流中的人脸是真实的客户行为,还是一种伪造的假体(例如使用客户图片再次翻拍),活体检测技术就在这种需求下发展起来。
活体检测是指判断操作用户是否为真人,抵御照片、视频、模具等作弊攻击。目前技术上分为静态活体检测和动态活体检测,应用较多的是动态活体检测。
静态活体检测:指判断静态图片是真实的客户行为还是二次翻拍,一般用在防攻击不高的场景中。
动态活体检测:指通过指示用户做出行为,验证用户是否为真实活体本人操作。
目前活体检测技术的主要发展方向是人脸核身。
人脸核身
活体检测技术结合上述的人脸检测、人脸对比技术,可以实现较为可靠的互联网身份验证解决方案。
人脸核身指通过用户的一段自拍视频或一张自拍照,与公民身份信息库里的高清证件照,进行1:1 人脸验证确认用户身份,并通过活体检测来确认当前用户是否为本人和真人。
人脸核身的产品应用相当广泛,每年一次的对社保参保人员的身份校验、互联网借贷系统的实名认证、互联网保险销售的实名认证、银行/证券的远程开户等等。
人脸识别的主要方法
1. 基于几何特征的方法
几何特征可以是眼、鼻、嘴等的形状和它们之间的几何关系(如相互之间的距离)。这些算法识别速度快,需要的内存小,但识别率较低。
2. 基于特征脸(PCA)的人脸识别方法
特征脸方法是基于KL变换的人脸识别方法,KL变换是图像压缩的一种最优正交变换。高维的图像空间经过KL变换后得到一组新的正交基,保留其中重要的正交基,由这些基可以张成低维线性空间。如果假设人脸在这些低维线性空间的投影具有可分性,就可以将这些投影用作识别的特征矢量,这就是特征脸方法的基本思想。这些方法需要较多的训练样本,而且完全是基于图像灰度的统计特性的。目前有一些改进型的特征脸方法。
人脸识别特征脸算法文档:https://blog.csdn.net/zizi7/article/details/52757300
3. Fisher Face(渔夫脸)
该方法首先采用主成分分析(PCA)对图像表观特征进行降维。在此基础上,采用线性判别分析(LDA)的方法变换降维后的主成分以期获得“尽量大的类间散度和尽量小的类内散度”。该方法目前仍然是主流的人脸识别方法之一,产生了很多不同的变种,比如零空间法、子空间判别模型、增强判别模型、直接的LDA 判别方法以及近期的一些基于核学习的改进策略。
Fisher Face算法文档:https://blog.csdn.net/zizi7/article/details/52999432
4. EGM(弹性图匹配)
其基本思想是用一个属性图来描述人脸:属性图的顶点代表面部关键特征点,其属性为相应特征点处的多分辨率、多方向局部特征——Gabor变换12特征,称为Jet;边的属性则为不同特征点之间的几何关系。对任意输入人脸图像,弹性图匹配通过一种优化搜索策略来定位预先定义的若干面部关键特征点,同时提取它们的Jet特征,得到输入图像的属性图。最后通过计算其与已知人脸属性图的相似度来完成识 别过程。该方法的优点是既保留了面部的全局结构特征,也对人脸的关键局部特征进行了建模。该方法结合了灰度特性和几何因素,在比对时可以允许图像存在弹性形变,在克服表情变化对识别的影响方面收到了较好的效果,同时对于单个人也不再需要多个样本进行训练。
弹性图匹配算法文档:https://blog.csdn.net/real_myth/article/details/44828219
5. 基于神经网络的方法
神经网络的输入可以是降低分辨率的人脸图像、局部区域的自相关函数、局部纹理的二阶矩等。这类方法同样需要较多的样本进行训练,而在许多应用中,样本数量是很有限的。
6. 基于线段Hausdorff 距离(LHD) 的方法
心理学的研究表明,人类在识别轮廓图(比如漫画)的速度和准确度上丝毫不比识别灰度图差。LHD是基于从人脸灰度图像中提取出来的线段图的,它定义的是两个线段集之间的距离,与众不同的是,LHD并不建立不同线段集之间线段的一一对应关系,因此它更能适应线段图之间的微小变化。实验结果表明,LHD在不同光照条件下和不同姿态情况下都有非常出色的表现,但是它在大表情的情况下识别效果不好。
7. 基于支持向量机(SVM) 的方法
近年来,支持向量机是统计模式识别领域的一个新的热点,它试图使得学习机在经验风险和泛化能力上达到一种妥协,从而提高学习机的性能。支持向量机主要解决的是一个2分类问题,它的基本思想是试图把一个低维的线性不可分的问题转化成一个高维的线性可分的问题。通常的实验结果表明SVM有较好的识别率,但是它需要大量的训练样本(每类300个),这在实际应用中往往是不现实的。而且支持向量机训练时间长,方法实现复杂,该函数的取法没有统一的理论。
技术发展方向
-
结合三维信息:二维和三维信息融合使特征更加鲁棒
-
多特征融合:单一特征难以应对复杂的光照和姿态变化
-
大规模人脸比对:面向海量数据的人脸比对与搜索
-
深度学习:在大数据条件下充分发挥深度神经网络强大的学习能力
技术指标
1. 人脸检测中的关键指标
例子:在摄像头某张抓拍图像中,一共有100张人脸,算法检测出80张人脸,其中75张是真实人脸,5张是把路标误识为人脸。
-
检测率:识别正确的人脸/图中所有的人脸。检测率越高,代表检测模型效果越好。
-
误检率:识别错误的人脸/识别出来的人脸。误检率越低,代表检测模型效果越好。
-
漏检率:未识别出来的人脸/图中所有的人脸。漏检率越低,代表检测模型效果越好。
-
速度:从采集图像完成到人脸检测完成的时间。时间约短,检测模型效果越好。
在这个实际案例中:检测率=75/100,误检率=5/80,漏检率=(100-75)/100
2. 人脸识别中的关键指标
1000张样本图片里,共600张正样本。相似度为0.9的图片一共100张,其中正样本为99张。虽然0.9阈值的正确率很高,为99/100;但是0.9阈值正确输出的数量确很少,只有99/600。这样很容易发生漏识的情况。
-
精确率(precision):识别为正确的样本数/识别出来的样本数=99/100
-
召回率(recall):识别为正确的样本数/所有样本中正确的数=99/600
-
错误接受率/认假率/误识率(FAR****False Accept Rate):
-
定义:指将身份不同的两张照片,判别为相同身份,越低越好
-
FAR = NFA / NIRA
-
式中 NIRA 代表的是类间测试次数,既不同类别间的测试次数,打比方如果有1000个识别 模型,有1000个人要识别,而且每人只提供一个待识别的素材,那 NIRA=1000*(1000-1) 。NFA是错误接受次数。
-
FAR决定了系统的安全性,FRR决定了系统的易用程度,在实际中,FAR对应的风险远远高于FRR,因此,生物识别系统中,会将FAR设置为一个非常低的范围,如万分之一甚至百万分之一,在FAR固定的条件下,FRR低于5%,这样的系统才有实用价值。
- 错误拒绝率/拒真率/拒识率(FRR False Reject Rate):
-
定义:指将身份相同的两张照片,判别为不同身份,越低越好
-
FRR = NFR / NGRA
-
上式中NFR是类内测试次数,既同类别内的测试次数,打比方如果有1000个识别模型, 有1000个人要识别, 而且每人只提供一个待识别的素 材,那 NIRA=1000,如果每个人提供N张图片,那么 NIRA=N*1000 。NFR是错误拒绝次数。
人脸识别算法的应用分类派系
1. 人脸确认(1:1)
-
简介:将某人面像与指定人员面像进行一对一的比对,根据其相似程度来判断二者是否是同一人,相似程度一般以能否超过某一量化阀值为依据。简单的说就是A/B两张照片比对,产生的计算数值是否达到要求。
-
产品应用:快速的人脸识别比对,移动支付认证、安全性身份核对、作为身份确认的一种新方式,比如考生身份确认、公司考勤确认、各种证件照和本人确认。
-
实际问题:产品在系统设计的逻辑上,需要先考虑调取已储存对象信息的先验条件。通过界面/语音的提示,使得待认证者预先知道自己正处于被核对的过程中,且已预先了解拟核对对象的身份。
-
比对来源的三种主要方式:
-
用户自传照片,比如支付宝的人脸比对,用户自传的照片最大的问题是照片质量的合格率太低,拍照的光线、角度等因素会导致采集源的质量下降,不利于后期的大批量人脸特征码管理。
-
使用身份证读卡器,读取身份证上的照片,遗憾的是这张照片2K的大小,不过也是目前用最多的源照片提取方式,比较适合签到场合。
-
使用公安部旗下NCIIC的人脸比对接口(注意,不是网纹照片接口,这个接口已经不对外),使用的是直接的人脸比对接口。
-
2. 人脸辨认(1:N)
(1)简介
将某人面像与数据库中的多人的人脸进行比对,并根据比对结果来鉴定此人身份,或找到其中最相似的人脸,并按相似程度的大小输出检索结果。
(2)产品应用
人脸开门、人脸检索,排查犯罪嫌疑人、失踪人口的全库搜寻、一人多证的重复排查等。
(3)实际问题
-
走失儿童的项目中去: 这一类系统的部署需要两个条件:A. BCD基本库(比如1000万人) B.强大的算法硬件
-
零售店中的刷脸支付长江,需要用户预先输入全手机号,确定用户身份再进行人脸识别,将原本为1:N的问题转化为了1:1的问题。
(4)产品难点
a. 1:N中的N能够支持多大
b. 非配合场景
-
在配合场景下:比如ATM机刷脸取款,用户会自主配合,将人脸以一个理想的角度通过识别。
-
而在非配合应用场景下,比如监控视频下的人脸识别,追踪违法犯罪分子的身份信息,情况就要困难得多。这种情况下,用户脸部会发生角度偏大,遮挡,光线不可控等问题。
c. 跨人种,跨年龄识别问题
- 要改善这样的问题,一个必要条件是需要建立一个足够完备的跨人种,跨年龄的人脸数据库;在国内的话,是以汉族人为主,同时跨年龄的人脸数据库也比较难收集,需要不短的时间跨度。
d. 产品体验
- 近来备受关注的刷脸支付,很多时候都会要求用户输入全手机号,或手机号后四位,以缩小用户搜索库大小,实际上这是比较影响体验的。
3. 多人脸检索(N:N)
(1)简介
1:N同时作业就是N:N了,同时相应多张照片检索需求。
(2)实际产品问题中
-
在视频级N:N的校验中,如果要提高通过率,很多时候是采取降低准确率的方式,降低算法队列数量;同样在一些比赛中为了降低误识率,大大提高了准确率,所以算法在校验的过程中必须遵循至少一个固定标准,追求的是速度效率还是最高准确率。
-
视频流的帧处理所用,对服务器的计算环境要求严苛,目前的算法系统所支撑的输出率非常有限。
主要的限制如下:
- 海量的人脸照片解析需要大量运算(目前很少看到在采集端直接解析的,都是照片剪裁)
- 海量的人脸照片传输需要大量的带宽(常见的720布控摄像头抓取最小的人脸照片为20K)
- 海量的人脸照片在后台检索需要耗费大量的运算(国内主流主机为例,最多到24路摄像头)。
人脸识别对应解决方案方向
产品实战中的物理问题
- 光照问题
- 人脸姿态问题
- 表情问题
- 遮挡问题
- 年龄变化
6.人脸相似性 - 图像质量
- 样本缺乏
- 海量数据
- 大规模人脸识别
- 动态识别
- 人脸防伪
- 丢帧和丢脸问题
- 摄像机的头像问题