转换之后运行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')))