aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatteo Martincigh <matteo.martincigh@arm.com>2018-10-18 10:33:23 +0100
committerMatthew Bentham <matthew.bentham@arm.com>2018-10-22 16:57:54 +0100
commita160b245a5c876d3630651e938a7c45ee30645be (patch)
tree0210f6e033a8c1043a0beffe12bf438a0d721302
parente4dfd6ead59e17828f8814f0ecc5fa67f0c72868 (diff)
downloadarmnn-a160b245a5c876d3630651e938a7c45ee30645be.tar.gz
IVGCVSW-2033 Add unit tests for the newly implemented NHWC support in
ref Normalization * Added create workload unit tests for the NHWC data layout Change-Id: Id4813105c027a26e277de64fecea1845fea39fd9
-rw-r--r--src/armnn/test/CreateWorkload.hpp11
-rw-r--r--src/backends/cl/test/ClCreateWorkloadTests.cpp13
-rw-r--r--src/backends/neon/test/NeonCreateWorkloadTests.cpp8
-rw-r--r--src/backends/reference/test/RefCreateWorkloadTests.cpp31
4 files changed, 48 insertions, 15 deletions
diff --git a/src/armnn/test/CreateWorkload.hpp b/src/armnn/test/CreateWorkload.hpp
index f3cf544fa3..51820a425f 100644
--- a/src/armnn/test/CreateWorkload.hpp
+++ b/src/armnn/test/CreateWorkload.hpp
@@ -517,9 +517,16 @@ std::unique_ptr<NormalizationWorkload> CreateNormalizationWorkloadTest(armnn::IW
Layer* const input = graph.AddLayer<InputLayer>(0, "input");
Layer* const output = graph.AddLayer<OutputLayer>(0, "output");
+ TensorShape inputShape = (dataLayout == DataLayout::NCHW) ?
+ TensorShape{ 3, 5, 5, 1 } : TensorShape{ 3, 1, 5, 5 };
+ TensorShape outputShape = (dataLayout == DataLayout::NCHW) ?
+ TensorShape{ 3, 5, 5, 1 } : TensorShape{ 3, 1, 5, 5 };
+
// Connects up.
- Connect(input, layer, TensorInfo({3, 5, 5, 1}, DataType));
- Connect(layer, output, TensorInfo({3, 5, 5, 1}, DataType));
+ armnn::TensorInfo inputTensorInfo(inputShape, DataType);
+ armnn::TensorInfo outputTensorInfo(outputShape, DataType);
+ Connect(input, layer, inputTensorInfo);
+ Connect(layer, output, outputTensorInfo);
CreateTensorHandles(graph, factory);
// Makes the workload and checks it.
diff --git a/src/backends/cl/test/ClCreateWorkloadTests.cpp b/src/backends/cl/test/ClCreateWorkloadTests.cpp
index 526dc68fc5..756b4a603b 100644
--- a/src/backends/cl/test/ClCreateWorkloadTests.cpp
+++ b/src/backends/cl/test/ClCreateWorkloadTests.cpp
@@ -337,17 +337,20 @@ static void ClNormalizationWorkloadTest(DataLayout dataLayout)
{
Graph graph;
ClWorkloadFactory factory;
-
- auto workload = CreateNormalizationWorkloadTest<NormalizationWorkloadType, DataType>
- (factory, graph, dataLayout);
+ auto workload = CreateNormalizationWorkloadTest<NormalizationWorkloadType, DataType>(factory, graph, dataLayout);
// Checks that inputs/outputs are as we expect them (see definition of CreateNormalizationWorkloadTest).
NormalizationQueueDescriptor queueDescriptor = workload->GetData();
auto inputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Inputs[0]);
auto outputHandle = boost::polymorphic_downcast<IClTensorHandle*>(queueDescriptor.m_Outputs[0]);
- BOOST_TEST(CompareIClTensorHandleShape(inputHandle, {3, 5, 5, 1}));
- BOOST_TEST(CompareIClTensorHandleShape(outputHandle, {3, 5, 5, 1}));
+ std::initializer_list<unsigned int> inputShape = (dataLayout == DataLayout::NCHW) ?
+ std::initializer_list<unsigned int>({3, 5, 5, 1}) : std::initializer_list<unsigned int>({3, 1, 5, 5});
+ std::initializer_list<unsigned int> outputShape = (dataLayout == DataLayout::NCHW) ?
+ std::initializer_list<unsigned int>({3, 5, 5, 1}) : std::initializer_list<unsigned int>({3, 1, 5, 5});
+
+ BOOST_TEST(CompareIClTensorHandleShape(inputHandle, inputShape));
+ BOOST_TEST(CompareIClTensorHandleShape(outputHandle, outputShape));
}
BOOST_AUTO_TEST_CASE(CreateNormalizationFloat32NchwWorkload)
diff --git a/src/backends/neon/test/NeonCreateWorkloadTests.cpp b/src/backends/neon/test/NeonCreateWorkloadTests.cpp
index 4b6ab51924..a588a3ecc8 100644
--- a/src/backends/neon/test/NeonCreateWorkloadTests.cpp
+++ b/src/backends/neon/test/NeonCreateWorkloadTests.cpp
@@ -296,8 +296,12 @@ static void NeonCreateNormalizationWorkloadTest(DataLayout dataLayout)
NormalizationQueueDescriptor queueDescriptor = workload->GetData();
auto inputHandle = boost::polymorphic_downcast<INeonTensorHandle*>(queueDescriptor.m_Inputs[0]);
auto outputHandle = boost::polymorphic_downcast<INeonTensorHandle*>(queueDescriptor.m_Outputs[0]);
- BOOST_TEST(TestNeonTensorHandleInfo(inputHandle, TensorInfo({3, 5, 5, 1}, DataType)));
- BOOST_TEST(TestNeonTensorHandleInfo(outputHandle, TensorInfo({3, 5, 5, 1}, DataType)));
+
+ TensorShape inputShape = (dataLayout == DataLayout::NCHW) ? TensorShape{3, 5, 5, 1} : TensorShape{3, 1, 5, 5};
+ TensorShape outputShape = (dataLayout == DataLayout::NCHW) ? TensorShape{3, 5, 5, 1} : TensorShape{3, 1, 5, 5};
+
+ BOOST_TEST(TestNeonTensorHandleInfo(inputHandle, TensorInfo(inputShape, DataType)));
+ BOOST_TEST(TestNeonTensorHandleInfo(outputHandle, TensorInfo(outputShape, DataType)));
}
#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
diff --git a/src/backends/reference/test/RefCreateWorkloadTests.cpp b/src/backends/reference/test/RefCreateWorkloadTests.cpp
index 236267c177..1ec7749168 100644
--- a/src/backends/reference/test/RefCreateWorkloadTests.cpp
+++ b/src/backends/reference/test/RefCreateWorkloadTests.cpp
@@ -231,21 +231,40 @@ BOOST_AUTO_TEST_CASE(CreateFullyConnectedUint8Workload)
}
template <typename NormalizationWorkloadType, armnn::DataType DataType>
-static void RefCreateNormalizationWorkloadTest()
+static void RefCreateNormalizationWorkloadTest(DataLayout dataLayout)
{
Graph graph;
RefWorkloadFactory factory;
- auto workload = CreateNormalizationWorkloadTest<NormalizationWorkloadType, DataType>(factory, graph);
+ auto workload = CreateNormalizationWorkloadTest<NormalizationWorkloadType, DataType>(factory, graph, dataLayout);
+
+ TensorShape inputShape;
+ TensorShape outputShape;
+
+ switch (dataLayout)
+ {
+ case DataLayout::NHWC:
+ inputShape = { 3, 1, 5, 5 };
+ outputShape = { 3, 1, 5, 5 };
+ break;
+ case DataLayout::NCHW:
+ default:
+ inputShape = { 3, 5, 5, 1 };
+ outputShape = { 3, 5, 5, 1 };
+ break;
+ }
// Checks that outputs and inputs are as we expect them (see definition of CreateNormalizationWorkloadTest).
- CheckInputOutput(std::move(workload),
- TensorInfo({3, 5, 5, 1}, DataType),
- TensorInfo({3, 5, 5, 1}, DataType));
+ CheckInputOutput(std::move(workload), TensorInfo(inputShape, DataType), TensorInfo(outputShape, DataType));
}
BOOST_AUTO_TEST_CASE(CreateRefNormalizationNchwWorkload)
{
- RefCreateNormalizationWorkloadTest<RefNormalizationFloat32Workload, armnn::DataType::Float32>();
+ RefCreateNormalizationWorkloadTest<RefNormalizationFloat32Workload, armnn::DataType::Float32>(DataLayout::NCHW);
+}
+
+BOOST_AUTO_TEST_CASE(CreateRefNormalizationNhwcWorkload)
+{
+ RefCreateNormalizationWorkloadTest<RefNormalizationFloat32Workload, armnn::DataType::Float32>(DataLayout::NHWC);
}
template <typename Pooling2dWorkloadType, armnn::DataType DataType>