人脸识别技术全面总结:从传统方法到深度学习
人脸识别算法全面总结:从传统方法到深度学习
英国赫特福德大学与 GBG Plc 的研究者近日发布了一篇综述论文,对人脸识别方法进行了全面的梳理和总结,其中涵盖各种传统方法和如今风头正盛的深度学习方法。
论文地址:https://arxiv.org/abs/1811.00116
本篇文章是对人脸识别算法的一个整体梳理,在以后的文章里我会对每个算法都做一个较为深入的解析,如有需要请到我的博客主页查询
文章内容是自己在学习过程中整理各位大牛的见解,时间太久,不记得文章出处。如有引用,请与我联系,感谢支持!
人脸识别算法主要包含三个模块:
-
人脸检测(Face Detection):确定人脸在图像中的大小和位置
-
人脸对齐(Face Alignment):找到关键点(基准点,如眼角,鼻尖,嘴角等),然后通过相似变换(旋转、缩放和平移)将人脸尽可能变换到标准人脸。
-
人脸特征表征(Feature Representation):通过特征建模得到向量化的人脸特征
人脸识别算法的三个发展阶段
-
早期算法
-
人工特征+分类器
-
深度学习
早期算法:
介绍:早期的算法有基于几何特征的算法。子空间算法将人脸图像当成一个高维的向量,将向量投影到低维空间中,投影之后得到的低维向量达到对不同的人具有良好的区分度。
缺点:严重依赖训练集和测试集场景,且对光照、人脸的表情、姿态敏感,泛化能力不足,不具有太多的实用价值。
子空间算法的典型代表是PCA(主成分分析,也称为特征脸EigenFace)和LDA(线性判别分析)。
PCA的核心思想是在进行投影之后尽量多的保留原始数据的主要信息,降低数据的冗余信息,以利于后续的识别。
LDA的核心思想是最大化类间差异,最小化类内差异,即保证同一个人的不同人脸图像在投影之后聚集在一起,不同人的人脸图像在投影之后被用一个大的间距分开。
PCA和LDA最后都归结于求解矩阵的特征值和特征向量,这有成熟的数值算法可以实现。
PCA和LDA都是线性降维技术,但人脸在高维空间中的分布显然是非线性的,因此可以使用非线性降维算法,典型的代表是流形学习和核(kernel)技术。
Ø 流形学习假设向量点在高维空间中的分布具有某些几何形状,然后在保持这些几何形状约束的前提下将向量投影到低维空间中,这种投影是通过非线性变换完成的。
Ø 核PCA与核LDA作为使用核技术的非线性降维方法,在人脸识别问题上也取得了比线性降维方法更好的结果。
人工特征 + 分类器
**介绍:**采用人工特征 + 分类器的思路。
- 人工特征,它要能有效的区分不同的人。
- 分类器有成熟的方案,如神经网络,支持向量机[7],贝叶斯[8]等。
描述图像的很多特征都先后被用于人脸识别问题,包括HOG、SIFT、Gabor、LBP等。它们中的典型代表是LBP(局部二值模式)特征[9],这种特征简单却有效。LBP特征计算起来非常简单,部分解决了光照敏感问题,但还是存在姿态和表情的问题。
联合贝叶斯是对贝叶斯人脸的改进方法[8],选用LBP和LE作为基础特征,将人脸图像的差异表示为相同人因姿态、表情等导致的差异以及不同人间的差异两个因素,用潜在变量组成的协方差,建立两张人脸的关联。文章的创新点在于将两个人脸表示进行联合建模,在人脸联合建模的时候,又使用了人脸的先验知识,将两张人脸的建模问题变为单张人脸图片的统计计算,更好的验证人脸的相关性,该方法在LFW上取得了92.4%的准确率。
人工特征的巅峰之作是出自CVPR 2013年MSRA的"Blessing of Dimisionality: High Dimensional Feature and Its Efficient Compression for Face Verification" ,一篇关于如何使用高维度特征在人脸验证中的文章,作者主要以LBP(Local Binary Pattern,局部二值特征)为例子,论述了高维特征和验证性能存在着正相关的关系,即人脸维度越高,验证的准确度就越高。
人脸识别发展从大的方面可分为传统方法和深度学习方法
由于传统方法在各方面受限,大多数方法仅旨在解决面部表情不受约束的情况,例如光照,姿势,表情或遮挡。这种浅层方法准确性提升有限,因此在以后的文章中不多作介绍。
2014年:DeepFace
在著名的LFW基准上达到了最先进的准确性。受这项工作的启发,研究重点转向基于深度学习的方法。并且在短短三年内,其准确性就大大提高到了99.80%以上。深度学习技术已经在几乎所有方面重塑了新的研究格局,例如算法设计,训练/测试数据集,应用场景,甚至是评估协议。
深度学习
介绍:通过学习得到的卷积核明显优于人工设计的特征+分类器的方案。在人脸识别的研究者利用卷积神经网络(CNN)对海量的人脸图片进行学习,然后对输入图像提取出对区分不同人的脸有用的特征向量,替代人工设计的特征。
前期,研究人员在网络结构、输入数据的设计等方面尝试了各种方案,然后送入卷积神经网络进行经典的目标分类模型训练;
后期,主要的改进集中在损失函数上,即迫使卷积网络学习得到对分辨不同的人更有效的特征,这时候人脸识别领域彻底被深度学习改造了!
网络架构和损失功能的发展进行系统的回顾。
各种损失函数分为基于欧几里得距离的损失,基于角/余弦裕度的损失和softmax损失及其变化。
DeepFace是CVPR2014上由Facebook提出的方法,是深度卷积神经网络在人脸识别领域的奠基之作,
-
人脸对齐:使用了3D模型来做人脸对齐任务,深度卷积神经网络针对对齐后的人脸Patch进行多类的分类学习
-
损失函数:使用的是经典的交叉熵损失函数(Softmax)进行问题优化,最后通过特征嵌入(Feature Embedding)得到固定长度的人脸特征向量。
-
缺点:Backbone网络使用了多层局部卷积结构(Local Convolution),原因是希望网络的不同卷积核能学习人脸不同区域的特征,但会导致参数量增大,要求数据量很大。
DeepFace在LFW上取得了97.35%的准确率,已经接近了人类的水平。Facebook搜集了4000个人400万张图片进行模型训练,也许我们能得出一个结论:大数据取得了成功!
之后Google推出FaceNet
-
损失函数:三元组损失函数(Triplet Loss)代替常用的Softmax交叉熵损失函数
-
人脸特征:在一个超球空间上进行优化使类内距离更紧凑,类间距离更远,最后得到了一个紧凑的128维人脸特征,其网络使用GoogLeNet的Inception模型
-
优缺点:模型参数量较小,精度更高,在LFW上取得了99.63%的准确率,这种损失函数的思想也可以追溯到早期的LDA算法。
DeepID1
-
人脸特征:使用四层卷积,最后一层为Softmax,中间为Deep Hidden
Identity Features,是学习到的人脸特征表示,并使用Multi-patch分别训练模型最后组合成高维特征 -
人脸验证:人脸验证阶段使用联合贝叶斯的方法;通过学习一个多类(10000类,每个类大约有20个实例)人脸识别任务来学习特征,文中指出,随着训练时要预测的人脸类越多,DeepID的泛化能力就越强。
DeepID2在DeepID1的基础上对损失函数部分做了改进,在原有Identification Loss基础上,增加了Verification Loss,其中Verification主要是增加类内的紧致度,而Identification是反应类间的变化。 通过提升类间差距,降低类内差距,是训练出来的特征更加适合类似人脸识别的任务。这一思想同样源于早期的LDA算法。
DeepID3 提出了用于人脸识别的两个非常深的神经网络结构(基于VGG和GoogleNet),但识别结果与DeepID2一样,或许当有更多的训练数据时,能够提高性能,需要进一步研究。
Softmax损失函数本身是用于解决多分类的问题,并没有针对隐含特征层去优化,往往直接训练出来的特征并不具有好的泛化能力。
Contrastive Loss和Triplet Loss虽然优化目标很明确很合理,但是需要研发人员具有丰富的数据工程经验(比如OHEM-困难样本挖掘)**。
Center-Loss在Softmax的基础上加入了一个维持类别中心的损失函数,并能使特征向所属类别中心聚拢,从而使达到了和Triple Loss类似的效果。
L-Softmax对Softmax做了改进,在网络设计上将最后一层分类层的偏置项去掉(这一做法在后续的人脸识别损失函数改进中都得到了使用),直接优化特征和分类器的余弦角度,通过人为设定增加了一个角度(Margin)增加了模型的学习难度。通过这种方式最终使类间距离增大,类内样本更紧凑。
SphereFace提出了A-Softmax,针对L-Softmax做了微小的改进,归一化了权重,可以看成在一个超球面的流形上对样本进行分类判别。
L2-Softmax,将特征向量做了L2归一化,这样做的好处是范数小的特征算出来的梯度会更大;而范数小的特征一般对应的是质量较差的图片。因此,某种程度上特征归一化起到类似于难例挖掘的作用。然而对特征层强行进行L2的约束会导致分类空间太小,导致模型训练困难,Loss值难以下降分类效果不佳。在实际的模型训练中为了便于模型优化作者加入尺度缩放因子将分类的超球空间放大。
后续的AM-Softmax和ArcFace都是针对SphereFace做了改进。
AM-Softmax是把角度裕量从cos(mθ)改进为cos(θ)+mcos(mθ)改进为cos(θ+m),主要的好处是这样改进之后容易收敛。
ArcFace可以看做是针对AM-Softmax的改进版本,直接针对角度去加Margin(红线标记的部分),这样做的好处是角度距离比余弦距离在对角度的影响更加直接。ArcFace同时对特征和权重归一化,参考L2-Softmax加入了固定的特征尺度因子S。通过针对性的对网络结构做了改进以及对MegaFace数据集的清洗,作者跑出了令人兴奋的指标。
未完待续。。。