语音命令android demo提供的tflite格式的模型如何转换?

时间:2019-06-20 09:24:40

标签: python tensorflow tensorflow-lite

我使用lite Converter将我的pb格式模型转换为tflite格式,并使用lite Interpreter运行此模型,但效果不佳,错误是:

Traceback (most recent call last):
  File "/home/yuan/anaconda3/envs/TFLite/lib/python3.7/threading.py", line 917, in _bootstrap_inner
    self.run()
  File "/home/yuan/tensorflow-master/tensorflow/examples/speech_commands/audio/audio_processor_lite.py", line 41, in run
    self._interpreter.allocate_tensors()
  File "/home/yuan/anaconda3/envs/TFLite/lib/python3.7/site-packages/tensorflow_core/lite/python/interpreter.py", line 198, in allocate_tensors
    return self._interpreter.AllocateTensors()
  File "/home/yuan/anaconda3/envs/TFLite/lib/python3.7/site-packages/tensorflow_core/lite/python/interpreter_wrapper/tensorflow_wrap_interpreter_wrapper.py", line 106, in AllocateTensors
    return _tensorflow_wrap_interpreter_wrapper.InterpreterWrapper_AllocateTensors(self)
RuntimeError: Regular TensorFlow ops are not supported by this interpreter. Make sure you invoke the Flex delegate before inference.Node number 0 (FlexAudioSpectrogram) failed to prepare.

该精简版似乎还不支持FlexAudioSpectrogram ops。但是,当我使用语音命令android demo提供的tflite模型时,效果很好。所以我想知道这个模型是如何转换的?

2 个答案:

答案 0 :(得分:0)

我找到了答案。 借助allow_custom_ops=True,您可以将模型转换为tflite,并且在android中像超级按钮一样工作。

我既查看了转换后的模型,也查看了netron的android示例附带的模型,它们的外观相同。因此,看来他或她是如何做到这一点的。

小更新:

在另一个使用张量流(Mozilla DeepSpeech)的语音项目中,我在tflite转换中发现了有关AudioSpectrogram和Mfcc ops的以下注释:

# AudioSpectrogram and Mfcc ops are custom but have built-in kernels in TFLite
converter.allow_custom_ops = True

答案 1 :(得分:0)

您可以使用allow_custom_ops允许tflite使用自定义操作,但是,tflite不支持某些图层,因此您应该为其提供自定义操作。您可以阅读文章来定义自定义操作here