首页 > 解决方案 > 将 BATCH_TO_SPACE_ND 和 SPACE_TO_BATCH_ND 添加到 tensorflow lite

问题描述

NNAPI 1.1 已经支持 SPACE_TO_BATCH_ND 和 BATCH_TO_SPACE_ND 操作,但当前的 TFLite 代码尚未实现。见:https ://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/nnapi_delegate.cc#L607

我试图像这样添加它们:

case tflite::BuiltinOperator_SPACE_TO_BATCH_ND:
   nn_op_type = ANEURALNETWORKS_SPACE_TO_BATCH_ND;
   break;
case tflite::BuiltinOperator_BATCH_TO_SPACE_ND:
   nn_op_type = ANEURALNETWORKS_BATCH_TO_SPACE_ND;
   break;

但它不起作用,当我在 android 设备上运行它时出现错误消息:E/Utils: Invalid number of input operands (3, expected 2) or output operands (1, expected 1) for operation BATCH_TO_SPACE_ND

如何正确地将这些操作添加到 tensorflow lite?谢谢!

标签: androidc++tensorflownnapi

解决方案


找到了答案,要做到这一点,你必须花一些时间来了解他们的代码架构,然后尝试从 tftensor 到 NNAPI 进行“翻译”:

例如:ANEURALNETWORKS_BATCH_TO_SPACE_ND (NNAPI) 需要 2 个参数(输入张量,block_shape),而 TFLite 需要 3 个参数(输入张量,block_shape,crops),因此您需要处理它以绕过错误。


推荐阅读