onnx-coreml
onnx-coreml copied to clipboard
Key error pads
🐞Bug Description
Hi using opset_version=11, I'm trying to convert Architecture with Upscaling Layers and ReflectionPad2d from Pytorch to CoreML
Trace
1/214: Converting Node Type Sub 2/214: Converting Node Type ConstantOfShape 3/214: Converting Node Type Concat 4/214: Converting Node Type Reshape 5/214: Converting Node Type Slice 6/214: Converting Node Type Transpose 7/214: Converting Node Type Reshape 8/214: Converting Node Type Pad
KeyError Traceback (most recent call last)
~\Anaconda3\envs\torch\lib\site-packages\onnx_coreml\converter.py in convert(model, mode, image_input_names, preprocessing_args, image_output_names, deprocessing_args, class_labels, predicted_feature_name, add_custom_layers, custom_conversion_functions, onnx_coreml_input_shape_map, minimum_ios_deployment_target) 624 print("%d/%d: Converting Node Type %s" %(i+1, len(graph.nodes), node.op_type)) 625 if disable_coreml_rank5_mapping: --> 626 _convert_node_nd(builder, node, graph, err) 627 else: 628 _add_const_inputs_if_required(builder, node, graph, err)
~\Anaconda3\envs\torch\lib\site-packages\onnx_coreml_operators_nd.py in _convert_node_nd(builder, node, graph, err) 2387 def _convert_node_nd(builder, node, graph, err): # type: (NeuralNetworkBuilder, Node, Graph, ErrorHandling) -> None 2388 converter_fn = _get_node_converter_fn(builder, node, err) -> 2389 return converter_fn(builder, node, graph, err) 2390
~\Anaconda3\envs\torch\lib\site-packages\onnx_coreml_operators_nd.py in _convert_pad(builder, node, graph, err) 1331 ) 1332 else: -> 1333 _convert_pad_5d(builder, node, graph, err) 1334 1335 def _convert_matmul(builder, node, graph, err):
~\Anaconda3\envs\torch\lib\site-packages\onnx_coreml_operators.py in _convert_pad(builder, node, graph, err) 1365 1366 _add_conv_like_op(_add_pad, _get_pad_params, params_dict, -> 1367 builder, node, graph, err) 1368 1369 # update map
~\Anaconda3\envs\torch\lib\site-packages\onnx_coreml_operators.py in _add_conv_like_op(add_func, get_params_func, params_dict, builder, node, graph, err) 215 216 else: --> 217 get_params_func(builder, node, graph, err, params_dict) 218 add_func(node.inputs, node.outputs, params_dict=params_dict, builder=builder, node=node, graph=graph, err=err) 219
~\Anaconda3\envs\torch\lib\site-packages\onnx_coreml_operators.py in _get_pad_params(builder, node, graph, err, params_dict, axis) 1308 def _get_pad_params(builder, node, graph, err, params_dict, axis=None): 1309 -> 1310 pads = node.attrs['pads'] 1311 if not (len(pads) % 2 == 0 and len(pads) >= 2): 1312 return err.unsupported_op_configuration(builder, node, graph,
KeyError: 'pads'
To Reproduce
`OnnxModel
from onnx_coreml import convert
onnx_model = onnx.load('pytorch_model.onnx')
onnx.checker.check_model(onnx_model)
coreml_model = convert(
onnx_model,
minimum_ios_deployment_target='13'
)
coreml_model.save('my_model.mlmodel')
System environment (please complete the following information):
coremltools==3.3 onnx-coreml==1.2 Python : 3.6 Framework : Pytorch == 1.4
Also the same issue here. It works okay on opset 9 or 10.
Traceback (most recent call last):
File "convert.py", line 138, in <module>
start_conversion()
File "convert.py", line 133, in start_conversion
create_coreml(name)
File "convert.py", line 63, in create_coreml
minimum_ios_deployment_target='13'
File "/usr/local/lib/python3.7/site-packages/onnx_coreml/converter.py", line 627, in convert
_convert_node_nd(builder, node, graph, err)
File "/usr/local/lib/python3.7/site-packages/onnx_coreml/_operators_nd.py", line 2389, in _convert_node_nd
return converter_fn(builder, node, graph, err)
File "/usr/local/lib/python3.7/site-packages/onnx_coreml/_operators_nd.py", line 1333, in _convert_pad
_convert_pad_5d(builder, node, graph, err)
File "/usr/local/lib/python3.7/site-packages/onnx_coreml/_operators.py", line 1367, in _convert_pad
builder, node, graph, err)
File "/usr/local/lib/python3.7/site-packages/onnx_coreml/_operators.py", line 217, in _add_conv_like_op
get_params_func(builder, node, graph, err, params_dict)
File "/usr/local/lib/python3.7/site-packages/onnx_coreml/_operators.py", line 1310, in _get_pad_params
pads = node.attrs['pads']
KeyError: 'pads'
System environment:
coremltools==3.3 onnx-coreml==1.2 Python : 3.7 Framework : Pytorch == 1.3
Same issue. Did anyone handle it?
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-19-6024faebb752> in <module>
18 model_dir=model_dir,
19 simplify=True,
---> 20 input_names=input_names, output_names=output_names, image_input_names=image_input_names
21 )
~/Desktop/coreml-benchmark-master/coreml_benchmark/utils.py in pytorch2coreml(model, dummy_input, name, model_dir, simplify, input_names, output_names, image_input_names, verbose, opset_version, minimum_ios_deployment_target)
47 minimum_ios_deployment_target=minimum_ios_deployment_target,
48 image_input_names=image_input_names,
---> 49 node_meta=node_meta
50 )
51
~/src/onnx-coreml/onnx_coreml/converter.py in convert(model, mode, image_input_names, preprocessing_args, image_output_names, deprocessing_args, class_labels, predicted_feature_name, add_custom_layers, custom_conversion_functions, onnx_coreml_input_shape_map, minimum_ios_deployment_target, node_meta)
632 print("%d/%d: Converting Node Type %s" %(i+1, len(graph.nodes), node.op_type))
633 if disable_coreml_rank5_mapping:
--> 634 _convert_node_nd(builder, node, graph, err)
635 else:
636 _add_const_inputs_if_required(builder, node, graph, err)
~/src/onnx-coreml/onnx_coreml/_operators_nd.py in _convert_node_nd(builder, node, graph, err)
2396 def _convert_node_nd(builder, node, graph, err): # type: (NeuralNetworkBuilder, Node, Graph, ErrorHandling) -> None
2397 converter_fn = _get_node_converter_fn(builder, node, err)
-> 2398 return converter_fn(builder, node, graph, err)
2399
~/src/onnx-coreml/onnx_coreml/_operators_nd.py in _convert_pad(builder, node, graph, err)
1331 )
1332 else:
-> 1333 _convert_pad_5d(builder, node, graph, err)
1334
1335 def _convert_matmul(builder, node, graph, err):
~/src/onnx-coreml/onnx_coreml/_operators.py in _convert_pad(builder, node, graph, err)
1365
1366 _add_conv_like_op(_add_pad, _get_pad_params, params_dict,
-> 1367 builder, node, graph, err)
1368
1369 # update map
~/src/onnx-coreml/onnx_coreml/_operators.py in _add_conv_like_op(add_func, get_params_func, params_dict, builder, node, graph, err)
215
216 else:
--> 217 get_params_func(builder, node, graph, err, params_dict)
218 add_func(node.inputs, node.outputs, params_dict=params_dict, builder=builder, node=node, graph=graph, err=err)
219
~/src/onnx-coreml/onnx_coreml/_operators.py in _get_pad_params(builder, node, graph, err, params_dict, axis)
1308 def _get_pad_params(builder, node, graph, err, params_dict, axis=None):
1309
-> 1310 pads = node.attrs['pads']
1311 if not (len(pads) % 2 == 0 and len(pads) >= 2):
1312 return err.unsupported_op_configuration(builder, node, graph,
KeyError: 'pads'
System environment:
coremltools==3.3 onnx-coreml==1.3 Python : 3.7 Framework : Pytorch == 1.4
@BorisKourt @Arxtage Looks like you are using opset version 11
could you please export to opset version 10? pytorch export has an option to export to opset version 10 (opset=10)
As mentioned in my post above it does work in opset 9 and 10. I am wondering what the issue with 11 is?
i had same issue. Does anyone have any ideas?