Klasifikasi Suara dengan TensorFlow by unsplash
Anda dapat membuat solusi cerdas yang mencakup area yang sangat luas dengan solusi ini dan platform IoT.
Ada banyak alat yang dapat mendeteksi, menguraikan, dan menindaklanjuti ucapan manusia. Namun, saat kami mencoba menemukan alat yang dapat mengidentifikasi suara seperti ucapan, hewan, atau musik, kami kesulitan menemukan alat yang berfungsi. Jadi kami menciptakan milik kami sendiri. Kami akan menunjukkan cara menggunakan algoritme pembelajaran mesin Tensorflow untuk membangun beberapa contoh proyek klasifikasi suara di artikel ini.
Kami berbicara tentang alat yang kami gunakan, kesulitan yang kami temui, cara kami melatih model TensorFlow, dan cara menjalankan proyek sumber terbuka kami di artikel ini. Selain itu, kami telah memberikan hasil pengenalan ke platform IoT DeviceHive untuk digunakan dalam layanan cloud untuk aplikasi pihak ketiga. Kami harap Anda dapat memperoleh manfaat dari keahlian kami dan memanfaatkan alat kami.
Memilih Alat dan Model Klasifikasi
Untuk mulai bekerja dengan jaringan saraf, kita harus memilih perangkat lunak. Analisis Audio Python adalah solusi pertama yang cocok yang kami temukan.
Dataset pelatihan yang baik adalah masalah utama dalam pembelajaran mesin. Ada banyak kumpulan data untuk klasifikasi musik dan pengenalan suara, tetapi hanya sedikit untuk klasifikasi suara acak. Kami menemukan kumpulan data suara perkotaan setelah melakukan beberapa penelitian.
Setelah beberapa pengujian, kami mengalami masalah berikut:
- pyAudioAnalysis tidak cukup mudah beradaptasi. Tidak memerlukan banyak parameter, dan beberapa di antaranya dihitung secara otomatis. misalnya jumlah tes persiapan berdasarkan jumlah tes dan Anda tidak dapat mengubah ini.
- Hanya ada sepuluh kelas dalam kumpulan data, dan semuanya “perkotaan”.
Google AudioSet muncul sebagai opsi kami berikutnya. Itu dapat diunduh dalam dua format dan didasarkan pada segmen berlabel video YouTube:
- Catatan CSV yang menggambarkan, untuk setiap fragmen, ID video YouTube, waktu mulai, waktu selesai, dan setidaknya satu nama.
- File Rekam TensorFlow digunakan untuk menyimpan fitur audio yang diekstrak.
Model YouTube-8M kompatibel dengan fitur ini. Model TensorFlow VGGish juga tersedia sebagai ekstraktor fitur dalam solusi ini. Hasilnya, ini memenuhi sebagian besar kebutuhan kami dan merupakan pilihan terbaik bagi kami.
Model Pelatihan
Memahami cara kerja antarmuka YouTube-8M adalah tugas selanjutnya. Itu dibuat untuk bekerja dengan video, tapi untungnya juga bisa bekerja dengan audio. Meskipun pustaka ini cukup dapat diadaptasi, jumlah kelas sampel telah ditentukan sebelumnya. Akibatnya, kami sedikit mengubah ini untuk menerima jumlah kelas sebagai parameter.
YouTube-8M dapat bekerja dengan dua jenis data: fitur bingkai dan fitur gabungan. Seperti disebutkan sebelumnya, Google AudioSet dapat menyediakan data sebagai fitur. Kami menyelidiki lebih lanjut dan menemukan bahwa fitur disajikan dalam format bingkai. Langkah selanjutnya adalah memilih model yang akan dilatih.
Sumber Daya, Waktu, dan Akurasi
Memahami cara kerja antarmuka YouTube-8M adalah tugas selanjutnya. Itu dibuat untuk bekerja dengan video, tapi untungnya juga bisa bekerja dengan audio. Meskipun pustaka ini cukup dapat diadaptasi, jumlah kelas sampel telah ditentukan sebelumnya. Akibatnya, kami sedikit mengubah ini untuk menerima jumlah kelas sebagai parameter.
YouTube-8M dapat bekerja dengan dua jenis data: fitur bingkai dan fitur gabungan. Seperti disebutkan sebelumnya, Google AudioSet dapat menyediakan data sebagai fitur. Kami menyelidiki lebih lanjut dan menemukan bahwa fitur disajikan dalam format bingkai. Langkah selanjutnya adalah memilih model yang akan dilatih.
Memilih Modelnya
Berikut adalah daftar lengkap model YouTube-8M dengan deskripsi. Model tingkat bingkai harus digunakan karena data pelatihan kami dalam format bingkai. Kami menerima kumpulan data tiga bagian dari Google AudioSet: evaluasi, kereta tidak seimbang, dan kereta seimbang. Informasi lebih lanjut tentang mereka dapat ditemukan di sini.
Versi YouTube-8M yang diubah digunakan untuk persiapan dan penilaian. Anda bisa mendapatkannya di sini.
Kereta Seimbang
Beginilah tampilan perintah pelatihan:
python train.py –train_data_pattern=/path_to_data/audioset_v1_embeddings/bal_train/*.tfrecord –num_epochs=100 –learning_rate_decay_examples=400000 –feature_names=audio_embedding –feature_sizes=128 –frame_features –batch_size=512 –num_classes=527 –train_dir=/path_to_logs –model=ModelName
Simak hasil pelatihannya:


kereta seimbang by iotforall
Model name | Training time | Training last step hit | Evaluation average hit |
Logistic | 14m 3s | 0.5859 | 0.5560 |
Dbof | 31m 46s | 1.000 | 0.5220 |
Lstm | 1h 45m 53s | 0.9883 | 0.4581 |
Seperti yang bisa dilihat, kami tampil baik selama fase pelatihan; namun, ini tidak menjamin bahwa kami akan bekerja dengan baik selama keseluruhan evaluasi.
Kereta Api Tidak Seimbang
Mari kita coba kumpulan data dengan kereta yang tidak seimbang. Karena memiliki sampel yang jauh lebih banyak, kami akan meningkatkan jumlah waktu pelatihan menjadi 10 (setidaknya menjadi 5 karena pelatihan membutuhkan waktu yang signifikan).


Kereta Api Tidak Seimbang by iotforall
Model name | Training time | Training last step hit | Evaluation average hit |
Logistic | 2h 4m 14s | 0.8750 | 0.5125 |
Dbof | 4h 39m 29s | 0.8848 | 0.5605 |
Lstm | 9h 42m 52s | 0.8691 | 0.5396 |
Lebih Lanjut Tentang Pelatihan
YouTube-8M mengambil banyak batasan dan banyak di antaranya memengaruhi siklus persiapan.
Misalnya, Anda dapat menyetel kecepatan pembelajaran dan jumlah usia yang akan banyak mengubah interaksi persiapan. Ada juga tiga kemampuan berbeda untuk memperkirakan kerugian dan banyak faktor bermanfaat lainnya yang dapat Anda atur dan ubah untuk mengerjakan hasilnya.
Menggunakan Model Terlatih dengan Perangkat Penangkap Audio
Saatnya menambahkan beberapa kode untuk berinteraksi dengan model yang dilatih sekarang setelah kita memilikinya.
Tangkap Mikrofon
Kami perlu mendapatkan data audio dari mikrofon dengan cara tertentu. PyAudio akan digunakan. Ini dapat digunakan di sebagian besar platform dan memiliki antarmuka pengguna yang mudah.
Persiapan Suara
Seperti yang dinyatakan sebelumnya, model VGGish TensorFlow akan berfungsi sebagai ekstraktor fitur. Penjelasan singkat mengenai proses transformasi tersebut adalah sebagai berikut:
Ilustrasi “kulit anjing” dataset UrbanSound digunakan untuk visualisasi.
Sampel ulang audio ke mono pada 16 kHz.

Persiapan Suara by iotforall
Hitung spektogram menggunakan magnitudo Transformasi Fourier Waktu Pendek dengan ukuran jendela 25 ms, lompatan jendela 10 ms, dan jendela Hann periodik.
Mengklasifikasikan
Terakhir, diperlukan sarana untuk berkomunikasi dengan jaringan saraf dan mendapatkan hasilnya.
Sebagai ilustrasi, kami akan memodifikasi antarmuka YouTube-8M untuk menghilangkan langkah serialisasi dan deserialisasi.
Hasil dari usaha kami dapat dilihat disini. Mari kita periksa lebih dekat.
Instalasi
PyAudio memerlukan instalasi libportaudio2 dan portaudio19-dev agar berfungsi.
Pustaka Python diperlukan. Menggunakan pip, Anda dapat menginstalnya.
instal pip -r requirements.txt
Menjalankan
1. Memproses File Audio Prarekam
Jalankan python parse_file.py path_to_your_file.wav, dan Anda akan melihat sesuatu seperti Pidato di terminal: 0,75, Musik: 0,12, Ruangan besar atau lorong di dalam: 0,03 Hasilnya ditentukan oleh file input. Prediksi yang dibuat oleh jaringan saraf diwakili oleh nilai-nilai ini. Nilai yang lebih tinggi menunjukkan kemungkinan yang lebih besar bahwa file input termasuk dalam kelas tersebut.
2. Menganalisis dan Memproses Data Mic
Proses yang akan menangkap data dari mikrofon Anda tanpa batas dimulai oleh python capture.py. Ini akan secara otomatis mengirim data ke antarmuka klasifikasi setiap 5-7 detik. Hasilnya terlihat jelas pada ilustrasi sebelumnya.
Jika Anda menjalankannya dengan –save_path=/path_to_samples_dir/, semua data yang diambil akan disimpan sebagai file wav di direktori yang disediakan. Jika Anda ingin menguji model yang berbeda menggunakan contoh yang sama, fungsi ini sangat membantu. Untuk informasi tambahan, gunakan parameter –help.
3. Antarmuka Web
Antarmuka web langsung dibangun ke dalam python daemon.py dan dapat diakses secara default di http://127.0.0.1:8000. Kode yang sama digunakan seperti pada contoh sebelumnya.
Integrasi Layanan IoT
Integrasi dengan infrastruktur IoT adalah yang terakhir, namun tidak kalah pentingnya. Status dan konfigurasi klien DeviceHive dapat ditemukan di halaman indeks jika Anda menggunakan antarmuka web yang disebutkan di bagian sebelumnya. Prediksi akan dikirim sebagai notifikasi ke perangkat yang ditentukan selama klien terhubung.