Archivo de la categoría: Curso 2023/24

Transfer Learning en representaciones latentes de modelos de RAVE

Introducción

En el ámbito de la inteligencia artificial y el procesamiento de audio, los autoencoders variacionales (VAEs) han demostrado ser herramientas muy útiles para la representación y generación de señales de audio. Estos modelos permiten comprimir datos a través de una representación latente compacta y también facilitan la generación de nuevas señales que mantienen características similares a las del conjunto de datos original [1]. Realtime Audio Variational AutoEncoder (RAVE) es una arquitectura específica de VAE optimizada para el procesamiento de audio en tiempo real, abordando los desafíos de la naturaleza temporal y la alta dimensionalidad de las señales de audio. [2]

El proyecto propuesto busca explorar cómo convergen y divergen las representaciones latentes obtenidas de dos modelos RAVE distintos cuando se les da la misma entrada de audio. La idea principal es aplicar una función matemática a una de las representaciones latentes para minimizar su distancia euclidiana respecto a la otra. La distribución del error calculado a partir de esta distancia se utiliza para ajustar la representación latente, que luego se introduce al decodificador del primer modelo RAVE. Esto permitirá obtener una salida que se asemeje mucho a la que se lograría utilizando la representación latente original del mismo modelo [3] .

Este enfoque no solo proporciona una forma novedosa de analizar y mejorar la interoperabilidad entre diferentes modelos RAVE, sino que también puede tener aplicaciones prácticas en la mejora de la calidad y coherencia del procesamiento de audio en tiempo real.

Estado del arte

En los últimos años, la inteligencia artificial y el procesamiento de señales han experimentado un avance significativo, particularmente en el ámbito de los autoencoders variacionales. Los VAEs han demostrado ser herramientas efectivas para la representación y generación de datos complejos, incluidos los datos de audio. A diferencia de los autoencoders tradicionales, los VAEs incorporan un enfoque probabilístico que permite generar nuevas muestras que son coherentes con el conjunto de datos de entrenamiento, lo cual es crucial para aplicaciones como la síntesis de audio y la compresión de señales.

VAEs en el Procesamiento de Audio

Los VAEs han sido ampliamente utilizados en diversas aplicaciones de audio debido a su capacidad para aprender representaciones latentes compactas y generar señales realistas.Algunos ejemplos concretos de estas aplicaciones son:

Kingma y Welling (2013) introdujeron los VAEs, estableciendo las bases teóricas que han sido aplicadas y extendidas en el procesamiento de audio [4]. Modelos como WaveNet [5] y SampleRNN [6] han utilizado conceptos de VAEs y redes neuronales recurrentes para generar audio de alta calidad, demostrando la eficacia de estas técnicas en la captura de las características temporales y espectrales del audio.

Realtime Audio Variational AutoEncoder (RAVE)

La arquitectura RAVE representa una evolución significativa en el uso de VAEs para el procesamiento de audio en tiempo real. RAVE está diseñada para abordar los desafíos específicos del procesamiento de audio, como la alta dimensionalidad y la naturaleza secuencial de las señales de audio. A través de una arquitectura optimizada y técnicas avanzadas de entrenamiento, RAVE permite la compresión eficiente y la generación de audio en tiempo real, manteniendo la coherencia y la calidad de las señales.

Interoperabilidad y Representaciones Latentes

Un área emergente de investigación en el campo de los VAEs y RAVE es la interoperabilidad entre diferentes modelos y la manipulación de las representaciones latentes. La capacidad de ajustar y adaptar estas representaciones puede mejorar altamente la calidad y la consistencia de las señales generadas.

Aplicaciones Prácticas

Las aplicaciones prácticas de estos avances son numerosas y variadas. En el ámbito de la producción musical, los VAEs y RAVE pueden facilitar la generación de sonidos y efectos de alta calidad, permitiendo a los artistas y productores explorar nuevas posibilidades creativas. Además, en aplicaciones de transmisión y compresión de audio, estas técnicas pueden mejorar la eficiencia y la calidad del audio transmitido, ofreciendo una mejor experiencia al usuario final.

Desarrollo

Audio de Entrada

El audio de entrada se suministra a los modelos seleccionados en forma de un archivo .wav. Utilizando la librería librosa, se extrae la tasa de muestreo (sampling rate, sr) del archivo para proceder con el muestreo y obtener la señal de audio x.

Modelos

Seleccionamos dos modelos de RAVE: Percussion y VCTK. Cada uno de estos modelos consta de un codificador (encoder) y un decodificador (decoder). Es importante destacar que los tamaños de las representaciones latentes generadas por los codificadores de ambos modelos difieren ([1, 8, 108] para Percussion vs. [1, 4, 108] para VCTK). Para unificar estas dimensiones, añadimos ceros a la representación de menor tamaño, ajustándola al tamaño mayor, consiguiendo mismo TorchSize en ambos, lo que permite realizar operaciones posteriores sin incompatibilidades dimensionales.

Esquema de trabajo

El audio muestreado x se introduce en los codificadores de ambos modelos (Percussion y VCTK), obteniendo así dos salidas (después de sendos Encoders) correspondientes a las representaciones latentes z1 y z2, que tienen distribuciones diferentes.

Aplicación del Transfer Learning Transductivo

En cuanto a la aplicación del aprendizaje por transferencia transductivo, queremos transformar la representación latente z2 obtenida del segundo encoder en una nueva representación  z’ que se alinee con z1 obtenida del primer encoder. Esta transformación se diseña para que, al pasar z’ por el decodificador del primer modelo (Percussion), se obtenga una salida  x2 similar a la que se generaría si se introdujera  z1 en dicho decodificador. De tal manera que x1 x2. 

Para lograr esto, seguimos los siguientes pasos:

Minimización de la Distancia Euclídea: Definimos una función de transformación T(z2) que convierte z2 en z′. Esta función T se entrena para minimizar la distancia euclídea entre z1 y z’:
z’=T(z2)
La función de pérdida que queremos minimizar es la distancia euclídea entre z1 y z’:
L=∥z1−z’∥, es decir el error
Donde ∥⋅∥ denota la norma euclídea.

Transformación de z2: Para encontrar T(z2), primero calculamos la distancia euclídea entre z1 y z2:
d(z1,z2)=∥z1−z2∥
Esta distancia nos da una medida del error producido por el encoder 2 cuando intentamos decodificar con el decodificador del modelo

Optimización: La función T se optimiza iterativamente usando un conjunto de datos de entrenamiento. Para cada par de representaciones z1 y z2 correspondientes a un mismo audio pero generadas por encoders diferentes, aplicamos T a z2 y ajustamos T para minimizar L.

Entrenamiento con Múltiples Audios: Este proceso se repite para un conjunto grande de audios. Por cada audio, calculamos el error entre z1 y T(z2), y ajustamos la función T. Al hacerlo para muchos audios, obtenemos una distribución del error y entrenamos T para minimizar este error en promedio:

Donde E denota la esperanza matemática, es decir, el promedio sobre todos los pares (z1,z2)

Salida Decodificada: Una vez entrenada T, podemos transformar cualquier z2 en z’ y pasarlo por el decodificador del modelo 1 para obtener x2, asegurándonos de que x2sea similar a x1:

Esto garantiza que las características de z2 se alineen con las de z1, permitiendo una salida decodificada de alta calidad.

Materiales utilizados

A continuación vamos a incluir el código que hemos utilizado. Lo hemos realizado para dos muestras:

Nos descargamos un fichero .wav el cual será el input común para ambos encoders

Seguidamente nos descargamos dos modelos de RAVE para realizar el proyecto

Si representamos la representación latente de la salida de cada uno de los encoders podemos observar lo mencionado

En este enlace se puede encontrar el fichero con el código: https://drive.google.com/file/d/1OeyP8BWZJWWPp96p–dbNYyoKd52ZJQy/view?usp=share_link

Discusión de resultados

Analizando las distancias euclídeas, es decir errores, para dos audios diferentes tomados como entrada, podemos ver a través de un gráfico de cajas que estas distancias son pequeñas por lo tanto las representaciones latentes obtenidas eran bastante similares. 

Referencias

[1] Kingma, D. P., & Welling, M. (2019). An Introduction to Variational Autoencoders. arXiv. https://arxiv.org/abs/1906.02691

[2] Caillon, A., & Esling, P. (2021). RAVE: A variational autoencoder for fast and high-quality neural audio synthesis. arXiv. https://arxiv.org/abs/2111.05011

[3] José Luis Blanco-Murillo (2022). Advanced Data and Signals Processing

https://moodle.upm.es/titulaciones/oficiales/pluginfile.php/11105922/mod_resource/content/3/Text_Part2_v1_0.pdf

[4] Kingma, D. P., & Welling, M. (2013). Auto-Encoding Variational Bayes. arXiv. ​​

https://arxiv.org/abs/1312.6114

[5] Van den Oord, A., Dieleman, S., Zen, H., Simonyan, K., Vinyals, O., Graves, A., Kalchbrenner, N., Senior, A., & Kavukcuoglu, K. (2016). WaveNet: A Generative Model for Raw Audio. arXiv. https://arxiv.org/abs/1609.03499

[6] Mehri, S., Kumar, K., Gulrajani, I., Kumar, R., Jain, S., Sotelo, J., Courville, A., & Bengio, Y. (2017). SampleRNN: An Unconditional End-to-End Neural Audio Generation Model. arXiv. https://arxiv.org/abs/1612.07837

Publicado por Carmen Bayona Sánchez, Patricia Correas Pacheco, Yaiza Romero Pose y Guillermo Jiménez Camacho

Clasificación de texto y análisis de sentimiento en texto

1. Presentación del Tema

 Introducción al Análisis de Sentimiento 

El análisis de sentimiento es una técnica de procesamiento de lenguaje natural (NLP) que busca identificar y extraer opiniones subjetivas de textos. Se utiliza comúnmente para determinar si un fragmento de texto expresa una opinión positiva, negativa o neutral. En el contexto de las películas, el análisis de sentimiento nos permite comprender mejor cómo percibe el público una película, lo que es valioso tanto para los cineastas como para los estudios de mercado. 

Además, presentamos otro concepto, el Transfer Learning. Este es una técnica en el campo del aprendizaje automático y la inteligencia artificial que aprovecha el conocimiento adquirido previamente por un modelo entrenado en una tarea para mejorar el rendimiento en otra tarea relacionada. Es decir, la idea es aprovechar el conocimiento adquirido durante el entrenamiento inicial del modelo, evitando entrenar un modelo desde cero y, por lo tanto, ahorrando tiempo y recursos computacionales.

Objetivos del Blog 

En este blog, nuestro objetivo es realizar un análisis de sentimiento en reseñas de películas. Dicho análisis lo enfocamos en hacer una clasificación de sentimientos de la mano del Transfer Learning. Esto lo vamos a llevar a cabo trabajando con el modelo BERT, ya entrenado. 

2. Revisión del Estado del Arte 

Investigación Previa 

El análisis de sentimiento ha sido ampliamente estudiado en diversas áreas. Para las reseñas de películas, los enfoques más comunes incluyen el uso de modelos basados en reglas, métodos estadísticos y técnicas de aprendizaje automático. Entre los modelos más relevantes se encuentran los modelos basados en Transformers como BERT. En este Blog nos vamos a centrar en este último. 

[Ref1], [Ref2]

3. Análisis Matemático

RoBERTa es un modelo que ha sido entrenado en un gran conjunto de datos de tweets para clasificar el sentimiento de los textos. Este modelo puede clasificar textos en tres categorías: positivo, neutral y negativo.

Podemos acceder a dicho modelo a través de la interfaz de Hugging Face. [Ref3]

Este es un modelo basado en roBERTa entrenado en aproximadamente 58 millones de tweets y ajustado para el análisis de sentimiento con el punto de referencia TweetEval. Siendo un modelo adecuado para inglés.

Además, lo que podemos observar en la imagen inferior es el grafo computacional del modelo RoBERTa. Pudiendo observar a los parámetros del modelo classifier.dense.weight y classifier.dense.bias que se corresponden a la capa densa del clasificador. También classifier.out_proj.weight y classifier.out_proj.bias que corresponden a la capa de proyección de salida del clasificador. Además, se observan las operaciones AddmmBackward0 y TanhBackward0, las cuáles son operaciones de retropropagación relacionadas con las funciones de activación y las multiplicaciones de matriz en las capas del modelo.

4. Descripción de las Pruebas Realizadas y Resultados

Teniendo el concepto claro, vamos a realizar un enfoque previo para poder llegar al objetivo del Blog.

Este enfoque es aprovechar el conocimiento adquirido previamente por un modelo entrenado  en una tarea de clasificación de sentimiento de reviews de Amazon, es decir, otro conjunto de datos. 

De esta forma, procesamos un fragmento de DataFrame de reseñas de Amazon y generamos puntuaciones de polaridad con RoBERTa para cada reseña. A continuación visualizamos el gráfico de pares que visualiza la relación entre las puntuaciones de polaridad y el Score de las reseñas.

El segundo enfoque es hacer un Fine Tuning de RoBERTa. Volvemos al objetivo inicial del Blog. 

Para ello, dividimos los datos en tres conjuntos distintos: entrenamiento, validación y prueba.

Antes de todo realizaremos un análisis donde observaremos como de bueno es el modelo escogido para realizar las predicciones de las reviews de nuestro dataset. Esto nos permitirá comparar los resultados. 

Roberta está entrenada para hacer una clasificación de tres clases: positiva negativa y neutral. Una vez pasados nuestros datos, podemos observar lo siguiente:

Con esto concluimos que se acierta el 50% lo que equivaldria a elegir los resultados al azar, siendo mejores los resultados de clasificar las instancias negativas que las positivas. Esto podría deberse a la eliminación de la clase neutra

Pasaremos ahora a cargar el modelo preentrenado y configurar el entrenamiento. El conjunto de entrenamiento  lo utilizamos para ajustar los parámetros del modelo. Aquí es donde el modelo aprende a predecir la salida a partir de las características de entrada. En cuanto al conjunto de validación, durante el entrenamiento, este conjunto se utiliza para ajustar los hiperparámetros del modelo y seleccionar el mejor modelo posible. Además, evaluamos el rendimiento del modelo en datos no vistos durante el entrenamiento, lo que ayuda a evitar el sobreajuste. El conjunto de prueba se utiliza, una vez que el modelo ha sido completamente entrenado, para una evaluación final e imparcial del rendimiento del modelo en datos completamente nuevos, que no se han utilizado ni para el entrenamiento ni para la validación.

Paréntesis conceptual

Recordando conceptos, el fine-tuning te permite adaptar un modelo preentrenado a una tarea específica ajustando sus parámetros, mientras que el freezing te ayuda a preservar el conocimiento adquirido durante el preentrenamiento, reduciendo al mismo tiempo el costo computacional del entrenamiento. Además, configuramos el entrenador utilizando la clase Trainer de Hugging Face. El Trainer es responsable de manejar el bucle de entrenamiento, incluyendo la evaluación y el guardado del modelo.

Reanudamos …

Ahora sí, una vez que los datos están preparados, cargamos el modelo preentrenado, RoBERTa, y configuramos los parámetros de entrenamiento. Esto implica ajustar la configuración del modelo para el proceso de fine-tuning. También el congelamiento de algunas capas del modelo preentrenado para reducir el tiempo de entrenamiento y los recursos computacionales necesarios.

Posteriormente, entrenamos el modelo y lo evaluamos obteniendo los siguientes resultados:

¿Ha servido todo esto de algo?

Ahora llega el momento de la verdad. Queremos comprobar realmente qué tan bueno es nuestro modelo al cual se le ha aplicado un fine-tuning. Por ello,  realizamos predicciones sobre nuevas reseñas.

Como podemos ver en las siguientes figuras, nuestro modelo tuneado ha sido capaz de realizar buenas predicciones:

5. Discusiones

La precisión indica la proporción de verdaderos positivos sobre el total de positivos predichos. Con una precisión del 88% para la clase negative y del 90% para la clase positive, el modelo muestra una alta capacidad para identificar correctamente las instancias positivas, aunque también tiene un buen desempeño en la clase negativa.  Este argumento se corrobora en las gráficas presentadas donde observamos que el modelo de clasificación exhibe un alto rendimiento con un AUC de 0.96, una precisión del 91%, y un equilibrio razonable entre precisión y sensibilidad. Las predicciones correctas superan ampliamente a las incorrectas, lo que sugiere que el modelo es fiable y efectivo para las tareas de clasificación evaluadas.

6. Conclusiones

El modelo RoBERTa preentrenado y afinado ha demostrado ser altamente eficaz en la tarea de clasificación de sentimientos, con un rendimiento balanceado entre precisión y recall para ambas clases negative y positive. Con una exactitud general del 89%, el modelo ha mostrado una fuerte capacidad de generalización y precisión en sus predicciones.

Para mejorar estos resultados y explorar nuevas posibilidades, podemos considerar aplicar técnicas de Data Augmentation, y así generar más ejemplos de entrenamiento con el fin de ayudar a mejorar la capacidad de generalización del modelo. También podríamos hacer un Ensamblaje de Modelos (Ensemble), es decir, combinar múltiples modelos para reducir errores y mejorar la precisión general. Por último, pensamos que una futura mejora sería explorar otras arquitecturas. Con esto, probar diferentes modelos preentrenados como GPT o T5 para comparar y potencialmente mejorar el rendimiento.

Bibliografía y Referencias

[Ref1]: Bredava, Anna. “Análisis de Sentimiento: ¿Qué es y cómo funciona?” Awario, 10 noviembre 2022, https://awario.com/es/blog/sentiment-analysis/ . Accessed 30 May 2024.

[Ref2]: Navarro Bellido, Joan. “Modelos de aprendizaje automático en análisis de sentimiento: comparativa de rendimiento.” RiuNet, 2022/2023, https://m.riunet.upv.es/bitstream/handle/10251/198111/Navarro%20-%20Modelos%20de%20aprendizaje%20automatico%20en%20analisis%20de%20sentimiento%20comparativa%20de%20rendimiento.pdf?sequence=1&isAllowed=y . Accessed 30 May 2024.

[Ref3]: https://huggingface.co/cardiffnlp/twitter-roberta-base-sentiment 

Mulla, Rob. YouTube, https://www.youtube.com/watch?v=QpzMWQvxXWk 

Jupyter Notebook donde aparece todo el código utilizado para el desarrollo del Blog: https://colab.research.google.com/drive/1YQDKkghUCRIU0NefupndT7Jta2C-S-M-#scrollTo=iaSJ7fan-0ey

Dataset movies.csv: https://www.kaggle.com/datasets/yasserh/imdb-movie-ratings-sentiment-analysis?select=movie.csv

Dataset reviews.csv: https://www.kaggle.com/datasets/snap/amazon-fine-food-reviews?resource=download

Uso de GANs para la generación de terrenos realistas

Introducción

En el campo del procesamiento de datos tridimensionales, las Redes Adversarias Generativas (GANs) se han posicionado como una de las tecnologías más prometedoras y transformadoras de los últimos años. Estas redes están marcando un cambio significativo en la forma en que se crea contenido en 3D, especialmente en campos como el desarrollo de juegos y simulaciones realistas.

En este blog, nos sumergiremos en el mundo de la generación de terrenos tridimensionales utilizando GANs, explorando los avances más recientes, las técnicas aplicadas y los desafíos que enfrentamos. Nos enfocaremos en la generación procedimental de terrenos 3D, desde la creación de mapas de altura hasta la síntesis de imágenes de satélite, aprovechando arquitecturas avanzadas como ProGAN, CGAN y StyleGAN para alcanzar resultados de alta calidad y realismo visual.

Además, examinaremos de cerca cómo estas técnicas están siendo aplicadas en diferentes contextos, desde la industria del entretenimiento hasta la planificación urbana y la simulación ambiental. Al hacerlo, esperamos proporcionar una visión general de las posibilidades y los límites actuales en la generación de terrenos 3D mediante el uso de GANs.

Estado del Arte

Como hemos dicho en la introducción, vamos a adentrarnos en las Generative Adversarial Networks (GANs), y para ello, es fundamental entender el contexto y los avances recientes en el campo junto con sus operaciones y las diversas aplicaciones que ofrecen. El punto de inicio del uso de GANs para la generación de terrenos realistas se remonta a los primeros experimentos con GANs en el campo de la informática gráfica. Investigadores como Tero Karras, Samuli Laine y Timo Aila exploraron el potencial de las GANs para sintetizar paisajes naturales y urbanos con una alta fidelidad visual tras la introducción de estas por Ian GoodFellow en 2014. (Karras et al., 2017)

Uno de los desarrollos más notables en este ámbito es la arquitectura ProGAN, la cual ha demostrado una notable eficacia en la generación de terrenos realistas en entornos virtuales. Esta arquitectura, con su enfoque de entrenamiento progresivo, ofrece ventajas significativas sobre otras GANs para la generación de terrenos realistas. Al comenzar con imágenes de baja resolución y aumentar gradualmente la resolución, ProGAN logra un entrenamiento más estable, una mejor calidad de imagen, y una mayor capacidad para capturar detalles finos y texturas complejas. Además, su eficiencia computacional y técnicas de regularización mejoradas permiten generar imágenes de alta resolución de manera más efectiva, lo que es fundamental para aplicaciones prácticas en videojuegos, simulaciones de realidad virtual y visualizaciones geográficas.

Además, la comunidad investigadora ha explorado técnicas de regularización y entrenamiento adversarial más avanzadas para mejorar la calidad y la diversidad de los terrenos generados. La incorporación de mecanismos de atención ha permitido a las GANs enfocarse en características geográficas específicas, generando terrenos más realistas y coherentes, como puede llegar a ser BigGAN. Esta, es una versión escalable y eficiente de las GANs capaz de generar terrenos de alta calidad en una amplia variedad de escenarios geográficos. BigGAN utiliza un enfoque de atención ampliada para capturar detalles finos en los terrenos generados, lo que resulta en una mejora significativa en la calidad visual y la diversidad de los resultados.

Desarrollo

Las GANs, emplean una dinámica dual entre dos redes neuronales: el generador y el discriminador. El generador se encarga de producir datos ficticios que se asemejen a los datos reales, mientras que el discriminador se encarga de distinguir entre las muestras generadas y las auténticas. Ambas redes se entrenan a la vez en un juego competitivo, donde el generador intenta mejorar su capacidad para engañar al discriminador, mientras que este último busca mejorar su habilidad para detectar la falsedad. Este, es un proceso de constante confrontación y evolución, que nos lleva al siguiente nivel en la generación de datos realistas mediante la inteligencia artificial.

En el desarrollo de terrenos tridimensionales para entornos virtuales mediante el uso de GANs, el generador transforma vectores de un espacio latente aleatorio en representaciones realistas de paisajes en 3D. Por otro lado, el discriminador se entrena para diferenciar entre los modelos de terreno sintéticos y los obtenidos a partir de imágenes satelitales reales.

Estas técnicas facilitan la creación de entornos más ricos y variados, adecuados para simulaciones realistas y videojuegos de mundo abierto.

Materiales Usando ProGAN

Para comprender cómo funcionan las GANs y mejorar su entrenamiento, es esencial entender algunos conceptos matemáticos clave. Estos incluyen la optimización de una función de pérdida, como la divergencia de Kullback-Leibler o la pérdida de Wasserstein, que guía la interacción entre el generador y el discriminador.

En la implementación de las GANs, se establecen las arquitecturas de las redes, se elige la función de pérdida y se configuran los hiperparámetros. El objetivo principal es generar imágenes realistas, lo que se logra minimizando la función de pérdida adversarial.

Esta función de pérdida tiene en cuenta la estimación del discriminador sobre la probabilidad de que una instancia de datos real sea real (D(x)), así como la probabilidad de que una instancia falsa generada por el generador sea considerada real (D(G(z))). Se busca maximizar esta función de pérdida por parte del generador, mientras que el discriminador trata de minimizarla, lo que genera una competencia adversarial entre ambos.

En resumen, las GANs se basan en un juego competitivo entre dos redes neuronales, donde el generador intenta engañar al discriminador generando imágenes realistas, y el discriminador intenta distinguir entre imágenes reales y generadas. Este proceso de competencia y aprendizaje mutuo es fundamental para lograr la generación de imágenes de alta calidad.

Ahora presentamos una posible estructura para la implementación de una GAN usando ProGAN para la generación de terrenos realistas:

En esta imagen vemos una implementación básica de las funciones para construir el generador y el discriminador en una Progressive GAN (ProGAN) utilizando TensorFlow y Keras.

La función “build_generator_progan” construye el generador de la ProGAN. Para cada etapa de ProGAN (en este caso solamente para la etapa 4), se agregan las capas necesarias al modelo. En la etapa 4, se utiliza una capa densa seguida de capas de convolución transpuesta para generar una imagen de salida de tamaño 4x4x3 (para imágenes RGB). Luego, se devuelve el modelo construido.

La función “build_discriminator_progan” construye el discriminador de la ProGAN. Al igual que con el generador, se definen las capas del discriminador para cada etapa de ProGAN. En la etapa 4, se utilizan capas convolucionales seguidas de capas de activación LeakyReLU y de Dropout para clasificar la autenticidad de la imagen. Finalmente, se devuelve el modelo construido.

En esta imagen vemos otra parte del codigo de ProGAN en donde primero se definen las dimensiones del espacio latente y la etapa inicial. Luego, se define la función de pérdida adversarial y se compila el discriminador inicial. Posteriormente, se construye el generador y el discriminador iniciales para la etapa inicial de ProGAN. Después, se compila el discriminador ProGAN y se congela durante el entrenamiento del generador. Finalmente, se arma la GAN conectando el generador y el discriminador ProGAN, y se compila la GAN ProGAN.

Pruebas realizadas con ProGAN

Comenzamos generando imágenes con un conjunto de entrenamiento muy reducido (diez imágenes descargadas de distintos terrenos). Como es lógico, al ser una muestra tan reducida, en las imágenes generadas no se observan terrenos como tal, pero nos sirvió para confirmar que nuestro modelo era capaz de generar imágenes dadas unas muestras de entrenamiento. Se muestra el código con el que se cargaron las imágenes y dos salidas, cuyas diferencias se deben a pequeñas modificaciones en el generador y la función de entrenamiento.

Tras esto, decidimos probar con muestras mucho más grandes y representativas. Para la primera, creamos un proyecto en Google Earth Engine y tratamos de acceder a sus muestras.

Concretamente, probamos con la colección LANDSTAT, como se muestra en la imagen.

No obstante, las imágenes generadas aparecían en blanco. Tras investigar y probar con otra colección (Sentinel 2), vimos que el problema ocurría al cargar las imágenes, no en el entrenamiento, pues nos salían en blanco desde el principio. Se muestra la representación matricial.

Por ello, decidimos probar con EuroSAT.

Y, a diferencia de lo que sucedía con Google Earth, sí conseguimos cargar las imágenes.

No obstante, tras pasar las muestras al modelo, las imágenes generadas eran todas grises, lo que sugería un problema en el generador.

Realizando algunos cambios, lo máximo que conseguimos fue que se observara una ligera textura sobre el gris.

La última prueba, consistió en descargar un dataset de un repositorio GitHub.

Y, esta vez sí, logramos que el modelo generase algunas imágenes con cierta similitud con los terrenos. Es cierto que no se observan de forma clara y que en algunas el modelo se observa sobreajustado, pero creemos que si tuviéramos la capacidad de entrenar con un número mayor de muestras y ajustando el número de épocas y el tamaño del batch, podríamos lograr la generación de imágenes de terrenos. Además, vemos que algunas imágenes tienen una apariencia más detallada y definida, mientras que otras parecen más abstractas o ruidosas, lo que también es indicativo de que la consistencia del modelo tiene margen de mejora.

Por otro lado, como aspectos positivos, destacamos la variedad de patrones y colores, que indicaría que el modelo es capaz de producir diversidad en sus salidas, así como de texturas y formas, que indican que el modelo está capturando distintos tipos de características. Concluimos con que para la generación de terrenos realistas necesitamos varios miles de muestras para alcanzar los resultados que se esperarían, en vez de obtener imágenes abstractas de poca resolución.

Materiales Usando BigGAN

Para finalizar, hemos probado a implementar las BigGans, siguiendo el mismo patrón inicial que con las ProGANS.

La primera función construye un generador de imágenes para un modelo GAN utilizando Keras. Por otro lado, la segunda función construye un discriminador que evalúa si una imagen es real o generada. Utiliza Keras para definir un modelo secuencial que empieza con capas convolucionales, las cuales extraen características de la imagen de entrada. Este discriminador, por lo tanto, es responsable de distinguir entre imágenes reales y falsas y es entrenado en conjunto con el generador en un marco de aprendizaje adversarial.
Realizando algunas pruebas con este modelo con las mismas muestras que para ProGAN, no hemos obtenido mejores resultados. Esto puede deberse a la falta de muestras de entrenamiento o a que ProGAN se ajusta mejor a los parámetros de las muestras dadas.

Bibliografía

Anónimo. (2020, 1 junio). Redes Neuronales Generativas Adversarias (GANs). Brain4AI. Recuperado 12 de mayo de 2024, de

Karras, T., Aila, T., Laine, S., & Lehtinen, J. (2017, 27 octubre). Progressive Growing of GANs for Improved Quality, Stability, and Variation. ArXiv.org. Recuperado el 12 de mayo de 2024, de https://arxiv.org/abs/1710.10196

Ward, J. (2021). This Landscape Does not Exist: Generating Realistic Landscape Imagery with StyleGAN2. Medium. Recuperado 27 de abril de 2024, de https://medium.com/geekculture/train-a-gan-and-keep-both-your-kidneys-bcf672e94e81

About

Equipo formado por Daniel Gómez, Alejandro Blas y Daniel Tijeras