From 0a08ec6e5764d7906d196df5fe2979ad0d28d10a Mon Sep 17 00:00:00 2001 From: Mike Kelly Date: Thu, 25 Jul 2019 08:39:31 +0100 Subject: IVGCVSW-3521 CpuAcc V1.2 pad Failures * Pad value for QASYMM8 is no longer stored in quantized form. Signed-off-by: Mike Kelly Change-Id: I048e1d233353c0560ae03a7cc1ed5199295352bc --- src/backends/aclCommon/ArmComputeTensorUtils.cpp | 18 ++++++++++++++++++ src/backends/aclCommon/ArmComputeTensorUtils.hpp | 5 +++++ src/backends/cl/workloads/ClPadWorkload.cpp | 2 +- src/backends/neon/workloads/NeonPadWorkload.cpp | 2 +- src/backends/reference/workloads/Pad.cpp | 13 +------------ 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/backends/aclCommon/ArmComputeTensorUtils.cpp b/src/backends/aclCommon/ArmComputeTensorUtils.cpp index e69232c5a1..fabe9a15bf 100644 --- a/src/backends/aclCommon/ArmComputeTensorUtils.cpp +++ b/src/backends/aclCommon/ArmComputeTensorUtils.cpp @@ -210,5 +210,23 @@ arm_compute::Size2D BuildArmComputeSize2D(const unsigned int width, const unsign return arm_compute::Size2D(width, height); } +arm_compute::PixelValue GetPixelValue(arm_compute::ITensor& input, float pixelValue) +{ + switch (input.info()->data_type()) + { + case arm_compute::DataType::QASYMM8: + return arm_compute::PixelValue(static_cast(pixelValue)); + case arm_compute::DataType::QSYMM16: + return arm_compute::PixelValue(static_cast(pixelValue)); + case arm_compute::DataType::F16: + return arm_compute::PixelValue(static_cast(pixelValue)); + case arm_compute::DataType::F32: + return arm_compute::PixelValue(pixelValue); + default: + throw InvalidArgumentException("Unsupported DataType: [" + + std::to_string(static_cast(input.info()->data_type())) + "]"); + } +} + } // namespace armcomputetensorutils } // namespace armnn diff --git a/src/backends/aclCommon/ArmComputeTensorUtils.hpp b/src/backends/aclCommon/ArmComputeTensorUtils.hpp index fa455b746b..c9587a7990 100644 --- a/src/backends/aclCommon/ArmComputeTensorUtils.hpp +++ b/src/backends/aclCommon/ArmComputeTensorUtils.hpp @@ -12,6 +12,8 @@ #include #include +#include + #include namespace armnn @@ -58,6 +60,9 @@ arm_compute::PermutationVector BuildArmComputePermutationVector(const armnn::Per /// Utility function used to setup an arm_compute::Size2D object from width and height values. arm_compute::Size2D BuildArmComputeSize2D(const unsigned int width, const unsigned int height); +/// Gets the appropriate PixelValue for the input DataType +arm_compute::PixelValue GetPixelValue(arm_compute::ITensor& input, float pixelValue); + /// Utility function used to setup an arm_compute::PadStrideInfo object from an armnn layer descriptor. template arm_compute::PadStrideInfo BuildArmComputePadStrideInfo(const Descriptor &descriptor) diff --git a/src/backends/cl/workloads/ClPadWorkload.cpp b/src/backends/cl/workloads/ClPadWorkload.cpp index 1c072baf58..8a8c34a212 100644 --- a/src/backends/cl/workloads/ClPadWorkload.cpp +++ b/src/backends/cl/workloads/ClPadWorkload.cpp @@ -31,7 +31,7 @@ ClPadWorkload::ClPadWorkload(const PadQueueDescriptor& descriptor, const Workloa arm_compute::PaddingList padList = static_cast(reversed_PadList); - arm_compute::PixelValue pixelValue = descriptor.m_Parameters.m_PadValue; + arm_compute::PixelValue pixelValue = GetPixelValue(input, descriptor.m_Parameters.m_PadValue); m_Layer.configure(&input, &output, padList, pixelValue); } diff --git a/src/backends/neon/workloads/NeonPadWorkload.cpp b/src/backends/neon/workloads/NeonPadWorkload.cpp index 6bc11766f1..19cdefc8ac 100644 --- a/src/backends/neon/workloads/NeonPadWorkload.cpp +++ b/src/backends/neon/workloads/NeonPadWorkload.cpp @@ -32,7 +32,7 @@ NeonPadWorkload::NeonPadWorkload(const PadQueueDescriptor& descriptor, const Wor arm_compute::PaddingList padList = static_cast(reversed_PadList); - arm_compute::PixelValue pixelValue = descriptor.m_Parameters.m_PadValue; + arm_compute::PixelValue pixelValue = GetPixelValue(input, descriptor.m_Parameters.m_PadValue); auto layer = std::make_unique(); layer->configure(&input, &output, padList, pixelValue); diff --git a/src/backends/reference/workloads/Pad.cpp b/src/backends/reference/workloads/Pad.cpp index 41435f47d2..5773cac6a8 100644 --- a/src/backends/reference/workloads/Pad.cpp +++ b/src/backends/reference/workloads/Pad.cpp @@ -18,17 +18,6 @@ namespace armnn { -template -T ConvertToDataType(const float& value, - const armnn::TensorInfo& tensorInfo) -{ - std::vector output(1); - std::unique_ptr> pEncoder = armnn::MakeEncoder(tensorInfo, output.data()); - armnn::Encoder& rEncoder = *pEncoder; - rEncoder.Set(value); - return output[0]; -} - template void Pad(const TensorInfo& inputInfo, const TensorInfo& outputInfo, @@ -60,7 +49,7 @@ void Pad(const TensorInfo& inputInfo, unsigned int outputHeight = 0; unsigned int outputWidth = 0; - T convertedPadValue = ConvertToDataType(padValue, inputInfo); + T convertedPadValue = static_cast(padValue); for (unsigned int i = 0; i < numOutputElements; ++i) { -- cgit v1.2.1