1.前言
近年来随着硬件计算能力的大爆发,在高性能计算的支持下深度学习有了革命性的进步,在互联网大数据的保证下深度学习有了持续不断的动力,优秀的网络结构被不断提出,深度学习技术已被推向 时代浪潮。在深度学习的分支领域,计算机视觉领域当中,人脸识别技术的发展依然是工业界、学术界重点关注的对象。
2.人脸识别开源项目
face_recognition | openface | |
---|---|---|
github | face_recognition | openface |
特征向量维度 | 128 | 128 |
输入对齐的人脸尺寸 | 112*112 | 96*96 |
Accuracy(LFW) | 99.38% | 92.92% |
训练数据集 | FaceSrub,VGGface,网络图片 | FaceSrub(530人10万张)和CASIA-WebFace(1万人50万张) |
网络架构 | Resnet | Inception |
项目特点 | 安装和使用简单,支持Mac,Linux和Windows平台 | 网络模型结构和训练数据集较老 |
图片测试 | 测试方法为mtcnn检测和对齐人脸,将对齐人脸输入网络中提取特征,然后对特征进行相似度计算。(余弦距离,欧式距离) | 相同 |
平均时间 | 24ms | 11ms |
测试 | 欧式距离,阈值0.6 | 官方使用欧式距离,阈值0.99 |
Loss | Triple Loss结构:一个组三个图像,分别是一个标准图像,一个正样本(与标准同一人),一个负样本(不同的人) 所有同类样本之间的距离+阈值threshold,要小于异类样本之间的距离 |
facenet | insightface | |
---|---|---|
github | facenet | insightface |
特征向量维度 | 512 | 512 |
输入对齐的人脸尺寸 | 112*112 | |
Accuracy(LFW) | 99.63% | 99.74% |
训练数据集 | CASIA-WebFace和MS-Celeb-1M | MS-Celeb-1M和VGGface2 |
网络架构 | Inception ResNet v1 | ResNet |
项目特点 | FaceNet是谷歌提出的网络结构,其网络结构灵活性较大可以使22层的Zelier&Fergus的网络,也可以使用现在在物体识别里面效果比较好的inception网络。其主要特点采用三元对之间的距离构建损失函数。 | 网络模型结构和训练数据集较新 |
图片测试 | 测试方法为mtcnn检测和对齐人脸,将对齐人脸输入网络中提取特征,然后对特征进行相似度计算。(余弦距离,欧式距离) | 相同 |
平均时间 | 22ms | |
测试 | 直接通过模型计算距离,并通过距离进行分类和预测。 | 余弦距离,阈值0.33 |
Loss | Triple Loss |
DeepFace、DeepID 参考 https://blog.csdn.net/hh_2018/article/details/80581612。
DeepFace:在实现时需要使用3D对齐技术,然后将对齐的结果送入一个9层网络进行处理。整个训练过程前两个卷积层采用了共享卷积核,后三个卷积采用不共享卷积核,倒数第二层采用全连接层提取出对应的人脸特征。最后一层是一个softmax层分类。
DeepID:DeepID网络有一代和二代两种,两种网络的区别主要在于损失函数的定义。以DeepID二代为例,其网络结构是8层网络结构。4个卷积层,3个池化层,1个全连接层,全连接得到的是160特征向量。然后在根据160维向量svm或者softmax分类。在第一阶段处理完之后还根据生成的结果训练了用于鉴定图片是不是一类的贝叶斯分类器。并用该分类器对特征向量进行筛选并且可以泛化的。除此之外,该网络的最后一层分别和倒数前两层相连接(为了视野的互补)。
3.人脸识别流程
人脸识别分为四个过程:人脸检测、人脸对齐、特征提取、特征匹配。其中,特征提取作为人脸识别最关键的步骤,提取到的特征更偏向于该人脸独有的特征,对于特征匹配起到举足轻重的作用,而我们的网络和模型承担着提取特征的重任,优秀的网络和训练策略使得模型更加健壮。
但在Resnet(2015年被提出)网络表现力十分优秀的情况下,要提高人脸识别模型的性能,除了优化网络结构,优化损失函数是另一种选择,优化损失函数可以使模型从现有数据中学习到更多有价值的信息。
4.人脸数据集
在训练过程中,神经网络都是基于我们的训练数据学习特征的,既然是从训练数据学习特征,最终的方向自然是逼近最终数据的最真实的特征,也就是说,我们数据最原始是什么样子,我们的网络的极限就是什么样子,它不能超越数据本身,而研究者在做的事情,也就是使得网络最后能更加逼近“极限”。所以数据在深度学习中扮演着极其重要的角色,所以文章中强调了干净的数据(数据清洗)的重要性。这里列举一些文章中提到的开源数据集。
4.1 VGG2
VGG2Face人脸数据集包含有训练集8631个人的脸(总量有3141890张人脸),测试集包含有500个人的脸(总量有169396张人脸),属于高质量数据集。
4.2 MS-Celeb-1M
MS1M数据集包含有大约10万个人的脸(大约有1千万张人脸),但是数据集中包含有很多的“噪声”,所以作者对MS1M做了数据清洗,最终作者清洗得到的干净的数据包含有8.5万个人的脸(包含有380万张人脸)。
4.3 MegaFace
MegaFace数据集包含有69万个人的脸(包含大约有100万张人脸),所有数据由华盛顿大学从Flickr上组织收集。MegaFace是第一个在百万规模级别的面部识别算法的测试基准,这个项目旨在研究当数据库规模提升数个量级时,现有的脸部识别系统能否维持可靠的准确率。MegaFace是目前最为权威、最热门的评价人脸识别性能,特别是海量人脸识别检索性能的基准参照之一。
4.4 LFW
LFW(Labeled Faces in the Wild)数据集包含了从网络收集的13000张人脸图像,每张图像都以被拍摄的人名命名。其中,有1680个人有两个或两个以上不同的照片。LFW主要侧重于对比两张人脸照片是否具有相同身份不同。
4.5 CPF
CFP(Celebrities in Frontal Profile )数据集是美国名人的人脸数据集,其中包含有500个人物对象,有他们的10张正面照以及4张形象照,因此在作为人物比对验证的时候,作者选用了最有挑战的正面照与形象照作为验证集(CFP,Frontal-Profile,CFP-FP )。
4.6 AgeDB
AgeDB(Age Database )数据集包含有440个人的脸(包含有12240张人脸),但其中包含有不同人的不同年龄阶段的照片,最小从3岁到最大101岁时期的照片,每个对象的平均年龄范围为49年。作者采用和LFW一样的对比验证方式。
最后,作者在网络训练过程中采用了VGG2以及MS1M作为训练集,选用了LFW、CPF以及AgeDB作为验证集,最终使用MegaFace作为评测标准。
5.损失层
关于Loss对于网络的影响,最直观的就是通过计算Loss反传梯度来实现对模型参数的更新,不同的Loss可以使模型更加侧重于学习到数据某一方面的特性,并在之后能够更好地提取到这一“独有”的特征,因此Loss对于网络优化有导向性的作用。
而在近年来人脸识别领域,优化Loss对于最终结果的提高有很大的帮助,从Center Loss的提出,到SphereFace,CosineFace,InsightFace等都有在损失函数这一环节提出新的解决方案,它们的出现对于人脸识别的发展做出了不可磨灭的贡献。
无论是SphereFace、CosineFace还是ArcFace的损失函数,都是基于传统的softmax loss进行修改得到的,所以想要理解ArcFace,需要对之前的损失函数有一定理解。
5.1 Softmax Loss
这是我们传统的Softmax公式,其中, 代表我们的全连接层输出,我们在使损失下降的过程中,则必须提高我们的所占有的比重,从而使得该类的样本更多地落入到该类的决策边界之内。
5.2 Center Loss
Center Loss的整体思想是希望一个batch中的每个样本的feature离feature 的中心的距离的平方和要越小越好,也就是类内距离要越小越好。作者提出,最终的损失函数包含softmax loss和center loss,用参数λ来控制二者的比重,如下面公式所示: 因而,加入了Softmax Loss对正确类别分类的考虑以及Center Loss对类内距离紧凑的考虑,总的损失函数在分类结果上有很好的表现力。以下是作者继上个实验后使用新的损失函数并调节不同的参数λλ得到的实验结果,可以看到,加入了Center Loss后增加了对类内距离的约束,使得同个类直接的样本的类内特征距离变得紧凑。
5.3 SphereFace
Center Loss的出现,使得人脸识别的研究转向损失函数的改进,对于之前的损失函数,研究发现Softmax Loss学习到的特征分辨性不够强,Center Loss考虑到了使得类内紧凑,却不能使类间可分,而Contrastive Loss、Triplet Loss增加了时间上的消耗,[SphereFace: Deep Hypersphere Embedding for Face Recognition]这篇文章的作者提出了A-Softmax Loss。
在Softmax Loss中,由知,特征向量相乘包含由角度信息,即Softmax使得学习到的特征具有角度上的分布特性,为了让特征学习到更可分的角度特性,作者对Softmax Loss进行了一些改进。
其中,作者在中约束了并且令,并将从区分出来,就是为了让特征学习到更可分的角度特性。通过这样的损失函数学习,可以使得学习到的特征具有更明显的角分布,因为决策边界只与角相关。
对于Softmax而言,希望能有 ,所以作者增加了在角度空间中对损失函数的约束 ,也就是要把同类数据压缩在一个紧致的空间,同时拉大类间差距。由于 cosθ在 上单调递减,因此 θ有上界,为了使得这个函数随角度单调递减,作者构造一个函数去代替 cosθ
在SphereFace的实际训练过程中,作者发现引入Softmax约束可以保证模型的收敛性。因此,对 函数做了变更,并同时用参数λ来控制二者的比重。
后续的F-Norm SphereFace对SphereFace做了更新,仅注重从数据中得到的角度信息,而不考虑特征向量的值,所以采用了 作为特征归一化参数替代了 ,因此公式更新为:
5.4 Cosine Margin Loss
与SphereFace相比,CosineFace最明显的变化就是将中的 提出来变成,与之前相比,这样有几个明显的优势。
- 相对于SphereFace而言要更加容易实现,移除了,减少了复杂的参数计算
- 去除了Softmax监督约束,训练过程变得简洁同时也能够实现收敛
- 模型性能有明显的改善
5.5 Arcface Margin Loss
尽管在余弦范围到角度范围的映射具有一对一的关系,但他们之间仍有不同之处,事实上,实现角度空间内最大化分类界限相对于余弦空间而言具有更加清晰的几何解释性,角空间中的边缘差距也相当于超球面上的弧距。
于是,作者提出了Angular Margin Loss,将角度边缘 置于 函数内部,使得 在 范围内要小于 ,这一约束使得整个分类任务的要求变得更加苛刻。对于,在满足 的情况下,其损失计算公式为5.6 Loss对比分析
为了研究 SphereFace、 CosineFace 和ArcFace是如何提高人脸识别的效果,作者使用了 LResNet34E-IR网络和M1SM人脸数据集分别使用不同的损失函数对网络进行训练,客观分析了其中的影响。
上图的Target Logit Curve描绘了随着角度值 的变化,对于 ,其中的Target Logit 也就是指 的值, 是归一化参数,在6.网络
为了衡量怎样的网络更适合人脸识别,作者在基于VGG2Face作为训练集和使用Softmax作为损失函数的情况下对Resnet网络做了不同的设置,以期望能达到最好的效果。
作者用了8块特斯拉P40的显卡,设置训练时的总的Batch Size为512,同时学习率从0.1开始在分别在10万、14万、16万次迭代下降一个量级,设置了总的迭代为20万次,momentum 动量为0.9,权值衰减为 5e−4 。
PS:实验表明采用权值衰减值为5e−4效果最好。
6.1 Input selects L
大多数的卷积神经网络为完成Image-Net的分类任务而设计的,所以网络会采用224x224的输入,然而作者所用的人脸大小为112x112,如果直接将112x112的数据作为预训练模型的输入会使得原本最后提取到的特征维度是7x7变成3x3,因此作者将预训练模型的第一个7x7的卷积层(stride=2)替换成3x3的卷积层(stride=1),这样第一个卷积层就不会将输入的维度缩减,因此最后还是能得到7x7的输入,如下图所示,实验中将修改后的网络在命名上加了字母“L”,比如SE-LResNet50D。6.2 Output selects E
对于网络的最后几层,不同的输出可能会影响模型的性能,因此作者对Option-A到Option-E分别做了测试,在测试过程中,利用两个特征向量对距离进行计算。在识别与验证的过程中采用了最近邻与阈值比较法。
- Option-A: Use global pooling layer(GP).
- Option-B:Use one fullyconnected(FC) layer after GP.
- Option-C: Use FC-Batch Normalisation (BN) after GP.
- Option-D: Use FC-BN-Parametric Rectified Linear Unit (PReLu) after GP.
- Option-E: Use BN-Dropout-FC-BN after the last convolutional layer. 经过对比结果得知,使用Option-E模型能取得更好的表现。
6.3 Block selects IR
作者改善了Resnet网络的残差块使其更适合人脸识别模型的训练,采用 BN-Conv-BN-PReLu-Conv-BN 结构作为残差块,并在残差块中将第一个卷积层的步长从2调整到1,激活函数采用PReLu替代了原来的ReLu。采用修改过的残差块的模型作者在后面添加了“IR”以作为标识。综上所述,最终在Resnet网络上做出了3项改进,第一是将第一个7x7的卷积层(stride=2)替换成3x3的卷积层(stride=1),第二是采用了Option-E输出,第三是使用了改善后的残差块。
7.评估
作者同时对比测试了其他主流的网络结构,有MobileNet、Inception-Resnet-V2、DenseNet、Squeeze and excitation networks (SE)以及Dual path Network (DPN),评价的标准由精确度、速度以及模型大小组成。 同时,MegaFace作为百万规模级别的面部识别算法的测试基准,作者以LResNet100E-IR作为网络结构,以MS1M作为训练集,分别对比了不同损失函数在MegaFace上的表现,其中最后两列括号中有“R”是代表清洗过的MegaFace,Rank1指标代表第一次命中率,VR@FAR代表在误识率FAR上的TAR,也就是说第一次命中率Rank1越高越好,VR@FAR越高越好。8.参考
收集arxiv.org一些Face Papers
TensorFlow 人脸识别OpenFace、Face-recognition、Insightface和FaceNet源码运行
论文阅读之Arcface
亚洲人脸数据集