ArmNN
 20.08
MeanTestImpl.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include "LayerTestResult.hpp"
9 
10 #include <ResolveType.hpp>
11 
14 
15 namespace
16 {
17 
18 template<armnn::DataType ArmnnType, typename T, std::size_t InputDim, std::size_t OutputDim>
19 LayerTestResult<T, OutputDim> MeanTestHelper(
20  armnn::IWorkloadFactory& workloadFactory,
22  const unsigned int* inputShape,
23  const std::vector<float>& inputData,
24  const std::vector<unsigned int>& axis,
25  bool keepDims,
26  const unsigned int* outputShape,
27  const std::vector<float>& outputData,
28  float scale = 1.0f,
29  int32_t offset = 0)
30 {
31  IgnoreUnused(memoryManager);
32 
33  armnn::TensorInfo inputTensorInfo(InputDim, inputShape, ArmnnType);
34  armnn::TensorInfo outputTensorInfo(OutputDim, outputShape, ArmnnType);
35 
36  inputTensorInfo.SetQuantizationScale(scale);
37  inputTensorInfo.SetQuantizationOffset(offset);
38 
39  outputTensorInfo.SetQuantizationScale(scale);
40  outputTensorInfo.SetQuantizationOffset(offset);
41 
42  auto input = MakeTensor<T, InputDim>(inputTensorInfo, ConvertToDataType<ArmnnType>(inputData, inputTensorInfo));
43 
44  LayerTestResult<T, OutputDim> result(outputTensorInfo);
45  result.outputExpected = MakeTensor<T, OutputDim>(
46  outputTensorInfo, ConvertToDataType<ArmnnType>(outputData, outputTensorInfo));
47 
49  std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
50  std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
52 
54  data.m_Parameters.m_Axis = axis;
55  data.m_Parameters.m_KeepDims = keepDims;
57  AddInputToWorkload(data, info, inputTensorInfo, inputHandle.get());
58  AddOutputToWorkload(data, info, outputTensorInfo, outputHandle.get());
59 
60  std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateMean(data, info);
61 
62  inputHandle->Allocate();
63  outputHandle->Allocate();
64 
65  CopyDataToITensorHandle(inputHandle.get(), input.origin());
66 
67  workload->PostAllocationConfigure();
68  workload->Execute();
69 
70  CopyDataFromITensorHandle(result.output.origin(), outputHandle.get());
71 
72  return result;
73 }
74 
75 } // anonymous namespace
76 
77 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
79  armnn::IWorkloadFactory& workloadFactory,
81 {
82  const unsigned int inputShape[] = { 3, 2 };
83  const unsigned int outputShape[] = { 1 };
84 
85  std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
86  std::vector<float> output({ 2.5f });
87 
88  return MeanTestHelper<ArmnnType, T, 2, 1>(
89  workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output);
90 }
91 
92 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
94  armnn::IWorkloadFactory& workloadFactory,
96 {
97  const unsigned int inputShape[] = { 2, 3, 1, 2 };
98  const unsigned int outputShape[] = { 3, 1, 2 };
99 
100  std::vector<float> input({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
101  std::vector<float> output({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f });
102 
103  return MeanTestHelper<ArmnnType, T, 4, 3>(
104  workloadFactory, memoryManager, inputShape, input, { 0 }, false, outputShape, output);
105 }
106 
107 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
109  armnn::IWorkloadFactory& workloadFactory,
111 {
112  const unsigned int inputShape[] = { 1, 1, 3, 2 };
113  const unsigned int outputShape[] = { 1, 1, 1, 2 };
114 
115  std::vector<float> input({ 1.5f, 1.5f, 2.5f, 2.5f, 3.5f, 3.5f });
116  std::vector<float> output({ 2.5f, 2.5f });
117 
118  return MeanTestHelper<ArmnnType, T, 4, 4>(
119  workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output);
120 }
121 
122 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
124  armnn::IWorkloadFactory& workloadFactory,
126 {
127  const unsigned int inputShape[] = { 2, 3, 1, 2 };
128  const unsigned int outputShape[] = { 1, 3, 1, 1 };
129 
130  std::vector<float> input({ 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5f, 1.5f, 2.5f, 3.5f, 4.5f, 5.5f, 6.5 });
131  std::vector<float> output({ 2.0f, 4.0f, 6.0f });
132 
133  return MeanTestHelper<ArmnnType, T, 4, 4>(
134  workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output);
135 }
136 
137 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
139  armnn::IWorkloadFactory& workloadFactory,
141 {
142  const unsigned int inputShape[] = { 4, 3, 2 };
143  const unsigned int outputShape[] = { 2 };
144 
145  std::vector<float> input({ 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,
146  15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
147  std::vector<float> output({ 12.0f, 13.0f });
148 
149  return MeanTestHelper<ArmnnType, T, 3, 1>(
150  workloadFactory, memoryManager, inputShape, input, { 0, 1 }, false, outputShape, output);
151 }
152 
153 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
155  armnn::IWorkloadFactory& workloadFactory,
157 {
158  const unsigned int inputShape[] = { 4, 3, 2 };
159  const unsigned int outputShape[] = { 1, 3, 1 };
160 
161  std::vector<float> input({ 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,
162  15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f });
163  std::vector<float> output({ 10.5f, 12.5f, 14.5f });
164 
165  return MeanTestHelper<ArmnnType, T, 3, 3>(
166  workloadFactory, memoryManager, inputShape, input, { 0, 2 }, true, outputShape, output);
167 }
168 
169 template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
171  armnn::IWorkloadFactory& workloadFactory,
173 {
174  const unsigned int inputShape[] = { 1, 2, 2, 1 };
175  const unsigned int outputShape[] = { 1, 2, 1 };
176 
177  std::vector<float> input({ 1.0f, 2.0f, 3.0f, 4.0f });
178  std::vector<float> output({ 1.5f, 3.5f });
179 
180  return MeanTestHelper<ArmnnType, T, 4, 3>(
181  workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output);
182 }
LayerTestResult< T, 1 > MeanVts1Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
#define ARMNN_NO_DEPRECATE_WARN_BEGIN
Definition: Deprecated.hpp:33
LayerTestResult< T, 3 > MeanSimpleAxisTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 1 > MeanSimpleTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 3 > MeanVts2Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 3 > MeanVts3Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void IgnoreUnused(Ts &&...)
std::vector< unsigned int > m_Axis
Values for the dimensions to reduce.
#define ARMNN_NO_DEPRECATE_WARN_END
Definition: Deprecated.hpp:34
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const =0
virtual std::unique_ptr< IWorkload > CreateMean(const MeanQueueDescriptor &descriptor, const WorkloadInfo &Info) const
Contains information about inputs and outputs to a layer.
LayerTestResult< T, 4 > MeanKeepDimsTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< T, 4 > MeanMultipleDimsTest(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)