blob: 5f5bee8ff067b68ab4370f6b70425abf73cd2d5a [file] [log] [blame]
XNNPACK Teamb455b122019-09-27 18:10:33 -07001// Copyright (c) Facebook, Inc. and its affiliates.
2// All rights reserved.
3//
4// Copyright 2019 Google LLC
5//
6// This source code is licensed under the BSD-style license found in the
7// LICENSE file in the root directory of this source tree.
8
9#include <gtest/gtest.h>
10
11#include "convolution-operator-tester.h"
12
13
Marat Dukhan97262462021-06-18 16:14:17 -070014TEST(CONVOLUTION_NHWC_QC8, 1x1) {
15 ConvolutionOperatorTester()
16 .input_size(27, 29)
17 .kernel_size(1, 1)
18 .group_input_channels(23)
19 .group_output_channels(19)
20 .iterations(3)
21 .TestNHWCxQC8();
22}
23
24TEST(CONVOLUTION_NHWC_QC8, 1x1_with_qmin) {
25 ConvolutionOperatorTester()
26 .input_size(27, 29)
27 .kernel_size(1, 1)
28 .group_input_channels(23)
29 .group_output_channels(19)
30 .qmin(128)
31 .iterations(3)
32 .TestNHWCxQC8();
33}
34
35TEST(CONVOLUTION_NHWC_QC8, 1x1_with_qmax) {
36 ConvolutionOperatorTester()
37 .input_size(27, 29)
38 .kernel_size(1, 1)
39 .group_input_channels(23)
40 .group_output_channels(19)
41 .qmax(128)
42 .iterations(3)
43 .TestNHWCxQC8();
44}
45
46TEST(CONVOLUTION_NHWC_QC8, 1x1_with_input_stride) {
47 ConvolutionOperatorTester()
48 .input_size(27, 29)
49 .kernel_size(1, 1)
50 .input_channel_stride(28)
51 .group_input_channels(23)
52 .group_output_channels(19)
53 .iterations(3)
54 .TestNHWCxQC8();
55}
56
57TEST(CONVOLUTION_NHWC_QC8, 1x1_with_output_stride) {
58 ConvolutionOperatorTester()
59 .input_size(27, 29)
60 .kernel_size(1, 1)
61 .output_channel_stride(29)
62 .group_input_channels(23)
63 .group_output_channels(19)
64 .iterations(3)
65 .TestNHWCxQC8();
66}
67
68TEST(CONVOLUTION_NHWC_QC8, 1x1_without_bias) {
69 ConvolutionOperatorTester()
70 .has_bias(false)
71 .input_size(13, 14)
72 .kernel_size(1, 1)
73 .group_input_channels(23)
74 .group_output_channels(19)
75 .iterations(3)
76 .TestNHWCxQC8();
77}
78
79TEST(CONVOLUTION_NHWC_QC8, 1x1_with_batch) {
80 ConvolutionOperatorTester()
81 .batch_size(3)
82 .input_size(13, 14)
83 .kernel_size(1, 1)
84 .group_input_channels(23)
85 .group_output_channels(19)
86 .iterations(3)
87 .TestNHWCxQC8();
88}
89
90TEST(CONVOLUTION_NHWC_QC8, grouped_1x1) {
91 ConvolutionOperatorTester()
92 .input_size(24, 25)
93 .kernel_size(1, 1)
94 .groups(2)
95 .group_input_channels(17)
96 .group_output_channels(19)
97 .iterations(3)
98 .TestNHWCxQC8();
99}
100
101TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_with_qmin) {
102 ConvolutionOperatorTester()
103 .input_size(24, 25)
104 .kernel_size(1, 1)
105 .groups(2)
106 .group_input_channels(17)
107 .group_output_channels(19)
108 .qmin(128)
109 .iterations(3)
110 .TestNHWCxQC8();
111}
112
113TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_with_qmax) {
114 ConvolutionOperatorTester()
115 .input_size(24, 25)
116 .kernel_size(1, 1)
117 .groups(2)
118 .group_input_channels(17)
119 .group_output_channels(19)
120 .qmax(128)
121 .iterations(3)
122 .TestNHWCxQC8();
123}
124
125TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_with_input_stride) {
126 ConvolutionOperatorTester()
127 .input_size(24, 25)
128 .kernel_size(1, 1)
129 .groups(2)
130 .input_channel_stride(37)
131 .group_input_channels(17)
132 .group_output_channels(19)
133 .iterations(3)
134 .TestNHWCxQC8();
135}
136
137TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_with_output_stride) {
138 ConvolutionOperatorTester()
139 .input_size(24, 25)
140 .kernel_size(1, 1)
141 .groups(2)
142 .output_channel_stride(41)
143 .group_input_channels(17)
144 .group_output_channels(19)
145 .iterations(3)
146 .TestNHWCxQC8();
147}
148
149TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_without_bias) {
150 ConvolutionOperatorTester()
151 .has_bias(false)
152 .input_size(24, 25)
153 .kernel_size(1, 1)
154 .groups(2)
155 .group_input_channels(17)
156 .group_output_channels(19)
157 .iterations(3)
158 .TestNHWCxQC8();
159}
160
161TEST(CONVOLUTION_NHWC_QC8, grouped_1x1_with_batch) {
162 ConvolutionOperatorTester()
163 .batch_size(3)
164 .input_size(24, 25)
165 .kernel_size(1, 1)
166 .groups(2)
167 .group_input_channels(17)
168 .group_output_channels(19)
169 .iterations(3)
170 .TestNHWCxQC8();
171}
172
173TEST(CONVOLUTION_NHWC_QC8, 1x3) {
174 ConvolutionOperatorTester()
175 .input_size(20, 19)
176 .padding_width(1)
177 .kernel_size(1, 3)
178 .group_input_channels(17)
179 .group_output_channels(15)
180 .iterations(3)
181 .TestNHWCxQC8();
182}
183
184TEST(CONVOLUTION_NHWC_QC8, grouped_1x3) {
185 ConvolutionOperatorTester()
186 .input_size(20, 19)
187 .padding_width(1)
188 .kernel_size(1, 3)
189 .groups(2)
190 .group_input_channels(17)
191 .group_output_channels(15)
192 .iterations(3)
193 .TestNHWCxQC8();
194}
195
196TEST(CONVOLUTION_NHWC_QC8, 3x1) {
197 ConvolutionOperatorTester()
198 .input_size(19, 20)
199 .padding_height(1)
200 .kernel_size(3, 1)
201 .group_input_channels(17)
202 .group_output_channels(15)
203 .iterations(3)
204 .TestNHWCxQC8();
205}
206
207TEST(CONVOLUTION_NHWC_QC8, grouped_3x1) {
208 ConvolutionOperatorTester()
209 .input_size(19, 20)
210 .padding_height(1)
211 .kernel_size(3, 1)
212 .groups(2)
213 .group_input_channels(17)
214 .group_output_channels(15)
215 .iterations(3)
216 .TestNHWCxQC8();
217}
218
219TEST(CONVOLUTION_NHWC_QC8, 3x3) {
220 ConvolutionOperatorTester()
221 .input_size(13, 12)
222 .padding(1)
223 .kernel_size(3, 3)
224 .group_input_channels(15)
225 .group_output_channels(17)
226 .iterations(3)
227 .TestNHWCxQC8();
228}
229
230TEST(CONVOLUTION_NHWC_QC8, 3x3_without_padding) {
231 ConvolutionOperatorTester()
232 .input_size(13, 12)
233 .kernel_size(3, 3)
234 .group_input_channels(15)
235 .group_output_channels(17)
236 .iterations(3)
237 .TestNHWCxQC8();
238}
239
240TEST(CONVOLUTION_NHWC_QC8, 3x3_with_left_padding) {
241 ConvolutionOperatorTester()
242 .input_size(13, 12)
243 .padding_left(1)
244 .kernel_size(3, 3)
245 .group_input_channels(15)
246 .group_output_channels(17)
247 .iterations(3)
248 .TestNHWCxQC8();
249}
250
251TEST(CONVOLUTION_NHWC_QC8, 3x3_with_right_padding) {
252 ConvolutionOperatorTester()
253 .input_size(13, 12)
254 .padding_right(1)
255 .kernel_size(3, 3)
256 .group_input_channels(15)
257 .group_output_channels(17)
258 .iterations(3)
259 .TestNHWCxQC8();
260}
261
262TEST(CONVOLUTION_NHWC_QC8, 3x3_with_top_padding) {
263 ConvolutionOperatorTester()
264 .input_size(13, 12)
265 .padding_top(1)
266 .kernel_size(3, 3)
267 .group_input_channels(15)
268 .group_output_channels(17)
269 .iterations(3)
270 .TestNHWCxQC8();
271}
272
273TEST(CONVOLUTION_NHWC_QC8, 3x3_with_bottom_padding) {
274 ConvolutionOperatorTester()
275 .input_size(13, 12)
276 .padding_bottom(1)
277 .kernel_size(3, 3)
278 .group_input_channels(15)
279 .group_output_channels(17)
280 .iterations(3)
281 .TestNHWCxQC8();
282}
283
284TEST(CONVOLUTION_NHWC_QC8, 3x3_with_input_stride) {
285 ConvolutionOperatorTester()
286 .input_size(13, 12)
287 .padding(1)
288 .kernel_size(3, 3)
289 .input_channel_stride(22)
290 .group_input_channels(15)
291 .group_output_channels(17)
292 .iterations(3)
293 .TestNHWCxQC8();
294}
295
296TEST(CONVOLUTION_NHWC_QC8, 3x3_with_output_stride) {
297 ConvolutionOperatorTester()
298 .input_size(13, 12)
299 .padding(1)
300 .kernel_size(3, 3)
301 .output_channel_stride(23)
302 .group_input_channels(15)
303 .group_output_channels(17)
304 .iterations(3)
305 .TestNHWCxQC8();
306}
307
308TEST(CONVOLUTION_NHWC_QC8, 3x3_without_bias) {
309 ConvolutionOperatorTester()
310 .has_bias(false)
311 .input_size(10, 9)
312 .padding(1)
313 .kernel_size(3, 3)
314 .group_input_channels(15)
315 .group_output_channels(17)
316 .iterations(3)
317 .TestNHWCxQC8();
318}
319
320TEST(CONVOLUTION_NHWC_QC8, 3x3_with_batch) {
321 ConvolutionOperatorTester()
322 .batch_size(3)
323 .input_size(10, 9)
324 .padding(1)
325 .kernel_size(3, 3)
326 .group_input_channels(15)
327 .group_output_channels(17)
328 .iterations(3)
329 .TestNHWCxQC8();
330}
331
332TEST(CONVOLUTION_NHWC_QC8, grouped_3x3) {
333 ConvolutionOperatorTester()
334 .input_size(10, 11)
335 .padding(1)
336 .kernel_size(3, 3)
337 .groups(2)
338 .group_input_channels(14)
339 .group_output_channels(13)
340 .iterations(3)
341 .TestNHWCxQC8();
342}
343
344TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_without_padding) {
345 ConvolutionOperatorTester()
346 .input_size(13, 12)
347 .kernel_size(3, 3)
348 .group_input_channels(15)
349 .group_output_channels(17)
350 .iterations(3)
351 .TestNHWCxQC8();
352}
353
354TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_left_padding) {
355 ConvolutionOperatorTester()
356 .input_size(10, 11)
357 .padding_left(1)
358 .kernel_size(3, 3)
359 .groups(2)
360 .group_input_channels(14)
361 .group_output_channels(13)
362 .iterations(3)
363 .TestNHWCxQC8();
364}
365
366TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_right_padding) {
367 ConvolutionOperatorTester()
368 .input_size(10, 11)
369 .padding_right(1)
370 .kernel_size(3, 3)
371 .groups(2)
372 .group_input_channels(14)
373 .group_output_channels(13)
374 .iterations(3)
375 .TestNHWCxQC8();
376}
377
378TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_top_padding) {
379 ConvolutionOperatorTester()
380 .input_size(10, 11)
381 .padding_top(1)
382 .kernel_size(3, 3)
383 .groups(2)
384 .group_input_channels(14)
385 .group_output_channels(13)
386 .iterations(3)
387 .TestNHWCxQC8();
388}
389
390TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_bottom_padding) {
391 ConvolutionOperatorTester()
392 .input_size(10, 11)
393 .padding_bottom(1)
394 .kernel_size(3, 3)
395 .groups(2)
396 .group_input_channels(14)
397 .group_output_channels(13)
398 .iterations(3)
399 .TestNHWCxQC8();
400}
401
402TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_input_stride) {
403 ConvolutionOperatorTester()
404 .input_size(10, 11)
405 .padding(1)
406 .kernel_size(3, 3)
407 .groups(2)
408 .input_channel_stride(29)
409 .group_input_channels(14)
410 .group_output_channels(13)
411 .iterations(3)
412 .TestNHWCxQC8();
413}
414
415TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_output_stride) {
416 ConvolutionOperatorTester()
417 .input_size(10, 11)
418 .padding(1)
419 .kernel_size(3, 3)
420 .groups(2)
421 .output_channel_stride(31)
422 .group_input_channels(14)
423 .group_output_channels(13)
424 .iterations(3)
425 .TestNHWCxQC8();
426}
427
428TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_without_bias) {
429 ConvolutionOperatorTester()
430 .has_bias(false)
431 .input_size(10, 11)
432 .padding(1)
433 .kernel_size(3, 3)
434 .groups(2)
435 .group_input_channels(14)
436 .group_output_channels(13)
437 .iterations(3)
438 .TestNHWCxQC8();
439}
440
441TEST(CONVOLUTION_NHWC_QC8, grouped_3x3_with_batch) {
442 ConvolutionOperatorTester()
443 .batch_size(3)
444 .input_size(10, 11)
445 .padding(1)
446 .kernel_size(3, 3)
447 .groups(2)
448 .group_input_channels(14)
449 .group_output_channels(13)
450 .iterations(3)
451 .TestNHWCxQC8();
452}
453
454TEST(CONVOLUTION_NHWC_QC8, 3x3s2) {
455 ConvolutionOperatorTester()
456 .input_size(14, 13)
457 .padding(1)
458 .kernel_size(3, 3)
459 .subsampling(2)
460 .group_input_channels(27)
461 .group_output_channels(19)
462 .iterations(3)
463 .TestNHWCxQC8();
464}
465
466TEST(CONVOLUTION_NHWC_QC8, 3x3s2_with_tf_same_padding) {
467 for (size_t input_height = 13; input_height <= 14; input_height++) {
468 for (size_t input_width = 13; input_width <= 14; input_width++) {
469 ConvolutionOperatorTester()
470 .input_size(input_height, input_width)
471 .padding_tf_same(true)
472 .kernel_size(3, 3)
473 .subsampling(2)
474 .group_input_channels(27)
475 .group_output_channels(19)
476 .iterations(3)
477 .TestNHWCxQC8();
478 }
479 }
480}
481
482TEST(CONVOLUTION_NHWC_QC8, 3x3s1x2) {
483 ConvolutionOperatorTester()
484 .input_size(14, 13)
485 .padding(1)
486 .kernel_size(3, 3)
487 .subsampling(1, 2)
488 .group_input_channels(27)
489 .group_output_channels(19)
490 .iterations(3)
491 .TestNHWCxQC8();
492}
493
494TEST(CONVOLUTION_NHWC_QC8, 3x3s1x2_with_tf_same_padding) {
495 for (size_t input_height = 13; input_height <= 14; input_height++) {
496 for (size_t input_width = 13; input_width <= 14; input_width++) {
497 ConvolutionOperatorTester()
498 .input_size(input_height, input_width)
499 .padding_tf_same(true)
500 .kernel_size(3, 3)
501 .subsampling(1, 2)
502 .group_input_channels(27)
503 .group_output_channels(19)
504 .iterations(3)
505 .TestNHWCxQC8();
506 }
507 }
508}
509
510TEST(CONVOLUTION_NHWC_QC8, 3x3s2x1) {
511 ConvolutionOperatorTester()
512 .input_size(14, 13)
513 .padding(1)
514 .kernel_size(3, 3)
515 .subsampling(2, 1)
516 .group_input_channels(27)
517 .group_output_channels(19)
518 .iterations(3)
519 .TestNHWCxQC8();
520}
521
522TEST(CONVOLUTION_NHWC_QC8, 3x3s2x1_with_tf_same_padding) {
523 for (size_t input_height = 13; input_height <= 14; input_height++) {
524 for (size_t input_width = 13; input_width <= 14; input_width++) {
525 ConvolutionOperatorTester()
526 .input_size(input_height, input_width)
527 .padding_tf_same(true)
528 .kernel_size(3, 3)
529 .subsampling(2, 1)
530 .group_input_channels(27)
531 .group_output_channels(19)
532 .iterations(3)
533 .TestNHWCxQC8();
534 }
535 }
536}
537
538TEST(CONVOLUTION_NHWC_QC8, 3x3d2) {
539 ConvolutionOperatorTester()
540 .input_size(14, 13)
541 .padding(2)
542 .kernel_size(3, 3)
543 .dilation(2)
544 .group_input_channels(27)
545 .group_output_channels(19)
546 .iterations(3)
547 .TestNHWCxQC8();
548}
549
550TEST(CONVOLUTION_NHWC_QC8, 3x3d1x2) {
551 ConvolutionOperatorTester()
552 .input_size(14, 13)
553 .padding(1, 2)
554 .kernel_size(3, 3)
555 .dilation(1, 2)
556 .group_input_channels(27)
557 .group_output_channels(19)
558 .iterations(3)
559 .TestNHWCxQC8();
560}
561
562TEST(CONVOLUTION_NHWC_QC8, 3x3d2x1) {
563 ConvolutionOperatorTester()
564 .input_size(14, 13)
565 .padding(2, 1)
566 .kernel_size(3, 3)
567 .dilation(2, 1)
568 .group_input_channels(27)
569 .group_output_channels(19)
570 .iterations(3)
571 .TestNHWCxQC8();
572}
573
574TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3) {
575 ConvolutionOperatorTester()
576 .input_size(15, 14)
577 .padding(1, 1)
578 .kernel_size(3, 3)
579 .groups(27)
580 .iterations(3)
581 .TestNHWCxQC8();
582}
583
584TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3_without_bias) {
585 ConvolutionOperatorTester()
586 .has_bias(false)
587 .input_size(15, 14)
588 .padding(1, 1)
589 .kernel_size(3, 3)
590 .groups(27)
591 .iterations(3)
592 .TestNHWCxQC8();
593}
594
595TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s2) {
596 ConvolutionOperatorTester()
597 .input_size(15, 14)
598 .padding(1, 1)
599 .kernel_size(3, 3)
600 .subsampling(2)
601 .groups(27)
602 .iterations(3)
603 .TestNHWCxQC8();
604}
605
606TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s2_with_tf_same_padding) {
607 for (size_t input_height = 14; input_height <= 15; input_height++) {
608 for (size_t input_width = 14; input_width <= 15; input_width++) {
609 ConvolutionOperatorTester()
610 .input_size(input_height, input_width)
611 .padding_tf_same(true)
612 .kernel_size(3, 3)
613 .subsampling(2)
614 .groups(27)
615 .iterations(3)
616 .TestNHWCxQC8();
617 }
618 }
619}
620
621TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s1x2) {
622 ConvolutionOperatorTester()
623 .input_size(15, 14)
624 .padding(1, 1)
625 .kernel_size(3, 3)
626 .subsampling(1, 2)
627 .groups(27)
628 .iterations(3)
629 .TestNHWCxQC8();
630}
631
632TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s1x2_with_tf_same_padding) {
633 for (size_t input_height = 14; input_height <= 15; input_height++) {
634 for (size_t input_width = 14; input_width <= 15; input_width++) {
635 ConvolutionOperatorTester()
636 .input_size(input_height, input_width)
637 .padding_tf_same(true)
638 .kernel_size(3, 3)
639 .subsampling(1, 2)
640 .groups(27)
641 .iterations(3)
642 .TestNHWCxQC8();
643 }
644 }
645}
646
647TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s2x1) {
648 ConvolutionOperatorTester()
649 .input_size(15, 14)
650 .padding(1, 1)
651 .kernel_size(3, 3)
652 .subsampling(2, 1)
653 .groups(27)
654 .iterations(3)
655 .TestNHWCxQC8();
656}
657
658TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3s2x1_with_tf_same_padding) {
659 for (size_t input_height = 14; input_height <= 15; input_height++) {
660 for (size_t input_width = 14; input_width <= 15; input_width++) {
661 ConvolutionOperatorTester()
662 .input_size(input_height, input_width)
663 .padding_tf_same(true)
664 .kernel_size(3, 3)
665 .subsampling(2, 1)
666 .groups(27)
667 .iterations(3)
668 .TestNHWCxQC8();
669 }
670 }
671}
672
673TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3d2) {
674 ConvolutionOperatorTester()
675 .input_size(15, 14)
676 .padding(1, 1)
677 .kernel_size(3, 3)
678 .dilation(2)
679 .groups(27)
680 .iterations(3)
681 .TestNHWCxQC8();
682}
683
684TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3d1x2) {
685 ConvolutionOperatorTester()
686 .input_size(15, 14)
687 .padding(1, 1)
688 .kernel_size(3, 3)
689 .dilation(1, 2)
690 .groups(27)
691 .iterations(3)
692 .TestNHWCxQC8();
693}
694
695TEST(CONVOLUTION_NHWC_QC8, depthwise_3x3d2x1) {
696 ConvolutionOperatorTester()
697 .input_size(15, 14)
698 .padding(1, 1)
699 .kernel_size(3, 3)
700 .dilation(2, 1)
701 .groups(27)
702 .iterations(3)
703 .TestNHWCxQC8();
704}
705
706TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 1x1) {
707 ConvolutionOperatorTester()
708 .depthwise_layout(true)
709 .input_size(15, 14)
710 .kernel_size(1, 1)
711 .groups(24)
712 .iterations(3)
713 .TestNHWCxQC8();
714}
715
716TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 1x1_with_depth_multiplier) {
717 ConvolutionOperatorTester()
718 .depthwise_layout(true)
719 .input_size(15, 14)
720 .kernel_size(1, 1)
721 .groups(24)
722 .group_output_channels(3)
723 .iterations(3)
724 .TestNHWCxQC8();
725}
726
727TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 1x1_without_bias) {
728 ConvolutionOperatorTester()
729 .depthwise_layout(true)
730 .has_bias(false)
731 .input_size(15, 14)
732 .kernel_size(1, 1)
733 .groups(24)
734 .iterations(3)
735 .TestNHWCxQC8();
736}
737
Marat Dukhan4ef23522022-01-31 16:39:21 -0800738TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 2x2) {
739 ConvolutionOperatorTester()
740 .depthwise_layout(true)
741 .input_size(15, 14)
742 .padding(1, 1)
743 .kernel_size(2, 2)
744 .groups(24)
745 .iterations(3)
746 .TestNHWCxQC8();
747}
748
749TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 2x2_with_depth_multiplier) {
750 ConvolutionOperatorTester()
751 .depthwise_layout(true)
752 .input_size(15, 14)
753 .padding(1, 1)
754 .kernel_size(2, 2)
755 .groups(24)
756 .group_output_channels(3)
757 .iterations(3)
758 .TestNHWCxQC8();
759}
760
761TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 2x2_without_bias) {
762 ConvolutionOperatorTester()
763 .depthwise_layout(true)
764 .has_bias(false)
765 .input_size(15, 14)
766 .padding(1, 1)
767 .kernel_size(2, 2)
768 .groups(24)
769 .iterations(3)
770 .TestNHWCxQC8();
771}
772
Marat Dukhan97262462021-06-18 16:14:17 -0700773TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 3x3) {
774 ConvolutionOperatorTester()
775 .depthwise_layout(true)
776 .input_size(15, 14)
777 .padding(1, 1)
778 .kernel_size(3, 3)
779 .groups(24)
780 .iterations(3)
781 .TestNHWCxQC8();
782}
783
784TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 3x3_with_depth_multiplier) {
785 ConvolutionOperatorTester()
786 .depthwise_layout(true)
787 .input_size(15, 14)
788 .padding(1, 1)
789 .kernel_size(3, 3)
790 .groups(24)
791 .group_output_channels(3)
792 .iterations(3)
793 .TestNHWCxQC8();
794}
795
796TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 3x3_without_bias) {
797 ConvolutionOperatorTester()
798 .depthwise_layout(true)
799 .has_bias(false)
800 .input_size(15, 14)
801 .padding(1, 1)
802 .kernel_size(3, 3)
803 .groups(24)
804 .iterations(3)
805 .TestNHWCxQC8();
806}
807
808TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 3x3s2_with_tf_same_padding) {
809 for (size_t input_height = 14; input_height <= 15; input_height++) {
810 for (size_t input_width = 14; input_width <= 15; input_width++) {
811 ConvolutionOperatorTester()
812 .depthwise_layout(true)
813 .input_size(input_height, input_width)
814 .padding_tf_same(true)
815 .kernel_size(3, 3)
816 .groups(24)
817 .iterations(3)
818 .TestNHWCxQC8();
819 }
820 }
821}
822
823TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 5x5) {
824 ConvolutionOperatorTester()
825 .depthwise_layout(true)
826 .input_size(15, 14)
827 .padding(2, 2)
828 .kernel_size(5, 5)
829 .groups(24)
830 .iterations(3)
831 .TestNHWCxQC8();
832}
833
Marat Dukhan4ef23522022-01-31 16:39:21 -0800834TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 5x5_with_depth_multiplier) {
835 ConvolutionOperatorTester()
836 .depthwise_layout(true)
837 .input_size(15, 14)
838 .padding(2, 2)
839 .kernel_size(5, 5)
840 .groups(24)
841 .group_output_channels(3)
842 .iterations(3)
843 .TestNHWCxQC8();
844}
845
Marat Dukhan97262462021-06-18 16:14:17 -0700846TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 5x5_without_bias) {
847 ConvolutionOperatorTester()
848 .depthwise_layout(true)
849 .has_bias(false)
850 .input_size(15, 14)
851 .padding(2, 2)
852 .kernel_size(5, 5)
853 .groups(24)
854 .iterations(3)
855 .TestNHWCxQC8();
856}
857
Marat Dukhan4ef23522022-01-31 16:39:21 -0800858TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 7x7) {
859 ConvolutionOperatorTester()
860 .depthwise_layout(true)
861 .input_size(15, 14)
862 .padding(3, 3)
863 .kernel_size(7, 7)
864 .groups(24)
865 .iterations(3)
866 .TestNHWCxQC8();
867}
868
869TEST(DEPTHWISE_CONVOLUTION_NHWC_QC8, 7x7_without_bias) {
870 ConvolutionOperatorTester()
871 .depthwise_layout(true)
872 .has_bias(false)
873 .input_size(15, 14)
874 .padding(3, 3)
875 .kernel_size(7, 7)
876 .groups(24)
877 .iterations(3)
878 .TestNHWCxQC8();
879}
880
Marat Dukhan97262462021-06-18 16:14:17 -0700881TEST(CONVOLUTION_NHWC_QC8, setup_changing_input_buffer) {
882 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
883 ConvolutionOperatorTester()
884 .batch_size(3)
885 .input_height(8)
886 .input_width(8)
887 .kernel_height(5)
888 .kernel_width(3)
889 .group_input_channels(15)
890 .group_output_channels(17)
891 .TestSetupNHWCxQC8();
892}
893
894TEST(CONVOLUTION_NHWC_QC8, setup_changing_input_buffer_grouped) {
895 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
896 ConvolutionOperatorTester()
897 .batch_size(3)
898 .input_height(8)
899 .input_width(8)
900 .kernel_height(5)
901 .kernel_width(3)
902 .groups(2)
903 .group_input_channels(15)
904 .group_output_channels(17)
905 .TestSetupNHWCxQC8();
906}
907
908TEST(CONVOLUTION_NHWC_QC8, setup_changing_input_buffer_depthwise) {
909 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
910 ConvolutionOperatorTester()
911 .batch_size(3)
912 .input_height(8)
913 .input_width(8)
914 .kernel_height(3)
915 .kernel_width(3)
916 .groups(19)
917 .group_input_channels(1)
918 .group_output_channels(1)
919 .TestSetupNHWCxQC8();
920}
921
922TEST(CONVOLUTION_NHWC_QC8, setup_increasing_batch) {
923 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
924 ConvolutionOperatorTester()
925 .batch_size(3)
926 .next_batch_size(5)
927 .input_height(8)
928 .input_width(8)
929 .kernel_height(5)
930 .kernel_width(3)
931 .group_input_channels(15)
932 .group_output_channels(17)
933 .TestSetupNHWCxQC8();
934}
935
936TEST(CONVOLUTION_NHWC_QC8, setup_increasing_batch_grouped) {
937 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
938 ConvolutionOperatorTester()
939 .batch_size(3)
940 .next_batch_size(5)
941 .input_height(8)
942 .input_width(8)
943 .kernel_height(5)
944 .kernel_width(3)
945 .groups(2)
946 .group_input_channels(15)
947 .group_output_channels(17)
948 .TestSetupNHWCxQC8();
949}
950
951TEST(CONVOLUTION_NHWC_QC8, setup_increasing_batch_depthwise) {
952 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
953 ConvolutionOperatorTester()
954 .batch_size(3)
955 .next_batch_size(5)
956 .input_height(8)
957 .input_width(8)
958 .kernel_height(3)
959 .kernel_width(3)
960 .groups(19)
961 .group_input_channels(1)
962 .group_output_channels(1)
963 .TestSetupNHWCxQC8();
964}
965
966TEST(CONVOLUTION_NHWC_QC8, setup_decreasing_batch) {
967 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
968 ConvolutionOperatorTester()
969 .batch_size(5)
970 .next_batch_size(3)
971 .input_height(8)
972 .input_width(8)
973 .kernel_height(5)
974 .kernel_width(3)
975 .group_input_channels(15)
976 .group_output_channels(17)
977 .TestSetupNHWCxQC8();
978}
979
980TEST(CONVOLUTION_NHWC_QC8, setup_decreasing_batch_grouped) {
981 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
982 ConvolutionOperatorTester()
983 .batch_size(5)
984 .next_batch_size(3)
985 .input_height(8)
986 .input_width(8)
987 .kernel_height(5)
988 .kernel_width(3)
989 .groups(2)
990 .group_input_channels(15)
991 .group_output_channels(17)
992 .TestSetupNHWCxQC8();
993}
994
995TEST(CONVOLUTION_NHWC_QC8, setup_decreasing_batch_depthwise) {
996 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
997 ConvolutionOperatorTester()
998 .batch_size(5)
999 .next_batch_size(3)
1000 .input_height(8)
1001 .input_width(8)
1002 .kernel_height(3)
1003 .kernel_width(3)
1004 .groups(19)
1005 .group_input_channels(1)
1006 .group_output_channels(1)
1007 .TestSetupNHWCxQC8();
1008}
1009
1010TEST(CONVOLUTION_NHWC_QC8, setup_changing_height) {
1011 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1012 ConvolutionOperatorTester()
1013 .batch_size(3)
1014 .input_height(8)
1015 .input_width(8)
1016 .next_input_height(9)
1017 .kernel_height(5)
1018 .kernel_width(3)
1019 .group_input_channels(15)
1020 .group_output_channels(17)
1021 .TestSetupNHWCxQC8();
1022 ConvolutionOperatorTester()
1023 .batch_size(3)
1024 .input_height(8)
1025 .input_width(8)
1026 .next_input_height(7)
1027 .kernel_height(5)
1028 .kernel_width(3)
1029 .group_input_channels(15)
1030 .group_output_channels(17)
1031 .TestSetupNHWCxQC8();
1032}
1033
1034TEST(CONVOLUTION_NHWC_QC8, setup_changing_height_grouped) {
1035 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1036 ConvolutionOperatorTester()
1037 .batch_size(3)
1038 .input_height(8)
1039 .input_width(8)
1040 .next_input_height(9)
1041 .kernel_height(5)
1042 .kernel_width(3)
1043 .groups(2)
1044 .group_input_channels(15)
1045 .group_output_channels(17)
1046 .TestSetupNHWCxQC8();
1047 ConvolutionOperatorTester()
1048 .batch_size(3)
1049 .input_height(8)
1050 .input_width(8)
1051 .next_input_height(7)
1052 .kernel_height(5)
1053 .kernel_width(3)
1054 .groups(2)
1055 .group_input_channels(15)
1056 .group_output_channels(17)
1057 .TestSetupNHWCxQC8();
1058}
1059
1060TEST(CONVOLUTION_NHWC_QC8, setup_changing_height_depthwise) {
1061 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1062 ConvolutionOperatorTester()
1063 .batch_size(3)
1064 .input_height(8)
1065 .input_width(8)
1066 .next_input_height(9)
1067 .kernel_height(3)
1068 .kernel_width(3)
1069 .groups(19)
1070 .group_input_channels(1)
1071 .group_output_channels(1)
1072 .TestSetupNHWCxQC8();
1073 ConvolutionOperatorTester()
1074 .batch_size(3)
1075 .input_height(8)
1076 .input_width(8)
1077 .next_input_height(7)
1078 .kernel_height(3)
1079 .kernel_width(3)
1080 .groups(19)
1081 .group_input_channels(1)
1082 .group_output_channels(1)
1083 .TestSetupNHWCxQC8();
1084}
1085
1086TEST(CONVOLUTION_NHWC_QC8, setup_changing_width) {
1087 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1088 ConvolutionOperatorTester()
1089 .batch_size(3)
1090 .input_height(8)
1091 .input_width(8)
1092 .next_input_width(9)
1093 .kernel_height(5)
1094 .kernel_width(3)
1095 .group_input_channels(15)
1096 .group_output_channels(17)
1097 .TestSetupNHWCxQC8();
1098 ConvolutionOperatorTester()
1099 .batch_size(3)
1100 .input_height(8)
1101 .input_width(8)
1102 .next_input_width(7)
1103 .kernel_height(5)
1104 .kernel_width(3)
1105 .group_input_channels(15)
1106 .group_output_channels(17)
1107 .TestSetupNHWCxQC8();
1108}
1109
1110TEST(CONVOLUTION_NHWC_QC8, setup_changing_width_grouped) {
1111 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1112 ConvolutionOperatorTester()
1113 .batch_size(3)
1114 .input_height(8)
1115 .input_width(8)
1116 .next_input_width(9)
1117 .kernel_height(5)
1118 .kernel_width(3)
1119 .groups(2)
1120 .group_input_channels(15)
1121 .group_output_channels(17)
1122 .TestSetupNHWCxQC8();
1123 ConvolutionOperatorTester()
1124 .batch_size(3)
1125 .input_height(8)
1126 .input_width(8)
1127 .next_input_width(7)
1128 .kernel_height(5)
1129 .kernel_width(3)
1130 .groups(2)
1131 .group_input_channels(15)
1132 .group_output_channels(17)
1133 .TestSetupNHWCxQC8();
1134}
1135
1136TEST(CONVOLUTION_NHWC_QC8, setup_changing_width_depthwise) {
1137 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1138 ConvolutionOperatorTester()
1139 .batch_size(3)
1140 .input_height(8)
1141 .input_width(8)
1142 .next_input_width(9)
1143 .kernel_height(3)
1144 .kernel_width(3)
1145 .groups(19)
1146 .group_input_channels(1)
1147 .group_output_channels(1)
1148 .TestSetupNHWCxQC8();
1149 ConvolutionOperatorTester()
1150 .batch_size(3)
1151 .input_height(8)
1152 .input_width(8)
1153 .next_input_width(7)
1154 .kernel_height(3)
1155 .kernel_width(3)
1156 .groups(19)
1157 .group_input_channels(1)
1158 .group_output_channels(1)
1159 .TestSetupNHWCxQC8();
1160}
1161
1162TEST(CONVOLUTION_NHWC_QC8, setup_swap_height_and_width) {
1163 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1164 ConvolutionOperatorTester()
1165 .batch_size(3)
1166 .input_height(9)
1167 .input_width(8)
1168 .next_input_height(8)
1169 .next_input_width(9)
1170 .kernel_height(5)
1171 .kernel_width(3)
1172 .group_input_channels(15)
1173 .group_output_channels(17)
1174 .TestSetupNHWCxQC8();
1175}
1176
1177TEST(CONVOLUTION_NHWC_QC8, setup_swap_height_and_width_grouped) {
1178 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1179 ConvolutionOperatorTester()
1180 .batch_size(3)
1181 .input_height(9)
1182 .input_width(8)
1183 .next_input_height(8)
1184 .next_input_width(9)
1185 .kernel_height(5)
1186 .kernel_width(3)
1187 .groups(2)
1188 .group_input_channels(15)
1189 .group_output_channels(17)
1190 .TestSetupNHWCxQC8();
1191}
1192
1193TEST(CONVOLUTION_NHWC_QC8, setup_swap_height_and_width_depthwise) {
1194 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
1195 ConvolutionOperatorTester()
1196 .batch_size(3)
1197 .input_height(9)
1198 .input_width(8)
1199 .next_input_height(8)
1200 .next_input_width(9)
1201 .kernel_height(3)
1202 .kernel_width(3)
1203 .groups(19)
1204 .group_input_channels(1)
1205 .group_output_channels(1)
1206 .TestSetupNHWCxQC8();
1207}
1208
1209
Marat Dukhan16f1e1a2020-08-04 16:38:22 -07001210TEST(CONVOLUTION_NHWC_QS8, 1x1) {
1211 ConvolutionOperatorTester()
1212 .input_size(27, 29)
1213 .kernel_size(1, 1)
1214 .group_input_channels(23)
1215 .group_output_channels(19)
1216 .iterations(3)
1217 .TestNHWCxQS8();
1218}
1219
1220TEST(CONVOLUTION_NHWC_QS8, 1x1_with_qmin) {
1221 ConvolutionOperatorTester()
1222 .input_size(27, 29)
1223 .kernel_size(1, 1)
1224 .group_input_channels(23)
1225 .group_output_channels(19)
1226 .qmin(128)
1227 .iterations(3)
1228 .TestNHWCxQS8();
1229}
1230
1231TEST(CONVOLUTION_NHWC_QS8, 1x1_with_qmax) {
1232 ConvolutionOperatorTester()
1233 .input_size(27, 29)
1234 .kernel_size(1, 1)
1235 .group_input_channels(23)
1236 .group_output_channels(19)
1237 .qmax(128)
1238 .iterations(3)
1239 .TestNHWCxQS8();
1240}
1241
1242TEST(CONVOLUTION_NHWC_QS8, 1x1_with_input_stride) {
1243 ConvolutionOperatorTester()
1244 .input_size(27, 29)
1245 .kernel_size(1, 1)
1246 .input_channel_stride(28)
1247 .group_input_channels(23)
1248 .group_output_channels(19)
1249 .iterations(3)
1250 .TestNHWCxQS8();
1251}
1252
1253TEST(CONVOLUTION_NHWC_QS8, 1x1_with_output_stride) {
1254 ConvolutionOperatorTester()
1255 .input_size(27, 29)
1256 .kernel_size(1, 1)
1257 .output_channel_stride(29)
1258 .group_input_channels(23)
1259 .group_output_channels(19)
1260 .iterations(3)
1261 .TestNHWCxQS8();
1262}
1263
1264TEST(CONVOLUTION_NHWC_QS8, 1x1_without_bias) {
1265 ConvolutionOperatorTester()
1266 .has_bias(false)
1267 .input_size(13, 14)
1268 .kernel_size(1, 1)
1269 .group_input_channels(23)
1270 .group_output_channels(19)
1271 .iterations(3)
1272 .TestNHWCxQS8();
1273}
1274
1275TEST(CONVOLUTION_NHWC_QS8, 1x1_with_batch) {
1276 ConvolutionOperatorTester()
1277 .batch_size(3)
1278 .input_size(13, 14)
1279 .kernel_size(1, 1)
1280 .group_input_channels(23)
1281 .group_output_channels(19)
1282 .iterations(3)
1283 .TestNHWCxQS8();
1284}
1285
1286TEST(CONVOLUTION_NHWC_QS8, grouped_1x1) {
1287 ConvolutionOperatorTester()
1288 .input_size(24, 25)
1289 .kernel_size(1, 1)
1290 .groups(2)
1291 .group_input_channels(17)
1292 .group_output_channels(19)
1293 .iterations(3)
1294 .TestNHWCxQS8();
1295}
1296
1297TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_with_qmin) {
1298 ConvolutionOperatorTester()
1299 .input_size(24, 25)
1300 .kernel_size(1, 1)
1301 .groups(2)
1302 .group_input_channels(17)
1303 .group_output_channels(19)
1304 .qmin(128)
1305 .iterations(3)
1306 .TestNHWCxQS8();
1307}
1308
1309TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_with_qmax) {
1310 ConvolutionOperatorTester()
1311 .input_size(24, 25)
1312 .kernel_size(1, 1)
1313 .groups(2)
1314 .group_input_channels(17)
1315 .group_output_channels(19)
1316 .qmax(128)
1317 .iterations(3)
1318 .TestNHWCxQS8();
1319}
1320
1321TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_with_input_stride) {
1322 ConvolutionOperatorTester()
1323 .input_size(24, 25)
1324 .kernel_size(1, 1)
1325 .groups(2)
1326 .input_channel_stride(37)
1327 .group_input_channels(17)
1328 .group_output_channels(19)
1329 .iterations(3)
1330 .TestNHWCxQS8();
1331}
1332
1333TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_with_output_stride) {
1334 ConvolutionOperatorTester()
1335 .input_size(24, 25)
1336 .kernel_size(1, 1)
1337 .groups(2)
1338 .output_channel_stride(41)
1339 .group_input_channels(17)
1340 .group_output_channels(19)
1341 .iterations(3)
1342 .TestNHWCxQS8();
1343}
1344
1345TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_without_bias) {
1346 ConvolutionOperatorTester()
1347 .has_bias(false)
1348 .input_size(24, 25)
1349 .kernel_size(1, 1)
1350 .groups(2)
1351 .group_input_channels(17)
1352 .group_output_channels(19)
1353 .iterations(3)
1354 .TestNHWCxQS8();
1355}
1356
1357TEST(CONVOLUTION_NHWC_QS8, grouped_1x1_with_batch) {
1358 ConvolutionOperatorTester()
1359 .batch_size(3)
1360 .input_size(24, 25)
1361 .kernel_size(1, 1)
1362 .groups(2)
1363 .group_input_channels(17)
1364 .group_output_channels(19)
1365 .iterations(3)
1366 .TestNHWCxQS8();
1367}
1368
1369TEST(CONVOLUTION_NHWC_QS8, 1x3) {
1370 ConvolutionOperatorTester()
1371 .input_size(20, 19)
1372 .padding_width(1)
1373 .kernel_size(1, 3)
1374 .group_input_channels(17)
1375 .group_output_channels(15)
1376 .iterations(3)
1377 .TestNHWCxQS8();
1378}
1379
1380TEST(CONVOLUTION_NHWC_QS8, grouped_1x3) {
1381 ConvolutionOperatorTester()
1382 .input_size(20, 19)
1383 .padding_width(1)
1384 .kernel_size(1, 3)
1385 .groups(2)
1386 .group_input_channels(17)
1387 .group_output_channels(15)
1388 .iterations(3)
1389 .TestNHWCxQS8();
1390}
1391
1392TEST(CONVOLUTION_NHWC_QS8, 3x1) {
1393 ConvolutionOperatorTester()
1394 .input_size(19, 20)
1395 .padding_height(1)
1396 .kernel_size(3, 1)
1397 .group_input_channels(17)
1398 .group_output_channels(15)
1399 .iterations(3)
1400 .TestNHWCxQS8();
1401}
1402
1403TEST(CONVOLUTION_NHWC_QS8, grouped_3x1) {
1404 ConvolutionOperatorTester()
1405 .input_size(19, 20)
1406 .padding_height(1)
1407 .kernel_size(3, 1)
1408 .groups(2)
1409 .group_input_channels(17)
1410 .group_output_channels(15)
1411 .iterations(3)
1412 .TestNHWCxQS8();
1413}
1414
1415TEST(CONVOLUTION_NHWC_QS8, 3x3) {
1416 ConvolutionOperatorTester()
1417 .input_size(13, 12)
1418 .padding(1)
1419 .kernel_size(3, 3)
1420 .group_input_channels(15)
1421 .group_output_channels(17)
1422 .iterations(3)
1423 .TestNHWCxQS8();
1424}
1425
1426TEST(CONVOLUTION_NHWC_QS8, 3x3_without_padding) {
1427 ConvolutionOperatorTester()
1428 .input_size(13, 12)
1429 .kernel_size(3, 3)
1430 .group_input_channels(15)
1431 .group_output_channels(17)
1432 .iterations(3)
1433 .TestNHWCxQS8();
1434}
1435
1436TEST(CONVOLUTION_NHWC_QS8, 3x3_with_left_padding) {
1437 ConvolutionOperatorTester()
1438 .input_size(13, 12)
1439 .padding_left(1)
1440 .kernel_size(3, 3)
1441 .group_input_channels(15)
1442 .group_output_channels(17)
1443 .iterations(3)
1444 .TestNHWCxQS8();
1445}
1446
1447TEST(CONVOLUTION_NHWC_QS8, 3x3_with_right_padding) {
1448 ConvolutionOperatorTester()
1449 .input_size(13, 12)
1450 .padding_right(1)
1451 .kernel_size(3, 3)
1452 .group_input_channels(15)
1453 .group_output_channels(17)
1454 .iterations(3)
1455 .TestNHWCxQS8();
1456}
1457
1458TEST(CONVOLUTION_NHWC_QS8, 3x3_with_top_padding) {
1459 ConvolutionOperatorTester()
1460 .input_size(13, 12)
1461 .padding_top(1)
1462 .kernel_size(3, 3)
1463 .group_input_channels(15)
1464 .group_output_channels(17)
1465 .iterations(3)
1466 .TestNHWCxQS8();
1467}
1468
1469TEST(CONVOLUTION_NHWC_QS8, 3x3_with_bottom_padding) {
1470 ConvolutionOperatorTester()
1471 .input_size(13, 12)
1472 .padding_bottom(1)
1473 .kernel_size(3, 3)
1474 .group_input_channels(15)
1475 .group_output_channels(17)
1476 .iterations(3)
1477 .TestNHWCxQS8();
1478}
1479
1480TEST(CONVOLUTION_NHWC_QS8, 3x3_with_input_stride) {
1481 ConvolutionOperatorTester()
1482 .input_size(13, 12)
1483 .padding(1)
1484 .kernel_size(3, 3)
1485 .input_channel_stride(22)
1486 .group_input_channels(15)
1487 .group_output_channels(17)
1488 .iterations(3)
1489 .TestNHWCxQS8();
1490}
1491
1492TEST(CONVOLUTION_NHWC_QS8, 3x3_with_output_stride) {
1493 ConvolutionOperatorTester()
1494 .input_size(13, 12)
1495 .padding(1)
1496 .kernel_size(3, 3)
1497 .output_channel_stride(23)
1498 .group_input_channels(15)
1499 .group_output_channels(17)
1500 .iterations(3)
1501 .TestNHWCxQS8();
1502}
1503
1504TEST(CONVOLUTION_NHWC_QS8, 3x3_without_bias) {
1505 ConvolutionOperatorTester()
1506 .has_bias(false)
1507 .input_size(10, 9)
1508 .padding(1)
1509 .kernel_size(3, 3)
1510 .group_input_channels(15)
1511 .group_output_channels(17)
1512 .iterations(3)
1513 .TestNHWCxQS8();
1514}
1515
1516TEST(CONVOLUTION_NHWC_QS8, 3x3_with_batch) {
1517 ConvolutionOperatorTester()
1518 .batch_size(3)
1519 .input_size(10, 9)
1520 .padding(1)
1521 .kernel_size(3, 3)
1522 .group_input_channels(15)
1523 .group_output_channels(17)
1524 .iterations(3)
1525 .TestNHWCxQS8();
1526}
1527
1528TEST(CONVOLUTION_NHWC_QS8, grouped_3x3) {
1529 ConvolutionOperatorTester()
1530 .input_size(10, 11)
1531 .padding(1)
1532 .kernel_size(3, 3)
1533 .groups(2)
1534 .group_input_channels(14)
1535 .group_output_channels(13)
1536 .iterations(3)
1537 .TestNHWCxQS8();
1538}
1539
1540TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_without_padding) {
1541 ConvolutionOperatorTester()
1542 .input_size(13, 12)
1543 .kernel_size(3, 3)
1544 .group_input_channels(15)
1545 .group_output_channels(17)
1546 .iterations(3)
1547 .TestNHWCxQS8();
1548}
1549
1550TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_left_padding) {
1551 ConvolutionOperatorTester()
1552 .input_size(10, 11)
1553 .padding_left(1)
1554 .kernel_size(3, 3)
1555 .groups(2)
1556 .group_input_channels(14)
1557 .group_output_channels(13)
1558 .iterations(3)
1559 .TestNHWCxQS8();
1560}
1561
1562TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_right_padding) {
1563 ConvolutionOperatorTester()
1564 .input_size(10, 11)
1565 .padding_right(1)
1566 .kernel_size(3, 3)
1567 .groups(2)
1568 .group_input_channels(14)
1569 .group_output_channels(13)
1570 .iterations(3)
1571 .TestNHWCxQS8();
1572}
1573
1574TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_top_padding) {
1575 ConvolutionOperatorTester()
1576 .input_size(10, 11)
1577 .padding_top(1)
1578 .kernel_size(3, 3)
1579 .groups(2)
1580 .group_input_channels(14)
1581 .group_output_channels(13)
1582 .iterations(3)
1583 .TestNHWCxQS8();
1584}
1585
1586TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_bottom_padding) {
1587 ConvolutionOperatorTester()
1588 .input_size(10, 11)
1589 .padding_bottom(1)
1590 .kernel_size(3, 3)
1591 .groups(2)
1592 .group_input_channels(14)
1593 .group_output_channels(13)
1594 .iterations(3)
1595 .TestNHWCxQS8();
1596}
1597
1598TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_input_stride) {
1599 ConvolutionOperatorTester()
1600 .input_size(10, 11)
1601 .padding(1)
1602 .kernel_size(3, 3)
1603 .groups(2)
1604 .input_channel_stride(29)
1605 .group_input_channels(14)
1606 .group_output_channels(13)
1607 .iterations(3)
1608 .TestNHWCxQS8();
1609}
1610
1611TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_output_stride) {
1612 ConvolutionOperatorTester()
1613 .input_size(10, 11)
1614 .padding(1)
1615 .kernel_size(3, 3)
1616 .groups(2)
1617 .output_channel_stride(31)
1618 .group_input_channels(14)
1619 .group_output_channels(13)
1620 .iterations(3)
1621 .TestNHWCxQS8();
1622}
1623
1624TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_without_bias) {
1625 ConvolutionOperatorTester()
1626 .has_bias(false)
1627 .input_size(10, 11)
1628 .padding(1)
1629 .kernel_size(3, 3)
1630 .groups(2)
1631 .group_input_channels(14)
1632 .group_output_channels(13)
1633 .iterations(3)
1634 .TestNHWCxQS8();
1635}
1636
1637TEST(CONVOLUTION_NHWC_QS8, grouped_3x3_with_batch) {
1638 ConvolutionOperatorTester()
1639 .batch_size(3)
1640 .input_size(10, 11)
1641 .padding(1)
1642 .kernel_size(3, 3)
1643 .groups(2)
1644 .group_input_channels(14)
1645 .group_output_channels(13)
1646 .iterations(3)
1647 .TestNHWCxQS8();
1648}
1649
1650TEST(CONVOLUTION_NHWC_QS8, 3x3s2) {
1651 ConvolutionOperatorTester()
1652 .input_size(14, 13)
1653 .padding(1)
1654 .kernel_size(3, 3)
1655 .subsampling(2)
1656 .group_input_channels(27)
1657 .group_output_channels(19)
1658 .iterations(3)
1659 .TestNHWCxQS8();
1660}
1661
1662TEST(CONVOLUTION_NHWC_QS8, 3x3s2_with_tf_same_padding) {
1663 for (size_t input_height = 13; input_height <= 14; input_height++) {
1664 for (size_t input_width = 13; input_width <= 14; input_width++) {
1665 ConvolutionOperatorTester()
1666 .input_size(input_height, input_width)
1667 .padding_tf_same(true)
1668 .kernel_size(3, 3)
1669 .subsampling(2)
1670 .group_input_channels(27)
1671 .group_output_channels(19)
1672 .iterations(3)
1673 .TestNHWCxQS8();
1674 }
1675 }
1676}
1677
1678TEST(CONVOLUTION_NHWC_QS8, 3x3s1x2) {
1679 ConvolutionOperatorTester()
1680 .input_size(14, 13)
1681 .padding(1)
1682 .kernel_size(3, 3)
1683 .subsampling(1, 2)
1684 .group_input_channels(27)
1685 .group_output_channels(19)
1686 .iterations(3)
1687 .TestNHWCxQS8();
1688}
1689
1690TEST(CONVOLUTION_NHWC_QS8, 3x3s1x2_with_tf_same_padding) {
1691 for (size_t input_height = 13; input_height <= 14; input_height++) {
1692 for (size_t input_width = 13; input_width <= 14; input_width++) {
1693 ConvolutionOperatorTester()
1694 .input_size(input_height, input_width)
1695 .padding_tf_same(true)
1696 .kernel_size(3, 3)
1697 .subsampling(1, 2)
1698 .group_input_channels(27)
1699 .group_output_channels(19)
1700 .iterations(3)
1701 .TestNHWCxQS8();
1702 }
1703 }
1704}
1705
1706TEST(CONVOLUTION_NHWC_QS8, 3x3s2x1) {
1707 ConvolutionOperatorTester()
1708 .input_size(14, 13)
1709 .padding(1)
1710 .kernel_size(3, 3)
1711 .subsampling(2, 1)
1712 .group_input_channels(27)
1713 .group_output_channels(19)
1714 .iterations(3)
1715 .TestNHWCxQS8();
1716}
1717
1718TEST(CONVOLUTION_NHWC_QS8, 3x3s2x1_with_tf_same_padding) {
1719 for (size_t input_height = 13; input_height <= 14; input_height++) {
1720 for (size_t input_width = 13; input_width <= 14; input_width++) {
1721 ConvolutionOperatorTester()
1722 .input_size(input_height, input_width)
1723 .padding_tf_same(true)
1724 .kernel_size(3, 3)
1725 .subsampling(2, 1)
1726 .group_input_channels(27)
1727 .group_output_channels(19)
1728 .iterations(3)
1729 .TestNHWCxQS8();
1730 }
1731 }
1732}
1733
1734TEST(CONVOLUTION_NHWC_QS8, 3x3d2) {
1735 ConvolutionOperatorTester()
1736 .input_size(14, 13)
1737 .padding(2)
1738 .kernel_size(3, 3)
1739 .dilation(2)
1740 .group_input_channels(27)
1741 .group_output_channels(19)
1742 .iterations(3)
1743 .TestNHWCxQS8();
1744}
1745
1746TEST(CONVOLUTION_NHWC_QS8, 3x3d1x2) {
1747 ConvolutionOperatorTester()
1748 .input_size(14, 13)
1749 .padding(1, 2)
1750 .kernel_size(3, 3)
1751 .dilation(1, 2)
1752 .group_input_channels(27)
1753 .group_output_channels(19)
1754 .iterations(3)
1755 .TestNHWCxQS8();
1756}
1757
1758TEST(CONVOLUTION_NHWC_QS8, 3x3d2x1) {
1759 ConvolutionOperatorTester()
1760 .input_size(14, 13)
1761 .padding(2, 1)
1762 .kernel_size(3, 3)
1763 .dilation(2, 1)
1764 .group_input_channels(27)
1765 .group_output_channels(19)
1766 .iterations(3)
1767 .TestNHWCxQS8();
1768}
1769
1770TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3) {
1771 ConvolutionOperatorTester()
1772 .input_size(15, 14)
1773 .padding(1, 1)
1774 .kernel_size(3, 3)
1775 .groups(27)
1776 .iterations(3)
1777 .TestNHWCxQS8();
1778}
1779
1780TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3_without_bias) {
1781 ConvolutionOperatorTester()
1782 .has_bias(false)
1783 .input_size(15, 14)
1784 .padding(1, 1)
1785 .kernel_size(3, 3)
1786 .groups(27)
1787 .iterations(3)
1788 .TestNHWCxQS8();
1789}
1790
1791TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s2) {
1792 ConvolutionOperatorTester()
1793 .input_size(15, 14)
1794 .padding(1, 1)
1795 .kernel_size(3, 3)
1796 .subsampling(2)
1797 .groups(27)
1798 .iterations(3)
1799 .TestNHWCxQS8();
1800}
1801
1802TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s2_with_tf_same_padding) {
1803 for (size_t input_height = 14; input_height <= 15; input_height++) {
1804 for (size_t input_width = 14; input_width <= 15; input_width++) {
1805 ConvolutionOperatorTester()
1806 .input_size(input_height, input_width)
1807 .padding_tf_same(true)
1808 .kernel_size(3, 3)
1809 .subsampling(2)
1810 .groups(27)
1811 .iterations(3)
1812 .TestNHWCxQS8();
1813 }
1814 }
1815}
1816
1817TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s1x2) {
1818 ConvolutionOperatorTester()
1819 .input_size(15, 14)
1820 .padding(1, 1)
1821 .kernel_size(3, 3)
1822 .subsampling(1, 2)
1823 .groups(27)
1824 .iterations(3)
1825 .TestNHWCxQS8();
1826}
1827
1828TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s1x2_with_tf_same_padding) {
1829 for (size_t input_height = 14; input_height <= 15; input_height++) {
1830 for (size_t input_width = 14; input_width <= 15; input_width++) {
1831 ConvolutionOperatorTester()
1832 .input_size(input_height, input_width)
1833 .padding_tf_same(true)
1834 .kernel_size(3, 3)
1835 .subsampling(1, 2)
1836 .groups(27)
1837 .iterations(3)
1838 .TestNHWCxQS8();
1839 }
1840 }
1841}
1842
1843TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s2x1) {
1844 ConvolutionOperatorTester()
1845 .input_size(15, 14)
1846 .padding(1, 1)
1847 .kernel_size(3, 3)
1848 .subsampling(2, 1)
1849 .groups(27)
1850 .iterations(3)
1851 .TestNHWCxQS8();
1852}
1853
1854TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3s2x1_with_tf_same_padding) {
1855 for (size_t input_height = 14; input_height <= 15; input_height++) {
1856 for (size_t input_width = 14; input_width <= 15; input_width++) {
1857 ConvolutionOperatorTester()
1858 .input_size(input_height, input_width)
1859 .padding_tf_same(true)
1860 .kernel_size(3, 3)
1861 .subsampling(2, 1)
1862 .groups(27)
1863 .iterations(3)
1864 .TestNHWCxQS8();
1865 }
1866 }
1867}
1868
1869TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3d2) {
1870 ConvolutionOperatorTester()
1871 .input_size(15, 14)
1872 .padding(1, 1)
1873 .kernel_size(3, 3)
1874 .dilation(2)
1875 .groups(27)
1876 .iterations(3)
1877 .TestNHWCxQS8();
1878}
1879
1880TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3d1x2) {
1881 ConvolutionOperatorTester()
1882 .input_size(15, 14)
1883 .padding(1, 1)
1884 .kernel_size(3, 3)
1885 .dilation(1, 2)
1886 .groups(27)
1887 .iterations(3)
1888 .TestNHWCxQS8();
1889}
1890
1891TEST(CONVOLUTION_NHWC_QS8, depthwise_3x3d2x1) {
1892 ConvolutionOperatorTester()
1893 .input_size(15, 14)
1894 .padding(1, 1)
1895 .kernel_size(3, 3)
1896 .dilation(2, 1)
1897 .groups(27)
1898 .iterations(3)
1899 .TestNHWCxQS8();
1900}
1901
1902TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 1x1) {
1903 ConvolutionOperatorTester()
1904 .depthwise_layout(true)
1905 .input_size(15, 14)
1906 .kernel_size(1, 1)
1907 .groups(24)
1908 .iterations(3)
1909 .TestNHWCxQS8();
1910}
1911
1912TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 1x1_with_depth_multiplier) {
1913 ConvolutionOperatorTester()
1914 .depthwise_layout(true)
1915 .input_size(15, 14)
1916 .kernel_size(1, 1)
1917 .groups(24)
1918 .group_output_channels(3)
1919 .iterations(3)
1920 .TestNHWCxQS8();
1921}
1922
1923TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 1x1_without_bias) {
1924 ConvolutionOperatorTester()
1925 .depthwise_layout(true)
1926 .has_bias(false)
1927 .input_size(15, 14)
1928 .kernel_size(1, 1)
1929 .groups(24)
1930 .iterations(3)
1931 .TestNHWCxQS8();
1932}
1933
Marat Dukhan4ef23522022-01-31 16:39:21 -08001934TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 2x2) {
1935 ConvolutionOperatorTester()
1936 .depthwise_layout(true)
1937 .input_size(15, 14)
1938 .padding(1, 1)
1939 .kernel_size(2, 2)
1940 .groups(24)
1941 .iterations(3)
1942 .TestNHWCxQS8();
1943}
1944
1945TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 2x2_with_depth_multiplier) {
1946 ConvolutionOperatorTester()
1947 .depthwise_layout(true)
1948 .input_size(15, 14)
1949 .padding(1, 1)
1950 .kernel_size(2, 2)
1951 .groups(24)
1952 .group_output_channels(3)
1953 .iterations(3)
1954 .TestNHWCxQS8();
1955}
1956
1957TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 2x2_without_bias) {
1958 ConvolutionOperatorTester()
1959 .depthwise_layout(true)
1960 .has_bias(false)
1961 .input_size(15, 14)
1962 .padding(1, 1)
1963 .kernel_size(2, 2)
1964 .groups(24)
1965 .iterations(3)
1966 .TestNHWCxQS8();
1967}
1968
Marat Dukhan16f1e1a2020-08-04 16:38:22 -07001969TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 3x3) {
1970 ConvolutionOperatorTester()
1971 .depthwise_layout(true)
1972 .input_size(15, 14)
1973 .padding(1, 1)
1974 .kernel_size(3, 3)
1975 .groups(24)
1976 .iterations(3)
1977 .TestNHWCxQS8();
1978}
1979
1980TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 3x3_with_depth_multiplier) {
1981 ConvolutionOperatorTester()
1982 .depthwise_layout(true)
1983 .input_size(15, 14)
1984 .padding(1, 1)
1985 .kernel_size(3, 3)
1986 .groups(24)
1987 .group_output_channels(3)
1988 .iterations(3)
1989 .TestNHWCxQS8();
1990}
1991
1992TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 3x3_without_bias) {
1993 ConvolutionOperatorTester()
1994 .depthwise_layout(true)
1995 .has_bias(false)
1996 .input_size(15, 14)
1997 .padding(1, 1)
1998 .kernel_size(3, 3)
1999 .groups(24)
2000 .iterations(3)
2001 .TestNHWCxQS8();
2002}
2003
2004TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 3x3s2_with_tf_same_padding) {
2005 for (size_t input_height = 14; input_height <= 15; input_height++) {
2006 for (size_t input_width = 14; input_width <= 15; input_width++) {
2007 ConvolutionOperatorTester()
2008 .depthwise_layout(true)
2009 .input_size(input_height, input_width)
2010 .padding_tf_same(true)
2011 .kernel_size(3, 3)
2012 .groups(24)
2013 .iterations(3)
2014 .TestNHWCxQS8();
2015 }
2016 }
2017}
2018
2019TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 5x5) {
2020 ConvolutionOperatorTester()
2021 .depthwise_layout(true)
2022 .input_size(15, 14)
2023 .padding(2, 2)
2024 .kernel_size(5, 5)
2025 .groups(24)
2026 .iterations(3)
2027 .TestNHWCxQS8();
2028}
2029
Marat Dukhan4ef23522022-01-31 16:39:21 -08002030TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 5x5_with_depth_multiplier) {
2031 ConvolutionOperatorTester()
2032 .depthwise_layout(true)
2033 .input_size(15, 14)
2034 .padding(2, 2)
2035 .kernel_size(5, 5)
2036 .groups(24)
2037 .group_output_channels(3)
2038 .iterations(3)
2039 .TestNHWCxQS8();
2040}
2041
Marat Dukhan16f1e1a2020-08-04 16:38:22 -07002042TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 5x5_without_bias) {
2043 ConvolutionOperatorTester()
2044 .depthwise_layout(true)
2045 .has_bias(false)
2046 .input_size(15, 14)
2047 .padding(2, 2)
2048 .kernel_size(5, 5)
2049 .groups(24)
2050 .iterations(3)
2051 .TestNHWCxQS8();
2052}
2053
Marat Dukhan4ef23522022-01-31 16:39:21 -08002054TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 7x7) {
2055 ConvolutionOperatorTester()
2056 .depthwise_layout(true)
2057 .input_size(15, 14)
2058 .padding(3, 3)
2059 .kernel_size(7, 7)
2060 .groups(24)
2061 .iterations(3)
2062 .TestNHWCxQS8();
2063}
2064
2065TEST(DEPTHWISE_CONVOLUTION_NHWC_QS8, 7x7_without_bias) {
2066 ConvolutionOperatorTester()
2067 .depthwise_layout(true)
2068 .has_bias(false)
2069 .input_size(15, 14)
2070 .padding(3, 3)
2071 .kernel_size(7, 7)
2072 .groups(24)
2073 .iterations(3)
2074 .TestNHWCxQS8();
2075}
2076
Marat Dukhan16f1e1a2020-08-04 16:38:22 -07002077TEST(CONVOLUTION_NHWC_QS8, setup_changing_input_buffer) {
2078 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2079 ConvolutionOperatorTester()
2080 .batch_size(3)
2081 .input_height(8)
2082 .input_width(8)
2083 .kernel_height(5)
2084 .kernel_width(3)
2085 .group_input_channels(15)
2086 .group_output_channels(17)
2087 .TestSetupNHWCxQS8();
2088}
2089
2090TEST(CONVOLUTION_NHWC_QS8, setup_changing_input_buffer_grouped) {
2091 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2092 ConvolutionOperatorTester()
2093 .batch_size(3)
2094 .input_height(8)
2095 .input_width(8)
2096 .kernel_height(5)
2097 .kernel_width(3)
2098 .groups(2)
2099 .group_input_channels(15)
2100 .group_output_channels(17)
2101 .TestSetupNHWCxQS8();
2102}
2103
2104TEST(CONVOLUTION_NHWC_QS8, setup_changing_input_buffer_depthwise) {
2105 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2106 ConvolutionOperatorTester()
2107 .batch_size(3)
2108 .input_height(8)
2109 .input_width(8)
2110 .kernel_height(3)
2111 .kernel_width(3)
2112 .groups(19)
2113 .group_input_channels(1)
2114 .group_output_channels(1)
2115 .TestSetupNHWCxQS8();
2116}
2117
2118TEST(CONVOLUTION_NHWC_QS8, setup_increasing_batch) {
2119 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2120 ConvolutionOperatorTester()
2121 .batch_size(3)
2122 .next_batch_size(5)
2123 .input_height(8)
2124 .input_width(8)
2125 .kernel_height(5)
2126 .kernel_width(3)
2127 .group_input_channels(15)
2128 .group_output_channels(17)
2129 .TestSetupNHWCxQS8();
2130}
2131
2132TEST(CONVOLUTION_NHWC_QS8, setup_increasing_batch_grouped) {
2133 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2134 ConvolutionOperatorTester()
2135 .batch_size(3)
2136 .next_batch_size(5)
2137 .input_height(8)
2138 .input_width(8)
2139 .kernel_height(5)
2140 .kernel_width(3)
2141 .groups(2)
2142 .group_input_channels(15)
2143 .group_output_channels(17)
2144 .TestSetupNHWCxQS8();
2145}
2146
2147TEST(CONVOLUTION_NHWC_QS8, setup_increasing_batch_depthwise) {
2148 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2149 ConvolutionOperatorTester()
2150 .batch_size(3)
2151 .next_batch_size(5)
2152 .input_height(8)
2153 .input_width(8)
2154 .kernel_height(3)
2155 .kernel_width(3)
2156 .groups(19)
2157 .group_input_channels(1)
2158 .group_output_channels(1)
2159 .TestSetupNHWCxQS8();
2160}
2161
2162TEST(CONVOLUTION_NHWC_QS8, setup_decreasing_batch) {
2163 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2164 ConvolutionOperatorTester()
2165 .batch_size(5)
2166 .next_batch_size(3)
2167 .input_height(8)
2168 .input_width(8)
2169 .kernel_height(5)
2170 .kernel_width(3)
2171 .group_input_channels(15)
2172 .group_output_channels(17)
2173 .TestSetupNHWCxQS8();
2174}
2175
2176TEST(CONVOLUTION_NHWC_QS8, setup_decreasing_batch_grouped) {
2177 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2178 ConvolutionOperatorTester()
2179 .batch_size(5)
2180 .next_batch_size(3)
2181 .input_height(8)
2182 .input_width(8)
2183 .kernel_height(5)
2184 .kernel_width(3)
2185 .groups(2)
2186 .group_input_channels(15)
2187 .group_output_channels(17)
2188 .TestSetupNHWCxQS8();
2189}
2190
2191TEST(CONVOLUTION_NHWC_QS8, setup_decreasing_batch_depthwise) {
2192 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2193 ConvolutionOperatorTester()
2194 .batch_size(5)
2195 .next_batch_size(3)
2196 .input_height(8)
2197 .input_width(8)
2198 .kernel_height(3)
2199 .kernel_width(3)
2200 .groups(19)
2201 .group_input_channels(1)
2202 .group_output_channels(1)
2203 .TestSetupNHWCxQS8();
2204}
2205
2206TEST(CONVOLUTION_NHWC_QS8, setup_changing_height) {
2207 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2208 ConvolutionOperatorTester()
2209 .batch_size(3)
2210 .input_height(8)
2211 .input_width(8)
2212 .next_input_height(9)
2213 .kernel_height(5)
2214 .kernel_width(3)
2215 .group_input_channels(15)
2216 .group_output_channels(17)
2217 .TestSetupNHWCxQS8();
2218 ConvolutionOperatorTester()
2219 .batch_size(3)
2220 .input_height(8)
2221 .input_width(8)
2222 .next_input_height(7)
2223 .kernel_height(5)
2224 .kernel_width(3)
2225 .group_input_channels(15)
2226 .group_output_channels(17)
2227 .TestSetupNHWCxQS8();
2228}
2229
2230TEST(CONVOLUTION_NHWC_QS8, setup_changing_height_grouped) {
2231 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2232 ConvolutionOperatorTester()
2233 .batch_size(3)
2234 .input_height(8)
2235 .input_width(8)
2236 .next_input_height(9)
2237 .kernel_height(5)
2238 .kernel_width(3)
2239 .groups(2)
2240 .group_input_channels(15)
2241 .group_output_channels(17)
2242 .TestSetupNHWCxQS8();
2243 ConvolutionOperatorTester()
2244 .batch_size(3)
2245 .input_height(8)
2246 .input_width(8)
2247 .next_input_height(7)
2248 .kernel_height(5)
2249 .kernel_width(3)
2250 .groups(2)
2251 .group_input_channels(15)
2252 .group_output_channels(17)
2253 .TestSetupNHWCxQS8();
2254}
2255
2256TEST(CONVOLUTION_NHWC_QS8, setup_changing_height_depthwise) {
2257 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2258 ConvolutionOperatorTester()
2259 .batch_size(3)
2260 .input_height(8)
2261 .input_width(8)
2262 .next_input_height(9)
2263 .kernel_height(3)
2264 .kernel_width(3)
2265 .groups(19)
2266 .group_input_channels(1)
2267 .group_output_channels(1)
2268 .TestSetupNHWCxQS8();
2269 ConvolutionOperatorTester()
2270 .batch_size(3)
2271 .input_height(8)
2272 .input_width(8)
2273 .next_input_height(7)
2274 .kernel_height(3)
2275 .kernel_width(3)
2276 .groups(19)
2277 .group_input_channels(1)
2278 .group_output_channels(1)
2279 .TestSetupNHWCxQS8();
2280}
2281
2282TEST(CONVOLUTION_NHWC_QS8, setup_changing_width) {
2283 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2284 ConvolutionOperatorTester()
2285 .batch_size(3)
2286 .input_height(8)
2287 .input_width(8)
2288 .next_input_width(9)
2289 .kernel_height(5)
2290 .kernel_width(3)
2291 .group_input_channels(15)
2292 .group_output_channels(17)
2293 .TestSetupNHWCxQS8();
2294 ConvolutionOperatorTester()
2295 .batch_size(3)
2296 .input_height(8)
2297 .input_width(8)
2298 .next_input_width(7)
2299 .kernel_height(5)
2300 .kernel_width(3)
2301 .group_input_channels(15)
2302 .group_output_channels(17)
2303 .TestSetupNHWCxQS8();
2304}
2305
2306TEST(CONVOLUTION_NHWC_QS8, setup_changing_width_grouped) {
2307 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2308 ConvolutionOperatorTester()
2309 .batch_size(3)
2310 .input_height(8)
2311 .input_width(8)
2312 .next_input_width(9)
2313 .kernel_height(5)
2314 .kernel_width(3)
2315 .groups(2)
2316 .group_input_channels(15)
2317 .group_output_channels(17)
2318 .TestSetupNHWCxQS8();
2319 ConvolutionOperatorTester()
2320 .batch_size(3)
2321 .input_height(8)
2322 .input_width(8)
2323 .next_input_width(7)
2324 .kernel_height(5)
2325 .kernel_width(3)
2326 .groups(2)
2327 .group_input_channels(15)
2328 .group_output_channels(17)
2329 .TestSetupNHWCxQS8();
2330}
2331
2332TEST(CONVOLUTION_NHWC_QS8, setup_changing_width_depthwise) {
2333 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2334 ConvolutionOperatorTester()
2335 .batch_size(3)
2336 .input_height(8)
2337 .input_width(8)
2338 .next_input_width(9)
2339 .kernel_height(3)
2340 .kernel_width(3)
2341 .groups(19)
2342 .group_input_channels(1)
2343 .group_output_channels(1)
2344 .TestSetupNHWCxQS8();
2345 ConvolutionOperatorTester()
2346 .batch_size(3)
2347 .input_height(8)
2348 .input_width(8)
2349 .next_input_width(7)
2350 .kernel_height(3)
2351 .kernel_width(3)
2352 .groups(19)
2353 .group_input_channels(1)
2354 .group_output_channels(1)
2355 .TestSetupNHWCxQS8();
2356}
2357
2358TEST(CONVOLUTION_NHWC_QS8, setup_swap_height_and_width) {
2359 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2360 ConvolutionOperatorTester()
2361 .batch_size(3)
2362 .input_height(9)
2363 .input_width(8)
2364 .next_input_height(8)
2365 .next_input_width(9)
2366 .kernel_height(5)
2367 .kernel_width(3)
2368 .group_input_channels(15)
2369 .group_output_channels(17)
2370 .TestSetupNHWCxQS8();
2371}
2372
2373TEST(CONVOLUTION_NHWC_QS8, setup_swap_height_and_width_grouped) {
2374 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2375 ConvolutionOperatorTester()
2376 .batch_size(3)
2377 .input_height(9)
2378 .input_width(8)
2379 .next_input_height(8)
2380 .next_input_width(9)
2381 .kernel_height(5)
2382 .kernel_width(3)
2383 .groups(2)
2384 .group_input_channels(15)
2385 .group_output_channels(17)
2386 .TestSetupNHWCxQS8();
2387}
2388
2389TEST(CONVOLUTION_NHWC_QS8, setup_swap_height_and_width_depthwise) {
2390 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
2391 ConvolutionOperatorTester()
2392 .batch_size(3)
2393 .input_height(9)
2394 .input_width(8)
2395 .next_input_height(8)
2396 .next_input_width(9)
2397 .kernel_height(3)
2398 .kernel_width(3)
2399 .groups(19)
2400 .group_input_channels(1)
2401 .group_output_channels(1)
2402 .TestSetupNHWCxQS8();
2403}
2404
Marat Dukhan08b7a972020-07-14 18:17:29 -07002405TEST(CONVOLUTION_NHWC_QU8, 1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002406 ConvolutionOperatorTester()
2407 .input_size(27, 29)
2408 .kernel_size(1, 1)
2409 .group_input_channels(23)
2410 .group_output_channels(19)
2411 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002412 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002413}
2414
Marat Dukhan08b7a972020-07-14 18:17:29 -07002415TEST(CONVOLUTION_NHWC_QU8, 1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002416 ConvolutionOperatorTester()
2417 .input_size(27, 29)
2418 .kernel_size(1, 1)
2419 .group_input_channels(23)
2420 .group_output_channels(19)
2421 .qmin(128)
2422 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002423 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002424}
2425
Marat Dukhan08b7a972020-07-14 18:17:29 -07002426TEST(CONVOLUTION_NHWC_QU8, 1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002427 ConvolutionOperatorTester()
2428 .input_size(27, 29)
2429 .kernel_size(1, 1)
2430 .group_input_channels(23)
2431 .group_output_channels(19)
2432 .qmax(128)
2433 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002434 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002435}
2436
Marat Dukhan08b7a972020-07-14 18:17:29 -07002437TEST(CONVOLUTION_NHWC_QU8, 1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002438 ConvolutionOperatorTester()
2439 .input_size(27, 29)
2440 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002441 .input_channel_stride(28)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002442 .group_input_channels(23)
2443 .group_output_channels(19)
2444 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002445 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002446}
2447
Marat Dukhan08b7a972020-07-14 18:17:29 -07002448TEST(CONVOLUTION_NHWC_QU8, 1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002449 ConvolutionOperatorTester()
2450 .input_size(27, 29)
2451 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002452 .output_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002453 .group_input_channels(23)
2454 .group_output_channels(19)
2455 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002456 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002457}
2458
Marat Dukhan08b7a972020-07-14 18:17:29 -07002459TEST(CONVOLUTION_NHWC_QU8, 1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07002460 ConvolutionOperatorTester()
2461 .has_bias(false)
2462 .input_size(13, 14)
2463 .kernel_size(1, 1)
2464 .group_input_channels(23)
2465 .group_output_channels(19)
2466 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002467 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07002468}
2469
Marat Dukhan08b7a972020-07-14 18:17:29 -07002470TEST(CONVOLUTION_NHWC_QU8, 1x1_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002471 ConvolutionOperatorTester()
2472 .batch_size(3)
2473 .input_size(13, 14)
2474 .kernel_size(1, 1)
2475 .group_input_channels(23)
2476 .group_output_channels(19)
2477 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002478 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002479}
2480
Marat Dukhan08b7a972020-07-14 18:17:29 -07002481TEST(CONVOLUTION_NHWC_QU8, grouped_1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002482 ConvolutionOperatorTester()
2483 .input_size(24, 25)
2484 .kernel_size(1, 1)
2485 .groups(2)
2486 .group_input_channels(17)
2487 .group_output_channels(19)
2488 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002489 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002490}
2491
Marat Dukhan08b7a972020-07-14 18:17:29 -07002492TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002493 ConvolutionOperatorTester()
2494 .input_size(24, 25)
2495 .kernel_size(1, 1)
2496 .groups(2)
2497 .group_input_channels(17)
2498 .group_output_channels(19)
2499 .qmin(128)
2500 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002501 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002502}
2503
Marat Dukhan08b7a972020-07-14 18:17:29 -07002504TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002505 ConvolutionOperatorTester()
2506 .input_size(24, 25)
2507 .kernel_size(1, 1)
2508 .groups(2)
2509 .group_input_channels(17)
2510 .group_output_channels(19)
2511 .qmax(128)
2512 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002513 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002514}
2515
Marat Dukhan08b7a972020-07-14 18:17:29 -07002516TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002517 ConvolutionOperatorTester()
2518 .input_size(24, 25)
2519 .kernel_size(1, 1)
2520 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002521 .input_channel_stride(37)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002522 .group_input_channels(17)
2523 .group_output_channels(19)
2524 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002525 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002526}
2527
Marat Dukhan08b7a972020-07-14 18:17:29 -07002528TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002529 ConvolutionOperatorTester()
2530 .input_size(24, 25)
2531 .kernel_size(1, 1)
2532 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002533 .output_channel_stride(41)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002534 .group_input_channels(17)
2535 .group_output_channels(19)
2536 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002537 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002538}
2539
Marat Dukhan08b7a972020-07-14 18:17:29 -07002540TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07002541 ConvolutionOperatorTester()
2542 .has_bias(false)
2543 .input_size(24, 25)
2544 .kernel_size(1, 1)
2545 .groups(2)
2546 .group_input_channels(17)
2547 .group_output_channels(19)
2548 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002549 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07002550}
2551
Marat Dukhan08b7a972020-07-14 18:17:29 -07002552TEST(CONVOLUTION_NHWC_QU8, grouped_1x1_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002553 ConvolutionOperatorTester()
2554 .batch_size(3)
2555 .input_size(24, 25)
2556 .kernel_size(1, 1)
2557 .groups(2)
2558 .group_input_channels(17)
2559 .group_output_channels(19)
2560 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002561 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002562}
2563
Marat Dukhan08b7a972020-07-14 18:17:29 -07002564TEST(CONVOLUTION_NHWC_QU8, 1x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002565 ConvolutionOperatorTester()
2566 .input_size(20, 19)
2567 .padding_width(1)
2568 .kernel_size(1, 3)
2569 .group_input_channels(17)
2570 .group_output_channels(15)
2571 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002572 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002573}
2574
Marat Dukhan08b7a972020-07-14 18:17:29 -07002575TEST(CONVOLUTION_NHWC_QU8, grouped_1x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002576 ConvolutionOperatorTester()
2577 .input_size(20, 19)
2578 .padding_width(1)
2579 .kernel_size(1, 3)
2580 .groups(2)
2581 .group_input_channels(17)
2582 .group_output_channels(15)
2583 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002584 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002585}
2586
Marat Dukhan08b7a972020-07-14 18:17:29 -07002587TEST(CONVOLUTION_NHWC_QU8, 3x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002588 ConvolutionOperatorTester()
2589 .input_size(19, 20)
2590 .padding_height(1)
2591 .kernel_size(3, 1)
2592 .group_input_channels(17)
2593 .group_output_channels(15)
2594 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002595 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002596}
2597
Marat Dukhan08b7a972020-07-14 18:17:29 -07002598TEST(CONVOLUTION_NHWC_QU8, grouped_3x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002599 ConvolutionOperatorTester()
2600 .input_size(19, 20)
2601 .padding_height(1)
2602 .kernel_size(3, 1)
2603 .groups(2)
2604 .group_input_channels(17)
2605 .group_output_channels(15)
2606 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002607 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002608}
2609
Marat Dukhan08b7a972020-07-14 18:17:29 -07002610TEST(CONVOLUTION_NHWC_QU8, 3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002611 ConvolutionOperatorTester()
2612 .input_size(13, 12)
2613 .padding(1)
2614 .kernel_size(3, 3)
2615 .group_input_channels(15)
2616 .group_output_channels(17)
2617 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002618 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002619}
2620
Marat Dukhan08b7a972020-07-14 18:17:29 -07002621TEST(CONVOLUTION_NHWC_QU8, 3x3_without_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002622 ConvolutionOperatorTester()
2623 .input_size(13, 12)
2624 .kernel_size(3, 3)
2625 .group_input_channels(15)
2626 .group_output_channels(17)
2627 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002628 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002629}
2630
Marat Dukhan08b7a972020-07-14 18:17:29 -07002631TEST(CONVOLUTION_NHWC_QU8, 3x3_with_left_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002632 ConvolutionOperatorTester()
2633 .input_size(13, 12)
2634 .padding_left(1)
2635 .kernel_size(3, 3)
2636 .group_input_channels(15)
2637 .group_output_channels(17)
2638 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002639 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002640}
2641
Marat Dukhan08b7a972020-07-14 18:17:29 -07002642TEST(CONVOLUTION_NHWC_QU8, 3x3_with_right_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002643 ConvolutionOperatorTester()
2644 .input_size(13, 12)
2645 .padding_right(1)
2646 .kernel_size(3, 3)
2647 .group_input_channels(15)
2648 .group_output_channels(17)
2649 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002650 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002651}
2652
Marat Dukhan08b7a972020-07-14 18:17:29 -07002653TEST(CONVOLUTION_NHWC_QU8, 3x3_with_top_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002654 ConvolutionOperatorTester()
2655 .input_size(13, 12)
2656 .padding_top(1)
2657 .kernel_size(3, 3)
2658 .group_input_channels(15)
2659 .group_output_channels(17)
2660 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002661 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002662}
2663
Marat Dukhan08b7a972020-07-14 18:17:29 -07002664TEST(CONVOLUTION_NHWC_QU8, 3x3_with_bottom_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002665 ConvolutionOperatorTester()
2666 .input_size(13, 12)
2667 .padding_bottom(1)
2668 .kernel_size(3, 3)
2669 .group_input_channels(15)
2670 .group_output_channels(17)
2671 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002672 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002673}
2674
Marat Dukhan08b7a972020-07-14 18:17:29 -07002675TEST(CONVOLUTION_NHWC_QU8, 3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002676 ConvolutionOperatorTester()
2677 .input_size(13, 12)
2678 .padding(1)
2679 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002680 .input_channel_stride(22)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002681 .group_input_channels(15)
2682 .group_output_channels(17)
2683 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002684 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002685}
2686
Marat Dukhan08b7a972020-07-14 18:17:29 -07002687TEST(CONVOLUTION_NHWC_QU8, 3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002688 ConvolutionOperatorTester()
2689 .input_size(13, 12)
2690 .padding(1)
2691 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002692 .output_channel_stride(23)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002693 .group_input_channels(15)
2694 .group_output_channels(17)
2695 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002696 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002697}
2698
Marat Dukhan08b7a972020-07-14 18:17:29 -07002699TEST(CONVOLUTION_NHWC_QU8, 3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07002700 ConvolutionOperatorTester()
2701 .has_bias(false)
2702 .input_size(10, 9)
2703 .padding(1)
2704 .kernel_size(3, 3)
2705 .group_input_channels(15)
2706 .group_output_channels(17)
2707 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002708 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07002709}
2710
Marat Dukhan08b7a972020-07-14 18:17:29 -07002711TEST(CONVOLUTION_NHWC_QU8, 3x3_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002712 ConvolutionOperatorTester()
2713 .batch_size(3)
2714 .input_size(10, 9)
2715 .padding(1)
2716 .kernel_size(3, 3)
2717 .group_input_channels(15)
2718 .group_output_channels(17)
2719 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002720 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002721}
2722
Marat Dukhan08b7a972020-07-14 18:17:29 -07002723TEST(CONVOLUTION_NHWC_QU8, grouped_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002724 ConvolutionOperatorTester()
2725 .input_size(10, 11)
2726 .padding(1)
2727 .kernel_size(3, 3)
2728 .groups(2)
2729 .group_input_channels(14)
2730 .group_output_channels(13)
2731 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002732 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002733}
2734
Marat Dukhan08b7a972020-07-14 18:17:29 -07002735TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_without_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002736 ConvolutionOperatorTester()
2737 .input_size(13, 12)
2738 .kernel_size(3, 3)
2739 .group_input_channels(15)
2740 .group_output_channels(17)
2741 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002742 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002743}
2744
Marat Dukhan08b7a972020-07-14 18:17:29 -07002745TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_left_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002746 ConvolutionOperatorTester()
2747 .input_size(10, 11)
2748 .padding_left(1)
2749 .kernel_size(3, 3)
2750 .groups(2)
2751 .group_input_channels(14)
2752 .group_output_channels(13)
2753 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002754 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002755}
2756
Marat Dukhan08b7a972020-07-14 18:17:29 -07002757TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_right_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002758 ConvolutionOperatorTester()
2759 .input_size(10, 11)
2760 .padding_right(1)
2761 .kernel_size(3, 3)
2762 .groups(2)
2763 .group_input_channels(14)
2764 .group_output_channels(13)
2765 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002766 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002767}
2768
Marat Dukhan08b7a972020-07-14 18:17:29 -07002769TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_top_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002770 ConvolutionOperatorTester()
2771 .input_size(10, 11)
2772 .padding_top(1)
2773 .kernel_size(3, 3)
2774 .groups(2)
2775 .group_input_channels(14)
2776 .group_output_channels(13)
2777 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002778 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002779}
2780
Marat Dukhan08b7a972020-07-14 18:17:29 -07002781TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_bottom_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002782 ConvolutionOperatorTester()
2783 .input_size(10, 11)
2784 .padding_bottom(1)
2785 .kernel_size(3, 3)
2786 .groups(2)
2787 .group_input_channels(14)
2788 .group_output_channels(13)
2789 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002790 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002791}
2792
Marat Dukhan08b7a972020-07-14 18:17:29 -07002793TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002794 ConvolutionOperatorTester()
2795 .input_size(10, 11)
2796 .padding(1)
2797 .kernel_size(3, 3)
2798 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002799 .input_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002800 .group_input_channels(14)
2801 .group_output_channels(13)
2802 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002803 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002804}
2805
Marat Dukhan08b7a972020-07-14 18:17:29 -07002806TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002807 ConvolutionOperatorTester()
2808 .input_size(10, 11)
2809 .padding(1)
2810 .kernel_size(3, 3)
2811 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07002812 .output_channel_stride(31)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002813 .group_input_channels(14)
2814 .group_output_channels(13)
2815 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002816 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002817}
2818
Marat Dukhan08b7a972020-07-14 18:17:29 -07002819TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07002820 ConvolutionOperatorTester()
2821 .has_bias(false)
2822 .input_size(10, 11)
2823 .padding(1)
2824 .kernel_size(3, 3)
2825 .groups(2)
2826 .group_input_channels(14)
2827 .group_output_channels(13)
2828 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002829 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07002830}
2831
Marat Dukhan08b7a972020-07-14 18:17:29 -07002832TEST(CONVOLUTION_NHWC_QU8, grouped_3x3_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002833 ConvolutionOperatorTester()
2834 .batch_size(3)
2835 .input_size(10, 11)
2836 .padding(1)
2837 .kernel_size(3, 3)
2838 .groups(2)
2839 .group_input_channels(14)
2840 .group_output_channels(13)
2841 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002842 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002843}
2844
Marat Dukhan08b7a972020-07-14 18:17:29 -07002845TEST(CONVOLUTION_NHWC_QU8, 3x3s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002846 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002847 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002848 .padding(1)
2849 .kernel_size(3, 3)
2850 .subsampling(2)
2851 .group_input_channels(27)
2852 .group_output_channels(19)
2853 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002854 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002855}
2856
Marat Dukhan08b7a972020-07-14 18:17:29 -07002857TEST(CONVOLUTION_NHWC_QU8, 3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07002858 for (size_t input_height = 13; input_height <= 14; input_height++) {
2859 for (size_t input_width = 13; input_width <= 14; input_width++) {
2860 ConvolutionOperatorTester()
2861 .input_size(input_height, input_width)
2862 .padding_tf_same(true)
2863 .kernel_size(3, 3)
2864 .subsampling(2)
2865 .group_input_channels(27)
2866 .group_output_channels(19)
2867 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002868 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07002869 }
2870 }
2871}
2872
Marat Dukhan08b7a972020-07-14 18:17:29 -07002873TEST(CONVOLUTION_NHWC_QU8, 3x3s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002874 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002875 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002876 .padding(1)
2877 .kernel_size(3, 3)
2878 .subsampling(1, 2)
2879 .group_input_channels(27)
2880 .group_output_channels(19)
2881 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002882 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002883}
2884
Marat Dukhan08b7a972020-07-14 18:17:29 -07002885TEST(CONVOLUTION_NHWC_QU8, 3x3s1x2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07002886 for (size_t input_height = 13; input_height <= 14; input_height++) {
2887 for (size_t input_width = 13; input_width <= 14; input_width++) {
2888 ConvolutionOperatorTester()
2889 .input_size(input_height, input_width)
2890 .padding_tf_same(true)
2891 .kernel_size(3, 3)
2892 .subsampling(1, 2)
2893 .group_input_channels(27)
2894 .group_output_channels(19)
2895 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002896 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07002897 }
2898 }
2899}
2900
Marat Dukhan08b7a972020-07-14 18:17:29 -07002901TEST(CONVOLUTION_NHWC_QU8, 3x3s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002902 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002903 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002904 .padding(1)
2905 .kernel_size(3, 3)
2906 .subsampling(2, 1)
2907 .group_input_channels(27)
2908 .group_output_channels(19)
2909 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002910 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002911}
2912
Marat Dukhan08b7a972020-07-14 18:17:29 -07002913TEST(CONVOLUTION_NHWC_QU8, 3x3s2x1_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07002914 for (size_t input_height = 13; input_height <= 14; input_height++) {
2915 for (size_t input_width = 13; input_width <= 14; input_width++) {
2916 ConvolutionOperatorTester()
2917 .input_size(input_height, input_width)
2918 .padding_tf_same(true)
2919 .kernel_size(3, 3)
2920 .subsampling(2, 1)
2921 .group_input_channels(27)
2922 .group_output_channels(19)
2923 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002924 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07002925 }
2926 }
2927}
2928
Marat Dukhan08b7a972020-07-14 18:17:29 -07002929TEST(CONVOLUTION_NHWC_QU8, 3x3d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002930 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002931 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002932 .padding(2)
2933 .kernel_size(3, 3)
2934 .dilation(2)
2935 .group_input_channels(27)
2936 .group_output_channels(19)
2937 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002938 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002939}
2940
Marat Dukhan08b7a972020-07-14 18:17:29 -07002941TEST(CONVOLUTION_NHWC_QU8, 3x3d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002942 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002943 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002944 .padding(1, 2)
2945 .kernel_size(3, 3)
2946 .dilation(1, 2)
2947 .group_input_channels(27)
2948 .group_output_channels(19)
2949 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002950 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002951}
2952
Marat Dukhan08b7a972020-07-14 18:17:29 -07002953TEST(CONVOLUTION_NHWC_QU8, 3x3d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002954 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07002955 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07002956 .padding(2, 1)
2957 .kernel_size(3, 3)
2958 .dilation(2, 1)
2959 .group_input_channels(27)
2960 .group_output_channels(19)
2961 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002962 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002963}
2964
Marat Dukhan08b7a972020-07-14 18:17:29 -07002965TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002966 ConvolutionOperatorTester()
2967 .input_size(15, 14)
2968 .padding(1, 1)
2969 .kernel_size(3, 3)
2970 .groups(27)
2971 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002972 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002973}
2974
Marat Dukhan08b7a972020-07-14 18:17:29 -07002975TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07002976 ConvolutionOperatorTester()
2977 .has_bias(false)
2978 .input_size(15, 14)
2979 .padding(1, 1)
2980 .kernel_size(3, 3)
2981 .groups(27)
2982 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002983 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07002984}
2985
Marat Dukhan08b7a972020-07-14 18:17:29 -07002986TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07002987 ConvolutionOperatorTester()
2988 .input_size(15, 14)
2989 .padding(1, 1)
2990 .kernel_size(3, 3)
2991 .subsampling(2)
2992 .groups(27)
2993 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07002994 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07002995}
2996
Marat Dukhan08b7a972020-07-14 18:17:29 -07002997TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07002998 for (size_t input_height = 14; input_height <= 15; input_height++) {
2999 for (size_t input_width = 14; input_width <= 15; input_width++) {
3000 ConvolutionOperatorTester()
3001 .input_size(input_height, input_width)
3002 .padding_tf_same(true)
3003 .kernel_size(3, 3)
3004 .subsampling(2)
3005 .groups(27)
3006 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003007 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07003008 }
3009 }
3010}
3011
Marat Dukhan08b7a972020-07-14 18:17:29 -07003012TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003013 ConvolutionOperatorTester()
3014 .input_size(15, 14)
3015 .padding(1, 1)
3016 .kernel_size(3, 3)
3017 .subsampling(1, 2)
3018 .groups(27)
3019 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003020 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003021}
3022
Marat Dukhan08b7a972020-07-14 18:17:29 -07003023TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s1x2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07003024 for (size_t input_height = 14; input_height <= 15; input_height++) {
3025 for (size_t input_width = 14; input_width <= 15; input_width++) {
3026 ConvolutionOperatorTester()
3027 .input_size(input_height, input_width)
3028 .padding_tf_same(true)
3029 .kernel_size(3, 3)
3030 .subsampling(1, 2)
3031 .groups(27)
3032 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003033 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07003034 }
3035 }
3036}
3037
Marat Dukhan08b7a972020-07-14 18:17:29 -07003038TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003039 ConvolutionOperatorTester()
3040 .input_size(15, 14)
3041 .padding(1, 1)
3042 .kernel_size(3, 3)
3043 .subsampling(2, 1)
3044 .groups(27)
3045 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003046 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003047}
3048
Marat Dukhan08b7a972020-07-14 18:17:29 -07003049TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3s2x1_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07003050 for (size_t input_height = 14; input_height <= 15; input_height++) {
3051 for (size_t input_width = 14; input_width <= 15; input_width++) {
3052 ConvolutionOperatorTester()
3053 .input_size(input_height, input_width)
3054 .padding_tf_same(true)
3055 .kernel_size(3, 3)
3056 .subsampling(2, 1)
3057 .groups(27)
3058 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003059 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07003060 }
3061 }
3062}
3063
Marat Dukhan08b7a972020-07-14 18:17:29 -07003064TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003065 ConvolutionOperatorTester()
3066 .input_size(15, 14)
3067 .padding(1, 1)
3068 .kernel_size(3, 3)
3069 .dilation(2)
3070 .groups(27)
3071 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003072 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003073}
3074
Marat Dukhan08b7a972020-07-14 18:17:29 -07003075TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003076 ConvolutionOperatorTester()
3077 .input_size(15, 14)
3078 .padding(1, 1)
3079 .kernel_size(3, 3)
3080 .dilation(1, 2)
3081 .groups(27)
3082 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003083 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003084}
3085
Marat Dukhan08b7a972020-07-14 18:17:29 -07003086TEST(CONVOLUTION_NHWC_QU8, depthwise_3x3d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003087 ConvolutionOperatorTester()
3088 .input_size(15, 14)
3089 .padding(1, 1)
3090 .kernel_size(3, 3)
3091 .dilation(2, 1)
3092 .groups(27)
3093 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003094 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003095}
3096
Marat Dukhan08b7a972020-07-14 18:17:29 -07003097TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003098 ConvolutionOperatorTester()
3099 .depthwise_layout(true)
3100 .input_size(15, 14)
3101 .kernel_size(1, 1)
3102 .groups(24)
3103 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003104 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003105}
3106
Marat Dukhan08b7a972020-07-14 18:17:29 -07003107TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 1x1_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003108 ConvolutionOperatorTester()
3109 .depthwise_layout(true)
3110 .input_size(15, 14)
3111 .kernel_size(1, 1)
3112 .groups(24)
3113 .group_output_channels(3)
3114 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003115 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003116}
3117
Marat Dukhan08b7a972020-07-14 18:17:29 -07003118TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07003119 ConvolutionOperatorTester()
3120 .depthwise_layout(true)
3121 .has_bias(false)
3122 .input_size(15, 14)
3123 .kernel_size(1, 1)
3124 .groups(24)
3125 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003126 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07003127}
3128
Marat Dukhan4ef23522022-01-31 16:39:21 -08003129TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 2x2) {
3130 ConvolutionOperatorTester()
3131 .depthwise_layout(true)
3132 .input_size(15, 14)
3133 .padding(1, 1)
3134 .kernel_size(2, 2)
3135 .groups(24)
3136 .iterations(3)
3137 .TestNHWCxQU8();
3138}
3139
3140TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 2x2_with_depth_multiplier) {
3141 ConvolutionOperatorTester()
3142 .depthwise_layout(true)
3143 .input_size(15, 14)
3144 .padding(1, 1)
3145 .kernel_size(2, 2)
3146 .groups(24)
3147 .group_output_channels(3)
3148 .iterations(3)
3149 .TestNHWCxQU8();
3150}
3151
3152TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 2x2_without_bias) {
3153 ConvolutionOperatorTester()
3154 .depthwise_layout(true)
3155 .has_bias(false)
3156 .input_size(15, 14)
3157 .padding(1, 1)
3158 .kernel_size(2, 2)
3159 .groups(24)
3160 .iterations(3)
3161 .TestNHWCxQU8();
3162}
3163
Marat Dukhan08b7a972020-07-14 18:17:29 -07003164TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003165 ConvolutionOperatorTester()
3166 .depthwise_layout(true)
3167 .input_size(15, 14)
3168 .padding(1, 1)
3169 .kernel_size(3, 3)
3170 .groups(24)
3171 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003172 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003173}
3174
Marat Dukhan08b7a972020-07-14 18:17:29 -07003175TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 3x3_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003176 ConvolutionOperatorTester()
3177 .depthwise_layout(true)
3178 .input_size(15, 14)
3179 .padding(1, 1)
3180 .kernel_size(3, 3)
3181 .groups(24)
3182 .group_output_channels(3)
3183 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003184 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003185}
3186
Marat Dukhan08b7a972020-07-14 18:17:29 -07003187TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07003188 ConvolutionOperatorTester()
3189 .depthwise_layout(true)
3190 .has_bias(false)
3191 .input_size(15, 14)
3192 .padding(1, 1)
3193 .kernel_size(3, 3)
3194 .groups(24)
3195 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003196 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07003197}
3198
Marat Dukhan08b7a972020-07-14 18:17:29 -07003199TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07003200 for (size_t input_height = 14; input_height <= 15; input_height++) {
3201 for (size_t input_width = 14; input_width <= 15; input_width++) {
3202 ConvolutionOperatorTester()
3203 .depthwise_layout(true)
3204 .input_size(input_height, input_width)
3205 .padding_tf_same(true)
3206 .kernel_size(3, 3)
3207 .groups(24)
3208 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003209 .TestNHWCxQU8();
Marat Dukhan8440fde2019-10-24 12:46:13 -07003210 }
3211 }
3212}
3213
Marat Dukhan08b7a972020-07-14 18:17:29 -07003214TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 5x5) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003215 ConvolutionOperatorTester()
3216 .depthwise_layout(true)
3217 .input_size(15, 14)
3218 .padding(2, 2)
3219 .kernel_size(5, 5)
3220 .groups(24)
3221 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003222 .TestNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003223}
3224
Marat Dukhan4ef23522022-01-31 16:39:21 -08003225TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 5x5_with_depth_multiplier) {
3226 ConvolutionOperatorTester()
3227 .depthwise_layout(true)
3228 .input_size(15, 14)
3229 .padding(2, 2)
3230 .kernel_size(5, 5)
3231 .groups(24)
3232 .group_output_channels(3)
3233 .iterations(3)
3234 .TestNHWCxQU8();
3235}
3236
Marat Dukhan08b7a972020-07-14 18:17:29 -07003237TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 5x5_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07003238 ConvolutionOperatorTester()
3239 .depthwise_layout(true)
3240 .has_bias(false)
3241 .input_size(15, 14)
3242 .padding(2, 2)
3243 .kernel_size(5, 5)
3244 .groups(24)
3245 .iterations(3)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003246 .TestNHWCxQU8();
Marat Dukhanf568f082019-10-30 09:47:07 -07003247}
3248
Marat Dukhan4ef23522022-01-31 16:39:21 -08003249TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 7x7) {
3250 ConvolutionOperatorTester()
3251 .depthwise_layout(true)
3252 .input_size(15, 14)
3253 .padding(3, 3)
3254 .kernel_size(7, 7)
3255 .groups(24)
3256 .iterations(3)
3257 .TestNHWCxQU8();
3258}
3259
3260TEST(DEPTHWISE_CONVOLUTION_NHWC_QU8, 7x7_without_bias) {
3261 ConvolutionOperatorTester()
3262 .depthwise_layout(true)
3263 .has_bias(false)
3264 .input_size(15, 14)
3265 .padding(3, 3)
3266 .kernel_size(7, 7)
3267 .groups(24)
3268 .iterations(3)
3269 .TestNHWCxQU8();
3270}
3271
Marat Dukhan08b7a972020-07-14 18:17:29 -07003272TEST(CONVOLUTION_NHWC_QU8, setup_changing_input_buffer) {
Marat Dukhan202eed02019-11-20 16:21:10 -08003273 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
3274 ConvolutionOperatorTester()
3275 .batch_size(3)
3276 .input_height(8)
3277 .input_width(8)
3278 .kernel_height(5)
3279 .kernel_width(3)
3280 .group_input_channels(15)
3281 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003282 .TestSetupNHWCxQU8();
Marat Dukhan202eed02019-11-20 16:21:10 -08003283}
3284
Marat Dukhan08b7a972020-07-14 18:17:29 -07003285TEST(CONVOLUTION_NHWC_QU8, setup_changing_input_buffer_grouped) {
Marat Dukhan202eed02019-11-20 16:21:10 -08003286 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
3287 ConvolutionOperatorTester()
3288 .batch_size(3)
3289 .input_height(8)
3290 .input_width(8)
3291 .kernel_height(5)
3292 .kernel_width(3)
3293 .groups(2)
3294 .group_input_channels(15)
3295 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003296 .TestSetupNHWCxQU8();
Marat Dukhan202eed02019-11-20 16:21:10 -08003297}
3298
Marat Dukhan08b7a972020-07-14 18:17:29 -07003299TEST(CONVOLUTION_NHWC_QU8, setup_changing_input_buffer_depthwise) {
Marat Dukhan202eed02019-11-20 16:21:10 -08003300 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
3301 ConvolutionOperatorTester()
3302 .batch_size(3)
3303 .input_height(8)
3304 .input_width(8)
3305 .kernel_height(3)
3306 .kernel_width(3)
3307 .groups(19)
3308 .group_input_channels(1)
3309 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003310 .TestSetupNHWCxQU8();
Marat Dukhan202eed02019-11-20 16:21:10 -08003311}
3312
Marat Dukhan08b7a972020-07-14 18:17:29 -07003313TEST(CONVOLUTION_NHWC_QU8, setup_increasing_batch) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003314 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003315 ConvolutionOperatorTester()
3316 .batch_size(3)
3317 .next_batch_size(5)
3318 .input_height(8)
3319 .input_width(8)
3320 .kernel_height(5)
3321 .kernel_width(3)
3322 .group_input_channels(15)
3323 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003324 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003325}
3326
Marat Dukhan08b7a972020-07-14 18:17:29 -07003327TEST(CONVOLUTION_NHWC_QU8, setup_increasing_batch_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003328 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003329 ConvolutionOperatorTester()
3330 .batch_size(3)
3331 .next_batch_size(5)
3332 .input_height(8)
3333 .input_width(8)
3334 .kernel_height(5)
3335 .kernel_width(3)
3336 .groups(2)
3337 .group_input_channels(15)
3338 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003339 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003340}
3341
Marat Dukhan08b7a972020-07-14 18:17:29 -07003342TEST(CONVOLUTION_NHWC_QU8, setup_increasing_batch_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003343 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003344 ConvolutionOperatorTester()
3345 .batch_size(3)
3346 .next_batch_size(5)
3347 .input_height(8)
3348 .input_width(8)
3349 .kernel_height(3)
3350 .kernel_width(3)
3351 .groups(19)
3352 .group_input_channels(1)
3353 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003354 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003355}
3356
Marat Dukhan08b7a972020-07-14 18:17:29 -07003357TEST(CONVOLUTION_NHWC_QU8, setup_decreasing_batch) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003358 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003359 ConvolutionOperatorTester()
3360 .batch_size(5)
3361 .next_batch_size(3)
3362 .input_height(8)
3363 .input_width(8)
3364 .kernel_height(5)
3365 .kernel_width(3)
3366 .group_input_channels(15)
3367 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003368 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003369}
3370
Marat Dukhan08b7a972020-07-14 18:17:29 -07003371TEST(CONVOLUTION_NHWC_QU8, setup_decreasing_batch_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003372 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003373 ConvolutionOperatorTester()
3374 .batch_size(5)
3375 .next_batch_size(3)
3376 .input_height(8)
3377 .input_width(8)
3378 .kernel_height(5)
3379 .kernel_width(3)
3380 .groups(2)
3381 .group_input_channels(15)
3382 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003383 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003384}
3385
Marat Dukhan08b7a972020-07-14 18:17:29 -07003386TEST(CONVOLUTION_NHWC_QU8, setup_decreasing_batch_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003387 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003388 ConvolutionOperatorTester()
3389 .batch_size(5)
3390 .next_batch_size(3)
3391 .input_height(8)
3392 .input_width(8)
3393 .kernel_height(3)
3394 .kernel_width(3)
3395 .groups(19)
3396 .group_input_channels(1)
3397 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003398 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003399}
3400
Marat Dukhan08b7a972020-07-14 18:17:29 -07003401TEST(CONVOLUTION_NHWC_QU8, setup_changing_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003402 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003403 ConvolutionOperatorTester()
3404 .batch_size(3)
3405 .input_height(8)
3406 .input_width(8)
3407 .next_input_height(9)
3408 .kernel_height(5)
3409 .kernel_width(3)
3410 .group_input_channels(15)
3411 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003412 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003413 ConvolutionOperatorTester()
3414 .batch_size(3)
3415 .input_height(8)
3416 .input_width(8)
3417 .next_input_height(7)
3418 .kernel_height(5)
3419 .kernel_width(3)
3420 .group_input_channels(15)
3421 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003422 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003423}
3424
Marat Dukhan08b7a972020-07-14 18:17:29 -07003425TEST(CONVOLUTION_NHWC_QU8, setup_changing_height_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003426 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003427 ConvolutionOperatorTester()
3428 .batch_size(3)
3429 .input_height(8)
3430 .input_width(8)
3431 .next_input_height(9)
3432 .kernel_height(5)
3433 .kernel_width(3)
3434 .groups(2)
3435 .group_input_channels(15)
3436 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003437 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003438 ConvolutionOperatorTester()
3439 .batch_size(3)
3440 .input_height(8)
3441 .input_width(8)
3442 .next_input_height(7)
3443 .kernel_height(5)
3444 .kernel_width(3)
3445 .groups(2)
3446 .group_input_channels(15)
3447 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003448 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003449}
3450
Marat Dukhan08b7a972020-07-14 18:17:29 -07003451TEST(CONVOLUTION_NHWC_QU8, setup_changing_height_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003452 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003453 ConvolutionOperatorTester()
3454 .batch_size(3)
3455 .input_height(8)
3456 .input_width(8)
3457 .next_input_height(9)
3458 .kernel_height(3)
3459 .kernel_width(3)
3460 .groups(19)
3461 .group_input_channels(1)
3462 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003463 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003464 ConvolutionOperatorTester()
3465 .batch_size(3)
3466 .input_height(8)
3467 .input_width(8)
3468 .next_input_height(7)
3469 .kernel_height(3)
3470 .kernel_width(3)
3471 .groups(19)
3472 .group_input_channels(1)
3473 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003474 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003475}
3476
Marat Dukhan08b7a972020-07-14 18:17:29 -07003477TEST(CONVOLUTION_NHWC_QU8, setup_changing_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003478 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003479 ConvolutionOperatorTester()
3480 .batch_size(3)
3481 .input_height(8)
3482 .input_width(8)
3483 .next_input_width(9)
3484 .kernel_height(5)
3485 .kernel_width(3)
3486 .group_input_channels(15)
3487 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003488 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003489 ConvolutionOperatorTester()
3490 .batch_size(3)
3491 .input_height(8)
3492 .input_width(8)
3493 .next_input_width(7)
3494 .kernel_height(5)
3495 .kernel_width(3)
3496 .group_input_channels(15)
3497 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003498 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003499}
3500
Marat Dukhan08b7a972020-07-14 18:17:29 -07003501TEST(CONVOLUTION_NHWC_QU8, setup_changing_width_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003502 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003503 ConvolutionOperatorTester()
3504 .batch_size(3)
3505 .input_height(8)
3506 .input_width(8)
3507 .next_input_width(9)
3508 .kernel_height(5)
3509 .kernel_width(3)
3510 .groups(2)
3511 .group_input_channels(15)
3512 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003513 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003514 ConvolutionOperatorTester()
3515 .batch_size(3)
3516 .input_height(8)
3517 .input_width(8)
3518 .next_input_width(7)
3519 .kernel_height(5)
3520 .kernel_width(3)
3521 .groups(2)
3522 .group_input_channels(15)
3523 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003524 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003525}
3526
Marat Dukhan08b7a972020-07-14 18:17:29 -07003527TEST(CONVOLUTION_NHWC_QU8, setup_changing_width_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003528 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003529 ConvolutionOperatorTester()
3530 .batch_size(3)
3531 .input_height(8)
3532 .input_width(8)
3533 .next_input_width(9)
3534 .kernel_height(3)
3535 .kernel_width(3)
3536 .groups(19)
3537 .group_input_channels(1)
3538 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003539 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003540 ConvolutionOperatorTester()
3541 .batch_size(3)
3542 .input_height(8)
3543 .input_width(8)
3544 .next_input_width(7)
3545 .kernel_height(3)
3546 .kernel_width(3)
3547 .groups(19)
3548 .group_input_channels(1)
3549 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003550 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003551}
3552
Marat Dukhan08b7a972020-07-14 18:17:29 -07003553TEST(CONVOLUTION_NHWC_QU8, setup_swap_height_and_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003554 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003555 ConvolutionOperatorTester()
3556 .batch_size(3)
3557 .input_height(9)
3558 .input_width(8)
3559 .next_input_height(8)
3560 .next_input_width(9)
3561 .kernel_height(5)
3562 .kernel_width(3)
3563 .group_input_channels(15)
3564 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003565 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003566}
3567
Marat Dukhan08b7a972020-07-14 18:17:29 -07003568TEST(CONVOLUTION_NHWC_QU8, setup_swap_height_and_width_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003569 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003570 ConvolutionOperatorTester()
3571 .batch_size(3)
3572 .input_height(9)
3573 .input_width(8)
3574 .next_input_height(8)
3575 .next_input_width(9)
3576 .kernel_height(5)
3577 .kernel_width(3)
3578 .groups(2)
3579 .group_input_channels(15)
3580 .group_output_channels(17)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003581 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003582}
3583
Marat Dukhan08b7a972020-07-14 18:17:29 -07003584TEST(CONVOLUTION_NHWC_QU8, setup_swap_height_and_width_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08003585 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07003586 ConvolutionOperatorTester()
3587 .batch_size(3)
3588 .input_height(9)
3589 .input_width(8)
3590 .next_input_height(8)
3591 .next_input_width(9)
3592 .kernel_height(3)
3593 .kernel_width(3)
3594 .groups(19)
3595 .group_input_channels(1)
3596 .group_output_channels(1)
Marat Dukhan08b7a972020-07-14 18:17:29 -07003597 .TestSetupNHWCxQU8();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003598}
3599
Marat Dukhanefc47b82019-11-18 09:25:38 -08003600TEST(CONVOLUTION_NHWC_F32, 1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003601 ConvolutionOperatorTester()
3602 .input_size(27, 29)
3603 .kernel_size(1, 1)
3604 .group_input_channels(23)
3605 .group_output_channels(19)
3606 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003607 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003608}
3609
Marat Dukhanefc47b82019-11-18 09:25:38 -08003610TEST(CONVOLUTION_NHWC_F32, 1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003611 ConvolutionOperatorTester()
3612 .input_size(27, 29)
3613 .kernel_size(1, 1)
3614 .group_input_channels(23)
3615 .group_output_channels(19)
3616 .qmin(128)
3617 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003618 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003619}
3620
Marat Dukhanefc47b82019-11-18 09:25:38 -08003621TEST(CONVOLUTION_NHWC_F32, 1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003622 ConvolutionOperatorTester()
3623 .input_size(27, 29)
3624 .kernel_size(1, 1)
3625 .group_input_channels(23)
3626 .group_output_channels(19)
3627 .qmax(128)
3628 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003629 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003630}
3631
Marat Dukhanefc47b82019-11-18 09:25:38 -08003632TEST(CONVOLUTION_NHWC_F32, 1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003633 ConvolutionOperatorTester()
3634 .input_size(27, 29)
3635 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003636 .input_channel_stride(28)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003637 .group_input_channels(23)
3638 .group_output_channels(19)
3639 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003640 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003641}
3642
Marat Dukhanefc47b82019-11-18 09:25:38 -08003643TEST(CONVOLUTION_NHWC_F32, 1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003644 ConvolutionOperatorTester()
3645 .input_size(27, 29)
3646 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003647 .output_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003648 .group_input_channels(23)
3649 .group_output_channels(19)
3650 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003651 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003652}
3653
Marat Dukhanefc47b82019-11-18 09:25:38 -08003654TEST(CONVOLUTION_NHWC_F32, 1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07003655 ConvolutionOperatorTester()
3656 .has_bias(false)
3657 .input_size(13, 14)
3658 .kernel_size(1, 1)
3659 .group_input_channels(23)
3660 .group_output_channels(19)
3661 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003662 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07003663}
3664
Marat Dukhanefc47b82019-11-18 09:25:38 -08003665TEST(CONVOLUTION_NHWC_F32, 1x1_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003666 ConvolutionOperatorTester()
3667 .batch_size(3)
3668 .input_size(13, 14)
3669 .kernel_size(1, 1)
3670 .group_input_channels(23)
3671 .group_output_channels(19)
3672 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003673 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003674}
3675
Marat Dukhanefc47b82019-11-18 09:25:38 -08003676TEST(CONVOLUTION_NHWC_F32, grouped_1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003677 ConvolutionOperatorTester()
3678 .input_size(24, 25)
3679 .kernel_size(1, 1)
3680 .groups(2)
3681 .group_input_channels(17)
3682 .group_output_channels(19)
3683 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003684 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003685}
3686
Marat Dukhanefc47b82019-11-18 09:25:38 -08003687TEST(CONVOLUTION_NHWC_F32, grouped_1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003688 ConvolutionOperatorTester()
3689 .input_size(24, 25)
3690 .kernel_size(1, 1)
3691 .groups(2)
3692 .group_input_channels(17)
3693 .group_output_channels(19)
3694 .qmin(128)
3695 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003696 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003697}
3698
Marat Dukhanefc47b82019-11-18 09:25:38 -08003699TEST(CONVOLUTION_NHWC_F32, grouped_1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003700 ConvolutionOperatorTester()
3701 .input_size(24, 25)
3702 .kernel_size(1, 1)
3703 .groups(2)
3704 .group_input_channels(17)
3705 .group_output_channels(19)
3706 .qmax(128)
3707 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003708 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003709}
3710
Marat Dukhanefc47b82019-11-18 09:25:38 -08003711TEST(CONVOLUTION_NHWC_F32, grouped_1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003712 ConvolutionOperatorTester()
3713 .input_size(24, 25)
3714 .kernel_size(1, 1)
3715 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003716 .input_channel_stride(37)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003717 .group_input_channels(17)
3718 .group_output_channels(19)
3719 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003720 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003721}
3722
Marat Dukhanefc47b82019-11-18 09:25:38 -08003723TEST(CONVOLUTION_NHWC_F32, grouped_1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003724 ConvolutionOperatorTester()
3725 .input_size(24, 25)
3726 .kernel_size(1, 1)
3727 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003728 .output_channel_stride(41)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003729 .group_input_channels(17)
3730 .group_output_channels(19)
3731 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003732 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003733}
3734
Marat Dukhanefc47b82019-11-18 09:25:38 -08003735TEST(CONVOLUTION_NHWC_F32, grouped_1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07003736 ConvolutionOperatorTester()
3737 .has_bias(false)
3738 .input_size(24, 25)
3739 .kernel_size(1, 1)
3740 .groups(2)
3741 .group_input_channels(17)
3742 .group_output_channels(19)
3743 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003744 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07003745}
3746
Marat Dukhanefc47b82019-11-18 09:25:38 -08003747TEST(CONVOLUTION_NHWC_F32, grouped_1x1_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003748 ConvolutionOperatorTester()
3749 .batch_size(3)
3750 .input_size(24, 25)
3751 .kernel_size(1, 1)
3752 .groups(2)
3753 .group_input_channels(17)
3754 .group_output_channels(19)
3755 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003756 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003757}
3758
Marat Dukhanefc47b82019-11-18 09:25:38 -08003759TEST(CONVOLUTION_NHWC_F32, unioutput_1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003760 ConvolutionOperatorTester()
3761 .input_size(1, 1)
3762 .kernel_size(1, 1)
3763 .group_input_channels(23)
3764 .group_output_channels(19)
3765 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003766 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003767}
3768
Marat Dukhanefc47b82019-11-18 09:25:38 -08003769TEST(CONVOLUTION_NHWC_F32, unioutput_1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003770 ConvolutionOperatorTester()
3771 .input_size(1, 1)
3772 .kernel_size(1, 1)
3773 .group_input_channels(23)
3774 .group_output_channels(19)
3775 .qmin(128)
3776 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003777 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003778}
3779
Marat Dukhanefc47b82019-11-18 09:25:38 -08003780TEST(CONVOLUTION_NHWC_F32, unioutput_1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003781 ConvolutionOperatorTester()
3782 .input_size(1, 1)
3783 .kernel_size(1, 1)
3784 .group_input_channels(23)
3785 .group_output_channels(19)
3786 .qmax(128)
3787 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003788 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003789}
3790
Marat Dukhanefc47b82019-11-18 09:25:38 -08003791TEST(CONVOLUTION_NHWC_F32, unioutput_1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003792 ConvolutionOperatorTester()
3793 .input_size(1, 1)
3794 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003795 .input_channel_stride(28)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003796 .group_input_channels(23)
3797 .group_output_channels(19)
3798 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003799 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003800}
3801
Marat Dukhanefc47b82019-11-18 09:25:38 -08003802TEST(CONVOLUTION_NHWC_F32, unioutput_1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003803 ConvolutionOperatorTester()
3804 .input_size(1, 1)
3805 .kernel_size(1, 1)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003806 .output_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003807 .group_input_channels(23)
3808 .group_output_channels(19)
3809 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003810 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003811}
3812
Marat Dukhanefc47b82019-11-18 09:25:38 -08003813TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003814 ConvolutionOperatorTester()
3815 .input_size(1, 1)
3816 .kernel_size(1, 1)
3817 .groups(2)
3818 .group_input_channels(17)
3819 .group_output_channels(13)
3820 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003821 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003822}
3823
Marat Dukhanefc47b82019-11-18 09:25:38 -08003824TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_1x1_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003825 ConvolutionOperatorTester()
3826 .input_size(1, 1)
3827 .kernel_size(1, 1)
3828 .groups(2)
3829 .group_input_channels(17)
3830 .group_output_channels(13)
3831 .qmin(128)
3832 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003833 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003834}
3835
Marat Dukhanefc47b82019-11-18 09:25:38 -08003836TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_1x1_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003837 ConvolutionOperatorTester()
3838 .input_size(1, 1)
3839 .kernel_size(1, 1)
3840 .groups(2)
3841 .group_input_channels(17)
3842 .group_output_channels(13)
3843 .qmax(128)
3844 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003845 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003846}
3847
Marat Dukhanefc47b82019-11-18 09:25:38 -08003848TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_1x1_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003849 ConvolutionOperatorTester()
3850 .input_size(1, 1)
3851 .kernel_size(1, 1)
3852 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003853 .input_channel_stride(37)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003854 .group_input_channels(17)
3855 .group_output_channels(13)
3856 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003857 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003858}
3859
Marat Dukhanefc47b82019-11-18 09:25:38 -08003860TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_1x1_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003861 ConvolutionOperatorTester()
3862 .input_size(1, 1)
3863 .kernel_size(1, 1)
3864 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003865 .output_channel_stride(41)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003866 .group_input_channels(17)
3867 .group_output_channels(13)
3868 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003869 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003870}
3871
Marat Dukhanefc47b82019-11-18 09:25:38 -08003872TEST(CONVOLUTION_NHWC_F32, 1x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003873 ConvolutionOperatorTester()
3874 .input_size(20, 19)
3875 .padding_width(1)
3876 .kernel_size(1, 3)
3877 .group_input_channels(17)
3878 .group_output_channels(15)
3879 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003880 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003881}
3882
Marat Dukhanefc47b82019-11-18 09:25:38 -08003883TEST(CONVOLUTION_NHWC_F32, grouped_1x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003884 ConvolutionOperatorTester()
3885 .input_size(20, 19)
3886 .padding_width(1)
3887 .kernel_size(1, 3)
3888 .groups(2)
3889 .group_input_channels(17)
3890 .group_output_channels(15)
3891 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003892 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003893}
3894
Marat Dukhanefc47b82019-11-18 09:25:38 -08003895TEST(CONVOLUTION_NHWC_F32, 3x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003896 ConvolutionOperatorTester()
3897 .input_size(19, 20)
3898 .padding_height(1)
3899 .kernel_size(3, 1)
3900 .group_input_channels(17)
3901 .group_output_channels(15)
3902 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003903 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003904}
3905
Marat Dukhanefc47b82019-11-18 09:25:38 -08003906TEST(CONVOLUTION_NHWC_F32, grouped_3x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003907 ConvolutionOperatorTester()
3908 .input_size(19, 20)
3909 .padding_height(1)
3910 .kernel_size(3, 1)
3911 .groups(2)
3912 .group_input_channels(17)
3913 .group_output_channels(15)
3914 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003915 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003916}
3917
Marat Dukhanefc47b82019-11-18 09:25:38 -08003918TEST(CONVOLUTION_NHWC_F32, 3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003919 ConvolutionOperatorTester()
3920 .input_size(13, 12)
3921 .padding(1)
3922 .kernel_size(3, 3)
3923 .group_input_channels(15)
3924 .group_output_channels(17)
3925 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003926 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003927}
3928
Marat Dukhanefc47b82019-11-18 09:25:38 -08003929TEST(CONVOLUTION_NHWC_F32, 3x3_without_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003930 ConvolutionOperatorTester()
3931 .input_size(13, 12)
3932 .kernel_size(3, 3)
3933 .group_input_channels(15)
3934 .group_output_channels(17)
3935 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003936 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003937}
3938
Marat Dukhanefc47b82019-11-18 09:25:38 -08003939TEST(CONVOLUTION_NHWC_F32, 3x3_with_left_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003940 ConvolutionOperatorTester()
3941 .input_size(13, 12)
3942 .padding_left(1)
3943 .kernel_size(3, 3)
3944 .group_input_channels(15)
3945 .group_output_channels(17)
3946 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003947 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003948}
3949
Marat Dukhanefc47b82019-11-18 09:25:38 -08003950TEST(CONVOLUTION_NHWC_F32, 3x3_with_right_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003951 ConvolutionOperatorTester()
3952 .input_size(13, 12)
3953 .padding_right(1)
3954 .kernel_size(3, 3)
3955 .group_input_channels(15)
3956 .group_output_channels(17)
3957 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003958 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003959}
3960
Marat Dukhanefc47b82019-11-18 09:25:38 -08003961TEST(CONVOLUTION_NHWC_F32, 3x3_with_top_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003962 ConvolutionOperatorTester()
3963 .input_size(13, 12)
3964 .padding_top(1)
3965 .kernel_size(3, 3)
3966 .group_input_channels(15)
3967 .group_output_channels(17)
3968 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003969 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003970}
3971
Marat Dukhanefc47b82019-11-18 09:25:38 -08003972TEST(CONVOLUTION_NHWC_F32, 3x3_with_bottom_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003973 ConvolutionOperatorTester()
3974 .input_size(13, 12)
3975 .padding_bottom(1)
3976 .kernel_size(3, 3)
3977 .group_input_channels(15)
3978 .group_output_channels(17)
3979 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003980 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003981}
3982
Marat Dukhanefc47b82019-11-18 09:25:38 -08003983TEST(CONVOLUTION_NHWC_F32, 3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003984 ConvolutionOperatorTester()
3985 .input_size(13, 12)
3986 .padding(1)
3987 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07003988 .input_channel_stride(22)
XNNPACK Teamb455b122019-09-27 18:10:33 -07003989 .group_input_channels(15)
3990 .group_output_channels(17)
3991 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08003992 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07003993}
3994
Marat Dukhanefc47b82019-11-18 09:25:38 -08003995TEST(CONVOLUTION_NHWC_F32, 3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07003996 ConvolutionOperatorTester()
3997 .input_size(13, 12)
3998 .padding(1)
3999 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07004000 .output_channel_stride(23)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004001 .group_input_channels(15)
4002 .group_output_channels(17)
4003 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004004 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004005}
4006
Marat Dukhanefc47b82019-11-18 09:25:38 -08004007TEST(CONVOLUTION_NHWC_F32, 3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004008 ConvolutionOperatorTester()
4009 .has_bias(false)
4010 .input_size(10, 9)
4011 .padding(1)
4012 .kernel_size(3, 3)
4013 .group_input_channels(15)
4014 .group_output_channels(17)
4015 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004016 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004017}
4018
Marat Dukhanefc47b82019-11-18 09:25:38 -08004019TEST(CONVOLUTION_NHWC_F32, 3x3_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004020 ConvolutionOperatorTester()
4021 .batch_size(3)
4022 .input_size(10, 9)
4023 .padding(1)
4024 .kernel_size(3, 3)
4025 .group_input_channels(15)
4026 .group_output_channels(17)
4027 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004028 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004029}
4030
Marat Dukhanefc47b82019-11-18 09:25:38 -08004031TEST(CONVOLUTION_NHWC_F32, grouped_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004032 ConvolutionOperatorTester()
4033 .input_size(10, 11)
4034 .padding(1)
4035 .kernel_size(3, 3)
4036 .groups(2)
4037 .group_input_channels(14)
4038 .group_output_channels(13)
4039 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004040 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004041}
4042
Marat Dukhanefc47b82019-11-18 09:25:38 -08004043TEST(CONVOLUTION_NHWC_F32, grouped_3x3_without_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004044 ConvolutionOperatorTester()
4045 .input_size(13, 12)
4046 .kernel_size(3, 3)
4047 .group_input_channels(15)
4048 .group_output_channels(17)
4049 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004050 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004051}
4052
Marat Dukhanefc47b82019-11-18 09:25:38 -08004053TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_left_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004054 ConvolutionOperatorTester()
4055 .input_size(10, 11)
4056 .padding_left(1)
4057 .kernel_size(3, 3)
4058 .groups(2)
4059 .group_input_channels(14)
4060 .group_output_channels(13)
4061 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004062 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004063}
4064
Marat Dukhanefc47b82019-11-18 09:25:38 -08004065TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_right_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004066 ConvolutionOperatorTester()
4067 .input_size(10, 11)
4068 .padding_right(1)
4069 .kernel_size(3, 3)
4070 .groups(2)
4071 .group_input_channels(14)
4072 .group_output_channels(13)
4073 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004074 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004075}
4076
Marat Dukhanefc47b82019-11-18 09:25:38 -08004077TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_top_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004078 ConvolutionOperatorTester()
4079 .input_size(10, 11)
4080 .padding_top(1)
4081 .kernel_size(3, 3)
4082 .groups(2)
4083 .group_input_channels(14)
4084 .group_output_channels(13)
4085 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004086 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004087}
4088
Marat Dukhanefc47b82019-11-18 09:25:38 -08004089TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_bottom_padding) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004090 ConvolutionOperatorTester()
4091 .input_size(10, 11)
4092 .padding_bottom(1)
4093 .kernel_size(3, 3)
4094 .groups(2)
4095 .group_input_channels(14)
4096 .group_output_channels(13)
4097 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004098 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004099}
4100
Marat Dukhanefc47b82019-11-18 09:25:38 -08004101TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004102 ConvolutionOperatorTester()
4103 .input_size(10, 11)
4104 .padding(1)
4105 .kernel_size(3, 3)
4106 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07004107 .input_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004108 .group_input_channels(14)
4109 .group_output_channels(13)
4110 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004111 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004112}
4113
Marat Dukhanefc47b82019-11-18 09:25:38 -08004114TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004115 ConvolutionOperatorTester()
4116 .input_size(10, 11)
4117 .padding(1)
4118 .kernel_size(3, 3)
4119 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07004120 .output_channel_stride(31)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004121 .group_input_channels(14)
4122 .group_output_channels(13)
4123 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004124 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004125}
4126
Marat Dukhanefc47b82019-11-18 09:25:38 -08004127TEST(CONVOLUTION_NHWC_F32, grouped_3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004128 ConvolutionOperatorTester()
4129 .has_bias(false)
4130 .input_size(10, 11)
4131 .padding(1)
4132 .kernel_size(3, 3)
4133 .groups(2)
4134 .group_input_channels(14)
4135 .group_output_channels(13)
4136 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004137 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004138}
4139
Marat Dukhanefc47b82019-11-18 09:25:38 -08004140TEST(CONVOLUTION_NHWC_F32, grouped_3x3_with_batch) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004141 ConvolutionOperatorTester()
4142 .batch_size(3)
4143 .input_size(10, 11)
4144 .padding(1)
4145 .kernel_size(3, 3)
4146 .groups(2)
4147 .group_input_channels(14)
4148 .group_output_channels(13)
4149 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004150 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004151}
4152
Marat Dukhanefc47b82019-11-18 09:25:38 -08004153TEST(CONVOLUTION_NHWC_F32, 3x3s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004154 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07004155 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004156 .padding(1)
4157 .kernel_size(3, 3)
4158 .subsampling(2)
4159 .group_input_channels(27)
4160 .group_output_channels(19)
4161 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004162 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004163}
4164
Marat Dukhanefc47b82019-11-18 09:25:38 -08004165TEST(CONVOLUTION_NHWC_F32, 3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004166 for (size_t input_height = 13; input_height <= 14; input_height++) {
4167 for (size_t input_width = 13; input_width <= 14; input_width++) {
4168 ConvolutionOperatorTester()
4169 .input_size(input_height, input_width)
4170 .padding_tf_same(true)
4171 .kernel_size(3, 3)
4172 .subsampling(2)
4173 .group_input_channels(27)
4174 .group_output_channels(19)
4175 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004176 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004177 }
4178 }
4179}
4180
Marat Dukhanefc47b82019-11-18 09:25:38 -08004181TEST(CONVOLUTION_NHWC_F32, 3x3s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004182 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07004183 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004184 .padding(1)
4185 .kernel_size(3, 3)
4186 .subsampling(1, 2)
4187 .group_input_channels(27)
4188 .group_output_channels(19)
4189 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004190 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004191}
4192
Marat Dukhanefc47b82019-11-18 09:25:38 -08004193TEST(CONVOLUTION_NHWC_F32, 3x3s1x2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004194 for (size_t input_height = 13; input_height <= 14; input_height++) {
4195 for (size_t input_width = 13; input_width <= 14; input_width++) {
4196 ConvolutionOperatorTester()
4197 .input_size(input_height, input_width)
4198 .padding_tf_same(true)
4199 .kernel_size(3, 3)
4200 .subsampling(1, 2)
4201 .group_input_channels(27)
4202 .group_output_channels(19)
4203 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004204 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004205 }
4206 }
4207}
4208
Marat Dukhanefc47b82019-11-18 09:25:38 -08004209TEST(CONVOLUTION_NHWC_F32, 3x3s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004210 ConvolutionOperatorTester()
Marat Dukhan8440fde2019-10-24 12:46:13 -07004211 .input_size(14, 13)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004212 .padding(1)
4213 .kernel_size(3, 3)
4214 .subsampling(2, 1)
4215 .group_input_channels(27)
4216 .group_output_channels(19)
4217 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004218 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004219}
4220
Marat Dukhanefc47b82019-11-18 09:25:38 -08004221TEST(CONVOLUTION_NHWC_F32, 3x3s2x1_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004222 for (size_t input_height = 13; input_height <= 14; input_height++) {
4223 for (size_t input_width = 13; input_width <= 14; input_width++) {
4224 ConvolutionOperatorTester()
4225 .input_size(input_height, input_width)
4226 .padding_tf_same(true)
4227 .kernel_size(3, 3)
4228 .subsampling(2, 1)
4229 .group_input_channels(27)
4230 .group_output_channels(19)
4231 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004232 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004233 }
4234 }
4235}
4236
Marat Dukhanefc47b82019-11-18 09:25:38 -08004237TEST(CONVOLUTION_NHWC_F32, 3x3d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004238 ConvolutionOperatorTester()
4239 .input_size(13, 14)
4240 .padding(2)
4241 .kernel_size(3, 3)
4242 .dilation(2)
4243 .group_input_channels(27)
4244 .group_output_channels(19)
4245 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004246 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004247}
4248
Marat Dukhanefc47b82019-11-18 09:25:38 -08004249TEST(CONVOLUTION_NHWC_F32, 3x3d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004250 ConvolutionOperatorTester()
4251 .input_size(14, 15)
4252 .padding(1, 2)
4253 .kernel_size(3, 3)
4254 .dilation(1, 2)
4255 .group_input_channels(27)
4256 .group_output_channels(19)
4257 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004258 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004259}
4260
Marat Dukhanefc47b82019-11-18 09:25:38 -08004261TEST(CONVOLUTION_NHWC_F32, 3x3d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004262 ConvolutionOperatorTester()
4263 .input_size(15, 14)
4264 .padding(2, 1)
4265 .kernel_size(3, 3)
4266 .dilation(2, 1)
4267 .group_input_channels(27)
4268 .group_output_channels(19)
4269 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004270 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004271}
4272
Marat Dukhanefc47b82019-11-18 09:25:38 -08004273TEST(CONVOLUTION_NHWC_F32, unioutput_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004274 ConvolutionOperatorTester()
4275 .input_size(3, 3)
4276 .padding(1)
4277 .kernel_size(3, 3)
4278 .group_input_channels(23)
4279 .group_output_channels(19)
4280 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004281 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004282}
4283
Marat Dukhanefc47b82019-11-18 09:25:38 -08004284TEST(CONVOLUTION_NHWC_F32, unioutput_3x3_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004285 ConvolutionOperatorTester()
4286 .input_size(3, 3)
4287 .padding(1)
4288 .kernel_size(3, 3)
4289 .group_input_channels(23)
4290 .group_output_channels(19)
4291 .qmin(128)
4292 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004293 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004294}
4295
Marat Dukhanefc47b82019-11-18 09:25:38 -08004296TEST(CONVOLUTION_NHWC_F32, unioutput_3x3_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004297 ConvolutionOperatorTester()
4298 .input_size(3, 3)
4299 .padding(1)
4300 .kernel_size(3, 3)
4301 .group_input_channels(23)
4302 .group_output_channels(19)
4303 .qmax(128)
4304 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004305 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004306}
4307
Marat Dukhanefc47b82019-11-18 09:25:38 -08004308TEST(CONVOLUTION_NHWC_F32, unioutput_3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004309 ConvolutionOperatorTester()
4310 .input_size(3, 3)
4311 .padding(1)
4312 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07004313 .input_channel_stride(28)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004314 .group_input_channels(23)
4315 .group_output_channels(19)
4316 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004317 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004318}
4319
Marat Dukhanefc47b82019-11-18 09:25:38 -08004320TEST(CONVOLUTION_NHWC_F32, unioutput_3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004321 ConvolutionOperatorTester()
4322 .input_size(3, 3)
4323 .padding(1)
4324 .kernel_size(3, 3)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07004325 .output_channel_stride(29)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004326 .group_input_channels(23)
4327 .group_output_channels(19)
4328 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004329 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004330}
4331
Marat Dukhanefc47b82019-11-18 09:25:38 -08004332TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004333 ConvolutionOperatorTester()
4334 .input_size(3, 3)
4335 .padding(1)
4336 .kernel_size(3, 3)
4337 .groups(2)
4338 .group_input_channels(17)
4339 .group_output_channels(13)
4340 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004341 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004342}
4343
Marat Dukhanefc47b82019-11-18 09:25:38 -08004344TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_3x3_with_qmin) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004345 ConvolutionOperatorTester()
4346 .input_size(3, 3)
4347 .padding(1)
4348 .kernel_size(3, 3)
4349 .groups(2)
4350 .group_input_channels(17)
4351 .group_output_channels(13)
4352 .qmin(128)
4353 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004354 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004355}
4356
Marat Dukhanefc47b82019-11-18 09:25:38 -08004357TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_3x3_with_qmax) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004358 ConvolutionOperatorTester()
4359 .input_size(3, 3)
4360 .padding(1)
4361 .kernel_size(3, 3)
4362 .groups(2)
4363 .group_input_channels(17)
4364 .group_output_channels(13)
4365 .qmax(128)
4366 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004367 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004368}
4369
Marat Dukhanefc47b82019-11-18 09:25:38 -08004370TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_3x3_with_input_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004371 ConvolutionOperatorTester()
4372 .input_size(3, 3)
4373 .padding(1)
4374 .kernel_size(3, 3)
4375 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07004376 .input_channel_stride(37)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004377 .group_input_channels(17)
4378 .group_output_channels(13)
4379 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004380 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004381}
4382
Marat Dukhanefc47b82019-11-18 09:25:38 -08004383TEST(CONVOLUTION_NHWC_F32, unioutput_grouped_3x3_with_output_stride) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004384 ConvolutionOperatorTester()
4385 .input_size(3, 3)
4386 .padding(1)
4387 .kernel_size(3, 3)
4388 .groups(2)
Marat Dukhanc3d52cf2020-06-18 07:56:25 -07004389 .output_channel_stride(41)
XNNPACK Teamb455b122019-09-27 18:10:33 -07004390 .group_input_channels(17)
4391 .group_output_channels(13)
4392 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004393 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004394}
4395
Marat Dukhanefc47b82019-11-18 09:25:38 -08004396TEST(CONVOLUTION_NHWC_F32, depthwise_1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004397 ConvolutionOperatorTester()
4398 .input_size(15, 14)
4399 .kernel_size(1, 1)
4400 .groups(24)
4401 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004402 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004403}
4404
Marat Dukhanefc47b82019-11-18 09:25:38 -08004405TEST(CONVOLUTION_NHWC_F32, depthwise_1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004406 ConvolutionOperatorTester()
4407 .has_bias(false)
4408 .input_size(15, 14)
4409 .kernel_size(1, 1)
4410 .groups(24)
4411 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004412 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004413}
4414
Marat Dukhanefc47b82019-11-18 09:25:38 -08004415TEST(CONVOLUTION_NHWC_F32, depthwise_2x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004416 ConvolutionOperatorTester()
4417 .input_size(15, 14)
4418 .padding(1, 1)
4419 .kernel_size(2, 2)
4420 .groups(24)
4421 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004422 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004423}
4424
Marat Dukhanefc47b82019-11-18 09:25:38 -08004425TEST(CONVOLUTION_NHWC_F32, depthwise_2x2_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004426 ConvolutionOperatorTester()
4427 .has_bias(false)
4428 .input_size(15, 14)
4429 .padding(1, 1)
4430 .kernel_size(2, 2)
4431 .groups(24)
4432 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004433 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004434}
4435
Marat Dukhanefc47b82019-11-18 09:25:38 -08004436TEST(CONVOLUTION_NHWC_F32, depthwise_2x2s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004437 ConvolutionOperatorTester()
4438 .input_size(15, 14)
4439 .padding(1, 1)
4440 .kernel_size(2, 2)
4441 .subsampling(2)
4442 .groups(27)
4443 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004444 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004445}
4446
Marat Dukhanefc47b82019-11-18 09:25:38 -08004447TEST(CONVOLUTION_NHWC_F32, depthwise_2x2s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004448 ConvolutionOperatorTester()
4449 .input_size(15, 14)
4450 .padding(1, 1)
4451 .kernel_size(2, 2)
4452 .subsampling(1, 2)
4453 .groups(27)
4454 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004455 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004456}
4457
Marat Dukhanefc47b82019-11-18 09:25:38 -08004458TEST(CONVOLUTION_NHWC_F32, depthwise_2x2s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004459 ConvolutionOperatorTester()
4460 .input_size(15, 14)
4461 .padding(1, 1)
4462 .kernel_size(2, 2)
4463 .subsampling(2, 1)
4464 .groups(27)
4465 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004466 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004467}
4468
Marat Dukhanefc47b82019-11-18 09:25:38 -08004469TEST(CONVOLUTION_NHWC_F32, depthwise_2x2d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004470 ConvolutionOperatorTester()
4471 .input_size(15, 14)
4472 .padding(1, 1)
4473 .kernel_size(2, 2)
4474 .dilation(2)
4475 .groups(27)
4476 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004477 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004478}
4479
Marat Dukhanefc47b82019-11-18 09:25:38 -08004480TEST(CONVOLUTION_NHWC_F32, depthwise_2x2d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004481 ConvolutionOperatorTester()
4482 .input_size(15, 14)
4483 .padding(1, 1)
4484 .kernel_size(2, 2)
4485 .dilation(1, 2)
4486 .groups(27)
4487 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004488 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004489}
4490
Marat Dukhanefc47b82019-11-18 09:25:38 -08004491TEST(CONVOLUTION_NHWC_F32, depthwise_2x2d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004492 ConvolutionOperatorTester()
4493 .input_size(15, 14)
4494 .padding(1, 1)
4495 .kernel_size(2, 2)
4496 .dilation(2, 1)
4497 .groups(27)
4498 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004499 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004500}
4501
Marat Dukhanefc47b82019-11-18 09:25:38 -08004502TEST(CONVOLUTION_NHWC_F32, depthwise_3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004503 ConvolutionOperatorTester()
4504 .input_size(15, 14)
4505 .padding(1, 1)
4506 .kernel_size(3, 3)
4507 .groups(24)
4508 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004509 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004510}
4511
Marat Dukhanefc47b82019-11-18 09:25:38 -08004512TEST(CONVOLUTION_NHWC_F32, depthwise_3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004513 ConvolutionOperatorTester()
4514 .has_bias(false)
4515 .input_size(15, 14)
4516 .padding(1, 1)
4517 .kernel_size(3, 3)
4518 .groups(24)
4519 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004520 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004521}
4522
Marat Dukhanefc47b82019-11-18 09:25:38 -08004523TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004524 ConvolutionOperatorTester()
4525 .input_size(15, 14)
4526 .padding(1, 1)
4527 .kernel_size(3, 3)
4528 .subsampling(2)
4529 .groups(27)
4530 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004531 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004532}
4533
Marat Dukhanefc47b82019-11-18 09:25:38 -08004534TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004535 for (size_t input_height = 14; input_height <= 15; input_height++) {
4536 for (size_t input_width = 14; input_width <= 15; input_width++) {
4537 ConvolutionOperatorTester()
4538 .input_size(input_height, input_width)
4539 .padding_tf_same(true)
4540 .kernel_size(3, 3)
4541 .subsampling(2)
4542 .groups(27)
4543 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004544 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004545 }
4546 }
4547}
4548
Marat Dukhanefc47b82019-11-18 09:25:38 -08004549TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004550 ConvolutionOperatorTester()
4551 .input_size(15, 14)
4552 .padding(1, 1)
4553 .kernel_size(3, 3)
4554 .subsampling(1, 2)
4555 .groups(27)
4556 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004557 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004558}
4559
Marat Dukhanefc47b82019-11-18 09:25:38 -08004560TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s1x2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004561 for (size_t input_height = 14; input_height <= 15; input_height++) {
4562 for (size_t input_width = 14; input_width <= 15; input_width++) {
4563 ConvolutionOperatorTester()
4564 .input_size(input_height, input_width)
4565 .padding_tf_same(true)
4566 .kernel_size(3, 3)
4567 .subsampling(1, 2)
4568 .groups(27)
4569 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004570 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004571 }
4572 }
4573}
4574
Marat Dukhanefc47b82019-11-18 09:25:38 -08004575TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004576 ConvolutionOperatorTester()
4577 .input_size(15, 14)
4578 .padding(1, 1)
4579 .kernel_size(3, 3)
4580 .subsampling(2, 1)
4581 .groups(27)
4582 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004583 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004584}
4585
Marat Dukhanefc47b82019-11-18 09:25:38 -08004586TEST(CONVOLUTION_NHWC_F32, depthwise_3x3s2x1_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004587 for (size_t input_height = 14; input_height <= 15; input_height++) {
4588 for (size_t input_width = 14; input_width <= 15; input_width++) {
4589 ConvolutionOperatorTester()
4590 .input_size(input_height, input_width)
4591 .padding_tf_same(true)
4592 .kernel_size(3, 3)
4593 .subsampling(2, 1)
4594 .groups(27)
4595 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004596 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004597 }
4598 }
4599}
4600
Marat Dukhanefc47b82019-11-18 09:25:38 -08004601TEST(CONVOLUTION_NHWC_F32, depthwise_3x3d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004602 ConvolutionOperatorTester()
4603 .input_size(15, 14)
4604 .padding(1, 1)
4605 .kernel_size(3, 3)
4606 .dilation(2)
4607 .groups(27)
4608 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004609 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004610}
4611
Marat Dukhanefc47b82019-11-18 09:25:38 -08004612TEST(CONVOLUTION_NHWC_F32, depthwise_3x3d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004613 ConvolutionOperatorTester()
4614 .input_size(15, 14)
4615 .padding(1, 1)
4616 .kernel_size(3, 3)
4617 .dilation(1, 2)
4618 .groups(27)
4619 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004620 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004621}
4622
Marat Dukhanefc47b82019-11-18 09:25:38 -08004623TEST(CONVOLUTION_NHWC_F32, depthwise_3x3d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004624 ConvolutionOperatorTester()
4625 .input_size(15, 14)
4626 .padding(1, 1)
4627 .kernel_size(3, 3)
4628 .dilation(2, 1)
4629 .groups(27)
4630 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004631 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004632}
4633
Marat Dukhanefc47b82019-11-18 09:25:38 -08004634TEST(CONVOLUTION_NHWC_F32, depthwise_5x5) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004635 ConvolutionOperatorTester()
4636 .input_size(15, 14)
4637 .padding(2, 2)
4638 .kernel_size(5, 5)
4639 .groups(27)
4640 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004641 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004642}
4643
Marat Dukhanefc47b82019-11-18 09:25:38 -08004644TEST(CONVOLUTION_NHWC_F32, depthwise_5x5_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004645 ConvolutionOperatorTester()
4646 .has_bias(false)
4647 .input_size(15, 14)
4648 .padding(2, 2)
4649 .kernel_size(5, 5)
4650 .groups(27)
4651 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004652 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004653}
4654
Marat Dukhanefc47b82019-11-18 09:25:38 -08004655TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004656 ConvolutionOperatorTester()
4657 .input_size(15, 14)
4658 .padding(2, 2)
4659 .kernel_size(5, 5)
4660 .subsampling(2)
4661 .groups(27)
4662 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004663 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004664}
4665
Marat Dukhanefc47b82019-11-18 09:25:38 -08004666TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004667 ConvolutionOperatorTester()
4668 .input_size(15, 14)
4669 .padding(2, 2)
4670 .kernel_size(5, 5)
4671 .subsampling(1, 2)
4672 .groups(27)
4673 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004674 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004675}
4676
Marat Dukhanefc47b82019-11-18 09:25:38 -08004677TEST(CONVOLUTION_NHWC_F32, depthwise_5x5s2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004678 ConvolutionOperatorTester()
4679 .input_size(15, 14)
4680 .padding(2, 2)
4681 .kernel_size(5, 5)
4682 .subsampling(2, 1)
4683 .groups(27)
4684 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004685 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004686}
4687
Marat Dukhanefc47b82019-11-18 09:25:38 -08004688TEST(CONVOLUTION_NHWC_F32, depthwise_5x5d2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004689 ConvolutionOperatorTester()
4690 .input_size(15, 14)
4691 .padding(2, 2)
4692 .kernel_size(5, 5)
4693 .dilation(2)
4694 .groups(27)
4695 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004696 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004697}
4698
Marat Dukhanefc47b82019-11-18 09:25:38 -08004699TEST(CONVOLUTION_NHWC_F32, depthwise_5x5d1x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004700 ConvolutionOperatorTester()
4701 .input_size(15, 14)
4702 .padding(2, 2)
4703 .kernel_size(5, 5)
4704 .dilation(1, 2)
4705 .groups(27)
4706 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004707 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004708}
4709
Marat Dukhanefc47b82019-11-18 09:25:38 -08004710TEST(CONVOLUTION_NHWC_F32, depthwise_5x5d2x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004711 ConvolutionOperatorTester()
4712 .input_size(15, 14)
4713 .padding(2, 2)
4714 .kernel_size(5, 5)
4715 .dilation(2, 1)
4716 .groups(27)
4717 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004718 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004719}
4720
Marat Dukhanefc47b82019-11-18 09:25:38 -08004721TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 1x1) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004722 ConvolutionOperatorTester()
4723 .depthwise_layout(true)
4724 .input_size(15, 14)
4725 .kernel_size(1, 1)
4726 .groups(24)
4727 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004728 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004729}
4730
Marat Dukhanefc47b82019-11-18 09:25:38 -08004731TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 1x1_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004732 ConvolutionOperatorTester()
4733 .depthwise_layout(true)
4734 .input_size(15, 14)
4735 .kernel_size(1, 1)
4736 .groups(24)
4737 .group_output_channels(3)
4738 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004739 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004740}
4741
Marat Dukhanefc47b82019-11-18 09:25:38 -08004742TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 1x1_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004743 ConvolutionOperatorTester()
4744 .depthwise_layout(true)
4745 .has_bias(false)
4746 .input_size(15, 14)
4747 .kernel_size(1, 1)
4748 .groups(24)
4749 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004750 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004751}
4752
Marat Dukhanefc47b82019-11-18 09:25:38 -08004753TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 2x2) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004754 ConvolutionOperatorTester()
4755 .depthwise_layout(true)
4756 .input_size(15, 14)
4757 .padding(1, 1)
4758 .kernel_size(2, 2)
4759 .groups(24)
4760 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004761 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004762}
4763
Marat Dukhanefc47b82019-11-18 09:25:38 -08004764TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 2x2_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004765 ConvolutionOperatorTester()
4766 .depthwise_layout(true)
4767 .input_size(15, 14)
4768 .padding(1, 1)
4769 .kernel_size(2, 2)
4770 .groups(24)
4771 .group_output_channels(3)
4772 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004773 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004774}
4775
Marat Dukhanefc47b82019-11-18 09:25:38 -08004776TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 2x2_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004777 ConvolutionOperatorTester()
4778 .depthwise_layout(true)
4779 .has_bias(false)
4780 .input_size(15, 14)
4781 .padding(1, 1)
4782 .kernel_size(2, 2)
4783 .groups(24)
4784 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004785 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004786}
4787
Marat Dukhanefc47b82019-11-18 09:25:38 -08004788TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 3x3) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004789 ConvolutionOperatorTester()
4790 .depthwise_layout(true)
4791 .input_size(15, 14)
4792 .padding(1, 1)
4793 .kernel_size(3, 3)
4794 .groups(24)
4795 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004796 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004797}
4798
Marat Dukhanefc47b82019-11-18 09:25:38 -08004799TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 3x3_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004800 ConvolutionOperatorTester()
4801 .depthwise_layout(true)
4802 .input_size(15, 14)
4803 .padding(1, 1)
4804 .kernel_size(3, 3)
4805 .groups(24)
4806 .group_output_channels(3)
4807 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004808 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004809}
4810
Marat Dukhanefc47b82019-11-18 09:25:38 -08004811TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 3x3_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004812 ConvolutionOperatorTester()
4813 .depthwise_layout(true)
4814 .has_bias(false)
4815 .input_size(15, 14)
4816 .padding(1, 1)
4817 .kernel_size(3, 3)
4818 .groups(24)
4819 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004820 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004821}
4822
Marat Dukhanefc47b82019-11-18 09:25:38 -08004823TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 3x3s2_with_tf_same_padding) {
Marat Dukhan8440fde2019-10-24 12:46:13 -07004824 for (size_t input_height = 14; input_height <= 15; input_height++) {
4825 for (size_t input_width = 14; input_width <= 15; input_width++) {
4826 ConvolutionOperatorTester()
4827 .depthwise_layout(true)
4828 .input_size(input_height, input_width)
4829 .padding_tf_same(true)
4830 .kernel_size(3, 3)
4831 .groups(24)
4832 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004833 .TestNHWCxF32();
Marat Dukhan8440fde2019-10-24 12:46:13 -07004834 }
4835 }
4836}
4837
Marat Dukhanefc47b82019-11-18 09:25:38 -08004838TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 5x5) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004839 ConvolutionOperatorTester()
4840 .depthwise_layout(true)
4841 .input_size(15, 14)
4842 .padding(2, 2)
4843 .kernel_size(5, 5)
4844 .groups(24)
4845 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004846 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004847}
4848
Marat Dukhanefc47b82019-11-18 09:25:38 -08004849TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 5x5_with_depth_multiplier) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004850 ConvolutionOperatorTester()
4851 .depthwise_layout(true)
4852 .input_size(15, 14)
4853 .padding(2, 2)
4854 .kernel_size(5, 5)
4855 .groups(24)
4856 .group_output_channels(3)
4857 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004858 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004859}
4860
Marat Dukhanefc47b82019-11-18 09:25:38 -08004861TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 5x5_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004862 ConvolutionOperatorTester()
4863 .depthwise_layout(true)
4864 .has_bias(false)
4865 .input_size(15, 14)
4866 .padding(2, 2)
4867 .kernel_size(5, 5)
4868 .groups(24)
4869 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004870 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004871}
4872
Marat Dukhanefc47b82019-11-18 09:25:38 -08004873TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 7x7) {
XNNPACK Teamb455b122019-09-27 18:10:33 -07004874 ConvolutionOperatorTester()
4875 .depthwise_layout(true)
4876 .input_size(15, 14)
4877 .padding(3, 3)
4878 .kernel_size(7, 7)
4879 .groups(24)
4880 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004881 .TestNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004882}
4883
Marat Dukhanefc47b82019-11-18 09:25:38 -08004884TEST(DEPTHWISE_CONVOLUTION_NHWC_F32, 7x7_without_bias) {
Marat Dukhanf568f082019-10-30 09:47:07 -07004885 ConvolutionOperatorTester()
4886 .depthwise_layout(true)
4887 .has_bias(false)
4888 .input_size(15, 14)
4889 .padding(3, 3)
4890 .kernel_size(7, 7)
4891 .groups(24)
4892 .iterations(3)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004893 .TestNHWCxF32();
Marat Dukhanf568f082019-10-30 09:47:07 -07004894}
4895
Marat Dukhan202eed02019-11-20 16:21:10 -08004896TEST(CONVOLUTION_NHWC_F32, setup_changing_input_buffer) {
4897 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
4898 ConvolutionOperatorTester()
4899 .batch_size(3)
4900 .input_height(8)
4901 .input_width(8)
4902 .kernel_height(5)
4903 .kernel_width(3)
4904 .group_input_channels(15)
4905 .group_output_channels(17)
4906 .TestSetupNHWCxF32();
4907}
4908
4909TEST(CONVOLUTION_NHWC_F32, setup_changing_input_buffer_grouped) {
4910 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
4911 ConvolutionOperatorTester()
4912 .batch_size(3)
4913 .input_height(8)
4914 .input_width(8)
4915 .kernel_height(5)
4916 .kernel_width(3)
4917 .groups(2)
4918 .group_input_channels(15)
4919 .group_output_channels(17)
4920 .TestSetupNHWCxF32();
4921}
4922
4923TEST(CONVOLUTION_NHWC_F32, setup_changing_input_buffer_depthwise) {
4924 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
4925 ConvolutionOperatorTester()
4926 .batch_size(3)
4927 .input_height(8)
4928 .input_width(8)
4929 .kernel_height(3)
4930 .kernel_width(3)
4931 .groups(19)
4932 .group_input_channels(1)
4933 .group_output_channels(1)
4934 .TestSetupNHWCxF32();
4935}
4936
Marat Dukhanefc47b82019-11-18 09:25:38 -08004937TEST(CONVOLUTION_NHWC_F32, setup_increasing_batch) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004938 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004939 ConvolutionOperatorTester()
4940 .batch_size(3)
4941 .next_batch_size(5)
4942 .input_height(8)
4943 .input_width(8)
4944 .kernel_height(5)
4945 .kernel_width(3)
4946 .group_input_channels(15)
4947 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004948 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004949}
4950
Marat Dukhanefc47b82019-11-18 09:25:38 -08004951TEST(CONVOLUTION_NHWC_F32, setup_increasing_batch_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004952 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004953 ConvolutionOperatorTester()
4954 .batch_size(3)
4955 .next_batch_size(5)
4956 .input_height(8)
4957 .input_width(8)
4958 .kernel_height(5)
4959 .kernel_width(3)
4960 .groups(2)
4961 .group_input_channels(15)
4962 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004963 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004964}
4965
Marat Dukhanefc47b82019-11-18 09:25:38 -08004966TEST(CONVOLUTION_NHWC_F32, setup_increasing_batch_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004967 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004968 ConvolutionOperatorTester()
4969 .batch_size(3)
4970 .next_batch_size(5)
4971 .input_height(8)
4972 .input_width(8)
4973 .kernel_height(3)
4974 .kernel_width(3)
4975 .groups(19)
4976 .group_input_channels(1)
4977 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004978 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004979}
4980
Marat Dukhanefc47b82019-11-18 09:25:38 -08004981TEST(CONVOLUTION_NHWC_F32, setup_decreasing_batch) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004982 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004983 ConvolutionOperatorTester()
4984 .batch_size(5)
4985 .next_batch_size(3)
4986 .input_height(8)
4987 .input_width(8)
4988 .kernel_height(5)
4989 .kernel_width(3)
4990 .group_input_channels(15)
4991 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08004992 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07004993}
4994
Marat Dukhanefc47b82019-11-18 09:25:38 -08004995TEST(CONVOLUTION_NHWC_F32, setup_decreasing_batch_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08004996 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07004997 ConvolutionOperatorTester()
4998 .batch_size(5)
4999 .next_batch_size(3)
5000 .input_height(8)
5001 .input_width(8)
5002 .kernel_height(5)
5003 .kernel_width(3)
5004 .groups(2)
5005 .group_input_channels(15)
5006 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005007 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005008}
5009
Marat Dukhanefc47b82019-11-18 09:25:38 -08005010TEST(CONVOLUTION_NHWC_F32, setup_decreasing_batch_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08005011 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07005012 ConvolutionOperatorTester()
5013 .batch_size(5)
5014 .next_batch_size(3)
5015 .input_height(8)
5016 .input_width(8)
5017 .kernel_height(3)
5018 .kernel_width(3)
5019 .groups(19)
5020 .group_input_channels(1)
5021 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005022 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005023}
5024
Marat Dukhanefc47b82019-11-18 09:25:38 -08005025TEST(CONVOLUTION_NHWC_F32, setup_changing_height) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08005026 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07005027 ConvolutionOperatorTester()
5028 .batch_size(3)
5029 .input_height(8)
5030 .input_width(8)
5031 .next_input_height(9)
5032 .kernel_height(5)
5033 .kernel_width(3)
5034 .group_input_channels(15)
5035 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005036 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005037 ConvolutionOperatorTester()
5038 .batch_size(3)
5039 .input_height(8)
5040 .input_width(8)
5041 .next_input_height(7)
5042 .kernel_height(5)
5043 .kernel_width(3)
5044 .group_input_channels(15)
5045 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005046 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005047}
5048
Marat Dukhanefc47b82019-11-18 09:25:38 -08005049TEST(CONVOLUTION_NHWC_F32, setup_changing_height_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08005050 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07005051 ConvolutionOperatorTester()
5052 .batch_size(3)
5053 .input_height(8)
5054 .input_width(8)
5055 .next_input_height(9)
5056 .kernel_height(5)
5057 .kernel_width(3)
5058 .groups(2)
5059 .group_input_channels(15)
5060 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005061 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005062 ConvolutionOperatorTester()
5063 .batch_size(3)
5064 .input_height(8)
5065 .input_width(8)
5066 .next_input_height(7)
5067 .kernel_height(5)
5068 .kernel_width(3)
5069 .groups(2)
5070 .group_input_channels(15)
5071 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005072 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005073}
5074
Marat Dukhanefc47b82019-11-18 09:25:38 -08005075TEST(CONVOLUTION_NHWC_F32, setup_changing_height_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08005076 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07005077 ConvolutionOperatorTester()
5078 .batch_size(3)
5079 .input_height(8)
5080 .input_width(8)
5081 .next_input_height(9)
5082 .kernel_height(3)
5083 .kernel_width(3)
5084 .groups(19)
5085 .group_input_channels(1)
5086 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005087 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005088 ConvolutionOperatorTester()
5089 .batch_size(3)
5090 .input_height(8)
5091 .input_width(8)
5092 .next_input_height(7)
5093 .kernel_height(3)
5094 .kernel_width(3)
5095 .groups(19)
5096 .group_input_channels(1)
5097 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005098 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005099}
5100
Marat Dukhanefc47b82019-11-18 09:25:38 -08005101TEST(CONVOLUTION_NHWC_F32, setup_changing_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08005102 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07005103 ConvolutionOperatorTester()
5104 .batch_size(3)
5105 .input_height(8)
5106 .input_width(8)
5107 .next_input_width(9)
5108 .kernel_height(5)
5109 .kernel_width(3)
5110 .group_input_channels(15)
5111 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005112 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005113 ConvolutionOperatorTester()
5114 .batch_size(3)
5115 .input_height(8)
5116 .input_width(8)
5117 .next_input_width(7)
5118 .kernel_height(5)
5119 .kernel_width(3)
5120 .group_input_channels(15)
5121 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005122 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005123}
5124
Marat Dukhanefc47b82019-11-18 09:25:38 -08005125TEST(CONVOLUTION_NHWC_F32, setup_changing_width_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08005126 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07005127 ConvolutionOperatorTester()
5128 .batch_size(3)
5129 .input_height(8)
5130 .input_width(8)
5131 .next_input_width(9)
5132 .kernel_height(5)
5133 .kernel_width(3)
5134 .groups(2)
5135 .group_input_channels(15)
5136 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005137 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005138 ConvolutionOperatorTester()
5139 .batch_size(3)
5140 .input_height(8)
5141 .input_width(8)
5142 .next_input_width(7)
5143 .kernel_height(5)
5144 .kernel_width(3)
5145 .groups(2)
5146 .group_input_channels(15)
5147 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005148 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005149}
5150
Marat Dukhanefc47b82019-11-18 09:25:38 -08005151TEST(CONVOLUTION_NHWC_F32, setup_changing_width_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08005152 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07005153 ConvolutionOperatorTester()
5154 .batch_size(3)
5155 .input_height(8)
5156 .input_width(8)
5157 .next_input_width(9)
5158 .kernel_height(3)
5159 .kernel_width(3)
5160 .groups(19)
5161 .group_input_channels(1)
5162 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005163 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005164 ConvolutionOperatorTester()
5165 .batch_size(3)
5166 .input_height(8)
5167 .input_width(8)
5168 .next_input_width(7)
5169 .kernel_height(3)
5170 .kernel_width(3)
5171 .groups(19)
5172 .group_input_channels(1)
5173 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005174 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005175}
5176
Marat Dukhanefc47b82019-11-18 09:25:38 -08005177TEST(CONVOLUTION_NHWC_F32, setup_swap_height_and_width) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08005178 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07005179 ConvolutionOperatorTester()
5180 .batch_size(3)
5181 .input_height(9)
5182 .input_width(8)
5183 .next_input_height(8)
5184 .next_input_width(9)
5185 .kernel_height(5)
5186 .kernel_width(3)
5187 .group_input_channels(15)
5188 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005189 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005190}
5191
Marat Dukhanefc47b82019-11-18 09:25:38 -08005192TEST(CONVOLUTION_NHWC_F32, setup_swap_height_and_width_grouped) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08005193 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07005194 ConvolutionOperatorTester()
5195 .batch_size(3)
5196 .input_height(9)
5197 .input_width(8)
5198 .next_input_height(8)
5199 .next_input_width(9)
5200 .kernel_height(5)
5201 .kernel_width(3)
5202 .groups(2)
5203 .group_input_channels(15)
5204 .group_output_channels(17)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005205 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005206}
5207
Marat Dukhanefc47b82019-11-18 09:25:38 -08005208TEST(CONVOLUTION_NHWC_F32, setup_swap_height_and_width_depthwise) {
Marat Dukhan04f03be2019-11-19 12:36:47 -08005209 ASSERT_EQ(xnn_status_success, xnn_initialize(nullptr /* allocator */));
XNNPACK Teamb455b122019-09-27 18:10:33 -07005210 ConvolutionOperatorTester()
5211 .batch_size(3)
5212 .input_height(9)
5213 .input_width(8)
5214 .next_input_height(8)
5215 .next_input_width(9)
5216 .kernel_height(3)
5217 .kernel_width(3)
5218 .groups(19)
5219 .group_input_channels(1)
5220 .group_output_channels(1)
Marat Dukhanefc47b82019-11-18 09:25:38 -08005221 .TestSetupNHWCxF32();
XNNPACK Teamb455b122019-09-27 18:10:33 -07005222}
Frank Barchard49b4dcc2020-06-26 14:07:19 -07005223
5224TEST(CONVOLUTION_NHWC_F16, 1x1) {
5225 ConvolutionOperatorTester()
5226 .input_size(27, 29)
5227 .kernel_size(1, 1)
5228 .group_input_channels(23)
5229 .group_output_channels(19)
5230 .iterations(3)
5231 .TestNHWCxF16();
5232}
5233
Marat Dukhan6989ec42022-01-14 17:14:35 -08005234TEST(CONVOLUTION_NHWC_F16, 1x1_with_fp32_weights) {
5235 ConvolutionOperatorTester()
5236 .input_size(27, 29)
5237 .kernel_size(1, 1)
5238 .group_input_channels(23)
5239 .group_output_channels(19)
5240 .weights_type(ConvolutionOperatorTester::WeightsType::FP32)
5241 .iterations(3)
5242 .TestNHWCxF16();
5243}
5244
Frank Barchard49b4dcc2020-06-26 14:07:19 -07005245TEST(CONVOLUTION_NHWC_F16, 1x1_with_qmin) {
5246 ConvolutionOperatorTester()
5247 .input_size(27, 29)
5248 .kernel_size(1, 1)
5249 .group_input_channels(23)
5250 .group_output_channels(19)
5251 .qmin(128)
5252 .iterations(3)
5253 .TestNHWCxF16();
5254}
5255
5256TEST(CONVOLUTION_NHWC_F16, 1x1_with_qmax) {
5257 ConvolutionOperatorTester()
5258 .input_size(27, 29)
5259 .kernel_size(1, 1)
5260 .group_input_channels(23)
5261 .group_output_channels(19)
5262 .qmax(128)
5263 .iterations(3)
5264 .TestNHWCxF16();
5265}
5266
5267TEST(CONVOLUTION_NHWC_F16, 1x1_with_input_stride) {
5268 ConvolutionOperatorTester()
5269 .input_size(27, 29)
5270 .kernel_size(1, 1)
5271 .input_channel_stride(28)
5272 .group_input_channels(23)
5273 .group_output_channels(19)
5274 .iterations(3)
5275 .TestNHWCxF16();
5276}
5277
5278TEST(CONVOLUTION_NHWC_F16, 1x1_with_output_stride) {
5279 ConvolutionOperatorTester()
5280 .input_size(27, 29)
5281 .kernel_size(1, 1)
5282 .output_channel_stride(29)
5283 .group_input_channels(23)
5284 .group_output_channels(19)
5285 .iterations(3)
5286 .TestNHWCxF16();
5287}
5288
5289TEST(CONVOLUTION_NHWC_F16, 1x1_without_bias) {
5290 ConvolutionOperatorTester()
5291 .has_bias(false)
5292 .input_size(13, 14)
5293 .kernel_size(1, 1)
5294 .group_input_channels(23)
5295 .group_output_channels(19)
5296 .iterations(3)
5297 .TestNHWCxF16();
5298}
5299
5300TEST(CONVOLUTION_NHWC_F16, 1x1_with_batch) {
5301 ConvolutionOperatorTester()
5302 .batch_size(3)
5303 .input_size(13, 14)
5304 .kernel_size(1, 1)
5305 .group_input_channels(23)
5306 .group_output_channels(19)
5307 .iterations(3)
5308 .TestNHWCxF16();
5309}
5310
5311TEST(CONVOLUTION_NHWC_F16, grouped_1x1) {
5312 ConvolutionOperatorTester()
5313 .input_size(24, 25)
5314 .kernel_size(1, 1)
5315 .groups(2)
5316 .group_input_channels(17)
5317 .group_output_channels(19)
5318 .iterations(3)
5319 .TestNHWCxF16();
5320}
5321
Marat Dukhan6989ec42022-01-14 17:14:35 -08005322TEST(CONVOLUTION_NHWC_F16, grouped_1x1_with_fp32_weights) {
5323 ConvolutionOperatorTester()
5324 .weights_type(ConvolutionOperatorTester::WeightsType::FP32)
5325 .input_size(24, 25)
5326 .kernel_size(1, 1)
5327 .groups(2)
5328 .group_input_channels(17)
5329 .group_output_channels(19)
5330 .iterations(3)
5331 .TestNHWCxF16();
5332}
5333
Frank Barchard49b4dcc2020-06-26 14:07:19 -07005334TEST(CONVOLUTION_NHWC_F16, grouped_1x1_with_qmin) {
5335 ConvolutionOperatorTester()
5336 .input_size(24, 25)
5337 .kernel_size(1, 1)
5338 .groups(2)
5339 .group_input_channels(17)
5340 .group_output_channels(19)
5341 .qmin(128)
5342 .iterations(3)
5343 .TestNHWCxF16();
5344}
5345
5346TEST(CONVOLUTION_NHWC_F16, grouped_1x1_with_qmax) {
5347 ConvolutionOperatorTester()
5348 .input_size(24, 25)
5349 .kernel_size(1, 1)
5350 .groups(2)
5351 .group_input_channels(17)
5352 .group_output_channels(19)
5353 .qmax(128)
5354 .iterations(3)
5355 .TestNHWCxF16();
5356}
5357
5358TEST(CONVOLUTION_NHWC_F16, grouped_1x1_with_input_stride) {
5359 ConvolutionOperatorTester()
5360 .input_size(24, 25)
5361 .kernel_size(1, 1)
5362 .groups(2)
5363 .input_channel_stride(37)
5364 .group_input_channels(17)
5365 .group_output_channels(19)
5366 .iterations(3)
5367 .TestNHWCxF16();
5368}
5369
5370TEST(CONVOLUTION_NHWC_F16, grouped_1x1_with_output_stride) {
5371 ConvolutionOperatorTester()
5372 .input_size(24, 25)
5373 .kernel_size(1, 1)
5374 .groups(2)
5375 .output_channel_stride(41)
5376 .group_input_channels(17)
5377 .group_output_channels(19)
5378 .iterations(3)
5379 .TestNHWCxF16();
5380}
5381
5382TEST(CONVOLUTION_NHWC_F16, grouped_1x1_without_bias) {
5383 ConvolutionOperatorTester()
5384 .has_bias(false)
5385 .input_size(24, 25)
5386 .kernel_size(1, 1)
5387 .groups(2)
5388 .group_input_channels(17)
5389 .group_output_channels(19)
5390 .iterations(3)
5391 .TestNHWCxF16();
5392}
5393
5394TEST(CONVOLUTION_NHWC_F16, grouped_1x1_with_batch) {
5395 ConvolutionOperatorTester()
5396 .batch_size(3)
5397 .input_size(24, 25)
5398 .kernel_size(1, 1)
5399 .groups(2)
5400 .group_input_channels(17)
5401 .group_output_channels(19)
5402 .iterations(3)
5403 .TestNHWCxF16();
5404}
5405
5406TEST(CONVOLUTION_NHWC_F16, unioutput_1x1) {
5407 ConvolutionOperatorTester()
5408 .input_size(1, 1)
5409 .kernel_size(1, 1)
5410 .group_input_channels(23)
5411 .group_output_channels(19)
5412 .iterations(3)
5413 .TestNHWCxF16();
5414}
5415
5416TEST(CONVOLUTION_NHWC_F16, unioutput_1x1_with_qmin) {
5417 ConvolutionOperatorTester()
5418 .input_size(1, 1)
5419 .kernel_size(1, 1)
5420 .group_input_channels(23)
5421 .group_output_channels(19)
5422 .qmin(128)
5423 .iterations(3)
5424 .TestNHWCxF16();
5425}
5426
5427TEST(CONVOLUTION_NHWC_F16, unioutput_1x1_with_qmax) {
5428 ConvolutionOperatorTester()
5429 .input_size(1, 1)
5430 .kernel_size(1, 1)
5431 .group_input_channels(23)
5432 .group_output_channels(19)
5433 .qmax(128)
5434 .iterations(3)
5435 .TestNHWCxF16();
5436}
5437
5438TEST(CONVOLUTION_NHWC_F16, unioutput_1x1_with_input_stride) {
5439 ConvolutionOperatorTester()
5440 .input_size(1, 1)
5441 .kernel_size(1, 1)
5442 .input_channel_stride(28)
5443 .group_input_channels(23)
5444 .group_output_channels(19)
5445 .iterations(3)
5446 .TestNHWCxF16();
5447}
5448
5449TEST(CONVOLUTION_NHWC_F16, unioutput_1x1_with_output_stride) {
5450 ConvolutionOperatorTester()
5451 .input_size(1, 1)
5452 .kernel_size(1, 1)
5453 .output_channel_stride(29)
5454 .group_input_channels(23)
5455 .group_output_channels(19)
5456 .iterations(3)
5457 .TestNHWCxF16();
5458}
5459
5460TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_1x1) {
5461 ConvolutionOperatorTester()
5462 .input_size(1, 1)
5463 .kernel_size(1, 1)
5464 .groups(2)
5465 .group_input_channels(17)
5466 .group_output_channels(13)
5467 .iterations(3)
5468 .TestNHWCxF16();
5469}
5470
5471TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_1x1_with_qmin) {
5472 ConvolutionOperatorTester()
5473 .input_size(1, 1)
5474 .kernel_size(1, 1)
5475 .groups(2)
5476 .group_input_channels(17)
5477 .group_output_channels(13)
5478 .qmin(128)
5479 .iterations(3)
5480 .TestNHWCxF16();
5481}
5482
5483TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_1x1_with_qmax) {
5484 ConvolutionOperatorTester()
5485 .input_size(1, 1)
5486 .kernel_size(1, 1)
5487 .groups(2)
5488 .group_input_channels(17)
5489 .group_output_channels(13)
5490 .qmax(128)
5491 .iterations(3)
5492 .TestNHWCxF16();
5493}
5494
5495TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_1x1_with_input_stride) {
5496 ConvolutionOperatorTester()
5497 .input_size(1, 1)
5498 .kernel_size(1, 1)
5499 .groups(2)
5500 .input_channel_stride(37)
5501 .group_input_channels(17)
5502 .group_output_channels(13)
5503 .iterations(3)
5504 .TestNHWCxF16();
5505}
5506
5507TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_1x1_with_output_stride) {
5508 ConvolutionOperatorTester()
5509 .input_size(1, 1)
5510 .kernel_size(1, 1)
5511 .groups(2)
5512 .output_channel_stride(41)
5513 .group_input_channels(17)
5514 .group_output_channels(13)
5515 .iterations(3)
5516 .TestNHWCxF16();
5517}
5518
5519TEST(CONVOLUTION_NHWC_F16, 1x3) {
5520 ConvolutionOperatorTester()
5521 .input_size(20, 19)
5522 .padding_width(1)
5523 .kernel_size(1, 3)
5524 .group_input_channels(17)
5525 .group_output_channels(15)
5526 .iterations(3)
5527 .TestNHWCxF16();
5528}
5529
5530TEST(CONVOLUTION_NHWC_F16, grouped_1x3) {
5531 ConvolutionOperatorTester()
5532 .input_size(20, 19)
5533 .padding_width(1)
5534 .kernel_size(1, 3)
5535 .groups(2)
5536 .group_input_channels(17)
5537 .group_output_channels(15)
5538 .iterations(3)
5539 .TestNHWCxF16();
5540}
5541
5542TEST(CONVOLUTION_NHWC_F16, 3x1) {
5543 ConvolutionOperatorTester()
5544 .input_size(19, 20)
5545 .padding_height(1)
5546 .kernel_size(3, 1)
5547 .group_input_channels(17)
5548 .group_output_channels(15)
5549 .iterations(3)
5550 .TestNHWCxF16();
5551}
5552
5553TEST(CONVOLUTION_NHWC_F16, grouped_3x1) {
5554 ConvolutionOperatorTester()
5555 .input_size(19, 20)
5556 .padding_height(1)
5557 .kernel_size(3, 1)
5558 .groups(2)
5559 .group_input_channels(17)
5560 .group_output_channels(15)
5561 .iterations(3)
5562 .TestNHWCxF16();
5563}
5564
5565TEST(CONVOLUTION_NHWC_F16, 3x3) {
5566 ConvolutionOperatorTester()
5567 .input_size(13, 12)
5568 .padding(1)
5569 .kernel_size(3, 3)
5570 .group_input_channels(15)
5571 .group_output_channels(17)
5572 .iterations(3)
5573 .TestNHWCxF16();
5574}
5575
Marat Dukhan6989ec42022-01-14 17:14:35 -08005576TEST(CONVOLUTION_NHWC_F16, 3x3_with_fp32_weights) {
5577 ConvolutionOperatorTester()
5578 .weights_type(ConvolutionOperatorTester::WeightsType::FP32)
5579 .input_size(13, 12)
5580 .padding(1)
5581 .kernel_size(3, 3)
5582 .group_input_channels(15)
5583 .group_output_channels(17)
5584 .iterations(3)
5585 .TestNHWCxF16();
5586}
5587
Frank Barchard49b4dcc2020-06-26 14:07:19 -07005588TEST(CONVOLUTION_NHWC_F16, 3x3_without_padding) {
5589 ConvolutionOperatorTester()
5590 .input_size(13, 12)
5591 .kernel_size(3, 3)
5592 .group_input_channels(15)
5593 .group_output_channels(17)
5594 .iterations(3)
5595 .TestNHWCxF16();
5596}
5597
5598TEST(CONVOLUTION_NHWC_F16, 3x3_with_left_padding) {
5599 ConvolutionOperatorTester()
5600 .input_size(13, 12)
5601 .padding_left(1)
5602 .kernel_size(3, 3)
5603 .group_input_channels(15)
5604 .group_output_channels(17)
5605 .iterations(3)
5606 .TestNHWCxF16();
5607}
5608
5609TEST(CONVOLUTION_NHWC_F16, 3x3_with_right_padding) {
5610 ConvolutionOperatorTester()
5611 .input_size(13, 12)
5612 .padding_right(1)
5613 .kernel_size(3, 3)
5614 .group_input_channels(15)
5615 .group_output_channels(17)
5616 .iterations(3)
5617 .TestNHWCxF16();
5618}
5619
5620TEST(CONVOLUTION_NHWC_F16, 3x3_with_top_padding) {
5621 ConvolutionOperatorTester()
5622 .input_size(13, 12)
5623 .padding_top(1)
5624 .kernel_size(3, 3)
5625 .group_input_channels(15)
5626 .group_output_channels(17)
5627 .iterations(3)
5628 .TestNHWCxF16();
5629}
5630
5631TEST(CONVOLUTION_NHWC_F16, 3x3_with_bottom_padding) {
5632 ConvolutionOperatorTester()
5633 .input_size(13, 12)
5634 .padding_bottom(1)
5635 .kernel_size(3, 3)
5636 .group_input_channels(15)
5637 .group_output_channels(17)
5638 .iterations(3)
5639 .TestNHWCxF16();
5640}
5641
5642TEST(CONVOLUTION_NHWC_F16, 3x3_with_input_stride) {
5643 ConvolutionOperatorTester()
5644 .input_size(13, 12)
5645 .padding(1)
5646 .kernel_size(3, 3)
5647 .input_channel_stride(22)
5648 .group_input_channels(15)
5649 .group_output_channels(17)
5650 .iterations(3)
5651 .TestNHWCxF16();
5652}
5653
5654TEST(CONVOLUTION_NHWC_F16, 3x3_with_output_stride) {
5655 ConvolutionOperatorTester()
5656 .input_size(13, 12)
5657 .padding(1)
5658 .kernel_size(3, 3)
5659 .output_channel_stride(23)
5660 .group_input_channels(15)
5661 .group_output_channels(17)
5662 .iterations(3)
5663 .TestNHWCxF16();
5664}
5665
5666TEST(CONVOLUTION_NHWC_F16, 3x3_without_bias) {
5667 ConvolutionOperatorTester()
5668 .has_bias(false)
5669 .input_size(10, 9)
5670 .padding(1)
5671 .kernel_size(3, 3)
5672 .group_input_channels(15)
5673 .group_output_channels(17)
5674 .iterations(3)
5675 .TestNHWCxF16();
5676}
5677
5678TEST(CONVOLUTION_NHWC_F16, 3x3_with_batch) {
5679 ConvolutionOperatorTester()
5680 .batch_size(3)
5681 .input_size(10, 9)
5682 .padding(1)
5683 .kernel_size(3, 3)
5684 .group_input_channels(15)
5685 .group_output_channels(17)
5686 .iterations(3)
5687 .TestNHWCxF16();
5688}
5689
5690TEST(CONVOLUTION_NHWC_F16, grouped_3x3) {
5691 ConvolutionOperatorTester()
5692 .input_size(10, 11)
5693 .padding(1)
5694 .kernel_size(3, 3)
5695 .groups(2)
5696 .group_input_channels(14)
5697 .group_output_channels(13)
5698 .iterations(3)
5699 .TestNHWCxF16();
5700}
5701
Marat Dukhan6989ec42022-01-14 17:14:35 -08005702TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_fp32_weights) {
5703 ConvolutionOperatorTester()
5704 .weights_type(ConvolutionOperatorTester::WeightsType::FP32)
5705 .input_size(10, 11)
5706 .padding(1)
5707 .kernel_size(3, 3)
5708 .groups(2)
5709 .group_input_channels(14)
5710 .group_output_channels(13)
5711 .iterations(3)
5712 .TestNHWCxF16();
5713}
5714
Frank Barchard49b4dcc2020-06-26 14:07:19 -07005715TEST(CONVOLUTION_NHWC_F16, grouped_3x3_without_padding) {
5716 ConvolutionOperatorTester()
5717 .input_size(13, 12)
5718 .kernel_size(3, 3)
5719 .group_input_channels(15)
5720 .group_output_channels(17)
5721 .iterations(3)
5722 .TestNHWCxF16();
5723}
5724
5725TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_left_padding) {
5726 ConvolutionOperatorTester()
5727 .input_size(10, 11)
5728 .padding_left(1)
5729 .kernel_size(3, 3)
5730 .groups(2)
5731 .group_input_channels(14)
5732 .group_output_channels(13)
5733 .iterations(3)
5734 .TestNHWCxF16();
5735}
5736
5737TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_right_padding) {
5738 ConvolutionOperatorTester()
5739 .input_size(10, 11)
5740 .padding_right(1)
5741 .kernel_size(3, 3)
5742 .groups(2)
5743 .group_input_channels(14)
5744 .group_output_channels(13)
5745 .iterations(3)
5746 .TestNHWCxF16();
5747}
5748
5749TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_top_padding) {
5750 ConvolutionOperatorTester()
5751 .input_size(10, 11)
5752 .padding_top(1)
5753 .kernel_size(3, 3)
5754 .groups(2)
5755 .group_input_channels(14)
5756 .group_output_channels(13)
5757 .iterations(3)
5758 .TestNHWCxF16();
5759}
5760
5761TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_bottom_padding) {
5762 ConvolutionOperatorTester()
5763 .input_size(10, 11)
5764 .padding_bottom(1)
5765 .kernel_size(3, 3)
5766 .groups(2)
5767 .group_input_channels(14)
5768 .group_output_channels(13)
5769 .iterations(3)
5770 .TestNHWCxF16();
5771}
5772
5773TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_input_stride) {
5774 ConvolutionOperatorTester()
5775 .input_size(10, 11)
5776 .padding(1)
5777 .kernel_size(3, 3)
5778 .groups(2)
5779 .input_channel_stride(29)
5780 .group_input_channels(14)
5781 .group_output_channels(13)
5782 .iterations(3)
5783 .TestNHWCxF16();
5784}
5785
5786TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_output_stride) {
5787 ConvolutionOperatorTester()
5788 .input_size(10, 11)
5789 .padding(1)
5790 .kernel_size(3, 3)
5791 .groups(2)
5792 .output_channel_stride(31)
5793 .group_input_channels(14)
5794 .group_output_channels(13)
5795 .iterations(3)
5796 .TestNHWCxF16();
5797}
5798
5799TEST(CONVOLUTION_NHWC_F16, grouped_3x3_without_bias) {
5800 ConvolutionOperatorTester()
5801 .has_bias(false)
5802 .input_size(10, 11)
5803 .padding(1)
5804 .kernel_size(3, 3)
5805 .groups(2)
5806 .group_input_channels(14)
5807 .group_output_channels(13)
5808 .iterations(3)
5809 .TestNHWCxF16();
5810}
5811
5812TEST(CONVOLUTION_NHWC_F16, grouped_3x3_with_batch) {
5813 ConvolutionOperatorTester()
5814 .batch_size(3)
5815 .input_size(10, 11)
5816 .padding(1)
5817 .kernel_size(3, 3)
5818 .groups(2)
5819 .group_input_channels(14)
5820 .group_output_channels(13)
5821 .iterations(3)
5822 .TestNHWCxF16();
5823}
5824
5825TEST(CONVOLUTION_NHWC_F16, 3x3s2) {
5826 ConvolutionOperatorTester()
5827 .input_size(14, 13)
5828 .padding(1)
5829 .kernel_size(3, 3)
5830 .subsampling(2)
5831 .group_input_channels(27)
5832 .group_output_channels(19)
5833 .iterations(3)
5834 .TestNHWCxF16();
5835}
5836
5837TEST(CONVOLUTION_NHWC_F16, 3x3s2_with_tf_same_padding) {
5838 for (size_t input_height = 13; input_height <= 14; input_height++) {
5839 for (size_t input_width = 13; input_width <= 14; input_width++) {
5840 ConvolutionOperatorTester()
5841 .input_size(input_height, input_width)
5842 .padding_tf_same(true)
5843 .kernel_size(3, 3)
5844 .subsampling(2)
5845 .group_input_channels(27)
5846 .group_output_channels(19)
5847 .iterations(3)
5848 .TestNHWCxF16();
5849 }
5850 }
5851}
5852
5853TEST(CONVOLUTION_NHWC_F16, 3x3s1x2) {
5854 ConvolutionOperatorTester()
5855 .input_size(14, 13)
5856 .padding(1)
5857 .kernel_size(3, 3)
5858 .subsampling(1, 2)
5859 .group_input_channels(27)
5860 .group_output_channels(19)
5861 .iterations(3)
5862 .TestNHWCxF16();
5863}
5864
5865TEST(CONVOLUTION_NHWC_F16, 3x3s1x2_with_tf_same_padding) {
5866 for (size_t input_height = 13; input_height <= 14; input_height++) {
5867 for (size_t input_width = 13; input_width <= 14; input_width++) {
5868 ConvolutionOperatorTester()
5869 .input_size(input_height, input_width)
5870 .padding_tf_same(true)
5871 .kernel_size(3, 3)
5872 .subsampling(1, 2)
5873 .group_input_channels(27)
5874 .group_output_channels(19)
5875 .iterations(3)
5876 .TestNHWCxF16();
5877 }
5878 }
5879}
5880
5881TEST(CONVOLUTION_NHWC_F16, 3x3s2x1) {
5882 ConvolutionOperatorTester()
5883 .input_size(14, 13)
5884 .padding(1)
5885 .kernel_size(3, 3)
5886 .subsampling(2, 1)
5887 .group_input_channels(27)
5888 .group_output_channels(19)
5889 .iterations(3)
5890 .TestNHWCxF16();
5891}
5892
5893TEST(CONVOLUTION_NHWC_F16, 3x3s2x1_with_tf_same_padding) {
5894 for (size_t input_height = 13; input_height <= 14; input_height++) {
5895 for (size_t input_width = 13; input_width <= 14; input_width++) {
5896 ConvolutionOperatorTester()
5897 .input_size(input_height, input_width)
5898 .padding_tf_same(true)
5899 .kernel_size(3, 3)
5900 .subsampling(2, 1)
5901 .group_input_channels(27)
5902 .group_output_channels(19)
5903 .iterations(3)
5904 .TestNHWCxF16();
5905 }
5906 }
5907}
5908
5909TEST(CONVOLUTION_NHWC_F16, 3x3d2) {
5910 ConvolutionOperatorTester()
5911 .input_size(13, 14)
5912 .padding(2)
5913 .kernel_size(3, 3)
5914 .dilation(2)
5915 .group_input_channels(27)
5916 .group_output_channels(19)
5917 .iterations(3)
5918 .TestNHWCxF16();
5919}
5920
5921TEST(CONVOLUTION_NHWC_F16, 3x3d1x2) {
5922 ConvolutionOperatorTester()
5923 .input_size(14, 15)
5924 .padding(1, 2)
5925 .kernel_size(3, 3)
5926 .dilation(1, 2)
5927 .group_input_channels(27)
5928 .group_output_channels(19)
5929 .iterations(3)
5930 .TestNHWCxF16();
5931}
5932
5933TEST(CONVOLUTION_NHWC_F16, 3x3d2x1) {
5934 ConvolutionOperatorTester()
5935 .input_size(15, 14)
5936 .padding(2, 1)
5937 .kernel_size(3, 3)
5938 .dilation(2, 1)
5939 .group_input_channels(27)
5940 .group_output_channels(19)
5941 .iterations(3)
5942 .TestNHWCxF16();
5943}
5944
5945TEST(CONVOLUTION_NHWC_F16, unioutput_3x3) {
5946 ConvolutionOperatorTester()
5947 .input_size(3, 3)
5948 .padding(1)
5949 .kernel_size(3, 3)
5950 .group_input_channels(23)
5951 .group_output_channels(19)
5952 .iterations(3)
5953 .TestNHWCxF16();
5954}
5955
5956TEST(CONVOLUTION_NHWC_F16, unioutput_3x3_with_qmin) {
5957 ConvolutionOperatorTester()
5958 .input_size(3, 3)
5959 .padding(1)
5960 .kernel_size(3, 3)
5961 .group_input_channels(23)
5962 .group_output_channels(19)
5963 .qmin(128)
5964 .iterations(3)
5965 .TestNHWCxF16();
5966}
5967
5968TEST(CONVOLUTION_NHWC_F16, unioutput_3x3_with_qmax) {
5969 ConvolutionOperatorTester()
5970 .input_size(3, 3)
5971 .padding(1)
5972 .kernel_size(3, 3)
5973 .group_input_channels(23)
5974 .group_output_channels(19)
5975 .qmax(128)
5976 .iterations(3)
5977 .TestNHWCxF16();
5978}
5979
5980TEST(CONVOLUTION_NHWC_F16, unioutput_3x3_with_input_stride) {
5981 ConvolutionOperatorTester()
5982 .input_size(3, 3)
5983 .padding(1)
5984 .kernel_size(3, 3)
5985 .input_channel_stride(28)
5986 .group_input_channels(23)
5987 .group_output_channels(19)
5988 .iterations(3)
5989 .TestNHWCxF16();
5990}
5991
5992TEST(CONVOLUTION_NHWC_F16, unioutput_3x3_with_output_stride) {
5993 ConvolutionOperatorTester()
5994 .input_size(3, 3)
5995 .padding(1)
5996 .kernel_size(3, 3)
5997 .output_channel_stride(29)
5998 .group_input_channels(23)
5999 .group_output_channels(19)
6000 .iterations(3)
6001 .TestNHWCxF16();
6002}
6003
6004TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_3x3) {
6005 ConvolutionOperatorTester()
6006 .input_size(3, 3)
6007 .padding(1)
6008 .kernel_size(3, 3)
6009 .groups(2)
6010 .group_input_channels(17)
6011 .group_output_channels(13)
6012 .iterations(3)
6013 .TestNHWCxF16();
6014}
6015
6016TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_3x3_with_qmin) {
6017 ConvolutionOperatorTester()
6018 .input_size(3, 3)
6019 .padding(1)
6020 .kernel_size(3, 3)
6021 .groups(2)
6022 .group_input_channels(17)
6023 .group_output_channels(13)
6024 .qmin(128)
6025 .iterations(3)
6026 .TestNHWCxF16();
6027}
6028
6029TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_3x3_with_qmax) {
6030 ConvolutionOperatorTester()
6031 .input_size(3, 3)
6032 .padding(1)
6033 .kernel_size(3, 3)
6034 .groups(2)
6035 .group_input_channels(17)
6036 .group_output_channels(13)
6037 .qmax(128)
6038 .iterations(3)
6039 .TestNHWCxF16();
6040}
6041
6042TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_3x3_with_input_stride) {
6043 ConvolutionOperatorTester()
6044 .input_size(3, 3)
6045 .padding(1)
6046 .kernel_size(3, 3)
6047 .groups(2)
6048 .input_channel_stride(37)
6049 .group_input_channels(17)
6050 .group_output_channels(13)
6051 .iterations(3)
6052 .TestNHWCxF16();
6053}
6054
6055TEST(CONVOLUTION_NHWC_F16, unioutput_grouped_3x3_with_output_stride) {
6056 ConvolutionOperatorTester()
6057 .input_size(3, 3)
6058 .padding(1)
6059 .kernel_size(3, 3)
6060 .groups(2)
6061 .output_channel_stride(41)
6062 .group_input_channels(17)
6063 .group_output_channels(13)
6064 .iterations(3)
6065 .TestNHWCxF16();
6066}
6067
6068TEST(CONVOLUTION_NHWC_F16, depthwise_1x1) {
6069 ConvolutionOperatorTester()
6070 .input_size(15, 14)
6071 .kernel_size(1, 1)
6072 .groups(24)
6073 .iterations(3)
6074 .TestNHWCxF16();
6075}
6076
Marat Dukhan6989ec42022-01-14 17:14:35 -08006077TEST(CONVOLUTION_NHWC_F16, depthwise_1x1_with_fp32_weights) {
6078 ConvolutionOperatorTester()
6079 .weights_type(ConvolutionOperatorTester::WeightsType::FP32)
6080 .input_size(15, 14)
6081 .kernel_size(1, 1)
6082 .groups(24)
6083 .iterations(3)
6084 .TestNHWCxF16();
6085}
6086
Frank Barchard49b4dcc2020-06-26 14:07:19 -07006087TEST(CONVOLUTION_NHWC_F16, depthwise_1x1_without_bias) {
6088 ConvolutionOperatorTester()
6089 .has_bias(false)
6090 .input_size(15, 14)
6091 .kernel_size(1, 1)
6092 .groups(24)
6093 .iterations(3)
6094 .TestNHWCxF16();
6095}
6096
6097TEST(CONVOLUTION_NHWC_F16, depthwise_2x2) {
6098 ConvolutionOperatorTester()
6099 .input_size(15, 14)
6100 .padding(1, 1)
6101 .kernel_size(2, 2)
6102 .groups(24)
6103 .iterations(3)
6104 .TestNHWCxF16();
6105}
6106
6107TEST(CONVOLUTION_NHWC_F16, depthwise_2x2_without_bias) {
6108 ConvolutionOperatorTester()
6109 .has_bias(false)
6110 .input_size(15, 14)
6111 .padding(1, 1)
6112 .kernel_size(2, 2)
6113 .groups(24)
6114 .iterations(3)
6115 .TestNHWCxF16();
6116}
6117
6118TEST(CONVOLUTION_NHWC_F16, depthwise_2x2s2) {
6119 ConvolutionOperatorTester()
6120 .input_size(15, 14)
6121 .padding(1, 1)
6122 .kernel_size(2, 2)
6123 .subsampling(2)
6124 .groups(27)
6125 .iterations(3)
6126 .TestNHWCxF16();
6127}
6128
6129TEST(CONVOLUTION_NHWC_F16, depthwise_2x2s1x2) {
6130 ConvolutionOperatorTester()
6131 .input_size(15, 14)
6132 .padding(1, 1)
6133 .kernel_size(2, 2)
6134 .subsampling(1, 2)
6135 .groups(27)
6136 .iterations(3)
6137 .TestNHWCxF16();
6138}
6139
6140TEST(CONVOLUTION_NHWC_F16, depthwise_2x2s2x1) {
6141 ConvolutionOperatorTester()
6142 .input_size(15, 14)
6143 .padding(1, 1)
6144 .kernel_size(2, 2)
6145 .subsampling(2, 1)
6146 .groups(27)
6147 .iterations(3)
6148 .TestNHWCxF16();
6149}
6150
6151TEST(CONVOLUTION_NHWC_F16, depthwise_2x2d2) {
6152 ConvolutionOperatorTester()
6153 .input_size(15, 14)
6154 .padding(1, 1)
6155 .kernel_size(2, 2)
6156 .dilation(2)
6157 .groups(27)
6158 .iterations(3)
6159 .TestNHWCxF16();
6160}
6161
6162TEST(CONVOLUTION_NHWC_F16, depthwise_2x2d1x2) {
6163 ConvolutionOperatorTester()
6164 .input_size(15, 14)
6165 .padding(1, 1)
6166 .kernel_size(2, 2)
6167 .dilation(1, 2)
6168 .groups(27)
6169 .iterations(3)
6170 .TestNHWCxF16();
6171}
6172
6173TEST(CONVOLUTION_NHWC_F16, depthwise_2x2d2x1) {
6174 ConvolutionOperatorTester()
6175 .input_size(15, 14)
6176 .padding(1, 1)
6177 .kernel_size(2, 2)
6178 .dilation(2, 1)
6179 .groups(27)
6180 .iterations(3)
6181 .TestNHWCxF16();
6182}
6183
6184TEST(CONVOLUTION_NHWC_F16, depthwise_3x3) {
6185 ConvolutionOperatorTester()
6186 .input_size(15, 14)
6187 .padding(1, 1)
6188 .kernel_size(3, 3)
6189 .groups(24)
6190 .iterations(3)
6191 .TestNHWCxF16();
6192}
6193
Marat Dukhan6989ec42022-01-14 17:14:35 -08006194TEST(CONVOLUTION_NHWC_F16, depthwise_3x3_with_fp32_weights) {
6195 ConvolutionOperatorTester()
6196 .weights_type(ConvolutionOperatorTester::WeightsType::FP32)
6197 .input_size(15, 14)
6198 .padding(1, 1)
6199 .kernel_size(3, 3)
6200 .groups(24)
6201 .iterations(3)
6202 .TestNHWCxF16();
6203}
6204
Frank Barchard49b4dcc2020-06-26 14:07:19 -07006205TEST(CONVOLUTION_NHWC_F16, depthwise_3x3_without_bias) {
6206 ConvolutionOperatorTester()
6207 .has_bias(false)
6208 .input_size(15, 14)
6209 .padding(1, 1)
6210 .kernel_size(3, 3)
6211 .groups(24)
6212 .iterations(3)
6213 .TestNHWCxF16();
6214}
6215
6216TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s2) {
6217 ConvolutionOperatorTester()
6218 .input_size(15, 14)
6219 .padding(1, 1)
6220 .kernel_size(3, 3)
6221 .subsampling(2)
6222 .groups(27)
6223 .iterations(3)
6224 .TestNHWCxF16();
6225}
6226
6227TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s2_with_tf_same_padding) {
6228 for (size_t input_height = 14; input_height <= 15; input_height++) {
6229 for (size_t input_width = 14; input_width <= 15; input_width++) {
6230 ConvolutionOperatorTester()
6231 .input_size(input_height, input_width)
6232 .padding_tf_same(true)
6233 .kernel_size(3, 3)
6234 .subsampling(2)
6235 .groups(27)
6236 .iterations(3)
6237 .TestNHWCxF16();
6238 }
6239 }
6240}
6241
6242TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s1x2) {
6243 ConvolutionOperatorTester()
6244 .input_size(15, 14)
6245 .padding(1, 1)
6246 .kernel_size(3, 3)
6247 .subsampling(1, 2)
6248 .groups(27)
6249 .iterations(3)
6250 .TestNHWCxF16();
6251}
6252
6253TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s1x2_with_tf_same_padding) {
6254 for (size_t input_height = 14; input_height <= 15; input_height++) {
6255 for (size_t input_width = 14; input_width <= 15; input_width++) {
6256 ConvolutionOperatorTester()
6257 .input_size(input_height, input_width)
6258 .padding_tf_same(true)
6259 .kernel_size(3, 3)
6260 .subsampling(1, 2)
6261 .groups(27)
6262 .iterations(3)
6263 .TestNHWCxF16();
6264 }
6265 }
6266}
6267
6268TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s2x1) {
6269 ConvolutionOperatorTester()
6270 .input_size(15, 14)
6271 .padding(1, 1)
6272 .kernel_size(3, 3)
6273 .subsampling(2, 1)
6274 .groups(27)
6275 .iterations(3)
6276 .TestNHWCxF16();
6277}
6278
6279TEST(CONVOLUTION_NHWC_F16, depthwise_3x3s2x1_with_tf_same_padding) {
6280 for (size_t input_height = 14; input_height <= 15; input_height++) {
6281 for (size_t input_width = 14; input_width <= 15; input_width++) {
6282 ConvolutionOperatorTester()
6283 .input_size(input_height, input_width)
6284 .padding_tf_same(true)
6285 .kernel_size(3, 3)
6286 .subsampling(2, 1)
6287 .groups(27)
6288 .iterations(3)
6289 .TestNHWCxF16();
6290 }
6291 }
6292}
6293
6294TEST(CONVOLUTION_NHWC_F16, depthwise_3x3d2) {
6295 ConvolutionOperatorTester()
6296 .input_size(15, 14)
6297 .padding(1, 1)
6298 .kernel_size(3, 3)
6299 .dilation(2)
6300 .groups(27)
6301 .iterations(3)
6302 .TestNHWCxF16();
6303}
6304
6305TEST(CONVOLUTION_NHWC_F16, depthwise_3x3d1x2) {
6306 ConvolutionOperatorTester()
6307 .input_size(15, 14)
6308 .padding(1, 1)
6309 .kernel_size(3, 3)
6310 .dilation(1, 2)
6311 .groups(27)
6312 .iterations(3)
6313 .TestNHWCxF16();
6314}
6315
6316TEST(CONVOLUTION_NHWC_F16, depthwise_3x3d2x1) {
6317 ConvolutionOperatorTester()
6318 .input_size(15, 14)
6319 .padding(1, 1)
6320 .kernel_size(3, 3)
6321 .dilation(2, 1)
6322 .groups(27)
6323 .iterations(3)
6324 .TestNHWCxF16();
6325}
6326
6327TEST(CONVOLUTION_NHWC_F16, depthwise_5x5) {
6328 ConvolutionOperatorTester()
6329 .input_size(15, 14)
6330 .padding(2, 2)
6331 .kernel_size(5, 5)
6332 .groups(27)
6333 .iterations(3)
6334 .TestNHWCxF16();
6335}
6336
6337TEST(CONVOLUTION_NHWC_F16, depthwise_5x5_without_bias) {
6338 ConvolutionOperatorTester()
6339 .has_bias(false)
6340 .input_size(15, 14)
6341 .padding(2, 2)
6342 .kernel_size(5, 5)
6343 .groups(27)
6344 .iterations(3)
6345 .TestNHWCxF16();
6346}
6347
6348TEST(CONVOLUTION_NHWC_F16, depthwise_5x5s2) {
6349 ConvolutionOperatorTester()
6350 .input_size(15, 14)
6351 .padding(2, 2)
6352 .kernel_size(5, 5)
6353 .subsampling(2)
6354 .groups(27)
6355 .iterations(3)
6356 .TestNHWCxF16();
6357}
6358
6359TEST(CONVOLUTION_NHWC_F16, depthwise_5x5s1x2) {
6360 ConvolutionOperatorTester()
6361 .input_size(15, 14)
6362 .padding(2, 2)
6363 .kernel_size(5, 5)
6364 .subsampling(1, 2)
6365 .groups(27)
6366 .iterations(3)
6367 .TestNHWCxF16();
6368}
6369
6370TEST(CONVOLUTION_NHWC_F16, depthwise_5x5s2x1) {
6371 ConvolutionOperatorTester()
6372 .input_size(15, 14)
6373 .padding(2, 2)
6374 .kernel_size(5, 5)
6375 .subsampling(2, 1)
6376 .groups(27)
6377 .iterations(3)
6378 .TestNHWCxF16();
6379}
6380
6381TEST(CONVOLUTION_NHWC_F16, depthwise_5x5d2) {
6382 ConvolutionOperatorTester()
6383 .input_size(15, 14)
6384 .padding(2, 2)
6385 .kernel_size(5, 5)
6386 .dilation(2)
6387 .groups(27)
6388 .iterations(3)
6389 .TestNHWCxF16();
6390}
6391
6392TEST(CONVOLUTION_NHWC_F16, depthwise_5x5d1x2) {
6393 ConvolutionOperatorTester()
6394 .input_size(15, 14)
6395 .padding(2, 2)
6396 .kernel_size(5, 5)
6397 .dilation(1, 2)
6398 .groups(27)
6399 .iterations(3)
6400 .TestNHWCxF16();
6401}
6402
6403TEST(CONVOLUTION_NHWC_F16, depthwise_5x5d2x1) {
6404 ConvolutionOperatorTester()
6405 .input_size(15, 14)
6406 .padding(2, 2)
6407 .kernel_size(5, 5)
6408 .dilation(2, 1)
6409 .groups(27)
6410 .iterations(3)
6411 .TestNHWCxF16();
6412}
6413
6414TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 1x1) {
6415 ConvolutionOperatorTester()
6416 .depthwise_layout(true)
6417 .input_size(15, 14)
6418 .kernel_size(1, 1)
6419 .groups(24)
6420 .iterations(3)
6421 .TestNHWCxF16();
6422}
6423
Marat Dukhan6989ec42022-01-14 17:14:35 -08006424TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 1x1_with_fp32_weights) {
6425 ConvolutionOperatorTester()
6426 .weights_type(ConvolutionOperatorTester::WeightsType::FP32)
6427 .depthwise_layout(true)
6428 .input_size(15, 14)
6429 .kernel_size(1, 1)
6430 .groups(24)
6431 .iterations(3)
6432 .TestNHWCxF16();
6433}
6434
Frank Barchard49b4dcc2020-06-26 14:07:19 -07006435TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 1x1_with_depth_multiplier) {
6436 ConvolutionOperatorTester()
6437 .depthwise_layout(true)
6438 .input_size(15, 14)
6439 .kernel_size(1, 1)
6440 .groups(24)
6441 .group_output_channels(3)
6442 .iterations(3)
6443 .TestNHWCxF16();
6444}
6445
Marat Dukhan6989ec42022-01-14 17:14:35 -08006446TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 1x1_with_depth_multiplier_with_fp32_weights) {
6447 ConvolutionOperatorTester()
6448 .weights_type(ConvolutionOperatorTester::WeightsType::FP32)
6449 .depthwise_layout(true)
6450 .input_size(15, 14)
6451 .kernel_size(1, 1)
6452 .groups(24)
6453 .group_output_channels(3)
6454 .iterations(3)
6455 .TestNHWCxF16();
6456}
6457
Frank Barchard49b4dcc2020-06-26 14:07:19 -07006458TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 1x1_without_bias) {
6459 ConvolutionOperatorTester()
6460 .depthwise_layout(true)
6461 .has_bias(false)
6462 .input_size(15, 14)
6463 .kernel_size(1, 1)
6464 .groups(24)
6465 .iterations(3)
6466 .TestNHWCxF16();
6467}
6468
6469TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 2x2) {
6470 ConvolutionOperatorTester()
6471 .depthwise_layout(true)
6472 .input_size(15, 14)
6473 .padding(1, 1)
6474 .kernel_size(2, 2)
6475 .groups(24)
6476 .iterations(3)
6477 .TestNHWCxF16();
6478}
6479
6480TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 2x2_with_depth_multiplier) {
6481 ConvolutionOperatorTester()
6482 .depthwise_layout(true)
6483 .input_size(15, 14)
6484 .padding(1, 1)
6485 .kernel_size(2, 2)
6486 .groups(24)
6487 .group_output_channels(3)
6488 .iterations(3)
6489 .TestNHWCxF16();
6490}
6491
6492TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 2x2_without_bias) {
6493 ConvolutionOperatorTester()
6494 .depthwise_layout(true)
6495 .has_bias(false)
6496 .input_size(15, 14)
6497 .padding(1, 1)
6498 .kernel_size(2, 2)
6499 .groups(24)
6500 .iterations(3)
6501 .TestNHWCxF16();
6502}
6503
6504TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 3x3) {
6505 ConvolutionOperatorTester()
6506 .depthwise_layout(true)
6507 .input_size(15, 14)
6508 .padding(1, 1)
6509 .kernel_size(3, 3)
6510 .groups(24)
6511 .iterations(3)
6512 .TestNHWCxF16();
6513}
6514
Marat Dukhan6989ec42022-01-14 17:14:35 -08006515TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 3x3_weight_fp32_weights) {
6516 ConvolutionOperatorTester()
6517 .weights_type(ConvolutionOperatorTester::WeightsType::FP32)
6518 .depthwise_layout(true)
6519 .input_size(15, 14)
6520 .padding(1, 1)
6521 .kernel_size(3, 3)
6522 .groups(24)
6523 .iterations(3)
6524 .TestNHWCxF16();
6525}
6526
Frank Barchard49b4dcc2020-06-26 14:07:19 -07006527TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 3x3_with_depth_multiplier) {
6528 ConvolutionOperatorTester()
6529 .depthwise_layout(true)
6530 .input_size(15, 14)
6531 .padding(1, 1)
6532 .kernel_size(3, 3)
6533 .groups(24)
6534 .group_output_channels(3)
6535 .iterations(3)
6536 .TestNHWCxF16();
6537}
6538
Marat Dukhan6989ec42022-01-14 17:14:35 -08006539TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 3x3_with_depth_multiplier_with_fp32_weights) {
6540 ConvolutionOperatorTester()
6541 .weights_type(ConvolutionOperatorTester::WeightsType::FP32)
6542 .depthwise_layout(true)
6543 .input_size(15, 14)
6544 .padding(1, 1)
6545 .kernel_size(3, 3)
6546 .groups(24)
6547 .group_output_channels(3)
6548 .iterations(3)
6549 .TestNHWCxF16();
6550}
6551
Frank Barchard49b4dcc2020-06-26 14:07:19 -07006552TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 3x3_without_bias) {
6553 ConvolutionOperatorTester()
6554 .depthwise_layout(true)
6555 .has_bias(false)
6556 .input_size(15, 14)
6557 .padding(1, 1)
6558 .kernel_size(3, 3)
6559 .groups(24)
6560 .iterations(3)
6561 .TestNHWCxF16();
6562}
6563
6564TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 3x3s2_with_tf_same_padding) {
6565 for (size_t input_height = 14; input_height <= 15; input_height++) {
6566 for (size_t input_width = 14; input_width <= 15; input_width++) {
6567 ConvolutionOperatorTester()
6568 .depthwise_layout(true)
6569 .input_size(input_height, input_width)
6570 .padding_tf_same(true)
6571 .kernel_size(3, 3)
6572 .groups(24)
6573 .iterations(3)
6574 .TestNHWCxF16();
6575 }
6576 }
6577}
6578
6579TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 5x5) {
6580 ConvolutionOperatorTester()
6581 .depthwise_layout(true)
6582 .input_size(15, 14)
6583 .padding(2, 2)
6584 .kernel_size(5, 5)
6585 .groups(24)
6586 .iterations(3)
6587 .TestNHWCxF16();
6588}
6589
6590TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 5x5_with_depth_multiplier) {
6591 ConvolutionOperatorTester()
6592 .depthwise_layout(true)
6593 .input_size(15, 14)
6594 .padding(2, 2)
6595 .kernel_size(5, 5)
6596 .groups(24)
6597 .group_output_channels(3)
6598 .iterations(3)
6599 .TestNHWCxF16();
6600}
6601
6602TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 5x5_without_bias) {
6603 ConvolutionOperatorTester()
6604 .depthwise_layout(true)
6605 .has_bias(false)
6606 .input_size(15, 14)
6607 .padding(2, 2)
6608 .kernel_size(5, 5)
6609 .groups(24)
6610 .iterations(3)
6611 .TestNHWCxF16();
6612}
6613
6614TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 7x7) {
6615 ConvolutionOperatorTester()
6616 .depthwise_layout(true)
6617 .input_size(15, 14)
6618 .padding(3, 3)
6619 .kernel_size(7, 7)
6620 .groups(24)
6621 .iterations(3)
6622 .TestNHWCxF16();
6623}
6624
6625TEST(DEPTHWISE_CONVOLUTION_NHWC_F16, 7x7_without_bias) {
6626 ConvolutionOperatorTester()
6627 .depthwise_layout(true)
6628 .has_bias(false)
6629 .input_size(15, 14)
6630 .padding(3, 3)
6631 .kernel_size(7, 7)
6632 .groups(24)
6633 .iterations(3)
6634 .TestNHWCxF16();
6635}
6636
6637TEST(CONVOLUTION_NHWC_F16, setup_changing_input_buffer) {
6638 ConvolutionOperatorTester()
6639 .batch_size(3)
6640 .input_height(8)
6641 .input_width(8)
6642 .kernel_height(5)
6643 .kernel_width(3)
6644 .group_input_channels(15)
6645 .group_output_channels(17)
6646 .TestSetupNHWCxF16();
6647}
6648
6649TEST(CONVOLUTION_NHWC_F16, setup_changing_input_buffer_grouped) {
6650 ConvolutionOperatorTester()
6651 .batch_size(3)
6652 .input_height(8)
6653 .input_width(8)
6654 .kernel_height(5)
6655 .kernel_width(3)
6656 .groups(2)
6657 .group_input_channels(15)
6658 .group_output_channels(17)
6659 .TestSetupNHWCxF16();
6660}
6661
6662TEST(CONVOLUTION_NHWC_F16, setup_changing_input_buffer_depthwise) {
6663 ConvolutionOperatorTester()
6664 .batch_size(3)
6665 .input_height(8)
6666 .input_width(8)
6667 .kernel_height(3)
6668 .kernel_width(3)
6669 .groups(19)
6670 .group_input_channels(1)
6671 .group_output_channels(1)
6672 .TestSetupNHWCxF16();
6673}
6674
6675TEST(CONVOLUTION_NHWC_F16, setup_increasing_batch) {
6676 ConvolutionOperatorTester()
6677 .batch_size(3)
6678 .next_batch_size(5)
6679 .input_height(8)
6680 .input_width(8)
6681 .kernel_height(5)
6682 .kernel_width(3)
6683 .group_input_channels(15)
6684 .group_output_channels(17)
6685 .TestSetupNHWCxF16();
6686}
6687
6688TEST(CONVOLUTION_NHWC_F16, setup_increasing_batch_grouped) {
6689 ConvolutionOperatorTester()
6690 .batch_size(3)
6691 .next_batch_size(5)
6692 .input_height(8)
6693 .input_width(8)
6694 .kernel_height(5)
6695 .kernel_width(3)
6696 .groups(2)
6697 .group_input_channels(15)
6698 .group_output_channels(17)
6699 .TestSetupNHWCxF16();
6700}
6701
6702TEST(CONVOLUTION_NHWC_F16, setup_increasing_batch_depthwise) {
6703 ConvolutionOperatorTester()
6704 .batch_size(3)
6705 .next_batch_size(5)
6706 .input_height(8)
6707 .input_width(8)
6708 .kernel_height(3)
6709 .kernel_width(3)
6710 .groups(19)
6711 .group_input_channels(1)
6712 .group_output_channels(1)
6713 .TestSetupNHWCxF16();
6714}
6715
6716TEST(CONVOLUTION_NHWC_F16, setup_decreasing_batch) {
6717 ConvolutionOperatorTester()
6718 .batch_size(5)
6719 .next_batch_size(3)
6720 .input_height(8)
6721 .input_width(8)
6722 .kernel_height(5)
6723 .kernel_width(3)
6724 .group_input_channels(15)
6725 .group_output_channels(17)
6726 .TestSetupNHWCxF16();
6727}
6728
6729TEST(CONVOLUTION_NHWC_F16, setup_decreasing_batch_grouped) {
6730 ConvolutionOperatorTester()
6731 .batch_size(5)
6732 .next_batch_size(3)
6733 .input_height(8)
6734 .input_width(8)
6735 .kernel_height(5)
6736 .kernel_width(3)
6737 .groups(2)
6738 .group_input_channels(15)
6739 .group_output_channels(17)
6740 .TestSetupNHWCxF16();
6741}
6742
6743TEST(CONVOLUTION_NHWC_F16, setup_decreasing_batch_depthwise) {
6744 ConvolutionOperatorTester()
6745 .batch_size(5)
6746 .next_batch_size(3)
6747 .input_height(8)
6748 .input_width(8)
6749 .kernel_height(3)
6750 .kernel_width(3)
6751 .groups(19)
6752 .group_input_channels(1)
6753 .group_output_channels(1)
6754 .TestSetupNHWCxF16();
6755}
6756
6757TEST(CONVOLUTION_NHWC_F16, setup_changing_height) {
6758 ConvolutionOperatorTester()
6759 .batch_size(3)
6760 .input_height(8)
6761 .input_width(8)
6762 .next_input_height(9)
6763 .kernel_height(5)
6764 .kernel_width(3)
6765 .group_input_channels(15)
6766 .group_output_channels(17)
6767 .TestSetupNHWCxF16();
6768 ConvolutionOperatorTester()
6769 .batch_size(3)
6770 .input_height(8)
6771 .input_width(8)
6772 .next_input_height(7)
6773 .kernel_height(5)
6774 .kernel_width(3)
6775 .group_input_channels(15)
6776 .group_output_channels(17)
6777 .TestSetupNHWCxF16();
6778}
6779
6780TEST(CONVOLUTION_NHWC_F16, setup_changing_height_grouped) {
6781 ConvolutionOperatorTester()
6782 .batch_size(3)
6783 .input_height(8)
6784 .input_width(8)
6785 .next_input_height(9)
6786 .kernel_height(5)
6787 .kernel_width(3)
6788 .groups(2)
6789 .group_input_channels(15)
6790 .group_output_channels(17)
6791 .TestSetupNHWCxF16();
6792 ConvolutionOperatorTester()
6793 .batch_size(3)
6794 .input_height(8)
6795 .input_width(8)
6796 .next_input_height(7)
6797 .kernel_height(5)
6798 .kernel_width(3)
6799 .groups(2)
6800 .group_input_channels(15)
6801 .group_output_channels(17)
6802 .TestSetupNHWCxF16();
6803}
6804
6805TEST(CONVOLUTION_NHWC_F16, setup_changing_height_depthwise) {
6806 ConvolutionOperatorTester()
6807 .batch_size(3)
6808 .input_height(8)
6809 .input_width(8)
6810 .next_input_height(9)
6811 .kernel_height(3)
6812 .kernel_width(3)
6813 .groups(19)
6814 .group_input_channels(1)
6815 .group_output_channels(1)
6816 .TestSetupNHWCxF16();
6817 ConvolutionOperatorTester()
6818 .batch_size(3)
6819 .input_height(8)
6820 .input_width(8)
6821 .next_input_height(7)
6822 .kernel_height(3)
6823 .kernel_width(3)
6824 .groups(19)
6825 .group_input_channels(1)
6826 .group_output_channels(1)
6827 .TestSetupNHWCxF16();
6828}
6829
6830TEST(CONVOLUTION_NHWC_F16, setup_changing_width) {
6831 ConvolutionOperatorTester()
6832 .batch_size(3)
6833 .input_height(8)
6834 .input_width(8)
6835 .next_input_width(9)
6836 .kernel_height(5)
6837 .kernel_width(3)
6838 .group_input_channels(15)
6839 .group_output_channels(17)
6840 .TestSetupNHWCxF16();
6841 ConvolutionOperatorTester()
6842 .batch_size(3)
6843 .input_height(8)
6844 .input_width(8)
6845 .next_input_width(7)
6846 .kernel_height(5)
6847 .kernel_width(3)
6848 .group_input_channels(15)
6849 .group_output_channels(17)
6850 .TestSetupNHWCxF16();
6851}
6852
6853TEST(CONVOLUTION_NHWC_F16, setup_changing_width_grouped) {
6854 ConvolutionOperatorTester()
6855 .batch_size(3)
6856 .input_height(8)
6857 .input_width(8)
6858 .next_input_width(9)
6859 .kernel_height(5)
6860 .kernel_width(3)
6861 .groups(2)
6862 .group_input_channels(15)
6863 .group_output_channels(17)
6864 .TestSetupNHWCxF16();
6865 ConvolutionOperatorTester()
6866 .batch_size(3)
6867 .input_height(8)
6868 .input_width(8)
6869 .next_input_width(7)
6870 .kernel_height(5)
6871 .kernel_width(3)
6872 .groups(2)
6873 .group_input_channels(15)
6874 .group_output_channels(17)
6875 .TestSetupNHWCxF16();
6876}
6877
6878TEST(CONVOLUTION_NHWC_F16, setup_changing_width_depthwise) {
6879 ConvolutionOperatorTester()
6880 .batch_size(3)
6881 .input_height(8)
6882 .input_width(8)
6883 .next_input_width(9)
6884 .kernel_height(3)
6885 .kernel_width(3)
6886 .groups(19)
6887 .group_input_channels(1)
6888 .group_output_channels(1)
6889 .TestSetupNHWCxF16();
6890 ConvolutionOperatorTester()
6891 .batch_size(3)
6892 .input_height(8)
6893 .input_width(8)
6894 .next_input_width(7)
6895 .kernel_height(3)
6896 .kernel_width(3)
6897 .groups(19)
6898 .group_input_channels(1)
6899 .group_output_channels(1)
6900 .TestSetupNHWCxF16();
6901}
6902
6903TEST(CONVOLUTION_NHWC_F16, setup_swap_height_and_width) {
6904 ConvolutionOperatorTester()
6905 .batch_size(3)
6906 .input_height(9)
6907 .input_width(8)
6908 .next_input_height(8)
6909 .next_input_width(9)
6910 .kernel_height(5)
6911 .kernel_width(3)
6912 .group_input_channels(15)
6913 .group_output_channels(17)
6914 .TestSetupNHWCxF16();
6915}
6916
6917TEST(CONVOLUTION_NHWC_F16, setup_swap_height_and_width_grouped) {
6918 ConvolutionOperatorTester()
6919 .batch_size(3)
6920 .input_height(9)
6921 .input_width(8)
6922 .next_input_height(8)
6923 .next_input_width(9)
6924 .kernel_height(5)
6925 .kernel_width(3)
6926 .groups(2)
6927 .group_input_channels(15)
6928 .group_output_channels(17)
6929 .TestSetupNHWCxF16();
6930}
6931
6932TEST(CONVOLUTION_NHWC_F16, setup_swap_height_and_width_depthwise) {
6933 ConvolutionOperatorTester()
6934 .batch_size(3)
6935 .input_height(9)
6936 .input_width(8)
6937 .next_input_height(8)
6938 .next_input_width(9)
6939 .kernel_height(3)
6940 .kernel_width(3)
6941 .groups(19)
6942 .group_input_channels(1)
6943 .group_output_channels(1)
6944 .TestSetupNHWCxF16();
6945}