Преобразование ONNX-модели в TensorFlow Lite

#python #tensorflow #onnx

#python #tensorflow #onnx

Вопрос:

У меня есть несколько моделей для зоопарка моделей ONNX. Я хотел бы использовать модели отсюда в приложении 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.

Если это имеет значение, то конкретная модель, с которой я начинаю, находится здесь.

Согласно ReadMe.md форма входных данных равна (1x3x416x416), а форма выходных данных равна (1x125x13x13).

Ответ №1:

Я получил свой ответ. Я смог использовать приведенный ниже код для завершения преобразования.

 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)