人脸识别模型、工具包和数据集的进步

人脸识别模型:本文重点介绍现有人脸识别模型、工具包、数据集和 FR 流程的全面研究。从早期的特征人脸和 Fisher 人脸方法到先进的深度学习技术,这些模型已经逐步完善了从数字图像中识别个人的技术。我们将剖析这些迷人的模型,揭示它们的独特属性、优势和缺点。仔细的分析将说明每个连续的模型、工具包或数据集如何在其前身的基础上构建,从而将技术推向惊人的新高度。这一探索旨在加深您对塑造现代人脸识别系统的潜在机制的理解。

  • 现有的最先进人脸识别模型
  • 热门人脸识别工具包
  • 人脸检测和识别数据集
  • 人脸识别管道构建整合系统
  • 结论
  • 参考

现有的最先进人脸识别模型

人脸识别使用什么模型?目前,很少有最先进的模型已经在海量数据集上进行过训练。在本节中,我们将探讨一些表现最佳的预训练模型。

Facebook 的 DeepFace(2014 年)

强调

  • DeepFace 模型拥有超过 1.2 亿个参数
  • 它是一个9层的深度神经网络
  • 使用局部连接层代替卷积神经网络
  • 在社交人脸分类数据集上进行训练,包含 400 万张人脸图像
  • 预测准确率:97.35%

它是针对人脸验证、人脸识别、人脸属性分析、实时人脸分析等面部分析任务而设计的深度学习模型,其架构如图1所示。 

图片
图 1: DeepFace 架构

SFC 数据集中的图像是从 Facebook 用户个人资料数据集的大量人脸数据中收集的。此外,该模型还可以执行面部识别,即在人脸图像数据库中查找人的脸部。面部属性分析是 DeepFace 的另一项功能,它描述了面部图像的视觉属性。该模型已在实时人脸分析场景中进行了测试,证明了其能够对实时网络摄像头源执行人脸识别和属性分析的能力。

谷歌的 FaceNet(2015 年)

强调

  • FaceNet 模型有 1.4 亿个参数
  • 它是一个 22 层的深度卷积神经网络,具有 L2 归一化 
  • 引入三重损失函数
  • 预测准确率:LFW 上为 99.25%,YFD 数据集上为 95.12%

谷歌针对人脸识别问题的答案是FaceNet。该模型的网络架构如图2所示:

图片
图 2: FaceNet 架构

在这种方法中,实现了一个紧凑的欧几里得空间,其中距离直接对应于面部相似度的度量。这个模型有几个值得注意的特点。首先,每个面部都由一个 128 维字节向量表示,有助于可扩展的聚类和识别。其次,谷歌与 FaceNet 一起引入了三重损失(如图 3 所示)。该函数遵循一种不那么贪婪的方法。它能够形成有用的三重奏,并且还利用三重奏损失函数和三重奏选择机制进行训练。 

图片
图 3:三重损失图示

它使用样本选择技术形成有用的三元组。数据被排列成“三元组”,即锚点、正示例和负示例。然后,这些数据被输入到一个通用神经网络中进行训练,旨在减少锚点-正示例距离并增加锚点-负示例距离。该技术可以用数学表示为: 

图片
图 4:三重态损失函数的数学表达式

Google 训练了其他几个模型,并将基础 FaceNet 模型与它们进行了比较。图 5 显示了自定义模型规格及其各自的验证性能指标:

图片
图 5: FaceNet 训练模型和验证指标

牛津大学的 VGG-Face(2015 年)

强调

  • VGG-Face 模型拥有 1.45 亿个参数
  • 它是一个 37 层的卷积神经网络,有 11 个构建块
  • 模型已对 260 万张面部图像进行训练
  • 预测准确率:LFW 上为 98.95%,YFD 数据集上为 97.3%

VGG-Face 模型是由牛津大学工程科学系的一个专门小组“视觉几何组”开发的。他们的主要目标是在机器和人工智能中建立视觉感。该模型的架构如图 6 所示。整体架构相当简单,由卷积 + ReLU、最大池化层和 softmax 激活函数组合而成。 

图片
图 6: VGG-Face 架构

继FaceNet之后,VGG-Face模型在训练过程中使用了三重损失函数来学习人脸嵌入。

ArcFace(2015)

强调

  • ArcFace 模型采用卷积神经网络作为主干
  • 引入附加角度裕度损失
  • 使用余弦相似度进行识别
  • 预测准确率:LFW 数据集上的 99.40%

图 7 显示了ArcFace架构,它涉及几个关键组件。主干用于从人脸图像中提取高级特征。这些特征捕捉重要的面部特征并用于表示输入人脸。除此之外,ArcFace 还引入了一个完全连接的层,通常称为“ArcFace 层”,用于计算特征的角度表示。

图片
图 7: ArcFace 架构

该层将反余弦函数应用于特征向量和相应权重向量的点积。然后使用得到的角度来测量不同人脸身份之间的相似性。为了增强模型的判别能力,ArcFace 采用了一种称为附加角度边距的规范化技术。此边距强制在角度空间中将不同身份之间进行所需的分离。通过增加边距,模型可以更好地区分相似的面孔并提高模型的准确性。ArcFace 方法的数学实现如下所示: 

图片
图 8: ArcFace 的数学表达式

在训练过程中,ArcFace 通过最小化角度 softmax 损失来优化模型参数。此损失函数鼓励正确的类比其他类具有更高的概率,同时强制类之间的角度分离。它通过惩罚预测角度与目标角度的偏差来实现这一点。在下图中,我们可以看到 softmax 损失和 ArcFace 实现之间的比较。可以观察到,softmax 损失给出几乎不可分离的特征嵌入,而 ArcFace 损失可以在彼此接近的类之间建立更明显的差距。

图片
图 9: Softmax 与 ArcFace Loss 的比较
图片

热门人脸识别工具包

在上一节中,我们探讨了一些最先进的模型。如果您想实现和测试这些预训练模型,并用它们进行实验,该怎么办?对于初学者来说,这将是一个复杂且耗时的过程。针对这个确切的问题,已经从头开发了多个开源工具包。  

让我们快速深入了解一下 GitHub 上最受欢迎的几个人脸识别工具包。 

OpenCV 人脸识别(使用 Seventh Sense):

OpenCV 人脸识别代表了领先的计算机视觉库 OpenCV 与全球最高评级的人脸识别技术的创造者 Seventh Sense 合作产生的尖端人脸识别服务。

图片
图 10: OpenCV 人脸识别

随着该工具包的发布,开发人员只需几行简单的代码即可为其应用程序添加人脸识别功能。同样值得注意的是,该实现在 2022 年 NIST 人脸识别挑战赛中排名前 10。它也不需要任何 ML 或 GPU 经验,因为它完全基于 API 调用而设计。可以使用内置 Web 界面访问该工具包。如果您有兴趣了解更多信息,请随时查看这篇关于OpenCV 人脸识别的详细文章。 

DeepFace:

图片
图 11: GitHub 上的 DeepFace 存储库中的示例

它是一个为 Python 构建的轻量级面部识别属性分析库。它具有强大的管道,支持:面部的检测、对齐、规范化、表示和验证。对于检测,它支持著名的检测实现,如 OpenCV、MTCNN、RetinaFace、MediaPipe、Dlib 和 SSD。该库还支持面部验证,以验证给定的一对面部是否相同,以及 NumPy 数组和 base64 编码图像支持。

DeepFace 具有人脸嵌入函数,可以使用该函数将嵌入表示为多维向量。还有一个专用的表示函数,可从输入的人脸图像返回嵌入列表。该库还可以执行面部属性分析,查找年龄、情绪、性别以及种族等参数。DeepFace 库的最大功能之一是它对多种模型的大量支持。这包括 VGG-Face、FaceNet、FaceNet512、OpenFace、DeepFace、DeepID、ArcFace、Dlib 和 SFace。

通过实时分析,该函数可以每 5 帧按顺序聚焦一个面部帧。最后,它可以作为 REST-API 服务提供给用户,也可以作为 docker 容器分发或部署在 Kubernetes 集群上。

TFace:

图片
图 12: GitHub 上的 TFace 存储库

TFace 是腾讯优图实验室开发的开源人脸分析研究平台,具有一些有用的数据集处理功能,例如支持单数据集和多数据集,包括 IndexParser、ImgSampleParser 和 TFRecordSampleParser。

TFace 拥有一个主干模型库,其中包含 ResNet (SEResNet)、MobileFaceNet、 EfficientNet 、FBNet 和 GhostNet的现成实现。它还支持 CurricularFace、DDL、CIFP 和 SCF 等损失函数。除了单独的函数外,它还具有用于在 ARM 和 x86 架构上对模型延迟进行基准测试的测试协议。

InSightFace:

图片
图 13:来自 GitHub 上的 InSightFace 存储库的人脸检测示例

InSightFace 是一个 2D 和 3D 深度人脸分析库。它高效地实现了丰富的人脸识别、人脸检测和人脸对齐的先进算法,并针对训练和部署进行了优化。它支持一系列骨干架构,包括 IResNet、RetinaNet、MobileFaceNet、InceptionResNet_v2 和 DenseNet。除了模型之外,它还支持使用 MS1M、VGG2 和 CASIA-WebFace 等人脸数据集。InSightFace 有几个评估管道 IJB 和 MegaFace。

人脸检测和识别数据集

问题是,“有多少数据集可用于人脸检测和识别? ”实际上,可供选择的选项太多了,每个选项都有自己的优点和缺点。让我们来看看几个这样的开源数据集。

人脸检测数据集

  • UMD 面孔
    • 对于静态图像:8,277 名受试者的 367,888 个面部注释
    • 对于视频帧:370 多万个带注释的视频帧
    • 链接(官方):http://umdfaces.io/
  • 更宽的脸
    • 涵盖面部数据的各种变化:比例、姿势、遮挡、表情、照明和化妆
    • 图像数量:32,203 张,数据集内有 393,703 个带标签的人脸
    • 链接(官方):http://shuoyang1213.me/WIDERFACE/
图片
图 14:开源人脸检测数据集

人脸识别数据集

  • 野外标记面孔 – LWF
    • 图片数量:5749 人的 13,232 张图片,其中 1680 人有两张或两张以上图片 
    • 链接(官方):http://vis-www.cs.umass.edu/lfw/
  • MS-名人-1M
    • 每个人的脸部图像都保留了多样性
    • 图片数量:6,464,018 张
    • 名人数量:94,682 人
    • 链接(非官方):http://www.gitpp.com/CircuitVerse/c-ms-celeb
  • VGG 人脸2
    • 男性和女性面孔之间的无偏差分布
    • 面孔数量:330多万
    • 身份数量:9,000+
    • 姿势、情绪、光线和遮挡的变化 
    • 链接(官方):https://www.robots.ox.ac.uk/~vgg/data/vgg_face2/
  • IMDB-维基:
    • IMDB 和 Wikipedia 网页的面部图像组合
    • 图片数量(IMDB):460,723 张
    • 图片数量(维基百科):62,328 张图片
    • 链接(官方):https://data.vision.ee.ethz.ch/cvl/rrothe/imdb-wiki/
  • Digi-Face 1M
    • 合成人脸数据
    • 图片数量:100万以上
    • 740K 张图像,含 10K 个身份(72 张图像/身份)
    • 500K 张图像,100K 个身份(5 张图像/身份)
    • 链接(非官方):http://www.gitpp.com/CircuitVerse/digiface1m
图片
图 15:开源人脸识别数据集

人脸识别管道构建整合系统

假设您对构建一个监控系统感兴趣。您可能会问:“从头开始构建人脸识别系统涉及哪些不同的步骤? ”。让我们更进一步,从高层次概述构建此系统所涉及的各种过程。图 16 显示了框图。 

图片
图 16:人脸识别系统框图

输入人脸图像的预处理

人工智能中有句俗语:“模型的好坏取决于输入的数据”,这句话确实没错。可以肯定的是,面部图像通常不能直接以原始形式使用。在任何图像中,许多细节都位于阴影中或高光中。图像预处理是一种有助于细节恢复并有助于清理原始面部图像数据的方法。调整大小、灰度滤波器、直方图均衡滤波器以及创建训练和验证数据集等图像操作被认为是任何基于计算机视觉的问题最常见的预处理步骤。 

图片
图 17:人脸图像预处理

在上图中,我们可以看到在原始 RGB 图像上应用了灰度和直方图均衡两个滤波器。可以推断,应用直方图均衡滤波器后,面部特征更加突出。通过学习优质数据,系统的准确性和识别性能可以进一步提高。 

执行人脸检测

给定一张输入图像,模型必须首先缩小人脸在画面中的位置。到目前为止,有多种方法可以协助完成这一过程。最著名的人脸检测技术是基于 haar-cascade 的检测器,于 2001 年推出。它使用基于 haar 的特征从输入图像帧中检测人脸。按照今天的标准,它在检测准确性和性能方面被认为很慢,因为它很容易与画面中的人脸图案混淆。此外,它严重依赖于光照条件,在光线不足的环境中表现不佳。 

图片
图 18:预处理图像上的脸部检测

最近,许多基于深度学习的模型有助于人脸检测过程。MTCNN 于 2016 年推出,它利用了级联结构与卷积神经网络的三个阶段相结合。OpenCV 中还有一个内置的基于深度神经网络的人脸检测器。它使用基于 SSD 架构的 Caffe 模型,并以 ResNet-10 网络为骨干。大多数基于深度学习的模型还支持从单个输入帧进行多人脸检测,最后在检测到的人脸周围绘制一个边界框。图 18 显示了此过程的一个适当示例。

面部数据的转换

如果系统是实时的,那么实时馈送的面部图像需要旋转以均匀分布。当一个人走到系统的摄像头前时,他们的头部不可能完全对齐,系统无法识别。这种极端情况需要解决,因为它在识别中起着重要作用。图 19 显示了此过程的一个示例。可以观察到,Elon 的脸在输入图像上是倾斜的,而应用变换后,他的脸在右侧看起来是直的。

图片
图 19:面部方向的转变

推理

这是转换后的脸部框架通过模型向前传递的部分。通过本文,我们有机会了解多个模型。在这里,您可以选择预先训练的模型或从顶部构建自定义模型。简而言之,后者需要更多时间并且更难开发。可以对实时摄像头馈送或作为训练模型输入的脸部图像进行推理。 

图片
图 20:视频人脸识别推理

在上面的视频插图中,可以看到画面中的脸部被检测到,并且模型成功识别出该人是埃隆·马斯克。  

部署

要进行推理,必须先将模型部署到某个平台。让我们来看看一些众所周知的模型部署选项。 

本地部署

在这种方法中,模型部署在本地机器或专用服务器上。它集成到将要使用的应用程序或系统中。此方法适用于对延迟要求较低的应用程序或模型需要访问 GPU 等本地资源的情况。

基于云的部署

云平台提供部署自定义模型的基础设施和服务。模型上传到云服务提供商(Amazon Web Services、GCP 或 Microsoft Azure),由其管理部署和可扩展性。基于云的部署提供了灵活性、可扩展性和与其他云服务的易集成性。 

边缘部署

边缘部署涉及将模型直接部署在边缘设备上,例如智能手机、物联网设备或边缘服务器。这种方法可以实现实时处理,并减少了将数据不断传输到云的需求。边缘部署适合具有低延迟要求的应用程序,或者当数据隐私和带宽限制很重要时。这种方法的一个缺点是预测准确性会降低,性能会明显变慢。

结论

深度学习模型彻底改变了人脸识别领域,在准确性和稳健性方面取得了显著成果。卷积神经网络(CNN) 已成为计算机视觉任务的主要架构,能够直接从原始像素数据中学习判别特征。DeepFace、FaceNet 和 ArcFace 等模型已展示出最先进的性能,并为该领域的进一步突破铺平了道路。

DeepFace、TFace 和 InSightFace 等现成工具包的开发。这些工具包有助于提高该技术的广泛适应性。基于深度学习的人脸识别的成功很大程度上归功于多样化和大规模数据集的可用性。 

LFW、IMDB-Wiki 和 MS-Celeb-1M 等数据集为研究人员和从业者提供了宝贵的资源,用于训练和评估人脸识别模型。这些数据集涵盖了姿势、光照条件、面部表情和身份的广泛变化,使模型能够在不同场景中很好地推广。

值得注意的是,这项技术引发了重要的道德和隐私问题。随着人脸识别在社会中越来越普遍,实施适当的保护措施以保护个人隐私并确保负责任地使用该技术至关重要。

您的想法和见解对我们很重要。请在下面的评论部分随意分享您可能有的任何想法、问题或观察。无论您有不同的观点、额外的信息,甚至是新的疑问,您的参与都有助于丰富这个学习空间。让我们继续这个对话,进一步加深我们对用于人脸识别的模型的集体理解。

参考

通过深入研究这些资源,您将大大扩展有关人脸识别的知识。所以请确保不要忽视它们。

为方便访问,请考虑收藏此页面。深入研究并将您的技能提升到新的水平!

数据集链接:

http://www.gitpp.com/CircuitVerse/c-ms-celeb

http://www.gitpp.com/CircuitVerse/digiface1m

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注