基于开源模型搭建实时人脸识别系统(六):人脸识别(人脸特征提取)

news2024/11/30 4:52:50

文章目录

  • 人脸识别的几个发展阶段
  • 基于深度学习的人脸识别技术的流程
  • 闭集和开集(Open set)识别
  • 人脸识别的损失
  • Insightface
  • 人脸识别数据集
  • 模型选型
  • 参考文献
  • 结语
  • 人脸识别系统项目源码

前面我们讲过了人脸检测、人脸质量、人脸关键点、人脸跟踪,接下来就是人脸识别系统里面的重中之重人脸识别了,或者叫人脸特征提取,这个算法是来判定人脸是谁。我们刷脸进车站、刷脸付款、解锁手机都离不开这个算法。

人脸识别的几个发展阶段

第一个发展阶段主要从 20 世纪 60 年代到 90 年代。Brunelli 、Bledsoe 、金出武 雄等人在这一时期做了人脸识别的相关研究,人工神经网络在这时被提出,因为当时硬 件基础难以支撑其过高的计算复杂度而没有得到重点关注。这一时期的识别精确度不高, 可以做到简单的人脸识别,但还是无法运用到实际中。
第二个发展阶段是从 1991 年到 1997 年。这一时期出现了耶鲁大学的 Fisherface 算法和麻省理工学院的 Eigenface 算法。这两种算法在当时颇具影响力。这一时期还出 现了人脸等密度图线性分析、基于弹性图匹配的方法 EBGM、隐马尔可夫模型 HMM等。Eigenface使用了PCA(主成分分析)将人脸图像进行降维,然后用欧式距离来判定人脸相似度,PCA也是计算机视觉课程会接触到的算法;Fisherface则使用了LDA(线性判别分析)。
第三个发展阶段是从 1997 年到 2010 年前后,研究人员开始摒弃原先的理想环境, 把研究重点转移到了非理想环境。这个时期研究者所使用分类器的联合方式和传统的特 征提取的技术方法。在此阶段,研究人员主要采用贝叶斯分类器、联合贝叶斯、支持向 量机 SVM等分类器进行研究。用SVM这类分类器来做人脸识别,实现了人脸特征和分类的解耦,所以有很多特征提取器都被用来做人脸识别了,比如sift、Gabor、HoG、LBP等。总体上,虽然相比于第二个阶段的算法,这个阶段的算法从精度和鲁棒性上都有较大提升,不过还是无法进行大规模的使用。
第四个阶段就是深度学习时期了,这个阶段是人脸识别真正进入日常生活的阶段,我们日常的刷脸解锁、刷脸进小区、打卡都离不开基于深度学习的人脸识别技术的发展。2014 年,Facebook 提出 Deepface 和香港中文大学提出 DeepID在 LFW上分别达到了 97.34%和 97.44%的识别精度。2015 年,Google 提出的 FaceNet ,在 LFW 上取得了 99.62%的识别率。同年,牛津大学提出了 VGGface 并公开数据集 CASIA WebFace ,VGGNet 在 CASIA WebFace 人脸集上训练,得到了 98.95%的识别率。2017 年,Liu 等人提出 SphereFace ,人脸识别准确率提升到了 99.42%。而后的arcface\cosface等新的人脸loss的提出,以及insightface项目的开源,极大的推动了人脸识别的发展。

基于深度学习的人脸识别技术的流程

image.png
与我们前面博文提到的技术一致,在支付、打卡、门禁等场景,还要加上face anti-spoof(活体检测)来防止出现假体攻击。

闭集和开集(Open set)识别

闭集是指待识别的人都在训练集中,这时的人脸识别等同于一个分类问题。
开集是指待识别的人不在训练集中,这时的人脸识别就不等同于一个分类问题了,而是一个度量学习的问题,即要学习的是如何判定2个人脸是否属于一个人,尽管实际上训练的时候是按分类训练。

人脸识别的损失

目前主要使用的人脸识别损失是arcface\cosface这类margin softmax 损失,即在普通的softmax分类损失上加上了乘性或加性的margin, 以期望达到类内内聚,类间分开的效果。
image.png

而在此之前,triplelet loss也曾用于人脸识别,由于训练过程中样本采样比较复杂,使用不太广泛。
image.png

Insightface

deepinsight/insightface: State-of-the-art 2D and 3D Face Analysis Project (github.com)
insightface是人脸识别领域最有名的开源项目,该项目包括了从人脸检测、人脸关键点到人脸识别的全流程算法,是入门和深入人脸识别的不二之选。

人脸识别数据集

人脸识别的发展也离不开数据集规模的扩大,最大的数据集已经到了百万级ID:
image.png

模型选型

insightface提供了很多模型:
insightface/recognition/arcface_torch at master · deepinsight/insightface (github.com)
insightface/model_zoo/README.md at master · deepinsight/insightface (github.com)
考虑到速度和精度,我们选择使用WebFace训练的resnet50模型。

参考文献

A Survey of Face Recognition)

结语

这里我们简要介绍了人脸识别技术的发展过程和主要的一些方法,这里只是一些宽泛的介绍,更深入的算法理解还需要自行阅读论文,可以阅读上述的综述。

人脸识别系统项目源码

https://mbd.pub/o/bread/ZJyTmZty

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

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

相关文章

微分中值定理

目录 费马定理 罗尔定理 拉格朗日中值定理 柯西中值定理 几个常用的泰勒公式 微分中值定理是微积分中的一个重要定理,它用于描述一个函数在某个区间内的平均变化率与该区间内某一点的瞬时变化率之间的关系。微分中值定理有两个主要形式:拉格朗日中值…

Kotlin Files Paths write ByteArray writeString写多行BufferedWriter

Kotlin Files Paths write ByteArray writeString写多行BufferedWriter import java.nio.file.Files import java.nio.file.Paths import java.nio.file.StandardOpenOptionfun main(args: Array<String>) {val filePath "./myfile.txt"val path Paths.get(…

【报错】springboot3启动报错

报错内容&#xff1a;Cannot load driver class: org.h2.Driver Error starting ApplicationContext. To display the condition evaluation report re-run your application with debug enabled. 解决; 通过源码分析&#xff0c;druid-spring-boot-3-starter目前最新版本是1…

微信小程序 写一个接口不会掉就不会停止的加载动画

我们可以在接口调用前执行 wx.showLoading({title: 加载中,mask: true })这个加载会在这一直转 显示这加载的动画 它不会自己停下来 而是需要你执行 wx.hideLoading()之后 这个加载动画才会停止 那么我们完全可以将wx.hideLoading()放在接口返回的回调中 这样 就达到了一个 …

LeetCode每日一题:2596. 检查骑士巡视方案(2023.9.13 C++)

目录 2596. 检查骑士巡视方案 题目描述&#xff1a; 实现代码与解析&#xff1a; bfs模拟 原理思路&#xff1a; 2596. 检查骑士巡视方案 题目描述&#xff1a; 骑士在一张 n x n 的棋盘上巡视。在有效的巡视方案中&#xff0c;骑士会从棋盘的 左上角 出发&#xff0c;并…

利用Semaphore实现多线程调用接口A且限制接口A的每秒QPS为10

前段时间在群里面发现有个群友抛出一个实际需求&#xff1a;需要通过一个接口拉取数据&#xff0c;这个接口有每秒10QPS限制&#xff0c;请问如何实现数据拉去效率最大化且限制调用拉取接口每秒10PQPS&#xff1f;我觉得这个需求挺有意思的&#xff0c;跟某群友讨论&#xff0c…

CopyOnWriteArrayList源码分析

其中唯一的线程安全 List 实现就是 CopyOnWriteArrayList。 特点 由于读取操作不会对原有数据进行修改&#xff0c;因此&#xff0c;对于每次读取都进行加锁其实是一种资源浪费。相比之下&#xff0c;我们应该允许多个线程同时访问 List 的内部数据&#xff0c;毕竟对于读取操…

企业邮箱选择指南:最适合跨境贸易的解决方案推荐

随着全球贸易的不断发展&#xff0c;外贸公司越来越依赖高效的沟通和协作工具。在众多企业邮箱选择中&#xff0c;哪一种最适合外贸公司的需求呢&#xff1f;让我们一起来看看外贸公司常用的企业邮箱解决方案。 对于外贸公司而言&#xff0c;可靠性是选择企业邮箱的首要考虑因…

LC1798. 你能构造出连续值的最大数目(JAVA)

LC1798. 你能构造出连续值的最大数目 题目描述贪心算法代码演示 题目描述 难度 - 中等 Leetcode - 1798. 你能构造出连续值的最大数目 给你一个长度为 n 的整数数组 coins &#xff0c;它代表你拥有的 n 个硬币。第 i 个硬币的值为 coins[i] 。如果你从这些硬币中选出一部分硬币…

前端构建工具 webpack 笔记

1、了解 webpack 1、定义&#xff1a;本质上&#xff0c;webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具&#xff0c;当 webpack 处理应用它会在内部从一个或多个入口点构建一个依赖图(dependency graph)&#xff0c;然后将你项目中所程序时&#xff0c;需的…

YOLO物体检测系列3:YOLOV3改进解读

&#x1f388;&#x1f388;&#x1f388;YOLO 系列教程 总目录 YOLOV1整体解读 YOLOV2整体解读 YOLOV3提出论文&#xff1a;《Yolov3: An incremental improvement》 1、YOLOV3改进 这张图讲道理真的过分了&#xff01;&#xff01;&#xff01;我不是针对谁&#xff0c;在…

《C++ Primer》第3章 字符串、向量和数组(二)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 3.3 标准库类型vector&#xff08;P86&#xff09; vector 表示对象的序列&#xff0c;其中所有对象的类型相同&#xff0c;每个对象都有一个与之对应的索引。vector 容纳着其他对象&#xff0c;所以常被称…

Linux内核4.14版本——drm框架分析(11)——DRM_IOCTL_MODE_ADDFB2(drm_mode_addfb2)

目录 1. drm_mode_addfb2 2. drm_internal_framebuffer_create 3. drm_fb_cma_create->drm_gem_fb_create->drm_gem_fb_create_with_funcs 4. drm_gem_fb_alloc 4.1 drm_helper_mode_fill_fb_struct 4.2 drm_framebuffer_init 5. 调用流程图 书接上回&#xff0c;使…

springboot对接postgres

安装postgres 注意:下述链接方式会自动创建数据库steven_russell,若需要创建其他数据库&#xff0c;可以手动执行命令创建数据库 docker run --name postgres \ -p 5432:5432 \ -e POSTGRES_USERsteven_russell \ -e POSTGRES_PASSWORD123456 \ -itd --privilegedtrue postgre…

【卖出看涨期权策略(Short Call)】

卖出看涨期权策略&#xff08;Short Call) 卖出看涨期权策略又称为卖出无备兑看涨期权&#xff0c;如果一个投资者在不持有标的资产价格的情况下卖出看涨期权&#xff0c;那么这种策略就是卖出无备兑看涨期权策略。这个策略潜在盈利有限&#xff0c;但是亏损无限。 卖出看涨期…

基于SSM的应急资源管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Git - Git Merge VS Git Rebase

文章目录 概述Flow View小结 概述 Git merge和Git rebase是两种不同的版本控制工作流程&#xff0c;它们用于将一个分支的更改合并到另一个分支。它们有不同的工作原理和应用场景&#xff0c;下面是它们的主要区别&#xff1a; 合并的方式&#xff1a; Git Merge&#xff1a;合…

MySQL间隙锁深入分析

概念 什么是间隙锁&#xff1f; MySQL的间隙锁&#xff08;gap lock&#xff09;是一种锁定相邻数据间隔的机制。 触发时机&#xff1f; 当使用SELECT…FOR UPDATE或UPDATE语句时&#xff0c;MySQL会获取一个范围锁&#xff0c;包括指定条件内的所有数据行&#xff0c;并且还…

离散数学 学习 之 一阶逻辑基本概念 (一 )

个体词可以 理解为主语 &#xff0c; 3 不是偶数 &#xff0c;3 就是 个体常项 凡整数都能被 2 整除 &#xff0c; 整数就是 个体变项 上面的谓词是 &#xff08; 1 &#xff09; 是无理数 &#xff08; 2 &#xff09; 是有理数 &#xff08; 3 &#xff09; 与 同岁 &#xf…

四川百幕晟科技:提升店铺质量方法是什么?

抖店是抖音旗下的移动电子商务平台&#xff0c;为商家提供在线销售和促销的机会。在抖店&#xff0c;经验值是商家评价和信誉的重要指标之一。反映了平台上商户的服务质量和用户满意度。那么&#xff0c;如何查看自己在抖店手机上的体验分数呢&#xff1f; 1、如何查看抖店手机…