.tflite คือรูปแบบไฟล์ไบนารีสำหรับโมเดล TensorFlow Lite ที่ใช้เทคโนโลยี FlatBuffers ของ Google รูปแบบนี้ถูกปรับให้เหมาะสมสำหรับการอนุมานที่มีประสิทธิภาพบนอุปกรณ์พกพา อุปกรณ์ฝังตัว และอุปกรณ์ขอบที่มีทรัพยากรจำกัด ซึ่งแตกต่างจากรูปแบบซีเรียลไลเซชันอื่นๆ FlatBuffers ให้การเข้าถึงข้อมูลโดยตรงโดยไม่ต้องแยกวิเคราะห์หรือคัดลอก ซึ่งมีความสำคัญอย่างยิ่งสำหรับการเริ่มต้นโมเดลที่รวดเร็ว ตาม TensorFlow Lite Converter Guide, 2025 ไฟล์ .tflite ประกอบด้วยกราฟการคำนวณ น้ำหนักที่ผ่านการควอนไทซ์หรือความแม่นยำเต็ม และเมตาดาต้าสำหรับอินเทอร์พรีเตอร์ .tflite เป็นรูปแบบมาตรฐานสำหรับ ML บนอุปกรณ์ในระบบนิเวศของ Google
ประเด็นสำคัญ
.tflite คือการแสดงซีเรียลไลซ์ของโมเดลแมชชีนเลิร์นนิงที่ปรับให้เหมาะสมสำหรับการอนุมานบนอุปกรณ์ที่มีหน่วยความจำและพลังการคำนวณจำกัด ซึ่งแตกต่างจากรูปแบบ SavedModel ที่เก็บกราฟใน protobuf และต้องใช้ทรัพยากรจำนวนมากในการโหลด .tflite ใช้ FlatBuffers — ไลบรารีซีเรียลไลเซชันที่เข้าถึงข้อมูลได้โดยไม่ต้องคัดลอก
รูปแบบ .tflite ได้รับการออกแบบโดยคำนึงถึง ลักษณะเฉพาะของแพลตฟอร์มมือถือ: การใช้หน่วยความจำน้อยที่สุดระหว่างการโหลด เริ่มต้นเร็ว และรองรับน้ำหนักที่ควอนไทซ์ ไฟล์ .tflite ไม่รองรับการฝึก — เฉพาะการอนุมานเท่านั้น นี่คือความแตกต่างพื้นฐานจากรูปแบบ TensorFlow เต็มรูปแบบ ซึ่งช่วยลดขนาดรันไทม์ได้อย่างมาก
ตาม Google Research, 2024 โมเดลในรูปแบบ .tflite ที่มีการควอนไทซ์ INT8 โหลดเร็วกว่าโมเดล FP32 ที่เทียบเท่า 60% และใช้ RAM น้อยกว่า 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 ตัวแปลงรองรับสามแหล่ง: 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 Swift API ของ TFLite มี 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()
// เตรียมข้อมูลอินพุตสำหรับโมเดล
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 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม