หากแอปของคุณใช้โมเดล TensorFlow Lite ที่กำหนดเอง คุณสามารถ ใช้ Firebase ML เพื่อทำให้โมเดลใช้งานได้ การทำให้โมเดลใช้งานได้ด้วย Firebase จะช่วยลดขนาดการดาวน์โหลดเริ่มต้นของแอป และอัปเดตโมเดล ML ของแอปได้โดยไม่ต้องเผยแพร่แอปเวอร์ชันใหม่ และด้วยการกำหนดค่าระยะไกลและการทดสอบ A/B คุณสามารถแสดงโมเดลที่แตกต่างกันแบบไดนามิกแก่ผู้ใช้กลุ่มต่างๆ ได้
โมเดล TensorFlow Lite
โมเดล TensorFlow Lite คือโมเดล ML ที่ได้รับการปรับให้ทำงานบนอุปกรณ์เคลื่อนที่ วิธีรับโมเดล TensorFlow Lite
- ใช้โมเดลที่สร้างไว้ล่วงหน้า เช่น โมเดล TensorFlow Lite อย่างเป็นทางการ
- แปลงโมเดล TensorFlow, โมเดล Keras หรือฟังก์ชัน Concrete เป็น TensorFlow Lite
โปรดทราบว่าในกรณีที่ไม่มีไลบรารี TensorFlow Lite ที่มีการดูแลรักษาสำหรับ Dart คุณจะต้องผสานรวมกับไลบรารี TensorFlow Lite แบบเนทีฟสำหรับแพลตฟอร์มของคุณ เราไม่ได้อธิบายการผสานรวมนี้ไว้ที่นี่
ก่อนเริ่มต้น
ติดตั้งและเริ่มต้นใช้งาน Firebase SDK สำหรับ Flutter หากยังไม่ได้ทำ
จากไดเรกทอรีรากของโปรเจ็กต์ Flutter ให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งปลั๊กอินตัวดาวน์โหลดโมเดล ML
flutter pub add firebase_ml_model_downloaderสร้างโปรเจ็กต์ใหม่
flutter run
1. ทำให้โมเดลใช้งานได้
ทำให้โมเดล TensorFlow ที่กำหนดเองใช้งานได้โดยใช้คอนโซล Firebase หรือ Firebase Admin Python และ Node.js SDK ดูหัวข้อ ทำให้โมเดลที่กำหนดเองใช้งานได้และจัดการโมเดลที่กำหนดเอง
หลังจากเพิ่มโมเดลที่กำหนดเองลงในโปรเจ็กต์ Firebase แล้ว คุณจะอ้างอิงโมเดลในแอปโดยใช้ชื่อที่ระบุได้ คุณสามารถทำให้โมเดล TensorFlow Lite ใหม่ใช้งานได้และดาวน์โหลดโมเดลใหม่ลงในอุปกรณ์ของผู้ใช้ได้ทุกเมื่อโดยเรียกใช้ getModel() (ดูด้านล่าง)
2. ดาวน์โหลดโมเดลลงในอุปกรณ์และเริ่มต้นใช้งานล่าม TensorFlow Lite
หากต้องการใช้โมเดล TensorFlow Lite ในแอป ให้ใช้ตัวดาวน์โหลดโมเดลเพื่อดาวน์โหลดโมเดลเวอร์ชันล่าสุดลงในอุปกรณ์ก่อน จากนั้นสร้างอินสแตนซ์ล่าม TensorFlow Lite ด้วยโมเดล
หากต้องการเริ่มดาวน์โหลดโมเดล ให้เรียกใช้เมธอด getModel() ของตัวดาวน์โหลดโมเดล โดยระบุชื่อที่คุณกำหนดให้กับโมเดลเมื่ออัปโหลด, ระบุว่าต้องการดาวน์โหลดโมเดลล่าสุดเสมอหรือไม่ และระบุเงื่อนไขที่คุณต้องการอนุญาตให้ดาวน์โหลด
คุณเลือกลักษณะการทำงานในการดาวน์โหลดได้ 3 แบบ
| ประเภทการดาวน์โหลด | คำอธิบาย |
|---|---|
localModel
|
รับโมเดลในเครื่องจากอุปกรณ์
หากไม่มีโมเดลในเครื่องที่พร้อมใช้งาน ระบบจะทำงานเหมือนกับ latestModel ใช้การดาวน์โหลดประเภทนี้หากคุณไม่สนใจที่จะตรวจสอบการอัปเดตโมเดล เช่น คุณใช้การกำหนดค่าระยะไกลเพื่อดึงข้อมูลชื่อโมเดล และอัปโหลดโมเดลด้วยชื่อใหม่เสมอ (แนะนำ) |
localModelUpdateInBackground
|
รับโมเดลในเครื่องจากอุปกรณ์และเริ่มอัปเดตโมเดลในเบื้องหลัง
หากไม่มีโมเดลในเครื่องที่พร้อมใช้งาน ระบบจะทำงานเหมือนกับ latestModel |
latestModel
|
รับโมเดลล่าสุด หากโมเดลในเครื่องเป็นเวอร์ชันล่าสุด ระบบจะแสดงโมเดลในเครื่อง หากไม่ใช่ ระบบจะดาวน์โหลดโมเดลล่าสุด ลักษณะการทำงานนี้จะบล็อกจนกว่าจะดาวน์โหลดเวอร์ชันล่าสุดเสร็จ (ไม่แนะนำ) ใช้ลักษณะการทำงานนี้เฉพาะในกรณีที่คุณต้องการเวอร์ชันล่าสุดอย่างชัดเจน |
คุณควรปิดใช้ฟังก์ชันการทำงานที่เกี่ยวข้องกับโมเดล เช่น ทำให้ส่วนหนึ่งของ UI เป็นสีเทาหรือซ่อนไว้ จนกว่าจะยืนยันว่าได้ดาวน์โหลดโมเดลแล้ว
FirebaseModelDownloader.instance
.getModel(
"yourModelName",
FirebaseModelDownloadType.localModel,
FirebaseModelDownloadConditions(
iosAllowsCellularAccess: true,
iosAllowsBackgroundDownloading: false,
androidChargingRequired: false,
androidWifiRequired: false,
androidDeviceIdleRequired: false,
)
)
.then((customModel) {
// Download complete. Depending on your app, you could enable the ML
// feature, or switch from the local model to the remote model, etc.
// The CustomModel object contains the local path of the model file,
// which you can use to instantiate a TensorFlow Lite interpreter.
final localModelPath = customModel.file;
// ...
});
แอปจำนวนมากจะเริ่มงานดาวน์โหลดในโค้ดการเริ่มต้น แต่คุณสามารถทำได้ทุกเมื่อก่อนที่จะต้องใช้โมเดล
3. ทำการอนุมานข้อมูลอินพุต
เมื่อมีไฟล์โมเดลอยู่ในอุปกรณ์แล้ว คุณจะใช้ไฟล์ดังกล่าวร่วมกับล่าม TensorFlow Lite เพื่อทำการอนุมานได้ ในกรณีที่ไม่มีไลบรารี TensorFlow Lite ที่มีการดูแลรักษาสำหรับ Dart คุณจะต้องผสานรวมกับ ไลบรารี TensorFlow Lite แบบเนทีฟ สำหรับ iOS และ Android
ภาคผนวก: ความปลอดภัยของโมเดล
ไม่ว่าคุณจะทำให้โมเดล TensorFlow Lite พร้อมใช้งานสำหรับ Firebase ML ด้วยวิธีใดก็ตาม Firebase ML จะจัดเก็บโมเดลดังกล่าวในรูปแบบ protobuf ที่ซีเรียลไลซ์มาตรฐานในพื้นที่เก็บข้อมูลในเครื่อง
ในทางทฤษฎี หมายความว่าทุกคนสามารถคัดลอกโมเดลของคุณได้ อย่างไรก็ตาม ในทางปฏิบัติ โมเดลส่วนใหญ่มีความเฉพาะเจาะจงกับแอปพลิเคชันมากและมีการปกปิดโดยการเพิ่มประสิทธิภาพ ความเสี่ยงจึงคล้ายกับความเสี่ยงที่คู่แข่งจะแยกชิ้นส่วนและนำโค้ดของคุณไปใช้ซ้ำ อย่างไรก็ตาม คุณควรทราบถึงความเสี่ยงนี้ก่อนที่จะใช้โมเดลที่กำหนดเองในแอป