Konwertowanie modeli TensorFlow

Na tej stronie opisujemy, jak przekonwertować model TensorFlow na model LiteRT (zoptymalizowany format FlatBuffer oznaczony rozszerzeniem pliku .tflite) za pomocą konwertera LiteRT.

Proces konwersji

Diagram poniżej przedstawia ogólny proces konwersji modelu:

Przepływ pracy konwertera TFLite

Rysunek 1. Proces konwersji.

Model możesz przekonwertować, korzystając z jednej z tych opcji:

  1. Interfejs API Pythona (zalecany): umożliwia zintegrowanie konwersji z procesem programowania, zastosowanie optymalizacji, dodanie metadanych i wykonanie wielu innych zadań, które upraszczają proces konwersji.
  2. Wiersz poleceń: obsługuje tylko podstawową konwersję modelu.

Python API

Kod pomocniczy: aby dowiedzieć się więcej o interfejsie LiteRT Converter API, uruchom print(help(tf.lite.TFLiteConverter)).

Przekonwertuj model TensorFlow za pomocą narzędzia tf.lite.TFLiteConverter. Model TensorFlow jest przechowywany w formacie SavedModel i generowany za pomocą interfejsów API wysokiego poziomu tf.keras.* (model Keras) lub interfejsów API niskiego poziomu tf.* (z których generujesz konkretne funkcje). W związku z tym masz do wyboru 3 opcje (przykłady znajdziesz w kolejnych sekcjach):

Poniższy przykład pokazuje, jak przekonwertować SavedModel na model TensorFlow 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

Poniższy przykład pokazuje, jak przekonwertować model Keras na model TensorFlow 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)

Konwertowanie funkcji konkretnych

Poniższy przykład pokazuje, jak przekształcić konkretne funkcje 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ęsto stosowaną optymalizacją jest kwantyzacja po wytrenowaniu, która może dodatkowo zmniejszyć czas oczekiwania i rozmiar modelu przy minimalnej utracie dokładności.

  • Dodaj metadane, które ułatwiają tworzenie kodu towarzyszącego specyficznego dla platformy podczas wdrażania modeli na urządzeniach.

Błędy konwersji

Poniżej znajdziesz typowe błędy konwersji i sposoby ich rozwiązywania:

Narzędzie wiersza poleceń

Jeśli TensorFlow 2.x został zainstalowany za pomocą pip, użyj polecenia tflite_convert. Aby wyświetlić wszystkie dostępne flagi, użyj tego polecenia:

$ 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 masz pobrane źródło TensorFlow 2.x i chcesz uruchomić konwerter z tego źródła bez tworzenia i instalowania pakietu, możesz zastąpić w poleceniu znak „tflite_convert” znakiem „bazel run tensorflow/lite/python:tflite_convert --”.

Konwertowanie modelu SavedModel

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

Konwertowanie modelu Keras H5

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