ArmNN
 22.02
DequantizeTestImpl.cpp
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 #include "DequantizeTestImpl.hpp"
7 
8 #include <ResolveType.hpp>
9 
10 
13 
15 
16 namespace
17 {
18 
19 template<typename T, std::size_t Dim, typename T1=float>
20 LayerTestResult<T1, Dim> DequantizeTestImpl(
21  armnn::IWorkloadFactory& workloadFactory,
23  const armnn::TensorInfo& inputTensorInfo,
24  const armnn::TensorInfo& outputTensorInfo,
25  const std::vector<T>& inputData,
26  const std::vector<T1>& expectedOutputData,
28 {
29  IgnoreUnused(memoryManager);
30 
31  std::vector<T1> actualOutput(outputTensorInfo.GetNumElements());
32 
34  std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
35  std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
37 
39  AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
40  AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
41 
42  std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateWorkload(armnn::LayerType::Dequantize,
43  descriptor,
44  info);
45 
46  inputHandle->Allocate();
47  outputHandle->Allocate();
48 
49  CopyDataToITensorHandle(inputHandle.get(), inputData.data());
50 
51  ExecuteWorkload(*workload, memoryManager);
52 
53  CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
54 
55  return LayerTestResult<T1, Dim>(actualOutput,
56  expectedOutputData,
57  outputHandle->GetShape(),
58  outputTensorInfo.GetShape());
59 }
60 
61 template <armnn::DataType ArmnnInputType,
63  typename OutType=armnn::ResolveType<ArmnnOutputType>>
64 LayerTestResult<OutType, 4> DequantizeSimpleTest(
65  armnn::IWorkloadFactory& workloadFactory,
67 {
69 
71 
72  const armnn::TensorInfo inputTensorInfo({1, 2, 2, 3}, ArmnnInputType, 0.5f, 0);
73  const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, ArmnnOutputType);
74 
75  std::vector<T> inputData = std::vector<T>(
76  {
77  2, 4, 6,
78  8, 10, 12,
79  14, 16, 18,
80  20, 22, 24,
81  });
82 
83  std::vector<OutType> expectedOutputData;
84  for (OutType i = OutType(1); i <= OutType(12); ++i)
85  {
86  expectedOutputData.push_back(i);
87  }
88 
89  return DequantizeTestImpl<T, 4, OutType>(workloadFactory,
90  memoryManager,
91  inputTensorInfo,
92  outputTensorInfo,
93  inputData,
94  expectedOutputData,
95  desc);
96 }
97 
98 template <armnn::DataType ArmnnInputType>
99 LayerTestResult<float, 4> DequantizeOffsetTest(
100  armnn::IWorkloadFactory& workloadFactory,
102 {
104 
106 
107  const armnn::TensorInfo inputTensorInfo({1, 2, 2, 3}, ArmnnInputType, 0.5f, 1);
108  const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, armnn::DataType::Float32);
109 
110  std::vector<T> inputData = std::vector<T>(
111  {
112  3, 5, 7,
113  9, 11, 13,
114  15, 17, 19,
115  21, 23, 25,
116  });
117 
118  std::vector<float> expectedOutputData = std::vector<float>(
119  {
120  1.0f, 2.0f, 3.0f,
121  4.0f, 5.0f, 6.0f,
122  7.0f, 8.0f, 9.0f,
123  10.0f, 11.0f, 12.0f,
124  });
125 
126  return DequantizeTestImpl<T, 4>(workloadFactory,
127  memoryManager,
128  inputTensorInfo,
129  outputTensorInfo,
130  inputData,
131  expectedOutputData,
132  desc);
133 }
134 
135 } // anonymous namespace
136 
138  armnn::IWorkloadFactory& workloadFactory,
140 {
141  return DequantizeSimpleTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
142 }
143 
145  armnn::IWorkloadFactory& workloadFactory,
147 {
148  return DequantizeOffsetTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
149 }
150 
152  armnn::IWorkloadFactory& workloadFactory,
154 {
155  return DequantizeSimpleTest<armnn::DataType::QAsymmS8>(workloadFactory, memoryManager);
156 }
157 
159  armnn::IWorkloadFactory& workloadFactory,
161 {
162  return DequantizeOffsetTest<armnn::DataType::QAsymmS8>(workloadFactory, memoryManager);
163 }
164 
166  armnn::IWorkloadFactory& workloadFactory,
168 {
169  return DequantizeSimpleTest<armnn::DataType::QSymmS8>(workloadFactory, memoryManager);
170 }
171 
173  armnn::IWorkloadFactory& workloadFactory,
175 {
176  return DequantizeSimpleTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
177 }
178 
180  armnn::IWorkloadFactory& workloadFactory,
182 {
183  return DequantizeSimpleTest<armnn::DataType::QAsymmU8, armnn::DataType::Float16>(workloadFactory,
184  memoryManager);
185 }
186 
188  armnn::IWorkloadFactory& workloadFactory,
190 {
191  return DequantizeSimpleTest<armnn::DataType::QSymmS8, armnn::DataType::Float16>(workloadFactory, memoryManager);
192 }
193 
195  armnn::IWorkloadFactory& workloadFactory,
197 {
198  return DequantizeSimpleTest<armnn::DataType::QSymmS16, armnn::DataType::Float16>(workloadFactory,
199  memoryManager);
200 }
const TensorShape & GetShape() const
Definition: Tensor.hpp:191
#define ARMNN_NO_DEPRECATE_WARN_BEGIN
Definition: Deprecated.hpp:33
LayerTestResult< float, 4 > DequantizeOffsetAsymmInt8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
typename ResolveTypeImpl< DT >::Type ResolveType
Definition: ResolveType.hpp:79
void IgnoreUnused(Ts &&...)
LayerTestResult< armnn::Half, 4 > DequantizeSimpleUint8ToFp16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
DataType
Definition: Types.hpp:35
LayerTestResult< float, 4 > DequantizeSimpleUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
#define ARMNN_NO_DEPRECATE_WARN_END
Definition: Deprecated.hpp:34
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
void CopyDataFromITensorHandle(void *mem, const armnn::ITensorHandle *tensorHandle)
LayerTestResult< float, 4 > DequantizeOffsetUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< float, 4 > DequantizeSimpleAsymmInt8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
virtual std::unique_ptr< ITensorHandle > CreateTensorHandle(const TensorInfo &tensorInfo, const bool IsMemoryManaged=true) const =0
LayerTestResult< armnn::Half, 4 > DequantizeSimpleInt16ToFp16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< armnn::Half, 4 > DequantizeSimpleInt8ToFp16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)
Contains information about TensorInfos of a layer.
LayerTestResult< float, 4 > DequantizeSimpleInt16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< float, 4 > DequantizeSimpleInt8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
virtual std::unique_ptr< IWorkload > CreateWorkload(LayerType type, const QueueDescriptor &descriptor, const WorkloadInfo &info) const
unsigned int GetNumElements() const
Definition: Tensor.hpp:196