Add spaceToBatchND gtests to test op for quant8 dataype (#3688)
authorShubham Gupta/SNAP /SRI-Bangalore/Engineer/삼성전자 <shub98.gupta@samsung.com>
Mon, 26 Nov 2018 11:35:53 +0000 (17:05 +0530)
committer오형석/동작제어Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Mon, 26 Nov 2018 11:35:53 +0000 (20:35 +0900)
This patch adds gtest to test SpaceToBatchND op for quant8 dataype

Signed-off-by: shubham <shub98.gupta@samsung.com>
runtimes/tests/neural_networks_test/generated/all_generated_tests.cpp
runtimes/tests/neural_networks_test/generated/examples/space_to_batch_quant8_1_nnfw.example.cpp [new file with mode: 0644]
runtimes/tests/neural_networks_test/generated/examples/space_to_batch_quant8_2_nnfw.example.cpp [new file with mode: 0644]
runtimes/tests/neural_networks_test/generated/models/space_to_batch_quant8_1_nnfw.model.cpp [new file with mode: 0644]
runtimes/tests/neural_networks_test/generated/models/space_to_batch_quant8_2_nnfw.model.cpp [new file with mode: 0644]
runtimes/tests/neural_networks_test/runtime_run_android_nn_test.skip.armv7l-linux
runtimes/tests/neural_networks_test/specs/V1_1/space_to_batch_quant8_1_nnfw.mod.py [new file with mode: 0644]
runtimes/tests/neural_networks_test/specs/V1_1/space_to_batch_quant8_2_nnfw.mod.py [new file with mode: 0644]

index 374cd24..de3ff73 100644 (file)
@@ -2563,6 +2563,20 @@ TEST_F(GeneratedTests, space_to_batch_quant8_1) {
             space_to_batch_quant8_1::examples);
 }
 
+namespace space_to_batch_quant8_1_nnfw {
+std::vector<MixedTypedExample> examples = {
+// Generated space_to_batch_quant8_1_nnfw test
+#include "generated/examples/space_to_batch_quant8_1_nnfw.example.cpp"
+};
+// Generated model constructor
+#include "generated/models/space_to_batch_quant8_1_nnfw.model.cpp"
+} // namespace space_to_batch_quant8_1_nnfw
+TEST_F(GeneratedTests, space_to_batch_quant8_1_nnfw) {
+    execute(space_to_batch_quant8_1_nnfw::CreateModel,
+            space_to_batch_quant8_1_nnfw::is_ignored,
+            space_to_batch_quant8_1_nnfw::examples);
+}
+
 namespace space_to_batch_quant8_2 {
 std::vector<MixedTypedExample> examples = {
 // Generated space_to_batch_quant8_2 test
@@ -2577,6 +2591,20 @@ TEST_F(GeneratedTests, space_to_batch_quant8_2) {
             space_to_batch_quant8_2::examples);
 }
 
+namespace space_to_batch_quant8_2_nnfw {
+std::vector<MixedTypedExample> examples = {
+// Generated space_to_batch_quant8_2_nnfw test
+#include "generated/examples/space_to_batch_quant8_2_nnfw.example.cpp"
+};
+// Generated model constructor
+#include "generated/models/space_to_batch_quant8_2_nnfw.model.cpp"
+} // namespace space_to_batch_quant8_2_nnfw
+TEST_F(GeneratedTests, space_to_batch_quant8_2_nnfw) {
+    execute(space_to_batch_quant8_2_nnfw::CreateModel,
+            space_to_batch_quant8_2_nnfw::is_ignored,
+            space_to_batch_quant8_2_nnfw::examples);
+}
+
 namespace space_to_batch_quant8_3 {
 std::vector<MixedTypedExample> examples = {
 // Generated space_to_batch_quant8_3 test
diff --git a/runtimes/tests/neural_networks_test/generated/examples/space_to_batch_quant8_1_nnfw.example.cpp b/runtimes/tests/neural_networks_test/generated/examples/space_to_batch_quant8_1_nnfw.example.cpp
new file mode 100644 (file)
index 0000000..42ba044
--- /dev/null
@@ -0,0 +1,22 @@
+// Generated file (from: space_to_batch_quant8_1_nnfw.mod.py). Do not edit
+// Begin of an example
+{
+//Input(s)
+{ // See tools/test_generator/include/TestHarness.h:MixedTyped
+  // int -> FLOAT32 map
+  {},
+  // int -> INT32 map
+  {},
+  // int -> QUANT8_ASYMM map
+  {{0, {1, 2, 3, 4, 5, 6, 7, 8}}}
+},
+//Output(s)
+{ // See tools/test_generator/include/TestHarness.h:MixedTyped
+  // int -> FLOAT32 map
+  {},
+  // int -> INT32 map
+  {},
+  // int -> QUANT8_ASYMM map
+  {{0, {9, 9, 9, 9, 9, 5, 9, 9, 9, 9, 9, 9, 9, 6, 9, 9, 9, 1, 9, 9, 9, 7, 9, 9, 9, 2, 9, 9, 9, 8, 9, 9, 9, 3, 9, 9, 9, 9, 9, 9, 9, 4, 9, 9, 9, 9, 9, 9}}}
+}
+}, // End of an example
diff --git a/runtimes/tests/neural_networks_test/generated/examples/space_to_batch_quant8_2_nnfw.example.cpp b/runtimes/tests/neural_networks_test/generated/examples/space_to_batch_quant8_2_nnfw.example.cpp
new file mode 100644 (file)
index 0000000..0b21be1
--- /dev/null
@@ -0,0 +1,22 @@
+// Generated file (from: space_to_batch_quant8_2_nnfw.mod.py). Do not edit
+// Begin of an example
+{
+//Input(s)
+{ // See tools/test_generator/include/TestHarness.h:MixedTyped
+  // int -> FLOAT32 map
+  {},
+  // int -> INT32 map
+  {},
+  // int -> QUANT8_ASYMM map
+  {{0, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119}}}
+},
+//Output(s)
+{ // See tools/test_generator/include/TestHarness.h:MixedTyped
+  // int -> FLOAT32 map
+  {},
+  // int -> INT32 map
+  {},
+  // int -> QUANT8_ASYMM map
+  {{0, {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 20, 21, 22, 23, 24, 35, 36, 37, 38, 39, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 80, 81, 82, 83, 84, 95, 96, 97, 98, 99, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 25, 26, 27, 28, 29, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 85, 86, 87, 88, 89, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 30, 31, 32, 33, 34, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 90, 91, 92, 93, 94, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 0, 1, 2, 3, 4, 15, 16, 17, 18, 19, 200, 200, 200, 200, 200, 40, 41, 42, 43, 44, 55, 56, 57, 58, 59, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 60, 61, 62, 63, 64, 75, 76, 77, 78, 79, 200, 200, 200, 200, 200, 100, 101, 102, 103, 104, 115, 116, 117, 118, 119, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 5, 6, 7, 8, 9, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 45, 46, 47, 48, 49, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 65, 66, 67, 68, 69, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 105, 106, 107, 108, 109, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 10, 11, 12, 13, 14, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 50, 51, 52, 53, 54, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 70, 71, 72, 73, 74, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 110, 111, 112, 113, 114, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200}}}
+}
+}, // End of an example
diff --git a/runtimes/tests/neural_networks_test/generated/models/space_to_batch_quant8_1_nnfw.model.cpp b/runtimes/tests/neural_networks_test/generated/models/space_to_batch_quant8_1_nnfw.model.cpp
new file mode 100644 (file)
index 0000000..0020a03
--- /dev/null
@@ -0,0 +1,28 @@
+// Generated file (from: space_to_batch_quant8_1_nnfw.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::TENSOR_INT32, {2, 2});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 4, 2, 1}, 1.0, 9);
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {6, 2, 4, 1}, 1.0, 9);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto block_size = model->addOperand(&type1);
+  auto paddings = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t block_size_init[] = {3, 2};
+  model->setOperandValue(block_size, block_size_init, sizeof(int32_t) * 2);
+  static int32_t paddings_init[] = {1, 1, 2, 4};
+  model->setOperandValue(paddings, paddings_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_SPACE_TO_BATCH_ND, {input, block_size, paddings}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
diff --git a/runtimes/tests/neural_networks_test/generated/models/space_to_batch_quant8_2_nnfw.model.cpp b/runtimes/tests/neural_networks_test/generated/models/space_to_batch_quant8_2_nnfw.model.cpp
new file mode 100644 (file)
index 0000000..540e194
--- /dev/null
@@ -0,0 +1,28 @@
+// Generated file (from: space_to_batch_quant8_2_nnfw.mod.py). Do not edit
+void CreateModel(Model *model) {
+  OperandType type2(Type::TENSOR_INT32, {2, 2});
+  OperandType type1(Type::TENSOR_INT32, {2});
+  OperandType type3(Type::TENSOR_QUANT8_ASYMM, {12, 3, 3, 5}, 1, 200);
+  OperandType type0(Type::TENSOR_QUANT8_ASYMM, {2, 3, 4, 5}, 1, 200);
+  // Phase 1, operands
+  auto input = model->addOperand(&type0);
+  auto block_size = model->addOperand(&type1);
+  auto paddings = model->addOperand(&type2);
+  auto output = model->addOperand(&type3);
+  // Phase 2, operations
+  static int32_t block_size_init[] = {2, 3};
+  model->setOperandValue(block_size, block_size_init, sizeof(int32_t) * 2);
+  static int32_t paddings_init[] = {1, 2, 3, 2};
+  model->setOperandValue(paddings, paddings_init, sizeof(int32_t) * 4);
+  model->addOperation(ANEURALNETWORKS_SPACE_TO_BATCH_ND, {input, block_size, paddings}, {output});
+  // Phase 3, inputs and outputs
+  model->identifyInputsAndOutputs(
+    {input},
+    {output});
+  assert(model->isValid());
+}
+
+bool is_ignored(int i) {
+  static std::set<int> ignore = {};
+  return ignore.find(i) != ignore.end();
+}
index 629bc47..0861c63 100644 (file)
@@ -49,3 +49,5 @@ GeneratedTests.mul_broadcast_quant8
 GeneratedTests.mul_quant8
 GeneratedTests.pack*
 GeneratedTests.pad_quant*
+GeneratedTests.space_to_batch_quant8_1_nnfw
+GeneratedTests.space_to_batch_quant8_2_nnfw
diff --git a/runtimes/tests/neural_networks_test/specs/V1_1/space_to_batch_quant8_1_nnfw.mod.py b/runtimes/tests/neural_networks_test/specs/V1_1/space_to_batch_quant8_1_nnfw.mod.py
new file mode 100644 (file)
index 0000000..b720c7a
--- /dev/null
@@ -0,0 +1,19 @@
+model = Model()
+i1 = Input("input", "TENSOR_QUANT8_ASYMM", "{1, 4, 2, 1}, 1.0, 9")
+block = Parameter("block_size", "TENSOR_INT32", "{2}", [3, 2])
+paddings = Parameter("paddings", "TENSOR_INT32", "{2, 2}", [1, 1, 2, 4])
+output = Output("output", "TENSOR_QUANT8_ASYMM", "{6, 2, 4, 1}, 1.0, 9")
+
+model = model.Operation("SPACE_TO_BATCH_ND", i1, block, paddings).To(output)
+
+# Example 1. Input in operand 0,
+input0 = {i1: # input 0
+          [1, 2, 3, 4, 5, 6, 7, 8]}
+
+output0 = {output: # output 0
+           [9, 9, 9, 9, 9, 5, 9, 9, 9, 9, 9, 9, 9, 6, 9, 9,
+            9, 1, 9, 9, 9, 7, 9, 9, 9, 2, 9, 9, 9, 8, 9, 9,
+            9, 3, 9, 9, 9, 9, 9, 9, 9, 4, 9, 9, 9, 9, 9, 9]}
+
+# Instantiate an example
+Example((input0, output0))
diff --git a/runtimes/tests/neural_networks_test/specs/V1_1/space_to_batch_quant8_2_nnfw.mod.py b/runtimes/tests/neural_networks_test/specs/V1_1/space_to_batch_quant8_2_nnfw.mod.py
new file mode 100644 (file)
index 0000000..47b721a
--- /dev/null
@@ -0,0 +1,51 @@
+batch = 2
+rows = 3
+cols = 4
+depth = 5
+block_size_height = 2
+block_size_width = 3
+padding_size_height_top = 1
+padding_size_height_bottom = 2
+padding_size_width_left = 3
+padding_size_width_right = 2
+zero_value = 200
+scale = 1.0
+out_batch = batch * block_size_height * block_size_width
+out_rows = (int)((rows + padding_size_height_top + padding_size_height_bottom) / block_size_height)
+out_cols = (int)((cols + padding_size_width_left + padding_size_width_right) / block_size_width)
+
+input_table = [x for x in range(batch * rows * cols * depth)]
+
+output_table = [x for x in range(out_batch * out_rows * out_cols * depth)]
+for b in range(batch):
+  for h in range(rows + padding_size_height_top + padding_size_height_bottom):
+    for w in range(cols + padding_size_width_left + padding_size_width_right):
+      for d in range(depth):
+        out_d = d;
+        out_h = (int)(h / block_size_height);
+        out_w = (int)(w / block_size_width);
+        out_b = b + ((h % block_size_height) * block_size_width + w % block_size_width) * batch;
+
+        if (h < padding_size_height_top) or (h >= (rows + padding_size_height_top)) or (w < padding_size_width_left) or (w >= (cols + padding_size_width_left)):
+          output_table[out_b * out_rows * out_cols * depth + out_h * out_cols * depth + out_w * depth + out_d] = zero_value;
+        else:
+          output_table[out_b * out_rows * out_cols * depth + out_h * out_cols * depth + out_w * depth + out_d] = input_table[b * rows * cols * depth + (h - padding_size_height_top) * cols * depth + (w - padding_size_width_left) * depth + d];
+
+i1 = Input("input", "TENSOR_QUANT8_ASYMM", "{%d, %d, %d, %d}, %d, %d" % (batch, rows, cols, depth, scale, zero_value))
+block = Parameter("block_size", "TENSOR_INT32", "{2}", [block_size_height, block_size_width])
+paddings = Parameter("paddings", "TENSOR_INT32", "{2, 2}", [padding_size_height_top, padding_size_height_bottom, padding_size_width_left, padding_size_width_right])
+output = Output("output", "TENSOR_QUANT8_ASYMM", "{%d, %d, %d, %d}, %d, %d" % (out_batch, out_rows, out_cols, depth, scale, zero_value))
+
+model = Model()
+model = model.Operation("SPACE_TO_BATCH_ND", i1, block, paddings).To(output)
+
+
+# Example 1. Input in operand 0,
+input0 = {i1: # input 0
+          input_table}
+
+output0 = {output: # output 0
+          output_table}
+
+# Instantiate an example
+Example((input0, output0))