Skip to content

Commit 55c2329

Browse files
liym27Shixiaowei02
authored andcommitted
[cherry-pick] keep the size of symmetric padding is 2 for 2d and 3 for 3d. test=release/1.6 (#20903) (#20939)
1 parent 0b429a2 commit 55c2329

File tree

2 files changed

+41
-16
lines changed

2 files changed

+41
-16
lines changed

python/paddle/fluid/layers/nn.py

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2745,9 +2745,11 @@ def is_list_or_tuple(ele):
27452745
padding = padding[1:3]
27462746
padding = [ele for a_list in padding for ele in a_list]
27472747
padding = utils.convert_to_list(padding, 4, 'padding')
2748+
if utils._is_symmetric_padding(padding, 2):
2749+
padding = [padding[0], padding[2]]
2750+
27482751
else:
27492752
padding = utils.convert_to_list(padding, 2, 'padding')
2750-
padding = [padding[0], padding[0], padding[1], padding[1]]
27512753

27522754
return padding
27532755

@@ -2760,10 +2762,10 @@ def is_list_or_tuple(ele):
27602762
str(padding))
27612763
if padding == "VALID":
27622764
padding_algorithm = "VALID"
2763-
padding = [0, 0, 0, 0]
2765+
padding = [0, 0]
27642766
elif padding == "SAME":
27652767
padding_algorithm = "SAME"
2766-
padding = [0, 0, 0, 0]
2768+
padding = [0, 0]
27672769

27682770
padding = _update_padding(padding, data_format)
27692771

@@ -2989,15 +2991,14 @@ def is_list_or_tuple(ele):
29892991
padding = padding[1:4]
29902992
padding = [ele for a_list in padding for ele in a_list]
29912993
padding = utils.convert_to_list(padding, 6, 'padding')
2992-
2994+
if utils._is_symmetric_padding(padding, 3):
2995+
padding = [padding[0], padding[2], padding[4]]
29932996
elif is_list_or_tuple(padding) and len(padding) == 6:
29942997
padding = utils.convert_to_list(padding, 6, 'padding')
2998+
if utils._is_symmetric_padding(padding, 3):
2999+
padding = [padding[0], padding[2], padding[4]]
29953000
else:
29963001
padding = utils.convert_to_list(padding, 3, 'padding')
2997-
padding = [
2998-
padding[0], padding[0], padding[1], padding[1], padding[2],
2999-
padding[2]
3000-
]
30013002

30023003
return padding
30033004

@@ -3010,10 +3011,10 @@ def is_list_or_tuple(ele):
30103011
str(padding))
30113012
if padding == "VALID":
30123013
padding_algorithm = "VALID"
3013-
padding = [0, 0, 0, 0, 0, 0]
3014+
padding = [0, 0, 0]
30143015
elif padding == "SAME":
30153016
padding_algorithm = "SAME"
3016-
padding = [0, 0, 0, 0, 0, 0]
3017+
padding = [0, 0, 0]
30173018

30183019
padding = _update_padding(padding, data_format)
30193020

@@ -3556,6 +3557,8 @@ def is_list_or_tuple(ele):
35563557
padding = [ele for a_list in padding for ele in a_list]
35573558
padding = utils.convert_to_list(padding, 4, 'padding')
35583559

3560+
if utils._is_symmetric_padding(padding, 2):
3561+
padding = [padding[0], padding[2]]
35593562
else:
35603563
padding = utils.convert_to_list(padding, 2, 'padding')
35613564

@@ -3570,14 +3573,14 @@ def is_list_or_tuple(ele):
35703573
% str(pool_padding))
35713574
if pool_padding == "VALID":
35723575
padding_algorithm = "VALID"
3573-
pool_padding = [0, 0, 0, 0]
3576+
pool_padding = [0, 0]
35743577
if ceil_mode != False:
35753578
raise ValueError(
35763579
"When Attr(pool_padding) is \"VALID\", Attr(ceil_mode) must be False. "
35773580
"Received ceil_mode: True.")
35783581
elif pool_padding == "SAME":
35793582
padding_algorithm = "SAME"
3580-
pool_padding = [0, 0, 0, 0]
3583+
pool_padding = [0, 0]
35813584

35823585
pool_padding = update_padding(pool_padding, data_format)
35833586

@@ -3760,10 +3763,13 @@ def is_list_or_tuple(ele):
37603763
padding = padding[1:4]
37613764
padding = [ele for a_list in padding for ele in a_list]
37623765
padding = utils.convert_to_list(padding, 6, 'padding')
3766+
if utils._is_symmetric_padding(padding, 3):
3767+
padding = [padding[0], padding[2], padding[4]]
37633768

37643769
elif is_list_or_tuple(padding) and len(padding) == 6:
37653770
padding = utils.convert_to_list(padding, 6, 'padding')
3766-
3771+
if utils._is_symmetric_padding(padding, 3):
3772+
padding = [padding[0], padding[2], padding[4]]
37673773
else:
37683774
padding = utils.convert_to_list(padding, 3, 'padding')
37693775

@@ -3778,14 +3784,14 @@ def is_list_or_tuple(ele):
37783784
% str(pool_padding))
37793785
if pool_padding == "VALID":
37803786
padding_algorithm = "VALID"
3781-
pool_padding = [0, 0, 0, 0, 0, 0]
3787+
pool_padding = [0, 0, 0]
37823788
if ceil_mode != False:
37833789
raise ValueError(
37843790
"When Attr(pool_padding) is \"VALID\", ceil_mode must be False. "
37853791
"Received ceil_mode: True.")
37863792
elif pool_padding == "SAME":
37873793
padding_algorithm = "SAME"
3788-
pool_padding = [0, 0, 0, 0, 0, 0]
3794+
pool_padding = [0, 0, 0]
37893795

37903796
pool_padding = update_padding(pool_padding, data_format)
37913797

@@ -5125,6 +5131,9 @@ def is_list_or_tuple(ele):
51255131
filter_size = utils.convert_to_list(filter_size, 2,
51265132
'conv2d_transpose.filter_size')
51275133

5134+
if len(padding) == 4 and utils._is_symmetric_padding(padding, 2):
5135+
padding = [padding[0], padding[2]]
5136+
51285137
if output_size is None:
51295138
output_size = []
51305139
elif isinstance(output_size, list) or isinstance(output_size, int):
@@ -5360,13 +5369,13 @@ def is_list_or_tuple(ele):
53605369

53615370
elif is_list_or_tuple(padding) and len(padding) == 6:
53625371
padding = utils.convert_to_list(padding, 6, 'padding')
5372+
53635373
else:
53645374
padding = utils.convert_to_list(padding, 3, 'padding')
53655375
padding = [
53665376
padding[0], padding[0], padding[1], padding[1], padding[2],
53675377
padding[2]
53685378
]
5369-
53705379
return padding
53715380

53725381
padding_algorithm = "EXPLICIT"
@@ -5406,6 +5415,9 @@ def is_list_or_tuple(ele):
54065415
filter_size = utils.convert_to_list(filter_size, 3,
54075416
'conv3d_transpose.filter_size')
54085417

5418+
if len(padding) == 6 and utils._is_symmetric_padding(padding, 3):
5419+
padding = [padding[0], padding[2], padding[4]]
5420+
54095421
groups = 1 if groups is None else groups
54105422
filter_shape = [input_channel, num_filters // groups] + filter_size
54115423
img_filter = helper.create_parameter(

python/paddle/fluid/layers/utils.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,3 +231,16 @@ def assert_same_structure(nest1, nest2, check_types=True):
231231
"Second structure (%i elements): %s" %
232232
(len_nest1, nest1, len_nest2, nest2))
233233
_recursive_assert_same_structure(nest1, nest2, check_types)
234+
235+
236+
def _is_symmetric_padding(padding, data_dim):
237+
"""
238+
Check whether padding is symmetrical.
239+
"""
240+
assert len(padding) == data_dim * 2 or len(padding) == data_dim
241+
is_sys = True
242+
if len(padding) == data_dim * 2:
243+
for i in range(data_dim):
244+
if padding[i * 2] != padding[i * 2 + 1]:
245+
is_sys = False
246+
return is_sys

0 commit comments

Comments
 (0)