Detector automático COVID-19 de imágenes de fluorografía



En esta guía, aprenderá a detectar automáticamente COVID-19 en un conjunto de datos especialmente seleccionado utilizando Keras, TensorFlow y aprendizaje profundo.

Como la mayoría de las personas en el mundo en este momento, estoy sinceramente preocupado por COVID-19. Noto que comencé a analizar constantemente mi salud personal y sospecho que ya me he infectado.

Cuanto más me preocupa esto, más se manifiesta una combinación dolorosa de síntomas reales con hipocondría:

  • Me desperté por la mañana, me siento un poco abrumado.
  • Cuando me levanté de la cama, ya tenía una fuga de mi nariz (aunque ahora se sabe que la secreción nasal no es un síntoma de COVID-19).
  • Mientras llegaba al baño para tomar una servilleta, también tosió.

Al principio no le di mucha importancia a esto: soy alérgico al polen y, debido al clima cálido en la costa este, la primavera llegó a principios de este año. Lo más probable es que mi alergia acaba de estallar.

Pero los síntomas no mejoraron en todo el día.

Y aquí estoy sentado aquí, escribiendo este manual con un termómetro en la boca; y mirar hacia abajo muestra 37.4 ° C. La temperatura es más alta que mis 36.3 ° C habituales. Todo por encima de 37.2 ° C, ya considero un poco de fiebre.

¿Tos y un poco de fiebre? Podría ser COVID-19 ... o simplemente mi alergia.

Es imposible descubrirlo sin una prueba, y es precisamente esta "ignorancia" lo que hace que esta situación sea tan peligrosa para el equilibrio mental.

Para las personas no hay nada más terrible que lo desconocido.

A pesar de todos los miedos, trato de deshacerme de ellos de manera racional. Tengo más de treinta años, estoy en buena forma, mi sistema inmunológico es muy fuerte. Iré a cuarentena (por si acaso), descansaré y me recuperaré normalmente. COVID-19 no me asusta en términos de mi salud personal (al menos sigo diciéndome esto).

Sin embargo, me preocupan mis parientes mayores, incluidos los que tienen enfermedades crónicas y los que se encuentran en un hogar de ancianos o en un hospital. Son vulnerables, y será realmente triste si los perdemos debido a esta infección.

Para no quedarme de brazos cruzados y no sucumbir a la debilidad (ya sea alergia, COVID-19 o simplemente ansiedad), decidí hacer lo que mejor hago:Servir a toda la comunidad de visión artificial y aprendizaje profundo al escribir código, realizar experimentos y enseñar a otros cómo usar la visión por computadora y el aprendizaje profundo en aplicaciones prácticas del mundo real .

Sin embargo, para ser honesto, este no es el artículo más científico que he escrito. De hecho, lejos de la mayoría. Los métodos y conjuntos de datos utilizados no merecen publicación. Pero pueden ser el punto de partida para aquellos que quieren ayudar.

Pero quiero hacer todo lo que esté en mi poder. Este artículo es simplemente mi manera de superar mentalmente tiempos difíciles y al mismo tiempo ayudar a otros en una situación similar.

Espero que me entiendas.

En la lección de hoy haremos lo siguiente:

  1. Recopilaremos un conjunto de datos abiertos de fluorogramas de pacientes con una prueba positiva para COVID-19.
  2. Recopilamos una selección de fluorogramas de pacientes sanos.
  3. Entrenaremos la red neuronal convolucional para detectar automáticamente COVID-19 en las imágenes del conjunto creado.
  4. Evaluaremos los resultados obtenidos desde un punto de vista educativo.

Descargo de responsabilidad: ya lo he insinuado, pero lo diré sin rodeos. Los métodos y técnicas en este artículo son solo para fines educativos. Este no es un estudio científico real, y no será publicado en una revista. El artículo está dirigido a lectores que estén interesados ​​en (1) visión por computadora / aprendizaje profundo y quieran aprender utilizando métodos prácticos, y (2) estén preocupados por los eventos actuales. Te ruego que te relaciones con esto de esta manera.

COVID-19 en fluorogramas


En la primera parte, discutimos cómo se puede detectar COVID-19 en las radiografías de tórax.

Entonces considere nuestro conjunto de datos.

Luego, le mostraré cómo entrenar el modelo de aprendizaje profundo utilizando Keras y TensorFlow para definir COVID-19 en nuestro conjunto de datos de imágenes.

Mi tarea es inspirarlo y mostrarle que el estudio de la visión por computadora / aprendizaje profundo y luego aplicar este conocimiento en el campo de la medicina puede tener un gran impacto en el mundo.

En pocas palabras: no necesita un título médico para contribuir a la medicina. Los especialistas en aprendizaje profundo que trabajan en estrecha colaboración con médicos y proveedores de atención médica pueden resolver problemas complejos, salvar vidas y hacer del mundo un lugar mejor.

Espero que esta guía te inspire a hacer exactamente eso.

Pero con todo esto dicho, las revistas científicas y los sistemas de evaluación de expertos están llenos de materiales con modelos de pronóstico de COVID-19 de dudosa calidad. No tome el código / modelo de este artículo y no lo envíe a la revista ni lo ponga en el dominio público en sitios científicos, solo agregará algo de ruido.

Además, si tiene la intención de utilizar este artículo (o cualquier otro artículo de COVID-19 de Internet) en su propia investigación, asegúrese de verificar las reglas del TRÍPODE para crear modelos de informes de pronóstico .

Como probablemente sepa, el uso de la IA en la medicina tiene consecuencias muy reales . Publique o use dichos modelos solo después de una estrecha consulta con un experto médico.


Higo. 1. Un ejemplo de un fluorograma de un paciente con una prueba positiva para COVID-19. Usando Keras y TensorFlow en tales imágenes, es posible entrenar al clasificador para detectar COVID-19. Actualmente, las

pruebas de COVID-19 son difíciles de encontrar, simplemente no son suficientes y no se pueden hacer lo suficientemente rápido, lo que causa pánico.

Cuando hay pánico, algunas personas viles se aprovechan de esto y venden kits de prueba falsos COVID-19 , encontrando víctimas en las redes sociales y mensajeros instantáneos .

Dado que el número de kits de prueba COVID-19 es limitado, debe confiar en otros métodos de diagnóstico.

Los médicos a menudo confían en las radiografías de tórax (comúnmente llamadas fluorogramas) para diagnosticar neumonía, neumonía, abscesos y / o ganglios linfáticos agrandados.

COVID-19 ataca el epitelio del tracto respiratorio, y los rayos X ayudan a examinar la condición pulmonar del paciente. Las máquinas de rayos X se instalan en la mayoría de los hospitales, por lo que es lógico usar fluorografía para probar COVID-19 sin kits de prueba especiales. La desventaja es que dicho análisis requiere un especialista en radiología y requiere un tiempo considerable. Por lo tanto, el desarrollo de un sistema automatizado será muy valioso para ahorrar el valioso tiempo de los profesionales médicos de todo el mundo.

Nota. Algunas publicaciones más recientes sugieren que la tomografía computarizada es mejor para diagnosticar COVID-19, pero en esta lección solo trabajamos con fluorogramas.

Conjunto de datos



Higo. 2. A la izquierda hay muestras positivas (de pacientes infectados), y a la derecha son negativas. Estas imágenes se utilizan para entrenar un modelo para predecir automáticamente la presencia de una enfermedad.

Nuestro conjunto de datos fue compilado por el Dr. Joseph Cohen , un estudiante graduado de la Universidad de Montreal. A principios de marzo, comenzó a recolectar fluorogramas de pacientes con COVID-19, MERS, SARS y SARS y a publicarlos en el repositorio en GitHub .

Necesitamos descargar un archivo del repositoriometadata.csvy seleccionar las líneas desde donde se indica

  1. Resultado positivo en COVID-19.
  2. Tipo de pulmones 'posterior-anterior' (PA). Por lo que yo entiendo, este es el tipo de imagen utilizada en imágenes "saludables".

Se encontraron un total de 25 fluorogramas con casos positivos de COVID-19 (Fig. 2, izquierda).

Para pacientes sanos, utilicé el conjunto de datos de Cuggle (neumonía) y seleccioné 25 imágenes de pacientes sanos (Fig. 2, derecha). Este conjunto de datos tiene varios problemas, a saber, etiquetas ruidosas / incorrectas, pero servirá para una verificación conceptual del detector automático COVID-19.

Estructura del proyecto


En la sección de Descargas de mi sitio web, puede ingresar su dirección de correo electrónico y encontrar un enlace al archivo con código, scripts y otros archivos para este proyecto. Extraiga los archivos y verá la estructura del directorio:

$ 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

Los fluorogramas están en un directorio dataset/donde dos clases de datos se dividen en directorios covid/y normal/.

Ambos scripts se presentan para crear un conjunto de datos, pero no los consideraremos hoy. En cambio, considere una secuencia de comandos train_covid19.pyque enseña nuestro detector COVID-19.

Implementación


Pasemos a configurar una red neuronal convolucional. Abra el archivo train_covid19.pyy 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 utiliza varias bibliotecas de aprendizaje profundo de TensorFlow 2.0 y Keras. Además, utilizamos scikit-learn , la biblioteca estándar de Python para aprendizaje automático, matplotlib para gráficos y OpenCV para cargar y procesar imágenes.

Para instalar TensorFlow 2.0 (incluidas las bibliotecas apropiadas de scikit-learn, OpenCV y matplotlib), solo siga mis instrucciones para Ubuntu o macOS .

A continuación, analizaremos los argumentos de la línea de comandos e inicializaremos 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

Tres argumentos de línea de comando :

  • --dataset: ruta al conjunto de datos de entrada
  • --plot: Una ruta opcional al horario de salida para su historial de aprendizaje. A menos que se especifique lo contrario, el valor predeterminado esplot.png
  • --model: ruta opcional al modelo de salida; defectocovid19.model

Las siguientes líneas inicializan la velocidad de aprendizaje inicial, el número de eras y los hiperparámetros del tamaño del paquete.

Ahora estamos listos para descargar y preprocesar los fluorogramas:

# 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 datos, capturamos todas las rutas a las imágenes en el catálogo --dataset. Luego para cada uno imagePath:

  • Recuperamos la etiqueta de clase ( covido normal) de la ruta .
  • Lo cargamos imagey procesamos previamente, lo convertimos a RGB y lo redimensionamos a 224 × 224 píxeles, para que esté listo para la red neuronal.
  • Actualización de listas datay labels.

Luego, escale la intensidad de píxeles al rango [0, 1] y convierta los datos y las etiquetas al formato de matriz NumPy.

A continuación, realizamos una codificación directa labelsdividiendo los datos en conjuntos para entrenamiento / prueba:

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

La codificación directa significa que los datos se convierten al siguiente formato:

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

Cada etiqueta codificada consiste en una matriz con dos elementos: 'hot' (1) o 'not' (0).

Luego, las siguientes líneas separan nuestros datos, dejando un 80% para capacitación y un 20% para pruebas.

Para asegurarnos de que el modelo esté generalizado, realizamos el aumento de los datos configurando la imagen para que gire al azar 15 ° en sentido horario o antihorario.

Las últimas tres líneas inicializan el objeto generador de aumento de datos.

Ahora inicializar nuestro modelo VGGNet y ajustarlo :

# 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

Las primeras dos líneas crean una instancia de la red VGG16 con pesos previamente entrenados en ImageNet sin tocar la capa completamente conectada (FC).

Luego construimos una nueva capa totalmente conectada, que consta de capas POOL => FC = SOFTMAX, y la agregamos encima de VGG16.

Luego congelamos los pesos CONVpara VGG16, por lo que solo se entrenará la capa FC. Esto completa la configuración.

Ahora estamos listos para compilar y entrenar nuestro modelo de aprendizaje profundo para 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)

Las primeras líneas compilan la red neuronal con la opción de reducir la velocidad de aprendizaje y el optimizador Adam. Dado que este es un problema de dos clases, usamos pérdida en "binary_crossentropy"lugar de entropía cruzada.

Para comenzar el proceso de aprendizaje, llamamos al método fit_generator en Keras , pasando los fluorogramas a través de nuestro objeto de aumento de datos.

Evaluamos 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 evaluar, primero hacemos pronósticos sobre el conjunto de pruebas, preservando los índices de pronóstico. Luego creamos y mostramos un informe de clasificación usando scikit-learn, donde existe una función auxiliar de este tipo.

A continuación, calculamos la matriz de inexactitudes para una evaluación estadística adicional:

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

Aquí hacemos lo siguiente:

  • Generamos una matriz de imprecisiones.
  • Con su ayuda, calculamos la precisión, la sensibilidad y la especificidad imprimiendo todas estas métricas.

Para la autocomprobación, generamos un gráfico con un historial de precisión y pérdidas de entrenamiento, y lo enviamos a un archivo gráfico:

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

Finalmente, guarde el modelo clasificador tf.kerasen el disco:

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

Entrenamiento de detectores


Después de descargar todos los archivos del archivo con las fuentes y los scripts mencionados anteriormente, abra la consola y ejecute el siguiente 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 COVID-19 según los resultados de la fluorografía.


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

Como se puede ver en los resultados anteriores, nuestro detector automático tiene una precisión de aproximadamente 90-92% en un conjunto de muestras existente. Esta calificación se basa únicamente en el análisis de imágenes. Durante el entrenamiento, no se utilizaron más datos, incluida la ubicación geográfica, la densidad de población, etc.

La sensibilidad fue del 100% y la especificidad del 80%, lo que significa:

  • Los pacientes verdaderamente infectados se reconocen en el 100% de los casos.
  • Los pacientes sanos son reconocidos como saludables con una probabilidad del 80%.

Como muestra el gráfico del historial de entrenamiento, nuestra red no está demasiado capacitada, a pesar de un conjunto de datos muy limitado : la



capacidad de reconocer COVID-19 con absoluta precisión es excelente, aunque la tasa de falsos positivos es un poco preocupante, porque muchas personas sanas serán enviadas a cuarentena con pacientes realmente infectados.

Equilibrar la sensibilidad y la especificidad es increíblemente difícil cuando se trata de aplicaciones médicas, especialmente en el caso de enfermedades infecciosas.

Cuando se trata de visión por computadora y educación profunda en medicina, siempre debe recordar que nuestros modelos predictivos pueden tener consecuencias muy reales: un diagnóstico omitido puede costar la vida.

Una vez más, estos resultados se recopilan solo con fines educativos. Este artículo y los resultados que lo acompañan no están destinados a su publicación en una revista científica y no cumplen con las reglas del TRÍPODE para la creación de modelos de informes de pronóstico .

Limitaciones, mejoras y trabajos futuros.



Higo. 4. Actualmente, los especialistas en inteligencia artificial (IA) y los especialistas en aprendizaje profundo adolecen de una falta de datos de calidad para la capacitación efectiva de los sistemas de detección automática COVID-19 en imágenes ( fuente de imagen )

Una de las principales limitaciones para crear tales sistemas son los datos. Simplemente no tenemos suficientes datos (confiables) para entrenar el detector COVID-19. Los hospitales están llenos de pacientes con COVID-19, pero dados sus derechos y privacidad, es cada vez más difícil recopilar conjuntos de imágenes médicas de calidad de manera oportuna.

Supongo que en los próximos 12-18 meses el problema se resolverá, pero por ahora estamos contentos con lo que tenemos. Hice mi mejor esfuerzo (considerando mi condición física y mental actual) para compilar una guía para aquellos que estén interesados ​​en usar la visión por computadora y el aprendizaje profundo en la lucha contra COVID-19, teniendo en cuenta las limitaciones de tiempo y recursos. Pero debo recordarle que no soy un experto médico.

Un verdadero detector COVID-19 debe someterse a pruebas rigurosas por parte de profesionales médicos capacitados que trabajen de la mano con profesionales experimentados en aprendizaje profundo. El método descrito aquí, por supuesto, no es adecuado para uso práctico y está destinado solo para fines educativos.

Además, debemos preguntarnos qué "aprende" realmente este modelo. Como dije ensegún la guía Grad-CAM la semana pasada, es completamente posible que nuestro modelo estudie patrones que no están relacionados con COVID-19, sino que simplemente son variaciones entre dos conjuntos de datos (es decir, entre pacientes con y sin COVID-19). Para confirmar los resultados, se requieren pruebas exhaustivas y asistencia de expertos.

Finalmente, los detectores futuros (y los mejores) serán multimodales.

Ahora solo consideramos imágenes (por ejemplo, rayos X). Los mejores detectores automáticos COVID-19 deben usar varias fuentes de datos, no limitadas a imágenes, incluidos signos vitales del paciente, densidad de población, ubicación geográfica, etc. Las imágenes por sí solas generalmente no son suficientes para este tipo de aplicación.

Espero que esta guía sirva como punto de partida para cualquier persona interesada en usar la visión por computadora y el aprendizaje profundo para detectar automáticamente COVID-19.

¿Que sigue?


Por lo general, finalizo los artículos de mi blog con una recomendación de uno de mis libros o cursos para que pueda aprender más sobre el uso de la visión por computadora y el aprendizaje profundo. Por respeto a la gravedad del coronavirus, no voy a hacer esto, ahora no es el momento ni el lugar.

En cambio, diré que ahora estamos en un período de vida muy terrible. Al igual que las estaciones, todo pasará, pero por ahora debes ponerte en cuclillas y prepararte para el frío invierno; es probable que lo peor esté por venir.

Recibí varias cartas de lectores de PyImageSearch que desean utilizar este tiempo de inactividad para estudiar la visión por computadora y el aprendizaje profundo, en lugar de volverse locos en sus hogares. Este es un pensamiento útil.

Resumen


En esta guía, aprendió a usar Keras y TensorFlow para entrenar el detector automático COVID-19 en un conjunto de fluorogramas.

No hay conjuntos de datos de imágenes revisados ​​por pares de alta calidad para COVID-19 (todavía), por lo que tuvimos que trabajar con lo que teníamos, a saber, el repositorio de Joseph Cohen en GitHub :


Utilizamos Keras y TensorFlow para entrenar el detector COVID-19, que demuestra una precisión del 90-92%, una sensibilidad del 100% y una especificidad del 80% en el conjunto de prueba (dado nuestro conjunto de datos limitado).

Tenga en cuenta que el detector COVID-19 descrito es solo para fines educativos.

All Articles