https://github.com/PaddlePaddle/Paddle2ONNX
–model_dir
配置包含 Paddle 模型的目录路径
–model_filename
[可选]
配置位于
--model_dir
下存储网络结构的文件名
–params_filename
[可选]
配置位于
--model_dir
下存储模型参数的文件名称
–save_file
指定转换后的模型保存目录路径
–opset_version
[可选]
配置转换为 ONNX 的 OpSet 版本,目前支持 7~16 等多个版本,默认为 9
–enable_dev_version
[可选]
是否使用新版本 Paddle2ONNX(推荐使用),默认为 True
–enable_onnx_checker
[可选]
配置是否检查导出为 ONNX 模型的正确性, 建议打开此开关, 默认为 False
–enable_auto_update_opset
[可选]
是否开启 opset version 自动升级功能,当低版本 opset 无法转换时,自动选择更高版本的 opset进行转换, 默认为 True
–deploy_backend
[可选]
量化模型部署的推理引擎,支持 onnxruntime、tensorrt 或 others,当选择 others 时,所有的量化信息存储于 max_range.txt 文件中,默认为 onnxruntime
–save_calibration_file
[可选]
TensorRT 8.X版本部署量化模型需要读取的 cache 文件的保存路径,默认为 calibration.cache
–version
[可选]
查看 paddle2onnx 版本
–external_filename
[可选]
当导出的 ONNX 模型大于 2G 时,需要设置 external data 的存储路径,推荐设置为:external_data
–export_fp16_model
[可选]
是否将导出的 ONNX 的模型转换为 FP16 格式,并用 ONNXRuntime-GPU 加速推理,默认为 False
–custom_ops
[可选]
将 Paddle OP 导出为 ONNX 的 Custom OP,例如:–custom_ops ‘{“paddle_op”:”onnx_op”},默认为 {}
使用 onnxruntime 验证转换模型, 请注意安装最新版本(最低要求 1.10.0)
执行结果如下
1 2 3 4 5 6 7 8
[Paddle2ONNX] Start to parse PaddlePaddle model... [Paddle2ONNX] Model file path: D:\vsCodeWorkspace\python20230512paddleNumber\testfive\mnist_checkpoint\test.pdmodel [Paddle2ONNX] Paramters file path: D:\vsCodeWorkspace\python20230512paddleNumber\testfive\mnist_checkpoint\test.pdiparams [Paddle2ONNX] Start to parsing Paddle model... [Paddle2ONNX] Use opset_version = 11 for ONNX export. [Paddle2ONNX] PaddlePaddle model is exported as ONNX format now. [INFO] ===============Make PaddlePaddle Better!================ [INFO] A little survey: https://iwenjuan.baidu.com/?code=r8hu2s
获得onnx 的输出文件
1
D:\vsCodeWorkspace\python20230512paddleNumber\testfive\onnx\test.onnx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
import os import time import paddle from paddle.static import InputSpec model = paddle.jit.load("./testfive/mnist_checkpoint/test") model.eval() # 设置为预测模型 # 将模型设置为评估状态 model.eval() # 定义输入数据 x_spec = InputSpec([None, 784], 'float32', 'x') # ONNX模型导出 paddle.onnx.export(model, './testfive/onnxSave/linear_net',input_spec=[x_spec])
1 2 3 4 5 6 7 8 9 10
# 导入 ONNX 库 import onnx # 载入 ONNX 模型 #onnx_model = onnx.load("./testfive/onnx/test.onnx") onnx_model = onnx.load("./testfive/onnxSave/linear_net.onnx") # 使用 ONNX 库检查 ONNX 模型是否合理 onnx.checker.check_model(onnx_model) # onnx.checker.check_model 不报错则证明onnx 网格没问题