Fusión de Imágenes Visibles e Infrarrojas mediante U-Net: Aplicaciones en Visión Nocturna y Seguridad

1. Introducción

En muchas situaciones reales, como la vigilancia nocturna o la conducción con poca visibilidad, es clave disponer de imágenes que ofrezcan tanto los detalles visuales del espectro visible como la capacidad del infrarrojo para ver en la oscuridad. Sin embargo, por separado, cada tipo de cámara tiene sus limitaciones: las visibles no funcionan bien sin luz y las infrarrojas no muestran bien los contornos ni las texturas. Por eso surge la fusión de imágenes, una técnica que combina lo mejor de ambas para obtener una imagen única, más completa y útil.

Esta fusión consiste en integrar imágenes captadas por distintos sensores para conservar la información más relevante de cada una. Se usa en múltiples ámbitos como la visión nocturna, la seguridad, la medicina o los sistemas de navegación autónoma. El desafío está en combinar esas imágenes sin perder calidad ni introducir errores visuales, algo que no es sencillo.

Las redes neuronales, y en particular U-Net, resultan muy útiles para fusionar imágenes, ya que su estructura en forma de U con conexiones internas permite combinar eficazmente tanto los detalles finos como la forma general de cada imagen.

En este proyecto, vamos a desarrollar un sistema de fusión de imágenes visibles e infrarrojas usando U-Net en TensorFlow. Evaluaremos su rendimiento tanto visualmente como con métricas objetivas como SSIM y PSNR, y compararemos sus resultados frente a métodos clásicos para ver si realmente ofrece una mejora significativa.

2. Estado del arte

La fusión de imágenes ha sido una herramienta clave en el procesamiento de señales. Inicialmente, se utilizaban técnicas matemáticas tradicionales como la transformada wavelet, el análisis de componentes principales (PCA) y la transformada de Laplace. Estas técnicas se basaban en descomponer las imágenes en diferentes componentes para luego combinarlas según ciertos criterios (como, la varianza) pero tenían ciertas limitaciones al preservar simultáneamente detalles finos y estructuras globales.

Con la llegada del aprendizaje profundo, las redes neuronales convolucionales (CNN) revolucionaron este campo. Estas redes pueden aprender automáticamente qué características conservar y cómo combinarlas, sin necesidad de definir reglas manualmente. Esto ha permitido resultados más adaptativos y robustos frente a variaciones en las condiciones de entrada.

En particular, la arquitectura U-Net, ha demostrado ser especialmente eficaz para tareas de procesamiento de imágenes donde es crucial mantener tanto la resolución espacial como el contexto semántico. Su diseño de encoder-decoder con conexiones de salto (skip connections) permite preservar detalles a diferentes escalas. Esto la convierte en una candidata ideal para la fusión de imágenes visibles e infrarrojas.

Investigaciones recientes han adaptado U-Net para esta tarea. Por ejemplo, Zhang et al. (2021) integraron mecanismos de atención para mejorar la selección de características. Ma et al. (2020) destacaron su equilibrio entre calidad y eficiencia computacional. Además, el repositorio IVIF_ZOO ofrece implementaciones de U-Net evaluadas en benchmarks como TNO y RoadScene.

3. Fundamentos matemáticos

U-Net es una arquitectura de red neuronal convolucional que se ha convertido en una herramienta muy versátil en el ámbito del procesamiento de imágenes. Aunque fue concebida originalmente para tareas de segmentación médica, su capacidad para preservar detalles finos mientras captura el contexto global la ha hecho popular en muchos otros escenarios, como la reconstrucción y, en este caso, la fusión de imágenes visibles e infrarrojas.

Su estructura, con forma de “U”, consta de dos partes simétricas:

  • Un codificador (encoder), que realiza una serie de convoluciones y max-pooling para capturar el contexto global de la imagen, reduciendo su resolución.
  • Un decodificador (decoder), que realiza upsampling progresivo (mediante convoluciones transpuestas) para reconstruir una imagen de la misma dimensión original.

Lo más distintivo de esta red son las llamadas conexiones de salto, que permiten transmitir directamente la información desde las capas del codificador a las correspondientes del decodificador. Gracias a estas conexiones, se consigue combinar de forma eficaz tanto los detalles locales como la estructura general de la imagen, algo fundamental cuando se fusionan fuentes tan distintas como el espectro visible y el infrarrojo.

En este proyecto, implementamos U-Net en TensorFlow/Keras para combinar imágenes de dos canales (visible e infrarrojo) en una imagen fusionada de un solo canal. Como no existe una imagen ideal de referencia, se usó como guía la fusión por máximo por píxel entre los dos canales.

Para este proyecto empleamos el dataset LLVIP, una colección específicamente diseñada para condiciones de baja iluminación, que contiene pares de imágenes visibles e infrarrojas capturadas de forma sincronizada. Este conjunto resulta especialmente adecuado para tareas de fusión de imágenes multiespectrales, ya que refleja escenarios reales donde la información visual y térmica debe combinarse para obtener una visión más completa.

La evaluación de los resultados se realizó utilizando dos métricas: SSIM que mide la similitud estructural entre la imagen fusionada y una de las originales, capturando aspectos como el contraste, la luminancia y la textura; y PSNR que cuantifica la fidelidad de la señal en términos de error cuadrático medio. Ambas métricas fueron calculadas respecto a las imágenes visibles e infrarrojas por separado, lo que nos permitió analizar qué tipo de información retiene mejor el modelo en la imagen resultante.

4. Implementación

Para este proyecto se ha utilizado el dataset LLVIP, un conjunto de datos en abierto que contiene imágenes visibles e infrarrojas de personas en entornos con baja iluminación. Las imágenes fueron preprocesadas adaptándolas en tamaño a 256×256 píxeles, normalizadas al rango [0,1], y combinadas como canales de entrada a la red.

El modelo se implementó en TensorFlow/Keras siguiendo una arquitectura U-Net, compuesta por un codificador, un cuello de botella y un decodificador con conexiones de salto. La salida generada es una imagen fusionada a nivel de píxel.

El entrenamiento se llevó a cabo en Google Colab durante 20 épocas, utilizando el optimizador Adam y la función de pérdida MSE. Como métricas de evaluación se emplearon SSIM y PSNR.

Se utilizaron herramientas auxiliares como OpenCV, Matplotlib, Pandas y scikit-image. Todo el código ejecutable y los resultados se encuentran disponibles en el archivo entregado: pasd.zip, que incluye el notebook completo y los ficheros necesarios para su reproducción.

5. Resultados

Para evaluar la calidad de las imágenes fusionadas, se calcularon las métricas SSIM y PSNR comparando cada imagen fusionada con sus respectivas versiones visibles e infrarrojas.

Los valores obtenidos indican que la imagen fusionada conserva principalmente la estructura del canal infrarrojo, lo cual es adecuado para aplicaciones como la visión nocturna.

Sin embargo, también se observa que la similitud con la imagen visible es más baja, lo que sugiere que el modelo tiende a priorizar el contenido térmico. Esto puede ser una ventaja en contextos de vigilancia, pero en aplicaciones donde los detalles visuales sean importantes (como el reconocimiento facial o la navegación autónoma diurna), podría requerir un ajuste de pesos o entrenamiento más equilibrado.

6. Discusión

Los resultados obtenidos muestran que el modelo basado en U-Net es capaz de realizar una fusión efectiva entre imágenes visibles e infrarrojas, preservando especialmente la información térmica, tal como reflejan los altos valores de SSIM y PSNR frente al canal infrarrojo. Este comportamiento es deseable en aplicaciones donde el contenido térmico es prioritario, como en seguridad nocturna o detección de personas en condiciones adversas.

Sin embargo, también se ha observado que la similitud con la imagen visible es notablemente más baja. Este fenómeno puede explicarse por dos razones principales: por un lado, la imagen infrarroja tiende a dominar la estructura global en la fusión; por otro, al utilizarse como supervisión una imagen construida mediante el máximo por píxel entre los dos canales, el modelo tiende a favorecer la información del canal con mayor intensidad, que suele ser el térmico.

Entre las principales limitaciones encontradas destaca el tamaño efectivo del dataset. Aunque LLVIP es una base de datos estándar, el número de imágenes disponibles tras el preprocesado y la división en entrenamiento y prueba puede ser insuficiente para entrenar redes profundas que generalicen bien a nuevas escenas. Además, se ha trabajado con una resolución fija de 256×256 píxeles para simplificar el entrenamiento, lo que puede haber afectado a la calidad visual en detalles finos, como bordes o texturas.

A pesar de los buenos resultados, este trabajo deja abiertas varias vías de mejora. Usar otros datasets como TNO o RoadScene podría aumentar la capacidad de generalización. También se podrían probar funciones de pérdida más perceptuales o modelos como GANs para obtener fusiones más realistas.

Además, sería interesante explorar arquitecturas más avanzadas, como Attention U-Net o redes con ramas separadas para cada canal, e incluso probar con Transformers. Por último, aplicar técnicas de postprocesado ayudaría a mejorar bordes, contraste y detalles finos en las imágenes fusionadas.

7. Conclusiones

En este proyecto hemos abordado la fusión de imágenes visibles e infrarrojas usando redes neuronales profundas, concretamente la arquitectura U-Net. Los resultados muestran que este enfoque permite combinar eficazmente la información visual y térmica, generando imágenes más completas que las captadas por sensores individuales. El modelo, implementado en TensorFlow/Keras y entrenado con el dataset LLVIP, logró buenas puntuaciones en SSIM y PSNR, lo que confirma su efectividad.

8. Referencias

  • Artículos científicos y papers citados
  1. Ronneberger, O., Fischer, P., & Brox, T. (2015): U-Net: Convolutional Networks for Biomedical Image Segmentation https://arxiv.org/abs/1505.04597
  2. Zhang et al. (2021): IFCNN: A general image fusion framework based on convolutional neural network https://doi.org/10.1016/j.inffus.2020.10.011
  3. Ma et al. (2020): Infrared and Visible Image Fusion via Detail-Preserving Deep Neural Network https://doi.org/10.1109/TIP.2020.2972127
  • Datasets
  1. LLVIP Dataset – Low-Light Visible and Infrared Person Dataset
    https://github.com/dawnlh/LLVIP
  • Repositorios relacionados
  1. IVIF_ZOO – Infrared and Visible Image Fusion Models
    https://github.com/RollingPlain/IVIF_ZOO


Trabajo realizado por Julia Galán, Sara Reyes y Silvia Cordero.

PASD 2025.

Incidencias de tráfico en Madrid

INTRODUCCIÓN

La seguridad en las calles urbanas es un desafío importante en las grandes ciudades, donde el alto volumen de vehículos y la diversidad de transporte aumentan el riesgo de accidentes. Madrid enfrenta retos significativos en este aspecto al ser una gran ciudad.

Analizar los datos históricos de accidentes de tráfico nos ayuda a identificar patrones y factores clave, así como detectar las áreas con mayor frecuencia de accidentes.

ESTADO DEL ARTE 

En los últimos años, se han realizado varios estudios para mejorar la seguridad vial en entornos urbanos, analizando patrones de accidentes. Estos enfoques han sido útiles en ciudades como Madrid, donde debido a su actividad, se requieren métodos avanzados para analizar situaciones, tomar decisiones útiles y así, intentar evitar siniestros. 

Un trabajo destacado en este campo es el proyecto de Mario de los Santos (2018). Analizó las incidencias de tráfico en Madrid entre 2010 y 2018; identificando las áreas con más accidentes, destacando la importancia de factores temporales (día y hora) y espaciales (zona y distrito). Esta ha sido la base de nuestro estudio.

DESARROLLO

En el desarrollo de nuestro proyecto, nos hemos centrado en el análisis de las Incidencias de Tráfico en Madrid, basándonos en el código proporcionado por Mario de los Santos [2], hemos ampliado los datos hasta 2024 e incorporado nuevas técnicas de análisis. Hemos realizado un análisis descriptivo y visual, así como una estimación de la probabilidad de accidentes según diversas variables.

Los datos fueron extraídos del Portal de Datos Abiertos del Ayuntamiento de Madrid, desde 2010 a 2024 [1]. Es importante destacar que los datos entre 2010 y 2018 presentan un formato diferente al de los años posteriores. Para poder analizarlos conjuntamente, fue necesario realizar un preprocesamiento específico. 

Una vez estandarizado el dataset, unificamos toda la información en un único archivo .csv, que se convirtió en la base para los análisis posteriores.

A continuación, desarrollamos varias celdas de código en Python [2], para analizar las tendencias y patrones en los accidentes. Esto nos permite entender mejor los datos y facilitar la interpretación de las predicciones. Para ello, utilizamos gráficos y visualizaciones con la librería matplotlib.

Además del análisis descriptivo, implementamos un programa calculador de riesgo en Python. Este modelo permite estimar el riesgo de realizar un recorrido específico introduciendo ciertos parámetros (distrito, día de la semana, tipo de vehículo y tipo de persona implicada). El cálculo del riesgo se realiza mediante un modelo de regresión lineal no regularizada, lo que nos permite estimar de manera aproximada la peligrosidad de realizar dicho trayecto.

MATERIALES

Para hacer este estudio nos hemos basado en los accidentes de tráfico en la Ciudad de Madrid registrados por la Policía Municipal, los cuales se hacen cuando hay víctimas o daños al patrimonio [1]. Para resolver el problema de la diferencia estructural de los datos, hemos establecido las columnas comunes de los dos tipos de CSV y posteriormente hemos procesado y estandarizado los datos. Entre otras cosas hemos renombrado columnas, eliminado aquellas irrelevantes en nuestro análisis, hemos unificado en categorías, convertido a formato datatime… (adjuntamos parte del código)

Tras estos pasos, nos han quedado las siguientes columnas clave: 

  • Fecha en formato aaaa/mm/dd.
  • Rango horario: la hora se establece en intervalos de 1 hora.
  • Día de la Semana: de lunes a domingo.
  • Distrito por nombre.
  • Localización: calle o cruce de calles.
  • Número: Número de la calle.
  • Nº Parte: Número del parte de accidente.
  • Estado meteorológico: Condiciones ambientales (granizo, hielo, lluvia, niebla, nublado, despejado o nieve).
  • Tipo de accidente: colisión doble, colisión múltiple, colisión fronto-lateral, choque contra obstáculo fijo, atropello a animal, atropello a persona, vuelco, caída, salida de la vía, o alcance.
  • Tipo de vehículo: turismo, motocicleta, furgoneta, camión, ambulancia, bicicleta, ciclomotor o autocar.
  • Tipo de persona: conductor, peatón, testigo o viajero.
  • Sexo: hombre, mujer o no asigando.
  • Lesividad: Herido leve (HL), herido grave (HG), sin asistencia sanitaria (IL), se desconoce, o muerto (MT).
  • Tramo de edad de la persona implicada.
  • Año: año en el que se produjo el accidente.
  • Sexo de la persona implicada en el accidente. 

RESULTADOS

A continuación, mostramos los principales resultados obtenidos a partir del análisis de los datos: 

Distribución de accidentes respecto a edades de los afectados: Como es lógico, obtenemos que el rango de edad más afectado son los adultos entre 25 y 65 años, pues suelen ser quienes conducen.

Distribución de accidentes respecto al año. A medida que pasan los años, observamos un aumento en el número de accidentes anuales. Sin embargo, en el año 2020 hay una clara disminución debido a la pandemia. 

Distribución de accidentes respecto al distrito donde tuvo lugar, siendo el distrito donde se producen más accidentes Salamanca.

Distribución de accidentes respecto al sexo del afectado, siendo más propensos los hombres.

Distribución de accidentes respecto al día de la semana del incidente, siendo el día en que se producen más accidentes los miércoles.

Distribución de accidentes respecto a si el día del suceso fue día laborable o no, siendo los días laborables más frecuentes los incidentes. Esto se debe a que los días hábiles son más numerosos que los NO laborables (sábado y domingo)

Distribución de accidentes respecto al clima. Es un hecho, que cuando hace buen tiempo se conduce de forma menos prudente, incrementando la velocidad y por tanto, aumentando el riesgo de accidente.

Distribución de accidentes respecto al rango horario:

Distribución de accidentes respecto al tipo de colisión, siendo el más común la colisión fronto-lateral.

Distribución de accidentes respecto al tipo de vehículo afectado, siendo el más común el turismo, lo que es lógico al ser el vehículo más común. 

Distribución de accidentes total, lo que muestra que los accidentes representan solo una pequeña parte del total de desplazamientos realizados en Madrid.


Distribución de accidentes respecto al tipo de persona accidentada, siendo el más afectado el conductor.

Por otro lado, la idea de la parte del uso de Machine Learning es la predicción de la probabilidad de tener un accidente dado un nuevo caso que no se encuentre en nuestro dataset. El dataset consta con muchas columnas informativas pero hemos decidido centrarnos en aquellas que creemos más relevantes (rigiéndonos por el criterio empleado por Mario de los Ríos):

  • DISTRITO → Distrito de Madrid al que queremos dirigirnos.
  • DÍA SEMANA→ Día en el que procederemos al viaje.
  • Tipo Vehículo→ Tipo de vehículo que usaremos en el viaje.
  • TIPO PERSONA → Tipo de persona implicada en el accidente. Incluye: conductor, peatón, testigo o viajero.

Para ello, preprocesamos los datos (2011–2024) unificando el formato y generamos un archivo machineLearning.csv con las columnas clave ya convertidas: distrito, día de la semana, tipo de vehículo, tipo de persona, número de casos y proporción. 

Debido a que nuestro objetivo es predecir una nueva probabilidad Y para un nuevo caso X, optamos por usar regresión lineal no regularizada. Primero, implementaremos manualmente la función de coste y la del gradiente, ya que el tamaño del dataset impide usar funciones externas para obtener el theta óptimo al instante.

Este proceso es costoso en tiempo y computación, y debe repetirse si se modifica el dataset. Por ello, aunque el modelo entrena a partir del descenso de gradiente, ponemos directamente el ThetaOptimo hallado en el código para no calcularlo en cada ejecución. El valor obtenido tras aplicar el algoritmo de descenso de gradiente sobre nuestro dataset unificado es el siguiente: 

[2.98199206e-04,-1.53753441e-05,-9.97759787e-06,1.03940314e-04,-1.97096881e-04]

Una vez calculado el Theta Óptimo, predecir una nueva probabilidad es casi inmediato mediante: 

El resultado se interpreta como la probabilidad (en porcentaje) de accidente relativa a la media de accidentes con esas características.

Podemos observar algunos de los ejemplos obtenidos:

DISCUSIÓN DE RESULTADOS

Consideramos de gran importancia conocer los resultados del análisis general: 

  • El barrio más propenso a accidentes es Salamanca, seguido por Chamartín y Puente de Vallecas.
  • El día con más accidentes es el viernes, seguido del miércoles, mientras que el domingo es el más seguro.
  • El vehículo más implicado es el turismo, presente en varias rutas peligrosas.
  • El tipo de persona más afectada es el conductor, mientras que el viajero suele aparecer en rutas más seguras.

Los resultados obtenidos muestran que la combinación de ciertas características puede aumentar significativamente la peligrosidad de una ruta. Algunas rutas, como las de Arganzuela un viernes con un peatón o Tetuán un miércoles, resultan mucho más seguras que la media. En cambio, otras como las que incluyen Salamanca o Chamberí en días laborables, muestran una mayor probabilidad de accidente, en algunos casos superando el 70% respecto a la media. Además, el turismo y el conductor aparecen en las rutas con mayor riesgo. 

Estos resultados coinciden con los patrones detectados en el análisis, lo que confirma que el modelo es útil para detectar qué combinaciones concretas aumentan o disminuyen el riesgo de accidente, mostrando que el comportamiento del tráfico varía según el distrito, el tipo de vehículo, la persona implicada y el día de la semana.

REFERENCIAS

 [1] Accidentes de tráfico de la ciudad de Madrid. Datos.Madrid. Ayuntamiento de Madrid.

https://datos.madrid.es/portal/site/egob/menuitem.c05c1f754a33a9fbe4b2e4b284f1a5a0/?vgnextoid=7c2843010d9c3610VgnVCM2000001f4a900aRCRD&vgnextchannel=374512b9ace9f310VgnVCM100000171f5a0aRCRD&vgnextfmt=default

[2] Incidencias_de_trafico_en_Madrid. GitHub Mario de los Santos. 

https://github.com/MarioDeLosSantos/Incidencias_de_trafico_en_Madrid?utm_source=chatgpt.com

AUTORES: AMPARO HINOJOSA, CARLOTA LÓPEZ y ANA LI CAMELLO

Aplicación de modelos generativos en la identificación de huellas biomédicas

INTRODUCCIÓN

El reconocimiento biométrico, una tecnología que identifica individuos mediante características biológicas, está en auge. Los modelos generativos, capaces de aprender y replicar datos, juegan un papel esencial en este campo. Estas técnicas avanzadas mejoran la precisión y seguridad de los sistemas biométricos al crear representaciones precisas de los rasgos biológicos. [1]

En este contexto, exploremos cómo los modelos generativos aumentan la eficacia y fiabilidad de los sistemas biométricos en diversas aplicaciones. A continuación, se presentan algunos de los objetivos comunes [2]:

Mejora de la precisión: Los modelos generativos capturan mejor las variaciones y características sutiles de los rasgos biométricos, lo que resulta en una identificación más confiable de individuos. Esto se traduce en una mayor precisión en el reconocimiento biométrico.

Incremento de la seguridad: Al generar representaciones biométricas más robustas y difíciles de falsificar, los modelos generativos fortalecen la seguridad de los sistemas biométricos. Esto reduce los riesgos de suplantación de identidad o manipulación fraudulenta.

Reducción de la dependencia de datos masivos: Los modelos generativos pueden aprender las distribuciones subyacentes de los datos biométricos y generar nuevas muestras. Esto disminuye la necesidad de grandes conjuntos de datos de entrenamiento, haciendo que los sistemas biométricos sean más eficientes y rentables.

Mejora de la privacidad: Estos modelos pueden generar representaciones biométricas que preservan la privacidad del individuo. Esto mitiga preocupaciones relacionadas con la privacidad y el uso indebido de datos biométricos, al mismo tiempo que permite un reconocimiento efectivo y seguro.

Estado del arte

Para enfrentarnos a este problema, hemos decidido trabajar con las GAN y para ello primero debemos entender en qué consiste.

Las Redes Generativas Antagónicas (GANs, por sus siglas en inglés) son un tipo de modelo de aprendizaje automático introducido por Ian J. Goodfellow en 2014. Las GANs consisten en dos redes neuronales que compiten entre sí: una red generadora y una red discriminadora.

  1. Generador: Esta red toma una entrada de ruido aleatorio y genera datos que intentan imitar el conjunto de datos reales. Su objetivo es producir datos que sean indistinguibles de los datos reales.
  2. Discriminador: Esta red recibe tanto datos reales como los datos generados por la red generadora, y su tarea es distinguir entre ambos. Su objetivo es identificar correctamente si una entrada es real o generada. [3]

Estas se han usado con diferentes objetivos, incluyendo la generación de imágenes, videos, diseño de productos, aplicaciones médicas e incluso arte.

En nuestro caso práctico, nuestro objetivo es entrenar las GANs pasándole imágenes reales e imágenes corruptas de huellas dactilares para que aprenda a reconstruir la imágen corrupta y que se parezca lo máximo a la real. [4]

Las Redes Generativas Adversarias (GAN) han revolucionado la generación de imágenes, y su evolución ha dado lugar a técnicas cada vez más sofisticadas. Aquí podemos encontrar algunas de ellas.

Progresive Growing GAN (PGGAN): Entrena el modelo en etapas, comenzando con imágenes de baja resolución y aumentando gradualmente la resolución para mejorar la estabilidad y la calidad de las imágenes generadas. [5]

StyleGAN y StyleGAN2: Permiten controlar el estilo de las imágenes generadas y ofrecen un mayor grado de disentanglement (separación de características). [6]

CycleGAN: Permite realizar traducciones de imagen a imagen sin necesidad de pares de imágenes emparejadas. [7]

Self-Attention GAN (SAGAN): Incorpora mecanismos de autoatención para mejorar la calidad de las imágenes generadas y capturar dependencias de largo alcance. [8]

Estas técnicas han permitido avances significativos en la calidad y diversidad de las representaciones generadas, y su impacto se ha sentido en múltiples campos. Por ejemplo, en la medicina, las GANs se utilizan para generar imágenes sintéticas que pueden mejorar los diagnósticos o entrenar modelos sin necesidad de grandes conjuntos de datos reales.

A pesar de investigar y posteriormente conocer sobre algunos avances más recientes y sofisticados en las GANs. Hemos decidido centrarnos en la arquitectura original de las GANs para nuestro proyecto. Creemos que comenzar con el modelo básico nos permitirá una comprensión más profunda de los fundamentos y principios subyacentes de estas. 

Esta elección también se aliena mejor con nuestro objetivo de reconstruir imágenes corruptas de huellas dactilares, proporcionando una base sólida y bien estudiada sobre la cual construir nuestras futuras investigaciones y posibles mejoras. 

Para comprobar los resultados hemos usado las imágenes de entrenamiento.

En estas figuras podemos ver como si que hay imágenes que se reconstruyen bien (fila 1) pues no contienen mucho ruido y la reconstrucción se asemeja a la imagen real.

Sin embargo, tal y como hemos comentado antes, las imágenes que contienen ruido en partes clave de la huella son complicadas de reconstruir y los resultados son huellas que contienen fallos importantes y que impedirían un posible reconocimiento.

Después de entrenarlas, lo que haremos será generar nuestras propias imágenes con una GAN (todavía por hacer) para que ‘demuestre’ lo aprendido y que veamos cómo de bien reconstruye nuestras imágenes generadas. 

Desarrollo

Nosotros nos vamos a centrar en un único patrón biométrico que consideramos bastante importante, las huellas dactilares.

Hemos analizado diversos notebooks que hemos encontrado y que nos han parecido interesantes.

En el primero( https://github.com/denkovarik/Fingerprint) se utilizan GANs

para reconstruir imágenes de baja calidad de huellas dactilares. Podemos ver que los resultados no llegan a ser muy satisfactorios, sobretodo en aquellas imágenes en las que no están bien definidas las zonas centrales, que presentan patrones más complejos.

En el segundo (https://www.kaggle.com/code/dijorajsenroy/fingerprint-feature-extraction-for-biometrics) se explica y analiza cuales son las características que se extraen de las huellas dactilares para que estas puedan ser reconocidas y diferenciadas.

Preparación de Datos:

  • Se recopilan imágenes de huellas dactilares, tanto de alta calidad como de baja calidad o corruptas.
  • Las imágenes se preprocesan para limpiarlas, eliminar ruido y normalizarlas.
  • Se pueden aplicar técnicas de aumento de datos para crear variaciones artificiales de las huellas existentes, enriqueciendo así el conjunto de datos.
  • Las imágenes se dividen en conjuntos de entrenamiento y validación.

Generación de huellas:

Para generar las huellas sobre las que vamos a trabajar, vamos a utilizar el programa Anguli: https://dsl.cds.iisc.ac.in/projects/Anguli/ que es un proyecto desarrollado por el Instituto Indio de Ciencias que permite generar huellas dactilares sintéticas en C++ a partir de datasets privados. Este problema es capaz de generar también las huellas con distintos tipos de ruidos.

En nuestro caso vamos a generar 100 huellas con sus respectivas correspondencias con ruido. Para el ruido hemos definido su nivel entre 0 y 10 y para los scratches también entre 0-10.

Los parámetros que definimos son:

Y nos genera una serie de carpetas con las huellas.

Diseño de la Arquitectura GAN:

  • Se define la estructura del generador, que tomará como entrada una huella dactilar de baja calidad y generará una versión mejorada.
  • Se define la estructura del discriminador, que recibirá tanto huellas dactilares reales como generadas y aprenderá a distinguir entre ellas.

Entrenamiento del Modelo GAN:

  • El generador y el discriminador se entrenan de forma iterativa y competitiva.
  • El generador intenta crear huellas dactilares falsas cada vez más realistas para engañar al discriminador.
  • El discriminador se esfuerza por mejorar su capacidad para distinguir entre huellas reales y falsas.
  • Este proceso continúa hasta que el generador produce huellas dactilares que son prácticamente indistinguibles de las reales.

Evaluación y Validación:

  • Se evalúa el rendimiento del modelo utilizando métricas como la precisión, el recall y el F1-score en un conjunto de datos de prueba independiente.
  • Se realizan pruebas de robustez para evaluar cómo el modelo maneja huellas dactilares borrosas, incompletas o con ruido.
  • La gráfica muestra la evolución de las funciones de pérdida del generador y el discriminador durante el entrenamiento de una Red Generativa Antagónica (GAN). 
  • El entrenamiento parece haber sido exitoso en general, ya que ambos modelos han alcanzado un equilibrio y el generador produce muestras realistas. Sin embargo, el posible sobreajuste del generador es algo que se debería investigar más a fondo.

Extracción de las características de las huellas:

Después de generar las imágenes de huellas, utilizamos técnicas avanzadas de procesamiento de imágenes para extraer características distintivas de las huellas. 

Sabemos que no es un modelo generativo pero nos servirá para hacernos una idea de cómo se extraen.

Mostramos imágenes aleatorias a partir de datos:

Transformamos las imágenes implementando un suavizado a las imágenes y que detecte bordes.

Además, realizamos la umbralización de huellas dactilares utilizando el valor medio de intensidad de pixeles como umbral.

Y extrae características como terminación, bifurcación y minucias de las huellas dactilares.

Aquí es fundamental la extracción precisa de estas características para la identificación biométrica, ya que permite comparar y verificar identidades de manera eficaz.

Combinando ambos códigos se podrían cuantificar la diferencia de las características entre las huellas reconstruidas y las reales y asi podriamos ver la eficacia del modelo de generación.

Consideraciones Éticas y de Privacidad:

  • Se garantiza que los datos biométricos se recopilen y utilicen de manera ética y responsable, respetando la privacidad de los individuos.
  • Se abordan posibles sesgos en los datos y en el modelo para asegurar la equidad en el uso de la tecnología.

El trabajo se encuentra desarrollado en el notebook llamado “CodigoPASD.ipynb”.

Referencias

  1. https://www.biometricupdate.com/202403/financial-fraud-is-exploding-fueled-by-cheap-and-easy-generative-ai-tools
  2. https://www.sciencedirect.com/science/article/pii/S0952197623018961
  3. https://www.iic.uam.es/innovacion/generacion-imagenes-tecnicas-basadas-gans/
  4. https://www.researchgate.net/publication/373551906_Ten_Years_of_Generative_Adversarial_Nets_GANs_A_survey_of_the_state-of-the-art
  5. https://arxiv.org/abs/1710.10196
  6. https://arxiv.org/abs/1812.04948
  7. https://arxiv.org/abs/1703.10593
  8. https://arxiv.org/abs/1805.08318
  9. https://github.com/denkovarik/Fingerprint
  10. https://www.kaggle.com/code/dijorajsenroy/fingerprint-feature-extraction-for-biometrics

GENERACIÓN DE IMÁGENES A PARTIR DE UN PROMPT

INTRODUCCIÓN

Los modelos de difusión, específicamente los modelos de texto a imagen, han permitido la transformación de ideas (imaginarias) a la realidad con un ‘prompt’ adecuado, idóneo, oportuno, conveniente… El énfasis sobre el prompt se debe a que la traducción del propio prompt al modelo y su conocimiento definen nuestros grados de libertad a la hora de querer generar esas ‘ideas’ en una imagen.

En el caso de que usemos un modelo para introducir un nuevo objeto o persona, o que deseemos modificar el estilo de la propia imagen, el modelo puede desconocerlo. Para solucionar dicho problema se ha ideado una salida que tiene un símil con el método socrático. Aprendemos una nueva representación del objeto o estilo en el ‘space embedding’ a partir de 4-5 imágenes con un modelo “text2image” congelado.

ESTADO DEL ARTE

La generación de imágenes a partir de un prompt o descripción textual ha avanzado significativamente en los últimos años. Este campo es conocido como “ text to image”, y está transformando la forma en la que se crean contenidos visuales en distintos campos que lo requieren.

La generación de contenido digital es algo muy extendido por todos los sectores. Sectores como el marketing y la publicidad pueden generar contenido para campañas publicitarias de una manera más rápida y personalizada. Además, este contenido estará basado en las preferencias del usuario. En general, la generación de imágenes aporta un enfoque distinto de creatividad. Sin embargo, hay que tener en cuenta una serie de consideraciones acerca de qué contenido se genera y cómo se genera. 

DESARROLLO DE MODELO DE DIFUSIÓN

Modelos de difusión

Vamos a indagar cómo los modelos de difusión estable funcionan, los modelos de difusión son entrenados para quitar ruido gaussiano a un dato al que se le ha añadido ruido gaussiano hasta ser puro.

Encontramos dos procesos dentro de los modelos de difusión:

  1. ‘Forward diffusion’: difusión hacia delante, proceso fijo que va añadiendo ruido gaussiano a una imagen hasta llegar a ruido puro gaussiano q(xt | xt+1)
  2. ‘Backward diffusion’: red neuronal que aprende a quitar el ruido gaussiano gradualmente, empezando desde puro ruido gaussiano hasta la imagen real

En cuanto al desarrollo matemático subyacente, vamos a comentar sus diferencias con el modelo Variacional Jerárquico Markoviano y su desarrollo hasta llegar a la expresión del ELBO que habrá que optimizar en el proceso de aprendizaje del modelo de difusión. 

En un modelo de difusión variable tenemos 2 distribuciones: “p” y “q”. La distribución “q” añade ruido a una imagen durante unos timesteps determinados. La distribución “p” elimina el ruido que ha añadido la distribución “q” a la imagen original. Esta distribución tiene que intentar que tras eliminar el ruido añadido por “q” la imagen de salida sea lo más parecido a la imagen de entrada.

De esta manera podemos definir el modelo de difusión HVAE en el que definimos el espacio latente como de misma dimensión al de la entrada. Cada paso del encoder está pre-definido como una distribución gaussiana centrada en el output del paso anterior, y unos parámetros que son optimizables a medida que pasa el tiempo.

Entonces, tenemos las mismas expresiones que en el caso del Autoencoder afectadas por las restricciones definidas.

De esta manera nos quedan:

Posterior

Como hemos definido, cada paso del encoder será gaussiano:

Podemos observar que q(x0) es la distribución real de los datos en la imagen real, de los datos que entran al modelo.

De la misma manera, con las distribuciones que eliminan el ruido (p):

Finalmente, para optimizar el modelo tenemos que optimizar ELBO, teniendo en cuenta que lo único a aprender son las distribuciones del decoder p, y no los encoders, que hemos definido como gaussianas. Como observamos en las nuevas expresiones que hemos mostrado, esto se refleja en que ya no está parametrizado por θ.

Si derivamos la expresión del ELBO directamente de la del (MHVAE), obtenemos una expresión que usaría Montecarlo para hacer las estimaciones de dos variables a la vez. En su lugar, se utiliza una variación en la que se tiene en cuenta sólo una variable a la vez, teniendo en cuenta x0 como parámetro a la distribución. 

Usando Bayes, la transición sería:

Finalmente, la expresión del ELBO quedaría así:

Nos quedan 3 principales componentes, y nuestro objetivo será optimizar el término de reconstrucción y el término de similitud del denoiser. El “prior matching term” quedaría como 0 según las asunciones definidas para este modelo.

Así, el proceso de aprendizaje pasará por optimizar por Monte Carlo el reconstruction term, y obtener las distribuciones de p que más se parezcan a q para minimizar la divergencia Kullback-Leiber entre las dos.

Modelo de difusión condicionado a un prompt

Una vez explicados los modelos de difusión, nos centramos en los modelos de difusión de texto a imagen. Para estos modelos, tendremos que introducir un prompt sobre el que se basará el modelo para devolver una imagen. Este prompt es un texto que tiene que ser procesado. Las partes más importantes de este procesado son:

Tras prcoesar el texto se llega al predictor de ruido que es una red U-Net. La principal diferencia con los modelos de difusión de texto a imagen con respecto al resto de los modelos de difusión es que la red U-Net está condicionada al prompt que se ha introducido. Este prompt ha sido procesado antes de introducirse a la red U-Net. Al predictor de ruido no solo llega el prompt procesado, si no que también llega una imagen codificada por un VAE. Esta imagen generada en un principio solo contiene ruido. En conclusión, el predictor de ruido (U-Net) enlaza el prompt y la imagen. 

El predictor de ruido, como su nombre indica, predice el ruido de la imagen que le ha llegado. Ese ruido predicho se resta a la imagen latente que se ha introducido a la red U-Net, de tal forma que se obtiene una nueva imagen latente. Esta nueva imagen latente tendrá menos ruido que la imagen que se había introducido antes a la red, y se volverá a introducir al predictor de ruido para volver a repetir el mismo proceso. Este proceso hay que repetirlo entre 20 y 50 veces. Si repetimos el proceso menos de 20 veces, es probable que la imagen que obtengamos no tenga mucha calidad ya que no se habría quitado suficiente ruido. Por el contrario, si repetimos el proceso más de 50 veces, podemos caer en overfitting ya que estaríamos quitando ruido cuando no es necesario.

Tras haber eliminado el ruido de la imagen latente, el sistema podrá devolver la imagen asociada al prompt. Sin embargo, antes de ello habrá que hacer el paso opuesto al principio, decodificando la imagen latente con un VAE. 

Textual inversion

Textual inversion crea relaciones entre imágenes y texto en un modelo preentrenado. Además, se alimenta al modelo con las distintas descripciones textuales. Dicho modelo se entrenará ajustando los embeddings del texto. En conclusión, este proceso nos permite generar imágenes precisas a partir de descripciones textuales.

RESULTADOS

Como hemos explicado en el modelo de difusión condicionado por un prompt y el entrenamiento se realiza sobre la parte de text_encoder, parte donde se codifica el espacio embedding del texto (prompt) que se emplea para condicionar el modelo de difusión empleando una atención cruzada con el de la imagen. En las demás partes del modelo se congelan los parámetros ya que como hemos explicado en el textual inversion el error asociado del gradient-tape se propaga sobre el text-embedding.

Definimos un entrenador para afinar un modelo de difusión estable, StableDiffusionFineTuner, utilizando un programador de ruido específico, NoiseScheduler. Se configura con un optimizador Adam que tiene una tasa de aprendizaje cíclica mediante una decaída coseno. Luego, se compila el modelo con una función de pérdida MSE.

Generación del modelo.

Generamos la imagen y dentro del prompt definimos dónde va a estar el token entrenado.

CONCLUSIÓN

Como podemos observar, no se han modificado los parámetros del modelo. Esto implica que el modelo conserva el conocimiento referente a las pirámides. Sin embargo, dentro del prompt podemos definir el objeto o estilo específico con el token que se ha entrenado previamente. Al final se ajusta el modelo de tal forma que pueda conocer distintos objetos o estilos sin modificar el espacio latente, es decir, el conocimiento del modelo.

Uno de los atractivos de textual inversion es que se basa en la modificación del propio input, por lo que es muy adaptable para usarse con otros modelos como generadores de audio.

REFERENCIAS

Andrew. (2024, 04, Enero).  How does Stable Diffusion work?. Recuperado el 28 de Abril de 2024, https://stable-diffusion-art.com/how-stable-diffusion-work/ 

Calvin Luo. (2022, 26, Agosto). Understanding Diffusion Models: A Unified Perspective. Recuperado el 28 de Abril de 2024, https://arxiv.org/pdf/2208.11970

Rogge, Niels., Rasul Kashif.  (2022, 7, Junio). The Annotation Diffusion Model. Recuperado el 04 de Mayo de 2024. https://huggingface.co/blog/annotated-diffusion

Gal, Rinon., Alaluf, Yuval., Aramon, Yuval.,Patashnik, Or., Bermano, Amit H., Chechik, Gal., Cohen-Or, Daniel. (2022, 02, Agosto). An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion. Recuperado el 15 de Mayo de 2024, de: https://arxiv.org/abs/2208.01618   

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

Análisis de Series Temporales en Finanzas con Inteligencia Artificial

  • INTRODUCCIÓN

Nos proponemos utilizar datos históricos del mercado de valores para estimar el precio de cierre de las acciones de cuatro empresas líderes en tecnología (Apple, Amazon, Google y Microsoft) para el año 2023-2024

Para ello, observamos los datos obteniendo los datos históricos de Yahoo Finance [1] para estas empresas utilizando la biblioteca yfinance en Python. Así, exploraremos y analizaremos estos datos para comprender mejor el comportamiento pasado de las acciones.

Más adelante, utilizaremos técnicas de modelado predictivo, incluyendo el uso de redes neuronales convolucionales (CNN), redes neuronales recurrentes (RNN) y modelos de series temporales, específicamente el uso de redes neuronales LSTM (Long Short Term Memory), para predecir el precio de cierre de las acciones de estas empresas para el año 2024. [2]

Basándonos en el primer análisis exploratorio de Kaggle, decidimos no solo predecir el precio de cierre del resto de empresas, si no también probar distintos modelos y evaluar su rendimiento. Además enfocamos a fondo la parte que predecimos para analizar tendencias de estas empresas.

A través de este análisis, buscamos proporcionar una estimación fundamentada y basada en datos del precio de cierre de las acciones de estas empresas para el próximo año, utilizando una variedad de técnicas de modelado avanzadas. [3]

  • ESTADO DEL ARTE

La inteligencia artificial en finanzas consiste en el uso de la tecnología, incluyendo algoritmos avanzados de ML para analizar datos, automatizar tareas y mejorar la toma de decisiones en el sector de los servicios financieros.

Se refiere a la aplicación de un conjunto de algoritmos de ML para permitir a las organizaciones de servicios financieros mejorar la eficacia, precisión y rapidez de tareas como el análisis de datos, la previsión, gestión de riesgos, detección de fraudes…

La IA permite una mejor comprensión de los mercados financieros y la creación de formas de relacionar las acciones de los clientes con ciertos factores. [4]

Además, se prevé que las instituciones financieras dupliquen su gasto en IA, por lo que resulta un tema interesante para las empresas en la actualidad. [5]

  • DESARROLLO

Para comenzar, observamos un análisis exploratorio para entender el conjunto de datos del que partimos. En los datos encontramos la siguiente información:

  • Date: fecha en la que se registraron los datos de la bolsa de valores para las acciones de cada empresa.
  • Open: precio de apertura, es decir, el precio al que una acción comienza a cotizar un día determinado.
  • High: precio más alto al que llegó la acción durante el día de negociación.
  • Low: precio más bajo al que cayó la acción durante el día de negociación.
  • Close: precio de cierre, es decir, el último precio al que se negoció una acción durante el día de negociación.
  • Adj Close: precio de cierre ajustado, teniendo en cuenta eventos corporativos. Ajusta el precio de cierre en consecuencia para proporcionar una imagen más precisa del rendimiento de la acción.
  • Volume: volumen de acciones negociadas durante el día de negociación. Indica cuántas acciones se compraron y vendieron.
  • Company Name: nombre de la empresa que se está analizando.

Tras analizar estadísticas descriptivas sobre estas variables, se representa el precio de cierre a lo largo del tiempo para cada empresa: 

Para Google, Microsoft y Amazon podemos observar una clara tendencia ascendente a lo largo del tiempo, lo que indica que el precio de las acciones a estado subiendo en general. Sin embargo, para Apple, los precios han ido subiendo y bajando, encontrándose al final de la gráfica en uno de los puntos más altos, esto indica que es más volátil.

Utilizan la media móvil (MA) para suavizar los datos sobre precios, creando un precio medio constantemente actualizado. El promedio se toma durante un periodo de tiempo determinado, 10, 20 y 50 días. Veámosla con claridad ya que es un buen acercamiento a los datos internos de las empresas.

Las medias móviles más largas (50 días) suavizan los datos más que las otras, lo que ayuda a identificar tendencias a largo plazo, se observa cómo esta (línea verde) es más suave que el resto.

Las medias móviles más cortas (10 días) son más sensibles a cambios recientes en el precio, lo que puede ayudar a identificar tendencias a corto plazo.

Vemos cómo en las cuatro gráficas la línea roja (media móvil de corto plazo) empieza a cruzarse por encima de la línea verde (media móvil a largo plazo) al final de 2023, lo que puede indicar señales de compra.

Cuando se cruza por debajo, podemos interpretar una señal de venta.

Para Apple, vemos que las medias móviles de 10 y 20 días reaccionan más rápidamente a cambios de precio que la de 50 días. Identificamos un cruce significativo a finales de 2023, donde la línea roja supera notablemente a la línea verde; esto puede ser interpretado como un cambio positivo en la tendencia de los precios de la acción. Puede verse como una señal alcista, sugiriendo que el precio de la acción podría estar comenzando a ascender. Los inversores podrían considerar este cruce como una señal para comprar la acción, anticipando que el precio continuará subiendo (podemos identificar lo mismo en Google en marzo de 2024, en Microsoft en noviembre de 2023 y en Amazon también noviembre de 2023).

Se analiza el retorno diario de stock en media, nos es útil para ver densidades y distribuciones y hacernos una idea rápida de la distribución de cada empresa: 

Sabemos que los retornos positivos indican un aumento del precio de la acción de un día al siguiente, retornos negativos una disminución del precio. Los retornos positivos son beneficiosos para los inversores, ya que reflejan un crecimiento en sus inversiones.

Para Apple vemos que el pico más alto se encuentra en -0.01 aproximadamente, lo que indica el valor más frecuente de los retornos diarios (el retorno diario más frecuente es una pérdida del 1%). La mayoría de puntos se encuentran en la parte positiva (retornos positivos), parece sesgado hacia la derecha. Aunque el retorno más común es una pequeña pérdida, hay más días con retornos positivos, sugiriendo una tendencia general de crecimiento a pesar de las pequeñas pérdidas frecuentes.

Para Google, el pico más alto se encuentra en la parte positiva (0.01 aproximadamente), lo que indica una ganancia del 1%. Pero en este caso, es más sesgado hacia la izquierda, hay una tendencia a tener más días con retornos negativos, lo que sugiere más variabilidad.

En Microsoft se encuentra más distribuido y equilibrado, centrándose en valores de entre -0.01 y 0.02 principalmente, aunque más sesgado hacia la derecha (parte positiva). Para Amazon es muy similar. Ambos combinan pequeñas pérdidas y ganancias, aunque con tendencia ligera hacia días con ganancias (crecimiento moderado).

Pasando al objetivo, comenzamos observando el modelo ya implementando LSTM para predecir el precio de cierre de las acciones de Apple.

Calculamos métricas y obtenemos: 

Gracias a este análisis exploratorio, se nos despierta la curiosidad de probar más modelos que apoyen la regresión: Probamos con redes Fully Connected y GRU: Gated Recurrent Units ya que son más simples computacionalmente que las LSTM, son más rápidas de entrenar y menos propensas al sobreajuste en conjuntos de datos más pequeños. Son eficientes y pueden captar dependencias a largo plazo en secuencias de datos. Observamos primeramente sus métricas para tener una primera idea global.

Ampliando en 2023/2024 para ver la predicción más distinguidamente y analizar en detalle cada red, obtenemos:

Cuadra con el resultado obtenido en las métricas ya que FCNN se va de más y las que mejor siguen la trayectoria real son GRU y LSTM. La razón es que las Fully Connected no capturan dependencias temporales porque procesan los datos de manera independiente y estática, sin considerar secuencia ni orden temporal, a diferencia de estas 2 mencionadas que rinden mejor en el contexto de tendencias en series temporales como los precios de acciones.

Sabiendo esto, hagamos estas predicciones para las 4 empresas en cuestión:

Apple es la que acabamos de enseñar.

Google tiene predicciones menos estables en los últimos meses, sin embargo, no sufre la caída en invierno que sufre Apple:

Podemos ver que, en general, ha ido mejor que con Apple.

Seguimos con Amazon, quien recuerda más a Apple. Sin embargo, sufre una caída más pronunciada en el invierno. Observamos: 

Vemos que como estos datos son menos constantes y consistentes es más complicado ajustarse a ellos a la hora de predecir y se ve reflejado en las métricas.

Por último, Microsoft resulta ser más estable, con la caída que afecta al resto menos pronunciada pero más duradera:

Analizando esto, se vuelve a evidenciar que el mejor modelo es GRU ya que mantiene sus MAE entre 1-5, algo bastante impresionante.

  • DISCUSIÓN DE RESULTADOS

Al enfocar nuestro análisis en los precios de cierre predichos para estas empresas, observamos que el precio de cierre de Microsoft es el más alto. Sin embargo, este estudio se centra en determinar cuál de nuestras redes neuronales funciona mejor, dado que ya teníamos los datos de cierre disponibles.

El modelo GRU ha resultado ser el más preciso. Estas redes son efectivas en problemas de regresión y series temporales debido a su capacidad para capturar dependencias a largo plazo, su estructura facilita un entrenamiento más rápido por su simplicidad, y su habilidad para contextualizar datos y capturar patrones.

Utilizamos las métricas MSE (Error Cuadrático Medio) y MAE (Error Absoluto Medio) para evaluar el desempeño de los modelos. Estas métricas confirmaron que el modelo GRU ofrece una mayor aproximación a los valores reales en comparación con otros modelos evaluados habiendo conseguido la mínima de 1.87.

En resumen, hemos experimentado la eficacia de la red GRU en la predicción de series temporales (enfocado a finanzas y mercado), así como el entrenamiento de otras de clasificación como LSTM y FCNN (más conocidos en el grado) y predicho los valores de cierre para 4 grandes empresas para este año.

  • MATERIALES

Presentamos el código referente al entrenamiento y validación de las diferentes redes utilizadas.

Comenzamos por LSTM:

También intentamos utilizar la CNN, normalizando los datos para adecuarla a la tarea de clasificación:

Finalmente, entrenamos diferentes redes neuronales especialmente enfocadas en la tarea y comparamos sus resultados:

Para LSTM: 

Para GRU:

Para FCNN:

Definimos las siguientes funciones para calcular métricas de cada uno de los modelos definidos previamente:  

  • REFERENCIAS

[1] Yahoo Finance https://github.com/ranaroussi/yfinance

[2] Kaggle LSTM time series + stock price prediction https://www.kaggle.com/code/carlmcbrideellis/lstm-time-series-stock-price-prediction-fail

[3] Python para predecir stock market https://youtu.be/fGLY0dIHJ2w?si=lfrpfsuJY6ytCIVm

[4] https://www.ibm.com/es-es/topics/artificial-intelligence-finance#:~:text=%C2%BFQu%C3%A9%20es%20la%20inteligencia%20artificial,sector%20de%20los%20servicios%20financieros

[5] Repercusiones de la IA en finanzas https://www.imf.org/es/Publications/fandd/issues/2023/12/AI-reverberations-across-finance-Kearns

[6] Link a nuestro jupyter, continuación del oficial de kaggle:

https://docs.google.com/document/d/1NJWxg0oVhtz4cVsgmJcpBO1EdEdhL935lRv4_q3fdAs/edit?usp=sharing

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