01: Efficient-Family & Planteamiento Analisis Covid-19

Introduciendo a la familia de modelos Efficient para diferentes tareas de Computer Vision. Plantearemos un análisis del Covid-19 desde un punto de vista predictivo.

Imágen de Rudy and Peter Skitterians

Efficient-Family

E ra el 2012 y las personas vivían un año particularmente interesante. El Gangnam style aparecía como uno de los primeros grandes hits de la historia, “The Artist” recibía el premio Oscar a mejor película, y vivíamos una pequeña incertidumbre acerca del acierto de la cultura Maya con el fin del mundo. Ese mismo año tuvo aparición una de las tecnologías más impactantes de los últimos años: Las redes convolucionales. Alexnet apareció en la competencia de ImageNet obteniendo una puntuación revolucionaria en la clasificación de imágenes. Sin duda se había marcado un punto y aparte en esta tarea.

Con el pasar de los años aparecerían clasificadores que poco a poco se superarían e irían perfeccionando cada tarea. No solo investigadores y universidades estarían involucrados en este proceso, gigantes tecnológicos como Google y Facebook estarían involucrados en el desarrollo de este avance (Tales como sus frameworks Tensorflow y Pytorch, de los cuales hablaremos pronto…). Nombres como VGG, Inception, Resnet y MobileNet surgieron con el pasar de los años, dando a la comunidad una gama variada de clasificadores apoyados en las ya famosas redes neuronales.

A mitad de este desarrollo, otro gran recurso aparecería con los detectores de objetos. R-CNN, FastR-CNN, FasterR-CNN, SSD, Yolov1, Yolov2 eran los modelos que aparecerían y se desarrollarían para apoyar miles de aplicaciones de hoy en día en lo que detectar objetos se refería.

Nuevos modelos llegando en los 10’s (Gif tomado de videoclip Gangnam Style)

Sin embargo, el paso de los años ha dejado a los modelos en un nivel aceptable en el mundo aplicativo. Modelos como Resnet152, MobileNet y Yolov3 son modelos utilizados como estándares en distintos tipos de aplicaciones de Computer Vision. A pesar de esto, modelos nuevos surgen indicando mejoras en resultados y performance.

Hoy revisaremos dos redes de la familia Efficient: EfficientNet (Image Classification) y EfficientDet (Object Detection).

En Mayo de 2019 saldría este paper explicando una nueva familia de modelos llamada EfficientNet. La principal característica de este modelo es la forma de estructurar la arquitectura de la red neuronal. Diversos autores afirman que la performance de una red neuronal, entre muchas cosas, dependen de la profundidad de la red, el ancho de la red y la resolución de la imágen. EfficientNet afirma que si se tiene un factor que relacione estas tres variables podemos obtener mejores resultados, proponiendo así el método de escalado compuesto (compound scaling method). Este método buscaba encontrar una sinergía entre estos tres factores, optimizando la performance del modelo y obteniendo más que buenos resultados en exactitud. Puedes revisar el paper original en el siguiente link: https://arxiv.org/abs/1905.11946

Se logró escalar este método en una búsqueda de redes encontrando una familia entera de EfficientNets, en particular, EfficientNet-B0, EfficientNet-B1, EfficientNetB2,…,EfficientNet-B7, donde el factor aumentaría según la red involucrada.

Está bien, se encontró una forma de optimizar parámetros de la arquitectura de red, pero, ¿Qué implicancias tuvo este proceso? Puedes verlo por ti mismo:

EfficienNet alcanzaba mejor exactitud (accuracy) que redes predecesoras. Además presentaba menor número de parámetros (Carga computacional). Gráfico extraído del paper oficial EfficientNet.

No solo lograron alcanzar el estado del arte en la competición ImageNet, sino que además lograron reducir 8.4 veces el tamaño del modelo y aumentar 6.1 veces la rapidez de este frente al modelo estado del arte predecesor.

In particular, our EfficientNet-B7 achieves state-of-the-art 84.4% top-1 / 97.1% top-5 accuracy on ImageNet, while being 8.4x smaller and 6.1x faster on inference than the best existing ConvNet.

Se utilizó además en diferentes datasets conocidos como CIFAR-10,CIFAR-100, Flowers, entre otros. Aquí demostró ser clara competencia a muchos de los modelos disponibles y publicados existentes, donde se encontraba una mejor exactitud y un menor consumo de recursos. También hubieron casos donde no lograba superar al modelo con el mejor resultado, pero la diferencia era de pocas décimas sin contar la gran diferencia de parámetros. Aquí les dejo una tabla de todo lo explicado:

Es posible observar una gran performance por parte de la familia Efficient. Tabla extraída del paper oficial EfficientNet.

Ok, quedó claro que la red es muy buena, pero ¿Podemos probarla?. Por supuesto. Me basaré en este repositorio existente EfficientNet para probar las distintas redes.

Collage de predicciones con EfficientNet-B0. (Imagen 1 sacada de la película “Pulp Fiction”).

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.

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

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

I’m a mechatronics engineering student with a passion for Deep Learning and Computer Vision… And I love music too!

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store