From daf68c4f6fb5deed297e3f6a9c6c4ca579be30c0 Mon Sep 17 00:00:00 2001 From: tink2123 Date: Fri, 2 Jul 2021 10:58:31 +0000 Subject: [PATCH 1/2] fix interpolate for shape[i]=0, test=develop --- paddle/fluid/operators/interpolate_v2_op.cc | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/paddle/fluid/operators/interpolate_v2_op.cc b/paddle/fluid/operators/interpolate_v2_op.cc index a4353420c84a9..97e39e71a5569 100644 --- a/paddle/fluid/operators/interpolate_v2_op.cc +++ b/paddle/fluid/operators/interpolate_v2_op.cc @@ -35,7 +35,12 @@ static void Interpolate1DInferShapeCheck(framework::InferShapeContext* ctx) { interp_method)); const DataLayout data_layout = framework::StringToDataLayout( ctx->Attrs().Get("data_layout")); - + for (int i = 0; i < dim_x.size(); ++i) { + PADDLE_ENFORCE_NE(dim_x[i], 0, platform::errors::InvalidArgument( + "The shape of input(x) should be larged " + "than 0, bug received shape[%d] is %d ", + i, dim_x[i])); + } if (ctx->HasInputs("SizeTensor")) { // top prority size auto inputs_name = ctx->Inputs("SizeTensor"); @@ -134,6 +139,13 @@ static void Interpolate2DInferShapeCheck(framework::InferShapeContext* ctx) { const DataLayout data_layout = framework::StringToDataLayout( ctx->Attrs().Get("data_layout")); + for (int i = 0; i < dim_x.size(); ++i) { + PADDLE_ENFORCE_NE(dim_x[i], 0, platform::errors::InvalidArgument( + "The shape of input(x) should be larged " + "than 0, bug received shape[%d] is %d ", + i, dim_x[i])); + } + if (ctx->HasInputs("SizeTensor")) { // top prority size auto inputs_name = ctx->Inputs("SizeTensor"); @@ -246,6 +258,13 @@ static void Interpolate3DInferShapeCheck(framework::InferShapeContext* ctx) { const DataLayout data_layout = framework::StringToDataLayout( ctx->Attrs().Get("data_layout")); + for (int i = 0; i < dim_x.size(); ++i) { + PADDLE_ENFORCE_NE(dim_x[i], 0, platform::errors::InvalidArgument( + "The shape of input(x) should be larged " + "than 0, bug received shape[%d] is %d ", + i, dim_x[i])); + } + if (ctx->HasInputs("SizeTensor")) { // top prority size auto inputs_name = ctx->Inputs("SizeTensor"); From 3d8b10726f7b46ba6a7cd6c6afb866eec1b8ad31 Mon Sep 17 00:00:00 2001 From: tink2123 Date: Mon, 5 Jul 2021 06:20:33 +0000 Subject: [PATCH 2/2] fix test_trilinear_interp_v2 random failure, test=develop --- .../fluid/tests/unittests/test_bicubic_interp_v2_op.py | 6 ++++++ .../fluid/tests/unittests/test_trilinear_interp_v2_op.py | 2 ++ 2 files changed, 8 insertions(+) diff --git a/python/paddle/fluid/tests/unittests/test_bicubic_interp_v2_op.py b/python/paddle/fluid/tests/unittests/test_bicubic_interp_v2_op.py index b1ec74411987a..58d8d0f53d07b 100644 --- a/python/paddle/fluid/tests/unittests/test_bicubic_interp_v2_op.py +++ b/python/paddle/fluid/tests/unittests/test_bicubic_interp_v2_op.py @@ -517,6 +517,11 @@ def test_size_type(): out = interpolate( x, size={2, 2}, mode='bicubic', align_corners=False) + def test_input_shape(): + x = fluid.data(name="x", shape=[2, 1, 0, 0], dtype="float32") + out = interpolate( + x, size=[3, 3], mode="bicubic", align_corners=False) + self.assertRaises(ValueError, test_mode_type) self.assertRaises(ValueError, test_input_shape) self.assertRaises(TypeError, test_align_corcers) @@ -534,6 +539,7 @@ def test_size_type(): self.assertRaises(ValueError, test_size_and_scale) self.assertRaises(ValueError, test_size_and_scale2) self.assertRaises(TypeError, test_size_type) + self.assertRaises(ValueError, test_input_shape) if __name__ == "__main__": diff --git a/python/paddle/fluid/tests/unittests/test_trilinear_interp_v2_op.py b/python/paddle/fluid/tests/unittests/test_trilinear_interp_v2_op.py index 1f8ff4963ec3d..9f46b539a04b6 100755 --- a/python/paddle/fluid/tests/unittests/test_trilinear_interp_v2_op.py +++ b/python/paddle/fluid/tests/unittests/test_trilinear_interp_v2_op.py @@ -21,6 +21,8 @@ import paddle.fluid as fluid from paddle.nn.functional import interpolate +np.random.seed(123) + def trilinear_interp_np(input, out_d,