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:

Rysunek 1. Proces konwersji.
Model możesz przekonwertować, korzystając z jednej z tych opcji:
- 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.
- 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):
tf.lite.TFLiteConverter.from_saved_model()(zalecane): konwertuje SavedModel.tf.lite.TFLiteConverter.from_keras_model(): konwertuje model Keras.tf.lite.TFLiteConverter.from_concrete_functions(): przekształca konkretne funkcje.
Konwertowanie modelu SavedModel (zalecane)
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:
Błąd:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.Rozwiązanie: błąd występuje, ponieważ model zawiera operacje TF, które nie mają odpowiedniej implementacji TFLite. Możesz to rozwiązać, używając operacji TF w modelu TFLite (zalecane). Jeśli chcesz wygenerować model zawierający tylko operacje TFLite, możesz dodać prośbę o brakującą operację TFLite w zgłoszeniu w GitHubie nr 21526 (zostaw komentarz, jeśli Twoja prośba nie została jeszcze wspomniana) lub samodzielnie utworzyć operację TFLite.
Błąd:
.. is neither a custom op nor a flex opRozwiązanie: jeśli ta operacja TF to:
- Obsługiwane w TF: błąd występuje, ponieważ operacja TF nie znajduje się na liście dozwolonych (wyczerpującej liście operacji TF obsługiwanych przez TFLite). Aby rozwiązać ten problem:
- Dodaj brakujące operacje do listy dozwolonych. 2. Przekonwertuj model TF na model TFLite i przeprowadź wnioskowanie.
- Nieobsługiwany w TF: błąd występuje, ponieważ TFLite nie rozpoznaje zdefiniowanego przez Ciebie niestandardowego operatora TF. Aby rozwiązać ten problem:
- Utwórz operację TF.
- Przekonwertuj model TF na model TFLite.
- Utwórz operację TFLite i przeprowadź wnioskowanie, łącząc ją ze środowiskiem wykonawczym TFLite.
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