1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2022 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker 6*89c4ff92SAndroid Build Coastguard Worker #pragma once 7*89c4ff92SAndroid Build Coastguard Worker 8*89c4ff92SAndroid Build Coastguard Worker #include "ConversionUtils.hpp" 9*89c4ff92SAndroid Build Coastguard Worker 10*89c4ff92SAndroid Build Coastguard Worker #include <nnapi/OperandTypes.h> 11*89c4ff92SAndroid Build Coastguard Worker #include <nnapi/Result.h> 12*89c4ff92SAndroid Build Coastguard Worker #include <nnapi/Types.h> 13*89c4ff92SAndroid Build Coastguard Worker 14*89c4ff92SAndroid Build Coastguard Worker #include <armnn/Types.hpp> 15*89c4ff92SAndroid Build Coastguard Worker using namespace armnn; 16*89c4ff92SAndroid Build Coastguard Worker 17*89c4ff92SAndroid Build Coastguard Worker namespace armnn_driver 18*89c4ff92SAndroid Build Coastguard Worker { 19*89c4ff92SAndroid Build Coastguard Worker 20*89c4ff92SAndroid Build Coastguard Worker class Converter 21*89c4ff92SAndroid Build Coastguard Worker { 22*89c4ff92SAndroid Build Coastguard Worker 23*89c4ff92SAndroid Build Coastguard Worker public: 24*89c4ff92SAndroid Build Coastguard Worker using Model = ::android::nn::Model; 25*89c4ff92SAndroid Build Coastguard Worker using Operand = ::android::nn::Operand; 26*89c4ff92SAndroid Build Coastguard Worker using OperandLifeTime = ::android::nn::Operand::LifeTime; 27*89c4ff92SAndroid Build Coastguard Worker using OperandType = ::android::nn::OperandType; 28*89c4ff92SAndroid Build Coastguard Worker using Operation = ::android::nn::Operation; 29*89c4ff92SAndroid Build Coastguard Worker using OperationType = ::android::nn::OperationType; 30*89c4ff92SAndroid Build Coastguard Worker using ErrorStatus = ::android::nn::ErrorStatus; 31*89c4ff92SAndroid Build Coastguard Worker static bool ConvertOperation(const Operation& operation, const Model& model, ConversionData& data); 32*89c4ff92SAndroid Build Coastguard Worker 33*89c4ff92SAndroid Build Coastguard Worker private: 34*89c4ff92SAndroid Build Coastguard Worker static bool ConvertAdd(const Operation& operation, const Model& model, ConversionData& data); 35*89c4ff92SAndroid Build Coastguard Worker 36*89c4ff92SAndroid Build Coastguard Worker static bool ConvertArgMinMax(const Operation& operation, 37*89c4ff92SAndroid Build Coastguard Worker const Model& model, 38*89c4ff92SAndroid Build Coastguard Worker ConversionData& data, 39*89c4ff92SAndroid Build Coastguard Worker armnn::ArgMinMaxFunction argMinMaxFunction); 40*89c4ff92SAndroid Build Coastguard Worker 41*89c4ff92SAndroid Build Coastguard Worker static bool ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data); 42*89c4ff92SAndroid Build Coastguard Worker 43*89c4ff92SAndroid Build Coastguard Worker static bool ConvertBatchMatMul(const Operation& operation, const Model& model, ConversionData& data); 44*89c4ff92SAndroid Build Coastguard Worker 45*89c4ff92SAndroid Build Coastguard Worker static bool ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data); 46*89c4ff92SAndroid Build Coastguard Worker 47*89c4ff92SAndroid Build Coastguard Worker static bool ConvertCast(const Operation& operation, const Model& model, ConversionData& data); 48*89c4ff92SAndroid Build Coastguard Worker 49*89c4ff92SAndroid Build Coastguard Worker static bool ConvertComparison(const Operation& operation, 50*89c4ff92SAndroid Build Coastguard Worker const Model& model, 51*89c4ff92SAndroid Build Coastguard Worker ConversionData& data, 52*89c4ff92SAndroid Build Coastguard Worker armnn::ComparisonOperation comparisonOperation); 53*89c4ff92SAndroid Build Coastguard Worker 54*89c4ff92SAndroid Build Coastguard Worker static bool ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data); 55*89c4ff92SAndroid Build Coastguard Worker 56*89c4ff92SAndroid Build Coastguard Worker static bool ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data); 57*89c4ff92SAndroid Build Coastguard Worker 58*89c4ff92SAndroid Build Coastguard Worker static bool ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data); 59*89c4ff92SAndroid Build Coastguard Worker 60*89c4ff92SAndroid Build Coastguard Worker static bool ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data); 61*89c4ff92SAndroid Build Coastguard Worker 62*89c4ff92SAndroid Build Coastguard Worker static bool ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data); 63*89c4ff92SAndroid Build Coastguard Worker 64*89c4ff92SAndroid Build Coastguard Worker static bool ConvertDiv(const Operation& operation, const Model& model, ConversionData& data); 65*89c4ff92SAndroid Build Coastguard Worker 66*89c4ff92SAndroid Build Coastguard Worker static bool ConvertElementwiseUnary(const Operation& operation, 67*89c4ff92SAndroid Build Coastguard Worker const Model& model, 68*89c4ff92SAndroid Build Coastguard Worker ConversionData& data, 69*89c4ff92SAndroid Build Coastguard Worker armnn::UnaryOperation unaryOperation); 70*89c4ff92SAndroid Build Coastguard Worker 71*89c4ff92SAndroid Build Coastguard Worker static bool ConvertElu(const Operation& operation, const Model& model, ConversionData& data); 72*89c4ff92SAndroid Build Coastguard Worker 73*89c4ff92SAndroid Build Coastguard Worker static bool ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data); 74*89c4ff92SAndroid Build Coastguard Worker 75*89c4ff92SAndroid Build Coastguard Worker static bool ConvertFill(const Operation& operation, const Model& model, ConversionData& data); 76*89c4ff92SAndroid Build Coastguard Worker 77*89c4ff92SAndroid Build Coastguard Worker static bool ConvertFloor(const Operation& operation, const Model& model, ConversionData& data); 78*89c4ff92SAndroid Build Coastguard Worker 79*89c4ff92SAndroid Build Coastguard Worker static bool ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data); 80*89c4ff92SAndroid Build Coastguard Worker 81*89c4ff92SAndroid Build Coastguard Worker static bool ConvertGather(const Operation& operation, const Model& model, ConversionData& data); 82*89c4ff92SAndroid Build Coastguard Worker 83*89c4ff92SAndroid Build Coastguard Worker static bool ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data); 84*89c4ff92SAndroid Build Coastguard Worker 85*89c4ff92SAndroid Build Coastguard Worker static bool ConvertHardSwish(const Operation& operation, const Model& model, ConversionData& data); 86*89c4ff92SAndroid Build Coastguard Worker 87*89c4ff92SAndroid Build Coastguard Worker static bool ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data); 88*89c4ff92SAndroid Build Coastguard Worker 89*89c4ff92SAndroid Build Coastguard Worker static bool ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data); 90*89c4ff92SAndroid Build Coastguard Worker 91*89c4ff92SAndroid Build Coastguard Worker static bool ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data); 92*89c4ff92SAndroid Build Coastguard Worker 93*89c4ff92SAndroid Build Coastguard Worker static bool ConvertLocalResponseNormalization(const Operation& operation, 94*89c4ff92SAndroid Build Coastguard Worker const Model& model, 95*89c4ff92SAndroid Build Coastguard Worker ConversionData& data); 96*89c4ff92SAndroid Build Coastguard Worker 97*89c4ff92SAndroid Build Coastguard Worker static bool ConvertLogicalBinary(const Operation& operation, 98*89c4ff92SAndroid Build Coastguard Worker const Model& model, 99*89c4ff92SAndroid Build Coastguard Worker ConversionData& data, 100*89c4ff92SAndroid Build Coastguard Worker armnn::LogicalBinaryOperation logicalOperation); 101*89c4ff92SAndroid Build Coastguard Worker 102*89c4ff92SAndroid Build Coastguard Worker static bool ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data); 103*89c4ff92SAndroid Build Coastguard Worker 104*89c4ff92SAndroid Build Coastguard Worker static bool ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data); 105*89c4ff92SAndroid Build Coastguard Worker 106*89c4ff92SAndroid Build Coastguard Worker static bool ConvertLstm(const Operation& operation, const Model& model, ConversionData& data); 107*89c4ff92SAndroid Build Coastguard Worker 108*89c4ff92SAndroid Build Coastguard Worker static bool ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data); 109*89c4ff92SAndroid Build Coastguard Worker 110*89c4ff92SAndroid Build Coastguard Worker static bool ConvertMaximum(const Operation& operation, const Model& model, ConversionData& data); 111*89c4ff92SAndroid Build Coastguard Worker 112*89c4ff92SAndroid Build Coastguard Worker static bool ConvertMean(const Operation& operation, const Model& model, ConversionData& data); 113*89c4ff92SAndroid Build Coastguard Worker 114*89c4ff92SAndroid Build Coastguard Worker static bool ConvertMinimum(const Operation& operation, const Model& model, ConversionData& data); 115*89c4ff92SAndroid Build Coastguard Worker 116*89c4ff92SAndroid Build Coastguard Worker static bool ConvertMul(const Operation& operation, const Model& model, ConversionData& data); 117*89c4ff92SAndroid Build Coastguard Worker 118*89c4ff92SAndroid Build Coastguard Worker static bool ConvertPad(const Operation& operation, const Model& model, ConversionData& data); 119*89c4ff92SAndroid Build Coastguard Worker 120*89c4ff92SAndroid Build Coastguard Worker static bool ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data); 121*89c4ff92SAndroid Build Coastguard Worker 122*89c4ff92SAndroid Build Coastguard Worker static bool ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data); 123*89c4ff92SAndroid Build Coastguard Worker 124*89c4ff92SAndroid Build Coastguard Worker static bool ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data); 125*89c4ff92SAndroid Build Coastguard Worker 126*89c4ff92SAndroid Build Coastguard Worker static bool ConvertQuantizedLstm(const Operation& operation, const Model& model, ConversionData& data); 127*89c4ff92SAndroid Build Coastguard Worker 128*89c4ff92SAndroid Build Coastguard Worker static bool ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data); 129*89c4ff92SAndroid Build Coastguard Worker 130*89c4ff92SAndroid Build Coastguard Worker static bool ConvertRank(const Operation& operation, const Model& model, ConversionData& data); 131*89c4ff92SAndroid Build Coastguard Worker 132*89c4ff92SAndroid Build Coastguard Worker static bool ConvertReLu(const Operation& operation, const Model& model, ConversionData& data); 133*89c4ff92SAndroid Build Coastguard Worker 134*89c4ff92SAndroid Build Coastguard Worker static bool ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data); 135*89c4ff92SAndroid Build Coastguard Worker 136*89c4ff92SAndroid Build Coastguard Worker static bool ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data); 137*89c4ff92SAndroid Build Coastguard Worker 138*89c4ff92SAndroid Build Coastguard Worker static bool ConvertReshape(const Operation& operation, const Model& model, ConversionData& data); 139*89c4ff92SAndroid Build Coastguard Worker 140*89c4ff92SAndroid Build Coastguard Worker static bool ConvertResize(const Operation& operation, 141*89c4ff92SAndroid Build Coastguard Worker const Model& model, 142*89c4ff92SAndroid Build Coastguard Worker ConversionData& data, 143*89c4ff92SAndroid Build Coastguard Worker armnn::ResizeMethod resizeMethod); 144*89c4ff92SAndroid Build Coastguard Worker 145*89c4ff92SAndroid Build Coastguard Worker static bool ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data); 146*89c4ff92SAndroid Build Coastguard Worker 147*89c4ff92SAndroid Build Coastguard Worker static bool ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data); 148*89c4ff92SAndroid Build Coastguard Worker 149*89c4ff92SAndroid Build Coastguard Worker static bool ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data); 150*89c4ff92SAndroid Build Coastguard Worker 151*89c4ff92SAndroid Build Coastguard Worker static bool ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data); 152*89c4ff92SAndroid Build Coastguard Worker 153*89c4ff92SAndroid Build Coastguard Worker static bool ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data); 154*89c4ff92SAndroid Build Coastguard Worker 155*89c4ff92SAndroid Build Coastguard Worker static bool ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data); 156*89c4ff92SAndroid Build Coastguard Worker 157*89c4ff92SAndroid Build Coastguard Worker static bool ConvertSub(const Operation& operation, const Model& model, ConversionData& data); 158*89c4ff92SAndroid Build Coastguard Worker 159*89c4ff92SAndroid Build Coastguard Worker static bool ConvertTanH(const Operation& operation, const Model& model, ConversionData& data); 160*89c4ff92SAndroid Build Coastguard Worker 161*89c4ff92SAndroid Build Coastguard Worker static bool ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data); 162*89c4ff92SAndroid Build Coastguard Worker 163*89c4ff92SAndroid Build Coastguard Worker static bool ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data); 164*89c4ff92SAndroid Build Coastguard Worker }; 165*89c4ff92SAndroid Build Coastguard Worker 166*89c4ff92SAndroid Build Coastguard Worker } // namespace armnn_driver 167