前言
对已有的onnx结构,进行简化操作,onnx提供两种常规操作
方式一
假设为 model.onnx, 比较简单粗暴
# 简化
onnxsim model.onnx model_sim.onnx
方式二
稍微复杂点,代码有点多
cpp
import onnx
import argparse
from onnxsim import simplify
# Simplify
def simplify_model(args):
onnx_model = onnx.load(args.origin_model)
model_simp, check = simplify(onnx_model)
model_simp = onnx.shape_inference.infer_shapes(model_simp)
onnx.save(model_simp, args.output_model)
print(" Simplify onnx Done.")
# 检查onnx计算图
def checknet(model_path):
model = onnx.load(model_path)
onnx.checker.check_model(model)
# Print a human readable representation of the graph
# print(onnx.helper.printable_graph(model.graph))
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("--origin_model", type=str)
parser.add_argument("--output_model", type=str)
args = parser.parse_args()
return args
if __name__ == "__main__":
args = parse_args()
simplify_model(args
总结
- 两种本质上没用改变,都是通过调用onnxsim进行操作
- 看个人使用时机