gmalivenko / onnx2keras

Convert ONNX model graph to Keras model format.
MIT License
193 stars 114 forks source link

Setting `change_ordering` to True raises warning and error #122

Open mrtpk123 opened 3 years ago

mrtpk123 commented 3 years ago

Hello,

My versions are,

Code:

import onnx
from onnx2keras import onnx_to_keras
onnx_model = onnx.load('faceDetector.onnx')
k_model = onnx_to_keras(onnx_model, ['input0'], change_ordering=True)
k_model.save('keras_model.h5')

Raises:

DEBUG:onnx2keras:Output TF Layer -> KerasTensor(type_spec=TensorSpec(shape=(None, 4420, 2), dtype=tf.float32, name=None), name='530/Softmax:0', description="created by layer '530'")
/home/thomas/.local/lib/python3.8/site-packages/tensorflow/python/keras/utils/generic_utils.py:494: CustomMaskWarning: Custom mask layers require a config and must override get_config. When loading, the custom mask layer must be passed to the custom_objects argument.
  warnings.warn('Custom mask layers require a config and must override '
Traceback (most recent call last):
  File "./convert_retinaface.py", line 26, in <module>
    k_model = onnx_to_keras(onnx_model, ['input0'], change_ordering=True)
  File "/home/thomas/.local/lib/python3.8/site-packages/onnx2keras/converter.py", line 267, in onnx_to_keras
    model_tf_ordering = keras.models.Model.from_config(conf)
  File "/home/thomas/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 2357, in from_config
    functional.reconstruct_from_config(config, custom_objects))
  File "/home/thomas/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 1289, in reconstruct_from_config
    process_node(layer, node_data)
  File "/home/thomas/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/functional.py", line 1237, in process_node
    output_tensors = layer(input_tensors, **kwargs)
  File "/home/thomas/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 969, in __call__
    return self._functional_construction_call(inputs, args, kwargs,
  File "/home/thomas/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 1107, in _functional_construction_call
    outputs = self._keras_tensor_symbolic_call(
  File "/home/thomas/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 840, in _keras_tensor_symbolic_call
    return self._infer_output_signature(inputs, args, kwargs, input_masks)
  File "/home/thomas/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 878, in _infer_output_signature
    self._maybe_build(inputs)
  File "/home/thomas/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/base_layer.py", line 2625, in _maybe_build
    self.build(input_shapes)  # pylint:disable=not-callable
  File "/home/thomas/.local/lib/python3.8/site-packages/tensorflow/python/keras/utils/tf_utils.py", line 270, in wrapper
    output_shape = fn(instance, input_shape)
  File "/home/thomas/.local/lib/python3.8/site-packages/tensorflow/python/keras/layers/merge.py", line 497, in build
    del reduced_inputs_shapes[i][self.axis]
IndexError: list assignment index out of range

This error is avoided if change_ordering is set as False. But unfortunately, I need the model in NHWC.

Any pointers on how to solve this is a huge help. Thank you.

deekshith1352 commented 2 years ago

Did you solve the issue

mrtpk123 commented 2 years ago

Unfortunately nope.