特征脸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 进行优化。主成份分析使得全部样本尽可能分散,而线性判别分析使得类间更加分散、类内更加聚拢,因此线性判别分析更加适合进行人脸识别任务。

 

HaarHaar-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的样本选择:

后续改进:

  1. triplet对选择方式的改进,improved triplet,分别计算a,p的loss,a,n的loss,p,n的loss。

     

  2. 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是所有距离中最短的。

优点:

  1. 解决训练数据集分布不均,长尾问题
  2. 联合考虑了batch内所有类内类间距离
  3. 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

CosFace: Large margin cosine loss for deep face recognition[J]. arXiv preprint arXiv:1801.09414, 2018

分别为成都电子,王峰和腾讯AI Lab的2篇论文,做的同样的工作。

改进:

w、x归一化,将cos内部的乘性margin修改为cos外部的加性margin(该margin在cos函数的外面加)

多种margin约束比较:

 

Arcface(insightface)

Arcface: Additive angular margin loss for deep face recognition[J]. arXiv preprint arXiv:1801.07698, 2018

改进:

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的变种,当然可以直接训练。