blob: 924844d92fb565c8e08e31ad34838d6b2b20a99c [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
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +010011#include <backendsCommon/test/TensorCopyUtils.hpp>
12#include <backendsCommon/test/WorkloadTestUtils.hpp>
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000013
14#include <test/TensorHelpers.hpp>
15
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
42 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateDequantize(descriptor, info);
43
44 inputHandle->Allocate();
45 outputHandle->Allocate();
46
Sadik Armagan483c8112021-06-01 09:24:52 +010047 CopyDataToITensorHandle(inputHandle.get(), inputData.data());
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000048
49 ExecuteWorkload(*workload, memoryManager);
50
Sadik Armagan483c8112021-06-01 09:24:52 +010051 CopyDataFromITensorHandle(actualOutput.data(), outputHandle.get());
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000052
Sadik Armagan483c8112021-06-01 09:24:52 +010053 return LayerTestResult<T1, Dim>(actualOutput,
54 expectedOutputData,
55 outputHandle->GetShape(),
56 outputTensorInfo.GetShape());
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000057}
58
Jan Eilersf7107932019-11-01 11:09:36 +000059template <armnn::DataType ArmnnInputType,
60 armnn::DataType ArmnnOutputType=armnn::DataType::Float32,
61 typename OutType=armnn::ResolveType<ArmnnOutputType>>
62LayerTestResult<OutType, 4> DequantizeSimpleTest(
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000063 armnn::IWorkloadFactory& workloadFactory,
64 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
65{
66 using T = armnn::ResolveType<ArmnnInputType>;
67
68 armnn::DequantizeQueueDescriptor desc;
69
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010070 const armnn::TensorInfo inputTensorInfo({1, 2, 2, 3}, ArmnnInputType, 0.5f, 0);
Jan Eilersf7107932019-11-01 11:09:36 +000071 const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, ArmnnOutputType);
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010072
73 std::vector<T> inputData = std::vector<T>(
74 {
75 2, 4, 6,
76 8, 10, 12,
77 14, 16, 18,
78 20, 22, 24,
79 });
80
Jan Eilersf7107932019-11-01 11:09:36 +000081 std::vector<OutType> expectedOutputData;
82 for (OutType i = OutType(1); i <= OutType(12); ++i)
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010083 {
Jan Eilersf7107932019-11-01 11:09:36 +000084 expectedOutputData.push_back(i);
85 }
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010086
Jan Eilersf7107932019-11-01 11:09:36 +000087 return DequantizeTestImpl<T, 4, OutType>(workloadFactory,
88 memoryManager,
89 inputTensorInfo,
90 outputTensorInfo,
91 inputData,
92 expectedOutputData,
93 desc);
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010094}
95
96template <armnn::DataType ArmnnInputType>
97LayerTestResult<float, 4> DequantizeOffsetTest(
98 armnn::IWorkloadFactory& workloadFactory,
99 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
100{
101 using T = armnn::ResolveType<ArmnnInputType>;
102
103 armnn::DequantizeQueueDescriptor desc;
104
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +0000105 const armnn::TensorInfo inputTensorInfo({1, 2, 2, 3}, ArmnnInputType, 0.5f, 1);
106 const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, armnn::DataType::Float32);
107
108 std::vector<T> inputData = std::vector<T>(
109 {
110 3, 5, 7,
111 9, 11, 13,
112 15, 17, 19,
113 21, 23, 25,
114 });
115
116 std::vector<float> expectedOutputData = std::vector<float>(
117 {
118 1.0f, 2.0f, 3.0f,
119 4.0f, 5.0f, 6.0f,
120 7.0f, 8.0f, 9.0f,
121 10.0f, 11.0f, 12.0f,
122 });
123
124 return DequantizeTestImpl<T, 4>(workloadFactory,
125 memoryManager,
126 inputTensorInfo,
127 outputTensorInfo,
128 inputData,
129 expectedOutputData,
130 desc);
131}
132
133} // anonymous namespace
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100134
135LayerTestResult<float, 4> DequantizeSimpleUint8Test(
136 armnn::IWorkloadFactory& workloadFactory,
137 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
138{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000139 return DequantizeSimpleTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100140}
141
142LayerTestResult<float, 4> DequantizeOffsetUint8Test(
143 armnn::IWorkloadFactory& workloadFactory,
144 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
145{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000146 return DequantizeOffsetTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100147}
148
Ryan OShea9add1202020-02-07 10:06:33 +0000149LayerTestResult<float, 4> DequantizeSimpleAsymmInt8Test(
150 armnn::IWorkloadFactory& workloadFactory,
151 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
152{
153 return DequantizeSimpleTest<armnn::DataType::QAsymmS8>(workloadFactory, memoryManager);
154}
155
156LayerTestResult<float, 4> DequantizeOffsetAsymmInt8Test(
157 armnn::IWorkloadFactory& workloadFactory,
158 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
159{
160 return DequantizeOffsetTest<armnn::DataType::QAsymmS8>(workloadFactory, memoryManager);
161}
162
Finn Williamsfd271062019-12-04 14:27:27 +0000163LayerTestResult<float, 4> DequantizeSimpleInt8Test(
164 armnn::IWorkloadFactory& workloadFactory,
165 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
166{
167 return DequantizeSimpleTest<armnn::DataType::QSymmS8>(workloadFactory, memoryManager);
168}
169
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100170LayerTestResult<float, 4> DequantizeSimpleInt16Test(
171 armnn::IWorkloadFactory& workloadFactory,
172 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
173{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000174 return DequantizeSimpleTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100175}
Jan Eilersf7107932019-11-01 11:09:36 +0000176
177LayerTestResult<armnn::Half, 4> DequantizeSimpleUint8ToFp16Test(
178 armnn::IWorkloadFactory& workloadFactory,
179 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
180{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000181 return DequantizeSimpleTest<armnn::DataType::QAsymmU8, armnn::DataType::Float16>(workloadFactory,
Jan Eilersf7107932019-11-01 11:09:36 +0000182 memoryManager);
183}
184
Finn Williamsfd271062019-12-04 14:27:27 +0000185LayerTestResult<armnn::Half, 4> DequantizeSimpleInt8ToFp16Test(
186 armnn::IWorkloadFactory& workloadFactory,
187 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
188{
189 return DequantizeSimpleTest<armnn::DataType::QSymmS8, armnn::DataType::Float16>(workloadFactory, memoryManager);
190}
191
Jan Eilersf7107932019-11-01 11:09:36 +0000192LayerTestResult<armnn::Half, 4> DequantizeSimpleInt16ToFp16Test(
193 armnn::IWorkloadFactory& workloadFactory,
194 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
195{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000196 return DequantizeSimpleTest<armnn::DataType::QSymmS16, armnn::DataType::Float16>(workloadFactory,
Jan Eilersf7107932019-11-01 11:09:36 +0000197 memoryManager);
198}