aboutsummaryrefslogtreecommitdiff
path: root/ethosu
diff options
context:
space:
mode:
authorRickard Bolin <rickard.bolin@arm.com>2023-09-29 12:48:29 +0000
committerRickard Bolin <rickard.bolin@arm.com>2023-10-11 11:07:22 +0000
commitb37a81bfce0c7ae3092e4b3c9f69e08644b84e25 (patch)
tree88f25785f8b978cc57ad4a7b4c83e8cea84033dd /ethosu
parent529b787f0321cbae1878ecb0994c60f670bc7ea1 (diff)
downloadethos-u-vela-b37a81bfce0c7ae3092e4b3c9f69e08644b84e25.tar.gz
MLBEDSW-8111: Update to TensorFlow 2.14
- Update to TensorFlow 2.14 and minimum required Python version to 3.9. - Update version pins on NumPy and FlatBuffers. - Add constraint to Offset attribute of StridedSlice operator Change-Id: I8c7122def963202e5f47e92b62be607935ed05cf Signed-off-by: Rickard Bolin <rickard.bolin@arm.com>
Diffstat (limited to 'ethosu')
-rw-r--r--ethosu/vela/test/test_tflite_supported_operators.py8
-rw-r--r--ethosu/vela/tflite/Buffer.py22
-rw-r--r--ethosu/vela/tflite/Operator.py22
-rw-r--r--ethosu/vela/tflite/StridedSliceOptions.py12
-rw-r--r--ethosu/vela/tflite_mapping.py3
-rw-r--r--ethosu/vela/tflite_supported_operators.py8
6 files changed, 71 insertions, 4 deletions
diff --git a/ethosu/vela/test/test_tflite_supported_operators.py b/ethosu/vela/test/test_tflite_supported_operators.py
index e5cc280b..d6b94789 100644
--- a/ethosu/vela/test/test_tflite_supported_operators.py
+++ b/ethosu/vela/test/test_tflite_supported_operators.py
@@ -529,6 +529,7 @@ def create_strided_slice():
op = create_strided_slice_op([1, 10, 10, 10], [1, 5, 5, 10], [127, 2, 2, 0], [0, 7, -3, 0])
op.attrs["begin_mask"] = 1
op.attrs["end_mask"] = 9
+ op.attrs["offset"] = False
assert support.is_operator_supported(op)
return op
@@ -540,6 +541,13 @@ def test_constraint_stridedslice_stride_values():
assert not support.is_operator_supported(op)
+def test_constraint_stridedslice_offset_false():
+ # Offset attribute must be False
+ op = create_strided_slice()
+ op.attrs["offset"] = True
+ assert not support.is_operator_supported(op)
+
+
def test_constraint_inputs_int32():
# both inputs must be type int32
op = testutil.create_elemwise_op(Op.SHL, "op", [1, 8, 8, 8], [1, 8, 8, 8], [1, 8, 8, 8])
diff --git a/ethosu/vela/tflite/Buffer.py b/ethosu/vela/tflite/Buffer.py
index e9d45a51..4629ded4 100644
--- a/ethosu/vela/tflite/Buffer.py
+++ b/ethosu/vela/tflite/Buffer.py
@@ -55,7 +55,21 @@ class Buffer(object):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(4))
return o == 0
-def BufferStart(builder): builder.StartObject(1)
+ # Buffer
+ def Offset(self):
+ o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(6))
+ if o != 0:
+ return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
+ return 0
+
+ # Buffer
+ def Size(self):
+ o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(8))
+ if o != 0:
+ return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
+ return 0
+
+def BufferStart(builder): builder.StartObject(3)
def Start(builder):
return BufferStart(builder)
def BufferAddData(builder, data): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(data), 0)
@@ -64,6 +78,12 @@ def AddData(builder, data):
def BufferStartDataVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def StartDataVector(builder, numElems):
return BufferStartDataVector(builder, numElems)
+def BufferAddOffset(builder, offset): builder.PrependUint64Slot(1, offset, 0)
+def AddOffset(builder, offset):
+ return BufferAddOffset(builder, offset)
+def BufferAddSize(builder, size): builder.PrependUint64Slot(2, size, 0)
+def AddSize(builder, size):
+ return BufferAddSize(builder, size)
def BufferEnd(builder): return builder.EndObject()
def End(builder):
return BufferEnd(builder) \ No newline at end of file
diff --git a/ethosu/vela/tflite/Operator.py b/ethosu/vela/tflite/Operator.py
index 2af3f8ce..23d787b3 100644
--- a/ethosu/vela/tflite/Operator.py
+++ b/ethosu/vela/tflite/Operator.py
@@ -194,7 +194,21 @@ class Operator(object):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(20))
return o == 0
-def OperatorStart(builder): builder.StartObject(9)
+ # Operator
+ def LargeCustomOptionsOffset(self):
+ o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(22))
+ if o != 0:
+ return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
+ return 0
+
+ # Operator
+ def LargeCustomOptionsSize(self):
+ o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(24))
+ if o != 0:
+ return self._tab.Get(flatbuffers.number_types.Uint64Flags, o + self._tab.Pos)
+ return 0
+
+def OperatorStart(builder): builder.StartObject(11)
def Start(builder):
return OperatorStart(builder)
def OperatorAddOpcodeIndex(builder, opcodeIndex): builder.PrependUint32Slot(0, opcodeIndex, 0)
@@ -239,6 +253,12 @@ def AddIntermediates(builder, intermediates):
def OperatorStartIntermediatesVector(builder, numElems): return builder.StartVector(4, numElems, 4)
def StartIntermediatesVector(builder, numElems):
return OperatorStartIntermediatesVector(builder, numElems)
+def OperatorAddLargeCustomOptionsOffset(builder, largeCustomOptionsOffset): builder.PrependUint64Slot(9, largeCustomOptionsOffset, 0)
+def AddLargeCustomOptionsOffset(builder, largeCustomOptionsOffset):
+ return OperatorAddLargeCustomOptionsOffset(builder, largeCustomOptionsOffset)
+def OperatorAddLargeCustomOptionsSize(builder, largeCustomOptionsSize): builder.PrependUint64Slot(10, largeCustomOptionsSize, 0)
+def AddLargeCustomOptionsSize(builder, largeCustomOptionsSize):
+ return OperatorAddLargeCustomOptionsSize(builder, largeCustomOptionsSize)
def OperatorEnd(builder): return builder.EndObject()
def End(builder):
return OperatorEnd(builder) \ No newline at end of file
diff --git a/ethosu/vela/tflite/StridedSliceOptions.py b/ethosu/vela/tflite/StridedSliceOptions.py
index ccc2701c..c0696e72 100644
--- a/ethosu/vela/tflite/StridedSliceOptions.py
+++ b/ethosu/vela/tflite/StridedSliceOptions.py
@@ -63,7 +63,14 @@ class StridedSliceOptions(object):
return self._tab.Get(flatbuffers.number_types.Int32Flags, o + self._tab.Pos)
return 0
-def StridedSliceOptionsStart(builder): builder.StartObject(5)
+ # StridedSliceOptions
+ def Offset(self):
+ o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(14))
+ if o != 0:
+ return bool(self._tab.Get(flatbuffers.number_types.BoolFlags, o + self._tab.Pos))
+ return False
+
+def StridedSliceOptionsStart(builder): builder.StartObject(6)
def Start(builder):
return StridedSliceOptionsStart(builder)
def StridedSliceOptionsAddBeginMask(builder, beginMask): builder.PrependInt32Slot(0, beginMask, 0)
@@ -81,6 +88,9 @@ def AddNewAxisMask(builder, newAxisMask):
def StridedSliceOptionsAddShrinkAxisMask(builder, shrinkAxisMask): builder.PrependInt32Slot(4, shrinkAxisMask, 0)
def AddShrinkAxisMask(builder, shrinkAxisMask):
return StridedSliceOptionsAddShrinkAxisMask(builder, shrinkAxisMask)
+def StridedSliceOptionsAddOffset(builder, offset): builder.PrependBoolSlot(5, offset, 0)
+def AddOffset(builder, offset):
+ return StridedSliceOptionsAddOffset(builder, offset)
def StridedSliceOptionsEnd(builder): return builder.EndObject()
def End(builder):
return StridedSliceOptionsEnd(builder) \ No newline at end of file
diff --git a/ethosu/vela/tflite_mapping.py b/ethosu/vela/tflite_mapping.py
index a94db703..fd94dd80 100644
--- a/ethosu/vela/tflite_mapping.py
+++ b/ethosu/vela/tflite_mapping.py
@@ -736,7 +736,8 @@ builtin_operator_map = {
BuiltinOperator.STRIDED_SLICE: (
Op.StridedSlice,
OptionsSerializer(
- "StridedSliceOptions", ("begin_mask", "ellipsis_mask", "end_mask", "new_axis_mask", "shrink_axis_mask")
+ "StridedSliceOptions",
+ ("begin_mask", "ellipsis_mask", "end_mask", "new_axis_mask", "shrink_axis_mask", "offset"),
),
TFLITE_IFM_INDICES,
),
diff --git a/ethosu/vela/tflite_supported_operators.py b/ethosu/vela/tflite_supported_operators.py
index 3dbde847..41862b6e 100644
--- a/ethosu/vela/tflite_supported_operators.py
+++ b/ethosu/vela/tflite_supported_operators.py
@@ -306,6 +306,7 @@ class TFLiteSupportedOperators:
self.specific_constraints[Op.StridedSlice].append(
TFLiteSupportedOperators.constraint_stridedslice_stride_values
)
+ self.specific_constraints[Op.StridedSlice].append(TFLiteSupportedOperators.constraint_stridedslice_offset_false)
# Pad specific checks:
self.specific_constraints[Op.Pad].append(TFLiteSupportedOperators.constraint_pad_shape)
@@ -806,6 +807,13 @@ class TFLiteSupportedOperators:
return valid, f"Op has strides values {strides.values}"
@staticmethod
+ def constraint_stridedslice_offset_false(op):
+ "Offset attribute must be False"
+ offset = op.attrs.get("offset", False)
+ valid = offset is False
+ return valid, f"Op has offset={offset}"
+
+ @staticmethod
def constraint_inputs_int32(op):
"Both Input data types must be int32"
ifm_dtype = op.ifm.dtype