From fb79b7dbb133b0fc770d4b7a67d8c8276aa9388c Mon Sep 17 00:00:00 2001 From: zxy844288792 Date: Mon, 12 Oct 2020 19:19:30 +0000 Subject: [PATCH 1/9] Added support for LRN operator --- python/tvm/contrib/target/onnx.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/python/tvm/contrib/target/onnx.py b/python/tvm/contrib/target/onnx.py index a38bcf5bcefa..c6ec5b994989 100644 --- a/python/tvm/contrib/target/onnx.py +++ b/python/tvm/contrib/target/onnx.py @@ -617,6 +617,20 @@ def convert_attributes(cls, attrs): return {"value": 1} +class LRN(OpConverter): + """ Operator converter for LRN. + """ + + @classmethod + def convert_attributes(cls, attrs): + return { + 'alpha': attrs.alpha, + 'beta': attrs.beta, + 'bias': attrs.bias, + 'size': attrs.size + #axis? + } + relay_to_onnx_op_mapping = { "reshape": Reshape, "nn.conv2d": Conv, @@ -650,6 +664,7 @@ def convert_attributes(cls, attrs): "layout_transform": LayoutTransform, "clip": Clip, "expand_dims": Expand, + 'nn.lrn': LRN, } From 1e3738675f046bd8539f86be40fdf4868d743392 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 24 Jun 2021 01:14:17 +0000 Subject: [PATCH 2/9] [Relay to Onnx] * Added unit test case for LRN --- tests/python/contrib/test_onnx.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/python/contrib/test_onnx.py b/tests/python/contrib/test_onnx.py index d99946d19d66..dcbef59554b5 100644 --- a/tests/python/contrib/test_onnx.py +++ b/tests/python/contrib/test_onnx.py @@ -515,6 +515,20 @@ def verify_expand_dims(dshape, axis, num_newaxis, dtype="float32"): verify_expand_dims((1, 1, 1001), 2, 2) +def test_lrn(): + def verify_lrn(xshape, size, dtype="float32"): + x = relay.var("x", relay.ty.TensorType(xshape, dtype)) + y = relay.nn.lrn(x, size=size, axis=1, alpha=1.0, beta=1.0, bias=1.0) + func = relay.Function([x], y) + x_data = np.random.uniform(size=xshape).astype(dtype) + verify_results(func, [x_data], "test_lrn", rtol=1e-5, atol=1e-5) + + isize = [(1,1,480,640), (1,3,224,224)] + sizes = [1,3] + for i in isize: + for s in sizes: + verify_lrn(i, s) + if __name__ == "__main__": test_add() test_bias_add() @@ -538,3 +552,4 @@ def verify_expand_dims(dshape, axis, num_newaxis, dtype="float32"): test_layout_transform() test_clip() test_expand_dims() + test_lrn() From 4efc167dc0f7f0ec4f639189af5e8ccab87282dc Mon Sep 17 00:00:00 2001 From: root Date: Thu, 24 Jun 2021 05:55:20 +0000 Subject: [PATCH 3/9] * reformatted --- tests/python/contrib/test_onnx.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/python/contrib/test_onnx.py b/tests/python/contrib/test_onnx.py index dcbef59554b5..d00f1673d961 100644 --- a/tests/python/contrib/test_onnx.py +++ b/tests/python/contrib/test_onnx.py @@ -523,12 +523,13 @@ def verify_lrn(xshape, size, dtype="float32"): x_data = np.random.uniform(size=xshape).astype(dtype) verify_results(func, [x_data], "test_lrn", rtol=1e-5, atol=1e-5) - isize = [(1,1,480,640), (1,3,224,224)] - sizes = [1,3] + isize = [(1, 1, 480, 640), (1 ,3, 224, 224)] + sizes = [1, 3] for i in isize: for s in sizes: verify_lrn(i, s) + if __name__ == "__main__": test_add() test_bias_add() From f4c6cc7bf902d88f35d1a12fcd264ca56f40bb40 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 24 Jun 2021 06:05:15 +0000 Subject: [PATCH 4/9] * reformatted (2) --- tests/python/contrib/test_onnx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/python/contrib/test_onnx.py b/tests/python/contrib/test_onnx.py index d00f1673d961..eef66f29e27a 100644 --- a/tests/python/contrib/test_onnx.py +++ b/tests/python/contrib/test_onnx.py @@ -523,7 +523,7 @@ def verify_lrn(xshape, size, dtype="float32"): x_data = np.random.uniform(size=xshape).astype(dtype) verify_results(func, [x_data], "test_lrn", rtol=1e-5, atol=1e-5) - isize = [(1, 1, 480, 640), (1 ,3, 224, 224)] + isize = [(1, 1, 480, 640), (1, 3, 224, 224)] sizes = [1, 3] for i in isize: for s in sizes: From 68fafa974188d82d49c4f9a9b30085a8c47b3bde Mon Sep 17 00:00:00 2001 From: root Date: Thu, 24 Jun 2021 06:37:56 +0000 Subject: [PATCH 5/9] * fixed formatting issues in relay to onnx conversion script --- python/tvm/contrib/target/onnx.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/python/tvm/contrib/target/onnx.py b/python/tvm/contrib/target/onnx.py index c6ec5b994989..d70c13793e5c 100644 --- a/python/tvm/contrib/target/onnx.py +++ b/python/tvm/contrib/target/onnx.py @@ -618,18 +618,18 @@ def convert_attributes(cls, attrs): class LRN(OpConverter): - """ Operator converter for LRN. - """ + """ Operator converter for LRN.""" + + @classmethod + def convert_attributes(cls, attrs): + return { + 'alpha': attrs.alpha, + 'beta': attrs.beta, + 'bias': attrs.bias, + 'size': attrs.size + #axis? + } - @classmethod - def convert_attributes(cls, attrs): - return { - 'alpha': attrs.alpha, - 'beta': attrs.beta, - 'bias': attrs.bias, - 'size': attrs.size - #axis? - } relay_to_onnx_op_mapping = { "reshape": Reshape, @@ -664,7 +664,7 @@ def convert_attributes(cls, attrs): "layout_transform": LayoutTransform, "clip": Clip, "expand_dims": Expand, - 'nn.lrn': LRN, + "nn.lrn": LRN, } From 298abc7486bc0b23c299c456f63ca7c88ccfe52e Mon Sep 17 00:00:00 2001 From: root Date: Thu, 24 Jun 2021 06:45:34 +0000 Subject: [PATCH 6/9] * fixed formatting * change single quotes to double * set space to 4 instead of 2 --- python/tvm/contrib/target/onnx.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/python/tvm/contrib/target/onnx.py b/python/tvm/contrib/target/onnx.py index d70c13793e5c..9b03ec7c5ddb 100644 --- a/python/tvm/contrib/target/onnx.py +++ b/python/tvm/contrib/target/onnx.py @@ -618,17 +618,17 @@ def convert_attributes(cls, attrs): class LRN(OpConverter): - """ Operator converter for LRN.""" - - @classmethod - def convert_attributes(cls, attrs): - return { - 'alpha': attrs.alpha, - 'beta': attrs.beta, - 'bias': attrs.bias, - 'size': attrs.size - #axis? - } + """ Operator converter for LRN.""" + + @classmethod + def convert_attributes(cls, attrs): + return { + "alpha": attrs.alpha, + "beta": attrs.beta, + "bias": attrs.bias, + "size": attrs.size + #axis? + } relay_to_onnx_op_mapping = { From a82b822aa1abf119708572e22875c0172373d82f Mon Sep 17 00:00:00 2001 From: root Date: Thu, 24 Jun 2021 06:49:17 +0000 Subject: [PATCH 7/9] * reformatted onnx.py: corrected spaces --- python/tvm/contrib/target/onnx.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/tvm/contrib/target/onnx.py b/python/tvm/contrib/target/onnx.py index 9b03ec7c5ddb..3bd9772c9bee 100644 --- a/python/tvm/contrib/target/onnx.py +++ b/python/tvm/contrib/target/onnx.py @@ -618,7 +618,7 @@ def convert_attributes(cls, attrs): class LRN(OpConverter): - """ Operator converter for LRN.""" + """Operator converter for LRN.""" @classmethod def convert_attributes(cls, attrs): @@ -627,7 +627,7 @@ def convert_attributes(cls, attrs): "beta": attrs.beta, "bias": attrs.bias, "size": attrs.size - #axis? + # axis? } From 0d7c0db20be69f0744a010b837bdb1a7c33b8437 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 24 Jun 2021 21:05:31 +0000 Subject: [PATCH 8/9] [Relay to Onnx] LRN * Assert if axis != 1 --- python/tvm/contrib/target/onnx.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/python/tvm/contrib/target/onnx.py b/python/tvm/contrib/target/onnx.py index 3bd9772c9bee..bf81c98f5008 100644 --- a/python/tvm/contrib/target/onnx.py +++ b/python/tvm/contrib/target/onnx.py @@ -622,12 +622,19 @@ class LRN(OpConverter): @classmethod def convert_attributes(cls, attrs): + """axis attr is not supported as an argument in onnx. + Onnx only supports axis=1 (channels).""" + if attrs.get_int("axis") != 1: + raise RuntimeError( + "Unsupported axis %s in operator relay lrn operator. " + "Only axis = 1 is supported by Onnx." % (attrs.get_int("axis")) + ) + return { "alpha": attrs.alpha, "beta": attrs.beta, "bias": attrs.bias, "size": attrs.size - # axis? } From 15de155aef9467aee83ef0b0c6e5601d7af36966 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 24 Jun 2021 21:11:37 +0000 Subject: [PATCH 9/9] * fixed formatting --- python/tvm/contrib/target/onnx.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/python/tvm/contrib/target/onnx.py b/python/tvm/contrib/target/onnx.py index bf81c98f5008..b05265fa976a 100644 --- a/python/tvm/contrib/target/onnx.py +++ b/python/tvm/contrib/target/onnx.py @@ -630,12 +630,7 @@ def convert_attributes(cls, attrs): "Only axis = 1 is supported by Onnx." % (attrs.get_int("axis")) ) - return { - "alpha": attrs.alpha, - "beta": attrs.beta, - "bias": attrs.bias, - "size": attrs.size - } + return {"alpha": attrs.alpha, "beta": attrs.beta, "bias": attrs.bias, "size": attrs.size} relay_to_onnx_op_mapping = {