aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Verhaard <louis.verhaard@arm.com>2020-12-18 14:23:06 +0100
committerLouis Verhaard <louis.verhaard@arm.com>2020-12-22 16:04:38 +0100
commitf4e12beff027e8463aeaed7b75d5e48afb25c8b3 (patch)
tree6e56a37b7ca30c9f8acdafc08a4627bdadb374d2
parentf27a8b65f8cff8fc52db8e39a6eb8f78b6616c6b (diff)
downloadethos-u-vela-f4e12beff027e8463aeaed7b75d5e48afb25c8b3.tar.gz
MLBEDSW-3561: Support const STRING input tensors
Added handling of input tensors with constant string data. Signed-off-by: Louis Verhaard <louis.verhaard@arm.com> Change-Id: Ieb5164a9d56d580ad08ea834bf2cbb7288cd9539
-rw-r--r--ethosu/vela/test/test_tflite_reader.py8
-rw-r--r--ethosu/vela/tflite_mapping.py2
-rw-r--r--ethosu/vela/tflite_reader.py14
3 files changed, 14 insertions, 10 deletions
diff --git a/ethosu/vela/test/test_tflite_reader.py b/ethosu/vela/test/test_tflite_reader.py
index 14c9b20..a69e8d3 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 cc6053c..6fcbb95 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 21ff887..45397c2 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):