Automatisierter COVID-19-Detektor aus Fluorographiebildern



In diesem Handbuch erfahren Sie, wie Sie COVID-19 in einem speziell ausgewählten Datensatz mithilfe von Keras, TensorFlow und Deep Learning automatisch erkennen.

Wie die meisten Menschen auf der Welt bin ich aufrichtig besorgt über COVID-19. Ich bemerke, dass ich ständig meine persönliche Gesundheit analysiere und vermute, dass ich bereits infiziert bin.

Je mehr ich mir darĂĽber Sorgen mache, desto schmerzhafter manifestiert sich eine schmerzhafte Kombination von echten Symptomen mit Hypochondrien:

  • Ich bin morgens aufgewacht und fĂĽhle mich ein wenig ĂĽberwältigt.
  • Als ich aus dem Bett kam, hatte ich bereits ein Leck in der Nase (obwohl jetzt bekannt ist, dass eine laufende Nase kein Symptom fĂĽr COVID-19 ist).
  • Während er im Badezimmer eine Serviette nahm, hustete er auch.

Anfangs habe ich dem nicht viel Bedeutung beigemessen - ich bin allergisch gegen Pollen und wegen des warmen Wetters an der Ostküste kam der Frühling Anfang dieses Jahres. Höchstwahrscheinlich ist meine Allergie gerade ausgebrochen.

Aber die Symptome besserten sich nicht den ganzen Tag.

Und hier sitze ich hier und schreibe dieses Handbuch mit einem Thermometer im Mund; und der Blick nach unten zeigt 37,4 ° C. Die Temperatur ist höher als meine üblichen 36,3 ° C. Alles über 37,2 ° C, ich betrachte bereits ein leichtes Fieber.

Husten und ein bisschen Fieber? Es könnte COVID-19 sein ... oder nur meine Allergie.

Es ist unmöglich, es ohne einen Test herauszufinden, und genau diese „Unwissenheit“ macht diese Situation für das geistige Gleichgewicht so gefährlich.

FĂĽr die Menschen gibt es nichts Schrecklicheres als das Unbekannte.

Trotz aller Ängste versuche ich, sie auf rationale Weise loszuwerden. Ich bin über dreißig, in guter Verfassung, mein Immunsystem ist sehr stark. Ich werde in die Quarantäne gehen (nur für den Fall), ich werde mich ausruhen und mich normal erholen. COVID-19 macht mir keine Angst vor meiner persönlichen Gesundheit (zumindest sage ich mir das immer wieder).

Ich mache mir jedoch Sorgen um meine älteren Verwandten, einschließlich derer, die an chronischen Krankheiten leiden, und derer, die in einem Pflegeheim oder Krankenhaus sind. Sie sind verletzlich und es wird wirklich traurig sein, wenn wir sie aufgrund dieser Infektion verlieren.

Um nicht untätig zu sitzen und nicht der Schwäche zu erliegen (sei es Allergie, COVID-19 oder nur Angst), habe ich beschlossen, das zu tun, was ich am besten kann -Dienen Sie der gesamten Community von Machine Vision und Deep Learning, indem Sie Code schreiben, Experimente durchführen und anderen beibringen, wie man Computer Vision und Deep Learning in praktischen, realen Anwendungen einsetzt .

Um ehrlich zu sein, ist dies jedoch nicht der wissenschaftlichste Artikel, den ich jemals geschrieben habe. In der Tat weit von den meisten. Die verwendeten Methoden und Datensätze verdienen keine Veröffentlichung. Aber sie können der Ausgangspunkt für diejenigen sein, die helfen wollen.

Aber ich möchte alles in meiner Macht stehende tun. Dieser Artikel ist einfach mein Weg, um schwierige Zeiten mental zu überwinden und gleichzeitig anderen in einer ähnlichen Situation zu helfen.

Ich hoffe du verstehst mich.

In der heutigen Lektion werden wir Folgendes tun:

  1. Wir werden eine Reihe offener Daten aus Fluorogrammen von Patienten mit einem positiven COVID-19-Test sammeln.
  2. Wir sammeln eine Auswahl von Fluorogrammen gesunder Patienten.
  3. Wir werden das Faltungs-Neuronale Netzwerk trainieren, um COVID-19 in den Bildern aus dem erstellten Satz automatisch zu erkennen.
  4. Wir werden die Ergebnisse aus pädagogischer Sicht bewerten.

Haftungsausschluss: Ich habe bereits angedeutet, aber ich werde es unverblümt sagen. Die Methoden und Techniken in diesem Artikel dienen nur zu Bildungszwecken. Dies ist keine echte wissenschaftliche Studie und wird nicht in einer Zeitschrift veröffentlicht. Der Artikel richtet sich an Leser, die an (1) Computer Vision / Deep Learning interessiert sind und mit praktischen Methoden lernen möchten und (2) sich über aktuelle Ereignisse Gedanken machen. Ich bitte Sie, sich auf diese Weise darauf zu beziehen.

COVID-19 auf Fluorogrammen


Im ersten Teil diskutieren wir, wie COVID-19 auf Röntgenaufnahmen des Brustkorbs nachgewiesen werden kann.

Dann betrachten Sie unseren Datensatz.

AnschlieĂźend zeige ich Ihnen, wie Sie das Deep-Learning-Modell mit Keras und TensorFlow trainieren, um COVID-19 in unserem Bilddatensatz zu definieren.

Meine Aufgabe ist es, Sie zu inspirieren und zu zeigen, dass das Studium von Computer Vision / Deep Learning und die anschließende Anwendung dieses Wissens im medizinischen Bereich einen großen Einfluss auf die Welt haben können.

Einfach ausgedrückt: Sie benötigen keinen medizinischen Abschluss, um zur Medizin beizutragen. Deep-Learning-Spezialisten, die eng mit Ärzten und Gesundheitsdienstleistern zusammenarbeiten, können komplexe Probleme lösen, Leben retten und die Welt zu einem besseren Ort machen.

Ich hoffe, dieser Leitfaden inspiriert Sie dazu.

Trotz alledem sind wissenschaftliche Zeitschriften und Expertenbewertungssysteme voller Materialien mit Prognosemodellen von COVID-19 von zweifelhafter Qualität. Bitte nehmen Sie den Code / das Modell nicht aus diesem Artikel und senden Sie ihn nicht an die Zeitschrift oder stellen Sie ihn auf wissenschaftlichen Websites öffentlich zugänglich - Sie werden nur etwas Lärm hinzufügen.

Wenn Sie diesen Artikel (oder einen anderen COVID-19-Artikel aus dem Internet) für Ihre eigenen Recherchen verwenden möchten, lesen Sie außerdem die TRIPOD-Regeln zum Erstellen von Prognoseberichtsmodellen .

Wie Sie wahrscheinlich wissen, führt der Einsatz von KI in der Medizin zu sehr realen Konsequenzen . Veröffentlichen oder verwenden Sie solche Modelle nur nach enger Absprache mit einem medizinischen Experten.


Feige. 1. Ein Beispiel eines Fluorogramms eines Patienten mit einem positiven COVID-19-Test. Mit Keras und TensorFlow in solchen Bildern kann der Klassifikator auf die Erkennung von COVID-19 trainiert werden. COVID-19-

Tests sind derzeit schwer zu finden - sie reichen einfach nicht aus und können nicht schnell genug durchgeführt werden, was zu Panik führt.

Wenn es eine Panik gibt, nutzen einige abscheuliche Leute dies und verkaufen gefälschte Testkits COVID-19 , um Opfer in sozialen Netzwerken und Instant Messenger zu finden .

Da die Anzahl der COVID-19-Testkits begrenzt ist, sollten Sie sich auf andere Diagnosemethoden verlassen.

Ärzte verlassen sich häufig auf Röntgenaufnahmen des Brustkorbs (allgemein als Fluorogramme bezeichnet), um Lungenentzündung, Lungenentzündung, Abszesse und / oder vergrößerte Lymphknoten zu diagnostizieren.

COVID-19 greift das Epithel der Atemwege an und Röntgenstrahlen helfen bei der Untersuchung des Lungenzustands des Patienten. Röntgengeräte sind in den meisten Krankenhäusern installiert, daher ist es logisch, COVID-19 ohne spezielle Testkits mithilfe der Fluorographie zu testen. Der Nachteil ist, dass eine solche Analyse einen Spezialisten für Radiologie erfordert und viel Zeit in Anspruch nimmt. Daher wird die Entwicklung eines automatisierten Systems sehr wertvoll sein, um die wertvolle Zeit von Medizinern auf der ganzen Welt zu sparen.

Hinweis. Einige neuere Veröffentlichungen legen nahe, dass die Computertomographie für die Diagnose von COVID-19 besser geeignet ist. In dieser Lektion arbeiten wir jedoch nur mit Fluorogrammen.

Datensatz



Feige. 2. Links sind positive Proben (von infizierten Patienten) und rechts sind negative Proben. Diese Bilder werden verwendet, um ein Modell zu trainieren, um das Vorhandensein einer Krankheit automatisch vorherzusagen.

Unser Datensatz wurde von Dr. Joseph Cohen , einem Doktoranden an der Universität von Montreal, zusammengestellt. Anfang März begann er, Fluorogramme von Patienten mit COVID-19, MERS, SARS und SARS zu sammeln und im Repository auf GitHub zu veröffentlichen .

Wir müssen eine Datei aus dem Repository herunterladenmetadata.csvund die Zeilen auswählen, in denen sie angegeben ist

  1. Positives Ergebnis bei COVID-19.
  2. Art der Lunge 'posterior-anterior' (PA). Soweit ich weiß, ist dies die Art von Bild, die in „gesunden“ Bildern verwendet wird.

Bei positiven Fällen von COVID-19 wurden insgesamt 25 Fluorogramme gefunden (Abb. 2, links).

Für gesunde Patienten habe ich den Cuggle-Datensatz (Lungenentzündung) verwendet und 25 Bilder von gesunden Patienten ausgewählt (Abb. 2, rechts). Dieser Datensatz weist eine Reihe von Problemen auf, nämlich verrauschte / falsche Beschriftungen, reicht jedoch für eine konzeptionelle Überprüfung des automatischen Detektors COVID-19 aus.

Projektstruktur


Im Bereich Downloads meiner Website können Sie Ihre E-Mail-Adresse eingeben und einen Link zum Archiv mit Code, Skripten und anderen Dateien für dieses Projekt finden. Extrahieren Sie die Dateien und Sie sehen die Verzeichnisstruktur:

$ 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

Fluorogramme befinden sich in einem Verzeichnis, dataset/in dem zwei Datenklassen in Verzeichnisse covid/und unterteilt sind normal/.

Beide Skripte werden zum Erstellen eines Datensatzes vorgestellt, aber wir werden sie heute nicht berĂĽcksichtigen. Betrachten Sie stattdessen ein Skript train_covid19.py, das unseren COVID-19-Detektor lehrt.

Implementierung


Fahren wir mit dem Aufbau eines neuronalen Faltungsnetzwerks fort. Ă–ffnen Sie die Datei train_covid19.pyund fĂĽgen Sie den folgenden Code ein:

# 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

Dieses Skript verwendet eine Reihe von Deep-Learning-Bibliotheken von TensorFlow 2.0 und Keras. DarĂĽber hinaus verwenden wir scikit-learn , die Standard-Python-Bibliothek fĂĽr maschinelles Lernen, matplotlib fĂĽr die grafische Darstellung und OpenCV zum Laden und Verarbeiten von Bildern.

Befolgen Sie zum Installieren von TensorFlow 2.0 (einschlieĂźlich der entsprechenden Scikit-Learn-, OpenCV- und Matplotlib-Bibliotheken) einfach meine Anweisungen fĂĽr Ubuntu oder macOS .

Als nächstes analysieren wir die Befehlszeilenargumente und initialisieren die Hyperparameter:

# 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

Drei Befehlszeilenargumente :

  • --dataset: Pfad zum Eingabedatensatz
  • --plot: Ein optionaler Pfad zum Exit-Zeitplan fĂĽr Ihre Lernhistorie. Sofern nicht anders angegeben, ist die Standardeinstellungplot.png
  • --model: optionaler Pfad zum Ausgabemodell; Defaultcovid19.model

Die nächsten Zeilen initialisieren die anfängliche Lerngeschwindigkeit, die Anzahl der Epochen und die Hyperparameter der Paketgröße.

Jetzt können wir die Fluorogramme herunterladen und vorverarbeiten:

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

Um Daten zu laden, erfassen wir alle Pfade zu den Bildern im Katalog --dataset. Dann fĂĽr jeden imagePath:

  • Wir rufen die Klassenbezeichnung ( covidoder normal) vom Pfad ab .
  • Wir laden es imageund verarbeiten es vor, konvertieren es in RGB und ändern die Größe auf 224 Ă— 224 Pixel, damit es fĂĽr das neuronale Netzwerk bereit ist.
  • Aktualisieren von Listen dataund labels.

Skalieren Sie dann die Pixelintensität auf den Bereich [0, 1] und konvertieren Sie die Daten und Beschriftungen in das NumPy-Array-Format.

Als nächstes führen wir eine direkte Codierung labelsdurch, indem wir die Daten in Sätze für Training / Test aufteilen:

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

Direkte Codierung bedeutet, dass die Daten in das folgende Format konvertiert werden:

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

Jedes codierte Label besteht aus einem Array mit zwei Elementen: 'hot' (1) oder 'not' (0).

In den folgenden Zeilen werden unsere Daten getrennt, sodass 80% fĂĽr Schulungen und 20% fĂĽr Tests ĂĽbrig bleiben.

Um sicherzustellen, dass das Modell verallgemeinert ist, erweitern wir die Daten, indem wir das Bild so einstellen, dass es zufällig um 15 ° im oder gegen den Uhrzeigersinn gedreht wird.

Die letzten drei Zeilen initialisieren das Datenerweiterungsgeneratorobjekt.

Initialisieren Sie nun unser VGGNet-Modell und optimieren Sie es :

# 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

Die ersten beiden Zeilen erstellen eine Instanz des VGG16-Netzwerks mit Gewichten, die zuvor in ImageNet trainiert wurden, ohne die vollständig verbundene Schicht (FC) zu berühren.

Dann erstellen wir eine neue vollständig verbundene Ebene, die aus Ebenen besteht POOL => FC = SOFTMAX, und fügen sie über VGG16 hinzu.

Dann frieren wir die Gewichte CONVfĂĽr VGG16 ein, sodass nur die FC-Schicht trainiert wird . Damit ist die Einrichtung abgeschlossen.

Jetzt können wir unser Deep-Learning-Modell für COVID-19 kompilieren und trainieren:

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

Die ersten Zeilen kompilieren das neuronale Netzwerk mit der Option, die Lerngeschwindigkeit und den Optimierer zu reduzierenAdam . Da dies ein Zwei-Klassen-Problem ist, verwenden wir "binary_crossentropy"eher Verlust als Kreuzentropie.

Um den Lernprozess zu starten, rufen wir die Methode fit_generator in Keras auf und leiten die Fluorogramme durch unser Datenerweiterungsobjekt.

Wir bewerten das Modell:

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

Zur Auswertung erstellen wir zunächst Prognosen für den Testsatz, wobei die Prognoseindizes beibehalten werden. Anschließend erstellen und zeigen wir mit scikit-learn einen Klassifizierungsbericht an, in dem eine solche Hilfsfunktion vorhanden ist.

Als nächstes berechnen wir die Matrix der Ungenauigkeiten für die weitere statistische Auswertung:

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

Hier machen wir folgendes:

  • Wir erzeugen eine Matrix von Ungenauigkeiten.
  • Mit seiner Hilfe berechnen wir Genauigkeit, Empfindlichkeit und Spezifität, indem wir alle diese Metriken drucken.

Zum Selbsttest erstellen wir ein Diagramm mit einer Historie der Trainingsgenauigkeit und -verluste und geben es in eine Grafikdatei aus:

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

Speichern Sie abschlieĂźend das Klassifikatormodell tf.kerasauf der Festplatte:

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

Detektortraining


Ă–ffnen Sie nach dem Herunterladen aller Dateien aus dem Archiv mit den oben genannten Quellen und Skripten die Konsole und fĂĽhren Sie den folgenden Befehl aus, um den Detektor zu trainieren:

$ 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...

Automatische Diagnose von COVID-19 nach den Ergebnissen der Fluorographie


: , «» COVID-19. . , , , ( , ). , / COVID-19.

Wie aus den obigen Ergebnissen ersichtlich ist, hat unser automatischer Detektor eine Genauigkeit von etwa 90-92% bei einem vorhandenen Probensatz. Diese Bewertung basiert nur auf der Bildanalyse. Während des Trainings wurden keine Daten mehr verwendet, einschließlich geografischer Lage, Bevölkerungsdichte usw.

Die Sensitivität betrug 100% und die Spezifität 80%, was bedeutet:

  • Wirklich infizierte Patienten werden in 100% der Fälle erkannt.
  • Gesunde Patienten werden mit einer Wahrscheinlichkeit von 80% als gesund anerkannt.

Wie die Grafik zur Trainingshistorie zeigt, ist unser Netzwerk trotz eines sehr begrenzten Datensatzes nicht zu umgeschult : Die



Fähigkeit, COVID-19 mit absoluter Genauigkeit zu erkennen, ist großartig, obwohl die Rate falsch positiver Ergebnisse ein wenig besorgniserregend ist, da viele gesunde Menschen an gesendet werden Quarantäne bei wirklich infizierten Patienten.

Das Gleichgewicht zwischen Sensitivität und Spezifität ist bei medizinischen Anwendungen unglaublich schwierig, insbesondere bei Infektionskrankheiten.

Wenn es um Computer Vision und tiefes Training in der Medizin geht, sollten Sie immer daran denken, dass unsere Vorhersagemodelle sehr reale Konsequenzen haben können - eine verpasste Diagnose kann einen Lebensunterhalt kosten.

Auch diese Ergebnisse werden nur zu Bildungszwecken gesammelt. Dieser Artikel und die dazugehörigen Ergebnisse sind nicht für die Veröffentlichung in einer wissenschaftlichen Zeitschrift vorgesehen und entsprechen nicht den TRIPOD-Regeln für die Erstellung von Prognosemodellen .

Einschränkungen, Verbesserungen und zukünftige Arbeit



Feige. 4. Derzeit leiden Spezialisten für künstliche Intelligenz (KI) und Deep Learning unter einem Mangel an Qualitätsdaten für das effektive Training von automatischen COVID-19-Erkennungssystemen für Bilder ( Bildquelle ).

Eine der Haupteinschränkungen für die Erstellung solcher Systeme sind Daten. Wir haben einfach nicht genug (zuverlässige) Daten, um den COVID-19-Detektor zu trainieren. Krankenhäuser sind mit COVID-19-Patienten überfüllt, aber aufgrund ihrer Rechte und ihrer Privatsphäre wird es noch schwieriger , qualitativ hochwertige medizinische Bilder rechtzeitig zu sammeln.

Ich nehme an, dass das Problem in den nächsten 12 bis 18 Monaten gelöst sein wird, aber im Moment sind wir zufrieden mit dem, was wir haben. Ich habe mein Bestes getan (unter Berücksichtigung meiner aktuellen geistigen und körperlichen Verfassung), um einen Leitfaden für diejenigen zu erstellen, die daran interessiert sind, Computer Vision und tiefes Lernen im Kampf gegen COVID-19 unter Berücksichtigung von Zeit- und Ressourcenbeschränkungen einzusetzen. Aber ich muss Sie daran erinnern, dass ich kein medizinischer Experte bin.

Ein echter COVID-19-Detektor muss strengen Tests durch ausgebildete Mediziner unterzogen werden, die Hand in Hand mit erfahrenen Deep-Learning-Praktikern arbeiten. Die hier beschriebene Methode ist natĂĽrlich nicht fĂĽr den praktischen Gebrauch geeignet und nur fĂĽr Bildungszwecke gedacht.

Außerdem müssen wir uns fragen, was dieses Modell tatsächlich „lernt“. Wie ich schon sagteNach dem Grad-CAM-Leitfaden der letzten Woche ist es durchaus möglich, dass unser Modell Muster untersucht, die nicht mit COVID-19 zusammenhängen, sondern lediglich Variationen zwischen zwei Datensätzen sind (d. h. zwischen Patienten mit und ohne COVID-19). Um die Ergebnisse zu bestätigen, sind gründliche Tests und fachkundige Unterstützung erforderlich.

SchlieĂźlich werden zukĂĽnftige (und beste) Detektoren multimodal sein.

Jetzt betrachten wir nur Bilder (zum Beispiel Röntgenstrahlen). Die besten automatischen COVID-19-Detektoren sollten mehrere Datenquellen verwenden, nicht nur Bilder, einschließlich Vitalindikatoren für Patienten, Bevölkerungsdichte, geografische Lage usw. Bilder allein reichen für diese Art der Anwendung normalerweise nicht aus.

Ich hoffe, dieser Leitfaden dient als Ausgangspunkt fĂĽr alle, die sich fĂĽr die automatische Erkennung von COVID-19 mithilfe von Computer Vision und Deep Learning interessieren.

Was weiter?


Normalerweise beende ich meine Blog-Artikel mit einer Empfehlung aus einem meiner Bücher oder Kurse, damit Sie mehr über die Verwendung von Computer Vision und Deep Learning erfahren können. Aus Respekt vor der Schwere des Coronavirus werde ich dies nicht tun - jetzt ist nicht die Zeit oder der Ort.

Stattdessen werde ich sagen, dass wir uns jetzt in einer sehr schrecklichen Lebensphase befinden. Wie die Jahreszeiten wird alles vergehen, aber jetzt mĂĽssen Sie sich hocken und sich auf den kalten Winter vorbereiten - es ist wahrscheinlich, dass das Schlimmste noch bevorsteht.

Ich habe mehrere Briefe von PyImageSearch-Lesern erhalten, die diese Ausfallzeit nutzen möchten, um Computer Vision und Deep Learning zu studieren, anstatt in ihren Häusern verrückt zu werden. Dies ist ein nützlicher Gedanke.

Zusammenfassung


In diesem Handbuch haben Sie gelernt, wie Sie mit Keras und TensorFlow den automatischen Detektor COVID-19 an einem Fluorogrammsatz trainieren.

Es gibt (noch) keine hochwertigen, von Experten geprüften Bilddatensätze für COVID-19, daher mussten wir mit dem arbeiten, was wir hatten, nämlich Joseph Cohens Repository auf GitHub :


Wir haben Keras und TensorFlow verwendet, um den COVID-19-Detektor zu trainieren, der eine Genauigkeit von 90-92%, eine Empfindlichkeit von 100% und eine Spezifität von 80% des Testsatzes aufweist (angesichts unseres begrenzten Datensatzes).

Beachten Sie, dass der beschriebene COVID-19-Detektor nur zu Ausbildungszwecken dient.

All Articles