将 ONNX 模型转换为 TensorFlow Lite

Converting ONNX model to TensorFlow Lite

我有一些 ONNX Model Zoo 的模型。我想在 TensorFlow Lite (Android) 应用程序中使用此处的模型,但我 运行 遇到了如何转换模型的问题。

据我了解,我需要遵循的过程是将 ONNX 模型转换为 TensorFlow 模型,然后将该 TensorFlow 模型转换为 TensorFlow Lite 模型。

import onnx
from onnx_tf.backend import prepare
import tensorflow as tf

onnx_model = onnx.load('./some-model.onnx') 
tf_rep = prepare(onnx_model)
tf_rep.export_graph("some-model.pb") 

以上执行后,我得到文件 some-model.pb,我认为它包含一个 TensorFlow 冻结图。从这里我不知道去哪里。当我搜索时,我发现了很多针对 TensorFlow 1.x 的答案(我只是在我发现的样本无法执行后才意识到这一点)。我正在尝试使用 TensorFlow 2.x.

如果重要的话,我开始使用的具体模型是 here

根据 ReadMe.md,输入的形状是 (1x3x416x416),输出的形状是 (1x125x13x13)。

我得到了答案。我能够使用下面的代码完成转换。

import tensorflow as tf
converter = tf.compat.v1.lite.TFLiteConverter.from_frozen_graph('model.pb', #TensorFlow freezegraph 
                                                  input_arrays=['input.1'], # name of input
                                                  output_arrays=['218']  # name of output
                                                  )
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS,
                                   tf.lite.OpsSet.SELECT_TF_OPS]      
# tell converter which type of optimization techniques to use
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tf_lite_model = converter.convert()
open('model.tflite', 'wb').write(tf_lite_model)