转换之后运行onnx文件就报错:
onnxruntime.capi.onnxruntime_pybind11_state.Fail:
解决:
最好把h5模型重新加载一下,保存save_model文件:
model, _ = build_model(image_height=height, image_width=width, channels=1, num_classes=args.num_classes)
# model = tf.keras.models.load_model(model_path)
model.load_weights(model_path, skip_mismatch=False, by_name=False)
model.summary()
saved_model_dir=os.path.join(outpath,'save_model')
tf.saved_model.save(model, saved_model_dir)
转pb:
full_model = tf.function(lambda Input: model(Input))
full_model = full_model.get_concrete_function(
tf.TensorSpec([1, height, width, 1], model.inputs[0].dtype))
# Get frozen ConcreteFunction
frozen_func = convert_variables_to_constants_v2(full_model)
frozen_func.graph.as_graph_def()
# Save frozen graph from frozen ConcreteFunction to hard drive
tf.io.write_graph(graph_or_graph_def=frozen_func.graph,
logdir="./",
name=outpath,
as_text=False)
转onnx的时候使用的是save_model格式:
os.system(
'python -m tf2onnx.convert --saved-model "{}" --output "{}" --opset 10'.format(
saved_model_dir,
outpath.replace('.pb', '.onnx')))