ใช้โมเดล TensorFlow Lite ที่กำหนดเองกับ Flutter

หากแอปของคุณใช้โมเดล TensorFlow Lite ที่กำหนดเอง คุณสามารถ ใช้ Firebase ML เพื่อทำให้โมเดลใช้งานได้ การทำให้โมเดลใช้งานได้ด้วย Firebase จะช่วยลดขนาดการดาวน์โหลดเริ่มต้นของแอป และอัปเดตโมเดล ML ของแอปได้โดยไม่ต้องเผยแพร่แอปเวอร์ชันใหม่ และด้วยการกำหนดค่าระยะไกลและการทดสอบ A/B คุณสามารถแสดงโมเดลที่แตกต่างกันแบบไดนามิกแก่ผู้ใช้กลุ่มต่างๆ ได้

โมเดล TensorFlow Lite

โมเดล TensorFlow Lite คือโมเดล ML ที่ได้รับการปรับให้ทำงานบนอุปกรณ์เคลื่อนที่ วิธีรับโมเดล TensorFlow Lite

โปรดทราบว่าในกรณีที่ไม่มีไลบรารี TensorFlow Lite ที่มีการดูแลรักษาสำหรับ Dart คุณจะต้องผสานรวมกับไลบรารี TensorFlow Lite แบบเนทีฟสำหรับแพลตฟอร์มของคุณ เราไม่ได้อธิบายการผสานรวมนี้ไว้ที่นี่

ก่อนเริ่มต้น

  1. ติดตั้งและเริ่มต้นใช้งาน Firebase SDK สำหรับ Flutter หากยังไม่ได้ทำ

  2. จากไดเรกทอรีรากของโปรเจ็กต์ Flutter ให้เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งปลั๊กอินตัวดาวน์โหลดโมเดล ML

    flutter pub add firebase_ml_model_downloader
    
  3. สร้างโปรเจ็กต์ใหม่

    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 ที่ซีเรียลไลซ์มาตรฐานในพื้นที่เก็บข้อมูลในเครื่อง

ในทางทฤษฎี หมายความว่าทุกคนสามารถคัดลอกโมเดลของคุณได้ อย่างไรก็ตาม ในทางปฏิบัติ โมเดลส่วนใหญ่มีความเฉพาะเจาะจงกับแอปพลิเคชันมากและมีการปกปิดโดยการเพิ่มประสิทธิภาพ ความเสี่ยงจึงคล้ายกับความเสี่ยงที่คู่แข่งจะแยกชิ้นส่วนและนำโค้ดของคุณไปใช้ซ้ำ อย่างไรก็ตาม คุณควรทราบถึงความเสี่ยงนี้ก่อนที่จะใช้โมเดลที่กำหนดเองในแอป