Détecteur COVID-19 automatisé à partir d'images de fluorographie



Dans ce guide, vous apprendrez à détecter automatiquement COVID-19 dans un ensemble de données spécialement sélectionné à l'aide de Keras, TensorFlow et du deep learning.

Comme la plupart des gens dans le monde en ce moment, je suis sincèrement préoccupé par COVID-19. Je remarque que j'ai commencé à analyser constamment ma santé personnelle et je soupçonne que j'ai déjà été infecté.

Plus je m'inquiète, plus une combinaison douloureuse de symptômes réels avec l'hypocondrie se manifeste:

  • Je me suis réveillé le matin, je me sens un peu dépassé.
  • Quand je suis sorti du lit, j'ai déjà eu une fuite de mon nez (bien que l'on sache maintenant qu'un nez qui coule n'est pas un symptôme de COVID-19).
  • Alors qu'il atteignait la salle de bain pour prendre une serviette, il toussa également.

Au début, je n'y attachais pas beaucoup d'importance - je suis allergique au pollen, et en raison du temps chaud sur la côte est, le printemps est arrivé tôt cette année. Très probablement, mon allergie a éclaté.

Mais les symptômes ne se sont pas améliorés toute la journée.

Et me voilà assis, en train d'écrire ce manuel avec un thermomètre dans la bouche; et regarder vers le bas montre 37,4 ° C. La température est plus élevée que mes 36,3 ° C habituels. Tout au-dessus de 37,2 ° C, je considère déjà une légère fièvre.

Toux et un peu de fièvre? Ça pourrait être COVID-19 ... ou juste mon allergie.

Il est impossible de le découvrir sans test, et c'est précisément cette «ignorance» qui rend cette situation si dangereuse pour l'équilibre mental.

Pour les gens, il n'y a rien de plus terrible que l'inconnu.

Malgré toutes les peurs, j'essaie de m'en débarrasser de manière rationnelle. J'ai plus de trente ans, je suis en pleine forme, mon système immunitaire est très fort. Je vais aller en quarantaine (juste au cas où), je vais me reposer et récupérer normalement. COVID-19 ne me fait pas peur en termes de santé personnelle (au moins je continue de me le dire).

Cependant, je m'inquiète pour mes parents âgés, y compris ceux qui souffrent de maladies chroniques et ceux qui sont dans une maison de soins infirmiers ou un hôpital. Ils sont vulnérables et ce sera vraiment triste de les perdre à cause de cette infection.

Afin de ne pas rester les bras croisés et de ne pas succomber à la faiblesse (que ce soit l'allergie, le COVID-19 ou simplement l'anxiété), j'ai décidé de faire ce que je fais le mieux -servir toute la communauté de la vision industrielle et du deep learning en écrivant du code, en menant des expériences et en enseignant aux autres comment utiliser la vision par ordinateur et le deep learning dans des applications pratiques et réelles .

Cependant, pour être honnête, ce n'est pas l'article le plus scientifique que j'ai jamais écrit. En fait, loin d'être le plus. Les méthodes et les ensembles de données utilisés ne méritent pas d'être publiés. Mais ils peuvent être le point de départ pour ceux qui veulent aider.

Mais je veux faire tout ce qui est en mon pouvoir. Cet article est simplement ma façon de surmonter mentalement les moments difficiles et en même temps aider les autres dans une situation similaire.

J'espère que tu me comprends.

Dans la leçon d'aujourd'hui, nous ferons ce qui suit:

  1. Nous collecterons un ensemble de données ouvertes à partir de fluorogrammes de patients avec un test positif pour COVID-19.
  2. Nous collectons une sélection de fluorogrammes de patients en bonne santé.
  3. Nous formerons le réseau neuronal convolutif pour détecter automatiquement COVID-19 dans les images de l'ensemble créé.
  4. Nous évaluerons les résultats obtenus d'un point de vue pédagogique.

Avertissement: j'ai déjà laissé entendre, mais je vais le dire sans ambages. Les méthodes et techniques de cet article sont uniquement à des fins éducatives. Ce n'est pas une véritable étude scientifique et elle ne sera pas publiée dans une revue. L'article est destiné aux lecteurs qui sont intéressés par (1) la vision par ordinateur / l'apprentissage en profondeur et qui souhaitent apprendre à l'aide de méthodes pratiques, et (2) sont préoccupés par les événements actuels. Je vous prie de vous y référer de cette manière.

COVID-19 sur les fluorogrammes


Dans la première partie, nous discutons de la manière dont COVID-19 peut être détecté sur des radiographies thoraciques.

Considérez ensuite notre ensemble de données.

Ensuite, je vais vous montrer comment former le modèle d'apprentissage en profondeur à l'aide de Keras et TensorFlow pour définir COVID-19 dans notre jeu de données d'image.

Ma tâche est de vous inspirer et de montrer que l'étude de la vision par ordinateur / du deep learning, puis l'application de ces connaissances dans le domaine médical peuvent avoir un gros impact sur le monde.

Autrement dit: vous n'avez pas besoin d'un diplôme en médecine pour contribuer à la médecine. Les spécialistes de l'apprentissage en profondeur qui travaillent en étroite collaboration avec les médecins et les prestataires de soins de santé peuvent résoudre des problèmes complexes, sauver des vies et rendre le monde meilleur.

J'espère que ce guide vous incitera à faire exactement cela.

Mais avec tout cela dit, les revues scientifiques et les systèmes d'évaluation d'experts sont pleins de matériaux avec des modèles de prévision de COVID-19 de qualité douteuse. Veuillez ne pas prendre le code / modèle de cet article et ne pas l'envoyer à la revue ou le mettre dans le domaine public sur des sites scientifiques - vous n'ajouterez que du bruit.

De plus, si vous avez l'intention d'utiliser cet article (ou tout autre article COVID-19 sur Internet) dans vos propres recherches, assurez-vous de vérifier les règles du TRÉPIED pour créer des modèles de rapports de prévision .

Comme vous le savez probablement, l'utilisation de l'IA en médecine entraîne des conséquences très réelles . Publier ou utiliser ces modèles uniquement après consultation étroite avec un expert médical.


Figure. 1. Un exemple de fluorogramme d'un patient avec un test positif pour COVID-19. En utilisant Keras et TensorFlow dans de telles images, il est possible d'entraîner le classificateur à détecter COVID-19. Les

tests COVID-19 sont actuellement difficiles à trouver - ils ne sont tout simplement pas suffisants et ne peuvent pas être effectués assez rapidement, ce qui provoque la panique.

En cas de panique, certaines personnes ignobles en profitent et vendent de faux kits de test COVID-19 , trouvant des victimes sur les réseaux sociaux et les messageries instantanées .

Étant donné que le nombre de kits de test COVID-19 est limité, vous devez vous fier à d'autres méthodes de diagnostic.

Les médecins se fient souvent aux radiographies pulmonaires (communément appelées fluorogrammes) pour diagnostiquer la pneumonie, la pneumonie, les abcès et / ou les ganglions lymphatiques hypertrophiés.

COVID-19 attaque l'épithélium des voies respiratoires et les rayons X aident à examiner l'état pulmonaire du patient. Des appareils à rayons X sont installés dans la plupart des hôpitaux, il est donc logique d'utiliser la fluorographie pour tester COVID-19 sans kits de test spéciaux. L'inconvénient est qu'une telle analyse nécessite un spécialiste en radiologie et prend un temps considérable. Par conséquent, le développement d'un système automatisé sera très précieux pour gagner le temps précieux des professionnels de la santé du monde entier.

Remarque. Certaines publications plus récentes suggèrent que la tomodensitométrie est meilleure pour diagnostiquer COVID-19, mais dans cette leçon, nous ne travaillons qu'avec des fluorogrammes.

Base de données



Figure. 2. À gauche, des échantillons positifs (provenant de patients infectés) et à droite, des échantillons négatifs. Ces images sont utilisées pour former un modèle afin de prédire automatiquement la présence d'une maladie.Notre

ensemble de données a été compilé par le Dr Joseph Cohen , étudiant diplômé de l'Université de Montréal. Début mars, il a commencé à collecter des fluorogrammes de patients atteints de COVID-19, MERS, SRAS et SRAS et à les publier dans le référentiel sur GitHub .

Nous devons télécharger un fichier à partir du référentielmetadata.csvet sélectionner les lignes de celui-ci où il est indiqué

  1. Résultat positif sur COVID-19.
  2. Type de poumons «postéro-antérieur» (AP). Autant que je sache, c'est le type d'image utilisé dans les images «saines».

Un total de 25 fluorogrammes ont été trouvés avec des cas positifs de COVID-19 (Fig.2, à gauche).

Pour les patients en bonne santé, j'ai utilisé l' ensemble de données Cuggle (pneumonie) et sélectionné 25 images de patients en bonne santé (Fig.2, à droite). Cet ensemble de données présente un certain nombre de problèmes, à savoir des étiquettes bruyantes / incorrectes, mais il fera l'affaire pour une vérification conceptuelle du détecteur automatique COVID-19.

Structure du projet


Dans la section Téléchargements de mon site Web, vous pouvez entrer votre adresse e-mail et trouver un lien vers l'archive avec du code, des scripts et d'autres fichiers pour ce projet. Extrayez les fichiers et vous verrez la structure du répertoire:

$ 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

Les fluorogrammes se trouvent dans un répertoire dataset/où deux classes de données sont divisées en répertoires covid/et normal/.

Les deux scripts sont présentés pour construire un ensemble de données, mais nous ne les examinerons pas aujourd'hui. Au lieu de cela, considérez un script train_covid19.pyqui enseigne notre détecteur COVID-19.

la mise en oeuvre


Passons à la mise en place d'un réseau neuronal convolutif. Ouvrez le fichier train_covid19.pyet collez le code suivant:

# 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

Ce script utilise un certain nombre de bibliothèques d'apprentissage en profondeur de TensorFlow 2.0 et Keras. De plus, nous utilisons scikit-learn , la bibliothèque Python standard pour l'apprentissage automatique, matplotlib pour la représentation graphique et OpenCV pour le chargement et le traitement des images.

Pour installer TensorFlow 2.0 (y compris les bibliothèques scikit-learn, OpenCV et matplotlib appropriées), suivez simplement mes instructions pour Ubuntu ou macOS .

Ensuite, nous analyserons les arguments de la ligne de commande et initialiserons les hyperparamètres:

# 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

Trois arguments de ligne de commande :

  • --dataset: chemin d'accès au jeu de données d'entrée
  • --plot: Un chemin facultatif vers le calendrier de sortie de votre historique d'apprentissage. Sauf indication contraire, la valeur par défaut estplot.png
  • --model: chemin facultatif vers le modèle de sortie; défautcovid19.model

Les lignes suivantes initialisent la vitesse d'apprentissage initiale, le nombre d'époques et les hyperparamètres de la taille du paquet.

Nous sommes maintenant prêts à télécharger et à prétraiter les fluorogrammes:

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

Pour charger les données, nous capturons tous les chemins d'accès aux images dans le catalogue --dataset. Alors pour chacun imagePath:

  • Nous récupérons l'étiquette de classe ( covidou normal) du chemin .
  • Nous le chargeons imageet le prétraitons, le convertissant en RVB et le redimensionnant à 224 × 224 pixels, afin qu'il soit prêt pour le réseau neuronal.
  • Mise à jour des listes dataet labels.

Mettez ensuite à l'échelle l'intensité des pixels dans la plage [0, 1] et convertissez les données et les étiquettes au format de tableau NumPy.

Ensuite, nous effectuons un encodage direct labelsen divisant les données en ensembles pour la formation / les tests:

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

L'encodage direct signifie que les données sont converties au format suivant:

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

Chaque étiquette codée se compose d'un tableau avec deux éléments: «hot» (1) ou «not» (0).

Ensuite, les lignes suivantes séparent nos données, laissant 80% pour la formation et 20% pour les tests.

Pour nous assurer que le modèle est généralisé, nous effectuons une augmentation des données en réglant l'image pour qu'elle tourne de façon aléatoire de 15 ° dans le sens horaire ou antihoraire.

Les trois dernières lignes initialisent l'objet générateur d'augmentation de données.

Maintenant, initialisez notre modèle VGGNet et affinez-le :

# 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

Les deux premières lignes créent une instance du réseau VGG16 avec des poids préalablement formés sur ImageNet sans toucher la couche entièrement connectée (FC).

Ensuite, nous construisons un nouveau calque entièrement connecté, composé de calques POOL => FC = SOFTMAX, et l'ajoutons au-dessus de VGG16.

Ensuite, nous CONVgelons les poids pour VGG16, donc seule la couche FC sera entraînée . Ceci termine la configuration.

Nous sommes maintenant prêts à compiler et à former notre modèle d'apprentissage en profondeur pour 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)

Les premières lignes compilent le réseau neuronal avec l'option de réduire la vitesse d'apprentissage et l'optimiseur Adam. Étant donné qu'il s'agit d'un problème à deux classes, nous utilisons la perte "binary_crossentropy"plutôt que l'entropie croisée.

Pour démarrer le processus d'apprentissage, nous appelons la méthode fit_generator dans Keras , en passant les fluorogrammes à travers notre objet d'augmentation de données.

Nous évaluons le modèle:

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

Pour évaluer, nous faisons d'abord des prévisions sur l'ensemble de test, en préservant les indices de prévision. Ensuite, nous créons et affichons un rapport de classification à l'aide de scikit-learn, où il existe une telle fonction auxiliaire.

Ensuite, nous calculons la matrice des inexactitudes pour une évaluation statistique plus approfondie:

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

Ici, nous faisons ce qui suit:

  • Nous générons une matrice d'inexactitudes.
  • Avec son aide, nous calculons la précision, la sensibilité et la spécificité en imprimant toutes ces métriques.

Pour l'auto-test, nous générons un graphique avec un historique de la précision de l'entraînement et des pertes, le sortie dans un fichier graphique:

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

Enfin, enregistrez le modèle de classificateur tf.kerassur le disque:

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

Formation des détecteurs


Après avoir téléchargé tous les fichiers de l'archive avec les sources et les scripts mentionnés ci-dessus, ouvrez la console et exécutez la commande suivante pour entraîner le détecteur:

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

Diagnostic automatique de COVID-19 selon les résultats de la fluorographie


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

Comme le montrent les résultats ci-dessus, notre détecteur automatique a une précision d'environ 90 à 92% sur un ensemble d'échantillons existant. Cette évaluation est basée sur l'analyse d'images uniquement. Pendant la formation, plus aucune donnée n'a été utilisée, notamment la localisation géographique, la densité de population, etc.

La sensibilité était de 100% et la spécificité de 80%, ce qui signifie:

  • Les patients réellement infectés sont reconnus dans 100% des cas.
  • Les patients en bonne santé sont reconnus en bonne santé avec une probabilité de 80%.

Comme le montre le graphique de l'historique de la formation, notre réseau n'est pas trop recyclé, malgré un ensemble de données très limité : la



capacité de reconnaître COVID-19 avec une précision absolue est grande, bien que le taux de faux positifs soit un peu inquiétant, car de nombreuses personnes en bonne santé seront envoyées à mise en quarantaine avec des patients vraiment infectés.

Il est extrêmement difficile d'équilibrer la sensibilité et la spécificité lorsqu'il s'agit d'applications médicales, en particulier dans le cas de maladies infectieuses.

En ce qui concerne la vision par ordinateur et la formation approfondie en médecine, vous devez toujours vous rappeler que nos modèles prédictifs peuvent avoir des conséquences très réelles - un diagnostic manqué peut coûter la vie.

Encore une fois, ces résultats sont collectés à des fins éducatives uniquement. Cet article et les résultats qui l'accompagnent ne sont pas destinés à être publiés dans une revue scientifique et ne sont pas conformes aux règles TRIPOD pour la création de modèles de rapports de prévision .

Limitations, améliorations et travaux futurs



Figure. 4. Actuellement, les spécialistes de l'intelligence artificielle (IA) et du deep learning souffrent d'un manque de données de qualité pour la formation efficace des systèmes de détection automatique COVID-19 sur les images ( source d'image )

L'une des principales limites à la création de tels systèmes est la donnée. Nous n'avons tout simplement pas assez de données (fiables) pour entraîner le détecteur COVID-19. Les hôpitaux sont bondés de patients COVID-19, mais compte tenu de leurs droits et de leur vie privée, il devient encore plus difficile de collecter des ensembles d'images médicales de qualité en temps opportun.

Je suppose que dans les 12 à 18 prochains mois, le problème sera résolu, mais pour l'instant nous nous contentons de ce que nous avons. J'ai fait de mon mieux (en tenant compte de ma condition mentale et physique actuelle) pour rédiger un guide pour ceux qui sont intéressés à utiliser la vision par ordinateur et l'apprentissage profond dans la lutte contre COVID-19, en tenant compte des limites de temps et de ressources. Mais je dois vous rappeler que je ne suis pas un expert médical.

Un véritable détecteur COVID-19 doit subir des tests rigoureux par des professionnels de la santé qualifiés travaillant main dans la main avec des praticiens expérimentés de l'apprentissage en profondeur. La méthode décrite ici, bien sûr, ne convient pas à une utilisation pratique et est destinée uniquement à des fins éducatives.

De plus, il faut se demander ce que ce modèle «apprend» réellement. Comme je l'ai dit danspar le guide Grad-CAM la semaine dernière, il est tout à fait possible que notre modèle étudie des modèles qui ne sont pas liés à COVID-19, mais simplement des variations entre deux ensembles de données (c'est-à-dire entre les patients avec et sans COVID-19). Pour confirmer les résultats, des tests approfondis et l'assistance d'experts sont nécessaires.

Enfin, les futurs (et meilleurs) détecteurs seront multimodaux.

Maintenant, nous ne considérons que les images (par exemple, les rayons X). Les meilleurs détecteurs automatiques COVID-19 devraient utiliser plusieurs sources de données, non limitées aux images, y compris les indicateurs vitaux des patients, la densité de la population, la situation géographique, etc. Les images seules ne sont généralement pas suffisantes pour ce type d'application.

J'espère que ce guide servira de point de départ à toute personne intéressée à utiliser la vision par ordinateur et l'apprentissage en profondeur pour détecter automatiquement COVID-19.

Et après?


Je termine généralement mes articles de blog avec une recommandation d'un de mes livres ou cours afin que vous puissiez en savoir plus sur l'utilisation de la vision par ordinateur et de l'apprentissage en profondeur. Par respect pour la gravité du coronavirus, je ne vais pas le faire - ce n'est ni le moment ni le lieu.

Au lieu de cela, je dirai que nous sommes maintenant dans une période de vie très terrible. Comme les saisons, tout se passera, mais pour l'instant, vous devez vous accroupir et vous préparer à l'hiver froid - il est probable que le pire reste à venir.

J'ai reçu plusieurs lettres de lecteurs de PyImageSearch qui souhaitent utiliser ce temps d'arrêt pour étudier la vision par ordinateur et l'apprentissage en profondeur, plutôt que de devenir fou chez eux. C'est une pensée utile.

Sommaire


Dans ce guide, vous avez appris à utiliser Keras et TensorFlow pour entraîner le détecteur automatique COVID-19 sur un fluorogramme.

Il n'y a pas (encore) de jeux de données d'images de haute qualité et évalués par les pairs, nous avons donc dû travailler avec ce que nous avions, à savoir le référentiel de Joseph Cohen sur GitHub :


Nous avons utilisé Keras et TensorFlow pour entraîner le détecteur COVID-19, qui démontre une précision de 90 à 92%, une sensibilité de 100% et une spécificité de 80% sur l'ensemble de test (compte tenu de notre ensemble de données limité).

Gardez à l'esprit que le détecteur COVID-19 décrit est uniquement à des fins éducatives.

All Articles