Detektor COVID-19 otomatis dari Gambar Fluorografi



Dalam panduan ini, Anda akan belajar cara mendeteksi COVID-19 secara otomatis dalam dataset yang dipilih secara khusus menggunakan Keras, TensorFlow, dan pembelajaran mendalam.

Seperti kebanyakan orang di dunia saat ini, saya dengan tulus prihatin dengan COVID-19. Saya perhatikan bahwa saya mulai terus-menerus menganalisis kesehatan pribadi saya dan mencurigai bahwa saya sudah terinfeksi.

Semakin saya khawatir tentang hal ini, semakin banyak kombinasi menyakitkan dari gejala nyata dengan hipokondria memanifestasikan dirinya:

  • Saya bangun di pagi hari, saya merasa sedikit kewalahan.
  • Ketika saya bangun dari tempat tidur, saya sudah mengalami kebocoran dari hidung saya (walaupun sekarang diketahui bahwa pilek bukan merupakan gejala COVID-19).
  • Ketika dia sampai di kamar mandi untuk mengambil serbet, dia juga batuk.

Awalnya saya tidak terlalu mementingkan ini - saya alergi terhadap serbuk sari, dan karena cuaca hangat di pantai timur, musim semi datang awal tahun ini. Kemungkinan besar, alergi saya baru saja pecah.

Tetapi gejalanya tidak membaik sepanjang hari.

Dan di sini saya duduk di sini, menulis manual ini dengan termometer di mulut saya; dan melihat ke bawah menunjukkan 37,4 ยฐ C. Suhunya lebih tinggi dari biasanya 36,3 ยฐ C. Semuanya di atas 37,2 ยฐ C, saya sudah mempertimbangkan sedikit demam.

Batuk dan sedikit demam? Bisa jadi COVID-19 ... atau hanya alergi saya.

Mustahil untuk mengetahuinya tanpa ujian, dan justru "ketidaktahuan" inilah yang membuat situasi ini begitu berbahaya bagi keseimbangan mental.

Bagi orang tidak ada yang lebih mengerikan daripada yang tidak diketahui.

Terlepas dari semua ketakutan, saya mencoba untuk menyingkirkan mereka dengan cara yang rasional. Saya berusia lebih dari tiga puluh tahun, saya dalam kondisi sangat baik, sistem kekebalan tubuh saya sangat kuat. Saya akan pergi ke karantina (untuk berjaga-jaga), saya akan beristirahat dan pulih secara normal. COVID-19 tidak membuat saya takut dalam hal kesehatan pribadi saya (setidaknya saya terus mengatakan ini pada diri saya sendiri).

Namun, saya mengkhawatirkan kerabat saya yang sudah lanjut usia, termasuk mereka yang memiliki penyakit kronis, dan mereka yang berada di panti jompo atau rumah sakit. Mereka rentan, dan akan sangat menyedihkan jika kita kehilangan mereka karena infeksi ini.

Agar tidak duduk diam dan tidak menyerah pada kelemahan (baik itu alergi, COVID-19 atau hanya kecemasan), saya memutuskan untuk melakukan apa yang saya lakukan yang terbaik -melayani seluruh komunitas visi mesin dan pembelajaran mendalam dengan menulis kode, melakukan eksperimen, dan mengajar orang lain bagaimana menggunakan visi komputer dan pembelajaran mendalam dalam aplikasi dunia nyata yang praktis .

Namun, jujur โ€‹โ€‹saja, ini bukan artikel paling ilmiah yang pernah saya tulis. Padahal, jauh dari yang paling. Metode dan set data yang digunakan tidak layak dipublikasikan. Tetapi mereka bisa menjadi titik awal bagi mereka yang ingin membantu.

Tetapi saya ingin melakukan segalanya dengan kekuatan saya. Artikel ini hanyalah cara saya untuk mengatasi masa-masa sulit secara mental dan pada saat yang sama membantu orang lain dalam situasi yang sama.

Saya harap kamu mengerti.

Dalam pelajaran hari ini kita akan melakukan hal berikut:

  1. Kami akan mengumpulkan satu set data terbuka dari fluorogram pasien dengan tes positif untuk COVID-19.
  2. Kami mengumpulkan sejumlah fluorogram pasien sehat.
  3. Kami akan melatih jaringan saraf convolutional untuk mendeteksi COVID-19 secara otomatis pada gambar dari set yang dibuat.
  4. Kami akan mengevaluasi hasil yang diperoleh dari sudut pandang pendidikan.

Penafian: Saya sudah mengisyaratkan, tapi saya akan mengatakannya terus terang. Metode dan teknik dalam artikel ini hanya untuk tujuan pendidikan. Ini bukan studi ilmiah yang nyata, dan itu tidak akan dipublikasikan dalam jurnal. Artikel ini ditujukan untuk pembaca yang tertarik pada (1) visi komputer / pembelajaran mendalam dan ingin belajar menggunakan metode praktis, dan (2) peduli tentang peristiwa terkini. Saya mohon Anda untuk berhubungan dengan ini dengan cara ini.

COVID-19 pada fluorogram


Pada bagian pertama, kita membahas bagaimana COVID-19 dapat dideteksi pada foto thoraks.

Kemudian pertimbangkan kumpulan data kami.

Lalu saya akan menunjukkan kepada Anda bagaimana melatih model pembelajaran mendalam menggunakan Keras dan TensorFlow untuk mendefinisikan COVID-19 dalam dataset gambar kami.

Tugas saya adalah untuk menginspirasi Anda dan menunjukkan bahwa studi tentang visi komputer / pembelajaran mendalam, dan kemudian menerapkan pengetahuan ini di bidang medis dapat memiliki dampak besar pada dunia.

Sederhananya: Anda tidak perlu gelar medis untuk berkontribusi dalam pengobatan. Spesialis pembelajaran mendalam yang bekerja erat dengan dokter dan penyedia layanan kesehatan dapat memecahkan masalah yang kompleks, menyelamatkan nyawa, dan membuat dunia menjadi tempat yang lebih baik.

Saya harap panduan ini menginspirasi Anda untuk melakukan hal itu.

Tetapi dengan semua ini dikatakan, jurnal ilmiah dan sistem penilaian pakar penuh dengan materi dengan model peramalan COVID-19 yang kualitasnya meragukan. Tolong jangan mengambil kode / model dari artikel ini dan jangan mengirimnya ke jurnal atau meletakkannya di domain publik di situs ilmiah - Anda hanya akan menambahkan beberapa kebisingan.

Selain itu, jika Anda berniat menggunakan artikel ini (atau artikel COVID-19 lainnya dari Internet) dalam riset Anda sendiri, pastikan untuk memeriksa aturan TRIPOD untuk membuat model pelaporan ramalan .

Seperti yang mungkin Anda ketahui, penggunaan AI dalam pengobatan mengarah pada konsekuensi yang sangat nyata . Publikasikan atau gunakan model seperti itu hanya setelah berkonsultasi dengan ahli medis.


Ara. 1. Contoh fluorogram dari pasien dengan tes positif COVID-19. Menggunakan Keras dan TensorFlow dalam gambar seperti itu, adalah mungkin untuk melatih classifier untuk mendeteksi COVID-19. Tes COVID-19

saat ini sulit ditemukan - mereka tidak cukup dan mereka tidak dapat dibuat cukup cepat, yang menyebabkan panik.

Ketika ada kepanikan, beberapa orang keji mengambil keuntungan dari ini dan menjual alat tes palsu COVID-19 , menemukan korban di jejaring sosial dan kurir instan .

Mengingat bahwa jumlah kit uji COVID-19 terbatas, Anda harus mengandalkan metode diagnostik lainnya.

Untuk mendiagnosis pneumonia, pneumonia, abses, dan / atau pembesaran kelenjar getah bening, dokter sering mengandalkan rontgen dada (biasa disebut fluorogram).

COVID-19 menyerang epitel saluran pernapasan, dan sinar-X membantu memeriksa kondisi paru-paru pasien. Mesin X-ray dipasang di sebagian besar rumah sakit, jadi masuk akal untuk menggunakan fluorografi untuk menguji COVID-19 tanpa alat tes khusus. Kerugiannya adalah bahwa analisis semacam itu membutuhkan spesialis dalam radiologi dan membutuhkan waktu yang lama. Oleh karena itu, pengembangan sistem otomatis akan sangat berharga untuk menghemat waktu berharga para profesional medis di seluruh dunia.

Catatan. Beberapa publikasi terbaru menunjukkan bahwa computed tomography lebih baik untuk mendiagnosis COVID-19, tetapi dalam pelajaran ini kami hanya bekerja dengan fluorogram.

Himpunan data



Ara. 2. Di sebelah kiri adalah sampel positif (dari pasien yang terinfeksi), dan di sebelah kanan adalah negatif. Gambar-gambar ini digunakan untuk melatih model untuk secara otomatis memprediksi keberadaan suatu penyakit.

Kumpulan data kami disusun oleh Dr. Joseph Cohen , seorang mahasiswa pascasarjana di University of Montreal. Pada awal Maret, ia mulai mengumpulkan fluorogram pasien dengan COVID-19, MERS, SARS, dan SARS dan menerbitkannya di repositori di GitHub .

Kita perlu mengunduh file dari repositorimetadata.csvdan memilih baris dari tempat yang ditunjukkan

  1. Hasil positif pada COVID-19.
  2. Jenis paru-paru 'posterior-anterior' (PA). Sejauh yang saya mengerti, ini adalah jenis gambar yang digunakan dalam gambar "sehat".

Sebanyak 25 fluorogram ditemukan dengan kasus positif COVID-19 (Gbr. 2, kiri).

Untuk pasien sehat, saya menggunakan dataset Cuggle (pneumonia) dan memilih 25 gambar pasien sehat (Gbr. 2, kanan). Kumpulan data ini memiliki sejumlah masalah, yaitu label bising / salah, tetapi akan dilakukan untuk pemeriksaan konseptual detektor otomatis COVID-19.

Struktur proyek


Di bagian Unduhan situs web saya, Anda dapat memasukkan alamat email dan mencari tautan ke arsip dengan kode, skrip, dan file lain untuk proyek ini. Ekstrak file dan Anda akan melihat struktur direktori:

$ tree --dirsfirst --filelimit 10
.
โ”œโ”€โ”€ dataset
โ”‚   โ”œโ”€โ”€ covid [25 entries]
โ”‚   โ””โ”€โ”€ normal [25 entries]
โ”œโ”€โ”€ build_covid_dataset.py
โ”œโ”€โ”€ sample_kaggle_dataset.py
โ”œโ”€โ”€ train_covid19.py
โ”œโ”€โ”€ plot.png
โ””โ”€โ”€ covid19.model
3 directories, 5 files

Fluorogram berada di direktori di dataset/mana dua kelas data dibagi menjadi direktori covid/dan normal/.

Kedua skrip disajikan untuk membangun kumpulan data, tetapi kami tidak akan mempertimbangkannya hari ini. Sebagai gantinya, pertimbangkan skrip train_covid19.pyyang mengajarkan detektor COVID-19 kami.

Penerapan


Mari kita beralih ke pengaturan jaringan saraf convolutional. Buka file train_covid19.pydan rekatkan kode berikut:

# import the necessary packages
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import AveragePooling2D
from tensorflow.keras.layers import Dropout
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Input
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical
from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from imutils import paths
import matplotlib.pyplot as plt
import numpy as np
import argparse
import cv2
import os

Skrip ini menggunakan sejumlah perpustakaan pembelajaran dalam dari TensorFlow 2.0 dan Keras. Selain itu, kami menggunakan scikit-learn , pustaka Python standar untuk pembelajaran mesin, matplotlib untuk grafik, dan OpenCV untuk memuat dan memproses gambar.

Untuk menginstal TensorFlow 2.0 (termasuk pustaka scikit-learn, OpenCV, dan matplotlib) yang sesuai, cukup ikuti instruksi saya untuk Ubuntu atau macOS .

Selanjutnya, kita akan menganalisis argumen baris perintah dan menginisialisasi hyperparameters:

# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-d", "--dataset", required=True,
	help="path to input dataset")
ap.add_argument("-p", "--plot", type=str, default="plot.png",
	help="path to output loss/accuracy plot")
ap.add_argument("-m", "--model", type=str, default="covid19.model",
	help="path to output loss/accuracy plot")
args = vars(ap.parse_args())
# initialize the initial learning rate, number of epochs to train for,
# and batch size
INIT_LR = 1e-3
EPOCHS = 25
BS = 8

Tiga argumen baris perintah :

  • --dataset: path ke dataset input
  • --plot: Jalur opsional ke jadwal keluar untuk riwayat belajar Anda. Kecuali ditentukan lain, standarnya adalahplot.png
  • --model: jalur opsional ke model keluaran; standarcovid19.model

Baris berikutnya menginisialisasi kecepatan belajar awal, jumlah era, dan hiperparameter ukuran paket.

Sekarang kami siap untuk mengunduh dan memproses fluorograms:

# grab the list of images in our dataset directory, then initialize
# the list of data (i.e., images) and class images
print("[INFO] loading images...")
imagePaths = list(paths.list_images(args["dataset"]))
data = []
labels = []
# loop over the image paths
for imagePath in imagePaths:
	# extract the class label from the filename
	label = imagePath.split(os.path.sep)[-2]
	# load the image, swap color channels, and resize it to be a fixed
	# 224x224 pixels while ignoring aspect ratio
	image = cv2.imread(imagePath)
	image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
	image = cv2.resize(image, (224, 224))
	# update the data and labels lists, respectively
	data.append(image)
	labels.append(label)
# convert the data and labels to NumPy arrays while scaling the pixel
# intensities to the range [0, 1]
data = np.array(data) / 255.0
labels = np.array(labels)

Untuk memuat data, kami menangkap semua jalur ke gambar di katalog --dataset. Kemudian untuk masing-masing imagePath:

  • Kami mengambil label kelas ( covidatau normal) dari jalur .
  • Kami memuat imagedan melakukan pra-proses, mengubahnya menjadi RGB dan mengubah ukuran menjadi 224 ร— 224 piksel, sehingga siap untuk jaringan saraf.
  • Memperbarui daftar datadan labels.

Kemudian skala intensitas piksel ke kisaran [0, 1] dan konversikan data dan label ke format array NumPy.

Selanjutnya, kami melakukan pengkodean langsung labelsdengan membagi data menjadi set untuk pelatihan / pengujian:

# perform one-hot encoding on the labels
lb = LabelBinarizer()
labels = lb.fit_transform(labels)
labels = to_categorical(labels)
# partition the data into training and testing splits using 80% of
# the data for training and the remaining 20% for testing
(trainX, testX, trainY, testY) = train_test_split(data, labels,
	test_size=0.20, stratify=labels, random_state=42)
# initialize the training data augmentation object
trainAug = ImageDataGenerator(
	rotation_range=15,
	fill_mode="nearest")

Pengkodean langsung berarti bahwa data dikonversi ke dalam format berikut:

[[0. 1.]
 [0. 1.]
 [0. 1.]
 ...
 [1. 0.]
 [1. 0.]
 [1. 0.]]

Setiap label yang dikodekan terdiri dari array dengan dua elemen: 'panas' (1) atau 'tidak' (0).

Kemudian baris berikut memisahkan data kami, menyisakan 80% untuk pelatihan dan 20% untuk pengujian.

Untuk memastikan model digeneralisasi, kami melakukan augmentasi data dengan mengatur gambar untuk secara acak memutar 15 ยฐ searah jarum jam atau berlawanan arah jarum jam.

Tiga baris terakhir menginisialisasi objek generator augmentasi data.

Sekarang inisialisasi model VGGNet kami dan sempurnakan :

# load the VGG16 network, ensuring the head FC layer sets are left
# off
baseModel = VGG16(weights="imagenet", include_top=False,
	input_tensor=Input(shape=(224, 224, 3)))
# construct the head of the model that will be placed on top of the
# the base model
headModel = baseModel.output
headModel = AveragePooling2D(pool_size=(4, 4))(headModel)
headModel = Flatten(name="flatten")(headModel)
headModel = Dense(64, activation="relu")(headModel)
headModel = Dropout(0.5)(headModel)
headModel = Dense(2, activation="softmax")(headModel)
# place the head FC model on top of the base model (this will become
# the actual model we will train)
model = Model(inputs=baseModel.input, outputs=headModel)
# loop over all layers in the base model and freeze them so they will
# *not* be updated during the first training process
for layer in baseModel.layers:
	layer.trainable = False

Dua baris pertama membuat instance dari jaringan VGG16 dengan bobot yang sebelumnya dilatih di ImageNet tanpa menyentuh lapisan yang terhubung penuh (FC).

Kemudian kami membangun layer baru yang terhubung sepenuhnya, terdiri dari lapisan POOL => FC = SOFTMAX, dan menambahkannya di atas VGG16.

Kemudian kami membekukan bobot CONVuntuk VGG16, jadi hanya lapisan FC yang akan dilatih . Ini menyelesaikan pengaturan.

Sekarang kami siap untuk menyusun dan melatih model pembelajaran mendalam kami untuk COVID-19:

# compile our model
print("[INFO] compiling model...")
opt = Adam(lr=INIT_LR, decay=INIT_LR / EPOCHS)
model.compile(loss="binary_crossentropy", optimizer=opt,
	metrics=["accuracy"])
# train the head of the network
print("[INFO] training head...")
H = model.fit_generator(
	trainAug.flow(trainX, trainY, batch_size=BS),
	steps_per_epoch=len(trainX) // BS,
	validation_data=(testX, testY),
	validation_steps=len(testX) // BS,
	epochs=EPOCHS)

Baris pertama mengkompilasi jaringan saraf dengan opsi untuk mengurangi kecepatan belajar dan pengoptimal Adam. Mengingat bahwa ini adalah masalah dua kelas, kami menggunakan loss "binary_crossentropy"daripada cross entropy.

Untuk memulai proses pembelajaran, kami memanggil metode fit_generator dalam Keras , meneruskan fluorogram melalui objek augmentasi data kami.

Kami mengevaluasi model:

# make predictions on the testing set
print("[INFO] evaluating network...")
predIdxs = model.predict(testX, batch_size=BS)
# for each image in the testing set we need to find the index of the
# label with corresponding largest predicted probability
predIdxs = np.argmax(predIdxs, axis=1)
# show a nicely formatted classification report
print(classification_report(testY.argmax(axis=1), predIdxs,
	target_names=lb.classes_))

Untuk mengevaluasi, pertama-tama kita membuat prakiraan pada set uji, mempertahankan indeks prakiraan. Kemudian kami membuat dan menampilkan laporan klasifikasi menggunakan scikit-learn, di mana ada fungsi bantu seperti itu.

Selanjutnya, kami menghitung matriks ketidakakuratan untuk evaluasi statistik lebih lanjut:

# compute the confusion matrix and and use it to derive the raw
# accuracy, sensitivity, and specificity
cm = confusion_matrix(testY.argmax(axis=1), predIdxs)
total = sum(sum(cm))
acc = (cm[0, 0] + cm[1, 1]) / total
sensitivity = cm[0, 0] / (cm[0, 0] + cm[0, 1])
specificity = cm[1, 1] / (cm[1, 0] + cm[1, 1])
# show the confusion matrix, accuracy, sensitivity, and specificity
print(cm)
print("acc: {:.4f}".format(acc))
print("sensitivity: {:.4f}".format(sensitivity))
print("specificity: {:.4f}".format(specificity))

Di sini kita lakukan hal berikut:

  • Kami menghasilkan matriks ketidakakuratan.
  • Dengan bantuannya, kami menghitung akurasi, sensitivitas, dan spesifisitas dengan mencetak semua metrik ini.

Untuk pengujian mandiri, kami membuat grafik dengan riwayat ketepatan dan kerugian pelatihan, menghasilkannya ke file grafik:

# plot the training loss and accuracy
N = EPOCHS
plt.style.use("ggplot")
plt.figure()
plt.plot(np.arange(0, N), H.history["loss"], label="train_loss")
plt.plot(np.arange(0, N), H.history["val_loss"], label="val_loss")
plt.plot(np.arange(0, N), H.history["accuracy"], label="train_acc")
plt.plot(np.arange(0, N), H.history["val_accuracy"], label="val_acc")
plt.title("Training Loss and Accuracy on COVID-19 Dataset")
plt.xlabel("Epoch #")
plt.ylabel("Loss/Accuracy")
plt.legend(loc="lower left")
plt.savefig(args["plot"])

Akhirnya, simpan model classifier tf.keraske disk:

# serialize the model to disk
print("[INFO] saving COVID-19 detector model...")
model.save(args["model"], save_format="h5")

Pelatihan pendeteksi


Setelah mengunduh semua file dari arsip dengan sumber dan skrip yang disebutkan di atas, buka konsol dan jalankan perintah berikut untuk melatih detektor:

$ python train_covid19.py --dataset dataset
[INFO] loading images...
[INFO] compiling model...
[INFO] training head...
Epoch 1/25
5/5 [==============================] - 20s 4s/step - loss: 0.7169 - accuracy: 0.6000 - val_loss: 0.6590 - val_accuracy: 0.5000
Epoch 2/25
5/5 [==============================] - 0s 86ms/step - loss: 0.8088 - accuracy: 0.4250 - val_loss: 0.6112 - val_accuracy: 0.9000
Epoch 3/25
5/5 [==============================] - 0s 99ms/step - loss: 0.6809 - accuracy: 0.5500 - val_loss: 0.6054 - val_accuracy: 0.5000
Epoch 4/25
5/5 [==============================] - 1s 100ms/step - loss: 0.6723 - accuracy: 0.6000 - val_loss: 0.5771 - val_accuracy: 0.6000
...
Epoch 22/25
5/5 [==============================] - 0s 99ms/step - loss: 0.3271 - accuracy: 0.9250 - val_loss: 0.2902 - val_accuracy: 0.9000
Epoch 23/25
5/5 [==============================] - 0s 99ms/step - loss: 0.3634 - accuracy: 0.9250 - val_loss: 0.2690 - val_accuracy: 0.9000
Epoch 24/25
5/5 [==============================] - 27s 5s/step - loss: 0.3175 - accuracy: 0.9250 - val_loss: 0.2395 - val_accuracy: 0.9000
Epoch 25/25
5/5 [==============================] - 1s 101ms/step - loss: 0.3655 - accuracy: 0.8250 - val_loss: 0.2522 - val_accuracy: 0.9000
[INFO] evaluating network...
              precision    recall  f1-score   support
       covid       0.83      1.00      0.91         5
      normal       1.00      0.80      0.89         5
    accuracy                           0.90        10
   macro avg       0.92      0.90      0.90        10
weighted avg       0.92      0.90      0.90        10
[[5 0]
 [1 4]]
acc: 0.9000
sensitivity: 1.0000
specificity: 0.8000
[INFO] saving COVID-19 detector model...

Diagnosis otomatis COVID-19 sesuai dengan hasil fluorografi


: , ยซยป COVID-19. . , , , ( , ). , / COVID-19.

Seperti yang dapat dilihat dari hasil di atas, detektor otomatis kami memiliki akurasi sekitar 90-92% pada set sampel yang ada. Peringkat ini hanya didasarkan pada analisis gambar. Selama pelatihan, tidak ada lagi data yang digunakan, termasuk lokasi geografis, kepadatan penduduk, dll

. Sensitivitasnya adalah 100%, dan spesifisitasnya adalah 80%, yang berarti:

  • Pasien yang terinfeksi benar-benar diakui dalam 100% kasus.
  • Pasien sehat diakui sehat dengan probabilitas 80%.

Seperti yang ditunjukkan grafik riwayat pelatihan, jaringan kami tidak terlalu terlatih, meskipun kumpulan data sangat terbatas :



Kemampuan untuk mengenali COVID-19 dengan akurasi absolut sangat bagus, meskipun tingkat positif palsu sedikit mengkhawatirkan, karena banyak orang sehat akan dikirim ke karantina dengan pasien yang benar-benar terinfeksi.

Menyeimbangkan sensitivitas dan spesifisitas sangat sulit ketika datang ke aplikasi medis, terutama dalam kasus penyakit menular.

Ketika datang ke visi komputer dan pelatihan mendalam dalam bidang kedokteran, Anda harus selalu ingat bahwa model prediksi kami dapat memiliki konsekuensi yang sangat nyata - diagnosis yang terlewatkan dapat menghabiskan biaya hidup.

Sekali lagi, hasil ini dikumpulkan hanya untuk tujuan pendidikan. Artikel ini dan hasil yang menyertainya tidak dimaksudkan untuk publikasi dalam jurnal ilmiah dan tidak mematuhi aturan TRIPOD untuk pembuatan model pelaporan perkiraan .

Keterbatasan, peningkatan, dan pekerjaan di masa depan



Ara. 4. Saat ini, spesialis kecerdasan buatan (AI) dan spesialis pembelajaran dalam menderita dari kurangnya data berkualitas untuk pelatihan efektif sistem deteksi otomatis COVID-19 pada gambar ( sumber gambar ).

Salah satu keterbatasan utama untuk menciptakan sistem tersebut adalah data. Kami tidak memiliki cukup data (andal) untuk melatih detektor COVID-19. Rumah sakit penuh sesak dengan pasien COVID-19, tetapi mengingat hak dan privasi mereka, menjadi semakin sulit untuk mengumpulkan set gambar medis berkualitas secara tepat waktu.

Saya kira dalam 12-18 bulan ke depan masalah akan terpecahkan, tetapi untuk saat ini kami puas dengan apa yang kami miliki. Saya melakukan yang terbaik (mengingat kondisi mental dan fisik saya saat ini) untuk menyusun panduan bagi mereka yang tertarik menggunakan visi komputer dan pembelajaran mendalam dalam memerangi COVID-19, dengan mempertimbangkan keterbatasan waktu dan sumber daya. Tetapi saya harus mengingatkan Anda bahwa saya bukan ahli medis.

Detektor COVID-19 sejati harus menjalani pengujian ketat oleh para profesional medis terlatih yang bekerja bersama-sama dengan praktisi pembelajaran mendalam yang berpengalaman. Metode yang dijelaskan di sini, tentu saja, tidak cocok untuk penggunaan praktis dan dimaksudkan hanya untuk tujuan pendidikan.

Selain itu, kita harus bertanya-tanya apa model ini sebenarnya "belajar". Seperti yang saya katakanoleh panduan Grad-CAM minggu lalu, sangat mungkin bahwa model kami mempelajari pola yang tidak terkait dengan COVID-19, tetapi hanya variasi antara dua set data (yaitu, antara pasien dengan dan tanpa COVID-19). Untuk mengkonfirmasi hasil, pengujian menyeluruh dan bantuan ahli diperlukan.

Akhirnya, detektor masa depan (dan terbaik) akan bersifat multimodal.

Sekarang kami hanya mempertimbangkan gambar (misalnya, x-ray). Detektor otomatis COVID-19 terbaik harus menggunakan beberapa sumber data, tidak terbatas pada gambar, termasuk tanda vital pasien, kepadatan populasi, lokasi geografis, dll. Gambar saja biasanya tidak cukup untuk jenis aplikasi ini.

Saya harap panduan ini berfungsi sebagai titik awal bagi siapa saja yang tertarik menggunakan visi komputer dan pembelajaran mendalam untuk secara otomatis mendeteksi COVID-19.

Apa berikutnya?


Saya biasanya mengakhiri artikel blog saya dengan rekomendasi dari salah satu buku atau kursus saya sehingga Anda dapat belajar lebih banyak tentang menggunakan visi komputer dan pembelajaran mendalam. Untuk menghormati keseriusan coronavirus, saya tidak akan melakukan ini - sekarang bukan waktu atau tempat.

Sebaliknya, saya akan mengatakan bahwa kita sekarang berada dalam periode kehidupan yang sangat mengerikan. Seperti musim, semuanya akan berlalu, tetapi untuk saat ini Anda perlu berjongkok dan bersiap menghadapi musim dingin - kemungkinan yang terburuk belum datang.

Saya menerima beberapa surat dari pembaca PyImageSearch yang ingin menggunakan waktu henti ini untuk mempelajari visi komputer dan pembelajaran mendalam, daripada menjadi gila di rumah mereka. Ini adalah pemikiran yang berguna.

Ringkasan


Dalam panduan ini, Anda belajar cara menggunakan Keras dan TensorFlow untuk melatih detektor otomatis COVID-19 pada satu set fluorogram.

Tidak ada dataset gambar peer-review berkualitas tinggi untuk COVID-19 (belum), jadi kami harus bekerja dengan apa yang kami miliki, yaitu, dengan repositori Joseph Cohen di GitHub :


Kami menggunakan Keras dan TensorFlow untuk melatih detektor COVID-19, yang menunjukkan akurasi 90-92%, sensitivitas 100%, dan spesifisitas 80% pada set tes (diberikan set data terbatas kami).

Ingatlah bahwa detektor COVID-19 yang dijelaskan hanya untuk tujuan pendidikan.

All Articles