Enable L2_POOL_2D operation (#1222)
authorPRAVEEN DORESWAMY NAIDU/SRI-Bangalore-System SW/./삼성전자 <praveen.dn@samsung.com>
Thu, 17 May 2018 00:01:35 +0000 (00:01 +0000)
committer서상민/동작제어Lab(SR)/Senior Engineer/삼성전자 <sangmin7.seo@samsung.com>
Thu, 17 May 2018 00:01:35 +0000 (09:01 +0900)
Enabling l2pool2d operation along with the tflite test file addition and enabling the test in config file

Signed-off-by: praveen D N <praveen.dn@samsung.com>
runtimes/nn/common/CpuExecutor.cpp
tests/framework/tests/l2pool2d/config.sh [new file with mode: 0644]

index 06a6669..eee6b4d 100644 (file)
@@ -694,72 +694,67 @@ int CpuExecutor::executeOperation(const Operation &operation)
       }
     }
     break;
-#if 0  // REF-ANN
-        case OperationType::L2_POOL_2D: {
-            const size_t inCount = ins.size();
-            if ((inCount != 10 && inCount != 7) ||
-                    !allParametersPresent(inCount, 1)) {
-                return ANEURALNETWORKS_BAD_DATA;
-            }
-            const RunTimeOperandInfo& input = mOperands[ins[0]];
+    case OperationType::L2_POOL_2D:
+    {
+      const size_t inCount = ins.size();
+      if ((inCount != 10 && inCount != 7) || !allParametersPresent(inCount, 1))
+      {
+        return ANEURALNETWORKS_BAD_DATA;
+      }
+      const RunTimeOperandInfo &input = mOperands[ins[0]];
 
-            int32_t padding_left, padding_right;
-            int32_t padding_top, padding_bottom;
-            int32_t stride_width, stride_height;
-            int32_t filter_width, filter_height;
-            int32_t activation;
-
-            if (inCount == 10) {
-                padding_left     = getScalarData<int32_t>(mOperands[ins[1]]);
-                padding_right    = getScalarData<int32_t>(mOperands[ins[2]]);
-                padding_top      = getScalarData<int32_t>(mOperands[ins[3]]);
-                padding_bottom   = getScalarData<int32_t>(mOperands[ins[4]]);
-                stride_width     = getScalarData<int32_t>(mOperands[ins[5]]);
-                stride_height    = getScalarData<int32_t>(mOperands[ins[6]]);
-                filter_width     = getScalarData<int32_t>(mOperands[ins[7]]);
-                filter_height    = getScalarData<int32_t>(mOperands[ins[8]]);
-                activation       = getScalarData<int32_t>(mOperands[ins[9]]);
-            } else {
-                int32_t padding_implicit = getScalarData<int32_t>(mOperands[ins[1]]);
-                stride_width     = getScalarData<int32_t>(mOperands[ins[2]]);
-                stride_height    = getScalarData<int32_t>(mOperands[ins[3]]);
-                filter_width     = getScalarData<int32_t>(mOperands[ins[4]]);
-                filter_height    = getScalarData<int32_t>(mOperands[ins[5]]);
-                activation       = getScalarData<int32_t>(mOperands[ins[6]]);
-
-                Shape inputShape = input.shape();
-                int32_t input_width  = getSizeOfDimension(inputShape, 2);
-                int32_t input_height = getSizeOfDimension(inputShape, 1);
-                calculateExplicitPadding(input_width, stride_width,
-                                         filter_width, padding_implicit,
-                                         &padding_left, &padding_right);
-                calculateExplicitPadding(input_height, stride_height,
-                                         filter_height, padding_implicit,
-                                         &padding_top, &padding_bottom);
-            }
+      int32_t padding_left, padding_right;
+      int32_t padding_top, padding_bottom;
+      int32_t stride_width, stride_height;
+      int32_t filter_width, filter_height;
+      int32_t activation;
 
-            RunTimeOperandInfo& output = mOperands[outs[0]];
-            Shape outShape = output.shape();
+      if (inCount == 10)
+      {
+        padding_left = getScalarData<int32_t>(mOperands[ins[1]]);
+        padding_right = getScalarData<int32_t>(mOperands[ins[2]]);
+        padding_top = getScalarData<int32_t>(mOperands[ins[3]]);
+        padding_bottom = getScalarData<int32_t>(mOperands[ins[4]]);
+        stride_width = getScalarData<int32_t>(mOperands[ins[5]]);
+        stride_height = getScalarData<int32_t>(mOperands[ins[6]]);
+        filter_width = getScalarData<int32_t>(mOperands[ins[7]]);
+        filter_height = getScalarData<int32_t>(mOperands[ins[8]]);
+        activation = getScalarData<int32_t>(mOperands[ins[9]]);
+      }
+      else
+      {
+        int32_t padding_implicit = getScalarData<int32_t>(mOperands[ins[1]]);
+        stride_width = getScalarData<int32_t>(mOperands[ins[2]]);
+        stride_height = getScalarData<int32_t>(mOperands[ins[3]]);
+        filter_width = getScalarData<int32_t>(mOperands[ins[4]]);
+        filter_height = getScalarData<int32_t>(mOperands[ins[5]]);
+        activation = getScalarData<int32_t>(mOperands[ins[6]]);
 
-            if (input.type == OperandType::TENSOR_FLOAT32) {
-                success = genericPoolingPrepare(input.shape(),
-                                                padding_left, padding_right,
-                                                padding_top, padding_bottom,
-                                                stride_width, stride_height,
-                                                filter_width, filter_height,
-                                                &outShape) &&
-                          setInfoAndAllocateIfNeeded(&output, outShape) &&
-                          l2PoolFloat32(reinterpret_cast<const float*>(input.buffer),
-                                        input.shape(),
-                                        padding_left, padding_right,
-                                        padding_top, padding_bottom,
-                                        stride_width, stride_height,
-                                        filter_width, filter_height, activation,
-                                        reinterpret_cast<float*>(output.buffer),
-                                        outShape);
-            }
-        } break;
-#endif // REF-ANN
+        Shape inputShape = input.shape();
+        int32_t input_width = getSizeOfDimension(inputShape, 2);
+        int32_t input_height = getSizeOfDimension(inputShape, 1);
+        calculateExplicitPadding(input_width, stride_width, filter_width, padding_implicit,
+                                 &padding_left, &padding_right);
+        calculateExplicitPadding(input_height, stride_height, filter_height, padding_implicit,
+                                 &padding_top, &padding_bottom);
+      }
+
+      RunTimeOperandInfo &output = mOperands[outs[0]];
+      Shape outShape = output.shape();
+
+      if (input.type == OperandType::TENSOR_FLOAT32)
+      {
+        success = genericPoolingPrepare(input.shape(), padding_left, padding_right, padding_top,
+                                        padding_bottom, stride_width, stride_height, filter_width,
+                                        filter_height, &outShape) &&
+                  setInfoAndAllocateIfNeeded(&output, outShape) &&
+                  l2PoolFloat32(reinterpret_cast<const float *>(input.buffer), input.shape(),
+                                padding_left, padding_right, padding_top, padding_bottom,
+                                stride_width, stride_height, filter_width, filter_height,
+                                activation, reinterpret_cast<float *>(output.buffer), outShape);
+      }
+    }
+    break;
     case OperationType::MAX_POOL_2D:
     {
       const size_t inCount = ins.size();
diff --git a/tests/framework/tests/l2pool2d/config.sh b/tests/framework/tests/l2pool2d/config.sh
new file mode 100644 (file)
index 0000000..814b86a
--- /dev/null
@@ -0,0 +1,3 @@
+MODELFILE_SERVER="http://npuarchive.mooo.com/archive/nnfw/nn_framework_test"
+MODELFILE_NAME="l2pool2d_test.tflite"
+MODELFILE_MD5SUM="2d92cebdea4ed7cb22b5cd363abf1329"