deteksi covid-19 berdasarkan suara batuk dengan ann

Deteksi COVID-19 Berdasarkan Suara Batuk Dengan ANN

Artikel ini berusaha menjelaskan analisis audio batuk, yang menggunakan audio batuk pasien untuk deteksi COVID-19. Namun, metode ini merupakan diagnosis awal untuk pemeriksaan cepat dan tidak hadir sebagai pengganti prosedur medis lainnya.

Analisis Audio Batuk, salah satu terobosan AI dalam perawatan kesehatan, seringkali terbukti bermanfaat dalam mendiagnosis penyakit pernapasan dan paru-paru. COVID-19 (Penyakit Coronavirus 2019) telah berdampak buruk pada umat manusia, membuat deteksi dini pada pasien sangat penting untuk pengobatannya.

Analisis suara batuk sangat penting dalam mendiagnosis virus, di antara banyak gejala lainnya. Menerapkan analisis suara batuk untuk penilaian awal COVID-19 pada pasien dapat membantu karena ini merupakan cara yang sepenuhnya tanpa kontak untuk mendeteksi virus.

Untuk membangun sistem yang dapat deteksi COVID-19 melalui suara batuk pasien, kita akan melakukan pra-proses beberapa data audio batuk dan melatih model yang mengklasifikasikan audio ke dalam kategori COVID-positif atau COVID-negatif. Sekarang, kita telah mengidentifikasi bahwa kita adalah masalah klasifikasi audio.

Note

Harap diperhatikan bahwa dasar-dasar pemrosesan audio tidak tercakup dalam cakupan artikel ini. Para pembaca diharapkan memiliki pemahaman dasar tentang data audio.

Dataset

Dataset yang digunakan untuk melatih model terdiri dari hampir 170 file audio yang terdiri dari audio pasien berlabel – not_covid/covid. Data asli dan versi pra-prosesnya tersedia di kaggle atau kalian bisa cek di sini. Jangan lupa untuk mendownload datasetnya. Meskipun versi audio pra-pemrosesan juga tersedia di kumpulan data, kita akan menangani file audio dan melakukan semuanya dari langkah 0.

Metodologi

Sekarang, kita tahu bahwa audio adalah bentuk data yang tidak terstruktur dan menanganinya secara langsung tidak mungkin untuk model Pembelajaran Mesin. Oleh karena itu, kita akan melakukan ekstraksi fitur pada file audio.

Selanjutnya, kita akan melatih Artificial Neural Network (ANN) pada fitur yang diekstraksi untuk mengklasifikasikannya ke dalam kategori covid dan bukan covid. Pendekatan bertahap untuk metode yang diadopsi digambarkan di bawah ini:

arsitektur ann

Sistem Deteksi COVID-19 dengan Analisis Audio Batuk

Fitur-fitur berikut akan diekstraksi dari file audio (penjelasan singkat masing-masing diberikan bersama):

1. Koefisien cepstral frekuensi mel (MFCC) (berjumlah 20):

Koefisien cepstral frekuensi mel (MFCCs) adalah koefisien yang secara kolektif membentuk MFC. Mereka berasal dari jenis representasi cepstral dari klip audio. Perbedaan antara cepstrum dan cepstrum frekuensi Mel adalah bahwa pada yang terakhir, pita frekuensi berjarak sama pada skala Mel, yang mendekati respons sistem pendengaran manusia lebih dekat daripada pita frekuensi dengan spasi linier yang digunakan dalam spektrum normal. Pembengkokan frekuensi ini memungkinkan representasi suara yang lebih baik, misalnya, dalam kompresi audio.

2. Centroid Spektral:

Ini mengukur amplitudo di pusat spektrum distribusi sinyal melalui jendela yang dihitung dari frekuensi Fourier-Transform dan informasi amplitudo.

3. Zero-Crossing Rate:

Zero-crossing rate (ZCR) adalah tingkat transisi sinyal dari positif ke nol ke negatif atau negatif ke nol ke positif. Nilainya telah banyak digunakan dalam pengenalan suara dan pencarian informasi musik untuk mengklasifikasikan suara perkusi.

4. Frekuensi Chroma:

Fitur Chroma adalah representasi audio yang kuat di mana seluruh spektrum diproyeksikan ke 12 nampan yang mewakili 12 seminada (atau kroma) yang berbeda.

5. Spectral Roll-off:

Spectral roll-off adalah frekuensi di bawah persentase tertentu dari total energi spektral.

Semua fitur ini merupakan ciri khas audio dan dapat digunakan untuk mengkategorikan audio secara khas. Dengan demikian, kita dapat menyimpulkan bahwa metodologi yang ingin kita adopsi mengubah masalah klasifikasi audio menjadi masalah klasifikasi data numerik.

Pra-Pemrosesan Data

Pada fase pra-pemrosesan, kami akan mengekstrak nilai fitur yang disebutkan di atas dari file audio. Ini dapat dicapai dengan menggunakan library pemrosesan audio Python yaitu Librosa. Kita dapat menginstall librosa dengan menggunakan pip sebagai berikut:

pip install librosa

Implementasi Python bertahap dari fase ekstraksi fitur diberikan di bawah ini:

1. Impor Perpustakaan yang Diperlukan

Pertama kita buka text editor, lalu pindahkan dataset yang kita download tadi ke folder project kita. Setelah itu, kita buat file dengan nama main.py. Berikut ini adalah perpustakaan yang perlu kita impor di file main.py

import pandas 
import numpy 
import os
import pathlib
import csv
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, StandardScaler

2. Membuat semua Field Header untuk Dataset Final

Pada langkah ini, kita mendefinisikan file header dari dataset baru yang akan kita peroleh setelah ekstraksi fitur. Ini merupakan langkah opsional.

header = 'filename chroma_stft rmse spectral_centroid spectral_bandwidth rolloff zero_crossing_rate'
for i in range(1, 21):
    header += f' mfcc{i}'
header += ' label'
header = header.split()

3. Ekstraksi Fitur

Ini adalah langkah paling penting dari fase pra-pemrosesan. Di sini, kita akan mengonversi file audio menjadi data numerik. Seperti yang dinyatakan sebelumnya, ini dilakukan dengan menggunakan Librosa. Di sini kita membaca setiap file audio, mengekstrak fitur-fiturnya menggunakan modul bawaan Librosa dan menyimpannya dalam file CSV baru.

import librosa
file = open('data_new_extended.csv', 'w')
with file:
    writer = csv.writer(file)
    writer.writerow(header)
for i in range(tot_rows):
        source = train_csv['file_properties'][i]
        file_name = '../input/coughclassifier-trial/trial_covid/'+source
        y,sr = librosa.load(file_name, mono=True, duration=5)
        chroma_stft = librosa.feature.chroma_stft(y=y, sr=sr)
        rmse = librosa.feature.rms(y=y)
        spec_cent = librosa.feature.spectral_centroid(y=y, sr=sr)
        spec_bw = librosa.feature.spectral_bandwidth(y=y, sr=sr)
        rolloff = librosa.feature.spectral_rolloff(y=y, sr=sr)
        zcr = librosa.feature.zero_crossing_rate(y)
        mfcc = librosa.feature.mfcc(y=y, sr=sr)
        to_append = f'{source[:-3].replace(".", "")} {np.mean(chroma_stft)} {np.mean(rmse)} {np.mean(spec_cent)} {np.mean(spec_bw)} {np.mean(rolloff)} {np.mean(zcr)}'    
        for e in mfcc:
            to_append += f' {np.mean(e)}'
        
        file = open('data_new_extended.csv', 'a')
        with file:
            writer = csv.writer(file)
            writer.writerow(to_append.split())

Sekarang, mari kita load dataset yang baru dibentuk.

data1 = pd.read_csv('../input/coughclassifier-trial/data_new_extended.csv')
data1

4. Pra-Pemrosesan Set Data Baru untuk Pelatihan Model

Setelah mendapatkan data dalam bentuk numerik, sangat penting untuk menjalani pra-pemrosesan agar dianggap cocok untuk pelatihan model. Langkah-langkah berikut mencakup pra-pemrosesan data numerik:

Menghapus kolom yang tidak perlu:

# Dropping unneccesary columns
data1 = data1.drop(['filename'],axis=1)

Melakukan encoding pada label

labels = data1.iloc[:, -1]
encoder = LabelEncoder()
y = encoder.fit_transform(labels)

Melakukan Standard Scaling pada input features agar jarak nilai setiap features tidak terlalu jauh dan berada pada range [0,1]

scaler = StandardScaler()
X = scaler.fit_transform(np.array(data1.iloc[:, :-1], dtype = float))

Memisah dataset ke dalam data training dan data testing.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

Pembuatan Model

Untuk mengklasifikasikan data audio yang telah diproses sebelumnya, ada banyak model dan opsi yang tersedia; Namun, menentukan model terbaik adalah kuncinya. Karena kami memiliki data numerik (diperoleh setelah pra-pemrosesan sinyal audio), kami akan menggunakan ANN (Artificial Neural Network) yang akan dilatih pada 80% data – 20% sisanya akan digunakan untuk pengujian.

Diagram berikut menggambarkan dengan sangat rinci arsitektur model yang digunakan untuk menyelesaikan klasifikasi:

arsitektur model

Berikut tahapan untuk membangun model dan pelatihan adalah sebagai berikut:

1. Impor Perpustakaan

import tensorflow as tf
from tensorflow import keras
from keras import models
from keras import layers
from keras.layers import Dropout

2. Membuat Model

Pertama, kita mendefinisikan model berurutan dan kemudian menambahkan lapisan ke dalamnya – sesuai arsitektur yang ditentukan di atas. Harap dicatat bahwa arsitektur telah dirancang menggunakan penyetelan hyperparameter.

model = tf.keras.Sequential()
model.add(layers.Dense(128, activation='relu', input_shape=(X_train.shape[1],)))
model.add(Dropout(0.3, input_shape=(60,)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

model.summary()

Karena kita berurusan dengan data numerik yang disederhanakan, semua lapisan beroperasi dalam satu dimensi. Lapisan pertama adalah lapisan masukan. Berikut ini adalah lapisan padat pertama dengan 128 neuron.

Untuk mengatasi overfitting data pelatihan, mode ini menggunakan regularisasi dropout. Untuk ini, lapisan ketiga adalah lapisan dropout. Untuk memastikan bahwa data diuraikan dengan lebih baik, ada tiga lapisan yang lebih padat yang masing-masing terdiri dari 128, 64, dan 10 neuron.

Pilihan fungsi aktivasi: Pada lapisan keluaran, tugas klasifikasi biner diselesaikan dengan menggunakan fungsi aktivasi sigmoid. Ini adalah pilihan paling umum dalam kasus klasifikasi biner. Fungsi Aktivasi ReLU digunakan untuk semua layer padat dan dropout.

3. Penyusunan dan Pelatihan Model

Kita akan mengkompilasi model sebagai berikut:

  • Optimizer: Adam
  • Loss Function: binary_crossentropy
  • Metric: Accuracy

Selanjutnya, kita akan melatih model tersebut selama 15 epoch.

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(X_train, y_train, epochs=15)

Untuk akurasi pelatihan yang didapat adalah 98%.

4. Testing Model

Sekarang, kita akan menguji model dengan menggunakan dataset testing.

test_loss, test_acc = model.evaluate(X_test,y_test)

Untuk akurasi pengujian yang didapat adalah 94%.

Penutup

Berdasarkan performa teknologi kami pada set data pelatihan/validasi dan prospektif, kami menyimpulkan bahwa memang mungkin untuk mendiagnosis suara batuk COVID-19 secara akurat dan objektif saja menggunakan analisis suara batuk.

Dimungkinkan untuk menambah fitur berbasis batuk dengan gejala sederhana yang dapat diamati oleh orang tua yang menargetkan peningkatan kinerja lebih lanjut. Meskipun tingkat akurasinya cukup tinggi dan dapat diterima – harus dicatat bahwa penelitian ini mengusulkan model hanya untuk deteksi COVID-19 awal dan hasilnya harus dianggap sebagai indikasi.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top