浅析人脸识别算法及其应用
前言
随着深度学习和计算机硬件的快速发展,基于深度卷积神经网络的一系列算法都取得了显著的进展,其中人脸识别作为计算机视觉领域中时间最久远、应用最广泛的研究课题之一,近些年也在深度学习的加持下在性能方面获得了大幅提升,并在实际的生活场景中得到了广泛的应用。目前基于深度学习的人脸识别系统一般由三个关键步骤族组成:人脸检测(face detection)、人脸预处理(face preprocess),人脸识别(face recognition)。人脸检测主要用来检测出图像或视频帧中的人脸位置。然后,通过人脸预处理将检测到的人脸裁减出来,在此基础上检测出人脸的关键点,利用人脸关键点对齐到一个规范的视角并将他们缩放到一个标准化像素大小。最后,在人脸识别阶段,从预处理后的图像中利用深度学习提取出人脸的深层特征用于识别。这三个步骤都是通过利用深度卷积神经网络实现的。本文主要以人脸识别部分为主。首先,我们介绍端到端深度人脸识别的概述,如上所述包括人脸检测、人脸预处理和人脸识别。然后,对人脸识别评估指标,数据集,最新的算法设计,性能比较等多方面进行深入探索。
基本概念
如图所示,目前主流的人脸识别算法整体可以分为以下三个模块。
人脸检测:用来在图像和视频中定位人脸;
人脸关键点检测:用来对齐人脸到规范化的坐标上;
人脸识别模块:基于对齐的人脸做人脸验证或者识别。
其中人脸识别模块又可以划分成人脸验证和人脸识别。不论是哪种,都需要提供训练集(gallery)和测试集(probe)。人脸验证是基于测试集和训练集计算当前两张人脸是否属于同一个人(1:1);人脸识别是计算当前测试人脸与人脸库中哪一张最相近(1:N)。当测试的人脸出现在训练集中,该问题叫做闭集识别(closed-set identification),当测试的人脸不在训练集中,该问题叫开集识别(open-set identification)。
常用人脸识别数据集
Labeled Faces in the Wild Home (LFW)
大小:5749 人,超过 13233 张人脸图像。来源:来自网络,使用 Viola-Jones 检测器采集。特点:
大约 1680 个人包含两个以上的人脸,可提供 3000 个匹配的面部图像对和 3000 张不匹配的人脸图像对。
许多团体的代表并不充分。例如,只有很少的孩子,没有婴儿,年龄在 80 岁以上的人很少,而妇女的比例相对较小。另外,许多种族的代表很少或根本没有。
缺少其他条件,例如光线不足,极端姿势,强烈的遮挡,低分辨率和其他重要因素。
有四组不同的 LFW 图像,包括原始图像和三种不同类型的“对齐”图像
测试集:使用 10 倍交叉验证进行测试。
CASIA-WebFace
大小: 包含 10,575 个对象和 494,414 张图片。来源:IMDb 特点:
使用相似度聚类来去掉一部分噪声。
每个类下面都有 3 张以上的图片。
使用 IMDb 上爬虫的图片,标签相对准确。
测试集:LFW
MS-Celeb-1M
大小:100K 人的共 10M 图片。来源:来自微软,通过搜索引擎收集。特点:
不专门针对某一类人群,包含各个领域,可以应用在所有实际场景。
由于人数多,所以类间差异较小。同时类内差距较大(年龄,化妆等因素) 。
提供原始图像的缩略图和原始图像的裁切脸部区域图像(有/无对齐) 。
数据多样性高,性别,年龄,职业,种族,国籍分布较均匀。
没有被请洗过的 MS1M 数据集噪声太大,有人工引入的噪声,可以使用清洗过的数据集(来自 insightface 团队)。
验证集:为每个名人选择两张图像,一张随机,一张选择与此名人差异最大的图像,然后与其他名人或普通人的图像混合。
MegaFace
大小:672K 人,4.7M 张图片。来源:Flickr(雅虎旗下图片分享)。特点:
针对普通人,而非名人。
不受约束的姿势,表情,照明和曝光。
范围广,包含许多不同的人,而不是少数人的许多照片。
测试集图像中混合了 100 万个干扰物。
对于每张脸,人脸约占照片的 75%。
测试集:利用 Google 对 FaceScrub 数据集进行排序,选择 50 个最受欢迎的人和 50 个最不受欢迎的人,从每人的 100 张图片里随机选择一张作为 probe image,其余的 99 张作为 gallery images。再从 MegaFace 数据集中随机选择了 10K 张照片作为干扰项。
VGGFace2
大小:9131 个 ID,331 万图片来源:谷歌图片中下载特点:
人物 ID 较多,且每个 ID 包含的图片个数也较多。
覆盖大范围的姿态、年龄和种族。
通过自动和手动过滤将标签噪音降至最低。
在姿势,年龄,照度,种族和职业方面(例如演员,运动员,政治人物)差异很大。
数据集中包括人脸框,5 个关键点、以及估计的年龄和姿态。
测试集:其中 500 个 ID 作为测试集。测试场景可以按姿态和年龄模板分为两类,模板由 5 张姿态/年龄接近的同一 ID 的人脸图片组成。
总结
使用 VGGFace2 和 MS-Celeb-1M 数据集对网络进行训练,可以满足日常人脸识别的应用需求。首先在 MS-celeb-1M(广度)上训练,然后在 VGGFace2(深度)进行微调。
人脸识别评价指标
人脸验证
TAR
True Accept Rate,表示正确接受的比例。对相同人的图片对进行比较,我们计算出的相似度大于阈值的图像对所占的比例。TAR 越大越好。
FAR
False Accept Rate,错误接受率。比较不同人的图像时,把其中的图像对当成同一个人图像的比例。FAR 越小越好。
其中 NFA为错误接受次数,NIRA 为类间测试次数。
人脸验证评价标准总结
人脸验证通常使用 ROC(receiver operating characteristic)和平均 ACC(accuracy)进行评估。给定一个阈值(独立变量),ROC 分析可以测量真接受率(true accept rate,tar),真正超过阈值的结果所占比例;假接受率(false accept rate,far)是不正确的超过阈值的结果所占比例。ACC 是 LFW 采用的一个简化指标,表示正确分类的比例。随着深度人脸识别的发展,测试数据集上的指标越来越严格地考虑安全程度,以便在大多数安全认证场景中当 FAR 保持在非常低的比例时,TAR 能够符合客户的要求,如:TAR@10−6FAR。
闭集人脸识别
Rank-K
Rank-K 基于测试样本搜索在排序结果前 K 个中返回测试样本的正确结果百分比。CMC 曲线表示在给定 rank(独立变量)测试样本识别的比例。
精度 P
覆盖率
闭集人脸识别评价指标总结
(1)Rank-N 和累积匹配特征(cumulative match characteristic, CMC)是该场景中常用的指标。Rank-N 基于测试样本搜索在排序结果前 N 个中返回测试样本的正确结果百分比。CMC 曲线表示在给定 rank(独立变量)测试样本识别的比例。
(2)MS-Celeb-1M 使用 precision-coverage 曲线去基于可变阈值 t 下测试识别性能。当得分低于阈值 t,则该测试样本会被拒绝。算法之间对比就是看测试样本到底测试正确了多少,Coverage@Precision 99%和 Coverage@Precision 95%,即 P(t)大于等于 0.95 或 0.99 的条件下,C(t)的最大值。
开集人脸识别
FNIR
False negative identification rate,错误拒绝辨识率:注册用户被系统错误辨识为其他注册用户的比例。即:设定分数阈值 T,已注册用户进行比对时,分数>=T 的样本不存在。
FPIR
False positive identification rate,错误接受辨识率:非注册用户被系统辨识为某个注册用户的比例。即:设定分数阈值 T,未注册用户进行比对时,分数>=T 的样本存在。
开集人脸识别评价标准总结
该场景是人脸搜索系统中较为常见的,识别系统应该拒绝那些不在 gallery 中的图片。因此引入了一个决策误差权衡(decision error tradeoff, DET),利用假阳性识别率(FPIR)衡量 probe 与非配对 gallery 之间的比较分数,导致匹配得分超过 T 的比例。同时,假阴性识别率(FNIR)衡量 probe 搜索将不匹配某 probe 的分数得分高于 T 的配对图库模板。算法在 FPIR 较低(1%,10%)的情况下以 FNIR 的结果进行评估。
总结
对于开集人脸识别,一般我们会计算的是算法在 FPIR 较低(1%,10%)的情况下以 FNIR 的结果进行评估。
主流人脸识别网络介绍
FaceNet
1. 使用 Triplet Loss,同时利用三组图像进行训练。
2. 直接使用检测网络,不是必须要对齐数据集。
3. 当使用 LFW 固定中心裁切时,达到了 98.87% (+-0.15)的分类精度,在使用额外的人面对齐时达到了 99.63% (+-0.09)的标准误差。
缺点:(1)人脸三元组的数量出现爆炸式增长,特别是对于大型数据集,导致迭代次数显著增加;(2)样本挖掘策略造成很难有效的进行模型的训练。
CenterLoss
1. 使用 Center Loss 减小类内差距。
2. 联合 Softmax Loss 一起使用,增大类间差距。
3. 使用 CASIAWebFace、CACD2000、Celebrity+进行训练。
缺点:在训练期间更新实际类别中心非常困难,因为可供训练的人脸类别数量最近急剧增加。
SphereFace
1. 使用角度 SoftMax(A-SoftMax)损失,使卷积神经网络(CNN)能够学习角度识别特征。
2. 只使用标准的预处理,所有图像中的人脸由 MTCNN 检测,通过相似变换得到了被裁剪的人脸。
缺点:损失函数需要一系列近似才能计算出来,从而导致网络训练不稳定。为了稳定训练,他们提出了一个混合损失函数,其中包括标准的 Softmax loss。经验上,softmax loss 在训练过程中占主导地位,因为基于整数的乘角裕度使得目标逻辑曲线非常陡峭,从而阻碍了收敛。
InsightFace
1. 提出了一种加性角度裕量损失算法
2. 利用 arc-cosine 函数来计算当前特征和目标权重之间的角度。在目标角上加上一个附加的角度裕度,用余弦函数重新计算逻辑回归的反向传播过程。然后用一个固定的特征范数重新缩放所有的逻辑,随后的步骤与 Softmax loss 中的步骤完全相同。
3. 网络具有有效,易用,高效的特性。
缺点:损失的最终表现受到其超参数设置的显着影响,这些设置通常难以调整并且在实践中需要多次试验。
AdaCos
1. 提出基于余弦的 softmax 损失 AdaCos。
2. 不需要超参数,并利用自适应比例参数在训练过程中自动加强训练监督。
3. 可以动态地缩放训练样本和相应的类中心向量(softmax 之前的完全连接向量)之间的余弦相似度,使得它们的预测类概率满足这些余弦相似性的语义含义。
缺点:github 上有一些人测试,发现自适应的参数只在某些数据集上表现良好,而在自己的私人数据集中表现不好。
VarGFaceNet
1. 引入了刻板组卷积,以解决小计算量与块内计算强度不平衡之间的冲突。
2. 采用可变组卷积来设计了网络,对头部(head)进行设置,用于在网络开始时保留基本信息,并提出特定的嵌入方法以减少用于嵌入的全连接层的参数。
3. 采用等效的角度蒸馏损失来指导我们的轻量级网络,并应用递归知识蒸馏来缓解教师模型和学生模型之间的差异。
缺点:公开资料较少,训练代码未公开。
人脸识别网络总结
人脸识别可以分为两种方法,一种是利用分类网络,将不同的 ID 当成不同的类别去做分类。但人脸识别更像是细粒度图像分类,不同 ID 的人脸之间差别不明显,而同一 ID 的人脸在不同场景或姿态下可能差异较大,所以使用分类网络做人脸识别有以下缺点:
1. 分类网络使用的 softmax 损失具有不错的可分性。然而对于人脸识别,当类内差异大于类间差异时,softmax 就不足以很好的区分了,所以要求人脸识别使用的损失函数不但具有可分性还具有判别性。
2. 当 ID 数较多时,会增加分类网络的参数量和计算量。
3. 使用分类网络需要有大量的人脸库中的图片作为训练集,而不能使用公共数据集进行训练。
4. 使用分类网络做人脸识别时,不适合后期向人脸库中添加新的人脸,否则就要重新对网络进行训练。
另一种是通过深度学习提取人脸特征,然后用特定的损失函数对不同人脸之间提取到的特征的距离进行计算。目前主流的人脸识别网络都属于第二种,即利用类似 ResNet 的网络结构对人脸特征进行提取,然后通过不同人脸之间提取到的特征的距离进行损失函数的计算,最终目的就是通过特定的损失函数,使相同人脸的特征距离较近,使不同人脸的特征距离较远。也就是要缩小类内差距,增大类间差距。
比如在 InsightFace 中,Softmax loss 只能提供大致可分离的特征嵌入,但在决策边界中会产生明显的模糊性,而 InsightFace loss 会在最近的类之间产生更明显的差距。
如果比较不同损失函数在二分类中的表现,可以看出后三种针对人脸识别的 loss,相对于第一种分类网络常用的 softmax,决策边界具有更好的可分性。
目前第二种人脸识别的损失函数一般会选用带角度的损失函数,以达到减小类内差距,增大累加差距的目的,体现在数据上就如下图所示:
可以看出使用带角度的人脸识别损失函数,相对于 softmax,类内距离变得更加紧凑,而类间距离却更大,使决策边界很容易区分。
人脸识别可以根据 probe 是否都在 gallery 中,细分为闭集人脸识别和开集人脸识别。目前论文都是在公开数据集上进行测试,所以大部分都是针对闭集人脸识别的结果。其中 LFW 数据集较少,主要用来人脸验证。MageFace 数据集较大,测试集超过了 1M 张图片,可以代表网络在百万级数据上的效果。
结论
考虑到未来 gallery 中的人物增加,建议采用第二种人脸识别方法,其中 InsightFace 性能相对较好,公开资料相对较多,可以满足绝大多数人脸识别工作的要求。
应用
可以参考:https://github.com/deepinsight/insightface,但在实际应用中根据不同使用场景依然需要针对性的进行优化修改,例如:如果要部署在嵌入式设备需要考虑使用轻量化的人脸检测模型,并且 InsightFace 的 backbone 部分的参数量和计算量太过庞大需要优化,还需考虑嵌入式端量化使用的 MNN 或 TNN 等是否支持所有算子和 op;如果在云端需要考虑 GPU 图像预处理上的加速方法,以及量化使用的 TensorRT 等是否支持所有算子和 op 等,这里不做详述。
Reference
[1] Labeled Faces in the Wild: A Survey
[2] MS-Celeb-1M: A Dataset and Benchmark for Large-Scale Face Recognition
[3] Learning Face Representation from Scratch
[4] MegaFace: A Million Faces for Recognition at Scale
[5] The Devil of Face Recognition is in the Noise
[6] VGGFace2: A dataset for recognising faces across pose and age
[7] Deep Face Recognition: A Survey
[8] FaceNet: A Unified Embedding for Face Recognition and Clustering
[9] A Discriminative Feature Learning Approach for Deep Face Recognition
[10] SphereFace: Deep Hypersphere Embedding for Face Recognition
[11] CosFace: Large Margin Cosine Loss for Deep Face Recognition
[12] ArcFace: Additive Angular Margin Loss for Deep Face Recognition
[13] AdaCos: Adaptively Scaling Cosine Logits for Effectively Learning Deep Face Representations
[14] VarGFaceNet: An Efficient Variable Group Convolutional Neural Network for Lightweight Face Recognition
[15] Pushing the Frontiers of Unconstrained Face Detection and Recognition: IARPA Janus Benchmark A
[16] Face Recognition Vendor Test (FRVT) Performance of Face Identifification Algorithms
文/FULIREN
关注得物技术,做最潮技术人!
版权声明: 本文为 InfoQ 作者【得物技术】的原创文章。
原文链接:【http://xie.infoq.cn/article/fdef76ba7ed5c1d10ebf2e60a】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论