1. Başlamadan önce
Önceki codelab'de, ses sınıflandırması için temel bir uygulama oluşturdunuz.
Ses sınıflandırma modelini, önceden eğitilmiş bir modelde bulunmayan farklı sınıflardaki sesleri tanıyacak şekilde özelleştirmek isterseniz ne yapmalısınız? Modeli kendi verilerinizi kullanarak özelleştirmek isterseniz ne olur?
Bu Codelab'de, kuş seslerini algılamak için önceden eğitilmiş Ses Sınıflandırma modelini özelleştireceksiniz. Aynı teknik, kendi verileriniz kullanılarak kopyalanabilir.
Ön koşullar
Bu codelab, Makine Öğrenimi konusunda deneyim edinmek isteyen deneyimli mobil geliştiriciler için tasarlanmıştır. Aşağıdaki konular hakkında bilgi sahibi olmalısınız:
- Kotlin ve Android Studio'yu kullanarak Android geliştirme
- Temel Python söz dizimi
Neler öğreneceksiniz?
- Ses alanı için aktarım öğrenimini kullanma
- Verilerinizi nasıl oluşturabilirsiniz?
- Kendi modelinizi Android uygulamasında dağıtma
Gerekenler
- Android Studio'nun en yeni sürümü (v4.1.2+)
- API 23'te Android sürümü bulunan fiziksel Android cihaz (Android 6.0)
- Örnek kod
- Kotlin'de Android geliştirmeyle ilgili temel bilgiler
2. Birds veri kümesi
Kullanımı kolaylaştırmak için hazır olan bir Birdsong veri kümesi kullanacaksınız. Tüm ses dosyaları, Xeno-toto web sitesinden gelir.
Bu veri kümesinde şunlara ait şarkılar bulunur:
Ad: Ev Serisi | Kod: houspa |
Ad: Kızıl Haç | Kod: redcro |
Ad: Beyaz Meyveli Çalı | Kod: wbwwre1 |
Ad: Kestane taçlı Antpitta | Kod: chcant2 |
Ad: Azara's | Kod: açspi1 |
Bu veri kümesi zip dosyası içinde ve içeriği:
- Her ses dosyasıyla ilgili tüm bilgileri (sesin kimin tarafından kaydedildiği, nerede kaydedildiği, kullanım lisansı ve kuşun adı gibi) içeren bir
metadata.csv
. - Bir tren ve test klasörü.
- Tren/test klasörlerinde her kuş kodu için bir klasör vardır. Her birinin içinde o bölüm için o kuşa ait tüm .wav dosyaları var.
Tüm ses dosyaları wav biçimindedir ve şu spesifikasyona uygundur:
- 16.000 Hz örnek hızı
- 1 ses kanalı (mono)
- 16 bit hızı
Bu biçimdeki verileri bekleyen bir temel model kullanacağınız için bu spesifikasyon önemlidir. Daha fazla bilgi edinmek için bu blog yayınından daha fazla bilgi edinebilirsiniz.
Tüm süreci kolaylaştırmak için veri kümesini makinenize indirmeniz gerekmez, Google Colab'da kullanırsınız (bu kılavuzun ilerleyen bölümlerinde).
Kendi verilerinizi kullanmak isterseniz tüm ses dosyalarınızın da bu biçimde olması gerekir.
3. Örnek kodu alın
Kodu İndirme
Bu codelab'in tüm kodunu indirmek için aşağıdaki bağlantıyı tıklayın:
İsterseniz kod deposunu klonlayabilirsiniz:
git clone https://github.com/googlecodelabs/odml-pathways.git
İndirilen ZIP dosyasını paketten çıkarın. Bu, ihtiyaç duyacağınız tüm kaynaklarla bir kök klasörün (odml-pathways
) paketini açar. Bu codelab için yalnızca audio_classification/codelab2/android
alt dizinindeki kaynaklara ihtiyacınız olacaktır.
audio_classification/codelab2/android
deposundaki android
alt dizini iki dizin içerir:
- starter - Bu codelab için geliştirdiğiniz başlangıç kodu.
- Son: Tamamlanmış örnek uygulama için kod tamamlandı.
Başlangıç uygulamasını içe aktarın
Başlangıç uygulamasını Android Studio'ya aktararak başlayın:
- Android Studio'yu açın ve Projeyi İçe Aktar (Gradle, Eclipse ADT vb.) seçeneğini belirleyin.
- Daha önce indirdiğiniz kaynak koddan
starter
klasörünü (audio_classification/codelab2/android/starter
) açın.
Uygulamanızın tüm bağımlılıkları tarafından kullanılabileceğinden emin olmak için içe aktarma işlemi tamamlandığında projenizi gradle dosyalarıyla senkronize etmeniz gerekir.
- Android Studio araç çubuğundan Projeyi Gradle Dosyalarıyla Senkronize Et'i ( ) seçin.
4. Başlangıç uygulamasını anlama
Bu uygulama, ses sınıflandırması için ilk codelab'de oluşturulanla aynıdır: Ses sınıflandırması için temel bir uygulama oluşturma.
Kodu ayrıntılı olarak daha iyi anlamak için devam etmeden önce codelab'i kullanmanız önerilir.
Tüm kod MainActivity
bölümünde (olabildiğince basit tutmak için).
Özetle, kod şunların görevlerini gerçekleştirir:
- Model yükleniyor
val classifier = AudioClassifier.createFromFile(this, modelPath)
- Ses kaydediciyi oluşturma ve kaydı başlatma
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()
- Çıkarımı çalıştırmak için bir zamanlayıcı ileti dizisi oluşturma.
scheduleAtFixedRate
yönteminin parametreleri, yürütmenin başlamasının ne kadar süreceğini ve sonraki görev yürütme arasındaki süreyi belirtir. Aşağıdaki kod 1 milisaniyede başlayacak ve 500 milisaniyede bir yeniden çalıştırılacaktır.
Timer().scheduleAtFixedRate(1, 500) {
...
}
- Yakalanan seste çıkarım yapma
val numberOfSamples = tensor.load(record)
val output = classifier.classify(tensor)
- Düşük puanlar için filtre sınıflandırması
val filteredModelOutput = output[0].categories.filter {
it.score > probabilityThreshold
}
- Sonuçları ekranda göster
val outputStr = filteredModelOutput.map { "${it.label} -> ${it.score} " }
.joinToString(separator = "\n")
runOnUiThread {
textView.text = outputStr
}
Uygulamayı çalıştırabilir ve şu anda olduğu gibi oynayabilirsiniz. Ancak bunun için daha genel bir önceden eğitilmiş model kullanılması gerektiğini unutmayın.
5. Model Oluşturucu ile özel Ses Sınıflandırma modeli eğitme
Önceki adımda, ses etkinliklerini sınıflandırmak için önceden eğitilmiş bir model kullanan bir uygulama indirdiniz. Ancak bazen bu modeli, ilgilendiğiniz sesli etkinliklere göre özelleştirmeniz veya daha özel bir sürüm haline getirmeniz gerekir.
Daha önce de belirtildiği gibi, kuş sesleri için modeli uzmanlaştıracaksınız. Xeno-canto web sitesinden alınan kuş seslerini içeren bir veri kümesi burada.
Colaboratory
Şimdi özel modeli eğitmek için Google Colab'a gidelim.
Özel modeli eğitmek yaklaşık 30 dakika sürer.
Bu adımı atlamak istiyorsanız, sağlanan veri kümesiyle birlikte colab'de eğittiğiniz modeli indirip bir sonraki adıma geçebilirsiniz
6. Özel TFLite modelini Android uygulamasına ekleyin
Kendi ses sınıflandırma modelinizi eğitip yerel olarak kaydettiğinize göre bunu Android uygulamasının öğeler klasörüne yerleştirmeniz gerekiyor.
İlk adım, indirilen modeli önceki adımda uygulamanızın öğeleri klasörüne taşımaktır.
- Android Studio'da, Android Proje görünümündeki öğeler klasörünü sağ tıklayın.
- Seçenekler listesinin yer aldığı bir pop-up görürsünüz. Bunlardan biri, klasörü dosya sisteminizde açmak olacaktır. İşletim sisteminize uygun olanı bulun ve seçin. Mac'te bu, Finder'da Göster, Windows'da ise Gezgin'de Aç ve Ubuntu'da Dosyalarda Göster olur.
- İndirilen modeli klasöre kopyalayın.
Bu işlemi yaptıktan sonra Android Studio'ya dönün. Dosyanızı öğeler klasöründe göreceksiniz.
7. Yeni modeli temel uygulamada yükleyin
Temel uygulama zaten eğitilmiş bir model kullanıyor. Bu e-posta adresini, kısa bir süre önce eğittiğiniz eğitim kadrosuyla değiştireceksiniz.
- TODO 1: Yeni modeli assets klasörüne ekledikten sonra yüklemek için
modelPath
değişkeninin değerini değiştirin:
var modelPath = "my_birds_model.tflite"
Yeni modelin iki çıkışı vardır:
- Kullandığınız temel modelden (bu örnekte YAMNet) orijinal, daha genel çıkış.
- Eğitimde kullandığınız kuşlara özel ikincil çıkış.
YAMNet, örneğin Sessizlik gibi yaygın olan birden çok sınıfı tanırken çok iyi bir iş çıkardığından bu gereklidir. Böylece, veri kümenize eklemediğiniz diğer tüm sınıflar için endişelenmenize gerek olmaz.
YAMNet sınıflandırmasının kuş sınıfı için yüksek bir puan göstermesi durumunda, diğer çıkışta hangi kuşun olduğuna bakarsınız.
- 2. YAPILACAK: Sınıflandırmaya giren ilk kişinin yüksek bir özgüven olup olmadığını okuyun. Burada, kuş olmayan her şeyi filtrelemek için filtrelemeyi değiştirirsiniz:
val filteredModelOuput = output[0].categories.filter {
it.label.contains("Bird") && it.score > .3
}
- 3. YAPILACAK: Modelin ana başı, seste iyi bir olasılık bulunan bir kuş olduğunu algılarsa ikinci sesin hangisi olduğunu anlarsınız:
if (filteredModelOutput.isNotEmpty()) {
Log.i("Yamnet", "bird sound detected!")
filteredModelOutput = output[1].categories.filter {
it.score > probabilityThreshold
}
}
İşte oldu. Modeli yeni eğitdiğiniz modeli kullanacak şekilde değiştirmek basittir.
Sonraki adım, test etmektir.
8. Uygulamayı yeni modelinizle test edin
Ses sınıflandırma modelinizi uygulamaya entegre ettiniz. Şimdi de bunu test edelim.
- Android cihazınızı bağlayıp Android Studio araç çubuğundaki Çalıştır'ı ( ) tıklayın.
Uygulama, kuşların sesini doğru bir şekilde tahmin edebilmelidir. Testi kolaylaştırmak için bilgisayarınızdaki seslerden birini oynatın (önceki adımlarda) ve telefonunuz bunu algılayabilir. Bu özellik ayarlandığında, ekranda kuş adının yanı sıra doğru olma olasılığını gösterir.
9. Tebrikler
Bu codelab'de, TensorFlow Lite'ı kullanarak Model Oluşturucu ile kendi ses sınıflandırma modelinizi oluşturmayı ve mobil uygulamanıza dağıtmayı öğrendiniz. TFLite hakkında daha fazla bilgi edinmek için diğer TFLite örneklerini inceleyin.
Ele aldığımız konular
- Kendi veri kümenizi hazırlama
- Model Oluşturucu ile Ses Sınıflandırması için Aktarım Öğrenme nasıl yapılır?
- Modelinizi bir Android uygulamasında kullanma
Sonraki Adımlar
- Kendi verilerinizle deneyin
- Geliştirdiğiniz içerikleri bizimle paylaşın
Daha Fazla Bilgi
- Öğrenme yolu bağlantısı
- TensorFlow Lite dokümanları
- Model Oluşturucu belgeleri
- TensorFlow Hub belgeleri
- Google teknolojileriyle cihaz üzerinde makine öğrenimi