ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

InsightFace ArcFace-Paddle 基础训练预测功能测试(TIPC)完整指南

InsightFace ArcFace-Paddle 基础训练预测功能测试(TIPC)完整指南 InsightFace ArcFace-Paddle 基础训练预测功能测试TIPC完整指南【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface本文是 InsightFace 仓库中 ArcFace-PaddlePaddlePaddle 版人脸识别在 Linux 端基础训练预测功能测试TIPCTest In Paddle Cloud的实战指南围绕recognition/arcface_paddle/test_tipc/docs/test_train_inference_python.md展开完整讲解基于 Python 的模型训练、评估、导出与推理全链路测试流程。读完本文你将掌握 TIPC 五种运行模式的使用方法、测试配置文件train_infer_python.txt的编写规范、环境搭建细节以及如何通过results_python.log快速定位测试失败环节。1. TIPC 是什么一文看懂基础训练预测功能测试TIPCTest In Paddle Cloud是 PaddlePaddle 生态用于验证模型从训练到预测全流程可用性的标准化测试框架。在 ArcFace-Paddle 中Linux 端基础训练预测功能测试的主程序为 test_train_inference_python.sh它可以一键测试基于 Python 实现的模型训练、评估、导出、推理四项基本功能覆盖单机单卡、单机多卡、多机多卡等多种硬件拓扑以及 CPU/GPU、MKLDNN、TensorRT、多线程等推理加速组合。整个测试围绕两个脚本展开prepare.sh测试前置准备负责解压小数据集、拷贝验证集文件test_train_inference_python.sh测试主程序根据配置文件驱动训练、评估、导出、推理各环节。测试配置由 train_infer_python.txt 这样的纯文本文件描述脚本通过解析该文件自动生成并执行命令因此新增一个模型的 TIPC 测试只需要编写一份对应的配置文件即可。2. 测试结论汇总训练与预测能力一览原文档给出了本次功能测试的结论汇总明确了 ArcFace MobileFace 在训练侧与预测侧的覆盖范围。2.1 训练能力结论算法名称模型名称单机单卡单机多卡多机多卡模型压缩单机多卡ArcFacemobileface正常训练正常训练正常训练-可以看出MobileFace 网络在单机单卡、单机多卡、多机多卡三种分布式训练形态下均支持正常训练模型压缩PACT 量化 / FPGM 剪枝 / 蒸馏在该配置下暂不启用表中为 “-”。2.2 预测能力结论模型类型devicebatchsizetensorrtmkldnncpu多线程正常模型GPU1fp32--正常模型CPU1-fp32支持预测侧覆盖两类组合GPU 推理batch_size1可选开启 TensorRT精度为 fp32CPU 推理batch_size1可选开启 MKLDNN精度为 fp32支持 CPU 多线程设置。对应到 train_infer_python.txt 的推理参数段即--use_gpu:True|False、--enable_mkldnn:True|False、--cpu_threads:1|6、--use_tensorrt:False|True、--precision:fp32这几个参数组合的笛卡尔积遍历。3. 运行环境准备TIPC 环境搭建运行环境配置请参考 install.md 的内容搭建 TIPC 运行环境。下面给出关键步骤。3.1 推荐环境组合原文档推荐如下环境版本CUDA 10.1 / 10.2CUDNN 7.6 / cudnn8.1TensorRT 6.1.0.5 / 7.1 / 7.2环境配置有两种途径Docker 镜像安装或本地 Python 环境构建。推荐使用 Docker 镜像安装可以避免繁琐的环境配置问题。3.2 方式一Docker 镜像安装使用 nvidia-docker 创建容器将当前目录映射到镜像中的/paddle目录并安装带 TensorRT 的 Paddle 安装包nvidia-docker run --name paddle -it -v $PWD:/paddle paddlepaddle/paddle:latest-dev-cuda10.1-cudnn7-gcc82 /bin/bash cd /paddle # 安装带TRT的paddle pip3.7 install https://paddle-wheel.bj.bcebos.com/with-trt/2.1.3/linux-gpu-cuda10.1-cudnn7-mkl-gcc8.2-trt6-avx/paddlepaddle_gpu-2.1.3.post101-cp37-cp37m-linux_x86_64.whl注意上述命令中以https://paddle-wheel.bj.bcebos.com/...开头的 wheel 包地址为原文档给出的历史版本安装示例实际使用时请以当前可用的 PaddlePaddle 官方安装源为准。3.3 方式二本地 Python 环境构建非 Docker 环境下推荐的环境组合为CUDA10.1 CUDNN7.6 TensorRT 6CUDA10.2 CUDNN8.1 TensorRT 7CUDA11.1 CUDNN8.1 TensorRT 7下面以 CUDA10.2 CUDNN8.1 TensorRT 7 为例说明配置流程。3.3.1 安装 CUDNN如果当前环境满足 CUDNN 版本要求可跳过此步。以 CUDNN 8.1 为例需要下载三个 deb 包cuDNN Runtime Library、cuDNN Developer Library、cuDNN Code Samples然后依次安装并验证sudo dpkg -i libcudnn8_x.x.x-1cudax.x_arm64.deb sudo dpkg -i libcudnn8-dev_8.x.x.x-1cudax.x_arm64.deb sudo dpkg -i libcudnn8-samples_8.x.x.x-1cudax.x_arm64.deb # 验证是否正确安装 cp -r /usr/src/cudnn_samples_v8/ $HOME cd $HOME/cudnn_samples_v8/mnistCUDNN make clean make ./mnistCUDNN若运行mnistCUDNN提示成功则表示安装成功若出现 freeimage 相关报错需要安装 freeimage 库sudo apt-get install libfreeimage-dev sudo apt-get install libfreeimage3.3.2 安装 TensorRT从 Nvidia 官网 TensorRT 板块下载 TensorRT原文档选用 7.1.3.4 版本建议选择 TAR package 安装包注意选择与系统版本和 CUDA 版本匹配的包。解压后按如下步骤安装# 设置环境变量TensorRT-${version}/lib 为解压后的TensorRT的lib目录 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:TensorRT-${version}/lib # 安装TensorRT的Python wheel包 cd TensorRT-${version}/python pip3.7 install tensorrt-*-cp3x-none-linux_x86_64.whl3.3.3 安装 PaddlePaddle下载支持 TensorRT 版本的 Paddle 安装包注意安装包内置的 TensorRT 版本需与本地 TensorRT 版本一致。原文档给出的示例为 CUDA10.2 CUDNN8.1 对应的 Python3.7 安装包wget https://paddle-wheel.bj.bcebos.com/with-trt/2.1.1-gpu-cuda10.2-cudnn8.1-mkl-gcc8.2/paddlepaddle_gpu-2.1.1-cp37-cp37m-linux_x86_64.whl pip3.7 install -U paddlepaddle_gpu-2.1.1-cp37-cp37m-linux_x86_64.whl同样wheel 地址为原文档历史示例实际安装请选用与当前环境匹配的 PaddlePaddle 版本主文档要求PaddlePaddle 2.2。3.4 安装项目依赖与 AutoLog在 install.md 中AutoLog规范化日志输出工具通过源码方式安装而主文档 test_train_inference_python.md 给出的是更简洁的 pip 直装方式两者等价任选其一# 方式一主文档直接 pip 安装 AutoLog pip3 install githttps://github.com/LDOUBLEV/AutoLog --force-reinstall # 方式二install.md源码构建 git clone https://github.com/LDOUBLEV/AutoLog cd AutoLog pip3.7 install -r requirements.txt python3.7 setup.py bdist_wheel pip3.7 install ./dist/auto_log-1.0.0-py3-none-any.whl随后进入 arcface_paddle 目录安装项目依赖cd insightface/recognition/arcface_paddle pip3.7 install -r requirements.txt3.5 常见问题FAQ原文档记录了一个典型问题“You are using Paddle compiled with TensorRT, but TensorRT dynamic library is not found.”该问题通常有两种成因当前安装的 Paddle 版本带 TensorRT但本地环境找不到 TensorRT 预测库——需要下载 TensorRT 库并解压然后设置环境变量LD_LIBRARY_PATH指向其 lib 目录例如export LD_LIBRARY_PATH/usr/local/python3.7.0/lib:/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/paddle/package/TensorRT-6.0.1.5/lib下载的 TensorRT 版本与当前 Paddle 中编译的 TRT 版本不匹配——需要下载版本相符的 TensorRT 重新安装。如果测试中不使用 TensorRT该警告可以忽略。4. 理解测试配置文件 train_infer_python.txt测试脚本本身是通用的真正的“测试说明书”是配置文件。以 train_infer_python.txt 为例它按行组织、以:分隔键值被test_train_inference_python.sh按固定行号读取解析。4.1 配置文件三大分区整个文件被##分隔为三个段落train_params训练参数、eval_params评估参数、infer_params导出与推理参数。需要注意脚本通过固定行号awk NR1, NR51{print}读取前 51 行因此行号位置不能随意调整。4.2 train_params 分区配置行含义示例值model_name模型名也用于拼接推理模型文件名MobileFaceNet_128pythonPython 解释器python3.7gpu_list参与测试的 GPU 卡列表0--train_num按模式取值的训练量lite_train_lite_infer1表示该模式下训练 1 步1--output训练输出目录./output/--batch_size训练 batch size2--checkpoint_dir预训练权重目录此处为 nullnulltrain_model_name训练产物在输出目录中的相对路径用于后续评估/导出定位权重MobileFaceNet_128/0train_infer_img_dir推理环节使用的测试图片目录./MS1M_v2/imagestrainer训练器列表norm_train表示常规训练norm_trainnorm_train常规训练完整命令模板tools/train.py --config_fileconfigs/ms1mv2_mobileface.py ...pact_train/fpgm_train/distill_trainPACT 量化 / FPGM 剪枝 / 蒸馏训练此处为 null未启用nullnorm_train命令模板对应的是 tools/train.py 的可执行参数tools/train.py --config_fileconfigs/ms1mv2_mobileface.py --is_staticFalse --fp16False --embedding_size128 --datasetMS1M_v2 --data_dirMS1M_v2/ --label_fileMS1M_v2/label.txt --num_classes85742 --log_interval_step14.3 eval_params 分区评估段只包含eval一个入口指向 tools/validation.pyeval:tools/validation.py --is_staticFalse --backboneMobileFaceNet_128 --embedding_size128 --data_dirMS1M_v2 --val_targetslfw --batch_size2--val_targetslfw指定在 LFW 验证集上评估从 validation.py 的默认参数看val_targets支持逗号分隔的多个目标如lfw,cfp_fp,agedb_30batch_size默认 128。4.4 infer_params 分区导出与推理段包含三块内容导出命令norm_exportnorm_export:tools/export.py --is_staticFalse --export_typepaddle --backboneMobileFaceNet_128 --embedding_size128对应 tools/export.py--export_type支持paddle或onnx--is_static决定走静态图还是动态图导出。推理命令与参数组合inference:tools/inference.py --export_typepaddle --benchmarkTrue --use_gpu:True|False --enable_mkldnn:True|False --cpu_threads:1|6 --max_batch_size:1 --use_tensorrt:False|True --precision:fp32 --model_dir:null --image_path:MS1M_v2/images --benchmark:null关键点说明带|的取值表示测试时会遍历所有组合例如--use_gpu:True|False会分别跑 GPU 与 CPU 两轮--max_batch_size:1、--precision:fp32为固定取值--model_dir:null表示推理模型目录由脚本动态填充实际运行时脚本会在命令尾部拼接--model_file${model_dir}/MobileFaceNet_128.pdmodel --params_file${model_dir}/MobileFaceNet_128.pdiparamsinfer_quant:False表示本次不做量化模型推理若置为 True则只允许 int8 精度配合 MKLDNN/TensorRT 推理。4.5 配置文件解析机制common_func.sh配置文件之所以能用极简文本驱动复杂测试依赖 common_func.sh 提供的一组解析函数func_parser_key/func_parser_value按:拆分行分别取出参数名与参数值func_parser_params处理modevalue形式按当前运行模式如lite_train_lite_infer挑选对应取值例如--train_num:lite_train_lite_infer1在 lite 模式下解析为 1func_set_params对值为null或空字符串的键返回空串避免向命令中注入无效参数status_check根据上一条命令的退出码$?或${PIPESTATUS[0]}向results_python.log写入 “Run successfully” 或 “Run failed” 记录。这解释了为什么配置中大量出现null:null占位行——它们保证关键参数保持在固定行号上同时又不向实际命令注入任何内容。5. 五种运行模式与 lite_train_lite_infer 实操5.1 五种运行模式test_train_inference_python.sh 的注释明确了五种模式分别用于测试速度与精度模式用途lite_train_lite_infer少量数据训练 少量数据推理快速验证训练到预测全流程是否走通不验证精度与速度lite_train_whole_infer少量数据训练 全量数据推理whole_train_whole_infer全量数据训练 全量数据推理验证完整训练精度whole_infer仅全量推理跳过训练直接对已有模型做预测klquant_whole_inferKL 量化模型全量推理读取配置第 85~101 行的 klquant 段落见脚本中的awk NR85 NR101分支主文档只测试lite_train_lite_infer一种模式本文也以此为例。5.2 第一步prepare.sh 准备小数据lite_train_lite_infer模式不需要全量 MS1M 数据集prepare.sh 会解压测试用小数据集# 在 recognition/arcface_paddle 目录下执行 bash test_tipc/prepare.sh ./test_tipc/configs/ms1mv2_mobileface/train_infer_python.txt lite_train_lite_infer该脚本在 lite 模式下会创建MS1M_v2目录rm -rf MS1M_v2; mkdir MS1M_v2将test_tipc/data/small_dataset.tar解压到MS1M_v2/训练用小规模人脸图片将test_tipc/data/small_lfw.bin复制为MS1M_v2/lfw.binLFW 验证集二进制文件评估环节使用。prepare.sh还支持serving_infer模式用于准备 Paddle Serving 推理环境属于另一套测试流程此处不展开。5.3 第二步运行 test_train_inference_python.shbash test_tipc/test_train_inference_python.sh ./test_tipc/configs/ms1mv2_mobileface/train_infer_python.txt lite_train_lite_infer该模式会执行训练 → 评估 → 导出 → 推理的完整链条。执行完毕后test_tipc/output目录下会保存所有运行日志。6. 训练→评估→导出→推理的完整调用链从源码层面看测试脚本通过拼装命令依次调用四个 Python 入口形成完整流水线。6.1 训练入口 tools/train.pytools/train.py 是训练入口通过--is_static决定导入 dynamic/train.py动态图还是静态图训练模块训练参数全部来自 configs/argparser.py 解析的命令行而命令行默认值又来自配置脚本 configs/ms1mv2_mobileface.py。以测试使用的ms1mv2_mobileface配置为例关键训练超参包括参数值说明backboneMobileFaceNet_128骨干网络MobileFaceNet输出 128 维lossArcFace损失函数embedding_size128人脸特征维度num_classes85742MS1M_v2 类别数注释标明 MS1M_v3 为 93431lr/momentum/weight_decay0.1/0.9/5e-4优化器超参train_unitepoch训练单位可为 step 或 epochdecay_boundaries[10, 16, 22]分段学习率衰减边界batch_size128每个 rank 的 batch size在lite_train_lite_infer模式下脚本会通过--train_num1只训练 1 步以最快速度验证训练链路。GPU 分配通过export CUDA_VISIBLE_DEVICES${gpu}环境变量控制从 test_train_inference_python.sh 可以看到单卡直接执行训练命令多卡使用python -m paddle.distributed.launch --gpus...多机则在--gpus之外追加--ips...指定节点 IP 列表三种拓扑共用同一训练入口。6.2 评估入口 tools/validation.py训练完成后脚本读取训练产出目录save_log/${train_model_name}即.../norm_train_gpus_0_autocast_null/MobileFaceNet_128/0作为--checkpoint_dir调用 tools/validation.py 在--val_targetslfw上评估。validation.py同样根据--is_static分派到 dynamic/validation.py 或静态图模块。6.3 模型导出 tools/export.py评估之后脚本以训练产物为权重、以save_log为输出目录调用 tools/export.py 导出推理模型。--export_typepaddle时导出 Paddle Inference 格式的MobileFaceNet_128.pdmodel与MobileFaceNet_128.pdiparams两个文件--export_typeonnx时则导出 ONNX 模型。导出产物位于save_log/inference目录由配置行train_model:./inference指定。6.4 推理入口 tools/inference.py 与 CPU/GPU 分支推理环节由 tools/inference.py 执行它是 test_train_inference_python.sh 中func_inference函数驱动的。func_inference按use_gpu取值分成两个遍历分支CPU 分支--use_gpuFalse遍历enable_mkldnn、cpu_threads、batch_size、precision的组合。源码 init_paddle_inference_config 中CPU 路径会config.disable_gpu()、通过set_cpu_math_library_num_threads设置数学库线程数并在enable_mkldnnTrue时开启 MKLDNN 并设置缓存容量为 10。两个跳过规则值得注意开启 MKLDNN 但 precision 为 fp16 的组合会被跳过量化模型flag_quantTrue且 precision 非 int8 的组合会被跳过。GPU 分支--use_gpuTrue遍历use_tensorrt、precision、batch_size的组合。开启 TensorRT 时源码会配置动态 shape输入名x最小[1,3,10,10]、最大[1,3,1000,1000]、最优[1,3,112,112]对应人脸识别标准输入 112×112并根据precision选择Float32/Half/Int8精度模式。推理的前处理在 paddle_inference 中完成图片读取后执行(img - 127.5) * 0.00784313725归一化等价于 mean0.5、std0.5并做 BGR→RGB 通道转换与 NCHW 排布调整。--benchmarkTrue时还会借助 AutoLog 记录预处理、推理、后处理三段耗时并输出性能报告因此 AutoLog 是推理测速的必需依赖。6.5 底层测试框架逻辑整个流程的编排逻辑位于 test_train_inference_python.sh 的 else 分支训练类模式外层循环遍历gpu_list→autocast_list→trainer_list内层依次执行训练、评估eval_py ! null时、导出run_export ! null时、推理四步每一步都用status_check记录结果若某 trainer 的训练命令为null如本配置中的 pact/fpgm/distill则直接跳过。由此形成“一套脚本 一份配置 多模式多组合”的高扩展性测试框架。7. 输出日志与结果判定7.1 test_tipc/output 目录结构运行lite_train_lite_infer模式后test_tipc/output目录下会生成以下内容目录路径相对recognition/arcface_paddletest_tipc/output/ |- results_python.log # 运行指令状态的日志 |- norm_train_gpus_0_autocast_null_fp16_False/ # GPU 0号卡上正常训练fp16关闭的训练日志和模型保存文件夹 |- norm_train_gpus_0_autocast_null_fp16_True/ # GPU 0号卡上fp16训练的训练日志和模型保存文件夹 ...... |- python_infer_cpu_usemkldnn_True_threads_1_precision_fp32_batchsize_1.log # CPU开启MKLDNN、线程数1、batch_size1的预测日志 |- python_infer_gpu_usetrt_True_precision_fp32_batchsize_1.log # GPU开启TensorRT、batch_size1的预测日志 ......日志命名规则非常直观训练/评估日志按${trainer}_gpus_${gpu}_autocast_${autocast}组织为目录里面保存训练日志与模型权重CPU 推理日志为python_infer_cpu_usemkldnn_{True|False}_threads_{n}_precision_{fp32}_batchsize_{1}.logGPU 推理日志为python_infer_gpu_usetrt_{True|False}_precision_{fp32}_batchsize_{1}.log。注上例中的fp16_False/fp16_True为原文档示例中的命名写法实际目录名由脚本按${trainer}_gpus_${gpu}_autocast_${autocast}生成。7.2 results_python.log 成功与失败判定results_python.log汇总了每一条指令的执行状态是定位测试失败环节的第一入口。运行成功时输出Run successfully with command - python3.7 tools/train.py --config_fileconfigs/ms1mv2_mobileface.py --is_staticFalse --embedding_size128 --fp16False --datasetMS1M_v2 --data_dirMS1M_v2/ --label_fileMS1M_v2/label.txt --num_classes85742 --log_interval_step1 --output./test_tipc/output/norm_train_gpus_0_autocast_null_fp16_True --train_num1 --fp16True! Run successfully with command - python3.7 tools/validation.py --is_staticFalse --backboneMobileFaceNet_128 --embedding_size128 --data_dirMS1M_v2 --val_targetslfw --batch_size128 --checkpoint_dir./test_tipc/output/norm_train_gpus_0_autocast_null_fp16_True/MobileFaceNet_128/0 ! ......运行失败时输出Run failed with command - python3.7 tools/train.py --config_fileconfigs/ms1mv2_mobileface.py --is_staticFalse --embedding_size128 --fp16False --datasetMS1M_v2 --data_dirMS1M_v2/ --label_fileMS1M_v2/label.txt --num_classes85742 --log_interval_step1 --output./test_tipc/output/norm_train_gpus_0_autocast_null_fp16_True --train_num1 --fp16True! Run failed with command - python3.7 tools/validation.py --is_staticFalse --backboneMobileFaceNet_128 --embedding_size128 --data_dirMS1M_v2 --val_targetslfw --batch_size128 --checkpoint_dir./test_tipc/output/norm_train_gpus_0_autocast_null_fp16_True/MobileFaceNet_128/0 ! ......上述示例中的fp16True写法对应原文档日志样例实际取值以配置文件中的--fp16参数为准。每条失败记录都包含完整命令可以直接复制该命令手动重跑定位问题。判定逻辑来自 common_func.sh 的status_check退出码为 0 记录 “Run successfully”否则记录 “Run failed”。8. 更多教程本文档定位为 TIPC 基础功能测试指南侧重于验证训练到预测全流程的可用性更丰富的模型训练与预测使用教程包括完整数据集训练、精度调优、静态图/动态图切换等请参考 模型训练与预测教程。结合仓库中的 dynamic/ 与 static/ 两套实现以及 tools/ 下的全部入口脚本你还可以进一步扩展 TIPC 配置例如为其他骨干网络如configs/ms1mv3_r100.py、configs/ms1mv3_r50.py对应的 ResNet 系列编写新的train_infer_python.txt或开启whole_train_whole_infer模式验证完整训练精度。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表