diff options
author | Patrik Gustavsson <patrik.gustavsson@arm.com> | 2021-06-28 07:41:58 +0200 |
---|---|---|
committer | Patrik Gustavsson <patrik.gustavsson@arm.com> | 2021-07-08 10:57:25 +0200 |
commit | 8f1f9aaa58175b17cd2e505bfcdb0e40c955ea72 (patch) | |
tree | 0174f8ef15007f5e220cfc4d283046451282102e /ethosu/vela/tflite_reader.py | |
parent | 6f4955aa7097b123bbf31aae4654547bb3e3c68c (diff) | |
download | ethos-u-vela-8f1f9aaa58175b17cd2e505bfcdb0e40c955ea72.tar.gz |
MLBEDSW-4838 Added basic TOSA support.
Added basic TOSA support, enabling Vela to
read and compile a .tosa file corresponding to
CONV2D + Rescale + Clamp, and writing it to an
optimized .tflite file.
The optimized .tflite file, will in this case, hold
a commandstream where the Rescale and Clamp has been
fused into the CONV2D.
The optimized tflite file is not output from Vela.
-Added support to read .tosa file into Vela
internal structure.
- Added tosa_reader.py, tosa_mapper.py and
helper files stored under tosa/
- Support for this limited to ~10 ops
-Added reader_util.py for functions common
for TOSA and TFLite
-Added tosa_graph_optimiser.py
-Added support to fuse Rescale into convolution
-Modified handling for padding
-Added support to fuse Clamp to previous op
-Added graph_optimiser_util.py
-Moved functions common for TOSA/TFLite graph
optimization to this file.
-Renamed graph_optimiser.py to tflite_graph_optmiser.py
-Added separate tosa_supported_operators.py
-Added supported_operator_util.py
-For functions in common for TOSA/TFLite
Signed-off-by: Patrik Gustavsson <patrik.gustavsson@arm.com>
Change-Id: Ic3c540504ec8c5eb4771397fdc6882050ecf33ab
Diffstat (limited to 'ethosu/vela/tflite_reader.py')
-rw-r--r-- | ethosu/vela/tflite_reader.py | 40 |
1 files changed, 4 insertions, 36 deletions
diff --git a/ethosu/vela/tflite_reader.py b/ethosu/vela/tflite_reader.py index b47177f7..1a45a5ee 100644 --- a/ethosu/vela/tflite_reader.py +++ b/ethosu/vela/tflite_reader.py @@ -27,6 +27,9 @@ from .nn_graph import Subgraph from .operation import create_activation_function from .operation import Op from .operation import Operation +from .reader_util import clone_and_reshape_tensor +from .reader_util import decode_str +from .reader_util import fixup_tensors from .tensor import QuantizationParameters from .tensor import Tensor from .tflite.BuiltinOperator import BuiltinOperator @@ -37,29 +40,6 @@ from .tflite_mapping import datatype_map from .tflite_mapping import datatype_map_numpy -def decode_str(s): - if s is None: - return "" - return s.decode("utf-8") - - -def clone_and_reshape_tensor(src_tens, reorder, set_unique): - tens = src_tens.clone("_reshape", set_unique) - tens.shape = [src_tens.shape[idx] for idx in reorder] - tens.bandwidth_shape = tens.shape - tens.storage_shape = tens.shape - - if tens.values is not None: - tens.values = tens.values.transpose(reorder) - - if tens.quant_values is not None: - tens.quant_values = tens.quant_values.transpose(reorder) - - op = Operation(Op.Const, tens.name) - op.set_output_tensor(tens) - return tens - - class TFLiteSubgraph: def __init__(self, graph, subgraph): self.graph = graph @@ -74,19 +54,7 @@ class TFLiteSubgraph: self.outputs = self.get_tensors_from_indices_remove_duplicates(subgraph.OutputsAsNumpy(), "output") self.inputs = self.get_tensors_from_indices_remove_duplicates(subgraph.InputsAsNumpy(), "input") - - # Fix up tensors without operations. Generate either Placeholder or Constant ops - for tens in self.inputs: - if tens.ops != []: - tens.error("This subgraph input tensor has unexpected driving operators.") - - op = Operation(Op.Placeholder, tens.name) - op.set_output_tensor(tens) - - for tens in self.tensors: - if not tens.ops: - op = Operation(Op.Const, tens.name) - op.set_output_tensor(tens) + fixup_tensors(self.inputs, self.tensors) def get_tensors_from_indices_remove_duplicates(self, indices, warning_str): tensors = [] |