blob: 1f67e33d950ccd010d9017205a6b335af887246c [file] [log] [blame]
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00001//
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +01002// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00003// SPDX-License-Identifier: MIT
4//
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00005
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +01006#include "DequantizeTestImpl.hpp"
7
8#include <ResolveType.hpp>
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +00009
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000010
Sadik Armagana097d2a2021-11-24 15:47:28 +000011#include <armnnTestUtils/TensorCopyUtils.hpp>
Colm Donelan0c479742021-12-10 12:43:54 +000012#include <armnnTestUtils/WorkloadTestUtils.hpp>
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000013
Colm Donelanc42a9872022-02-02 16:35:09 +000014#include <armnnTestUtils/TensorHelpers.hpp>
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000015
16namespace
17{
18
Jan Eilersf7107932019-11-01 11:09:36 +000019template<typename T, std::size_t Dim, typename T1=float>
20LayerTestResult<T1, Dim> DequantizeTestImpl(
21 armnn::IWorkloadFactory& workloadFactory,
22 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
23 const armnn::TensorInfo& inputTensorInfo,
24 const armnn::TensorInfo& outputTensorInfo,
25 const std::vector<T>& inputData,
26 const std::vector<T1>& expectedOutputData,
27 armnn::DequantizeQueueDescriptor descriptor)
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000028{
Jan Eilers8eb25602020-03-09 12:13:48 +000029 IgnoreUnused(memoryManager);
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000030
Sadik Armagan483c8112021-06-01 09:24:52 +010031 std::vector<T1> actualOutput(outputTensorInfo.GetNumElements());
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000032
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010033 ARMNN_NO_DEPRECATE_WARN_BEGIN
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000034 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
35 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010036 ARMNN_NO_DEPRECATE_WARN_END
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000037
38 armnn::WorkloadInfo info;
39 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
40 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
41
Teresa Charlin611c7fb2022-01-07 09:47:29 +000042 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateWorkload(armnn::LayerType::Dequantize,
43 descriptor,
44 info);
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000045
46 inputHandle->Allocate();
47 outputHandle->Allocate();
48
Sadik Armagan483c8112021-06-01 09:24:52 +010049 CopyDataToITensorHandle(inputHandle.get(), inputData.data());
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000050
51 ExecuteWorkload(*workload, memoryManager);
52
Sadik Armagan483c8112021-06-01 09:24:52 +010053 CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000054
Sadik Armagan483c8112021-06-01 09:24:52 +010055 return LayerTestResult<T1, Dim>(actualOutput,
56 expectedOutputData,
57 outputHandle->GetShape(),
58 outputTensorInfo.GetShape());
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000059}
60
Jan Eilersf7107932019-11-01 11:09:36 +000061template <armnn::DataType ArmnnInputType,
62 armnn::DataType ArmnnOutputType=armnn::DataType::Float32,
63 typename OutType=armnn::ResolveType<ArmnnOutputType>>
64LayerTestResult<OutType, 4> DequantizeSimpleTest(
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000065 armnn::IWorkloadFactory& workloadFactory,
66 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
67{
68 using T = armnn::ResolveType<ArmnnInputType>;
69
70 armnn::DequantizeQueueDescriptor desc;
71
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010072 const armnn::TensorInfo inputTensorInfo({1, 2, 2, 3}, ArmnnInputType, 0.5f, 0);
Jan Eilersf7107932019-11-01 11:09:36 +000073 const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, ArmnnOutputType);
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010074
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
Jan Eilersf7107932019-11-01 11:09:36 +000083 std::vector<OutType> expectedOutputData;
84 for (OutType i = OutType(1); i <= OutType(12); ++i)
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010085 {
Jan Eilersf7107932019-11-01 11:09:36 +000086 expectedOutputData.push_back(i);
87 }
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010088
Jan Eilersf7107932019-11-01 11:09:36 +000089 return DequantizeTestImpl<T, 4, OutType>(workloadFactory,
90 memoryManager,
91 inputTensorInfo,
92 outputTensorInfo,
93 inputData,
94 expectedOutputData,
95 desc);
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010096}
97
98template <armnn::DataType ArmnnInputType>
99LayerTestResult<float, 4> DequantizeOffsetTest(
100 armnn::IWorkloadFactory& workloadFactory,
101 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
102{
103 using T = armnn::ResolveType<ArmnnInputType>;
104
105 armnn::DequantizeQueueDescriptor desc;
106
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +0000107 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
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100136
137LayerTestResult<float, 4> DequantizeSimpleUint8Test(
138 armnn::IWorkloadFactory& workloadFactory,
139 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
140{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000141 return DequantizeSimpleTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100142}
143
144LayerTestResult<float, 4> DequantizeOffsetUint8Test(
145 armnn::IWorkloadFactory& workloadFactory,
146 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
147{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000148 return DequantizeOffsetTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100149}
150
Ryan OShea9add1202020-02-07 10:06:33 +0000151LayerTestResult<float, 4> DequantizeSimpleAsymmInt8Test(
152 armnn::IWorkloadFactory& workloadFactory,
153 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
154{
155 return DequantizeSimpleTest<armnn::DataType::QAsymmS8>(workloadFactory, memoryManager);
156}
157
158LayerTestResult<float, 4> DequantizeOffsetAsymmInt8Test(
159 armnn::IWorkloadFactory& workloadFactory,
160 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
161{
162 return DequantizeOffsetTest<armnn::DataType::QAsymmS8>(workloadFactory, memoryManager);
163}
164
Finn Williamsfd271062019-12-04 14:27:27 +0000165LayerTestResult<float, 4> DequantizeSimpleInt8Test(
166 armnn::IWorkloadFactory& workloadFactory,
167 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
168{
169 return DequantizeSimpleTest<armnn::DataType::QSymmS8>(workloadFactory, memoryManager);
170}
171
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100172LayerTestResult<float, 4> DequantizeSimpleInt16Test(
173 armnn::IWorkloadFactory& workloadFactory,
174 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
175{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000176 return DequantizeSimpleTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100177}
Jan Eilersf7107932019-11-01 11:09:36 +0000178
179LayerTestResult<armnn::Half, 4> DequantizeSimpleUint8ToFp16Test(
180 armnn::IWorkloadFactory& workloadFactory,
181 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
182{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000183 return DequantizeSimpleTest<armnn::DataType::QAsymmU8, armnn::DataType::Float16>(workloadFactory,
Jan Eilersf7107932019-11-01 11:09:36 +0000184 memoryManager);
185}
186
Finn Williamsfd271062019-12-04 14:27:27 +0000187LayerTestResult<armnn::Half, 4> DequantizeSimpleInt8ToFp16Test(
188 armnn::IWorkloadFactory& workloadFactory,
189 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
190{
191 return DequantizeSimpleTest<armnn::DataType::QSymmS8, armnn::DataType::Float16>(workloadFactory, memoryManager);
192}
193
Jan Eilersf7107932019-11-01 11:09:36 +0000194LayerTestResult<armnn::Half, 4> DequantizeSimpleInt16ToFp16Test(
195 armnn::IWorkloadFactory& workloadFactory,
196 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
197{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000198 return DequantizeSimpleTest<armnn::DataType::QSymmS16, armnn::DataType::Float16>(workloadFactory,
Jan Eilersf7107932019-11-01 11:09:36 +0000199 memoryManager);
200}