Closed R4Ajeti closed 3 months ago
If there is no activity within the next two days, this issue will be closed automatically.
I have same issue on that op. Here is a model with a repro: https://github.com/koush/onnx-models/blob/main/scrypted_yolov9t_320/best.onnx
onnx2f -i best.onnx
It is a bug in the API implemented by YOLOv5, YOLOv8, YOLOv9 and YOLOv10. It has nothing to do with onnx2tf.
Your ONNX is broken from the start.
onnxsim best.onnx best.onnx
Simplifying...
Traceback (most recent call last):
File "/home/xxxx/.local/bin/onnxsim", line 8, in <module>
sys.exit(main())
File "/home/xxxx/.local/lib/python3.10/site-packages/onnxsim/onnx_simplifier.py", line 481, in main
model_opt, check_ok = simplify(
File "/home/xxxx/.local/lib/python3.10/site-packages/onnxsim/onnx_simplifier.py", line 184, in simplify
model = remove_initializer_from_input(model)
File "/home/xxxx/.local/lib/python3.10/site-packages/onnxsim/onnx_simplifier.py", line 66, in remove_initializer_from_input
onnx.checker.check_model(model)
File "/home/xxxx/.local/lib/python3.10/site-packages/onnx/checker.py", line 179, in check_model
C.check_model(
onnx.onnx_cpp2py_export.checker.ValidationError: Your model has duplicate keys in metadata_props.
import onnx
from pprint import pprint
model = onnx.load('best.onnx')
pprint(model.metadata_props)
print('')
model.metadata_props.pop(-1)
pprint(model.metadata_props)
onnx.save(proto=model, f='best_model_bugfix.onnx')
[key: "stride"
value: "32"
, key: "names"
value: "{0: \'person\', 1: \'vehicle\', 2: \'animal\'}"
, key: "names"
value: "{0: \'person\', 1: \'vehicle\', 2: \'animal\'}"
]
[key: "stride"
value: "32"
, key: "names"
value: "{0: \'person\', 1: \'vehicle\', 2: \'animal\'}"
]
onnxsim best_model_bugfix.onnx best_model_bugfix.onnx
Simplifying...
Finish! Here is the difference:
┏━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓
┃ ┃ Original Model ┃ Simplified Model ┃
┡━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩
│ Add │ 52 │ 44 │
│ AveragePool │ 5 │ 5 │
│ Concat │ 33 │ 33 │
│ Constant │ 432 │ 387 │
│ Conv │ 186 │ 186 │
│ Div │ 9 │ 1 │
│ Gather │ 8 │ 0 │
│ MaxPool │ 3 │ 3 │
│ Mul │ 196 │ 180 │
│ Reshape │ 5 │ 5 │
│ Resize │ 2 │ 2 │
│ Shape │ 8 │ 0 │
│ Sigmoid │ 180 │ 180 │
│ Slice │ 16 │ 16 │
│ Softmax │ 1 │ 1 │
│ Split │ 2 │ 2 │
│ Sub │ 2 │ 2 │
│ Transpose │ 2 │ 2 │
│ Model Size │ 7.4MiB │ 7.4MiB │
└─────────────┴────────────────┴──────────────────┘
onnx2tf -i best_model_bugfix.onnx -cotof
INFO: onnx_output_name: wa/model.22/Concat_3_output_0 tf_output_name: tf.concat_30/concat:0 shape: (1, 67, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Split_output_0 tf_output_name: tf.split/split:0 shape: (1, 64, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Split_output_1 tf_output_name: tf.split/split:1 shape: (1, 3, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/dfl/Reshape_output_0 tf_output_name: tf.reshape_11/Reshape:0 shape: (1, 4, 16, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Sigmoid_output_0 tf_output_name: tf.math.sigmoid_179/Sigmoid:0 shape: (1, 3, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/dfl/Transpose_output_0 tf_output_name: tf.compat.v1.transpose_19/transpose:0 shape: (1, 2100, 4, 16) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/dfl/Softmax_output_0 tf_output_name: tf.nn.softmax/wa/model.22/dfl/Softmax:0 shape: (1, 2100, 4, 16) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/dfl/Transpose_1_output_0 tf_output_name: tf.compat.v1.transpose_20/transpose:0 shape: (1, 16, 4, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/dfl/conv/Conv_output_0 tf_output_name: tf.nn.convolution_185/convolution:0 shape: (1, 1, 4, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/dfl/Reshape_1_output_0 tf_output_name: tf.reshape_14/Reshape:0 shape: (1, 4, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Split_1_output_0 tf_output_name: tf.split_1/split:0 shape: (1, 2, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Split_1_output_1 tf_output_name: tf.split_1/split:1 shape: (1, 2, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Sub_output_0 tf_output_name: tf.math.subtract/Sub:0 shape: (1, 2, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Add_output_0 tf_output_name: tf.math.add_269/Add:0 shape: (1, 2, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Add_1_output_0 tf_output_name: tf.math.add_270/Add:0 shape: (1, 2, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Sub_1_output_0 tf_output_name: tf.math.subtract_1/Sub:0 shape: (1, 2, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Div_output_0 tf_output_name: tf.math.divide/truediv:0 shape: (1, 2, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Concat_4_output_0 tf_output_name: tf.concat_34/concat:0 shape: (1, 4, 2100) dtype: float32 validate_result: Matches
INFO: onnx_output_name: wa/model.22/Mul_output_0 tf_output_name: tf.math.multiply_812/Mul:0 shape: (1, 4, 2100) dtype: float32 validate_result: Unmatched max_abs_error: 0.0008087158203125
INFO: onnx_output_name: output0 tf_output_name: tf.concat_35/concat:0 shape: (1, 7, 2100) dtype: float32 validate_result: Unmatched max_abs_error: 0.0008087158203125
thanks, that was the issue
Issue Type
Others
OS
Linux
onnx2tf version number
1.25.7
onnx version number
1.16.2
onnxruntime version number
1.18.1
onnxsim (onnx_simplifier) version number
1.0.4
tensorflow version number
2.17.0
Download URL for ONNX
pip install onnx2tf Yolov9 custom model onnx
Parameter Replacement JSON
Description
error
ERROR: input_onnx_file_path: best-striped-model-final.onnx ERROR: onnx_op_name: wa/model.3/AveragePool ERROR: Read this and deal with it. https://github.com/PINTO0309/onnx2tf#parameter-replacement ERROR: Alternatively, if the input OP has a dynamic dimension, use the -b or -ois option to rewrite it to a static shape and try again. ERROR: If the input OP of ONNX before conversion is NHWC or an irregular channel arrangement other than NCHW, use the -kt or -kat option. ERROR: Also, for models that include NonMaxSuppression in the post-processing, try the -onwdt option.