From d2a972d8b400a84062793eafe5dfc65e939804b7 Mon Sep 17 00:00:00 2001 From: Dwight Lidman Date: Tue, 18 Aug 2020 14:08:10 +0200 Subject: MLBEDSW-2731: Allow all TensorFlow Lite operators to pass through This commit adds missing entries and options in the tflite_mapping which should in theory allow every existing TensorFlow Lite operator to be passed through Vela without crashing. Previously some entries were missing and was crashing with a custom error whenever encountered. Signed-off-by: Dwight Lidman Change-Id: Ia69b7a84164bb57c52ceaf7380160794b7f0d9ee --- ethosu/vela/tflite_mapping.py | 100 ++++++++++++++++++++++++------------------ 1 file changed, 57 insertions(+), 43 deletions(-) (limited to 'ethosu/vela') diff --git a/ethosu/vela/tflite_mapping.py b/ethosu/vela/tflite_mapping.py index 55351cb9..e5c3e4f6 100644 --- a/ethosu/vela/tflite_mapping.py +++ b/ethosu/vela/tflite_mapping.py @@ -476,26 +476,26 @@ builtin_operator_map = { BuiltinOperator.DEPTHWISE_CONV_2D: ("DepthwiseConv2dBiasAct", depthwise_opts), BuiltinOperator.DEPTH_TO_SPACE: ("DepthToSpace", OptionsSerializer("DepthToSpaceOptions", ("block_size",))), BuiltinOperator.DEQUANTIZE: ("Dequantize", OptionsSerializer("DequantizeOptions")), - BuiltinOperator.EMBEDDING_LOOKUP: (None, None), + BuiltinOperator.EMBEDDING_LOOKUP: ("EmbeddingLookup", None), BuiltinOperator.FLOOR: ("Floor", None), BuiltinOperator.FULLY_CONNECTED: ( "FullyConnectedAct", OptionsSerializer("FullyConnectedOptions", (fused_act, "weights_format")), ), - BuiltinOperator.HASHTABLE_LOOKUP: (None, None), - # BuiltinOperator.L2_NORMALIZATION : "L2NormAct", - BuiltinOperator.L2_POOL_2D: (None, pool2d_opts), + BuiltinOperator.HASHTABLE_LOOKUP: ("HashtableLookup", None), + BuiltinOperator.L2_NORMALIZATION : ("L2NormAct", OptionsSerializer("L2NormOptions", (fused_act,))), + BuiltinOperator.L2_POOL_2D: ("L2Pool2D", pool2d_opts), BuiltinOperator.LOCAL_RESPONSE_NORMALIZATION: ( "LRN", OptionsSerializer("LocalResponseNormalizationOptions", ("radius", "bias", "alpha", "beta")), ), BuiltinOperator.LOGISTIC: ("Sigmoid", None), - # BuiltinOperator.LSH_PROJECTION : "", + BuiltinOperator.LSH_PROJECTION: ("LSHProjection", OptionsSerializer("LSHProjectionOptions", ("type",))), BuiltinOperator.LSTM: ("LstmAct", lstm_opts), BuiltinOperator.MAX_POOL_2D: ("MaxPool", pool2d_opts), BuiltinOperator.MUL: ("MulAct", OptionsSerializer("MulOptions", (fused_act,))), BuiltinOperator.RELU: ("Relu", None), - BuiltinOperator.RELU_N1_TO_1: (None, None), + BuiltinOperator.RELU_N1_TO_1: ("ReluN1To1", None), BuiltinOperator.RELU6: ("Relu6", None), BuiltinOperator.RESHAPE: ("Reshape", OptionsSerializer("ReshapeOptions", (("new_shape", is_int_vec),))), BuiltinOperator.RESIZE_BILINEAR: ( @@ -507,10 +507,24 @@ builtin_operator_map = { BuiltinOperator.SPACE_TO_DEPTH: ("SpaceToDepth", OptionsSerializer("SpaceToDepthOptions", ("block_size",))), BuiltinOperator.SVDF: ("SvdfAct", OptionsSerializer("SVDFOptions", ("rank", fused_act))), BuiltinOperator.TANH: ("Tanh", None), - # BuiltinOperator.CONCAT_EMBEDDINGS : "", - # BuiltinOperator.SKIP_GRAM : "", - # BuiltinOperator.CALL : "", - BuiltinOperator.EMBEDDING_LOOKUP_SPARSE: (None, OptionsSerializer("EmbeddingLookupSparseOptions", ("combiner",))), + BuiltinOperator.CONCAT_EMBEDDINGS: ( + "ConcatEmbeddings", + OptionsSerializer( + "ConcatEmbeddingsOptions", + ("num_channels", "num_columns_per_channel", "num_columns_per_channel_as_numpy", + "num_columns_per_channel_as_length", "embedding_dim_per_channel", "embedding_dim_per_channel_as_numpy", + "embedding_dim_per_channel_as_length",) + ), + ), + BuiltinOperator.SKIP_GRAM: ( + "SkipGram", + OptionsSerializer("SkipGramOptions", ("ngram_size", "max_skip_size", "include_all_ngrams")) + ), + BuiltinOperator.CALL: ("Call", OptionsSerializer("CallOptions", ("subgraph",))), + BuiltinOperator.EMBEDDING_LOOKUP_SPARSE: ( + "EmbeddingLookupSparse", + OptionsSerializer("EmbeddingLookupSparseOptions", ("combiner",)) + ), BuiltinOperator.PAD: ("Pad", OptionsSerializer("PadOptions")), BuiltinOperator.UNIDIRECTIONAL_SEQUENCE_RNN: ("UnidirectionalSequenceRnnAct", seq_rnn_opts), BuiltinOperator.GATHER: ("GatherV2", OptionsSerializer("GatherOptions", ("axis",))), @@ -533,7 +547,7 @@ builtin_operator_map = { BuiltinOperator.TOPK_V2: ("TopKV2", OptionsSerializer("TopKV2Options")), BuiltinOperator.SPLIT: ("Split", OptionsSerializer("SplitOptions", ("num_splits",))), BuiltinOperator.LOG_SOFTMAX: ("LogSoftmax", OptionsSerializer("LogSoftmaxOptions")), - # BuiltinOperator.DELEGATE : "", + BuiltinOperator.DELEGATE : ("Delegate", None), BuiltinOperator.BIDIRECTIONAL_SEQUENCE_LSTM: ("BidirectionalSequenceLstmAct", bidir_seq_lstm_opts), BuiltinOperator.CAST: ( "Cast", @@ -552,14 +566,14 @@ builtin_operator_map = { OptionsSerializer("ArgMaxOptions", (("output_type", datatype_deserialize, datatype_serialize),)), ), BuiltinOperator.MINIMUM: ("Minimum", OptionsSerializer("MaximumMinimumOptions")), - BuiltinOperator.LESS: ("Less", None), - BuiltinOperator.NEG: ("Neg", None), - BuiltinOperator.PADV2: ("PadV2", None), - BuiltinOperator.GREATER: ("Greater", None), - BuiltinOperator.GREATER_EQUAL: ("GreaterEqual", None), - BuiltinOperator.LESS_EQUAL: ("LessEqual", None), - BuiltinOperator.SELECT: ("Select", None), - BuiltinOperator.SLICE: ("Slice", None), + BuiltinOperator.LESS: ("Less", OptionsSerializer("LessOptions")), + BuiltinOperator.NEG: ("Neg", OptionsSerializer("NegOptions")), + BuiltinOperator.PADV2: ("PadV2", OptionsSerializer("PadV2Options")), + BuiltinOperator.GREATER: ("Greater", OptionsSerializer("GreaterOptions")), + BuiltinOperator.GREATER_EQUAL: ("GreaterEqual", OptionsSerializer("GreaterEqualOptions")), + BuiltinOperator.LESS_EQUAL: ("LessEqual", OptionsSerializer("LessEqualOptions")), + BuiltinOperator.SELECT: ("Select", OptionsSerializer("SelectOptions")), + BuiltinOperator.SLICE: ("Slice", OptionsSerializer("SliceOptions")), BuiltinOperator.SIN: ("Sin", None), BuiltinOperator.TRANSPOSE_CONV: ( "Conv2DBackpropInput", @@ -570,9 +584,9 @@ builtin_operator_map = { OptionsSerializer("SparseToDenseOptions", ("validate_indices",)), ), BuiltinOperator.TILE: ("Tile", OptionsSerializer("TileOptions")), - BuiltinOperator.EXPAND_DIMS: ("ExpandDims", None), - BuiltinOperator.EQUAL: ("Equal", None), - BuiltinOperator.NOT_EQUAL: ("NotEqual", None), + BuiltinOperator.EXPAND_DIMS: ("ExpandDims", OptionsSerializer("ExpandDimsOptions")), + BuiltinOperator.EQUAL: ("Equal", OptionsSerializer("EqualOptions")), + BuiltinOperator.NOT_EQUAL: ("NotEqual", OptionsSerializer("NotEqualOptions")), BuiltinOperator.LOG: ("Log", None), BuiltinOperator.SUM: ("Sum", None), BuiltinOperator.SQRT: ("Sqrt", None), @@ -581,7 +595,7 @@ builtin_operator_map = { "Shape", OptionsSerializer("ShapeOptions", (("out_type", datatype_deserialize, datatype_serialize),)), ), - BuiltinOperator.POW: ("Pow", None), + BuiltinOperator.POW: ("Pow", OptionsSerializer("PowOptions")), BuiltinOperator.ARG_MIN: ( "ArgMin", OptionsSerializer("ArgMinOptions", (("output_type", datatype_deserialize, datatype_serialize),)), @@ -593,47 +607,47 @@ builtin_operator_map = { BuiltinOperator.REDUCE_PROD: ("Prod", reducer_opts), BuiltinOperator.REDUCE_MAX: ("Max", reducer_opts), BuiltinOperator.PACK: ("Pack", OptionsSerializer("PackOptions", ("values_count", "axis"))), - BuiltinOperator.LOGICAL_OR: ("LogicalOr", None), + BuiltinOperator.LOGICAL_OR: ("LogicalOr", OptionsSerializer("LogicalOrOptions")), BuiltinOperator.ONE_HOT: ("OneHot", OptionsSerializer("OneHotOptions", ("axis",))), - BuiltinOperator.LOGICAL_AND: ("LogicalAnd", None), - BuiltinOperator.LOGICAL_NOT: ("LogicalNot", None), + BuiltinOperator.LOGICAL_AND: ("LogicalAnd", OptionsSerializer("LogicalAndOptions")), + BuiltinOperator.LOGICAL_NOT: ("LogicalNot", OptionsSerializer("LogicalNotOptions")), BuiltinOperator.UNPACK: ("Unpack", OptionsSerializer("UnpackOptions", ("num", "axis"))), BuiltinOperator.REDUCE_MIN: ("Min", reducer_opts), - BuiltinOperator.FLOOR_DIV: ("FloorDiv", None), + BuiltinOperator.FLOOR_DIV: ("FloorDiv", OptionsSerializer("FloorDivOptions")), BuiltinOperator.REDUCE_ANY: ("Any", reducer_opts), - BuiltinOperator.SQUARE: ("Square", None), - BuiltinOperator.ZEROS_LIKE: ("ZerosLike", None), - BuiltinOperator.FILL: ("Fill", None), - BuiltinOperator.FLOOR_MOD: ("FloorMod", None), - BuiltinOperator.RANGE: ("Range", None), + BuiltinOperator.SQUARE: ("Square", OptionsSerializer("SquareOptions")), + BuiltinOperator.ZEROS_LIKE: ("ZerosLike", OptionsSerializer("ZerosLikeOptions")), + BuiltinOperator.FILL: ("Fill", OptionsSerializer("FillOptions")), + BuiltinOperator.FLOOR_MOD: ("FloorMod", OptionsSerializer("FloorModOptions")), + BuiltinOperator.RANGE: ("Range", OptionsSerializer("RangeOptions")), BuiltinOperator.RESIZE_NEAREST_NEIGHBOR: ( "ResizeNearestNeighbor", OptionsSerializer("ResizeNearestNeighborOptions", ("align_corners",)), ), BuiltinOperator.LEAKY_RELU: ("LeakyRelu", OptionsSerializer("LeakyReluOptions", ("alpha",))), - BuiltinOperator.SQUARED_DIFFERENCE: ("SquaredDifference", None), + BuiltinOperator.SQUARED_DIFFERENCE: ("SquaredDifference", OptionsSerializer("SquaredDifferenceOptions")), BuiltinOperator.MIRROR_PAD: ("MirrorPad", OptionsSerializer("MirrorPadOptions", ("mode",))), - BuiltinOperator.ABS: ("Abs", None), + BuiltinOperator.ABS: ("Abs", OptionsSerializer("AbsOptions")), BuiltinOperator.SPLIT_V: ("SplitV", OptionsSerializer("SplitVOptions", ("num_splits",))), BuiltinOperator.UNIQUE: ( "Unique", OptionsSerializer("UniqueOptions", (("idx_out_type", datatype_deserialize, datatype_serialize),)), ), BuiltinOperator.CEIL: ("Ceil", None), - BuiltinOperator.REVERSE_V2: ("ReverseV2", None), - BuiltinOperator.ADD_N: ("AddN", None), - BuiltinOperator.GATHER_ND: ("GatherNd", None), - BuiltinOperator.COS: ("Cos", None), - BuiltinOperator.WHERE: ("Where", None), - BuiltinOperator.RANK: ("Rank", None), + BuiltinOperator.REVERSE_V2: ("ReverseV2", OptionsSerializer("ReverseV2Options")), + BuiltinOperator.ADD_N: ("AddN", OptionsSerializer("AddNOptions")), + BuiltinOperator.GATHER_ND: ("GatherNd", OptionsSerializer("GatherNdOptions")), + BuiltinOperator.COS: ("Cos", OptionsSerializer("CosOptions")), + BuiltinOperator.WHERE: ("Where", OptionsSerializer("WhereOptions")), + BuiltinOperator.RANK: ("Rank", OptionsSerializer("RankOptions")), BuiltinOperator.ELU: ("Elu", None), BuiltinOperator.REVERSE_SEQUENCE: ( "ReverseSequence", OptionsSerializer("ReverseSequenceOptions", ("seq_dim", "batch_dim")), ), - BuiltinOperator.MATRIX_DIAG: ("MatrixDiag", None), - BuiltinOperator.QUANTIZE: ("Quantize", None), - BuiltinOperator.MATRIX_SET_DIAG: ("MatrixSetDiag", None), + BuiltinOperator.MATRIX_DIAG: ("MatrixDiag", OptionsSerializer("MatrixDiagOptions")), + BuiltinOperator.QUANTIZE: ("Quantize", OptionsSerializer("QuantizeOptions")), + BuiltinOperator.MATRIX_SET_DIAG: ("MatrixSetDiag", OptionsSerializer("MatrixSetDiagOptions")), BuiltinOperator.HARD_SWISH: ("HardSwish", OptionsSerializer("HardSwishOptions")), BuiltinOperator.IF: ("If", OptionsSerializer("IfOptions", ("then_subgraph_index", "else_subgraph_index"))), BuiltinOperator.WHILE: ("While", OptionsSerializer("WhileOptions", ("cond_subgraph_index", "body_subgraph_index"))), -- cgit v1.2.1