ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PaddleX 人脸特征(Face Feature)模块使用教程:模型选型、推理集成与二次开发全指南

PaddleX 人脸特征(Face Feature)模块使用教程:模型选型、推理集成与二次开发全指南 人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG【免费下载链接】PaddleXAll-in-One Development Tool based on PaddlePaddle项目地址https://gitcode.com/paddlepaddle/PaddleX点击查看免费下载本文是飞桨 PaddleX 人脸特征模块的完整实战指南。人脸特征模块以经过人脸检测、关键点矫正后的标准化人脸图像为输入提取具有高度辨识性的判别性特征向量供人脸匹配、人脸验证等下游任务使用。读完本文你将掌握两个内置人脸特征模型的选型依据与性能对比、通过create_model/predict快速完成特征提取推理、基于通用图像分类格式组织训练数据含人脸验证集pair_label.txt的特殊格式、以及训练、评估、推理与产线集成的完整二次开发闭环。一、模块概述从人脸图像到判别性特征向量人脸特征Face Feature模块是 PaddleX 中负责人脸表征学习的核心组件。在实际人脸识别系统中原始图片通常不能直接用于比对光照、姿态、遮挡和拍摄角度都会干扰比对结果。标准的人脸识别流程是人脸检测先从图片中定位人脸位置如 PaddleX 的 face_detection 模块人脸关键点矫正根据双眼、鼻尖等关键点对人脸区域做仿射变换得到标准化人脸图像特征提取将标准化人脸图像送入人脸特征模型输出固定维度的特征向量匹配/验证通过计算特征向量间的余弦相似度等指标完成 1:1 验证同一人/非同一人或 1:N 检索。人脸特征模块对应的正是第 3 步其输入约定为已经过检测、提取和关键点矫正处理的标准化人脸图像。输出为 L2 归一化后的判别性特征向量——PaddleX 在推理后处理阶段会对原始 logits 做 L2 归一化详见下文源码分析使同一身份的类内距离更小、不同身份的类间距离更大从而让后续相似度比对更稳定。二、支持模型列表与选型依据PaddleX 人脸特征模块内置两个模型配置目录位于 paddlex/configs/modules/face_feature模型注册列表见 paddlex/modules/face_recognition/model_list.pyMODELS [MobileFaceNet, ResNet50_face]。模型输出特征维度Acc (%)AgeDB-30 / CFP-FP / LFWGPU 推理耗时ms常规 / 高性能CPU 推理耗时ms常规 / 高性能模型存储大小MB介绍MobileFaceNet12896.28 / 96.71 / 99.583.31 / 0.735.93 / 1.304.1基于 MobileFaceNet 在 MS1Mv3 数据集上训练的人脸特征提取模型ResNet50_face51298.12 / 98.56 / 99.776.12 / 3.1115.85 / 9.4487.2基于 ResNet50 在 MS1Mv3 数据集上训练的人脸特征提取模型2.1 测试环境说明测试数据集上述 Acc 指标分别在 AgeDB-30、CFP-FP、LFW 三个人脸基准数据集上测得硬件配置GPU 为 NVIDIA Tesla T4CPU 为 Intel Xeon Gold 6271C 2.60GHz软件环境为 Ubuntu 20.04 / CUDA 11.8 / cuDNN 8.9 / TensorRT 8.6.1.6。2.2 推理模式说明模式GPU 配置CPU 配置加速技术组合常规模式FP32 精度 / 无 TRT 加速FP32 精度 / 8 线程PaddleInference高性能模式选择先验精度类型和加速策略的最优组合FP32 精度 / 8 线程选择先验最优后端Paddle/OpenVINO/TRT 等选型建议MobileFaceNet 以 4.1MB 的体积换来毫秒级推理GPU 常规模式仅 3.31ms适合移动端、边缘设备和海量人脸库的 1:N 检索场景ResNet50_face 以 87.2MB 的体积提供更高精度LFW 达 99.77%适合对精度要求更高的金融、安防等场景。三、快速集成几行代码完成人脸特征推理⚠️ 快速集成前请先安装 PaddleX 的 wheel 包安装步骤参见 PaddleX 本地安装教程。安装 whl 包后几行代码即可完成人脸特征模块的推理可自由切换模块下的两个模型也可以将模块推理集成进自己的项目。运行前请先下载示例图片到本地。from paddlex import create_model model create_model(model_nameMobileFaceNet) output model.predict(face_recognition_001.jpg, batch_size1) for res in output: res.print(json_formatFalse) res.save_to_json(./output/res.json)3.1 运行结果示例{res: {input_path: face_recognition_001.jpg, feature: [0.04121152311563492, 0.0010890548583120108, -0.03561094403266907, 0.05722084641456604, ...]}}字段含义input_path输入的待预测图像路径feature提取的人脸特征向量维度即模型的输出特征维度此处 MobileFaceNet 为 128 维ResNet50_face 为 512 维。从源码看该结果由 paddlex/inference/models/face_feature/predictor.py 中的process()返回包含input_path、page_index、input_img和feature四个字段paddlex/inference/models/image_feature/result.py 中的IdentityResult在打印/序列化时会剔除input_img因此终端输出只保留路径与特征向量。3.2create_model参数说明create_model用于实例化人脸特征模型此处以 MobileFaceNet 为例参数参数说明参数类型可选项默认值model_name模型名称必填str无无model_dir模型存储路径str无无device模型推理设备str支持指定 GPU 具体卡号如gpu:0、其他硬件具体卡号如npu:0、CPU 如cpugpu:0flip是否进行翻转推理为True时对输入图像水平翻转后再次推理并融合两次推理结果以提升人脸特征准确性bool无Falseuse_hpip是否启用高性能推理插件bool无Falsehpi_config高性能推理配置dict/None无None其中model_name必须指定指定后默认使用 PaddleX 内置的模型参数在此基础上若再指定model_dir则使用用户自定义模型。flip 参数的实现细节查看 paddlex/inference/models/face_feature/predictor.py当flipTrue时process()会对同一 batch 数据沿axis3宽度方向做np.flip得到水平翻转图再次推理后将两次推理的输出直接相加融合再送入归一化后处理。这一原图 水平翻转的双路推理融合策略face embedding 领域的常见测试时增强手段能进一步提升特征稳定性代价是推理时间翻倍适合精度优先的离线场景。3.3predict()方法参数说明参数参数说明参数类型可选项默认值input待预测数据支持多种输入类型Python Var/str/list-Python 变量如numpy.ndarray表示的图像数据-文件路径如图像文件本地路径/root/data/img.jpg-URL 链接如图像文件网络 URL-本地目录目录下需包含待预测数据文件如/root/data/-列表列表元素为上述类型数据如[numpy.ndarray, numpy.ndarray]、[/root/data/img1.jpg, /root/data/img2.jpg]无batch_size批大小int任意整数13.4 预测结果处理方法每个样本的预测结果均为 Result 对象支持打印与保存为 JSON 文件方法方法说明参数参数类型参数说明默认值print()打印结果到终端format_jsonbool是否对输出内容进行 JSON 缩进格式化Trueindentint指定缩进级别美化 JSON仅format_jsonTrue时有效4ensure_asciibool是否将非 ASCII 字符转义为 Unicode仅format_jsonTrue时有效Falsesave_to_json()将结果保存为 JSON 文件save_pathstr保存的文件路径为目录时保存文件名与输入文件名一致无indentint指定缩进级别美化 JSON4ensure_asciibool是否转义非 ASCII 字符False此外还支持通过json属性直接获取预测结果的 JSON 格式。关于更多 PaddleX 单模型推理 API 的使用方法可参考 PaddleX 单模型 Python 脚本使用说明。四、二次开发从数据准备到产线集成的完整闭环如果现有模型精度不满足需求可使用 PaddleX 的二次开发能力训练更好的人脸特征模型。开发前请务必安装 PaddleX 的 PaddleClas 插件安装过程见 PaddleX 本地安装教程。4.1 数据准备训练前需准备任务模块的数据集。PaddleX 对每个模块提供数据校验功能只有通过数据校验的数据才能用于模型训练。同时每个模块都提供 demo 数据集可基于官方 Demo 数据完成后续开发。若用私有数据集训练人脸特征模块训练数据集采用通用图像分类数据集格式组织可参考 PaddleX 图像分类任务模块数据标注教程若用私有数据集评估注意验证数据集格式与训练数据集不同请参考下方4.1.4 人脸特征模块数据集组织方式。4.1.1 Demo 数据下载cd /path/to/paddlex wget https://paddle-model-ecology.bj.bcebos.com/paddlex/data/face_rec_examples.tar -P ./dataset tar -xf ./dataset/face_rec_examples.tar -C ./dataset/4.1.2 数据校验一行命令完成数据校验python main.py -c paddlex/configs/modules/face_feature/MobileFaceNet.yaml \ -o Global.modecheck_dataset \ -o Global.dataset_dir./dataset/face_rec_examples执行后 PaddleX 会校验数据集并统计基本信息成功时日志打印Check dataset passed !。校验结果文件保存在./output/check_dataset_result.json可视化示例样本等产出保存在./output/check_dataset目录。校验结果文件内容示例节选{ done_flag: true, check_pass: true, attributes: { train_label_file: ../../dataset/face_rec_examples/train/label.txt, train_num_classes: 995, train_samples: 1000, val_label_file: ../../dataset/face_rec_examples/val/pair_label.txt, val_num_classes: 2, val_samples: 500 }, dataset_path: ./dataset/face_rec_examples, show_type: image, dataset_type: ClsDataset }结果指标解读check_passTrue数据集格式符合要求attributes.train_num_classes训练类别数为 995attributes.val_num_classes验证类别数为 2pair 验证任务按同人/非同人二分类计算attributes.train_samples训练样本数 1000attributes.val_samples验证样本数 500attributes.train_sample_paths训练样本可视化图片的相对路径列表。4.1.3 数据集格式转换 / 数据集划分可选完成数据校验后可通过修改配置文件或追加超参数进行格式转换与训练/验证比例重划分。人脸特征模块不支持数据格式转换与数据集划分配置文件中CheckDataset.convert.enable与CheckDataset.split.enable均为False。4.1.4 人脸特征模块数据集组织方式人脸特征模块验证数据集与训练数据集格式不同。若需在私有数据上训练并评估模型精度请按如下结构组织face_rec_dataroot # 数据集根目录目录名称可改 ├── train # 训练数据保存目录目录名称不可改 │ ├── images # 图像保存目录目录名称可改需与 label.txt 内容对应 │ │ ├── xxx.jpg # 人脸图像文件 │ │ └── ... │ └── label.txt # 训练集标注文件文件名不可改。每行给出图像相对 train 的路径和人脸身份 id空格分隔如images/image_06765.jpg 0 └── val # 验证数据保存目录目录名称不可改 ├── images # 图像保存目录目录名称可改需与 pair_label.txt 内容对应 │ ├── xxx.jpg # 人脸图像文件 │ └── ... └── pair_label.txt # 验证集标注文件文件名不可改。每行给出两张待比对人脸图像路径及 0/1 标签是否同一人空格分隔验证集标注文件pair_label.txt内容示例# 人脸图像1.jpg 人脸图像2.jpg 标签(0 表示不属于同一个人1 表示属于同一个人) images/Angela_Merkel_0001.jpg images/Angela_Merkel_0002.jpg 1 images/Bruce_Gebhardt_0001.jpg images/Masao_Azuma_0001.jpg 0 images/Francis_Ford_Coppola_0001.jpg images/Francis_Ford_Coppola_0002.jpg 1 images/Jason_Kidd_0006.jpg images/Jason_Kidd_0008.jpg 1 images/Miyako_Miyazaki_0002.jpg images/Munir_Akram_0002.jpg 0验证集与训练集的本质区别源码佐证训练集label.txt按图像-身份 id逐行组织走通用分类训练流程验证集则按图像对-0/1标签组织对应 pair 验证评测。查看 paddlex/modules/face_recognition/evaluator.py评估器update_dataset_cfg()会读取dataset_dir/val/pair_label.txt并将其配置为DataLoader.Eval.dataset.nameFaceEvalDataset、pair_label_path...这正是验证集必须使用pair_label.txt的原因。4.2 模型训练一条命令完成模型训练以 MobileFaceNet 为例python main.py -c paddlex/configs/modules/face_feature/MobileFaceNet.yaml \ -o Global.modetrain \ -o Global.dataset_dir./dataset/face_rec_examples需要如下几步指定模型的.yaml配置文件路径此处为MobileFaceNet.yaml指定模式为模型训练-o Global.modetrain指定训练数据集路径-o Global.dataset_dir其他参数可通过修改.yaml中Global和Train下的字段或命令行追加参数调整。如指定前 2 卡 GPU 训练-o Global.devicegpu:0,1设置训练轮次为 10-o Train.epochs_iters10。更多参数说明见 PaddleX 通用模型配置文件参数说明新特性Paddle 3.0 支持 CINN 神经网络编译器GPU 训练时有不同程度加速可指定-o Train.dy2stTrue开启。训练关键默认超参来自 MobileFaceNet.yaml配置项默认值说明Global.devicegpu:0,1,2,3训练设备按需调整卡号Train.num_classes995需与训练集身份类别数一致Train.epochs_iters25训练轮数Train.batch_size128批大小ResNet50_face 为 64Train.learning_rate0.002学习率ResNet50_face 为 0.004Train.pretrain_weight_path官方预训练权重 URL迁移学习起点训练时加载Train.warmup_steps/log_interval/eval_interval/save_interval1warmup 步数、日志/评估/保存间隔Train.resume_pathnull断点续训路径Evaluate.weight_pathoutput/best_model/best_model.pdparams默认评估权重路径训练产出说明训练中 PaddleX 自动保存模型权重文件默认输出到output可用-o Global.output指定路径PaddleX 屏蔽了动态图/静态图权重概念训练同时产出两类权重推理时默认选静态图权重训练其他模型时指定对应配置文件模型与配置对应关系见 PaddleX 模型列表CPU/GPU完成训练后默认./output/下通常包含train_result.json训练结果记录含任务完成状态、权重指标与相关文件路径train.log训练日志记录指标与 loss 变化config.yaml本次训练的超参配置.pdparams、.pdema、.pdopt.pdstate、.pdiparams、.json模型权重相关文件包括网络参数、优化器、EMA、静态图网络参数与静态图网络结构注意Paddle 3.0.0 起静态图网络结构存储格式由 protobuf.pdmodel升级为 JSON.json以兼容 PIR 体系并获得更好的灵活性与扩展性。4.3 模型评估完成训练后可在验证集上评估指定权重文件的精度一条命令完成python main.py -c paddlex/configs/modules/face_feature/MobileFaceNet.yaml \ -o Global.modeevaluate \ -o Global.dataset_dir./dataset/face_rec_examples指定模型.yaml配置文件路径此处为MobileFaceNet.yaml指定模式为模型评估-o Global.modeevaluate指定验证数据集路径-o Global.dataset_dir评估时需要指定模型权重文件路径每个配置文件内置默认权重保存路径如Evaluate.weight_pathoutput/best_model/best_model.pdparams如需更改可通过命令行追加如-o Evaluate.weight_path./output/best_model/best_model/model.pdparams评估完成后产出evaluate_result.json记录评估任务是否正常完成及模型评估指标包含 Accuracy——基于 pair 验证任务模型输出特征经归一化后按阈值判定是否同一人。4.4 模型推理与集成完成训练与评估后即可用训练好的权重进行推理预测PaddleX 支持命令行与 wheel 包两种方式。4.4.1 命令行推理python main.py -c paddlex/configs/modules/face_feature/MobileFaceNet.yaml \ -o Global.modepredict \ -o Predict.model_dir./output/best_model/inference \ -o Predict.inputface_recognition_001.jpg指定模型.yaml配置文件路径指定模式为推理预测-o Global.modepredict指定模型权重路径-o Predict.model_dir./output/best_model/inference指定输入数据路径-o Predict.input...其他参数可修改Global与Predict字段如 MobileFaceNet.yaml 中Predict.batch_size1、Predict.kernel_option.run_modepaddle详见 PaddleX 通用模型配置文件参数说明。4.4.2 模型集成训练得到的模型可直接集成到 PaddleX 产线或自有项目中。产线集成人脸特征模块可集成到 PaddleX 人脸识别产线。从 paddlex/configs/pipelines/face_recognition.yaml 可以看到人脸识别产线由face_detection默认PP-YOLOE_plus-S_face与face_feature默认ResNet50_face两个子模块组成——只需替换Recognition.model_dir即可完成人脸特征模块的模型更新产线集成中可使用高性能部署与服务化部署部署所得模型。模块集成产出的权重可直接集成进人脸特征模块参考上文三、快速集成的 Python 示例将模型替换为训练所得模型路径即可即create_model(model_dir...)。此外可利用 PaddleX 高性能推理插件use_hpipTrue与hpi_config优化模型推理过程、进一步提升效率详细流程见 PaddleX 高性能推理指南。五、附推理链路源码速览了解底层实现有助于调参与二次开发。人脸特征推理的核心链路如下预测器paddlex/inference/models/face_feature/predictor.py 中的FaceFeaturePredictor继承自 image_feature 的 ImageFeaturePredictor额外接收flip参数预处理管线按Read(RGB) → Resize → Normalize → ToCHW → ToBatch顺序执行paddlex/inference/models/image_feature/predictor.py其中 Normalize 默认使用 ImageNet 统计量mean[0.485, 0.456, 0.406]、std[0.229, 0.224, 0.225]特征归一化paddlex/inference/models/image_feature/processors.py 的NormalizeFeatures对模型输出做 L2 归一化——先计算sqrt(sum(x^2))再逐元素除以该范数最终feature即为单位长度的判别性特征向量可直接用于余弦相似度计算结果封装IdentityResult在打印/转 JSON 时剔除input_img保证序列化结果只含路径与特征。结合上述源码你可以清晰地理解flip翻转融合、128/512 维特征输出的归一化处理以及验证集 pair 数据在评估阶段FaceEvalDatasetpair_label_path是如何被读取并参与 Accuracy 计算的从而更自如地完成从数据、训练到部署的完整闭环。赞分享人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG【免费下载链接】PaddleXAll-in-One Development Tool based on PaddlePaddle项目地址https://gitcode.com/paddlepaddle/PaddleX点击查看免费下载相关推荐.NET 覆盖率分析实战指南基于 Cobertura 证据解读、目标算术与 CRAP 风险排名dotnet-test coverage-analysis Skill.NET 覆盖率分析实战指南基于 Cobertura 证据解读、目标算术与 CRAP 风险排名dotnet test coverage analysis S人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG微调语音PaddleX 人脸特征提取模块使用教程PaddleX 人脸特征提取模块使用教程 概述 人脸特征提取是计算机视觉领域的重要任务之一广泛应用于人脸识别、身份验证等场景。PaddleX 提供了高效易用的人工智能大模型低代码计算机视觉深度学习模型推理服务PaddleOCR 文本识别模块使用教程模型选型、API 推理与二次开发全指南PaddleOCR 文本识别模块使用教程模型选型、API 推理与二次开发全指南 导读 本文以 PaddleOCR 开源仓库中 docs/version3.x/人工智能计算机视觉OCR深度学习大模型RAG上一篇Argo Workflows LifecycleHook 完整指南条件表达式驱动的生命周期钩子下一篇routersploit 实战Juniper 路由器 SSH 默认凭据检测模块ssh_default_creds使用与原理详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表