Önceden eğitilmiş özel bir Ses Sınıflandırma modeli oluşturma

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

Kolombiya'daki Alejandro Bayer Tamayo'nun Müze'deki kuş türlerinin resmi.

[ses]

Ad: Kızıl Haç

Kod: redcro

Elaine Wilson'ın Kızıl Çapraz kuş türlerinin resmi.

[ses]

Ad: Beyaz Meyveli Çalı

Kod: wbwwre1

Beyaz göğüslü ahşap esmer, yazar bilinmiyor.

[ses]

Ad: Kestane taçlı Antpitta

Kod: chcant2

Kestane taçlı Antpitta resmi

[ses]

Ad: Azara's

Kod: açspi1

Bir Azara's Spintail kuşunun resmi.

[ses]

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:

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:

  • android_studio_folder.pngstarter - Bu codelab için geliştirdiğiniz başlangıç kodu.
  • android_studio_folder.pngSon: 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:

  1. Android Studio'yu açın ve Projeyi İçe Aktar (Gradle, Eclipse ADT vb.) seçeneğini belirleyin.
  2. Daha önce indirdiğiniz kaynak koddan starter klasörünü (audio_classification/codelab2/android/starter) açın.

7c0f27882a2698ac.png

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.

  1. Android Studio araç çubuğundan Projeyi Gradle Dosyalarıyla Senkronize Et'i ( b451ab2d04d835f9.png) 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.

  1. Android Studio'da, Android Proje görünümündeki öğeler klasörünü sağ tıklayın.

7cca2c22ed8cf4c8.png

  1. 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.

95e0eca881d35f6b.png

  1. İ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.

52bda66abe201fe5.png

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.

  1. 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.

37ce1c14e9e2d1b0.png

  1. 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
}
  1. 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.

  1. Android cihazınızı bağlayıp Android Studio araç çubuğundaki Çalıştır'ı ( yürütün.png) 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.

bec397de3c8aaf32.png

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

Sorunuz mu var?

Sorun Bildir