From a7bac9fd2a7b9ca59636a469177429bd966e762c Mon Sep 17 00:00:00 2001 From: Qingchao Shen Date: Thu, 8 Jun 2023 11:22:06 +0800 Subject: [PATCH 1/3] fix deconv about the parameter output_padding --- python/tvm/relay/frontend/keras.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python/tvm/relay/frontend/keras.py b/python/tvm/relay/frontend/keras.py index 86131a6216bc..04d972e0faee 100644 --- a/python/tvm/relay/frontend/keras.py +++ b/python/tvm/relay/frontend/keras.py @@ -421,6 +421,8 @@ def _convert_convolution(inexpr, keras_layer, etab, data_layout, input_shape=Non params["groups"] = in_channels else: params["channels"] = n_filters + if is_deconv: + params["output_padding"] = keras_layer.output_padding if keras_layer.padding == "valid": pass # we insert a separate pad operator @@ -507,6 +509,8 @@ def _convert_convolution3d(inexpr, keras_layer, etab, data_layout, input_shape=N "kernel_layout": kernel_layout, } params["channels"] = n_filters + if is_deconv: + params["output_padding"] = keras_layer.output_padding if keras_layer.padding == "valid": pass From 5a8fa458d4391ef4d442d4aeb98e403e13d6388c Mon Sep 17 00:00:00 2001 From: Qingchao Shen Date: Thu, 8 Jun 2023 11:39:39 +0800 Subject: [PATCH 2/3] add test cases to capture the in deconv --- tests/python/frontend/keras/test_forward.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/python/frontend/keras/test_forward.py b/tests/python/frontend/keras/test_forward.py index 4a3b0108f888..debd50b37a2e 100644 --- a/tests/python/frontend/keras/test_forward.py +++ b/tests/python/frontend/keras/test_forward.py @@ -321,6 +321,9 @@ def test_forward_conv_transpose(self, keras_mod): data = keras_mod.layers.Input(shape=(32, 32, 128)) conv_funcs = [ keras_mod.layers.Conv2DTranspose(filters=64, kernel_size=(2, 2), padding="valid"), + keras_mod.layers.Conv2DTranspose( + filters=2, kernel_size=(3, 3), strides=(2, 2), output_padding=(1, 1) + ), ] for conv_func in conv_funcs: x = conv_func(data) @@ -619,6 +622,9 @@ def test_forward_conv3d_transpose(self, keras_mod): filters=1, kernel_size=(3, 3, 3), padding="valid", use_bias=False ), keras_mod.layers.Conv3DTranspose(filters=10, kernel_size=(2, 2, 2), padding="valid"), + keras_mod.layers.Conv3DTranspose( + filters=2, kernel_size=(3, 3, 3), strides=(2, 2, 2), output_padding=(1, 1, 1) + ), ] for conv_func in conv_funcs: x = conv_func(data) From aa66a0188099cf6765fa51662fe1fc53c72faa10 Mon Sep 17 00:00:00 2001 From: Qingchao Shen Date: Thu, 8 Jun 2023 17:52:57 +0800 Subject: [PATCH 3/3] Update keras.py --- python/tvm/relay/frontend/keras.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/tvm/relay/frontend/keras.py b/python/tvm/relay/frontend/keras.py index 04d972e0faee..16192617fe13 100644 --- a/python/tvm/relay/frontend/keras.py +++ b/python/tvm/relay/frontend/keras.py @@ -421,7 +421,7 @@ def _convert_convolution(inexpr, keras_layer, etab, data_layout, input_shape=Non params["groups"] = in_channels else: params["channels"] = n_filters - if is_deconv: + if is_deconv and keras_layer.output_padding: params["output_padding"] = keras_layer.output_padding if keras_layer.padding == "valid": pass @@ -509,7 +509,7 @@ def _convert_convolution3d(inexpr, keras_layer, etab, data_layout, input_shape=N "kernel_layout": kernel_layout, } params["channels"] = n_filters - if is_deconv: + if is_deconv and keras_layer.output_padding: params["output_padding"] = keras_layer.output_padding if keras_layer.padding == "valid":