Hi,
I am trying to convert my custom onnx model into a usable hef. I am following the tutorial jupyter notebooks, but am stuck on the parser one. When attempting to translate the model with the following block:
runner = ClientRunner(hw_arch=chosen_hw_arch)
hn, npz = runner.translate_onnx_model(
onnx_path,
onnx_model_name,
start_node_names=[“input”],
end_node_names=[“output”],
net_input_shapes={“input”: [1, 3, 384, 416]},
)
I get this error:
[info] Translation started on ONNX model faux-redgold-4-14
[info] Restored ONNX model faux-redgold-4-14 (completion time: 00:00:00.30)
[info] Extracted ONNXRuntime meta-data for Hailo model (completion time: 00:00:00.71)
[info] Simplified ONNX model for a parsing retry attempt (completion time: 00:00:02.50)
ParsingWithRecommendationException Traceback (most recent call last)
File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py:239, in Parser.translate_onnx_model(self, model, net_name, start_node_names, end_node_names, net_input_shapes, augmented_path, disable_shape_inference, disable_rt_metadata_extraction, net_input_format, **kwargs)
238 try:
→ 239 parsing_results = self._parse_onnx_model_to_hn(
240 onnx_model=onnx_model,
241 net_name=valid_net_name,
242 start_node_names=start_node_names,
243 end_node_names=end_node_names,
244 net_input_shapes=net_input_shapes,
245 disable_shape_inference=disable_shape_inference,
246 net_input_format=net_input_format,
247 )
249 except Exception as e:File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py:320, in Parser._parse_onnx_model_to_hn(self, onnx_model, net_name, start_node_names, end_node_names, net_input_shapes, disable_shape_inference, net_input_format, **kwargs)
318 self._logger.warning(f"ONNX shape inference failed: {e!s}")
→ 320 return self.parse_model_to_hn(
321 onnx_model,
322 None,
323 net_name,
324 start_node_names,
325 end_node_names,
326 nn_framework=NNFramework.ONNX,
327 output_shapes=output_shapes,
328 net_input_format=net_input_format,
329 **kwargs,
330 )File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py:371, in Parser.parse_model_to_hn(self, model, values, net_name, start_node_names, end_node_names, nn_framework, output_shapes, net_input_format, rename_layers_by_blocks)
369 raise BackendRuntimeException(f"Unsupported NN framework {nn_framework}")
→ 371 fuser = HailoNNFuser(converter.convert_model(), net_name, converter.end_node_names)
372 hailo_nn = fuser.convert_model()File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/model_translator/translator.py:83, in HailoNNConverter.convert_model(self)
82 self._validate_bn_ops_in_training()
—> 83 self._create_layers()
84 self._add_layers_connections()File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/model_translator/edge_nn_translator.py:39, in EdgeNNConverter._create_layers(self)
38 self._update_vertices_info()
—> 39 self._add_direct_layers()
40 self._validate_processed_vertices()File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/model_translator/edge_nn_translator.py:162, in EdgeNNConverter._add_direct_layers(self)
161 if self._recommended_start_names or self._recommended_end_names:
→ 162 raise ParsingWithRecommendationException(
163 suggestions_msg,
164 recommended_start_node_names=list(self._recommended_start_names),
165 recommended_end_node_names=list(self._recommended_end_names),
166 parsing_report=self.get_parsing_report(from_error=True),
167 )ParsingWithRecommendationException: Parsing failed. The errors found in the graph are:
UnsupportedShuffleLayerError in op /30/Reshape: Failed to determine type of layer to create in node /30/Reshape
UnsupportedShuffleLayerError in op /37/Reshape: Failed to determine type of layer to create in node /37/Reshape
UnsupportedShuffleLayerError in op /30/Reshape_2: Failed to determine type of layer to create in node /30/Reshape_2
UnsupportedShuffleLayerError in op /37/Reshape_2: Failed to determine type of layer to create in node /37/Reshape_2
UnsupportedShuffleLayerError in op /30/Reshape_3: Failed to determine type of layer to create in node /30/Reshape_3
UnsupportedShuffleLayerError in op /30/Reshape_5: Failed to determine type of layer to create in node /30/Reshape_5
UnsupportedShuffleLayerError in op /30/Reshape_4: Failed to determine type of layer to create in node /30/Reshape_4
UnsupportedShuffleLayerError in op /30/Reshape_6: Failed to determine type of layer to create in node /30/Reshape_6
UnsupportedShuffleLayerError in op /37/Reshape_3: Failed to determine type of layer to create in node /37/Reshape_3
UnsupportedShuffleLayerError in op /37/Reshape_5: Failed to determine type of layer to create in node /37/Reshape_5
UnsupportedShuffleLayerError in op /37/Reshape_4: Failed to determine type of layer to create in node /37/Reshape_4
UnsupportedShuffleLayerError in op /37/Reshape_6: Failed to determine type of layer to create in node /37/Reshape_6
Please try to parse the model again, using these start node names: /30/Sigmoid_1, /30/Sigmoid_2, /30/Unsqueeze_1, /30/Unsqueeze, /37/Sigmoid_1, /37/Sigmoid_2, /30/Unsqueeze_2, /37/Unsqueeze_1, /37/Unsqueeze, /30/Unsqueeze_3, /37/Unsqueeze_3, /37/Unsqueeze_2
Please try to parse the model again, using these end node names: /37/Concat_6, /37/Concat_7, /30/Concat_7, /30/Concat_6, /37/Mul_11, /30/Mul_11, /Concat_7During handling of the above exception, another exception occurred:
ParsingWithRecommendationException Traceback (most recent call last)
Cell In[45], line 2
1 runner = ClientRunner(hw_arch=chosen_hw_arch)
----> 2 hn, npz = runner.translate_onnx_model(
3 onnx_path,
4 onnx_model_name,
5 start_node_names=[“input”],
6 end_node_names=[“output”],
7 net_input_shapes={“input”: [1, 3, 384, 416]},
8 )File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_common/states/states.py:16, in allowed_states..wrap..wrapped_func(self, *args, **kwargs)
12 if self._state not in states:
13 raise InvalidStateException(
14 f"The execution of {func.name} is not available under the state: {self._state.value}",
15 )
—> 16 return func(self, *args, **kwargs)File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/runner/client_runner.py:1187, in ClientRunner.translate_onnx_model(self, model, net_name, start_node_names, end_node_names, net_input_shapes, augmented_path, disable_shape_inference, disable_rt_metadata_extraction, net_input_format, **kwargs)
1144 “”"
1145 DFC API for parsing an ONNX model. This creates a runner with loaded HN (model) and
1146 parameters.
(…)
1184
1185 “”"
1186 parser = Parser()
→ 1187 parser.translate_onnx_model(
1188 model=model,
1189 net_name=net_name,
1190 start_node_names=start_node_names,
1191 end_node_names=end_node_names,
1192 net_input_shapes=net_input_shapes,
1193 augmented_path=augmented_path,
1194 disable_shape_inference=disable_shape_inference,
1195 disable_rt_metadata_extraction=disable_rt_metadata_extraction,
1196 net_input_format=net_input_format,
1197 **kwargs,
1198 )
1199 return self._finalize_parsing(parser.return_data)File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py:280, in Parser.translate_onnx_model(self, model, net_name, start_node_names, end_node_names, net_input_shapes, augmented_path, disable_shape_inference, disable_rt_metadata_extraction, net_input_format, **kwargs)
277 milestone = self._format_time_milestone(start_time)
278 self._logger.info(f"Simplified ONNX model for a parsing retry attempt (completion time: {milestone})“)
→ 280 parsing_results = self._parse_onnx_model_to_hn(
281 onnx_model=simplified_model,
282 net_name=valid_net_name,
283 start_node_names=start_node_names,
284 end_node_names=end_node_names,
285 net_input_shapes=net_input_shapes,
286 disable_shape_inference=disable_shape_inference,
287 net_input_format=net_input_format,
288 **kwargs,
289 )
291 milestone = self._format_time_milestone(start_time)
292 self._logger.info(f"Translation completed on ONNX model {valid_net_name} (completion time: {milestone})”)File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py:320, in Parser._parse_onnx_model_to_hn(self, onnx_model, net_name, start_node_names, end_node_names, net_input_shapes, disable_shape_inference, net_input_format, **kwargs)
317 except Exception as e:
318 self._logger.warning(f"ONNX shape inference failed: {e!s}")
→ 320 return self.parse_model_to_hn(
321 onnx_model,
322 None,
323 net_name,
324 start_node_names,
325 end_node_names,
326 nn_framework=NNFramework.ONNX,
327 output_shapes=output_shapes,
328 net_input_format=net_input_format,
329 **kwargs,
330 )File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/sdk_backend/parser/parser.py:371, in Parser.parse_model_to_hn(self, model, values, net_name, start_node_names, end_node_names, nn_framework, output_shapes, net_input_format, rename_layers_by_blocks)
368 else:
369 raise BackendRuntimeException(f"Unsupported NN framework {nn_framework}")
→ 371 fuser = HailoNNFuser(converter.convert_model(), net_name, converter.end_node_names)
372 hailo_nn = fuser.convert_model()
373 hailo_nn.validate_stage(HnStage.HN)File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/model_translator/translator.py:83, in HailoNNConverter.convert_model(self)
81 self._validate_model_params()
82 self._validate_bn_ops_in_training()
—> 83 self._create_layers()
84 self._add_layers_connections()
85 self._layers_graph.set_names_and_indices()File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/model_translator/edge_nn_translator.py:39, in EdgeNNConverter._create_layers(self)
37 self._add_input_layers()
38 self._update_vertices_info()
—> 39 self._add_direct_layers()
40 self._validate_processed_vertices()File /opt/venvs/hailo/lib/python3.10/site-packages/hailo_sdk_client/model_translator/edge_nn_translator.py:162, in EdgeNNConverter._add_direct_layers(self)
160 self._remove_original_nodes_suggestions()
161 if self._recommended_start_names or self._recommended_end_names:
→ 162 raise ParsingWithRecommendationException(
163 suggestions_msg,
164 recommended_start_node_names=list(self._recommended_start_names),
165 recommended_end_node_names=list(self._recommended_end_names),
166 parsing_report=self.get_parsing_report(from_error=True),
167 )ParsingWithRecommendationException: Parsing failed. The errors found in the graph are:
UnsupportedShuffleLayerError in op /30/Reshape: Failed to determine type of layer to create in node /30/Reshape
UnsupportedShuffleLayerError in op /37/Reshape: Failed to determine type of layer to create in node /37/Reshape
UnsupportedShuffleLayerError in op /30/Reshape_2: Failed to determine type of layer to create in node /30/Reshape_2
UnsupportedShuffleLayerError in op /37/Reshape_2: Failed to determine type of layer to create in node /37/Reshape_2
UnsupportedShuffleLayerError in op /30/Reshape_3: Failed to determine type of layer to create in node /30/Reshape_3
UnsupportedShuffleLayerError in op /30/Reshape_5: Failed to determine type of layer to create in node /30/Reshape_5
UnsupportedShuffleLayerError in op /30/Reshape_4: Failed to determine type of layer to create in node /30/Reshape_4
UnsupportedShuffleLayerError in op /30/Reshape_6: Failed to determine type of layer to create in node /30/Reshape_6
UnsupportedShuffleLayerError in op /37/Reshape_3: Failed to determine type of layer to create in node /37/Reshape_3
UnsupportedShuffleLayerError in op /37/Reshape_5: Failed to determine type of layer to create in node /37/Reshape_5
UnsupportedShuffleLayerError in op /37/Reshape_4: Failed to determine type of layer to create in node /37/Reshape_4
UnsupportedShuffleLayerError in op /37/Reshape_6: Failed to determine type of layer to create in node /37/Reshape_6
Please try to parse the model again, using these end node names: /37/Slice_27, /37/Slice_26, /37/Transpose, /30/Transpose, /37/Concat_2, /37/Slice_24, /30/Slice_24, /30/Slice_27, /30/Concat_2, /30/Slice_26, /30/Slice_25, /37/Slice_25