• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright 2021 The TensorFlow Authors. All Rights Reserved.
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7     http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14 ==============================================================================*/
15 
16 #include <cstdint>
17 #include <functional>
18 #include <memory>
19 #include <random>
20 
21 #include <gtest/gtest.h>
22 #include "tensorflow/lite/delegates/xnnpack/dequantize_tester.h"
23 #include "tensorflow/lite/delegates/xnnpack/xnnpack_delegate.h"
24 
25 namespace tflite {
26 namespace xnnpack {
27 
28 TEST(UnsignedDequantize, 4D) {
29   std::unique_ptr<TfLiteDelegate, decltype(&TfLiteXNNPackDelegateDelete)>
30       xnnpack_delegate(TfLiteXNNPackDelegateCreate(nullptr),
31                        TfLiteXNNPackDelegateDelete);
32 
33   std::random_device random_device;
34   auto rng = std::mt19937(random_device());
35   auto shape_rng =
36       std::bind(std::uniform_int_distribution<int32_t>(2, 5), std::ref(rng));
37   const auto batch = shape_rng();
38   const auto height = shape_rng();
39   const auto width = shape_rng();
40   const auto channels = shape_rng();
41 
42   DequantizeTester()
43       .Unsigned(true)
44       .Shape({batch, height, width, channels})
45       .InputZeroPoint(50)
46       .InputScale(256.0f)
47       .Test(xnnpack_delegate.get());
48 }
49 
50 TEST(UnsignedDequantize, 3D) {
51   std::unique_ptr<TfLiteDelegate, decltype(&TfLiteXNNPackDelegateDelete)>
52       xnnpack_delegate(TfLiteXNNPackDelegateCreate(nullptr),
53                        TfLiteXNNPackDelegateDelete);
54 
55   std::random_device random_device;
56   auto rng = std::mt19937(random_device());
57   auto shape_rng =
58       std::bind(std::uniform_int_distribution<int32_t>(2, 5), std::ref(rng));
59   const auto batch = shape_rng();
60   const auto width = shape_rng();
61   const auto channels = shape_rng();
62 
63   DequantizeTester()
64       .Unsigned(true)
65       .Shape({batch, width, channels})
66       .InputZeroPoint(50)
67       .InputScale(256.0f)
68       .Test(xnnpack_delegate.get());
69 }
70 
71 TEST(UnsignedDequantize, 2D) {
72   std::unique_ptr<TfLiteDelegate, decltype(&TfLiteXNNPackDelegateDelete)>
73       xnnpack_delegate(TfLiteXNNPackDelegateCreate(nullptr),
74                        TfLiteXNNPackDelegateDelete);
75 
76   std::random_device random_device;
77   auto rng = std::mt19937(random_device());
78   auto shape_rng =
79       std::bind(std::uniform_int_distribution<int32_t>(2, 5), std::ref(rng));
80   const auto batch = shape_rng();
81   const auto channels = shape_rng();
82 
83   DequantizeTester()
84       .Unsigned(true)
85       .Shape({batch, channels})
86       .InputZeroPoint(50)
87       .InputScale(256.0f)
88       .Test(xnnpack_delegate.get());
89 }
90 
91 TEST(UnsignedDequantize, 1D) {
92   std::unique_ptr<TfLiteDelegate, decltype(&TfLiteXNNPackDelegateDelete)>
93       xnnpack_delegate(TfLiteXNNPackDelegateCreate(nullptr),
94                        TfLiteXNNPackDelegateDelete);
95 
96   std::random_device random_device;
97   auto rng = std::mt19937(random_device());
98   auto shape_rng =
99       std::bind(std::uniform_int_distribution<int32_t>(2, 5), std::ref(rng));
100   const auto batch = shape_rng();
101 
102   DequantizeTester()
103       .Unsigned(true)
104       .Shape({batch})
105       .InputZeroPoint(50)
106       .InputScale(256.0f)
107       .Test(xnnpack_delegate.get());
108 }
109 
TEST(UnsignedDequantize,MultiThreading)110 TEST(UnsignedDequantize, MultiThreading) {
111   TfLiteXNNPackDelegateOptions delegate_options =
112       TfLiteXNNPackDelegateOptionsDefault();
113   delegate_options.num_threads = 2;
114   std::unique_ptr<TfLiteDelegate, decltype(&TfLiteXNNPackDelegateDelete)>
115       xnnpack_delegate(TfLiteXNNPackDelegateCreate(&delegate_options),
116                        TfLiteXNNPackDelegateDelete);
117 
118   std::random_device random_device;
119   auto rng = std::mt19937(random_device());
120   auto shape_rng =
121       std::bind(std::uniform_int_distribution<int32_t>(2, 5), std::ref(rng));
122   const auto batch = shape_rng();
123   const auto height = shape_rng();
124   const auto width = shape_rng();
125   const auto channels = shape_rng();
126 
127   DequantizeTester()
128       .Unsigned(true)
129       .Shape({batch, height, width, channels})
130       .InputZeroPoint(50)
131       .InputScale(256.0f)
132       .Test(xnnpack_delegate.get());
133 }
134 
135 }  // namespace xnnpack
136 }  // namespace tflite
137