动态人脸识别原理和相关测试数据

目录

 1.动态人脸识别原理流程图

2.精度指标

2.1 人脸检测

2.2人脸识别

3.测试视频


1.动态人脸识别原理流程图

2.精度指标

2.1 人脸检测

人脸检测模块采用的是SCRFD系列模型中的scrfd_500m_kps模型,该模型是2021年5月提出的,目前已被收录进Insightface,其鲁棒性和实时性已得到广泛验证,可以灵活应用于多个人脸检测的场景中,其相关指标数据如下。

ResNet系列模型的对比结果

Method

Backbone

Easy

Medium

Hard

#Params(M)

#Flops(G)

Infer(ms)

DSFD (CVPR19)ResNet15294.2991.4771.39120.06259.5555.6
RetinaFace (CVPR20)ResNet5094.9291.9064.1729.5037.5921.7
HAMBox (CVPR20)ResNet5095.2793.7676.7530.2443.2825.9
TinaFace (Arxiv20)ResNet5095.6194.2581.4337.98172.9538.9
ResNet-34GFResNet5095.6494.2284.0224.8134.1611.8
SCRFD-34GFBottleneck Res96.0694.9285.299.8034.1311.7
ResNet-10GFResNet34x0.594.6992.9080.426.8510.186.3
SCRFD-10GFBasic Res95.1693.8783.053.869.984.9
ResNet-2.5GFResNet34x0.2593.2191.1174.471.622.575.4
SCRFD-2.5GFBasic Res93.7892.1677.870.672.534.2

Mobile系列模型的比对结果

Method

Backbone

Easy

Medium

Hard

#Params(M)

#Flops(G)

Infer(ms)

RetinaFace (CVPR20)MobileNet0.2587.7881.1647.320.440.8027.9
FaceBoxes (IJCB17)-76.1757.1724.181.010.2752.5
MobileNet-0.5GFMobileNetx0.2590.3887.0566.680.370.5073.7
SCRFD-0.5GFDepth-wise Conv90.5788.1268.510.570.5083.6

SCRFD-0.5GF在X64 CPU上的性能,其中精度和推理时间是AMD Ryzen 9 3950X上测评得到的。

Test-Input-Size

CPU Single-Thread

Easy

Medium

Hard

Original-Size(scale1.0)-90.9189.4982.03
640x48028.3ms90.5788.1268.51
320x24011.4ms---

通过以上数据,可以得出SCRFD模型在人脸检测方面是有着不错的表现。根据我们需要应用的场景为机器人平台,对实时性有着较高的要求,通过实际测试得出,SCRFD_0.5g_kps模型对于尺度大于32x32的人脸均能较好的检测出,且在NVIDIA NX平台上测试,对于640x480pixel的输入图像,基于NCNN GPU框架下,其推理时耗为28ms左右,且能提供人脸的5个KPS信息,精度和实时性都较好的满足了我们应用场景的需求,且能满足后续人脸识别等工作的展开,故选用该模型进行人脸检测。

2.2人脸识别

考虑机器人的硬件平台为边缘端,故能支持的算力有限,因此人脸识别模型主要考虑轻量级的网络。对近两年相关的算法、数据进行调研后,人脸识别模型采用MobileFaceNet为主干网络,在此基础上做一些调整,其模型参数量只有0.99M,MAdds乘加数计算量为221M,相对于常见的人脸识别模型沉重的计算量,该模型轻量级,适用于机器人边缘端的应用,其相关测试结果如下。

(1)常见的轻量级人脸识别模型在CASIA-Webface数据集进行训练后,在LFW、AgeDB-30数据集上测试得到的结果如下表(其测试的硬件平台为高通骁龙4核CPU,在NCNN框架上进行推理)

LFW

AgeDB-30

Params

Speed

LFW

AgeDB-30

Params

Speed

MobileNetV198.63%88.95%3.2M60ms
ShuffleNet98.70%89.27%0.83M27ms
MobileNetV298.58%88.81%2.1M49ms
MobileNetV2-GDConv98.88%90.67%2.1M50ms
Our99.28%93.05%0.99M24ms

(2)在清洗后的数据集MS-Celeb-1M(其中有85k受试者)上进行训练后,在LFW数据集上其测试结果如下表

Model Size

LFW Acc

DeepFR0.5GB98.95%
Center Face105MB99.28%
ArcFace(LResNet100E-IR)250MB99.83%
FaceNet30MB99.63%
ShiftFaceNet3.1MB96.00%
Our4.0MB99.55%

通过以上表格对比数据可以看到我们使用的模型在不同数据集上的表现良好,精度和计算量达到了一个较好的平衡,适用于机器人端的应用。

考虑机器人目前的应用场景,应用时采用了格林深瞳提供的glint360数据集(主要为亚洲人脸)进行训练,并使用业务场景中采集的数据集进行finetune。在数据集lfw、cfp_fp、agedb30数据集(主要为欧美人脸)上测试结果如下:

agedb30

cfp_fp

lfw

Our98.38%97.27%97.17%

得到的模型大小为8M,在NVIDIA NX上测试,对于112x112大小的输入图像,单次提取人脸特征时耗为8ms左右,对于>=60x60pixel大小的较正面人脸,均能较好的提取人脸特征,满足机器人场景应用需求。

3.测试视频

在NVIDIA NX设备上,使用deepstream框架,运行结果如下。

VIDEO_20230302_152420862

单路视频,帧率大概为31FPS。

VIDEO_20230302_152420895

四路视频同时运行,帧率为86FPS。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
----------------- # DFace • [![License](http://pic.dface.io/apache2.svg)](https://opensource.org/licenses/Apache-2.0) | **`Linux CPU`** | **`Linux GPU`** | **`Mac OS CPU`** | **`Windows CPU`** | |-----------------|---------------------|------------------|-------------------| | [![Build Status](http://pic.dface.io/pass.svg)](http://pic.dface.io/pass.svg) | [![Build Status](http://pic.dface.io/pass.svg)](http://pic.dface.io/pass.svg) | [![Build Status](http://pic.dface.io/pass.svg)](http://pic.dface.io/pass.svg) | [![Build Status](http://pic.dface.io/pass.svg)](http://pic.dface.io/pass.svg) | **基于多任务卷积网络(MTCNN)和Center-Loss的多人实时人脸检测和人脸识别系统。** [Github项目地址](https://github.com/kuaikuaikim/DFace) [Slack 聊天组](https://dfaceio.slack.com/) **DFace** 是个开源的深度学习人脸检测和人脸识别系统。所有功能都采用 **[pytorch](https://github.com/pytorch/pytorch)** 框架开发。pytorch是一个由facebook开发的深度学习框架,它包含了一些比较有趣的高级特性,例如自动求导,动态构图等。DFace天然的继承了这些优点,使得它的训练过程可以更加简单方便,并且实现的代码可以更加清晰易懂。 DFace可以利用CUDA来支持GPU加速模式。我们建议尝试linux GPU这种模式,它几乎可以实现实时的效果。 所有的灵感都来源于学术界最近的一些研究成果,例如 [Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks](https://arxiv.org/abs/1604.02878) 和 [FaceNet: A Unified Embedding for Face Recognition and Clustering](https://arxiv.org/abs/1503.03832) **MTCNN 结构**   ![mtcnn](http://affluent.oss-cn-hangzhou.aliyuncs.com/html/images/mtcnn_st.png) ** 如果你对DFace感兴趣并且想参与到这个项目中, 以下TODO是一些需要实现的功能,我定期会更新,它会实时展示一些需要开发的清单。提交你的fork request,我会用issues来跟踪和反馈所有的问题。也可以加DFace的官方Q群 681403076 也可以加本人微信 jinkuaikuai005 ** ### TODO(需要开发的功能) - 基于center loss 或者triplet loss原理开发人脸对比功能,模型采用ResNet inception v2. 该功能能够比较两张人脸图片的相似性。具体可以参考 [Paper](https://arxiv.org/abs/1503.03832)和[FaceNet](https://github.com/davidsandberg/facenet) - 反欺诈功能,根据光线,质地等人脸特性来防止照片攻击,视频攻击,回放攻击等。具体可参考LBP算法和SVM训练模型。 - 3D人脸反欺诈。 - mobile移植,根据ONNX标准把pytorch训练好的模型迁移到caffe2,一些numpy算法改用c++实现。 - Tensor RT移植,高并发。 - Docker支持,gpu版 ## 安装 DFace主要有两大模块,人脸检测和人脸识别。我会提供所有模型训练和运行的详细步骤。你首先需要构建一个pytorch和cv2的python环境,我推荐使用Anaconda来设置一个独立的虚拟环境。目前作者倾向于Linux Ubuntu安装环境。感谢山东一位网友提供windows DFace安装体验,windos安装教程具体 可参考他的[博客](http://www.alearner.top/index.php/2017/12/23/dface-pytorch-win64-gpu) ### 依赖 * cuda 8.0 * anaconda * pytorch * torchvision * cv2 * matplotlib ```shell git clone https://gitee.com/kuaikuaikim/dface.git ``` 在这里我提供了一个anaconda的环境依赖文件environment.yml (windows请用environment-win64.yml),它能方便你构建自己的虚拟环境。 ```shell cd dface conda env create -f environment.yml ``` 添加python搜索模块路径 ```shell export PYTHONPATH=$PYTHONPATH:{your local DFace root path} ``` ### 人脸识别和检测 如果你对mtcnn模型感兴趣,以下过程可能会帮助到你。 #### 训练mtcnn模型 MTCNN主要有三个网络,叫做**PNet**, **RNet** 和 **ONet**。因此我们的训练过程也需要分三步先后进行。为了更好的实现效果,当前被训练的网络都将依赖于上一个训练好的网络来生成数据。所有的人脸数据集都来自 **[WIDER FACE](http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/)** 和 **[CelebA](http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html)**。WIDER FACE仅提供了大量的人脸边框定位数据,而CelebA包含了人脸关键点定位数据。以下训练除了 生成ONet的人脸关键点训练数据和标注文件 该步骤使用CelebA数据集,其他一律使用WIDER FACE。如果使用wider face的 wider_face_train.mat 注解文件需要转换成txt格式的,我这里用h5py写了个 [转换脚本](https://gitee.com/kuaikuaikim/dface/blob/master/dface/prepare_data/widerface_annotation_gen/transform.py). 这里我提供一个已经转换好的wider face注解文件 [anno_store/wider_origin_anno.txt](https://gitee.com/kuaikuaikim/dface/blob/master/anno_store/wider_origin_anno.txt), 以下训练过程参数名--anno_file默认就是使用该转换好的注解文件。 * 创建 dface 训练数据临时目录,对应于以下所有的参数名 --dface_traindata_store ```shell mkdir {your dface traindata folder} ``` * 生成PNet训练数据和标注文件 ```shell python dface/prepare_data/gen_Pnet_train_data.py --prefix_path {注解文件中图片的目录前缀,就是wider face图片所在目录} --dface_traindata_store {之前创建的dface训练数据临时目录} --anno_file {wider face 注解文件,可以不填,默认使用anno_store/wider_origin_anno.txt} ``` * 乱序合并标注文件 ```shell python dface/prepare_data/assemble_pnet_imglist.py ``` * 训练PNet模型 ```shell python dface/train_net/train_p_net.py ``` * 生成RNet训练数据和标注文件 ```shell python dface/prepare_data/gen_Rnet_train_data.py --prefix_path {注解文件中图片的目录前缀,就是wider face图片所在目录} --dface_traindata_store {之前创建的dface训练数据临时目录} --anno_file {wider face 注解文件,可以不填,默认使用anno_store/wider_origin_anno.txt} --pmodel_file {之前训练的Pnet模型文件} ``` * 乱序合并标注文件 ```shell python dface/prepare_data/assemble_rnet_imglist.py ``` * 训练RNet模型 ```shell python dface/train_net/train_r_net.py ``` * 生成ONet训练数据和标注文件 ```shell python dface/prepare_data/gen_Onet_train_data.py --prefix_path {注解文件中图片的目录前缀,就是wider face图片所在目录} --dface_traindata_store {之前创建的dface训练数据临时目录} --anno_file {wider face 注解文件,可以不填,默认使用anno_store/wider_origin_anno.txt} --pmodel_file {之前训练的Pnet模型文件} --rmodel_file {之前训练的Rnet模型文件} ``` * 生成ONet的人脸五官关键点训练数据和标注文件 ```shell python dface/prepare_data/gen_landmark_48.py ``` * 乱序合并标注文件(包括人脸五官关键点) ```shell python dface/prepare_data/assemble_onet_imglist.py ``` * 训练ONet模型 ```shell python dface/train_net/train_o_net.py ``` #### 测试人脸检测 ```shell python test_image.py ``` ### 人脸对比 @TODO 根据center loss实现人脸识别 ## 测试效果 ![mtcnn](http://affluent.oss-cn-hangzhou.aliyuncs.com/html/images/dface_demoall.PNG) ### QQ交流群(模型获取请加群) #### 681403076 ![](http://affluent.oss-cn-hangzhou.aliyuncs.com/html/images/dfaceqqsm.png) #### 本人微信 ##### jinkuaikuai005 ![](http://affluent.oss-cn-hangzhou.aliyuncs.com/html/images/perqr.jpg) ## License [Apache License 2.0](LICENSE)
本课程适合具有一定深度学习基础,希望发展为深度学习之计算机视觉方向的算法工程师和研发人员的同学们。基于深度学习的计算机视觉是目前人工智能最活跃的领域,应用非常广泛,如人脸识别和无人驾驶中的机器视觉等。该领域的发展日新月异,网络模型和算法层出不穷。如何快速入门并达到可以从事研发的高度对新手和中级水平的学生而言面临不少的挑战。精心准备的本课程希望帮助大家尽快掌握基于深度学习的计算机视觉的基本原理、核心算法和当前的领先技术,从而有望成为深度学习之计算机视觉方向的算法工程师和研发人员。本课程系统全面地讲述基于深度学习的计算机视觉技术的原理并进行项目实践。课程涵盖计算机视觉的七大任务,包括图像分类、目标检测、图像分割(语义分割、实例分割、全景分割)、人脸识别、图像描述、图像检索、图像生成(利用生成对抗网络)。本课程注重原理和实践相结合,逐篇深入解读经典和前沿论文70余篇,图文并茂破译算法难点, 使用思维导图梳理技术要点。项目实践使用Keras框架(后端为Tensorflow),学员可快速上手。通过本课程的学习,学员可把握基于深度学习的计算机视觉的技术发展脉络,掌握相关技术原理和算法,有助于开展该领域的研究与开发实战工作。另外,深度学习之计算机视觉方向的知识结构及学习建议请参见本人CSDN博客。本课程提供课程资料的课件PPT(pdf格式)和项目实践代码,方便学员学习和复习。本课程分为上下两部分,其中上部包含课程的前五章(课程介绍、深度学习基础、图像分类、目标检测、图像分割),下部包含课程的后四章(人脸识别、图像描述、图像检索、图像生成)。
【资源说明】 python开发基于深度学习AI人脸识别自动考勤系统源码-毕业设计.zip 项目说明 相信很多人都有上下班忘记考勤签到的问题,此项目结合 [Mediapipe](https://mediapipe.dev/) 可以有效解决这个问题: - 只要在 PC 运行此程序,即可通过 PC 摄像头进行 AI 人脸识别 - 若 AI 判定是本人,就能够用 ADB (支持大部分 Android)触发手机上的考勤 APP 进行自动打卡 程序原理 ```mermaid sequenceDiagram participant 人脸识别服务 participant 定时打卡脚本 participant ADB participant 考勤手机 人脸识别服务->>人脸识别服务: 用摄像头采集<br/>【我】的面部特征 Note right of 人脸识别服务: 正脸 & 侧脸 ADB->>考勤手机: 连接 Note left of 考勤手机: 有线 定时打卡脚本->>定时打卡脚本: 检查打卡时间 Note right of 定时打卡脚本: 触发打卡脚本 loop 自动打卡 定时打卡脚本->>人脸识别服务: 激活摄像头画面 人脸识别服务->>定时打卡脚本: 识别【我】是否在画面内 定时打卡脚本->>ADB: 调用 ADB 指令 ADB->>考勤手机: 解锁屏幕 ADB->>考勤手机: 启动考勤程序 ADB->>考勤手机: 模拟按键打卡 ADB->>考勤手机: 锁屏 考勤手机->>定时打卡脚本: 记录打卡时间 end ``` > 理论上不需要人脸识别也能使用,但安全性会大大降低,毕竟万一不在工位时、手机又被 ADB 解锁 ... 0x30 硬件接线 | 硬件 | 要求 | 用途 | |:---:|:---|:---| | PC 摄像头 | 内置/外设均可 | 用于 AI 人脸识别,作为触发解锁手机考勤的安全条件 | | 手机支架 | 可充电、支持数据传输 | 用于接收 ADB 指令 | > 如果你的考勤 APP **不需要**进一步做人脸识别(如钉钉等),可以把手机支架换成数据线 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
### 回答1: 人脸识别是一种通过计算机技术识别和辨别人脸特征的方法。其原理是通过提取人脸图像中的特征信息,对比已有的人脸数据库进行匹配,以识别和辨别人脸身份。 在人脸识别算法中,主要应用的一种是主成分分析(Principal Component Analysis,PCA)。PCA是一种常用的降维算法,用于将高维特征向量映射至低维空间中。其基本思想是将原始特征向量通过特征值分解和线性变换,获得一组互相正交的主成分,以此来表示原始的高维特征。这样做可以减少数据的冗余性,提高数据的表达能力。 在人脸识别中,经过PCA处理的人脸特征向量可以包含人脸图像中的主要信息,同时减少了冗余的信息。具体的实现步骤如下: 1. 收集并准备人脸图像数据集。 2. 对每一张图像进行预处理,包括人脸检测、人脸对齐和灰度化等步骤。 3. 将图像转换为特征向量,即将图像像素矩阵按列展开,形成一个列向量。 4. 对特征向量进行均值化,即减去均值向量,得到零均值特征向量。 5. 计算协方差矩阵,并对其进行特征值分解,得到特征向量和特征值。 6. 选择主要的特征向量,根据特征值大小进行排序,并选取前N个特征向量,构成投影矩阵。 7. 将所有零均值特征向量按投影矩阵进行映射,得到降维后的特征向量。 8. 将降维后的特征向量与已有的人脸数据库中的特征向量进行匹配,找出最相似的人脸。 通过以上步骤,利用PCA算法可以高效地提取人脸图像的主要特征,并与数据库中的特征进行匹配,实现人脸识别的功能。 ### 回答2: 人脸识别是一种基于计算机视觉技术的人工智能应用,其原理是通过对人脸图像进行分析和比对,识别出人脸的身份。常用的算法之一是PCA(Principal Component Analysis,主成分分析)。 PCA是一种降维技术,其目的是通过保留最重要的特征,将高维数据转化为低维表示。在人脸识别中,PCA通过构建人脸空间来将人脸图像进行降维和编码。 首先,PCA算法需要进行训练集的建模。训练集由多个人脸图像组成,每个图像都会经过预处理步骤,例如灰度化、人脸对齐等,然后将这些图像转化为向量表示。 接下来,PCA算法会计算这些向量的平均脸,并将每个向量与平均脸进行差异计算。然后,通过主成分分析方法找到训练集中的主成分,即区分度最大的特征,这些主成分就是人脸空间的基向量。 在识别阶段,对于一张未知人脸图像,需要进行与训练集相同的预处理步骤,并将其转化为向量表示。然后,通过计算该向量与训练集各个向量的差异程度,找到最匹配的人脸。 PCA算法的主要优点在于能够降低特征的维度,减少存储和计算的开销,并且对于噪声和不完全数据也具有一定的鲁棒性。然而,由于PCA算法仅基于低阶特征,对于人脸图像中的细节和表情变化较敏感,可能存在识别误差的问题。 总之,PCA是人脸识别中常用的算法之一,它通过构建人脸空间和降维来实现人脸的识别和比对。 ### 回答3: 人脸识别是一种通过计算机技术和图像处理算法来识别和比对面部图像的技术。它的原理主要是通过对人脸图像进行特征提取和匹配来完成识别过程。 PCA(Principal Component Analysis)是一种常用的人脸识别算法。其基本思想是将高维度的人脸图像转化为低维度的特征空间,然后利用这些特征对人脸图像进行识别。PCA的具体算法流程如下: 1. 数据预处理:将人脸图像进行灰度处理和归一化,使得每个像素值都在0~255之间。 2. 数据降维:对所有人脸图像进行PCA降维处理,首先计算出所有人脸图像的协方差矩阵,然后对协方差矩阵进行特征值分解,得到特征向量和对应的特征值。根据特征值的大小选择最大的k个特征向量,将原始图像通过这k个特征向量进行线性变换得到降维后的特征。 3. 训练阶段:将降维后的特征作为输入,进行训练。这里可以使用一些分类算法,比如支持向量机(SVM),来建立模型,进行人脸图像的分类。 4. 测试阶段:对于新的未知人脸图像,首先通过降维得到对应的特征,然后将该特征与已有模型进行比对,根据比对结果判断该人脸是否为已知人脸。如果比对结果超过了某个阈值,就可以认为该人脸是未知人脸。 总的来说,人脸识别技术主要通过特征提取和分类器来实现。PCA作为一种常用的算法,可以对人脸图像进行降维处理,提取出最重要的特征,然后通过建立模型进行识别和匹配。通过不断优化算法和模型,人脸识别技术在实际应用中具有广泛的前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值