添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

命令行转化

准备好 paddlepaddle 训练好的模型文件

1
2
3
D:\vsCodeWorkspace\python20230512paddleNumber\testfive\mnist_checkpoint\test.pdiparams
D:\vsCodeWorkspace\python20230512paddleNumber\testfive\mnist_checkpoint\test.pdiparams.info
D:\vsCodeWorkspace\python20230512paddleNumber\testfive\mnist_checkpoint\test.pdmodel
1
paddle2onnx  --model_dir D:\vsCodeWorkspace\python20230512paddleNumber\testfive\mnist_checkpoint --model_filename test.pdmodel --params_filename test.pdiparams --opset_version 11 --save_file ./onnx/test.onnx

注意 model_filename 和 params_filename 虽标注为可选项,但实际测试中发现若无此参数会报错

参数说明:
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

    [INFO] Static PaddlePaddle model saved in ./testfive/onnx.save\paddle_model_static_onnx_temp_dir.
    [Paddle2ONNX] Start to parse PaddlePaddle model...
    [Paddle2ONNX] Model file path: ./testfive/onnx.save\paddle_model_static_onnx_temp_dir\model.pdmodel
    [Paddle2ONNX] Paramters file path: ./testfive/onnx.save\paddle_model_static_onnx_temp_dir\model.pdiparams
    [Paddle2ONNX] Start to parsing Paddle model...
    [Paddle2ONNX] Use opset_version = 9 for ONNX export.
    [Paddle2ONNX] PaddlePaddle model is exported as ONNX format now.
    [INFO] ONNX model saved in ./testfive/onnx.save/linear_net.onnx.

    保存文件的地址

    1
    D:\vsCodeWorkspace\pythonpaddleNumber\testfive\onnxSave\linear_net.onnx

    模型验证

    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 网格没问题

    运行之后 onnx.checker.check_model 不报错则证明没有任何问题

    报错问题解决

    问题1

    将训练的模型转化为.onnx文件,然而,在模型验证的时候报错,错误如下:

    1
    ValidationError: Your model ir_version is higher than the checker's

    解决问题1

    原因:版本不匹配
    需要升级一下onnx

    1
    pip install --upgrade onnx  -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

    升级之后就不会报错了。

    一辈子很短,努力的做好两件事就好;
    第一件事是热爱生活,好好的去爱身边的人;
    第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;