From 37e68686a4889b6e79b035356202903647671f13 Mon Sep 17 00:00:00 2001 From: Ellen Norris-Thompson Date: Mon, 15 Jul 2019 14:23:30 +0100 Subject: IVGCVSW-3297 Add Neon backend support for ResizeNearestNeighbour * Renamed NeonResizeBilinearWorkload.* to NeonResizeWorkload.* and added support for ResizeNearestNeighbour * Added CreateWorkload and LayerTests for Neon backend Signed-off-by: Ellen Norris-Thompson Change-Id: I72f5340608a0928f8b32a41d1915ee2c35849f18 --- src/backends/neon/workloads/CMakeLists.txt | 4 +- .../neon/workloads/NeonResizeBilinearWorkload.cpp | 59 ------------------ .../neon/workloads/NeonResizeBilinearWorkload.hpp | 29 --------- src/backends/neon/workloads/NeonResizeWorkload.cpp | 72 ++++++++++++++++++++++ src/backends/neon/workloads/NeonResizeWorkload.hpp | 29 +++++++++ src/backends/neon/workloads/NeonWorkloads.hpp | 2 +- 6 files changed, 104 insertions(+), 91 deletions(-) delete mode 100644 src/backends/neon/workloads/NeonResizeBilinearWorkload.cpp delete mode 100644 src/backends/neon/workloads/NeonResizeBilinearWorkload.hpp create mode 100644 src/backends/neon/workloads/NeonResizeWorkload.cpp create mode 100644 src/backends/neon/workloads/NeonResizeWorkload.hpp (limited to 'src/backends/neon/workloads') diff --git a/src/backends/neon/workloads/CMakeLists.txt b/src/backends/neon/workloads/CMakeLists.txt index 0ad961aa86..7bde80859e 100644 --- a/src/backends/neon/workloads/CMakeLists.txt +++ b/src/backends/neon/workloads/CMakeLists.txt @@ -56,8 +56,8 @@ list(APPEND armnnNeonBackendWorkloads_sources NeonQuantizeWorkload.hpp NeonReshapeWorkload.cpp NeonReshapeWorkload.hpp - NeonResizeBilinearWorkload.cpp - NeonResizeBilinearWorkload.hpp + NeonResizeWorkload.cpp + NeonResizeWorkload.hpp NeonSoftmaxBaseWorkload.cpp NeonSoftmaxBaseWorkload.hpp NeonSoftmaxFloatWorkload.cpp diff --git a/src/backends/neon/workloads/NeonResizeBilinearWorkload.cpp b/src/backends/neon/workloads/NeonResizeBilinearWorkload.cpp deleted file mode 100644 index 6943d872e4..0000000000 --- a/src/backends/neon/workloads/NeonResizeBilinearWorkload.cpp +++ /dev/null @@ -1,59 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "NeonResizeBilinearWorkload.hpp" - -#include -#include -#include -#include -#include - -using namespace armnn::armcomputetensorutils; - -namespace armnn -{ - -arm_compute::Status NeonResizeBilinearWorkloadValidate(const TensorInfo& input, const TensorInfo& output) -{ - const arm_compute::TensorInfo aclInputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(input); - const arm_compute::TensorInfo aclOutputInfo = armcomputetensorutils::BuildArmComputeTensorInfo(output); - - return arm_compute::NEScale::validate(&aclInputInfo, - &aclOutputInfo, - arm_compute::InterpolationPolicy::BILINEAR, - arm_compute::BorderMode::REPLICATE, - arm_compute::PixelValue(0.f), - arm_compute::SamplingPolicy::TOP_LEFT); -} - -NeonResizeBilinearWorkload::NeonResizeBilinearWorkload(const ResizeBilinearQueueDescriptor& descriptor, - const WorkloadInfo& info) - : BaseWorkload(descriptor, info) -{ - m_Data.ValidateInputsOutputs("NeonResizeBilinearWorkload", 1, 1); - - arm_compute::ITensor& input = boost::polymorphic_downcast(m_Data.m_Inputs[0])->GetTensor(); - arm_compute::ITensor& output = boost::polymorphic_downcast(m_Data.m_Outputs[0])->GetTensor(); - - arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout); - input.info()->set_data_layout(aclDataLayout); - output.info()->set_data_layout(aclDataLayout); - - m_ResizeBilinearLayer.configure(&input, - &output, - arm_compute::InterpolationPolicy::BILINEAR, - arm_compute::BorderMode::REPLICATE, - arm_compute::PixelValue(0.f), - arm_compute::SamplingPolicy::TOP_LEFT); -}; - -void NeonResizeBilinearWorkload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonResizeBilinearWorkload_Execute"); - m_ResizeBilinearLayer.run(); -} - -} //namespace armnn diff --git a/src/backends/neon/workloads/NeonResizeBilinearWorkload.hpp b/src/backends/neon/workloads/NeonResizeBilinearWorkload.hpp deleted file mode 100644 index 21753b3127..0000000000 --- a/src/backends/neon/workloads/NeonResizeBilinearWorkload.hpp +++ /dev/null @@ -1,29 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include - -#include - -#include - -namespace armnn -{ - -arm_compute::Status NeonResizeBilinearWorkloadValidate(const TensorInfo& input, const TensorInfo& output); - -class NeonResizeBilinearWorkload : public BaseWorkload -{ -public: - NeonResizeBilinearWorkload(const ResizeBilinearQueueDescriptor& descriptor, const WorkloadInfo& info); - void Execute() const override; - -private: - mutable arm_compute::NEScale m_ResizeBilinearLayer; -}; - -} //namespace armnn diff --git a/src/backends/neon/workloads/NeonResizeWorkload.cpp b/src/backends/neon/workloads/NeonResizeWorkload.cpp new file mode 100644 index 0000000000..a4e4a4a511 --- /dev/null +++ b/src/backends/neon/workloads/NeonResizeWorkload.cpp @@ -0,0 +1,72 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "NeonResizeWorkload.hpp" + +#include "NeonWorkloadUtils.hpp" + +#include +#include +#include +#include + +using namespace armnn::armcomputetensorutils; + +namespace armnn +{ + +arm_compute::Status NeonResizeWorkloadValidate(const TensorInfo& input, + const TensorInfo& output, + const ResizeDescriptor& descriptor) +{ + arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input); + arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output); + + arm_compute::DataLayout aclDataLayout = ConvertDataLayout(descriptor.m_DataLayout); + aclInputInfo.set_data_layout(aclDataLayout); + aclOutputInfo.set_data_layout(aclDataLayout); + + arm_compute::InterpolationPolicy aclInterpolationPolicy = + ConvertResizeMethodToAclInterpolationPolicy(descriptor.m_Method); + + return arm_compute::NEScale::validate(&aclInputInfo, + &aclOutputInfo, + aclInterpolationPolicy, + arm_compute::BorderMode::REPLICATE, + arm_compute::PixelValue(0.f), + arm_compute::SamplingPolicy::TOP_LEFT); +} + +NeonResizeWorkload::NeonResizeWorkload(const ResizeQueueDescriptor& descriptor, + const WorkloadInfo& info) + : BaseWorkload(descriptor, info) +{ + m_Data.ValidateInputsOutputs("NeonResizeWorkload", 1, 1); + + arm_compute::ITensor& input = boost::polymorphic_downcast(m_Data.m_Inputs[0])->GetTensor(); + arm_compute::ITensor& output = boost::polymorphic_downcast(m_Data.m_Outputs[0])->GetTensor(); + + arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout); + input.info()->set_data_layout(aclDataLayout); + output.info()->set_data_layout(aclDataLayout); + + arm_compute::InterpolationPolicy aclInterpolationPolicy = + ConvertResizeMethodToAclInterpolationPolicy(descriptor.m_Parameters.m_Method); + + m_ResizeLayer.configure(&input, + &output, + aclInterpolationPolicy, + arm_compute::BorderMode::REPLICATE, + arm_compute::PixelValue(0.f), + arm_compute::SamplingPolicy::TOP_LEFT); +}; + +void NeonResizeWorkload::Execute() const +{ + ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonResizeWorkload_Execute"); + m_ResizeLayer.run(); +} + +} //namespace armnn diff --git a/src/backends/neon/workloads/NeonResizeWorkload.hpp b/src/backends/neon/workloads/NeonResizeWorkload.hpp new file mode 100644 index 0000000000..69995c6311 --- /dev/null +++ b/src/backends/neon/workloads/NeonResizeWorkload.hpp @@ -0,0 +1,29 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include + +#include + +namespace armnn +{ + +arm_compute::Status NeonResizeWorkloadValidate(const TensorInfo& input, + const TensorInfo& output, + const ResizeDescriptor& descriptor); + +class NeonResizeWorkload : public BaseWorkload +{ +public: + NeonResizeWorkload(const ResizeQueueDescriptor& descriptor, const WorkloadInfo& info); + void Execute() const override; + +private: + mutable arm_compute::NEScale m_ResizeLayer; +}; + +} //namespace armnn diff --git a/src/backends/neon/workloads/NeonWorkloads.hpp b/src/backends/neon/workloads/NeonWorkloads.hpp index a9604a160c..c5f4a54b77 100644 --- a/src/backends/neon/workloads/NeonWorkloads.hpp +++ b/src/backends/neon/workloads/NeonWorkloads.hpp @@ -30,7 +30,7 @@ #include "NeonPreluWorkload.hpp" #include "NeonQuantizeWorkload.hpp" #include "NeonReshapeWorkload.hpp" -#include "NeonResizeBilinearWorkload.hpp" +#include "NeonResizeWorkload.hpp" #include "NeonSoftmaxFloatWorkload.hpp" #include "NeonSoftmaxUint8Workload.hpp" #include "NeonSpaceToDepthWorkload.hpp" -- cgit v1.2.1