From d473386e4d5e0edcf55e13a2bf3c422a23fac0de Mon Sep 17 00:00:00 2001 From: Michalis Spyrou Date: Tue, 9 Jul 2019 14:21:06 +0100 Subject: COMPMID-2447: Align TFlite nearest neighbor NE/CL functions with ACL Change-Id: Idd7b23247491d6e2e31d19b2a8aa522470ca174c Signed-off-by: Michalis Spyrou Reviewed-on: https://review.mlplatform.org/c/1500 Tested-by: Arm Jenkins Reviewed-by: Georgios Pinitas --- tests/validation/reference/CropResize.cpp | 4 +-- tests/validation/reference/Scale.cpp | 47 +++++++++++++++++++------------ 2 files changed, 31 insertions(+), 20 deletions(-) (limited to 'tests/validation') diff --git a/tests/validation/reference/CropResize.cpp b/tests/validation/reference/CropResize.cpp index 8cfce97eec..f25a0317be 100644 --- a/tests/validation/reference/CropResize.cpp +++ b/tests/validation/reference/CropResize.cpp @@ -59,8 +59,8 @@ SimpleTensor scale_image(const SimpleTensor &in, const TensorShape case InterpolationPolicy::NEAREST_NEIGHBOR: { //Calculate the source coords without -0.5f is equivalent to round the x_scr/y_src coords - float x_src = (idw + 0.5f) * wr; - float y_src = (idh + 0.5f) * hr; + float x_src = std::floor(idw * wr); + float y_src = std::floor(idh * hr); in_id.set(1, x_src); in_id.set(2, y_src); diff --git a/tests/validation/reference/Scale.cpp b/tests/validation/reference/Scale.cpp index 84f4fb83c1..63a2853c66 100644 --- a/tests/validation/reference/Scale.cpp +++ b/tests/validation/reference/Scale.cpp @@ -71,28 +71,25 @@ SimpleTensor scale_core(const SimpleTensor &in, float scale_x, float scale float x_src = 0; float y_src = 0; - switch(sampling_policy) - { - case SamplingPolicy::TOP_LEFT: - x_src = idx * wr; - y_src = idy * hr; - break; - case SamplingPolicy::CENTER: - x_src = (idx + 0.5f) * wr - 0.5f; - y_src = (idy + 0.5f) * hr - 0.5f; - break; - default: - ARM_COMPUTE_ERROR("Unsupported sampling policy."); - break; - } - switch(policy) { case InterpolationPolicy::NEAREST_NEIGHBOR: { - //Calculate the source coords without -0.5f is equivalent to round the x_scr/y_src coords - x_src = (idx + 0.5f) * wr; - y_src = (idy + 0.5f) * hr; + switch(sampling_policy) + { + case SamplingPolicy::TOP_LEFT: + x_src = std::floor(idx * wr); + y_src = std::floor(idy * hr); + break; + case SamplingPolicy::CENTER: + //Calculate the source coords without -0.5f is equivalent to round the x_scr/y_src coords + x_src = (idx + 0.5f) * wr; + y_src = (idy + 0.5f) * hr; + break; + default: + ARM_COMPUTE_ERROR("Unsupported sampling policy."); + } + id.set(0, x_src); id.set(1, y_src); @@ -105,6 +102,20 @@ SimpleTensor scale_core(const SimpleTensor &in, float scale_x, float scale } case InterpolationPolicy::BILINEAR: { + switch(sampling_policy) + { + case SamplingPolicy::TOP_LEFT: + x_src = idx * wr; + y_src = idy * hr; + break; + case SamplingPolicy::CENTER: + x_src = (idx + 0.5f) * wr - 0.5f; + y_src = (idy + 0.5f) * hr - 0.5f; + break; + default: + ARM_COMPUTE_ERROR("Unsupported sampling policy."); + } + id.set(0, std::floor(x_src)); id.set(1, std::floor(y_src)); if(is_valid_pixel_index(x_src, y_src, width, height, border_size)) -- cgit v1.2.1