blob: f60b42cae518809b19554d64951b7ef3ffcc4ae4 [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 boost::multi_array<T, Dim> input = MakeTensor<T, Dim>(inputTensorInfo, inputData);
31
Jan Eilersf7107932019-11-01 11:09:36 +000032 LayerTestResult<T1, Dim> ret(outputTensorInfo);
33 ret.outputExpected = MakeTensor<T1, Dim>(outputTensorInfo, expectedOutputData);
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000034
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010035 ARMNN_NO_DEPRECATE_WARN_BEGIN
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000036 std::unique_ptr<armnn::ITensorHandle> inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo);
37 std::unique_ptr<armnn::ITensorHandle> outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo);
Teresa Charlinfbf0e5b2020-08-17 01:01:06 +010038 ARMNN_NO_DEPRECATE_WARN_END
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000039
40 armnn::WorkloadInfo info;
41 AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get());
42 AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get());
43
44 std::unique_ptr<armnn::IWorkload> workload = workloadFactory.CreateDequantize(descriptor, info);
45
46 inputHandle->Allocate();
47 outputHandle->Allocate();
48
49 CopyDataToITensorHandle(inputHandle.get(), input.data());
50
51 ExecuteWorkload(*workload, memoryManager);
52
53 CopyDataFromITensorHandle(ret.output.data(), outputHandle.get());
54
55 return ret;
56}
57
Jan Eilersf7107932019-11-01 11:09:36 +000058template <armnn::DataType ArmnnInputType,
59 armnn::DataType ArmnnOutputType=armnn::DataType::Float32,
60 typename OutType=armnn::ResolveType<ArmnnOutputType>>
61LayerTestResult<OutType, 4> DequantizeSimpleTest(
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +000062 armnn::IWorkloadFactory& workloadFactory,
63 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
64{
65 using T = armnn::ResolveType<ArmnnInputType>;
66
67 armnn::DequantizeQueueDescriptor desc;
68
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010069 const armnn::TensorInfo inputTensorInfo({1, 2, 2, 3}, ArmnnInputType, 0.5f, 0);
Jan Eilersf7107932019-11-01 11:09:36 +000070 const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, ArmnnOutputType);
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010071
72 std::vector<T> inputData = std::vector<T>(
73 {
74 2, 4, 6,
75 8, 10, 12,
76 14, 16, 18,
77 20, 22, 24,
78 });
79
Jan Eilersf7107932019-11-01 11:09:36 +000080 std::vector<OutType> expectedOutputData;
81 for (OutType i = OutType(1); i <= OutType(12); ++i)
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010082 {
Jan Eilersf7107932019-11-01 11:09:36 +000083 expectedOutputData.push_back(i);
84 }
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010085
Jan Eilersf7107932019-11-01 11:09:36 +000086 return DequantizeTestImpl<T, 4, OutType>(workloadFactory,
87 memoryManager,
88 inputTensorInfo,
89 outputTensorInfo,
90 inputData,
91 expectedOutputData,
92 desc);
Nattapat Chaimanowongafa4e3a2019-04-02 11:41:45 +010093}
94
95template <armnn::DataType ArmnnInputType>
96LayerTestResult<float, 4> DequantizeOffsetTest(
97 armnn::IWorkloadFactory& workloadFactory,
98 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
99{
100 using T = armnn::ResolveType<ArmnnInputType>;
101
102 armnn::DequantizeQueueDescriptor desc;
103
Nattapat Chaimanowong8a54ac02019-03-29 15:25:04 +0000104 const armnn::TensorInfo inputTensorInfo({1, 2, 2, 3}, ArmnnInputType, 0.5f, 1);
105 const armnn::TensorInfo outputTensorInfo({1, 2, 2, 3}, armnn::DataType::Float32);
106
107 std::vector<T> inputData = std::vector<T>(
108 {
109 3, 5, 7,
110 9, 11, 13,
111 15, 17, 19,
112 21, 23, 25,
113 });
114
115 std::vector<float> expectedOutputData = std::vector<float>(
116 {
117 1.0f, 2.0f, 3.0f,
118 4.0f, 5.0f, 6.0f,
119 7.0f, 8.0f, 9.0f,
120 10.0f, 11.0f, 12.0f,
121 });
122
123 return DequantizeTestImpl<T, 4>(workloadFactory,
124 memoryManager,
125 inputTensorInfo,
126 outputTensorInfo,
127 inputData,
128 expectedOutputData,
129 desc);
130}
131
132} // anonymous namespace
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100133
134LayerTestResult<float, 4> DequantizeSimpleUint8Test(
135 armnn::IWorkloadFactory& workloadFactory,
136 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
137{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000138 return DequantizeSimpleTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100139}
140
141LayerTestResult<float, 4> DequantizeOffsetUint8Test(
142 armnn::IWorkloadFactory& workloadFactory,
143 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
144{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000145 return DequantizeOffsetTest<armnn::DataType::QAsymmU8>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100146}
147
Ryan OShea9add1202020-02-07 10:06:33 +0000148LayerTestResult<float, 4> DequantizeSimpleAsymmInt8Test(
149 armnn::IWorkloadFactory& workloadFactory,
150 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
151{
152 return DequantizeSimpleTest<armnn::DataType::QAsymmS8>(workloadFactory, memoryManager);
153}
154
155LayerTestResult<float, 4> DequantizeOffsetAsymmInt8Test(
156 armnn::IWorkloadFactory& workloadFactory,
157 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
158{
159 return DequantizeOffsetTest<armnn::DataType::QAsymmS8>(workloadFactory, memoryManager);
160}
161
Finn Williamsfd271062019-12-04 14:27:27 +0000162LayerTestResult<float, 4> DequantizeSimpleInt8Test(
163 armnn::IWorkloadFactory& workloadFactory,
164 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
165{
166 return DequantizeSimpleTest<armnn::DataType::QSymmS8>(workloadFactory, memoryManager);
167}
168
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100169LayerTestResult<float, 4> DequantizeSimpleInt16Test(
170 armnn::IWorkloadFactory& workloadFactory,
171 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
172{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000173 return DequantizeSimpleTest<armnn::DataType::QSymmS16>(workloadFactory, memoryManager);
Aron Virginas-Tar00d306e2019-08-28 18:08:46 +0100174}
Jan Eilersf7107932019-11-01 11:09:36 +0000175
176LayerTestResult<armnn::Half, 4> DequantizeSimpleUint8ToFp16Test(
177 armnn::IWorkloadFactory& workloadFactory,
178 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
179{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000180 return DequantizeSimpleTest<armnn::DataType::QAsymmU8, armnn::DataType::Float16>(workloadFactory,
Jan Eilersf7107932019-11-01 11:09:36 +0000181 memoryManager);
182}
183
Finn Williamsfd271062019-12-04 14:27:27 +0000184LayerTestResult<armnn::Half, 4> DequantizeSimpleInt8ToFp16Test(
185 armnn::IWorkloadFactory& workloadFactory,
186 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
187{
188 return DequantizeSimpleTest<armnn::DataType::QSymmS8, armnn::DataType::Float16>(workloadFactory, memoryManager);
189}
190
Jan Eilersf7107932019-11-01 11:09:36 +0000191LayerTestResult<armnn::Half, 4> DequantizeSimpleInt16ToFp16Test(
192 armnn::IWorkloadFactory& workloadFactory,
193 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
194{
Derek Lambertif90c56d2020-01-10 17:14:08 +0000195 return DequantizeSimpleTest<armnn::DataType::QSymmS16, armnn::DataType::Float16>(workloadFactory,
Jan Eilersf7107932019-11-01 11:09:36 +0000196 memoryManager);
197}