From 63f3ada7b979aafc0b1fd762dfedc8a2f275c8d6 Mon Sep 17 00:00:00 2001 From: chengjuntao <18222160892@163.com> Date: Fri, 13 Mar 2020 10:30:15 +0800 Subject: [PATCH] fix bug which input shape (#22965) * fix bug which input shape, test=develop * add error type,test=develop --- .../fluid/operators/deformable_conv_v1_op.cc | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/paddle/fluid/operators/deformable_conv_v1_op.cc b/paddle/fluid/operators/deformable_conv_v1_op.cc index 0b1e7f1757..76ba31db9d 100644 --- a/paddle/fluid/operators/deformable_conv_v1_op.cc +++ b/paddle/fluid/operators/deformable_conv_v1_op.cc @@ -177,22 +177,36 @@ class DeformableConvV1Op : public framework::OperatorWithKernel { std::vector output_shape({in_dims[0], filter_dims[0]}); for (size_t i = 0; i < strides.size(); ++i) { - output_shape.push_back(ConvOutputSize(in_dims[i + 2], filter_dims[i + 2], - dilations[i], paddings[i], - strides[i])); + if ((!ctx->IsRuntime()) && + (in_dims[i + 2] <= 0 || filter_dims[i + 2] <= 0)) { + output_shape.push_back(-1); + } else { + output_shape.push_back(ConvOutputSize(in_dims[i + 2], + filter_dims[i + 2], dilations[i], + paddings[i], strides[i])); + } + } + if (ctx->IsRuntime()) { + PADDLE_ENFORCE_EQ( + output_shape[1] % deformable_groups, 0U, + platform::errors::InvalidArgument( + "output num_filter must divide deformable group size.")); + PADDLE_ENFORCE_EQ(output_shape[2], offset_dims[2], + platform::errors::InvalidArgument( + "output height must equal to offset map height.")); + PADDLE_ENFORCE_EQ(output_shape[3], offset_dims[3], + platform::errors::InvalidArgument( + "output width must equal to offset map width.")); + PADDLE_ENFORCE_EQ( + offset_dims[1] % (filter_dims[2] * filter_dims[3]), 0U, + platform::errors::InvalidArgument( + "offset filter must divide deformable group size.")); + PADDLE_ENFORCE_EQ( + offset_dims[1] / (2 * filter_dims[2] * filter_dims[3]), + deformable_groups, + platform::errors::InvalidArgument( + "offset filter must divide deformable group size.")); } - PADDLE_ENFORCE_EQ(output_shape[1] % deformable_groups, 0U, - "output num_filter must divide deformable group size."); - PADDLE_ENFORCE_EQ(output_shape[2], offset_dims[2], - "output height must equal to offset map height."); - PADDLE_ENFORCE_EQ(output_shape[3], offset_dims[3], - "output width must equal to offset map width."); - PADDLE_ENFORCE_EQ(offset_dims[1] % (filter_dims[2] * filter_dims[3]), 0U, - "offset filter must divide deformable group size."); - PADDLE_ENFORCE_EQ(offset_dims[1] / (2 * filter_dims[2] * filter_dims[3]), - deformable_groups, - "offset filter must divide deformable group size."); - ctx->SetOutputDim("Output", framework::make_ddim(output_shape)); } -- GitLab