aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Alfvén <johan.alfven@arm.com>2022-12-07 13:56:17 +0100
committerJohan Alfvén <johan.alfven@arm.com>2022-12-09 14:00:21 +0100
commitfaa4b7861317385ecd2357b7af9b90c6a5fbdd08 (patch)
treea7a6f98e8e17762a6a1b8f13358c71966d22cc05
parent92689d5ad0dd19a3249e71dd0563731d4c6527c8 (diff)
downloadethos-u-vela-faa4b7861317385ecd2357b7af9b90c6a5fbdd08.tar.gz
MLBEDSW-7072: Added bias shape constraint
- Only 1D bias shape is supported - Modified test to reflect the constraint - Update SUPPORTED_OPS.md Signed-off-by: Johan Alfven <johan.alfven@arm.com> Change-Id: I00ae4b229d5f89512cb94f87f276af61cc66a6fd
-rw-r--r--SUPPORTED_OPS.md6
-rw-r--r--ethosu/vela/test/test_tflite_supported_operators.py2
-rw-r--r--ethosu/vela/tflite_supported_operators.py11
3 files changed, 17 insertions, 2 deletions
diff --git a/SUPPORTED_OPS.md b/SUPPORTED_OPS.md
index e74a29fd..cee25e7b 100644
--- a/SUPPORTED_OPS.md
+++ b/SUPPORTED_OPS.md
@@ -1,7 +1,7 @@
# Supported Ops
This file was automatically generated by Vela using the `--supported-ops-report` parameter.
-Vela version: `3.6.0`
+Vela version: `3.6.1.dev1+g30e5320.d20221207`
This file complies with
[**Gitiles Markdown syntax**](https://github.com/google/gitiles/blob/master/Documentation/markdown.md)
@@ -129,6 +129,7 @@ This is a list of constraints that the CONV_2D operator must satisfy in order to
- Weight tensor must be 8-bit
- Weight tensor must be constant
- The sum of the weights cannot exceed 8323072
+- Optional Bias tensor must be of shape: 1D
- Optional Bias tensor must be of type: int32, int64
- Optional Bias tensor values must fit within 40-bits
@@ -144,6 +145,7 @@ This is a list of constraints that the DEPTHWISE_CONV_2D operator must satisfy i
- Weight tensor must be 8-bit
- Weight tensor must be constant
- The sum of the weights cannot exceed 8323072
+- Optional Bias tensor must be of shape: 1D
- Optional Bias tensor must be of type: int32, int64
- Optional Bias tensor values must fit within 40-bits
- For depth multipliers > 1, IFM channels must be 1 and OFM channels must be equal to the depth multiplier
@@ -162,6 +164,7 @@ This is a list of constraints that the FULLY_CONNECTED operator must satisfy in
- The IFM and OFM must have the same number of dimensions if keep_num_dims is set to true
- Weight tensor must be 8-bit
- Weight tensor must be constant
+- Optional Bias tensor must be of shape: 1D
- Optional Bias tensor must be of type: int32, int64
- Optional Bias tensor values must fit within 40-bits
@@ -326,6 +329,7 @@ This is a list of constraints that the TRANSPOSE_CONV operator must satisfy in o
- Weight tensor must be 8-bit
- Weight tensor must be constant
- The sum of the weights cannot exceed 8323072
+- Optional Bias tensor must be of shape: 1D
- Optional Bias tensor must be of type: int32, int64
- Optional Bias tensor values must fit within 40-bits
- Stride values for both width and height must be 2
diff --git a/ethosu/vela/test/test_tflite_supported_operators.py b/ethosu/vela/test/test_tflite_supported_operators.py
index d9b241fd..d091531d 100644
--- a/ethosu/vela/test/test_tflite_supported_operators.py
+++ b/ethosu/vela/test/test_tflite_supported_operators.py
@@ -62,7 +62,7 @@ def test_constraint_tens_quant_per_axis_not_supp():
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.Conv2DBias, [1, 1, 1, 3], [1, 1, 1, 3], weights_shape=[1, 1, 1, 3], bias_shape=[3]
)
op.attrs = {"stride_w": 1, "stride_h": 1}
assert support.is_operator_supported(op)
diff --git a/ethosu/vela/tflite_supported_operators.py b/ethosu/vela/tflite_supported_operators.py
index aabe8130..ea39b478 100644
--- a/ethosu/vela/tflite_supported_operators.py
+++ b/ethosu/vela/tflite_supported_operators.py
@@ -234,6 +234,7 @@ class TFLiteSupportedOperators:
self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_weights_type)
self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_weights_const)
self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_weights_limit)
+ self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_bias_shape)
self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_bias_type)
self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_bias_40bit)
# Transpose Conv specific checks:
@@ -275,6 +276,7 @@ class TFLiteSupportedOperators:
for op_type in TFLiteSupportedOperators.fc_vector_products:
self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_weights_type)
self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_weights_const)
+ self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_bias_shape)
self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_bias_type)
self.specific_constraints[op_type].append(TFLiteSupportedOperators.constraint_bias_40bit)
@@ -474,6 +476,15 @@ class TFLiteSupportedOperators:
valid = limit <= cls.weights_limit
return valid, f"Tensor '{weights.name}' has the sum of weights: {limit}"
+ @staticmethod
+ def constraint_bias_shape(op):
+ "Optional Bias tensor must be of shape: 1D"
+ bias = op.bias
+ if bias:
+ valid = len(bias.shape) == 1
+ return valid, f"Tensor '{bias.name}' has shape: {bias.shape}"
+ return True, "Op has no bias tensor"
+
@classmethod
@docstring_format_args([list_formatter(supported_bias_dtypes)])
def constraint_bias_type(cls, op):