Nesta página, descrevemos como converter um modelo do TensorFlow em um modelo do LiteRT (um
formato FlatBuffer otimizado identificado
pela extensão de arquivo .tflite) usando o conversor do LiteRT.
Fluxo de trabalho de conversão
O diagrama abaixo ilustra o fluxo de trabalho de alto nível para converter seu modelo:

Figura 1. Fluxo de trabalho do conversor.
É possível converter o modelo usando uma das seguintes opções:
- API Python (recomendado): permite integrar a conversão ao pipeline de desenvolvimento, aplicar otimizações, adicionar metadados e muitas outras tarefas que simplificam o processo de conversão.
- Linha de comando: só é compatível com a conversão de modelo básica.
API Python
Código auxiliar: para saber mais sobre a API do conversor LiteRT, execute
print(help(tf.lite.TFLiteConverter)).
Converta um modelo do TensorFlow usando
tf.lite.TFLiteConverter. Um modelo do TensorFlow é armazenado usando o formato SavedModel e é gerado usando as APIs tf.keras.* de alto nível (um modelo Keras) ou as APIs tf.* de baixo nível (de onde você gera funções concretas). Como resultado, você tem as
seguintes três opções (há exemplos nas próximas seções):
tf.lite.TFLiteConverter.from_saved_model()(recomendado): converte um SavedModel.tf.lite.TFLiteConverter.from_keras_model(): converte um modelo Keras.tf.lite.TFLiteConverter.from_concrete_functions(): converte funções concretas.
Converter um SavedModel (recomendado)
O exemplo a seguir mostra como converter um SavedModel em um modelo do 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)
Converter um modelo Keras
O exemplo a seguir mostra como converter um modelo Keras em um modelo do 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)
Converter funções concretas
O exemplo a seguir mostra como converter funções concretas em um modelo do 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)
Outros recursos
Aplique otimizações. Uma otimização comum usada é a quantização pós-treinamento, que pode reduzir ainda mais a latência e o tamanho do modelo com perda mínima de acurácia.
Adicione metadados para facilitar a criação de um código do wrapper específico da plataforma durante a implantação de modelos em dispositivos.
Erros de conversão
Confira erros de conversão comuns e as soluções para eles:
Erro:
Some ops are not supported by the native TFLite runtime, you can enable TF kernels fallback using TF Select.Solução: o erro ocorre porque o modelo tem operações do TF que não possuem uma implementação do TFLite correspondente. Resolva isso usando a operação do TF no modelo do TFLite (recomendado). Se você quiser gerar um modelo somente com operações do TFLite, adicione uma solicitação para a operação do TFLite em falta no problema nº 21526 no GitHub (deixe um comentário caso sua solicitação ainda não tenha sido mencionada) ou crie uma operação do TFLite por conta própria.
Erro:
.. is neither a custom op nor a flex opSolução: depende da compatibilidade da operação do TF:
- Compatível com o TF: o erro ocorre porque a operação do TF não está na lista de permissões (uma lista completa de operações do TF compatíveis com o TFLite). Resolva isso da seguinte forma:
- Adicione as operações ausentes à lista de permissões. 2. Converta o modelo do TF para um modelo do TFLite e execute a inferência.
- Incompatível com o TF: o erro ocorre porque o TFLite não sabe sobre o operador personalizado do TF definido por você. Resolva isso da seguinte forma:
- Crie a operação do TF.
- Converta o modelo do TF para um modelo do TFLite.
- Crie a operação do TFLite e execute a inferência vinculando-a ao ambiente de execução do TFLite.
Ferramenta de linha de comando
Se você instalou o TensorFlow 2.x usando o
pip, use o comando tflite_convert.
Para conferir todas as flags disponíveis, use o seguinte comando:
$ 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.
Se você tiver o código-fonte do TensorFlow 2.x baixado e quiser executar o conversor desse código-fonte sem criar e instalar o pacote, substitua "tflite_convert" por "bazel run
tensorflow/lite/python:tflite_convert --" no comando.
Converter um SavedModel
tflite_convert \
--saved_model_dir=/tmp/mobilenet_saved_model \
--output_file=/tmp/mobilenet.tflite
Converter um modelo Keras H5
tflite_convert \
--keras_model_file=/tmp/mobilenet_keras_model.h5 \
--output_file=/tmp/mobilenet.tflite