PaddleX 上线人脸定位与识别端到端模型产线,为安全监控、身份认证、智能家居等领域保驾护航

科技   2024-11-22 19:32   北京  

‍‍



背景介绍


人脸识别任务是计算机视觉领域的一个重要应用方向,旨在通过分析和比较人脸特征,实现对个人身份的自动识别。该任务不仅需要检测图像中的人脸,还需要对人脸图像进行特征提取和匹配,从而在数据库中检索匹配到对应的身份信息。人脸识别广泛应用于安全认证、监控系统、社交媒体和智能设备等场景。
PaddleX人脸识别产线是专注于解决人脸定位和识别任务的端到端模型产线,可以从图像中快速准确地定位人脸区域、提取人脸特征,并与特征库中预先建立的特征做检索比对,从而确认身份信息。

算法解读

PaddleX人脸识别产线主要由人脸检测、人脸特征和向量检索三个模块组成:
  • 人脸检测模块:人脸检测模块利用目标检测算确定图像中是否存在人脸目标,并准确地标出其位置;
  • 人脸特征模块:人脸特征模块以检测模块检测得到的人脸图像作为输入,通过深度学习模型提取具有高度辨识性的人脸特征向量;
  • 向量检索模块:计算特征向量和特征底库的相似度,从而得到对应目标的身份ID
PaddleX提供了4个人脸检测模型:BlazeFace模型是由谷歌提出的轻量高效人脸检测模型,能够在移动设备和web端快速进行人脸检测。BlazeFace-FPN-SSH模型通过在BlazeFace模型的基础上添加FPN和SSH的neck结构,牺牲了一点性能换来了更高的检测精度。同时,我们在人脸检测数据集上,基于飞桨的特色检测模型PicoDet和PP-YOLOE+进行了训练,得到了精度更为优秀的人脸检测模型PicoDet_LCNet_x2_5_face和PP-YOLOE_plus-S_face

注:以上精度指标是在WIDER-FACE验证集上,以640*640作为输入尺寸评估得到的。所有模型 GPU 推理耗时基于 NVIDIA V100 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 6271C CPU @ 2.60GHz,精度类型为 FP32。
同时,PaddleX 目前支持了基于 ArcFace 损失函数训练的人脸特征模型,包括 MobileFaceNetResNet50_face。MobileFaceNet在轻量化模型MobileNetv2的基础上,降低了模型对输入图像的下采样倍率,替换ReLU激活函数为PReLU,以及采用全局深度卷积层(GDConv)替代传统的全局平均池化层(GAP),以更好地捕捉人脸特征。ResNet50_face模型是在ResNet50的基础上针对人脸识别任务进行了调整,将整体的下采样倍率从原先的32x降低到了16x。

注:以上精度指标是分别在AgeDB-30、CFP-FP和LFW数据集上测得的Accuracy。所有模型 GPU 推理耗时基于 NVIDIA Tesla T4 机器,精度类型为 FP32, CPU 推理速度基于 Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz,线程数为8,精度类型为 FP32。

使用方法


下面就从零开始,基于PaddleX体验人脸识别产线:

  • 安装

    根据设备选择安装 PaddlePaddle

# cpupython -m pip install paddlepaddle==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cpu/# gpu,该命令仅适用于 CUDA 版本为 11.8 的机器环境python -m pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/# gpu,该命令仅适用于 CUDA 版本为 12.3 的机器环境python -m pip install paddlepaddle-gpu==3.0.0b2 -i https://www.paddlepaddle.org.cn/packages/stable/cu123/
    安装 PaddleX
pip install https://paddle-model-ecology.bj.bcebos.com/paddlex/whl/paddlex-3.0.0b2-py3-none-any.whl
  • 快速体验

PaddleX 提供了简单易用的 Python API,只需几行代码即可体验端到端预测效果,在人脸识别的运行示例中需要预先构建索引库,您可以下载官方提供的demo测试数据集,方便大家快速体验效果:
数据集链接:
https://paddle-model-ecology.bj.bcebos.com/paddlex/data/face_demo_gallery.tar
from paddlex import create_pipeline
pipeline = create_pipeline(pipeline="face_recognition")index_data = pipeline.build_index("face_demo_gallery", "face_demo_gallery/gallery.txt")output = pipeline.predict("./face_demo_gallery/test_images/", index=index_data)for res in output: res.print() res.save_to_img("./output/")

上述代码中:

  1. 首先使用产线名称调用create_pipeline()方法实例化产线对象;

  2. 然后调用build_index()方法构建人脸特征向量库;

  3. 最后即可使用predict()方法进行预测,对于预测结果支持print()方法进行打印,以及save_to_img()方法进行可视化并保存为图片。

人脸识别产线官方权重可视化结果
人脸识别产线在卡通数据上微调后的可视化结果
  • 二次开发

如果对产线的预训练模型效果满意,可以直接对产线进行高性能推理/服务化部署/端侧部署,如果不满意,您也可以使用 PaddleX 进行便捷高效的二次开发,使用自己场景的数据对模型微调训练获得更优的精度。

基于 PaddleX 便捷的二次开发能力,使用统一命令即可完成数据校验、模型训练与评估推理,无需了解深度学习的底层原理,按要求准备好场景数据,简单运行命令即可完成模型迭代,此处以人脸检测模型训练为例:

python main.py -c paddlex/configs/face_detection/PicoDet_LCNet_x2_5_face.yaml \    -o Global.mode=train \    -o Global.dataset_dir=./dataset/widerface_coco_examples

上述命令中,首先指定所用模型的配置文件(此处为PicoDet_LCNet_x2_5_face.yaml),然后选择模式为模型训练:-o Global.mode=train,再指定数据集路径:-o Global.dataset_dir 即可。

更多参数也可以继续在命令中追加参数设置:如指定前 2 卡 gpu 训练:-o Global.device=gpu:0,1;设置训练轮次数为 10:-o Train.epochs_iters=10。此外,相关参数均可通过修改.yaml配置文件中的GlobalTrain的具体字段来进行设置。

其余更详细的使用方法及产线部署、自定义数据集相关的内容,请参考PaddleX官方教程文档:

人脸识别产线使用教程

https://paddlepaddle.github.io/PaddleX/latest/pipeline_usage/tutorials/cv_pipelines/face_recognition.html


人脸特征模块使用教程

https://paddlepaddle.github.io/PaddleX/latest/module_usage/tutorials/cv_modules/face_feature.html

人脸检测模块使用教程

https://paddlepaddle.github.io/PaddleX/latest/module_usage/tutorials/cv_modules/face_detection.html

精彩课程预告


为了帮助您迅速且深入地了解人脸识别全流程解决方案,百度研发工程师将于 11月28日(周四)19:00 为您深度解析本次技术升级。此外,我们还将开设针对人脸识别产线的产业场景实战营,手把手带您体验从数据准备、数据校验、模型训练、性能优化到模型部署的完整开发流程。机会难得,立即扫描下方二维码预约吧!



关注【飞桨PaddlePaddle】公众号
获取更多技术内容~

飞桨PaddlePaddle
源于产业实践的开源深度学习平台
 最新文章