.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
# Учитајте обучени 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође