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

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