Membuat Detektor Suasana Hati Anjing Menggunakan Google Cloud dan Raspberry Pi Berbasis Lengan

KDPV dibintangi Bob, lagu Deniskin's



Today , smartphone , jam tangan pintar dan pelacak kebugaran ada di mana-mana. Mereka berguna untuk memantau diri kita sendiri, lingkungan kita, dapat mengirim pemberitahuan dan bahkan mendeteksi masalah serius seperti fibrilasi atrium. Dan kami hanya di awal gerakan pemantauan mikro.



Pada artikel ini, kita akan melihat ide tentang pendeteksi suasana hati anjing. Kami akan membuat perangkat yang mendengarkan suara sekitar dan, jika ada anjing, mencoba menentukan suara apa yang dibuatnya: gonggongan ramah, rengekan ketakutan, atau geraman agresif. Tergantung pada preferensi pengguna, perangkat akan bergetar saat dianggap perlu untuk memeriksa anjing. Ini mungkin bisa membantu pemilik melacak anjing mereka saat mereka jauh dari pendengaran. Tentu saja, ini hanyalah sebuah prototipe, dan hasil dari idenya ini belum teruji dalam kondisi nyata.



Kami akan menggunakan komputer Raspberry Pi berbasis Arm untuk membuat prototipe perangkat ini. Ini adalah platform yang bagus untuk mengimplementasikan pembelajaran mesin pada perangkat pengguna akhir. Prosesor Arm tidak hanya digunakan di Raspberry Pi, mereka juga berfungsi di banyak ponsel, konsol game seluler, dan sejumlah perangkat lain. Prosesor hemat energi di komputer ini memiliki daya pemrosesan yang cukup dan dapat dibeli dengan harga terjangkau di mana saja.






Sayangnya, sejauh ini kemampuan perangkat kecil sering kali dibatasi oleh daya pemrosesan, kurangnya konektivitas Internet, dan, biasanya, penyimpanan data dalam jumlah kecil. Meskipun perangkat tersebut dapat menyelesaikan banyak pengamatan dalam waktu singkat, jika tidak ada koneksi Internet karena keterbatasan penyimpanan, seringkali tidak mungkin untuk menyimpan semua pengamatan untuk sinkronisasi nanti. Selain itu, mengirim data dalam jumlah besar secara nirkabel juga menghabiskan sedikit daya baterai.



Untuk memaksimalkan sinyal yang direkam, sangat penting untuk memindahkan tahap pemrosesan sinyal ke perangkat pengguna akhir itu sendiri.



Selama dekade terakhir, pembelajaran mesintelah membuat kemajuan yang signifikan dalam keakuratan banyak tugas pemrosesan sinyal seperti deteksi objek dalam gambar, pengenalan gerakan video, dan pengenalan ucapan. Hari ini kita hanya menggaruk permukaan yang mungkin. Menggunakan ML di perangkat kecil menawarkan banyak cara lain untuk meningkatkan kehidupan masyarakat.



Mulailah



Kami akan melihat Google AudioSet untuk pelatihan . Ini adalah koleksi terbesar klip audio 10 detik dari video YouTube. Data disediakan dalam format yang telah diproses yang kompatibel dengan kit starter YouTube-8M . Ini akan digunakan untuk melatih model yang mampu mengklasifikasikan klip audio.



Mungkin perlu waktu untuk melatih model ini, jadi kami akan memindahkan pemrosesan ke platform AI Google Cloud.dan setelah selesai, muat modelnya. Dengan semua komponen siap, kami akan mentransfer model ke Raspberry Pi. Kami juga akan membuat skrip Python untuk menangkap masukan dari mikrofon yang terhubung dan mencoba memprediksi setiap detik suara anjing yang diidentifikasi.



Membuat model yang diinginkan



Pertama, mari buat folder di suatu tempat untuk semua pekerjaan yang akan kita lakukan.



Untuk membuat model, set data harus dimuat . Ini tersedia dari tautan di bawah tajuk dataset Features. Cara termudah adalah mengunduh satu arsip arsip gzip ke komputer lokal Anda.

 

Kemudian unzip dan ekstrak file. Ada tiga folder dalam paket ini: satu berisi set pelatihan berimbang, yang lain berisi set evaluasi, dan yang ketiga berisi set pelatihan tak seimbang. Setiap folder berisi lebih dari 4000 file.



File TFRecord berisi tag yang telah diproses sebelumnya. Nama file dimulai dengan dua karakter pertama dari ID video YouTube. Karena ID video peka huruf besar kecil, Anda harus berhati-hati saat mengekstrak file jika sistem file lokal tidak membedakan huruf besar / kecil, seperti di Windows.



Saran yang berguna! Program 7zip digunakan untuk mengekstrak file sifat tersebut. 7zip mendukung opsi baris perintah. Ini memungkinkan Anda untuk mengganti nama file yang ada secara otomatis, memastikan bahwa file diganti namanya, bukan ditimpa.



Setelah menerima set data yang diekstrak dengan benar, kami menggandakan repositori YouTube-8M Githubyang berisi kode untuk melatih model. Direkomendasikan untuk mengkloningnya ke dalam folder yang dibuat untuk dataset yang diekstrak.



Kemudian perbarui file reader.py di folder YouTube-8M untuk mendukung file AudioSet TFRecord lama. Proses ini mencakup dua tahap:



  • Ubah semua kemunculan "id" menjadi "video_id".
  • Ubah nilai default parameter num_classes menjadi 527. Angka ini sesuai dengan jumlah kategori berbeda dalam kumpulan data audio ini.



Pengenal perlu diubah di lima tempat dan num_class di dua.



Untuk menjalankan program ini, terapkan lingkungan virtual Python 3.6+ baru dan instal tensorflow == 1.14. Sekarang juga mudah untuk mengatur persyaratan  untuk skrip keluaran yang akan kita buat di langkah berikutnya. Meskipun nomor versi berbeda untuk setiap paket, satu-satunya persyaratan yang sulit adalah menggunakan tensorflow versi 1.14. Untuk paket lain, Anda cukup menginstal versi terbaru.



Pada tahap ini, Anda siap melatih model. Pertama, jalankan skrip pelatihan secara lokal untuk mengujinya. Tidak butuh waktu lama untuk set pelatihan yang seimbang. Buka jendela prompt perintah, navigasikan ke folder yang dibuat di langkah pertama bagian ini, dan masukkan perintah berikut (perhatikan bahwa ini semua satu baris):



python youtube-8m/train.py \ --train_data_pattern=./audioset_v1_embeddings/bal_train/*.tfrecord \
--num_epochs=100 \
--feature_names="audio_embedding" \
--feature_sizes="128" \
--frame_features \
--batch_size=512 \
--train_dir ./trained_models/yt8m \
--model=FrameLevelLogisticModel \
--start_new_model
      
      





Perhatikan juga bahwa meskipun karakter baris baru \ berfungsi dengan baik pada sistem Linux, mereka harus diganti dengan karakter ^ pada Windows.



Setelah 100 epoch, ini berlanjut hingga mencapai kira-kira langkah 8500. FrameLevelLogisticModel akan beroperasi dengan akurasi maksimum sekitar 58–59%. Di sistem pengujian kami, seluruh proses hanya membutuhkan waktu kurang dari 20 menit.



Model lain disertakan dengan starter kit ini, termasuk DbofModel dan LstmModel. Masing-masing akan memberikan keakuratan yang hampir sempurna pada data pelatihan, tetapi keduanya akan sangat cocok pada set pelatihan yang seimbang saat diuji dengan set skor.



Latih model di cloud



Alternatifnya adalah melatih pada kumpulan suara lengkap menggunakan kumpulan data yang tidak seimbang. Dalam hal ini, pemrosesan akan memakan waktu lebih lama, tetapi GPU yang didasarkan pada platform AI Google Cloud dapat membantu secara signifikan. Model logistik sederhana mencapai akurasi sekitar 88% pada set pelatihan yang tidak seimbang.



Untuk menjalankan proses ini di cloud, daftar dan masuk ke akun platform Google Cloud AI Anda, aktifkan penagihan, dan unduh alat baris perintah yang dijelaskan di sini .



Setelah semuanya disiapkan, buka konsol cloud, buat proyek baru dan keranjang penyimpanan baru. Nama keranjang penyimpanan harus unik secara global. Paling mudah jika itu menyertakan nama akun pengguna. Muat seluruh folder audioset_v1_embeddings dan youtube-8m ke dalam keranjang penyimpanan ini.



Jika dilakukan dengan benar, kita seharusnya dapat membuka shell Google Cloud SDK dan menjalankan perintah di bawah ini untuk memulai. Pastikan untuk mengganti nama-proyek-Anda dan nama-keranjang-penyimpanan dengan nilai akun yang sesuai. Ini ditulis untuk sistem berbasis Unix. Lakukan koreksi yang sesuai untuk sistem Windows.



BUCKET_NAME=gs://${USER}_yt8m_train_bucket

gsutil mb -p your-project-name $BUCKET_NAME

JOB_NAME=yt8m_train_$(date +%Y%m%d_%H%M%S)

gcloud --verbosity=debug ml-engine jobs submit training $JOB_NAME 
--python-version 3.5  --package-path=youtube-8m --module-name=youtube-8m.train --staging-bucket=$BUCKET_NAME --region=us-east1 --config=youtube-8m/cloudml-gpu.yaml -- --train_data_pattern='gs://your-storage-bucket-name/audioset_v1_embeddings/unbal_train/*.tfrecord' --model=FrameLevelLogisticModel --train_dir=$BUCKET_NAME/yt8m_train_frame_level_logistic_model
      
      





Sekali lagi, perhatikan bahwa panggilan terakhir ke gcloud adalah satu perintah panjang dengan opsi konfigurasi.

Ini akan memakan waktu lebih dari setengah hari untuk menyelesaikannya. Setelah semua dikatakan dan selesai, muat keluaran model dari keranjang penyimpanan cloud Anda:



$BUCKET_NAME/yt8m_train_frame_level_logistic_model
      
      





Eksekusi di Raspberry Pi



Kami mendemonstrasikan aplikasi ini pada komputer Raspberry Pi 4 berbasis Arm yang menjalankan OS Raspbian dengan Python 3. Instal PyAudio di perangkat ini. Jika ada masalah, jawaban ini akan membantu.



Hubungkan mikrofon USB (dengan headset opsional untuk output audio untuk pengujian). Pada titik ini, mikrofon paling mudah dikonfigurasi sebagai perangkat default. Buka desktop Raspian Anda dan klik ikon speaker di sebelah jam di sudut kanan atas lalu pilih mikrofon yang akan digunakan.



Langkah penting terakhir adalah mendapatkan instrumen yang memproses audio mentah dengan kompresi 128-D yang sama dengan AudioSet. Alat yang digunakan untuk ini termasuk dalam repositori Github dari model Tensorflow yang disebutkan sebelumnya. Ikuti prosedur penginstalan yang sama persis di Pi, dan jangan lupa untuk menginstalnya di instance Python 3. Selain itu, clone repositori ini ke dalam folder yang sama tempat Anda menggandakan dataset dan repositori YouTube-8M.



Jalankan skrip vggish_smoke_test.py untuk memastikan semuanya dipasang dengan benar.

 

Sekarang salin model yang diunduh dari platform Google Cloud ke folder dengan skrip mendengarkan mikrofon .



Jalankan skrip ini. Ini akan mulai mendengarkan pada perangkat default dan menulis prediksi ke konsol.

 

Jika perangkat yang diinginkan tidak dapat dikonfigurasi sebagai perangkat default, jalankan perintah "python model-run.py list" untuk menampilkan daftar semua perangkat menurut indeks. Temukan indeks perangkat, lalu jalankan kembali perintah dengan indeks itu. Contohnya:



python model-run.py 3
      
      





Salin seluruh konten folder ini ke Raspberry Pi Anda dan jalankan kembali skrip dengan kode tersebut. Sedetik sekali, harus ada prediksi tentang seberapa banyak suara yang menurut perangkat dibuat oleh anjing! Fase penarikan dapat diganti dengan mekanisme apa pun yang paling sesuai untuk perangkat dan pengguna target.



Kesimpulan



Hari ini kami melihat satu kemungkinan aplikasi pembelajaran mesin berbasis suara yang didukung oleh perangkat seluler berbasis Arm. Konsep ini perlu diuji lebih detail sebelum masuk ke pasar, tetapi kemampuan untuk menjalankan model deteksi audio yang sewenang-wenang di perangkat seluler sudah ada.

 

Data AudioSet mencakup 527 tag dengan ontologi suara perkotaan yang kuat. Ada juga kemungkinan untuk meningkatkan pemrosesan suara sebelum meneruskannya ke prediktor kami, seperti menerapkan algoritme pesta koktail dan meneruskan setiap sumber suara melalui filter vggish .



Menjalankan detektor suasana hati anjing pada Raspberry Pi dengan mikroprosesor Arm sangat mengasyikkan. Untuk membuatnya lebih menarik, Anda dapat mengubah dan mendigitalkan model menggunakan fitur dalam paket TensorFlow, lalu menjalankannya pada mikrokontroler Arm berbiaya rendah dan berdaya rendah menggunakan paket mikrokontroler TensorFlow Lite .



Kedengarannya menarik? Lakukan eksperimen dan cari tahu masalah apa yang dapat diselesaikan dengan pendekatan ini. Anda tidak pernah tahu seberapa besar Anda dapat memengaruhi kehidupan seseorang. Dan untuk mengetahui apa lagi yang mampu dilakukan pembelajaran mesin di tangan yang benar, datanglah untuk belajar (tentu saja tidak melupakan kode promo HABR).





Profesi dan kursus lainnya
PROFESI








KURSUS







gambar



All Articles