diff options
author | Dwight Lidman <dwight.lidman@arm.com> | 2020-11-16 17:40:46 +0100 |
---|---|---|
committer | patrik.gustavsson <patrik.gustavsson@arm.com> | 2020-11-20 09:51:15 +0000 |
commit | c7187434c11151a6a03f252c8718f3bf6445ef5b (patch) | |
tree | c17655e6a888f567aa5dacc38eff54b5a348c00b /ethosu/vela/test/test_supported_operators.py | |
parent | 8956761a84f413e6f4c9c7d6e4409b145f81c289 (diff) | |
download | ethos-u-vela-c7187434c11151a6a03f252c8718f3bf6445ef5b.tar.gz |
MLBEDSW-3302: Reject per-channel scaling for unsupported ops
Vela only supports per-channel scaling for
convolution ops. This commit adds a check that
puts ops with per-channel scaling on the CPU.
A caveat worth mentioning is that neither
TensorFlow Lite or TensorFlow Lite Micro support
per-channel scaling for the CPU placed op,
however the problem is moved away from Vela.
This commit also changes a small utility function
in supported_operators.py used for docstring
formatting.
Signed-off-by: Dwight Lidman <dwight.lidman@arm.com>
Change-Id: I9ed090592f1d05dd4566d3e54dba1ef405299383
Diffstat (limited to 'ethosu/vela/test/test_supported_operators.py')
-rw-r--r-- | ethosu/vela/test/test_supported_operators.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/ethosu/vela/test/test_supported_operators.py b/ethosu/vela/test/test_supported_operators.py index 62de0d1d..86d24757 100644 --- a/ethosu/vela/test/test_supported_operators.py +++ b/ethosu/vela/test/test_supported_operators.py @@ -100,6 +100,28 @@ def test_constraint_tens_quant_scale(): assert not support.is_operator_supported(op) +def test_constraint_tens_quant_per_axis_not_supp(): + # Quantization scale cannot be array-valued for elemwise ops + qp = QuantizationParameters() + qp.zero_point = np.zeros((1, 3)) + qp.scale_f32 = np.ones((1, 3)) + op = testutil.create_elemwise_op(Op.Mul, "op", [1, 8, 8, 8], [], [1, 8, 8, 8], ifm_quant=qp) + assert not support.is_operator_supported(op) + + +def test_constraint_tens_quant_per_axis_is_supp(): + op = testutil.create_op_with_quant_tensors( + Op.Conv2DBias, [1, 1, 1, 3], [1, 1, 1, 3], weights_shape=[1, 1, 1, 3], bias_shape=[1, 1, 1, 3] + ) + op.attrs = {"stride_w": 1, "stride_h": 1} + assert support.is_operator_supported(op) + qp = QuantizationParameters() + qp.zero_point = np.zeros((1, 3)) + qp.scale_f32 = np.ones((1, 3)) + op.bias.quantization = qp + assert support.is_operator_supported(op) + + def test_constraint_faf(): # Fused activation functions, if set, must be a valid op type op = testutil.create_op_with_quant_tensors(Op.Relu, [1, 8, 8, 8], [1, 8, 8, 8]) |