浅析人脸识别算法及其应用

article/2025/10/4 18:34:27

前言

随着深度学习和计算机硬件的快速发展,基于深度卷积神经网络的一系列算法都取得了显著的进展,其中人脸识别作为计算机视觉领域中时间最久远、应用最广泛的研究课题之一,近些年也在深度学习的加持下在性能方面获得了大幅提升,并在实际的生活场景中得到了广泛的应用。目前基于深度学习的人脸识别系统一般由三个关键步骤族组成:人脸检测(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

关注得物技术,做最潮技术人!


http://chatgpt.dhexx.cn/article/IrvUXXEc.shtml

相关文章

了解面部识别的不同算法

介绍 任何面部检测和识别程序或系统都必须以人脸识别算法为核心。这些算法由专家分为两大类。几何方法专注于识别特征。为了从图像中提取值,应用了光度统计方法。然后,为了删除变体,将这些值与模板进行比较。此外,算法可以分为两…

人脸识别各算法详解

人脸识别各算法详解 最近,由于工作需要,为了找到一款高效的人脸识别算法,对各种人脸识别算法都研究了一番,以下记录的是各算法的理论基础。 一.MTCNN 本文章主要介绍MTCNN算法的流程,MTCNN主要由三个框架组成&#…

人脸识别算法(包含简单代码)

TOC 人脸识别算法是一种利用计算机视觉和模式识别技术来识别和验证人脸的算法。它可以通过分析图像或视频中的人脸特征,如脸部轮廓、眼睛、鼻子、嘴巴等来识别和区分不同的个体。人脸识别算法在安全认证、身份验证、监控安防、人机交互等领域具有广泛的应用。 以下…

总结几个简单好用的Python人脸识别算法

今天给大家总结几个简单、好用的人脸识别算法。人脸识别是计算机视觉中比较常见的技术,生活中,我们接触最多的人脸识别场景是人脸考勤. 人脸识别的算法最核心的工作是从一张图片中识别出人脸的位置。识别的算法可以说是多种多样, 下面我就来…

追踪AR圣诞老人,免费领200份圣诞礼物

元宇宙 绿心公园 圣诞节 元宇宙(Metaverse),是指 利用科技手段进行链接与创造的, 与现实世界映射与交互的虚拟世界, 具备新型社会体系的数字生活空间。 这一概念在2021年走入了大众视野 勾出了人们对“平行宇宙…

圣诞的礼物

呵呵 ,与你一起分享哦。。。。。。

圣诞来了,学编程的小伙伴有收到圣诞老人的礼物?

圣诞来了,学编程的小伙伴有收到圣诞老人的礼物?——编程学习笔记满满的惊喜。 编程是编定程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,…

圣诞老人的礼物_圣诞节设计资源:圣诞老人

圣诞节对人们而言可能意味着很多事情,但是对于设计师而言,这可能是一个不同的议程。 设计师通常会挤满最后一刻的设计临时通知,以赶在圣诞节贺卡,电子贺卡设计,新闻通讯或其他类型的广告活动的截止日期之前。 因此&am…

微信小程序|飞翔的圣诞老人

一、前言 2022年圣诞节即将到来啦,很高兴这次我们又能一起度过~ 此篇文章主要使用小程序实现飞翔的圣诞老人,跟随文章步骤带着圣诞老人翻越障碍一起去送礼物吧。 二、实现步骤 2.1、创建小程序 访问微信公众平台,点击账号注册。选择小程序,并在表单填写所需的各项信息进行…

圣诞节礼物

对于python小白的你,学了python没多久是不是就有了想自己动手做一个小程序的冲动呢?在这里我给大家分享一个我以前做的小程序——“圣诞节礼物”——希望能给大家带来灵感和帮助。 话不多说,先看一下截图: 这是一个小动画&#xf…

2022圣诞代码合集(圣诞树+圣诞老人)

文章目录 前言使用方法圣诞树圣诞老人 前言 圣诞节里的喜悦,飘扬万里;圣诞树上的星星,璀璨耀眼;圣诞星空绽放的烟花,迎来吉祥;圣诞钟声奏响的旋律,传递欢乐;圣诞老人送给你的礼物&a…

圣诞老人来了嘛

Jingle bells jingle bells jingle all the way... 随着歌声的临近,一年一度的圣诞节也如期而至的到来了 传说啊,圣诞老人为奥丁神后裔。也传说称圣诞老人由尼古拉而来,所以圣诞老人也称St.Nicholas。据说他原是小亚细亚每拉城的主教&#xf…

算法基础部分6-贪心算法

算法部分 基础6 一、贪心算法简述 贪心算法的每一步行动总是按照某种指标选取最优的操作来进行该指标,只看眼前并不考虑以后可能造成的影响。证明方法通过替换法和数学归纳法实现。 二、贪心算法例子 1. 圣诞老人的礼物 问题描述:圣诞节来临了&#x…

python外包_python怎么找外包

很多程序员兄弟们工资不高,但时间还是比较充足的,剩下的时间想多搞点外快,毕竟要养家糊口。我来讲讲怎么做可以一个月轻松多赚1万多元的外快。 一、接项目 是程序员都想过接私活,但真正去做了的寥寥无几。可能的原因:…

国外最流行的几个外包接活网站 简要介绍

国外主要外包接活站点: No.1 Freelancer.com (旧称GAF – GetAFreelancer): 国外访问人数最多,更新速度最快的外包平台。详细介绍 No.2 Elance : 国外比较成熟的三大业务外包平台之一,外包项目类型以软件和网站为主。当…

PHP学习笔记

学习笔记 PHP学习笔记部署遇到的问题一二 php在win10 64位下执行curl_init()方法报错的bugthinkphp登陆失效的问题不同的win系统上无法使用curl的问题thinkphp下调用python脚本先要有反应提示python不是内部命令以上处理后还提示no file /directory 关于json里为数组时出现的问…

PHP实现支付宝支付

支付宝付款,开发上比起微信支付要简单很多,今天就以支付宝手机网站支付为例,简单讲一下实现方法: 前期准备,当然就不多说了,当你想开发使用支付宝支付,必然需要在支付宝开放品台注册认证并且创建好应用并且具备手机网站支付功能!不明白可以查看支付宝官方文档(https://docs.op…

外包网站建设需要注意什么

外包网站建设需要注意什么 对于如今许多的公司来说,拥有一个属于公司的网站是非常必要的。但是并不是所有的公司都会拥有专业的人员来进行网站的建设,所以网站建设外包则成为了诸多公司的首选。但是外包网站建设都需要哪些问题呢? 外包网站…

苏州外包php,【苏州IT外包经验】Ubuntu 17.10系统下配置PHP+Apache+Mysql

发布于 2017年11月16日 星期四 01:15 点击数:20883 本文为Ubuntu 17.10系统下配置PHP7.1Apache2.4Mysql5.7 一、Apache2 安装apache sudo apt-get apache2 编辑apache主配置文件/etc/apache2/apache2.conf,修改KeepAlive设置 KeepAlive Off Apache默认的…

Linux任务之自动发邮件

Linux任务之自动发邮件 文章目录 Linux任务之自动发邮件1、虚拟机Centos7环境(1)先设置自己的邮箱,我这用qq邮箱:(2)获取到密码后,我们要在Linux上配置邮件文件:(3&#…