From ba8a4bf62f9c89afde25486037ed854b2bedb704 Mon Sep 17 00:00:00 2001 From: Ledion Daja Date: Fri, 16 Jun 2023 14:00:26 +0200 Subject: Replace AllOpsResolver usage with new solution AllOpsResolver is no longer available. Create a new similar fallback solution that is based on a MicroMutableOpResolver instance instead. Change-Id: I398d0d99c4d0a5230ab1435796e1e1c6dea47f8f --- .../inference_process/src/inference_process.cpp | 6 +- .../src/micro_mutable_all_ops_resolver.h | 125 +++++++++++++++++++++ 2 files changed, 126 insertions(+), 5 deletions(-) create mode 100644 applications/inference_process/src/micro_mutable_all_ops_resolver.h diff --git a/applications/inference_process/src/inference_process.cpp b/applications/inference_process/src/inference_process.cpp index 3cbc8e0..ead99e7 100644 --- a/applications/inference_process/src/inference_process.cpp +++ b/applications/inference_process/src/inference_process.cpp @@ -17,7 +17,7 @@ */ #ifndef INFERENCE_PROCESS_OPS_RESOLVER -#include "tensorflow/lite/micro/all_ops_resolver.h" +#include "micro_mutable_all_ops_resolver.h" #else #define _STRINGIFY(a) #a #define STRINGIFY(a) _STRINGIFY(a) @@ -150,11 +150,7 @@ bool InferenceProcess::runJob(InferenceJob &job) { } // Create the TFL micro interpreter -#ifndef INFERENCE_PROCESS_OPS_RESOLVER - tflite::AllOpsResolver resolver; -#else tflite::MicroMutableOpResolver resolver = get_resolver(); -#endif tflite::ArmProfiler profiler; tflite::MicroInterpreter interpreter(model, resolver, tensorArena, tensorArenaSize, nullptr, &profiler); diff --git a/applications/inference_process/src/micro_mutable_all_ops_resolver.h b/applications/inference_process/src/micro_mutable_all_ops_resolver.h new file mode 100644 index 0000000..7664a09 --- /dev/null +++ b/applications/inference_process/src/micro_mutable_all_ops_resolver.h @@ -0,0 +1,125 @@ +/* Copyright 2023 The TensorFlow Authors. All Rights Reserved. + Copyright 2023 Arm Limited and/or its affiliates + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#pragma once + +#include + +constexpr int kNumberOperators = 97; + +inline tflite::MicroMutableOpResolver get_resolver() { + tflite::MicroMutableOpResolver micro_op_resolver; + + micro_op_resolver.AddAbs(); + micro_op_resolver.AddAdd(); + micro_op_resolver.AddAddN(); + micro_op_resolver.AddArgMax(); + micro_op_resolver.AddArgMin(); + micro_op_resolver.AddAssignVariable(); + micro_op_resolver.AddAveragePool2D(); + micro_op_resolver.AddBatchToSpaceNd(); + micro_op_resolver.AddBroadcastArgs(); + micro_op_resolver.AddBroadcastTo(); + micro_op_resolver.AddCallOnce(); + micro_op_resolver.AddCast(); + micro_op_resolver.AddCeil(); + micro_op_resolver.AddCircularBuffer(); + micro_op_resolver.AddConcatenation(); + micro_op_resolver.AddConv2D(); + micro_op_resolver.AddCos(); + micro_op_resolver.AddCumSum(); + micro_op_resolver.AddDepthToSpace(); + micro_op_resolver.AddDepthwiseConv2D(); + micro_op_resolver.AddDequantize(); + micro_op_resolver.AddDetectionPostprocess(); + micro_op_resolver.AddDiv(); + micro_op_resolver.AddElu(); + micro_op_resolver.AddEqual(); + micro_op_resolver.AddEthosU(); + micro_op_resolver.AddExp(); + micro_op_resolver.AddExpandDims(); + micro_op_resolver.AddFill(); + micro_op_resolver.AddFloor(); + micro_op_resolver.AddFloorDiv(); + micro_op_resolver.AddFloorMod(); + micro_op_resolver.AddFullyConnected(); + micro_op_resolver.AddGather(); + micro_op_resolver.AddGatherNd(); + micro_op_resolver.AddGreater(); + micro_op_resolver.AddGreaterEqual(); + micro_op_resolver.AddHardSwish(); + micro_op_resolver.AddIf(); + micro_op_resolver.AddL2Normalization(); + micro_op_resolver.AddL2Pool2D(); + micro_op_resolver.AddLeakyRelu(); + micro_op_resolver.AddLess(); + micro_op_resolver.AddLessEqual(); + micro_op_resolver.AddLog(); + micro_op_resolver.AddLogicalAnd(); + micro_op_resolver.AddLogicalNot(); + micro_op_resolver.AddLogicalOr(); + micro_op_resolver.AddLogistic(); + micro_op_resolver.AddLogSoftmax(); + micro_op_resolver.AddMaxPool2D(); + micro_op_resolver.AddMaximum(); + micro_op_resolver.AddMean(); + micro_op_resolver.AddMinimum(); + micro_op_resolver.AddMirrorPad(); + micro_op_resolver.AddMul(); + micro_op_resolver.AddNeg(); + micro_op_resolver.AddNotEqual(); + micro_op_resolver.AddPack(); + micro_op_resolver.AddPad(); + micro_op_resolver.AddPadV2(); + micro_op_resolver.AddPrelu(); + micro_op_resolver.AddQuantize(); + micro_op_resolver.AddReadVariable(); + micro_op_resolver.AddReduceMax(); + micro_op_resolver.AddRelu(); + micro_op_resolver.AddRelu6(); + micro_op_resolver.AddReshape(); + micro_op_resolver.AddResizeBilinear(); + micro_op_resolver.AddResizeNearestNeighbor(); + micro_op_resolver.AddRound(); + micro_op_resolver.AddRsqrt(); + micro_op_resolver.AddSelectV2(); + micro_op_resolver.AddShape(); + micro_op_resolver.AddSin(); + micro_op_resolver.AddSlice(); + micro_op_resolver.AddSoftmax(); + micro_op_resolver.AddSpaceToBatchNd(); + micro_op_resolver.AddSpaceToDepth(); + micro_op_resolver.AddSplit(); + micro_op_resolver.AddSplitV(); + micro_op_resolver.AddSqrt(); + micro_op_resolver.AddSquare(); + micro_op_resolver.AddSquaredDifference(); + micro_op_resolver.AddSqueeze(); + micro_op_resolver.AddStridedSlice(); + micro_op_resolver.AddSub(); + micro_op_resolver.AddSum(); + micro_op_resolver.AddSvdf(); + micro_op_resolver.AddTanh(); + micro_op_resolver.AddTranspose(); + micro_op_resolver.AddTransposeConv(); + micro_op_resolver.AddUnidirectionalSequenceLSTM(); + micro_op_resolver.AddUnpack(); + micro_op_resolver.AddVarHandle(); + micro_op_resolver.AddWhile(); + micro_op_resolver.AddZerosLike(); + + return micro_op_resolver; +} -- cgit v1.2.1