ArmNN
 22.05.01
Concatenation.cpp File Reference

Go to the source code of this file.

Functions

 TEST_SUITE ("TensorflowLiteParser_Concatenation")
 

Function Documentation

◆ TEST_SUITE()

TEST_SUITE ( "TensorflowLiteParser_Concatenation"  )

Definition at line 9 of file Concatenation.cpp.

References ParserFlatbuffersFixture::Setup(), and TEST_CASE_FIXTURE().

10 {
11 struct ConcatenationFixture : public ParserFlatbuffersFixture
12 {
13  explicit ConcatenationFixture(const std::string & inputShape1,
14  const std::string & inputShape2,
15  const std::string & outputShape,
16  const std::string & axis,
17  const std::string & activation="NONE")
18  {
19  m_JsonString = R"(
20  {
21  "version": 3,
22  "operator_codes": [ { "builtin_code": "CONCATENATION" } ],
23  "subgraphs": [ {
24  "tensors": [
25  {
26  "shape": )" + inputShape1 + R"(,
27  "type": "UINT8",
28  "buffer": 0,
29  "name": "inputTensor1",
30  "quantization": {
31  "min": [ 0.0 ],
32  "max": [ 255.0 ],
33  "scale": [ 1.0 ],
34  "zero_point": [ 0 ],
35  }
36  },
37  {
38  "shape": )" + inputShape2 + R"(,
39  "type": "UINT8",
40  "buffer": 1,
41  "name": "inputTensor2",
42  "quantization": {
43  "min": [ 0.0 ],
44  "max": [ 255.0 ],
45  "scale": [ 1.0 ],
46  "zero_point": [ 0 ],
47  }
48  },
49  {
50  "shape": )" + outputShape + R"( ,
51  "type": "UINT8",
52  "buffer": 2,
53  "name": "outputTensor",
54  "quantization": {
55  "min": [ 0.0 ],
56  "max": [ 255.0 ],
57  "scale": [ 1.0 ],
58  "zero_point": [ 0 ],
59  }
60  }
61  ],
62  "inputs": [ 0, 1 ],
63  "outputs": [ 2 ],
64  "operators": [
65  {
66  "opcode_index": 0,
67  "inputs": [ 0, 1 ],
68  "outputs": [ 2 ],
69  "builtin_options_type": "ConcatenationOptions",
70  "builtin_options": {
71  "axis": )" + axis + R"(,
72  "fused_activation_function": )" + activation + R"(
73  },
74  "custom_options_format": "FLEXBUFFERS"
75  }
76  ],
77  } ],
78  "buffers" : [
79  { },
80  { }
81  ]
82  }
83  )";
84  Setup();
85  }
86 };
87 
88 
89 struct ConcatenationFixtureNegativeDim : ConcatenationFixture
90 {
91  ConcatenationFixtureNegativeDim() : ConcatenationFixture("[ 1, 1, 2, 2 ]",
92  "[ 1, 1, 2, 2 ]",
93  "[ 1, 2, 2, 2 ]",
94  "-3" ) {}
95 };
96 
97 TEST_CASE_FIXTURE(ConcatenationFixtureNegativeDim, "ParseConcatenationNegativeDim")
98 {
99  RunTest<4, armnn::DataType::QAsymmU8>(
100  0,
101  {{"inputTensor1", { 0, 1, 2, 3 }},
102  {"inputTensor2", { 4, 5, 6, 7 }}},
103  {{"outputTensor", { 0, 1, 2, 3, 4, 5, 6, 7 }}});
104 }
105 
106 struct ConcatenationFixtureNCHW : ConcatenationFixture
107 {
108  ConcatenationFixtureNCHW() : ConcatenationFixture("[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 2 ]", "[ 1, 2, 2, 2 ]", "1" ) {}
109 };
110 
111 TEST_CASE_FIXTURE(ConcatenationFixtureNCHW, "ParseConcatenationNCHW")
112 {
113  RunTest<4, armnn::DataType::QAsymmU8>(
114  0,
115  {{"inputTensor1", { 0, 1, 2, 3 }},
116  {"inputTensor2", { 4, 5, 6, 7 }}},
117  {{"outputTensor", { 0, 1, 2, 3, 4, 5, 6, 7 }}});
118 }
119 
120 struct ConcatenationFixtureNHWC : ConcatenationFixture
121 {
122  ConcatenationFixtureNHWC() : ConcatenationFixture("[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 2 ]", "[ 1, 1, 2, 4 ]", "3" ) {}
123 };
124 
125 TEST_CASE_FIXTURE(ConcatenationFixtureNHWC, "ParseConcatenationNHWC")
126 {
127  RunTest<4, armnn::DataType::QAsymmU8>(
128  0,
129  {{"inputTensor1", { 0, 1, 2, 3 }},
130  {"inputTensor2", { 4, 5, 6, 7 }}},
131  {{"outputTensor", { 0, 1, 4, 5, 2, 3, 6, 7 }}});
132 }
133 
134 struct ConcatenationFixtureDim1 : ConcatenationFixture
135 {
136  ConcatenationFixtureDim1() : ConcatenationFixture("[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 4 ]", "[ 1, 4, 3, 4 ]", "1" ) {}
137 };
138 
139 TEST_CASE_FIXTURE(ConcatenationFixtureDim1, "ParseConcatenationDim1")
140 {
141  RunTest<4, armnn::DataType::QAsymmU8>(
142  0,
143  { { "inputTensor1", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
144  12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 } },
145  { "inputTensor2", { 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
146  62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73 } } },
147  { { "outputTensor", { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
148  12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
149  50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
150  62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73 } } });
151 }
152 
153 struct ConcatenationFixtureDim3 : ConcatenationFixture
154 {
155  ConcatenationFixtureDim3() : ConcatenationFixture("[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 4 ]", "[ 1, 2, 3, 8 ]", "3" ) {}
156 };
157 
158 TEST_CASE_FIXTURE(ConcatenationFixtureDim3, "ParseConcatenationDim3")
159 {
160  RunTest<4, armnn::DataType::QAsymmU8>(
161  0,
162  { { "inputTensor1", { 0, 1, 2, 3,
163  4, 5, 6, 7,
164  8, 9, 10, 11,
165  12, 13, 14, 15,
166  16, 17, 18, 19,
167  20, 21, 22, 23 } },
168  { "inputTensor2", { 50, 51, 52, 53,
169  54, 55, 56, 57,
170  58, 59, 60, 61,
171  62, 63, 64, 65,
172  66, 67, 68, 69,
173  70, 71, 72, 73 } } },
174  { { "outputTensor", { 0, 1, 2, 3,
175  50, 51, 52, 53,
176  4, 5, 6, 7,
177  54, 55, 56, 57,
178  8, 9, 10, 11,
179  58, 59, 60, 61,
180  12, 13, 14, 15,
181  62, 63, 64, 65,
182  16, 17, 18, 19,
183  66, 67, 68, 69,
184  20, 21, 22, 23,
185  70, 71, 72, 73 } } });
186 }
187 
188 struct ConcatenationFixture3DDim0 : ConcatenationFixture
189 {
190  ConcatenationFixture3DDim0() : ConcatenationFixture("[ 1, 2, 3]", "[ 2, 2, 3]", "[ 3, 2, 3]", "0" ) {}
191 };
192 
193 TEST_CASE_FIXTURE(ConcatenationFixture3DDim0, "ParseConcatenation3DDim0")
194 {
195  RunTest<3, armnn::DataType::QAsymmU8>(
196  0,
197  { { "inputTensor1", { 0, 1, 2, 3, 4, 5 } },
198  { "inputTensor2", { 6, 7, 8, 9, 10, 11,
199  12, 13, 14, 15, 16, 17 } } },
200  { { "outputTensor", { 0, 1, 2, 3, 4, 5,
201  6, 7, 8, 9, 10, 11,
202  12, 13, 14, 15, 16, 17 } } });
203 }
204 
205 struct ConcatenationFixture3DDim1 : ConcatenationFixture
206 {
207  ConcatenationFixture3DDim1() : ConcatenationFixture("[ 1, 2, 3]", "[ 1, 4, 3]", "[ 1, 6, 3]", "1" ) {}
208 };
209 
210 TEST_CASE_FIXTURE(ConcatenationFixture3DDim1, "ParseConcatenation3DDim1")
211 {
212  RunTest<3, armnn::DataType::QAsymmU8>(
213  0,
214  { { "inputTensor1", { 0, 1, 2, 3, 4, 5 } },
215  { "inputTensor2", { 6, 7, 8, 9, 10, 11,
216  12, 13, 14, 15, 16, 17 } } },
217  { { "outputTensor", { 0, 1, 2, 3, 4, 5,
218  6, 7, 8, 9, 10, 11,
219  12, 13, 14, 15, 16, 17 } } });
220 }
221 
222 struct ConcatenationFixture3DDim2 : ConcatenationFixture
223 {
224  ConcatenationFixture3DDim2() : ConcatenationFixture("[ 1, 2, 3]", "[ 1, 2, 6]", "[ 1, 2, 9]", "2" ) {}
225 };
226 
227 TEST_CASE_FIXTURE(ConcatenationFixture3DDim2, "ParseConcatenation3DDim2")
228 {
229  RunTest<3, armnn::DataType::QAsymmU8>(
230  0,
231  { { "inputTensor1", { 0, 1, 2,
232  3, 4, 5 } },
233  { "inputTensor2", { 6, 7, 8, 9, 10, 11,
234  12, 13, 14, 15, 16, 17 } } },
235  { { "outputTensor", { 0, 1, 2, 6, 7, 8, 9, 10, 11,
236  3, 4, 5, 12, 13, 14, 15, 16, 17 } } });
237 }
238 
239 }
TEST_CASE_FIXTURE(ClContextControlFixture, "CopyBetweenNeonAndGpu")
void Setup(bool testDynamic=true)