mbrookhart commented on a change in pull request #6198: URL: https://github.com/apache/incubator-tvm/pull/6198#discussion_r464643632
########## File path: src/relay/op/dyn/image/resize.cc ########## @@ -0,0 +1,106 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/*! + * \file resize.cc + * \brief Image resize operators + */ +#include <tvm/relay/attrs/image.h> +#include <tvm/relay/op.h> +#include <tvm/tir/data_layout.h> + +#include "../../op_common.h" + +namespace tvm { +namespace relay { +namespace dyn { + +TVM_REGISTER_NODE_TYPE(ResizeAttrs); + +bool ResizeRel(const Array<Type>& types, int num_inputs, const Attrs& attrs, + const TypeReporter& reporter) { + // {data, size, out} + CHECK_EQ(types.size(), 3); + const auto* data = types[0].as<TensorTypeNode>(); + if (data == nullptr) return false; + + static const Layout kNCHW("NCHW"); + + const ResizeAttrs* param = attrs.as<ResizeAttrs>(); + CHECK(param != nullptr); + const Layout in_layout(param->layout); + auto layout_converter = tir::BijectiveLayout(in_layout, kNCHW); + CHECK(layout_converter.defined()) + << "Resize only support input layouts that are convertible from NCHW." + << " But got " << in_layout; + + auto oshape = layout_converter.ForwardShape(data->shape); + oshape.Set(2, Any()); + oshape.Set(3, Any()); + + DataType out_dtype = param->out_dtype; + if (out_dtype.bits() == 0) { + out_dtype = data->dtype; + } + + // assign output type + reporter->Assign(types[2], TensorType(layout_converter.BackwardShape(oshape), out_dtype)); + return true; +} + +// Positional relay function to create image operator +// used by frontend FFI. +Expr MakeResize(Expr data, Expr size, String layout, String method, + String coordinate_transformation_mode, DataType out_dtype) { + auto attrs = make_object<ResizeAttrs>(); + attrs->layout = std::move(layout); + attrs->method = std::move(method); + attrs->coordinate_transformation_mode = coordinate_transformation_mode; + attrs->out_dtype = out_dtype; + static const Op& op = Op::Get("dyn.image.resize"); + return Call(op, {data, size}, Attrs(attrs), {}); +} + +TVM_REGISTER_GLOBAL("relay.op.dyn.image._make.resize").set_body_typed(MakeResize); + +RELAY_REGISTER_OP("dyn.image.resize") + .describe(R"code(Perform resize to input array with nearest neighbour or bilinear interpolation. + +- **data**: data is 4D array of shape + (batch_size, channels, in_height, in_width) for NCHW + (batch_size, in_height, in_width, channels) for NHWC + +- **out**: Output is 4D array of shape + for layout NCHW + (batch_size, channels, size[0], size[1]) + + for layout NHWC + (batch_size, size[0], size[1], channels) +)code" TVM_ADD_FILELINE) + .set_attrs_type<ResizeAttrs>() + .set_num_inputs(2) + .add_argument("data", "Tensor", "The input tensor.") + .add_argument("size", "Tensor", "The output size tensor.") + .set_support_level(5) + .add_type_rel("DynResize", ResizeRel) Review comment: No, it isn't present in the static version either. ########## File path: python/tvm/relay/op/image/image.py ########## @@ -239,6 +245,7 @@ def affine_grid(data, target_shape=None): """ return _make.affine_grid(data, target_shape) + Review comment: I ran Yapf on it, which inserted this line. Looking up PeP8 to be sure, we need two lines between top level functions in a module: https://www.python.org/dev/peps/pep-0008/#blank-lines ---------------------------------------------------------------- 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org