人脸识别项目,网络模型,损失函数,数据集相关总结

2019-03-06  本文已影响0人  高永峰_GYF

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

L_S = -\frac{1}{m}{\sum\limits_{i=1}^m}\log\left(\frac{e^{W^T_{y_i}x_i+b_{y_i}}}{ {\sum\limits_{j=1}^n}e^{W^T_jx_i+b_j} }\right)
这是我们传统的Softmax公式,其中,{W^T_{j}x_i+b_{j}} 代表我们的全连接层输出,我们在使损失Ls下降的过程中,则必须提高我们的{W^T_{y_i}x_i+b_{y_i}}所占有的比重,从而使得该类的样本更多地落入到该类的决策边界之内。

Softmax Loss 而这种方式主要考虑样本是否能正确分类,缺乏类内和类间距离的约束。

5.2 Center Loss

L_C = -\frac{1}{2}{\sum\limits_{i=1}^m}{||x_i-c_{y_i}||}^2
\Delta{c_j}=\frac{{\sum\limits_{i=1}^m}{\delta{(y_i=j)}\cdot{(c_j-x_i)}}}{1+{\sum\limits_{i=1}^m}{\delta{(y_i=j)}}}
Center Loss的整体思想是希望一个batch中的每个样本的feature离feature 的中心的距离的平方和要越小越好,也就是类内距离要越小越好。作者提出,最终的损失函数包含softmax loss和center loss,用参数λ来控制二者的比重,如下面公式所示: L=L_S+L_C= -\frac{1}{m}{\sum\limits_{i=1}^m}\log\left(\frac{e^{W^T_{y_i}x_i+b_{y_i}}}{ {\sum\limits_{j=1}^n}e^{W^T_jx_i+b_j} }\right)+\frac{\lambda}{2}{\sum\limits_{i=1}^m}{||x_i-c_{y_i}||}^2因而,加入了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中,由{W^Tx}={||W||\cdot{||x||}\cdot{cos\theta}}知,特征向量相乘包含由角度信息,即Softmax使得学习到的特征具有角度上的分布特性,为了让特征学习到更可分的角度特性,作者对Softmax Loss进行了一些改进。L_{Softmax} = -\frac{1}{m}{\sum\limits_{i=1}^m}\log\left(\frac{e^{||W_{y_i}||\cdot{||x_i||}\cdot{cos\theta_{y_i}}+b_{y_i}}}{ {\sum\limits_{j=1}^n}e^{||W_{j}||\cdot{||x_i||}\cdot{cos\theta_{j}}+b_{j}} }\right) L_{modified_0} = -\frac{1}{m}{\sum\limits_{i=1}^m}\log\left(\frac{e^{{||x_i||}\cdot{cos\theta_{y_i}}}}{ e^{{||x_i||}\cdot{cos\theta_{y_i}}}+{\sum\limits_{j=1,j\ne{y_i}}^n}e^{{||x_i||}\cdot{cos\theta_{j}}}}\right)

其中,作者在L_{modified_0}中约束了||W||=1并且令b_j=0,并将{ e^{{||x_i||}\cdot{cos\theta_{y_i}}}}{\sum\limits_{j=1}^n}e^{{||x_i||}\cdot{cos\theta_{j}}}区分出来,就是为了让特征学习到更可分的角度特性。通过这样的损失函数学习,可以使得学习到的特征具有更明显的角分布,因为决策边界只与角相关。

对于Softmax而言,希望能有cos(θ_1)>cos(θ_2),所以作者增加了在角度空间中对损失函数的约束cos(t\cdotθ_1)>cos(θ_2),也就是要把同类数据压缩在一个紧致的空间,同时拉大类间差距。
由于cosθ[0,\pi]上单调递减,因此θ有上界,为了使得这个函数随角度单调递减,作者构造一个函数去代替cosθ 于是,作者提出了Angular Margin Loss,将角度边缘t置于cos(\theta) 函数内部,使得cos(\theta+t)\theta\in[0,\pi-t] 范围内要小于cos(\theta) ,这一约束使得整个分类任务的要求变得更加苛刻。对于L_{Arcface},在满足 W_j=\frac{W_j}{||W_j||},x_i=\frac{x_i}{||x_i||},cos{\theta_i}=W_j^Tx_i 的情况下,其损失计算公式为 Target Logit Curve 上图的Target Logit Curve描绘了随着角度值{\theta}的变化,对于L_{Cosine} = -\frac{1}{N}{\sum\limits_{i=1}^N}\log\left(\frac{e^{{s}\cdot{(cos(\theta_{y_i})-m)}}}{ e^{{s}\cdot{(cos(\theta_{y_i})-m)}}+{\sum\limits_{j=1,j\ne{y_i}}^n}e^{{s}\cdot{cos\theta_{j}}}}\right),其中的Target Logit 也就是指{cos(\theta_{y_i})-m}的值,s是归一化参数,在 而作者提供了训练开始时,中间以及收敛后的{\theta}的分布图,可以看到,在网络收敛的情况下,ArcFace和CosineFace的{\theta}分布基本在{\theta}\in{[30^{\circ},60^{\circ}]}范围内,同时,ArcFace和CosineFace的{\theta}中心值要更靠左一点,虽然在{\theta}\in{[0^{\circ},30^{\circ}]}范围内CosineFace对于网络的“惩罚”要大于ArcFace,但是由最终结果可以看出,收敛时{\theta}达到{\theta}\in{[0^{\circ},30^{\circ}]}范围内的数量很少,相对于{\theta}\in{[30^{\circ},60^{\circ}]}范围内可以忽略,而在ArcFace对于网络的“惩罚”要大于CosineFace的{\theta}\in{[30^{\circ},60^{\circ}]}范围内分布着绝大多数的{\theta} 我们已经由{\theta}的分布图可知在收敛的时候ArcFace的{\theta}中心值与CosineFace相比要偏左一点,同时,由上图可知,收敛的时候红色实线要高于蓝色和黄色实线,也就意味着,收敛的时候ArcFace相对于其他Loss使得同一类更加“紧凑”,相对于其他的Loss实现了将同一个类压缩到一个更紧致的空间,更密集,使得网络学习到的特征具有更明显的角分布特性。

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。 Input selects

6.2 Output selects E

对于网络的最后几层,不同的输出可能会影响模型的性能,因此作者对Option-A到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输出,第三是使用了改善后的残差块。

同样实验表明,采用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
亚洲人脸数据集

上一篇 下一篇

猜你喜欢

热点阅读