.tflite, Google'ın FlatBuffers teknolojisine dayanan TensorFlow Lite modelleri için ikili bir dosya biçimidir. Biçim, sınırlı kaynaklara sahip mobil, gömülü ve uç cihazlarda verimli çıkarım için optimize edilmiştir. Diğer serileştirme biçimlerinin aksine FlatBuffers, ayrıştırma ve kopyalama olmadan verilere doğrudan erişim sağlar; bu, modelin hızlı başlatılması için kritik öneme sahiptir. TensorFlow Lite Converter Guide, 2025'e göre, .tflite dosyası bir hesaplama grafiği, kuantize edilmiş veya tam hassasiyetli ağırlıklar ve yorumlayıcı için meta veriler içerir. .tflite, Google ekosisteminde cihaz içi ML için standart biçimdir.
Önemli Noktalar
.tflite, sınırlı bellek ve hesaplama gücüne sahip cihazlarda çıkarım için optimize edilmiş bir makine öğrenimi modelinin serileştirilmiş temsilidir. Grafiği protobuf'ta depolayan ve yüklenmesi önemli kaynaklar gerektiren SavedModel biçiminin aksine, .tflite FlatBuffers'ı kullanır — kopyasız veri erişimi sağlayan bir serileştirme kütüphanesi.
.tflite biçimi, mobil platform özellikleri dikkate alınarak tasarlanmıştır: yükleme sırasında minimum bellek tüketimi, hızlı başlatma ve kuantize edilmiş ağırlık desteği. .tflite dosyası eğitimi desteklemez — yalnızca çıkarım. Bu, tam TensorFlow biçimlerinden temel bir farktır ve çalışma zamanı boyutunu önemli ölçüde azaltmaya olanak tanır.
Google Research, 2024'e göre, INT8 kuantizasyonlu .tflite biçimindeki modeller, eşdeğer FP32 modellerinden %60 daha hızlı yüklenir ve çıkarım sırasında %40 daha az RAM tüketir.
.tflite dosyası, FlatBuffers şemasına göre düzenlenmiş birkaç bölümden oluşur. Ana bölüm, hesaplama grafiğini (SubGraph), operatörlerin listesini (OperatorCodes) ve ağırlık tamponlarını içeren Model'dir. Her SubGraph, tensörler, operatörler ve giriş/çıkış indeksleri içerir.
OperatorCodes bölümü, modelde kullanılan tüm operatörlerin tanımlayıcılarını içerir — Conv2D, DepthwiseConv2D, FullyConnected, Softmax ve diğerleri. Her operatörün önceden tanımlanmış BuiltinOperator listesinden bir kodu vardır. Model, listede olmayan işlemler içeriyorsa, bunlar Custom olarak işaretlenir ve bir temsilci veya özel operatör aracılığıyla uygulama gerektirir.
Buffers bölümü, modelin ağırlıklarının ikili verilerini içerir. Kuantizasyon moduna bağlı olarak, ağırlıklar FP32, FP16, INT8 veya ölçekleme parametreleriyle kuantize edilmiş biçimde saklanabilir. Tamponlar, mmap aracılığıyla doğrudan belleğe eşlenir ve ekstra kopyalamayı ortadan kaldırır.
| Bölüm | Amaç |
|---|---|
| Model | Kök yapı, sürüm, açıklama |
| SubGraph | Hesaplama grafiği: tensörler, operatörler, girişler/çıkışlar |
| OperatorCodes | Kullanılan operatörlerin listesi |
| Buffers | Model ağırlıklarının ikili verileri |
| Metadata | Meta veriler: sürüm, yazar, açıklama |
| SignatureDef | API için adlandırılmış girişler ve çıkışlar |
.tflite üç kuantizasyon modunu destekler. Tam tamsayı INT8 kuantizasyonu — ağırlıklar ve aktivasyonlar 8-bit tamsayılar olarak temsil edilir. Dönüştürme, aktivasyon aralıklarını kalibre etmek için temsili bir veri kümesi gerektirir. Model boyutu 4 kat küçülür.
FP16 kuantizasyonu — ağırlıklar 16-bit kayan nokta sayılarına dönüştürülür. Bu mod kalibrasyon gerektirmez ve minimum hassasiyet kaybı sağlar. Aktivasyonlar FP32'de kalır. Model boyutu 2 kat küçülür. GPU ve NPU'da FP16 desteği olan cihazlar için önerilir.
Dinamik kuantizasyon — ağırlıklar INT8'e dönüştürülür ancak aktivasyonlar FP32'de hesaplanır. Model boyutu 4 kat küçülürken hassasiyet tam INT8'den daha yüksek kalır. Google ML Performance Benchmarks'e göre, bu mod NLP modelleri ve yüksek hassasiyet duyarlılığına sahip modeller için idealdir.
Bir modeli .tflite'a dönüştürmek için TFLite Converter kullanılır — Python API tf.lite.TFLiteConverter aracılığıyla kullanılabilen bir TensorFlow bileşeni. Dönüştürücü üç kaynağı destekler: SavedModel, Keras H5 ve ConcreteFunction. Bir Keras modeli dönüştürmenin minimum örneği:
import tensorflow as tf
# Eğitilmiş Keras modelini dosyadan yükle
model = tf.keras.models.load_model("my_model.h5")
# Dinamik kuantizasyonla .tflite'a dönüştür
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
# Dönüştürülmüş modeli bir .tflite dosyasına yaz
with open("model.tflite", "wb") as f:
f.write(tflite_model)
Tam INT8 kuantizasyonu ile dönüştürme için bir kalibrasyon veri kümesi gereklidir. Aktivasyon aralıklarını belirlemek için representative_dataset sağlayın:
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 modellerini analiz etmek ve optimize etmek için bir dizi araç sağlar. TFLite Benchmark Tool, cihazda çıkarım süresini ölçer ve her operatör için istatistikleri gösterir. TFLite Model Inspector, hesaplama grafiğini görselleştirir ve tensör boyutlarını gösterir.
Netron, ONNX, Core ML ve PyTorch ile birlikte .tflite'ı destekleyen platformlar arası bir model görselleştiricisidir. Netron, grafik yapısını, her operatörün parametrelerini ve tensörler arasındaki bağlantıları görüntüler. Dönüştürme sırasında hata ayıklama için kullanışlıdır.
TFLite Metadata API, .tflite dosyasına meta veri eklemeye olanak tanır: model açıklaması, giriş verisi biçimi, ölçüm birimleri, yazar bilgisi. Meta veriler, otomatik ön işleme ve son işleme yapılandırması için Task Library tarafından kullanılır.
iOS'ta Swift API ile .tflite modeli yükleme örneği. TFLite Swift API, paketten modeli yüklemek ve çıkarım çalıştırmak için bir Interpreter sağlar. Core ML Delegate aracılığıyla donanım hızlandırması için bir temsilci belirtin:
import TensorFlowLite
guard let modelPath = Bundle.main.path(
forResource: "model", ofType: "tflite"
) else { return }
let interpreter = try Interpreter.init(modelPath: modelPath)
try interpreter.allocateTensors()
// Model için giriş verilerini hazırla
let inputData = Data.init(count: 1 * 224 * 224 * 3)
try interpreter.copy(inputData, toInputAt: 0)
// Model çıkarımını çalıştır
try interpreter.invoke()
// Çıkış tensör verilerini oku
let outputTensor = try interpreter.output(at: 0)
let results = outputTensor.data.withUnsafeBytes {
Array($0.bindMemory(to: Float32.self))
}
Sıkça Sorulan Sorular
.tflite dosyası ikili FlatBuffers biçimine sahiptir ve bir metin düzenleyicide okunamaz. Görüntülemek için model yapısını görselleştiren Netron veya TFLite Model Inspector'ı kullanın.
Python'da tf.lite.experimental.Analyzer.analyze(model_path) veya --print_model_details bayrağıyla TFLite Benchmark Tool kullanın. Bu araçlar, parametreleriyle birlikte operatörlerin tam listesini gösterir.
.tflite mobil cihazlarda çıkarım için optimize edilmiştir ve FlatBuffers kullanır. ONNX, protobuf serileştirmesi ile çerçeveler arasında model alışverişi için evrensel bir biçimdir. TFLite'da yerleşik kuantizasyon desteği bulunur.
Hayır, kuantizasyon ve optimizasyon sırasında bilgi kaybı nedeniyle ters dönüştürme mevcut değildir. Orijinal TensorFlow modeli, gelecekteki eğitim veya değişiklikler için ayrı olarak kaydedilmelidir.
Python'da TFLite Metadata Writer API'sını kullanın. API, Task Library için açıklama, giriş/çıkış biçimi, ölçüm birimleri ve örnek veri eklemeye olanak tanır.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun