From f4e12beff027e8463aeaed7b75d5e48afb25c8b3 Mon Sep 17 00:00:00 2001 From: Louis Verhaard Date: Fri, 18 Dec 2020 14:23:06 +0100 Subject: MLBEDSW-3561: Support const STRING input tensors Added handling of input tensors with constant string data. Signed-off-by: Louis Verhaard Change-Id: Ieb5164a9d56d580ad08ea834bf2cbb7288cd9539 --- ethosu/vela/test/test_tflite_reader.py | 8 ++++---- ethosu/vela/tflite_mapping.py | 2 +- ethosu/vela/tflite_reader.py | 14 +++++++++----- 3 files changed, 14 insertions(+), 10 deletions(-) (limited to 'ethosu') diff --git a/ethosu/vela/test/test_tflite_reader.py b/ethosu/vela/test/test_tflite_reader.py index 14c9b204..a69e8d37 100644 --- a/ethosu/vela/test/test_tflite_reader.py +++ b/ethosu/vela/test/test_tflite_reader.py @@ -84,9 +84,9 @@ class TestTFLiteSubgraph: string_buffer_testdata = [ (np.array([np.random.randint(256) for _ in range(100)], dtype=np.uint8), [3, 5]), - (np.array([np.random.randint(256) for _ in range(100)], dtype=np.int16), [10, 10]), - (np.array([np.random.randint(256) for _ in range(100)], dtype=np.float32), [100]), - (np.array([], dtype=np.int8), [30]), + (np.array([np.random.randint(256) for _ in range(100)], dtype=np.uint8), [10, 10]), + (np.array([np.random.randint(256) for _ in range(100)], dtype=np.uint8), []), + (np.array([], dtype=np.uint8), [30]), ] @pytest.mark.parametrize("buffer, tens_shape", string_buffer_testdata) @@ -111,4 +111,4 @@ class TestTFLiteSubgraph: subgraph = TFLiteSubgraph(graph, tfl_sg) tens = subgraph.parse_tensor(tens_data) - assert tens.values is None + assert np.array_equal(tens.values, buffer) diff --git a/ethosu/vela/tflite_mapping.py b/ethosu/vela/tflite_mapping.py index cc6053c0..6fcbb95b 100644 --- a/ethosu/vela/tflite_mapping.py +++ b/ethosu/vela/tflite_mapping.py @@ -172,7 +172,7 @@ datatype_map_numpy = { TensorType.BOOL: np.bool, TensorType.COMPLEX64: np.complex64, TensorType.COMPLEX128: np.complex128, - TensorType.STRING: np.dtype("S1"), + TensorType.STRING: np.uint8, } diff --git a/ethosu/vela/tflite_reader.py b/ethosu/vela/tflite_reader.py index 21ff8873..45397c2b 100644 --- a/ethosu/vela/tflite_reader.py +++ b/ethosu/vela/tflite_reader.py @@ -129,11 +129,15 @@ class TFLiteSubgraph: tens.values = None buf = self.graph.buffers[tens_data.Buffer()] - if buf is not None and dtype != DataType.string: - tens.values = np.array(buf.view(datatype_map_numpy[tens_dtype]).reshape(shape)) - if tens.quantization is not None: - tens.quant_values = tens.values - tens.values = tens.quantization.dequantize(tens.quant_values) + if buf is not None: + np_dtype = datatype_map_numpy[tens_dtype] + if dtype == DataType.string: + tens.values = np.array(buf.view(np_dtype)) + else: + tens.values = np.array(buf.view(np_dtype).reshape(shape)) + if tens.quantization is not None: + tens.quant_values = tens.values + tens.values = tens.quantization.dequantize(tens.quant_values) return tens def parse_operator(self, op_index, op_data): -- cgit v1.2.1