xref: /aosp_15_r20/external/armnn/src/armnnOnnxParser/test/Conv2D.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #include "armnnOnnxParser/IOnnxParser.hpp"
7*89c4ff92SAndroid Build Coastguard Worker #include  "ParserPrototxtFixture.hpp"
8*89c4ff92SAndroid Build Coastguard Worker 
9*89c4ff92SAndroid Build Coastguard Worker TEST_SUITE("OnnxParser_Conv2D")
10*89c4ff92SAndroid Build Coastguard Worker {
11*89c4ff92SAndroid Build Coastguard Worker struct SimpleConv2DFixture : public armnnUtils::ParserPrototxtFixture<armnnOnnxParser::IOnnxParser>
12*89c4ff92SAndroid Build Coastguard Worker {
SimpleConv2DFixtureSimpleConv2DFixture13*89c4ff92SAndroid Build Coastguard Worker     SimpleConv2DFixture()
14*89c4ff92SAndroid Build Coastguard Worker     {
15*89c4ff92SAndroid Build Coastguard Worker         m_Prototext = R"(
16*89c4ff92SAndroid Build Coastguard Worker                    ir_version: 3
17*89c4ff92SAndroid Build Coastguard Worker                    producer_name:  "CNTK"
18*89c4ff92SAndroid Build Coastguard Worker                    producer_version:  "2.5.1"
19*89c4ff92SAndroid Build Coastguard Worker                    domain:  "ai.cntk"
20*89c4ff92SAndroid Build Coastguard Worker                    model_version: 1
21*89c4ff92SAndroid Build Coastguard Worker                    graph {
22*89c4ff92SAndroid Build Coastguard Worker                      name:  "CNTKGraph"
23*89c4ff92SAndroid Build Coastguard Worker                      input {
24*89c4ff92SAndroid Build Coastguard Worker                         name: "Input"
25*89c4ff92SAndroid Build Coastguard Worker                         type {
26*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
27*89c4ff92SAndroid Build Coastguard Worker                             elem_type: 1
28*89c4ff92SAndroid Build Coastguard Worker                             shape {
29*89c4ff92SAndroid Build Coastguard Worker                               dim {
30*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
31*89c4ff92SAndroid Build Coastguard Worker                               }
32*89c4ff92SAndroid Build Coastguard Worker                               dim {
33*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
34*89c4ff92SAndroid Build Coastguard Worker                               }
35*89c4ff92SAndroid Build Coastguard Worker                               dim {
36*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 3
37*89c4ff92SAndroid Build Coastguard Worker                               }
38*89c4ff92SAndroid Build Coastguard Worker                               dim {
39*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 3
40*89c4ff92SAndroid Build Coastguard Worker                               }
41*89c4ff92SAndroid Build Coastguard Worker                             }
42*89c4ff92SAndroid Build Coastguard Worker                           }
43*89c4ff92SAndroid Build Coastguard Worker                         }
44*89c4ff92SAndroid Build Coastguard Worker                       }
45*89c4ff92SAndroid Build Coastguard Worker                       input {
46*89c4ff92SAndroid Build Coastguard Worker                         name: "Weight"
47*89c4ff92SAndroid Build Coastguard Worker                         type {
48*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
49*89c4ff92SAndroid Build Coastguard Worker                             elem_type: 1
50*89c4ff92SAndroid Build Coastguard Worker                             shape {
51*89c4ff92SAndroid Build Coastguard Worker                               dim {
52*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
53*89c4ff92SAndroid Build Coastguard Worker                               }
54*89c4ff92SAndroid Build Coastguard Worker                               dim {
55*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
56*89c4ff92SAndroid Build Coastguard Worker                               }
57*89c4ff92SAndroid Build Coastguard Worker                               dim {
58*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 3
59*89c4ff92SAndroid Build Coastguard Worker                               }
60*89c4ff92SAndroid Build Coastguard Worker                               dim {
61*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 3
62*89c4ff92SAndroid Build Coastguard Worker                               }
63*89c4ff92SAndroid Build Coastguard Worker                             }
64*89c4ff92SAndroid Build Coastguard Worker                           }
65*89c4ff92SAndroid Build Coastguard Worker                         }
66*89c4ff92SAndroid Build Coastguard Worker                       }
67*89c4ff92SAndroid Build Coastguard Worker                       initializer {
68*89c4ff92SAndroid Build Coastguard Worker                           dims: 1
69*89c4ff92SAndroid Build Coastguard Worker                           dims: 1
70*89c4ff92SAndroid Build Coastguard Worker                           dims: 3
71*89c4ff92SAndroid Build Coastguard Worker                           dims: 3
72*89c4ff92SAndroid Build Coastguard Worker                           data_type: 1
73*89c4ff92SAndroid Build Coastguard Worker                           float_data: 2
74*89c4ff92SAndroid Build Coastguard Worker                           float_data: 1
75*89c4ff92SAndroid Build Coastguard Worker                           float_data: 0
76*89c4ff92SAndroid Build Coastguard Worker                           float_data: 6
77*89c4ff92SAndroid Build Coastguard Worker                           float_data: 2
78*89c4ff92SAndroid Build Coastguard Worker                           float_data: 1
79*89c4ff92SAndroid Build Coastguard Worker                           float_data: 4
80*89c4ff92SAndroid Build Coastguard Worker                           float_data: 1
81*89c4ff92SAndroid Build Coastguard Worker                           float_data: 2
82*89c4ff92SAndroid Build Coastguard Worker                           name: "Weight"
83*89c4ff92SAndroid Build Coastguard Worker                         }
84*89c4ff92SAndroid Build Coastguard Worker                       node {
85*89c4ff92SAndroid Build Coastguard Worker                          input: "Input"
86*89c4ff92SAndroid Build Coastguard Worker                          input: "Weight"
87*89c4ff92SAndroid Build Coastguard Worker                          output: "Output"
88*89c4ff92SAndroid Build Coastguard Worker                          name: "Convolution"
89*89c4ff92SAndroid Build Coastguard Worker                          op_type: "Conv"
90*89c4ff92SAndroid Build Coastguard Worker                          attribute {
91*89c4ff92SAndroid Build Coastguard Worker                            name: "kernel_shape"
92*89c4ff92SAndroid Build Coastguard Worker                            ints: 3
93*89c4ff92SAndroid Build Coastguard Worker                            ints: 3
94*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
95*89c4ff92SAndroid Build Coastguard Worker                          }
96*89c4ff92SAndroid Build Coastguard Worker                          attribute {
97*89c4ff92SAndroid Build Coastguard Worker                            name: "strides"
98*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
99*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
100*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
101*89c4ff92SAndroid Build Coastguard Worker                          }
102*89c4ff92SAndroid Build Coastguard Worker                          attribute {
103*89c4ff92SAndroid Build Coastguard Worker                            name: "auto_pad"
104*89c4ff92SAndroid Build Coastguard Worker                            s: "VALID"
105*89c4ff92SAndroid Build Coastguard Worker                            type: STRING
106*89c4ff92SAndroid Build Coastguard Worker                          }
107*89c4ff92SAndroid Build Coastguard Worker                          attribute {
108*89c4ff92SAndroid Build Coastguard Worker                            name: "group"
109*89c4ff92SAndroid Build Coastguard Worker                            i: 1
110*89c4ff92SAndroid Build Coastguard Worker                            type: INT
111*89c4ff92SAndroid Build Coastguard Worker                          }
112*89c4ff92SAndroid Build Coastguard Worker                          attribute {
113*89c4ff92SAndroid Build Coastguard Worker                            name: "dilations"
114*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
115*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
116*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
117*89c4ff92SAndroid Build Coastguard Worker                          }
118*89c4ff92SAndroid Build Coastguard Worker                          doc_string: ""
119*89c4ff92SAndroid Build Coastguard Worker                          domain: ""
120*89c4ff92SAndroid Build Coastguard Worker                        }
121*89c4ff92SAndroid Build Coastguard Worker                       output {
122*89c4ff92SAndroid Build Coastguard Worker                           name: "Output"
123*89c4ff92SAndroid Build Coastguard Worker                           type {
124*89c4ff92SAndroid Build Coastguard Worker                              tensor_type {
125*89c4ff92SAndroid Build Coastguard Worker                                elem_type: 1
126*89c4ff92SAndroid Build Coastguard Worker                                shape {
127*89c4ff92SAndroid Build Coastguard Worker                                    dim {
128*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 1
129*89c4ff92SAndroid Build Coastguard Worker                                    }
130*89c4ff92SAndroid Build Coastguard Worker                                    dim {
131*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 1
132*89c4ff92SAndroid Build Coastguard Worker                                    }
133*89c4ff92SAndroid Build Coastguard Worker                                    dim {
134*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 1
135*89c4ff92SAndroid Build Coastguard Worker                                    }
136*89c4ff92SAndroid Build Coastguard Worker                                    dim {
137*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 1
138*89c4ff92SAndroid Build Coastguard Worker                                    }
139*89c4ff92SAndroid Build Coastguard Worker                                }
140*89c4ff92SAndroid Build Coastguard Worker                             }
141*89c4ff92SAndroid Build Coastguard Worker                         }
142*89c4ff92SAndroid Build Coastguard Worker                         }
143*89c4ff92SAndroid Build Coastguard Worker                     }
144*89c4ff92SAndroid Build Coastguard Worker                    opset_import {
145*89c4ff92SAndroid Build Coastguard Worker                       version: 7
146*89c4ff92SAndroid Build Coastguard Worker                     })";
147*89c4ff92SAndroid Build Coastguard Worker         Setup();
148*89c4ff92SAndroid Build Coastguard Worker     }
149*89c4ff92SAndroid Build Coastguard Worker };
150*89c4ff92SAndroid Build Coastguard Worker 
151*89c4ff92SAndroid Build Coastguard Worker struct Conv2DWithBiasesFixture :  public armnnUtils::ParserPrototxtFixture<armnnOnnxParser::IOnnxParser>
152*89c4ff92SAndroid Build Coastguard Worker {
Conv2DWithBiasesFixtureConv2DWithBiasesFixture153*89c4ff92SAndroid Build Coastguard Worker     Conv2DWithBiasesFixture() {
154*89c4ff92SAndroid Build Coastguard Worker         m_Prototext = R"(
155*89c4ff92SAndroid Build Coastguard Worker                    ir_version: 3
156*89c4ff92SAndroid Build Coastguard Worker                    producer_name:  "CNTK"
157*89c4ff92SAndroid Build Coastguard Worker                    producer_version:  "2.5.1"
158*89c4ff92SAndroid Build Coastguard Worker                    domain:  "ai.cntk"
159*89c4ff92SAndroid Build Coastguard Worker                    model_version: 1
160*89c4ff92SAndroid Build Coastguard Worker                    graph {
161*89c4ff92SAndroid Build Coastguard Worker                      name:  "CNTKGraph"
162*89c4ff92SAndroid Build Coastguard Worker                      input {
163*89c4ff92SAndroid Build Coastguard Worker                         name: "Input"
164*89c4ff92SAndroid Build Coastguard Worker                         type {
165*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
166*89c4ff92SAndroid Build Coastguard Worker                             elem_type: 1
167*89c4ff92SAndroid Build Coastguard Worker                             shape {
168*89c4ff92SAndroid Build Coastguard Worker                               dim {
169*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
170*89c4ff92SAndroid Build Coastguard Worker                               }
171*89c4ff92SAndroid Build Coastguard Worker                               dim {
172*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
173*89c4ff92SAndroid Build Coastguard Worker                               }
174*89c4ff92SAndroid Build Coastguard Worker                               dim {
175*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 2
176*89c4ff92SAndroid Build Coastguard Worker                               }
177*89c4ff92SAndroid Build Coastguard Worker                               dim {
178*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 2
179*89c4ff92SAndroid Build Coastguard Worker                               }
180*89c4ff92SAndroid Build Coastguard Worker                             }
181*89c4ff92SAndroid Build Coastguard Worker                           }
182*89c4ff92SAndroid Build Coastguard Worker                         }
183*89c4ff92SAndroid Build Coastguard Worker                       }
184*89c4ff92SAndroid Build Coastguard Worker                       input {
185*89c4ff92SAndroid Build Coastguard Worker                         name: "Weight"
186*89c4ff92SAndroid Build Coastguard Worker                         type {
187*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
188*89c4ff92SAndroid Build Coastguard Worker                             elem_type: 1
189*89c4ff92SAndroid Build Coastguard Worker                             shape {
190*89c4ff92SAndroid Build Coastguard Worker                               dim {
191*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
192*89c4ff92SAndroid Build Coastguard Worker                               }
193*89c4ff92SAndroid Build Coastguard Worker                               dim {
194*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
195*89c4ff92SAndroid Build Coastguard Worker                               }
196*89c4ff92SAndroid Build Coastguard Worker                               dim {
197*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 2
198*89c4ff92SAndroid Build Coastguard Worker                               }
199*89c4ff92SAndroid Build Coastguard Worker                               dim {
200*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 2
201*89c4ff92SAndroid Build Coastguard Worker                               }
202*89c4ff92SAndroid Build Coastguard Worker                             }
203*89c4ff92SAndroid Build Coastguard Worker                           }
204*89c4ff92SAndroid Build Coastguard Worker                         }
205*89c4ff92SAndroid Build Coastguard Worker                       }
206*89c4ff92SAndroid Build Coastguard Worker                       initializer {
207*89c4ff92SAndroid Build Coastguard Worker                           dims: 1
208*89c4ff92SAndroid Build Coastguard Worker                           dims: 1
209*89c4ff92SAndroid Build Coastguard Worker                           dims: 2
210*89c4ff92SAndroid Build Coastguard Worker                           dims: 2
211*89c4ff92SAndroid Build Coastguard Worker                           data_type: 1
212*89c4ff92SAndroid Build Coastguard Worker                           float_data: 2
213*89c4ff92SAndroid Build Coastguard Worker                           float_data: 1
214*89c4ff92SAndroid Build Coastguard Worker                           float_data: 0
215*89c4ff92SAndroid Build Coastguard Worker                           float_data: 6
216*89c4ff92SAndroid Build Coastguard Worker                           name: "Weight"
217*89c4ff92SAndroid Build Coastguard Worker                         }
218*89c4ff92SAndroid Build Coastguard Worker                         input {
219*89c4ff92SAndroid Build Coastguard Worker                           name: "Bias"
220*89c4ff92SAndroid Build Coastguard Worker                           type {
221*89c4ff92SAndroid Build Coastguard Worker                             tensor_type {
222*89c4ff92SAndroid Build Coastguard Worker                               elem_type: 1
223*89c4ff92SAndroid Build Coastguard Worker                               shape {
224*89c4ff92SAndroid Build Coastguard Worker                                 dim {
225*89c4ff92SAndroid Build Coastguard Worker                                   dim_value: 4
226*89c4ff92SAndroid Build Coastguard Worker                                 }
227*89c4ff92SAndroid Build Coastguard Worker                               }
228*89c4ff92SAndroid Build Coastguard Worker                             }
229*89c4ff92SAndroid Build Coastguard Worker                           }
230*89c4ff92SAndroid Build Coastguard Worker                         }
231*89c4ff92SAndroid Build Coastguard Worker                         initializer {
232*89c4ff92SAndroid Build Coastguard Worker                             dims: 4
233*89c4ff92SAndroid Build Coastguard Worker                             data_type: 1
234*89c4ff92SAndroid Build Coastguard Worker                             float_data: 10
235*89c4ff92SAndroid Build Coastguard Worker                             float_data: 0
236*89c4ff92SAndroid Build Coastguard Worker                             float_data: 0
237*89c4ff92SAndroid Build Coastguard Worker                             float_data: 0
238*89c4ff92SAndroid Build Coastguard Worker                             name: "Bias"
239*89c4ff92SAndroid Build Coastguard Worker                           }
240*89c4ff92SAndroid Build Coastguard Worker                       node {
241*89c4ff92SAndroid Build Coastguard Worker                          input: "Input"
242*89c4ff92SAndroid Build Coastguard Worker                          input: "Weight"
243*89c4ff92SAndroid Build Coastguard Worker                          input: "Bias"
244*89c4ff92SAndroid Build Coastguard Worker                          output: "Output"
245*89c4ff92SAndroid Build Coastguard Worker                          name: "Convolution"
246*89c4ff92SAndroid Build Coastguard Worker                          op_type: "Conv"
247*89c4ff92SAndroid Build Coastguard Worker                          attribute {
248*89c4ff92SAndroid Build Coastguard Worker                            name: "kernel_shape"
249*89c4ff92SAndroid Build Coastguard Worker                            ints: 2
250*89c4ff92SAndroid Build Coastguard Worker                            ints: 2
251*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
252*89c4ff92SAndroid Build Coastguard Worker                          }
253*89c4ff92SAndroid Build Coastguard Worker                          attribute {
254*89c4ff92SAndroid Build Coastguard Worker                            name: "strides"
255*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
256*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
257*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
258*89c4ff92SAndroid Build Coastguard Worker                          }
259*89c4ff92SAndroid Build Coastguard Worker                          attribute {
260*89c4ff92SAndroid Build Coastguard Worker                            name: "auto_pad"
261*89c4ff92SAndroid Build Coastguard Worker                            s: "SAME_UPPER"
262*89c4ff92SAndroid Build Coastguard Worker                            type: STRING
263*89c4ff92SAndroid Build Coastguard Worker                          }
264*89c4ff92SAndroid Build Coastguard Worker                          attribute {
265*89c4ff92SAndroid Build Coastguard Worker                            name: "group"
266*89c4ff92SAndroid Build Coastguard Worker                            i: 1
267*89c4ff92SAndroid Build Coastguard Worker                            type: INT
268*89c4ff92SAndroid Build Coastguard Worker                          }
269*89c4ff92SAndroid Build Coastguard Worker                          attribute {
270*89c4ff92SAndroid Build Coastguard Worker                            name: "dilations"
271*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
272*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
273*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
274*89c4ff92SAndroid Build Coastguard Worker                          }
275*89c4ff92SAndroid Build Coastguard Worker                          doc_string: ""
276*89c4ff92SAndroid Build Coastguard Worker                          domain: ""
277*89c4ff92SAndroid Build Coastguard Worker                        }
278*89c4ff92SAndroid Build Coastguard Worker                       output {
279*89c4ff92SAndroid Build Coastguard Worker                           name: "Output"
280*89c4ff92SAndroid Build Coastguard Worker                           type {
281*89c4ff92SAndroid Build Coastguard Worker                              tensor_type {
282*89c4ff92SAndroid Build Coastguard Worker                                elem_type: 1
283*89c4ff92SAndroid Build Coastguard Worker                                shape {
284*89c4ff92SAndroid Build Coastguard Worker                                    dim {
285*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 1
286*89c4ff92SAndroid Build Coastguard Worker                                    }
287*89c4ff92SAndroid Build Coastguard Worker                                    dim {
288*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 1
289*89c4ff92SAndroid Build Coastguard Worker                                    }
290*89c4ff92SAndroid Build Coastguard Worker                                    dim {
291*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 2
292*89c4ff92SAndroid Build Coastguard Worker                                    }
293*89c4ff92SAndroid Build Coastguard Worker                                    dim {
294*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 2
295*89c4ff92SAndroid Build Coastguard Worker                                    }
296*89c4ff92SAndroid Build Coastguard Worker                                }
297*89c4ff92SAndroid Build Coastguard Worker                             }
298*89c4ff92SAndroid Build Coastguard Worker                         }
299*89c4ff92SAndroid Build Coastguard Worker                         }
300*89c4ff92SAndroid Build Coastguard Worker                     }
301*89c4ff92SAndroid Build Coastguard Worker                    opset_import {
302*89c4ff92SAndroid Build Coastguard Worker                       version: 7
303*89c4ff92SAndroid Build Coastguard Worker                     })";
304*89c4ff92SAndroid Build Coastguard Worker         Setup();
305*89c4ff92SAndroid Build Coastguard Worker     }
306*89c4ff92SAndroid Build Coastguard Worker };
307*89c4ff92SAndroid Build Coastguard Worker 
308*89c4ff92SAndroid Build Coastguard Worker 
309*89c4ff92SAndroid Build Coastguard Worker struct Conv2DDimReducingFixture :  public armnnUtils::ParserPrototxtFixture<armnnOnnxParser::IOnnxParser>
310*89c4ff92SAndroid Build Coastguard Worker {
Conv2DDimReducingFixtureConv2DDimReducingFixture311*89c4ff92SAndroid Build Coastguard Worker     Conv2DDimReducingFixture() {
312*89c4ff92SAndroid Build Coastguard Worker         m_Prototext = R"(
313*89c4ff92SAndroid Build Coastguard Worker                    ir_version: 3
314*89c4ff92SAndroid Build Coastguard Worker                    producer_name:  "CNTK"
315*89c4ff92SAndroid Build Coastguard Worker                    producer_version:  "2.5.1"
316*89c4ff92SAndroid Build Coastguard Worker                    domain:  "ai.cntk"
317*89c4ff92SAndroid Build Coastguard Worker                    model_version: 1
318*89c4ff92SAndroid Build Coastguard Worker                    graph {
319*89c4ff92SAndroid Build Coastguard Worker                      name:  "CNTKGraph"
320*89c4ff92SAndroid Build Coastguard Worker                      input {
321*89c4ff92SAndroid Build Coastguard Worker                         name: "Input"
322*89c4ff92SAndroid Build Coastguard Worker                         type {
323*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
324*89c4ff92SAndroid Build Coastguard Worker                             elem_type: 1
325*89c4ff92SAndroid Build Coastguard Worker                             shape {
326*89c4ff92SAndroid Build Coastguard Worker                               dim {
327*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
328*89c4ff92SAndroid Build Coastguard Worker                               }
329*89c4ff92SAndroid Build Coastguard Worker                               dim {
330*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 3
331*89c4ff92SAndroid Build Coastguard Worker                               }
332*89c4ff92SAndroid Build Coastguard Worker                               dim {
333*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 2
334*89c4ff92SAndroid Build Coastguard Worker                               }
335*89c4ff92SAndroid Build Coastguard Worker                               dim {
336*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 2
337*89c4ff92SAndroid Build Coastguard Worker                               }
338*89c4ff92SAndroid Build Coastguard Worker                             }
339*89c4ff92SAndroid Build Coastguard Worker                           }
340*89c4ff92SAndroid Build Coastguard Worker                         }
341*89c4ff92SAndroid Build Coastguard Worker                       }
342*89c4ff92SAndroid Build Coastguard Worker                       input {
343*89c4ff92SAndroid Build Coastguard Worker                         name: "Weight"
344*89c4ff92SAndroid Build Coastguard Worker                         type {
345*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
346*89c4ff92SAndroid Build Coastguard Worker                             elem_type: 1
347*89c4ff92SAndroid Build Coastguard Worker                             shape {
348*89c4ff92SAndroid Build Coastguard Worker                               dim {
349*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 2
350*89c4ff92SAndroid Build Coastguard Worker                               }
351*89c4ff92SAndroid Build Coastguard Worker                               dim {
352*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 3
353*89c4ff92SAndroid Build Coastguard Worker                               }
354*89c4ff92SAndroid Build Coastguard Worker                               dim {
355*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
356*89c4ff92SAndroid Build Coastguard Worker                               }
357*89c4ff92SAndroid Build Coastguard Worker                               dim {
358*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
359*89c4ff92SAndroid Build Coastguard Worker                               }
360*89c4ff92SAndroid Build Coastguard Worker                             }
361*89c4ff92SAndroid Build Coastguard Worker                           }
362*89c4ff92SAndroid Build Coastguard Worker                         }
363*89c4ff92SAndroid Build Coastguard Worker                       }
364*89c4ff92SAndroid Build Coastguard Worker                       initializer {
365*89c4ff92SAndroid Build Coastguard Worker                           dims: 2
366*89c4ff92SAndroid Build Coastguard Worker                           dims: 3
367*89c4ff92SAndroid Build Coastguard Worker                           dims: 1
368*89c4ff92SAndroid Build Coastguard Worker                           dims: 1
369*89c4ff92SAndroid Build Coastguard Worker                           data_type: 1
370*89c4ff92SAndroid Build Coastguard Worker                           float_data: -1
371*89c4ff92SAndroid Build Coastguard Worker                           float_data: 2
372*89c4ff92SAndroid Build Coastguard Worker                           float_data: 0
373*89c4ff92SAndroid Build Coastguard Worker                           float_data: 1
374*89c4ff92SAndroid Build Coastguard Worker                           float_data: 0
375*89c4ff92SAndroid Build Coastguard Worker                           float_data: 0
376*89c4ff92SAndroid Build Coastguard Worker                           name: "Weight"
377*89c4ff92SAndroid Build Coastguard Worker                         }
378*89c4ff92SAndroid Build Coastguard Worker                       node {
379*89c4ff92SAndroid Build Coastguard Worker                          input: "Input"
380*89c4ff92SAndroid Build Coastguard Worker                          input: "Weight"
381*89c4ff92SAndroid Build Coastguard Worker                          output: "Output"
382*89c4ff92SAndroid Build Coastguard Worker                          name: "Convolution"
383*89c4ff92SAndroid Build Coastguard Worker                          op_type: "Conv"
384*89c4ff92SAndroid Build Coastguard Worker                          attribute {
385*89c4ff92SAndroid Build Coastguard Worker                            name: "kernel_shape"
386*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
387*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
388*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
389*89c4ff92SAndroid Build Coastguard Worker                          }
390*89c4ff92SAndroid Build Coastguard Worker                          attribute {
391*89c4ff92SAndroid Build Coastguard Worker                            name: "strides"
392*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
393*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
394*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
395*89c4ff92SAndroid Build Coastguard Worker                          }
396*89c4ff92SAndroid Build Coastguard Worker                          attribute {
397*89c4ff92SAndroid Build Coastguard Worker                            name: "group"
398*89c4ff92SAndroid Build Coastguard Worker                            i: 1
399*89c4ff92SAndroid Build Coastguard Worker                            type: INT
400*89c4ff92SAndroid Build Coastguard Worker                          }
401*89c4ff92SAndroid Build Coastguard Worker                          attribute {
402*89c4ff92SAndroid Build Coastguard Worker                            name: "dilations"
403*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
404*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
405*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
406*89c4ff92SAndroid Build Coastguard Worker                          }
407*89c4ff92SAndroid Build Coastguard Worker                          doc_string: ""
408*89c4ff92SAndroid Build Coastguard Worker                          domain: ""
409*89c4ff92SAndroid Build Coastguard Worker                        }
410*89c4ff92SAndroid Build Coastguard Worker                       output {
411*89c4ff92SAndroid Build Coastguard Worker                           name: "Output"
412*89c4ff92SAndroid Build Coastguard Worker                           type {
413*89c4ff92SAndroid Build Coastguard Worker                              tensor_type {
414*89c4ff92SAndroid Build Coastguard Worker                                elem_type: 1
415*89c4ff92SAndroid Build Coastguard Worker                                shape {
416*89c4ff92SAndroid Build Coastguard Worker                                    dim {
417*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 1
418*89c4ff92SAndroid Build Coastguard Worker                                    }
419*89c4ff92SAndroid Build Coastguard Worker                                    dim {
420*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 2
421*89c4ff92SAndroid Build Coastguard Worker                                    }
422*89c4ff92SAndroid Build Coastguard Worker                                    dim {
423*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 2
424*89c4ff92SAndroid Build Coastguard Worker                                    }
425*89c4ff92SAndroid Build Coastguard Worker                                    dim {
426*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 2
427*89c4ff92SAndroid Build Coastguard Worker                                    }
428*89c4ff92SAndroid Build Coastguard Worker                                }
429*89c4ff92SAndroid Build Coastguard Worker                             }
430*89c4ff92SAndroid Build Coastguard Worker                         }
431*89c4ff92SAndroid Build Coastguard Worker                         }
432*89c4ff92SAndroid Build Coastguard Worker                     }
433*89c4ff92SAndroid Build Coastguard Worker                    opset_import {
434*89c4ff92SAndroid Build Coastguard Worker                       version: 7
435*89c4ff92SAndroid Build Coastguard Worker                     })";
436*89c4ff92SAndroid Build Coastguard Worker         Setup();
437*89c4ff92SAndroid Build Coastguard Worker     }
438*89c4ff92SAndroid Build Coastguard Worker };
439*89c4ff92SAndroid Build Coastguard Worker 
440*89c4ff92SAndroid Build Coastguard Worker struct Conv2DwithDilationFixture : public armnnUtils::ParserPrototxtFixture<armnnOnnxParser::IOnnxParser>
441*89c4ff92SAndroid Build Coastguard Worker {
Conv2DwithDilationFixtureConv2DwithDilationFixture442*89c4ff92SAndroid Build Coastguard Worker     Conv2DwithDilationFixture()
443*89c4ff92SAndroid Build Coastguard Worker     {
444*89c4ff92SAndroid Build Coastguard Worker         m_Prototext = R"(
445*89c4ff92SAndroid Build Coastguard Worker                    ir_version: 3
446*89c4ff92SAndroid Build Coastguard Worker                    producer_name:  "CNTK"
447*89c4ff92SAndroid Build Coastguard Worker                    producer_version:  "2.5.1"
448*89c4ff92SAndroid Build Coastguard Worker                    domain:  "ai.cntk"
449*89c4ff92SAndroid Build Coastguard Worker                    model_version: 1
450*89c4ff92SAndroid Build Coastguard Worker                    graph {
451*89c4ff92SAndroid Build Coastguard Worker                      name:  "CNTKGraph"
452*89c4ff92SAndroid Build Coastguard Worker                      input {
453*89c4ff92SAndroid Build Coastguard Worker                         name: "Input"
454*89c4ff92SAndroid Build Coastguard Worker                         type {
455*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
456*89c4ff92SAndroid Build Coastguard Worker                             elem_type: 1
457*89c4ff92SAndroid Build Coastguard Worker                             shape {
458*89c4ff92SAndroid Build Coastguard Worker                               dim {
459*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
460*89c4ff92SAndroid Build Coastguard Worker                               }
461*89c4ff92SAndroid Build Coastguard Worker                               dim {
462*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
463*89c4ff92SAndroid Build Coastguard Worker                               }
464*89c4ff92SAndroid Build Coastguard Worker                               dim {
465*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 6
466*89c4ff92SAndroid Build Coastguard Worker                               }
467*89c4ff92SAndroid Build Coastguard Worker                               dim {
468*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 6
469*89c4ff92SAndroid Build Coastguard Worker                               }
470*89c4ff92SAndroid Build Coastguard Worker                             }
471*89c4ff92SAndroid Build Coastguard Worker                           }
472*89c4ff92SAndroid Build Coastguard Worker                         }
473*89c4ff92SAndroid Build Coastguard Worker                       }
474*89c4ff92SAndroid Build Coastguard Worker                       input {
475*89c4ff92SAndroid Build Coastguard Worker                         name: "Weight"
476*89c4ff92SAndroid Build Coastguard Worker                         type {
477*89c4ff92SAndroid Build Coastguard Worker                           tensor_type {
478*89c4ff92SAndroid Build Coastguard Worker                             elem_type: 1
479*89c4ff92SAndroid Build Coastguard Worker                             shape {
480*89c4ff92SAndroid Build Coastguard Worker                               dim {
481*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
482*89c4ff92SAndroid Build Coastguard Worker                               }
483*89c4ff92SAndroid Build Coastguard Worker                               dim {
484*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 1
485*89c4ff92SAndroid Build Coastguard Worker                               }
486*89c4ff92SAndroid Build Coastguard Worker                               dim {
487*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 3
488*89c4ff92SAndroid Build Coastguard Worker                               }
489*89c4ff92SAndroid Build Coastguard Worker                               dim {
490*89c4ff92SAndroid Build Coastguard Worker                                 dim_value: 3
491*89c4ff92SAndroid Build Coastguard Worker                               }
492*89c4ff92SAndroid Build Coastguard Worker                             }
493*89c4ff92SAndroid Build Coastguard Worker                           }
494*89c4ff92SAndroid Build Coastguard Worker                         }
495*89c4ff92SAndroid Build Coastguard Worker                       }
496*89c4ff92SAndroid Build Coastguard Worker                       initializer {
497*89c4ff92SAndroid Build Coastguard Worker                           dims: 1
498*89c4ff92SAndroid Build Coastguard Worker                           dims: 1
499*89c4ff92SAndroid Build Coastguard Worker                           dims: 3
500*89c4ff92SAndroid Build Coastguard Worker                           dims: 3
501*89c4ff92SAndroid Build Coastguard Worker                           data_type: 1
502*89c4ff92SAndroid Build Coastguard Worker                           float_data: 2
503*89c4ff92SAndroid Build Coastguard Worker                           float_data: 1
504*89c4ff92SAndroid Build Coastguard Worker                           float_data: 0
505*89c4ff92SAndroid Build Coastguard Worker                           float_data: 6
506*89c4ff92SAndroid Build Coastguard Worker                           float_data: 2
507*89c4ff92SAndroid Build Coastguard Worker                           float_data: 1
508*89c4ff92SAndroid Build Coastguard Worker                           float_data: 4
509*89c4ff92SAndroid Build Coastguard Worker                           float_data: 1
510*89c4ff92SAndroid Build Coastguard Worker                           float_data: 2
511*89c4ff92SAndroid Build Coastguard Worker                           name: "Weight"
512*89c4ff92SAndroid Build Coastguard Worker                         }
513*89c4ff92SAndroid Build Coastguard Worker                       node {
514*89c4ff92SAndroid Build Coastguard Worker                          input: "Input"
515*89c4ff92SAndroid Build Coastguard Worker                          input: "Weight"
516*89c4ff92SAndroid Build Coastguard Worker                          output: "Output"
517*89c4ff92SAndroid Build Coastguard Worker                          name: "Convolution"
518*89c4ff92SAndroid Build Coastguard Worker                          op_type: "Conv"
519*89c4ff92SAndroid Build Coastguard Worker                          attribute {
520*89c4ff92SAndroid Build Coastguard Worker                            name: "kernel_shape"
521*89c4ff92SAndroid Build Coastguard Worker                            ints: 3
522*89c4ff92SAndroid Build Coastguard Worker                            ints: 3
523*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
524*89c4ff92SAndroid Build Coastguard Worker                          }
525*89c4ff92SAndroid Build Coastguard Worker                          attribute {
526*89c4ff92SAndroid Build Coastguard Worker                            name: "strides"
527*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
528*89c4ff92SAndroid Build Coastguard Worker                            ints: 1
529*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
530*89c4ff92SAndroid Build Coastguard Worker                          }
531*89c4ff92SAndroid Build Coastguard Worker                          attribute {
532*89c4ff92SAndroid Build Coastguard Worker                            name: "auto_pad"
533*89c4ff92SAndroid Build Coastguard Worker                            s: "VALID"
534*89c4ff92SAndroid Build Coastguard Worker                            type: STRING
535*89c4ff92SAndroid Build Coastguard Worker                          }
536*89c4ff92SAndroid Build Coastguard Worker                          attribute {
537*89c4ff92SAndroid Build Coastguard Worker                            name: "group"
538*89c4ff92SAndroid Build Coastguard Worker                            i: 1
539*89c4ff92SAndroid Build Coastguard Worker                            type: INT
540*89c4ff92SAndroid Build Coastguard Worker                          }
541*89c4ff92SAndroid Build Coastguard Worker                          attribute {
542*89c4ff92SAndroid Build Coastguard Worker                            name: "dilations"
543*89c4ff92SAndroid Build Coastguard Worker                            ints: 2
544*89c4ff92SAndroid Build Coastguard Worker                            ints: 2
545*89c4ff92SAndroid Build Coastguard Worker                            type: INTS
546*89c4ff92SAndroid Build Coastguard Worker                          }
547*89c4ff92SAndroid Build Coastguard Worker                          doc_string: ""
548*89c4ff92SAndroid Build Coastguard Worker                          domain: ""
549*89c4ff92SAndroid Build Coastguard Worker                        }
550*89c4ff92SAndroid Build Coastguard Worker                       output {
551*89c4ff92SAndroid Build Coastguard Worker                           name: "Output"
552*89c4ff92SAndroid Build Coastguard Worker                           type {
553*89c4ff92SAndroid Build Coastguard Worker                              tensor_type {
554*89c4ff92SAndroid Build Coastguard Worker                                elem_type: 1
555*89c4ff92SAndroid Build Coastguard Worker                                shape {
556*89c4ff92SAndroid Build Coastguard Worker                                    dim {
557*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 1
558*89c4ff92SAndroid Build Coastguard Worker                                    }
559*89c4ff92SAndroid Build Coastguard Worker                                    dim {
560*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 1
561*89c4ff92SAndroid Build Coastguard Worker                                    }
562*89c4ff92SAndroid Build Coastguard Worker                                    dim {
563*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 2
564*89c4ff92SAndroid Build Coastguard Worker                                    }
565*89c4ff92SAndroid Build Coastguard Worker                                    dim {
566*89c4ff92SAndroid Build Coastguard Worker                                        dim_value: 2
567*89c4ff92SAndroid Build Coastguard Worker                                    }
568*89c4ff92SAndroid Build Coastguard Worker                                }
569*89c4ff92SAndroid Build Coastguard Worker                             }
570*89c4ff92SAndroid Build Coastguard Worker                         }
571*89c4ff92SAndroid Build Coastguard Worker                         }
572*89c4ff92SAndroid Build Coastguard Worker                     }
573*89c4ff92SAndroid Build Coastguard Worker                    opset_import {
574*89c4ff92SAndroid Build Coastguard Worker                       version: 7
575*89c4ff92SAndroid Build Coastguard Worker                     })";
576*89c4ff92SAndroid Build Coastguard Worker         Setup();
577*89c4ff92SAndroid Build Coastguard Worker     }
578*89c4ff92SAndroid Build Coastguard Worker };
579*89c4ff92SAndroid Build Coastguard Worker 
580*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(SimpleConv2DFixture, "ValidConvTest")
581*89c4ff92SAndroid Build Coastguard Worker {
582*89c4ff92SAndroid Build Coastguard Worker     RunTest<4>({{"Input", {1.0, 2.0, 3.0,
583*89c4ff92SAndroid Build Coastguard Worker                            4.0, 5.0, 6.0,
584*89c4ff92SAndroid Build Coastguard Worker                            7.0, 8.0, 9.0}}},
585*89c4ff92SAndroid Build Coastguard Worker               {{"Output", {1.0 * 2 + 2.0 * 1 + 3.0 * 0 +
586*89c4ff92SAndroid Build Coastguard Worker                            4.0 * 6 + 5.0 * 2 + 6.0 * 1 +
587*89c4ff92SAndroid Build Coastguard Worker                            7.0 * 4 + 8.0 * 1 + 9.0 * 2}}});
588*89c4ff92SAndroid Build Coastguard Worker }
589*89c4ff92SAndroid Build Coastguard Worker 
590*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(Conv2DWithBiasesFixture, "ValidConvWithBiasTest")
591*89c4ff92SAndroid Build Coastguard Worker {
592*89c4ff92SAndroid Build Coastguard Worker     RunTest<4>({{"Input", {1.0, 2.0,
593*89c4ff92SAndroid Build Coastguard Worker                            3.0, 4.0}}},
594*89c4ff92SAndroid Build Coastguard Worker               {{"Output", {1.0 * 2 + 2.0 * 1 + 3.0 * 0 + 4 * 6 + 10,
595*89c4ff92SAndroid Build Coastguard Worker                            2.0 * 2 + 0 * 1 + 4.0 * 0 + 0 * 6 + 10,
596*89c4ff92SAndroid Build Coastguard Worker                            3.0 * 2 + 4.0 * 1 + 0 * 0 + 0 * 6 + 10,
597*89c4ff92SAndroid Build Coastguard Worker                            4.0 * 2 + 0 * 1 + 0 * 0 + 0 * 6 + 10}}});
598*89c4ff92SAndroid Build Coastguard Worker }
599*89c4ff92SAndroid Build Coastguard Worker 
600*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(Conv2DDimReducingFixture, "ValidConvDimReducTest")
601*89c4ff92SAndroid Build Coastguard Worker {
602*89c4ff92SAndroid Build Coastguard Worker     RunTest<4>({{"Input", {1.0, 2.0, 3.0, 4.0, -1, -2, 3, 4, 1 , 1, 1, 1 }}},
603*89c4ff92SAndroid Build Coastguard Worker               {{"Output", {-1 * 1 + 2 * -1, -1 * 2 + 2 * -2,
604*89c4ff92SAndroid Build Coastguard Worker                            -1 * 3 + 2 * 3,  -1 * 4 + 2 * 4,
605*89c4ff92SAndroid Build Coastguard Worker                            1, 2, 3, 4}}});
606*89c4ff92SAndroid Build Coastguard Worker }
607*89c4ff92SAndroid Build Coastguard Worker 
608*89c4ff92SAndroid Build Coastguard Worker TEST_CASE_FIXTURE(Conv2DwithDilationFixture, "ValidConvWithDilationTest")
609*89c4ff92SAndroid Build Coastguard Worker {
610*89c4ff92SAndroid Build Coastguard Worker     RunTest<4>({{"Input", {1.0, 2.0, 3.0, 4.0, 5.0, 6.0,
611*89c4ff92SAndroid Build Coastguard Worker                            7.0, 8.0, 9.0, 10.0, 11.0, 12.0,
612*89c4ff92SAndroid Build Coastguard Worker                            1.0, 2.0, 3.0, 4.0, 5.0, 6.0,
613*89c4ff92SAndroid Build Coastguard Worker                            7.0, 8.0, 9.0, 10.0, 11.0, 12.0,
614*89c4ff92SAndroid Build Coastguard Worker                            1.0, 2.0, 3.0, 4.0, 5.0, 6.0,
615*89c4ff92SAndroid Build Coastguard Worker                            7.0, 8.0, 9.0, 10.0, 11.0, 12.0}}},
616*89c4ff92SAndroid Build Coastguard Worker                {{"Output", {39.0, 58.0, 153.0, 172.0 }}});
617*89c4ff92SAndroid Build Coastguard Worker }
618*89c4ff92SAndroid Build Coastguard Worker 
619*89c4ff92SAndroid Build Coastguard Worker }
620