01: Efficient-Family & Planteamiento Analisis Covid-19

Original article can be found here (source): Deep Learning on Medium

EfficientDet: De tal palo, tal astilla.

Ya revisado EfficientNet podemos ver un avance a las redes convolucionales para clasificar objetos. Pero, ¿Qué sucede con los detectores de objetos?

En noviembre de 2019 se publica el paper de EfficientDet, una familia de modelos bajo el mismo enfoque, mantener y mejorar la exactitud del modelo, mejorando la performance y reduciendo la cantidad de parámetros en el mismo. Siguiendo los pasos de su antecesor, EfficientDet se enfoca en dos aspectos puntuales: el método de escalado compuesto (explicado anteriormente) y la red piramidal de características bidireccionales (Bi-Directional Feature Piramidal Network / BiFPN). Este último tiene como objetivo responder a los problemas ocasionados por las características que se encuentran en escalas múltiples. Esto lo logra aprendiendo la importancia de cada entrada según sea pertinente para una salida.

Utiliza además algunas otras mejoras en la arquitectura, pero explicarlas me tomaría toda la noche, por lo que les dejaré el link del paper aquí por si gustan leerlo: https://arxiv.org/abs/1911.09070

Yo tratando de entender EfficientDet (Gif tomado de Reddit / Gifak.net)

El backbone utilizado fue EfficientNet (probablemente obtuvo el nombre de allí), y se hicieron diversos testeos. Logró el objetivo de alcanzar buenas métricas de evaluación (Mean Average Precision) junto a alcanzar un buen uso de recursos computacionales. La comparación con otros modelos es la siguiente:

EfficientDet alcanzaba mejor mAP en COCO que otras redes. Además se puede observar que hace menor uso de recursos computacionales en promedio. Imagen obtenida del paper oficial EfficientDet.

Un gráfico que puede darnos importante información es el siguiente:

Gráficos extraídos del paper oficial EfficientDet.

Se puede observar (y en el gráfico anterior) que los modelos EfficientDet a medida que van avanzando los recursos consumidos, pierden tendencia en precisión promedio. El modelo que parece optimizar estas dos características es el EfficientDet-D4, teniendo un consumo computacional similar a Yolov3, pero aproximadamente 10 unidades más de mAP.

Y bien, ¿Podemos probar EfficientDet? Por supuesto. He tomado este repositorio como base para constuir las siguientes predicciones con EfficientDet-D4.

Imágenes resultadas de inferencia con EfficientDet-D4. Imágen inferior izquierda basada en el proyecto de distanciamiento social por LandingAI.

Análisis

Si bien es cierto estos nuevos modelos ofrecen un buen performance, los modelos estándar se han posicionado no debido a una comodidad acordada, sino que han demostrado obtener muy buenos resultados en distintas aplicaciones. En mi experiencia, los modelos estandar han sabido manejar mejor los casos donde era necesario utilizar modelos preentrenados, sin embargo, cuando se requería hacer transfer learning o fine-tune de algún modelo, EfficientDet-D0 y D1 me han traído resultados más favorables. Estas pequeñas experiencias nos pueden dar a entender que probablemente estos modelos extraen features más relevantes que otros modelos, por lo que es mejor utilizarlos en casos ya mencionados. Por ejemplo, utilizar EfficientNet-B7 en una aplicación de clasificación donde no sea necesario una intervención en tiempo real o EfficientDet-D7 para detección en la misma situación en aplicaciones médicas donde no se tienen modelos preentrenados. Otro ejemplo sería utilizar modelos como EfficientNet-B0 o EfficientDet-D0 para situaciones en tiempo real en aplicaciones de Safety & Security.

A pesar de todo lo explicado, han surgido nuevos modelos basados en esta familia (NoisyStudent y FixEfficientNet), pero trataremos estos más adelante. Esta introducción a la familia Efficient es suficiente por ahora.

Al terminar de leer los papers y escribir esta sección. Gif extraído de gifbin.com

Análisis COVID-19

Vision personal enfocado a una predicción de datos

Era aproximadamente inicios de diciembre cuando se rumoreaba que un nuevo virus había aparecido en China en la ciudad de Wuhan. Aproximadamente 6 infectados sin conocimiento de la cura. Para ese momento las personas vivían el fin de año (incluyendome) de distintas maneras. El término de exámenes, terminando el año en el trabajo, planeando viajes de fin de año y otras actividades parecidas. Tres meses después la situación para muchos países cambiaría sustancialmente, se tomarían medidas drásticas de sanidad, aislamiento social, cuarentena, entre otras.

Es posible observar en las noticias el incremento de infectados en distintos países, distintas medidas tomadas por los gobiernos y diferentes escenarios en diversos momentos en el tiempo. Durante todo este proceso me he hecho varias preguntas al respecto ¿Es posible comparar de manera directa la situación de Wuhan con la de otros países? ¿Cómo puedo saber cuánto afecta las situaciones tomada por los gobiernos en la situación actual? ¿Cómo puedo saber si la situación puede mejorar o no en un tiempo determinado?

Decidí aprovechar mis conocimientos en Machine Learning para preparar esta pequeña sección el cual tendrá un apartado cada semana.

Proceso Regular en una aplicación de Machine Learning. Imagen extraída de Houseofbots.com

El primer paso es encontrar la data. Para esto utilizaré la base de datos de Worldometer.info, sitio el cual contiene la información en tiempo real de los países con datos importantes como “Casos Activos”, “Pacientes en CI”, etc.

Debido a que queremos estimar situaciones en los siguientes días, es necesario dar un enfoque pertinente a los datos. Entonces, podemos separar los datos de manera previa en “Datos Históricos” ,“Datos en Tiempo Real” y “Data Total”, lo que nos permitirá analizar bajo dos enfoques el avance de la propagación. En “Datos Históricos” tendremos columnas como: Total de Casos, Total de Muertes, Total de Recuperados y Pruebas realizadas. Este grupo de datos tomará el enfoque de la propagación como un evento acumulado, propenso a eventos puntuales nacionales o internacionales. En “Datos en Tiempo Real” tendremos columnas como: Nuevos casos en el día, Nuevas Muertes en el día, Recuperados en el día, Casos Críticos y Pruebas realizadas en el día. Este grupo de datos nos permitirá analizar los datos de manera aislada, tratar de obtener una función que nos permita estimar la situación actual. Data Total contendrá toda la data antes mencionada. De esta forma podemos analizar el progreso del Covid como un acumulado de eventos o como situaciones en contexto y dejar que el modelo de aprendizaje decida cuál considera un mejor grupo de datos.

Imágen tomada de Worldometer.info

Este será nuestro punto de partida. La próxima semana se estará limpiando y preparando la data para el posterior entrenamiento y visualización de resultados. Por el momento, es un trabajo demandante acceder a la información para su análisis, por lo que esta sección continuará la siguiente semana.

Comentarios del autor

Me gustaría tener esta pequeña sección al final de cada artículo para agradecer al lector por decidir informarse con este artículo. Además, quisiera utilizar este espacio para recomendar alguna fuente de interés en el campo de Machine Learning, Deep Learning o Computer Vision. Esta semana recomendaré algo poco particular, una cuenta de Twitter:

Aurélien Géron: https://twitter.com/aureliengeron

Seguir a una gran eminencia en Twitter no tiene desperdicio. Aurélien suele publicar tutoriales, eventos y opiniones más que relevantes en el mundo de Machine Learning y Deep Learning. La mayoría de este material es útil para el trabajo del día a día, como tutoriales enteros de matplotlib (gráficas con python), redes seq2seq, entre otros.

Hasta la próxima semana y muchas gracias por leer.

“Hasta luego, amigos” (Gif extraído de serie animada “He-Man”)