特征脸Eigenface:
Eigenface(特征脸)在人脸识别历史上应该是具有里程碑式意义的,其被认为是第一种有效的人脸识别算法。1987年 Sirovich and Kirby 为了减少人脸图像的表示(降维)采用了主成分分析法(Principle Component Analysis, PCA)的方法,1991年 Matthew Turk和Alex Pentland首次将PCA应用于人脸识别,即将原始图像投影到特征空间,得到一系列降维图像,取其主元表示人脸,因其主元有人脸的形状,估称为“特征脸”。
这里的低维空间维度通常是由用户指定的,例如原始论文中仅使用了 7个维度。 PCA 方法中得到的特征值即为其对应特征向量那个方向上样本的标准差,所以另一个选择参数 d 的方式是由重构误差来进行选择,例如选择保留 d 个特征值之和与全部特征值之和之比大于 99% 的最小的 d。
特征脸的主要问题在于它是一个无监督的算法,它只能寻找到使样本尽可能分散开的几个维度,而分散开也不代表一定能将人脸区分开来,特征脸无法找到能够使样本之间的间距拉大的那些维度,判别脸由此而生。
判别脸Fisherface:
Fisherface是一种基于线性判别分析(Linear Discriminant Analysis, LDA)的人脸识别算法。
由Belhumeur,hespanha,Kriegman于1997年提出。它的主要思想也是降维,但降维的方向被设定为使得同类样本的投影点尽量相近、异类样本的投影点尽量远离的方向。
主成分分析与线性判别分析的主要区别在于散度矩阵的定义,主成分分析使用整体散度矩阵 St 进行优化,而线性判别分析使用类间散度矩阵除以类内散度矩阵 Sw-1Sb 进行优化。主成份分析使得全部样本尽可能分散,而线性判别分析使得类间更加分散、类内更加聚拢,因此线性判别分析更加适合进行人脸识别任务。
Haar、Haar-like、LBP、LBPH、HOG、DPM:
Haar-like,也就是最经典的Viola-Jones算法中使用的特征,由Viola和Jones于2001年发表于
《Rapid Object Detection using a Boosted Cascade of Simple Features》
《Robust Real-Time Face Detection》
《An Extended Set of Haar-like Features for Rapid Object Detection》
LBPH,局部二值式直方图(Local Binary Pattern Histograms),由Ahonen,Hadid,Pietikainen于2004年提出
HOG,由Navneet Dalal在cvpr2005提出
DPM,由Felzenszwalb在2008年提出,附带一系列cvpr,nips。算是非深度学习时代最好的特征算子了。
Deepface:
DeepFace: Closing the Gap to Human-Level Performance in Face Verification[C]. CVPR, 2014
训练 softmax loss
推理 cos距离
LFW上达到97.35% (人类识别cropped image结果达到97.53%) (LFW:5749人,13233张图)
DeepID:
Deep Learning Face Representation from Predicting 10,000 Classes[C]. CVPR, 2014
汤老师组的作品
10 crops, 3 scales, rgb+gray + flipped 160*2*60dim
训练:各自做softmax loss
推理:联合贝叶斯 LFW 97.2%
整体流程:
网络结构:
DeepID2 (contrastive loss):
Deep Learning Face Representation by Joint Identification-Verification[J]. NIPS, 2014
汤老师组的作品
训练200 patches+ flipped
使用2个loss,分别为softmax loss , contrastive loss
softmax loss:
contrastive loss:
推理:挑选25个feature pca降维 联合贝叶斯 LFW 99.15%
DeepID2+:
Deeply learned face representations are sparse, selective, and robust[J]. CVPR, 2015
汤老师组的作品
增加通道维度conv128 fc512
增大训练数据集
增加网络训练监督次数,每一个pooling之后都外接fc,进行verification
LFW:99.47%
DeepID3:
DeepID3: Face Recognition with Very Deep Neural Networks
汤老师组的作品
改进:
采用了当时最新的vgg和googlenet网络结构,使得网络结构较DeepID2+更深。
继续采用DeepID2+中的监督信号跨层连接策略。 继续采用DeepID2+中的25个patches(加flip)特征组合策略。其中VGG和googlenet各训练一半。 继续采用DeepID2+中的joint bayesian用于验证的策略。
FaceNet (triplet loss):
FaceNet: A unified embedding for face recognition and clustering[J]. CVPR, 2015
triplet loss:
xa ,xp 为同一类,xn与xa, xp为不同类,alpha为margin
实验结果: Inception+triplet LFW 99.63%
优点:
不需像分类loss,对于训练数据每类图像数有限制。当图像样本不均衡且每类只有很少样本时也可有效利用triplet loss。
缺点:
triplet选择导致样本数激增,选择样本简单会导致训练缓慢,选择样本过难会使得选triplet太慢且易受受噪声干扰。所以triplet的选择至关重要。
semi-hard的样本选择:
后续改进:
- triplet对选择方式的改进,improved triplet,分别计算a,p的loss,a,n的loss,p,n的loss。
- loss计算方式的改进quadruplet loss,4个样本,i表示anchor,j表示P,k,l都表示n,也就是1个anchor,1个正样本,2个负样本,2个负样本为不同类别。
caffeFace(Centerloss):
A Discriminative Feature Learning Approach for Deep Face Recognition[C]. ECCV, 2016
siat乔宇老师组的,温研东的1作
centerloss只约束内内的距离,对内间距离无约束。
Softmax+centerloss
训练中计算方式,
实验结果:
与softmax联合使用
lamda = 0.003 alpha = 0.5
LFW 99.28%
range loss:
Range Loss for Deep Face Recognition with Long-tail. CVPR, 2017
siat乔宇老师组的,温研东的3作,算是center loss的改进版,内内,内间距离都有约束
训练,softmax+range loss
Dcenter表示在所有类别中,选择2个不同类别中心距离最短的,即类别Q和类别R是所有距离中最短的。
优点:
- 解决训练数据集分布不均,长尾问题
- 联合考虑了batch内所有类内类间距离
- contrastive loss, triplet loss是在两三个样本间独立作比较,而range loss是多个类别所有样本的中心距离的比较
实验结果:
LFW结果 99.52% 实验 k=2
Large-Margin Softmax (LSoftmax):
Large-margin softmax loss for convolutional neural networks[J].ICML, 2016
温研东的2作
基于softmax的改进,
(1)去掉了偏置b,wx+b --> wx
(2)引入乘性margin m(cos函数内部),当m=1时,为softmax
优点:
之前的改进方法都是额外加一个内内,内间的优化loss,这样会引入额外的参数和计算量。现在改为直接优化softmax函数。
Sphereface(ASoftmax(angular softmax)):
SphereFace: Deep Hypersphere Embedding for Face Recognition.cvpr,2017
温研东的2作
改进:
去掉||w||影响,将权值W进行了归一化操作,同时加入乘性margin(cos函数内部)
实验结果:
NormFace:
Normface: L2 hypersphere embedding for face verification[C], ACM, 2017
成都电子,王峰的作品
改进:
去掉||w||和||x||影响,对权值w和输入x都进行了归一化操作,同时外部乘以系数s,注意必须乘以s,保证变换前和变换后整体的均值一样。注意这里去掉了margin。
AM-Softmax / CosFace:
Additive margin softmax for face verification[J]. IEEE Signal Processing Letters, 2018
分别为成都电子,王峰和腾讯AI Lab的2篇论文,做的同样的工作。
改进:
w、x归一化,将cos内部的乘性margin修改为cos外部的加性margin(该margin在cos函数的外面加)
多种margin约束比较:
Arcface(insightface)
改进:
w、x归一化,将cos函数的外面的加性margin修改为cos函数里面的加性margin
多种margin约束比较:
方法总结:
(1)contrastive loss (两个样本比较) triplet loss(三个样本比较) range loss(mini_batch内比较)
(2)Softmax->LSoftmax(cos(m*seita))->ASoftmax(cos(m*seita),/||w|| )->Normface->(/||w||,/||x||,注意前面得乘系数s)->AMSoftmax cosface (cos(seita)-m,/||w||,/||x||) -> arcface(cos(seita+m),/||w||,/||x||)
Question:
Triplet loss和center loss本质上看都是类内,类间距离的优化。Triplet loss增大内间,减少类内,center loss减少类内,那为什么center loss需要和softmax一起训练,而Triplet却不需要?
Triplet loss增大内间,减少类内,本质上更像一个无监督的聚类,本质上都不需要知道哪个人是哪个类别,只要知道这个人和那个人是不是一个人,就可以确定出mask矩阵。既增大内间,又减少类内,其实就变现的实现了分类的功能。
center loss只减少类内,不同类别之间却没有优化,单靠自己的loss实现不了分类的功能,而softmax可以实现分类功能,可以理解为softmax增大了类间的距离。
所以,Triplet loss可以单独的训练人脸识别,而center loss必须和softmax一起训练。
而后续的LSoftmax,ASoftmax,Normface,AMSoftmax cosface,arcface本质都是softmax的变种,当然可以直接训练。