From 7af00da9068c71ae6f66eaa488048feea62e7aa9 Mon Sep 17 00:00:00 2001 From: jimfly01 Date: Wed, 31 Oct 2018 14:43:53 +0000 Subject: IVGCVSW-2074: Updated CompareDepthwiseConvolution2dTest for NHWC Change-Id: Ib0568024b4f43ae17e6c75ac35d31cf103ce3482 --- src/backends/cl/test/ClLayerTests.cpp | 15 ++++++++++-- src/backends/neon/test/NeonLayerTests.cpp | 15 ++++++++++-- src/backends/test/Conv2dTestImpl.hpp | 38 +++++++++++++++++++++++-------- src/backends/test/LayerTests.cpp | 9 ++++---- src/backends/test/LayerTests.hpp | 3 ++- 5 files changed, 62 insertions(+), 18 deletions(-) diff --git a/src/backends/cl/test/ClLayerTests.cpp b/src/backends/cl/test/ClLayerTests.cpp index 198bddd1e4..f2a28ec06e 100755 --- a/src/backends/cl/test/ClLayerTests.cpp +++ b/src/backends/cl/test/ClLayerTests.cpp @@ -314,8 +314,19 @@ ARMNN_AUTO_TEST_CASE(MeanVtsFloat3, MeanVtsFloat3Test) ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareConv2dWithReference, CompareConvolution2dTest) -ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceFloat32, CompareDepthwiseConvolution2dTest) -ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceUint8, CompareDepthwiseConvolution2dTest) +ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceFloat32, + CompareDepthwiseConvolution2dTest, + armnn::DataLayout::NCHW) +ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceUint8, + CompareDepthwiseConvolution2dTest, + armnn::DataLayout::NCHW) + +ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceFloat32Nhwc, + CompareDepthwiseConvolution2dTest, + armnn::DataLayout::NHWC) +ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceUint8Nhwc, + CompareDepthwiseConvolution2dTest, + armnn::DataLayout::NHWC) ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareNormalizationWithinWithReference, CompareNormalizationTest, armnn::NormalizationAlgorithmChannel::Within, diff --git a/src/backends/neon/test/NeonLayerTests.cpp b/src/backends/neon/test/NeonLayerTests.cpp index d242245ba0..8fda825618 100644 --- a/src/backends/neon/test/NeonLayerTests.cpp +++ b/src/backends/neon/test/NeonLayerTests.cpp @@ -439,8 +439,19 @@ ARMNN_AUTO_TEST_CASE(SimpleNormalizationAcrossNhwc, SimpleNormalizationAcrossNhw ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareConv2dWithReference, CompareConvolution2dTest) -ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceFloat32, CompareDepthwiseConvolution2dTest) -ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceUint8, CompareDepthwiseConvolution2dTest) +ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceFloat32, + CompareDepthwiseConvolution2dTest, + armnn::DataLayout::NCHW) +ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceUint8, + CompareDepthwiseConvolution2dTest, + armnn::DataLayout::NCHW) + +ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceFloat32Nhwc, + CompareDepthwiseConvolution2dTest, + armnn::DataLayout::NHWC) +ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareDepthwiseConv2dWithReferenceUint8Nhwc, + CompareDepthwiseConvolution2dTest, + armnn::DataLayout::NHWC) ARMNN_COMPARE_REF_AUTO_TEST_CASE(CompareNormalizationWithinWithReference, CompareNormalizationTest, armnn::NormalizationAlgorithmChannel::Within, diff --git a/src/backends/test/Conv2dTestImpl.hpp b/src/backends/test/Conv2dTestImpl.hpp index ce3e435d1a..9bb36fb344 100755 --- a/src/backends/test/Conv2dTestImpl.hpp +++ b/src/backends/test/Conv2dTestImpl.hpp @@ -1095,7 +1095,8 @@ LayerTestResult CompareConvolution2dTestImpl(armnn::IWorkloadFactory& workl template LayerTestResult CompareDepthwiseConvolution2dTestImpl(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory) + armnn::IWorkloadFactory& refWorkloadFactory, + const armnn::DataLayoutIndexed& layout) { unsigned int inputHeight = 8; unsigned int inputWidth = 16; @@ -1121,19 +1122,37 @@ LayerTestResult CompareDepthwiseConvolution2dTestImpl(armnn::IWorkloadFact armnn::TensorInfo kernelDesc; armnn::TensorInfo biasDesc; - unsigned int inputShape[] = { inputNum, inputChannels, inputHeight, inputWidth }; - unsigned int outputShape[] = { outputNum, outputChannels, outputHeight, outputWidth }; - unsigned int kernelShape[] = { channelMultiplier, inputChannels, kernelHeight, kernelWidth }; - unsigned int biasShape[] = { outputChannels }; + + std::vector inputShape; + std::vector outputShape; + std::vector kernelShape; + std::vector biasShape= { outputChannels }; + switch (layout.GetDataLayout()) + { + case armnn::DataLayout::NCHW: + inputShape = { inputNum, inputChannels, inputHeight, inputWidth }; + outputShape = { outputNum, outputChannels, outputHeight, outputWidth }; + kernelShape = { channelMultiplier, inputChannels, kernelHeight, kernelWidth }; + break; + case armnn::DataLayout ::NHWC: + inputShape = { inputNum, inputHeight, inputWidth, inputChannels }; + outputShape = { outputNum, outputHeight, outputWidth, outputChannels }; + kernelShape = { channelMultiplier, kernelHeight, kernelWidth, inputChannels }; + break; + default: + throw armnn::InvalidArgumentException("unknown data layout [" + + std::to_string(static_cast(layout.GetDataLayout())) + "]"); + } float inputsQScale = armnn::IsQuantizedType() ? 1.0f : 0; float outputQScale = armnn::IsQuantizedType() ? 2.0f : 0; int32_t qOffset = 0; - inputTensorInfo = armnn::TensorInfo(4, inputShape, armnn::GetDataType(), inputsQScale, qOffset); - outputTensorInfo = armnn::TensorInfo(4, outputShape, armnn::GetDataType(), outputQScale, qOffset); - kernelDesc = armnn::TensorInfo(4, kernelShape, armnn::GetDataType(), inputsQScale, qOffset); - biasDesc = armnn::TensorInfo(1, biasShape, armnn::GetBiasDataType(armnn::GetDataType()), inputsQScale, qOffset); + inputTensorInfo = armnn::TensorInfo(4, inputShape.data(), armnn::GetDataType(), inputsQScale, qOffset); + outputTensorInfo = armnn::TensorInfo(4, outputShape.data(), armnn::GetDataType(), outputQScale, qOffset); + kernelDesc = armnn::TensorInfo(4, kernelShape.data(), armnn::GetDataType(), inputsQScale, qOffset); + biasDesc = armnn::TensorInfo( + 1, biasShape.data(), armnn::GetBiasDataType(armnn::GetDataType()), inputsQScale, qOffset); LayerTestResult ret(outputTensorInfo); @@ -1164,6 +1183,7 @@ LayerTestResult CompareDepthwiseConvolution2dTestImpl(armnn::IWorkloadFact data.m_Parameters.m_PadTop = padY; data.m_Parameters.m_PadBottom = padY; data.m_Parameters.m_BiasEnabled = true; + data.m_Parameters.m_DataLayout = layout.GetDataLayout(); std::unique_ptr outputHandleRef = refWorkloadFactory.CreateTensorHandle(outputTensorInfo); std::unique_ptr inputHandleRef = refWorkloadFactory.CreateTensorHandle(inputTensorInfo); diff --git a/src/backends/test/LayerTests.cpp b/src/backends/test/LayerTests.cpp index abe3704a17..49c6d30b6d 100755 --- a/src/backends/test/LayerTests.cpp +++ b/src/backends/test/LayerTests.cpp @@ -683,15 +683,16 @@ LayerTestResult CompareConvolution2dTest(armnn::IWorkloadFactory& workl template LayerTestResult CompareDepthwiseConvolution2dTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory) + armnn::IWorkloadFactory& refWorkloadFactory, + const armnn::DataLayoutIndexed& layout) { - return CompareDepthwiseConvolution2dTestImpl(workloadFactory, refWorkloadFactory); + return CompareDepthwiseConvolution2dTestImpl(workloadFactory, refWorkloadFactory, layout); } template LayerTestResult CompareDepthwiseConvolution2dTest( - armnn::IWorkloadFactory&, armnn::IWorkloadFactory&); + armnn::IWorkloadFactory&, armnn::IWorkloadFactory&, const armnn::DataLayoutIndexed&); template LayerTestResult CompareDepthwiseConvolution2dTest( - armnn::IWorkloadFactory&, armnn::IWorkloadFactory&); + armnn::IWorkloadFactory&, armnn::IWorkloadFactory&, const armnn::DataLayoutIndexed&); LayerTestResult SimpleNormalizationAcrossTest(armnn::IWorkloadFactory& workloadFactory) { diff --git a/src/backends/test/LayerTests.hpp b/src/backends/test/LayerTests.hpp index 392d3bf34e..006425ae5f 100644 --- a/src/backends/test/LayerTests.hpp +++ b/src/backends/test/LayerTests.hpp @@ -187,7 +187,8 @@ LayerTestResult CompareConvolution2dTest(armnn::IWorkloadFactory& work template LayerTestResult CompareDepthwiseConvolution2dTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory); + armnn::IWorkloadFactory& refWorkloadFactory, + const armnn::DataLayoutIndexed& layout); LayerTestResult CompareNormalizationTest(armnn::IWorkloadFactory& workloadFactory, armnn::IWorkloadFactory& refWorkloadFactory, -- cgit v1.2.1