Skip to content

Problems when transforming dynamic input models and quantifying static models #729

@Shirifo

Description

@Shirifo

Issue Type

Others

OS

Linux

onnx2tf version number

ooonx2tf -1.26.3

onnx version number

1.16.1

onnxruntime version number

1.18.1

onnxsim (onnx_simplifier) version number

0.4.33

tensorflow version number

2.18.0

Download URL for ONNX

https://drive.google.com/drive/folders/1BWeNDI2PMmORZqT-ZPkkrmozNMgGxWX5?usp=drive_link

Parameter Replacement JSON

{
  "format_version": 1,
  "operations": [
    {
      "op_name": "Add_216",
      "param_target": "inputs",
      "param_name": "onnx____Add_428",
      "pre_process_transpose_perm": [0,2,3,1]
    },
    {
      "op_name": "Add_216",
      "param_target": "outputs",
      "param_name": "onnx____Transpose_429",
      "post_process_transpose_perm": [0,3,1,2]
    },
    {
      "op_name": "Add_239",
      "param_target": "inputs",
      "param_name": "onnx____Add_451",
      "pre_process_transpose_perm": [0,2,3,1]
    },
    {
      "op_name": "Add_239",
      "param_target": "outputs",
      "param_name": "onnx____Transpose_452",
      "post_process_transpose_perm": [0,3,1,2]
    },
    {
      "op_name": "Add_383",
      "param_target": "inputs",
      "param_name": "onnx____Add_607",
      "pre_process_transpose_perm": [0,2,3,1]
    },
    {
      "op_name": "Add_383",
      "param_target": "outputs",
      "param_name": "onnx____Transpose_608",
      "post_process_transpose_perm": [0,3,1,2]
    },
    {
      "op_name": "Add_406",
      "param_target": "inputs",
      "param_name": "onnx____Add_630",
      "pre_process_transpose_perm": [0,2,3,1]
    },
    {
      "op_name": "Add_406",
      "param_target": "outputs",
      "param_name": "onnx____Transpose_631",
      "post_process_transpose_perm": [0,3,1,2]
    },
    {
      "op_name": "Add_550",
      "param_target": "inputs",
      "param_name": "onnx____Add_786",
      "pre_process_transpose_perm": [0,2,3,1]
    },
    {
      "op_name": "Add_550",
      "param_target": "outputs",
      "param_name": "onnx____Transpose_787",
      "post_process_transpose_perm": [0,3,1,2]
    },
    {
      "op_name": "Add_573",
      "param_target": "inputs",
      "param_name": "onnx____Add_809",
      "pre_process_transpose_perm": [0,2,3,1]
    },
    {
      "op_name": "Add_573",
      "param_target": "outputs",
      "param_name": "onnx____Transpose_810",
      "post_process_transpose_perm": [0,3,1,2]
    },
    {
      "op_name": "Add_717",
      "param_target": "inputs",
      "param_name": "onnx____Add_965",
      "pre_process_transpose_perm": [0,2,3,1]
    },
    {
      "op_name": "Add_717",
      "param_target": "outputs",
      "param_name": "onnx____Transpose_966",
      "post_process_transpose_perm": [0,3,1,2]
    },
    {
      "op_name": "Add_740",
      "param_target": "inputs",
      "param_name": "onnx____Add_988",
      "pre_process_transpose_perm": [0,2,3,1]
    },
    {
      "op_name": "Add_740",
      "param_target": "outputs",
      "param_name": "onnx____Transpose_989",
      "post_process_transpose_perm": [0,3,1,2]
    },
    {
      "op_name": "Add_877",
      "param_target": "inputs",
      "param_name": "onnx____Add_1137",
      "pre_process_transpose_perm": [0,2,3,1]
    },
    {
      "op_name": "Add_877",
      "param_target": "outputs",
      "param_name": "onnx____Transpose_1138",
      "post_process_transpose_perm": [0,3,1,2]
    },
    {
      "op_name": "Add_900",
      "param_target": "inputs",
      "param_name": "onnx____Add_1160",
      "pre_process_transpose_perm": [0,2,3,1]
    },
    {
      "op_name": "Add_900",
      "param_target": "outputs",
      "param_name": "onnx____Transpose_1161",
      "post_process_transpose_perm": [0,3,1,2]
    }
  ]
}

Description

Hi @PINTO0309 , thanks for all of your great work.
I am trying to convert an ONNX model with dynamic inputs to TFlite.
I have 3 problems.

1. The problem of Concat operator is difficult to solve.

I use the command:
onnx2tf -i dynamics_rife.onnx
And get

INFO: 42 / 480
INFO: onnx_op_type: ConvTranspose onnx_op_name: ConvTranspose_53
INFO:  input_name.1: onnx____ConvTranspose_204 shape: [1, 16, 'unk__5', 'unk__6'] dtype: float32
INFO:  input_name.2: encode.cnn3.weight shape: [16, 4, 4, 4] dtype: float32
INFO:  input_name.3: encode.cnn3.bias shape: [4] dtype: float32
INFO:  output_name.1: f0 shape: [1, 4, 'unk__7', 'unk__8'] dtype: float32
2025-01-14 10:36:06.649150228 [E:onnxruntime:, sequential_executor.cc:516 ExecuteKernel] Non-zero status code returned while running Concat node. Name:'Concat_76' Status Message: concat.cc:154 Preparn concat axis dimensions must match: Axis 2 has mismatched dimensions of 2 and 1
ERROR: The trace log is below.
Traceback (most recent call last):
onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 1 : FAIL : Non-zero status code returned while running Concat node. Name:'Concat_76' Status Message: concat.cc:154 PrepareForComt axis dimensions must match: Axis 2 has mismatched dimensions of 2 and 1

Do you have a solution to this problem?

2. When I use static ONNX model, the concat can work but got another error:

INFO: 82 / 371
INFO: onnx_op_type: Add onnx_op_name: Add_219
INFO:  input_name.1: onnx::Cast_415 shape: [1, 2, 256, 512] dtype: float32
INFO:  input_name.2: onnx____Add_431 shape: [1, 2, 256, 512] dtype: float32
INFO:  output_name.1: onnx____Transpose_432 shape: [1, 2, 256, 512] dtype: float32
ERROR: The trace log is below.
Traceback (most recent call last):
Dimensions must be equal, but are 512 and 256 for '{{node tf.math.add_28/Add}} = AddV2[T=DT_FLOAT](Placeholder, tf.math.add_28/Add/y)' with input shapes: [1,512,2,256], [1,256,512,2].

Call arguments received by layer "tf.math.add_28" (type TFOpLambda):
  • x=tf.Tensor(shape=(1, 512, 2, 256), dtype=float32)
  • y=tf.Tensor(shape=(1, 256, 512, 2), dtype=float32)
  • name='Add_219'

I refer to this link to write a json file to make changes https://github.com/PINTO0309/onnx2tf/issues/103
I had a strange problem, I couldn't convert x(onnx::Cast_415) to (1, 256, 512, 2), so I chose to convert y(onnx____Add_431) and output(onnx____Transpose_432) to get the correct result, as follows

    {
    "op_name": "Add_219",
    "param_target": "inputs",
    "param_name": "onnx____Add_431",
    "pre_process_transpose_perm": [0,2,3,1]
  },
  {
    "op_name": "Add_219",
    "param_target": "outputs",
    "param_name": "onnx____Transpose_432",
    "post_process_transpose_perm": [0,3,1,2]
  },

After modifying all the Add I was able to get TFlite output, but it was much larger than the original onnx model. This seems to be a gridsample problem

  1. After using int8 quantization, the obtained model output is completely wrong, and the order of the two outputs is reversed, do you know how to solve it. Below is the command
    onnx2tf -i static_rife_sim.onnx -prf replace.json -oiqt

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions