INTRODUCCIÓN
Las GANs (o Generative Adversarial Networks) son una familia de modelos de Inteligencia Artificial en los que dos redes neuronales, conocidas como Generador y Discriminador, compiten entre sí siguiendo una dinámica de “policía y falsificador” para generar datos sintéticos, los cuales ofrecen resultados muy prometedores.
Entre los usos de estas redes se encuentran la generación de imágenes, la simulación de datos médicos o la traducción de imagen a imagen. Es sobre esto último sobre lo que nos centraremos a partir de ahora.
Más concretamente, exploraremos la utilidad de un tipo de GANs más avanzado (Conditional GANs) para colorear imágenes en escala de grises, con el posible objetivo de restauración de imágenes históricas.
ESTADO DEL ARTE
GANs y CGANs
Desde su aparición en 2014, las GANs se han impuesto como una de las formas más eficaces de entrenar modelos generativos. Estas se componen de dos redes adversarias:
- Un generador G, que crea datos sintéticos a partir de ruido.
- Un discriminador D, que estima la probabilidad de que los datos pertenezcan al dataset de entrenamiento frente a que sean generados por G.
Ambas redes se entrenan simultáneamente en un juego de suma cero, en el que el G aprende la distribución de los datos de entrada para generar salidas lo más factibles posible y D aprende a diferenciar los datos sintéticos de los reales. El Discriminador intenta minimizar sus errores de detección y el Generador intenta maximizarlos para imágenes sintéticas:
Aunque en la práctica rara vez es así, este juego tiene un equilibrio de Nash en el que los datos generados son perfectamente indistinguibles de los reales.
Un problema de las GANs es que, aunque el generador aprende la distribución de los datos de entrada, no tenemos control sobre los datos generados.
Para abordar este problema surgieron las GANs condicionales (CGANs por sus siglas en inglés), que introducen tanto en el generador como en el discriminador una nueva condición como dato de entrada.
Esta condición bien puede ser una etiqueta de clase, una parte de los datos o datos de otro tipo (por ejemplo, usar un prompt de texto para generar imágenes).
En las CGANs, el generador no solo aprende la distribución de los datos de entrada, sino que también genera datos consistentes con la condición de entrada al combinar ésta con la prior (normalmente ruido gaussiano) en un nuevo espacio latente conjunto. El entrenamiento sigue la misma dinámica que en las GANs tradicionales, aunque en la función de pérdida se añade la condición y:
Este tipo de arquitecturas son especialmente eficaces para la traducción de imagen a imagen, en las que dada una imagen de entrada la tarea es generar una imagen relacionada pero con otras características. En nuestro ejemplo, dada una imagen en escala de grises queremos obtener la misma imagen a color.
Pix2Pix
Una red muy conocida en el ámbito de la traducción de imagen a imagen es Pix2Pix.
Esta fue presentada en 2016 como una red de propósito general. Es decir, que la misma arquitectura se puede entrenar para distintas tareas y con distintos dominios de entrada.
Veamos más detalladamente de qué se compone esta red:
Arquitectura del generador
El generador consiste en una U-Net, una red convolucional originalmente desarrollada para la segmentación de imágenes biomédicas. Sigue una estructura codificador-decodificador (capas de reducción para representar la entrada en un espacio latente y capas de expansión para reconstruir la imagen) modificada en el que se hace uso de skip connections para mantener la información más detallada de capas anteriores.
Nota: en este diagrama, x es la imagen de entrada con la condición, e y es la imagen de salida.
Arquitectura del discriminador
Para el discriminador se hace uso de una Patch GAN, que evalúa la imagen en pequeños trozos (patches) y luego calcula la media de todos los trozos para obtener la probabilidad de que la imagen sea real.
Función de pérdida
Sea la función de pérdida de una GAN Condicional:
Pix2Pix añade un nuevo término de regularización que mide la diferencia entre la imágen generada y la imágen original:
Finalmente, se pondera esta regularización L1 y se combina con la función de pérdida de la GAN para obtener la función de coste final.
DESARROLLO
Para nuestra tarea, hemos hecho uso de una red Pix2Pix adaptada para poder entrenarse con cualquier dataset de imágenes.
Primero, tomamos una colección de imágenes (estas será nuestra ground truth) y la duplicamos en otro fichero con las imágenes a escala de grises.

Empezamos haciendo un resample para que las imágenes tengan todas el mismo tamaño (512×512). Después, dividimos en un conjunto de entrenamiento y en uno de test con proporción 80-20 y guardamos las imágenes en un dataset. Ahora que ya tenemos los datos con los que vamos a trabajar, procedemos a la creación del modelo:
Definimos las capas de upsample y downsample:

Definimos el generador:

Y el discriminador:

Por último, definimos sus funciones de pérdida:

Y ya tenemos todo lo necesario para comenzar el entrenamiento.
Hemos entrenado el modelo dos veces para probar la generalidad de la arquitectura:
-Un dataset con 702 fotos de perros
-Un dataset de 2032 fotos de arte
Por motivos prácticos y de limitaciones temporales, entrenamos los modelos con 20 épocas, lo que tardó un par de horas con la T4 de Google Collab. Los resultados los comentaremos a continuación.
RESULTADOS
Probaremos ahora a pasarle nuevas imágenes al modelo. Aquí se muestran algunas comparaciones entre la imagen original (ground truth), y la imagen generada a color a partir de la muestra en escala de grises.
DISCUSIÓN
Teniendo en cuenta las limitaciones del dataset y del entorno de Google Colab (561 imágenes para un entrenamiento con 20 épocas), los resultados son bastante satisfactorios. Más allá de métricas y errores cuantitativos, visualmente se puede apreciar que las imágenes se colorean de forma razonable, incluso cuando ve imágenes ajenas al dataset original. Esto Indica una buena generalización del modelo para fotos de perros y no solo limitada a los datos vistos durante el entrenamiento.
No obstante, las imágenes resultantes son bastante oscuras y con una paleta muy homogénea. Esta escasez de color podría deberse a una falta de datos/épocas durante el entrenamiento o a una falta de diversidad de color en los datos de entrada, y no lo abordaremos aquí. Sin embargo, el problema de la oscuridad se puede mitigar de manera directa, aplicando una transformación logarítmica a las imágenes de salida.
Como podremos comprobar, los resultados han mejorado. Si queremos resultados aún mejores, deberíamos ajustar la transformación logarítmica para cada imagen hasta lograr el resultado óptimo. Por otra parte, el dataset de obras de arte cuenta con más imágenes y una variedad de colores más amplia, así que no encontramos estos problemas en la misma medida.
A la vista de estos resultados, podemos concluir que Pix2Pix es un modelo adecuado para tareas de coloración de imágenes, y que con más recursos es razonable esperar unos resultados mucho mejores.
MATERIALES
- Dataset de fotos de perros: https://www.kaggle.com/datasets/pavansanagapati/images-dataset
- Dataset de fotos de arte: https://github.com/iancraz/Pix2Pix-Image-Colorizer
- Código Colorization: https://colab.research.google.com/github/iancraz/Pix2Pix-Image-Colorizer/blob/main/Colorization.ipynb
BIBLIOGRAFÍA
Aparte de los recursos ya mencionados en el apartado de Materiales:
- Henry, J., Natalie, T., & Madsen, D. (2021). Pix2Pix GAN for Image-to-Image Translation. ResearchGate. [Última vez visitado: 14 de mayo 2025] https://www.researchgate.net/publication/353972591_Pix2Pix_GAN_for_Image-to-Image_Translation
- TensorFlow. (s.f.). pix2pix: Image-to-image translation with a conditional GAN [Notebook]. Google Colab. [Última vez visitado: 14 de mayo 2025] https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/generative/pix2pix.ipynb
- Mirza, M., & Osindero, S. (2014). Conditional Generative Adversarial Nets [Preprint]. arXiv. [Última vez visitado: 15 de mayo 2025] https://arxiv.org/pdf/1411.1784
- Brownlee, J. (2019). A Gentle Introduction to Pix2Pix Generative Adversarial Network. Machine Learning Mastery. [Última vez visitado: 14 de mayo 2025] https://machinelearningmastery.com/a-gentle-introduction-to-pix2pix-generative-adversarial-network/
- Shorten, C. (2019). Pix2Pix. Medium. [Última vez visitado: 15 de mayo 2025] https://medium.com/data-science/pix2pix-869c17900998
Este artículo ha sido desarrollado por Jorge Martínez, Sergio Manrique, Lijun Zhou y David Fernández