Compile swin_tiny

Hi *,
I’m trying to compile a swin_tiny model for hailo8 and I’m stuck at the first step: creating a parseable ONNX. I’ve followed the link to the pretrained swin_tiny classifier from hailo model zoo, downloaded the model and exported it to ONNX:

# Load model directly
from transformers import AutoImageProcessor, AutoModelForImageClassification
import onnx
import onnxsim
import torch

processor = AutoImageProcessor.from_pretrained("microsoft/swin-tiny-patch4-window7-224")
model = AutoModelForImageClassification.from_pretrained("microsoft/swin-tiny-patch4-window7-224")
model.to("cuda")

dummy_input = torch.randn(1, 3, 224, 224, device="cuda")
torch.onnx.export(model, dummy_input, "_models/swin_tiny_classifier.onnx", dynamic_axes=None, opset_version=11, optimize=True, verify=True)


onnx_model = onnx.load("_models/swin_tiny_classifier.onnx")  # load onnx model
print("checking model")
onnx.checker.check_model(onnx_model, full_check=True)  # check onnx model
print("model checked ")

Then I simplified the model using

onnxsim _models/swin_tiny_classifier.onnx _models/swin_tiny_classifier.sim.onnx 32 --enable-onnxruntime-optimization --test-input-shape 1,3,224,224

Now when I try to parse the model with

hailo parser onnx --hw-arch hailo8 --har-path swin_tiny_classifier.sim.har _models/swin_tiny_classifier.sim.onnx

I get the following error:

[info] Current Time: 15:49:14, 04/14/25
[info] CPU: Architecture: , Model: 11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz, Number Of Cores: 16, Utilization: 2.7%
[info] Memory: Total: 31GB, Available: 21GB
[info] System info: OS: Linux, Kernel: 6.12.23-1-lts
[info] Hailo DFC Version: 3.31.0
[info] HailoRT Version: Not Installed
[info] PCIe: No Hailo PCIe device was found
[info] Running `hailo parser onnx --hw-arch hailo8 --har-path swin_tiny_classifier.sim.har _models/swin_tiny_classifier.sim.onnx`
[info] Found a '.' character in net_name, which isn't supported. New net_name is swin_tiny_classifier_sim
[info] Translation started on ONNX model swin_tiny_classifier_sim
[info] Restored ONNX model swin_tiny_classifier_sim (completion time: 00:00:00.24)
[info] Extracted ONNXRuntime meta-data for Hailo model (completion time: 00:00:00.90)
[info] Simplified ONNX model for a parsing retry attempt (completion time: 00:00:03.25)
Traceback (most recent call last):
  File ".../hailo8/model_quantization/.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 ".../hailo8/model_quantization/.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 ".../hailo8/model_quantization/.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 ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/translator.py", line 83, in convert_model
    self._create_layers()
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/edge_nn_translator.py", line 38, in _create_layers
    self._update_vertices_info()
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_translator.py", line 320, in _update_vertices_info
    node.update_output_format()
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_graph.py", line 548, in update_output_format
    self.update_reshape_output_format(input_format)
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_graph.py", line 344, in update_reshape_output_format
    if self.is_spatial_flatten_reshape():
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_graph.py", line 3502, in is_spatial_flatten_reshape
    if self._is_spatial_flatten_with_features_to_heads_reshape():
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_graph.py", line 3553, in _is_spatial_flatten_with_features_to_heads_reshape
    if self.is_spatial_flatten_features_to_width():
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_graph.py", line 3154, in is_spatial_flatten_features_to_width
    h, w, c = input_shapes[-3:]
ValueError: not enough values to unpack (expected 3, got 2)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File ".../hailo8/model_quantization/.venv/bin/hailo", line 8, in <module>
    sys.exit(main())
  File ".../hailo8/model_quantization/.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 ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/tools/cmd_utils/base_utils.py", line 68, in run
    return self._run(argv)
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/tools/cmd_utils/base_utils.py", line 89, in _run
    return args.func(args)
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/tools/parser_cli.py", line 213, in run
    self._parse(net_name, args, tensor_shapes)
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/tools/parser_cli.py", line 297, in _parse
    self.runner.translate_onnx_model(
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_common/states/states.py", line 16, in wrapped_func
    return func(self, *args, **kwargs)
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/runner/client_runner.py", line 1187, in translate_onnx_model
    parser.translate_onnx_model(
  File ".../hailo8/model_quantization/.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 ".../hailo8/model_quantization/.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 ".../hailo8/model_quantization/.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 ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/translator.py", line 83, in convert_model
    self._create_layers()
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/edge_nn_translator.py", line 38, in _create_layers
    self._update_vertices_info()
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_translator.py", line 320, in _update_vertices_info
    node.update_output_format()
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_graph.py", line 548, in update_output_format
    self.update_reshape_output_format(input_format)
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_graph.py", line 344, in update_reshape_output_format
    if self.is_spatial_flatten_reshape():
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_graph.py", line 3502, in is_spatial_flatten_reshape
    if self._is_spatial_flatten_with_features_to_heads_reshape():
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_graph.py", line 3553, in _is_spatial_flatten_with_features_to_heads_reshape
    if self.is_spatial_flatten_features_to_width():
  File ".../hailo8/model_quantization/.venv/lib/python3.10/site-packages/hailo_sdk_client/model_translator/onnx_translator/onnx_graph.py", line 3154, in is_spatial_flatten_features_to_width
    h, w, c = input_shapes[-3:]
ValueError: not enough values to unpack (expected 3, got 2)

Adding some debug info I can see that the problematic node is “gemm_output_reshape_new_reshape” with input shape [3136, 96].

I also compared hailo’s onnx file from the model zoo with mine in Netron and could spot some differences although coming from the same pytorch model.
As to why I’m not using the precompiled model from hailo model zoo, ultimatly I want to compile a custom trained swin_tiny.

Any pointer to solve this issue would be helpful or if someone has the code for exporting swin_tiny to ONNX laying around that would be very helpful as well.