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.4pandas==0.24.2opencv-python==4.1.1scikit-learn==0.21.2tensorflow==1.13.1pillow==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() 函数,自动:
保存为 data/baseface/vector.csv(含标签)。
步骤 4:训练 SVM 分类器
在同一脚本中调用 train_face_svm():
训练 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.py5.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
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!
方便大家交流、资源共享和共同成长
纯技术交流群、需要的小伙伴请扫码
有收获?不妨分享让更多人受益
关注「程序员开源栈」,共同提升技术实力
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!