Membuat model Klasifikasi Audio kustom terlatih

1. Sebelum memulai

Dalam codelab sebelumnya, Anda membuat aplikasi dasar untuk klasifikasi audio.

Bagaimana jika Anda ingin menyesuaikan model klasifikasi audio untuk mengenali audio dari kelas yang berbeda yang tidak ada pada model terlatih? Atau bagaimana jika Anda ingin menyesuaikan model menggunakan data Anda sendiri?

Dalam Codelab ini, Anda akan menyesuaikan model Klasifikasi Audio terlatih untuk mendeteksi suara burung. Teknik yang sama dapat direplikasi menggunakan data Anda.

Prasyarat

Codelab ini dirancang untuk developer seluler berpengalaman yang ingin mendapatkan pengalaman dengan Machine Learning. Anda harus memahami:

  • Pengembangan Android menggunakan Kotlin dan Android Studio
  • Sintaksis Python dasar

Yang akan Anda pelajari

  • Cara melakukan pemelajaran transfer untuk domain audio
  • Cara membuat data Anda sendiri
  • Cara men-deploy model Anda sendiri di aplikasi Android

Yang Anda butuhkan

  • Versi terbaru Android Studio (v4.1.2+)
  • Perangkat Android fisik dengan versi Android pada API 23 (Android 6.0)
  • Kode contoh
  • Pengetahuan dasar tentang pengembangan Android di Kotlin

2. Set data The Birds

Anda akan menggunakan set data Birdsong yang sudah disiapkan untuk mempermudah penggunaan. Semua file audio berasal dari situs Xeno-canto.

Set data ini berisi lagu dari:

Nama: House Sparrow

Kode: houspa

Gambar spesies burung House Sparrow oleh Alejandro Bayer Tamayo dari Armenia, Kolombia.

[audio]

Nama: Crossbill Merah

Kode: redcro

Gambar spesies burung Red Crossbill oleh Elaine Wilson.

[audio]

Nama: White-breasted Wood-Wren

Kode: wbwwre1

Gambar Wood-Brened White-Wren, penulis tidak dikenal.

[audio]

Nama: Antpitta bermahkota kastanye

Kode: chcant2

Gambar Antpitta bermahkota kastanye

[audio]

Nama: Azara's Spinetail

Kode: azaspi1

Gambar burung Spinetail Azara.

[audio]

Set data ini ada dalam file zip dan kontennya:

  • metadata.csv yang memiliki semua informasi tentang setiap file audio, seperti siapa yang merekam audio, tempat rekaman, lisensi penggunaan, dan nama burung.
  • Folder kereta dan uji.
  • Di dalam folder kereta/uji, terdapat folder untuk setiap kode burung. Di dalam setiap file tersebut, terdapat semua file .wav untuk burung tersebut di bagian tersebut.

File audio semuanya dalam format wav dan mengikuti spesifikasi berikut:

Spesifikasi ini penting karena Anda akan menggunakan model dasar yang mengharapkan data dalam format ini. Untuk mempelajarinya lebih lanjut, Anda dapat membaca informasi tambahan pada postingan blog ini.

Untuk mempermudah seluruh proses, Anda tidak perlu mendownload set data di mesin Anda. Anda akan menggunakannya di Google Colab (nanti dalam panduan ini).

Jika ingin menggunakan data Anda sendiri, semua file audio juga harus dalam format tertentu.

3 Mendapatkan kode contoh

Download Kode

Klik link berikut untuk mendownload semua kode untuk codelab ini:

Atau jika mau, clone repositori:

git clone https://github.com/googlecodelabs/odml-pathways.git

Mengekstrak file zip yang didownload. Ini akan mengekstrak folder root (odml-pathways) dengan semua resource yang Anda butuhkan. Untuk codelab ini, Anda hanya memerlukan sumber di subdirektori audio_classification/codelab2/android.

Subdirektori android dalam repositori audio_classification/codelab2/android berisi dua direktori:

  • android_studio_folder.pngstarter—Kode awal yang Anda build untuk codelab ini.
  • android_studio_folder.pngfinal—Kode lengkap untuk aplikasi contoh yang sudah selesai.

Mengimpor aplikasi awal

Mulailah dengan mengimpor aplikasi awal ke Android Studio:

  1. Buka Android Studio dan pilih Import Project (Gradle, Eclipse ADT, etc.)
  2. Buka folder starter (audio_classification/codelab2/android/starter) dari kode sumber yang Anda download sebelumnya.

7c0f27882a2698ac.png

Untuk memastikan bahwa semua dependensi tersedia untuk aplikasi Anda, Anda harus menyinkronkan project dengan file gradle saat proses impor selesai.

  1. Pilih Sync Project with Gradle Files ( b451ab2d04d835f9.png) dari toolbar Android Studio.

4. Memahami aplikasi awal

Aplikasi ini sama dengan yang dibuat di codelab pertama untuk klasifikasi audio: Buat aplikasi dasar untuk klasifikasi audio.

Untuk mendapatkan pemahaman kode yang lebih baik secara mendetail, sebaiknya lakukan codelab tersebut sebelum melanjutkan.

Semua kode ada di MainActivity (untuk sesederhana mungkin).

Singkatnya, kode melakukan tugas-tugas:

  • Memuat model
val classifier = AudioClassifier.createFromFile(this, modelPath)
  • Membuat perekam audio dan memulai rekaman
val tensor = classifier.createInputTensorAudio()

val format = classifier.requiredTensorAudioFormat
val recorderSpecs = "Number Of Channels: ${format.channels}\n" +
       "Sample Rate: ${format.sampleRate}"
recorderSpecsTextView.text = recorderSpecs

val record = classifier.createAudioRecord()
record.startRecording()
  • Membuat thread timer untuk menjalankan inferensi. Parameter untuk metode scheduleAtFixedRate adalah waktu tunggu untuk memulai eksekusi dan waktu antara eksekusi tugas yang berurutan. Pada kode di bawah, kode akan dimulai dalam 1 milidetik dan akan berjalan lagi setiap 500 milidetik.
Timer().scheduleAtFixedRate(1, 500) {
...
}
  • Menjalankan inferensi pada audio yang direkam
val numberOfSamples = tensor.load(record)
val output = classifier.classify(tensor)
  • Klasifikasi filter untuk skor rendah
val filteredModelOutput = output[0].categories.filter {
   it.score > probabilityThreshold
}
  • Tampilkan hasil di layar
val outputStr = filteredModelOutput.map { "${it.label} -> ${it.score} " }
   .joinToString(separator = "\n")

runOnUiThread {
   textView.text = outputStr
}

Sekarang Anda dapat menjalankan aplikasi dan memutarnya apa adanya, tetapi ingat bahwa aplikasi ini menggunakan model terlatih yang lebih umum.

5. Melatih model Klasifikasi Audio kustom dengan Model Maker

Pada langkah sebelumnya, Anda mendownload aplikasi yang menggunakan model terlatih untuk mengklasifikasikan peristiwa audio. Namun, terkadang Anda perlu menyesuaikan model ini ke acara audio yang Anda minati atau menjadikannya versi yang lebih khusus.

Seperti disebutkan sebelumnya, Anda akan memiliki spesialisasi model untuk suara Burung. Berikut adalah set data dengan audio burung, yang diseleksi dari situs Xeno-canto.

Colaboratory

Selanjutnya, buka Google Colab untuk melatih model kustom.

Diperlukan waktu sekitar 30 menit untuk melatih model kustom.

Jika ingin melewati langkah ini, Anda dapat mendownload model yang telah dilatih di Colab dengan set data yang diberikan dan melanjutkan ke langkah berikutnya

6. Menambahkan model TFLite kustom ke aplikasi Android

Setelah melatih model klasifikasi audio Anda sendiri dan menyimpannya secara lokal, Anda harus menempatkannya di folder aset aplikasi Android.

Langkah pertama adalah memindahkan model yang didownload dari langkah sebelumnya ke folder aset dalam aplikasi Anda.

  1. Di Android Studio, dengan tampilan Android Project, klik kanan folder aset.

7cca2c22ed8cf4c8.png

  1. Anda akan melihat pop-up yang berisi daftar opsi. Salah satunya adalah membuka folder di sistem file Anda. Temukan yang sesuai untuk sistem operasi Anda dan pilih. Di Mac, ini akan menjadi Reveal in Finder, di Windows akan menjadi Open in Explorer, dan di Ubuntu akan menjadi Show in Files.

95e0eca881d35f6b.png

  1. Salin model yang didownload ke folder.

Setelah melakukannya, kembali ke Android Studio, dan Anda akan melihat file dalam folder aset.

52bda66abe201fe5.png

7. Memuat model baru di aplikasi dasar

Aplikasi dasar sudah menggunakan model terlatih. Anda akan menggantinya dengan yang baru saja dilatih.

  1. TODO 1: Untuk memuat model baru setelah menambahkannya ke folder assets, ubah nilai variabel modelPath:
var modelPath = "my_birds_model.tflite"

Model baru memiliki dua output (head):

  • Output asli yang lebih umum dari model dasar yang Anda gunakan, dalam hal ini adalah YAMNet.
  • Output sekunder yang khusus untuk burung yang telah Anda gunakan pada pelatihan.

Hal ini diperlukan karena YAMNet dapat berfungsi dengan baik dengan mengenali beberapa class yang umum, seperti Senyap, misalnya. Dengan demikian, Anda tidak perlu khawatir tentang semua class lain yang tidak ditambahkan ke set data.

Yang akan Anda lakukan sekarang adalah jika klasifikasi YAMNet menunjukkan skor yang tinggi untuk class burung, Anda akan melihat burung mana yang berada di output lainnya.

37ce1c14e9e2d1b0.png

  1. TODO 2: Baca apakah head pertama klasifikasi memiliki keyakinan tinggi bahwa itu adalah suara Burung. Di sini Anda akan mengubah pemfilteran untuk juga memfilter apa pun yang bukan Burung:
val filteredModelOuput = output[0].categories.filter {
   it.label.contains("Bird") && it.score > .3
}
  1. TODO 3: Jika kepala dasar model mendeteksi bahwa ada burung di audio dengan probabilitas yang baik, Anda akan mendapatkan burung yang ada di kepala kedua:
if (filteredModelOutput.isNotEmpty()) {
   Log.i("Yamnet", "bird sound detected!")
   filteredModelOutput = output[1].categories.filter {
       it.score > probabilityThreshold
   }
}

Selesai! Mengubah model untuk menggunakan model yang baru saja Anda pelatihan akan sangat mudah.

Langkah berikutnya adalah mengujinya.

8 Menguji aplikasi dengan model baru

Anda telah mengintegrasikan model klasifikasi audio ke aplikasi, jadi mari kita uji.

  1. Hubungkan perangkat Android, lalu klik Run ( execute.png) di toolbar Android Studio.

Aplikasi harus dapat memprediksi audio burung dengan benar. Untuk mempermudah pengujian, cukup putar salah satu audio dari komputer (dari langkah sebelumnya), dan ponsel Anda seharusnya dapat mendeteksinya. Jika muncul, nama burung akan muncul di layar dan kemungkinan untuk ditampilkan dengan benar.

bec397de3c8aaf32.png

9. Selamat

Dalam codelab ini, Anda telah mempelajari cara membuat model klasifikasi audio sendiri dengan Model Maker dan men-deploy-nya ke aplikasi seluler menggunakan TensorFlow Lite. Untuk mempelajari TFLite lebih lanjut, lihat contoh TFLite lainnya.

Yang telah kita bahas

  • Cara menyiapkan set data Anda sendiri
  • Cara melakukan Pembelajaran Transfer untuk Klasifikasi Audio dengan Model Maker
  • Cara menggunakan model Anda di Aplikasi Android

Langkah Berikutnya

  • Coba dengan data Anda
  • Bagikan kepada kami apa yang Anda buat

Pelajari Lebih Lanjut

Ada Pertanyaan?

Laporkan Masalah