Cette page explique comment convertir un modèle TensorFlow
à un modèle LiteRT (une version optimisée
Le format FlatBuffer identifié par le
.tflite
) à l'aide du convertisseur LiteRT.
Workflow de conversion
Le diagramme ci-dessous illustre le processus général de conversion votre modèle:
Figure 1. Workflow de conversion.
Vous pouvez convertir votre modèle en utilisant l'une des options suivantes:
- API Python (recommandé): Cela vous permet d'intégrer la conversion à votre pipeline de développement, d'appliquer des optimisations, d'ajouter des métadonnées et bien d'autres tâches qui simplifient le processus de conversion.
- Ligne de commande: n'accepte que la conversion de modèles de base.
API Python
Code d'aide: pour en savoir plus sur le convertisseur LiteRT
API, exécutez print(help(tf.lite.TFLiteConverter))
.
Convertir un modèle TensorFlow à l'aide de
tf.lite.TFLiteConverter
Un modèle TensorFlow est stocké au format SavedModel et
générés à l'aide des API tf.keras.*
de haut niveau (un modèle Keras) ou
les API tf.*
de bas niveau (à partir desquelles vous générez des fonctions concrètes) ; En tant que
vous disposez des trois options suivantes (vous trouverez des exemples dans
):
tf.lite.TFLiteConverter.from_saved_model()
(recommandé): effectue des conversions un SavedModel.tf.lite.TFLiteConverter.from_keras_model()
: convertit un modèle Keras.tf.lite.TFLiteConverter.from_concrete_functions()
: effectue des conversions Fonctions concrètes.
Convertir un SavedModel (recommandé)
L'exemple suivant montre comment convertir un SavedModel dans un modèle TensorFlow Modèle 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)
Convertir un modèle Keras
L'exemple suivant montre comment convertir un Keras en un modèle TensorFlow Modèle 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)
Convertir des fonctions concrètes
L'exemple suivant montre comment convertir fonctions concrètes dans un modèle 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)
Autres fonctionnalités
appliquer des optimisations ; Une approche l'optimisation utilisée est quantification post-entraînement, ce qui peut réduire davantage la latence et la taille de votre modèle avec une perte minimale précision.
Ajouter des métadonnées pour faciliter la création de la plate-forme un code wrapper spécifique lors du déploiement de modèles sur des appareils.
Erreurs de conversion
Voici des erreurs de conversion courantes et leurs solutions:
Erreur :
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.
Solution: l'erreur se produit lorsque votre modèle comporte des opérations TF qui n'ont pas de l'implémentation TFLite correspondante. Vous pouvez résoudre ce problème en Utiliser l'opération TF dans le modèle TFLite (recommandé). Si vous souhaitez générer un modèle avec des opérations TFLite uniquement, vous pouvez ajouter un pour l'opération TFLite manquante dans Problème GitHub 21526 (laissez un commentaire si votre demande n'a pas encore été mentionnée) ou Créer l'opération TFLite vous-même.
Erreur :
.. is neither a custom op nor a flex op
Solution: si cette opération TF est:
Pris en charge dans TF: l'erreur se produit parce que l'opération TF est manquante dans allowlist : une liste exhaustive des opérations TF compatibles avec TFLite). Pour résoudre ce problème, procédez comme suit:
Non pris en charge dans TF: l'erreur est due au fait que TFLite n'a pas connaissance du un opérateur TF personnalisé que vous avez défini. Pour résoudre ce problème, procédez comme suit:
- Créez l'opération TF.
- Convertissez le modèle TF en modèle TFLite.
- Créer l'opération TFLite et exécuter l'inférence en l'associant à l'environnement d'exécution TFLite.
Outil de ligne de commande
Si vous avez
installé TensorFlow 2.x à partir de pip, utilisez
la commande tflite_convert
. Pour afficher tous les indicateurs disponibles, utilisez la
la commande suivante:
$ 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.
Si vous disposez des
Source TensorFlow 2.x
et que vous voulez exécuter le convertisseur
à partir de cette source sans compiler et
installer le package,
vous pouvez remplacer "tflite_convert
" avec
"bazel run tensorflow/lite/python:tflite_convert --
" dans la commande.
Convertir un SavedModel
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Convertir un modèle Keras H5
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite