.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% по-малко RAM по време на инференс.
Файлът .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
# Заредете обучения Keras модел от файл
model = tf.keras.models.load_model("my_model.h5")
# Конвертирайте в .tflite с динамично квантуване
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
# Запишете конвертирания модел в .tflite файл
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 за зареждане на модела от bundle и изпълнение на инференс. Посочете делегат за хардуерно ускорение чрез 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()
// Подгответе входните данни за модела
let inputData = Data.init(count: 1 * 224 * 224 * 3)
try interpreter.copy(inputData, toInputAt: 0)
// Изпълнете инференс на модела
try interpreter.invoke()
// Прочетете данните на изходния тензор
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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също