Detecta COVID-19 en rayos X con Keras, TensorFlow y Deep Learning


Con la ayuda de esta guía, con la ayuda de Keras, TensorFlow y el aprendizaje profundo, aprenderemos cómo determinar automáticamente COVID-19 a partir de un conjunto de datos ensamblado manualmente a partir de imágenes de rayos X.

Como muchos otros, estoy sinceramente preocupado por COVID-19. Me di cuenta de que constantemente analizo mi condición y me pregunto si contraeré la enfermedad y cuándo ocurrirá. Y cuanto más me preocupo por eso, más se convierte en un juego mental doloroso, en el que la sintomatología se combina con hipocondría:

  • Me desperté por la mañana, sintiendo algo de dolor y debilidad.
  • Cuando me arrastré fuera de la cama, encontré una nariz que moqueaba (aunque ya se sabe que una nariz que moquea no es un síntoma de COVID-19).
  • Cuando llegué al baño a buscar una bufanda de papel, ya estaba tosiendo.

Al principio no le presté mucha atención: soy alérgico al polen y, debido al clima cálido en la costa este de los Estados Unidos, esta primavera fue muy temprana. Lo más probable es que estos sean síntomas alérgicos. Pero durante el día mi condición no mejoró. Me siento y escribo este manual con un termómetro en la boca. Miro hacia abajo y veo 37.4 ° C. Mi temperatura corporal normal es ligeramente más baja que otras, a 36.3 ° C. Todo por encima de 37.2 ° C ya es un poco de calor para mí.

¿Tos y fiebre leve? Podría ser COVID-19 ... o simplemente mi alergia. Es imposible descubrirlo sin probarlo, y es precisamente esta "ignorancia" lo que hace que la situación sea tan intimidante a nivel humano.

Minuto de atención ovni


COVID-19 — , SARS-CoV-2 (2019-nCoV). — , /, .



, .

, , .

: |

A pesar de mis miedos, trato de pensar racionalmente. Tengo poco más de 30 años, estoy en buena forma y mi inmunidad es fuerte. Me pondré en cuarentena (por si acaso), descansaré y me encargaré de todo. COVID-19 no me asusta desde el punto de vista de la salud personal (al menos lo soportaré yo mismo)

Por lo tanto, me preocupo por mis parientes de edad avanzada, incluidos todos aquellos que ya han sido diagnosticados con la enfermedad, así como aquellos que están en hogares de ancianos y hospitales. Estas personas son vulnerables, y será terrible si mueren debido a COVID-19.

En lugar de no hacer nada y dejar que mi dolencia me mantenga en casa (ya sea alergia, COVID-19 o mis miedos), decidí hacer lo que pueda:Escribiré el código, realizaré experimentos y, utilizando ejemplos prácticos, enseñaré a otros cómo usar la visión por computadora y el aprendizaje profundo .

Debo decir de inmediato que este no es el artículo más científico escrito por mí. Ella no es científica en absoluto. No vale la pena publicar los métodos y conjuntos de datos utilizados . Pero sirven como punto de partida para aquellos que quieren al menos algo para ayudar.

Estoy preocupado por ti y esta comunidad. Quiero ayudar en lo que pueda: este artículo es mi forma de hacer frente mentalmente a los momentos difíciles, mientras ayudo a otros en una situación similar.

En esta guía aprenderás:

  1. Cómo recopilar un conjunto de datos de código abierto de imágenes de rayos X de pacientes con COVID-19 detectado.
  2. «» ( ) .
  3. COVID-19 .
  4. .

Nota: ya he insinuado esto, pero ahora lo diré directamente. Las técnicas descritas aquí son solo para fines educativos. Este no es un estudio científico riguroso; no se publicará en revistas. Este artículo es para lectores interesados ​​en la visión por computadora y el aprendizaje profundo, que quieran aprender en la práctica, así como para aquellos inspirados por los acontecimientos actuales. Les pido que tengan todo esto en cuenta.

En la primera parte del manual, discutiremos cómo detectar COVID-19 en las radiografías de pulmón. Luego discutimos el conjunto de datos en sí. Y luego mostraré cómo entrenar al modelo usando Keras y TensorFlow para predecir COVID-19 en nuestras imágenes.

Explicación


Este artículo de autodetección de COVID-19 está escrito solo con fines educativos. Que no describen un sistema de diagnóstico fiable y preciso COVID-19, no se ha probado ni de un profesional, ni desde el punto de vista académico.

Mi objetivo es inspirarlo y mostrarle cómo el estudio de la visión por computadora y el aprendizaje profundo con la aplicación posterior de este conocimiento en el campo de la medicina puede tener un gran impacto en el mundo.

Imagínese: no necesita una educación médica para influir en la medicina . Los profesionales de capacitación profunda de hoy trabajan en estrecha colaboración con los médicos y otros médicos para resolver problemas complejos, salvar vidas y hacer del mundo un lugar mejor.

Espero que mi liderazgo te inspire a hacerlo.

Pero teniendo en cuenta todo lo anterior, los investigadores, los conservadores de revistas y el sistema de revisión ya están sobrecargados con trabajos que describen modelos de pronóstico COVID-19 de dudosa calidad. No envíe el código y el modelo de este artículo a una revista o alguna publicación científica; solo aumentará el caos .

Además, si desea realizar una investigación sobre la base de este artículo (o cualquier otra publicación sobre COVID-19), siga la guía TRÍPODE para describir los modelos predictivos.

Como comprenderá, el uso de la inteligencia artificial en el campo de la medicina puede tener consecuencias muy graves. Publique y use dichos modelos solo si es un médico especialista o si ha sido informado en detalle por dichos especialistas.

¿Cómo se puede detectar COVID-19 en los rayos X?



Figura 1: Ejemplo de radiografía de un paciente diagnosticado con COVID-19. En estas imágenes, puede enseñar el clasificador usando Keras y TensorFlow para determinar COVID-19.

Las pruebas para COVID-19 ahora son difíciles: no hay suficientes pruebas , pero es imposible producirlas rápidamente, lo que solo aumenta el pánico. Y en pánico, hay sinvergüenzas que intentan sacar provecho de otros y venden pruebas falsas en COVID-19 , encontrándose víctimas desprevenidas en las redes sociales y mensajeros instantáneos.

Dado el número limitado de pruebas, debemos confiar en otros métodos de diagnóstico.

Decidí estudiar las radiografías, porque los médicos a menudo las usan y los resultados de la tomografía computarizada para diagnosticar neumonía, inflamación pulmonar, abscesos y ganglios linfáticos agrandados. Dado que el virus ataca las células epiteliales que recubren el tracto respiratorio, podemos usar rayos X para estudiar la condición de los pulmones humanos. Y dado que las máquinas de rayos X están en casi todas partes, utilizando las imágenes puede detectar COVID-19 sin kits de prueba.

Las desventajas del método incluyen la necesidad de radiólogos, así como un tiempo de procesamiento significativo. Y el tiempo es especialmente costoso cuando las personas están enfermas en todo el mundo. Y para ahorrar tiempo a los médicos, debe crear un sistema de análisis automático .

Nota: , , COVID-19 . . , , , , COVID-19, .

COVID-19



Figura 2: a la izquierda hay imágenes de personas con un resultado positivo (infectado), a la derecha, con un negativo. En estas imágenes, enseñaremos el modelo utilizando TensorFlow y Keras para predecir automáticamente la presencia de COVID-19 (es decir, una enfermedad resultante del coronavirus).

El conjunto de datos de imágenes de pacientes utilizado con COVID-19 utilizado aquí fue compilado bajo la supervisión del Dr. Joseph Cohen , un estudiante graduado de la Universidad de Montreal. Hace unos días, Cohen comenzó a recolectar imágenes de rayos X de pacientes con COVID-19 y subirlas al repositorio de GitHub. Allí encontrará ejemplos no solo de esta enfermedad, sino también de MERS, SARS y ARDS.

Para crear un conjunto de datos I:

  1. Analiza el archivo metadata.csv del repositorio.
  2. Seleccionó todas las líneas:

En total, se obtuvieron 25 disparos con resultados positivos en COVID-19 ( Figura 2 , izquierda ).

Ahora elija las fotos de personas sanas.

Para hacer esto, tomé un conjunto de datos de rayos X de pulmón de Kaggle (neumonía) y seleccioné 25 imágenes de personas sanas ( Figura 2 , derecha ). Este conjunto de datos tiene una serie de inconvenientes, incluidas las etiquetas con relleno incorrecto o incorrecto, pero es adecuado como punto de partida para probar la hipótesis del detector COVID-19.

Como resultado, recibí 50 inyecciones: 25 pacientes con COVID-19 y 25 sanos. Puede descargar el conjunto de datos desde el enlace. Además, agregué scripts de Python con los que generé el conjunto de datos, pero en este artículo no los consideré.

Estructura del proyecto


Descargue el código y los datos. Extraiga los archivos desde allí y obtendrá la siguiente estructura de directorios:

$ 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

Tres directorios, cinco archivos. El conjunto de datos se encuentra en el directorio / conjunto de datos y se divide en dos clases: covid / y normal /. A continuación vemos el script train_covid19.py que entrena nuestro detector COVID-19.

Implementación de script de entrenamiento


Pasemos a ajustar la red neuronal convolucional, que diagnosticará automáticamente COVID-19 usando Keras, TensorFlow y aprendizaje profundo.

Abra el archivo train_covid19.py y pegue el siguiente código:

# 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

Este script aprovecha las bibliotecas TensorFlow 2.0 y Keras seleccionando las importaciones de tensorflow.keras. También usamos:

  • scikit-learn , esta es una biblioteca de aprendizaje automático de Python de facto ,
  • matplotlib para gráficos,
  • OpenCV para cargar y preprocesar imágenes en un conjunto de datos.

Para saber cómo instalar TensorFlow 2.0 (incluidos scikit-learn, OpenCV y matplotlib), consulte mis tutoriales para Ubuntu o macOS .

Ahora analizamos los argumentos para la línea de comando e inicializamos los hiperparámetros:

# 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

Nuestros tres argumentos de línea de comando ( líneas 24-31 ) incluyen:

  • --dataset: ruta al conjunto de datos de entrada.
  • --plot: ruta opcional al horario de salida del historial de aprendizaje. Por defecto, el gráfico se llama plot.png a menos que se especifique un nombre diferente en la línea de comando.
  • --model: ruta opcional a nuestro modelo de definición COVID-19 de salida. Por defecto, se llama covid19.model.

Ahora inicializamos la frecuencia de aprendizaje inicial, el número de eras de entrenamiento y los hiperparámetros de tamaño de paquete ( líneas 35-37 ).

A continuación, descargue y procese previamente las radiografías:

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

Para cargar los datos, tomamos todas las rutas a las imágenes en el directorio --dataset ( línea 42 ), y luego para cada imagePath:

  • Extraemos de la ruta ( línea 49 ) la etiqueta de clase (covid o normal).
  • Cargamos la imagen, la convertimos a canales RGB y la reducimos a un tamaño de 224x224 píxeles para alimentar una red neuronal convolucional ( líneas 53-55 ).
  • Actualización de listas de datos y etiquetas ( líneas 58 y 59 ).

Luego escalamos la intensidad de píxeles en un rango [0, 1]y convertimos los datos y las etiquetas al formato de matriz NumPy ( líneas 63 y 64 ).

A continuación, realizaremos una codificación en caliente de nuestras etiquetas y dividiremos el conjunto de datos en conjuntos de entrenamiento y prueba:

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

La codificación de etiquetas unitarias se realiza en las líneas 67-69 : los datos se presentarán en este formato:

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

Cada etiqueta codificada de esta manera consiste en una matriz de dos elementos, en la que uno de los elementos está "activo" (1) y el segundo es "no" (0). En las líneas 73 y 74, el conjunto de datos se divide en dos partes: 80% para capacitación, 20% para pruebas.

Para generalizar el modelo, realizamos la expansión de datos (aumento de datos), estableciendo una rotación de imagen aleatoria en 15 grados en sentido horario o en sentido contrario. El objeto de generación de extensión se inicializa en las líneas 77-79 .

Ahora inicialice el modelo VGGNet y prepárelo para un ajuste fino :

# 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

En las líneas 83 y 84 , se crea una instancia de la red neuronal VGG16 con los pesos obtenidos de antemano en ImageNet sin una capa completamente conectada.

A continuación, crearemos una capa totalmente conectada que consta de POOL => FC = capas SOFTMAX ( líneas 88-93 ) y la colocaremos encima de VGG16 ( línea 97 ).

Ahora congele los pesos CONV para que solo se entrene una capa completamente conectada ( líneas 101-102 ). Esto termina de sintonizar.

Ahora estamos listos para compilar y entrenar nuestro modelo de aprendizaje profundo:

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

Las líneas 106-108 compilaron el entrenamiento de velocidad de atenuación de red y el optimizador Adam. Dado que esta es una tarea de clasificación de dos clases, utilizamos la función de pérdida de la entropía cruzada binaria (binary_crossentropy), no la entropía cruzada categórica (crossentropy categórica).

Para comenzar el entrenamiento, llamamos al método Keras fit_generator y le damos nuestros rayos X a través de una extensión de objeto de datos ( líneas 112-117 ).

Ahora vamos a evaluar el modelo:

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

Para hacer esto, primero realizamos pronósticos basados ​​en el conjunto de pruebas y obtenemos índices de pronóstico ( líneas 121-125 ). Luego generaremos y mostraremos el informe de clasificación ( líneas 128 y 129 ) usando la utilidad scikit-learn .

Ahora calculemos la matriz de confusión para la estimación estadística futura:

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

Estamos aquí:

  • generar una matriz de imprecisiones ( línea 133 ),
  • Utilizamos esta matriz para determinar la precisión, la sensibilidad y la especificidad ( líneas 135-137 ), y luego derivamos todas estas métricas ( líneas 141-143 ).

Luego, para un análisis posterior, mostramos en forma de gráfico en un archivo el historial de cambios de precisión y pérdida:

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

Y finalmente, serializamos el modelo de clasificador tf.keras en el disco:

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

Entrenamos nuestro detector con Keras y TensorFlow


Después de la implementación del script train_covid19.py, podemos entrenar el detector automático.

Descargue el código fuente, el conjunto de datos y el modelo previamente entrenado. Abra una terminal y ejecute el comando para entrenar el detector:

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

Diagnóstico automático de rayos X


Nota: en esta parte no "resolvemos" el problema de determinar COVID-19. Está escrito en el contexto de la situación actual y solo con fines educativos. Este es un ejemplo de la aplicación práctica de la visión por computadora y el aprendizaje profundo, para que se sienta cómodo con diferentes métricas, incluida la precisión, sensibilidad y especificidad habituales (y las compensaciones que deben tenerse en cuenta al trabajar con datos médicos). Repito, no resolvemos el problema de determinar COVID-19.

Por lo tanto, nuestro detector automático mostró una precisión de ~ 90-92% en muestras deimágenes de rayos X por sí solos . No se utilizó otra información para entrenar el modelo, incluida la ubicación geográfica, la densidad de población, etc.

También recibimossensibilidad del 100% y especificidad del 80% , lo que significa:

  • De los pacientes con COVID-19 (casos positivos verdaderos), utilizando el modelo, pudimos identificar con precisión como "COVID-19 positivo" en el 100% de los casos.
  • De los pacientes que no tenían COVID-19 (casos negativos verdaderos), utilizando el modelo, pudimos identificarnos con precisión como "COVID-19 negativos" en solo el 80% de los casos.

Como muestra el gráfico del historial de entrenamiento, la red neuronal no está reentrenada, a pesar del tamaño muy pequeño de los datos de entrenamiento:


Figura 3: Este gráfico de precisión y pérdida demuestra que nuestro modelo no está reentrenado.

Es genial que hayamos logrado una precisión del 100% al detectar COVID-19. Sin embargo, la situación con casos verdaderamente negativos es vergonzosa: no queremos atribuir a "COVID-19-negativo" aquellos que realmente son "COVID-19-positivo".

Menos queremos dejar que los pacientes enfermos se vayan a sus casas, a sus familiares y amigos, contribuyendo a una mayor propagación de la enfermedad.

También debe tener mucho cuidado con la proporción de casos falsos positivos: no queremos contar por error a alguien como enfermo y ponerlo en cuarentena con otros pacientes para que se infecte de ellos .

Encontrar un equilibrio entre sensibilidad y especificidad:una tarea extremadamente difícil , especialmente cuando se trata de medicina, y especialmente cuando se trata de propagar rápidamente enfermedades infecciosas.

Hablando de la visión médica por computadora y el aprendizaje profundo, siempre debe recordar que el trabajo de nuestros modelos predictivos puede tener consecuencias muy graves: los diagnósticos erróneos pueden costar vidas .

Repito, los resultados en este artículo se presentan solo con fines educativos . Esta no es una publicación de revista, estos datos no cumplen con los criterios del TRÍPODE para la publicación de modelos de pronóstico.

Limitaciones, mejoras y más trabajo.



Figura 4: Hoy en día, los profesionales de inteligencia artificial y aprendizaje profundo carecen de datos COVID-19 de calidad para entrenar de manera efectiva los sistemas automáticos de reconocimiento de imágenes.

Una de las principales limitaciones del método descrito en este manual son los datos.

No tenemos suficientes datos (confiables) para entrenar detectores COVID-19.

Los hospitales ya tienen muchos casos con este virus, pero dada la privacidad y los derechos humanos, se hace aún más difícil reunir rápidamente un conjunto de datos de alta calidad a partir de imágenes médicas. Creo que en los próximos 12-18 meses tendremos más datos de calidad. Pero por ahora, tienes que usar lo que tienes.

Intenté (dada mi condición física y mental) en las condiciones de tiempo y recursos limitados para escribir esta guía para aquellos que estén interesados ​​en el uso de la visión por computadora y el aprendizaje profundo. Pero déjame recordarte que no soy un médico profesional .

Para usar el detector COVID-19 en la vida real, debe ser rigurosamente probado por médicos reales que trabajan de la mano con especialistas en aprendizaje profundo. El método que describí no es adecuado para esto.

Además, hay que tener cuidado con lo que "aprende" exactamente el modelo.

Como escribí en el manual de Grad-CAM, es probable que el modelo aprenda patrones que no son relevantes para COVID-19, pero solo pueda distinguir entre dos muestras de datos (es decir, diagnósticos positivos y negativos). Los resultados de nuestro detector deberán ser rigurosamente probados y verificados por médicos.

Y finalmente, los detectores futuros (y más avanzados) serán multimodales.

Ahora usamos solo datos visuales (rayos X). Los mejores detectores deberían usar otros datos: indicadores vitales del paciente, densidad de población, ubicación geográfica, etc. Los datos visuales solos generalmente no son suficientes para tales tareas .

Por estas razones, quiero enfatizar nuevamente: esta guía solo juega el papel de material de capacitación, no puede considerarse como un detector COVID-19 confiable.

Si cree que usted o alguien cercano a COVID-19, siga las recomendaciones de su sistema de atención médica.

Espero que esta guía te haya sido útil. También espero que sea para alguien un punto de partida en la búsqueda de métodos para utilizar la visión por computadora y el aprendizaje profundo para determinar automáticamente COVID-19.

Resumen


En esta guía, aprendió a usar Keras, TensorFlow y el aprendizaje profundo para crear un detector automático COVID-19 en un conjunto de datos a partir de imágenes de rayos X.

Hoy (todavía) no hay conjuntos de datos de imagen verificados de alta calidad para esta enfermedad, por lo que debe trabajar con el repositorio de Joseph Cohen :


Luego, con la ayuda de Keras y TensorFlow, capacitamos al detector COVID-19, que mostró una precisión del 90-92% en nuestra muestra de prueba, con una sensibilidad del 100% y una especificidad del 80% (en nuestro pequeño conjunto de datos).

Recuerde que el detector descrito aquí es solo para fines educativos (vea la Nota en el texto). Quería inspirar a otras personas a utilizar el aprendizaje profundo, para mostrar que, en combinación con la visión por computadora, puede tener un gran impacto en nuestras vidas.

Espero que lo hayan disfrutado.

All Articles