// NOTE This code is derived from the following file (in TensorFlow)
// 'externals/tensorflow/tensorflow/contrib/lite/nnapi_delegate.cc'
#include "NeuralNetworksShim.h"
+#include "NeuralNetworksExShim.h"
#include "support/tflite/nnapi_delegate.h"
#include "tensorflow/contrib/lite/builtin_op_data.h"
nn_op_type = ANEURALNETWORKS_LSTM;
break;
}
+ case tflite::BuiltinOperator_STRIDED_SLICE:
+ add_strided_slice_ex_params(node.builtin_data);
+ nn_op_type = ANEURALNETWORKS_STRIDED_SLICE_EX;
+ // FIXME: This call is ugly. please fix this
+ // Use ANN_addOperationEx for STRIDED_SLICE
+ CHECK_NN(ANeuralNetworksModel_addOperationEx(
+ nn_model, static_cast<ANeuralNetworksOperationTypeEx>(ANEURALNETWORKS_STRIDED_SLICE_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_CONCAT_EMBEDDINGS:
case tflite::BuiltinOperator_LSH_PROJECTION:
case tflite::BuiltinOperator_SVDF:
case tflite::BuiltinOperator_MEAN:
case tflite::BuiltinOperator_SPLIT:
case tflite::BuiltinOperator_SQUEEZE:
- case tflite::BuiltinOperator_STRIDED_SLICE:
case tflite::BuiltinOperator_EXP:
case tflite::BuiltinOperator_LOG_SOFTMAX:
case tflite::BuiltinOperator_DEQUANTIZE:
add_scalar_int32(height);
add_scalar_int32(width);
};
+
+ auto add_strided_slice_ex_params = [&add_scalar_int32](void* data) {
+ auto builtin = reinterpret_cast<TfLiteStridedSliceParams*>(data);
+ add_scalar_int32(builtin->begin_mask);
+ add_scalar_int32(builtin->end_mask);
+ // ellipsis_mask and new_axis_mask are not supported on nn runtime
+ // cf) tflite interpreter supports both operations
+ if (builtin->ellipsis_mask) {
+ FATAL("STRIDE_SLICE does not support ellipsis_mask in NNAPI");
+ }
+ if (builtin->new_axis_mask) {
+ FATAL("STRIDE_SLICE does not support new_axis_mask in NNAPI");
+ }
+ add_scalar_int32(builtin->shrink_axis_mask);
+ };