1 // SPDX-License-Identifier: Apache-2.0
3 * Copyright (C) 2021 Parichay Kapoor <pk.kapoor@samsung.com>
5 * @file unittest_layers_convolution.cpp
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
14 #include <gtest/gtest.h>
16 #include <conv2d_layer.h>
17 #include <layers_common_tests.h>
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);
23 INSTANTIATE_TEST_CASE_P(Convolution2D, LayerSemantics,
24 ::testing::Values(semantic_conv2d));
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);
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);
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);
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);
46 auto conv2d_sb_same_uneven_remain_1 = LayerGoldenTestParamType(
47 nntrainer::createLayer<nntrainer::Conv2DLayer>,
54 "1:3:4:4", "conv2d_sb_same_uneven_remain.nnlayergolden",
55 LayerGoldenTestParamOptions::DEFAULT);
57 auto conv2d_sb_same_uneven_remain_2 = LayerGoldenTestParamType(
58 nntrainer::createLayer<nntrainer::Conv2DLayer>,
65 "1:3:4:4", "conv2d_sb_same_uneven_remain.nnlayergolden",
66 LayerGoldenTestParamOptions::DEFAULT);
68 auto conv2d_mb_same_uneven_remain_1 = LayerGoldenTestParamType(
69 nntrainer::createLayer<nntrainer::Conv2DLayer>,
76 "3:3:4:4", "conv2d_mb_same_uneven_remain.nnlayergolden",
77 LayerGoldenTestParamOptions::DEFAULT);
79 auto conv2d_mb_same_uneven_remain_2 = LayerGoldenTestParamType(
80 nntrainer::createLayer<nntrainer::Conv2DLayer>,
87 "3:3:4:4", "conv2d_mb_same_uneven_remain.nnlayergolden",
88 LayerGoldenTestParamOptions::DEFAULT);
90 auto conv2d_sb_valid_drop_last =
91 LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
98 "1:3:7:7", "conv2d_sb_valid_drop_last.nnlayergolden",
99 LayerGoldenTestParamOptions::DEFAULT);
101 auto conv2d_mb_valid_drop_last =
102 LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
109 "3:3:7:7", "conv2d_mb_valid_drop_last.nnlayergolden",
110 LayerGoldenTestParamOptions::DEFAULT);
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);
117 auto conv2d_mb_no_overlap =
118 LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
124 "3:2:5:5", "conv2d_mb_no_overlap.nnlayergolden",
125 LayerGoldenTestParamOptions::DEFAULT);
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);
132 auto conv2d_mb_1x1_kernel =
133 LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
139 "3:2:5:5", "conv2d_mb_1x1_kernel.nnlayergolden",
140 LayerGoldenTestParamOptions::DEFAULT);
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));