DeepFace ——用于高级人脸识别算法探索与应用

1. 概述


人脸识别作为人工智能和机器学习中的一个活跃领域,长期以来一直在追求模仿甚至超越人类视觉系统的能力。这项技术在安全、监控、身份验证等多个方面都有着广泛的应用,但同时也伴随着隐私、伦理和准确性等社会和文化方面的考量。

Meta(当时称为Facebook)为了缩小机器与人类在人脸识别方面的表现差距,推出了名为DeepFace的人脸识别框架。DeepFace模型通过在庞大的人脸图像数据集上进行训练,学习到复杂的特征表示,以实现高准确率的人脸识别。该框架的设计允许它在不同的数据集上进行极少的调整即可使用,并能够生成紧凑但富有表现力的人脸特征。

DeepFace框架利用了深度学习的强大能力,这种学习方式涉及使用多层神经网络来自动学习和提取数据中的特征。DeepFace网络架构的一个关键特点是它假设人脸在图像中的位置是固定的,这使得它可以直接使用原始像素值进行学习,而不需要像其他一些方法那样依赖于多层次的卷积操作来提取特征。

人脸识别的传统流程通常包括以下四个阶段:
(1). 检测:在图像或视频中定位人脸的位置。
(2). 对齐:调整人脸图像,使其眼睛、鼻子、嘴巴等特征对齐到标准位置。
(3). 表示:提取人脸的特征表示,这些特征随后用于识别。
(4). 分类:根据特征表示将人脸分类到正确的身份。

DeepFace框架的贡献在于:

  • . 开发高效的深度神经网络(DNN)架构,能够处理大规模数据集,并学习到可以泛化到其他数据集的人脸特征。
  • . 结合显式的3D人脸模型,开发出有效的人脸对齐系统,这有助于提高识别的准确性。

DeepFace的研究和开发是人脸识别技术发展史上的一个里程碑,它不仅推动了学术界和工业界在人脸识别领域的进步,也引发了关于技术应用和隐私保护之间平衡的广泛讨论。随着技术的不断进步,人脸识别的准确性和应用范围有望继续扩大,同时也需要更多的关注和措施来确保技术的正当使用。

2.模型构架

2.1 人脸对齐

人脸对齐技术是一种巧妙的方法,通过根据眼睛的位置来调整人脸图像的角度,确保了图像的标准化。这种技术在人脸识别领域的数据预处理中扮演着至关重要的角色,它通过提供一致的图像输入,极大地提升了识别算法的精确度。

尽管人脸对齐看似简单,但在实际操作中,它却是一项充满挑战的任务。人脸的表情变化、头部姿势、以及身体动态等因素,都可能对人脸对齐的准确性造成影响。为了应对这些难题,开发者们采用了一些高级技术,如利用3D人脸分析模型或在其他数据集中寻找基准点,以提高对齐的成功率。

尽管目前还没有一种完美的人脸对齐解决方案,但3D模型的使用提供了一种可能的解决路径。尽管3D模型的流行度在近年来有所下降,特别是在处理非约束性环境时,但鉴于人脸本身的三维特性,如果能够恰当应用,3D模型仍然是一个有力的工具。例如,DeepFace模型就采用了基准点来构建人脸的3D模型,并以此将人脸图像转换为标准化的正面视图。

DeepFace的对齐过程同样遵循了行业标准,使用了基准点检测器来指导对齐操作。DeepFace模型虽然采用了基础的点检测器,但它通过多次迭代应用这一技术,不断精细化最终的输出结果。模型中使用的是一个经过训练的支持向量回归器(SVR),它能够根据图像描述符在每次迭代中提取基准点。DeepFace的图像描述符主要基于局部二值模式(LBP)直方图,同时也会考虑其他特征以增强描述的准确性。

在这里插入图片描述

2.2 2D人脸对齐

DeepFace模型通过检测检测作物内的六个基准点来启动对齐过程,这些基准点以眼睛中部、嘴巴位置和鼻尖为中心。 它们用于旋​​转、缩放图像并将其平移到六个锚点位置,并对扭曲的图像进行迭代,直到没有可见的变化。 然后聚合转换生成一个 2D 对齐的公司。 该对齐方法与 LFW-a 中使用的方法非常相似,多年来一直使用该方法来尝试提高模型精度。

2.3 3D人脸对齐

为了通过平面外旋转对齐人脸,DeepFace 框架使用通用 3D 形状模型,并注册一个 3D 相机,该相机可用于将 2D 对齐的公司包装到其图像平面中的 3D 形状。 结果,模型生成了公司的 3D 对齐版本,并通过使用第二个 SVR 或支持向量回归器在 67D 对齐公司中定位额外的 2 个基准点来实现。

然后,模型手动将 67 个锚点放置在 3D 形状上,从而能够实现 3D 参考与其相应基准点之间的完全对应。 在下一步中,使用广义最小二乘解将 3D 到 2D 仿射相机添加到具有已知协方差矩阵的线性系统中,以最小化某些损失。

2.4 正面投影

由于未对非刚性变形和全透视投影进行建模,因此安装的 3D 到 2D 相机仅用作近似值。 为了减少最终扭曲中重要的身份承载因素的损坏,DeepFace 模型将相应的残差添加到每个参考基准点的 xy 分量中。 这种为了扭曲 2D 图像而减少对身份的扭曲的目的的放松是合理的,如果没有它,脸部将在 3D 中扭曲成相同的形状,并在此过程中失去重要的区分因素。

最后,该模型通过使用由 67 个基准点导出的 Delaunay 三角剖分指导的分段仿射变换来实现正面化。

(1). 检测到的人脸有 6 个基准点。
(2). 诱导二维对齐公司。
(3). 67D 对齐公司上有 2 个基准点。
(4). 参考 3D 形状转换为 2D 对齐的企业图像。
(5). 相对于 3D-2D 相机的三角形可见性。
(6). 67D 模型诱导的 3 个基准点。
(7). 最终公司的 3D 对齐版本。
(8). 3D 模型生成的新视图。

2.5 代表性

随着训练数据量的增加,事实证明,与工程特征相比,基于学习的方法更加高效和准确,主要是因为基于学习的方法可以发现和优化特定任务的特征。

3. DNN 架构和训练

DeepFace DNN 经过多类人脸识别任务的训练,对人脸图像的身份进行分类。

上图代表了DeepFace模型的整体架构。 该模型有一个卷积层 (C1),具有 32 个大小为 11x11x3 的滤波器,该层被输入大小为 3×3 像素的 152D 对齐 152 通道 RGB 图像,并生成 32 个特征图。 然后,这些特征图被馈送到最大池化层或 M2,该层在 3×3 空间邻域中取最大值,并且每个通道的步幅为 2。 接下来是另一个卷积层 (C3),它包含 16 个滤波器,每个滤波器大小为 9x9x16。 这些层的主要目的是提取低级特征,例如纹理和简单边缘。 使用最大池化层的优点在于,它使卷积层生成的输出对局部翻译更加鲁棒,并且当应用于对齐的人脸图像时,它们使网络对小规模的配准错误更加鲁棒。

多个级别的池化确实使网络在某些情况下更加稳健,但它也会导致网络丢失有关微纹理和详细人脸结构的精确位置的信息。 为了避免网络丢失信息,DeepFace 模型仅在第一个卷积层中使用最大池化层。 然后,模型将这些层解释为前端自适应预处理步骤。 尽管它们完成了大部分计算,但它们本身的参数有限,并且它们只是将输入扩展为一组局部特征。

接下来的 L4、L5 和 L6 层在本地连接,就像卷积层一样,它们应用滤波器组,其中特征图中的每个位置都学习一组独特的滤波器。 由于对齐图像中的不同区域具有不同的局部统计量,因此它不能满足空间平稳性假设。 例如,与嘴和鼻子之间的区域相比,眉毛和眼睛之间的区域具有更高的辨别能力。 忠诚层的使用会影响训练参数的数量,但不会影响特征提取期间的计算负担。

DeepFace 模型首先使用三层只是因为它拥有大量标记良好的训练数据。 局部连接层的使用可以进一步证明是合理的,因为局部连接层的每个输出单元都可能受到大量输入数据的影响。

最后,顶层完全连接,每个输出单元连接到所有输入。 这两层可以捕获人脸图像不同部分捕获的特征之间的相关性,例如嘴的位置和形状以及眼睛的位置和形状。 第一个全连接层(F7)的输出将被网络用作其原始人脸表示特征向量。 然后,该模型会将最后一个全连接层 (F8) 的输出馈送到 K 路 softmax,生成类标签上的分布。

4. 数据集

DeepFace 模型使用数据集组合,其中以社交人脸分类或 SFC 数据集为主要数据集。 此外,DeepFace模型还使用了LFW数据集和YTF数据集。

4.1 证监会数据集

SFC 数据集是从 Facebook 的图片集合中学习得到的,它由 4.4 人的 4,030 万张标记图像组成,每个人有 800 到 1200 张面孔。 SFC 数据集每个身份的最新 5% 的人脸图像被保留用于测试目的。

4.2 LFW 数据集

LFW 数据集包含超过 13,323 名名人的 6,000 张照片,然后将这些照片分为 10 个分区中的 XNUMX 对脸部。

4.3 YTF 数据集

YTF 数据集由 3,425 个主题的 1,595 个视频组成,它是 LFW 数据集中名人的子集。

5. 成果

在没有正面化且仅使用 2D 对齐的情况下,模型的准确度得分仅为 94.3% 左右。当模型使用人脸检测的center corp时,它不使用任何对齐,在这种情况下,模型返回的准确度分数为87.9%,因为人脸区域的某些部分可能会落在center corp之外。为了单独评估人脸表示的判别能力,该模型遵循无监督学习设置来比较归一化特征的内积。它将模型的平均准确率提高到 95.92%

上述模型比较了 DeepFace 模型与其他最先进的人脸识别模型的性能。

上图描绘了数据集上的 ROC 曲线。

6.总结

理想情况下,人脸分类器能够以人类的准确度识别人脸,并且无论图像质量、姿势、表情或照明如何,它都能够返回高精度。 此外,理想的人脸识别框架只需很少的修改或无需修改即可应用于各种应用。 尽管 DeepFace 是目前最先进、最高效的人脸识别框架之一,但它并不完美,在某些情况下可能无法提供准确的结果。 但是 DeepFace 框架是人脸识别行业的一个重要里程碑,它通过利用强大的度量学习技术缩小了性能差距,并且随着时间的推移,它将继续变得更加高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果电脑数据丢失怎么办 苹果电脑数据恢复软件免费版 如何使用EasyRecovery恢复数据

无论是使用苹果电脑还是Windows电脑,丢失文件是一个常见的问题。无论是意外的删除、格式化错误还是系统崩溃,都可能导致重要数据的丢失。此时就需要用到数据恢复工具恢复数据。然而数据恢复工具的选择是十分重要的,踩坑了不仅找不回数据&…

超级SDK版本管理器VMR v0.6.1预览版发布!

项目地址:https://github.com/gvcgo/version-manager/releases/tag/v0.6.1 官方文档:https://gvcgo.github.io/vdocs/ 支持的语言列表: bun, clang, codon, deno, dlang, dotnet, elixir, erlang, flutter, gcc, gleam, go, groovy, jdk, …

【启程Golang之旅】从结构到接口揭秘Go的“面向对象”面纱

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了…

ICPC训练赛补题集

ICPC训练赛补题集 文章目录 ICPC训练赛补题集D - Fast and Fat (负重越野)I-路径规划G. Inscryption(邪恶铭刻)NEW Houses雪中楼(西安交通大学)L.BracketGenerationE - Checksum D - Fast and Fat (负重越野) 原题链接:原题链接 题意:体重大的背体重小的…

【面试题-004】ArrayList 和 LinkList区别

ArrayList 和 LinkedList 都是 Java 中常用的动态数组实现,都实现了 List 接口,但它们在内部数据结构和性能方面有所不同: 内部数据结构: ArrayList 是基于动态数组的数据结构,它允许快速随机访问。数组的大小在创建时…

用java实现客服聊天+网络爬虫下载音乐(java网络编程,io,多线程)

一 灵感: 在2022年的暑假,也就是我即将迈进高三的那个暑假,我并没有察觉自己应该要学习了,还是和过往的暑假一样玩着王者荣耀,凌晨2点睡觉,中午12点起床。我依稀记得这种状态一直持续到8月19。然而离开学还…

【MySQL】Linux安装MySQL

一、center OS环境准备 为了在Linux系统中查看MySQL5.8与8.0版本的区别 我们要准备两个虚拟机,需要的软件:VMware和CentOS7 因为博主之前在学习redis的时候已经安装过一个虚拟机了,所以我就直接克隆了一个CentOS2.0 修改mac地址&#xff0…

STM32作业实现(二)串口控制led

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

深入理解Java中的List集合:解析实例、优化技巧与最佳实践

一:List 集合的基础 1.1 什么是 List 集合? List 集合是 Java 集合框架中的一种有序、可重复的数据结构,它继承自Collection 接口,允许存储多个元素。 与数组不同,List 集合的大小是动态可变的,可以根据…

通过指针变量访问整型变量

有两个与指针变量有关的运算符: (1)&:取地址运算符。 (2)*:指针运算符(或称间接访问运算符)。 例如:&a为变量a的地址,*p为指针变量p所指向的存储单元。 编写程序: 运行结果…

【面试经典150题】移除元素

目录 一.移除元素 一.移除元素 这题的思路非常清晰&#xff0c;可以使用迭代器遍历找到需要删除的元素使用erase删除即可&#xff1a; #include<iostream> #include<vector>using namespace std;class Solution { public:int removeElement(vector<int>&…

设计模式(六)结构型模式---桥接模式

文章目录 桥接模式简介结构优点UML图具体实现UML图代码实现 桥接模式简介 桥接模式是一种将抽象与实现分离&#xff0c;使它们独立变化。然后利用组合关系来代替继承关系&#xff0c;大大的降低了抽象和实现的耦合度的设计模式。实际使用&#xff1a; JDBC源码分析&#xff0c…

Xcode下载安装

1.Xcode可用版本判断&#xff1a; 2.Xcode下载安装&#xff1a; 方案1:AppStore 下载更新 若方案1失败则 方案2:指定版本Xcode包下载解压安装 苹果下载 3.Xcode命令行工具插件安装 xcode-select --install 备注&#xff1a; xcode_x.x.x.xip(压缩包存在时效性(使用前24h/…

Mac专用投屏工具:AirServer 7 for Mac 激活版下载

AirServer 7 是一款在 Windows 和 macOS 平台上运行的强大的屏幕镜像和屏幕录制软件。它能够将 iOS 设备、Mac 以及其他 AirPlay、Google Cast 和 Miracast 兼容设备的屏幕镜像到电脑上&#xff0c;并支持高质量的录制功能。总的来说&#xff0c;AirServer 7 是一款功能全面的屏…

Mybatis编写SQL

文章目录 一、用注解编写1.1 增普通增加获取自增ID 1.2 删和改1.3 查单表查询多表查询 二、用xml编写2.1 使用xml的流程2.2 增普通增加获取自增ID 2.3 删 和 改2.4 查 三、#{} 和 ${}3.1 #{} 、${}3.1 预编译 SQL 、即时编译SQL 两种写法是可以同时存在的 一、用注解编写 1.1 …

mediasoup基础概览

提示&#xff1a;本文为之前mediasoup基础介绍的优化 mediasoup基础概览 架构&#xff1a;2.特性&#xff1a;优点缺点 3.mediasoup常见类介绍js部分c 4.mediasoup类图5.业务类图 Mediasoup 是一个构建在现代 Web 技术之上的实时通信&#xff08;RTC&#xff09;解决方案&#…

快速排序详讲(两种方法)

目录 原理 实现方式 正常实现 理由 先从右到左&#xff0c;在从左到右 先从左到右&#xff0c;先从右到左 挖坑法 效率 优化 测试 代码 原理 快速排序是将最左侧的数字当作关键数字&#xff0c;将关键数字放在对应位置&#xff0c;且关键数字左侧均大于它&#xff…

模拟集成电路(6)----单级放大器(共源共栅级 Cascode Stage)

模拟集成电路(6)----单级放大器&#xff08;共源共栅级 Cascode Stage&#xff09; 大信号分析 对M1 V x ≥ V i n − V T H 1 V x V B − V G S 2 V B ≥ V i n − V T H 1 V G S 2 V_{x}\geq V_{in}-V_{TH1}\quad V_{x}V_{B}-V_{GS2}\\V_{B}\geq V_{in}-V_{TH1}V_{GS2} Vx…

每日一题《leetcode-- LCR 025.两数相加||》

https://leetcode.cn/problems/lMSNwu/ 分别把给定的两个链表翻转&#xff0c;然后从头开始相加。 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ //反转链表 struct ListNode* reverselist(struct ListNode*h…

进程——linux

目录 冯诺依曼体系结构&#xff08;计算机组成原理与体系结构&#xff09; 关于冯诺依曼&#xff0c;必须强调几点&#xff1a; 操作系统(Operator System) 概念 设计OS的目的 定位 如何理解 "管理" 总结 系统调用和库函数概念 承上启下 一、进程 基本概念…