Model CNN Untuk Mendeteksi COVID-19 – Menuju AI – Teknologi, Sains, dan Teknik Terbaik

Penulis: Tarishi Singh

Pembelajaran Mendalam

Membangun version CNN dengan API untuk menampilkan COVID-19 positif dan ordinary melalui pemindaian Radiografi Dada PA.

Foto oleh Fusion Medical Animation di Unsplash

pengantar

Penyakit COVID-19 adalah penyakit menular dan menular yang disebabkan oleh virus korona yang baru ditemukan. Orang biasanya merasakan demam sedang, batuk, kelelahan, masalah pernapasan, dan nyeri sendi. Tapi, ini tidak cukup untuk mendiagnosis penyakit ini. Individu yang berbeda juga menunjukkan gejala yang berbeda.

Banyak version prediksi wabah untuk COVID-19 digunakan oleh otoritas terkait, dan keputusan yang diinformasikan dan direncanakan dibuat berdasarkan prediksi tersebut. Namun, karena tingkat ketidakpastian yang tinggi dan kurangnya information penting, model standar menunjukkan akurasi yang rendah. Karena COVID-19 memiliki sifat gejala yang sangat kompleks, bergantung sepenuhnya pada hasil tes individu menjadi sangat menantang.

Establish information Number 1

Menggunakan complete 192 gambar dari’covid-chestxray-dataset’,’ memisahkannya menjadi’train’ dan’evaluation’ di document’train_path’ dan’val_path’, masing-masing. Memiliki 96 gambar yang masing-masing dibagi dalam”COVID’dan’ Conventional’.

! unrar x CovidDataset.rar ? Dl = 0 TRAIN_PATH =”CovidDataset / Train” VAL_PATH =”CovidDataset / Evaluation”

Gambar sampel:

Ara. [1] Rontgen dada ordinary Ara. [2] Rontgen Dada COVID-19

Number 2 Mengimpor perpustakaan

Mengimpor beberapa pustaka penting untuk membangun version.

Import numpy as np import matplotlib.pyplot as plt import keras out of keras.layers import * from keras.models import * from keras.preprocessing import picture

Number 3 Membangun Model

Model ini mengambil enter gambar 224 × 224 dan mengikuti aliran CNN standar. Menambahkan beberapa lapisan lapisan konvolusional, lapisan aktivasi, meratakan lapisan dengan lapisan dropout untuk mencegah overfitting.

Version = Sequential ()
model.add (Conv2D (32, kernel_size = (3,3)( activation =’relu’, input_shape = (224,224,3)))
model.add (Konv2D (64, (3,3), aktivasi =’relu’))
model.add (MaxPooling2D (ukuran_koleksi = (2,2)))
model.add (Dropout (0.25)) model.add (Konv2D (64, (3,3), aktivasi =’relu’))
model.add (MaxPooling2D (ukuran_koleksi = (2,2)))
model.add (Dropout (0.25)) model.add (Konv2D (128, (3,3), aktivasi =’relu’))
model.add (MaxPooling2D (ukuran_koleksi = (2,2)))
model.add (Dropout (0.25)) model.add (Ratakan ())
model.add (Padat (64, aktivasi =’relu’))
model.add (Putus Sekolah (0,5))
model.add (Dense (1, 2 activation =’sigmoid’)) model.compile (reduction = keras.losses.binary_crossentropy, optimizer =’adam’, metrics =[‘accuracy’])

Ringkasan version dapat ditunjukkan oleh:

Model.summary () Model:”sequential” _________________________________________________________________ Twist (tipe) Parameter Bentuk Output # =============================== ================================== konv2d (Konv2D) (Tidak ada, 222, 222, 32) 896 _________________________________________________________________ konv2d_1 (Conv2D) (Tidak ada, 220, 220, 64) 18496 _________________________________________________________________ max_pooling2d (MaxPooling2D) (Tidak ada, 110, 110, 64) 0 _________________________________________________________________ putus sekolah (Putus Sekolah) (Tidak ada, 110, 110, 64) 0 _________________________________________________________________ konv2d_2 (Konv2D) (Tidak ada, 108, 108, 64) 36928 _________________________________________________________________ max_pooling2d_1 (MaxPooling2 (Tidak ada, 54, 54, 64) 0 _________________________________________________________________ putus sekolah_1 (Putus sekolah) (Tidak ada, 54, 54, 64) 0 _________________________________________________________________ konv2d_3 (Konv2D) (Tidak ne, 52, 52, 128) 73856 _________________________________________________________________ max_pooling2d_2 (MaxPooling2 (Tidak ada, 26, 26, 128) 0 _________________________________________________________________ putus sekolah_2 (Putus sekolah) (Tidak ada, 26, 26, 128) 0 _________________________________________________________________ rata (Ratakan) (Tidak ada, 86528) 0 _________________________________________________ padat (Padat) (Tidak ada, 64) 5537856 _________________________________________________________________ putus sekolah_3 (Putus sekolah) (Tidak ada, 64) 0 _________________________________________________________________ padat_1 (Padat) (Tidak ada( 1) 65 ================== =============================================== Parameter complete: 5.668.097
Paramedis yang bisa dilatih: 5.668.097
Parameter yang tidak bisa dilatih: 0 _________________________________________________________________

Untuk mendapatkan versi diagram:

Dari tensorflow.keras.utils impor plot_model
plot_model (version )
Ara. [3] Penggambaran berbagai lapisan

Number 4 Pelatihan dan Validasi Model

Sebelum pelatihan, pemrosesan gambar dilakukan. Gambar 224 × 224 diubah ukurannya, disesuaikan dalam ketajaman, diperbesar, dan dibalik secara flat, serta dibagi menjadi 32 ukuran tumpukan.

Number Melatih
train_datagen = image.ImageDataGenerator (
skala ulang = 1. ) / / / 255,
shear_range = 0,2, respectively
zoom_range = 0,2, respectively
horizontal_flip = Benar,)
test_dataset = image.ImageDataGenerator (skala ulang = 1. ) / / 255) train_generator = train_datagen. Flow_from_directory (‘CovidDataset / Train’,
target_size = (224.224),
batch_size = 32, respectively
class_mode =’binary’)

Model divalidasi dari direktori’CovidDataset / Val’ dengan 10 epochs, 6 percent measure menghasilkan reduction 0.1404, akurasi 0.9531, kehilangan validasi 0.1182, dan akurasi validasi 0.9531.

validation_generator = test_dataset. Flow_from_directory (
‘CovidDataset / / Val’, respectively
target_size = (224.224),
batch_size = 32, respectively
class_mode =’binary’) hist = model.fit_generator (
train_generator,
steps_per_epoch = 6, respectively
zaman = 10, respectively
validation_data = validation_generator, respectively
validation_steps = two )

Output dari fase pelatihan:

Kerugian dan akurasi dengan setiap zaman

Number 5 Visualisasi dan Evaluasi Model

Visualisasi merupakan langkah penting karena membantu kami mengevaluasi kinerja version secara holistik. Petak utama untuk evaluasi adalah akurasi dan kerugian.

Angka [4] dan [5] menunjukkan akurasi dan kerugian sesuai dengan masing-masing periode pelatihan dan validasi. Akurasi version bervariasi dengan jumlah epoch dan juga karena regularisasi yang dilakukan oleh metode dropout. Ketika jumlah epoch meningkat secara konsekuen, akurasi meningkat, dan dengan demikian, persen kerugian menurun. Model mendapatkan akurasi tertinggi yang dapat dicapai tanpa overfitting, pelatihan dihentikan setelah delapan periode, dan di bawah titik ini, akurasi klasifikasi yang diukur adalah 96%. Setelah itu, kerugian validasi dan pelatihan mulai rata, dan kesenjangan kerugian meningkat di antara keduanya.

plt.figure (figsize = (13,7))
plt.plot (hist.history[“accuracy”])
plt.plot (hist.history[“val_accuracy”])
plt.title (“Akurasi Model”)
plt.ylabel (“Akurasi”)
plt.xlabel (“Epoch”)
plt.legend ([“Train”, “Test”], loc = “kiri atas”)

Potongan kode di atas adalah untuk grafik’akurasi vs. epoch’. Seperti yang dipamerkan, akurasi meningkat dengan setiap epoch yang membuktikan performa yang baik.

Ara. [4] Akurasi VS Gambar Epochplt. (Figsize = (13,7))
plt.plot (hist.history[“loss”])
plt.plot (hist.history[“val_loss”])
plt.title (“Model reduction”)
plt.ylabel (“Rugi”)
plt.xlabel (“Epoch”)
plt.legend ([“Train”, “Test”], loc =”kiri atas”)

Potongan kode di atas adalah untuk storyline untuk menampilkan Kerugian version dengan setiap epoch. Grafik di bawah ini menunjukkan penurunan kerugian dengan setiap epoch.

Ara. [5] Rugi VS Waktu

Number 6 Confusion Matrix

Matriks konfusi untuk prediksi COVID-19 dan kondisi Conventional untuk citra scan dada. Ini mewakili sebagian kecil kesalahan klasifikasi untuk kedua kategori. Di sini terlihat bahwa citra dada kategori Conventional diklasifikasikan dengan benar dengan akurasi 95%. Padahal COVID-19 salah diklasifikasikan dalam beberapa kasus. Saat ini diklasifikasikan dengan persentase 90. Hal ini disebabkan sedikitnya jumlah sampel pelatihan untuk kelas tersebut. Secara keseluruhan, dapat dikatakan bahwa itu adalah akurasi yang layak untuk klasifikasi.

Impor mereka
f, ax = plt.subplots (figsize = (6,6))
sns.heatmap (cm, annot = Legitimate, linewidths = 0.3, cmap =”Blues”, annot_kws = {“dimensions”: 18}, linecolor =”black”, fmt =”.0f”, ax = ax)
plt.xlabel (“Prediksi”)
plt.title (“Confusion Matrix”)
plt.ylabel (“Benar”)
plt.show ()
Ara. [6] Confusion Matrix

Berdasarkan matriks kebingungan, menghitung presisi, perolehan, dan skor f1 untuk setiap kelas gambar dada. Itu diwakili dalam Tabel di bawah ini

Presisi mengingat dukungan f1-skor

0 0,99 0,94 0,96 96
1 0,94 0,99 0,96 96

akurasi 0,96 192
makro rata-rata 0,96 0,96 0,96 192
rata-rata tertimbang 0,96 0,96 0,96 192

Number 7 API

API dibuat sedemikian rupa sehingga membutuhkan masukan rontgen dada dari pengguna dan memeriksa kondisi dada berdasarkan gambar masukan menggunakan version terlatih dengan lapisan tambahan. API dibuat dalam bahasa Python menggunakan pustaka Tflitebahasa, TensorFlow, dan Pyinstaller pada alat JupyterLab.

Ara. [7] Deteksi Positif COVID-19Ara. [8] Deteksi Regular COVID-19

Penafian: Sebagai kesimpulan, saya ingin menyebutkan bahwa version ini hanya untuk tujuan penelitian di bidang pembelajaran mesin dan tidak diperhitungkan sebagai analysis medis resmi. Untuk informasi lebih lanjut tentang virus corona, kunjungi situs net resmi WHO.

Model CNN Untuk Mendeteksi COVID-19 awalnya diterbitkan di Limit AI on Moderate, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Towards AI