『7x24小时有问必答』

一、项目简介

本项目基于  YOLOv3 + FaceNet  构建端到端的人脸检测与识别系统。
首先使用  Fine-tuned YOLOv3 模型(在 WIDER FACE 数据集上微调)进行人脸区域检测;
然后利用  FaceNet 提取人脸特征向量(128维或512维);
最后通过  SVM 分类器  对特征向量进行分类,实现对已知人员的身份识别。
整个流程支持图片和视频输入,可快速部署用于小规模人脸识别场景(如门禁、考勤、访客识别等)。
项目效果

二、项目结构

project-root/

├── data/

│    ├── baseface/                                # 人脸训练数据集

│    │    ├── 0/                                    # 第0个人的人脸图片(tag=0)

│    │    ├── 1/                                    # 第1个人的人脸图片(tag=1)

│    │    ├── ...

│    │    ├── n/                                    # 第n个人的人脸图片(tag=n)

│    │    ├── map.txt                             # 文件夹ID与真实姓名的映射(空格分隔)

│    │    └── vector.csv                        # 所有人脸图片对应的特征向量及标签

│    ├── weights_facenet/                     # FaceNet 模型权重

│    ├── weights_yolo/                          # Fine-tuned YOLOv3 人脸检测模型

│    ├── weights_svm/                           # 训练好的 SVM 分类模型(svm.pkl)

│    ├── face-names/                             # 预测类别名称(可选,默认从 map.txt 读取)

│    └── yolo_anchors.txt                     # YOLOv3 训练时聚类得到的 anchor 尺寸

├── net/                                             # YOLOv3 与 FaceNet 网络定义

├── preprocessing/                              # 预处理工具脚本

├── setting/                                       # 模型与运行参数配置

├── utils/                                          # 工具函数封装

└── test.py                                         # 主程序入口

三、模型文件(权重)

1、YOLO Face 模型

基于原始 YOLOv3,在  WIDER FACE  数据集上进行微调(fine-tuning)。
https://pan.baidu.com/s/1ifCaB2ASPQFPN1XGPGyplg(密码:qli4)

2、FaceNet 模型(推荐使用)

model-20180402-114759(输出  512 维向量,识别效果更佳)
https://pan.baidu.com/s/18dOokPTF3JXFix99aUfz6Q(密码:56mh)
其他可选模型:
model-20170512-110547(128d,效果较差) →  https://pan.baidu.com/s/1pGDUIODBZ2Rvrr1MTRl9ZQ  密码:9x2l
model-20180408-102900  → https://pan.baidu.com/s/1xe2dTQsgaXf3xTmCfVprDQ 密码:jjf1
注意:早期 128d 模型识别准确率较低,建议使用 512d 版本。

四、关键技术说明

1、YOLOv3 人脸检测

详细训练与预测流程请参考作者另一项目:YOLO_v3_tensorflow。
微调时需注意:WIDER FACE 数据集中存在  两个标注框宽或高为 0  的错误样本,必须剔除,否则 NMS 阶段会因除零报错。

2、SVM 分类器训练

训练前必须对特征向量进行  标准化(StandardScaler);
预测时需使用  相同的 scaler 参数  进行转换,否则所有预测结果将趋于一致。

3、数据建议

当前每人仅用 15 张图片训练 SVM,效果有限;
建议:
增加每人样本数量(>30 张,多角度、光照);
或尝试 SVM 调参(如核函数、C 值)、集成方法等优化策略。

五、环境依赖

numpy==1.16.4

pandas==0.24.2

opencv-python==4.1.1

scikit-learn==0.21.2

tensorflow==1.13.1

pillow==6.1.0

建议使用 Python 3.6~3.7 环境,TensorFlow 1.x 兼容性最佳。

六、使用方法

步骤 1:放置模型文件

将下载的 YOLO 和 FaceNet 模型文件放入  data/  目录对应子文件夹中。

步骤 2:制作自定义人脸数据集

1、在  data/baseface/  下为每个人创建独立文件夹,命名从  0  开始递增(如  0,  1,  2...);
2、将对应人物的人脸图片放入各自文件夹;
3、编辑  data/map.txt,按行写入  ID 姓名,例如:
0 张三

1 李四

2 王五

步骤 3:生成人脸特征向量

运行以下脚本:
python preprocessing/pre_tools.py

调用其中的  save_vector_csv()  函数,自动:
加载 FaceNet 模型;
提取每张人脸的 512 维特征;
保存为  data/baseface/vector.csv(含标签)。

步骤 4:训练 SVM 分类器

在同一脚本中调用  train_face_svm():
读取  vector.csv;
标准化特征;
训练 SVM 并保存模型至  data/weights_svm/svm.pkl。

步骤 5:开始测试

5.1 图片测试

1、将待测图片放入  data/test_img/;
2、修改  setting/yolo_args.py:
detect_object =  'img'

input_image =  'data/test_img/your_image.jpg'

output_image =  'data/output/result.jpg'    # 可选,需确保路径存在

3、运行:
python test.py

5.2 视频测试

1、将视频放入  data/test_video/;
2、修改  setting/yolo_args.py:
detect_object =  'video'

input_video =  'data/test_video/your_video.mp4'

output_video =  'data/output/result.mp4'    # 可选

3、运行
python test.py

输出结果将包含人脸框、识别姓名及置信度。

七、注意事项

确保所有输出路径的父目录已存在,否则会报错;
FaceNet 模型需与 TensorFlow 1.13.1 兼容;
若识别不准,请优先检查:
人脸是否正对、清晰、无遮挡;
训练集是否覆盖足够姿态与光照;
是否使用了 512d 的 FaceNet 模型。

项目源码

Gitee:https://gitee.com/windandwine/Argus

关键词

作者:小码编匠
出处:gitee.com/smallcore/DotNetCore
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!

END

往
期
精
彩

备注【开源】
方便大家交流、资源共享和共同成长
纯技术交流群、需要的小伙伴请扫码

有收获?不妨分享让更多人受益
关注「程序员开源栈」,共同提升技术实力

点分享
点收藏
点在看
点点赞

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码