From: Matthew Brookhart Date: Sat, 9 May 2020 23:54:39 +0000 (-0700) Subject: Apparently, ONNX Conv with no 'pads' defaults to zero padding (#5548) X-Git-Tag: upstream/0.7.0~761 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0c43fa056b29c84e36366494a807583a3e702868;p=platform%2Fupstream%2Ftvm.git Apparently, ONNX Conv with no 'pads' defaults to zero padding (#5548) --- diff --git a/python/tvm/relay/frontend/onnx.py b/python/tvm/relay/frontend/onnx.py index f4bcb6b..1a4aee0 100644 --- a/python/tvm/relay/frontend/onnx.py +++ b/python/tvm/relay/frontend/onnx.py @@ -325,7 +325,6 @@ class Conv(OnnxOpConverter): def _impl_v1(cls, inputs, attr, params): # Use shape of input to determine convolution type. input_shape = infer_shape(inputs[0]) - if 'auto_pad' in attr: attr['auto_pad'] = attr['auto_pad'].decode('utf-8') if attr['auto_pad'] in ('SAME_UPPER', 'SAME_LOWER'): @@ -350,7 +349,10 @@ class Conv(OnnxOpConverter): attr.pop('auto_pad') elif len(attr['kernel_shape']) == 2: sym_pad = True - padding = attr['pads'] + if 'pads' in attr: + padding = attr['pads'] + else: + padding = [0, 0, 0, 0] for i in range(0, len(padding), 2): sym_pad = sym_pad and padding[i] == padding[i + 1] diff --git a/tests/python/frontend/onnx/test_forward.py b/tests/python/frontend/onnx/test_forward.py index 8bc9f45..a26c613 100644 --- a/tests/python/frontend/onnx/test_forward.py +++ b/tests/python/frontend/onnx/test_forward.py @@ -2028,8 +2028,18 @@ def test_or(): verify_or(indata=[x, y], dtype=bool) -def verify_conv(x_shape, w_shape, y_shape, padding, kernel_shape, strides, dilations, auto_pad="NOTSET"): - if padding is None: +def verify_conv(x_shape, w_shape, y_shape, padding, kernel_shape, strides, dilations, auto_pad="NOTSET", unset_pad=False): + if unset_pad: + node = helper.make_node('Conv', + inputs=['x', 'W'], + outputs=['y'], + kernel_shape=kernel_shape, + # Default values for other attributes: + strides=strides, + dilations=dilations, + # groups=1 + ) + elif padding is None: node = helper.make_node('Conv', inputs=['x', 'W'], outputs=['y'], @@ -2095,6 +2105,15 @@ def test_conv(): repeat(1, D), repeat(1, D), auto_pad="SAME_UPPER") + # Convolution with unset padding + verify_conv((1, 1) + repeat(5, D), + (1, 1) + repeat(3, D), + (1, 1) + repeat(3, D), + 2 * repeat(0, D), + repeat(3, D), + repeat(1, D), + repeat(1, D), + True) # Convolution with non uniform stride verify_conv((1, 1) + repeat(5, D), (1, 1) + repeat(3, D),