Deteksi COVID-19 dalam sinar-X dengan Pembelajaran Keras, TensorFlow dan Deep


Dengan bantuan panduan ini, dengan bantuan Keras, TensorFlow dan pembelajaran mendalam, kita akan belajar cara menentukan COVID-19 secara otomatis dari kumpulan data x-ray secara manual

Seperti banyak orang lain, saya dengan tulus khawatir tentang COVID-19. Saya perhatikan bahwa saya terus-menerus menganalisis kondisi saya dan bertanya-tanya apakah saya akan terserang penyakit dan kapan itu akan terjadi. Dan semakin saya khawatir tentang hal itu, semakin berubah menjadi permainan pikiran yang menyakitkan, di mana simtomatologi dikombinasikan dengan hipokondria:

  • Saya bangun di pagi hari, merasakan sakit dan lemah.
  • Ketika saya merangkak keluar dari tempat tidur, saya menemukan pilek (walaupun sudah diketahui bahwa pilek bukan merupakan gejala COVID-19).
  • Ketika saya sampai di kamar mandi untuk mengambil syal kertas, saya sudah batuk.

Pada awalnya saya tidak memperhatikannya - saya alergi terhadap serbuk sari, dan karena cuaca yang hangat di pantai timur Amerika Serikat, musim semi ini adalah awal musim semi. Kemungkinan besar, ini adalah gejala alergi. Tetapi pada siang hari kondisi saya tidak membaik. Saya duduk dan menulis manual ini dengan termometer di mulut saya. Saya melihat ke bawah dan melihat 37,4 Β° C. Suhu tubuh normal saya sedikit lebih rendah daripada yang lain, pada 36,3 Β° C. Semuanya di atas 37,2 Β° C sudah sedikit panas bagi saya.

Batuk dan demam ringan? Bisa jadi COVID-19 ... atau hanya alergi saya. Tidak mungkin untuk mengetahuinya tanpa pengujian, dan justru "ketidaktahuan" inilah yang membuat situasi begitu mengintimidasi pada tingkat manusia.

Menit Perawatan UFO


COVID-19 β€” , SARS-CoV-2 (2019-nCoV). β€” , /, .



, .

, , .

: |

Terlepas dari ketakutan saya, saya mencoba berpikir secara rasional. Saya sedikit lebih dari 30, saya dalam kondisi sangat baik, dan kekebalan saya kuat. Saya akan menempatkan diri saya di karantina (untuk berjaga-jaga), istirahat dan berurusan dengan semuanya. COVID-19 tidak membuat saya takut dari sudut pandang kesehatan pribadi (setidaknya saya akan mempertahankannya untuk diri saya sendiri).

Jadi, saya khawatir tentang kerabat saya yang sudah lanjut usia, termasuk semua yang telah didiagnosis menderita penyakit ini, serta mereka yang berada di panti jompo dan rumah sakit. Orang-orang ini rentan, dan akan sangat mengerikan jika mereka mati karena COVID-19.

Alih-alih tidak melakukan apa-apa dan membiarkan penyakit saya membuat saya tetap di rumah (baik itu alergi, COVID-19 atau ketakutan saya), saya memutuskan untuk melakukan apa yang saya bisa:Saya akan menulis kode, melakukan eksperimen, dan menggunakan contoh-contoh praktis, mengajari orang lain cara menggunakan visi komputer dan pembelajaran mendalam .

Saya harus segera mengatakan bahwa ini bukan artikel paling ilmiah yang ditulis oleh saya. Dia sama sekali tidak ilmiah. Metode dan dataset yang digunakan tidak layak diterbitkan. Tetapi mereka berfungsi sebagai titik awal bagi mereka yang ingin setidaknya sesuatu membantu.

Saya khawatir tentang Anda dan komunitas ini. Saya ingin membantu apa yang saya bisa: artikel ini adalah cara saya untuk secara mental mengatasi masa-masa sulit, sambil membantu orang lain dalam situasi yang sama.

Dalam panduan ini Anda akan belajar:

  1. Bagaimana cara mengumpulkan opensource-dataset gambar X-ray pasien dengan terdeteksi COVID-19.
  2. «» ( ) .
  3. COVID-19 .
  4. .

Catatan: Saya sudah mengisyaratkan hal ini, tetapi sekarang saya akan mengatakannya secara langsung. Teknik yang dijelaskan di sini hanya untuk tujuan pendidikan. Ini bukan studi ilmiah yang ketat, ini tidak akan dipublikasikan dalam jurnal. Artikel ini ditujukan bagi pembaca yang tertarik dengan visi komputer dan pembelajaran mendalam, yang ingin belajar dalam praktik, serta bagi mereka yang terinspirasi oleh peristiwa terkini. Saya meminta Anda untuk memperhitungkan semua ini.

Pada bagian pertama panduan ini, kita akan membahas cara mendeteksi COVID-19 pada rontgen paru-paru. Kemudian kita membahas dataset itu sendiri. Dan kemudian saya akan menunjukkan cara melatih model menggunakan Keras dan TensorFlow untuk memprediksi COVID-19 pada gambar kita.

Penjelasan


Artikel deteksi otomatis COVID-19 ini ditulis hanya untuk tujuan pendidikan. Ini tidak menggambarkan sistem diagnostik COVID-19 yang andal dan akurat, belum diuji baik dari profesional maupun dari sudut pandang akademik.

Tujuan saya adalah untuk menginspirasi Anda dan menunjukkan bagaimana studi tentang visi komputer dan pembelajaran mendalam dengan penerapan pengetahuan ini di bidang medis selanjutnya dapat berdampak besar pada dunia.

Bayangkan: Anda tidak perlu pendidikan kedokteran untuk memengaruhi kedokteran . Praktisi pelatihan mendalam hari ini bekerja erat dengan dokter dan dokter lain dalam memecahkan masalah yang kompleks, menyelamatkan nyawa dan membuat dunia menjadi tempat yang lebih baik.

Saya harap kepemimpinan saya menginspirasi Anda untuk melakukannya.

Tetapi mengingat semua hal di atas, para peneliti, kurator majalah dan sistem peninjauan sudah dipenuhi dengan karya-karya yang menggambarkan model peramalan COVID-19 dengan kualitas yang meragukan. Tolong jangan mengirim kode dan model dari artikel ini ke jurnal atau publikasi ilmiah - Anda hanya akan menambah kekacauan .

Selain itu, jika Anda ingin melakukan penelitian berdasarkan artikel ini (atau publikasi lain tentang COVID-19), maka patuhi panduan TRIPOD untuk menggambarkan model prediksi.

Seperti yang Anda pahami, penggunaan kecerdasan buatan dalam bidang medis dapat memiliki konsekuensi yang sangat serius. Publikasikan dan gunakan model seperti itu hanya jika Anda seorang spesialis medis atau jika Anda telah diberitahukan secara rinci oleh spesialis tersebut.

Bagaimana COVID-19 dapat dideteksi dalam x-ray?



Gambar 1: Contoh X-ray dari pasien yang didiagnosis dengan COVID-19. Dalam gambar-gambar ini, Anda dapat mengajarkan classifier menggunakan Keras dan TensorFlow untuk menentukan COVID-19.

Pengujian untuk COVID-19 sekarang sulit - tidak ada cukup tes , tetapi tidak mungkin untuk dengan cepat menghasilkannya, yang hanya meningkatkan kepanikan. Dan dalam kepanikan, ada bajingan yang mencoba menguangkan orang lain dan menjual tes palsu pada COVID-19 , menemukan diri mereka tidak curiga korban di jejaring sosial dan kurir instan.

Mengingat terbatasnya jumlah tes, kita perlu mengandalkan metode diagnostik lainnya.

Saya memutuskan untuk mempelajari rontgen, karena dokter sering menggunakannya dan menghitung hasil tomografi untuk mendiagnosis pneumonia, radang paru-paru, abses dan pembesaran kelenjar getah bening. Karena virus menyerang sel-sel epitel yang melapisi saluran pernapasan, kita dapat menggunakan sinar-X untuk mempelajari kondisi paru-paru manusia. Dan karena mesin sinar-X hampir ada di mana-mana, menggunakan gambar Anda dapat mendeteksi COVID-19 tanpa test kit.

Kerugian dari metode ini termasuk kebutuhan untuk ahli radiologi, serta waktu pemrosesan yang signifikan. Dan waktu sangat mahal ketika orang sakit di seluruh dunia. Dan untuk menghemat waktu dokter, Anda perlu membuat sistem analisis otomatis .

catatan: , , COVID-19 . . , , , , COVID-19, .

COVID-19



Gambar 2: di sebelah kiri adalah gambar orang-orang dengan hasil positif (terinfeksi), di sebelah kanan - dengan negatif. Dalam gambar-gambar ini, kami akan mengajarkan model menggunakan TensorFlow dan Keras untuk secara otomatis memprediksi keberadaan COVID-19 (yaitu, penyakit yang disebabkan oleh coronavirus).

Dataset gambar pasien yang digunakan dengan COVID-19 yang digunakan di sini dikompilasi di bawah pengawasan Dr. Joseph Cohen , seorang mahasiswa pascasarjana di University of Montreal. Beberapa hari yang lalu, Cohen mulai mengumpulkan gambar sinar-X pasien dengan COVID-19 dan mengunggahnya ke gudang GitHub. Di sana Anda akan menemukan contoh tidak hanya penyakit ini, tetapi juga MERS, SARS, dan ARDS.

Untuk membuat dataset I:

  1. Parsing file metadata.csv dari repositori.
  2. Dipilih semua baris:

Secara total, 25 tembakan diperoleh dengan hasil positif pada COVID-19 ( Gambar 2 , kiri ).

Sekarang pilih gambar orang sehat.

Untuk melakukan ini, saya mengambil dataset rontgen paru-paru (pneumonia) Kaggle dan memilih 25 gambar orang sehat ( Gambar 2 , kanan ). Dataset ini memiliki sejumlah kelemahan, termasuk label yang diisi dengan buruk atau salah, tetapi cocok sebagai titik awal untuk menguji hipotesis detektor COVID-19.

Hasilnya, saya mendapat 50 suntikan: 25 pasien dengan COVID-19 dan 25 sehat. Anda dapat mengunduh dataset dari tautan. Selain itu, saya menambahkan skrip Python yang dengannya saya menghasilkan dataset, tetapi dalam artikel ini saya tidak mempertimbangkannya.

Struktur proyek


Unduh kode dan datanya. Tarik keluar file dari sana, dan Anda mendapatkan struktur direktori berikut:

$ 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

Tiga direktori, lima file. Dataset terletak pada dataset / direktori dan dibagi menjadi dua kelas - covid / dan normal /. Di bawah ini kita melihat skrip train_covid19.py yang melatih detektor COVID-19 kami.

Implementasi naskah pelatihan


Mari kita beralih ke fine-tuning jaringan saraf convolutional, yang secara otomatis akan mendiagnosis COVID-19 menggunakan Keras, TensorFlow, dan pembelajaran yang mendalam.

Buka file train_covid19.py dan 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 memanfaatkan perpustakaan TensorFlow 2.0 dan Keras dengan memilih impor tensorflow.keras. Kami juga menggunakan:

  • scikit-belajar , ini adalah perpustakaan pembelajaran mesin Python de facto ,
  • matplotlib untuk membuat grafik,
  • OpenCV untuk mengunggah dan memproses gambar dalam dataset.

Untuk mempelajari cara menginstal TensorFlow 2.0 (termasuk scikit-learn, OpenCV dan matplotlib), lihat tutorial saya untuk Ubuntu atau macOS .

Sekarang kita parsing argumen untuk baris perintah dan inisialisasi 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 kami ( baris 24-31 ) meliputi:

  • --dataset: path ke dataset input.
  • --plot: jalur opsional ke jadwal keluar dari riwayat pembelajaran. Secara default, grafik disebut plot.png kecuali nama yang berbeda ditentukan pada baris perintah.
  • --model: jalur opsional ke model definisi COVID-19 keluaran kami. Secara default, ini disebut covid19.model.

Sekarang kita menginisialisasi frekuensi pembelajaran awal, jumlah era pelatihan, dan hyperparameter ukuran paket ( baris 35-37 ).

Selanjutnya, unduh dan pra-proses x-ray:

# 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 mengambil semua jalur ke gambar di direktori --dataset ( baris 42 ), dan kemudian untuk setiap imagePath:

  • Kami mengekstrak dari path ( baris 49 ) label kelas (covid atau normal).
  • Kami memuat gambar, mengonversinya menjadi saluran RGB dan menguranginya ke ukuran 224x224 piksel untuk memberi makan jaringan saraf convolutional ( garis 53-55 ).
  • Memperbarui daftar data dan label ( baris 58 dan 59 ).

Kemudian kami skala intensitas piksel menjadi rentang [0, 1]dan mengonversi data dan label ke format array NumPy ( baris 63 dan 64 ).

Selanjutnya, kami akan melakukan satu-hot-coding label kami dan membagi dataset menjadi set pelatihan dan tes:

# perform one-hot encoding on the labels
lb = LabelBinarizer()
labels = lb.fit_transform(labels)
labels = to_categorical(labels); print(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 label kesatuan dilakukan dalam baris 67-69 : data akan disajikan dalam format ini:

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

Setiap label yang dikodekan dengan cara ini terdiri dari array dua elemen, di mana salah satu elemen "panas" (1) dan yang kedua adalah "tidak" (0). Pada baris 73 dan 74, dataset dibagi menjadi dua bagian: 80% untuk pelatihan, 20% untuk pengujian.

Untuk menggeneralisasi model, kami melakukan ekspansi data (augmentasi data), mengatur rotasi gambar acak sebesar 15 derajat searah jarum jam atau melawannya. Objek generasi ekstensi diinisialisasi pada baris 77-79 .

Sekarang menginisialisasi model VGGNet dan mempersiapkannya untuk fine tuning :

# 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

Pada baris 83 dan 84 , sebuah instance dari jaringan saraf VGG16 dibuat dengan bobot yang diperoleh sebelumnya di ImageNet tanpa lapisan yang terhubung sepenuhnya.

Selanjutnya, kita akan membuat layer yang sepenuhnya terhubung yang terdiri dari POOL => FC = lapisan SOFTMAX ( baris 88-93 ) dan letakkan di atas VGG16 ( baris 97 ).

Sekarang bekukan bobot-CONV sehingga hanya lapisan yang terhubung sepenuhnya yang terlatih ( baris 101-102 ). Ini selesai menyetel.

Sekarang kita siap untuk menyusun dan melatih model pembelajaran mendalam kami:

# 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)

Sejalan 106-108 disusun pelatihan kecepatan atenuasi jaringan dan pengoptimal Adam. Mengingat bahwa ini adalah tugas klasifikasi dua kelas, kami menggunakan fungsi kerugian dari cross-entropy biner (binary_crossentropy), bukan cross-entropy kategoris (crossentropy kategoris).

Untuk memulai pelatihan kita memanggil Keras-metode fit_generator dan memberinya sinar-X melalui ekstensi objek data ( baris 112-117 ).

Sekarang mari kita evaluasi modelnya:

# 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 melakukan ini, pertama-tama kita melakukan peramalan berdasarkan suite uji dan mendapatkan indeks prakiraan ( baris 121-125 ). Kemudian kita akan membuat dan menampilkan laporan klasifikasi ( baris 128 dan 129 ) menggunakan utilitas scikit-learn .

Sekarang mari kita hitung matriks kebingungan untuk estimasi statistik masa depan:

# 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))

Kita di sini:

  • menghasilkan matriks ketidakakuratan ( baris 133 ),
  • kami menggunakan matriks ini untuk menentukan akurasi, sensitivitas dan spesifisitas ( baris 135-137 ), dan kemudian kami memperoleh semua metrik ini ( baris 141-143 ).

Kemudian, untuk analisis selanjutnya, kami menampilkan dalam bentuk grafik dalam file sejarah perubahan dalam akurasi dan kerugian:

# 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"])

Dan akhirnya, kita membuat serialkan model classifier tf.keras ke disk:

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

Kami melatih detektor kami dengan Keras dan TensorFlow


Setelah implementasi script train_covid19.py, kita dapat melatih detektor otomatis.

Unduh kode sumber, dataset, dan model pra-terlatih. Buka terminal dan jalankan perintah 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...

Diagnostik Sinar-X Otomatis


Catatan: di bagian ini kami tidak "memecahkan" masalah penentuan COVID-19. Itu ditulis dalam konteks situasi saat ini dan hanya untuk tujuan pendidikan. Ini adalah contoh penerapan praktis visi komputer dan pembelajaran yang mendalam, sehingga Anda merasa nyaman dengan metrik yang berbeda, termasuk akurasi, sensitivitas, dan spesifisitas yang biasa (dan pertukaran yang harus dipertimbangkan ketika bekerja dengan data medis). Saya ulangi, kami tidak memecahkan masalah menentukan COVID-19.

Jadi, detektor otomatis kami menunjukkan akurasi ~ 90-92% pada sampelgambar X-ray saja . Tidak ada informasi lain yang digunakan untuk melatih model, termasuk lokasi geografis, kepadatan penduduk, dll.

Kami juga menerimasensitivitas 100% dan spesifisitas 80% , yang berarti:

  • Dari pasien dengan COVID-19 (kasus positif sejati), menggunakan model, kami mampu mengidentifikasi secara akurat sebagai "COVID-19 positif" dalam 100% kasus.
  • Di antara pasien yang tidak memiliki COVID-19 (kasus negatif sebenarnya), menggunakan model, kami mampu mengidentifikasi secara akurat sebagai "COVID-19-negatif" hanya dalam 80% kasus.

Seperti yang ditunjukkan grafik riwayat pelatihan, jaringan saraf tidak dilatih ulang, meskipun ukuran data pelatihan sangat kecil :


Gambar 3: Grafik akurasi dan kehilangan ini menunjukkan bahwa model kami tidak dilatih ulang.

Sangat bagus bahwa kami mencapai akurasi 100% ketika mendeteksi COVID-19. Namun, situasi dengan kasus yang benar-benar negatif memalukan: kami tidak ingin mengaitkan dengan β€œCOVID-19-negative” mereka yang sebenarnya β€œCOVID-19-positive”.

Kami paling tidak ingin membiarkan pasien yang sakit pulang, ke keluarga dan teman, berkontribusi pada penyebaran penyakit lebih lanjut.

Anda juga harus sangat berhati - hati dengan pembagian kasus positif palsu: kami tidak ingin secara keliru menganggap seseorang sakit dan mengkarantina dia dengan pasien lain sehingga ia terinfeksi dari mereka .

Menemukan keseimbangan antara sensitivitas dan spesifisitas -tugas yang sangat sulit , terutama ketika datang ke kedokteran, dan terutama ketika datang untuk menyebarkan penyakit menular dengan cepat.

Berbicara tentang visi komputer medis dan pembelajaran mendalam, Anda harus selalu ingat bahwa pekerjaan model prediksi kami dapat memiliki konsekuensi yang sangat serius: diagnosa yang keliru dapat menyebabkan kematian .

Saya ulangi, hasil dalam artikel ini disajikan hanya untuk tujuan pendidikan . Ini bukan publikasi jurnal, data ini tidak memenuhi kriteria TRIPOD untuk publikasi model perkiraan.

Keterbatasan, peningkatan, dan pekerjaan lebih lanjut



Gambar 4: Hari ini, AI dan profesional pembelajaran dalam kekurangan data COVID-19 berkualitas untuk melatih sistem pengenalan gambar otomatis.

Salah satu batasan utama dari metode yang dijelaskan dalam manual ini adalah data.

Kami tidak memiliki cukup data (andal) untuk melatih detektor COVID-19.

Rumah sakit sudah memiliki banyak riwayat kasus dengan virus ini, tetapi mengingat privasi dan hak asasi manusia, menjadi semakin sulit untuk dengan cepat mengumpulkan dataset berkualitas tinggi dari gambar medis. Saya percaya bahwa dalam 12-18 bulan ke depan kita akan memiliki lebih banyak data berkualitas. Tetapi untuk sekarang, Anda harus menggunakan apa yang Anda miliki.

Saya mencoba (mengingat kondisi fisik dan mental saya) dalam kondisi waktu dan sumber daya yang terbatas untuk menulis panduan ini bagi mereka yang tertarik dengan penggunaan penglihatan komputer dan pembelajaran yang mendalam. Tetapi izinkan saya mengingatkan Anda bahwa saya bukan tenaga medis profesional .

Untuk menggunakan detektor COVID-19 dalam kehidupan nyata, alat ini harus diuji dengan teliti oleh dokter asli yang bekerja sama dengan spesialis pembelajaran yang mendalam. Metode yang saya jelaskan tidak cocok untuk ini.

Selain itu, kita harus berhati-hati dengan apa yang sebenarnya dipelajari oleh model itu.

Seperti yang saya tulis dalam manual Grad-CAM, ada kemungkinan bahwa model akan mempelajari pola-pola yang tidak relevan dengan COVID-19, tetapi hanya dapat membedakan antara dua sampel data (yaitu, diagnosis positif dan negatif). Hasil dari pendeteksian kami perlu diuji secara ketat dan diperiksa oleh dokter.

Dan akhirnya, detektor masa depan (dan yang lebih maju) akan bersifat multimodal.

Sekarang kami hanya menggunakan data visual (x-ray). Detektor yang lebih baik harus menggunakan data lain: indikator vital pasien, kepadatan populasi, lokasi geografis, dll. Data visual saja biasanya tidak cukup untuk tugas-tugas seperti itu .

Untuk alasan ini, saya ingin menekankan lagi: panduan ini hanya memainkan peran materi pelatihan - ini tidak dapat dianggap sebagai detektor COVID-19 yang andal.

Jika Anda berpikir bahwa Anda atau seseorang yang dekat dengan COVID-19, maka ikuti rekomendasi sistem perawatan kesehatan Anda.

Semoga panduan ini bermanfaat bagi Anda. Saya juga berharap bahwa bagi seseorang akan menjadi titik awal dalam mencari metode menggunakan visi komputer dan pembelajaran mendalam untuk secara otomatis menentukan COVID-19.

Ringkasan


Dalam panduan ini, Anda belajar cara menggunakan Keras, TensorFlow, dan pembelajaran mendalam untuk membuat detektor otomatis COVID-19 pada dataset dari gambar x-ray.

Saat ini (belum) tidak ada dataset gambar berkualitas tinggi dan terverifikasi untuk penyakit ini, jadi Anda harus bekerja dengan repositori Joseph Cohen :


Kemudian dengan bantuan Keras dan TensorFlow kami melatih detektor COVID-19, yang menunjukkan akurasi 90-92% pada sampel pengujian kami, dengan sensitivitas 100% dan spesifisitas 80% (pada dataset kecil kami).

Ingat bahwa detektor yang dijelaskan di sini hanya untuk tujuan pendidikan (lihat Catatan dalam teks). Saya ingin menginspirasi orang lain untuk menggunakan pembelajaran yang mendalam, untuk menunjukkan bahwa dalam kombinasi dengan visi komputer dapat berdampak besar pada kehidupan kita.

Saya harap Anda menikmatinya.

All Articles