From 8c2f651ad454d11dd36e212560af23dbea5b758e Mon Sep 17 00:00:00 2001 From: Narumol Prangnawarat Date: Fri, 20 Nov 2020 16:17:48 +0000 Subject: IVGCVSW-5538 Fix delegate DepthwiseConv2d, DIV, Reshape * Correct filter shape for DepthwiseConv2d * Remove non-support data type * Allow check for flatten on Reshape Signed-off-by: Narumol Prangnawarat Change-Id: Ic4be63d7c2f3a2b5e13a1530025a49464c21171b --- delegate/src/Convolution.hpp | 16 +++++++----- delegate/src/Redefine.hpp | 7 +++-- delegate/src/test/ElementwiseBinaryTest.cpp | 12 --------- delegate/src/test/ElementwiseUnaryTest.cpp | 40 ----------------------------- 4 files changed, 14 insertions(+), 61 deletions(-) diff --git a/delegate/src/Convolution.hpp b/delegate/src/Convolution.hpp index fed084e3a9..2d9fdba122 100644 --- a/delegate/src/Convolution.hpp +++ b/delegate/src/Convolution.hpp @@ -340,6 +340,13 @@ TfLiteStatus VisitDepthwiseConv2dOperator(DelegateData& delegateData, biasTensorInfo = armnn::TensorInfo(armnn::TensorShape({1}), GetDataType(tfLiteInputTensor)); } + std::vector swizzledData(filterTensorInfo.GetNumBytes()); + auto filter = + CreateConstTensor(&tfLiteFilterTensor, + filterTensorInfo, + armnn::Optional(permutationVector), + swizzledData.data()); + if (!delegateData.m_Network) { bool isSupported = false; @@ -351,18 +358,13 @@ TfLiteStatus VisitDepthwiseConv2dOperator(DelegateData& delegateData, inputTensorInfo, outputTensorInfo, descriptor, - filterTensorInfo, + filter.GetInfo(), armnn::Optional(biasTensorInfo)); return isSupported ? kTfLiteOk : kTfLiteError; } armnn::IConnectableLayer* layer = nullptr; - std::vector swizzledData(filterTensorInfo.GetNumBytes()); - auto filter = - CreateConstTensor(&tfLiteFilterTensor, - filterTensorInfo, - armnn::Optional(permutationVector), - swizzledData.data()); + if(biasEnabled) { auto biases = diff --git a/delegate/src/Redefine.hpp b/delegate/src/Redefine.hpp index fb58ffdf70..91295768d6 100644 --- a/delegate/src/Redefine.hpp +++ b/delegate/src/Redefine.hpp @@ -105,10 +105,13 @@ TfLiteStatus VisitReshapeOperator(DelegateData& delegateData, for (int i=0; i < reshapeOptions->num_dimensions; ++i) { targetShape.push_back(reshapeOptions->shape[i]); - elementCounter = elementCounter * reshapeOptions->shape[i]; + if (reshapeOptions->shape[i] > 0) + { + elementCounter = elementCounter * reshapeOptions->shape[i]; + } } // Check the number of elements match, otherwise fall back to using the second input tensor. - if (elementCounter == inputTensorInfo0.GetNumElements()) + if (elementCounter <= inputTensorInfo0.GetNumElements()) { targetShapeFound = true; } diff --git a/delegate/src/test/ElementwiseBinaryTest.cpp b/delegate/src/test/ElementwiseBinaryTest.cpp index 0ae60a296d..cc447d9fc3 100644 --- a/delegate/src/test/ElementwiseBinaryTest.cpp +++ b/delegate/src/test/ElementwiseBinaryTest.cpp @@ -696,12 +696,6 @@ TEST_CASE ("DIV_Broadcast_GpuAcc_Test") DivBroadcastTest(backends); } -TEST_CASE ("DIV_UINT8_GpuAcc_Test") -{ - std::vector backends = { armnn::Compute::GpuAcc }; - DivUint8Test(backends); -} - TEST_CASE ("MAX_FP32_GpuAcc_Test") { std::vector backends = { armnn::Compute::GpuAcc }; @@ -823,12 +817,6 @@ TEST_CASE ("DIV_Broadcast_CpuAcc_Test") DivBroadcastTest(backends); } -TEST_CASE ("DIV_UINT8_CpuAcc_Test") -{ - std::vector backends = { armnn::Compute::CpuAcc }; - DivUint8Test(backends); -} - TEST_CASE ("MAX_FP32_CpuAcc_Test") { std::vector backends = { armnn::Compute::CpuAcc }; diff --git a/delegate/src/test/ElementwiseUnaryTest.cpp b/delegate/src/test/ElementwiseUnaryTest.cpp index 012ffde057..3200423b10 100644 --- a/delegate/src/test/ElementwiseUnaryTest.cpp +++ b/delegate/src/test/ElementwiseUnaryTest.cpp @@ -103,26 +103,6 @@ TEST_CASE ("Rsqrt_Float32_GpuAcc_Test") ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, backends, inputValues, expectedOutputValues); } -TEST_CASE ("Sqrt_Float32_GpuAcc_Test") -{ - // Create the ArmNN Delegate - std::vector backends = { armnn::Compute::GpuAcc }; - // Set input data - std::vector inputValues - { - 9.0f, 4.25f, 81.9f, - 0.1f, 0.9f, 169.0f - }; - // Calculate output data - std::vector expectedOutputValues(inputValues.size()); - for (unsigned int i = 0; i < inputValues.size(); ++i) - { - expectedOutputValues[i] = std::sqrt(inputValues[i]); - } - - ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SQRT, backends, inputValues, expectedOutputValues); -} - } // TEST_SUITE("ElementwiseUnary_GpuAccTests") @@ -212,28 +192,8 @@ TEST_CASE ("Rsqrt_Float32_CpuAcc_Test") ElementwiseUnaryFP32Test(tflite::BuiltinOperator_RSQRT, backends, inputValues, expectedOutputValues); } -TEST_CASE ("Sqrt_Float32_CpuAcc_Test") -{ - std::vector backends = { armnn::Compute::CpuAcc }; - // Set input data - std::vector inputValues - { - 9.0f, 4.25f, 81.9f, - 0.1f, 0.9f, 169.0f - }; - // Calculate output data - std::vector expectedOutputValues(inputValues.size()); - for (unsigned int i = 0; i < inputValues.size(); ++i) - { - expectedOutputValues[i] = std::sqrt(inputValues[i]); - } - - ElementwiseUnaryFP32Test(tflite::BuiltinOperator_SQRT, backends, inputValues, expectedOutputValues); -} - } // TEST_SUITE("ElementwiseUnary_CpuAccTests") - TEST_SUITE("ElementwiseUnary_CpuRefTests") { -- cgit v1.2.1