aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon/test/LayerTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/backendsCommon/test/LayerTests.cpp')
-rw-r--r--src/backends/backendsCommon/test/LayerTests.cpp8043
1 files changed, 0 insertions, 8043 deletions
diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp
deleted file mode 100644
index 2d71e60ca4..0000000000
--- a/src/backends/backendsCommon/test/LayerTests.cpp
+++ /dev/null
@@ -1,8043 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#include "LayerTests.hpp"
-#include "WorkloadTestUtils.hpp"
-#include "TensorUtils.hpp"
-#include <ResolveType.hpp>
-
-#include "test/TensorHelpers.hpp"
-#include "TensorCopyUtils.hpp"
-#include "Permute.hpp"
-
-#include <boost/test/unit_test.hpp>
-#include <boost/assert.hpp>
-
-#include <armnn/LayerSupport.hpp>
-
-#include <backendsCommon/CpuTensorHandle.hpp>
-#include <backendsCommon/IBackendInternal.hpp>
-#include <backendsCommon/WorkloadFactory.hpp>
-
-#include <algorithm>
-#include <boost/cast.hpp>
-
-#include "WorkloadTestUtils.hpp"
-#include "Conv2dTestImpl.hpp"
-#include "BatchNormTestImpl.hpp"
-#include "ActivationTestImpl.hpp"
-#include "Pooling2dTestImpl.hpp"
-#include "FullyConnectedTestImpl.hpp"
-#include "GatherTestImpl.hpp"
-#include "SpaceToBatchNdTestImpl.hpp"
-#include "SpaceToDepthTestImpl.hpp"
-#include "SplitterTestImpl.hpp"
-#include "SoftmaxTestImpl.hpp"
-#include "StridedSliceTestImpl.hpp"
-#include "NormTestImpl.hpp"
-#include "LstmTestImpl.hpp"
-#include "ConvertFp16ToFp32TestImpl.hpp"
-#include "ConvertFp32ToFp16TestImpl.hpp"
-#include "DebugTestImpl.hpp"
-#include "DequantizeTestImpl.hpp"
-#include "QuantizeTestImpl.hpp"
-#include "TransposeConvolution2dTestImpl.hpp"
-
-// 3-channel 16x8 image used as common input data for a number of Conv2d tests.
-static std::vector<float> ConvInput3x8x16({
- 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,
- 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,
- 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,
- 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,
- 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,
- 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
-});
-
-// 2-channel bias used by a number of Conv2d tests.
-static std::vector<float> Bias2({0, 2});
-
-static std::vector<float> Bias4({1, 2, 3, 4});
-
-static std::vector<float> Bias8({1, 2, 3, 4, 1, 2, 3, 4});
-
-struct Simple3dSoftmaxOutputData
-{
- const std::vector<float> outputData =
- {
- 0.0964599f, 0.26220518f, 0.0964599f, 0.0964599f,
- 0.15903549f, 0.0964599f, 0.0964599f, 0.0964599f
- };
-
- const armnn::TensorShape inputShape{ 1, 8, 1 };
-
- const std::vector<float> inputData =
- {
- 0.f, 1.f, 0.f, 0.f,
- .5f, 0.f, 0.f, 0.f,
- };
-};
-
-struct Simple4dSoftmaxData
-{
- const armnn::TensorShape inputShape{ 1, 8, 1, 1 };
-
- const std::vector<float> outputData = { 0.0964599f, 0.26220518f, 0.0964599f, 0.0964599f,
- 0.15903549f, 0.0964599f, 0.0964599f, 0.0964599f };
- const std::vector<float> inputData =
- {
- 0.f, 1.f, 0.f, 0.f,
- .5f, 0.f, 0.f, 0.f
- };
-};
-
-// Helper function that returns either Bias2 or an empty vector depending on whether bias is enabled.
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-boost::multi_array<T, 1> GetBias2(bool biasEnabled, float qScale)
-{
- if(biasEnabled)
- {
- armnn::TensorInfo biasDesc({static_cast<unsigned int>(Bias2.size())}, ArmnnType);
- boost::multi_array<T, 1> bias = MakeTensor<T, 1>(biasDesc, QuantizedVector<T>(qScale, 0.0f, Bias2));
- return bias;
- }
- else
- {
- return boost::multi_array<T, 1>();
- }
-}
-
-// Helper function that returns either Bias4 or an empty vector depending on whether bias is enabled.
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-boost::multi_array<T, 1> GetBias4(bool biasEnabled, float qScale)
-{
- if(biasEnabled)
- {
- armnn::TensorInfo biasDesc({static_cast<unsigned int>(Bias4.size())}, ArmnnType);
- boost::multi_array<T, 1> bias = MakeTensor<T, 1>(biasDesc, QuantizedVector<T>(qScale, 0.0f, Bias4));
- return bias;
- }
- else
- {
- return boost::multi_array<T, 1>();
- }
-}
-
-// Helper function that returns either Bias8 or an empty vector depending on whether bias is enabled.
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-boost::multi_array<T, 1> GetBias8(bool biasEnabled, float qScale)
-{
- if(biasEnabled)
- {
- armnn::TensorInfo biasDesc({static_cast<unsigned int>(Bias4.size())}, ArmnnType);
- boost::multi_array<T, 1> bias = MakeTensor<T, 1>(biasDesc, QuantizedVector<T>(qScale, 0.0f, Bias8));
- return bias;
- }
- else
- {
- return boost::multi_array<T, 1>();
- }
-}
-
-// Helper function that returns either Bias4 or an empty vector depending on whether bias is enabled.
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-boost::multi_array<T, 1> GetBias(bool biasEnabled, float qScale, armnn::TensorInfo outputInfo, armnn::DataLayout layout)
-{
- const armnnUtils::DataLayoutIndexed dataLayoutIndexed(layout);
- const unsigned int channelsIndex = dataLayoutIndexed.GetChannelsIndex();
- const unsigned int outputChannels = outputInfo.GetShape()[channelsIndex];
-
- switch (outputChannels)
- {
- case 2:
- default:
- {
- return GetBias2<ArmnnType>(biasEnabled, qScale);
- }
- case 4:
- {
- return GetBias4<ArmnnType>(biasEnabled, qScale);
- }
- case 8:
- {
- return GetBias8<ArmnnType>(biasEnabled, qScale);
- }
- }
-}
-
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> SimpleConvolution2d3x5TestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- // Use common single-batch 3-channel 16x8 image.
- armnn::TensorInfo inputDesc({1, 3, 8, 16}, ArmnnType);
- boost::multi_array<T, 4> input = MakeTensor<T, 4>(inputDesc, QuantizedVector<T>(qScale, qOffset, ConvInput3x8x16));
-
- // Use a 2-element batch with 3-channel 3x5 kernels.
- armnn::TensorInfo kernelDesc({2, 3, 5, 3}, ArmnnType);
- boost::multi_array<T, 4> kernel = MakeTensor<T, 4>(kernelDesc, std::vector<T>(
- QuantizedVector<T>(qScale, qOffset, {
- 1, 1, 1,
- 1, -1, 1,
- 1, 1, 1,
- 1, 1, 1,
- 1, 1, 1,
-
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0,
-
- 2, 2, 2,
- 2, 2, 2,
- 2, 2, 2,
- 2, 2, 2,
- 2, 2, 2,
-
-
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0,
-
- 1, 1, 1,
- 1, 1, 1,
- 1, 1, 1,
- 1, 1, 1,
- 1, 1, 1,
-
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0
- })));
-
- // Expected output is 2 batch elements of a 1-channel 14x4 image.
- armnn::TensorInfo outputDesc({1, 2, 4, 14}, ArmnnType);
- boost::multi_array<T, 4> expectedOutput = MakeTensor<T, 4>(outputDesc, std::vector<T>(
- QuantizedVector<T>(qScale, qOffset, {
- -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, -24,
- -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
- -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f,
- -23.5f, -23.5f, -23.5f,
- -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f, -23.5f,
- -23.5f, -23.5f, -23.5f,
-
- 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- })));
-
- return SimpleConvolution2dTestImpl<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- GetBias2<ArmnnBType>(biasEnabled, qScale * qScale),
- expectedOutput,
- qScale,
- qOffset,
- layout);
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType,
- typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> SimpleConvolution2d3x3TestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- // Use a 3x3 kernel, which exercises ArmCompute's direct convolution path.
-
- // Use common single-batch 3-channel 16x8 image.
- armnn::TensorInfo inputDesc({1, 3, 8, 16}, ArmnnType);
- boost::multi_array<T, 4> input = MakeTensor<T, 4>(inputDesc, QuantizedVector<T>(qScale, qOffset, ConvInput3x8x16));
-
- // Use a 2-element batch of 3-channel 3x3 kernels.
- armnn::TensorInfo kernelDesc({2, 3, 3, 3}, ArmnnType);
- boost::multi_array<T, 4> kernel = MakeTensor<T, 4>(kernelDesc, std::vector<T>(
- QuantizedVector<T>(qScale, qOffset, {
- 1, 1, 1,
- 1, -1, 1,
- 1, 1, 1,
-
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0,
-
- 2, 2, 2,
- 2, 2, 2,
- 2, 2, 2,
-
-
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0,
-
- 1, 1, 1,
- 1, 1, 1,
- 1, 1, 1,
-
- 0, 0, 0,
- 0, 0, 0,
- 0, 0, 0
- })));
-
- // Expected output is 1 batch of a 2-channel 14x6 image.
- armnn::TensorInfo outputDesc({1, 2, 6, 14}, ArmnnType);
- boost::multi_array<T, 4> expectedOutput = MakeTensor<T, 4>(outputDesc, std::vector<T>(
- QuantizedVector<T>(qScale, qOffset, {
- -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, -15,
- -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, -16,
- -14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,
- -14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,
- -14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,
- -14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,-14.5f,
-
- 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- })));
-
- return SimpleConvolution2dTestImpl<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- GetBias2<ArmnnBType>(biasEnabled, qScale * qScale),
- expectedOutput,
- qScale,
- qOffset,
- layout);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> SimpleConvolution2d3x3NhwcTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset,
- bool biasEnabled,
- armnn::DataLayout dataLayout)
-{
- // Use common single-batch 5x5 image.
-
- armnn::TensorInfo inputDesc({1, 3, 4, 1}, ArmnnType);
- boost::multi_array<T, 4> input = MakeTensor<T, 4>(inputDesc,
- {
- 1, 5, 2, 3,
- 8, 7, 3, 6,
- 3, 3, 9, 1
- });
-
-
- // Use a 2-element batch of 3-channel 3x3 kernels.
- armnn::TensorInfo kernelDesc({1, 3, 3, 1}, ArmnnType);
- boost::multi_array<T, 4> kernel = MakeTensor<T, 4>(kernelDesc, {
- 4, 5, 6,
- 0, 0, 0,
- 3, 2, 1
- });
-
- // Expected output is 1 batch of a 5x5 image.
- armnn::TensorInfo outputDesc({1, 3, 4, 1}, ArmnnType);
-
- const std::vector<float> outputData =
- {
- 23, 41, 33, 21,
- 44, 65, 76, 52,
- 82, 85, 79, 42
- };
-
- boost::multi_array<T, 4> expectedOutput = MakeTensor<T, 4>(outputDesc, outputData);
-
- return SimpleConvolution2dNhwcTestImpl<ArmnnType, ArmnnType>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- boost::multi_array<T, 1>(),
- expectedOutput,
- dataLayout,
- qScale,
- qOffset);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> SimpleConvolution2d3x3Stride2x2TestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset,
- bool biasEnabled,
- const armnn::DataLayout& dataLayout)
-{
- // Input is a single-batch, 1 channel, 5x5 image.
- armnn::TensorInfo inputDesc({1, 5, 5, 1}, ArmnnType);
- boost::multi_array<T, 4> input = MakeTensor<T, 4>(inputDesc,
- {
- 1, 5, 2, 3, 5,
- 8, 7, 3, 6, 3,
- 3, 3, 9, 1, 9,
- 4, 1, 8, 1, 3,
- 6, 8, 1, 9, 2
- });
-
- // Use a 3x3 kernel.
- armnn::TensorInfo kernelDesc({1, 3, 3, 1}, ArmnnType);
- boost::multi_array<T, 4> kernel = MakeTensor<T, 4>(kernelDesc,
- {
- 4, 5, 6,
- 0, 0, 0,
- 3, 2, 1
- });
-
- // Expected output is a single-batch, 1 channel, 3x3 image.
- armnn::TensorInfo outputDesc({1, 3, 3, 1}, ArmnnType);
-
- const std::vector<T> outputData =
- {
- 23, 33, 24,
- 91, 99, 48,
- 26, 50, 19
- };
-
- boost::multi_array<T, 4> expectedOutput = MakeTensor<T, 4>(outputDesc, outputData);
-
- uint32_t padLeft = 1;
- uint32_t padTop = 1;
- uint32_t padRight = 1;
- uint32_t padBottom = 1;
- uint32_t strideX = 2;
- uint32_t strideY = 2;
-
- return SimpleConvolution2dNhwcTestImpl<ArmnnType, ArmnnType>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- boost::multi_array<T, 1>(),
- expectedOutput,
- dataLayout,
- qScale,
- qOffset,
- padLeft,
- padTop,
- padRight,
- padBottom,
- strideX,
- strideY);
-}
-
-LayerTestResult<float, 4> SimpleConvolution2d3x5Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return SimpleConvolution2d3x5TestCommon<armnn::DataType::Float32, armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.f, 0, biasEnabled, layout);
-}
-
-LayerTestResult<uint8_t, 4> SimpleConvolution2d3x5Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return SimpleConvolution2d3x5TestCommon<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
- workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout);
-}
-
-LayerTestResult<float, 4> SimpleConvolution2d3x3Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return SimpleConvolution2d3x3TestCommon<armnn::DataType::Float32, armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.f, 0, biasEnabled, layout);
-}
-
-LayerTestResult<float, 4> SimpleConvolution2d3x3NhwcTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled)
-{
- return SimpleConvolution2d3x3NhwcTestCommon<armnn::DataType::Float32>(
- workloadFactory,
- memoryManager,
- 0.f,
- 0,
- biasEnabled,
- armnn::DataLayout::NHWC);
-}
-
-LayerTestResult<float, 4> SimpleConvolution2d3x3Stride2x2Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return SimpleConvolution2d3x3Stride2x2TestCommon<armnn::DataType::Float32>(
- workloadFactory,
- memoryManager,
- 0.f,
- 0,
- biasEnabled,
- layout);
-}
-
-LayerTestResult<uint8_t, 4> SimpleConvolution2d3x3Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return SimpleConvolution2d3x3TestCommon<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
- workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout);
-}
-
-LayerTestResult<int16_t, 4> SimpleConvolution2d3x5QSymm16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
-return SimpleConvolution2d3x5TestCommon<armnn::DataType::QuantisedSymm16, armnn::DataType::Signed32>(
- workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout);
-}
-
-LayerTestResult<int16_t, 4> SimpleConvolution2d3x3QSymm16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return SimpleConvolution2d3x3TestCommon<armnn::DataType::QuantisedSymm16, armnn::DataType::Signed32>(
- workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout);
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType,
- typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout,
- float qScale,
- int32_t qOffset)
-{
- // Use a single-batch 1-channel 3x3 image as input.
- armnn::TensorInfo inputDesc({1, 1, 3, 3}, ArmnnType);
- boost::multi_array<T, 4> input = MakeTensor<T, 4>(inputDesc, std::vector<T>(
- QuantizedVector<T>(qScale, qOffset, {
- 11,21,31,
- 12,22,32,
- 13,23,33
- })));
-
- // Use 1 batch of a 1-channel 2x2 kernel.
- armnn::TensorInfo kernelDesc({1, 1, 2, 2}, ArmnnType);
- boost::multi_array<T, 4> kernel = MakeTensor<T, 4>(kernelDesc, std::vector<T>(
- QuantizedVector<T>(qScale, qOffset, {
- -11,-21,
- -12,-22,
- })));
-
-// Expected output is 1 batch of a 1-channel 6x8 image.
-// Manually calculated like this:
-//[-11*0 -21*0 -12*0 -22*0 ; -11*0 -21*0 -12*0 -22*0 ; -11*0 -21*0 -12*0 -22*0 ; -11*0 -21*0 -12*0 -22*0 ..]
-//[-11*0 -21*0 -12*0 -22*11 ; -11*0 -21*0 -12*11 -22*21 ; -11*0 -21*0 -12*21 -22*31 ; -11*0 -21*0 -12*31 -22*0 ..]
-//[-11*0 -21*11 -12*0 -22*12 ; -11*11 -21*21 -12*12 -22*22 ; -11*21 -21*31 -12*22 -22*32 ; -11*31 -21*0 -12*32 -22*0 ..]
-//[-11*0 -21*12 -12*0 -22*13 ; -11*12 -21*22 -12*13 -22*23 ; -11*22 -21*32 -12*23 -22*33 ; -11*32 -21*0 -12*33 -22*0 ..]
-//[-11*0 -21*13 -12*0 -22*0 ; -11*13 -21*23 -12*0 -22*0 ; -11*23 -21*33 -12*0 -22*0 ; -11*33 -21*0 -12*0 -22*0 ..]
-//[-11*0 -21*0 -12*0 -22*0 ; -11*0 -21*0 -12*0 -22*0 ; -11*0 -21*0 -12*0 -22*0 ; -11*0 -21*0 -12*0 -22*0 ..]
-//[..... ..... ..... ..... ; ..... ..... ..... ..... ; ..... ..... ..... ..... ; ..... ..... ..... ..... ..]
- armnn::TensorInfo outputDesc({1, 1, 8, 6}, ArmnnType);
- boost::multi_array<T, 4> expectedOutput = MakeTensor<T, 4>(outputDesc, std::vector<T>(
- QuantizedVector<T>(qScale, qOffset, {
- 0, 0, 0, 0, 0, 0,
- -242, -594, -934, -372, 0, 0,
- -495, -1190, -1850, -725, 0, 0,
- -538, -1256, -1916, -748, 0, 0,
- -273, -626, -946, -363, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0
- })));
-
- return SimpleConvolution2dTestImpl<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- GetBias2<ArmnnBType>(false, qScale * qScale),
- expectedOutput,
- qScale,
- qOffset,
- layout,
- 1, // Padding left.
- 2, // Padding top.
- 3, // Padding right.
- 4); // Padding bottom.
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType,
- typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> SimpleConvolution2dAsymmetricPaddingTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout,
- float qScale,
- int32_t qOffset)
-{
- // Use a single-batch 1-channel 5x5 image as input.
- armnn::TensorInfo inputDesc({ 1, 1, 5, 5 }, ArmnnType);
- boost::multi_array<T, 4> input = MakeTensor<T, 4>(inputDesc, std::vector<T>(
- QuantizedVector<T>(qScale, qOffset, {
- 11,21,31,41,51,
- 12,22,32,42,52,
- 13,23,33,43,53,
- 14,24,34,44,54,
- 15,25,35,45,55,
- })));
-
- // Use 1 batch of a 1-channel 4x4 kernel.
- armnn::TensorInfo kernelDesc({ 1, 1, 4, 4 }, ArmnnType);
- boost::multi_array<T, 4> kernel = MakeTensor<T, 4>(kernelDesc, std::vector<T>(
- QuantizedVector<T>(qScale, qOffset, {
- -11,-21,-31,-41,
- -12,-22,-32,-42,
- -13,-23,-33,-43,
- -14,-24,-34,-44,
- })));
-
- // Expected output is 1 batch of a 1-channel 5x5 image.
- armnn::TensorInfo outputDesc({ 1, 1, 5, 5 }, ArmnnType);
- std::vector<T> myVec(outputDesc.GetNumElements(), 0);
- boost::multi_array<T, 4> expectedOutput = MakeTensor<T, 4>(outputDesc, std::vector<T>(
- QuantizedVector<T>(qScale, qOffset, {
- -7140, -10580, -13940, -9300, -5230,
- -9590, -14120, -18520, -12290, -6860,
- -9980, -14560, -18960, -12560, -7000,
- -7518, -10904, -14144, -9318, -5152,
- -5032, -7256, -9376, -6142, -3368,
- })));
-
- return SimpleConvolution2dTestImpl<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- GetBias2<ArmnnBType>(false, qScale * qScale),
- expectedOutput,
- qScale,
- qOffset,
- layout,
- 1, // Padding left.
- 1, // Padding top.
- 2, // Padding right.
- 2); // Padding bottom.
-}
-
-LayerTestResult<float, 4> Convolution2dAsymmetricPaddingTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::DataLayout layout)
-{
- return SimpleConvolution2dAsymmetricPaddingTestCommon<armnn::DataType::Float32, armnn::DataType::Float32>(
- workloadFactory, memoryManager, layout, 0.0f, 0);
-}
-
-LayerTestResult<float, 4> Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::DataLayout layout)
-{
- return Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTestCommon
- <armnn::DataType::Float32, armnn::DataType::Float32>(
- workloadFactory, memoryManager, layout, 0.0f, 0);
-}
-
-LayerTestResult<float, 4> Convolution1dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled)
-{
- return Convolution1dTestImpl<armnn::DataType::Float32, armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0, biasEnabled);
-}
-
-LayerTestResult<uint8_t, 4> Convolution1dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled)
-{
- return Convolution1dTestImpl<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
- workloadFactory, memoryManager, 0.1f, 128, biasEnabled);
-}
-
-LayerTestResult<float,4> CompareConvolution2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::IWorkloadFactory& refWorkloadFactory)
-{
- return CompareConvolution2dTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, refWorkloadFactory);
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> Convolution2d3x3DilationTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const std::vector<float>& inputNoQuantizedValues,
- armnn::TensorInfo& inputTensorInfo,
- const std::vector<float>& kernelNoQuantizedValues,
- armnn::TensorInfo& kernelTensorInfo,
- const std::vector<float>& outputExpectedNoQuantizedValues,
- armnn::TensorInfo& outputTensorInfo,
- uint32_t dilationX,
- uint32_t dilationY,
- armnn::DataLayout layout = armnn::DataLayout::NCHW,
- uint32_t padLeft = 0,
- uint32_t padTop = 0,
- uint32_t padRight = 0,
- uint32_t padBottom = 0,
- uint32_t strideX = 1,
- uint32_t strideY = 1,
- bool biasEnabled = false
-)
-{
- float qScale;
- int32_t qOffset;
- switch (ArmnnType)
- {
- case armnn::DataType::QuantisedAsymm8:
- {
- qScale = 0.1f;
- qOffset = 128;
- break;
- }
- case armnn::DataType::QuantisedSymm16:
- {
- qScale = 0.1f;
- qOffset = 0;
- break;
- }
- case armnn::DataType::Float32:
- default:
- {
- qScale = 0.f;
- qOffset = 0;
- break;
- }
- }
-
- inputTensorInfo.SetQuantizationScale(qScale);
- inputTensorInfo.SetQuantizationOffset(qOffset);
- kernelTensorInfo.SetQuantizationScale(qScale);
- kernelTensorInfo.SetQuantizationOffset(qOffset);
- outputTensorInfo.SetQuantizationScale(qScale);
- outputTensorInfo.SetQuantizationOffset(qOffset);
-
- auto input = MakeTensor<T, 4>(inputTensorInfo,
- std::vector<T>(QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
- inputTensorInfo.GetQuantizationOffset(),
- inputNoQuantizedValues)));
- auto kernel = MakeTensor<T, 4>(kernelTensorInfo,
- std::vector<T>(QuantizedVector<T>(kernelTensorInfo.GetQuantizationScale(),
- kernelTensorInfo.GetQuantizationOffset(),
- kernelNoQuantizedValues)));
- auto expectedOutput = MakeTensor<T, 4>(outputTensorInfo,
- std::vector<T>(QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
- outputTensorInfo.GetQuantizationOffset(),
- outputExpectedNoQuantizedValues)));
-
- return SimpleConvolution2dTestImpl<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- GetBias2<ArmnnBType>(biasEnabled, qScale * qScale),
- expectedOutput,
- qScale,
- qOffset,
- layout,
- padLeft,
- padTop,
- padRight,
- padBottom,
- strideX,
- strideY,
- dilationX,
- dilationY);
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T>
-LayerTestResult<T, 4> Convolution2d3x3Dilation3x3Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- armnn::TensorInfo inputTensorInfo({1, 1, 10, 10}, ArmnnType);
- std::vector<float> inputNoQuantizedValues =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
-
- armnn::TensorInfo kernelTensorInfo({ 1, 1, 3, 3}, ArmnnType);
- std::vector<float> kernelNoQuantizedValues =
- {
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9
- };
-
- // Since the dilation rate is 3 this will dilate the kernel to be like 7x7,
- // therefore the output will be 4x4: (I−K+2P)/S +1 => (10-7 +0)/1 +1
- armnn::TensorInfo outputTensorInfo({ 1, 1, 4, 4}, ArmnnType);
- std::vector<float> outputExpectedNoQuantizedValues =
- {
- 6., 5., 5., 5.,
- 6., 5., 5., 5.,
- 6., 5., 5., 5.,
- 3., 2., 2., 2.
- };
-
- return Convolution2d3x3DilationTestCommon<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- inputNoQuantizedValues,
- inputTensorInfo,
- kernelNoQuantizedValues,
- kernelTensorInfo,
- outputExpectedNoQuantizedValues,
- outputTensorInfo,
- 3,
- 3,
- layout,
- biasEnabled);
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T>
-LayerTestResult<T, 4> Convolution2d2x3x3Dilation3x3Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- armnn::TensorInfo inputTensorInfo({1, 2, 10, 10}, ArmnnType);
- std::vector<float> inputNoQuantizedValues =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
-
- armnn::TensorInfo kernelTensorInfo({ 1, 2, 3, 3}, ArmnnType);
- std::vector<float> kernelNoQuantizedValues =
- {
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9,
-
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9
- };
-
- // Since the dilation rate is 3 this will dilate the kernel to be like 7x7,
- // therefore the output will be 4x4: (I−K+2P)/S +1 => (10-7 +0)/1 +1
- armnn::TensorInfo outputTensorInfo({ 1, 1, 4, 4}, ArmnnType);
- std::vector<float> outputExpectedNoQuantizedValues =
- {
- 12., 10., 10., 10.,
- 12., 10., 10., 10.,
- 12., 10., 10., 10.,
- 6., 4., 4., 4.
- };
-
- return Convolution2d3x3DilationTestCommon<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- inputNoQuantizedValues,
- inputTensorInfo,
- kernelNoQuantizedValues,
- kernelTensorInfo,
- outputExpectedNoQuantizedValues,
- outputTensorInfo,
- 3,
- 3,
- layout,
- biasEnabled);
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T>
-LayerTestResult<T, 4> Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test(
- armnn::IWorkloadFactory &workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- armnn::TensorInfo inputTensorInfo({1, 1, 10, 10}, ArmnnType);
- std::vector<float> inputNoQuantizedValues =
- {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- };
-
- armnn::TensorInfo kernelTensorInfo({ 1, 1, 2, 2}, ArmnnType);
- std::vector<float> kernelNoQuantizedValues =
- {
- 1, 2,
- 3, 4
- };
-
- // Since the dilation rate is 2 this will dilate the kernel to be like 3x3: d(K-1)+1 --> 2 x (2-1) + 1 = 3,
- // therefore the output will be 4x4: (I − K + 2P)/S +1 => trunc ( (10 - 3 + 2x2 ) / 3 + 1 )
- // where, dilation size = d = 2; kernel size = K = 2; input size = I = 10; padding size = P = 2; stride = S = 3
- armnn::TensorInfo outputTensorInfo({ 1, 1, 4, 4}, ArmnnType);
- std::vector<float> outputExpectedNoQuantizedValues =
- {
- 4, 7, 7, 3,
- 6, 10, 10, 4,
- 6, 10, 10, 4,
- 2, 3, 3, 1
- };
- uint32_t padLeft = 1;
- uint32_t padTop = 1;
- uint32_t padRight = 1;
- uint32_t padBottom = 1;
-
- return Convolution2d3x3DilationTestCommon<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- inputNoQuantizedValues,
- inputTensorInfo,
- kernelNoQuantizedValues,
- kernelTensorInfo,
- outputExpectedNoQuantizedValues,
- outputTensorInfo,
- 2,
- 2,
- layout,
- padLeft,
- padTop,
- padRight,
- padBottom,
- 3,
- 3,
- biasEnabled
- );
-}
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
-Convolution2d3x3Dilation3x3Test<armnn::DataType::Float32, armnn::DataType::Float32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
-Convolution2d3x3Dilation3x3Test<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
-Convolution2d3x3Dilation3x3Test<armnn::DataType::QuantisedSymm16, armnn::DataType::Signed32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
-Convolution2d2x3x3Dilation3x3Test<armnn::DataType::Float32, armnn::DataType::Float32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
-Convolution2d2x3x3Dilation3x3Test<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
-Convolution2d2x3x3Dilation3x3Test<armnn::DataType::QuantisedSymm16, armnn::DataType::Signed32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
-Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test<armnn::DataType::Float32, armnn::DataType::Float32>(
- armnn::IWorkloadFactory &workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
-Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
- armnn::IWorkloadFactory &workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
-Convolution2d2x2Dilation2x2Padding2x2Stride3x3Test<armnn::DataType::QuantisedSymm16, armnn::DataType::Signed32>(
- armnn::IWorkloadFactory &workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout);
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType,
- typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> DepthwiseConvolution2dAsymmetricTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- // Use a single-batch 2-channel 5x5 image as input.
- armnn::TensorInfo inputTensorInfo({ 1, 2, 5, 5 }, ArmnnType);
- auto input = MakeTensor<T, 4>(inputTensorInfo, std::vector<T>(
- QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(), inputTensorInfo.GetQuantizationOffset(),
- {
- 0, 1, 2, 3, 4,
- 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24,
-
- 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49
- })));
-
- // Use a depth multiplier of 1 on a 2-channel 4x4 kernel.
- armnn::TensorInfo kernelTensorInfo({ 1, 2, 4, 4 }, ArmnnType);
- auto kernel = MakeTensor<T, 4>(kernelTensorInfo, std::vector<T>(
- QuantizedVector<T>(kernelTensorInfo.GetQuantizationScale(), kernelTensorInfo.GetQuantizationOffset(),
- {
- 32, 31, 30, 29,
- 28, 27, 26, 25,
- 24, 23, 22, 21,
- 20, 19, 18, 17,
-
- 16, 15, 14, 13,
- 12, 11, 10, 9,
- 8, 7, 6, 5,
- 4, 3, 2, 1
- })));
-
- // Expected output is 1 batch of a 2-channel 5x5 image.
- // Calculated using the python tensorflow library with strideX=1, strideY=1.
- armnn::TensorInfo outputTensorInfo({ 1, 2, 5, 5 }, ArmnnType);
- boost::multi_array<T, 4> expectedOutput = MakeTensor<T, 4>(outputTensorInfo, std::vector<T>(
- QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(), outputTensorInfo.GetQuantizationOffset(),
- {
- 1062, 1580, 1850, 1530, 1117,
- 2140, 3108, 3500, 2842, 2042,
- 3580, 5068, 5460, 4342, 3062,
- 3618, 5072, 5390, 4248, 2971,
- 3074, 4282, 4510, 3533, 2457,
-
- 1550, 2284, 2362, 1955, 1428,
- 2910, 4206, 4342, 3528, 2536,
- 3390, 4886, 5022, 4068, 2916,
- 3566, 5056, 5182, 4133, 2922,
- 3100, 4352, 4452, 3517, 2465
- })));
-
- return DepthwiseConvolution2dAsymmetricTestImpl<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- GetBias2<ArmnnBType>(biasEnabled, qScale * qScale),
- expectedOutput,
- qScale,
- qOffset,
- layout,
- 1, // Padding left.
- 1, // Padding top.
- 2, // Padding right.
- 2, // Padding bottom.
- 1, // strideX
- 1); // strideY
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType,
- typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> DepthwiseConvolution2dNhwcTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset,
- bool biasEnabled)
-{
- auto layout = armnn::DataLayout::NHWC;
-
- armnn::TensorInfo inputTensorInfo({ 1, 2, 5, 5}, ArmnnType);
- auto input = MakeTensor<T, 4>(inputTensorInfo, std::vector<T>(
- QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(), inputTensorInfo.GetQuantizationOffset(),
- {
- 0, 1, 2, 3, 4,
- 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24,
-
- 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49
- })));
-
- armnn::TensorInfo kernelTensorInfo({ 1, 2, 4, 4 }, ArmnnType);
- auto kernel = MakeTensor<T, 4>(kernelTensorInfo, std::vector<T>(
- QuantizedVector<T>(kernelTensorInfo.GetQuantizationScale(), kernelTensorInfo.GetQuantizationOffset(),
- {
- 32, 31, 30, 29,
- 28, 27, 26, 25,
- 24, 23, 22, 21,
- 20, 19, 18, 17,
-
- 16, 15, 14, 13,
- 12, 11, 10, 9,
- 8, 7, 6, 5,
- 4, 3, 2, 1
- })));
-
- armnn::TensorInfo outputTensorInfo({ 1, 2, 5, 5}, ArmnnType);
- boost::multi_array<T, 4> expectedOutput = MakeTensor<T, 4>(outputTensorInfo, std::vector<T>(
- QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(), outputTensorInfo.GetQuantizationOffset(),
- {
- 1062, 1580, 1850, 1530, 1117,
- 2140, 3108, 3500, 2842, 2042,
- 3580, 5068, 5460, 4342, 3062,
- 3618, 5072, 5390, 4248, 2971,
- 3074, 4282, 4510, 3533, 2457,
-
- 1550, 2284, 2362, 1955, 1428,
- 2910, 4206, 4342, 3528, 2536,
- 3390, 4886, 5022, 4068, 2916,
- 3566, 5056, 5182, 4133, 2922,
- 3100, 4352, 4452, 3517, 2465
- })));
-
- return DepthwiseConvolution2dTestImpl<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- GetBias2<ArmnnBType>(biasEnabled, qScale * qScale),
- expectedOutput,
- qScale,
- qOffset,
- layout,
- 1, // Padding left.
- 1, // Padding top.
- 2, // Padding right.
- 2, // Padding bottom.
- 1, // strideX
- 1); // strideY
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType,
- typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset,
- bool biasEnabled)
-{
- auto layout = armnn::DataLayout::NHWC;
-
- armnn::TensorInfo inputTensorInfo({ 1, 1, 9, 9}, ArmnnType);
- auto input = MakeTensor<T, 4>(inputTensorInfo, std::vector<T>(
- QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(), inputTensorInfo.GetQuantizationOffset(),
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0
- })));
-
- armnn::TensorInfo kernelTensorInfo({ 1, 1, 3, 3}, ArmnnType);
- auto kernel = MakeTensor<T, 4>(kernelTensorInfo, std::vector<T>(
- QuantizedVector<T>(kernelTensorInfo.GetQuantizationScale(), kernelTensorInfo.GetQuantizationOffset(),
- {
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9
- })));
-
- uint32_t padLeft = 0;
- uint32_t padTop = 0;
- uint32_t padRight = 0;
- uint32_t padBottom = 0;
- uint32_t strideX = 1;
- uint32_t strideY = 1;
- uint32_t dilationX = 3;
- uint32_t dilationY = 3;
-
- // Since the dilation rate is 3 this will reduce the size of the output from 9x9 to 3x3 of all 5s.
- armnn::TensorInfo outputTensorInfo({ 1, 1, 3, 3}, ArmnnType);
- boost::multi_array<T, 4> expectedOutput = MakeTensor<T, 4>(outputTensorInfo, std::vector<T>(
- QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(), outputTensorInfo.GetQuantizationOffset(),
- {
- 5, 5, 5,
- 5, 5, 5,
- 5, 5, 5
- })));
-
- return DepthwiseConvolution2dTestImpl<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- GetBias2<ArmnnBType>(biasEnabled, qScale * qScale),
- expectedOutput,
- qScale,
- qOffset,
- layout,
- padLeft,
- padTop,
- padRight,
- padBottom,
- strideX,
- strideY,
- dilationX,
- dilationY);
-}
-
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> DepthwiseConvolution2d3x3DilationTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const std::vector<float>& inputNoQuantizedValues,
- armnn::TensorInfo& inputTensorInfo,
- const std::vector<float>& kernelNoQuantizedValues,
- armnn::TensorInfo& kernelTensorInfo,
- const std::vector<float>& outputExpectedNoQuantizedValues,
- armnn::TensorInfo& outputTensorInfo,
- uint32_t dilationX,
- uint32_t dilationY,
- armnn::DataLayout layout = armnn::DataLayout::NCHW,
- bool biasEnabled = false)
-{
- float qScale;
- int32_t qOffset;
- switch (ArmnnType)
- {
- case armnn::DataType::QuantisedAsymm8:
- {
- qScale = 0.1f;
- qOffset = 128;
- break;
- }
- case armnn::DataType::QuantisedSymm16:
- {
- qScale = 0.1f;
- qOffset = 0;
- break;
- }
- case armnn::DataType::Float32:
- default:
- {
- qScale = 0.f;
- qOffset = 0;
- break;
- }
- }
-
- inputTensorInfo.SetQuantizationScale(qScale);
- inputTensorInfo.SetQuantizationOffset(qOffset);
- kernelTensorInfo.SetQuantizationScale(qScale);
- kernelTensorInfo.SetQuantizationOffset(qOffset);
- outputTensorInfo.SetQuantizationScale(qScale);
- outputTensorInfo.SetQuantizationOffset(qOffset);
-
- auto input = MakeTensor<T, 4>(inputTensorInfo,
- std::vector<T>(QuantizedVector<T>(inputTensorInfo.GetQuantizationScale(),
- inputTensorInfo.GetQuantizationOffset(),
- inputNoQuantizedValues)));
- auto kernel = MakeTensor<T, 4>(kernelTensorInfo,
- std::vector<T>(QuantizedVector<T>(kernelTensorInfo.GetQuantizationScale(),
- kernelTensorInfo.GetQuantizationOffset(),
- kernelNoQuantizedValues)));
- auto expectedOutput = MakeTensor<T, 4>(outputTensorInfo,
- std::vector<T>(QuantizedVector<T>(outputTensorInfo.GetQuantizationScale(),
- outputTensorInfo.GetQuantizationOffset(),
- outputExpectedNoQuantizedValues)));
-
- uint32_t padLeft = 0;
- uint32_t padTop = 0;
- uint32_t padRight = 0;
- uint32_t padBottom = 0;
- uint32_t strideX = 1;
- uint32_t strideY = 1;
-
- return DepthwiseConvolution2dTestImpl<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- GetBias<ArmnnBType>(biasEnabled, qScale * qScale, outputTensorInfo, layout),
- expectedOutput,
- qScale,
- qOffset,
- layout,
- padLeft,
- padTop,
- padRight,
- padBottom,
- strideX,
- strideY,
- dilationX,
- dilationY);
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T>
-LayerTestResult<T, 4> DepthwiseConvolution2d3x3Dilation3x3Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- armnn::TensorInfo inputTensorInfo({1, 1, 10, 10}, ArmnnType);
- std::vector<float> inputNoQuantizedValues =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
-
- armnn::TensorInfo kernelTensorInfo({ 1, 1, 3, 3}, ArmnnType);
- std::vector<float> kernelNoQuantizedValues =
- {
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9
- };
-
- // Since the dilation rate is 3 this will dilate the kernel to be like 7x7,
- // therefore the output will be 4x4: (I−K+2P)/S +1 => (10-7 +0)/1 +1
- armnn::TensorInfo outputTensorInfo({ 1, 1, 4, 4}, ArmnnType);
- std::vector<float> outputExpectedNoQuantizedValues =
- {
- 6., 5., 5., 5.,
- 6., 5., 5., 5.,
- 6., 5., 5., 5.,
- 3., 2., 2., 2.
- };
-
- return DepthwiseConvolution2d3x3DilationTestCommon<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- inputNoQuantizedValues,
- inputTensorInfo,
- kernelNoQuantizedValues,
- kernelTensorInfo,
- outputExpectedNoQuantizedValues,
- outputTensorInfo,
- 3,
- 3,
- layout,
- biasEnabled);
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T>
-LayerTestResult<T, 4> DepthwiseConvolution2d2x3x3Dilation3x3Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- armnn::TensorInfo inputTensorInfo({1, 2, 10, 10}, ArmnnType);
- std::vector<float> inputNoQuantizedValues =
- {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
-
- armnn::TensorInfo kernelTensorInfo({ 1, 2, 3, 3}, ArmnnType);
- std::vector<float> kernelNoQuantizedValues =
- {
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9,
-
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9
- };
-
- // Since the dilation rate is 3 this will dilate the kernel to be like 7x7,
- // therefore the output will be 2x4x4: (I−K+2P)/S +1 => (10-7 +0)/1 +1
- armnn::TensorInfo outputTensorInfo({ 1, 2, 4, 4}, ArmnnType);
- std::vector<float> outputExpectedNoQuantizedValues =
- {
- 6., 5., 5., 5.,
- 6., 5., 5., 5.,
- 6., 5., 5., 5.,
- 3., 2., 2., 2.,
-
- 6., 5., 5., 5.,
- 6., 5., 5., 5.,
- 6., 5., 5., 5.,
- 3., 2., 2., 2.
- };
-
- return DepthwiseConvolution2d3x3DilationTestCommon<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- inputNoQuantizedValues,
- inputTensorInfo,
- kernelNoQuantizedValues,
- kernelTensorInfo,
- outputExpectedNoQuantizedValues,
- outputTensorInfo,
- 3,
- 3,
- layout,
- biasEnabled);
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T>
-LayerTestResult<T, 4> DepthwiseConvolution2dMult4Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- armnn::TensorInfo inputTensorInfo({1, 2, 3, 3}, ArmnnType);
- std::vector<float> inputNoQuantizedValues =
- {
- 10.0, 10.0, 10.0,
- 10.0, 10.0, 10.0,
- 10.0, 10.0, 10.0,
-
- 21.0, 22.0, 23.0,
- 24.0, 25.0, 26.0,
- 27.0, 28.0, 29.0
- };
-
- armnn::TensorInfo kernelTensorInfo({ 4, 2, 2, 2}, ArmnnType);
-
- std::vector<float> kernelNoQuantizedValues =
- {
- 0.25f, 0.25f,
- 0.25f, 0.25f,
-
- 0.25f, 0.25f,
- 0.25f, 0.25f,
-
- 0.0f , 0.0f,
- 0.0f , 0.1f,
-
- 0.0f , 0.0f,
- 0.0f , 0.1f,
-
- 0.2f , 0.0f,
- 0.0f , 0.0f,
-
- 0.2f , 0.0f,
- 0.0f , 0.0f,
-
- 0.0f , 0.3f,
- 0.0f , 0.0f,
-
- 0.0f , 0.3f,
- 0.0f , 0.0f
- };
-
- armnn::TensorInfo outputTensorInfo({ 1, 8, 2, 2}, ArmnnType);
- std::vector<float> outputExpectedNoQuantizedValues =
- {
- 10.f, 10.f,
- 10.f, 10.f,
-
- 1.f, 1.f,
- 1.f, 1.f,
-
- 2.f, 2.f,
- 2.f, 2.f,
-
- 3.f, 3.f,
- 3.f, 3.f,
-
- 23.f, 24.f,
- 26.f, 27.f,
-
- 2.5f, 2.6000001f,
- 2.8f, 2.9f,
-
- 4.2000003f, 4.4f,
- 4.8f, 5.f,
-
- 6.6000004f, 6.9f,
- 7.5000005f, 7.8f
- };
-
-
- return DepthwiseConvolution2d3x3DilationTestCommon<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- inputNoQuantizedValues,
- inputTensorInfo,
- kernelNoQuantizedValues,
- kernelTensorInfo,
- outputExpectedNoQuantizedValues,
- outputTensorInfo,
- 1,
- 1,
- layout,
- biasEnabled);
-}
-
-template<armnn::DataType ArmnnType, armnn::DataType ArmnnBType, typename T>
-LayerTestResult<T, 4> DepthwiseConvolution2dMult2Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- armnn::TensorInfo inputTensorInfo({1, 2, 3, 3}, ArmnnType);
- std::vector<float> inputNoQuantizedValues =
- {
- 10.0, 10.0, 10.0,
- 10.0, 10.0, 10.0,
- 10.0, 10.0, 10.0,
-
- 21.0, 22.0, 23.0,
- 24.0, 25.0, 26.0,
- 27.0, 28.0, 29.0
- };
-
- armnn::TensorInfo kernelTensorInfo({ 2, 2, 2, 2}, ArmnnType);
-
- std::vector<float> kernelNoQuantizedValues =
- {
- 0.25f, 0.25f,
- 0.25f, 0.25f,
-
- 0.2f , 0.0f,
- 0.0f , 0.0f,
-
- 0.0f , 0.0f,
- 0.0f , 0.1f,
-
- 0.0f , 0.3f,
- 0.0f , 0.0f
-
- };
-
- armnn::TensorInfo outputTensorInfo({ 1, 4, 2, 2}, ArmnnType);
- std::vector<float> outputExpectedNoQuantizedValues =
- {
- 10.f, 10.f,
- 10.f, 10.f,
-
- 1.f, 1.f,
- 1.f, 1.f,
-
- 4.2000003f, 4.4f,
- 4.8f, 5.f,
-
- 6.6000004f, 6.9f,
- 7.5000005f, 7.8f
- };
-
-
- return DepthwiseConvolution2d3x3DilationTestCommon<ArmnnType, ArmnnBType>(
- workloadFactory,
- memoryManager,
- inputNoQuantizedValues,
- inputTensorInfo,
- kernelNoQuantizedValues,
- kernelTensorInfo,
- outputExpectedNoQuantizedValues,
- outputTensorInfo,
- 1,
- 1,
- layout,
- biasEnabled);
-}
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
-DepthwiseConvolution2d3x3Dilation3x3Test<armnn::DataType::Float32, armnn::DataType::Float32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
-DepthwiseConvolution2d3x3Dilation3x3Test<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
-DepthwiseConvolution2d3x3Dilation3x3Test<armnn::DataType::QuantisedSymm16, armnn::DataType::Signed32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
-DepthwiseConvolution2d2x3x3Dilation3x3Test<armnn::DataType::Float32, armnn::DataType::Float32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::QuantisedAsymm8>, 4>
-DepthwiseConvolution2d2x3x3Dilation3x3Test<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
-DepthwiseConvolution2d2x3x3Dilation3x3Test<armnn::DataType::QuantisedSymm16, armnn::DataType::Signed32>(
- armnn::IWorkloadFactory&,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr&,
- bool,
- armnn::DataLayout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
-DepthwiseConvolution2dMult4Test<armnn::DataType::Float32, armnn::DataType::Float32>(
- armnn::IWorkloadFactory &workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout);
-
-template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 4>
-DepthwiseConvolution2dMult2Test<armnn::DataType::Float32, armnn::DataType::Float32>(
- armnn::IWorkloadFactory &workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout);
-
-LayerTestResult<float, 4> DepthwiseConvolution2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return DepthwiseConvolution2dTestImpl<armnn::DataType::Float32, armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0, biasEnabled, layout);
-}
-
-LayerTestResult<float, 4> DepthwiseConvolution2dDepthNhwcTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled)
-{
- return DepthwiseConvolution2dNhwcTestCommon<armnn::DataType::Float32, armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0, biasEnabled);
-}
-
-LayerTestResult<float, 4> DepthwiseConvolution2dDepthMul1Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return DepthwiseConvolution2dDepthMul1TestImpl<armnn::DataType::Float32, armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0, biasEnabled, layout);
-}
-
-LayerTestResult<float, 4> DepthwiseConvolution2dDepthMul64Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- armnn::TensorInfo inputTensorInfo({ 1, 1, 2, 2 }, armnn::DataType::Float32);
- auto input = MakeTensor<float, 4>(inputTensorInfo, { 1.f, 2.f, 3.f, 4.f });
-
- std::vector<float> kernelData;
- std::vector<float> singleDepthKernel{ 1.f, -1.f, -1.f, 1.f };
- for (unsigned int i = 0; i < 64; ++i)
- {
- kernelData.insert(kernelData.end(), singleDepthKernel.begin(), singleDepthKernel.end());
- }
- armnn::TensorInfo kernelTensorInfo({ 64, 1, 2, 2 }, armnn::DataType::Float32);
- auto kernel = MakeTensor<float, 4>(kernelTensorInfo, kernelData);
-
- std::vector<float> expectedOutputData(64, 0.f);
- armnn::TensorInfo outputTensorInfo({ 1, 64, 1, 1 }, armnn::DataType::Float32);
- auto expectedOutput = MakeTensor<float, 4>(outputTensorInfo, expectedOutputData);
-
- return DepthwiseConvolution2dTestImpl<armnn::DataType::Float32, armnn::DataType::Float32>(
- workloadFactory,
- memoryManager,
- input,
- kernel,
- boost::multi_array<float, 1>(),
- expectedOutput,
- 0.f,
- 0,
- armnn::DataLayout::NCHW);
-}
-
-LayerTestResult<float, 4> DepthwiseConvolution2dAsymmetricTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return DepthwiseConvolution2dAsymmetricTestCommon<armnn::DataType::Float32, armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0, biasEnabled, layout);
-}
-
-LayerTestResult<uint8_t, 4> DepthwiseConvolution2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return DepthwiseConvolution2dTestImpl<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
- workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout);
-}
-
-LayerTestResult<uint8_t, 4> DepthwiseConvolution2dDepthMul1Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return DepthwiseConvolution2dDepthMul1TestImpl<armnn::DataType::QuantisedAsymm8, armnn::DataType::Signed32>(
- workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout);
-}
-
-LayerTestResult<float, 4> SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SimpleDepthwiseConvolution2d3x3Dilation3x3NhwcTestCommon<armnn::DataType::Float32, armnn::DataType::Float32>(
- workloadFactory,
- memoryManager,
- 0.f,
- 0,
- false);
-}
-
-LayerTestResult<int16_t, 4> DepthwiseConvolution2dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return DepthwiseConvolution2dTestImpl<armnn::DataType::QuantisedSymm16, armnn::DataType::Signed32>(
- workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout);
-}
-
-LayerTestResult<int16_t, 4> DepthwiseConvolution2dDepthMul1Int16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool biasEnabled,
- const armnn::DataLayout layout)
-{
- return DepthwiseConvolution2dDepthMul1TestImpl<armnn::DataType::QuantisedSymm16, armnn::DataType::Signed32>(
- workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout);
-}
-
-LayerTestResult<float, 4> CompareDepthwiseConvolution2dFloatTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::IWorkloadFactory& refWorkloadFactory,
- const armnn::DataLayout layout)
-{
- return CompareDepthwiseConvolution2dTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, refWorkloadFactory, layout);
-}
-
-LayerTestResult<uint8_t, 4> CompareDepthwiseConvolution2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::IWorkloadFactory& refWorkloadFactory,
- const armnn::DataLayout layout)
-{
- return CompareDepthwiseConvolution2dTestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, refWorkloadFactory, layout);
-}
-
-LayerTestResult<float,4> SimpleNormalizationAcrossTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- auto normMethod = armnn::NormalizationAlgorithmMethod::LocalBrightness;
- auto normChannel = armnn::NormalizationAlgorithmChannel::Across;
- return SimpleNormalizationTestImpl(workloadFactory, memoryManager, normChannel, normMethod);
-}
-
-LayerTestResult<float,4> SimpleNormalizationWithinTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- auto normMethod = armnn::NormalizationAlgorithmMethod::LocalBrightness;
- auto normChannel = armnn::NormalizationAlgorithmChannel::Within;
- return SimpleNormalizationTestImpl(workloadFactory, memoryManager, normChannel, normMethod);
-}
-
-LayerTestResult<float,4> SimpleNormalizationAcrossNhwcTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- auto normMethod = armnn::NormalizationAlgorithmMethod::LocalBrightness;
- auto normChannel = armnn::NormalizationAlgorithmChannel::Across;
- return SimpleNormalizationNhwcTestImpl(workloadFactory, memoryManager, normChannel, normMethod);
-}
-
-LayerTestResult<float,2> SimpleSoftmaxTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta)
-{
- return SimpleSoftmaxTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, beta);
-}
-
-LayerTestResult<float,2> SimpleAxisSoftmaxTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta,
- int axis)
-{
- return SimpleSoftmaxTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, beta, axis);
-}
-
-LayerTestResult<float,3> Simple3dSoftmaxTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta)
-{
- Simple3dSoftmaxOutputData data;
- return Simple3dSoftmaxTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, beta,
- data.inputShape, data.outputData, data.inputData);
-}
-
-LayerTestResult<float,3> Simple3dAxisSoftmaxTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta,
- int axis)
-{
- armnn::TensorShape inputShape;
- std::vector<float> inputData;
- std::vector<float> outputData;
- switch (axis)
- {
- case -3:
- case 0:
- {
- inputShape = {5, 2, 2};
-
- inputData =
- {
- 17.0f, -1.0f, 17.0f, -1.0f, 16.0f, -2.0f, 16.0f, -2.0f, 15.0f, -3.0f,
-
- 15.0f, -3.0f, 14.0f, -4.0f, 14.0f, -4.0f, 1.0f, -17.0f, 1.0f, -17.0f
- };
-
- outputData =
- {
- 0.643914213228014f, 0.643914213228014f, 0.643914213228014f, 0.643914213228014f,
- 0.236882800924671f,
- 0.236882800924671f, 0.236882800924671f, 0.236882800924671f, 0.087144312427294f,
- 0.087144312427294f,
-
- 0.087144312427294f, 0.087144312427294f, 0.032058600957022f, 0.032058600957022f,
- 0.032058600957022f,
- 0.032058600957022f, 7.246299848982885e-08f, 7.246299848982885e-08f, 7.246299848982885e-08f,
- 7.246299848982885e-08f
- };
- break;
- }
- case -2:
- case 1:
- {
- inputShape = {2, 5, 2};
-
- inputData =
- {
- 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f,
-
- 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f
- };
-
- outputData =
- {
- 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
- 0.087144312427294f,
- 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
- 7.246299848982885e-08f,
-
- 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
- 0.087144312427294f,
- 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
- 7.246299848982885e-08f
- };
- break;
- }
- case -1:
- case 2:
- {
- inputShape = {2, 2, 5};
-
- inputData =
- {
- 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f,
- 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f
- };
-
- outputData =
- {
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f,
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f,
-
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f,
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f
- };
- break;
- }
- }
-
- return Simple3dSoftmaxTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, beta,
- inputShape, outputData, inputData, axis);
-}
-
-LayerTestResult<float,4> Simple4dSoftmaxTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta)
-{
- Simple4dSoftmaxData data;
- return Simple4dSoftmaxTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, beta, data.inputShape,
- data.outputData, data.inputData);
-}
-
-LayerTestResult<float,4> Simple4dAxisSoftmaxTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta,
- int axis)
-{
- armnn::TensorShape inputShape;
- std::vector<float> inputData;
- std::vector<float> outputData;
- switch (axis)
- {
- case -4:
- case 0:
- {
- inputShape = {5, 2, 2, 2};
-
- inputData =
- {
- 17.0f, -1.0f, 17.0f, -1.0f, 17.0f, -1.0f, 17.0f, -1.0f, 16.0f, -2.0f,
- 16.0f, -2.0f, 16.0f, -2.0f, 16.0f, -2.0f, 15.0f, -3.0f, 15.0f, -3.0f,
- 15.0f, -3.0f, 15.0f, -3.0f, 14.0f, -4.0f, 14.0f, -4.0f, 14.0f, -4.0f,
- 14.0f, -4.0f, 1.0f, -17.0f, 1.0f, -17.0f, 1.0f, -17.0f, 1.0f, -17.0f
- };
-
- outputData =
- {
- 0.643914213228014f, 0.643914213228014f, 0.643914213228014f, 0.643914213228014f,
- 0.643914213228014f,
- 0.643914213228014f, 0.643914213228014f, 0.643914213228014f, 0.236882800924671f,
- 0.236882800924671f,
- 0.236882800924671f, 0.236882800924671f, 0.236882800924671f, 0.236882800924671f,
- 0.236882800924671f,
- 0.236882800924671f, 0.087144312427294f, 0.087144312427294f, 0.087144312427294f,
- 0.087144312427294f,
-
- 0.087144312427294f, 0.087144312427294f, 0.087144312427294f, 0.087144312427294f,
- 0.032058600957022f,
- 0.032058600957022f, 0.032058600957022f, 0.032058600957022f, 0.032058600957022f,
- 0.032058600957022f,
- 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f, 7.246299848982885e-08f,
- 7.246299848982885e-08f,
- 7.246299848982885e-08f, 7.246299848982885e-08f, 7.246299848982885e-08f,
- 7.246299848982885e-08f, 7.246299848982885e-08f
- };
- break;
- }
- case -3:
- case 1:
- {
- inputShape = {2, 5, 2, 2};
-
- inputData =
- {
- 17.0f, -1.0f, 17.0f, -1.0f, 16.0f, -2.0f, 16.0f, -2.0f, 15.0f, -3.0f,
- 15.0f, -3.0f, 14.0f, -4.0f, 14.0f, -4.0f, 1.0f, -17.0f, 1.0f, -17.0f,
- 17.0f, -1.0f, 17.0f, -1.0f, 16.0f, -2.0f, 16.0f, -2.0f, 15.0f, -3.0f,
- 15.0f, -3.0f, 14.0f, -4.0f, 14.0f, -4.0f, 1.0f, -17.0f, 1.0f, -17.0f
- };
-
- outputData =
- {
- 0.643914213228014f, 0.643914213228014f, 0.643914213228014f, 0.643914213228014f,
- 0.236882800924671f,
- 0.236882800924671f, 0.236882800924671f, 0.236882800924671f, 0.087144312427294f,
- 0.087144312427294f,
- 0.087144312427294f, 0.087144312427294f, 0.032058600957022f, 0.032058600957022f,
- 0.032058600957022f,
- 0.032058600957022f, 7.246299848982885e-08f, 7.246299848982885e-08f, 7.246299848982885e-08f,
- 7.246299848982885e-08f,
-
-
- 0.643914213228014f, 0.643914213228014f, 0.643914213228014f, 0.643914213228014f,
- 0.236882800924671f,
- 0.236882800924671f, 0.236882800924671f, 0.236882800924671f, 0.087144312427294f,
- 0.087144312427294f,
- 0.087144312427294f, 0.087144312427294f, 0.032058600957022f, 0.032058600957022f,
- 0.032058600957022f,
- 0.032058600957022f, 7.246299848982885e-08f, 7.246299848982885e-08f, 7.246299848982885e-08f,
- 7.246299848982885e-08f
- };
- break;
- }
- case -2:
- case 2:
- {
- inputShape = {2, 2, 5, 2};
-
- inputData =
- {
- 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f,
- 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f,
- 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f,
- 17.0f, -1.0f, 16.0f, -2.0f, 15.0f, -3.0f, 14.0f, -4.0f, 1.0f, -17.0f
- };
-
- outputData =
- {
- 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
- 0.087144312427294f,
- 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
- 7.246299848982885e-08f,
- 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
- 0.087144312427294f,
- 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
- 7.246299848982885e-08f,
-
- 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
- 0.087144312427294f,
- 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
- 7.246299848982885e-08f,
- 0.643914213228014f, 0.643914213228014f, 0.236882800924671f, 0.236882800924671f,
- 0.087144312427294f,
- 0.087144312427294f, 0.032058600957022f, 0.032058600957022f, 7.246299848982885e-08f,
- 7.246299848982885e-08f
- };
- break;
- }
- case -1:
- case 3:
- {
- inputShape = {2, 2, 2, 5};
-
- inputData =
- {
- 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f,
- 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f,
- 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f,
- 17.0f, 16.0f, 15.0f, 14.0f, 1.0f, -1.0f, -2.0f, -3.0f, -4.0f, -17.0f
- };
-
- outputData =
- {
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f,
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f,
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f,
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f,
-
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f,
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f,
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f,
- 0.643914213228014f, 0.236882800924671f, 0.087144312427294f, 0.032058600957022f,
- 7.246299848982885e-08f
- };
- break;
- }
- }
-
- return Simple4dSoftmaxTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, beta, inputShape,
- outputData, inputData, axis);
-}
-
-LayerTestResult<uint8_t,2> SimpleSoftmaxUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta)
-{
- return SimpleSoftmaxTestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, beta);
-}
-
-LayerTestResult<uint8_t,3> Simple3dSoftmaxUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta)
-{
- Simple3dSoftmaxOutputData data;
- return Simple3dSoftmaxTestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, beta,
- data.inputShape, data.outputData, data.inputData);
-}
-
-LayerTestResult<uint8_t,4> Simple4dSoftmaxUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta)
-{
- Simple4dSoftmaxData data;
-
- return Simple4dSoftmaxTestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, beta,
- data.inputShape, data.outputData, data.inputData);
-}
-
-LayerTestResult<int16_t,2> SimpleSoftmaxUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta)
-{
- return SimpleSoftmaxTestImpl<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, beta);
-}
-
-LayerTestResult<int16_t,3> Simple3dSoftmaxUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta)
-{
- Simple3dSoftmaxOutputData data;
- return Simple3dSoftmaxTestImpl<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, beta,
- data.inputShape, data.outputData, data.inputData);
-}
-
-LayerTestResult<int16_t,4> Simple4dSoftmaxUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float beta)
-{
- Simple4dSoftmaxData data;
-
- return Simple4dSoftmaxTestImpl<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, beta,
- data.inputShape, data.outputData, data.inputData);
-}
-
-LayerTestResult<float,4> CompareNormalizationTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::IWorkloadFactory& refWorkloadFactory,
- armnn::NormalizationAlgorithmChannel normChannel,
- armnn::NormalizationAlgorithmMethod normMethod)
-{
- return CompareNormalizationTestImpl(workloadFactory, memoryManager, refWorkloadFactory, normChannel, normMethod);
-}
-
-LayerTestResult<float,2> CompareSoftmaxTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::IWorkloadFactory& refWorkloadFactory,
- float beta)
-{
- return CompareSoftmaxTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, refWorkloadFactory, beta);
-}
-
-LayerTestResult<uint8_t,2> CompareSoftmaxUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::IWorkloadFactory& refWorkloadFactory,
- float beta)
-{
- return CompareSoftmaxTestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, refWorkloadFactory, beta);
-}
-
-std::vector<LayerTestResult<float,3>> SplitterTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SplitterTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-std::vector<LayerTestResult<uint8_t,3>> SplitterUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SplitterTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 1.0f, 0);
-}
-
-std::vector<LayerTestResult<int16_t,3>> SplitterInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SplitterTestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, 1.0f, 0);
-}
-
-LayerTestResult<float, 3> CopyViaSplitterTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return CopyViaSplitterTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-LayerTestResult<uint8_t, 3> CopyViaSplitterUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return CopyViaSplitterTestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 1.0f, 0);
-}
-
-LayerTestResult<int16_t, 3> CopyViaSplitterInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return CopyViaSplitterTestImpl<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, 1.0f, 0);
-}
-
-#if defined(ARMNNREF_ENABLED)
-
-// The LSTM test units are run only for the reference backend at the moment
-
-void LstmUtilsZeroVectorTest()
-{
- armnn::TensorInfo inputDesc({4}, armnn::DataType::Float32);
- boost::multi_array<float, 1> input = MakeTensor<float, 1>(inputDesc, std::vector<float>(
- {2., 3., 3., 4.}));
-
- boost::multi_array<float, 1> expectedOutput = MakeTensor<float, 1>(inputDesc, std::vector<float>(
- {0., 0., 0., 0.}));
-
- return LstmUtilsZeroVectorTestImpl<armnn::DataType::Float32>(input, 4, expectedOutput);
-}
-
-void LstmUtilsMeanStddevNormalizationNoneZeroInputTest()
-{
- uint32_t batchSize = 2;
- uint32_t vecSize = 4;
- armnn::TensorInfo inputDesc({batchSize, vecSize}, armnn::DataType::Float32);
- boost::multi_array<float, 2> input = MakeTensor<float, 2>(inputDesc, std::vector<float>(
- { 0.1f, 0.2f, 0.3f, 0.4f, //batch 0
- 0.9f, 1.0f, 1.1f, 1.2f })); //batch 1
-
- boost::multi_array<float, 2> expectedOutput = MakeTensor<float, 2>(inputDesc, std::vector<float>(
- { -1.34164071f, -0.447213531f, 0.44721365f, 1.34164071f, //batch 0
- -1.34163153f, -0.447210163f, 0.447211236f, 1.3416326f })); //batch 1
-
- return LstmUtilsMeanStddevNormalizationTestImpl<armnn::DataType::Float32>(input,
- vecSize, batchSize, expectedOutput);
-}
-
-void LstmUtilsMeanStddevNormalizationAllZeroInputTest()
-{
- uint32_t batchSize = 2;
- uint32_t vecSize = 4;
- armnn::TensorInfo inputDesc({batchSize, vecSize}, armnn::DataType::Float32);
- boost::multi_array<float, 2> input = MakeTensor<float, 2>(inputDesc, std::vector<float>(
- { 0.0f, 0.0f, 0.0f, 0.0f, //batch 0
- 0.0f, 0.0f, 0.0f, 0.0f })); //batch 1
-
- boost::multi_array<float, 2> expectedOutput = MakeTensor<float, 2>(inputDesc, std::vector<float>(
- { 0.0f, 0.0f, 0.0f, 0.0f, //batch 0
- 0.0f, 0.0f, 0.0f, 0.0f })); //batch 1
-
- return LstmUtilsMeanStddevNormalizationTestImpl<armnn::DataType::Float32>(input,
- vecSize, batchSize, expectedOutput);
-}
-
-void LstmUtilsMeanStddevNormalizationMixedZeroInputTest()
-{
- uint32_t batchSize = 2;
- uint32_t vecSize = 4;
- armnn::TensorInfo inputDesc({batchSize, vecSize}, armnn::DataType::Float32);
- boost::multi_array<float, 2> input = MakeTensor<float, 2>(inputDesc, std::vector<float>(
- { 0.0f, 0.0f, 0.0f, 0.0f, //batch 0
- 0.1f, 0.2f, 0.3f, 0.4f })); //batch 1
-
- boost::multi_array<float, 2> expectedOutput = MakeTensor<float, 2>(inputDesc, std::vector<float>(
- { 0.0f, 0.0f, 0.0f, 0.0f, //batch 0
- -1.34164071f, -0.447213531f, 0.44721365f, 1.34164071f })); //batch 1
-
- return LstmUtilsMeanStddevNormalizationTestImpl<armnn::DataType::Float32>(input,
- vecSize, batchSize, expectedOutput);
-}
-
-
-void LstmUtilsVectorBatchVectorCwiseProductTest()
-{
- uint32_t batchSize = 4;
- uint32_t vecSize = 29;
- armnn::TensorInfo vecDesc({vecSize}, armnn::DataType::Float32);
- boost::multi_array<float, 1> vector = MakeTensor<float, 1>(vecDesc, std::vector<float>(
- { 1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f, 10.1f,
- 11.11f, 12.12f, 13.13f, 14.14f, 15.15f, 16.16f, 17.17f, 18.18f, 19.19f, 20.2f,
- 21.21f, 22.22f, 23.23f, 24.24f, 25.25f, 26.26f, 27.27f, 28.28f, 0.0f}));
-
- armnn::TensorInfo batchVecDesc({batchSize, vecSize}, armnn::DataType::Float32);
- boost::multi_array<float, 2> batchVector = MakeTensor<float, 2>(batchVecDesc, std::vector<float>(
- { /* batch 0 */
- 1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f, 10.1f,
- 11.11f, 12.12f, 13.13f, 14.14f, 15.15f, 16.16f, 17.17f, 18.18f, 19.19f, 20.2f,
- 21.21f, 22.22f, 23.23f, 24.24f, 25.25f, 26.26f, 27.27f, 28.28f, 0.0f,
- /* batch 1 */
- -1.1f, -2.2f, -3.3f, -4.4f, -5.5f, -6.6f, -7.7f, -8.8f, -9.9f, -10.1f,
- -11.11f, -12.12f, -13.13f, -14.14f, -15.15f, -16.16f, -17.17f, -18.18f, -19.19f, -20.2f,
- -21.21f, -22.22f, -23.23f, -24.24f, -25.25f, -26.26f, -27.27f, -28.28f, 0.0f,
- /* batch 2 */
- 1.1f, -2.2f, 3.3f, -4.4f, 5.5f, -6.6f, 7.7f, -8.8f, 9.9f, -10.1f,
- 11.11f, -12.12f, 13.13f, -14.14f, 15.15f, -16.16f, 17.17f, -18.18f, 19.19f, -20.2f,
- 21.21f, -22.22f, 23.23f, -24.24f, 25.25f, -26.26f, 27.27f, -28.28f, 0.0f,
- /* batch 3 */
- -1.1f, 2.2f, -3.3f, 4.4f, -5.5f, 6.6f, -7.7f, 8.8f, -9.9f, 10.1f,
- -11.11f, 12.12f, -13.13f, 14.14f, -15.15f, 16.16f, -17.17f, 18.18f, -19.19f, 20.2f,
- -21.21f, 22.22f, -23.23f, 24.24f, -25.25f, 26.26f, -27.27f, 28.28f, 0.0f}));
-
- // Expect output = input * output + output.
- boost::multi_array<float, 2> expectedOutput = MakeTensor<float, 2>(batchVecDesc, std::vector<float>(
- { /* batch 0 */
- 1.210000f, 4.840000f, 10.889999f, 19.360001f, 30.250000f, 43.559998f,
- 59.289997f, 77.440002f, 98.009995f, 102.010010f, 123.432091f, 146.894394f,
- 172.396896f, 199.939606f, 229.522491f, 261.145599f, 294.808899f, 330.512421f,
- 368.256134f, 408.040039f, 449.864075f, 493.728363f, 539.632874f, 587.577576f,
- 637.562500f, 689.587585f, 743.652954f, 799.758423f, 0.000000f,
- /* batch 1 */
- -1.210000f, -4.840000f, -10.889999f, -19.360001f, -30.250000f, -43.559998f,
- -59.289997f, -77.440002f, -98.009995f, -102.010010f, -123.432091f, -146.894394f,
- -172.396896f, -199.939606f, -229.522491f, -261.145599f, -294.808899f, -330.512421f,
- -368.256134f, -408.040039f, -449.864075f, -493.728363f, -539.632874f, -587.577576f,
- -637.562500f, -689.587585f, -743.652954f, -799.758423f, 0.000000f,
- /* batch 2 */
- 1.210000f, -4.840000f, 10.889999f, -19.360001f, 30.250000f, -43.559998f,
- 59.289997f, -77.440002f, 98.009995f, -102.010010f, 123.432091f, -146.894394f,
- 172.396896f, -199.939606f, 229.522491f, -261.145599f, 294.808899f, -330.512421f,
- 368.256134f, -408.040039f, 449.864075f, -493.728363f, 539.632874f, -587.577576f,
- 637.562500f, -689.587585f, 743.652954f, -799.758423f, 0.000000f,
- /* batch 3 */
- -1.210000f, 4.840000f, -10.889999f, 19.360001f, -30.250000f, 43.559998f,
- -59.289997f, 77.440002f, -98.009995f, 102.010010f, -123.432091f, 146.894394f,
- -172.396896f, 199.939606f, -229.522491f, 261.145599f, -294.808899f, 330.512421f,
- -368.256134f, 408.040039f, -449.864075f, 493.728363f, -539.632874f, 587.577576f,
- -637.562500f, 689.587585f, -743.652954f, 799.758423f, 0.000000f}));
-
- return LstmUtilsVectorBatchVectorCwiseProductTestImpl<armnn::DataType::Float32>(vector, batchVector,
- vecSize, batchSize, expectedOutput);
-}
-
-
-void LstmUtilsVectorBatchVectorAddTest()
-{
- uint32_t batchSize = 2;
- uint32_t vecSize = 3;
- armnn::TensorInfo vecDesc({vecSize}, armnn::DataType::Float32);
- boost::multi_array<float, 1> vector = MakeTensor<float, 1>(vecDesc, std::vector<float>(
- { 0.0f, -0.5f, 1.0f}));
-
- armnn::TensorInfo batchVecDesc({batchSize, vecSize}, armnn::DataType::Float32);
- boost::multi_array<float, 2> batchVector = MakeTensor<float, 2>(batchVecDesc, std::vector<float>(
- { 1.0f, 2.0f, 3.0f, //batch 0
- 4.0f, 5.0f, 6.0f})); //batch 1
-
- boost::multi_array<float, 2> expectedOutput = MakeTensor<float, 2>(batchVecDesc, std::vector<float>(
- { 1.0f, 1.5f, 4.0f,
- 4.0f, 4.5f, 7.0f}));
-
- return LstmUtilsVectorBatchVectorAddTestImpl<armnn::DataType::Float32>(vector, batchVector,
- vecSize, batchSize, expectedOutput);
-}
-
-#endif
-
-LayerTestResult<float, 2> LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- armnn::TensorInfo inputDesc({ 2, 2 }, armnn::DataType::Float32);
- boost::multi_array<float, 2> input = MakeTensor<float, 2>(inputDesc, std::vector<float>(
- { 2., 3., 3., 4. }));
-
- armnn::TensorInfo outputDesc({ 2, 4 }, armnn::DataType::Float32);
- boost::multi_array<float, 2> expectedOutput = MakeTensor<float, 2>(outputDesc, std::vector<float>(
- {-0.36444446f, -0.00352185f, 0.12886585f, -0.05163646f,
- -0.42734814f, -0.00478661f, 0.13455015f, -0.03560682f}));
- return LstmLayerWithCifgWithPeepholeNoProjectionTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, input, expectedOutput);
-}
-
-LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- armnn::TensorInfo inputDesc({ 2, 5 }, armnn::DataType::Float32);
- boost::multi_array<float, 2> input = MakeTensor<float, 2>(inputDesc, std::vector<float>(
- {0.787926f, 0.151646f, 0.071352f, 0.118426f, 0.458058f,
- 0.295743f, 0.544053f, 0.690064f, 0.858138f, 0.497181f}));
-
- armnn::TensorInfo outputDesc({ 2, 16 }, armnn::DataType::Float32);
- boost::multi_array<float, 2> expectedOutput = MakeTensor<float, 2>(outputDesc, std::vector<float>(
- {-0.00396806f, 0.029352f, -0.00279226f, 0.0159977f, -0.00835576f,
- -0.0211779f, 0.0283512f, -0.0114597f, 0.00907307f, -0.0244004f,
- -0.0152191f, -0.0259063f, 0.00914318f, 0.00415118f, 0.017147f,
- 0.0134203f, -0.013869f, 0.0287268f, -0.00334693f, 0.00733398f, -0.0287926f,
- -0.0186926f, 0.0193662f, -0.0115437f, 0.00422612f, -0.0345232f,
- 0.00223253f, -0.00957321f, 0.0210624f, 0.013331f, 0.0150954f,
- 0.02168f}));
- return LstmLayerNoCifgWithPeepholeWithProjectionTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, input, expectedOutput);
-}
-
-LayerTestResult<float, 2> LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- armnn::TensorInfo inputDesc({2, 2}, armnn::DataType::Float32);
- boost::multi_array<float, 2> input = MakeTensor<float, 2>(inputDesc, std::vector<float>(
- {2., 3., 3., 4.}));
-
-
- armnn::TensorInfo outputDesc({2, 4}, armnn::DataType::Float32);
- boost::multi_array<float, 2> expectedOutput = MakeTensor<float, 2>(outputDesc, std::vector<float>(
- {{-0.02973187f, 0.1229473f, 0.20885126f, -0.15358765f,
- -0.0185422f, 0.11281417f, 0.24466537f, -0.1826292f}}));
-
- return LstmNoCifgNoPeepholeNoProjectionTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, input, expectedOutput);
-}
-
-
-LayerTestResult<float, 2> LstmLayerFloat32NoCifgWithPeepholeWithProjectionWithLayerNormTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- armnn::TensorInfo inputDesc({ 2, 5 }, armnn::DataType::Float32);
- boost::multi_array<float, 2> input = MakeTensor<float, 2>(inputDesc, std::vector<float>(
- {0.7f, 0.8f, 0.1f, 0.2f, 0.3f, //batch 0
- 0.3f, 0.2f, 0.9f, 0.8f, 0.1f})); //batch 1
-
- armnn::TensorInfo outputDesc({ 2, 3 }, armnn::DataType::Float32);
- boost::multi_array<float, 2> expectedOutput = MakeTensor<float, 2>(outputDesc, std::vector<float>(
- { 0.0244077f, 0.128027f, -0.00170918f, //batch 0
- -0.00692428f, 0.0848741f, 0.063445f})); //batch 1
- return LstmLayerNoCifgWithPeepholeWithProjectionWithLayerNormTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, input, expectedOutput);
-}
-
-
-LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- const float qScale = 1.0f;
- const int32_t qOffset = 0;
-
- const armnn::DataType datatype = armnn::DataType::QuantisedSymm16;
- const armnn::DataType constantDatatype = armnn::DataType::QuantisedAsymm8;
-
- armnn::TensorInfo inputDesc({2, 2}, datatype);
- boost::multi_array<int16_t , 2> input = MakeTensor<int16_t , 2>(inputDesc, QuantizedVector<int16_t>(qScale, qOffset,
- std::vector<float>{2., 3., 3., 4.}));
-
- armnn::TensorInfo outputDesc({2, 4}, datatype);
- boost::multi_array<int16_t, 2> expectedOutput = MakeTensor<int16_t, 2>(outputDesc, QuantizedVector<int16_t>(qScale,
- qOffset, std::vector<float>({{-0.02973187f, 0.1229473f, 0.20885126f, -0.15358765f,
- -0.0185422f, 0.11281417f, 0.24466537f, -0.1826292f}})));
-
- return LstmNoCifgNoPeepholeNoProjectionTestImpl<datatype>(
- workloadFactory, memoryManager, input, expectedOutput, qScale, qOffset, constantDatatype);
-
-}
-
-LayerTestResult<int16_t, 2> LstmLayerInt16WithCifgWithPeepholeNoProjectionTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- const float qScale = 1.0f;
- const int32_t qOffset = 0;
-
- const armnn::DataType datatype = armnn::DataType::QuantisedSymm16;
- const armnn::DataType constantDatatype = armnn::DataType::QuantisedAsymm8;
-
- armnn::TensorInfo inputDesc({ 2, 2 }, datatype);
- boost::multi_array<int16_t, 2> input = MakeTensor<int16_t, 2>(inputDesc, QuantizedVector<int16_t>(qScale, qOffset,
- std::vector<float>({ 2., 3., 3., 4. })));
-
- armnn::TensorInfo outputDesc({ 2, 4 }, datatype);
- boost::multi_array<int16_t, 2> expectedOutput = MakeTensor<int16_t, 2>(outputDesc, QuantizedVector<int16_t>(qScale,
- qOffset, std::vector<float>(
- {-0.36444446f, -0.00352185f, 0.12886585f, -0.05163646f,
- -0.42734814f, -0.00478661f, 0.13455015f, -0.03560682f})));
-
- return LstmLayerWithCifgWithPeepholeNoProjectionTestImpl<datatype>(
- workloadFactory, memoryManager, input, expectedOutput, qScale, qOffset, constantDatatype);
-}
-
-LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgWithPeepholeWithProjectionTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- const float qScale = 2.0f;
- const int32_t qOffset = 0;
-
- const armnn::DataType datatype = armnn::DataType::QuantisedSymm16;
- const armnn::DataType constantDatatype = armnn::DataType::QuantisedAsymm8;
-
- armnn::TensorInfo inputDesc({ 2, 5 }, datatype);
- boost::multi_array<int16_t, 2> input = MakeTensor<int16_t, 2>(inputDesc, QuantizedVector<int16_t>(qScale,
- qOffset, std::vector<float>(
- {0.787926f, 0.151646f, 0.071352f, 0.118426f, 0.458058f,
- 0.295743f, 0.544053f, 0.690064f, 0.858138f, 0.497181f})));
-
- armnn::TensorInfo outputDesc({ 2, 16 }, datatype);
- boost::multi_array<int16_t, 2> expectedOutput = MakeTensor<int16_t, 2>(outputDesc, QuantizedVector<int16_t>(qScale,
- qOffset, std::vector<float>(
- {-0.00396806f, 0.029352f, -0.00279226f, 0.0159977f, -0.00835576f,
- -0.0211779f, 0.0283512f, -0.0114597f, 0.00907307f, -0.0244004f,
- -0.0152191f, -0.0259063f, 0.00914318f, 0.00415118f, 0.017147f,
- 0.0134203f, -0.013869f, 0.0287268f, -0.00334693f, 0.00733398f, -0.0287926f,
- -0.0186926f, 0.0193662f, -0.0115437f, 0.00422612f, -0.0345232f,
- 0.00223253f, -0.00957321f, 0.0210624f, 0.013331f, 0.0150954f, 0.02168f})));
-
- return LstmLayerNoCifgWithPeepholeWithProjectionTestImpl<datatype>(
- workloadFactory, memoryManager, input, expectedOutput, qScale, qOffset, constantDatatype);
-}
-
-LayerTestResult<int16_t, 2> LstmLayerInt16NoCifgNoPeepholeNoProjectionInt16ConstantTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- const float qScale = 1.0f;
- const int32_t qOffset = 0;
-
- const armnn::DataType datatype = armnn::DataType::QuantisedSymm16; // datatype & constants set to QSymm16
-
- armnn::TensorInfo inputDesc({2, 2}, datatype);
- boost::multi_array<int16_t , 2> input = MakeTensor<int16_t , 2>(inputDesc, QuantizedVector<int16_t>(qScale,
- qOffset, std::vector<float>{2., 3., 3., 4.}));
-
- armnn::TensorInfo outputDesc({2, 4}, datatype);
- boost::multi_array<int16_t, 2> expectedOutput = MakeTensor<int16_t, 2>(outputDesc, QuantizedVector<int16_t>(qScale,
- qOffset, std::vector<float>({{-0.02973187f, 0.1229473f, 0.20885126f, -0.15358765f,
- -0.0185422f, 0.11281417f, 0.24466537f, -0.1826292f}})));
-
- return LstmNoCifgNoPeepholeNoProjectionTestImpl<datatype>(
- workloadFactory, memoryManager, input, expectedOutput, qScale, qOffset, datatype);
-}
-
-// QuantizedLstm
-LayerTestResult<uint8_t, 2> QuantizedLstmTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- armnn::TensorInfo inputDesc({2, 2}, armnn::DataType::QuantisedAsymm8);
- boost::multi_array<uint8_t, 2> input = MakeTensor<uint8_t, 2>(inputDesc, std::vector<uint8_t>(
- {166, 179, 50, 150}));
-
- armnn::TensorInfo outputDesc({2, 4}, armnn::DataType::QuantisedAsymm8);
- boost::multi_array<uint8_t, 2> expectedOutput = MakeTensor<uint8_t, 2>(outputDesc, std::vector<uint8_t>(
- {140, 151, 146, 112, 136, 156, 142, 112 }));
-
- return QuantizedLstmTestImpl(workloadFactory, memoryManager, input, expectedOutput);
-}
-
-LayerTestResult<float,3> ConcatTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- unsigned int outputWidth = 3;
- unsigned int outputHeight = 6;
- unsigned int outputChannels = 3;
-
- unsigned int inputWidth1 = 3;
- unsigned int inputHeight1 = 6;
- unsigned int inputChannels1 = 2;
-
- unsigned int inputWidth2 = 3;
- unsigned int inputHeight2 = 6;
- unsigned int inputChannels2 = 1;
-
- // Define the tensor descriptors.
- armnn::TensorInfo outputTensorInfo({ outputChannels, outputHeight, outputWidth }, armnn::DataType::Float32);
- armnn::TensorInfo inputTensorInfo1({ inputChannels1, inputHeight1, inputWidth1 }, armnn::DataType::Float32);
- armnn::TensorInfo inputTensorInfo2({ inputChannels2, inputHeight2, inputWidth2 }, armnn::DataType::Float32);
-
- LayerTestResult<float,3> ret(outputTensorInfo);
-
- ret.outputExpected = MakeTensor<float, 3>(outputTensorInfo, std::vector<float>(
- {
- 1.0f, 2.0f, 3.0f,
- 4.0f, 5.0f, 6.0f,
- 7.0f, 8.0f, 9.0f,
- 10.0f, 11.0f, 12.0f,
- 13.0f, 14.0f, 15.0f,
- 16.0f, 17.0f, 18.0f,
-
- 19.0f, 20.0f, 21.0f,
- 22.0f, 23.0f, 24.0f,
- 25.0f, 26.0f, 27.0f,
- 28.0f, 29.0f, 30.0f,
- 31.0f, 32.0f, 33.0f,
- 34.0f, 35.0f, 36.0f,
-
- 37.0f, 38.0f, 39.0f,
- 40.0f, 41.0f, 42.0f,
- 43.0f, 44.0f, 45.0f,
- 46.0f, 47.0f, 48.0f,
- 49.0f, 50.0f, 51.0f,
- 52.0f, 53.0f, 54.0f,
- })
- );
-
- auto input1 = MakeTensor<float, 3>(inputTensorInfo1, std::vector<float>(
- {
- 1.0f, 2.0f, 3.0f,
- 4.0f, 5.0f, 6.0f,
- 7.0f, 8.0f, 9.0f,
- 10.0f, 11.0f, 12.0f,
- 13.0f, 14.0f, 15.0f,
- 16.0f, 17.0f, 18.0f,
-
- 19.0f, 20.0f, 21.0f,
- 22.0f, 23.0f, 24.0f,
- 25.0f, 26.0f, 27.0f,
- 28.0f, 29.0f, 30.0f,
- 31.0f, 32.0f, 33.0f,
- 34.0f, 35.0f, 36.0f,
- })
- );
-
- auto input2 = MakeTensor<float, 3>(inputTensorInfo2, std::vector<float>(
- {
- 37.0f, 38.0f, 39.0f,
- 40.0f, 41.0f, 42.0f,
- 43.0f, 44.0f, 45.0f,
- 46.0f, 47.0f, 48.0f,
- 49.0f, 50.0f, 51.0f,
- 52.0f, 53.0f, 54.0f,
- })
- );
-
- std::vector<unsigned int> wOrigin1 = {0, 0, 0}; //Extent of the window is defined by size of input[0].
- armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
-
- std::vector<unsigned int> wOrigin2 = {2, 0, 0}; //Extent of the window is defined by size of input[1].
- armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
-
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- bool subTensorsSupported = workloadFactory.SupportsSubTensors();
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
- subTensorsSupported ?
- workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
- workloadFactory.CreateTensorHandle(inputTensorInfo1);
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
- subTensorsSupported ?
- workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
- workloadFactory.CreateTensorHandle(inputTensorInfo2);
-
- armnn::ConcatQueueDescriptor data;
- armnn::WorkloadInfo info;
- AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
- AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
- AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
-
- data.m_ViewOrigins.push_back(window1);
- data.m_ViewOrigins.push_back(window2);
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
-
- inputHandle1->Allocate();
- inputHandle2->Allocate();
- outputHandle->Allocate();
-
- CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
- CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
-
- workload->PostAllocationConfigure();
- workload->Execute();
-
- CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
-
- return ret;
-}
-
-LayerTestResult<float,4> CompareBatchNormTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::IWorkloadFactory& refWorkloadFactory)
-{
- const unsigned int width = 2;
- const unsigned int height = 3;
- const unsigned int channels = 5;
- const unsigned int batchSize = 3;
-
- armnn::TensorInfo inputTensorInfo;
- armnn::TensorInfo outputTensorInfo;
- armnn::TensorInfo tensorInfo;
-
- constexpr unsigned int shape[] = {batchSize, channels, height, width};
- constexpr unsigned int tensorShape[] = {channels};
-
- inputTensorInfo = armnn::TensorInfo(4, shape, armnn::DataType::Float32);
- outputTensorInfo = armnn::TensorInfo(4, shape, armnn::DataType::Float32);
- tensorInfo = armnn::TensorInfo(1, tensorShape, armnn::DataType::Float32);
-
- auto input = MakeRandomTensor<float, 4>(inputTensorInfo, 21312);
-
- auto mean = MakeRandomTensor<float, 1>(tensorInfo, 123);
- auto variance = MakeRandomTensor<float, 1>(tensorInfo, 234, 0.0f);
- auto beta = MakeRandomTensor<float, 1>(tensorInfo, 123);
- auto gamma = MakeRandomTensor<float, 1>(tensorInfo, 345);
-
- LayerTestResult<float,4> ret(outputTensorInfo);
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- std::unique_ptr<armnn::ITensorHandle> inputHandleRef = refWorkloadFactory.CreateTensorHandle(inputTensorInfo);
- std::unique_ptr<armnn::ITensorHandle> outputHandleRef = refWorkloadFactory.CreateTensorHandle(outputTensorInfo);
-
- armnn::BatchNormalizationQueueDescriptor data;
- armnn::WorkloadInfo info;
- armnn::ScopedCpuTensorHandle meanTensor(tensorInfo);
- armnn::ScopedCpuTensorHandle varianceTensor(tensorInfo);
- armnn::ScopedCpuTensorHandle betaTensor(tensorInfo);
- armnn::ScopedCpuTensorHandle gammaTensor(tensorInfo);
-
- AllocateAndCopyDataToITensorHandle(&meanTensor, &mean[0]);
- AllocateAndCopyDataToITensorHandle(&varianceTensor, &variance[0]);
- AllocateAndCopyDataToITensorHandle(&betaTensor, &beta[0]);
- AllocateAndCopyDataToITensorHandle(&gammaTensor, &gamma[0]);
-
- AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
- AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
- data.m_Mean = &meanTensor;
- data.m_Variance = &varianceTensor;
- data.m_Beta = &betaTensor;
- data.m_Gamma = &gammaTensor;
- data.m_Parameters.m_Eps = 0.01f;
-
- armnn::BatchNormalizationQueueDescriptor refData = data;
- armnn::WorkloadInfo refInfo = info;
- SetWorkloadInput(refData, refInfo, 0, inputTensorInfo, inputHandleRef.get());
- SetWorkloadOutput(refData, refInfo, 0, outputTensorInfo, outputHandleRef.get());
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateBatchNormalization(data, info);
- std::unique_ptr<armnn::IWorkload> workloadRef = refWorkloadFactory.CreateBatchNormalization(refData, refInfo);
-
- inputHandle->Allocate();
- outputHandle->Allocate();
- inputHandleRef->Allocate();
- outputHandleRef->Allocate();
-
- CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]);
- CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]);
-
- workload->PostAllocationConfigure();
- workload->Execute();
- workloadRef->PostAllocationConfigure();
- workloadRef->Execute();
-
- CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get());
- CopyDataFromITensorHandle(&ret.outputExpected[0][0][0][0], outputHandleRef.get());
-
- return ret;
-}
-
-template<typename T>
-void PermuteTensorData(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::PermutationVector& mappings,
- armnn::TensorInfo & inputTensorInfo,
- const T * inputData,
- std::vector<T>& outputData)
-{
- BOOST_ASSERT_MSG(inputData != nullptr, "inputData must not be null");
- if (inputData == nullptr)
- {
- // Nullptr is an error in the test. By returning without doing the concatenation
- // I expect the caller to fail the test. It still makes sense to report this as
- // an assert for Debug builds.
- return;
- }
-
- armnn::TensorInfo outputTensorInfo = armnnUtils::Permuted(inputTensorInfo, mappings);
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- armnn::PermuteQueueDescriptor queueDescriptor;
- queueDescriptor.m_Parameters = armnn::PermuteDescriptor{mappings};
- armnn::WorkloadInfo workloadInfo;
- AddInputToWorkload(queueDescriptor, workloadInfo, inputTensorInfo, inputHandle.get());
- AddOutputToWorkload(queueDescriptor, workloadInfo, outputTensorInfo, outputHandle.get());
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePermute(queueDescriptor, workloadInfo);
-
- inputHandle->Allocate();
- outputHandle->Allocate();
-
- CopyDataToITensorHandle(inputHandle.get(), inputData);
-
- workload->PostAllocationConfigure();
- workload->Execute();
-
- outputData.resize(outputTensorInfo.GetNumElements());
- CopyDataFromITensorHandle(&outputData[0], outputHandle.get());
- inputTensorInfo = outputTensorInfo;
-}
-
-armnn::OriginsDescriptor CreateDescriptorForConcatenation(
- const std::vector<armnn::TensorInfo> & inputTensorInfos,
- unsigned int concatDim)
-{
- std::vector<armnn::TensorShape> shapes;
- shapes.reserve(inputTensorInfos.size());
- for (const armnn::TensorInfo& it: inputTensorInfos)
- {
- shapes.push_back(it.GetShape());
- }
-
- return armnn::CreateDescriptorForConcatenation(shapes.begin(),
- shapes.end(),
- concatDim);
-}
-
-//
-// Concatenation is only supported for N and C dimensions for NCHW and the inner most dimension
-// In case of <4 dimensions we need to make sure that the concat dimensions are at least
-// the 3rd slowest iterating one or the inner most dimension.
-//
-
-bool NeedPermuteForConcat(
- const std::vector<armnn::TensorInfo> & inputTensorInfos,
- unsigned int concatDim)
-{
- // See note above. Additionally we expect the input shapes to have the
- // same number of dimensions.
- unsigned int nDimensions = 0;
-
- // Determine the number of dimensions as well as sanity check them
- // agains test implementation issues.
- for (auto && tensorInfo : inputTensorInfos)
- {
- if (!nDimensions)
- {
- nDimensions = tensorInfo.GetShape().GetNumDimensions();
- }
- else
- {
- BOOST_ASSERT_MSG(nDimensions == tensorInfo.GetShape().GetNumDimensions(),
- "Input shapes must have the same number of dimensions");
- }
- }
-
- return (nDimensions < 3 || (nDimensions == 3 && (nDimensions-concatDim) < 3 && (nDimensions-concatDim) != 1));
-}
-
-armnn::TensorShape ExpandTensorShapeTo3dForPermute(const armnn::TensorShape & inputShape)
-{
- unsigned int numDims = inputShape.GetNumDimensions();
- if (numDims >= 3)
- {
- // Nothing to do if the inputShape has at least 3 dimensions.
- return inputShape;
- }
-
- std::vector<unsigned int> newDims(size_t(3), 1u);
- unsigned int expandedBy = 3 - numDims;
- for (unsigned int i=0; i<numDims; ++i)
- {
- newDims[expandedBy+i] = inputShape[i];
- }
- return armnn::TensorShape(3u, &newDims[0]);
-}
-
-void Generate3dPermuteVectorForConcat(
- unsigned int numDimensions,
- unsigned int & concatDim,
- std::pair<armnn::PermutationVector, armnn::PermutationVector> & permutations)
-{
- BOOST_ASSERT_MSG(numDimensions <= 3,
- "Only dimensions 1,2 and 3 are supported by this helper");
- unsigned int expandedBy = 3 - numDimensions;
- unsigned int expandedConcatAxis = concatDim + expandedBy;
-
- if (expandedConcatAxis == 2)
- {
- concatDim = 0;
- armnn::PermutationVector forwardPermutation({1, 2, 0});
- armnn::PermutationVector reversePermutation({2, 0, 1});
- permutations = std::make_pair(forwardPermutation, reversePermutation);
- }
- else if (expandedConcatAxis == 1)
- {
- concatDim = 0;
- armnn::PermutationVector forwardPermutation({2, 0, 1});
- armnn::PermutationVector reversePermutation({1, 2, 0});
- permutations = std::make_pair(forwardPermutation, reversePermutation);
- }
- else
- {
- BOOST_ASSERT(expandedConcatAxis == 0);
- concatDim = 0;
- }
-}
-
-//
-// Permute the input tensors so we can do a supported concatenation.
-// Also treat lower than 3d tensors as 3d by adding dummy 1 dimensions
-// at the front. Finally this function tells what the output shape
-// of the permuted concatenated tensor is going to be.
-//
-template <typename T>
-void PermuteInputsForConcat(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- std::vector<armnn::TensorInfo> & inputTensorInfos,
- std::vector<T *> & inputData,
- std::vector<std::vector<T>> & inputDataStorage,
- armnn::PermutationVector & permuteVector,
- unsigned int & concatDim,
- armnn::TensorInfo & outputTensorInfo)
-{
- BOOST_ASSERT_MSG(inputTensorInfos.size() > 1,
- "Expecting more than one tensor to be concatenated here");
-
- unsigned int numDims = 0;
- unsigned int nthInput = 0;
- const armnn::PermutationVector identity({0, 1, 2});
-
- std::pair<armnn::PermutationVector, armnn::PermutationVector> permutations =
- std::make_pair(identity, identity);
-
- inputDataStorage.resize(inputData.size());
-
- for (auto && tensorInfo : inputTensorInfos)
- {
- if (numDims == 0)
- {
- numDims = tensorInfo.GetShape().GetNumDimensions();
- Generate3dPermuteVectorForConcat(numDims, concatDim, permutations);
-
- // Store the reverese permutation.
- permuteVector = permutations.second;
- BOOST_ASSERT_MSG(!permuteVector.IsEqual(identity),
- "Test logic error, we don't need permutation, so we shouldn't arrive here");
- }
- else
- {
- BOOST_ASSERT_MSG(numDims == tensorInfo.GetShape().GetNumDimensions(),
- "All inputs must have the same number of dimensions");
- }
-
- armnn::TensorInfo newTensorInfo = tensorInfo;
- newTensorInfo.SetShape(ExpandTensorShapeTo3dForPermute(tensorInfo.GetShape()));
-
- PermuteTensorData<T>(workloadFactory,
- memoryManager,
- permutations.first,
- newTensorInfo,
- inputData[nthInput],
- inputDataStorage[nthInput]);
-
- inputData[nthInput] = inputDataStorage[nthInput].data();
- inputTensorInfos[nthInput] = newTensorInfo;
-
- ++nthInput;
- }
-
- outputTensorInfo.SetShape(
- armnnUtils::Permuted(
- ExpandTensorShapeTo3dForPermute(outputTensorInfo.GetShape()),
- permutations.first));
-}
-
-
-//
-// This is the pair of PermuteInputsForConcat(...) which permutes back
-// the output of the concatenation so we can check it against an expected
-// output.
-//
-template <typename T>
-void PermuteOutputForConcat(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::TensorInfo & tensorInfo,
- const armnn::PermutationVector & permuteVector,
- std::unique_ptr<armnn::ITensorHandle> && inputDataHandle,
- T * data)
-{
- BOOST_ASSERT_MSG(data != nullptr, "data must not be null");
- if (data == nullptr)
- {
- // Nullptr is an error in the test. By returning without doing the permutation
- // I expect the caller to fail the test. It still makes sense to report this as
- // an assert for Debug builds.
- return;
- }
-
- armnn::TensorInfo resultTensorInfo = tensorInfo;
- std::vector<T> inputData(tensorInfo.GetNumElements());
- std::vector<T> outputData;
-
- CopyDataFromITensorHandle(&inputData[0], inputDataHandle.get());
-
- PermuteTensorData<T>(workloadFactory,
- memoryManager,
- permuteVector,
- resultTensorInfo,
- &inputData[0],
- outputData);
-
- ::memcpy(data, &outputData[0], sizeof(T)*outputData.size());
-}
-
-template <typename T>
-void Concatenate(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- std::initializer_list<const armnn::TensorInfo> inputTensorInfosOrig,
- std::initializer_list<T *> inputsOrig,
- const armnn::TensorInfo& outputTensorInfoOrig,
- T * output,
- unsigned int concatDim,
- bool useSubtensor)
-{
- BOOST_ASSERT_MSG(output != nullptr, "output must not be null");
- if (output == nullptr)
- {
- // Nullptr is an error in the test. By returning without doing the permutation
- // I expect the caller to fail the test. It still makes sense to report this as
- // an assert for Debug builds.
- return;
- }
-
- // Saves a copy of the parameters which we might need to change.
- std::vector<armnn::TensorInfo> inputTensorInfos(inputTensorInfosOrig.begin(), inputTensorInfosOrig.end());
- std::vector<T *> inputs = inputsOrig;
- armnn::TensorInfo outputTensorInfo = outputTensorInfoOrig;
-
- armnn::PermutationVector permuteVector{0, 1, 2};
-
- // Holds and automatically releases memory for the reshaped input data.
- std::vector<std::vector<T>> tmpInputDataStorage;
-
- const size_t inputCount = inputTensorInfos.size();
-
- bool needPermuteForConcat = NeedPermuteForConcat(inputTensorInfos, concatDim);
-
- if (needPermuteForConcat)
- {
- //
- // We need to permute the inputs, because concatenation along
- // the requested axis is not supported.
- //
- PermuteInputsForConcat<T>(workloadFactory,
- memoryManager,
- inputTensorInfos,
- inputs,
- tmpInputDataStorage,
- permuteVector,
- concatDim,
- outputTensorInfo);
- }
-
- armnn::WorkloadInfo workloadInfo;
-
- std::vector<std::unique_ptr<armnn::ITensorHandle>> inputHandles;
- inputHandles.reserve(inputCount);
-
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- armnn::ConcatQueueDescriptor queueDescriptor;
- armnn::OriginsDescriptor viewsDescriptor = CreateDescriptorForConcatenation(inputTensorInfos, concatDim);
- queueDescriptor.m_Parameters = viewsDescriptor;
-
- if (useSubtensor)
- {
- queueDescriptor.m_ViewOrigins.reserve(viewsDescriptor.GetNumViews());
- for (unsigned int i = 0; i < viewsDescriptor.GetNumViews(); ++i)
- {
- queueDescriptor.m_ViewOrigins.emplace_back(std::vector<unsigned int>(viewsDescriptor.GetViewOrigin(i),
- viewsDescriptor.GetViewOrigin(i) + viewsDescriptor.GetNumDimensions()));
- }
-
- outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- const bool subTensorsSupported = workloadFactory.SupportsSubTensors();
- for (unsigned int i = 0; i < inputCount; ++i)
- {
- const armnn::TensorInfo& inputTensorInfo = inputTensorInfos[i];
- std::unique_ptr<armnn::ITensorHandle> inputHandle =
- subTensorsSupported ?
- workloadFactory.CreateSubTensorHandle(*outputHandle,
- inputTensorInfo.GetShape(),
- queueDescriptor.m_ViewOrigins[i].m_Origin.data()) :
- workloadFactory.CreateTensorHandle(inputTensorInfo);
-
- inputHandles.emplace_back(std::move(inputHandle));
- }
-
- }
- else
- {
- for (unsigned int i = 0; i < inputCount; ++i)
- {
- std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfos[i]);
- inputHandles.emplace_back(std::move(inputHandle));
- }
- }
-
- for (unsigned int i = 0; i < inputCount; ++i)
- {
- AddInputToWorkload(queueDescriptor, workloadInfo, inputTensorInfos[i], inputHandles[i].get());
- }
-
- AddOutputToWorkload(queueDescriptor, workloadInfo, outputTensorInfo, outputHandle.get());
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(queueDescriptor, workloadInfo);
-
- for (auto& inputHandle : inputHandles)
- {
- inputHandle->Allocate();
- }
-
- outputHandle->Allocate();
-
- unsigned int nextInputId = 0;
- for (auto& inputHandle : inputHandles)
- {
- CopyDataToITensorHandle(inputHandle.get(), inputs[nextInputId]);
- ++nextInputId;
- }
-
- workload->PostAllocationConfigure();
- workload->Execute();
-
- if (needPermuteForConcat)
- {
- PermuteOutputForConcat<T>(workloadFactory,
- memoryManager,
- outputTensorInfo,
- permuteVector,
- std::move(outputHandle),
- output);
- }
- else
- {
- CopyDataFromITensorHandle(output, outputHandle.get());
- }
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 1> Concatenation1dTestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo inputTensorInfo({ 3 }, ArmnnType, qScale, qOffset);
-
- auto input0 = MakeTensor<T, 1>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, { 1.0f, 2.0f, 3.0f }));
- auto input1 = MakeTensor<T, 1>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, { 4.0f, 5.0f, 6.0f }));
- auto input2 = MakeTensor<T, 1>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, { 7.0f, 8.0f, 9.0f }));
-
- armnn::TensorInfo outputTensorInfo({ 9 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 1> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory, memoryManager,
- { inputTensorInfo, inputTensorInfo, inputTensorInfo },
- { input0.data(), input1.data(), input2.data() },
- outputTensorInfo,
- output.data(),
- 0,
- true);
-
- result.output = MakeTensor<T, 1>(outputTensorInfo, output);
- result.outputExpected = MakeTensor<T, 1>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 1> Concatenation1dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation1dTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 2> Concatenation2dTestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::TensorInfo& outputTensorInfo,
- unsigned int dimension,
- const float qScale,
- const int32_t qOffset)
-{
- armnn::TensorInfo inputTensorInfo({ 2, 3 }, ArmnnType, qScale, qOffset);
-
- auto input0 = MakeTensor<T, 2>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 1.0f, 2.0f, 3.0f,
-
- // Batch 1
- 10.0f, 11.0f, 12.0f,
- }));
-
- auto input1 = MakeTensor<T, 2>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 4.0f, 5.0f, 6.0f,
-
- // Batch 1
- 13.0f, 14.0f, 15.0f,
- }));
-
- auto input2 = MakeTensor<T, 2>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 7.0f, 8.0f, 9.0f,
-
- // Batch 1
- 16.0f, 17.0f, 18.0f,
- }));
-
- LayerTestResult<T, 2> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory, memoryManager,
- { inputTensorInfo, inputTensorInfo, inputTensorInfo },
- { input0.data(), input1.data(), input2.data() },
- outputTensorInfo,
- output.data(),
- dimension,
- true);
-
- result.output = MakeTensor<T, 2>(outputTensorInfo, output);
- return result;
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 2> Concatenation2dDim0TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo outputTensorInfo({ 6, 3 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 2> result = Concatenation2dTestImpl<ArmnnType>(
- workloadFactory, memoryManager, outputTensorInfo, 0, qScale, qOffset);
-
- result.outputExpected = MakeTensor<T, 2>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 1.0f, 2.0f, 3.0f,
-
- // Batch 1
- 10.0f, 11.0f, 12.0f,
-
- // Batch 2
- 4.0f, 5.0f, 6.0f,
-
- // Batch 3
- 13.0f, 14.0f, 15.0f,
-
- // Batch 4
- 7.0f, 8.0f, 9.0f,
-
- // Batch 5
- 16.0f, 17.0f, 18.0f,
- }));
-
- return result;
-}
-
-LayerTestResult<float, 2> Concatenation2dDim0Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation2dDim0TestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 2> Concatenation2dDim1TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo outputTensorInfo({ 2, 9 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 2> result = Concatenation2dTestImpl<ArmnnType>(
- workloadFactory, memoryManager, outputTensorInfo, 1, qScale, qOffset);
-
- result.outputExpected = MakeTensor<T, 2>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f,
-
- // Batch 1
- 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 2> Concatenation2dDim1Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation2dDim1TestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 2> Concatenation2dDim0DiffInputDimsTestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo input0TensorInfo({ 2, 3 }, ArmnnType, qScale, qOffset);
- auto input0 = MakeTensor<T, 2>(input0TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 1.0f, 2.0f, 3.0f,
-
- // Batch 1
- 10.0f, 11.0f, 12.0f,
- }));
-
- armnn::TensorInfo input1TensorInfo({ 3, 3 }, ArmnnType, qScale, qOffset);
- auto input1 = MakeTensor<T, 2>(input1TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 4.0f, 5.0f, 6.0f,
-
- // Batch 1
- 13.0f, 14.0f, 15.0f,
-
- // Batch 0
- 7.0f, 8.0f, 9.0f,
- }));
-
- armnn::TensorInfo input2TensorInfo({ 1, 3 }, ArmnnType, qScale, qOffset);
- auto input2 = MakeTensor<T, 2>(input2TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 1
- 16.0f, 17.0f, 18.0f,
- }));
-
- armnn::TensorInfo outputTensorInfo({ 6, 3 }, ArmnnType, qScale, qOffset);
- LayerTestResult<T, 2> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory, memoryManager,
- { input0TensorInfo, input1TensorInfo, input2TensorInfo },
- { input0.data(), input1.data(), input2.data() },
- outputTensorInfo,
- output.data(),
- 0,
- true);
-
- result.output = MakeTensor<T, 2>(outputTensorInfo, output);
- result.outputExpected = MakeTensor<T, 2>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 1.0f, 2.0f, 3.0f,
-
- // Batch 1
- 10.0f, 11.0f, 12.0f,
-
- // Batch 2
- 4.0f, 5.0f, 6.0f,
-
- // Batch 3
- 13.0f, 14.0f, 15.0f,
-
- // Batch 4
- 7.0f, 8.0f, 9.0f,
-
- // Batch 5
- 16.0f, 17.0f, 18.0f,
- }));
-
- return result;
-}
-
-LayerTestResult<float, 2> Concatenation2dDim0DiffInputDimsTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation2dDim0DiffInputDimsTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 2> Concatenation2dDim1DiffInputDimsTestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo input0TensorInfo({ 2, 3 }, ArmnnType, qScale, qOffset);
- auto input0 = MakeTensor<T, 2>(input0TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 1.0f, 2.0f, 3.0f,
-
- // Batch 1
- 10.0f, 11.0f, 12.0f,
- }));
-
- armnn::TensorInfo input1TensorInfo({ 2, 5 }, ArmnnType, qScale, qOffset);
- auto input1 = MakeTensor<T, 2>(input1TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
-
- // Batch 1
- 13.0f, 14.0f, 15.0f, 16.0f, 17.0f,
- }));
-
- armnn::TensorInfo input2TensorInfo({ 2, 1 }, ArmnnType, qScale, qOffset);
- auto input2 = MakeTensor<T, 2>(input2TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 9.0f,
-
- // Batch 1
- 18.0f
- }));
-
- armnn::TensorInfo outputTensorInfo({ 2, 9 }, ArmnnType, qScale, qOffset);
- LayerTestResult<T, 2> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory, memoryManager,
- { input0TensorInfo, input1TensorInfo, input2TensorInfo },
- { input0.data(), input1.data(), input2.data() },
- outputTensorInfo,
- output.data(),
- 1,
- true);
-
- result.output = MakeTensor<T, 2>(outputTensorInfo, output);
- result.outputExpected = MakeTensor<T, 2>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0
- 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f,
-
- // Batch 1
- 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f, 17.0f, 18.0f,
- }));
-
- return result;
-}
-
-LayerTestResult<float, 2> Concatenation2dDim1DiffInputDimsTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation2dDim1DiffInputDimsTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 3> Concatenation3dTestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::TensorInfo& outputTensorInfo,
- unsigned int dimension,
- bool useSubtensor,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo inputTensorInfo({ 2, 3, 2 }, ArmnnType, qScale, qOffset);
-
- auto input0 = MakeTensor<T, 3>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 1.0f, 2.0f,
-
- // Batch 0, Channel 1
- 3.0f, 4.0f,
-
- // Batch 0, Channel 2
- 5.0f, 6.0f,
-
- // Batch 1, Channel 0
- 19.0f, 20.0f,
-
- // Batch 1, Channel 1
- 21.0f, 22.0f,
-
- // Batch 1, Channel 2
- 23.0f, 24.0f
- }));
-
- auto input1 = MakeTensor<T, 3>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 7.0f, 8.0f,
-
- // Batch 0, Channel 1
- 9.0f, 10.0f,
-
- // Batch 0, Channel 2
- 11.0f, 12.0f,
-
- // Batch 1, Channel 0
- 25.0f, 26.0f,
-
- // Batch 1, Channel 1
- 27.0f, 28.0f,
-
- // Batch 1, Channel 2
- 29.0f, 30.0f
- }));
-
- auto input2 = MakeTensor<T, 3>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 13.0f, 14.0f,
-
- // Batch 0, Channel 1
- 15.0f, 16.0f,
-
- // Batch 0, Channel 2
- 17.0f, 18.0f,
-
- // Batch 1, Channel 0
- 31.0f, 32.0f,
-
- // Batch 1, Channel 1
- 33.0f, 34.0f,
-
- // Batch 1, Channel 2
- 35.0f, 36.0f
- }));
-
- LayerTestResult<T, 3> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory, memoryManager,
- { inputTensorInfo, inputTensorInfo, inputTensorInfo },
- { input0.data(), input1.data(), input2.data() },
- outputTensorInfo,
- output.data(),
- dimension,
- useSubtensor);
-
- result.output = MakeTensor<T, 3>(outputTensorInfo, output);
- return result;
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 3> Concatenation3dDim0TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo outputTensorInfo({ 6, 3, 2 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 3> result = Concatenation3dTestImpl<ArmnnType>(
- workloadFactory, memoryManager, outputTensorInfo, 0, true, qScale, qOffset);
-
- result.outputExpected = MakeTensor<T, 3>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 1.0f, 2.0f,
-
- // Batch 0, Channel 1
- 3.0f, 4.0f,
-
- // Batch 0, Channel 2
- 5.0f, 6.0f,
-
- // Batch 1, Channel 0
- 19.0f, 20.0f,
-
- // Batch 1, Channel 1
- 21.0f, 22.0f,
-
- // Batch 1, Channel 2
- 23.0f, 24.0f,
-
- // Batch 2, Channel 0
- 7.0f, 8.0f,
-
- // Batch 2, Channel 1
- 9.0f, 10.0f,
-
- // Batch 2, Channel 2
- 11.0f, 12.0f,
-
- // Batch 3, Channel 0
- 25.0f, 26.0f,
-
- // Batch 3, Channel 1
- 27.0f, 28.0f,
-
- // Batch 3, Channel 2
- 29.0f, 30.0f,
-
- // Batch 4, Channel 0
- 13.0f, 14.0f,
-
- // Batch 4, Channel 1
- 15.0f, 16.0f,
-
- // Batch 4, Channel 2
- 17.0f, 18.0f,
-
- // Batch 5, Channel 0
- 31.0f, 32.0f,
-
- // Batch 5, Channel 1
- 33.0f, 34.0f,
-
- // Batch 5, Channel 2
- 35.0f, 36.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 3> Concatenation3dDim0Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation3dDim0TestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 3> Concatenation3dDim1TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo outputTensorInfo({ 2, 9, 2 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 3> result = Concatenation3dTestImpl<ArmnnType>(
- workloadFactory, memoryManager, outputTensorInfo, 1, true, qScale, qOffset);
-
- result.outputExpected = MakeTensor<T, 3>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 1.0f, 2.0f,
-
- // Batch 0, Channel 1
- 3.0f, 4.0f,
-
- // Batch 0, Channel 2
- 5.0f, 6.0f,
-
- // Batch 0, Channel 3
- 7.0f, 8.0f,
-
- // Batch 0, Channel 4
- 9.0f, 10.0f,
-
- // Batch 0, Channel 5
- 11.0f, 12.0f,
-
- // Batch 0, Channel 6
- 13.0f, 14.0f,
-
- // Batch 0, Channel 7
- 15.0f, 16.0f,
-
- // Batch 0, Channel 8
- 17.0f, 18.0f,
-
- // Batch 1, Channel 0
- 19.0f, 20.0f,
-
- // Batch 1, Channel 1
- 21.0f, 22.0f,
-
- // Batch 1, Channel 2
- 23.0f, 24.0f,
-
- // Batch 1, Channel 3
- 25.0f, 26.0f,
-
- // Batch 1, Channel 4
- 27.0f, 28.0f,
-
- // Batch 1, Channel 5
- 29.0f, 30.0f,
-
- // Batch 1, Channel 6
- 31.0f, 32.0f,
-
- // Batch 1, Channel 7
- 33.0f, 34.0f,
-
- // Batch 1, Channel 8
- 35.0f, 36.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 3> Concatenation3dDim1Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation3dDim1TestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 3> Concatenation3dDim2TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool useSubtensor,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo outputTensorInfo({ 2, 3, 6 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 3> result = Concatenation3dTestImpl<ArmnnType>(
- workloadFactory, memoryManager, outputTensorInfo, 2, useSubtensor, qScale, qOffset);
-
- result.outputExpected = MakeTensor<T, 3>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 1.0f, 2.0f, 7.0f, 8.0f, 13.0f, 14.0f,
-
- // Batch 0, Channel 1
- 3.0f, 4.0f, 9.0f, 10.0f, 15.0f, 16.0f,
-
- // Batch 0, Channel 2
- 5.0f, 6.0f, 11.0f, 12.0f, 17.0f, 18.0f,
-
- // Batch 1, Channel 0
- 19.0f, 20.0f, 25.0f, 26.0f, 31.0f, 32.0f,
-
- // Batch 1, Channel 1
- 21.0f, 22.0f, 27.0f, 28.0f, 33.0f, 34.0f,
-
- // Batch 1, Channel 2
- 23.0f, 24.0f, 29.0f, 30.0f, 35.0f, 36.0f,
- }));
-
- return result;
-}
-
-LayerTestResult<float, 3> Concatenation3dDim2Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool useSubtensor)
-{
- return Concatenation3dDim2TestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, useSubtensor, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 3> Concatenation3dDim0DiffInputDimsTestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo input0TensorInfo({ 2, 3, 2 }, ArmnnType);
- auto input0 = MakeTensor<T, 3>(input0TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 1.0f, 2.0f,
-
- // Batch 0, Channel 1
- 3.0f, 4.0f,
-
- // Batch 0, Channel 2
- 5.0f, 6.0f,
-
- // Batch 1, Channel 0
- 19.0f, 20.0f,
-
- // Batch 1, Channel 1
- 21.0f, 22.0f,
-
- // Batch 1, Channel 2
- 23.0f, 24.0f
- }));
-
- armnn::TensorInfo input1TensorInfo({ 1, 3, 2 }, ArmnnType);
- auto input1 = MakeTensor<T, 3>(input1TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 7.0f, 8.0f,
-
- // Batch 0, Channel 1
- 9.0f, 10.0f,
-
- // Batch 0, Channel 2
- 11.0f, 12.0f,
- }));
-
- armnn::TensorInfo input2TensorInfo({ 3, 3, 2 }, ArmnnType);
- auto input2 = MakeTensor<T, 3>(input2TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 25.0f, 26.0f,
-
- // Batch 0, Channel 1
- 27.0f, 28.0f,
-
- // Batch 0, Channel 2
- 29.0f, 30.0f,
-
- // Batch 1, Channel 0
- 13.0f, 14.0f,
-
- // Batch 1, Channel 1
- 15.0f, 16.0f,
-
- // Batch 1, Channel 2
- 17.0f, 18.0f,
-
- // Batch 2, Channel 0
- 31.0f, 32.0f,
-
- // Batch 2, Channel 1
- 33.0f, 34.0f,
-
- // Batch 2, Channel 2
- 35.0f, 36.0f
- }));
-
- armnn::TensorInfo outputTensorInfo({ 6, 3, 2 }, ArmnnType);
- LayerTestResult<T, 3> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory, memoryManager,
- { input0TensorInfo, input1TensorInfo, input2TensorInfo },
- { input0.data(), input1.data(), input2.data() },
- outputTensorInfo,
- output.data(),
- 0,
- true);
-
- result.output = MakeTensor<T, 3>(outputTensorInfo, output);
- result.outputExpected = MakeTensor<T, 3>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 1.0f, 2.0f,
-
- // Batch 0, Channel 1
- 3.0f, 4.0f,
-
- // Batch 0, Channel 2
- 5.0f, 6.0f,
-
- // Batch 1, Channel 0
- 19.0f, 20.0f,
-
- // Batch 1, Channel 1
- 21.0f, 22.0f,
-
- // Batch 1, Channel 2
- 23.0f, 24.0f,
-
- // Batch 2, Channel 0
- 7.0f, 8.0f,
-
- // Batch 2, Channel 1
- 9.0f, 10.0f,
-
- // Batch 2, Channel 2
- 11.0f, 12.0f,
-
- // Batch 3, Channel 0
- 25.0f, 26.0f,
-
- // Batch 3, Channel 1
- 27.0f, 28.0f,
-
- // Batch 3, Channel 2
- 29.0f, 30.0f,
-
- // Batch 4, Channel 0
- 13.0f, 14.0f,
-
- // Batch 4, Channel 1
- 15.0f, 16.0f,
-
- // Batch 4, Channel 2
- 17.0f, 18.0f,
-
- // Batch 5, Channel 0
- 31.0f, 32.0f,
-
- // Batch 5, Channel 1
- 33.0f, 34.0f,
-
- // Batch 5, Channel 2
- 35.0f, 36.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 3> Concatenation3dDim0DiffInputDimsTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation3dDim0DiffInputDimsTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 3> Concatenation3dDim1DiffInputDimsTestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo input0TensorInfo({ 2, 3, 2 }, ArmnnType, qScale, qOffset);
- auto input0 = MakeTensor<T, 3>(input0TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 1.0f, 2.0f,
-
- // Batch 0, Channel 1
- 3.0f, 4.0f,
-
- // Batch 0, Channel 2
- 5.0f, 6.0f,
-
- // Batch 1, Channel 0
- 19.0f, 20.0f,
-
- // Batch 1, Channel 1
- 21.0f, 22.0f,
-
- // Batch 1, Channel 2
- 23.0f, 24.0f
- }));
-
- armnn::TensorInfo input1TensorInfo({ 2, 4, 2 }, ArmnnType, qScale, qOffset);
- auto input1 = MakeTensor<T, 3>(input1TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 7.0f, 8.0f,
-
- // Batch 0, Channel 1
- 9.0f, 10.0f,
-
- // Batch 0, Channel 2
- 11.0f, 12.0f,
-
- // Batch 0, Channel 3
- 25.0f, 26.0f,
-
- // Batch 1, Channel 0
- 27.0f, 28.0f,
-
- // Batch 1, Channel 1
- 29.0f, 30.0f,
-
- // Batch 1, Channel 2
- 13.0f, 14.0f,
-
- // Batch 1, Channel 3
- 15.0f, 16.0f,
- }));
-
- armnn::TensorInfo input2TensorInfo({ 2, 1, 2 }, ArmnnType, qScale, qOffset);
- auto input2 = MakeTensor<T, 3>(input2TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 17.0f, 18.0f,
-
- // Batch 1, Channel 0
- 31.0f, 32.0f,
- }));
-
- armnn::TensorInfo outputTensorInfo({ 2, 8, 2 }, ArmnnType, qScale, qOffset);
- LayerTestResult<T, 3> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory, memoryManager,
- { input0TensorInfo, input1TensorInfo, input2TensorInfo },
- { input0.data(), input1.data(), input2.data() },
- outputTensorInfo,
- output.data(),
- 1,
- true);
-
- result.output = MakeTensor<T, 3>(outputTensorInfo, output);
- result.outputExpected = MakeTensor<T, 3>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 1.0f, 2.0f,
-
- // Batch 0, Channel 1
- 3.0f, 4.0f,
-
- // Batch 0, Channel 2
- 5.0f, 6.0f,
-
- // Batch 0, Channel 3
- 7.0f, 8.0f,
-
- // Batch 0, Channel 4
- 9.0f, 10.0f,
-
- // Batch 0, Channel 5
- 11.0f, 12.0f,
-
- // Batch 0, Channel 6
- 25.0f, 26.0f,
-
- // Batch 0, Channel 7
- 17.0f, 18.0f,
-
- // Batch 1, Channel 0
- 19.0f, 20.0f,
-
- // Batch 1, Channel 1
- 21.0f, 22.0f,
-
- // Batch 1, Channel 2
- 23.0f, 24.0f,
-
- // Batch 1, Channel 3
- 27.0f, 28.0f,
-
- // Batch 1, Channel 4
- 29.0f, 30.0f,
-
- // Batch 1, Channel 5
- 13.0f, 14.0f,
-
- // Batch 1, Channel 6
- 15.0f, 16.0f,
-
- // Batch 1, Channel 7
- 31.0f, 32.0f,
- }));
-
- return result;
-}
-
-LayerTestResult<float, 3> Concatenation3dDim1DiffInputDimsTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation3dDim1DiffInputDimsTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 3> Concatenation3dDim2DiffInputDimsTestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool useSubtensor,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo input0TensorInfo({ 2, 3, 2 }, ArmnnType, qScale, qOffset);
- auto input0 = MakeTensor<T, 3>(input0TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 1.0f, 2.0f,
-
- // Batch 0, Channel 1
- 3.0f, 4.0f,
-
- // Batch 0, Channel 2
- 5.0f, 6.0f,
-
- // Batch 1, Channel 0
- 19.0f, 20.0f,
-
- // Batch 1, Channel 1
- 21.0f, 22.0f,
-
- // Batch 1, Channel 2
- 23.0f, 24.0f
- }));
-
- armnn::TensorInfo input1TensorInfo({ 2, 3, 1 }, ArmnnType, qScale, qOffset);
- auto input1 = MakeTensor<T, 3>(input1TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 7.0f,
-
- // Batch 0, Channel 1
- 9.0f,
-
- // Batch 0, Channel 2
- 11.0f,
-
- // Batch 1, Channel 0
- 25.0f,
-
- // Batch 1, Channel 1
- 27.0f,
-
- // Batch 1, Channel 2
- 29.0f
- }));
-
- armnn::TensorInfo input2TensorInfo({ 2, 3, 3 }, ArmnnType, qScale, qOffset);
- auto input2 = MakeTensor<T, 3>(input2TensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 13.0f, 14.0f, 50.0f,
-
- // Batch 0, Channel 1
- 15.0f, 16.0f, 51.0f,
-
- // Batch 0, Channel 2
- 17.0f, 18.0f, 52.0f,
-
- // Batch 1, Channel 0
- 31.0f, 32.0f, 53.0f,
-
- // Batch 1, Channel 1
- 33.0f, 34.0f, 54.0f,
-
- // Batch 1, Channel 2
- 35.0f, 36.0f, 55.0f,
- }));
-
- armnn::TensorInfo outputTensorInfo({ 2, 3, 6 }, ArmnnType, qScale, qOffset);
- LayerTestResult<T, 3> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory, memoryManager,
- { input0TensorInfo, input1TensorInfo, input2TensorInfo },
- { input0.data(), input1.data(), input2.data() },
- outputTensorInfo,
- output.data(),
- 2,
- useSubtensor);
-
- result.output = MakeTensor<T, 3>(outputTensorInfo, output);
- result.outputExpected = MakeTensor<T, 3>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 1.0f, 2.0f, 7.0f, 13.0f, 14.0f, 50.0f,
-
- // Batch 0, Channel 1
- 3.0f, 4.0f, 9.0f, 15.0f, 16.0f, 51.0f,
-
- // Batch 0, Channel 2
- 5.0f, 6.0f, 11.0f, 17.0f, 18.0f, 52.0f,
-
- // Batch 1, Channel 0
- 19.0f, 20.0f, 25.0f, 31.0f, 32.0f, 53.0f,
-
- // Batch 1, Channel 1
- 21.0f, 22.0f, 27.0f, 33.0f, 34.0f, 54.0f,
-
- // Batch 1, Channel 2
- 23.0f, 24.0f, 29.0f, 35.0f, 36.0f, 55.0f,
- }));
-
- return result;
-}
-
-LayerTestResult<float, 3> Concatenation3dDim2DiffInputDimsTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool useSubtensor)
-{
- return Concatenation3dDim2DiffInputDimsTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, useSubtensor, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> Concatenation4dTestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::TensorInfo& outputTensorInfo,
- unsigned int dimension,
- bool useSubtensor,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo inputTensorInfo({ 1, 3, 2, 2 }, ArmnnType, qScale, qOffset);
-
- auto input0 = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 9.0f, 10.0f,
- 11.0f, 12.0f
- }));
-
- auto input1 = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 11.0f, 12.0f,
- 13.0f, 14.0f,
- 15.0f, 16.0f,
- 17.0f, 18.0f,
- 19.0f, 20.0f,
- 21.0f, 22.0f
- }));
-
- auto input2 = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 21.0f, 22.0f,
- 23.0f, 24.0f,
- 25.0f, 26.0f,
- 27.0f, 28.0f,
- 29.0f, 30.0f,
- 31.0f, 32.0f
- }));
-
- LayerTestResult<T, 4> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
-
- Concatenate<T>(workloadFactory,
- memoryManager,
- {inputTensorInfo, inputTensorInfo, inputTensorInfo},
- {input0.data(), input1.data(), input2.data()},
- outputTensorInfo,
- output.data(),
- dimension,
- useSubtensor);
-
- result.output = MakeTensor<T, 4>(outputTensorInfo, output);
- return result;
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> Concatenation4dDim0TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo outputTensorInfo({ 3, 3, 2, 2 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 4> result = Concatenation4dTestImpl<ArmnnType>(
- workloadFactory, memoryManager, outputTensorInfo, 0, true, qScale, qOffset);
-
- result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 9.0f, 10.0f,
- 11.0f, 12.0f,
-
- 11.0f, 12.0f,
- 13.0f, 14.0f,
- 15.0f, 16.0f,
- 17.0f, 18.0f,
- 19.0f, 20.0f,
- 21.0f, 22.0f,
-
- 21.0f, 22.0f,
- 23.0f, 24.0f,
- 25.0f, 26.0f,
- 27.0f, 28.0f,
- 29.0f, 30.0f,
- 31.0f, 32.0f
- }));
- return result;
-}
-
-LayerTestResult<float, 4> Concatenation4dDim0Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDim0TestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> Concatenation4dDim1TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo outputTensorInfo({ 1, 9, 2, 2 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 4> result = Concatenation4dTestImpl<ArmnnType>(
- workloadFactory, memoryManager, outputTensorInfo, 1, true, qScale, qOffset);
-
- result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 9.0f, 10.0f,
- 11.0f, 12.0f,
-
- 11.0f, 12.0f,
- 13.0f, 14.0f,
- 15.0f, 16.0f,
- 17.0f, 18.0f,
- 19.0f, 20.0f,
- 21.0f, 22.0f,
-
- 21.0f, 22.0f,
- 23.0f, 24.0f,
- 25.0f, 26.0f,
- 27.0f, 28.0f,
- 29.0f, 30.0f,
- 31.0f, 32.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 4> Concatenation4dDim1Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDim1TestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> Concatenation4dDim2TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- armnn::TensorInfo outputTensorInfo({ 1, 3, 6, 2 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 4> result = Concatenation4dTestImpl<ArmnnType>(
- workloadFactory, memoryManager, outputTensorInfo, 2, true, qScale, qOffset);
-
- result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 11.0f, 12.0f,
- 13.0f, 14.0f,
- 21.0f, 22.0f,
- 23.0f, 24.0f,
-
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 15.0f, 16.0f,
- 17.0f, 18.0f,
- 25.0f, 26.0f,
- 27.0f, 28.0f,
-
- 9.0f, 10.0f,
- 11.0f, 12.0f,
- 19.0f, 20.0f,
- 21.0f, 22.0f,
- 29.0f, 30.0f,
- 31.0f, 32.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 4> Concatenation4dDim2Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDim2TestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> Concatenation4dDim3TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset,
- bool useSubtensor)
-{
- armnn::TensorInfo outputTensorInfo({ 1, 3, 2, 6 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 4> result = Concatenation4dTestImpl<ArmnnType>(
- workloadFactory, memoryManager, outputTensorInfo, 3, useSubtensor, qScale, qOffset);
-
- result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 11.0f, 12.0f,
- 21.0f, 22.0f,
- 3.0f, 4.0f,
- 13.0f, 14.0f,
- 23.0f, 24.0f,
-
- 5.0f, 6.0f,
- 15.0f, 16.0f,
- 25.0f, 26.0f,
- 7.0f, 8.0f,
- 17.0f, 18.0f,
- 27.0f, 28.0f,
-
- 9.0f, 10.0f,
- 19.0f, 20.0f,
- 29.0f, 30.0f,
- 11.0f, 12.0f,
- 21.0f, 22.0f,
- 31.0f, 32.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 4> Concatenation4dDim3Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool useSubtensor)
-{
- return Concatenation4dDim3TestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0, useSubtensor);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> Concatenation4dDiffShapeDim0TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- unsigned int dimension = 0;
- armnn::TensorInfo inputTensorInfo0({ 1, 3, 2, 2 }, ArmnnType, qScale, qOffset);
-
- auto input0 = MakeTensor<T, 4>(inputTensorInfo0, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 9.0f, 10.0f,
- 11.0f, 12.0f
- }));
-
- armnn::TensorInfo inputTensorInfo1({ 2, 3, 2, 2 }, ArmnnType, qScale, qOffset);
-
- auto input1 = MakeTensor<T, 4>(inputTensorInfo1, QuantizedVector<T>(qScale, qOffset, {
- 11.0f, 12.0f,
- 13.0f, 14.0f,
- 15.0f, 16.0f,
- 17.0f, 18.0f,
- 19.0f, 20.0f,
- 21.0f, 22.0f,
-
- 21.0f, 22.0f,
- 23.0f, 24.0f,
- 25.0f, 26.0f,
- 27.0f, 28.0f,
- 29.0f, 30.0f,
- 31.0f, 32.0f
-
- }));
-
- armnn::TensorInfo outputTensorInfo({ 3, 3, 2, 2 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 4> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory,
- memoryManager,
- {inputTensorInfo0, inputTensorInfo1},
- {input0.data(), input1.data()},
- outputTensorInfo,
- output.data(),
- dimension,
- true);
-
- result.output = MakeTensor<T, 4>(outputTensorInfo, output);
- result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 9.0f, 10.0f,
- 11.0f, 12.0f,
-
- 11.0f, 12.0f,
- 13.0f, 14.0f,
- 15.0f, 16.0f,
- 17.0f, 18.0f,
- 19.0f, 20.0f,
- 21.0f, 22.0f,
-
- 21.0f, 22.0f,
- 23.0f, 24.0f,
- 25.0f, 26.0f,
- 27.0f, 28.0f,
- 29.0f, 30.0f,
- 31.0f, 32.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 4> Concatenation4dDiffShapeDim0Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDiffShapeDim0TestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> Concatenation4dDiffShapeDim1TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- unsigned int dimension = 1;
- armnn::TensorInfo inputTensorInfo0({ 1, 3, 2, 2 }, ArmnnType, qScale, qOffset);
-
- auto input0 = MakeTensor<T, 4>(inputTensorInfo0, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 9.0f, 10.0f,
- 11.0f, 12.0f
- }));
-
- armnn::TensorInfo inputTensorInfo1({ 1, 2, 2, 2 }, ArmnnType, qScale, qOffset);
-
- auto input1 = MakeTensor<T, 4>(inputTensorInfo1, QuantizedVector<T>(qScale, qOffset, {
- 11.0f, 12.0f,
- 13.0f, 14.0f,
- 15.0f, 16.0f,
- 17.0f, 18.0f,
-
- }));
-
- armnn::TensorInfo outputTensorInfo({ 1, 5, 2, 2 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 4> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory,
- memoryManager,
- {inputTensorInfo0, inputTensorInfo1},
- {input0.data(), input1.data()},
- outputTensorInfo,
- output.data(),
- dimension,
- true);
-
- result.output = MakeTensor<T, 4>(outputTensorInfo, output);
- result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 9.0f, 10.0f,
- 11.0f, 12.0f,
- 11.0f, 12.0f,
- 13.0f, 14.0f,
- 15.0f, 16.0f,
- 17.0f, 18.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 4> Concatenation4dDiffShapeDim1Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDiffShapeDim1TestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> Concatenation4dDiffShapeDim2TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- unsigned int dimension = 2;
- armnn::TensorInfo inputTensorInfo0({ 1, 3, 2, 2 }, ArmnnType, qScale, qOffset);
-
- auto input0 = MakeTensor<T, 4>(inputTensorInfo0, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 9.0f, 10.0f,
- 11.0f, 12.0f
- }));
-
- armnn::TensorInfo inputTensorInfo1({ 1, 3, 3, 2 }, ArmnnType, qScale, qOffset);
-
- auto input1 = MakeTensor<T, 4>(inputTensorInfo1, QuantizedVector<T>(qScale, qOffset, {
- 11.0f, 12.0f,
- 13.0f, 14.0f,
- 15.0f, 16.0f,
- 17.0f, 18.0f,
- 19.0f, 20.0f,
- 21.0f, 22.0f,
- 23.0f, 24.0f,
- 25.0f, 26.0f,
- 27.0f, 28.0f
- }));
-
- armnn::TensorInfo outputTensorInfo({ 1, 3, 5, 2 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 4> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory,
- memoryManager,
- {inputTensorInfo0, inputTensorInfo1},
- {input0.data(), input1.data()},
- outputTensorInfo,
- output.data(),
- dimension,
- true);
-
- result.output = MakeTensor<T, 4>(outputTensorInfo, output);
- result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 11.0f, 12.0f,
- 13.0f, 14.0f,
- 15.0f, 16.0f,
-
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 17.0f, 18.0f,
- 19.0f, 20.0f,
- 21.0f, 22.0f,
-
- 9.0f, 10.0f,
- 11.0f, 12.0f,
- 23.0f, 24.0f,
- 25.0f, 26.0f,
- 27.0f, 28.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 4> Concatenation4dDiffShapeDim2Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDiffShapeDim2TestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> Concatenation4dDiffShapeDim3TestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset,
- bool useSubtensor)
-{
- unsigned int dimension = 3;
- armnn::TensorInfo inputTensorInfo0({ 1, 3, 2, 2 }, ArmnnType, qScale, qOffset);
-
- auto input0 = MakeTensor<T, 4>(inputTensorInfo0, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f,
- 3.0f, 4.0f,
- 5.0f, 6.0f,
- 7.0f, 8.0f,
- 9.0f, 10.0f,
- 11.0f, 12.0f
- }));
-
- armnn::TensorInfo inputTensorInfo1({ 1, 3, 2, 3 }, ArmnnType, qScale, qOffset);
-
- auto input1 = MakeTensor<T, 4>(inputTensorInfo1, QuantizedVector<T>(qScale, qOffset, {
- 11.0f, 12.0f, 13.0f,
- 14.0f, 15.0f, 16.0f,
-
- 17.0f, 18.0f, 19.0f,
- 20.0f, 21.0f, 22.0f,
-
- 23.0f, 24.0f, 25.0f,
- 26.0f, 27.0f, 28.0f
- }));
-
- armnn::TensorInfo outputTensorInfo({ 1, 3, 2, 5 }, ArmnnType, qScale, qOffset);
-
- LayerTestResult<T, 4> result(outputTensorInfo);
-
- std::vector<T> output;
- output.resize(outputTensorInfo.GetNumElements());
- Concatenate<T>(workloadFactory,
- memoryManager,
- {inputTensorInfo0, inputTensorInfo1},
- {input0.data(), input1.data()},
- outputTensorInfo,
- output.data(),
- dimension,
- useSubtensor);
-
- result.output = MakeTensor<T, 4>(outputTensorInfo, output);
- result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, QuantizedVector<T>(qScale, qOffset, {
- 1.0f, 2.0f, 11.0f, 12.0f, 13.0f,
- 3.0f, 4.0f, 14.0f, 15.0f, 16.0f,
- 5.0f, 6.0f, 17.0f, 18.0f, 19.0f,
- 7.0f, 8.0f, 20.0f, 21.0f, 22.0f,
- 9.0f, 10.0f, 23.0f, 24.0f, 25.0f,
- 11.0f, 12.0f, 26.0f, 27.0f, 28.0f
- }));
-
- return result;
-}
-
-LayerTestResult<float, 4> Concatenation4dDiffShapeDim3Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool useSubtensor)
-{
- return Concatenation4dDiffShapeDim3TestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager, 0.0f, 0, useSubtensor);
-}
-
-LayerTestResult<float, 2> FakeQuantizationTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- constexpr unsigned int width = 2;
- constexpr unsigned int height = 3;
-
- const armnn::TensorInfo tensorInfo({height, width },
- armnn::DataType::Float32);
- auto input = MakeTensor<float, 2>(tensorInfo, std::vector<float>({
- -10.0f, -5.0f,
- 0.0f, 5.0f,
- 10.0f, 10.0f
- }));
-
- LayerTestResult<float, 2> ret(tensorInfo);
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(tensorInfo);
-
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(tensorInfo);
-
- armnn::FakeQuantizationQueueDescriptor data;
- armnn::WorkloadInfo info;
-
- AddInputToWorkload(data, info, tensorInfo, inputHandle.get());
- AddOutputToWorkload(data, info, tensorInfo, outputHandle.get());
- float min = -10.f;
- float max = 10.f;
-
- data.m_Parameters.m_Min = min;
- data.m_Parameters.m_Max = max;
-
- armnn::PassthroughCpuTensorHandle refHandle(tensorInfo, &ret.outputExpected[0][0]);
- armnn::FakeQuantizationQueueDescriptor refData = data;
- armnn::WorkloadInfo refInfo = info;
- SetWorkloadOutput(refData, refInfo, 0, tensorInfo, &refHandle);
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateFakeQuantization(data, info);
-
- inputHandle->Allocate();
- outputHandle->Allocate();
-
- CopyDataToITensorHandle(inputHandle.get(), &input[0][0]);
-
- workload->PostAllocationConfigure();
- workload->Execute();
-
- CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get());
-
- ret.outputExpected = MakeTensor<float, 2>(tensorInfo, std::vector<float>({
- 0.0f, 63.0f,
- 128.0f, 191.0f,
- 255.0f, 255.0f
- }));
- return ret;
-}
-
-namespace
-{
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> L2NormalizationTestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::TensorShape& inputOutputTensorShape,
- float scale,
- int32_t offset,
- const std::vector<float>& inputValues,
- float outScale,
- int32_t outOffset,
- const std::vector<float>& expectedOutputValues,
- const armnn::DataLayout layout,
- float epsilon = 1e-12f)
-{
- const armnn::TensorInfo inputTensorInfo(inputOutputTensorShape, ArmnnType, scale, offset);
- const armnn::TensorInfo outputTensorInfo(inputOutputTensorShape, ArmnnType, outScale, outOffset);
-
- // at this point if we require it permute the input data
- const armnn::PermutationVector NCHWToNHWC = { 0, 3, 1, 2 };
- std::vector<float> inputData = inputValues;
- if (layout == armnn::DataLayout::NHWC)
- {
- std::vector<float> tmp(inputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, inputData.data(), tmp.data(), sizeof(float));
- inputData = tmp;
- }
-
- auto inputTensor = MakeTensor<T, 4>(inputTensorInfo, QuantizedVector<T>(
- inputTensorInfo.GetQuantizationScale(),
- inputTensorInfo.GetQuantizationOffset(),
- inputData));
-
- std::vector<float> expectedOutputData = expectedOutputValues;
- if (layout == armnn::DataLayout::NHWC)
- {
- std::vector<float> tmp(expectedOutputData.size());
- armnnUtils::Permute(inputTensorInfo.GetShape(), NCHWToNHWC, expectedOutputData.data(), tmp.data(),
- sizeof(float));
- expectedOutputData = tmp;
- }
-
- LayerTestResult<T, 4> result(outputTensorInfo);
- result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, QuantizedVector<T>(
- outputTensorInfo.GetQuantizationScale(),
- outputTensorInfo.GetQuantizationOffset(),
- expectedOutputData));
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- armnn::L2NormalizationQueueDescriptor descriptor;
- descriptor.m_Parameters.m_Eps = epsilon;
- descriptor.m_Parameters.m_DataLayout = layout;
- armnn::WorkloadInfo info;
-
- AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
- AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateL2Normalization(descriptor, info);
-
- inputHandle->Allocate();
- outputHandle->Allocate();
-
- CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]);
-
- workload->PostAllocationConfigure();
- ExecuteWorkload(*workload, memoryManager);
-
- CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
-
- return result;
-}
-
-float CalcInvL2Norm(std::initializer_list<float> elements)
-{
- const float reduction = std::accumulate(elements.begin(), elements.end(), 0.0f,
- [](float acc, float element) { return acc + element * element; });
- return 1.0f / sqrtf(reduction);
-}
-
-} // anonymous namespace
-
-template<armnn::DataType ArmnnType, typename T>
-LayerTestResult<T, 2> Pad2dTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset,
- const float customPaddingValue)
-{
- const armnn::TensorShape inputShape{ 3, 3 };
- const armnn::TensorShape outputShape{ 7, 7 };
-
- const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
- const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
-
- std::vector<T> inputValues(
- QuantizedVector<T>(qScale, qOffset,
- {
- // Height (3) x Width (3)
- 4, 8, 6,
- 7, 4, 4,
- 3, 2, 4
- }));
-
- auto p = customPaddingValue;
- std::vector<T> expectedOutputValues;
- expectedOutputValues = (
- QuantizedVector<T>(qScale, qOffset,
- {
- p, p, p, p, p, p, p,
- p, p, p, p, p, p, p,
- p, p, 4, 8, 6, p, p,
- p, p, 7, 4, 4, p, p,
- p, p, 3, 2, 4, p, p,
- p, p, p, p, p, p, p,
- p, p, p, p, p, p, p
- }));
-
- auto inputTensor = MakeTensor<T, 2>(inputTensorInfo, std::vector<T>(inputValues));
-
- LayerTestResult<T, 2> result(outputTensorInfo);
- result.outputExpected = MakeTensor<T, 2>(outputTensorInfo, std::vector<T>(expectedOutputValues));
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- armnn::PadQueueDescriptor descriptor;
-
- std::vector<std::pair<unsigned int, unsigned int>> padList;
- padList.push_back(std::pair<unsigned int, unsigned int>(2,2));
- padList.push_back(std::pair<unsigned int, unsigned int>(2,2));
-
- descriptor.m_Parameters.m_PadList = padList;
- descriptor.m_Parameters.m_PadValue = customPaddingValue;
- armnn::WorkloadInfo info;
-
- AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
- AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
-
- inputHandle->Allocate();
- outputHandle->Allocate();
-
- CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
-
- workload->PostAllocationConfigure();
- workload->Execute();
-
- CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
-
- return result;
-}
-
-template<armnn::DataType ArmnnType, typename T>
-LayerTestResult<T, 3> Pad3dTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- const armnn::TensorShape inputShape{ 2, 2, 2 };
- const armnn::TensorShape outputShape{ 3, 5, 6 };
-
- const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
- const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
-
- std::vector<T> inputValues(
- QuantizedVector<T>(qScale,qOffset,
- {
- // Channel 0, Height (2) x Width (2)
- 0, 4,
- 2, 5,
-
- // Channel 1, Height (2) x Width (2)
- 6, 1,
- 5, 2
- }));
-
- std::vector<T> expectedOutputValues(
- QuantizedVector<T>(qScale,qOffset,
- {
-
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 4, 0, 0,
- 0, 0, 2, 5, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 6, 1, 0, 0,
- 0, 0, 5, 2, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0
-
- }));
-
- auto inputTensor = MakeTensor<T, 3>(inputTensorInfo, std::vector<T>(inputValues));
-
- LayerTestResult<T, 3> result(outputTensorInfo);
- result.outputExpected = MakeTensor<T, 3>(outputTensorInfo, std::vector<T>(expectedOutputValues));
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- armnn::PadQueueDescriptor descriptor;
-
- std::vector<std::pair<unsigned int, unsigned int>> PadList;
- PadList.push_back(std::pair<unsigned int, unsigned int>(0,1));
- PadList.push_back(std::pair<unsigned int, unsigned int>(2,1));
- PadList.push_back(std::pair<unsigned int, unsigned int>(2,2));
-
- descriptor.m_Parameters.m_PadList = PadList;
- armnn::WorkloadInfo info;
-
- AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
- AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
-
- inputHandle->Allocate();
- outputHandle->Allocate();
-
- CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]);
-
- workload->PostAllocationConfigure();
- workload->Execute();
-
- CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get());
-
- return result;
-}
-
-template<armnn::DataType ArmnnType, typename T>
-LayerTestResult<T, 4> Pad4dTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- const armnn::TensorShape inputShape{ 2, 2, 3, 2 };
- const armnn::TensorShape outputShape{ 4, 5, 7, 4 };
-
- const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType, qScale, qOffset);
- const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType, qScale, qOffset);
-
- std::vector<T> inputValues(
- QuantizedVector<T>(qScale,qOffset,
- {
- // Batch 0, Channel 0, Height (3) x Width (2)
- 0, 1,
- 2, 3,
- 4, 5,
-
- // Batch 0, Channel 1, Height (3) x Width (2)
- 6, 7,
- 8, 9,
- 10, 11,
-
- // Batch 1, Channel 0, Height (3) x Width (2)
- 12, 13,
- 14, 15,
- 16, 17,
-
- // Batch 1, Channel 1, Height (3) x Width (2)
- 18, 19,
- 20, 21,
- 22, 23
- }));
-
- std::vector<T> expectedOutputValues(
- QuantizedVector<T>(qScale,qOffset,
- {
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 1, 0,
- 0, 2, 3, 0,
- 0, 4, 5, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 6, 7, 0,
- 0, 8, 9, 0,
- 0, 10, 11, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 12, 13, 0,
- 0, 14, 15, 0,
- 0, 16, 17, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 18, 19, 0,
- 0, 20, 21, 0,
- 0, 22, 23, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
-
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0
- }));
-
- auto inputTensor = MakeTensor<T, 4>(inputTensorInfo, std::vector<T>(inputValues));
-
- LayerTestResult<T, 4> result(outputTensorInfo);
- result.outputExpected = MakeTensor<T, 4>(outputTensorInfo, std::vector<T>(expectedOutputValues));
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- armnn::PadQueueDescriptor descriptor;
-
- std::vector<std::pair<unsigned int, unsigned int>> PadList;
- PadList.push_back(std::pair<unsigned int, unsigned int>(1,1));
- PadList.push_back(std::pair<unsigned int, unsigned int>(2,1));
- PadList.push_back(std::pair<unsigned int, unsigned int>(3,1));
- PadList.push_back(std::pair<unsigned int, unsigned int>(1,1));
-
- descriptor.m_Parameters.m_PadList = PadList;
- armnn::WorkloadInfo info;
-
- AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
- AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreatePad(descriptor, info);
-
- inputHandle->Allocate();
- outputHandle->Allocate();
-
- CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]);
-
- workload->PostAllocationConfigure();
- workload->Execute();
-
- CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
-
- return result;
-}
-
-LayerTestResult<uint8_t, 2> PadUint82dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Pad2dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 1.0f, 0);
-}
-
-LayerTestResult<uint8_t, 2> PadUint82dCustomPaddingTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Pad2dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 1.0f, 0, 1.0f);
-}
-
-LayerTestResult<uint8_t, 3> PadUint83dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Pad3dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 1.0f, 0);
-}
-
-LayerTestResult<uint8_t, 4> PadUint84dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Pad4dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 1.0f, 0);
-}
-
-
-template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 2>
-Pad2dTestCommon<armnn::DataType::QuantisedSymm16>(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset,
- const float customPaddingValue);
-
-template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 3>
-Pad3dTestCommon<armnn::DataType::QuantisedSymm16>(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset);
-
-template LayerTestResult<typename armnn::ResolveType<armnn::DataType::QuantisedSymm16>, 4>
-Pad4dTestCommon<armnn::DataType::QuantisedSymm16>(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset);
-
-LayerTestResult<float, 2> PadFloat322dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Pad2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-LayerTestResult<float, 2> PadFloat322dCustomPaddingTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Pad2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0, 1.0f);
-}
-
-LayerTestResult<float, 3> PadFloat323dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Pad3dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-LayerTestResult<float, 4> PadFloat324dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Pad4dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> 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<float> 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<float> expectedOutputValues
- {
- // Batch 0, Channel 0, Height (1) x Width (1)
- 0.00000001f * approxInvL2Norm,
- 0.00000002f * approxInvL2Norm,
- 0.00000003f * approxInvL2Norm,
- };
-
- return L2NormalizationTestImpl<ArmnnType>(workloadFactory, memoryManager, inputOutputShape, scale, offset,
- inputValues, outScale, outOffset, expectedOutputValues, layout,
- epsilon);
-}
-
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> L2Normalization1dTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float scale,
- int32_t offset,
- float outScale,
- int32_t outOffset,
- const armnn::DataLayout layout)
-{
- // Width: 1
- // Height: 1
- // Channels: 10
- // BatchSize: 1
- unsigned int numberOfBatches = 1;
- unsigned int numberOfChannels = 10;
- unsigned int height = 1;
- unsigned int width = 1;
-
-
- const armnn::TensorShape inputOutputShape = armnnUtils::GetTensorShape(
- numberOfBatches, numberOfChannels, height, width, layout);
- std::vector<float> inputValues
- {
- // Batch 0, Channel 0, Height (1) x Width (1)
- 1.0f,
-
- // Batch 0, Channel 1, Height (1) x Width (1)
- 2.0f,
-
- // Batch 0, Channel 2, Height (1) x Width (1)
- 3.0f,
-
- // Batch 0, Channel 3, Height (1) x Width (1)
- 4.0f,
-
- // Batch 0, Channel 4, Height (1) x Width (1)
- 5.0f,
-
- // Batch 0, Channel 5, Height (1) x Width (1)
- 6.0f,
-
- // Batch 0, Channel 6, Height (1) x Width (1)
- 7.0f,
-
- // Batch 0, Channel 7, Height (1) x Width (1)
- 8.0f,
-
- // Batch 0, Channel 8, Height (1) x Width (1)
- 9.0f,
-
- // Batch 0, Channel 9, Height (1) x Width (1)
- 10.0f
- };
- const float approxInvL2Norm = 0.050964719f;
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Channel 0, Height (1) x Width (1)
- 1.0f * approxInvL2Norm,
- 2.0f * approxInvL2Norm,
- 3.0f * approxInvL2Norm,
- 4.0f * approxInvL2Norm,
- 5.0f * approxInvL2Norm,
- 6.0f * approxInvL2Norm,
- 7.0f * approxInvL2Norm,
- 8.0f * approxInvL2Norm,
- 9.0f * approxInvL2Norm,
- 10.0f * approxInvL2Norm
- };
-
-
- return L2NormalizationTestImpl<ArmnnType>(workloadFactory, memoryManager, inputOutputShape, scale, offset,
- inputValues, outScale, outOffset, expectedOutputValues, layout);
-}
-
-LayerTestResult<float, 4> 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<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.f, 0, 0.f, 0,
- layout, descriptor.m_Eps);
-}
-
-LayerTestResult<float, 4> L2NormalizationNonDefaultEpsilonTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2NormalizationEpsilonTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.f, 0, 0.f, 0,
- layout, 1e-9f);
-}
-
-LayerTestResult<float, 4> L2Normalization1dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization1dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.f, 0, 0.f, 0,layout);
-}
-
-LayerTestResult<int16_t, 4> L2Normalization1dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization1dTestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, 1.f, 0, 1.f, 0,
- layout);
-}
-
-LayerTestResult<uint8_t, 4> L2Normalization1dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization1dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 1.f, 0,
- 1.f/128, 128, layout);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> L2Normalization2dTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float scale,
- int32_t offset,
- float outScale,
- int32_t outOffset,
- const armnn::DataLayout layout)
-{
- // Width: 5
- // Height: 1
- // Channels: 2
- // BatchSize: 1
- unsigned int numberOfBatches = 1;
- unsigned int numberOfChannels = 2;
- unsigned int height = 1;
- unsigned int width = 5;
-
- const armnn::TensorShape inputOutputShape = armnnUtils::GetTensorShape(
- numberOfBatches, numberOfChannels, height, width, layout);
- std::vector<float> inputValues
- {
- // Batch 0, Channel 0, Height (1) x Width (5)
- 1.0f, 3.0f, 5.0f, 7.0f, 9.0f,
-
- // Batch 0, Channel 1, Height (1) x Width (5)
- 2.0f, 4.0f, 6.0f, 8.0f, 10.0f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Channel 0, Height (1) x Width (5)
- 1.0f * CalcInvL2Norm({ 1.0f, 2.0f }),
- 3.0f * CalcInvL2Norm({ 3.0f, 4.0f }),
- 5.0f * CalcInvL2Norm({ 5.0f, 6.0f }),
- 7.0f * CalcInvL2Norm({ 7.0f, 8.0f }),
- 9.0f * CalcInvL2Norm({ 9.0f, 10.0f }),
-
- // Batch 0, Channel 1, Height (1) x Width (5)
- 2.0f * CalcInvL2Norm({ 1.0f, 2.0f }),
- 4.0f * CalcInvL2Norm({ 3.0f, 4.0f }),
- 6.0f * CalcInvL2Norm({ 5.0f, 6.0f }),
- 8.0f * CalcInvL2Norm({ 7.0f, 8.0f }),
- 10.0f * CalcInvL2Norm({ 9.0f, 10.0f })
- };
-
- return L2NormalizationTestImpl<ArmnnType>(workloadFactory, memoryManager, inputOutputShape, scale, offset,
- inputValues, outScale, outOffset, expectedOutputValues, layout);
-}
-
-LayerTestResult<float, 4> L2Normalization2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.f, 0, 0.f, 0,
- layout);
-}
-
-LayerTestResult<int16_t, 4> L2Normalization2dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization1dTestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, 1.f, 0, 1.f, 0,
- layout);
-}
-
-LayerTestResult<uint8_t, 4> L2Normalization2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization1dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 1.f, 0,
- 1.f/128, 128, layout);
-}
-
-LayerTestResult<float, 2> L2Normalization2dShapeTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- const armnn::DataLayout layout = armnn::DataLayout::NHWC;
- const armnn::TensorShape inputOutputTensorShape = armnn::TensorShape({ 5, 2 });
-
- std::vector<float> inputData
- {
- 1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f, 9.f, 10.f
- };
- std::vector<float> expectedOutputData
- {
- 1.0f * CalcInvL2Norm({ 1.0f, 2.0f }),
- 2.0f * CalcInvL2Norm({ 1.0f, 2.0f }),
- 3.0f * CalcInvL2Norm({ 3.0f, 4.0f }),
- 4.0f * CalcInvL2Norm({ 3.0f, 4.0f }),
- 5.0f * CalcInvL2Norm({ 5.0f, 6.0f }),
- 6.0f * CalcInvL2Norm({ 5.0f, 6.0f }),
- 7.0f * CalcInvL2Norm({ 7.0f, 8.0f }),
- 8.0f * CalcInvL2Norm({ 7.0f, 8.0f }),
- 9.0f * CalcInvL2Norm({ 9.0f, 10.0f }),
- 10.0f * CalcInvL2Norm({ 9.0f, 10.0f })
- };
-
- const armnn::TensorInfo inputTensorInfo(inputOutputTensorShape, armnn::DataType::Float32, 0.f, 0);
- const armnn::TensorInfo outputTensorInfo(inputOutputTensorShape, armnn::DataType::Float32, 0.f, 0);
-
- auto inputTensor = MakeTensor<float, 2>(inputTensorInfo, QuantizedVector<float>(
- inputTensorInfo.GetQuantizationScale(),
- inputTensorInfo.GetQuantizationOffset(),
- inputData));
-
- LayerTestResult<float, 2> result(outputTensorInfo);
- result.outputExpected = MakeTensor<float, 2>(outputTensorInfo, QuantizedVector<float>(
- outputTensorInfo.GetQuantizationScale(),
- outputTensorInfo.GetQuantizationOffset(),
- expectedOutputData));
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- armnn::L2NormalizationQueueDescriptor descriptor;
- descriptor.m_Parameters.m_Eps = 1e-12f;
- descriptor.m_Parameters.m_DataLayout = layout;
- armnn::WorkloadInfo info;
-
- AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
- AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateL2Normalization(descriptor, info);
-
- inputHandle->Allocate();
- outputHandle->Allocate();
-
- CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]);
-
- workload->PostAllocationConfigure();
- ExecuteWorkload(*workload, memoryManager);
-
- CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get());
-
- return result;
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> L2Normalization3dTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float scale,
- int32_t offset,
- float outScale,
- int32_t outOffset,
- const armnn::DataLayout layout)
-{
- // Width: 3
- // Height: 4
- // Channels: 2
- // BatchSize: 1
- unsigned int numberOfBatches = 1;
- unsigned int numberOfChannels = 2;
- unsigned int height = 4;
- unsigned int width = 3;
-
- const armnn::TensorShape inputOutputShape = armnnUtils::GetTensorShape(
- numberOfBatches, numberOfChannels, height, width, layout);
- std::vector<float> inputValues
- {
- // Batch 0, Channel 0, Height (4) x Width (3)
- 119.0f, 21.0f, 150.0f,
- 149.0f, 32.0f, 179.0f,
- 15.0f, 227.0f, 141.0f,
- 147.0f, 199.0f, 220.0f,
-
- // Batch 0, Channel 1, Height (4) x Width (3)
- 110.0f, 140.0f, 73.0f,
- 211.0f, 212.0f, 89.0f,
- 24.0f, 138.0f, 188.0f,
- 162.0f, 12.0f, 161.0f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Channel 0, Height (4) x Width (3)
- 119.0f * CalcInvL2Norm({ 119.0f, 110.0f }),
- 21.0f * CalcInvL2Norm({ 21.0f, 140.0f }),
- 150.0f * CalcInvL2Norm({ 150.0f, 73.0f }),
- 149.0f * CalcInvL2Norm({ 149.0f, 211.0f }),
- 32.0f * CalcInvL2Norm({ 32.0f, 212.0f }),
- 179.0f * CalcInvL2Norm({ 179.0f, 89.0f }),
- 15.0f * CalcInvL2Norm({ 15.0f, 24.0f }),
- 227.0f * CalcInvL2Norm({ 227.0f, 138.0f }),
- 141.0f * CalcInvL2Norm({ 141.0f, 188.0f }),
- 147.0f * CalcInvL2Norm({ 147.0f, 162.0f }),
- 199.0f * CalcInvL2Norm({ 199.0f, 12.0f }),
- 220.0f * CalcInvL2Norm({ 220.0f, 161.0f }),
-
- // Batch 0, Channel 1, Height (4) x Width (3)
- 110.0f * CalcInvL2Norm({ 119.0f, 110.0f }),
- 140.0f * CalcInvL2Norm({ 21.0f, 140.0f }),
- 73.0f * CalcInvL2Norm({ 150.0f, 73.0f }),
- 211.0f * CalcInvL2Norm({ 149.0f, 211.0f }),
- 212.0f * CalcInvL2Norm({ 32.0f, 212.0f }),
- 89.0f * CalcInvL2Norm({ 179.0f, 89.0f }),
- 24.0f * CalcInvL2Norm({ 15.0f, 24.0f }),
- 138.0f * CalcInvL2Norm({ 227.0f, 138.0f }),
- 188.0f * CalcInvL2Norm({ 141.0f, 188.0f }),
- 162.0f * CalcInvL2Norm({ 147.0f, 162.0f }),
- 12.0f * CalcInvL2Norm({ 199.0f, 12.0f }),
- 161.0f * CalcInvL2Norm({ 220.0f, 161.0f })
- };
-
- return L2NormalizationTestImpl<ArmnnType>(workloadFactory, memoryManager, inputOutputShape, scale, offset,
- inputValues, outScale, outOffset, expectedOutputValues, layout);
-}
-
-LayerTestResult<float, 4> L2Normalization3dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization3dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.f, 0, 0.f, 0,
- layout);
-}
-
-LayerTestResult<int16_t, 4> L2Normalization3dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization1dTestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, 1.f, 0, 1.f, 0,
- layout);
-}
-
-LayerTestResult<uint8_t, 4> L2Normalization3dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization1dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 1.f, 0,
- 1.f/128, 128, layout);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> L2Normalization4dTestCommon(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float scale,
- int32_t offset,
- float outScale,
- int32_t outOffset,
- const armnn::DataLayout layout)
-{
- // Width: 3
- // Height: 4
- // Channels: 3
- // BatchSize: 2
- unsigned int numberOfBatches = 2;
- unsigned int numberOfChannels = 3;
- unsigned int height = 4;
- unsigned int width = 3;
-
- const armnn::TensorShape inputOutputShape = armnnUtils::GetTensorShape(
- numberOfBatches, numberOfChannels, height, width, layout);
- std::vector<float> inputValues
- {
- // Batch 0, Channel 0, Height (4) x Width (3)
- 235.0f, 46.0f, 178.0f,
- 100.0f, 123.0f, 19.0f,
- 172.0f, 74.0f, 250.0f,
- 6.0f, 195.0f, 80.0f,
-
- // Batch 0, Channel 1, Height (4) x Width (3)
- 113.0f, 95.0f, 202.0f,
- 77.0f, 114.0f, 71.0f,
- 122.0f, 246.0f, 166.0f,
- 82.0f, 28.0f, 37.0f,
-
- // Batch 0, Channel 2, Height (4) x Width (3)
- 56.0f, 170.0f, 162.0f,
- 194.0f, 89.0f, 254.0f,
- 12.0f, 209.0f, 200.0f,
- 1.0f, 64.0f, 54.0f,
-
- // Batch 1, Channel 0, Height (4) x Width (3)
- 67.0f, 90.0f, 49.0f,
- 7.0f, 163.0f, 18.0f,
- 25.0f, 117.0f, 103.0f,
- 247.0f, 59.0f, 189.0f,
-
- // Batch 1, Channel 1, Height (4) x Width (3)
- 239.0f, 104.0f, 199.0f,
- 17.0f, 124.0f, 153.0f,
- 222.0f, 217.0f, 75.0f,
- 32.0f, 126.0f, 21.0f,
-
- // Batch 1, Channel 2, Height (4) x Width (3)
- 97.0f, 145.0f, 215.0f,
- 115.0f, 116.0f, 238.0f,
- 226.0f, 16.0f, 132.0f,
- 92.0f, 125.0f, 88.0f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Channel 0, Height (4) x Width (3)
- 235.0f * CalcInvL2Norm({ 235.0f, 113.0f, 56.0f }),
- 46.0f * CalcInvL2Norm({ 46.0f, 95.0f, 170.0f }),
- 178.0f * CalcInvL2Norm({ 178.0f, 202.0F, 162.0f }),
- 100.0f * CalcInvL2Norm({ 100.0f, 77.0f, 194.0f }),
- 123.0f * CalcInvL2Norm({ 123.0f, 114.0f, 89.0f }),
- 19.0f * CalcInvL2Norm({ 19.0f, 71.0f, 254.0f }),
- 172.0f * CalcInvL2Norm({ 172.0f, 122.0f, 12.0f }),
- 74.0f * CalcInvL2Norm({ 74.0f, 246.0f, 209.0f }),
- 250.0f * CalcInvL2Norm({ 250.0f, 166.0f, 200.0f }),
- 6.0f * CalcInvL2Norm({ 6.0f, 82.0f, 1.0f }),
- 195.0f * CalcInvL2Norm({ 195.0f, 28.0f, 64.0f }),
- 80.0f * CalcInvL2Norm({ 80.0f, 37.0f, 54.0f }),
-
- // Batch 0, Channel 1, Height (4) x Width (3)
- 113.0f * CalcInvL2Norm({ 235.0f, 113.0f, 56.0f }),
- 95.0f * CalcInvL2Norm({ 46.0f, 95.0f, 170.0f }),
- 202.0f * CalcInvL2Norm({ 178.0f, 202.0F, 162.0f }),
- 77.0f * CalcInvL2Norm({ 100.0f, 77.0f, 194.0f }),
- 114.0f * CalcInvL2Norm({ 123.0f, 114.0f, 89.0f }),
- 71.0f * CalcInvL2Norm({ 19.0f, 71.0f, 254.0f }),
- 122.0f * CalcInvL2Norm({ 172.0f, 122.0f, 12.0f }),
- 246.0f * CalcInvL2Norm({ 74.0f, 246.0f, 209.0f }),
- 166.0f * CalcInvL2Norm({ 250.0f, 166.0f, 200.0f }),
- 82.0f * CalcInvL2Norm({ 6.0f, 82.0f, 1.0f }),
- 28.0f * CalcInvL2Norm({ 195.0f, 28.0f, 64.0f }),
- 37.0f * CalcInvL2Norm({ 80.0f, 37.0f, 54.0f }),
-
- // Batch 0, Channel 2, Height (4) x Width (3)
- 56.0f * CalcInvL2Norm({ 235.0f, 113.0f, 56.0f }),
- 170.0f * CalcInvL2Norm({ 46.0f, 95.0f, 170.0f }),
- 162.0f * CalcInvL2Norm({ 178.0f, 202.0F, 162.0f }),
- 194.0f * CalcInvL2Norm({ 100.0f, 77.0f, 194.0f }),
- 89.0f * CalcInvL2Norm({ 123.0f, 114.0f, 89.0f }),
- 254.0f * CalcInvL2Norm({ 19.0f, 71.0f, 254.0f }),
- 12.0f * CalcInvL2Norm({ 172.0f, 122.0f, 12.0f }),
- 209.0f * CalcInvL2Norm({ 74.0f, 246.0f, 209.0f }),
- 200.0f * CalcInvL2Norm({ 250.0f, 166.0f, 200.0f }),
- 1.0f * CalcInvL2Norm({ 6.0f, 82.0f, 1.0f }),
- 64.0f * CalcInvL2Norm({ 195.0f, 28.0f, 64.0f }),
- 54.0f * CalcInvL2Norm({ 80.0f, 37.0f, 54.0f }),
-
- // Batch 1, Channel 0, Height (4) x Width (3)
- 67.0f * CalcInvL2Norm({ 67.0f, 239.0f, 97.0f }),
- 90.0f * CalcInvL2Norm({ 90.0f, 104.0f, 145.0f }),
- 49.0f * CalcInvL2Norm({ 49.0f, 199.0f, 215.0f }),
- 7.0f * CalcInvL2Norm({ 7.0f, 17.0f, 115.0f }),
- 163.0f * CalcInvL2Norm({ 163.0f, 124.0f, 116.0f }),
- 18.0f * CalcInvL2Norm({ 18.0f, 153.0f, 238.0f }),
- 25.0f * CalcInvL2Norm({ 25.0f, 222.0f, 226.0f }),
- 117.0f * CalcInvL2Norm({ 117.0f, 217.0f, 16.0f }),
- 103.0f * CalcInvL2Norm({ 103.0f, 75.0f, 132.0f }),
- 247.0f * CalcInvL2Norm({ 247.0f, 32.0f, 92.0f }),
- 59.0f * CalcInvL2Norm({ 59.0f, 126.0f, 125.0f }),
- 189.0f * CalcInvL2Norm({ 189.0f, 21.0f, 88.0f }),
-
- // Batch 1, Channel 1, Height (4) x Width (3)
- 239.0f * CalcInvL2Norm({ 67.0f, 239.0f, 97.0f }),
- 104.0f * CalcInvL2Norm({ 90.0f, 104.0f, 145.0f }),
- 199.0f * CalcInvL2Norm({ 49.0f, 199.0f, 215.0f }),
- 17.0f * CalcInvL2Norm({ 7.0f, 17.0f, 115.0f }),
- 124.0f * CalcInvL2Norm({ 163.0f, 124.0f, 116.0f }),
- 153.0f * CalcInvL2Norm({ 18.0f, 153.0f, 238.0f }),
- 222.0f * CalcInvL2Norm({ 25.0f, 222.0f, 226.0f }),
- 217.0f * CalcInvL2Norm({ 117.0f, 217.0f, 16.0f }),
- 75.0f * CalcInvL2Norm({ 103.0f, 75.0f, 132.0f }),
- 32.0f * CalcInvL2Norm({ 247.0f, 32.0f, 92.0f }),
- 126.0f * CalcInvL2Norm({ 59.0f, 126.0f, 125.0f }),
- 21.0f * CalcInvL2Norm({ 189.0f, 21.0f, 88.0f }),
-
- // Batch 1, Channel 2, Height (4) x Width (3)
- 97.0f * CalcInvL2Norm({ 67.0f, 239.0f, 97.0f }),
- 145.0f * CalcInvL2Norm({ 90.0f, 104.0f, 145.0f }),
- 215.0f * CalcInvL2Norm({ 49.0f, 199.0f, 215.0f }),
- 115.0f * CalcInvL2Norm({ 7.0f, 17.0f, 115.0f }),
- 116.0f * CalcInvL2Norm({ 163.0f, 124.0f, 116.0f }),
- 238.0f * CalcInvL2Norm({ 18.0f, 153.0f, 238.0f }),
- 226.0f * CalcInvL2Norm({ 25.0f, 222.0f, 226.0f }),
- 16.0f * CalcInvL2Norm({ 117.0f, 217.0f, 16.0f }),
- 132.0f * CalcInvL2Norm({ 103.0f, 75.0f, 132.0f }),
- 92.0f * CalcInvL2Norm({ 247.0f, 32.0f, 92.0f }),
- 125.0f * CalcInvL2Norm({ 59.0f, 126.0f, 125.0f }),
- 88.0f * CalcInvL2Norm({ 189.0f, 21.0f, 88.0f })
- };
-
- return L2NormalizationTestImpl<ArmnnType>(workloadFactory, memoryManager, inputOutputShape, scale, offset,
- inputValues, outScale, outOffset, expectedOutputValues, layout);
-}
-
-LayerTestResult<float, 4> L2Normalization4dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization4dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.f, 0, 0.f, 0,
- layout);
-}
-
-LayerTestResult<int16_t, 4> L2Normalization4dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization1dTestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, 1.f, 0, 1.f, 0,
- layout);
-}
-
-LayerTestResult<uint8_t, 4> L2Normalization4dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout layout)
-{
- return L2Normalization1dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 1.f, 0,
- 1.f/128, 128, layout);
-}
-
-template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
-LayerTestResult<T, 4> ConstantTestImpl(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- float qScale,
- int32_t qOffset)
-{
- constexpr unsigned int inputWidth = 3;
- constexpr unsigned int inputHeight = 4;
- constexpr unsigned int inputChannels = 3;
- constexpr unsigned int inputBatchSize = 2;
-
- constexpr unsigned int outputWidth = inputWidth;
- constexpr unsigned int outputHeight = inputHeight;
- constexpr unsigned int outputChannels = inputChannels;
- constexpr unsigned int outputBatchSize = inputBatchSize;
-
- armnn::TensorInfo inputTensorInfo({ inputBatchSize, inputChannels, inputHeight, inputWidth },
- ArmnnType, qScale, qOffset);
-
- armnn::TensorInfo outputTensorInfo({ outputBatchSize, outputChannels, outputHeight, outputWidth },
- ArmnnType, qScale, qOffset);
-
- // Set quantization parameters if the requested type is a quantized type.
- if(armnn::IsQuantizedType<T>())
- {
- inputTensorInfo.SetQuantizationScale(qScale);
- inputTensorInfo.SetQuantizationOffset(qOffset);
- outputTensorInfo.SetQuantizationScale(qScale);
- outputTensorInfo.SetQuantizationOffset(qOffset);
- }
-
- auto input = MakeTensor<T, 4>(inputTensorInfo, std::vector<T>(
- QuantizedVector<T>(qScale, qOffset, {
- // Batch 0, Channel 0
- 235.0f, 46.0f, 178.0f,
- 100.0f, 123.0f, 19.0f,
- 172.0f, 74.0f, 250.0f,
- 6.0f, 195.0f, 80.0f,
-
- // Batch 0, Channel 1
- 113.0f, 95.0f, 202.0f,
- 77.0f, 114.0f, 71.0f,
- 122.0f, 246.0f, 166.0f,
- 82.0f, 28.0f, 37.0f,
-
- // Batch 0, Channel 2
- 56.0f, 170.0f, 162.0f,
- 194.0f, 89.0f, 254.0f,
- 12.0f, 209.0f, 200.0f,
- 1.0f, 64.0f, 54.0f,
-
- // Batch 1, Channel 0
- 67.0f, 90.0f, 49.0f,
- 7.0f, 163.0f, 18.0f,
- 25.0f, 117.0f, 103.0f,
- 247.0f, 59.0f, 189.0f,
-
- // Batch 1, Channel 1
- 239.0f, 104.0f, 199.0f,
- 17.0f, 124.0f, 153.0f,
- 222.0f, 217.0f, 75.0f,
- 32.0f, 126.0f, 21.0f,
-
- // Batch 1, Channel 2
- 97.0f, 145.0f, 215.0f,
- 115.0f, 116.0f, 238.0f,
- 226.0f, 16.0f, 132.0f,
- 92.0f, 125.0f, 88.0f,
- })));
-
- LayerTestResult<T, 4> result(outputTensorInfo);
- result.outputExpected = input;
-
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- armnn::ScopedCpuTensorHandle constantTensor(inputTensorInfo);
- AllocateAndCopyDataToITensorHandle(&constantTensor, &input[0][0][0][0]);
-
- armnn::ConstantQueueDescriptor descriptor;
- descriptor.m_LayerOutput = &constantTensor;
-
- armnn::WorkloadInfo info;
- AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConstant(descriptor, info);
-
- outputHandle->Allocate();
-
- workload->PostAllocationConfigure();
- workload->Execute();
-
- CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get());
- return result;
-}
-
-LayerTestResult<float, 4> ConstantTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return ConstantTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager, 0.0f, 0);
-}
-
-LayerTestResult<int16_t, 4> ConstantInt16SimpleQuantizationScaleNoOffsetTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return ConstantTestImpl<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, 1.0f, 0);
-}
-
-LayerTestResult<uint8_t, 4> ConstantUint8SimpleQuantizationScaleNoOffsetTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return ConstantTestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 1.0f, 0);
-}
-
-LayerTestResult<uint8_t, 3> ConcatUint8DifferentQParamsTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- unsigned int outputWidth = 3;
- unsigned int outputHeight = 6;
- unsigned int outputChannels = 3;
-
- unsigned int inputWidth1 = 3;
- unsigned int inputHeight1 = 6;
- unsigned int inputChannels1 = 2;
-
- unsigned int inputWidth2 = 3;
- unsigned int inputHeight2 = 6;
- unsigned int inputChannels2 = 1;
-
- // Defines the tensor descriptors.
- armnn::TensorInfo outputTensorInfo({ outputChannels, outputHeight, outputWidth }, armnn::DataType::QuantisedAsymm8);
- armnn::TensorInfo inputTensorInfo1({ inputChannels1, inputHeight1, inputWidth1 }, armnn::DataType::QuantisedAsymm8);
- armnn::TensorInfo inputTensorInfo2({ inputChannels2, inputHeight2, inputWidth2 }, armnn::DataType::QuantisedAsymm8);
-
- // Quantized input1 tensor. Range [-3, 1]
- const float inputScale1 = 0.015686f;
- const int32_t inputOffset1 = 192;
-
- auto input1 = MakeTensor<uint8_t, 3>(inputTensorInfo1, std::vector<uint8_t>(
- {
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9,
- 10, 11, 12,
- 13, 14, 15,
- 16, 17, 18,
-
- 19, 20, 21,
- 22, 23, 24,
- 25, 26, 27,
- 28, 29, 30,
- 31, 32, 33,
- 34, 35, 36,
- })
- );
-
- // Quatized input2 tensor. Range [-1, 4]
- const float inputScale2 = 0.019608f;
- const int32_t inputOffset2 = 50;
-
- auto input2 = MakeTensor<uint8_t, 3>(inputTensorInfo2, std::vector<uint8_t>(
- {
- 37, 38, 39,
- 40, 41, 42,
- 43, 44, 45,
- 46, 47, 48,
- 49, 50, 51,
- 52, 53, 54,
- })
- );
-
- // Output has the same quantization parameters than input1,
- // so that only the requantization of input2 is required
- const float outputScale = 0.015686f;
- const int32_t outputOffset = 192;
-
- LayerTestResult<uint8_t, 3> ret(outputTensorInfo);
-
- ret.outputExpected = MakeTensor<uint8_t, 3>(outputTensorInfo, std::vector<uint8_t>(
- {
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9,
- 10, 11, 12,
- 13, 14, 15,
- 16, 17, 18,
-
- 19, 20, 21,
- 22, 23, 24,
- 25, 26, 27,
- 28, 29, 30,
- 31, 32, 33,
- 34, 35, 36,
-
- 176, 177, 178,
- 179, 181, 182,
- 183, 184, 186,
- 187, 188, 189,
- 191, 192, 193,
- 195, 196, 197,
- })
- );
-
- outputTensorInfo.SetQuantizationScale(outputScale);
- outputTensorInfo.SetQuantizationOffset(outputOffset);
- inputTensorInfo1.SetQuantizationScale(inputScale1);
- inputTensorInfo1.SetQuantizationOffset(inputOffset1);
- inputTensorInfo2.SetQuantizationScale(inputScale2);
- inputTensorInfo2.SetQuantizationOffset(inputOffset2);
-
- std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
- armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
-
- std::vector<unsigned int> wOrigin2 = { 2, 0, 0 }; //Extent of the window is defined by size of input[1].
- armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
-
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- bool subTensorsSupported = workloadFactory.SupportsSubTensors();
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
- subTensorsSupported ?
- workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
- workloadFactory.CreateTensorHandle(inputTensorInfo1);
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
- subTensorsSupported ?
- workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
- workloadFactory.CreateTensorHandle(inputTensorInfo2);
-
- armnn::ConcatQueueDescriptor data;
- armnn::WorkloadInfo info;
- AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
- AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
- AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
-
- data.m_ViewOrigins.push_back(window1);
- data.m_ViewOrigins.push_back(window2);
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
-
- inputHandle1->Allocate();
- inputHandle2->Allocate();
- outputHandle->Allocate();
-
- CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
- CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
-
- workload->PostAllocationConfigure();
- workload->Execute();
-
- CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
-
- return ret;
-}
-
-LayerTestResult<uint8_t, 3> ConcatUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- unsigned int outputWidth = 3;
- unsigned int outputHeight = 6;
- unsigned int outputChannels = 3;
-
- unsigned int inputWidth1 = 3;
- unsigned int inputHeight1 = 6;
- unsigned int inputChannels1 = 2;
-
- unsigned int inputWidth2 = 3;
- unsigned int inputHeight2 = 6;
- unsigned int inputChannels2 = 1;
-
- // Defines the tensor descriptors.
- armnn::TensorInfo outputTensorInfo({ outputChannels, outputHeight, outputWidth }, armnn::DataType::QuantisedAsymm8);
- armnn::TensorInfo inputTensorInfo1({ inputChannels1, inputHeight1, inputWidth1 }, armnn::DataType::QuantisedAsymm8);
- armnn::TensorInfo inputTensorInfo2({ inputChannels2, inputHeight2, inputWidth2 }, armnn::DataType::QuantisedAsymm8);
-
- // Arbitrary scale and offsets. They don't really matter as the Concat operator doesn't dequantize/quantize them.
- const float scale = 0.13497836f;
- const int32_t offset = -7;
-
- outputTensorInfo.SetQuantizationScale(scale);
- outputTensorInfo.SetQuantizationOffset(offset);
- inputTensorInfo1.SetQuantizationScale(scale);
- inputTensorInfo1.SetQuantizationOffset(offset);
- inputTensorInfo2.SetQuantizationScale(scale);
- inputTensorInfo2.SetQuantizationOffset(offset);
-
- LayerTestResult<uint8_t, 3> ret(outputTensorInfo);
-
- ret.outputExpected = MakeTensor<uint8_t, 3>(outputTensorInfo, std::vector<uint8_t>(
- {
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9,
- 10, 11, 12,
- 13, 14, 15,
- 16, 17, 18,
-
- 19, 20, 21,
- 22, 23, 24,
- 25, 26, 27,
- 28, 29, 30,
- 31, 32, 33,
- 34, 35, 36,
-
- 37, 38, 39,
- 40, 41, 42,
- 43, 44, 45,
- 46, 47, 48,
- 49, 50, 51,
- 52, 53, 54,
- })
- );
-
- auto input1 = MakeTensor<uint8_t, 3>(inputTensorInfo1, std::vector<uint8_t>(
- {
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9,
- 10, 11, 12,
- 13, 14, 15,
- 16, 17, 18,
-
- 19, 20, 21,
- 22, 23, 24,
- 25, 26, 27,
- 28, 29, 30,
- 31, 32, 33,
- 34, 35, 36,
- })
- );
-
- auto input2 = MakeTensor<uint8_t, 3>(inputTensorInfo2, std::vector<uint8_t>(
- {
- 37, 38, 39,
- 40, 41, 42,
- 43, 44, 45,
- 46, 47, 48,
- 49, 50, 51,
- 52, 53, 54,
- })
- );
-
- std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
- armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
-
- std::vector<unsigned int> wOrigin2 = { 2, 0, 0 }; //Extent of the window is defined by size of input[1].
- armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
-
-
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- bool subTensorsSupported = workloadFactory.SupportsSubTensors();
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
- subTensorsSupported ?
- workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
- workloadFactory.CreateTensorHandle(inputTensorInfo1);
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
- subTensorsSupported ?
- workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
- workloadFactory.CreateTensorHandle(inputTensorInfo2);
-
-
- armnn::ConcatQueueDescriptor data;
- armnn::WorkloadInfo info;
- AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
- AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
- AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
-
- data.m_ViewOrigins.push_back(window1);
- data.m_ViewOrigins.push_back(window2);
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
-
- inputHandle1->Allocate();
- inputHandle2->Allocate();
- outputHandle->Allocate();
-
- CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
- CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
-
- workload->PostAllocationConfigure();
- workload->Execute();
-
- CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
-
- return ret;
-}
-
-LayerTestResult<uint16_t, 3> ConcatUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- unsigned int outputWidth = 3;
- unsigned int outputHeight = 6;
- unsigned int outputChannels = 3;
-
- unsigned int inputWidth1 = 3;
- unsigned int inputHeight1 = 6;
- unsigned int inputChannels1 = 2;
-
- unsigned int inputWidth2 = 3;
- unsigned int inputHeight2 = 6;
- unsigned int inputChannels2 = 1;
-
- // Defines the tensor descriptors.
- armnn::TensorInfo outputTensorInfo({ outputChannels, outputHeight, outputWidth }, armnn::DataType::QuantisedSymm16);
- armnn::TensorInfo inputTensorInfo1({ inputChannels1, inputHeight1, inputWidth1 }, armnn::DataType::QuantisedSymm16);
- armnn::TensorInfo inputTensorInfo2({ inputChannels2, inputHeight2, inputWidth2 }, armnn::DataType::QuantisedSymm16);
-
- // Arbitrary scale and offsets. They don't really matter as the Concat operator doesn't dequantize/quantize them.
- const float scale = 0.13497836f;
- const int32_t offset = -7;
-
- outputTensorInfo.SetQuantizationScale(scale);
- outputTensorInfo.SetQuantizationOffset(offset);
- inputTensorInfo1.SetQuantizationScale(scale);
- inputTensorInfo1.SetQuantizationOffset(offset);
- inputTensorInfo2.SetQuantizationScale(scale);
- inputTensorInfo2.SetQuantizationOffset(offset);
-
- LayerTestResult<uint16_t, 3> ret(outputTensorInfo);
-
- ret.outputExpected = MakeTensor<uint16_t, 3>(outputTensorInfo, std::vector<uint16_t>(
- {
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9,
- 10, 11, 12,
- 13, 14, 15,
- 16, 17, 18,
-
- 19, 20, 21,
- 22, 23, 24,
- 25, 26, 27,
- 28, 29, 30,
- 31, 32, 33,
- 34, 35, 36,
-
- 37, 38, 39,
- 40, 41, 42,
- 43, 44, 45,
- 46, 47, 48,
- 49, 50, 51,
- 52, 53, 54,
- }));
-
- auto input1 = MakeTensor<uint16_t, 3>(inputTensorInfo1, std::vector<uint16_t>(
- {
- 1, 2, 3,
- 4, 5, 6,
- 7, 8, 9,
- 10, 11, 12,
- 13, 14, 15,
- 16, 17, 18,
-
- 19, 20, 21,
- 22, 23, 24,
- 25, 26, 27,
- 28, 29, 30,
- 31, 32, 33,
- 34, 35, 36,
- }));
-
- auto input2 = MakeTensor<uint16_t, 3>(inputTensorInfo2, std::vector<uint16_t>(
- {
- 37, 38, 39,
- 40, 41, 42,
- 43, 44, 45,
- 46, 47, 48,
- 49, 50, 51,
- 52, 53, 54,
- }));
-
- std::vector<unsigned int> wOrigin1 = { 0, 0, 0 }; //Extent of the window is defined by size of input[0].
- armnn::ConcatQueueDescriptor::ViewOrigin window1(wOrigin1);
-
- std::vector<unsigned int> wOrigin2 = { 2, 0, 0 }; //Extent of the window is defined by size of input[1].
- armnn::ConcatQueueDescriptor::ViewOrigin window2(wOrigin2);
-
-
- std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
-
- bool subTensorsSupported = workloadFactory.SupportsSubTensors();
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle1 =
- subTensorsSupported ?
- workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo1.GetShape(), wOrigin1.data()) :
- workloadFactory.CreateTensorHandle(inputTensorInfo1);
-
- std::unique_ptr<armnn::ITensorHandle> inputHandle2 =
- subTensorsSupported ?
- workloadFactory.CreateSubTensorHandle(*outputHandle, inputTensorInfo2.GetShape(), wOrigin2.data()) :
- workloadFactory.CreateTensorHandle(inputTensorInfo2);
-
-
- armnn::ConcatQueueDescriptor data;
- armnn::WorkloadInfo info;
- AddInputToWorkload(data, info, inputTensorInfo1, inputHandle1.get());
- AddInputToWorkload(data, info, inputTensorInfo2, inputHandle2.get());
- AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
-
- data.m_ViewOrigins.push_back(window1);
- data.m_ViewOrigins.push_back(window2);
-
- std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateConcat(data, info);
-
- inputHandle1->Allocate();
- inputHandle2->Allocate();
- outputHandle->Allocate();
-
- CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]);
- CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]);
-
- workload->PostAllocationConfigure();
- workload->Execute();
-
- CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get());
-
- return ret;
-}
-
-LayerTestResult<float, 4> BatchNormTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- // BatchSize: 1
- // Channels: 2
- // Height: 3
- // Width: 2
-
- const armnn::TensorShape inputOutputShape{ 1, 2, 3, 2 };
- std::vector<float> inputValues
- {
- // Batch 0, Channel 0, Height (3) x Width (2)
- 1.f, 4.f,
- 4.f, 2.f,
- 1.f, 6.f,
-
- // Batch 0, Channel 1, Height (3) x Width (2)
- 1.f, 1.f,
- 4.f, 1.f,
- -2.f, 4.f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Channel 0, Height (3) x Width (2)
- 1.f, 4.f,
- 4.f, 2.f,
- 1.f, 6.f,
-
- // Batch 0, Channel 1, Height (3) x Width (2)
- 3.f, 3.f,
- 4.f, 3.f,
- 2.f, 4.f
- };
-
- return BatchNormTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager,
- inputOutputShape, inputValues, expectedOutputValues,
- 0.f, 0, armnn::DataLayout::NCHW);
-}
-
-LayerTestResult<float, 4> BatchNormNhwcTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- // BatchSize: 1
- // Height: 3
- // Width: 2
- // Channels: 2
-
- const armnn::TensorShape inputOutputShape{ 1, 3, 2, 2 };
- std::vector<float> inputValues
- {
- // Batch 0, Height 0, Width (2) x Channel (2)
- 1.f, 1.f,
- 4.f, 1.f,
-
- // Batch 0, Height 1, Width (2) x Channel (2)
- 4.f, 4.f,
- 2.f, 1.f,
-
- // Batch 0, Height 2, Width (2) x Channel (2)
- 1.f, -2.f,
- 6.f, 4.f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Height 0, Width (2) x Channel (2)
- 1.f, 3.f,
- 4.f, 3.f,
-
- // Batch 0, Height 1, Width (2) x Channel (2)
- 4.f, 4.f,
- 2.f, 3.f,
-
- // Batch 0, Height 2, Width (2) x Channel (2)
- 1.f, 2.f,
- 6.f, 4.f
- };
-
- return BatchNormTestImpl<armnn::DataType::Float32>(
- workloadFactory, memoryManager,
- inputOutputShape, inputValues, expectedOutputValues,
- 0.f, 0, armnn::DataLayout::NHWC);
-}
-
-LayerTestResult<uint8_t, 4> BatchNormUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- // BatchSize: 1
- // Channels: 2
- // Height: 3
- // Width: 2
-
- const armnn::TensorShape inputOutputShape{ 1, 2, 3, 2 };
- std::vector<float> inputValues
- {
- // Batch 0, Channel 0, Height (3) x Width (2)
- 1.f, 4.f,
- 4.f, 2.f,
- 1.f, 6.f,
-
- // Batch 0, Channel 1, Height (3) x Width (2)
- 1.f, 1.f,
- 4.f, 1.f,
- -2.f, 4.f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Channel 0, Height (3) x Width (2)
- 1.f, 4.f,
- 4.f, 2.f,
- 1.f, 6.f,
-
- // Batch 0, Channel 1, Height (3) x Width (2)
- 3.f, 3.f,
- 4.f, 3.f,
- 2.f, 4.f
- };
-
- return BatchNormTestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager,
- inputOutputShape, inputValues, expectedOutputValues,
- 1.f/20.f, 50, armnn::DataLayout::NCHW);
-}
-
-LayerTestResult<uint8_t, 4> BatchNormUint8NhwcTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- // BatchSize: 1
- // Height: 3
- // Width: 2
- // Channels: 2
-
- const armnn::TensorShape inputOutputShape{ 1, 3, 2, 2 };
- std::vector<float> inputValues
- {
- // Batch 0, Height 0, Width (2) x Channel (2)
- 1.f, 1.f,
- 4.f, 1.f,
-
- // Batch 0, Height 1, Width (2) x Channel (2)
- 4.f, 4.f,
- 2.f, 1.f,
-
- // Batch 0, Height 2, Width (2) x Channel (2)
- 1.f, -2.f,
- 6.f, 4.f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Height 0, Width (2) x Channel (2)
- 1.f, 3.f,
- 4.f, 3.f,
-
- // Batch 0, Height 1, Width (2) x Channel (2)
- 4.f, 4.f,
- 2.f, 3.f,
-
- // Batch 0, Height 2, Width (2) x Channel (2)
- 1.f, 2.f,
- 6.f, 4.f
- };
-
- return BatchNormTestImpl<armnn::DataType::QuantisedAsymm8>
- (workloadFactory, memoryManager,
- inputOutputShape, inputValues, expectedOutputValues,
- 1.f/20.f, 50, armnn::DataLayout::NHWC);
-}
-
-LayerTestResult<int16_t, 4> BatchNormInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- // BatchSize: 1
- // Channels: 2
- // Height: 3
- // Width: 2
-
- const armnn::TensorShape inputOutputShape{ 1, 2, 3, 2 };
- std::vector<float> inputValues
- {
- // Batch 0, Channel 0, Height (3) x Width (2)
- 1.f, 4.f,
- 4.f, 2.f,
- 1.f, 6.f,
-
- // Batch 0, Channel 1, Height (3) x Width (2)
- 1.f, 1.f,
- 4.f, 1.f,
- -2.f, 4.f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Channel 0, Height (3) x Width (2)
- 1.f, 4.f,
- 4.f, 2.f,
- 1.f, 6.f,
-
- // Batch 0, Channel 1, Height (3) x Width (2)
- 3.f, 3.f,
- 4.f, 3.f,
- 2.f, 4.f
- };
-
- return BatchNormTestImpl<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager,
- inputOutputShape, inputValues, expectedOutputValues,
- 1.f/20.f, 50, armnn::DataLayout::NCHW);
-}
-
-LayerTestResult<int16_t, 4> BatchNormInt16NhwcTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- // BatchSize: 1
- // Height: 3
- // Width: 2
- // Channels: 2
-
- const armnn::TensorShape inputOutputShape{ 1, 3, 2, 2 };
- std::vector<float> inputValues
- {
- // Batch 0, Height 0, Width (2) x Channel (2)
- 1.f, 1.f,
- 4.f, 1.f,
-
- // Batch 0, Height 1, Width (2) x Channel (2)
- 4.f, 4.f,
- 2.f, 1.f,
-
- // Batch 0, Height 2, Width (2) x Channel (2)
- 1.f, -2.f,
- 6.f, 4.f
- };
- std::vector<float> expectedOutputValues
- {
- // Batch 0, Height 0, Width (2) x Channel (2)
- 1.f, 3.f,
- 4.f, 3.f,
-
- // Batch 0, Height 1, Width (2) x Channel (2)
- 4.f, 4.f,
- 2.f, 3.f,
-
- // Batch 0, Height 2, Width (2) x Channel (2)
- 1.f, 2.f,
- 6.f, 4.f
- };
-
- return BatchNormTestImpl<armnn::DataType::QuantisedSymm16>
- (workloadFactory, memoryManager,
- inputOutputShape, inputValues, expectedOutputValues,
- 1.f/20.f, 50, armnn::DataLayout::NHWC);
-}
-
-LayerTestResult<uint8_t, 4> ConstantUint8CustomQuantizationScaleAndOffsetTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return ConstantTestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 2e-6f, 1);
-}
-
-LayerTestResult<int16_t, 4> ConstantInt16CustomQuantizationScaleAndOffsetTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return ConstantTestImpl<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, 2e-6f, 1);
-}
-
-LayerTestResult<uint8_t, 1> Concatenation1dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation1dTestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 2> Concatenation2dDim0Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation2dDim0TestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 2> Concatenation2dDim1Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation2dDim1TestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 2> Concatenation2dDim0DiffInputDimsUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation2dDim0DiffInputDimsTestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 2> Concatenation2dDim1DiffInputDimsUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation2dDim1DiffInputDimsTestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 3> Concatenation3dDim0Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation3dDim0TestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 3> Concatenation3dDim1Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation3dDim1TestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 3> Concatenation3dDim2Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool useSubtensor)
-{
- return Concatenation3dDim2TestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, useSubtensor, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 3> Concatenation3dDim0DiffInputDimsUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation3dDim0TestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 3> Concatenation3dDim1DiffInputDimsUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation3dDim1DiffInputDimsTestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 3> Concatenation3dDim2DiffInputDimsUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool useSubtensor)
-{
- return Concatenation3dDim2DiffInputDimsTestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, useSubtensor, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 4> Concatenation4dDim0Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDim0TestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 4> Concatenation4dDim1Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDim1TestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 4> Concatenation4dDim2Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDim2TestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 4> Concatenation4dDim3Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, bool useSubtensor)
-{
- return Concatenation4dDim3TestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, 0.5f, -1, useSubtensor);
-}
-
-LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim0Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDiffShapeDim0TestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim1Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDiffShapeDim1TestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim2Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Concatenation4dDiffShapeDim2TestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, 0.5f, -1);
-}
-
-LayerTestResult<uint8_t, 4> Concatenation4dDiffShapeDim3Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool useSubtensor)
-{
- return Concatenation4dDiffShapeDim3TestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, 0.5f, -1, useSubtensor);
-}
-
-LayerTestResult<float, 4> SimpleMaxPooling2dSize2x2Stride2x2Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool forceNoPadding)
-{
- return SimpleMaxPooling2dSize2x2Stride2x2TestCommon<armnn::DataType::Float32>(
- workloadFactory, memoryManager, forceNoPadding);
-}
-
-LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool forceNoPadding)
-{
- return SimpleMaxPooling2dSize2x2Stride2x2TestCommon<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, forceNoPadding, 3.0f, -5);
-}
-
-LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize2x2Stride2x2Int16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool forceNoPadding)
-{
- return SimpleMaxPooling2dSize2x2Stride2x2TestCommon<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager, forceNoPadding);
-}
-
-LayerTestResult<float, 4> SimpleMaxPooling2dSize3x3Stride2x4Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool forceNoPadding)
-{
- return SimpleMaxPooling2dSize3x3Stride2x4TestCommon<armnn::DataType::Float32>(
- workloadFactory, memoryManager, forceNoPadding);
-}
-
-LayerTestResult<uint8_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool forceNoPadding)
-{
- return SimpleMaxPooling2dSize3x3Stride2x4TestCommon<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, forceNoPadding, 0.1f, 128);
-}
-
-LayerTestResult<int16_t, 4> SimpleMaxPooling2dSize3x3Stride2x4Int16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool forceNoPadding)
-{
- return SimpleMaxPooling2dSize3x3Stride2x4TestCommon<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager, forceNoPadding);
-}
-
-LayerTestResult<float, 4> SimpleMaxPooling2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout dataLayout)
-{
- return SimpleMaxPooling2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, dataLayout);
-}
-
-LayerTestResult<uint8_t, 4> SimpleMaxPooling2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout dataLayout)
-{
- return SimpleMaxPooling2dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, dataLayout);
-}
-
-LayerTestResult<int16_t, 4> SimpleMaxPooling2dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout dataLayout)
-{
- return SimpleMaxPooling2dTestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, dataLayout);
-}
-LayerTestResult<float, 4> IgnorePaddingSimpleMaxPooling2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleMaxPooling2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> IgnorePaddingSimpleMaxPooling2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleMaxPooling2dTestCommon<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, 1.0f, -5);
-}
-
-LayerTestResult<int16_t, 4> IgnorePaddingSimpleMaxPooling2dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleMaxPooling2dTestCommon<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> IgnorePaddingMaxPooling2dSize3Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingMaxPooling2dSize3TestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> IgnorePaddingMaxPooling2dSize3Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingMaxPooling2dSize3TestCommon<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, 1.0f, -5);
-}
-
-LayerTestResult<int16_t, 4> IgnorePaddingMaxPooling2dSize3Int16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingMaxPooling2dSize3TestCommon<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> SimpleAveragePooling2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout dataLayout)
-{
- return SimpleAveragePooling2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, dataLayout);
-}
-
-LayerTestResult<uint8_t, 4> SimpleAveragePooling2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout dataLayout)
-{
- return SimpleAveragePooling2dTestCommon<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, dataLayout, 0.5, -1);
-}
-
-LayerTestResult<int16_t, 4> SimpleAveragePooling2dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout dataLayout)
-{
- return SimpleAveragePooling2dTestCommon<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager, dataLayout);
-}
-
-LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3x2Stride2x2Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool forceNoPadding)
-{
- return IgnorePaddingAveragePooling2dSize3x2Stride2x2TestCommon<armnn::DataType::Float32>(
- workloadFactory, memoryManager, forceNoPadding);
-}
-
-LayerTestResult<float, 4> LargeTensorsAveragePooling2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return LargeTensorsAveragePooling2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> LargeTensorsAveragePooling2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return LargeTensorsAveragePooling2dTestCommon<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, 0.5, -1);
-}
-
-LayerTestResult<int16_t, 4> LargeTensorsAveragePooling2dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return LargeTensorsAveragePooling2dTestCommon<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager);
-}
-LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleAveragePooling2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleAveragePooling2dTestCommon<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleAveragePooling2dTestCommon<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleAveragePooling2dNoPaddingTestCommon<armnn::DataType::Float32>(
- workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleAveragePooling2dNoPaddingTestCommon<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> IgnorePaddingSimpleAveragePooling2dNoPaddingInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleAveragePooling2dNoPaddingTestCommon<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> IgnorePaddingAveragePooling2dSize3Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingAveragePooling2dSize3TestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> IgnorePaddingAveragePooling2dSize3Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingAveragePooling2dSize3TestCommon<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> IgnorePaddingAveragePooling2dSize3Int16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingAveragePooling2dSize3TestCommon<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> SimpleL2Pooling2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout dataLayout)
-{
- return SimpleL2Pooling2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, dataLayout);
-}
-
-LayerTestResult<uint8_t, 4> SimpleL2Pooling2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout dataLayout)
-{
- return SimpleL2Pooling2dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager, dataLayout);
-}
-
-LayerTestResult<int16_t, 4> SimpleL2Pooling2dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- const armnn::DataLayout dataLayout)
-{
- return SimpleL2Pooling2dTestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager, dataLayout);
-}
-
-LayerTestResult<float, 4> L2Pooling2dSize3Stride1Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize3Stride1TestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride1Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize3Stride1TestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride1Int16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize3Stride1TestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> L2Pooling2dSize3Stride3Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize3Stride3TestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride3Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize3Stride3TestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride3Int16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize3Stride3TestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-LayerTestResult<float, 4> L2Pooling2dSize3Stride4Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize3Stride4TestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> L2Pooling2dSize3Stride4Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize3Stride4TestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> L2Pooling2dSize3Stride4Int16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize3Stride4TestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> L2Pooling2dSize7Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize7TestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> L2Pooling2dSize7Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize7TestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> L2Pooling2dSize7Int16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize7TestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> L2Pooling2dSize9Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize9TestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> L2Pooling2dSize9Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize9TestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> L2Pooling2dSize9Int16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return L2Pooling2dSize9TestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-LayerTestResult<float, 4> IgnorePaddingSimpleL2Pooling2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleL2Pooling2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> IgnorePaddingSimpleL2Pooling2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleL2Pooling2dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> IgnorePaddingSimpleL2Pooling2dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingSimpleL2Pooling2dTestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> IgnorePaddingL2Pooling2dSize3Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingL2Pooling2dSize3TestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> IgnorePaddingL2Pooling2dSize3Uint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingL2Pooling2dSize3TestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> IgnorePaddingL2Pooling2dSize3Int16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return IgnorePaddingL2Pooling2dSize3TestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> AsymmetricNonSquarePooling2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return AsymmetricNonSquarePooling2dTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> AsymmetricNonSquarePooling2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return AsymmetricNonSquarePooling2dTestCommon<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> AsymmetricNonSquarePooling2dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return AsymmetricNonSquarePooling2dTestCommon<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> ComparePooling2dTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::IWorkloadFactory& refWorkloadFactory,
- armnn::PoolingAlgorithm poolingType)
-{
- return ComparePooling2dTestCommon<armnn::DataType::Float32>(
- workloadFactory, memoryManager, refWorkloadFactory, poolingType);
-}
-
-LayerTestResult<uint8_t, 4> ComparePooling2dUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::IWorkloadFactory& refWorkloadFactory,
- armnn::PoolingAlgorithm poolingType)
-{
- return ComparePooling2dTestCommon<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager, refWorkloadFactory, poolingType, 0.1f, 128);
-}
-
-LayerTestResult<int16_t, 4> ComparePooling2dInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- armnn::IWorkloadFactory& refWorkloadFactory,
- armnn::PoolingAlgorithm poolingType)
-{
- return ComparePooling2dTestCommon<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager, refWorkloadFactory, poolingType);
-}
-
-LayerTestResult<float, 2> FullyConnectedLargeTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
- bool transposeWeights)
-{
- return FullyConnectedLargeTestCommon<armnn::DataType::Float32>(workloadFactory, memoryManager, transposeWeights);
-}
-
-LayerTestResult<float, 4> SpaceToBatchNdSimpleFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdSimpleTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiChannelsTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> SpaceToBatchNdMultiBlockFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiBlockTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> SpaceToBatchNdPaddingFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdPaddingTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdSimpleTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiBlockTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdPaddingTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> SpaceToBatchNdSimpleNHWCFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdSimpleNHWCTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> SpaceToBatchNdMultiChannelsNHWCFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiChannelsNHWCTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> SpaceToBatchNdMultiBlockNHWCFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiBlockNHWCTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> SpaceToBatchNdPaddingNHWCFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdPaddingNHWCTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> SpaceToBatchNdSimpleNHWCUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdSimpleNHWCTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiChannelsNHWCUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiChannelsNHWCTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> SpaceToBatchNdMultiBlockNHWCUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiBlockNHWCTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> SpaceToBatchNdPaddingNHWCUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdPaddingNHWCTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdSimpleTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiChannelsTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiBlockTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdPaddingTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> SpaceToBatchNdSimpleNHWCUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdSimpleNHWCTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> SpaceToBatchNdMultiChannelsNHWCUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiChannelsNHWCTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> SpaceToBatchNdMultiBlockNHWCUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdMultiBlockNHWCTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> SpaceToBatchNdPaddingNHWCUint16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToBatchNdPaddingNHWCTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> SpaceToDepthNHWCAsymmQ8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToDepthSimpleTest1<armnn::DataType::QuantisedAsymm8>(
- workloadFactory,
- memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> SpaceToDepthNCHWAsymmQ8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToDepthSimpleTest1<armnn::DataType::QuantisedAsymm8>(
- workloadFactory,
- memoryManager,
- armnn::DataLayout::NCHW);
-}
-
-LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test1(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToDepthSimpleTest1<armnn::DataType::Float32>(
- workloadFactory,
- memoryManager);
-}
-
-LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test1(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToDepthSimpleTest1<armnn::DataType::Float32>(
- workloadFactory,
- memoryManager,
- armnn::DataLayout::NCHW);
-}
-
-LayerTestResult<float, 4> SpaceToDepthNHWCFloat32Test2(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToDepthSimpleTest2<armnn::DataType::Float32>(
- workloadFactory,
- memoryManager);
-}
-
-LayerTestResult<float, 4> SpaceToDepthNCHWFloat32Test2(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToDepthSimpleTest2<armnn::DataType::Float32>(
- workloadFactory,
- memoryManager,
- armnn::DataLayout::NCHW);
-}
-
-LayerTestResult<int16_t, 4> SpaceToDepthNHWCQSymm16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToDepthSimpleTest2<armnn::DataType::QuantisedSymm16>(
- workloadFactory,
- memoryManager);
-}
-
-LayerTestResult<int16_t, 4> SpaceToDepthNCHWQSymm16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return SpaceToDepthSimpleTest2<armnn::DataType::QuantisedSymm16>(
- workloadFactory,
- memoryManager,
- armnn::DataLayout::NCHW);
-}
-
-namespace {
-
-} // anonymous namespace
-
-LayerTestResult<float, 4> StridedSlice4DFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice4DTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> StridedSlice4DReverseFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice4DReverseTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> StridedSliceSimpleStrideFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSliceSimpleStrideTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> StridedSliceSimpleRangeMaskFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSliceSimpleRangeMaskTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 2> StridedSliceShrinkAxisMaskFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSliceShrinkAxisMaskTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 3> StridedSlice3DFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice3DTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 3> StridedSlice3DReverseFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice3DReverseTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 2> StridedSlice2DFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice2DTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 2> StridedSlice2DReverseFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice2DReverseTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> StridedSlice4DUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice4DTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> StridedSlice4DReverseUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice4DReverseTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> StridedSliceSimpleStrideUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSliceSimpleStrideTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> StridedSliceSimpleRangeMaskUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSliceSimpleRangeMaskTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 2> StridedSliceShrinkAxisMaskUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSliceShrinkAxisMaskTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 3> StridedSlice3DUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice3DTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 3> StridedSlice3DReverseUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice3DReverseTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 2> StridedSlice2DUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice2DTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 2> StridedSlice2DReverseUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice2DReverseTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> StridedSlice4DInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice4DTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> StridedSlice4DReverseInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice4DReverseTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> StridedSliceSimpleStrideInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSliceSimpleStrideTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> StridedSliceSimpleRangeMaskInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSliceSimpleRangeMaskTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 2> StridedSliceShrinkAxisMaskInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSliceShrinkAxisMaskTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 3> StridedSlice3DInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice3DTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 3> StridedSlice3DReverseInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice3DReverseTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 2> StridedSlice2DInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice2DTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 2> StridedSlice2DReverseInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return StridedSlice2DReverseTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> Debug4DFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Debug4DTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 3> Debug3DFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Debug3DTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 2> Debug2DFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Debug2DTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 1> Debug1DFloat32Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Debug1DTest<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> Debug4DUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Debug4DTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 3> Debug3DUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Debug3DTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 2> Debug2DUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Debug2DTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 1> Debug1DUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Debug1DTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 1> Gather1DParamsFloatTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Gather1DParamsTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 1> Gather1DParamsUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Gather1DParamsTestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 1> Gather1DParamsInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return Gather1DParamsTestImpl<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 2> GatherMultiDimParamsFloatTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return GatherMultiDimParamsTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 2> GatherMultiDimParamsUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return GatherMultiDimParamsTestImpl<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 2> GatherMultiDimParamsInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return GatherMultiDimParamsTestImpl<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> GatherMultiDimParamsMultiDimIndicesFloatTest(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return GatherMultiDimParamsMultiDimIndicesTestImpl<armnn::DataType::Float32>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> GatherMultiDimParamsMultiDimIndicesUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return GatherMultiDimParamsMultiDimIndicesTestImpl<armnn::DataType::QuantisedAsymm8>(
- workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> GatherMultiDimParamsMultiDimIndicesInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return GatherMultiDimParamsMultiDimIndicesTestImpl<armnn::DataType::QuantisedSymm16>(
- workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> DequantizeSimpleUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return DequantizeSimpleTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> DequantizeOffsetUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return DequantizeOffsetTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<float, 4> DequantizeSimpleInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return DequantizeSimpleTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> QuantizeSimpleUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return QuantizeSimpleTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<uint8_t, 4> QuantizeClampUint8Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return QuantizeClampTest<armnn::DataType::QuantisedAsymm8>(workloadFactory, memoryManager);
-}
-
-LayerTestResult<int16_t, 4> QuantizeClampInt16Test(
- armnn::IWorkloadFactory& workloadFactory,
- const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
-{
- return QuantizeClampTest<armnn::DataType::QuantisedSymm16>(workloadFactory, memoryManager);
-}