Error TFLiteModelLoader::loadOperator()

in lib/Importer/TFLiteModelLoader.cpp [1158:1398]


Error TFLiteModelLoader::loadOperator(const tflite::Operator *op,
                                      const OperatorInfo &opInfo) {
  // Opcodes are treated in increasing order to allow easy tracking
  // for which operators are supported and which are not.
  auto opCode = opInfo.code;
  if (opCode == tflite::BuiltinOperator_ADD) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_AVERAGE_POOL_2D) {
    return loadPool2D(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_CONCATENATION) {
    return loadConcat(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_CONV_2D) {
    return loadConv2D(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_DEPTHWISE_CONV_2D) {
    return loadDepthwiseConv2D(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_DEQUANTIZE) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_HARD_SWISH) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_FLOOR) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_FULLY_CONNECTED) {
    return loadFullyConnected(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_LOGISTIC) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_MAX_POOL_2D) {
    return loadPool2D(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_MUL) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_RELU) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_RELU_N1_TO_1) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_RELU6) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_RESHAPE) {
    return loadReshape(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SOFTMAX) {
    return loadSoftmax(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_LOG_SOFTMAX) {
    return loadLogSoftmax(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_TANH) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_PAD) {
    return loadPad(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_TRANSPOSE) {
    return loadTranspose(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_MEAN) {
    return loadReduce(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SUB) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_DIV) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SQUEEZE) {
    return loadReshape(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_STRIDED_SLICE) {
    return loadStridedSlice(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_EXP) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SPLIT) {
    return loadSplit(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_PRELU) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_MAXIMUM) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_ARG_MAX) {
    return loadArg(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_MINIMUM) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_LESS) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_NEG) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_GREATER) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_GREATER_EQUAL) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_LESS_EQUAL) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SLICE) {
    return loadSlice(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_RESIZE_BILINEAR) {
    return loadResizeBilinear(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_RESIZE_NEAREST_NEIGHBOR) {
    return loadResizeNearest(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SPACE_TO_DEPTH) {
    return loadSpaceToDepth(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_DEPTH_TO_SPACE) {
    return loadDepthToSpace(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_CAST) {
    return loadCast(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_GATHER) {
    return loadGather(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_GATHER_ND) {
    return loadGatherND(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SELECT) {
    return loadSelect(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SPACE_TO_BATCH_ND) {
    return loadSpaceToBatchNd(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_BATCH_TO_SPACE_ND) {
    return loadBatchToSpaceNd(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SIN) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_TILE) {
    return loadTile(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_EXPAND_DIMS) {
    return loadReshape(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_EQUAL) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_NOT_EQUAL) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_LOG) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SQRT) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_RSQRT) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SHAPE) {
    return loadShape(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_POW) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_ARG_MIN) {
    return loadArg(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_PACK) {
    return loadPack(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_LOGICAL_OR) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_LOGICAL_AND) {
    return loadBinaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_LOGICAL_NOT) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_UNPACK) {
    return loadUnpack(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_SQUARE) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_LEAKY_RELU) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_ABS) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_CEIL) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_COS) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_QUANTIZE) {
    return loadUnaryArithmetic(op, opInfo);
  }
  if (opCode == tflite::BuiltinOperator_ROUND) {
    return loadUnaryArithmetic(op, opInfo);
  }
  // Load custom operators.
  if (opCode == tflite::BuiltinOperator_CUSTOM) {
    // Get custom operator code.
    std::string customOpCode;
    ASSIGN_VALUE_OR_RETURN_ERR(customOpCode, getOperatorCustomCode(op));
    // Get custom operator options.
    flexbuffers::Map opts = flexbuffers::Map::EmptyMap();
    ASSIGN_VALUE_OR_RETURN_ERR(opts, getOperatorCustomOpts(op));
    // Load custom operator.
    if (customOpCode == "TFLite_Detection_PostProcess") {
      return loadTFLiteDetectionPostProcess(op, opInfo, opts);
    }
    if (customOpCode == "AudioSpectrogram") {
      return loadTFLiteAudioSpectrogram(op, opInfo, opts);
    }
    if (customOpCode == "Mfcc") {
      return loadTFLiteMFCC(op, opInfo, opts);
    }
  }
  return MAKE_ERR(
      strFormat("TensorFlowLite: Operator type '%s' is not supported!",
                opInfo.type.c_str()));
}