aboutsummaryrefslogtreecommitdiff
path: root/ethosu/vela/tflite_mapping.py
diff options
context:
space:
mode:
authorPatrik Gustavsson <patrik.gustavsson@arm.com>2021-06-30 09:07:16 +0200
committerPatrik Gustavsson <patrik.gustavsson@arm.com>2021-07-09 09:51:44 +0200
commit5e26eda0e0f359b6e22b1f1eeb9344cd15e0f093 (patch)
treedce92ab9d8a6ceb261c48353ff7077295efa21da /ethosu/vela/tflite_mapping.py
parent8f1f9aaa58175b17cd2e505bfcdb0e40c955ea72 (diff)
downloadethos-u-vela-5e26eda0e0f359b6e22b1f1eeb9344cd15e0f093.tar.gz
MLBEDSW-4840 Move setting of input indices to tflite reader
Mapping to internal input indexing has been added to tflite_reader.py and tosa_reader.py. And the other way around in tflite_writer.py. Signed-off-by: Patrik Gustavsson <patrik.gustavsson@arm.com> Change-Id: I4d8596e747cfa7c4203884c4e785eb1977e2bcc1
Diffstat (limited to 'ethosu/vela/tflite_mapping.py')
-rw-r--r--ethosu/vela/tflite_mapping.py335
1 files changed, 223 insertions, 112 deletions
diff --git a/ethosu/vela/tflite_mapping.py b/ethosu/vela/tflite_mapping.py
index b526ec58..23a1a2b7 100644
--- a/ethosu/vela/tflite_mapping.py
+++ b/ethosu/vela/tflite_mapping.py
@@ -25,6 +25,7 @@ from .data_type import DataType
from .operation import CustomType
from .operation import Op
from .operation import Padding as opPad
+from .operation import TensorIndices
from .tflite import AbsOptions
from .tflite import AddNOptions
from .tflite import AddOptions
@@ -489,50 +490,89 @@ reducer_opts = OptionsSerializer("ReducerOptions", ("keep_dims",))
is_int_vec = True
+TFLITE_NO_INDICES = TensorIndices([], [], [])
+TFLITE_IFM_INDICES = TensorIndices([0], [], [])
+TFLITE_IFM_WEIGHTS_INDICES = TensorIndices([0], [1], [])
+TFLITE_IFM_WEIGHTS_BIAS_INDICES = TensorIndices([0], [1], [2])
+TFLITE_IFM_IFM2_INDICES = TensorIndices([0, 1], [], [])
+TFLITE_CONV2D_BACKPROP_INDICES = TensorIndices([2], [1], [3])
+TFLITE_TRANSPOSE_CONV_INDICES = TensorIndices([0], [1], [3])
+TFLITE_CONCAT_INDICES = TensorIndices([1, 2], [], [])
+TFLITE_SPLIT_IFM_INDICES = TensorIndices([1], [], [])
+TFLITE_BLOCK_LSTM_INDICES = TensorIndices([3], [4], [])
+
builtin_operator_map = {
- BuiltinOperator.ADD: (Op.Add, OptionsSerializer("AddOptions", (fused_act, "pot_scale_int16"))),
- BuiltinOperator.AVERAGE_POOL_2D: (Op.AvgPool, pool2d_opts),
- BuiltinOperator.CONCATENATION: (Op.ConcatTFLite, OptionsSerializer("ConcatenationOptions", ("axis", fused_act))),
- BuiltinOperator.CONV_2D: (Op.Conv2DBias, conv2d_opts),
- BuiltinOperator.DEPTHWISE_CONV_2D: (Op.DepthwiseConv2DBias, depthwise_opts),
- BuiltinOperator.DEPTH_TO_SPACE: (Op.DepthToSpace, OptionsSerializer("DepthToSpaceOptions", ("block_size",))),
- BuiltinOperator.DEQUANTIZE: (Op.Dequantize, OptionsSerializer("DequantizeOptions")),
- BuiltinOperator.EMBEDDING_LOOKUP: (Op.EmbeddingLookup, None),
- BuiltinOperator.FLOOR: (Op.Floor, None),
+ BuiltinOperator.ADD: (
+ Op.Add,
+ OptionsSerializer("AddOptions", (fused_act, "pot_scale_int16")),
+ TFLITE_IFM_IFM2_INDICES,
+ ),
+ BuiltinOperator.AVERAGE_POOL_2D: (Op.AvgPool, pool2d_opts, TFLITE_IFM_INDICES),
+ BuiltinOperator.CONCATENATION: (
+ Op.ConcatTFLite,
+ OptionsSerializer("ConcatenationOptions", ("axis", fused_act)),
+ TFLITE_CONCAT_INDICES,
+ ),
+ BuiltinOperator.CONV_2D: (Op.Conv2DBias, conv2d_opts, TFLITE_IFM_WEIGHTS_BIAS_INDICES),
+ BuiltinOperator.DEPTHWISE_CONV_2D: (Op.DepthwiseConv2DBias, depthwise_opts, TFLITE_IFM_WEIGHTS_BIAS_INDICES),
+ BuiltinOperator.DEPTH_TO_SPACE: (
+ Op.DepthToSpace,
+ OptionsSerializer("DepthToSpaceOptions", ("block_size",)),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.DEQUANTIZE: (Op.Dequantize, OptionsSerializer("DequantizeOptions"), TFLITE_IFM_INDICES),
+ BuiltinOperator.EMBEDDING_LOOKUP: (Op.EmbeddingLookup, None, TFLITE_NO_INDICES),
+ BuiltinOperator.FLOOR: (Op.Floor, None, TFLITE_NO_INDICES),
BuiltinOperator.FULLY_CONNECTED: (
Op.FullyConnected,
OptionsSerializer(
"FullyConnectedOptions", (fused_act, "weights_format", "asymmetric_quantize_inputs", "keep_num_dims")
),
+ TFLITE_IFM_WEIGHTS_BIAS_INDICES,
),
- BuiltinOperator.HASHTABLE_LOOKUP: (Op.HashtableLookup, None),
- BuiltinOperator.L2_NORMALIZATION: (Op.L2Norm, OptionsSerializer("L2NormOptions", (fused_act,))),
- BuiltinOperator.L2_POOL_2D: (Op.L2Pool2D, pool2d_opts),
+ BuiltinOperator.HASHTABLE_LOOKUP: (Op.HashtableLookup, None, TFLITE_NO_INDICES),
+ BuiltinOperator.L2_NORMALIZATION: (Op.L2Norm, OptionsSerializer("L2NormOptions", (fused_act,)), TFLITE_NO_INDICES),
+ BuiltinOperator.L2_POOL_2D: (Op.L2Pool2D, pool2d_opts, TFLITE_NO_INDICES),
BuiltinOperator.LOCAL_RESPONSE_NORMALIZATION: (
Op.LRN,
OptionsSerializer("LocalResponseNormalizationOptions", ("radius", "bias", "alpha", "beta")),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.LOGISTIC: (Op.Sigmoid, None, TFLITE_IFM_INDICES),
+ BuiltinOperator.LSH_PROJECTION: (
+ Op.LSHProjection,
+ OptionsSerializer("LSHProjectionOptions", ("type",)),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.LSTM: (Op.Lstm, lstm_opts, TFLITE_IFM_WEIGHTS_INDICES),
+ BuiltinOperator.MAX_POOL_2D: (Op.MaxPool, pool2d_opts, TFLITE_IFM_INDICES),
+ BuiltinOperator.MUL: (Op.Mul, OptionsSerializer("MulOptions", (fused_act,)), TFLITE_IFM_IFM2_INDICES),
+ BuiltinOperator.RELU: (Op.Relu, None, TFLITE_IFM_INDICES),
+ BuiltinOperator.RELU_N1_TO_1: (Op.ReluN1To1, None, TFLITE_IFM_INDICES),
+ BuiltinOperator.RELU6: (Op.Relu6, None, TFLITE_IFM_INDICES),
+ BuiltinOperator.RESHAPE: (
+ Op.Reshape,
+ OptionsSerializer("ReshapeOptions", (("new_shape", is_int_vec),)),
+ TFLITE_IFM_INDICES,
),
- BuiltinOperator.LOGISTIC: (Op.Sigmoid, None),
- BuiltinOperator.LSH_PROJECTION: (Op.LSHProjection, OptionsSerializer("LSHProjectionOptions", ("type",))),
- BuiltinOperator.LSTM: (Op.Lstm, lstm_opts),
- BuiltinOperator.MAX_POOL_2D: (Op.MaxPool, pool2d_opts),
- BuiltinOperator.MUL: (Op.Mul, OptionsSerializer("MulOptions", (fused_act,))),
- BuiltinOperator.RELU: (Op.Relu, None),
- BuiltinOperator.RELU_N1_TO_1: (Op.ReluN1To1, None),
- BuiltinOperator.RELU6: (Op.Relu6, None),
- BuiltinOperator.RESHAPE: (Op.Reshape, OptionsSerializer("ReshapeOptions", (("new_shape", is_int_vec),))),
BuiltinOperator.RESIZE_BILINEAR: (
Op.ResizeBilinear,
OptionsSerializer("ResizeBilinearOptions", ("align_corners", "half_pixel_centers")),
+ TFLITE_IFM_INDICES,
+ ),
+ BuiltinOperator.RNN: (Op.Rnn, rnn_opts, TFLITE_IFM_WEIGHTS_INDICES),
+ BuiltinOperator.SOFTMAX: (Op.Softmax, OptionsSerializer("SoftmaxOptions", ("beta",)), TFLITE_IFM_INDICES),
+ BuiltinOperator.SPACE_TO_DEPTH: (
+ Op.SpaceToDepth,
+ OptionsSerializer("SpaceToDepthOptions", ("block_size",)),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.RNN: (Op.Rnn, rnn_opts),
- BuiltinOperator.SOFTMAX: (Op.Softmax, OptionsSerializer("SoftmaxOptions", ("beta",))),
- BuiltinOperator.SPACE_TO_DEPTH: (Op.SpaceToDepth, OptionsSerializer("SpaceToDepthOptions", ("block_size",))),
BuiltinOperator.SVDF: (
Op.Svdf,
OptionsSerializer("SVDFOptions", ("rank", fused_act, "asymmetric_quantize_inputs")),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.TANH: (Op.Tanh, None),
+ BuiltinOperator.TANH: (Op.Tanh, None, TFLITE_IFM_INDICES),
BuiltinOperator.CONCAT_EMBEDDINGS: (
Op.ConcatEmbeddings,
OptionsSerializer(
@@ -547,40 +587,76 @@ builtin_operator_map = {
"embedding_dim_per_channel_as_length",
),
),
+ TFLITE_NO_INDICES,
),
BuiltinOperator.SKIP_GRAM: (
Op.SkipGram,
OptionsSerializer("SkipGramOptions", ("ngram_size", "max_skip_size", "include_all_ngrams")),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.CALL: (Op.Call, OptionsSerializer("CallOptions", ("subgraph",))),
+ BuiltinOperator.CALL: (Op.Call, OptionsSerializer("CallOptions", ("subgraph",)), TFLITE_NO_INDICES),
BuiltinOperator.EMBEDDING_LOOKUP_SPARSE: (
Op.EmbeddingLookupSparse,
OptionsSerializer("EmbeddingLookupSparseOptions", ("combiner",)),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.PAD: (Op.Pad, OptionsSerializer("PadOptions"), TFLITE_IFM_INDICES),
+ BuiltinOperator.UNIDIRECTIONAL_SEQUENCE_RNN: (
+ Op.UnidirectionalSequenceRnn,
+ seq_rnn_opts,
+ TFLITE_IFM_WEIGHTS_INDICES,
+ ),
+ BuiltinOperator.GATHER: (Op.GatherV2, OptionsSerializer("GatherOptions", ("axis",)), TFLITE_NO_INDICES),
+ BuiltinOperator.BATCH_TO_SPACE_ND: (
+ Op.BatchToSpaceND,
+ OptionsSerializer("BatchToSpaceNDOptions"),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.SPACE_TO_BATCH_ND: (
+ Op.SpaceToBatchND,
+ OptionsSerializer("SpaceToBatchNDOptions"),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.TRANSPOSE: (Op.Transpose, OptionsSerializer("TransposeOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.MEAN: (Op.Mean, reducer_opts, TFLITE_IFM_INDICES),
+ BuiltinOperator.SUB: (
+ Op.Sub,
+ OptionsSerializer("SubOptions", (fused_act, "pot_scale_int16",)),
+ TFLITE_IFM_IFM2_INDICES,
+ ),
+ BuiltinOperator.DIV: (Op.Div, OptionsSerializer("DivOptions", (fused_act,)), TFLITE_NO_INDICES),
+ BuiltinOperator.SQUEEZE: (
+ Op.Squeeze,
+ OptionsSerializer("SqueezeOptions", (("squeeze_dims", is_int_vec),)),
+ TFLITE_IFM_INDICES,
+ ),
+ BuiltinOperator.UNIDIRECTIONAL_SEQUENCE_LSTM: (
+ Op.UnidirectionalSequenceLstm,
+ unidir_seq_lstm_opts,
+ TFLITE_IFM_WEIGHTS_INDICES,
),
- BuiltinOperator.PAD: (Op.Pad, OptionsSerializer("PadOptions")),
- BuiltinOperator.UNIDIRECTIONAL_SEQUENCE_RNN: (Op.UnidirectionalSequenceRnn, seq_rnn_opts),
- BuiltinOperator.GATHER: (Op.GatherV2, OptionsSerializer("GatherOptions", ("axis",))),
- BuiltinOperator.BATCH_TO_SPACE_ND: (Op.BatchToSpaceND, OptionsSerializer("BatchToSpaceNDOptions")),
- BuiltinOperator.SPACE_TO_BATCH_ND: (Op.SpaceToBatchND, OptionsSerializer("SpaceToBatchNDOptions")),
- BuiltinOperator.TRANSPOSE: (Op.Transpose, OptionsSerializer("TransposeOptions")),
- BuiltinOperator.MEAN: (Op.Mean, reducer_opts),
- BuiltinOperator.SUB: (Op.Sub, OptionsSerializer("SubOptions", (fused_act, "pot_scale_int16",))),
- BuiltinOperator.DIV: (Op.Div, OptionsSerializer("DivOptions", (fused_act,))),
- BuiltinOperator.SQUEEZE: (Op.Squeeze, OptionsSerializer("SqueezeOptions", (("squeeze_dims", is_int_vec),))),
- BuiltinOperator.UNIDIRECTIONAL_SEQUENCE_LSTM: (Op.UnidirectionalSequenceLstm, unidir_seq_lstm_opts),
BuiltinOperator.STRIDED_SLICE: (
Op.StridedSlice,
OptionsSerializer(
- "StridedSliceOptions", ("begin_mask", "end_mask", "ellipsis_mask", "new_axis_mask", "shrink_axis_mask")
+ "StridedSliceOptions", ("begin_mask", "end_mask", "ellipsis_mask", "new_axis_mask", "shrink_axis_mask"),
),
+ TFLITE_IFM_INDICES,
+ ),
+ BuiltinOperator.BIDIRECTIONAL_SEQUENCE_RNN: (
+ Op.BidirectionalSequenceRnn,
+ bidir_seq_rnn_opts,
+ TFLITE_IFM_WEIGHTS_INDICES,
+ ),
+ BuiltinOperator.EXP: (Op.Exp, OptionsSerializer("ExpOptions"), TFLITE_IFM_INDICES),
+ BuiltinOperator.TOPK_V2: (Op.TopKV2, OptionsSerializer("TopKV2Options"), TFLITE_NO_INDICES),
+ BuiltinOperator.SPLIT: (Op.Split, OptionsSerializer("SplitOptions", ("num_splits",)), TFLITE_SPLIT_IFM_INDICES),
+ BuiltinOperator.LOG_SOFTMAX: (Op.LogSoftmax, OptionsSerializer("LogSoftmaxOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.DELEGATE: (Op.Delegate, None, TFLITE_NO_INDICES),
+ BuiltinOperator.BIDIRECTIONAL_SEQUENCE_LSTM: (
+ Op.BidirectionalSequenceLstm,
+ bidir_seq_lstm_opts,
+ TFLITE_IFM_WEIGHTS_INDICES,
),
- BuiltinOperator.BIDIRECTIONAL_SEQUENCE_RNN: (Op.BidirectionalSequenceRnn, bidir_seq_rnn_opts),
- BuiltinOperator.EXP: (Op.Exp, OptionsSerializer("ExpOptions")),
- BuiltinOperator.TOPK_V2: (Op.TopKV2, OptionsSerializer("TopKV2Options")),
- BuiltinOperator.SPLIT: (Op.Split, OptionsSerializer("SplitOptions", ("num_splits",))),
- BuiltinOperator.LOG_SOFTMAX: (Op.LogSoftmax, OptionsSerializer("LogSoftmaxOptions")),
- BuiltinOperator.DELEGATE: (Op.Delegate, None),
- BuiltinOperator.BIDIRECTIONAL_SEQUENCE_LSTM: (Op.BidirectionalSequenceLstm, bidir_seq_lstm_opts),
BuiltinOperator.CAST: (
Op.Cast,
OptionsSerializer(
@@ -590,117 +666,152 @@ builtin_operator_map = {
("out_data_type", datatype_deserialize, datatype_serialize),
),
),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.PRELU: (Op.Prelu, None),
- BuiltinOperator.MAXIMUM: (Op.Maximum, OptionsSerializer("MaximumMinimumOptions")),
+ BuiltinOperator.PRELU: (Op.Prelu, None, TFLITE_NO_INDICES),
+ BuiltinOperator.MAXIMUM: (Op.Maximum, OptionsSerializer("MaximumMinimumOptions"), TFLITE_IFM_IFM2_INDICES),
BuiltinOperator.ARG_MAX: (
Op.ArgMax,
OptionsSerializer("ArgMaxOptions", (("output_type", datatype_deserialize, datatype_serialize),)),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.MINIMUM: (Op.Minimum, OptionsSerializer("MaximumMinimumOptions")),
- BuiltinOperator.LESS: (Op.Less, OptionsSerializer("LessOptions")),
- BuiltinOperator.NEG: (Op.Neg, OptionsSerializer("NegOptions")),
- BuiltinOperator.PADV2: (Op.PadV2, OptionsSerializer("PadV2Options")),
- BuiltinOperator.GREATER: (Op.Greater, OptionsSerializer("GreaterOptions")),
- BuiltinOperator.GREATER_EQUAL: (Op.GreaterEqual, OptionsSerializer("GreaterEqualOptions")),
- BuiltinOperator.LESS_EQUAL: (Op.LessEqual, OptionsSerializer("LessEqualOptions")),
- BuiltinOperator.SELECT: (Op.Select, OptionsSerializer("SelectOptions")),
- BuiltinOperator.SLICE: (Op.Slice, OptionsSerializer("SliceOptions")),
- BuiltinOperator.SIN: (Op.Sin, None),
+ BuiltinOperator.MINIMUM: (Op.Minimum, OptionsSerializer("MaximumMinimumOptions"), TFLITE_IFM_IFM2_INDICES),
+ BuiltinOperator.LESS: (Op.Less, OptionsSerializer("LessOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.NEG: (Op.Neg, OptionsSerializer("NegOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.PADV2: (Op.PadV2, OptionsSerializer("PadV2Options"), TFLITE_NO_INDICES),
+ BuiltinOperator.GREATER: (Op.Greater, OptionsSerializer("GreaterOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.GREATER_EQUAL: (Op.GreaterEqual, OptionsSerializer("GreaterEqualOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.LESS_EQUAL: (Op.LessEqual, OptionsSerializer("LessEqualOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.SELECT: (Op.Select, OptionsSerializer("SelectOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.SLICE: (Op.Slice, OptionsSerializer("SliceOptions"), TFLITE_IFM_INDICES),
+ BuiltinOperator.SIN: (Op.Sin, None, TFLITE_NO_INDICES),
BuiltinOperator.TRANSPOSE_CONV: (
Op.Conv2DBackpropInput,
OptionsSerializer("TransposeConvOptions", (padding, "stride_w", "stride_h")),
+ TFLITE_CONV2D_BACKPROP_INDICES,
),
BuiltinOperator.SPARSE_TO_DENSE: (
Op.SparseToDense,
OptionsSerializer("SparseToDenseOptions", ("validate_indices",)),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.TILE: (Op.Tile, OptionsSerializer("TileOptions")),
- BuiltinOperator.EXPAND_DIMS: (Op.ExpandDims, OptionsSerializer("ExpandDimsOptions")),
- BuiltinOperator.EQUAL: (Op.Equal, OptionsSerializer("EqualOptions")),
- BuiltinOperator.NOT_EQUAL: (Op.NotEqual, OptionsSerializer("NotEqualOptions")),
- BuiltinOperator.LOG: (Op.Log, None),
- BuiltinOperator.SUM: (Op.Sum, reducer_opts),
- BuiltinOperator.SQRT: (Op.Sqrt, None),
- BuiltinOperator.RSQRT: (Op.Rsqrt, None),
+ BuiltinOperator.TILE: (Op.Tile, OptionsSerializer("TileOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.EXPAND_DIMS: (Op.ExpandDims, OptionsSerializer("ExpandDimsOptions"), TFLITE_IFM_INDICES),
+ BuiltinOperator.EQUAL: (Op.Equal, OptionsSerializer("EqualOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.NOT_EQUAL: (Op.NotEqual, OptionsSerializer("NotEqualOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.LOG: (Op.Log, None, TFLITE_NO_INDICES),
+ BuiltinOperator.SUM: (Op.Sum, reducer_opts, TFLITE_NO_INDICES),
+ BuiltinOperator.SQRT: (Op.Sqrt, None, TFLITE_NO_INDICES),
+ BuiltinOperator.RSQRT: (Op.Rsqrt, None, TFLITE_NO_INDICES),
BuiltinOperator.SHAPE: (
Op.Shape,
OptionsSerializer("ShapeOptions", (("out_type", datatype_deserialize, datatype_serialize),)),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.POW: (Op.Pow, OptionsSerializer("PowOptions")),
+ BuiltinOperator.POW: (Op.Pow, OptionsSerializer("PowOptions"), TFLITE_NO_INDICES),
BuiltinOperator.ARG_MIN: (
Op.ArgMin,
OptionsSerializer("ArgMinOptions", (("output_type", datatype_deserialize, datatype_serialize),)),
+ TFLITE_NO_INDICES,
),
BuiltinOperator.FAKE_QUANT: (
Op.FakeQuantWithMinMaxArgs,
OptionsSerializer("FakeQuantOptions", ("min", "max", "num_bits", "narrow_range")),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.REDUCE_PROD: (Op.Prod, reducer_opts),
- BuiltinOperator.REDUCE_MAX: (Op.Max, reducer_opts),
- BuiltinOperator.PACK: (Op.Pack, OptionsSerializer("PackOptions", ("values_count", "axis"))),
- BuiltinOperator.LOGICAL_OR: (Op.LogicalOr, OptionsSerializer("LogicalOrOptions")),
- BuiltinOperator.ONE_HOT: (Op.OneHot, OptionsSerializer("OneHotOptions", ("axis",))),
- BuiltinOperator.LOGICAL_AND: (Op.LogicalAnd, OptionsSerializer("LogicalAndOptions")),
- BuiltinOperator.LOGICAL_NOT: (Op.LogicalNot, OptionsSerializer("LogicalNotOptions")),
- BuiltinOperator.UNPACK: (Op.Unpack, OptionsSerializer("UnpackOptions", ("num", "axis"))),
- BuiltinOperator.REDUCE_MIN: (Op.Min, reducer_opts),
- BuiltinOperator.FLOOR_DIV: (Op.FloorDiv, OptionsSerializer("FloorDivOptions")),
- BuiltinOperator.REDUCE_ANY: (Op.Any, reducer_opts),
- BuiltinOperator.SQUARE: (Op.Square, OptionsSerializer("SquareOptions")),
- BuiltinOperator.ZEROS_LIKE: (Op.ZerosLike, OptionsSerializer("ZerosLikeOptions")),
- BuiltinOperator.FILL: (Op.Fill, OptionsSerializer("FillOptions")),
- BuiltinOperator.FLOOR_MOD: (Op.FloorMod, OptionsSerializer("FloorModOptions")),
- BuiltinOperator.RANGE: (Op.Range, OptionsSerializer("RangeOptions")),
+ BuiltinOperator.REDUCE_PROD: (Op.Prod, reducer_opts, TFLITE_NO_INDICES),
+ BuiltinOperator.REDUCE_MAX: (Op.Max, reducer_opts, TFLITE_NO_INDICES),
+ BuiltinOperator.PACK: (Op.Pack, OptionsSerializer("PackOptions", ("values_count", "axis")), TFLITE_IFM_INDICES),
+ BuiltinOperator.LOGICAL_OR: (Op.LogicalOr, OptionsSerializer("LogicalOrOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.ONE_HOT: (Op.OneHot, OptionsSerializer("OneHotOptions", ("axis",)), TFLITE_NO_INDICES),
+ BuiltinOperator.LOGICAL_AND: (Op.LogicalAnd, OptionsSerializer("LogicalAndOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.LOGICAL_NOT: (Op.LogicalNot, OptionsSerializer("LogicalNotOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.UNPACK: (Op.Unpack, OptionsSerializer("UnpackOptions", ("num", "axis")), TFLITE_IFM_INDICES),
+ BuiltinOperator.REDUCE_MIN: (Op.Min, reducer_opts, TFLITE_NO_INDICES),
+ BuiltinOperator.FLOOR_DIV: (Op.FloorDiv, OptionsSerializer("FloorDivOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.REDUCE_ANY: (Op.Any, reducer_opts, TFLITE_NO_INDICES),
+ BuiltinOperator.SQUARE: (Op.Square, OptionsSerializer("SquareOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.ZEROS_LIKE: (Op.ZerosLike, OptionsSerializer("ZerosLikeOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.FILL: (Op.Fill, OptionsSerializer("FillOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.FLOOR_MOD: (Op.FloorMod, OptionsSerializer("FloorModOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.RANGE: (Op.Range, OptionsSerializer("RangeOptions"), TFLITE_NO_INDICES),
BuiltinOperator.RESIZE_NEAREST_NEIGHBOR: (
Op.ResizeNearestNeighbor,
OptionsSerializer("ResizeNearestNeighborOptions", ("align_corners", "half_pixel_centers")),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.LEAKY_RELU: (Op.LeakyRelu, OptionsSerializer("LeakyReluOptions", ("alpha",)), TFLITE_IFM_INDICES),
+ BuiltinOperator.SQUARED_DIFFERENCE: (
+ Op.SquaredDifference,
+ OptionsSerializer("SquaredDifferenceOptions"),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.LEAKY_RELU: (Op.LeakyRelu, OptionsSerializer("LeakyReluOptions", ("alpha",))),
- BuiltinOperator.SQUARED_DIFFERENCE: (Op.SquaredDifference, OptionsSerializer("SquaredDifferenceOptions")),
- BuiltinOperator.MIRROR_PAD: (Op.MirrorPad, OptionsSerializer("MirrorPadOptions", ("mode",))),
- BuiltinOperator.ABS: (Op.Abs, OptionsSerializer("AbsOptions")),
- BuiltinOperator.SPLIT_V: (Op.SplitV, OptionsSerializer("SplitVOptions", ("num_splits",))),
+ BuiltinOperator.MIRROR_PAD: (Op.MirrorPad, OptionsSerializer("MirrorPadOptions", ("mode",)), TFLITE_NO_INDICES),
+ BuiltinOperator.ABS: (Op.Abs, OptionsSerializer("AbsOptions"), TFLITE_IFM_INDICES),
+ BuiltinOperator.SPLIT_V: (Op.SplitV, OptionsSerializer("SplitVOptions", ("num_splits",)), TFLITE_IFM_INDICES),
BuiltinOperator.UNIQUE: (
Op.Unique,
OptionsSerializer("UniqueOptions", (("idx_out_type", datatype_deserialize, datatype_serialize),)),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.CEIL: (Op.Ceil, None),
- BuiltinOperator.REVERSE_V2: (Op.ReverseV2, OptionsSerializer("ReverseV2Options")),
- BuiltinOperator.ADD_N: (Op.AddN, OptionsSerializer("AddNOptions")),
- BuiltinOperator.GATHER_ND: (Op.GatherNd, OptionsSerializer("GatherNdOptions")),
- BuiltinOperator.COS: (Op.Cos, OptionsSerializer("CosOptions")),
- BuiltinOperator.WHERE: (Op.Where, OptionsSerializer("WhereOptions")),
- BuiltinOperator.RANK: (Op.Rank, OptionsSerializer("RankOptions")),
- BuiltinOperator.ELU: (Op.Elu, None),
+ BuiltinOperator.CEIL: (Op.Ceil, None, TFLITE_NO_INDICES),
+ BuiltinOperator.REVERSE_V2: (Op.ReverseV2, OptionsSerializer("ReverseV2Options"), TFLITE_NO_INDICES),
+ BuiltinOperator.ADD_N: (Op.AddN, OptionsSerializer("AddNOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.GATHER_ND: (Op.GatherNd, OptionsSerializer("GatherNdOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.COS: (Op.Cos, OptionsSerializer("CosOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.WHERE: (Op.Where, OptionsSerializer("WhereOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.RANK: (Op.Rank, OptionsSerializer("RankOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.ELU: (Op.Elu, None, TFLITE_NO_INDICES),
BuiltinOperator.REVERSE_SEQUENCE: (
Op.ReverseSequence,
OptionsSerializer("ReverseSequenceOptions", ("seq_dim", "batch_dim")),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.MATRIX_DIAG: (Op.MatrixDiag, OptionsSerializer("MatrixDiagOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.QUANTIZE: (Op.Quantize, OptionsSerializer("QuantizeOptions"), TFLITE_IFM_INDICES),
+ BuiltinOperator.MATRIX_SET_DIAG: (Op.MatrixSetDiag, OptionsSerializer("MatrixSetDiagOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.ROUND: (Op.Round, None, TFLITE_NO_INDICES),
+ BuiltinOperator.HARD_SWISH: (Op.HardSwish, OptionsSerializer("HardSwishOptions"), TFLITE_IFM_INDICES),
+ BuiltinOperator.IF: (
+ Op.If,
+ OptionsSerializer("IfOptions", ("then_subgraph_index", "else_subgraph_index")),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.MATRIX_DIAG: (Op.MatrixDiag, OptionsSerializer("MatrixDiagOptions")),
- BuiltinOperator.QUANTIZE: (Op.Quantize, OptionsSerializer("QuantizeOptions")),
- BuiltinOperator.MATRIX_SET_DIAG: (Op.MatrixSetDiag, OptionsSerializer("MatrixSetDiagOptions")),
- BuiltinOperator.ROUND: (Op.Round, None),
- BuiltinOperator.HARD_SWISH: (Op.HardSwish, OptionsSerializer("HardSwishOptions")),
- BuiltinOperator.IF: (Op.If, OptionsSerializer("IfOptions", ("then_subgraph_index", "else_subgraph_index"))),
BuiltinOperator.WHILE: (
Op.While,
OptionsSerializer("WhileOptions", ("cond_subgraph_index", "body_subgraph_index")),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.NON_MAX_SUPPRESSION_V4: (
+ Op.NonMaxSuppressionV4,
+ OptionsSerializer("NonMaxSuppressionV4Options"),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.NON_MAX_SUPPRESSION_V5: (
+ Op.NonMaxSuppressionV5,
+ OptionsSerializer("NonMaxSuppressionV5Options"),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.SCATTER_ND: (Op.ScatterNd, OptionsSerializer("ScatterNdOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.SELECT_V2: (Op.SelectV2, OptionsSerializer("SelectV2Options"), TFLITE_NO_INDICES),
+ BuiltinOperator.DENSIFY: (Op.Densify, OptionsSerializer("DensifyOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.SEGMENT_SUM: (Op.SegmentSum, OptionsSerializer("SegmentSumOptions"), TFLITE_NO_INDICES),
+ BuiltinOperator.BATCH_MATMUL: (
+ Op.BatchMatMul,
+ OptionsSerializer("BatchMatMulOptions", ("adj_x", "adj_y")),
+ TFLITE_NO_INDICES,
+ ),
+ BuiltinOperator.CUMSUM: (
+ Op.Cumsum,
+ OptionsSerializer("CumsumOptions", ("exclusive", "reverse")),
+ TFLITE_NO_INDICES,
),
- BuiltinOperator.NON_MAX_SUPPRESSION_V4: (Op.NonMaxSuppressionV4, OptionsSerializer("NonMaxSuppressionV4Options")),
- BuiltinOperator.NON_MAX_SUPPRESSION_V5: (Op.NonMaxSuppressionV5, OptionsSerializer("NonMaxSuppressionV5Options")),
- BuiltinOperator.SCATTER_ND: (Op.ScatterNd, OptionsSerializer("ScatterNdOptions")),
- BuiltinOperator.SELECT_V2: (Op.SelectV2, OptionsSerializer("SelectV2Options")),
- BuiltinOperator.DENSIFY: (Op.Densify, OptionsSerializer("DensifyOptions")),
- BuiltinOperator.SEGMENT_SUM: (Op.SegmentSum, OptionsSerializer("SegmentSumOptions")),
- BuiltinOperator.BATCH_MATMUL: (Op.BatchMatMul, OptionsSerializer("BatchMatMulOptions", ("adj_x", "adj_y"))),
- BuiltinOperator.CUMSUM: (Op.Cumsum, OptionsSerializer("CumsumOptions", ("exclusive", "reverse"))),
- BuiltinOperator.CUSTOM: (Op.Custom, CustomOptionsSerializer()),
+ BuiltinOperator.CUSTOM: (Op.Custom, CustomOptionsSerializer(), TFLITE_NO_INDICES),
}
-builtin_operator_inv_map = {v[0]: (k, v[1]) for k, v in builtin_operator_map.items()}
+builtin_operator_inv_map = {v[0]: (k, v[1], v[2]) for k, v in builtin_operator_map.items()}
-builtin_operator_inv_map[Op.CustomNpuOp] = (BuiltinOperator.CUSTOM, CustomOptionsSerializer())
+builtin_operator_inv_map[Op.CustomNpuOp] = (BuiltinOperator.CUSTOM, CustomOptionsSerializer(), TFLITE_NO_INDICES)
BUILTIN_OPERATOR_UNKNOWN = "UNKNOWN"