Skip to content

Commit d7b6fd6

Browse files
committed
[Frontend] Asymmetric padding of convolution support
1 parent 3e3ccce commit d7b6fd6

File tree

3 files changed

+5
-34
lines changed

3 files changed

+5
-34
lines changed

python/tvm/relay/frontend/coreml.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,22 +77,15 @@ def _ConvolutionLayerParams(op, inexpr, etab):
7777
pad_b = valid.paddingAmounts.borderAmounts[0].endEdgeSize
7878
pad_r = valid.paddingAmounts.borderAmounts[1].endEdgeSize
7979
if not all(v == 0 for v in (pad_t, pad_l, pad_b, pad_r)):
80-
inexpr = _op.nn.pad(data=inexpr, pad_width=((0, 0),
81-
(0, 0),
82-
(pad_t, pad_b),
83-
(pad_l, pad_r)))
80+
params['padding'] = (pad_t, pad_l, pad_b, pad_r)
8481
elif op.WhichOneof('ConvolutionPaddingType') == 'same':
8582
assert op.same.asymmetryMode == 0, "Only support BOTTOM_RIGHT_HEAVY mode, " \
8683
"which is used by tf/caffe and so on"
8784
kernel = params['kernel_size']
8885
strides = params['strides']
8986
pad_t, pad_b = get_pad_value(H, kernel[0], strides[0])
9087
pad_l, pad_r = get_pad_value(W, kernel[1], strides[1])
91-
inexpr = _op.nn.pad(data=inexpr, pad_width=((0, 0),
92-
(0, 0),
93-
(pad_t, pad_b),
94-
(pad_l, pad_r)))
95-
88+
params['padding'] = (pad_t, pad_l, pad_b, pad_r)
9689
else:
9790
raise NotImplementedError("Valid/Same convolution padding implemented")
9891

python/tvm/relay/frontend/keras.py

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -290,15 +290,7 @@ def _convert_convolution(inexpr, keras_layer, etab):
290290
in_w = keras_layer.input_shape[2]
291291
pad_t, pad_b = _get_pad_pair(in_h, dilated_kernel_h, stride_h)
292292
pad_l, pad_r = _get_pad_pair(in_w, dilated_kernel_w, stride_w)
293-
if pad_t == pad_b and pad_l == pad_r:
294-
params['padding'] = (pad_t, pad_l)
295-
elif etab.data_layout == 'NCHW':
296-
inexpr = _op.nn.pad(data=inexpr, pad_width=(
297-
(0, 0), (0, 0), (pad_t, pad_b), (pad_l, pad_r)))
298-
else:
299-
inexpr = _op.nn.pad(data=inexpr, pad_width=(
300-
(0, 0), (pad_t, pad_b), (pad_l, pad_r), (0, 0)))
301-
293+
params['padding'] = (pad_t, pad_l, pad_b, pad_r)
302294
else:
303295
msg = 'Padding with {} is not supported for operator Convolution ' \
304296
'in frontend Keras.'
@@ -424,15 +416,7 @@ def _convert_separable_convolution(inexpr, keras_layer, etab):
424416
in_w = keras_layer.input_shape[2]
425417
pad_t, pad_b = _get_pad_pair(in_h, kernel_h, stride_h)
426418
pad_l, pad_r = _get_pad_pair(in_w, kernel_w, stride_w)
427-
if pad_t == pad_b and pad_l == pad_r:
428-
params0['padding'] = (pad_t, pad_l)
429-
elif etab.data_layout == 'NCHW':
430-
inexpr = _op.nn.pad(data=inexpr, pad_width=(
431-
(0, 0), (0, 0), (pad_t, pad_b), (pad_l, pad_r)))
432-
else:
433-
inexpr = _op.nn.pad(data=inexpr, pad_width=(
434-
(0, 0), (pad_t, pad_b), (pad_l, pad_r), (0, 0)))
435-
419+
params0['padding'] = (pad_t, pad_l, pad_b, pad_r)
436420
else:
437421
msg = 'Padding with {} is not supported for operator Separable ' \
438422
'Convolution in frontend Keras.'

python/tvm/relay/frontend/tflite.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,13 +1308,7 @@ def convert_conv(self, op, conv_type):
13081308
pad_left, pad_right = get_pad_value(input_w, dilated_kernel_w, stride_w)
13091309
do_pad = not (pad_top == 0 and pad_bottom == 0 and pad_left == 0 and pad_right == 0)
13101310
if do_pad:
1311-
pad_value = 0
1312-
if input_tensor.qnn_params:
1313-
pad_value = get_scalar_from_constant(input_tensor.qnn_params['zero_point'])
1314-
in_expr = _op.nn.pad(data=in_expr, pad_width=((0, 0),
1315-
(pad_top, pad_bottom),
1316-
(pad_left, pad_right),
1317-
(0, 0)), pad_value=float(pad_value))
1311+
params['padding'] = [pad_top, pad_left, pad_bottom, pad_right]
13181312

13191313
else:
13201314
raise tvm.error.OpAttributeUnImplemented(

0 commit comments

Comments
 (0)