.tflite je binární formát souboru modelu TensorFlow Lite, založený na technologii FlatBuffers od Google. Formát je optimalizován pro efektivní provádění inference na mobilních, vestavěných a edge zařízeních s omezenými zdroji. Na rozdíl od jiných serializačních formátů FlatBuffers poskytuje přímý přístup k datům bez fáze parsování a kopírování, což je kritické pro rychlé spuštění modelu. Podle TensorFlow Lite Converter Guide, 2025 soubor .tflite obsahuje výpočetní graf, kvantované nebo plnopřesné váhy a metadata pro interpret. .tflite je standardní formát pro on-device ML v ekosystému Google.
Hlavní body
.tflite je serializovaná reprezentace modelu strojového učení, optimalizovaná pro inferenci na zařízeních s omezenou pamětí a výpočetním výkonem. Na rozdíl od formátu SavedModel, který ukládá graf v protobuf a vyžaduje značné zdroje pro načtení, .tflite používá FlatBuffers — serializační knihovnu s přístupem k datům bez kopírování.
Formát .tflite byl navržen s ohledem na specifika mobilních platforem: minimální spotřeba paměti při načítání, rychlý start, podpora kvantovaných vah. Soubor .tflite nepodporuje trénování — pouze inferenci. To je zásadní rozdíl oproti formátům plného TensorFlow, což umožňuje výrazně zmenšit velikost běhového prostředí.
Podle Google Research, 2024 se modely ve formátu .tflite s kvantizací INT8 načítají o 60 % rychleji než analogické modely ve formátu FP32 a spotřebovávají o 40 % méně RAM během inference.
Soubor .tflite se skládá z několika sekcí, organizovaných podle schématu FlatBuffers. Hlavní sekce — Model, která obsahuje výpočetní graf (SubGraph), seznam operátorů (OperatorCodes) a buffery s vahami. Každý SubGraph obsahuje tenzory, operátory, vstupní a výstupní indexy.
Sekce OperatorCodes obsahuje identifikátory všech operátorů použitých v modelu — Conv2D, DepthwiseConv2D, FullyConnected, Softmax a další. Každý operátor má kód z předdefinovaného seznamu BuiltinOperator. Pokud model obsahuje operace, které nejsou v seznamu, jsou označeny jako Custom a vyžadují implementaci prostřednictvím delegáta nebo vlastního operátoru.
Sekce Buffers obsahuje binární data vah modelu. V závislosti na režimu kvantizace mohou být váhy uloženy ve FP32, FP16, INT8 nebo v kvantovaném formátu s parametry škálování. Buffery jsou mapovány přímo do paměti pomocí mechanismu mmap, což eliminuje dodatečné kopírování.
| Sekce | Účel |
|---|---|
| Model | Kořenová struktura, verze, popis |
| SubGraph | Výpočetní graf: tenzory, operátory, vstupy/výstupy |
| OperatorCodes | Seznam použitých operátorů |
| Buffers | Binární data vah modelu |
| Metadata | Metadata: verze, autor, popis |
| SignatureDef | Pojmenované vstupy a výstupy pro API |
.tflite podporuje tři režimy kvantizace. Plná celočíselná kvantizace INT8 — váhy a aktivace jsou reprezentovány jako 8bitová celá čísla. Pro konverzi je vyžadována reprezentativní sada dat pro kalibraci rozsahů aktivací. Velikost modelu se zmenší 4krát.
Kvantizace FP16 — váhy jsou převedeny na 16bitová čísla s plovoucí desetinnou čárkou. Tento režim nevyžaduje kalibraci a poskytuje minimální ztrátu přesnosti. Aktivace zůstávají ve FP32. Velikost modelu se zmenší 2krát. Doporučeno pro zařízení s podporou FP16 na GPU a NPU.
Dynamická kvantizace — váhy jsou konvertovány na INT8, ale aktivace jsou počítány ve FP32. Velikost modelu se zmenší 4krát, ale přesnost zůstává vyšší než u plné INT8. Podle Google ML Performance Benchmarks je tento režim optimální pro NLP modely a modely s vysokou citlivostí na přesnost.
Pro konverzi modelu do .tflite se používá TFLite Converter — komponenta TensorFlow dostupná přes Python API tf.lite.TFLiteConverter. Converter podporuje tři zdroje: SavedModel, Keras H5 a ConcreteFunction. Minimální příklad konverze modelu Keras:
import tensorflow as tf
# Načtěte natrénovaný model Keras ze souboru
model = tf.keras.models.load_model("my_model.h5")
# Převeďte na .tflite s dynamickou kvantizací
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
# Zapište převedený model do souboru .tflite
with open("model.tflite", "wb") as f:
f.write(tflite_model)
Pro konverzi s plnou kvantizací INT8 je vyžadována kalibrační sada dat. Zadejte representative_dataset pro určení rozsahů aktivací:
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 poskytuje sadu nástrojů pro analýzu a optimalizaci modelů .tflite. TFLite Benchmark Tool měří čas inference na zařízení a zobrazuje statistiky pro každý operátor. TFLite Model Inspector vizualizuje výpočetní graf a ukazuje velikosti tenzorů.
Netron — multiplatformní vizualizátor modelů, který podporuje .tflite vedle ONNX, Core ML a PyTorch. Netron zobrazuje strukturu grafu, parametry každého operátoru a spojení mezi tenzory. Užitečný pro ladění při konverzi.
TFLite Metadata API umožňuje přidávat do souboru .tflite metadata: popis modelu, formát vstupních dat, měrné jednotky, informace o autorovi. Metadata jsou používána Task Library pro automatickou konfiguraci předzpracování a pozpracování.
Příklad načtení modelu .tflite na iOS s Swift API. TFLite Swift API poskytuje Interpreter pro načtení modelu z bundle a provedení inference. Zadejte delegáta pro hardwarovou akceleraci prostřednictvím 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()
// Připravte vstupní data pro model
let inputData = Data.init(count: 1 * 224 * 224 * 3)
try interpreter.copy(inputData, toInputAt: 0)
// Spusťte inferenci modelu
try interpreter.invoke()
// Přečtěte data výstupního tenzoru
let outputTensor = try interpreter.output(at: 0)
let results = outputTensor.data.withUnsafeBytes {
Array($0.bindMemory(to: Float32.self))
}
Často kladené otázky
Soubor .tflite má binární formát FlatBuffers a není čitelný v textovém editoru. Pro prohlížení použijte Netron nebo TFLite Model Inspector, které vizualizují strukturu modelu.
Použijte tf.lite.experimental.Analyzer.analyze(model_path) v Pythonu nebo TFLite Benchmark Tool s přepínačem --print_model_details. Nástroje zobrazí úplný seznam operátorů s parametry.
.tflite je optimalizován pro inferenci na mobilních zařízeních a používá FlatBuffers. ONNX je univerzální formát pro výměnu modelů mezi frameworky se serializací v protobuf. TFLite má vestavěnou podporu kvantizace.
Ne, zpětná konverze neexistuje kvůli ztrátě informací při kvantizaci a optimalizaci. Původní model TensorFlow by měl být uchováván zvlášť pro další trénování nebo úpravy.
Použijte TFLite Metadata Writer API v Pythonu. API umožňuje přidání popisu, formátu vstupu/výstupu, měrných jednotek a vzorových dat pro Task Library.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také