relay.frontend.from_onnx fails to convert max_pood2d to relay module:
Traceback (most recent call last):
File "calibration.py", line 637, in <module>
main()
File "calibration.py", line 574, in main
relayConverter = RelayConverter(args.filename[0])
File "/home/jack/Documents/workspace/quantization/model_converter.py", line 60, in __init__
mod, params = relay.frontend.from_onnx(model, shape)
File "/home/jack/Documents/workspace/playground/tvm_0.7.dev1/python/tvm/relay/frontend/onnx.py", line 1895, in from_onnx
mod, params = g.from_onnx(graph, opset)
File "/home/jack/Documents/workspace/playground/tvm_0.7.dev1/python/tvm/relay/frontend/onnx.py", line 1723, in from_onnx
op = self._convert_operator(op_name, inputs, attr, opset)
File "/home/jack/Documents/workspace/playground/tvm_0.7.dev1/python/tvm/relay/frontend/onnx.py", line 1823, in _convert_operator
sym = convert_map[op_name](inputs, attrs, self._params)
File "/home/jack/Documents/workspace/playground/tvm_0.7.dev1/python/tvm/relay/frontend/onnx.py", line 276, in _impl_v1
custom_check=dimension_constraint())(inputs, attr, params)
File "/home/jack/Documents/workspace/playground/tvm_0.7.dev1/python/tvm/relay/frontend/common.py", line 417, in __call__
return get_relay_op(op_name)(*inputs, **new_attrs)
File "/home/jack/Documents/workspace/playground/tvm_0.7.dev1/python/tvm/relay/op/nn/nn.py", line 665, in max_pool2d
layout, ceil_mode)
File "/home/jack/Documents/workspace/playground/tvm_0.7.dev1/python/tvm/_ffi/_ctypes/packed_func.py", line 213, in __call__
raise get_last_ffi_error()
tvm._ffi.base.TVMError: Traceback (most recent call last):
[bt] (2) /home/jack/Documents/workspace/playground/tvm_0.7.dev1/build/libtvm.so(TVMFuncCall+0x61) [0x7f229d7191e1]
[bt] (1) /home/jack/Documents/workspace/playground/tvm_0.7.dev1/build/libtvm.so(+0x8c9271) [0x7f229d357271]
[bt] (0) /home/jack/Documents/workspace/playground/tvm_0.7.dev1/build/libtvm.so(tvm::Array<tvm::PrimExpr, void> tvm::runtime::TVMPODValue_::AsObjectRef<tvm::Array<tvm::PrimExpr, void> >() const+0x1050) [0x7f229cea9cd0]
File "/home/jack/Documents/workspace/playground/tvm_0.7.dev1/include/tvm/runtime/packed_func.h", line 1353
TVMError: Check failed: type_code_ == kTVMObjectHandle (0 vs. 8) : expected Object but get int
I did the following fix and got the correct results:
--- a/python/tvm/relay/frontend/onnx.py
+++ b/python/tvm/relay/frontend/onnx.py
@@ -252,7 +252,7 @@ class Pool(OnnxOpConverter):
pad_tuple = tuple([val for pair in zip(*pad_tuple) for val in pair])
attr['pads'] = pad_tuple
elif attr['auto_pad'] == 'VALID':
- attr['pads'] = 0
+ attr['pads'] = (0, 0, 0, 0)
elif attr['auto_pad'] == 'NOTSET':
pass
else:
I wonder whether this fix is appropriate? Thanks!