未验证 提交 7b46fb0f 编写于 作者: Y yukavio 提交者: GitHub

fix generate_proposals and affine grid error info (#27636)

上级 6d9ae660
......@@ -26,8 +26,12 @@ template <typename T>
class CUDNNAffineGridOpKernel : public framework::OpKernel<T> {
public:
void Compute(const framework::ExecutionContext& ctx) const override {
PADDLE_ENFORCE(platform::is_gpu_place(ctx.GetPlace()),
"It must use CUDAPlace.");
PADDLE_ENFORCE_EQ(
platform::is_gpu_place(ctx.GetPlace()), true,
platform::errors::InvalidArgument("Only "
"support for CUDAPlace.Please switch "
"your context from CPUPlace to "
"CUDAPlace or update your cudnn."));
auto& dev_ctx = ctx.template device_context<platform::CUDADeviceContext>();
auto handle = dev_ctx.cudnn_handle();
auto* theta = ctx.Input<Tensor>("Theta");
......@@ -56,8 +60,11 @@ class CUDNNAffineGridOpKernel : public framework::OpKernel<T> {
cudnnSpatialTransformerDescriptor_t cudnn_st_desc =
st_desc.descriptor<T>(4, h_size_data);
PADDLE_ENFORCE(platform::dynload::cudnnSpatialTfGridGeneratorForward(
handle, cudnn_st_desc, theta_data, output_data));
PADDLE_ENFORCE_EQ(
platform::dynload::cudnnSpatialTfGridGeneratorForward(
handle, cudnn_st_desc, theta_data, output_data),
0, platform::errors::Fatal("Some errors has occurred "
"during forward computation in cudnn."));
}
};
......@@ -65,8 +72,12 @@ template <typename T>
class CUDNNAffineGridGradOpKernel : public framework::OpKernel<T> {
public:
void Compute(const framework::ExecutionContext& ctx) const override {
PADDLE_ENFORCE(platform::is_gpu_place(ctx.GetPlace()),
"It must use CUDAPlace.");
PADDLE_ENFORCE_EQ(platform::is_gpu_place(ctx.GetPlace()), true,
platform::errors::InvalidArgument(
"Only "
"support for CUDAPlace. Please switch "
"your context from CPUPlace to "
"CUDAPlace or update your cudnn."));
auto& dev_ctx = ctx.template device_context<platform::CUDADeviceContext>();
auto handle = dev_ctx.cudnn_handle();
auto output_grad = ctx.Input<Tensor>(framework::GradVarName("Output"));
......@@ -95,8 +106,12 @@ class CUDNNAffineGridGradOpKernel : public framework::OpKernel<T> {
const T* output_grad_data = output_grad->data<T>();
T* theta_grad_data = theta_grad->mutable_data<T>(ctx.GetPlace());
PADDLE_ENFORCE(platform::dynload::cudnnSpatialTfGridGeneratorBackward(
handle, cudnn_st_desc, output_grad_data, theta_grad_data));
PADDLE_ENFORCE_EQ(
platform::dynload::cudnnSpatialTfGridGeneratorBackward(
handle, cudnn_st_desc, output_grad_data, theta_grad_data),
0,
"Some errors "
"has occurred during forward computation in cudnn;");
}
};
......
......@@ -247,8 +247,6 @@ static void NMS(const platform::CUDADeviceContext &ctx, const Tensor &proposals,
const Tensor &sorted_indices, const T nms_threshold,
Tensor *keep_out) {
int boxes_num = proposals.dims()[0];
PADDLE_ENFORCE_EQ(boxes_num, sorted_indices.dims()[0]);
const int col_blocks = DIVUP(boxes_num, kThreadsPerBlock);
dim3 blocks(DIVUP(boxes_num, kThreadsPerBlock),
DIVUP(boxes_num, kThreadsPerBlock));
......
......@@ -12,6 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import paddle
import numpy as np
from paddle import fluid, nn
import paddle.fluid.dygraph as dg
......@@ -42,7 +43,7 @@ class AffineGridTestCase(unittest.TestCase):
self.theta = np.random.randn(*(self.theta_shape)).astype(self.dtype)
def fluid_layer(self, place):
# align_corners = True
paddle.enable_static()
main = fluid.Program()
start = fluid.Program()
with fluid.unique_name.guard():
......@@ -57,6 +58,7 @@ class AffineGridTestCase(unittest.TestCase):
return y_np
def functional(self, place):
paddle.enable_static()
main = fluid.Program()
start = fluid.Program()
with fluid.unique_name.guard():
......@@ -74,6 +76,7 @@ class AffineGridTestCase(unittest.TestCase):
return y_np
def paddle_dygraph_layer(self):
paddle.disable_static()
theta_var = dg.to_variable(
self.theta) if not self.invalid_theta else "invalid"
output_shape = dg.to_variable(
......@@ -88,8 +91,7 @@ class AffineGridTestCase(unittest.TestCase):
place = fluid.CPUPlace()
result1 = self.fluid_layer(place)
result2 = self.functional(place)
with dg.guard(place):
result3 = self.paddle_dygraph_layer()
result3 = self.paddle_dygraph_layer()
if self.align_corners:
np.testing.assert_array_almost_equal(result1, result2)
np.testing.assert_array_almost_equal(result2, result3)
......
......@@ -15,6 +15,7 @@
import unittest
import numpy as np
from op_test import OpTest
import paddle
def AffineGrid(theta, size, align_corners):
......@@ -113,4 +114,5 @@ class TestAffineGridOpCase4(TestAffineGridOp):
if __name__ == '__main__':
paddle.enable_static()
unittest.main()
......@@ -18,6 +18,7 @@ import unittest
import numpy as np
import sys
import math
import paddle
import paddle.fluid as fluid
from op_test import OpTest
from test_multiclass_nms_op import nms
......@@ -370,4 +371,5 @@ class TestGenerateProposalsOpNoBoxLeft(TestGenerateProposalsOp):
if __name__ == '__main__':
paddle.enable_static()
unittest.main()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册