onnx.onnx_cpp2py_export.checker.ValidationError: Nodes in a graph must be topologically sorted, however input 'model1_onnx::Conv_286' of node:
name: Conv_0 OpType: Conv
is not output of any previous nodes.
上述报错的可能原因是,只修改了onnx中每个node的input,output属性和output的属性。而没有修改weight和bias ,running mean等参数,正确修改方法:
def rename_model(model, prefix='aaa'):
for node in model.graph.node:
node.name=f"{prefix}_{node.name}"
for index in range(len(node.input)):
node.input[index] = f"{prefix}_{node.input[index]}"
for index in range(len(node.output)):
node.output[index] = f"{prefix}_{node.output[index]}"
for index in range(len(model.graph.initializer)):
model.graph.initializer[index].name=f"{prefix}_{model.graph.initializer[index].name}"
# rename input
model.graph.input[0].name = f"vuy_img"
model.graph.node[0].input[0] = f"vuy_img"
# rename output
for index in range(len(model.graph.output)):
model.graph.output[index].name = f"{prefix}_{model.graph.output[index].name}"
可以通过调用下面的函数,看onnx格式是否正确:(如果不能被化简,则说明onnx格式不正确)
def simplify_onnx(onnx_path):
"""
Args:
onnx_path ():
Returns:
"""
onnx_model = onnx.load(onnx_path) # load onnx model
model_simp, check = simplify(onnx_model)
assert check, "Simplified ONNX model could not be validated"
save_path = onnx_path
onnx.save(model_simp, save_path)
print(f"Simplified onnx save path {save_path}")
return save_path