This is an automated email from the ASF dual-hosted git repository.
yongwww pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm.git
The following commit(s) were added to refs/heads/main by this push:
new d6c3deaf36 [Relax][ONNX] Parse ONNX Upsample to Relax resize2d (#18180)
d6c3deaf36 is described below
commit d6c3deaf36687168407619a9cc5f6e346d4434ff
Author: ysh329 <[email protected]>
AuthorDate: Sat Aug 9 00:37:45 2025 +0800
[Relax][ONNX] Parse ONNX Upsample to Relax resize2d (#18180)
---
python/tvm/relax/frontend/onnx/onnx_frontend.py | 31 ++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/python/tvm/relax/frontend/onnx/onnx_frontend.py
b/python/tvm/relax/frontend/onnx/onnx_frontend.py
index 103275375b..e16b109ab5 100644
--- a/python/tvm/relax/frontend/onnx/onnx_frontend.py
+++ b/python/tvm/relax/frontend/onnx/onnx_frontend.py
@@ -3108,6 +3108,35 @@ class NonZero(OnnxOpConverter):
)
+class Upsample(OnnxOpConverter):
+ """Operator converter for Upsample (nearest mode)."""
+
+ @classmethod
+ def _impl_v9(cls, bb, inputs, attr, params):
+ scales = attr.get("scales")
+ assert len(scales) == 4
+ assert scales[0] == scales[1] == 1
+
+ inp_shape = [int(x) for x in inputs[0].struct_info.shape]
+ assert len(inp_shape) == 4
+ out_shape2d = [int(dim * scale) for dim, scale in zip(inp_shape[2:],
scales[2:])]
+
+ mode = attr.get("mode", b"nearest").decode("ascii")
+ if mode == "nearest":
+ mode = "nearest_neighbor"
+ msg = f'Value {mode} in attribute "mode" of operator Upsample is not
valid.'
+ assert mode in ("linear", "nearest_neighbor", "cubic"), msg
+
+ return relax.op.image.resize2d(
+ data=inputs[0],
+ roi=None,
+ size=relax.ShapeExpr(out_shape2d), # (H, W)
+ layout="NCHW",
+ method=mode,
+ coordinate_transformation_mode="asymmetric", # Align with Upsample
+ )
+
+
class HardSigmoid(OnnxOpConverter):
"""Converts an onnx HardSigmoid node into an equivalent Relax
expression."""
@@ -3500,7 +3529,7 @@ def _get_convert_map():
# "RoiAlign": RoiAlign,
# "NonMaxSuppression": NonMaxSuppression,
# "GridSample": GridSample,
- # "Upsample": Upsample,
+ "Upsample": Upsample,
# others
"DepthToSpace": DepthToSpace,
"SpaceToDepth": SpaceToDepth,