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.