diff --git a/python/tvm/relax/frontend/onnx/onnx_frontend.py b/python/tvm/relax/frontend/onnx/onnx_frontend.py index e16b109ab564..ee80436a8a01 100644 --- a/python/tvm/relax/frontend/onnx/onnx_frontend.py +++ b/python/tvm/relax/frontend/onnx/onnx_frontend.py @@ -2143,18 +2143,24 @@ def _impl_v18(cls, bb, inputs, attr, params): # Convert scales to sizes if needed. if scales is not None: - assert isinstance(scales, relax.Constant), "Only constant scales currently supported." - scales = scales.data.numpy() + if isinstance(scales, relax.Constant): + scales = scales.data.numpy() + elif isinstance(scales, relax.expr.ShapeExpr): + scales = [int(val.value) for val in scales.values] + else: + assert f"Type {type(scales)} for scale is currently unsupported." sizes = [] for i, dim in enumerate(x.struct_info.shape): sizes.append(cast(scales[i] * dim, "int64")) sizes = sizes[2:] else: - assert isinstance( - sizes, relax.Constant - ), "Only constant output size currently supported." - sizes = sizes.data.numpy().astype("int64").tolist()[2:] + if isinstance(sizes, relax.Constant): + sizes = sizes.data.numpy().astype("int64").tolist()[2:] + elif isinstance(sizes, relax.expr.ShapeExpr): + sizes = [int(val.value) for val in sizes.values][2:] + else: + assert f"Type {type(size)} for size is currently unsupported." return relax.op.image.resize2d( x, @@ -3751,6 +3757,7 @@ def _construct_nodes(self, graph: onnx.onnx_ml_pb2.GraphProto): # convert it to a tensor. shape_compatible_ops = [ "Reshape", + "Resize", "ConstantOfShape", "Gather", "Slice",