ONNX Parsing Error due to Intermediate Residual Branch: "Invalid kernel shape for Conv_17"

Hello,

I’m trying to parse my ONNX model (fastbev_pre_trt.onnx) using the Hailo parser. However, I consistently get the following error:

(hailo_venv) (base) mdh@homebody:~/Documents/CUDA-FastBEV/model/resnet18$ hailo parser onnx fastbev_pre_trt.onnx --har-path ./fastbev_pre_trt.har
[info] Current Time: 14:43:44, 07/14/25
[info] CPU: Architecture: x86_64, Model: AMD Ryzen 5 PRO 5650GE with Radeon Graphics, Number Of Cores: 12, Utilization: 0.3%
[info] Memory: Total: 14GB, Available: 9GB
[info] System info: OS: Linux, Kernel: 6.8.0-40-generic
[info] Hailo DFC Version: 3.30.0
[info] HailoRT Version: 4.20.0
[info] PCIe: No Hailo PCIe device was found
[info] Running `hailo parser onnx fastbev_pre_trt.onnx --har-path ./fastbev_pre_trt.har`
[info] Translation started on ONNX model fastbev_pre_trt
[info] Restored ONNX model fastbev_pre_trt (completion time: 00:00:00.19)
[info] Extracted ONNXRuntime meta-data for Hailo model (completion time: 00:00:00.68)
[info] Simplified ONNX model for a parsing retry attempt (completion time: 00:00:02.58)
Traceback (most recent call last):
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py", line 239, in translate_onnx_model
    parsing_results = self._parse_onnx_model_to_hn(
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py", line 320, in _parse_onnx_model_to_hn
    return self.parse_model_to_hn(
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py", line 371, in parse_model_to_hn
    fuser = HailoNNFuser(converter.convert_model(), net_name, converter.end_node_names)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/translator.py", line 92, in convert_model
    self._calculate_shapes(validate_shapes=False)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_translator.py", line 203, in _calculate_shapes
    self._layers_graph.calculate_shapes(meta_edges_graph=self._meta_graph, validate_shapes=validate_shapes)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_common/hailo_nn/hailo_nn.py", line 750, in calculate_shapes
    self.update_input_shapes_from_predecessors(layer)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_common/hailo_nn/hailo_nn.py", line 815, in update_input_shapes_from_predecessors
    layer.input_shapes = input_shapes
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_common/hailo_nn/hn_layers/layer.py", line 538, in input_shapes
    self.set_input_shapes(input_shapes)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_common/hailo_nn/hn_layers/conv2d.py", line 575, in set_input_shapes
    raise UnsupportedModelError(
hailo_sdk_common.hailo_nn.exceptions.UnsupportedModelError: Invalid kernel shape for base conv layer base_conv7 (translated from Conv_17).
Either the input shape doesn't match the kernel shape, or the calculated groups number doesn't match the expected ratio between kernel shape and input shape.
Kernel features: 384 Input features: 64 Groups: 0

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/tools/parser_cli.py", line 201, in run
    runner = self._parse(net_name, args, tensor_shapes)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/tools/parser_cli.py", line 287, in _parse
    runner.translate_onnx_model(
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_common/states/states.py", line 16, in wrapped_func
    return func(self, *args, **kwargs)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/runner/client_runner.py", line 1177, in translate_onnx_model
    parser.translate_onnx_model(
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py", line 280, in translate_onnx_model
    parsing_results = self._parse_onnx_model_to_hn(
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py", line 320, in _parse_onnx_model_to_hn
    return self.parse_model_to_hn(
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py", line 371, in parse_model_to_hn
    fuser = HailoNNFuser(converter.convert_model(), net_name, converter.end_node_names)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/translator.py", line 92, in convert_model
    self._calculate_shapes(validate_shapes=False)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_translator.py", line 203, in _calculate_shapes
    self._layers_graph.calculate_shapes(meta_edges_graph=self._meta_graph, validate_shapes=validate_shapes)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_common/hailo_nn/hailo_nn.py", line 750, in calculate_shapes
    self.update_input_shapes_from_predecessors(layer)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_common/hailo_nn/hailo_nn.py", line 815, in update_input_shapes_from_predecessors
    layer.input_shapes = input_shapes
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_common/hailo_nn/hn_layers/layer.py", line 538, in input_shapes
    self.set_input_shapes(input_shapes)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_common/hailo_nn/hn_layers/conv2d.py", line 575, in set_input_shapes
    raise UnsupportedModelError(
hailo_sdk_common.hailo_nn.exceptions.UnsupportedModelError: Invalid kernel shape for base conv layer base_conv7 (translated from Conv_17).
Either the input shape doesn't match the kernel shape, or the calculated groups number doesn't match the expected ratio between kernel shape and input shape.
Kernel features: 384 Input features: 64 Groups: 0

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/bin/hailo", line 8, in <module>
    sys.exit(main())
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/tools/cmd_utils/main.py", line 111, in main
    ret_val = client_command_runner.run()
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_platform/tools/hailocli/main.py", line 64, in run
    ret_val = self._run(argv)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_platform/tools/hailocli/main.py", line 111, in _run
    return args.func(args)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/tools/parser_cli.py", line 226, in run
    raise ParserCLIException(str(err).replace("net_input_format", "input_format")) from err
hailo_sdk_client.tools.parser_cli.ParserCLIException: Invalid kernel shape for base conv layer base_conv7 (translated from Conv_17).
Either the input shape doesn't match the kernel shape, or the calculated groups number doesn't match the expected ratio between kernel shape and input shape.
Kernel features: 384 Input features: 64 Groups: 0

Upon inspection in Netron, Conv_17 is part of a residual branch in a parallel structure. The input to Conv_17 comes from a shared tensor (node 264), which is also connected to other Conv layers. This appears to cause a shape inference error during parsing — I suspect Hailo is misinterpreting the structure as a serial chain rather than parallel branches.
So I’ve tried manually set input tensor shapes using --tensor-shapes.

(hailo_venv) (base) mdh@homebody:~/Documents/CUDA-FastBEV/model/resnet18$ hailo parser onnx fastbev_pre_trt.onnx --har-path fastbev_pre_trt.har --tensor-shapes 264=[6,64,64,176] 469=[6,128,32,88]
[info] Current Time: 17:07:26, 07/17/25
[info] CPU: Architecture: x86_64, Model: AMD Ryzen 5 PRO 5650GE with Radeon Graphics, Number Of Cores: 12, Utilization: 0.3%
[info] Memory: Total: 14GB, Available: 8GB
[info] System info: OS: Linux, Kernel: 6.8.0-40-generic
[info] Hailo DFC Version: 3.30.0
[info] HailoRT Version: 4.20.0
[info] PCIe: No Hailo PCIe device was found
[info] Running `hailo parser onnx fastbev_pre_trt.onnx --har-path fastbev_pre_trt.har --tensor-shapes 264=[6,64,64,176] 469=[6,128,32,88]`
[info] Translation started on ONNX model fastbev_pre_trt
[info] Restored ONNX model fastbev_pre_trt (completion time: 00:00:00.18)
[info] Extracted ONNXRuntime meta-data for Hailo model (completion time: 00:00:00.67)
Traceback (most recent call last):
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/tools/parser_cli.py", line 201, in run
    runner = self._parse(net_name, args, tensor_shapes)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/tools/parser_cli.py", line 287, in _parse
    runner.translate_onnx_model(
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_common/states/states.py", line 16, in wrapped_func
    return func(self, *args, **kwargs)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/runner/client_runner.py", line 1177, in translate_onnx_model
    parser.translate_onnx_model(
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py", line 223, in translate_onnx_model
    net_input_shapes = self._handle_input_shapes_or_format(onnx_model, net_input_shapes, start_node_names)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py", line 135, in _handle_input_shapes_or_format
    raise UnsupportedModelError(f"start_node_names and net_input_{arg_name} keys must contain the same names.")
hailo_sdk_common.hailo_nn.exceptions.UnsupportedModelError: start_node_names and net_input_shapes keys must contain the same names.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/bin/hailo", line 8, in <module>
    sys.exit(main())
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/tools/cmd_utils/main.py", line 111, in main
    ret_val = client_command_runner.run()
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_platform/tools/hailocli/main.py", line 64, in run
    ret_val = self._run(argv)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_platform/tools/hailocli/main.py", line 111, in _run
    return args.func(args)
  File "/home/mdh/Downloads/hailo_ai_sw_suite/hailo_venv/lib/python3.10/site-packages/hailo_sdk_client/tools/parser_cli.py", line 226, in run
    raise ParserCLIException(str(err).replace("net_input_format", "input_format")) from err
hailo_sdk_client.tools.parser_cli.ParserCLIException: start_node_names and net_input_shapes keys must contain the same names.

None of these resolved the shape propagation issue in this branch.

My questions are:

  1. How can I prevent the parser from misinterpreting fan-out branches during Conv layer shape inference?
  2. Is there a sample or recommended way to explicitly define tensor shapes for each branch (e.g. via --tensor-shapes) in a model with network branching, so that Hailo can parse it into HAR format correctly?

Thank you in advance for your support!

Hey @Donghyeok_Min,

This is a common issue with branching architectures. What’s happening is that when the parser encounters a tensor that feeds into multiple convolution branches, it defaults to running ONNX-Runtime’s shape inference and propagates shapes as if it’s dealing with a linear graph. In your specific case, the shared tensor at node 264 is being “followed” down one branch and then mismatched against a 384-channel kernel.

You have two options to fix this:

Option 1: Disable ONNX shape-inference entirely
Use --disable-shape-inference so the parser only uses the shapes you provide. This corresponds to disable_shape_inference=True in the Python API. The parser will then rely solely on shapes embedded in your model and any overrides you specify with --tensor-shapes.

Option 2: Explicitly declare each branch’s start nodes and shapes
Use --start-node-names + --tensor-shapes together. Make sure the keys in your --tensor-shapes map exactly match the names in --start-node-names - otherwise you’ll get that “keys must contain the same names” error.

Here’s how to fix your specific case:

hailo parser onnx fastbev_pre_trt.onnx \
    --har-path fastbev_pre_trt.har \
    --disable-shape-inference \
    --start-node-names   264 469 \
    --tensor-shapes      264=[6,64,64,176] 469=[6,128,32,88]

This tells the parser that nodes 264 and 469 are inputs to separate sub-graphs, provides their correct [N,C,H,W] shapes, and prevents ONNX-Runtime from overwriting your branching structure.

This should resolve your “Invalid kernel shape” error and generate a proper HAR file.

Hope this helps!