เพิ่ม Firebase ลงในแอป Android ที่ขับเคลื่อนด้วย TFLite

1. ภาพรวม

cd824ecfd05a2822.png

Firebase ML ช่วยให้คุณสามารถปรับใช้โมเดลของคุณแบบ over-the-air วิธีนี้ช่วยให้คุณรักษาขนาดแอปให้เล็กและดาวน์โหลดโมเดล ML เมื่อจำเป็นเท่านั้น ทดลองกับหลายโมเดล หรืออัปเดตโมเดล ML โดยไม่ต้องเผยแพร่ทั้งแอปอีกครั้ง

ใน Codelab นี้ คุณจะแปลงแอป Android โดยใช้โมเดล TFLite แบบคงที่ให้เป็นแอปโดยใช้โมเดลที่ให้บริการแบบไดนามิกจาก Firebase

สิ่งที่คุณจะได้เรียนรู้

  • ปรับใช้โมเดล TFLite กับ Firebase ML และเข้าถึงได้จากแอปของคุณ
  • ติดตามความคิดเห็นของผู้ใช้เพื่อวัดความแม่นยำของโมเดลด้วย Firebase Analytics
  • ประสิทธิภาพของโมเดลโปรไฟล์ผ่านประสิทธิภาพของ Firebase
  • เลือกว่าโมเดลใดที่ปรับใช้หลายโมเดลจะถูกโหลดผ่าน Remote Config
  • ทดลองใช้โมเดลต่างๆ ผ่านการทดสอบ Firebase A/B

สิ่งที่คุณต้องการ

  • เวอร์ชัน Android Studio ล่าสุด
  • รหัสตัวอย่าง
  • อุปกรณ์ทดสอบที่ใช้ Android 5.0 ขึ้นไปและบริการ Google Play 9.8 ขึ้นไป หรือโปรแกรมจำลองพร้อมบริการ Google Play 9.8 ขึ้นไป
  • หากใช้อุปกรณ์ให้ใช้สายเชื่อมต่อ

คุณจะใช้บทช่วยสอนนี้อย่างไร?

อ่านผ่านๆ เท่านั้น อ่านแล้วทำแบบฝึกหัดให้สมบูรณ์

คุณจะให้คะแนนประสบการณ์ของคุณในการสร้างแอป Android อย่างไร

สามเณร ระดับกลาง เชี่ยวชาญ

2. รับโค้ดตัวอย่าง

โคลนพื้นที่เก็บข้อมูล GitHub จากบรรทัดคำสั่ง

$ git clone https://github.com/FirebaseExtended/codelab-digitclassifier-android.git

หากคุณไม่ได้ติดตั้ง git คุณสามารถดาวน์โหลดโปรเจ็กต์ตัวอย่างได้จากหน้า GitHub หรือคลิก ลิงก์นี้

3. นำเข้าแอปเริ่มต้น

จาก Android Studio ให้เลือกไดเร็กทอรี codelab-digitclassifier-android ( android_studio_folder.png ) จากการดาวน์โหลดโค้ดตัวอย่าง ( File > Open > .../codelab-digitclassifier-android/start)

ตอนนี้คุณควรเปิดโปรเจ็กต์เริ่มต้นใน Android Studio แล้ว

4. เรียกใช้แอปเริ่มต้น

เมื่อคุณนำเข้าโปรเจ็กต์ลงใน Android Studio แล้ว คุณก็พร้อมที่จะรันแอปเป็นครั้งแรก เชื่อมต่ออุปกรณ์ Android ของคุณแล้วคลิก เรียกใช้ ( ดำเนินการ.png ) ในแถบเครื่องมือ Android Studio

แอปควรเปิดบนอุปกรณ์ของคุณ ณ จุดนี้ หากคุณลองวาดตัวเลข แอปควรจะสามารถจดจำตัวเลขนั้นได้

6e36e1b947b395f2.png

5. สร้างโครงการคอนโซล Firebase

เพิ่ม Firebase ให้กับโปรเจ็กต์

  1. ไปที่ คอนโซล Firebase
  2. เลือก เพิ่มโครงการ
  3. เลือกหรือป้อนชื่อโครงการ
  4. ทำตามขั้นตอนการตั้งค่าที่เหลือในคอนโซล Firebase จากนั้นคลิกสร้างโปรเจ็กต์ (หรือเพิ่ม Firebase หากคุณใช้โปรเจ็กต์ Google ที่มีอยู่)

6. เพิ่ม Firebase

  1. จากหน้าจอภาพรวมของโปรเจ็กต์ใหม่ของคุณ ให้คลิกไอคอน Android เพื่อเปิดเวิร์กโฟลว์การตั้งค่า
  2. ป้อนชื่อแพ็กเกจของ Codelab: org.tensorflow.lite.examples.digitclassifier

เพิ่มไฟล์ google-services.json ลงในแอปของคุณ

หลังจากลงทะเบียนชื่อแพ็คเกจและเลือก ถัดไป คลิก ดาวน์โหลด google-services.json เพื่อรับไฟล์กำหนดค่า Firebase Android ของคุณ จากนั้นคัดลอกไฟล์ google-services.json ลงในไดเร็กทอรี app ในโปรเจ็กต์ของคุณ หลังจากดาวน์โหลดไฟล์แล้ว คุณสามารถ ข้าม ขั้นตอนถัดไปที่แสดงในคอนโซลได้ (ขั้นตอนเหล่านี้ได้ดำเนินการให้คุณแล้วในโปรเจ็กต์ build-android-start)

เพิ่มปลั๊กอิน Google-Services ลงในแอปของคุณ

ปลั๊กอิน google-services ใช้ไฟล์ google-services.json เพื่อกำหนดค่าแอปพลิเคชันของคุณให้ใช้ Firebase เพิ่มบรรทัดต่อไปนี้ลงในบล็อก plugins ที่ด้านบนของไฟล์ build.gradle.kts ในไดเร็กทอรี app ของโปรเจ็กต์ของคุณ:

แอป/build.gradle.kts

id("com.google.gms.google-services")

จากนั้นเพิ่มบรรทัดต่อไปนี้ลงในบล็อก plugins ของไฟล์ build.gradle.kts ในโครงการ:

โครงการ/build.gradle.kts

id("com.google.gms.google-services") version "4.3.15" apply false

ซิงค์โครงการของคุณกับไฟล์ gradle

เพื่อให้แน่ใจว่าแอปของคุณมีการอ้างอิงทั้งหมด คุณควรซิงค์โปรเจ็กต์ของคุณกับไฟล์ gradle ณ จุดนี้ เลือก ไฟล์ > ซิงค์โปรเจ็กต์ด้วยไฟล์ Gradle จากแถบเครื่องมือ Android Studio

7. เรียกใช้แอปด้วย Firebase

เมื่อคุณกำหนดค่าปลั๊กอิน google-services ด้วยไฟล์ JSON แล้ว คุณก็พร้อมที่จะเรียกใช้แอปด้วย Firebase แล้ว เชื่อมต่ออุปกรณ์ Android ของคุณแล้วคลิก เรียกใช้ ( ดำเนินการ.png ) ในแถบเครื่องมือ Android Studio

แอปควรเปิดบนอุปกรณ์ของคุณ ณ จุดนี้ แอปของคุณควรยังคงสร้างได้สำเร็จ

8. ปรับใช้โมเดลกับ Firebase ML

การปรับใช้โมเดลกับ Firebase ML มีประโยชน์ด้วยเหตุผลสองประการ:

  1. เราสามารถทำให้ขนาดการติดตั้งแอปมีขนาดเล็ก และดาวน์โหลดโมเดลเฉพาะเมื่อจำเป็นเท่านั้น
  2. โมเดลสามารถอัปเดตได้เป็นประจำและมีรอบการเผยแพร่ที่แตกต่างจากทั้งแอป

ก่อนที่เราจะสามารถแทนที่โมเดลแบบคงที่ในแอปของเราด้วยโมเดลที่ดาวน์โหลดแบบไดนามิกจาก Firebase เราจำเป็นต้องปรับใช้โมเดลดังกล่าวกับ Firebase ML โมเดลสามารถติดตั้งใช้งานได้ผ่านคอนโซลหรือโดยทางโปรแกรมโดยใช้ Firebase Admin SDK ในขั้นตอนนี้ เราจะปรับใช้ผ่านคอนโซล

เพื่อให้ทุกอย่างง่ายขึ้น เราจะใช้โมเดล TensorFlow Lite ที่มีอยู่ในแอปของเราอยู่แล้ว ขั้นแรก เปิดคอนโซล Firebase แล้วคลิก Machine Learning ในแผงการนำทางด้านซ้าย คลิก 'เริ่มต้น' หากคุณเปิดเป็นครั้งแรก จากนั้นไปที่ "กำหนดเอง" และคลิกที่ปุ่ม "เพิ่มโมเดลที่กำหนดเอง"

เมื่อได้รับแจ้ง ให้ตั้งชื่อที่สื่อความหมายแก่โมเดล เช่น mnist_v1 และอัปโหลดไฟล์จากไดเร็กทอรีโปรเจ็กต์ Codelab ภายใต้ start/app/src/main/assets/mnist.tflite จากนั้นคุณสามารถลบไฟล์โมเดล TF Lite นี้ออกจากโครงการ Android ได้

3c3c50e6ef12b3b.png

9. ดาวน์โหลดโมเดลจาก Firebase ML

การเลือกเวลาที่จะดาวน์โหลดโมเดลระยะไกลจาก Firebase ลงในแอปของคุณอาจเป็นเรื่องยุ่งยาก เนื่องจากโมเดล TFLite สามารถขยายได้ค่อนข้างใหญ่ ตามหลักการแล้ว เราต้องการหลีกเลี่ยงการโหลดโมเดลทันทีเมื่อแอปเปิดตัว เนื่องจากหากโมเดลของเราใช้สำหรับฟีเจอร์เดียวเท่านั้น และผู้ใช้ไม่เคยใช้ฟีเจอร์นั้น เราจะดาวน์โหลดข้อมูลจำนวนมากโดยไม่มีเหตุผล นอกจากนี้เรายังสามารถตั้งค่าตัวเลือกการดาวน์โหลด เช่น การดึงข้อมูลเฉพาะรุ่นเมื่อเชื่อมต่อกับ wifi หากคุณต้องการให้แน่ใจว่าโมเดลดังกล่าวพร้อมใช้งานแม้ว่าจะไม่ได้เชื่อมต่อเครือข่ายก็ตาม สิ่งสำคัญคือต้องรวมกลุ่มโมเดลดังกล่าวโดยไม่มีแอปเป็นตัวสำรองด้วย

เพื่อความเรียบง่าย เราจะลบโมเดลรวมเริ่มต้นออก และดาวน์โหลดโมเดลจาก Firebase เสมอเมื่อแอปเริ่มทำงาน วิธีนี้เมื่อเรียกใช้การจดจำตัวเลข คุณจะมั่นใจได้ว่าการอนุมานกำลังทำงานกับโมเดลที่ได้รับจาก Firebase

ในไฟล์ app/build.gradle.kts ให้เพิ่มการพึ่งพา Firebase Machine Learning

แอป/build.gradle.kts

implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")

จากนั้นเพิ่มตรรกะเพื่อดาวน์โหลดโมเดลจาก Firebase

เราจะแทนที่ digitClassifier.initialize(loadModelFile()) ด้วย downloadModel("mnist_v1") และใช้วิธีนี้

MainActivity.kt

  private fun downloadModel(modelName: String): Task<CustomModel> {
    val conditions = CustomModelDownloadConditions.Builder()
    .requireWifi()
    .build()
    return FirebaseModelDownloader.getInstance()
        .getModel(modelName, DownloadType.LOCAL_MODEL, conditions)
        .addOnCompleteListener {
          val model = it.result
          if (model == null) {
            showToast("Failed to get model file.")
          } else {
            showToast("Downloaded remote model: $modelName")
            digitClassifier.initialize(model)
          }
        }
      .addOnFailureListener {
        showToast("Model download failed for $modelName, please check your connection.")
      }
  }

เรียกใช้แอปของคุณอีกครั้งและวาดตัวเลขในตัวแยกประเภทหลัก เมื่อการดาวน์โหลดเสร็จสิ้น คุณจะเห็นข้อความ Toast ว่ามีการดาวน์โหลดโมเดลระยะไกลแล้ว และบันทึกระบุว่ามีการใช้โมเดลใหม่ของคุณ

10. ติดตามความคิดเห็นของผู้ใช้และการแปลงเพื่อวัดความแม่นยำของโมเดล

Google Analytics สำหรับ Firebase ช่วยให้คุณเข้าใจวิธีที่ผู้ใช้ไปยังแอปพลิเคชันของคุณ ตำแหน่งที่พวกเขาประสบความสำเร็จ และจุดที่พวกเขาติดขัดและย้อนกลับ นอกจากนี้ยังสามารถใช้เพื่อทำความเข้าใจส่วนที่ใช้มากที่สุดในแอปพลิเคชันของคุณ

เราจะวัดความแม่นยำของแบบจำลองโดยการติดตามความคิดเห็นของผู้ใช้เกี่ยวกับการทำนายแบบจำลอง หากผู้ใช้คลิก "ใช่" จะเป็นการระบุว่าการคาดคะเนนั้นแม่นยำ

เราสามารถบันทึกเหตุการณ์ Analytics เพื่อติดตามความถูกต้องของแบบจำลองของเรา ขั้นแรก เราต้องเพิ่ม Analytics ลงในการขึ้นต่อกันก่อนจึงจะสามารถใช้ในโครงการได้:

เพิ่มการพึ่งพา Firebase Analytics

แอป/build.gradle.kts

implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-analytics-ktx")

บันทึกเหตุการณ์

จากนั้นที่ฟังก์ชัน onCreate เราจะตั้งค่า Listener onclick ให้บันทึกเหตุการณ์ correct_inference ไปที่ Firebase

MainActivity.kt (onCreate)

// Setup YES button
yesButton?.setOnClickListener {
  Firebase.analytics.logEvent("correct_inference", null)
}

เรียกใช้แอปอีกครั้งแล้ววาดตัวเลข กดปุ่ม "ใช่" สองสามครั้งเพื่อส่งข้อเสนอแนะว่าการอนุมานนั้นถูกต้อง

การวิเคราะห์แก้ไขข้อบกพร่อง

โดยทั่วไป กิจกรรมที่แอปของคุณบันทึกไว้จะถูกจัดกลุ่มเข้าด้วยกันในช่วงเวลาประมาณหนึ่งชั่วโมงและอัปโหลดพร้อมกัน วิธีการนี้ช่วยประหยัดแบตเตอรี่ในอุปกรณ์ของผู้ใช้ปลายทางและลดการใช้ข้อมูลเครือข่าย อย่างไรก็ตาม เพื่อวัตถุประสงค์ในการตรวจสอบการใช้งานการวิเคราะห์ของคุณ (และเพื่อดูการวิเคราะห์ในรายงาน DebugView) คุณสามารถเปิดใช้งานโหมดแก้ไขข้อบกพร่องบนอุปกรณ์การพัฒนาของคุณเพื่ออัปโหลดเหตุการณ์โดยมีความล่าช้าน้อยที่สุด

หากต้องการเปิดใช้งานโหมดแก้ไขข้อบกพร่องของ Analytics บนอุปกรณ์ Android ให้ดำเนินการคำสั่งต่อไปนี้:

adb shell setprop debug.firebase.analytics.app org.tensorflow.lite.examples.digitclassifier

เรียกใช้แอปอีกครั้งแล้ววาดตัวเลข กดปุ่ม "ใช่" สองสามครั้งเพื่อส่งข้อเสนอแนะว่าการอนุมานนั้นถูกต้อง ตอนนี้คุณสามารถดูเหตุการณ์บันทึกในเวลาใกล้เคียงเรียลไทม์ผ่านมุมมองการแก้ไขข้อบกพร่องในคอนโซล Firebase คลิกที่ Analytics > DebugView จากแถบนำทางด้านซ้าย

5276199a086721fd.png

11. วิเคราะห์ประสิทธิภาพของแบบจำลอง

การตรวจสอบประสิทธิภาพ Firebase เป็นบริการที่ช่วยให้คุณได้รับข้อมูลเชิงลึกเกี่ยวกับคุณลักษณะด้านประสิทธิภาพของ iOS, Android และเว็บแอปของคุณ

คุณใช้ Performance Monitoring SDK เพื่อรวบรวมข้อมูลประสิทธิภาพจากแอปของคุณ จากนั้นตรวจสอบและวิเคราะห์ข้อมูลนั้นในคอนโซล Firebase การตรวจสอบประสิทธิภาพช่วยให้คุณเข้าใจว่าสามารถปรับปรุงประสิทธิภาพของแอปได้ที่ไหนและเมื่อใด เพื่อให้คุณสามารถใช้ข้อมูลนั้นเพื่อแก้ไขปัญหาด้านประสิทธิภาพได้

ที่นี่เราเพิ่มการติดตามที่สมบูรณ์แบบเกี่ยวกับการอนุมานและการดาวน์โหลด

นี่เป็นสิ่งสำคัญเนื่องจากโมเดลขนาดใหญ่ที่ใช้ในการเรียนรู้เชิงลึกมีศักยภาพที่จะแม่นยำมากขึ้น แต่ก็อาจใช้เวลานานกว่าในการตอบกลับเช่นกัน ในการทดลองของเรา เรากำลังพยายามค้นหาสมดุลที่เหมาะสมระหว่างความแม่นยำและความเร็ว

เพิ่มการพึ่งพาประสิทธิภาพของ Firebase

โครงการ/build.gradle.kts

plugins {
  // ...

  // Add the dependency for the Performance Monitoring plugin
  id("com.google.firebase.firebase-perf") version "1.4.2" apply false
}

แอป/build.gradle.kts

plugins {
  // ...

  // Add the Performance Monitoring plugin
  id("com.google.firebase.firebase-perf")
}

// ...

dependencies {
  // ...

  // Add the dependency for the Performance Monitoring library
  implementation("com.google.firebase:firebase-perf")
}

เพิ่มการติดตามที่กำหนดเอง

ในฟังก์ชัน setupDigitClassifier() ให้สร้าง downloadTrace ใหม่ และเริ่มต้นทันทีก่อนที่จะดาวน์โหลดโมเดล จากนั้นเพิ่มผู้ฟังที่ประสบความสำเร็จในการหยุดการติดตาม

ในฟังก์ชัน classifyDrawing() ให้สร้าง classifyTrace ใหม่ และเริ่มต้นก่อนการจัดหมวดหมู่ จากนั้นหยุดการติดตามใน onsuccess Listener

MainActivity.kt

class MainActivity : AppCompatActivity() {
  // ...
  
  private val firebasePerformance = FirebasePerformance.getInstance()
  
  // ...

  private fun setupDigitClassifier() {
    // Add these lines to create and start the trace
    val downloadTrace = firebasePerformance.newTrace("download_model")
    downloadTrace.start()
    downloadModel("mnist_v1")
      // Add these lines to stop the trace on success
      .addOnSuccessListener {
        downloadTrace.stop()
      }
  }

// ...

  private fun classifyDrawing() {
    val bitmap = drawView?.getBitmap()

    if ((bitmap != null) && (digitClassifier.isInitialized)) {
      // Add these lines to create and start the trace
      val classifyTrace = firebasePerformance.newTrace("classify")
      classifyTrace.start()
      digitClassifier
        .classifyAsync(bitmap)
        .addOnSuccessListener { resultText -> 
          // Add this line to stop the trace on success
          classifyTrace.stop()
          predictedTextView?.text = resultText
        }
        .addOnFailureListener { e ->
          predictedTextView?.text = getString(
            R.string.tfe_dc_classification_error_message,
            e.localizedMessage
          )
          Log.e(TAG, "Error classifying drawing.", e)
        }
    }
  }

ดูข้อความบันทึกสำหรับกิจกรรมด้านประสิทธิภาพ

  1. เปิดใช้การบันทึกการแก้ไขข้อบกพร่องสำหรับการตรวจสอบประสิทธิภาพในขณะสร้างโดยการเพิ่มองค์ประกอบ <meta-data> ลงในไฟล์ AndroidManifest.xml ของแอป ดังนี้

AndroidManifest.xml

<application>
    <meta-data
      android:name="firebase_performance_logcat_enabled"
      android:value="true" />
</application>
  1. ตรวจสอบข้อความบันทึกของคุณเพื่อดูข้อความแสดงข้อผิดพลาด
  2. การตรวจสอบประสิทธิภาพแท็กข้อความบันทึกด้วย FirebasePerformance เมื่อใช้การกรอง logcat คุณสามารถดูการติดตามระยะเวลาและการบันทึกคำขอเครือข่าย HTTP/S โดยเฉพาะได้โดยการรันคำสั่งต่อไปนี้:
adb logcat -s FirebasePerformance
  1. ตรวจสอบบันทึกประเภทต่อไปนี้ซึ่งระบุว่าการตรวจสอบประสิทธิภาพกำลังบันทึกเหตุการณ์ประสิทธิภาพ:
  • Logging TraceMetric
  • Logging NetworkRequestMetric

12. ปรับใช้โมเดลที่สองกับ Firebase ML

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

เปิดใช้งาน Firebase Model Management API

ในขั้นตอนนี้ เราจะเปิดใช้งาน Firebase Model Management API เพื่อปรับใช้โมเดล TensorFlow Lite เวอร์ชันใหม่ของเราโดยใช้โค้ด Python

สร้างบัคเก็ตเพื่อจัดเก็บโมเดล ML ของคุณ

ในคอนโซล Firebase ของคุณ ไปที่พื้นที่เก็บข้อมูลแล้วคลิกเริ่มต้น fbbea78f0eb3dc9f.png

ทำตามกล่องโต้ตอบเพื่อตั้งค่าที่เก็บข้อมูลของคุณ

19517c0d6d2aa14d.png

เปิดใช้งาน Firebase ML API

ไปที่ หน้า Firebase ML API บน Google Cloud Console แล้วคลิกเปิดใช้งาน

2414fd5cced6c984.png เลือกแอป Digit Classifier เมื่อถูกถาม

ฝึกโมเดลใหม่และเผยแพร่ไปยัง Firebase ML

ตอนนี้เราจะฝึกโมเดลเวอร์ชันใหม่โดยใช้ชุดข้อมูลที่ใหญ่ขึ้น จากนั้นเราจะปรับใช้โมเดลดังกล่าวทางโปรแกรมโดยตรงจากสมุดบันทึกการฝึกอบรมโดยใช้ Firebase Admin SDK

ดาวน์โหลดรหัสส่วนตัวสำหรับบัญชีบริการ

ก่อนที่เราจะใช้ Firebase Admin SDK เราจะต้องสร้างบัญชีบริการก่อน เปิดแผงบัญชีบริการของคอนโซล Firebase โดยคลิกที่ ลิงก์นี้ และคลิกที่ปุ่มเพื่อสร้างบัญชีบริการใหม่สำหรับ Firebase Admin SDK เมื่อได้รับแจ้ง ให้คลิกปุ่มสร้างคีย์ส่วนตัวใหม่ เราจะใช้คีย์บัญชีบริการในการตรวจสอบคำขอของเราจากสมุดบันทึก colab

c3b95de1e5508516.png

ตอนนี้เราสามารถฝึกอบรมและปรับใช้โมเดลใหม่ได้แล้ว

  1. เปิด สมุดบันทึก Colab นี้และทำสำเนาไว้ใต้ไดรฟ์ของคุณเอง
  2. เรียกใช้เซลล์แรก "ฝึกโมเดล TensorFlow Lite ที่ปรับปรุงแล้ว" โดยคลิกที่ปุ่มเล่นทางด้านซ้าย การดำเนินการนี้จะฝึกโมเดลใหม่และอาจต้องใช้เวลาระยะหนึ่ง
  3. การเรียกใช้เซลล์ที่สองจะสร้างพร้อมท์ให้อัพโหลดไฟล์ อัปโหลดไฟล์ json ที่คุณดาวน์โหลดจาก Firebase Console เมื่อสร้างบัญชีบริการ

71e847c6a85423b3.png

  1. เรียกใช้สองเซลล์สุดท้าย

หลังจากเรียกใช้สมุดบันทึก colab คุณจะเห็นรุ่นที่สองในคอนโซล Firebase ตรวจสอบให้แน่ใจว่ารุ่นที่สองชื่อ mnist_v2

c316683bb4d75d57.png

13. เลือกรุ่นผ่าน Remote Config

ตอนนี้เรามีโมเดลสองรุ่นที่แยกกัน เราจะเพิ่มพารามิเตอร์สำหรับเลือกโมเดลที่จะดาวน์โหลดขณะรันไทม์ ค่าของพารามิเตอร์ที่ไคลเอ็นต์ได้รับจะเป็นตัวกำหนดว่าไคลเอ็นต์จะดาวน์โหลดโมเดลใด

เพิ่มกฎการกำหนดค่าในคอนโซล Firebase

ขั้นแรก เปิดคอนโซล Firebase แล้วคลิกปุ่ม Remote Config ในเมนูนำทางด้านซ้าย จากนั้นคลิกที่ปุ่ม "เพิ่มพารามิเตอร์"

ตั้งชื่อพารามิเตอร์ใหม่ model_name และกำหนดค่าเริ่มต้นเป็น "mnist_v1" ด้วยการใส่ชื่อของโมเดลลงในพารามิเตอร์การกำหนดค่าระยะไกล เราสามารถทดสอบหลายโมเดลได้โดยไม่ต้องเพิ่มพารามิเตอร์ใหม่สำหรับทุกๆ รุ่นที่เราต้องการทดสอบ คลิก เผยแพร่การเปลี่ยนแปลง เพื่อใช้การอัปเดต

2949cb95c7214ca4.png

เพิ่มการพึ่งพา Firebase RemoteConfig

แอป/build.gradle.kts

implementation("com.google.firebase:firebase-config-ktx")

กำหนดค่าการกำหนดค่าระยะไกลของ Firebase

MainActivity.kt

  private fun configureRemoteConfig() {
    remoteConfig = Firebase.remoteConfig
    val configSettings = remoteConfigSettings {
      minimumFetchIntervalInSeconds = 3600
    }
    remoteConfig.setConfigSettingsAsync(configSettings)
  }

ร้องขอและใช้ Config

สร้างคำขอดึงข้อมูลสำหรับการกำหนดค่าและเพิ่มตัวจัดการการดำเนินการให้เสร็จสิ้นเพื่อรับและใช้พารามิเตอร์การกำหนดค่า

MainActivity.kt

 private fun setupDigitClassifier() {
    configureRemoteConfig()
    remoteConfig.fetchAndActivate()
      .addOnCompleteListener { task ->
        if (task.isSuccessful) {
          val modelName = remoteConfig.getString("model_name")
          val downloadTrace = firebasePerformance.newTrace("download_model")
          downloadTrace.start()
          downloadModel(modelName)
            .addOnSuccessListener {
              downloadTrace.stop()
            }
        } else {
          showToast("Failed to fetch model name.")
        }
      }
  }

ทดสอบการกำหนดค่าระยะไกล

  1. คลิก 98205811bbed9d74.png ปุ่ม เรียกใช้
  2. ตรวจสอบว่าคุณเห็นข้อความ Toast ที่ดาวน์โหลดรุ่น mnist_v1 แล้ว
  3. กลับไปที่คอนโซล Firebase เปลี่ยนค่าเริ่มต้นเป็น mnist_v2 และเลือก เผยแพร่การเปลี่ยนแปลง เพื่อใช้การอัปเดต
  4. รีสตาร์ทแอปและตรวจสอบเพื่อดูข้อความ Toast ที่ดาวน์โหลดโมเดล mnist_v2 ในครั้งนี้

14. ประสิทธิผลของโมเดลการทดสอบ A/B

การทดสอบ A/B ของ Firebase ช่วยให้คุณเพิ่มประสิทธิภาพประสบการณ์แอปโดยทำให้การเรียกใช้ วิเคราะห์ และปรับขนาดการทดสอบผลิตภัณฑ์และการตลาดเป็นเรื่องง่าย สุดท้ายนี้ เราสามารถใช้พฤติกรรมการทดสอบ A/B ในตัวของ Firebase เพื่อดูว่าโมเดลใดในสองโมเดลของเรามีประสิทธิภาพดีกว่ากัน

ไปที่ Analytics -> เหตุการณ์ในคอนโซล Firebase หากเหตุการณ์ correct_inference แสดงอยู่ ให้ทำเครื่องหมายว่าเป็น "เหตุการณ์ Conversion" หากไม่เป็นเช่นนั้น คุณสามารถไปที่ Analytics -> เหตุการณ์ Conversion แล้วคลิก "สร้างเหตุการณ์ Conversion ใหม่" แล้ววาง correct_inference. ลงไป

ตอนนี้ไปที่ "การกำหนดค่าระยะไกลในคอนโซล Firebase เลือกปุ่ม "การทดสอบ A/B" จากเมนูตัวเลือกเพิ่มเติมในพารามิเตอร์ "model_name" ที่เราเพิ่งเพิ่ม

fad5ea36969d2aeb.png

ในเมนูที่ตามมา ให้ยอมรับชื่อเริ่มต้น

d7c006669ace6e40.png

เลือกแอปของคุณจากเมนูแบบเลื่อนลงและเปลี่ยนเกณฑ์การกำหนดเป้าหมายเป็น 50% ของผู้ใช้ที่ใช้งานอยู่

cb72dcc7d2666bd3.png

หากคุณสามารถตั้งค่าเหตุการณ์ correct_inference เป็น Conversion ก่อนหน้านี้ได้ ให้ใช้เหตุการณ์นี้เป็นเมตริกหลักในการติดตาม มิฉะนั้น หากคุณไม่ต้องการรอให้เหตุการณ์แสดงใน Analytics คุณสามารถเพิ่ม correct_inference manually

1ac9c94fb3159271.png

สุดท้าย บนหน้าจอตัวแปร ให้ตั้งค่าตัวแปรกลุ่มควบคุมของคุณให้ใช้ mnist_v1 และกลุ่มตัวแปร A ของคุณให้ใช้ mnist_v2

e4510434f8da31b6.png

คลิกปุ่มตรวจสอบที่มุมขวาล่าง

ยินดีด้วย คุณสร้างการทดสอบ A/B สำหรับโมเดลทั้งสองที่แยกกันของคุณสำเร็จแล้ว! ขณะนี้การทดสอบ A/B อยู่ในสถานะร่างและสามารถเริ่มต้นได้ตลอดเวลาโดยคลิกปุ่ม "เริ่มการทดสอบ"

หากต้องการดูการทดสอบ A/B ให้ละเอียดยิ่งขึ้น โปรดดู เอกสารการทดสอบ A/B

15. ขอแสดงความยินดี!

ใน Codelab นี้ คุณได้เรียนรู้วิธีแทนที่เนื้อหา tflite ที่รวมกลุ่มแบบคงที่ในแอปของคุณด้วยโมเดล TFLite ที่โหลดแบบไดนามิกจาก Firebase หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ TFLite และ Firebase โปรดดูตัวอย่าง TFLite อื่นๆ และคู่มือเริ่มต้นใช้งาน Firebase

สิ่งที่เราได้กล่าวถึง

  • TensorFlow Lite
  • Firebase ML
  • การวิเคราะห์ฐานไฟ
  • การตรวจสอบประสิทธิภาพ Firebase
  • การกำหนดค่าระยะไกลของ Firebase
  • การทดสอบ A/B ของ Firebase

ขั้นตอนถัดไป

  • ติดตั้ง Firebase ML Deployment ในแอปของคุณ

เรียนรู้เพิ่มเติม

มีคำถาม?

รายงานปัญหา