Konwertowanie modeli TensorFlow

Na tej stronie dowiesz się, jak przekonwertować model TensorFlow na model LiteRT (zoptymalizowany FlatBuffer wykrywany przez .tflite) za pomocą konwertera LiteRT.

Proces konwersji

Poniższy diagram przedstawia ogólny proces konwersji Twój model:

Proces konwertera TFLite

Rysunek 1. Przepływ pracy związany z konwerterem.

Możesz przekonwertować model przy użyciu jednej z tych opcji:

  1. Python API (zalecany): Dzięki temu możesz zintegrować konwersję z procesem programowania, stosowanie optymalizacji, dodawanie metadanych i wiele innych zadań, które upraszczają działanie proces konwersji.
  2. Wiersz poleceń: obsługuje tylko podstawową konwersję modelu.
.

Interfejs API języka Python

Kod pomocniczy: więcej informacji o konwerterze LiteRT API, uruchom print(help(tf.lite.TFLiteConverter)).

Konwertowanie modelu TensorFlow za pomocą tf.lite.TFLiteConverter Model TensorFlow jest przechowywany w formacie SavedModel i jest: wygenerowanych za pomocą ogólnego interfejsu API tf.keras.* (modelu Keras) lub niskopoziomowych interfejsów API tf.* (za pomocą których generujesz konkretne funkcje). Jako wynik, są 3 poniższe opcje (przykłady podano w kolejnych ):

Z przykładu poniżej dowiesz się, jak przekonwertować SavedModel w TensorFlow Model Lite.

import tensorflow as tf

# Convert the model
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) # path to the SavedModel directory
tflite_model = converter.convert()

# Save the model.
with open('model.tflite', 'wb') as f:
  f.write(tflite_model)

Konwertowanie modelu Keras

Z przykładu poniżej dowiesz się, jak przekonwertować model Keras na TensorFlow Model Lite.

import tensorflow as tf

# Create a model using high-level tf.keras.* APIs
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(units=1, input_shape=[1]),
    tf.keras.layers.Dense(units=16, activation='relu'),
    tf.keras.layers.Dense(units=1)
])
model.compile(optimizer='sgd', loss='mean_squared_error') # compile the model
model.fit(x=[-1, 0, 1], y=[-3, -1, 1], epochs=5) # train the model
# (to generate a SavedModel) tf.saved_model.save(model, "saved_model_keras_dir")

# Convert the model.
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

# Save the model.
with open('model.tflite', 'wb') as f:
  f.write(tflite_model)

Przekonwertuj konkretne funkcje

Przykład poniżej pokazuje, jak konwertować konkretnych funkcji w Model LiteRT.

import tensorflow as tf

# Create a model using low-level tf.* APIs
class Squared(tf.Module):
  @tf.function(input_signature=[tf.TensorSpec(shape=[None], dtype=tf.float32)])
  def __call__(self, x):
    return tf.square(x)
model = Squared()
# (ro run your model) result = Squared(5.0) # This prints "25.0"
# (to generate a SavedModel) tf.saved_model.save(model, "saved_model_tf_dir")
concrete_func = model.__call__.get_concrete_function()

# Convert the model.

converter = tf.lite.TFLiteConverter.from_concrete_functions([concrete_func],
                                                            model)
tflite_model = converter.convert()

# Save the model.
with open('model.tflite', 'wb') as f:
  f.write(tflite_model)

Inne funkcje

  • Zastosuj optymalizacje. Częstym wprowadzona optymalizacja to kwantyzacji po trenowaniu, co może jeszcze bardziej zmniejszyć opóźnienie i rozmiar modelu przy minimalnych stratach dokładności.

  • dodawać metadane, które ułatwiają tworzenie platformy; określonego kodu opakowanego podczas wdrażania modeli na urządzeniach.

Błędy konwersji

Poniżej podajemy najczęstsze błędy konwersji i ich rozwiązania:

Narzędzie wiersza poleceń

Jeśli zainstalowano TensorFlow 2.x z pip, użyj polecenia tflite_convert. Aby wyświetlić wszystkie dostępne flagi, użyj to polecenie:

$ tflite_convert --help

`--output_file`. Type: string. Full path of the output file.
`--saved_model_dir`. Type: string. Full path to the SavedModel directory.
`--keras_model_file`. Type: string. Full path to the Keras H5 model file.
`--enable_v1_converter`. Type: bool. (default False) Enables the converter and flags used in TF 1.x instead of TF 2.x.

You are required to provide the `--output_file` flag and either the `--saved_model_dir` or `--keras_model_file` flag.

Jeśli posiadasz Źródło TensorFlow 2.x i chcesz uruchomić konwerter z tego źródła bez tworzenia instaluję pakiet, możesz zastąpić ciąg „tflite_convert” z „bazel run tensorflow/lite/python:tflite_convert --” w poleceniu.

Konwertowanie obiektu SavedModel

tflite_convert \
  --saved_model_dir=/tmp/mobilenet_saved_model \
  --output_file=/tmp/mobilenet.tflite

Konwersja modelu Keras H5

tflite_convert \
  --keras_model_file=/tmp/mobilenet_keras_model.h5 \
  --output_file=/tmp/mobilenet.tflite