onnx模型转换opset版本和固定动态输入尺寸

背景:之前我想把onnx模型从opset12变成opset12,太慌乱就没找着,最近找到了官网上有示例的,大爱onnx官网,分享给有需求没找着的小伙伴们。

1. onnx模型转换opset版本

官网示例:

 
  1. import onnx

  2. from onnx import version_converter, helper

  3. # Preprocessing: load the model to be converted.

  4. model_path = "path/to/the/model.onnx"

  5. original_model = onnx.load(model_path)

  6. print(f"The model before conversion:\n{original_model}")

  7. # A full list of supported adapters can be found here:

  8. # https://github.com/onnx/onnx/blob/main/onnx/version_converter.py#L21

  9. # Apply the version conversion on the original model

  10. converted_model = version_converter.convert_version(original_model, <int target_version>)

  11. print(f"The model after conversion:\n{converted_model}")

github地址如下:

onnx/docs/PythonAPIOverview.md at main · onnx/onnx (github.com)​编辑https://github.com/onnx/onnx/blob/main/docs/PythonAPIOverview.md#converting-version-of-an-onnx-model-within-default-domain-aionnx其小伙伴拉到gitee上的地址如下(以防有的小伙伴github打不开):

docs/PythonAPIOverview.md · meiqicheng/github-onnx-onnx - Gitee.com​编辑https://gitee.com/meiqicheng1216/onnx/blob/master/docs/PythonAPIOverview.md#converting-version-of-an-onnx-model-within-default-domain-aionnx最后附上完整代码:

 
  1. import onnx

  2. from onnx import version_converter, helper

  3. # A full list of supported adapters can be found here:

  4. # https://github.com/onnx/onnx/blob/main/onnx/version_converter.py#L21

  5. # Apply the version conversion on the original model

  6. # Preprocessing: load the model to be converted.

  7. model_path = r"./demo.onnx"

  8. original_model = onnx.load(model_path)

  9. print(f"The model before conversion:\n{original_model}")

  10. converted_model = version_converter.convert_version(original_model, 11)

  11. print(f"The model after conversion:\n{converted_model}")

  12. save_model = model_path[:-5] + "_opset11.onnx"

  13. onnx.save(converted_model, save_model)

2. onnx模型转固定动态输入尺寸

 
  1. def change_dynamic_input_shape(model_path, shape_list: list):

  2. """

  3. 将动态输入的尺寸变成固定尺寸

  4. Args:

  5. model_path: onnx model path

  6. shape_list: [1, 3, ...]

  7. Returns:

  8. """

  9. import os

  10. import onnx

  11. model_path = os.path.abspath(model_path)

  12. output_path = model_path[:-5] + "_fixed.onnx"

  13. model = onnx.load(model_path)

  14. # print(onnx.helper.printable_graph(model.graph))

  15. inputs = model.graph.input # inputs是一个列表,可以操作多输入~

  16. # look_input = inputs[0].type.tensor_type.shape.dim

  17. # print(look_input)

  18. # print(type(look_input))

  19. # inputs[0].type.tensor_type.shape.dim[0].dim_value = 1

  20. for idx, i_e in enumerate(shape_list):

  21. inputs[0].type.tensor_type.shape.dim[idx].dim_value = i_e

  22. # print(onnx.helper.printable_graph(model.graph))

  23. onnx.save(model, output_path)

  24. if __name__ == "__main__":

  25. model_path = "./demo.onnx"

  26. shape_list = [1]

  27. change_dynamic_input_shape(model_path, shape_list)




onnx模型转换opset版本和固定动态输入尺寸_onnx opset-CSDN博客

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值