From 891f4721ad7fc3dc007692818ca4e292ea07ad69 Mon Sep 17 00:00:00 2001 From: wjj19950828 Date: Sat, 18 Sep 2021 13:06:31 +0800 Subject: [PATCH 1/2] support for textcnn --- python/tvm/relay/frontend/paddlepaddle.py | 31 +++++++++++++++++++ .../frontend/paddlepaddle/test_forward.py | 6 ++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/python/tvm/relay/frontend/paddlepaddle.py b/python/tvm/relay/frontend/paddlepaddle.py index a3f959a391c1..d1ce5c2e2987 100644 --- a/python/tvm/relay/frontend/paddlepaddle.py +++ b/python/tvm/relay/frontend/paddlepaddle.py @@ -1383,6 +1383,36 @@ def convert_pool2d(g, op, block): g.add_node(op.output("Out")[0], out) +def convert_max_pool2d_with_index(g, op, block): + """Operator converter for max_pool2d_with_index.""" + + adaptive = op.attr("adaptive") + global_pooling = op.attr("global_pooling") + ksize = op.attr("ksize") + paddings = op.attr("paddings") + if global_pooling: + adaptive = True + ksize = [1, 1] + + input_x = g.get_node(op.input("X")[0]) + + strides = op.attr("strides") + if isinstance(strides, int): + strides = [strides, strides] + if isinstance(ksize, int): + ksize = [ksize, ksize] + if isinstance(paddings, int): + paddings = [paddings] * 2 + + if not adaptive: + out = getattr(_op.nn, "max_pool2d")( + input_x, pool_size=ksize, strides=strides, padding=paddings + ) + else: + out = getattr(_op.nn, "adaptive_max_pool2d")(input_x, output_size=ksize) + g.add_node(op.output("Out")[0], out) + + def convert_padding(g, op, block): """Operator converter for padding.""" @@ -2218,6 +2248,7 @@ def convert_where(g, op, block): "nearest_interp_v2": convert_interpolate, "not_equal": convert_elementwise_op, "pool2d": convert_pool2d, + "max_pool2d_with_index": convert_max_pool2d_with_index, "pad1d": convert_padding, "pad2d": convert_padding, "pad3d": convert_padding, diff --git a/tests/python/frontend/paddlepaddle/test_forward.py b/tests/python/frontend/paddlepaddle/test_forward.py index 7caedeff75f5..86d45e4d550f 100644 --- a/tests/python/frontend/paddlepaddle/test_forward.py +++ b/tests/python/frontend/paddlepaddle/test_forward.py @@ -48,6 +48,7 @@ def get_paddle_model(func, input_spec): global PADDLE_TEST_DATA_ROOT_PATH model_path = Path(PADDLE_TEST_DATA_ROOT_PATH, "model") paddle.jit.save(func, str(model_path), input_spec=input_spec) + paddle.jit.save(func, "/paddle/pr_for_tvm/0905/tvm/inference_model_test/inference", input_spec=input_spec) baseline_model = paddle.jit.load(str(model_path)) shutil.rmtree(str(PADDLE_TEST_DATA_ROOT_PATH)) @@ -1339,15 +1340,16 @@ def pool2d2(inputs): @paddle.jit.to_static def pool2d3(inputs): - return nn.functional.max_pool2d( + output, max_indices = nn.functional.max_pool2d( inputs, kernel_size=2, stride=2, padding=0, return_mask=True ) + return output input_data = paddle.uniform(shape=[1, 2, 32, 32], dtype="float32", min=-1, max=1) verify_model(pool2d1, input_data=input_data) verify_model(pool2d2, input_data=input_data) # need op max_pool2d_with_index - # verify_model(pool2d3, input_data=input_data) + verify_model(pool2d3, input_data=input_data) @tvm.testing.uses_gpu From 52e706331799006b94def2efe09a778ecefa3ddb Mon Sep 17 00:00:00 2001 From: wjj19950828 Date: Sat, 18 Sep 2021 13:10:28 +0800 Subject: [PATCH 2/2] fixed bug --- tests/python/frontend/paddlepaddle/test_forward.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/python/frontend/paddlepaddle/test_forward.py b/tests/python/frontend/paddlepaddle/test_forward.py index 86d45e4d550f..cb314cb6b187 100644 --- a/tests/python/frontend/paddlepaddle/test_forward.py +++ b/tests/python/frontend/paddlepaddle/test_forward.py @@ -48,7 +48,6 @@ def get_paddle_model(func, input_spec): global PADDLE_TEST_DATA_ROOT_PATH model_path = Path(PADDLE_TEST_DATA_ROOT_PATH, "model") paddle.jit.save(func, str(model_path), input_spec=input_spec) - paddle.jit.save(func, "/paddle/pr_for_tvm/0905/tvm/inference_model_test/inference", input_spec=input_spec) baseline_model = paddle.jit.load(str(model_path)) shutil.rmtree(str(PADDLE_TEST_DATA_ROOT_PATH))