From 407718f768417ce9b858224261cb62c742ec80d0 Mon Sep 17 00:00:00 2001 From: Kevin May Date: Mon, 9 Sep 2019 14:46:41 +0100 Subject: IVGCVSW-3746 Add Android NN Driver support for ABS Signed-off-by: Kevin May Change-Id: Icd32bf6f4d5f58e689b55c1c71b0d028155603c8 --- 1.2/HalPolicy.cpp | 8 ++++++++ 1.2/HalPolicy.hpp | 2 ++ ConversionUtils.hpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ NnapiSupport.txt | 1 + 4 files changed, 57 insertions(+) diff --git a/1.2/HalPolicy.cpp b/1.2/HalPolicy.cpp index 7bad22db..40dd55de 100644 --- a/1.2/HalPolicy.cpp +++ b/1.2/HalPolicy.cpp @@ -21,6 +21,8 @@ bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, { switch (operation.type) { + case V1_2::OperationType::ABS: + return ConvertAbs(operation, model, data); case V1_2::OperationType::ADD: return ConvertAdd(operation, model, data); case V1_2::OperationType::AVERAGE_POOL_2D: @@ -109,6 +111,12 @@ bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, } } +bool HalPolicy::ConvertAbs(const Operation& operation, const Model& model, ConversionData& data) +{ + ALOGV("hal_1_2::HalPolicy::ConvertAbs()"); + return ::ConvertAbs(operation, model, data); +} + bool HalPolicy::ConvertAdd(const Operation& operation, const Model& model, ConversionData& data) { ALOGV("hal_1_2::HalPolicy::ConvertAdd()"); diff --git a/1.2/HalPolicy.hpp b/1.2/HalPolicy.hpp index 5c8a61ec..f021a09c 100644 --- a/1.2/HalPolicy.hpp +++ b/1.2/HalPolicy.hpp @@ -31,6 +31,8 @@ public: static bool ConvertOperation(const Operation& operation, const Model& model, ConversionData& data); private: + static bool ConvertAbs(const Operation& operation, const Model& model, ConversionData& data); + static bool ConvertAdd(const Operation& operation, const Model& model, ConversionData& data); static bool ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data); diff --git a/ConversionUtils.hpp b/ConversionUtils.hpp index cc06ccee..683da5e4 100644 --- a/ConversionUtils.hpp +++ b/ConversionUtils.hpp @@ -3237,4 +3237,50 @@ bool ConvertSpaceToBatchNd(const HalOperation& operation, const HalModel& model, return SetupAndTrackLayerOutputSlot(operation, 0, *layer, model, data); } +template +bool ConvertAbs(const HalOperation& operation, const HalModel& model, ConversionData& data) +{ + LayerInputHandle input = ConvertToLayerInputHandle(operation, 0, model, data); + + if (!input.IsValid()) + { + return Fail("%s: Operation has invalid input", __func__); + } + + using HalOperand = typename HalPolicy::Operand; + const HalOperand* output = GetOutputOperand(operation, 0, model); + if (!output) + { + return Fail("%s: Could not read output 0", __func__); + } + + const armnn::TensorInfo& outputInfo = GetTensorInfoForOperand(*output); + if (IsDynamicTensor(outputInfo)) + { + return Fail("%s: Dynamic output tensors are not supported", __func__); + } + + bool isSupported = false; + FORWARD_LAYER_SUPPORT_FUNC(__func__, + IsAbsSupported, + data.m_Backends, + isSupported, + input.GetTensorInfo(), + outputInfo); + + if (!isSupported) + { + return false; + } + + armnn::IConnectableLayer* const layer = data.m_Network->AddAbsLayer(); + assert(layer != nullptr); + input.Connect(layer->GetInputSlot(0)); + + return SetupAndTrackLayerOutputSlot(operation, 0, *layer, model, data); +} + + } // namespace armnn_driver diff --git a/NnapiSupport.txt b/NnapiSupport.txt index 50d99b13..a0656338 100644 --- a/NnapiSupport.txt +++ b/NnapiSupport.txt @@ -13,6 +13,7 @@ For integration and usage documentation, please see README.md. The following AndroidNN HAL 1.0, 1.1 and 1.2 operations are currently supported: AndroidNN operator Tensor type supported +ABS (FLOAT32) ADD (FLOAT32,QUANT8_ASYMM) AVERAGE_POOL_2D (FLOAT32,QUANT8_ASYMM) BATCH_TO_SPACE_ND (FLOAT32,QUANT8_ASYMM) -- cgit v1.2.1