Cette page décrit comment convertir un modèle TensorFlow en modèle TensorFlow Lite (un format FlatBuffer optimisé identifié par l'extension de fichier .tflite
) à l'aide du convertisseur TensorFlow Lite.
Flux de travail de conversion
Le diagramme ci-dessous illustre le flux de travail de haut niveau pour convertir votre modèle :
Figure 1. Flux de travail du convertisseur.
Vous pouvez convertir votre modèle à l'aide de l'une des options suivantes :
- API Python ( recommandé ) : cela vous permet d'intégrer la conversion dans votre pipeline de développement, d'appliquer des optimisations, d'ajouter des métadonnées et de nombreuses autres tâches qui simplifient le processus de conversion.
- Ligne de commande : cela ne prend en charge que la conversion de modèle de base.
API Python
Code d'assistance : pour en savoir plus sur l'API du convertisseur TensorFlow Lite, exécutez print(help(tf.lite.TFLiteConverter))
.
Convertissez un modèle TensorFlow à l'aide de tf.lite.TFLiteConverter
. Un modèle TensorFlow est stocké au format SavedModel et est généré soit à l'aide des API tf.keras.*
de haut niveau (un modèle Keras), soit des API tf.*
de bas niveau (à partir desquelles vous générez des fonctions concrètes). En conséquence, vous disposez des trois options suivantes (des exemples se trouvent dans les sections suivantes) :
-
tf.lite.TFLiteConverter.from_saved_model()
( recommandé ) : convertit un SavedModel . -
tf.lite.TFLiteConverter.from_keras_model()
: Convertit un modèle Keras . -
tf.lite.TFLiteConverter.from_concrete_functions()
: Convertit des fonctions concrètes .
Convertir un SavedModel (recommandé)
L'exemple suivant montre comment convertir un SavedModel en modèle 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)
Convertir un modèle Keras
L'exemple suivant montre comment convertir un modèle Keras en modèle 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)
Convertir des fonctions concrètes
L'exemple suivant montre comment convertir des fonctions concrètes en un modèle TensorFlow Lite.
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 caractéristiques
Appliquer les optimisations . Une optimisation couramment utilisée est la quantification post-entraînement , qui peut réduire davantage la latence et la taille de votre modèle avec une perte de précision minimale.
Ajoutez des métadonnées , ce qui facilite la création de code wrapper spécifique à la plate-forme lors du déploiement de modèles sur des appareils.
Erreurs de conversion
Voici les 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. See instructions: <a href="https://www.tensorflow.org/lite/guide/ops_select">https://www.tensorflow.org/lite/guide/ops_select</a> TF Select ops: ..., .., ...
Solution : L'erreur se produit car votre modèle comporte des opérations TF qui n'ont pas d'implémentation TFLite correspondante. Vous pouvez résoudre ce problème en utilisant l'opération TF dans le modèle TFLite (recommandé). Si vous souhaitez générer un modèle avec les opérations TFLite uniquement, vous pouvez soit ajouter une demande pour l'opération TFLite manquante dans le numéro 21526 de Github (laisser un commentaire si votre demande n'a pas déjà été mentionnée), soit créer vous-même l'opération TFLite .
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 car l'opération TF est absente de la liste autorisée (une liste exhaustive des opérations TF prises en charge par TFLite). Vous pouvez résoudre ce problème comme suit :
Non pris en charge dans TF : l'erreur se produit car TFLite ne connaît pas l'opérateur TF personnalisé que vous avez défini. Vous pouvez résoudre ce problème comme suit :
- Créez l'opération TF .
- Convertissez le modèle TF en modèle TFLite .
- Créez l'opération TFLite et exécutez l'inférence en la liant au runtime 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 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 avez téléchargé la source TensorFlow 2.x et que vous souhaitez exécuter le convertisseur à partir de cette source sans créer ni installer le package, vous pouvez remplacer ' tflite_convert
' par ' bazel run tensorflow/lite/python:tflite_convert --
' dans la commande.
Conversion d'un modèle enregistré
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Conversion d'un modèle Keras H5
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite
Prochaines étapes
Utilisez l' interpréteur TensorFlow Lite pour exécuter l'inférence sur un appareil client (par exemple mobile, intégré).