From ab219756319667ae7abb0d767cf15e766ab343b1 Mon Sep 17 00:00:00 2001 From: David Monahan Date: Fri, 19 Jun 2020 16:43:48 +0100 Subject: IVGCVSW-4707 - Add AlignCorners and HalfPixelCenters to Resize * Added AlignCorners and HalfPixelCenters Parameters to Resize * Added Unit Tests Signed-off-by: David Monahan Change-Id: I83420a9bcb7beec9073d201448f64eb53090e1f1 --- .../test/layerTests/ResizeTestImpl.cpp | 156 ++++++++++++++++++++- .../test/layerTests/ResizeTestImpl.hpp | 24 ++++ 2 files changed, 179 insertions(+), 1 deletion(-) (limited to 'src/backends/backendsCommon/test') diff --git a/src/backends/backendsCommon/test/layerTests/ResizeTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/ResizeTestImpl.cpp index f12f53c794..72507d39ac 100644 --- a/src/backends/backendsCommon/test/layerTests/ResizeTestImpl.cpp +++ b/src/backends/backendsCommon/test/layerTests/ResizeTestImpl.cpp @@ -29,7 +29,9 @@ struct ResizeTestParams , m_InQuantScale(1.0f) , m_InQuantOffset(0) , m_OutQuantScale(1.0f) - , m_OutQuantOffset(0) {} + , m_OutQuantOffset(0) + , m_AlignCorners(false) + , m_HalfPixelCenters(false) {} armnn::ResizeMethod m_ResizeMethod; armnn::DataLayout m_DataLayout; @@ -46,6 +48,9 @@ struct ResizeTestParams float m_OutQuantScale; int32_t m_OutQuantOffset; + bool m_AlignCorners; + bool m_HalfPixelCenters; + void SetInQuantParams(float quantScale, int32_t quantOffset) { m_InQuantScale = quantScale; @@ -111,6 +116,8 @@ LayerTestResult ResizeTestImpl( armnn::ResizeQueueDescriptor descriptor; descriptor.m_Parameters.m_Method = params.m_ResizeMethod; descriptor.m_Parameters.m_DataLayout = params.m_DataLayout; + descriptor.m_Parameters.m_AlignCorners = params.m_AlignCorners; + descriptor.m_Parameters.m_HalfPixelCenters = params.m_HalfPixelCenters; armnnUtils::DataLayoutIndexed dataLayoutIndexed(params.m_DataLayout); descriptor.m_Parameters.m_TargetWidth = params.m_OutputShape[dataLayoutIndexed.GetWidthIndex()]; @@ -528,6 +535,129 @@ LayerTestResult ResizeNearestNeighborMagTest( return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams); } +template +LayerTestResult HalfPixelCentersResizeBilinearTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout) +{ + ResizeTestParams testParams; + testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear; + testParams.m_DataLayout = dataLayout; + testParams.m_HalfPixelCenters = true; + + testParams.m_InputShape = { 2, 1, 2, 2 }; + testParams.m_OutputShape = { 2, 1, 3, 3 }; + + testParams.m_InputData = + { + 1.0f, 2.0f, + 3.0f, 4.0f, + + 1.0f, 2.0f, + 3.0f, 4.0f + }; + + testParams.m_ExpectedOutputData = + { + 1.0f, 1.5f, 2.0f, + 2.0f, 2.5f, 3.0f, + 3.0f, 3.5f, 4.0f, + + 1.0f, 1.5f, 2.0f, + 2.0f, 2.5f, 3.0f, + 3.0f, 3.5f, 4.0f, + }; + + return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams); +} + +template +LayerTestResult AlignCornersResizeBilinearTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout) +{ + ResizeTestParams testParams; + testParams.m_ResizeMethod = armnn::ResizeMethod::Bilinear; + testParams.m_DataLayout = dataLayout; + testParams.m_AlignCorners = true; + + testParams.m_InputShape = { 1, 1, 2, 2 }; + testParams.m_OutputShape = { 1, 1, 1, 1 }; + + testParams.m_InputData = + { + 1.0f, 2.0f, + 3.0f, 4.0f, + }; + + testParams.m_ExpectedOutputData = + { + 1.0f + }; + + return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams); +} + +template +LayerTestResult HalfPixelCentersResizeNearestNeighbourTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout) +{ + ResizeTestParams testParams; + testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor; + testParams.m_DataLayout = dataLayout; + testParams.m_HalfPixelCenters = true; + + testParams.m_InputShape = { 1, 1, 2, 5 }; + testParams.m_OutputShape = { 1, 1, 2, 2 }; + + testParams.m_InputData = + { + 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, + + 1.0f, 2.0f, 3.0f, 4.0f, 5.0f + }; + + testParams.m_ExpectedOutputData = + { + 2.0f, 4.0f, + 2.0f, 4.0f + }; + + return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams); +} + +template +LayerTestResult AlignCornersResizeNearestNeighbourTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout) +{ + ResizeTestParams testParams; + testParams.m_ResizeMethod = armnn::ResizeMethod::NearestNeighbor; + testParams.m_DataLayout = dataLayout; + testParams.m_AlignCorners = true; + + testParams.m_InputShape = { 1, 1, 2, 2 }; + testParams.m_OutputShape = { 1, 1, 1, 1 }; + + testParams.m_InputData = + { + 1.0f, 2.0f, + 3.0f, 4.0f, + }; + + testParams.m_ExpectedOutputData = + { + 1.0f + }; + + return ResizeTestImpl<4, ArmnnType>(workloadFactory, memoryManager, testParams); +} + // // Explicit template instantiations // @@ -597,6 +727,30 @@ ResizeNearestNeighborMagTest( float outQuantScale, int32_t outQuantOffset); +template LayerTestResult, 4> +HalfPixelCentersResizeBilinearTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout); + +template LayerTestResult, 4> +AlignCornersResizeBilinearTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout); + +template LayerTestResult, 4> +HalfPixelCentersResizeNearestNeighbourTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout); + +template LayerTestResult, 4> +AlignCornersResizeNearestNeighbourTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout); + // Float16 template LayerTestResult, 4> ResizeBilinearNopTest( diff --git a/src/backends/backendsCommon/test/layerTests/ResizeTestImpl.hpp b/src/backends/backendsCommon/test/layerTests/ResizeTestImpl.hpp index 538a64c21a..b70ae85b8f 100644 --- a/src/backends/backendsCommon/test/layerTests/ResizeTestImpl.hpp +++ b/src/backends/backendsCommon/test/layerTests/ResizeTestImpl.hpp @@ -79,3 +79,27 @@ LayerTestResult ResizeNearestNeighborMagTest( int32_t inQuantOffset, float outQuantScale, int32_t outQuantOffset); + +template> +LayerTestResult HalfPixelCentersResizeBilinearTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout); + +template> +LayerTestResult AlignCornersResizeBilinearTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout); + +template> +LayerTestResult HalfPixelCentersResizeNearestNeighbourTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout); + +template> +LayerTestResult AlignCornersResizeNearestNeighbourTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout dataLayout); \ No newline at end of file -- cgit v1.2.1