From f71079328ae72a65c91e410b2bd35eabb67cb6d1 Mon Sep 17 00:00:00 2001 From: Jan Eilers Date: Fri, 1 Nov 2019 11:09:36 +0000 Subject: Add fp16 support for dequantize * Changed RefDequantizeWorkload to use Encoder/Decoder * Added related unit tests for Cl, Neon and Ref Signed-off-by: Jan Eilers Change-Id: Ic2fd4103090dd2127c6859b49305736f7b2dfb05 --- src/backends/backendsCommon/WorkloadFactory.cpp | 2 +- .../test/layerTests/DequantizeTestImpl.cpp | 72 +++++++++++++--------- .../test/layerTests/DequantizeTestImpl.hpp | 10 +++ 3 files changed, 55 insertions(+), 29 deletions(-) (limited to 'src/backends/backendsCommon') diff --git a/src/backends/backendsCommon/WorkloadFactory.cpp b/src/backends/backendsCommon/WorkloadFactory.cpp index b4b4ffca30..4a7f007c2e 100644 --- a/src/backends/backendsCommon/WorkloadFactory.cpp +++ b/src/backends/backendsCommon/WorkloadFactory.cpp @@ -266,7 +266,7 @@ bool IWorkloadFactory::IsLayerSupported(const BackendId& backendId, const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo(); result = layerSupportObject->IsDequantizeSupported(OverrideDataType(input, dataType), - OverrideDataType(output, DataType::Float32), + output, reason); break; } diff --git a/src/backends/backendsCommon/test/layerTests/DequantizeTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/DequantizeTestImpl.cpp index 42673d5b99..6a3e852ed2 100644 --- a/src/backends/backendsCommon/test/layerTests/DequantizeTestImpl.cpp +++ b/src/backends/backendsCommon/test/layerTests/DequantizeTestImpl.cpp @@ -17,20 +17,20 @@ namespace { -template -LayerTestResult DequantizeTestImpl( - armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, - const armnn::TensorInfo& inputTensorInfo, - const armnn::TensorInfo& outputTensorInfo, - const std::vector& inputData, - const std::vector& expectedOutputData, - armnn::DequantizeQueueDescriptor descriptor) +template +LayerTestResult DequantizeTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::TensorInfo& inputTensorInfo, + const armnn::TensorInfo& outputTensorInfo, + const std::vector& inputData, + const std::vector& expectedOutputData, + armnn::DequantizeQueueDescriptor descriptor) { boost::multi_array input = MakeTensor(inputTensorInfo, inputData); - LayerTestResult ret(outputTensorInfo); - ret.outputExpected = MakeTensor(outputTensorInfo, expectedOutputData); + LayerTestResult ret(outputTensorInfo); + ret.outputExpected = MakeTensor(outputTensorInfo, expectedOutputData); std::unique_ptr inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); @@ -53,8 +53,10 @@ LayerTestResult DequantizeTestImpl( return ret; } -template -LayerTestResult DequantizeSimpleTest( +template > +LayerTestResult DequantizeSimpleTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { @@ -63,7 +65,7 @@ LayerTestResult DequantizeSimpleTest( armnn::DequantizeQueueDescriptor desc; const armnn::TensorInfo inputTensorInfo({1, 2, 2, 3}, ArmnnInputType, 0.5f, 0); - const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, armnn::DataType::Float32); + const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, ArmnnOutputType); std::vector inputData = std::vector( { @@ -73,21 +75,19 @@ LayerTestResult DequantizeSimpleTest( 20, 22, 24, }); - std::vector expectedOutputData = std::vector( + std::vector expectedOutputData; + for (OutType i = OutType(1); i <= OutType(12); ++i) { - 1.0f, 2.0f, 3.0f, - 4.0f, 5.0f, 6.0f, - 7.0f, 8.0f, 9.0f, - 10.0f, 11.0f, 12.0f, - }); - - return DequantizeTestImpl(workloadFactory, - memoryManager, - inputTensorInfo, - outputTensorInfo, - inputData, - expectedOutputData, - desc); + expectedOutputData.push_back(i); + } + + return DequantizeTestImpl(workloadFactory, + memoryManager, + inputTensorInfo, + outputTensorInfo, + inputData, + expectedOutputData, + desc); } template @@ -149,3 +149,19 @@ LayerTestResult DequantizeSimpleInt16Test( { return DequantizeSimpleTest(workloadFactory, memoryManager); } + +LayerTestResult DequantizeSimpleUint8ToFp16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) +{ + return DequantizeSimpleTest(workloadFactory, + memoryManager); +} + +LayerTestResult DequantizeSimpleInt16ToFp16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) +{ + return DequantizeSimpleTest(workloadFactory, + memoryManager); +} diff --git a/src/backends/backendsCommon/test/layerTests/DequantizeTestImpl.hpp b/src/backends/backendsCommon/test/layerTests/DequantizeTestImpl.hpp index 55ea4b498f..4d837808a6 100644 --- a/src/backends/backendsCommon/test/layerTests/DequantizeTestImpl.hpp +++ b/src/backends/backendsCommon/test/layerTests/DequantizeTestImpl.hpp @@ -10,6 +10,8 @@ #include #include +#include + LayerTestResult DequantizeSimpleUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); @@ -21,3 +23,11 @@ LayerTestResult DequantizeOffsetUint8Test( LayerTestResult DequantizeSimpleInt16Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult DequantizeSimpleUint8ToFp16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult DequantizeSimpleInt16ToFp16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -- cgit v1.2.1