[Test] Add conv2d golden tests
authorJihoon Lee <jhoon.it.lee@samsung.com>
Fri, 24 Sep 2021 08:00:39 +0000 (17:00 +0900)
committerJijoong Moon <jijoong.moon@samsung.com>
Wed, 6 Oct 2021 12:03:28 +0000 (21:03 +0900)
**Changes proposed in this PR:**
- Conv2d Golden tests
- remove _golden_ to the name of test cases, as it is attached in the
extension

**Self evaluation:**
1. Build test: [X]Passed [ ]Failed [ ]Skipped
2. Run test: [X]Passed [ ]Failed [ ]Skipped

Signed-off-by: Jihoon Lee <jhoon.it.lee@samsung.com>
packaging/unittest_layers_v2.tar.gz
test/input_gen/genLayerTests.py
test/unittest/layers/unittest_layers_batch_normalization.cpp
test/unittest/layers/unittest_layers_convolution2d.cpp
test/unittest/layers/unittest_layers_fully_connected.cpp

index 1bdd69b..462e8c9 100644 (file)
Binary files a/packaging/unittest_layers_v2.tar.gz and b/packaging/unittest_layers_v2.tar.gz differ
index f8a16dc..fe6e279 100644 (file)
@@ -45,16 +45,39 @@ def inspect_file(file_name):
 
 if __name__ == "__main__":
     fc = K.layers.Dense(5)
-    record_single(fc, (3, 1, 1, 10), "fc_golden_plain")
+    record_single(fc, (3, 1, 1, 10), "fc_plain")
     fc = K.layers.Dense(4)
-    record_single(fc, (1, 1, 1, 10), "fc_golden_single_batch")
+    record_single(fc, (1, 1, 1, 10), "fc_single_batch")
     bn = K.layers.BatchNormalization()
-    record_single(bn, (2, 4, 2, 3), "bn_golden_channels_training", {"training": True})
-    ## @todo add test for inference
-    record_single(bn, (2, 4, 2, 3), "bn_golden_channels_inference", {"training": False})
+    record_single(bn, (2, 4, 2, 3), "bn_channels_training", {"training": True})
+    record_single(bn, (2, 4, 2, 3), "bn_channels_inference", {"training": False})
     bn = K.layers.BatchNormalization()
-    record_single(bn, (2, 10), "bn_golden_width_training", {"training": True})
-    record_single(bn, (2, 10), "bn_golden_width_inference", {"training": False})
+    record_single(bn, (2, 10), "bn_width_training", {"training": True})
+    record_single(bn, (2, 10), "bn_width_inference", {"training": False})
 
-# inspect_file("bn_golden_width_training.nnlayergolden")
+    conv = K.layers.Conv2D(3, 2)
+    record_single(conv, (1, 1, 4, 4), "conv_sb_minimum")
+    record_single(conv, (3, 1, 4, 4), "conv_mb_minimum")
+
+    conv = K.layers.Conv2D(2, 3, padding="same")
+    record_single(conv, (1, 1, 4, 4), "conv_sb_same_remain")
+    record_single(conv, (3, 1, 4, 4), "conv_mb_same_remain")
+
+    conv = K.layers.Conv2D(2, 3, strides=2, padding="same")
+    record_single(conv, (1, 3, 4, 4), "conv_sb_same_uneven_remain")
+    record_single(conv, (3, 3, 4, 4), "conv_mb_same_uneven_remain")
+
+    conv = K.layers.Conv2D(2, 3, strides=2, padding="valid")
+    record_single(conv, (1, 3, 7, 7), "conv_sb_valid_drop_last")
+    record_single(conv, (3, 3, 7, 7), "conv_mb_valid_drop_last")
+
+    conv = K.layers.Conv2D(3, 2, strides=3)
+    record_single(conv, (1, 2, 5, 5), "conv_sb_no_overlap")
+    record_single(conv, (3, 2, 5, 5), "conv_mb_no_overlap")
+
+    conv = K.layers.Conv2D(3, 1, strides=2)
+    record_single(conv, (1, 2, 5, 5), "conv_sb_1x1_kernel")
+    record_single(conv, (3, 2, 5, 5), "conv_mb_1x1_kernel")
+
+inspect_file("conv_sb_no_overlap.nnlayergolden")
 
index 48557f0..7138b44 100644 (file)
@@ -29,21 +29,19 @@ auto bn_inference_option = LayerGoldenTestParamOptions::SKIP_CALC_GRAD |
 
 auto bn_basic_channels_training = LayerGoldenTestParamType(
   nntrainer::createLayer<nntrainer::BatchNormalizationLayer>, {}, "2:4:2:3",
-  "bn_golden_channels_training.nnlayergolden",
-  LayerGoldenTestParamOptions::DEFAULT);
+  "bn_channels_training.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
 
 auto bn_basic_channels_inference = LayerGoldenTestParamType(
   nntrainer::createLayer<nntrainer::BatchNormalizationLayer>, {}, "2:4:2:3",
-  "bn_golden_channels_inference.nnlayergolden", bn_inference_option);
+  "bn_channels_inference.nnlayergolden", bn_inference_option);
 
 auto bn_basic_width_training = LayerGoldenTestParamType(
   nntrainer::createLayer<nntrainer::BatchNormalizationLayer>, {}, "2:1:1:10",
-  "bn_golden_width_training.nnlayergolden",
-  LayerGoldenTestParamOptions::DEFAULT);
+  "bn_width_training.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
 
 auto bn_basic_width_inference = LayerGoldenTestParamType(
   nntrainer::createLayer<nntrainer::BatchNormalizationLayer>, {}, "2:1:1:10",
-  "bn_golden_width_inference.nnlayergolden", bn_inference_option);
+  "bn_width_inference.nnlayergolden", bn_inference_option);
 
 INSTANTIATE_TEST_CASE_P(BatchNormalization, LayerGoldenTest,
                         ::testing::Values(bn_basic_channels_training,
index 2df2276..e488069 100644 (file)
@@ -22,3 +22,129 @@ auto semantic_conv2d = LayerSemanticsParamType(
 
 INSTANTIATE_TEST_CASE_P(Convolution2D, LayerSemantics,
                         ::testing::Values(semantic_conv2d));
+
+auto conv_sb_minimum = LayerGoldenTestParamType(
+  nntrainer::createLayer<nntrainer::Conv2DLayer>,
+  {"filters=3", "kernel_size=2,2"}, "1:1:4:4", "conv_sb_minimum.nnlayergolden",
+  LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_minimum = LayerGoldenTestParamType(
+  nntrainer::createLayer<nntrainer::Conv2DLayer>,
+  {"filters=3", "kernel_size=2,2"}, "3:1:4:4", "conv_mb_minimum.nnlayergolden",
+  LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_same_remain = LayerGoldenTestParamType(
+  nntrainer::createLayer<nntrainer::Conv2DLayer>,
+  {"filters=2", "kernel_size=3,3", "padding=same"}, "1:1:4:4",
+  "conv_sb_same_remain.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_same_remain = LayerGoldenTestParamType(
+  nntrainer::createLayer<nntrainer::Conv2DLayer>,
+  {"filters=2", "kernel_size=3,3", "padding=same"}, "3:1:4:4",
+  "conv_mb_same_remain.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_same_uneven_remain_1 = LayerGoldenTestParamType(
+  nntrainer::createLayer<nntrainer::Conv2DLayer>,
+  {
+    "filters=2",
+    "kernel_size=3,3",
+    "stride=2,2",
+    "padding=same",
+  },
+  "1:3:4:4", "conv_sb_same_uneven_remain.nnlayergolden",
+  LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_same_uneven_remain_2 = LayerGoldenTestParamType(
+  nntrainer::createLayer<nntrainer::Conv2DLayer>,
+  {
+    "filters=2",
+    "kernel_size=3,3",
+    "stride=2,2",
+    "padding=0,1,0,1",
+  },
+  "1:3:4:4", "conv_sb_same_uneven_remain.nnlayergolden",
+  LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_same_uneven_remain_1 = LayerGoldenTestParamType(
+  nntrainer::createLayer<nntrainer::Conv2DLayer>,
+  {
+    "filters=2",
+    "kernel_size=3,3",
+    "stride=2,2",
+    "padding=same",
+  },
+  "3:3:4:4", "conv_mb_same_uneven_remain.nnlayergolden",
+  LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_same_uneven_remain_2 = LayerGoldenTestParamType(
+  nntrainer::createLayer<nntrainer::Conv2DLayer>,
+  {
+    "filters=2",
+    "kernel_size=3,3",
+    "stride=2,2",
+    "padding=0,1,0,1",
+  },
+  "3:3:4:4", "conv_mb_same_uneven_remain.nnlayergolden",
+  LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_valid_drop_last =
+  LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
+                           {
+                             "filters=2",
+                             "kernel_size=3,3",
+                             "stride=2,2",
+                             "padding=valid",
+                           },
+                           "1:3:7:7", "conv_sb_valid_drop_last.nnlayergolden",
+                           LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_valid_drop_last =
+  LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
+                           {
+                             "filters=2",
+                             "kernel_size=3,3",
+                             "stride=2,2",
+                             "padding=valid",
+                           },
+                           "3:3:7:7", "conv_mb_valid_drop_last.nnlayergolden",
+                           LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_no_overlap = LayerGoldenTestParamType(
+  nntrainer::createLayer<nntrainer::Conv2DLayer>,
+  {"filters=3", "kernel_size=2,2", "stride=3,3"}, "1:2:5:5",
+  "conv_sb_no_overlap.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_no_overlap =
+  LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
+                           {
+                             "filters=3",
+                             "kernel_size=2,2",
+                             "stride=3,3",
+                           },
+                           "3:2:5:5", "conv_mb_no_overlap.nnlayergolden",
+                           LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_sb_1x1_kernel = LayerGoldenTestParamType(
+  nntrainer::createLayer<nntrainer::Conv2DLayer>,
+  {"filters=3", "kernel_size=1,1", "stride=2,2"}, "1:2:5:5",
+  "conv_sb_1x1_kernel.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
+
+auto conv_mb_1x1_kernel =
+  LayerGoldenTestParamType(nntrainer::createLayer<nntrainer::Conv2DLayer>,
+                           {
+                             "filters=3",
+                             "kernel_size=1,1",
+                             "stride=2,2",
+                           },
+                           "3:2:5:5", "conv_mb_1x1_kernel.nnlayergolden",
+                           LayerGoldenTestParamOptions::DEFAULT);
+
+INSTANTIATE_TEST_CASE_P(
+  Convolution2D, LayerGoldenTest,
+  ::testing::Values(conv_sb_minimum, conv_mb_minimum, conv_sb_same_remain,
+                    conv_mb_same_remain, conv_sb_same_uneven_remain_1,
+                    conv_sb_same_uneven_remain_2, conv_mb_same_uneven_remain_1,
+                    conv_mb_same_uneven_remain_2, conv_sb_valid_drop_last,
+                    conv_mb_valid_drop_last, conv_sb_no_overlap,
+                    conv_mb_no_overlap, conv_sb_1x1_kernel,
+                    conv_mb_1x1_kernel));
index efc2361..aadd913 100644 (file)
@@ -26,11 +26,10 @@ INSTANTIATE_TEST_CASE_P(FullyConnected, LayerSemantics,
 
 auto fc_basic_plain = LayerGoldenTestParamType(
   nntrainer::createLayer<nntrainer::FullyConnectedLayer>, {"unit=5"},
-  "3:1:1:10", "fc_golden_plain.nnlayergolden",
-  LayerGoldenTestParamOptions::DEFAULT);
+  "3:1:1:10", "fc_plain.nnlayergolden", LayerGoldenTestParamOptions::DEFAULT);
 auto fc_basic_single_batch = LayerGoldenTestParamType(
   nntrainer::createLayer<nntrainer::FullyConnectedLayer>, {"unit=4"},
-  "1:1:1:10", "fc_golden_single_batch.nnlayergolden",
+  "1:1:1:10", "fc_single_batch.nnlayergolden",
   LayerGoldenTestParamOptions::DEFAULT);
 
 INSTANTIATE_TEST_CASE_P(FullyConnected, LayerGoldenTest,