Add nnapi_delegation for PACK n UNPACK (#3787)
authorPrasanna R/SNAP /SRI-Bangalore/Engineer/삼성전자 <prasanna.r@samsung.com>
Tue, 4 Dec 2018 07:58:30 +0000 (13:28 +0530)
committer오형석/동작제어Lab(SR)/Staff Engineer/삼성전자 <hseok82.oh@samsung.com>
Tue, 4 Dec 2018 07:58:30 +0000 (16:58 +0900)
This patch adds nnapi_delegation for pack and unpack op.

Signed-off-by: prasannar <prasanna.r@samsung.com>
libs/support/tflite/src/nnapi_delegate.cpp
libs/support/tflite/src/nnapi_delegate_ex_AddOpsAndParams_lambda.inc

index 88ae31a..f706770 100644 (file)
@@ -760,6 +760,22 @@ TfLiteStatus AddOpsAndParams(
             reinterpret_cast<uint32_t*>(node.outputs->data)));
         continue;
 #ifndef OBS_BUILD
+ case tflite::BuiltinOperator_PACK:
+        add_pack_ex_params(node.builtin_data);
+        CHECK_NN(ANeuralNetworksModel_addOperationEx(
+            nn_model, ANEURALNETWORKS_PACK_EX,
+            static_cast<uint32_t>(augmented_inputs.size()),
+            augmented_inputs.data(), static_cast<uint32_t>(node.outputs->size),
+            reinterpret_cast<uint32_t*>(node.outputs->data)));
+        continue;
+      case tflite::BuiltinOperator_UNPACK:
+        add_unpack_ex_params(node.builtin_data);
+        CHECK_NN(ANeuralNetworksModel_addOperationEx(
+            nn_model, ANEURALNETWORKS_UNPACK_EX,
+            static_cast<uint32_t>(augmented_inputs.size()),
+            augmented_inputs.data(), static_cast<uint32_t>(node.outputs->size),
+            reinterpret_cast<uint32_t*>(node.outputs->data)));
+        continue;
     case tflite::BuiltinOperator_SQRT:
         CHECK_NN(ANeuralNetworksModel_addOperationEx(
             nn_model, ANEURALNETWORKS_SQRT_EX,
@@ -870,12 +886,12 @@ TfLiteStatus AddOpsAndParams(
       case tflite::BuiltinOperator_SHAPE:
       case tflite::BuiltinOperator_POW:
       case tflite::BuiltinOperator_FAKE_QUANT:
-      case tflite::BuiltinOperator_PACK:
+      //case tflite::BuiltinOperator_PACK:
       case tflite::BuiltinOperator_LOGICAL_OR:
       case tflite::BuiltinOperator_ONE_HOT:
       case tflite::BuiltinOperator_LOGICAL_AND:
       case tflite::BuiltinOperator_LOGICAL_NOT:
-      case tflite::BuiltinOperator_UNPACK:
+      //case tflite::BuiltinOperator_UNPACK:
       case tflite::BuiltinOperator_FLOOR_DIV:
       case tflite::BuiltinOperator_REDUCE_ANY:
       case tflite::BuiltinOperator_SQUARE:
index 5cba4ee..a91e4de 100644 (file)
       }
     };
 
+#ifndef OBS_BUILD
+    auto add_pack_ex_params = [&add_scalar_int32](void* data) {
+      auto builtin = reinterpret_cast<TfLitePackParams*>(data);
+      add_scalar_int32(builtin->values_count);
+      add_scalar_int32(builtin->axis);
+    };
+
+    auto add_unpack_ex_params = [&add_scalar_int32](void* data) {
+      auto builtin = reinterpret_cast<TfLiteUnpackParams*>(data);
+      add_scalar_int32(builtin->num);
+      add_scalar_int32(builtin->axis);
+    };
+#endif
+
     auto check_batch_to_space_params = [interpreter, &node, &augmented_inputs]() {
 
     //If there are 3 inputs, check if crops is having default values {0, 0, 0, 0}