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

【信号加密】基于傅里叶变换和小波变换对音频水印的嵌入、提取matlab代码

% 读取原始音频文件 audio audioread(‘original_audio.wav’); % 读取水印图像 watermark imread(‘watermark_image.png’); % 将水印图像转换为灰度图像 watermark_gray rgb2gray(watermark); % 调整水印图像尺寸以适应音频 watermark_resized imresize(watermark_gr…

前端面试题日常练-day46 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备,答案在文末 1. 在Bootstrap中,以下哪个类用于创建一个具有响应式的按钮组? a) .btn-group b) .responsive-btn c) .button-group d) .btn-responsive 2. 哪个Bootstrap类用于创建一个具…

iOS object-c 常用API汇总

前言 本文为入门iOS开发,object-c语法汇总。用于日常查阅。 苹果开发者平台Objective-C文档中文翻译版 Objective-C教程 Objective-C入门教程 文件类型 扩展名内容类型.h头文件。头文件包含类,类型,函数和常数的声明。.m源代码文件。这是典型的源代码文件扩展名&a…

Chrome DevTools攻略(话题文章)

目录 Chrome DevTools 概览 访问 DevTools DevTools 窗口 审查DOM元素和样式 使用Console 调试 JavaScript 提高网络性能 监听 提高渲染性能 JavaScript & CSS 性能 审查存储

超级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, …

ImportError: cannot import name ‘url_quote‘ from ‘werkzeug.urls‘

stackoverflow搬运 执行github上的项目遇到的很多问题,都是python版本非默认最新版 pip install Werkzeug2.2.2安装最新版Werkzeug即可

Pandas练习

一 题目要求 酒类消费数据 给定一个某段时间内各个国家的酒类消费数据表drinks.csv,其中包含6个字段,表8-1 给出了该表中的字段信息。 表8-1酒类消费数据表的字段信息 Country国家beer_servings啤酒消费量spirit_servings烈酒消费量wine_servings红酒消…

C语言编程实现导数运算:深入探索与实战解析

C语言编程实现导数运算:深入探索与实战解析 在数学的广袤领域中,导数运算扮演着至关重要的角色,它描述了函数值随自变量变化的速率。然而,将这一理论应用于实际编程中,尤其是使用C语言,却是一项充满挑战的…

【启程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 是基于动态数组的数据结构,它允许快速随机访问。数组的大小在创建时…

chat1-ClientServer连接

此文件中描述了Client和Server连接的过程 一、Server: 服务端用ServerSocket对象开启一个端口。并用while循环调用ServerSocket对象的accept() 方法等待客户端连接。 package chat1;import java.io.*; import java.util.Map;import java.net.ServerSocket;import ja…

Nginx 实战-05-nginx 反向代理实现域名到指定的 ip

前言 大家好,我是老马。很高兴遇到你。 我们为 java 开发者实现了 java 版本的 nginx https://github.com/houbb/nginx4j 如果你想知道 servlet 如何处理的,可以参考我的另一个项目: 手写从零实现简易版 tomcat minicat 手写 nginx 系列 …

杂谈-青少年信奥赛

青少年信奥赛详解 一、引言 青少年信息学奥林匹克竞赛(简称信奥赛或NOI)是一项面向全球青少年的计算机科学竞赛,旨在通过竞赛的形式,激发青少年对计算机科学和编程的兴趣,培养他们的创新思维和解决问题的能力。自诞生…

【c语言】探索内存函数

探索内存函数 memcpy函数memmove函数memset函数memcmp函数: memcpy函数 memcpy函数声明: void * memcpy ( void * destination, const void * source, size_t num );将source空间下的num个字符复制到dest中去 函数的使用: 将字符数组a的5字…

用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作业实现(八)触摸按…

用python画一艘“福建舰”

import turtle # 设置画布和画笔 screen turtle.Screen() screen.bgcolor("white") pen turtle.Turtle() pen.speed(10) pen.color("blue") pen.penup() # 航母主体(简化为一个矩形) pen.goto(-200, 0) pen.pen…