Skip to content

Commit 844a3dc

Browse files
committed
[Frontend] Asymmetric padding of convolution support
1 parent c21d1ee commit 844a3dc

File tree

3 files changed

+12
-23
lines changed

3 files changed

+12
-23
lines changed

python/tvm/relay/frontend/coreml.py

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

python/tvm/relay/frontend/keras.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -271,11 +271,7 @@ def _convert_convolution(inexpr, keras_layer, etab):
271271
in_w = keras_layer.input_shape[2]
272272
pad_t, pad_b = _get_pad_pair(in_h, dilated_kernel_h, stride_h)
273273
pad_l, pad_r = _get_pad_pair(in_w, dilated_kernel_w, stride_w)
274-
if pad_t == pad_b and pad_l == pad_r:
275-
params['padding'] = (pad_t, pad_l)
276-
else:
277-
inexpr = _op.nn.pad(data=inexpr, pad_width=(
278-
(0, 0), (0, 0), (pad_t, pad_b), (pad_l, pad_r)))
274+
params['padding'] = (pad_t, pad_l, pad_b, pad_r)
279275
else:
280276
msg = 'Padding with {} is not supported for operator Convolution ' \
281277
'in frontend Keras.'
@@ -319,11 +315,7 @@ def _convert_separable_convolution(inexpr, keras_layer, etab):
319315
in_w = keras_layer.input_shape[2]
320316
pad_t, pad_b = _get_pad_pair(in_h, kernel_h, stride_h)
321317
pad_l, pad_r = _get_pad_pair(in_w, kernel_w, stride_w)
322-
if pad_t == pad_b and pad_l == pad_r:
323-
params0['padding'] = (pad_t, pad_l)
324-
else:
325-
inexpr = _op.nn.pad(data=inexpr, pad_width=(
326-
(0, 0), (0, 0), (pad_t, pad_b), (pad_l, pad_r)))
318+
params0['padding'] = (pad_t, pad_l, pad_b, pad_r)
327319
else:
328320
msg = 'Padding with {} is not supported for operator Separable ' \
329321
'Convolution in frontend Keras.'

python/tvm/relay/frontend/tflite.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1124,10 +1124,14 @@ def convert_conv(self, op, conv_type):
11241124
pad_left, pad_right = get_pad_value(input_w, dilated_kernel_w, stride_w)
11251125
do_pad = not (pad_top == 0 and pad_bottom == 0 and pad_left == 0 and pad_right == 0)
11261126
if do_pad:
1127-
in_expr = _op.nn.pad(data=in_expr, pad_width=((0, 0),
1128-
(pad_top, pad_bottom),
1129-
(pad_left, pad_right),
1130-
(0, 0)))
1127+
if not input_tensor.qnn_params:
1128+
params['padding'] = [pad_top, pad_left, pad_bottom, pad_right]
1129+
else:
1130+
# TODO: we should support asymmetric padding for QNN too.
1131+
in_expr = _op.nn.pad(data=in_expr, pad_width=((0, 0),
1132+
(pad_top, pad_bottom),
1133+
(pad_left, pad_right),
1134+
(0, 0)))
11311135
else:
11321136
raise tvm.error.OpAttributeUnImplemented(
11331137
'Padding format {} is not supported for operator Conv.'.format(padding))

0 commit comments

Comments
 (0)