基于MTCNN+FaceNet的人脸检测与识别系统

2023-10-08 06:30

本文主要是介绍基于MTCNN+FaceNet的人脸检测与识别系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在整理出的上学期做的人脸识别复现,源码在git上改动不大。
Github链接:https://github.com/ALittleLeo/FaceRcognization/tree/master

引言

随着互联网技术的高速发展,互联网也进入了海量数据时代。在全球,每天约2EB的数据被产生。在各种类型的数据信息中,人脸数字图像数据是最重要的一种数据类型。所以越来越多的新型应用场景需要利用图像中的信息,而人脸图像数据作为一种直观高效的信息载体,包含了复杂多样的内容信息。
近年来,基于深度学习的OCR技术在人脸识别的精准度和效率上有着显著的提升。目前主流的人脸识别主要分为两个部分,即人脸检测和人脸识别。1)在人脸检测方面,目前在传统单一维度人脸检测有较为成熟的研究成果。纹理特征提取算法LBP对多维度人脸检测问题也有一定不错的效果。2)在人脸识别方面,主流的是CNN和transformer模型。此外仍有团队将Attention机制运用到人脸识别当中,强化了网络挖掘特征信息的能力。目前人脸识别的准确率仍然不高,本项目将在已有深度学习模型的基础上,使用MCTNN+facenet结合的方法,以能达到较好的识别效果。
人脸检测识别是人工智能领域中一项重要的关键技术,而深度学习是该技术兴起的研究热点,这项技术可提高人脸检测识别技术的精准性和数据的安全性。本文通过MCTNN+facenet的方法分析深度学习的检测技术原理,把该技术的各关键点有机结合起来,最终形成基于深度学习的人脸检测模技术。

MCTNN+facenet

MTCNN一个深度卷积多任务的框架,这个框架利用了检测和对准之间固有的关系来增强他们的性能。这里使用MTCNN进行人脸检测,一方面是因为其检测精度确实不错,另一方面facenet工程中,已经提供了用于人脸检测的mtcnn接口。MTCNN是多任务级联CNN的人脸检测深度学习模型,该模型中综合考虑了人脸边框回归和面部关键点检测。特别是,在预测人脸及脸部标记点的时候,通过3个CNN级联的方式对任务进行从粗到精的处理。
Stage 1:使用P-Net是一个全卷积网络,用来生成候选窗和边框回归向量(bounding box regression vectors)。使用Bounding box regression的方法来校正这些候选窗,使用非极大值抑制(NMS)合并重叠的候选框。全卷积网络和Faster R-CNN中的RPN一脉相承。
Stage 2:使用R-Net改善候选窗。将通过P-Net的候选窗输入R-Net中,拒绝掉大部分false的窗口,继续使用Bounding box regression和NMS合并。
Stage 3:最后使用O-Net输出最终的人脸框和特征点位置。和第二步类似,但是不同的是生成5个特征点位置。

在这里插入图片描述
在这里插入图片描述

实验结果

数据集分析

在本文采用AgeDB-30 (570 ids/12,240 images/6K pairs)跨年龄人脸识别数据集,AgeDB包含16,488个各种名人的图像,按照4:1的比例分为模型训练集和测试集。具体内容包括演员,作家,科学家,政治家,每个图像都注明了身份,年龄和性别属性。共存在568个不同的科目。 每个科目的平均图像数为29。最低和最高年龄分别为1和101。每个科目的平均年龄范围是50.3岁。

实验开发环境

本文实验开发环境为Intel i7-9750h,GPU为NVIDIA GTX1050
tensorflow-gpu 1.8.0
tensorflow-tensorboard 0.4.0
numpy 1.16.2
scipy 1.4.1
matplotlib 3.3.3
six 1.14.0
sklearn 0.0

实验结果及分析

系统实现流程:
1、建立人脸数据图库
2、搭建MTCNN网络
3、利用MTCNN网络把人脸数据图库转换为人脸特征库(embedding库)
4、使用MTCNN网络提取待检测的人脸图片的特征
5、使用facenet比较待识别的人脸和人脸库特征,绘制图片,得到最终结果

目录说明:
align文件夹中包含三个mtcnn要用到的模型文件,以及搭建mtcnn网络的文件 detect_face.py,这里面的东西在facenet的项目中的都可以找到
dataset文件夹中主要存放数据,包括images(人脸数据图库),emb(人脸特征库),test_images(测试图片)
models文件夹中存放facenet预训练模型
utils是工具类文件夹,用于文件读写,图片相关操作。
predict.py是进行人脸识别的入口
create_dataset.py用于将人脸数据图库转换为人脸特征库。

MTCNN由3个网络结构组成(P-Net,R-Net,O-Net)
facenet进行人脸识别
方法:facenet通过CNN将人脸映射到欧式空间的特征向量上,计算不同图片人脸特征的距离,通过相同个体人脸的距离总是小于不同个体 人脸·的距离这一先验知识训练网络(详细介绍后续补充)。
代码实现,运行predict.py。流程:加载人脸特征数据库,提取待识别的人脸的特征与人脸数据库中的信息逐一比较。
在这里插入图片描述
如图是实机实验的结果,可以看到在模型的训练过程中,胡歌和周杰伦的照片在人脸识别数据库里,人脸的特征保存在训练的模型之中,可以被检测(绿线框出)并被识别为胡歌和周杰伦(红色标注)。撒贝宁的照片虽然可以被检测为人像,但由于数据集中缺少照片未被训练而不能被识别。
在这里插入图片描述
模型测评,运行evaluation_test.py,该文件会绘制测试文件的ROC曲线,并给出最优阈值,以及利用用sklearn.metric得到FPR, TPR, AUC等参数。对数据集是agedb_30进行测试,该数据集共有12000张照片,分为6000对每对照片有一个label值为1或0用来表示两张图是否为一个人,是同一个为 True不同为False,通过该数据集测试结果,绘制当前模型的ROC曲线,可得roc_auc:0.8308236111111111,optimal_idx :1190,best_threshold :
1.1180874109268188,即由该阈值划分二分类效果最好。

在这里插入图片描述
人脸检测识别是一种通用识别技术,近些年已成为深度学习计算机视觉方向的研究热点。如今传统的人脸识别技术已经相对成熟,但多维度识别真人识别等人脸识别技术仍有提升的空间。本文实验利用MCTNN和facenet结合的方法进行实验,操作步骤简单,可行度高。实验测试图片来自已公开的训练集和网络,实验结果证明本文采用的方法适应性强,准确率较高。

传统LBP算法

LBP是一种纹理特征提取算法,LBP通过提取LBP算子来进行图像的检测和识别。
原始的LBP算子定义为在33的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若处于周围的像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。由此得到的33邻域内的8个点对比可得8位二进制数,再转化为十进制数类型即256中LBP码,通过计算可得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理信息。如下图所示:
在这里插入图片描述
由 LBP 定义可得,LBP 算子只满足灰度不变而不满足旋转不变。经过旋转的图像会得到不同的 LBP值。为此Maenpaa等人将 LBP算子改进加以扩展,改进后的LBP是具有旋转不变性的 LBP算子,在不断旋转圆形邻域后计算得到一系列的初始定义 LBP值,在这些值中取其最小值作为该邻域的 LBP值。
LBP的主要应用领域是人脸识别分析和纹理分析等,LBP图谱一般不作为特征向量用于分类识别,取而代之的是由LBP特征谱生成的统计直方图,进而用于分类识别。
由上述可知,这个特征与图片的位置信息是紧密相关的。未经过预处理直接对两幅图片提取特征,并进行分析分类的话,会因为位置的偏差而产生较大的误差难以识别。经过研究人员改进后发现,将图片划分为若干的子区域,对每个子区域内的每个像素点都提取LBP特征,然后,在每个子区域内建立LBP特征的统计直方图。由此可将整个图片细化为多个子区域,每个子区域用一个统计直方图来进行描述;整个图片就由若干个统计直方图组成。

相关主流神经网络算法

目前的神经网络算法是一种非线性动力学系统,相比于传统的纹理特征检测算法具有良好的自组织、自适应能力。目前神经网络方法在人脸识别中的研究方兴未艾。Valentin提出一种方法,首先提取人脸的 50个主元,然后用自相关神经网络将它映射到 5维空间中,再用一个普通的多层感知器进行判别,对一些简单的测试图像效果较好;Intrator等提出了一种混合型神经网络来进行人脸识别,其中非监督神经网络用于特征提取,而监督神经网络用于分类。Lee等将人脸的特点用六条规则描述,然后根据这六条规则进行五官的定位,将五官之间的几何距离输入模糊神经网络进行识别,效果较一般的基于欧氏距离的方法有较大改善,Laurence等采用卷积神经网络方法进行人脸识别,由于卷积神经网络中集成了相邻像素之间的相关性知识,从而在一定程度上获得了对图像平移、旋转和局部变形的不变性,因此得到非常理想的识别结果,Lin等提出了基于概率决策的神经网络方法 (PDBNN),其主要思想是采用虚拟 (正反例 )样本进行强化和反强化学习,从而得到较为理想的概率估计结果,并采用模块化的网络结构 (OCON)加快网络的学习。这种方法在人脸检测、人脸定位和人脸识别的各个步骤上都得到了较好的应用,其它研究还有 :Dai等提出用Hopfield网络进行低分辨率人脸联想与识别,Gutta等提出将RBF与树型分类器结合起来进行人脸识别的混合分类器模型,Phillips等人将MatchingPursuit滤波器用于人脸识别,国内则采用统计学习理论中的支撑向量机进行人脸分类。
神经网络方法在人脸识别上的应用比起前述几类方法来有一定的优势,因为对人脸识别的许多规律或规则进行显性的描述是相当困难的,而神经网络方法则可以通过学习的过程获得对这些规律和规则的隐性表达,它的适应性更强,一般也比较容易实现。因此人工神经网络识别速度快,但识别率低 。而神经网络方法通常需要将人脸作为一个一维向量输入,因此输入节点庞大,其识别重要的一个目标就是降维处理。

结语

此次研究课题为人脸检测与识别,此课题在当今时代仍十分值得深入探讨的,就人脸检测方面在如今研究下的成果而言,计算机在此方面的应用仍具有一定的挑战性。基于多维度小样本的背景环境下,相比于传统人脸的检测与识别定会具备更多的干扰因素以及对于实验结果更强有力的影响。虽然存在着更高的难度,但不免存在更多有待考察和研究的思考空间,以及未来科技应用技术的发展方向。
此次研究中,通过自主实验进行数据的收集和结果的分析,重点以faster-R-CNN + CRNN模型结合的方法进行对人脸的深度学习。此次研究使我们对于此方面的知识具备更深刻的了解与认识,同时对于人脸检测的研究也有具备一些相关知识的基础和个人见解。最后,对在我们研究过程中为我们提出帮助的老师同学以及我们参考的文献的作者们致以感谢。

这篇关于基于MTCNN+FaceNet的人脸检测与识别系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/163354

相关文章

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2757 标注数量(xml文件个数):2757 标注数量(txt文件个数):2757 标注类别数:4 标注类别名称:["Platelets","RBC","WBC","sickle cell"] 每个类别标注的框数:

Temu官方宣导务必将所有的点位材料进行检测-RSL资质检测

关于饰品类产品合规问题宣导: 产品法规RSL要求 RSL测试是根据REACH法规及附录17的要求进行测试。REACH法规是欧洲一项重要的法规,其中包含许多对化学物质进行限制的规定和高度关注物质。 为了确保珠宝首饰的安全性,欧盟REACH法规规定,珠宝首饰上架各大电商平台前必须进行RSLReport(欧盟禁限用化学物质检测报告)资质认证,以确保产品不含对人体有害的化学物质。 RSL-铅,

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

Android模拟器的检测

Android模拟器的检测 需求:最近有一个需求,要检测出模拟器,防止恶意刷流量刷注册。 1.基于特征属性来检测模拟器,比如IMSI,IDS,特殊文件等等。 这个方案局限性太大,貌似现在大部分模拟器默认就是修改了的,还不需要人为的去修改。 经过测试,发现如下图所示。 如果是模拟器的话,这些特殊值应该返回true,比如DeviceIDS,Build。可是居然返回了false,说明特殊值