[layer/test] Add unittests for conv1d
[platform/core/ml/nntrainer.git] / test / unittest / layers / unittest_layers_convolution2d.cpp
1 // SPDX-License-Identifier: Apache-2.0
2 /**
3  * Copyright (C) 2021 Parichay Kapoor <pk.kapoor@samsung.com>
4  *
5  * @file unittest_layers_convolution.cpp
6  * @date 5 July 2021
7  * @brief Conv2d Layer Test
8  * @see https://github.com/nnstreamer/nntrainer
9  * @author Parichay Kapoor <pk.kapoor@samsung.com>
10  * @bug No known bugs except for NYI items
11  */
12 #include <tuple>
13
14 #include <gtest/gtest.h>
15
16 #include <conv2d_layer.h>
17 #include <layers_common_tests.h>
18
19 auto semantic_conv2d = LayerSemanticsParamType(
20   nntrainer::createLayer<nntrainer::Conv2DLayer>, nntrainer::Conv2DLayer::type,
21   {"filters=1", "kernel_size=1,1", "padding=1,1"}, 0, false, 1);
22
23 INSTANTIATE_TEST_CASE_P(Convolution2D, LayerSemantics,
24                         ::testing::Values(semantic_conv2d));
25
26 auto conv2d_sb_minimum = LayerGoldenTestParamType(
27   nntrainer::createLayer<nntrainer::Conv2DLayer>,
28   {"filters=3", "kernel_size=2,2"}, "1:1:4:4",
29   "conv2d_sb_minimum.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
30
31 auto conv2d_mb_minimum = LayerGoldenTestParamType(
32   nntrainer::createLayer<nntrainer::Conv2DLayer>,
33   {"filters=3", "kernel_size=2,2"}, "3:1:4:4",
34   "conv2d_mb_minimum.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
35
36 auto conv2d_sb_same_remain = LayerGoldenTestParamType(
37   nntrainer::createLayer<nntrainer::Conv2DLayer>,
38   {"filters=2", "kernel_size=3,3", "padding=same"}, "1:1:4:4",
39   "conv2d_sb_same_remain.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
40
41 auto conv2d_mb_same_remain = LayerGoldenTestParamType(
42   nntrainer::createLayer<nntrainer::Conv2DLayer>,
43   {"filters=2", "kernel_size=3,3", "padding=same"}, "3:1:4:4",
44   "conv2d_mb_same_remain.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
45
46 auto conv2d_sb_same_uneven_remain_1 = LayerGoldenTestParamType(
47   nntrainer::createLayer<nntrainer::Conv2DLayer>,
48   {
49     "filters=2",
50     "kernel_size=3,3",
51     "stride=2,2",
52     "padding=same",
53   },
54   "1:3:4:4", "conv2d_sb_same_uneven_remain.nnlayergolden",
55   LayerGoldenTestParamOptions::DEFAULT);
56
57 auto conv2d_sb_same_uneven_remain_2 = LayerGoldenTestParamType(
58   nntrainer::createLayer<nntrainer::Conv2DLayer>,
59   {
60     "filters=2",
61     "kernel_size=3,3",
62     "stride=2,2",
63     "padding=0,1,0,1",
64   },
65   "1:3:4:4", "conv2d_sb_same_uneven_remain.nnlayergolden",
66   LayerGoldenTestParamOptions::DEFAULT);
67
68 auto conv2d_mb_same_uneven_remain_1 = LayerGoldenTestParamType(
69   nntrainer::createLayer<nntrainer::Conv2DLayer>,
70   {
71     "filters=2",
72     "kernel_size=3,3",
73     "stride=2,2",
74     "padding=same",
75   },
76   "3:3:4:4", "conv2d_mb_same_uneven_remain.nnlayergolden",
77   LayerGoldenTestParamOptions::DEFAULT);
78
79 auto conv2d_mb_same_uneven_remain_2 = LayerGoldenTestParamType(
80   nntrainer::createLayer<nntrainer::Conv2DLayer>,
81   {
82     "filters=2",
83     "kernel_size=3,3",
84     "stride=2,2",
85     "padding=0,1,0,1",
86   },
87   "3:3:4:4", "conv2d_mb_same_uneven_remain.nnlayergolden",
88   LayerGoldenTestParamOptions::DEFAULT);
89
90 auto conv2d_sb_valid_drop_last =
91   LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
92                            {
93                              "filters=2",
94                              "kernel_size=3,3",
95                              "stride=2,2",
96                              "padding=valid",
97                            },
98                            "1:3:7:7", "conv2d_sb_valid_drop_last.nnlayergolden",
99                            LayerGoldenTestParamOptions::DEFAULT);
100
101 auto conv2d_mb_valid_drop_last =
102   LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
103                            {
104                              "filters=2",
105                              "kernel_size=3,3",
106                              "stride=2,2",
107                              "padding=valid",
108                            },
109                            "3:3:7:7", "conv2d_mb_valid_drop_last.nnlayergolden",
110                            LayerGoldenTestParamOptions::DEFAULT);
111
112 auto conv2d_sb_no_overlap = LayerGoldenTestParamType(
113   nntrainer::createLayer<nntrainer::Conv2DLayer>,
114   {"filters=3", "kernel_size=2,2", "stride=3,3"}, "1:2:5:5",
115   "conv2d_sb_no_overlap.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
116
117 auto conv2d_mb_no_overlap =
118   LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
119                            {
120                              "filters=3",
121                              "kernel_size=2,2",
122                              "stride=3,3",
123                            },
124                            "3:2:5:5", "conv2d_mb_no_overlap.nnlayergolden",
125                            LayerGoldenTestParamOptions::DEFAULT);
126
127 auto conv2d_sb_1x1_kernel = LayerGoldenTestParamType(
128   nntrainer::createLayer<nntrainer::Conv2DLayer>,
129   {"filters=3", "kernel_size=1,1", "stride=2,2"}, "1:2:5:5",
130   "conv2d_sb_1x1_kernel.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
131
132 auto conv2d_mb_1x1_kernel =
133   LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
134                            {
135                              "filters=3",
136                              "kernel_size=1,1",
137                              "stride=2,2",
138                            },
139                            "3:2:5:5", "conv2d_mb_1x1_kernel.nnlayergolden",
140                            LayerGoldenTestParamOptions::DEFAULT);
141
142 INSTANTIATE_TEST_CASE_P(
143   Convolution2D, LayerGoldenTest,
144   ::testing::Values(conv2d_sb_minimum, conv2d_mb_minimum, conv2d_sb_same_remain,
145                     conv2d_mb_same_remain, conv2d_sb_same_uneven_remain_1,
146                     conv2d_sb_same_uneven_remain_2,
147                     conv2d_mb_same_uneven_remain_1,
148                     conv2d_mb_same_uneven_remain_2, conv2d_sb_valid_drop_last,
149                     conv2d_mb_valid_drop_last, conv2d_sb_no_overlap,
150                     conv2d_mb_no_overlap, conv2d_sb_1x1_kernel,
151                     conv2d_mb_1x1_kernel));