From e52211e1544a30d24b29523c389116a9e4446e8c Mon Sep 17 00:00:00 2001 From: Ferran Balaguer Date: Mon, 17 Jun 2019 12:23:52 +0100 Subject: IVGCVSW-3286 Add epsilon Reference workload support Change-Id: I5cabbf9d1ef3858be68d6820d14845e512128c5b Signed-off-by: Ferran Balaguer --- src/backends/backendsCommon/test/LayerTests.cpp | 75 ++++++++++++++++++++++++- src/backends/backendsCommon/test/LayerTests.hpp | 10 ++++ 2 files changed, 84 insertions(+), 1 deletion(-) (limited to 'src/backends/backendsCommon') diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp index 55e799e1be..115b5ecf41 100644 --- a/src/backends/backendsCommon/test/LayerTests.cpp +++ b/src/backends/backendsCommon/test/LayerTests.cpp @@ -5294,7 +5294,8 @@ LayerTestResult L2NormalizationTestImpl( float outScale, int32_t outOffset, const std::vector& expectedOutputValues, - const armnn::DataLayout layout) + const armnn::DataLayout layout, + float epsilon = 1e-12f) { const armnn::TensorInfo inputTensorInfo(inputOutputTensorShape, ArmnnType, scale, offset); const armnn::TensorInfo outputTensorInfo(inputOutputTensorShape, ArmnnType, outScale, outOffset); @@ -5333,6 +5334,7 @@ LayerTestResult L2NormalizationTestImpl( std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); armnn::L2NormalizationQueueDescriptor descriptor; + descriptor.m_Parameters.m_Eps = epsilon; descriptor.m_Parameters.m_DataLayout = layout; armnn::WorkloadInfo info; @@ -5797,6 +5799,57 @@ LayerTestResult PadFloat324dTest( return Pad4dTestCommon(workloadFactory, memoryManager, 0.0f, 0); } +template> +LayerTestResult L2NormalizationEpsilonTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float scale, + int32_t offset, + float outScale, + int32_t outOffset, + const armnn::DataLayout layout, + float epsilon) +{ + // Width: 1 + // Height: 1 + // Channels: 3 + // BatchSize: 1 + unsigned int numberOfBatches = 1; + unsigned int numberOfChannels = 3; + unsigned int height = 1; + unsigned int width = 1; + + const armnn::TensorShape inputOutputShape = armnnUtils::GetTensorShape( + numberOfBatches, numberOfChannels, height, width, layout); + + // 0.0000001^2 + 0.00000002^2 + 0.00000003^2 < 1e-12 + std::vector inputValues + { + // Batch 0, Channel 0, Height (1) x Width (1) + 0.00000001f, + + // Batch 0, Channel 1, Height (1) x Width (1) + 0.00000002f, + + // Batch 0, Channel 2, Height (1) x Width (1) + 0.00000003f, + }; + + const float approxInvL2Norm = 1.f / sqrtf(epsilon); + std::vector expectedOutputValues + { + // Batch 0, Channel 0, Height (1) x Width (1) + 0.00000001f * approxInvL2Norm, + 0.00000002f * approxInvL2Norm, + 0.00000003f * approxInvL2Norm, + }; + + return L2NormalizationTestImpl(workloadFactory, memoryManager, inputOutputShape, scale, offset, + inputValues, outScale, outOffset, expectedOutputValues, layout, + epsilon); +} + + template> LayerTestResult L2Normalization1dTestCommon( armnn::IWorkloadFactory& workloadFactory, @@ -5872,6 +5925,26 @@ LayerTestResult L2Normalization1dTestCommon( inputValues, outScale, outOffset, expectedOutputValues, layout); } +LayerTestResult L2NormalizationDefaultEpsilonTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout layout) +{ + // Dummy descriptor to get the default value of epsilon. + armnn::L2NormalizationDescriptor descriptor; + + return L2NormalizationEpsilonTestCommon(workloadFactory, memoryManager, 0.f, 0, 0.f, 0, + layout, descriptor.m_Eps); +} + +LayerTestResult L2NormalizationNonDefaultEpsilonTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout layout) +{ + return L2NormalizationEpsilonTestCommon(workloadFactory, memoryManager, 0.f, 0, 0.f, 0, + layout, 1e-9f); +} LayerTestResult L2Normalization1dTest( armnn::IWorkloadFactory& workloadFactory, diff --git a/src/backends/backendsCommon/test/LayerTests.hpp b/src/backends/backendsCommon/test/LayerTests.hpp index 704e88ef6b..4c340447b9 100644 --- a/src/backends/backendsCommon/test/LayerTests.hpp +++ b/src/backends/backendsCommon/test/LayerTests.hpp @@ -922,6 +922,16 @@ LayerTestResult FakeQuantizationTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); +LayerTestResult L2NormalizationDefaultEpsilonTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout layout); + +LayerTestResult L2NormalizationNonDefaultEpsilonTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout layout); + LayerTestResult L2Normalization1dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, -- cgit v1.2.1