.tflite — это бинарный формат файла модели TensorFlow Lite, основанный на технологии FlatBuffers от Google. Формат оптимизирован для эффективного выполнения инференса на мобильных, встраиваемых и edge-устройствах с ограниченными ресурсами. В отличие от других форматов сериализации, FlatBuffers обеспечивает прямой доступ к данным без этапа парсинга и копирования, что критически важно для быстрого запуска модели. По данным TensorFlow Lite Converter Guide, 2025, файл .tflite содержит граф вычислений, квантованные или полноточные веса и метаданные для интерпретатора. .tflite является стандартным форматом для on-device ML в экосистеме Google.
Главное
.tflite — это сериализованное представление модели машинного обучения, оптимизированное для инференса на устройствах с ограниченной памятью и вычислительной мощностью. В отличие от формата SavedModel, который хранит граф в protobuf и требует значительных ресурсов для загрузки, .tflite использует FlatBuffers — библиотеку сериализации с доступом к данным без копирования.
Формат .tflite разработан с учётом особенностей мобильных платформ: минимальное потребление памяти при загрузке, быстрый старт, поддержка квантованных весов. Файл .tflite не поддерживает обучение — только инференс. Это принципиальное отличие от форматов полного TensorFlow, что позволяет значительно уменьшить размер рантайма.
По данным Google Research, 2024, модели в формате .tflite с квантованием INT8 загружаются на 60% быстрее, чем аналогичные модели в FP32 формате, и потребляют на 40% меньше оперативной памяти во время инференса.
Файл .tflite состоит из нескольких секций, организованных по схеме FlatBuffers. Основная секция — Model, которая содержит граф вычислений (SubGraph), список операторов (OperatorCodes) и буферы с весами. Каждый SubGraph содержит тензоры, операторы, входные и выходные индексы.
Секция OperatorCodes содержит идентификаторы всех операторов, используемых в модели — Conv2D, DepthwiseConv2D, FullyConnected, Softmax и другие. Каждый оператор имеет код из предопределённого списка BuiltinOperator. Если модель содержит операции, отсутствующие в списке, они помечаются как Custom и требуют реализации через делегат или пользовательский оператор.
Секция Buffers содержит бинарные данные весов модели. В зависимости от режима квантования веса могут храниться в FP32, FP16, INT8 или в квантованном формате с параметрами масштабирования. Буферы отображаются в память напрямую через механизм mmap, что исключает дополнительное копирование.
| Секция | Назначение |
|---|---|
| Model | Корневая структура, версия, описание |
| SubGraph | Граф вычислений: тензоры, операторы, входы/выходы |
| OperatorCodes | Список используемых операторов |
| Buffers | Бинарные данные весов модели |
| Metadata | Метаданные: версия, автор, описание |
| SignatureDef | Именованные входы и выходы для API |
.tflite поддерживает три режима квантования. Полное целочисленное квантование INT8 — веса и активации представляются 8-битными целыми числами. Для конвертации требуется репрезентативный набор данных для калибровки диапазонов активаций. Размер модели уменьшается в 4 раза.
Квантование FP16 — веса преобразуются в 16-битные числа с плавающей точкой. Этот режим не требует калибровки и даёт минимальную потерю точности. Активации остаются в FP32. Размер модели уменьшается в 2 раза. Рекомендуется для устройств с поддержкой FP16 на GPU и NPU.
Динамическое квантование — веса конвертируются в INT8, но активации вычисляются в FP32. Размер модели уменьшается в 4 раза, но точность сохраняется выше, чем при полном INT8. По данным Google ML Performance Benchmarks, этот режим оптимален для NLP-моделей и моделей с высокой чувствительностью к точности.
Для конвертации модели в .tflite используется TFLite Converter — компонент TensorFlow, доступный через Python API tf.lite.TFLiteConverter. Converter поддерживает три источника: SavedModel, Keras H5 и ConcreteFunction. Минимальный пример конвертации модели Keras:
import tensorflow as tf
# Load the trained Keras model from file
model = tf.keras.models.load_model("my_model.h5")
# Convert to .tflite with dynamic quantization
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
# Write the converted model to a .tflite file
with open("model.tflite", "wb") as f:
f.write(tflite_model)
Для конвертации с полным INT8 квантованием требуется калибровочный набор данных. Укажите representative_dataset для определения диапазонов активаций:
converter = tf.lite.TFLiteConverter.from_saved_model("saved_model")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = representative_dataset
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS_INT8
]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8
tflite_quant_model = converter.convert()
Google предоставляет набор инструментов для анализа и оптимизации .tflite моделей. TFLite Benchmark Tool измеряет время инференса на устройстве и выводит статистику по каждому оператору. TFLite Model Inspector визуализирует граф вычислений и показывает размеры тензоров.
Netron — кроссплатформенный визуализатор моделей, поддерживающий .tflite наравне с ONNX, Core ML и PyTorch. Netron отображает структуру графа, параметры каждого оператора и связи между тензорами. Полезен для отладки при конвертации.
TFLite Metadata API позволяет добавлять в .tflite файл метаданные: описание модели, формат входных данных, единицы измерения, информацию об авторе. Метаданные используются Task Library для автоматической настройки препроцессинга и постпроцессинга.
Пример загрузки .tflite модели на iOS с Swift API. TFLite Swift API предоставляет Interpreter для загрузки модели из бандла и выполнения инференса. Укажите делегат для аппаратного ускорения через Core ML Delegate:
import TensorFlowLite
guard let modelPath = Bundle.main.path(
forResource: "model", ofType: "tflite"
) else { return }
let interpreter = try Interpreter.init(modelPath: modelPath)
try interpreter.allocateTensors()
// Prepare input data for the model
let inputData = Data.init(count: 1 * 224 * 224 * 3)
try interpreter.copy(inputData, toInputAt: 0)
// Run model inference
try interpreter.invoke()
// Read output tensor data
let outputTensor = try interpreter.output(at: 0)
let results = outputTensor.data.withUnsafeBytes {
Array($0.bindMemory(to: Float32.self))
}
Часто задаваемые вопросы
Файл .tflite имеет бинарный формат FlatBuffers и не читается в текстовом редакторе. Для просмотра используйте Netron или TFLite Model Inspector, которые визуализируют структуру модели.
Используйте tf.lite.experimental.Analyzer.analyze(model_path) в Python или TFLite Benchmark Tool с флагом --print_model_details. Инструменты выводят полный список операторов с параметрами.
.tflite оптимизирован для инференса на мобильных устройствах и использует FlatBuffers. ONNX — универсальный формат для обмена моделями между фреймворками с сериализацией в protobuf. TFLite имеет встроенную поддержку квантования.
Нет, обратной конвертации не существует из-за потери информации при квантовании и оптимизации. Исходную модель TensorFlow следует сохранять отдельно для дальнейшего обучения или изменений.
Используйте TFLite Metadata Writer API на Python. API позволяет добавить описание, формат входов/выходов, единицы измерения и примеры данных для Task Library.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также