sábado, marzo 21, 2020

Cómo detectar una infección COVID-19 con placas de Rayox X haciendo uso de Deep Learning y Teacheable Machine #Coronavirus

Desde que descubrimos la increíble herramienta online de Google llamada Teachable Machine, no hemos podido parar de utilizarla en multitud de proyectos como éste que hicimos con el equipo de LUCA - la unidad de Big Data & Artificial Intelligence - del grupo Telefónica, donde entrenamos un modelo para reconocer y clasificar las fotografías de las galaxias. La facilidad y la gran potencia de computación que encierra esta aparentemente sencilla aplicación es realmente impresionante.

Figura 1: Cómo detectar una infección COVID-19 con placas de Rayox X
haciendo uso de Deep Learning y Teacheable Machine

Además, estas herramientas están publicadas para que cualquiera pueda probarlas y crear su propio proyecto de Machine Learning y Deep Learning en un modo tipo DIY (Do It Yourself). El nivel de abstracción es asombroso y permite a cualquiera, esté familiarizado o no con el Deep Learning, entrenar sus modelos a una velocidad fuera de lo común.

Nosotros, desde el equipo de Ideas Locas, llevamos mucho tiempo investigando y realizando proyectos de Inteligencia Artificial, para diversas áreas, como los que publicamos en el libro de "Machine Learning aplicado a la Ciberseguridad: Técnicas y ejemplos en la detección de amenazas", de los que hemos ido trabajando para ElevenPaths, o estos que os hemos hablado con el equipo de LUCA.

Figura 2: Machine Learning aplicado a Ciberseguridad

Y como ahora el tema que tiene a medio mundo paralizado es el virus COVID-19, más conocido como Coronavirus, hemos querido implementar esta pequeña PoC junto con nuestros compañeros de LUCA, utilizando Teachable Machine para detectar en fotografías de Rayos X precisamente este virus popularmente conocido como Coronavirus a la vez que aprendemos conceptos de Inteligencia Artificial.


Es importante entender que esta es solo una PoC, y que para todos los ciudadanos de la Comunidad de Madrid, en Telefónica, hemos estado trabajando codo con codo con empresas como Google, Ferrovial, Carto, ForceManager y Mendesaltaren, han hecho para que todo el mundo pueda hacerse una autoevaluación de su estado, así como cuáles son las mejores acciones que deben seguir en cada caso. La web es https://www.coronamadrid.com y en el vídeo anterior tienes un ejemplo de cómo se utiliza.

Inteligencia Artificial para reconocer Coronavirus en fotos de Rayos X

La tecnología Deep Learning se está convirtiendo en una herramienta más para detectar el COVID-19, la cual está empezando a ser usada por investigadores para aportar su granito de arena a la hora de vencer esta batalla. Existen multitud de papers, entre el que destacamos esta publicación, titulada "Lung Infection Quantification of COVID-19 in CT Images with Deep Learning", que proponen diferentes arquitecturas profundas para crear modelos entrenados que ayuden a detectar posibles casos de infección.

Figura 4: Paper sobre identificación de imágenes de COVID-19 con Deep Learning

Y si algo hacen bien las arquitecturas actuales de Machine Learning, y en concreto, Deep Learning, es analizar imágenes. Con sólo tomar una placa de Rayos X de los pulmones de un paciente, se puede estimar mediante redes neuronales y visión artificial si éste está infectado o no del popular COVID-19.

Figura 5: Arquitectura utilizada en uno de los papers académicos que puedes consultar aquí.

Como veremos a a continuación, en unos pocos pasos, podemos entrenar un modelo de clasificación sencillo que es capaz de distinguir entre radiografías de personas sanas, afectados por otras patologías como SARS o Estreptococo y otras afectadas por el COVID-19. Eso sí, recordaros que esta PoC para detectar este virus está orientada exclusivamente a fines educativos o divulgativos sobre las técnicas de Deep Learning. Esta prueba de concepto consta básicamente de tres partes:
1. Obtención de un dataset de imágenes de pacientes con diferentes condiciones. 
2. Creación de un modelo con Teachable Machine utilizando los diferentes datasets que antes hemos mencionado. 
3. Una vez tenemos el modelo, este se exporta para poder manipularlo en nuestro proyecto utilizando TensorFlow y Keras.
Obtención y procesado del dataset

Antes de empezar a entrenar un modelo, necesitamos datos con el que éste pueda aprender. Por fortuna, existen datos disponibles para el público general de imágenes en Rayos X de pacientes con afecciones pulmomares. En este repositorio de GitHub encontramos una base de datos de casos con COVID-19 e imágenes de Rayos X o TC de tórax, que la comunidad científica mantiene actualizada de manera altruista para fines de investigación.

Figura 6: GitHub con imágenes para estudio con casos de COVID-19

Sin embargo, en total, a fecha de escribir este artículo, el número de imágenes no es muy elevada: 136 muestras. Con esto no podemos entrenar un modelo correctamente. Además, si contamos con que tenemos placas de pacientes con COVID-19 en razón 3:1 frente a las placas en las que el paciente no tiene la infección vírica, nuestro algoritmo corre peligro de sufrir un sesgo hacia pacientes con COVID-19.

Figura 7: Ejemplo de una de las imágenes del dataset de entrada correspondiente a una radiografía pulmonar

Por lo indicado arriba, no podíamos abordar un entrenamiento de clasificación sin igualar la ratio COVID-19 y OTHER sin hacer peligrar la calidad de nuestro modelo. Por ello, llevamos a cabo un ejercicio de data augmentation (técnica que nos permite hacer modificaciones sobre las imágenes, como girarlas, por ejemplo, y así obtener un nuevo tipo de entrada) sobre ambos datasets para conseguir al menos 135 muestras viables de cada clase. Estas son las modificaciones realizadas a las imágenes:
Entrenando el modelo en Teachable Machine

Una vez que ya contábamos con las 135 imágenes de cada tipo, procedimos a realizar el entrenamiento de nuestro modelo de clasificación de imágenes en la plataforma.

Figura 8: Carga de las imágenes desde local en Teachable Machine.

Tras cargar las imágenes, hacemos clic en “Train Model” y le pedimos que entrenara el modelo durante 50 épocas con un tamaño de batch de 16. Como podemos ver en la siguiente figura, la evolución de la función de pérdida es prometedora, descartando la influencia de ningún sesgo, y las precisiones son muy buenas desde el inicio del entrenamiento (del 100% en ambas clases tanto para el dataset de entrenamiento como para el reservado al testeo, este último formado por 21 muestras).

Figura 9: Resultado del entrenamiento (pasados 3 minutos) para la clasificación de nuestro dataset.

Una vez tenemos entrenado el modelo, tenemos dos alternativas:
1. Podemos testearlo con ficheros desde local, como se muestra en el vídeo que tenéis a continuación:

Figura 10: PoC con Teachable Machine

2. Tenemos la posibilidad de descargarnos el checkpoint y hacer uso del mismo en nuestro ordenador con Python, embeberlo en una webapp o, como hemos hecho nosotros, servirlo en un Jupyter Notebook de Colaboratory alojado en Google Drive para todos aquellos que queráis familiarizaros con la clasificación de imágenes por visión artifical con Deep Learning.
Es realmente increíble que sólo en unos pocos pasos, podamos crear una herramienta utilizando la potencia del Deep Learning para todo tipo de proyectos, incluso aquellos orientados a buscar un bien social o resolver problemas que afectan a toda la Humanidad, como este virus COVID-19. En enlace al Jupyter Notebook lo tenéis disponible en el siguiente link.

Figura 11: Trabajo en el Jypyter Notebook

De nuevo, debéis tener en cuenta que este simple notebook dirigido a la detección del COVID-19 es única y exclusivamente para fines educativos o divulgativos y, por sí sólo, no supone una prueba válida para el diagnóstico de ninguna enfermedad, y mucho menos para la que está causando los problemas en los que estamos inmersos. Así que ahora que estás en casa solo/a es un buen momento para aprender Machine Learning con Teachable Machine y Google Colaboratory.

Autores:

Fran Ramírez, (@cyberhadesblog) es investigador de seguridad y miembro del equipo de Ideas Locas en CDO en Telefónica, co-autor del libro "Microhistorias: Anécdotas y Curiosidades de la historia de la informática (y los hackers)", del libro "Docker: SecDevOps", también de "Machine Learning aplicado a la Ciberseguridad” además del blog CyberHades. Puedes contactar con Fran Ramirez en MyPublicInbox.


 Contactar con Fran Ramírez en MyPublicInbox
Enrique Blanco, (@eblanco_h) es Investigador en el departamento de Ideas Locas CDCO de Telefónica. Puedes contactar con Enrique Blanco en su buzón público en MyPublicInbox.

Contactar con Enrique Blanco

No hay comentarios:

Entrada destacada

Seis recomendaciones personales de libros de @0xWord para disfrutar y aprender

Este verano pude disfrutar de la lectura de un libro que me encantó. El libro de Factfulness que me había regalado mi compañera Beatriz Ce...

Entradas populares