// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include "armnn/ArmNN.hpp" #include "armnn/Tensor.hpp" #include "armnnUtils/Half.hpp" #include #include #include // Layer callables. namespace armnn { class IWorkloadFactory; } template boost::array GetTensorShapeAsArray(const armnn::TensorInfo& tensorInfo) { BOOST_ASSERT_MSG(n == tensorInfo.GetNumDimensions(), "Attempting to construct a shape array of mismatching size"); boost::array shape; for (unsigned int i = 0; i < n; i++) { shape[i] = tensorInfo.GetShape()[i]; } return shape; } template struct LayerTestResult { LayerTestResult(const armnn::TensorInfo& outputInfo) { auto shape( GetTensorShapeAsArray(outputInfo) ); output.resize(shape); outputExpected.resize(shape); supported = true; } boost::multi_array output; boost::multi_array outputExpected; bool supported; }; LayerTestResult SimpleConvolution2d3x5Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult SimpleConvolution2d3x3Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult SimpleConvolution2d3x3NhwcTest(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Convolution2dAsymmetricPaddingTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Convolution1dTest(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult Convolution1dUint8Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult DepthwiseConvolution2dTest(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult DepthwiseConvolution2dDepthNhwcTest(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult DepthwiseConvolution2dDepthMul1Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult DepthwiseConvolution2dAsymmetricTest(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2Test(armnn::IWorkloadFactory& workloadFactory, bool forceNoPadding); LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2Uint8Test(armnn::IWorkloadFactory& workloadFactory, bool forceNoPadding); LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4Test(armnn::IWorkloadFactory& workloadFactory, bool forceNoPadding); LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4Uint8Test(armnn::IWorkloadFactory& workloadFactory, bool forceNoPadding ); LayerTestResult IgnorePaddingSimpleMaxPooling2dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingSimpleMaxPooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingMaxPooling2dSize3Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingMaxPooling2dSize3Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleAveragePooling2dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleAveragePooling2dNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleAveragePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingAveragePooling2dSize3x2Stride2x2Test(armnn::IWorkloadFactory& workloadFactory, bool forceNoPadding); LayerTestResult IgnorePaddingSimpleAveragePooling2dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingSimpleAveragePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingSimpleAveragePooling2dNoPaddingTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingSimpleAveragePooling2dNoPaddingUint8Test( armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingAveragePooling2dSize3Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingAveragePooling2dSize3Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleL2Pooling2dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleL2Pooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Pooling2dSize3Stride1Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Pooling2dSize3Stride1Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Pooling2dSize3Stride3Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Pooling2dSize3Stride3Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Pooling2dSize3Stride4Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Pooling2dSize3Stride4Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Pooling2dSize7Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Pooling2dSize7Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Pooling2dSize9Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Pooling2dSize9Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult LargeTensorsAveragePooling2dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult LargeTensorsAveragePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingSimpleL2Pooling2dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingSimpleL2Pooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingL2Pooling2dSize3Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult IgnorePaddingL2Pooling2dSize3Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult AsymmetricNonSquarePooling2dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult AsymmetricNonSquarePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult ComparePooling2dTest(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory, armnn::PoolingAlgorithm poolingType); LayerTestResult ComparePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory, armnn::PoolingAlgorithm poolingType); LayerTestResult ConstantLinearActivationTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleNormalizationAcrossTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleNormalizationWithinTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleNormalizationAcrossNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleSoftmaxTest(armnn::IWorkloadFactory& workloadFactory, float beta); LayerTestResult SimpleSoftmaxUint8Test(armnn::IWorkloadFactory& workloadFactory, float beta); LayerTestResult SimpleSigmoidTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleReshapeFloat32Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleReshapeUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleFloorTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation1dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation2dDim0Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation2dDim1Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation2dDim0DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation2dDim1DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim0Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim1Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim2Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim0DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim1DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim2DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleSigmoidUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult CompareConvolution2dTest(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory); template LayerTestResult CompareDepthwiseConvolution2dTest(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory); LayerTestResult CompareNormalizationTest(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory, armnn::NormalizationAlgorithmChannel normChannel, armnn::NormalizationAlgorithmMethod normMethod); LayerTestResult CompareSoftmaxTest(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory, float beta); LayerTestResult FullyConnectedFloat32Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled, bool transposeWeights); std::vector> SplitterTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult CopyViaSplitterTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MergerTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult AdditionTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult AdditionBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult AdditionBroadcastTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult CompareAdditionTest(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory); LayerTestResult SubtractionTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SubtractionBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SubtractionBroadcastTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult CompareActivationTest(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory, armnn::ActivationFunction f, unsigned int batchSize); LayerTestResult DivisionTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult DivisionByZeroTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult DivisionBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult DivisionBroadcast1DVectorTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MultiplicationTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MultiplicationBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MultiplicationBroadcast1DVectorTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult CompareMultiplicationTest(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory); LayerTestResult BatchNormTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult BatchNormNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult CompareBatchNormTest(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory); LayerTestResult BoundedReLuUpperAndLowerBoundTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult BoundedReLuUint8UpperAndLowerBoundTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult BoundedReLuUpperBoundOnlyTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult BoundedReLuUint8UpperBoundOnlyTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult CompareBoundedReLuTest(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory, float upperBound, float lowerBound); // Tests that the output should be identical to the input when the output dimensions match the input ones. LayerTestResult ResizeBilinearNopTest(armnn::IWorkloadFactory& workloadFactory); // Tests the behaviour of the resize bilinear operation when rescaling a 2x2 image into a 1x1 image. LayerTestResult SimpleResizeBilinearTest(armnn::IWorkloadFactory& workloadFactory); // Tests the resize bilinear for minification of a square input matrix (also: input dimensions are a // multiple of output dimensions). LayerTestResult ResizeBilinearSqMinTest(armnn::IWorkloadFactory& workloadFactory); // Tests the resize bilinear for minification (output dimensions smaller than input dimensions). LayerTestResult ResizeBilinearMinTest(armnn::IWorkloadFactory& workloadFactory); // Tests the resize bilinear for magnification (output dimensions bigger than input dimensions). LayerTestResult ResizeBilinearMagTest(armnn::IWorkloadFactory& workloadFactory); // Tests that execute Resize Bilinear with NHWC data layout LayerTestResult ResizeBilinearNopNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleResizeBilinearNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult ResizeBilinearSqMinNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult ResizeBilinearMinNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult ResizeBilinearMagNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult BatchNormTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult BatchNormNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult FakeQuantizationTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Normalization1dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Normalization2dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Normalization3dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Normalization4dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Normalization1dNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Normalization2dNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Normalization3dNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult L2Normalization4dNhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult ConstantTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult ConstantTestUint8(armnn::IWorkloadFactory& workloadFactory); LayerTestResult BoundedReLuUint8Test(armnn::IWorkloadFactory& workloadFactory, float upperBound); LayerTestResult BoundedReLuUint8Test(armnn::IWorkloadFactory& workloadFactory, float upperBound, float lowerBound); LayerTestResult FullyConnectedUint8Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); std::vector> SplitterUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult CopyViaSplitterUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MergerUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult AdditionUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult AdditionBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult AdditionBroadcastUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SubtractionUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SubtractionBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SubtractionBroadcastUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult CompareActivationUint8Test(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory, armnn::ActivationFunction f); LayerTestResult CompareSoftmaxUint8Test(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory, float beta); LayerTestResult MultiplicationUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MultiplicationBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MultiplicationBroadcast1DVectorUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult DivisionUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult DivisionBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult DivisionBroadcast1DVectorUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleConvolution2d3x5Uint8Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult SimpleConvolution2d3x3Uint8Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult DepthwiseConvolution2dUint8Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult DepthwiseConvolution2dDepthMul1Uint8Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); LayerTestResult ConstantLinearActivationUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult ResizeBilinearNopUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleResizeBilinearUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult ResizeBilinearSqMinUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult ResizeBilinearMinUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult ResizeBilinearMagUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult BatchNormUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult BatchNormUint8NhwcTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult ConstantUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation1dUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation2dDim0Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation2dDim1Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation2dDim0DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation2dDim1DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim0Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim1Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim2Uint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim0DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim1DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult Concatenation3dDim2DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult FullyConnectedLargeTest(armnn::IWorkloadFactory& workloadFactory, bool transposeWeights); LayerTestResult SimplePermuteFloat32Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimplePermuteUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult PadUint82dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult PadUint83dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult PadUint84dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult PadFloat322dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult PadFloat323dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult PadFloat324dTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult PermuteFloat32ValueSet1Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult PermuteFloat32ValueSet2Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult PermuteFloat32ValueSet3Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest (armnn::IWorkloadFactory& workloadFactory); LayerTestResult LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleConvertFp16ToFp32Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult SimpleConvertFp32ToFp16Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanUint8SimpleTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanUint8SimpleAxisTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanUint8KeepDimsTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanUint8MultipleDimsTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanVtsUint8Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanFloatSimpleTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanFloatSimpleAxisTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanFloatKeepDimsTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanFloatMultipleDimsTest(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanVtsFloat1Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult MeanVtsFloat2Test(armnn::IWorkloadFactory& workloadFactory); LayerTestResult AdditionAfterMaxPoolTest(armnn::IWorkloadFactory& workloadFactory);