了解面部识别的不同算法_人脸识别算法区别_鲸落✗的博客-程序员秘密

技术标签: 算法  深度学习  人工智能  

介绍

任何面部检测和识别程序或系统都必须以人脸识别算法为核心。这些算法由专家分为两大类。几何方法专注于识别特征。为了从图像中提取值,应用了光度统计方法。然后,为了删除变体,将这些值与模板进行比较。此外,算法可以分为两组:基于特征的模型和整体模型。虽然整体方法将人脸视为一个整体,但前者侧重于面部特征并评估其空间特征并与其他特征的联系。

在图片识别方面,人工神经网络是应用最广泛、最有效的技术。神经网络同时执行许多数学过程,神经网络是面部识别系统的基础。

算法执行三个主要功能:识别图像、视频或实时流中的人脸;创建人脸的数学模型;并将模型与训练集或数据库进行比较以确认一个人的身份。

本文介绍了最著名的面部识别算法和重要特征。由于每种方法都具有特定于任务的优势,因此研究人员一直在尝试方法组合并创造新技术。

算法

1)卷积神经网络

人工神经网络(ANN)和人工智能开发的创新之一是卷积神经网络(CNN)。使用最广泛的深度学习技术之一教授模型直接对图像、视频、文本或声音执行分类任务。在计算机视觉、自然语言处理(NLP)和最大的图像分类数据集领域,该模型表现出出色的结果(Image Net)。卷积层和池化层已被添加到典型的神经网络中以创建 CNN。对于CNN来说,这些层可以达到数百甚至数千,并且每个层都获得了识别各种图像元素的能力。

2)哈尔级联

一种在图像上查找对象的方法称为Haar Cascade。该算法从大量的正样本和负样本中学习,其中正样本包含感兴趣的对象,负样本包含其他任何对象。分类器可以在训练后识别新鲜照片上有趣的对象。将该技术与本地二进制模式算法相结合,用于刑事识别以识别人脸。即使表达式波动,Haar 级联分类器也需要 200(共 6000 个)特征才能保证 85-95% 的识别率。

3)特征面

图片数据集中的人脸方差是使用人脸检测和识别算法特征面找到的。在机器学习的帮助下,它使用这些变体对人脸进行编码和解码。通过统计分析许多不同的面部照片,产生一组称为一组特征面部的“标准化面部成分”。由于这种方法不使用数字图像,而是使用统计数据库,因此面部特征被赋予数值。这些变量以不同百分比的混合构成了每个人的面孔。

4)Fisherfaces

作为最受欢迎的面部识别算法之一,Fisherfaces被认为优于许多竞争对手。它经常被比作特征面作为对Eeigenfaces方法的增强,并且在整个训练过程中被认为在类区分方面更有效。该算法的主要优点是它能够推断和插值照明和面部表情的变化。据报道,当在预处理阶段与PCA方法结合使用时,Fisherfaces算法的准确率为93%。

5)内核方法:PCA和SVM

主成分分析(PCA)是一种包罗万象的统计技术,具有广泛的实际用途。PCA旨在最大限度地减少源数据的数量,同时在人脸识别过程中使用时保留最关键的细节。它产生许多加权特征向量,这些特征向量组合形成特征面,特征面是各种人脸图片的相当大的集合。训练集中的每张图像都由特征面的线性组合表示。这些特征向量是使用 PCA 从训练图像集的协方差矩阵中获得的。计算每个图像的主要元素(从 5 到 200)。人脸和噪点之间的细微区别由其他组件编码。作为识别过程的一部分,将未知图像的主要成分与所有其他图像的主要成分进行比较。

一种称为支持向量机(SVM)的机器学习技术采用两组分类原理来区分人脸和“非人脸”。SVM 模型为每个类别提供一个标记的训练数据集,以便对新的测试数据进行分类。对于人脸识别,研究人员使用线性和非线性SVM训练模型。最近的发现表明,非线性训练机具有更大的余量和卓越的识别和分类结果。

6)三维识别

3D人脸识别技术背后的基本概念是人类头骨的独特设计。每个人独特的头骨解剖结构可以用多种因素来解释。这种形式的面部识别通过将3D面部扫描与数据库中的模式进行比较来工作。它具有至关重要的好处,因为检测和识别程序不受化妆品,面部毛发,眼镜和其他此类特征的影响。最近的研究利用了一个将3D几何数据映射到普通2D网格上的系统。它表现出FRGC v2上记录的最高性能,并且能够将3D数据的描述性与2D数据的计算效率(人脸识别大挑战3D面部数据库)集成在一起。

7)局部二进制模式直方图(LBPH)

局部二进制模式 (LBP) 是计算机视觉中一种简单、高效的纹理运算符,该技术通过为每个像素设置邻域阈值,然后将结果视为二进制数来标记图像中的单个像素。LBPH方法在学习阶段为每个标记和分类的图像生成直方图。训练集中的每个图像都由不同的直方图表示。在这种方法中,比较任何两张照片的直方图是实际识别程序所需要的。

8)FaceNet

基于人脸识别的基准数据集,谷歌研究人员在2015年创建了FaceNet人脸识别系统。由于现成的预训练模型和多个开源第三方实现,该系统非常有名。与其他早期开发的算法相比,FaceNet在研究调查,测试性能和准确性方面具有良好的结果。FaceNet有效地提取人脸嵌入,这是在开发过程后期用于训练人脸识别算法的卓越功能。

总结

存在许多面部识别算法和技术。尽管它们都有一个共同的主要目标,但它们可能因任务或问题而异。它们的范围从神经网络和数学模型到专有技术解决方案,具体取决于用途和实施情况。

本文讨论了这些最流行的算法和技术。然而,更多的研究和科学测试证明了集成多种算法以改善面部识别结果的无可争辩的优势。它导致针对某些用途量身定制的新方法和工艺的出现。

现在有一个世界上最简单的用于Python和命令行的面部识别API。face_recognition命令可让您识别照片或文件夹中的人脸。每个面的输出中有一行。数据以逗号分隔,文件名和找到的人员的姓名。

 ️ 优质书籍推荐

分布式一致性算法开发实战

【内容简介】

《分布式一致性算法开发实战》分为11章,第1章简单介绍分布式一致性算法,第2章详细分析Raft算法,第3章在第2章的基础上进行整体设计,第4~8章逐个讲解基于Raft算法的KV服务的各个组件的实现,第9章讲解日志快照,第10章是生产环境必需的服务器成员变更功能,第11章介绍一些相关的Raft算法优化。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_53544522/article/details/128500985

智能推荐

iOS开发 UILocalNotification 本地通知实现提醒功能_深圳市七木网络科技有限公司的博客-程序员秘密

1、本地通知的定义和使用:本地通知是UILocalNotification的实例,主要有三类属性:scheduled time,时间周期,用来指定iOS系统发送通知的日期和时间;notification type,通知类型,包括警告信息、动作按钮的标题、应用图标上的badge(数字标记)和播放的声音;自定义数据,本地通知可以包含一个dictionary类型的本地数据

XDS110卡死之后补救_电脑识别不到xds110_xiaoqianghit1990的博客-程序员秘密

今天我在用CCS刷写CC2650时,刷写过程中不小心把数据线拔了下来,之后XDS110的灯就不亮了,电脑也检测不到了,无法刷写,重新插拔没有反应。通过搜索,得知在C:\ti\ccsv6\ccs_base\common\uscif\xds110路径下,有一个readme.txt文件,其中写到了XDS驱动失效时的解决方式:1)Plug the XDS110 debug probe into your computer. Make sure that youonly have one XDS110 class

C++ asm关键字_Varible的博客-程序员秘密

C++ asm关键字大家可能听说过C++有一个asm,这就是在C++内部嵌入 汇编(Assembler) 指令。汇编是一门 独立的 编程语言,在C++中,可以用asm来嵌入汇编 指令 ,但并不是说要把汇编框架都写下来。格式如下:asm ("Assembler");//Assenmbler指汇编指令/* *你会看到“asm”变成了关键字样式的字体 *汇编指令由字符串方式填在括号里 *...

Win10上Python3通过pip安装时出现UnicodeDecodeError_hugh Lee的博客-程序员秘密

我在通过pip安装时遇到了UnicodeDecodeError。系统是windows10,python版本是3.6.0。完整的信息如下:C:\Windows\system32>pip install SQLAlchemyCollecting SQLAlchemy Using cached SQLAlchemy-1.1.4.tar.gzInstalling collected packages

除了V神,17个以太坊大会讲师的演讲精华都在这儿了!_区块链大本营的博客-程序员秘密

作者 |乔治出品 | 区块链大本营(blockchain_camp)2008年10月31日,一个必须要载入史册的日子。中本聪在 metzdowd.com 网站的密码学邮...

随便推点

【C语言初阶笔记】初识结构体_c语言stud_ Do的博客-程序员秘密

结构体结构体很重要,初学者一定要掌握。本章只是结构体的初识,让大家先做个了解,并不深入介绍,在进阶结构体部分博主会深入介绍。大家敬请期待吧!!结构体的声明结构的基础知识结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。在C语言中,结构体指的是一种数据结构,是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员,且这些成员可以为不同的类型,成员一般用名字访问。比如存储一个班级

并发发布程序的沉默杀手_weixin_26720549的博客-程序员秘密

Our team is building an on-demand food delivery in Thailand, and we’re facing concurrency issues all the time. The most junior developer I talked to didn’t seem aware of the problem, so we trained the...

(孙鑫 十六) 线程同步与异步套接字编程_孙鑫 哲学家 线程_Expl0it_的博客-程序员秘密

1.事件对象事件对象也属于内核对象,包含一个使用计数,一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程

Java面试宝典最新整理 下篇(持续更新中)_NObug-369的博客-程序员秘密

51. ThreadLocal 是什么?有哪些使用场景?线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如 web 服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量一旦在工作完成后没有释放,Java 应用就存在内存泄露的风险.52.说一下 synchronized 底层实现原理?synchroni.

Qt在TabWidget(其他控件)内进行绘图操作_qt中在小部件上绘图_啊奥的博客-程序员秘密

之前由于开发需要,对Qt的一些操作不是很熟悉,在网上查找如何在TabWidget内进行绘图操作的时候发现很多都说得不清不楚的,看起来实在是浪费我们这些新手的时间,希望通过这个博客帮助到其他人。其实这个操作很简单,但是当初不清楚的我整整花了一天时间去查阅各种资料,后来才发现如此简单。因为Qt的paintEven(QPaintEvent*)总是只在当前类下面的窗口绘图。那么要在子窗口下绘图的话...

德硕深圳JAVA面试_面试 | 程序猿面试,Elasticsearch被坑被虐的体无完肤..._zy2752639565的博客-程序员秘密

Java相关问:Elasticsearch 使用 ES_JAVA_OPTS 环境变量来配置JVM,比较常用的配置为 Xms,最小堆内存,Xmx,最大堆内存,设置的建议是什么?答:这两个值的最佳实践是替换2g为使用物理机或者虚拟机的内存的一半分布式相关问:分布式一般使用几个节点:答:分布式一半使用奇数个节点,因为如果我们集群中有三个节点,ABC,如果A和B,C失联,那么B和C会发现连接不上A,就会标...

推荐文章

热门文章

相关标签