本项目参考了 ArcFace 的损失函数结合MobileNet,意在开发一个模型较小,但识别准确率较高且推理速度快的一种人脸识别项目,该项目训练数据使用emore数据集,一共有85742个人,共5822653张图片,使用lfw-align-128数据集作为测试数据。

源码地址: https://github.com/yeyupiaoling/Pytorch-MobileFaceNet

数据集准备

本项目提供了标注文件,存放在 dataset 目录下,解压即可。另外需要下载下面这两个数据集,下载完解压到 dataset 目录下。

然后执行下面命令,将提取人脸图片到 dataset/images ,并把整个数据集打包为二进制文件,这样可以大幅度的提高训练时数据的读取速度。

python create_dataset.py

执行train.py即可,更多训练参数请查看代码。

python train.py

训练输出如下:

[2021-11-03 15:18:28.813591] Train epoch 9, batch: 6100/90979, loss: 1.215695, accuracy: 0.859375, lr: 0.000107, eta: 5 days, 5:28:26
[2021-11-03 15:18:37.044353] Train epoch 9, batch: 6200/90979, loss: 0.908210, accuracy: 0.859375, lr: 0.000107, eta: 5 days, 6:35:02
[2021-11-03 15:18:45.229030] Train epoch 9, batch: 6300/90979, loss: 0.964092, accuracy: 0.875000, lr: 0.000107, eta: 5 days, 9:17:21
[2021-11-03 15:18:53.449567] Train epoch 9, batch: 6400/90979, loss: 1.208947, accuracy: 0.828125, lr: 0.000107, eta: 5 days, 12:41:06
[2021-11-03 15:19:01.682437] Train epoch 9, batch: 6500/90979, loss: 1.081449, accuracy: 0.875000, lr: 0.000107, eta: 5 days, 10:29:44
[2021-11-03 15:19:09.895995] Train epoch 9, batch: 6600/90979, loss: 1.277803, accuracy: 0.828125, lr: 0.000107, eta: 5 days, 12:29:05
[2021-11-03 15:19:18.086872] Train epoch 9, batch: 6700/90979, loss: 1.308692, accuracy: 0.828125, lr: 0.000107, eta: 5 days, 7:23:03
[2021-11-03 15:19:26.306897] Train epoch 9, batch: 6800/90979, loss: 1.474561, accuracy: 0.781250, lr: 0.000107, eta: 5 days, 8:20:23
[2021-11-03 15:19:34.528685] Train epoch 9, batch: 6900/90979, loss: 1.295028, accuracy: 0.812500, lr: 0.000107, eta: 5 days, 5:54:56
[2021-11-03 15:19:42.736712] Train epoch 9, batch: 7000/90979, loss: 1.474828, accuracy: 0.812500, lr: 0.000107, eta: 5 days, 8:32:33

执行eval.py即可,更多训练参数请查看代码。

python eval.py

本项目已经不教提供了模预测,模型文件可以直接用于预测。在执行预测之前,先要在face_db目录下存放人脸图片,每张图片只包含一个人脸,并以该人脸的名称命名,这建立一个人脸库。之后的识别都会跟这些图片对比,找出匹配成功的人脸。。这里使用的人脸检测是MTCNN模型,这个模型具有速度快,模型小的特点,源码地址:Pytorch-MTCNN

如果是通过图片路径预测的,请执行下面命令。

python infer.py --image_path=temp/test.jpg

日志输出如下:

人脸检测时间:38ms
人脸识别时间:11ms
人脸对比结果: [('迪丽热巴', 0.7030987), ('杨幂', 0.36442137)]
人脸对比结果: [('杨幂', 0.63616204), ('迪丽热巴', 0.3101096)]
预测的人脸位置: [[272, 67, 328, 118, 1], [156, 80, 215, 134, 1]]
识别的人脸名称: ['迪丽热巴', '杨幂']
总识别时间:82ms

如果是通过相机预测的,请执行下面命令。

python infer_camera.py --camera_id=0
				
Pytorch-MobileFaceNet使用教程 Pytorch-MobileFaceNetPytorch实现人脸识别明细MobileFaceNet模型,在预测使用MTCNN检测人脸,然后使用MobileFaceNet模型识别。项目地址:https://gitcode.com/gh_mirrors/py/Pytorch-MobileFaceNet 项目概述 Pytorch-MobileFac...
1. 背景介绍 人脸识别和人脸检测技术在近年来取得了显著的进展,成为计算机视觉领域的重要应用。PyTorch是一个流行的深度学习框架,广泛应用于人脸识别和人脸检测等任务。本文将深入探讨PyTorch人脸识别和人脸检测技术中的应用,揭示其核心算法原理、最佳实践和实际应用场景。 2. 核心概念与联系 在深入探讨PyTorch人脸识别和人脸检测技术之前,我们首先需要了解一下相关...
pytorch + opencv 实现人脸检测与识别 最近阅读了《Dive into Deep Learning》(动手学深度学习)这本书,根据所学的知识动手完成了人脸检测与识别。这篇博客主要是记录下自己在完成的过程中所用到的东西,以及遇到的问题。最后的效果如下图所示。 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 我们对Markdow
qq_54082894: audio_segment = AudioSegment.from_file('data/owner.wav') speech_timestamps = audio_segment.vad(max_end_sil=3) print(speech_timestamps) mysample=AudioSegment._convert_samples_from_float32(audio_segment.samples,'float32') for speech_timestamp in speech_timestamps: start, end = int(speech_timestamp['start']), int(speech_timestamp['end']) corp_wav = mysample[start: end] soundfile.write(f"new_mys_result_audio_{i}.wav", data=corp_wav, samplerate=16000) i=i+1 这样就可以获取分段后的音频,但是感觉max_end_sil 这个参数意义不大 YeAudio音频工具的介绍和使用 qq_54082894: 在使用VadModel返回后,如何通过返回结果截取出音频文件呢? 基于MNN在Android手机上实现图像分类 m0_70795221: 怎么在手机上运行啊