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

2023-09-13 22:35:42


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

人脸识别的几个发展阶段

第一个发展阶段主要从 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

更多推荐

TikTok的全球影响:跨文化、跨国界的短视频文化

随着TikTok的崛起,短视频文化正在以前所未有的方式迅速传播,跨足了不同国家和文化的边界。本文将探讨TikTok的全球影响,以及它如何促进了跨文化交流和文化融合。短视频:跨越语言和文化的沟通工具TikTok的短视频格式具有独特的跨文化传播能力。它通过简洁而生动的方式,允许用户在不同语言背景下进行沟通。这种简单而直接的

LeetCode 盛最多水的容器 双指针

原题链接:力扣(LeetCode)官网-全球极客挚爱的技术成长平台题面:给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例1:输入:[1,8

uniapp——ios证书申请——详细步骤+遇到的坑——技能提升

三年前,我曾经写过uniapp的程序,时隔三年,又遇到了uniapp的需求,之前没有自行申请ios证书,现在终于要自己生成证书了。。。是福不是祸,是祸躲不过。uniapp生成ios证书的详细步骤uniapp对接unipush的操作步骤链接1.生成`ios`证书1.1准备环境——略过1.2登录IOSDevCenter——

01. pring Cloud微服务系列之 包版本号约定

SpringCloud微服务系列文章,点击上方合集↑1.Java8目前市场上最常用的是Java8,而Java17则代表着未来的发展趋势。虽然SpringBoot3已经发布,但它要求最低版本为Java17。然而,考虑到目前很多开发工具库还没有完全适配Java17,因此在生产环境中使用可能会遇到一些问题和不兼容的情况。所以

U盘有病毒插上电脑会感染吗?了解下U盘的病毒传播机制

U盘作为一种常见的移动存储设备,我们会经常使用它来传输和存储重要的文件。然而,有时可能会遇到文件被当作病毒误删除的情况,这给我们带来了不便和焦虑。好在,这里将向您介绍一些简单而有效的方法,帮助您恢复被误删除的U盘文件,并探讨U盘的病毒传播机制,解答“U盘有病毒插上电脑会感染吗”的疑惑。▌案例分享“我安装了多个防病毒软件

python+nodejs+php+springboot+vue校园在线拍卖竞拍系统

要想实现在线拍卖系统的各项功能,需要后台数据库的大力支持。管理员验证注册信息,收集的用户信息,并由此分析得出的关联信息等大量的数据都由数据库管理。用户功能模块5.1首页用户登录进入在线拍卖系统可以查看首页、个人中心、历史竞拍管理、竞拍订单管理、留言板管理等内容,如图5.2历史竞拍管理在历史竞拍管理页面可以查看商品名称;

SpringBoot详解

文章目录SpringBoot的特点Spring,SpringBoot的区别SpringBoot常用注解标签SpringBoot概述SpringBoot简单Demo搭建读取配置文件的内容SpringBoot自动配置Condition自定义beanSpringBoot常用注解原理@EnableAutoConfigurati

Universal Robot (UR3)与USB摄像头和电磁夹持器结合的ROS拾取和放置硬件实施详细教程:从连接到实践

第一部分:连接UniversalRobot(UR3)到PC1.将UniversalRobot(UR3)连接到PC(Ubuntu16.04)在实现机器人的自动化任务之前,首先需要确保机器人与计算机之间的连接是稳定的。在这一部分,我们将详细介绍如何将UniversalRobot(UR3)连接到运行Ubuntu16.04的P

Spring编程常见错误50例-Spring Bean依赖注入常见错误(下)

@Value没有注入预期的值问题对于@Value可以装配多种类型的数据:装配对象:@Value("#{student}")privateStudentstudent;@BeanpublicStudentstudent(){Studentstudent=createStudent(1,"xie");returnstude

关键节点与邻居搜索:K-Core算法对比K-Hop算法的效能较量

文章首发地址K-Core算法K-Core算法是一种网络分析算法,用于发现网络中的核心节点。核心节点是指在网络中具有重要影响力的节点,它们连接着大量其他节点,是网络中的重要信息传播和控制中心。K-Core算法通过逐步删除网络中度小于K的节点,直到网络中不存在度小于K的节点为止,然后得到的网络即为K-Core网络。K-Co

有效的括号(栈的高频面试题)

一、题目描述题目连接:有效的括号给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。输出需求示例1:输入:s="()"输出:true示例2:输入:s="()[

热文推荐