From 3ac2f3a1d9297220d1b0ce920dd13fdd4edcc187 Mon Sep 17 00:00:00 2001 From: Vidhya Sudhan Loganathan Date: Thu, 17 Jan 2019 15:16:19 +0000 Subject: COMPMID-1814 : NEScale add support for TOP_LEFT and QASYMM8 Added support for TOP_LEFT sampling policy and QASYMM8 data type. Change-Id: Id9135bb4b6ebd93f1d6fb70b06e83684a167eb94 Reviewed-on: https://review.mlplatform.org/533 Tested-by: Arm Jenkins Reviewed-by: Michalis Spyrou Reviewed-by: Georgios Pinitas --- src/runtime/NEON/functions/NEScale.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/runtime/NEON') diff --git a/src/runtime/NEON/functions/NEScale.cpp b/src/runtime/NEON/functions/NEScale.cpp index 169b9bbf6a..483aa4c0b5 100644 --- a/src/runtime/NEON/functions/NEScale.cpp +++ b/src/runtime/NEON/functions/NEScale.cpp @@ -46,6 +46,11 @@ void precompute_dx_dy_offsets(ITensor *dx, ITensor *dy, ITensor *offsets, float { ARM_COMPUTE_ERROR_ON(nullptr == offsets); ARM_COMPUTE_UNUSED(sampling_policy); + float sampling_offset = 0.0f; + if(sampling_policy == SamplingPolicy::CENTER) + { + sampling_offset = 0.5f; + } Window win; win.set(Window::DimX, Window::Dimension(0, offsets->info()->dimension(0), 1)); @@ -60,8 +65,8 @@ void precompute_dx_dy_offsets(ITensor *dx, ITensor *dy, ITensor *offsets, float execute_window_loop(win, [&](const Coordinates & id) { - const float in_x = (id.x() + 0.5f) * wr - 0.5f; - const float in_y = (id.y() + 0.5f) * hr - 0.5f; + const float in_x = (id.x() + sampling_offset) * wr - sampling_offset; + const float in_y = (id.y() + sampling_offset) * hr - sampling_offset; const int in_xi = std::floor(in_x); const int in_yi = std::floor(in_y); @@ -174,7 +179,7 @@ Status NEScale::validate(const ITensorInfo *input, const ITensorInfo *output, In BorderMode border_mode, PixelValue constant_border_value, SamplingPolicy sampling_policy) { ARM_COMPUTE_RETURN_ERROR_ON_NULLPTR(input, output); - ARM_COMPUTE_RETURN_ERROR_ON(sampling_policy != SamplingPolicy::CENTER); + ARM_COMPUTE_RETURN_ERROR_ON(sampling_policy != SamplingPolicy::CENTER && sampling_policy != SamplingPolicy::TOP_LEFT); ARM_COMPUTE_UNUSED(border_mode, constant_border_value); ITensorInfo *offsets = nullptr; -- cgit v1.2.1