ใช้โมเดล 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() ของผู้ดาวน์โหลดโมเดล โดยระบุชื่อที่คุณกำหนดให้กับโมเดลเมื่อคุณอัปโหลด ไม่ว่าคุณต้องการดาวน์โหลดโมเดลล่าสุดเสมอหรือไม่ และเงื่อนไขที่คุณต้องการอนุญาตให้ดาวน์โหลด

คุณสามารถเลือกลักษณะการดาวน์โหลดได้สามแบบ:

ประเภทการดาวน์โหลด คำอธิบาย
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 ที่เป็นอนุกรมมาตรฐานในพื้นที่จัดเก็บในตัวเครื่อง

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