AndrewZhaoLuo commented on a change in pull request #8456:
URL: https://github.com/apache/tvm/pull/8456#discussion_r668979372
##########
File path: python/tvm/relay/frontend/onnx.py
##########
@@ -3193,6 +3196,79 @@ def get_scalar(x, dtype="float32"):
return _qnn.op.quantize(out, c_scale, c_zero_point, out_dtype=dtype)
+class ConvInteger(OnnxOpConverter):
+ """Operator converter for ConvInteger."""
+
+ @classmethod
+ def _impl_v10(cls, inputs, attr, params):
+ data = inputs[0]
+ weight = inputs[1]
+ data_zp = inputs[2]
+ weight_zp = inputs[3]
+ if data_zp is None:
+ data_zp = _expr.const(0, "int32")
+ if weight_zp is None:
+ weight_zp = _expr.const(0, "int32")
+
+ input_type = infer_type(data)
+ input_shape = get_const_tuple(input_type.checked_type.shape)
+
+ ndim = len(input_shape)
+ kernel_type = infer_type(weight)
+ kernel_shape = get_const_tuple(kernel_type.checked_type.shape)
+ if "kernel_shape" not in attr:
+ attr["kernel_shape"] = kernel_shape[2:]
+
+ if "auto_pad" in attr:
+ attr["auto_pad"] = attr["auto_pad"].decode("utf-8")
+ if attr["auto_pad"] in ("SAME_UPPER", "SAME_LOWER"):
+ # Warning: Convolution does not yet support dynamic shapes,
+ # one will need to run dynamic_to_static on this model after
import
+ data = autopad(
+ data,
+ attr.get("strides", [1] * (ndim - 2)),
+ attr["kernel_shape"],
+ attr.get("dilations", [1] * (ndim - 2)),
+ ndim,
+ pad_value=data_zp,
+ mode=attr["auto_pad"],
+ )
+ elif attr["auto_pad"] == "VALID":
+ attr["pads"] = tuple([0 for i in range(ndim - 2)])
+ elif attr["auto_pad"] == "NOTSET":
+ pass
+ else:
+ msg = 'Value {} in attribute "auto_pad" of operator Conv is
invalid.'
+ raise
tvm.error.OpAttributeInvalid(msg.format(attr["auto_pad"]))
+ attr.pop("auto_pad")
+
+ out_channels = kernel_shape[0]
+ dilation = attr.get("dilations", [1] * (ndim - 2))
+ strides = attr.get("strides", [1] * (ndim - 2))
+ padding = attr["pads"] if "pads" in attr else 0
Review comment:
Should we throw if both pads and auto_pad are present?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]