1. Ikhtisar
Firebase ML memungkinkan Anda menerapkan model over-the-air. Ini memungkinkan Anda menjaga ukuran aplikasi tetap kecil dan hanya mengunduh model ML saat diperlukan, bereksperimen dengan beberapa model, atau memperbarui model ML Anda tanpa harus memublikasikan ulang seluruh aplikasi.
Dalam codelab ini Anda akan mengonversi aplikasi Android menggunakan model TFLite statis menjadi aplikasi menggunakan model yang disajikan secara dinamis dari Firebase.
Apa yang akan Anda pelajari?
- Terapkan model TFLite ke Firebase ML dan akses dari aplikasi Anda
- Lacak masukan pengguna untuk mengukur akurasi model dengan Firebase Analytics
- Performa model profil melalui Firebase Performance
- Pilih salah satu dari beberapa model yang diterapkan yang dimuat melalui Remote Config
- Bereksperimenlah dengan model yang berbeda melalui Pengujian A/B Firebase
Apa yang Anda butuhkan?
- Android Studio versi 3.4+.
- Kode sampel.
- Perangkat uji dengan Android 2.3+ dan layanan Google Play 9.8 atau lebih baru, atau Emulator dengan layanan Google Play 9.8 atau lebih baru
- Jika menggunakan perangkat, kabel koneksi.
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana penilaian pengalaman Anda dalam membuat aplikasi Android?
2. Dapatkan kode sampel
Kloning repositori GitHub dari baris perintah.
$ git clone https://github.com/FirebaseExtended/codelab-digitclassifier-android.git
Jika Anda belum menginstal git, Anda juga dapat mengunduh proyek sampel dari halaman GitHub-nya atau dengan mengeklik tautan ini .
3. Impor aplikasi pemula
Dari Android Studio, pilih codelab-digitclassifier-android
( ) dari unduhan kode sampel ( File > Open > .../codelab-digitclassifier-android/start).
Anda sekarang harus membuka proyek awal di Android Studio.
4. Jalankan aplikasi pemula
Sekarang setelah Anda mengimpor proyek ke Android Studio, Anda siap menjalankan aplikasi untuk pertama kalinya. Hubungkan perangkat Android Anda, dan klik Jalankan ( ) di bilah alat Android Studio.
Aplikasi harus diluncurkan di perangkat Anda. Pada titik ini, jika Anda mencoba menggambar angka, aplikasi seharusnya dapat mengenalinya.
5. Buat proyek konsol Firebase
Tambahkan Firebase ke proyek
- Buka konsol Firebase .
- Pilih Tambahkan proyek .
- Pilih atau masukkan nama Proyek.
- Ikuti langkah penyiapan selanjutnya di Firebase console, lalu klik Buat proyek (atau Tambahkan Firebase, jika Anda menggunakan proyek Google yang sudah ada).
6. Tambahkan Firebase
- Dari layar ikhtisar proyek baru Anda, klik ikon Android untuk meluncurkan alur kerja penyiapan.
- Masukkan nama paket codelab:
org.tensorflow.lite.examples.digitclassifier
Tambahkan file google-services.json ke aplikasi Anda
Setelah mendaftarkan nama paket dan memilih Berikutnya, klik Unduh google-services.json untuk mendapatkan file konfigurasi Firebase Android Anda lalu salin file google-services.json ke direktori app
di proyek Anda. Setelah file diunduh, Anda dapat Lewati langkah berikutnya yang ditampilkan di konsol (sudah dilakukan untuk Anda di proyek build-android-start).
Tambahkan plugin layanan-google ke aplikasi Anda
Plugin google-services menggunakan file google-services.json untuk mengonfigurasi aplikasi Anda agar menggunakan Firebase. Tambahkan baris berikut ke bagian atas file build.gradle di direktori app
proyek Anda:
app/build.gradle
apply plugin: 'com.google.gms.google-services'
Kemudian tambahkan baris berikut ke bagian dependencies
dari file build.gradle Anda di proyek:
proyek/build.gradle
classpath 'com.google.gms:google-services:4.3.13'
Sinkronkan proyek Anda dengan file gradle
Untuk memastikan bahwa semua dependensi tersedia untuk aplikasi Anda, Anda harus menyinkronkan proyek Anda dengan file gradle pada saat ini. Pilih File > Sync Project with Gradle Files dari toolbar Android Studio.
7. Jalankan aplikasi dengan Firebase
Sekarang setelah Anda mengonfigurasi plugin google-services
dengan file JSON, Anda siap menjalankan aplikasi dengan Firebase. Hubungkan perangkat Android Anda, dan klik Jalankan ( ) di bilah alat Android Studio.
Aplikasi harus diluncurkan di perangkat Anda. Pada titik ini, aplikasi Anda masih harus berhasil dibangun.
8. Terapkan model ke Firebase ML
Menerapkan model ke Firebase ML berguna karena dua alasan utama:
- Kami dapat menjaga ukuran pemasangan aplikasi tetap kecil dan hanya mengunduh model jika diperlukan
- Model dapat diperbarui secara teratur dan dengan siklus rilis yang berbeda dari seluruh aplikasi
Sebelum kita dapat mengganti model statis di aplikasi kita dengan model yang diunduh secara dinamis dari Firebase, kita perlu menerapkannya ke Firebase ML. Model dapat diterapkan baik melalui konsol, atau secara terprogram, menggunakan Firebase Admin SDK. Pada langkah ini kami akan menyebarkan melalui konsol.
Untuk mempermudah, kami akan menggunakan model TensorFlow Lite yang sudah ada di aplikasi kami. Pertama, buka Firebase Console dan klik Machine Learning di panel navigasi kiri. Klik 'Memulai' jika Anda membuka ini pertama kali. Kemudian arahkan ke "Kustom" dan klik tombol "Tambahkan model khusus".
Saat diminta, beri model nama deskriptif seperti mnist_v1
dan unggah file dari direktori proyek codelab di bawah start/app/src/main/assets/mnist.tflite
. Kemudian Anda dapat menghapus file model TF Lite ini dari proyek Android.
9. Unduh model dari Firebase ML
Memilih kapan mengunduh model jarak jauh dari Firebase ke dalam aplikasi Anda bisa jadi rumit karena model TFLite dapat tumbuh relatif besar. Idealnya kami ingin menghindari memuat model segera saat aplikasi diluncurkan, karena jika model kami digunakan hanya untuk satu fitur dan pengguna tidak pernah menggunakan fitur itu, kami akan mengunduh sejumlah besar data tanpa alasan. Kami juga dapat mengatur opsi unduhan seperti hanya mengambil model saat terhubung ke wifi. Jika Anda ingin memastikan bahwa model tersedia bahkan tanpa koneksi jaringan, penting juga untuk memaketkannya tanpa aplikasi sebagai cadangan.
Demi kesederhanaan, kami akan menghapus model bundel default dan selalu mengunduh model dari Firebase saat aplikasi dimulai. Dengan cara ini saat menjalankan pengenalan digit, Anda dapat yakin bahwa inferensi berjalan dengan model yang disediakan dari Firebase.
Di file app/build.gradle, tambahkan dependensi Firebase Machine Learning
app/build.gradle
implementation 'com.google.firebase:firebase-ml-modeldownloader:24.0.4'
Kemudian tambahkan logika untuk mengunduh model dari Firebase.
Kami akan mengganti digitClassifier.initialize(loadModelFile())
dengan downloadModel("mnist_v1")
dan menerapkan metode ini.
Aktivitas Utama.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.")
}
}
Jalankan kembali aplikasi Anda dan gambar angka di pengklasifikasi angka. Setelah unduhan selesai, Anda akan melihat pesan Toast bahwa model jarak jauh diunduh dan log yang menunjukkan model baru Anda sedang digunakan.
10. Lacak umpan balik dan konversi pengguna untuk mengukur akurasi model
Google Analytics for Firebase menyediakan cara bagi Anda untuk memahami cara pengguna berpindah melalui aplikasi Anda, di mana mereka berhasil, dan di mana mereka terjebak dan kembali. Ini juga dapat digunakan untuk memahami bagian aplikasi Anda yang paling sering digunakan.
Kami akan mengukur akurasi model dengan melacak umpan balik pengguna pada prediksi model. Jika pengguna mengklik "YA", itu akan menunjukkan bahwa prediksi itu akurat.
Kami dapat mencatat peristiwa Analytics untuk melacak keakuratan model kami. Pertama, kita harus menambahkan Analytics ke dependensi sebelum dapat digunakan dalam proyek:
Tambahkan ketergantungan Firebase Analytics
app/build.gradle
implementation 'com.google.firebase:firebase-analytics-ktx:21.1.0'
Catat Acara
Kemudian pada fungsi onCreate
kita akan mengatur pendengar onclick untuk mencatat peristiwa correct_inference
ke Firebase.
MainActivity.kt (onCreate)
// Setup YES button
yesButton?.setOnClickListener {
Firebase.analytics.logEvent("correct_inference", null)
}
Jalankan aplikasi lagi dan gambar satu digit. Tekan tombol "Ya" beberapa kali untuk mengirim umpan balik bahwa kesimpulannya akurat.
Analisis debug
Umumnya, peristiwa yang dicatat oleh aplikasi Anda dikumpulkan bersama selama periode sekitar satu jam dan diunggah bersama-sama. Pendekatan ini menghemat baterai pada perangkat pengguna akhir dan mengurangi penggunaan data jaringan. Namun, untuk tujuan memvalidasi penerapan analitik Anda (dan, untuk melihat analitik Anda dalam laporan DebugView), Anda dapat mengaktifkan mode Debug di perangkat pengembangan Anda untuk mengunggah peristiwa dengan penundaan minimal.
Untuk mengaktifkan mode Debug Analytics di perangkat Android, jalankan perintah berikut:
adb shell setprop debug.firebase.analytics.app org.tensorflow.lite.examples.digitclassifier
Jalankan aplikasi lagi dan gambar satu digit. Tekan tombol "Ya" beberapa kali untuk mengirim umpan balik bahwa kesimpulannya akurat. Sekarang Anda dapat melihat peristiwa log hampir secara real time melalui tampilan debug di Firebase console. Klik Analytics > DebugView dari bilah navigasi kiri.
11. Analisis Kinerja Model
Firebase Performance Monitoring adalah layanan yang membantu Anda mendapatkan wawasan tentang karakteristik kinerja aplikasi iOS, Android, dan web Anda.
Anda menggunakan Performance Monitoring SDK untuk mengumpulkan data performa dari aplikasi Anda, lalu meninjau dan menganalisis data tersebut di Firebase console. Performance Monitoring membantu Anda memahami di mana dan kapan kinerja aplikasi Anda dapat ditingkatkan sehingga Anda dapat menggunakan informasi tersebut untuk memperbaiki masalah kinerja.
Di sini kami menambahkan jejak kinerja di sekitar inferensi dan unduh
Hal ini penting karena model yang lebih besar yang digunakan dalam pembelajaran mendalam memiliki potensi untuk lebih akurat, tetapi juga membutuhkan waktu lebih lama untuk mengembalikan respons. Dalam percobaan kami, kami mencoba menemukan keseimbangan yang tepat antara akurasi dan kecepatan.
Tambahkan ketergantungan Kinerja Firebase
proyek/build.gradle
buildscript {
// ...
dependencies {
// ...
// Add the dependency for the Performance Monitoring plugin
classpath 'com.google.firebase:perf-plugin:1.4.1' // Performance Monitoring plugin
}
}
app/build.gradle
// Apply the Performance Monitoring plugin
apply plugin: 'com.google.firebase.firebase-perf'
// ...
dependencies {
// ...
// Add the dependency for the Performance Monitoring library
implementation 'com.google.firebase:firebase-perf:20.1.0'
}
Tambahkan Jejak Kustom
Dalam fungsi setupDigitClassifier()
buat downloadTrace baru, dan mulai tepat sebelum mengunduh model. Kemudian tambahkan pendengar yang sukses menghentikan jejak.
Dalam fungsi classifyDrawing()
buat classclassTrace baru, dan mulai tepat sebelum klasifikasi. Kemudian hentikan jejak di pendengar yang berhasil.
Aktivitas Utama.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)
}
}
}
Lihat pesan log untuk acara kinerja
- Aktifkan logging debug untuk Performance Monitoring pada waktu build dengan menambahkan elemen
<meta-data>
ke fileAndroidManifest.xml
aplikasi Anda, seperti:
AndroidManifest.xml
<application>
<meta-data
android:name="firebase_performance_logcat_enabled"
android:value="true" />
</application>
- Periksa pesan log Anda untuk setiap pesan kesalahan.
- Performance Monitoring menandai pesan lognya dengan
FirebasePerformance
. Menggunakan pemfilteran logcat, Anda dapat secara khusus melihat pelacakan durasi dan pencatatan permintaan jaringan HTTP/S dengan menjalankan perintah berikut:
adb logcat -s FirebasePerformance
- Periksa jenis log berikut yang menunjukkan bahwa Performance Monitoring mencatat peristiwa kinerja:
-
Logging TraceMetric
-
Logging NetworkRequestMetric
12. Terapkan model kedua ke Firebase ML
Saat membuat versi baru dari model Anda, seperti model dengan arsitektur model yang lebih baik atau yang dilatih pada kumpulan data yang lebih besar atau yang diperbarui, kami mungkin merasa tergoda untuk mengganti model kami saat ini dengan versi baru. Namun, model yang berkinerja baik dalam pengujian tidak selalu berkinerja sama baiknya dalam produksi. Oleh karena itu, mari kita lakukan pengujian A/B dalam produksi untuk membandingkan model asli kita dengan yang baru.
Aktifkan API Manajemen Model Firebase
Pada langkah ini, kami akan mengaktifkan Firebase Model Management API untuk men-deploy versi baru model TensorFlow Lite kami menggunakan kode Python.
Buat ember untuk menyimpan model ML Anda
Di Konsol Firebase Anda, buka Penyimpanan dan klik Mulai.
Ikuti dialog untuk menyiapkan ember Anda.
Aktifkan Firebase ML API
Buka halaman Firebase ML API di Google Cloud Console dan klik Aktifkan.
Pilih aplikasi Digit Classifier saat ditanya.
Latih model baru dan Publikasikan ke Firebase ML
Sekarang kita akan melatih model versi baru dengan menggunakan kumpulan data yang lebih besar, dan kemudian kita akan menerapkannya secara terprogram langsung dari buku catatan pelatihan menggunakan Firebase Admin SDK.
Unduh kunci pribadi untuk akun layanan
Sebelum kita dapat menggunakan Firebase Admin SDK, kita harus membuat akun layanan. Buka panel Akun Layanan Firebase console dengan mengklik tautan ini dan klik tombol untuk membuat akun layanan baru untuk Firebase Admin SDK. Saat diminta, klik tombol Generate New Private Key. Kami akan menggunakan kunci akun layanan untuk mengautentikasi permintaan kami dari notebook colab.
Sekarang kita dapat melatih dan menerapkan model baru.
- Buka notebook colab ini dan buat salinannya di bawah Drive Anda sendiri.
- Jalankan sel pertama "Latih model TensorFlow Lite yang ditingkatkan" dengan mengklik tombol putar di sebelah kirinya. Ini akan melatih model baru dan mungkin membutuhkan waktu.
- Menjalankan sel kedua akan membuat permintaan unggah file. Unggah file json yang Anda unduh dari Firebase Console saat membuat akun layanan.
- Jalankan dua sel terakhir.
Setelah menjalankan notebook colab, Anda akan melihat model kedua di Firebase console. Pastikan model kedua bernama mnist_v2
.
13. Pilih model melalui Remote Config
Sekarang kami memiliki dua model terpisah, kami akan menambahkan parameter untuk memilih model mana yang akan diunduh saat runtime. Nilai parameter yang diterima klien akan menentukan model mana yang diunduh klien.
Tambahkan Aturan Konfigurasi di konsol Firebase
Pertama, buka konsol Firebase dan klik tombol Remote Config di menu navigasi kiri. Kemudian, klik tombol "Tambah Parameter".
Beri nama parameter model_name
baru dan berikan nilai default "mnist_v1"
. Dengan meletakkan nama model di parameter konfigurasi jarak jauh, kita dapat menguji beberapa model tanpa menambahkan parameter baru untuk setiap model yang ingin kita uji. Klik Publikasikan Perubahan untuk menerapkan pembaruan.
Tambahkan ketergantungan Firebase RemoteConfig
app/build.gradle
implementation 'com.google.firebase:firebase-config-ktx:21.1.1'
Konfigurasikan Firebase Remote Config
Aktivitas Utama.kt
private fun configureRemoteConfig() {
remoteConfig = Firebase.remoteConfig
val configSettings = remoteConfigSettings {
minimumFetchIntervalInSeconds = 3600
}
remoteConfig.setConfigSettingsAsync(configSettings)
}
Minta dan Gunakan Konfigurasi
Buat permintaan pengambilan untuk konfigurasi dan tambahkan penangan penyelesaian untuk mengambil dan menggunakan parameter konfigurasi.
Aktivitas Utama.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.")
}
}
}
Uji Konfigurasi Jarak Jauh
- Klik
tombol Jalankan .
- Periksa apakah Anda melihat pesan Toast bahwa model mnist_v1 telah diunduh.
- Kembali ke Firebase Console, ubah nilai default menjadi mnist_v2 dan pilih Publish Changes untuk menerapkan pembaruan.
- Mulai ulang aplikasi dan periksa untuk melihat pesan Toast bahwa model mnist_v2 diunduh kali ini.
14. Efektivitas Model Uji A/B
Pengujian A/B Firebase membantu Anda mengoptimalkan pengalaman aplikasi dengan mempermudah menjalankan, menganalisis, dan menskalakan eksperimen produk dan pemasaran. Terakhir, kita dapat menggunakan perilaku Pengujian A/B bawaan Firebase untuk melihat model mana yang berkinerja lebih baik.
Buka Analytics -> Acara di Firebase console. Jika peristiwa correct_inference
ditampilkan, tandai sebagai "Peristiwa konversi", jika tidak, Anda dapat membuka Analytics -> Peristiwa Konversi dan klik "Buat Peristiwa Konversi Baru" dan letakkan correct_inference.
Sekarang buka "Remote Config di Firebase console, pilih tombol "A/B test" dari menu opsi lainnya pada parameter "model_name" yang baru saja kita tambahkan.
Di menu berikutnya, terima nama default.
Pilih aplikasi Anda di tarik-turun dan ubah kriteria penargetan menjadi 50% pengguna aktif.
Jika Anda dapat menetapkan peristiwa correct_inference
sebagai konversi sebelumnya, gunakan peristiwa ini sebagai metrik utama untuk dilacak. Jika tidak, jika Anda tidak ingin menunggu acara muncul di Analytics, Anda dapat menambahkan correct_inference
manually
.
Terakhir, pada layar Variants, setel varian grup kontrol Anda untuk menggunakan mnist_v1
dan grup Variant A Anda untuk menggunakan mnist_v2
.
Klik tombol Tinjau di sudut kanan bawah.
Selamat, Anda telah berhasil membuat pengujian A/B untuk dua model terpisah Anda! Pengujian A/B saat ini dalam status draf dan dapat dimulai kapan saja dengan mengeklik tombol "Mulai Eksperimen".
Untuk melihat lebih dekat pengujian A/B, lihat dokumentasi Pengujian A/B .
15. Selamat!
Dalam codelab ini, Anda mempelajari cara mengganti aset tflite yang dibundel secara statis di aplikasi Anda dengan model TFLite yang dimuat secara dinamis dari Firebase. Untuk mempelajari lebih lanjut tentang TFLite dan Firebase, lihat contoh TFLite lainnya dan panduan memulai Firebase.
Apa yang telah kita bahas
- TensorFlow Lite
- Firebase ML
- Firebase Analytics
- Pemantauan Kinerja Firebase
- Konfigurasi Jarak Jauh Firebase
- Pengujian A/B Firebase
Langkah selanjutnya
- Terapkan Firebase ML Deployment di aplikasi Anda.
Belajarlah lagi
- Dokumentasi Pembelajaran Mesin Firebase
- Dokumentasi TensorFlow Lite
- Model Pengujian A/B dengan Firebase