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

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

人脸识别的几个发展阶段

第一个发展阶段主要从 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项目的开源,极大的推动了人脸识别的发展。

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

与我们前面博文提到的技术一致,在支付、打卡、门禁等场景,还要加上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)

结语

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

人脸识别系统项目源码

🍞正在为您运送作品详情

文章转载自:CoderInCV

原文链接:https://www.cnblogs.com/haoliuhust/p/17929526.html

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java人脸识别开源代码是一种源代码开放且免费供使用的技术工具,可以用于识别和处理人脸图像。人脸识别技术是一种基于计算机视觉和模式识别的人工智能技术,能够通过分析和比对人脸特征来识别和验证个人身份。 Java人脸识别开源代码提供了一系列算法和函数,可以用于进行人脸检测、人脸特征提取人脸匹配等操作。通过这些代码,开发人员可以轻松地将人脸识别功能集成到自己的Java应用程序中。 使用Java人脸识别开源代码,我们可以实现以下功能: 1. 人脸检测:可以通过代码检测输入图像中的人脸位置和边界框。 2. 人脸特征提取:可以通过代码提取人脸图像中的关键特征,如眼睛、鼻子、嘴巴等。 3. 人脸匹配:可以通过比对不同图像中的人脸特征,进行人脸识别和身份验证。 4. 人脸跟踪:可以通过代码实现实时人脸识别,随着人脸位置的变动对其进行跟踪。 Java人脸识别开源代码可以帮助开发者快速搭建人脸识别系统,广泛应用于人脸门禁、人脸支付、人脸登录等领域。此外,通过对开源代码的学习和研究,可以拓展人脸识别技术的应用,实现更加智能化和个性化的功能。 总结来说,Java人脸识别开源代码是一种功能强大且灵活的技术工具,可以通过代码库中提供的函数和算法实现人脸检测、特征提取、匹配和跟踪等功能。它为开发者提供了一个便捷的方式来应用人脸识别技术,并为推动人脸识别领域的发展做出了积极贡献。 ### 回答2: Java人脸识别领域有很多开源代码和库供开发者使用。其中最常用的包括OpenCV、DeepFaceLab、FaceNet和Dlib等。 OpenCV是一个跨平台的计算机视觉库,提供了丰富的图像处理和人脸识别功能。它支持多种编程语言,包括Java,并且有着广泛的应用领域。开发者可以使用OpenCV提供的API和函数,实现人脸检测、人脸识别人脸属性分析等功能。同时,OpenCV还提供了一些预训练的人脸识别模型,可以直接使用或进行微调。 DeepFaceLab是一个用于深度学习人脸识别的工具,它使用了一种称为GAN(生成对抗网络)的技术。DeepFaceLab可以生成高质量的人脸图片、进行人脸交换,并支持人脸识别等功能。虽然DeepFaceLab主要使用Python编写,但也可以与Java进行集成,开发者可以使用Java调用DeepFaceLab提供的API。 FaceNet是一个用于生成人脸特征向量的深度学习模型。它能够将人脸图像映射到一个低维度的特征空间,并且保持人脸图像之间的相似度信息。FaceNet的目标是实现人脸的唯一性编码,以便进行人脸检索和识别。开发者可以使用Java调用FaceNet提供的API实现人脸特征提取和比对等功能。 Dlib是一个跨平台的C++库,提供了一系列计算机视觉和机器学习算法。它包含了一些用于人脸检测和识别的功能。虽然Dlib本身没有直接支持Java,但可以通过Java Native Interface (JNI) 实现Java与Dlib的集成。 以上是常见的几个Java人脸识别开源代码和库,开发者可以根据自己的需求选择合适的工具进行开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值