资讯动态

MobileNetV3 基于 Paddle2ONNX 的模型转换与 ONNXRuntime 推理测试全流程(TIPC 自动化验证)

发布时间:2026/10/9 7:34:34 来源:尧图企业网站定制
人工智能深度学习计算机视觉NLP语音【免费下载链接】modelsOfficially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.项目地址https://gitcode.com/gh_mirrors/mo/models点击查看免费下载本篇技术指南以tutorials/mobilenetv3_prod/Step6中 MobileNetV3 分类模型的 Paddle2ONNX 测试文档为骨架完整讲解 Paddle 模型如何通过 Paddle2ONNX 转换为 ONNX 格式并在 ONNXRuntime 引擎下完成推理以及如何借助飞桨 TIPCTraining and Inference Pipeline Criterion测试体系对mobilenet_v3_small模型一键验证 Paddle → ONNX → ONNXRuntime 整条链路是否打通。读者读完将掌握Paddle2ONNX 转换命令的参数含义、test_paddle2onnx.sh测试脚本的工作机制、配置文件paddle2onnx_infer_python.txt的每一项含义以及基于日志判定测试成败、定位问题的方法。1. 测试结论汇总当前模型对 Paddle2ONNX 部署的支持情况在开始测试之前先明确本仓库mobilenet_v3_small模型对 Paddle2ONNX 推理的支持结论算法名称模型名称device_CPUdevice_GPUbatchsizeMobileNetV3mobilenet_v3_small支持支持1表中含义mobilenet_v3_small的 Paddle2ONNX 转换与 ONNXRuntime 推理在 CPU 和 GPU 设备上均受支持单次预测的 batchsize 为 1分类任务的常规设置与 导出脚本 中InputSpec(shape[None, 3, 224, 224])的 batch 维度设计一致。该结论正是通过下文第 24 节介绍的 TIPC 测试流程在本仓库内验证得到的。2. Paddle2ONNX 测试概览Paddle2ONNX 测试的主程序为test_tipc/test_paddle2onnx.sh它可以一键测试基于 Paddle2ONNX 的模型转换和 onnx 推理ONNXRuntime 预测两项功能模型转换读取 Paddle 静态图推理模型inference.pdmodelinference.pdiparams调用paddle2onnx命令行工具转换为 ONNX 模型文件ONNX 推理调用deploy/onnx_python/infer.py用 ONNXRuntime 加载转换出的model.onnx对测试图片做分类预测并输出类别 ID 与置信度。整个测试流程由 TIPC飞桨训推一体全流程测试体系统一编排数据准备与依赖安装由 prepare.sh 完成参数解析、命令执行与状态判定由 test_paddle2onnx.sh 完成公共解析函数与状态检查函数位于 common_func.sh。三层分工明确这也是 TIPC 工具无需改动测试脚本只改配置文件即可测新模型的设计基础。3. 测试前的准备数据与环境3.1 准备数据用于 Paddle2ONNX 推理测试的轻量级数据位于test_images/lite_data.tar直接解压即可如果已经解压完成则无需再次运行tar -xf test_images/lite_data.tar解压后会在当前路径生成lite_data/目录其中包含少量训练与验证图像用于快速体验流程而非完整 ImageNet。Paddle2ONNX 推理阶段使用的测试图片路径为./lite_data/test/demo.jpg见下文配置文件。prepare.sh在paddle2onnx_infer模式下也会自动执行该解压操作见 prepare.sh。3.2 准备环境Paddle2ONNX 测试需要三类软件环境PaddlePaddle需要 2.2 及以上版本。如果已经安装则无需重复安装# 需要安装2.2及以上版本的Paddle # 安装GPU版本的Paddle pip install paddlepaddle-gpu2.2.0 # 安装CPU版本的Paddle pip install paddlepaddle2.2.0项目依赖pip3 install -r requirements.txtPaddle2ONNXpip install paddle2onnxONNXRuntime# 建议安装 1.9.0 版本可根据环境更换版本号 pip install onnxruntime1.9.0说明Paddle2ONNX 对 ONNX Opset 911 的导出支持最稳定详见 deploy/onnx_python/README.md本测试固定使用--opset_version10因此选择 1.9.0 版本的 ONNXRuntime 与之匹配。在prepare.sh的paddle2onnx_infer分支中上述 Paddle2ONNX 与 ONNXRuntime 的安装被自动化执行${python_name} -m pip install paddle2onnx ${python_name} -m pip install onnxruntime1.9.0同时该分支会解压测试数据并下载mobilenet_v3_small的推理模型包到./inference后解压见 prepare.sh。4. 功能测试一键完成模型转换与 ONNX 推理4.1 通用测试命令Paddle2ONNX 测试的通用调用方式如下希望测试不同的模型文件时只需更换为自己的参数配置文件即可完成对应模型的测试bash test_tipc/test_paddle2onnx.sh ${your_params_file} paddle2onnx_infer其中第一个参数your_params_file是 TIPC 参数配置文件本模型的配置为test_tipc/configs/mobilenet_v3_small/paddle2onnx_infer_python.txt第二个参数paddle2onnx_infer是功能模式标识prepare.sh与test_paddle2onnx.sh都依据该标识执行对应的准备与测试逻辑。4.2 以 mobilenet_v3_small 为例的完整执行流程正式执行测试前先运行数据与模型准备脚本参数与测试命令保持一致bash test_tipc/prepare.sh test_tipc/configs/mobilenet_v3_small/paddle2onnx_infer_python.txt paddle2onnx_infer该命令会自动安装 Paddle2ONNX 与 ONNXRuntime、解压lite_data.tar、下载并解压mobilenet_v3_small_infer推理模型见 prepare.sh。然后执行测试主程序bash test_tipc/test_paddle2onnx.sh test_tipc/configs/mobilenet_v3_small/paddle2onnx_infer_python.txt paddle2onnx_infer4.3 测试结果判定执行成功后终端会输出两条Run successfully with command - ...信息分别对应模型转换与 ONNX 推理两个环节黄色高亮输出status_check函数的行为见 common_func.shRun successfully with command - paddle2onnx --model_dir./inference/mobilenet_v3_small_infer/ --model_filenameinference.pdmodel --params_filenameinference.pdiparams --save_file./inference/mobilenet_v3_small_onnx/model.onnx --opset_version10 --enable_onnx_checkerTrue! Run successfully with command - python3.7 deploy/onnx_python/infer.py --img_path./lite_data/test/demo.jpg --onnx_file./inference/mobilenet_v3_small_onnx/model.onnx ./log/mobilenet_v3_small//paddle2onnx_infer_cpu.log 21 !预测结果会自动保存在./log/mobilenet_v3_small/paddle2onnx_infer_cpu.log可以看到 onnx 运行结果ONNXRuntime predict: class_id: 8, prob: 0.9091271758079529表示预测的类别 ID 是8置信度为0.909。该结果与 deploy/onnx_python/README.md 中记录的 Paddle Inference 预测结果class_id: 8, prob: 0.9091270565986633一致说明 ONNX 转换保持了模型精度两条推理链路结果对齐。如果运行失败终端会输出Run failed with command - ...以及对应的完整运行命令。可以基于该命令在终端中手动复现分析运行失败的原因例如环境缺失、模型文件路径错误、ONNX 检查不通过等。同时详细日志也会被保存到test_tipc/output/${model_name}/paddle2onnx_infer/目录下转换日志为trans_model.log推理日志为paddle2onnx_infer_cpu.log状态汇总日志为results_paddle2onnx.log路径定义见 test_paddle2onnx.sh。5. 参数配置解析paddle2onnx_infer_python.txt 逐项说明TIPC 的精髓在于配置驱动测试所有待测参数都集中在配置文件中测试脚本只负责解析与执行。mobilenet_v3_small的 Paddle2ONNX 测试配置为 paddle2onnx_infer_python.txt逐项含义如下配置行参数示例值说明2model_namemobilenet_v3_small模型名称用于生成输出日志目录3pythonpython3.7执行 ONNX 推理脚本所用的 Python 解释器4paddle2onnx 命令paddle2onnxPaddle2ONNX 转换命令行工具5--model_dir./inference/mobilenet_v3_small_infer/Paddle 推理模型所在目录6--model_filenameinference.pdmodel模型结构文件名7--params_filenameinference.pdiparams模型参数文件名8--save_file./inference/mobilenet_v3_small_onnx/model.onnx转换后 ONNX 模型保存路径9--opset_version10ONNX 算子集版本911 支持稳定10--enable_onnx_checkerTrue是否启用 ONNX 模型合法性检查11inferencedeploy/onnx_python/infer.pyONNX 推理脚本路径12--onnx_file./inference/mobilenetv3_model_onnx/model.onnx推理时加载的 ONNX 模型路径13--img_path./lite_data/test/demo.jpg测试图片路径各参数关键点说明转换环节test_paddle2onnx.sh只解析配置文件第 113 行awk NR1, NR13逐行提取参数键与值再通过func_set_params组装成--keyvalue形式拼接出完整的转换命令。若某参数值为null或空该参数会被自动省略见 common_func.sh因此新增参数只需在配置文件中追加一行。推理环节推理命令使用配置文件第 10 行的python解释器执行deploy/onnx_python/infer.py传入--img_path与--onnx_file输出重定向到日志文件。注意第 12 行配置的--onnx_file指向的目录名与第 8 行--save_file的目录名mobilenet_v3_small_onnxvsmobilenetv3_model_onnx在示例配置中存在不一致实际以--save_file生成的模型路径为准若推理报模型文件不存在类错误请优先核对这两行是否保持一致修改配置文件即可无需改动测试脚本。6. 测试脚本工作机制从配置文件到命令执行的完整调用链理解test_paddle2onnx.sh的实现有助于排查问题与扩展新模型测试。核心逻辑分四步加载公共函数source test_tipc/common_func.sh引入func_parser_key、func_parser_value、func_set_params、status_check等解析与状态判定函数。解析配置读取配置文件前 13 行分别解析出model_name、python、padlle2onnx_cmd以及转换阶段与推理阶段所需的全部参数键值对见 test_paddle2onnx.sh。执行转换在func_paddle2onnx函数中先构造并执行转换命令paddle2onnx --model_dir... --model_filename... --params_filename... --save_file... --opset_version... --enable_onnx_checker...输出写入trans_model.log随后调用status_check依据退出码判定是否成功退出码为 0 则打印 Run successfully否则打印 Run failed见 common_func.sh。执行推理构造并执行 ONNX 推理命令输出重定向到paddle2onnx_infer_cpu.log同样通过status_check判定${python} deploy/onnx_python/infer.py --img_path... --onnx_file...值得注意的实现细节status_check中的last_status取自${PIPESTATUS[0]}——虽然示例命令看起来没有显式管道但脚本通过eval执行并保留了子进程的真实退出码从而保证命令本身失败而非被重定向吞掉错误时能被准确捕获并反映在终端输出与results_paddle2onnx.log中。7. 底层原理ONNX 推理脚本与导出链路7.1 deploy/onnx_python/infer.py 的推理流程ONNX 推理脚本 infer.py 完整呈现了 ONNXRuntime 的使用范式共四步加载模型InferenceSession(FLAGS.onnx_file)创建 ONNXRuntime 推理会话准备输入从 ONNX 模型输入张量中读取空间尺寸sess.get_inputs()[0].shape[2:]即 H、W与导出时的InputSpec对应构造ClassificationPresetEval预处理Resize(256) CenterCrop(crop_size) Transpose Normalize均值/标准差与 ImageNet 一致见 presets.py随后读取图片并np.expand_dims扩展 batch 维度执行预测sess.run(output_namesNone, input_feed{...})获取网络输出输出结果对输出张量取argmax得到class_id取对应位置值作为prob打印ONNXRuntime predict:及结果。命令行参数包括--onnx_file默认model.onnx、--img_path默认image.jpg、--crop_size默认 256。从源码结构看推理脚本通过sys.path.insert(0, .)引入仓库顶层直接复用paddlevision.models.mobilenet_v3_small与presets中的预处理定义与训练/评估阶段保持同一套数据管线这是转换前后精度对齐的重要前提。7.2 模型来源动转静导出与 Paddle2ONNX 转换Paddle2ONNX 转换的输入是 Paddle 静态图推理模型需要先用 export_model.py 将动态图模型动转静导出wget https://paddle-model-ecology.bj.bcebos.com/model/mobilenetv3_reprod/mobilenet_v3_small_pretrained.pdparams python tools/export_model.py --pretrained./mobilenet_v3_small_pretrained.pdparams --save-inference-dir./mobilenet_v3_small_infer --modelmobilenet_v3_small导出过程的关键实现在模型外层套上nn.Sequential(model, nn.Softmax())使导出结果直接输出类别概率并通过paddle.jit.to_staticInputSpec(shape[None, 3, 224, 224], dtypefloat32)指定输入形状最终paddle.jit.save生成推理模型见 export_model.py。产物包括mobilenet_v3_small_infer |----inference.pdiparams : 模型参数文件 |----inference.pdmodel : 模型结构文件 |----inference.pdiparams.info: 模型参数信息文件随后即可用 Paddle2ONNX 将静态图模型转换为 ONNXpaddle2onnx --model_dir./mobilenet_v3_small_infer/ \ --model_filenameinference.pdmodel \ --params_filenameinference.pdiparams \ --save_file./inference/mobilenetv3_model/model.onnx \ --opset_version10 \ --enable_onnx_checkerTrue执行完毕后ONNX 模型保存在./inference/mobilenetv3_model/下文件名为model.onnx。这与 TIPC 测试脚本中转换命令的构造方式完全一致——测试脚本只是把上述命令行参数化到了配置文件里。8. FAQ 与常见问题排查测试输出提示Run failed如何定位终端会打印失败时执行的完整命令将其复制到终端手动执行观察真实报错同时检查test_tipc/output/mobilenet_v3_small/paddle2onnx_infer/下的trans_model.log转换阶段与paddle2onnx_infer_cpu.log推理阶段日志。报错ONNX 模型文件不存在核对配置文件--save_file第 8 行与--onnx_file第 12 行的目录是否一致prepare.sh下载的推理模型是否已解压到./inference/mobilenet_v3_small_infer/。ONNX 检查不通过确认 Paddle2ONNX 与 ONNXRuntime 版本匹配本测试采用opset_version10与onnxruntime1.9.0Paddle2ONNX 稳定支持 Opset 911若自行调低版本可能遇到算子不支持的问题。如何测试其他模型参照 paddle2onnx_infer_python.txt 的格式新建配置文件替换模型目录、文件名、保存路径与推理脚本参数即可测试脚本无需改动。更完整的 Paddle2ONNX 推理说明可参阅 deploy/onnx_python/README.mdTIPC 各功能的汇总信息见 test_tipc/README.md。赞分享人工智能深度学习计算机视觉NLP语音【免费下载链接】modelsOfficially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.项目地址https://gitcode.com/gh_mirrors/mo/models点击查看免费下载相关推荐PaddleOCR TIPC 集成测试指南Paddle2ONNX 模型转换与 ONNX Runtime 推理验证PaddleOCR TIPC 集成测试指南Paddle2ONNX 模型转换与 ONNX Runtime 推理验证 PaddleOCR 的 TIPCTest人工智能计算机视觉OCR深度学习大模型RAGPaddle2ONNX 模型转换与 ONNXRuntime 推理实战以 MobileNetV3 分类模型为例Paddle2ONNX 模型转换与 ONNXRuntime 推理实战以 MobileNetV3 分类模型为例 导读 本文基于 tutorials/mobile人工智能深度学习计算机视觉NLP语音PaddleOCR 模型 ONNX 化实战Paddle2ONNX 转换流程与 ONNXRuntime 推理全解析PaddleOCR 模型 ONNX 化实战Paddle2ONNX 转换流程与 ONNXRuntime 推理全解析 本文将 PaddleOCR 的静态图模型转换人工智能计算机视觉OCR深度学习大模型RAG上一篇XposedRimetHelperAndroid钉钉位置模拟的技术实现与灵活办公解决方案下一篇obs-asio终极指南在Windows上实现OBS专业级低延迟音频采集创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑