From acf479a1c3841b3036dc63dd84f1d57d29f94f64 Mon Sep 17 00:00:00 2001 From: David Monahan Date: Wed, 29 May 2019 14:27:04 +0100 Subject: IVGCVSW-3146 Update Android NN Driver to support Dequantize Signed-off-by: David Monahan Change-Id: I734336fe0487198ec03779d3a85706883c137163 --- 1.0/HalPolicy.cpp | 33 +++++++++++++++++++++++++++++++++ 1.0/HalPolicy.hpp | 2 ++ 2 files changed, 35 insertions(+) (limited to '1.0') diff --git a/1.0/HalPolicy.cpp b/1.0/HalPolicy.cpp index deb31d34..5f421076 100644 --- a/1.0/HalPolicy.cpp +++ b/1.0/HalPolicy.cpp @@ -28,6 +28,8 @@ bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, return ConvertConv2d(operation, model, data); case V1_0::OperationType::DEPTHWISE_CONV_2D: return ConvertDepthwiseConv2d(operation, model, data); + case V1_0::OperationType::DEQUANTIZE: + return ConvertDequantize(operation, model, data); case V1_0::OperationType::FLOOR: return ConvertFloor(operation, model, data); case V1_0::OperationType::FULLY_CONNECTED: @@ -578,6 +580,37 @@ bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model& return SetupAndTrackLayerOutputSlot(operation, 0, *endLayer, model, data); } +bool HalPolicy::ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data) +{ + LayerInputHandle input = ConvertToLayerInputHandle(operation, 0, model, data); + + if (!input.IsValid()) + { + return Fail("%s: Operation has invalid input", __func__); + } + + const Operand* const outputOperand = GetOutputOperand(operation, 0, model); + if (!outputOperand) + { + return Fail("%s: Operation has invalid outputs", __func__); + } + + if (!IsLayerSupportedForAnyBackend(__func__, + armnn::IsDequantizeSupported, + data.m_Backends, + input.GetTensorInfo(), + GetTensorInfoForOperand(*outputOperand))) + { + return false; + } + + armnn::IConnectableLayer* const layer = data.m_Network->AddDequantizeLayer(); + assert(layer != nullptr); + input.Connect(layer->GetInputSlot(0)); + + return SetupAndTrackLayerOutputSlot(operation, 0, *layer, model, data); +} + bool HalPolicy::ConvertFloor(const Operation& operation, const Model& model, ConversionData& data) { LayerInputHandle input = ConvertToLayerInputHandle(operation, 0, model, data); diff --git a/1.0/HalPolicy.hpp b/1.0/HalPolicy.hpp index bbdf630b..c09dc8a8 100644 --- a/1.0/HalPolicy.hpp +++ b/1.0/HalPolicy.hpp @@ -39,6 +39,8 @@ private: static bool ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data); + static bool ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data); + static bool ConvertFloor(const Operation& operation, const Model& model, ConversionData& data); static bool ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data); -- cgit v1.2.1