diff options
author | Nattapat Chaimanowong <nattapat.chaimanowong@arm.com> | 2019-03-29 15:25:04 +0000 |
---|---|---|
committer | nattapat.chaimanowong <nattapat.chaimanowong@arm.com> | 2019-03-29 16:37:44 +0000 |
commit | 8a54ac09dc4b9be1c1826bc63d4baf5101dafd53 (patch) | |
tree | 4bd29824f03b734298ccff7d86a581914275b967 /src/backends/reference/workloads | |
parent | 317cae526ba7b58891b6f054bb10af3b6e22d5a3 (diff) | |
download | armnn-8a54ac09dc4b9be1c1826bc63d4baf5101dafd53.tar.gz |
IVGCVSW-2875 Reference implementation and unit tests for Dequantize
Change-Id: Ie4ade0519cb0bbe35dc36be6c9cd749b9171c74b
Signed-off-by: Nattapat Chaimanowong <nattapat.chaimanowong@arm.com>
Diffstat (limited to 'src/backends/reference/workloads')
5 files changed, 68 insertions, 0 deletions
diff --git a/src/backends/reference/workloads/CMakeLists.txt b/src/backends/reference/workloads/CMakeLists.txt index 89aed9194b..c4fc202250 100644 --- a/src/backends/reference/workloads/CMakeLists.txt +++ b/src/backends/reference/workloads/CMakeLists.txt @@ -63,6 +63,8 @@ list(APPEND armnnRefBackendWorkloads_sources RefDepthwiseConvolution2dFloat32Workload.hpp RefDepthwiseConvolution2dUint8Workload.cpp RefDepthwiseConvolution2dUint8Workload.hpp + RefDequantizeWorkload.cpp + RefDequantizeWorkload.hpp RefDetectionPostProcessUint8Workload.cpp RefDetectionPostProcessUint8Workload.hpp RefDetectionPostProcessFloat32Workload.cpp diff --git a/src/backends/reference/workloads/RefDequantizeWorkload.cpp b/src/backends/reference/workloads/RefDequantizeWorkload.cpp new file mode 100644 index 0000000000..d861c50730 --- /dev/null +++ b/src/backends/reference/workloads/RefDequantizeWorkload.cpp @@ -0,0 +1,34 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "RefDequantizeWorkload.hpp" +#include "RefWorkloadUtils.hpp" + +namespace armnn +{ + +void RefDequantizeWorkload::Execute() const +{ + ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefDequantizeWorkload_Execute"); + + const TensorInfo& inputInfo = GetTensorInfo(m_Data.m_Inputs[0]); + const DataType& inputDataType = inputInfo.GetDataType(); + + float* outputData = GetOutputTensorData<float>(0, m_Data); + + switch (inputDataType) + { + case DataType::QuantisedAsymm8: + Dequantize<uint8_t>(GetInputTensorData<uint8_t>(0, m_Data), outputData, inputInfo); + break; + case DataType::QuantisedSymm16: + Dequantize<int16_t>(GetInputTensorData<int16_t>(0, m_Data), outputData, inputInfo); + break; + default: + throw InvalidArgumentException("RefDequantizeWorkload: Unsupported input data type"); + } +} + +} // namespace armnn diff --git a/src/backends/reference/workloads/RefDequantizeWorkload.hpp b/src/backends/reference/workloads/RefDequantizeWorkload.hpp new file mode 100644 index 0000000000..8d019e3220 --- /dev/null +++ b/src/backends/reference/workloads/RefDequantizeWorkload.hpp @@ -0,0 +1,22 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include <backendsCommon/Workload.hpp> + +namespace armnn +{ + +class RefDequantizeWorkload : public BaseWorkload<DequantizeQueueDescriptor> +{ +public: + using BaseWorkload<DequantizeQueueDescriptor>::m_Data; + using BaseWorkload<DequantizeQueueDescriptor>::BaseWorkload; + + void Execute() const override; +}; + +} // namespace armnn diff --git a/src/backends/reference/workloads/RefWorkloadUtils.hpp b/src/backends/reference/workloads/RefWorkloadUtils.hpp index feb43290b4..ce796160f2 100644 --- a/src/backends/reference/workloads/RefWorkloadUtils.hpp +++ b/src/backends/reference/workloads/RefWorkloadUtils.hpp @@ -127,6 +127,15 @@ std::vector<float> Dequantize(const T* quant, const TensorInfo& info) return ret; } +template<typename T> +inline void Dequantize(const T* inputData, float* outputData, const TensorInfo& info) +{ + for (unsigned int i = 0; i < info.GetNumElements(); i++) + { + outputData[i] = Dequantize<T>(inputData[i], info.GetQuantizationScale(), info.GetQuantizationOffset()); + } +} + inline void Quantize(uint8_t* quant, const float* dequant, const TensorInfo& info) { for (size_t i = 0; i < info.GetNumElements(); i++) diff --git a/src/backends/reference/workloads/RefWorkloads.hpp b/src/backends/reference/workloads/RefWorkloads.hpp index 2156388ba2..7d2e813f6b 100644 --- a/src/backends/reference/workloads/RefWorkloads.hpp +++ b/src/backends/reference/workloads/RefWorkloads.hpp @@ -63,3 +63,4 @@ #include "RefDebugWorkload.hpp" #include "RefRsqrtFloat32Workload.hpp" #include "RefComparisonWorkload.hpp" +#include "RefDequantizeWorkload.hpp" |