Es de dominio público la necesidad de disponer de un conjunto de datos para poder abordar cualquier problema con el uso de técnicas de machine learning. Estos datos proporcionan la base para que los algoritmos aprendan y hagan predicciones y son necesarios para abordar todo tipo de tareas o problemas; ya sean datos tabulares, datos en formato texto o imágenes.
En este post, hablamos de los problemas de clasificación de imágenes, que entran dentro del campo de la visión por ordenador o computer vision. En líneas generales, los algoritmos que mejor funcionan y los más extendidos en las tareas de imágenes son los basados en redes neuronales convolucionales (CNN). Las CNNs son especialmente efectivas debido a su capacidad para aprender y detectar patrones y características específicas en las imágenes. Estas redes neuronales pueden ser entrenadas con un conjunto de imágenes etiquetadas y luego utilizadas para clasificar nuevas imágenes basándose en lo que han aprendido.
El problema principal de este tipo de algoritmos es que necesitan una cantidad de imágenes en general muy elevada para su entrenamiento, sobre todo cuando la complejidad del problema a resolver es alta. Así pues, contar con una fuente de datos amplia y correctamente etiquetada es fundamental, pero, ¿qué pasa si no tenemos tantas imágenes?
¿Cómo generar nuevos datos?
Es común que en nuestra labor como científicos de datos nos encontremos con situaciones en las que la teoría y la realidad no se corresponden. Aunque la teoría nos proporciona un marco sólido y fundamentado para trabajar con los datos, en la práctica puede haber ciertas limitaciones que dificultan nuestro trabajo.
Uno de los mayores desafíos a los que nos enfrentamos es la escasez de datos. En ocasiones, simplemente no hay suficientes datos disponibles para entrenar modelos de manera efectiva. Esto puede deberse a una variedad de factores, como la naturaleza del problema o la incapacidad para recopilar datos. En otros casos, la falta de datos es aún más extrema, llegando a la inexistencia total de estos.
A pesar de estos desafíos, como científicos de datos, debemos encontrar formas creativas de abordar estas limitaciones y obtener los datos necesarios para realizar nuestras tareas. En el caso de la clasificación de imágenes, existen diferentes técnicas para generar nuevos datos.
Técnicas para generar nuevas imágenes
Para hacer frente a la escasez de datos en los problemas de imágenes, se han usado tradicionalmente diversas técnicas como:
- Técnicas de aumento de datos. Consiste en aplicar filtros o modificaciones a las imágenes para crear otras parecidas a las originales pero lo suficientemente distintas para que el modelo no reconozca que son la misma imagen. Algunas de estas técnicas pueden ser rotar o transponer imágenes, ampliar ciertas zonas (zoom), cambiar los colores a través de filtros de contraste o luminosidad, entre otras.
- Generación de imágenes con GANs. Una red antagónica generativa (GAN) es un modelo en el que dos redes neuronales, una generativa y otra discriminadora, compiten entre sí. El objetivo del generador es crear artificialmente resultados que podrían confundirse fácilmente con datos reales. La tarea del discriminador es identificar qué salidas de las que recibe se han creado artificialmente. A medida que continúa el ciclo de retroalimentación entre las redes antagónicas, el generador comenzará a producir resultados de mayor calidad y el discriminador mejorará al marcar los datos artificiales.
El problema principal del uso de este tipo de técnicas es que se necesita partir de un conjunto de datos inicial. Pero ¿se podría llegar a solucionar un problema de imágenes sin datos? La respuesta a esta pregunta la encontramos en la generación sintética de imágenes.
Generación de imágenes sintéticas con modelos de difusión
Una de las principales ventajas de la generación sintética de imágenes es que nos permite superar la escasez de datos, ya que no dependemos de conjuntos de datos reales. En lugar de eso, podemos generar un conjunto de datos sintético que se asemeja a los datos reales y entrenar modelos y realizar pruebas sin necesidad de disponer de grandes cantidades de imágenes.
A lo largo del año 2022 se produjo el boom de los modelos de difusión para generar imágenes a partir de textos. Gracias al uso de estos modelos se pueden obtener imágenes sintéticas lo suficientemente parecidas a las del problema que hay que resolver y, de esta manera, poder resolver tareas de clasificación de imágenes sin datos.
Estos modelos modelos de difusión para generar imágenes están en pleno apogeo y continuo desarrollo. Las imágenes que se puede generar con los modelos de difusión son cada vez más complejas y precisas. Eligiendo el prompt –o texto– correcto se pueden crear imágenes con un alto grado de especificidad y con una alta similaridad a los datos de un problema específico.
Caso de clasificación de imágenes generadas con Stable Diffusion
Para ejemplificar la aplicación de los modelos de difusión en la generación de imágenes se va a usar un conocido set de datos en el campo de las imágenes: “Dog vs Cats”. Se trata de un problema de clasificación de imágenes binaria en el que el modelo tiene que predecir si una imagen contiene un perro o un gato. En este caso solo se necesitan las imágenes de test, ya que para entrenar el modelo se van a usar imágenes generadas de manera sintética a través del modelo Stable Diffusion 1.
Usando Stable Diffusion se han generado de manera automática 3000 imágenes sintéticas de perros y gatos (1500 de cada categoría). Estas imágenes representan el conjunto de entrenamiento que se va a usar para entrenar el modelo CNN. En este caso se ha usado una Resnet50 como arquitectura. Tras entrenar el modelo con las imágenes sintéticas, los resultados obtenidos en el conjunto de test son casi perfectos, obteniendo un F1 por encima del 0,99. Con estos resultados se demuestra, en este problema, que un modelo entrenado con imágenes sintéticas puede inferir con éxito en datos reales.
Está claro que la tarea a resolver no tiene una complejidad muy elevada, pero sirve para ilustrar la idea del uso de imágenes sintéticas creadas con modelos de difusión para generar o aumentar el conjunto de datos de partida y mejorar la capacidad predictiva de los modelos. Además, esta técnica se puede combinar con el uso de estrategias tradicionales como el aumento de datos a través de modificaciones en las imágenes o el uso de GANs de las que hemos hablado más arriba.
También es importante tener en cuenta que los conjuntos de datos sintéticos no siempre se comportan de la misma manera que los conjuntos de datos reales. Es posible que se produzcan desviaciones y errores, por lo que es importante validar y comprobar la calidad de los conjuntos de datos sintéticos. En casos muy específicos, es fundamental contar con un experto en el campo para poder validarlos.
El éxito de la aplicación de este tipo de técnicas reside fundamentalmente en la naturaleza de las imágenes que necesitemos y es cierto que hay casos en los que la especificidad de la tarea es tan alta que no se pueden generar datos usando estos modelos de difusión. Aun así, os animo a que probéis esta técnica en algún problema de imágenes al que os enfrentéis, porque seguro que quedáis sorprendidos con las capacidades generativas de estos modelos.
Referencias:
- https://arxiv.org/abs/2112.10752
- https://github.com/CompVis/stable-diffusion
- https://arxiv.org/abs/1406.2661
- https://towardsdatascience.com/celebrity-face-generation-with-deep-convolutional-gans-40b96147a1c9
- https://stability.ai/blog