ArmNN
 20.05
DequantizeTestImpl.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "DequantizeTestImpl.hpp"
7 
8 #include <ResolveType.hpp>
9 
10 
13 
14 #include <test/TensorHelpers.hpp>
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  boost::multi_array<T, Dim> input = MakeTensor<T, Dim>(inputTensorInfo, inputData);
31 
32  LayerTestResult<T1, Dim> ret(outputTensorInfo);
33  ret.outputExpected = MakeTensor<T1, Dim>(outputTensorInfo, expectedOutputData);
34 
35  std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
36  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.CreateDequantize(descriptor, info);
43 
44  inputHandle->Allocate();
45  outputHandle->Allocate();
46 
47  CopyDataToITensorHandle(inputHandle.get(), input.data());
48 
49  ExecuteWorkload(*workload, memoryManager);
50 
51  CopyDataFromITensorHandle(ret.output.data(), outputHandle.get());
52 
53  return ret;
54 }
55 
56 template <armnn::DataType ArmnnInputType,
58  typename OutType=armnn::ResolveType<ArmnnOutputType>>
59 LayerTestResult<OutType, 4> DequantizeSimpleTest(
60  armnn::IWorkloadFactory& workloadFactory,
62 {
64 
66 
67  const armnn::TensorInfo inputTensorInfo({1, 2, 2, 3}, ArmnnInputType, 0.5f, 0);
68  const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, ArmnnOutputType);
69 
70  std::vector<T> inputData = std::vector<T>(
71  {
72  2, 4, 6,
73  8, 10, 12,
74  14, 16, 18,
75  20, 22, 24,
76  });
77 
78  std::vector<OutType> expectedOutputData;
79  for (OutType i = OutType(1); i <= OutType(12); ++i)
80  {
81  expectedOutputData.push_back(i);
82  }
83 
84  return DequantizeTestImpl<T, 4, OutType>(workloadFactory,
85  memoryManager,
86  inputTensorInfo,
87  outputTensorInfo,
88  inputData,
89  expectedOutputData,
90  desc);
91 }
92 
93 template <armnn::DataType ArmnnInputType>
94 LayerTestResult<float, 4> DequantizeOffsetTest(
95  armnn::IWorkloadFactory& workloadFactory,
97 {
99 
101 
102  const armnn::TensorInfo inputTensorInfo({1, 2, 2, 3}, ArmnnInputType, 0.5f, 1);
103  const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, armnn::DataType::Float32);
104 
105  std::vector<T> inputData = std::vector<T>(
106  {
107  3, 5, 7,
108  9, 11, 13,
109  15, 17, 19,
110  21, 23, 25,
111  });
112 
113  std::vector<float> expectedOutputData = std::vector<float>(
114  {
115  1.0f, 2.0f, 3.0f,
116  4.0f, 5.0f, 6.0f,
117  7.0f, 8.0f, 9.0f,
118  10.0f, 11.0f, 12.0f,
119  });
120 
121  return DequantizeTestImpl<T, 4>(workloadFactory,
122  memoryManager,
123  inputTensorInfo,
124  outputTensorInfo,
125  inputData,
126  expectedOutputData,
127  desc);
128 }
129 
130 } // anonymous namespace
131 
133  armnn::IWorkloadFactory& workloadFactory,
135 {
136  return DequantizeSimpleTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
137 }
138 
140  armnn::IWorkloadFactory& workloadFactory,
142 {
143  return DequantizeOffsetTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
144 }
145 
147  armnn::IWorkloadFactory& workloadFactory,
149 {
150  return DequantizeSimpleTest<armnn::DataType::QAsymmS8>(workloadFactory, memoryManager);
151 }
152 
154  armnn::IWorkloadFactory& workloadFactory,
156 {
157  return DequantizeOffsetTest<armnn::DataType::QAsymmS8>(workloadFactory, memoryManager);
158 }
159 
161  armnn::IWorkloadFactory& workloadFactory,
163 {
164  return DequantizeSimpleTest<armnn::DataType::QSymmS8>(workloadFactory, memoryManager);
165 }
166 
168  armnn::IWorkloadFactory& workloadFactory,
170 {
171  return DequantizeSimpleTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
172 }
173 
175  armnn::IWorkloadFactory& workloadFactory,
177 {
178  return DequantizeSimpleTest<armnn::DataType::QAsymmU8, armnn::DataType::Float16>(workloadFactory,
179  memoryManager);
180 }
181 
183  armnn::IWorkloadFactory& workloadFactory,
185 {
186  return DequantizeSimpleTest<armnn::DataType::QSymmS8, armnn::DataType::Float16>(workloadFactory, memoryManager);
187 }
188 
190  armnn::IWorkloadFactory& workloadFactory,
192 {
193  return DequantizeSimpleTest<armnn::DataType::QSymmS16, armnn::DataType::Float16>(workloadFactory,
194  memoryManager);
195 }
LayerTestResult< float, 4 > DequantizeOffsetAsymmInt8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
typename ResolveTypeImpl< DT >::Type ResolveType
Definition: ResolveType.hpp:73
void IgnoreUnused(Ts &&...)
LayerTestResult< armnn::Half, 4 > DequantizeSimpleUint8ToFp16Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
DataType
Definition: Types.hpp:32
LayerTestResult< float, 4 > DequantizeSimpleUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
LayerTestResult< float, 4 > DequantizeOffsetUint8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
LayerTestResult< float, 4 > DequantizeSimpleAsymmInt8Test(armnn::IWorkloadFactory &workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr &memoryManager)
void CopyDataFromITensorHandle(void *memory, const armnn::ITensorHandle *tensorHandle)
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)
Contains information about inputs and outputs to 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)
void CopyDataToITensorHandle(armnn::ITensorHandle *tensorHandle, const void *memory)
virtual std::unique_ptr< IWorkload > CreateDequantize(const DequantizeQueueDescriptor &descriptor, const WorkloadInfo &info) const