diff --git a/paddle/fluid/operators/pixel_unshuffle_op.cc b/paddle/fluid/operators/pixel_unshuffle_op.cc deleted file mode 100644 index 52b7452d7a8cc..0000000000000 --- a/paddle/fluid/operators/pixel_unshuffle_op.cc +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. -// -// Licensed 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. - -#include "paddle/fluid/framework/infershape_utils.h" -#include "paddle/fluid/framework/op_registry.h" -#include "paddle/fluid/framework/op_version_registry.h" -#include "paddle/phi/core/infermeta_utils.h" -#include "paddle/phi/infermeta/backward.h" -#include "paddle/phi/infermeta/unary.h" - -namespace paddle { -namespace operators { - -class PixelUnshuffleOp : public framework::OperatorWithKernel { - public: - using framework::OperatorWithKernel::OperatorWithKernel; -}; - -class PixelUnshuffleOpMaker : public framework::OpProtoAndCheckerMaker { - public: - void Make() override { - AddInput("X", - "(Tensor, default Tensor), " - "the input feature data of PixelUnshuffleOp, the layout is " - "[N, C, H, W] or [N, H, W, C]."); - AddOutput("Out", - "(Tensor, default Tensor), the output of " - "PixelUnshuffleOp. The layout is [N, C*factor^2, H/factor, " - "W/factor] or [N, H/factor, W/factor, C*factor^2]."); - AddAttr("downscale_factor", - "the factor to decrease spatial resolution by.") - .SetDefault(1); - AddAttr( - "data_format", - "An optional string from: \"NHWC\", \"NCHW\". " - "Defaults to \"NHWC\", Specify the data format of the input data.") - .SetDefault("NCHW"); - - AddComment(R"DOC( - Pixel Unshuffle operator - This operator rearranges elements in a tensor of shape :math:`(*, C, H, W)` - to a tensor of shape :math:`(*, C\times r^2, H / r, W / r)`. - - This operation is the reversion of PixelShuffle operation. - - Please refer to the paper: - `Real-Time Single Image and Video Super-Resolution Using an Efficient - Sub-Pixel Convolutional Neural Network `_ - by Shi et. al (2016) for more details. - )DOC"); - } -}; - -template -class PixelUnshuffleGradOpMaker : public framework::SingleGradOpMaker { - public: - using framework::SingleGradOpMaker::SingleGradOpMaker; - - protected: - void Apply(GradOpPtr op) const override { - op->SetType("pixel_unshuffle_grad"); - op->SetInput(framework::GradVarName("Out"), this->OutputGrad("Out")); - op->SetAttrMap(this->Attrs()); - op->SetOutput(framework::GradVarName("X"), this->InputGrad("X")); - } -}; - -class PixelUnshuffleGradOp : public framework::OperatorWithKernel { - public: - using framework::OperatorWithKernel::OperatorWithKernel; -}; - -} // namespace operators -} // namespace paddle - -namespace ops = paddle::operators; -DECLARE_INFER_SHAPE_FUNCTOR(pixel_unshuffle, - PixelUnshuffleInferShapeFunctor, - PD_INFER_META(phi::PixelUnshuffleInferMeta)); - -REGISTER_OPERATOR(pixel_unshuffle, - ops::PixelUnshuffleOp, - ops::PixelUnshuffleOpMaker, - ops::PixelUnshuffleGradOpMaker, - ops::PixelUnshuffleGradOpMaker, - PixelUnshuffleInferShapeFunctor); - -DECLARE_INFER_SHAPE_FUNCTOR(pixel_unshuffle_grad, - PixelUnshuffleGradInferShapeFunctor, - PD_INFER_META(phi::PixelUnshuffleGradInferMeta)); - -REGISTER_OPERATOR(pixel_unshuffle_grad, - ops::PixelUnshuffleGradOp, - PixelUnshuffleGradInferShapeFunctor); diff --git a/paddle/phi/api/yaml/backward.yaml b/paddle/phi/api/yaml/backward.yaml index b6eeb5e07005c..2f48bb80478e6 100644 --- a/paddle/phi/api/yaml/backward.yaml +++ b/paddle/phi/api/yaml/backward.yaml @@ -1646,6 +1646,15 @@ kernel : func : pixel_shuffle_grad +- backward_op : pixel_unshuffle_grad + forward : pixel_unshuffle (Tensor x, int downscale_factor=1, str data_format="NCHW") -> Tensor(out) + args : (Tensor out_grad, int downscale_factor, str data_format) + output : Tensor(x_grad) + infer_meta : + func : PixelUnshuffleGradInferMeta + kernel : + func : pixel_unshuffle_grad + - backward_op : poisson_grad forward : poisson (Tensor x) -> Tensor(out) args : (Tensor out_grad) diff --git a/paddle/phi/api/yaml/op_compat.yaml b/paddle/phi/api/yaml/op_compat.yaml index 31125b8df0ce7..8a85147a66da0 100755 --- a/paddle/phi/api/yaml/op_compat.yaml +++ b/paddle/phi/api/yaml/op_compat.yaml @@ -2103,6 +2103,13 @@ outputs : out : Out +- op : pixel_unshuffle + backward : pixel_unshuffle_grad + inputs : + x : X + outputs : + out : Out + - op : poisson inputs : x : X diff --git a/paddle/phi/api/yaml/ops.yaml b/paddle/phi/api/yaml/ops.yaml index 4e67144ba8a89..c93f94c2b3320 100644 --- a/paddle/phi/api/yaml/ops.yaml +++ b/paddle/phi/api/yaml/ops.yaml @@ -1934,6 +1934,15 @@ func : pixel_shuffle backward : pixel_shuffle_grad +- op : pixel_unshuffle + args : (Tensor x, int downscale_factor=1, str data_format="NCHW") + output : Tensor + infer_meta : + func : PixelUnshuffleInferMeta + kernel : + func : pixel_unshuffle + backward : pixel_unshuffle_grad + - op : poisson args : (Tensor x) output : Tensor diff --git a/paddle/phi/ops/compat/pixel_unshuffle_sig.cc b/paddle/phi/ops/compat/pixel_unshuffle_sig.cc deleted file mode 100644 index 6c983c1e24c28..0000000000000 --- a/paddle/phi/ops/compat/pixel_unshuffle_sig.cc +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved. -// -// Licensed 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. - -#include "paddle/phi/core/compat/op_utils.h" - -namespace phi { - -KernelSignature PixelUnshuffleGradOpArgumentMapping( - const ArgumentMappingContext& ctx UNUSED) { - return KernelSignature("pixel_unshuffle_grad", - {"Out@GRAD"}, - {"downscale_factor", "data_format"}, - {"X@GRAD"}); -} - -} // namespace phi - -PD_REGISTER_ARG_MAPPING_FN(pixel_unshuffle_grad, - phi::PixelUnshuffleGradOpArgumentMapping); diff --git a/test/legacy_test/test_pixel_unshuffle.py b/test/legacy_test/test_pixel_unshuffle.py index ec6ce803d1277..eb2c287b3f886 100644 --- a/test/legacy_test/test_pixel_unshuffle.py +++ b/test/legacy_test/test_pixel_unshuffle.py @@ -69,8 +69,8 @@ def pixel_unshuffle_np(x, down_factor, data_format="NCHW"): def pixel_unshuffle_wrapper(x, downscale_factor, data_format): - return paddle._legacy_C_ops.pixel_unshuffle( - x, "downscale_factor", downscale_factor, "data_format", data_format + return paddle.nn.functional.pixel_unshuffle( + x, downscale_factor, data_format )