人脸检测与人脸识别
一、概述
1. 基本概念
人脸是个人重要的生物特征,业界很早就对人脸图像处理技术进行了研究。人脸图像处理包括人脸检测、人脸识别、人脸检索等。人脸检测是在输入图像中检测人脸的位置、大小;人脸识别是对人脸图像身份进行确认,人脸识别通常会先对人脸进行检测定位,再进行识别;人脸检索是根据输入的人脸图像,从图像库或视频库中检索包含该人脸的其它图像或视频。
2. 人脸检测与识别的应用
- 实名认证
- 人脸考勤
- 刷脸支付、刷脸检票
- 公共安全:罪犯抓捕、失踪人员寻找
3. 传统人脸检测与人脸识别方法
1)人脸检测
- 基于知识的人脸检测法。它将典型的人脸形成规则库对人脸进行编码。通常, 通过面部特征之间的关系进行人脸定位。
- 基于模板匹配的人脸检测法。存储几种标准的人脸模式, 用来分别描述整个人脸和面部特征;计算输入图像和存储的模式间的相互关系并用于检测。
- 基于特征的人脸检测法。是在姿态、视角或光照条件改变的情况下找到存在的结构特征, 然后使用这些特征确定人脸。
- 基于外观的人脸检测法。与模板匹配方法相反, 从训练图像集中进行学习从而获得模型(或模板) ,并将这些模型用于检测。
2)人脸识别
- 几何特征分析法。首先,提取目标的特征,并将所有得到的特征值组合形成一个向量;然后利用某种距离公式进行比较匹配。
- 主成分分析法。提取出图像数据主成分,得到特征向量(特征脸)在进行比对和识别。主成分分析法原理简单,容易编程实现,并且识别效果较好;但该方法易受光照、尺度、旋转等因素影响。
- 弹性匹配法。属于动态模板匹配法的一种,模板可有多种表示方法,该方法受图像的形变影响小,且受光照、面部表情、图像尺寸等因素的干扰较小,不足之处在于识别速度慢。
传统人脸检测、识别在特征提取、精确度、可扩展性方面均有诸多不足,进入深度学习时代后,逐渐被深度学习技术所取代。
二、人脸数据集介绍
1. SFC数据集
Social Face Classification(社交人脸分类,简称SFC)数据集是从一个流行的社交网络中收集的人脸数据集,包括440万张经过标记的人脸,来自4030人,每个人有800到1200张人脸图像,其中每个身份的最新5%的脸图像被排除在外进行测试。这是根据图像的时间戳来完成的,以模拟通过老化进行的连续识别。
2. LFW数据集
Labeled Faces in the Wild(经标注的自然条件人脸,简称LFW)包含5749位名人的13323张网络照片,这些照片分为6000对人脸,分为10组。常用作无约束环境中进行人脸验证的基准数据集。
3. YTF数据集
YouTube Faces(YTF)收集了1595个主题的3425个YouTube视频(LFW中名人的子集)。这些视频被分成5000个视频对和10个分割,用于评估视频级别的人脸验证,在SFC中,人脸识别是由人来标记的,通常包含大约3%的错误。SFC数据集照片在图像质量、光线和表情方面的变化甚至比LFW和YTF中名人的网络图像更大,后者通常是由专业摄影师而不是智能手机拍摄的。
4. CelebA数据集
Large-scale CelebFaces Attributes (CelebA)数据集是由香港中文大学汤晓鸥教授实验室公布的大型人脸识别数据集。该数据集包含有200K张人脸图片,人脸属性有40多种,主要用于人脸属性的识别。
5. WIDER Face数据集
2015年由香港中文大学发布,包含32203张图像、393703张人脸,在面部的尺寸、姿势、遮挡、表情、妆容和光照上都有很大的变化,自发布后广泛应用于评估性能比传统方法更强大的卷积神经网络。
三、人脸检测
1. MTCNN模型
Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks(基于多任务级联卷积网络的联合人脸检测与对准,MTCNN),是一个优秀的人脸检测模型,该模型通过三个阶段精心设计的深度卷积网络,以粗略到精细的方式检测面部位置。
1)步骤
第一阶段:通过浅层CNN快速生成候选窗口。
第二阶段:通过更复杂的CNN拒绝大量非面部窗口来细化窗口。
第三阶段:使用更强大的CNN再次细化结果并输出五个面部标志位置。
2)网络结构
- Proposal Network(P-Net):提议网络,该完全卷积网络来获得候选面部窗口及其边界框回归向量。 然后基于估计的边界框回归向量校准候选区域。 之后,我们采用非最大抑制(NMS)来合并高度重叠的候选者。
- Refine Network(R-Net):精炼网络(R-Net),它进一步拒绝大量错误候选区域,使用边界框回归执行校准,并进行NMS。
- Output Network(O-Net):输出网络,这个阶段类似于第二阶段,但在这个阶段,我们的目标是识别更多监督的面部区域。 特别是,该网络将输出五个面部坐标点。
3)训练
MTCNN利用三项任务来训练CNN探测器:
- 面部/非面部分类
- 边界框回归
- 面部标记定位
① 面部分类。学习目标被制定为二类分类问题。 对于每个样本,使用交叉熵损失函数:
其中 p i p_i pi是网络产生的概率,表明样本是网络产生的概率,表明样本 x i x_i xi是一个人脸。 符号 y i d e t ∈ { 0 , 1 } y^{det}_i∈\{0,1\} yidet∈{ 0,1}表示真实标签。
② 边界框回归。对于每个候选窗口,我们预测它与最近的真实值之间的偏移(即边界框的左边,顶部,高度和宽度)。 学习目标被指定为回归问题,我们对每个样本使用欧几里德损失 x i x_i xi:
其中 y ^ i b o x \hat{y}_i^{box} y^ibox 是真实坐标。 有四个坐标,包括左上角,高度和宽度,因此 y i b o x ∈ R 4 y^{box}_i∈ \mathbb{R}^4 yibox∈R4.
③ 面部标记定位。类似于边界框回归任务,面部标记检测被公式化为回归问题,我们最小化欧几里德损失:
其中 y ^ i l a n d m a r k \hat{y}_i^{landmark} y^ilandmark是从网络获得的面部标记坐标, y i l a n d m a r k y_i^{landmark} yilandmark是第i个样本的真实坐标。 有五个面部标志,包括左眼,右眼,鼻子,左嘴角和右嘴角,因此 y i l a n d m a r k ∈ R 1 0 y_i^{landmark} \in \mathbb{R}^1 0 yilandmark∈R10.
④ 多源训练。由于在每个CNN中使用不同的任务,因此在学习过程中存在不同类型的训练图像,例如面部,非面部和部分对齐的面部。 在这种情况下,不使用一些损失函数(即,等式(1) - (3))。 例如,对于背景区域的样本,仅计算 L i d e t L_i{det} Lidet,而另外两个损失设置为0.这可以直接使用样本类型指示符来实现。 然后整体学习目标可以表述为:
其中ܰN是训练样本的数量, a j a_j aj表示任务重要性。 在P-Net和R-Net中使用 ( a d e t = 1 , a b o x = 0.5 , a l a n d m a r k = 0.5 ) (a_{det}=1,a_{box}=0.5,a_{landmark}=0.5) (adet=1,abox