Fotografía del Graf Zeppelin sobrevolando Palacio Salvo — Uruguay 1934

Coloreando fotos antiguas con Inteligencia Artificial

Parte I: Definición del problema y fundamentos teóricos

--

A quien no le ha pasado mientras ordenamos un armario o limpiamos el sótano, en una caja llena de polvo, encontrar un álbum de fotos familiares. Ese álbum del que desconocías por completo de su existencia y que es tan viejo que ni tus propios padres se acuerdan de él. Pero no por ello menos valioso, ya que está repleto de fotos antiguas, fotos de la infancia de nuestros padres, el casamiento de nuestros abuelos y hasta su luna de miel en Piriápolis, más otro montón de recuerdos que tan solo verlos nos salen lagrimas de emoción.

Fotografía de Playa de los Pocitos año 1927. Bañistas y los característicos carros de baños.
Playa de los Pocitos 1927 técnica gelatina y plata — CdF

Por su puesto que las fotos son en blanco y negro ya que allá por el 1900s, cuando mi abuela Antonia veraneaba en el topisimo balneario de los Pocitos, no existían los iPhone, los megapixeles o las selfies. Por aquel entonces el último grito de la moda era una Kodak Brownie o las cámaras de acordeón marca AGFA, Zeiss. Para los que están pensando en una cámara de rollo 35mm, es un par de décadas antes, les dejo una foto abajo para que puedan posicionarse en el tiempo.

Cámara fotográfica Kodak Brownie Target SIX-16, de los últimos modelos fabricados— Jen Theodore Unsplash
Cámara fotográfica Kodak Brownie Target SIX-16, de los últimos modelos fabricados — Jen Theodore Unsplash

Ni hablar de esas manchas que tristemente el paso del tiempo y el descuido, imprimieron en el papel fotográfico.

La verdad es que estamos llenos de fotografías antiguas con recuerdos invaluables. Sin embargo, para poder apreciarlos y disfrutarlos, necesitamos restaurarlos y sobre todo colorearlos. ¡Porque somos animales de costumbres! Acostumbrados al 4K, al True Color y no sabemos disfrutar de la simpleza poética de una foto en blanco y negro.

Supongamos entonces que quiero devolverle el esplendor a un álbum de fotos familiares. ¿Cómo hago? ¿Tengo que ser un experto en fotografía? ¿Tengo que saber cómo usar Photoshop? ¿Y cómo se que colores ponerle a las cosas? No conocí a mi abuela Antonia y no tengo idea de que color eran su vestidos 😱!! Tranquilo, tranquilo, vamos a ver que aquí es donde entra la Inteligencia Artificial para salvar el día.

Este es el primero de una serie de tres artículos, en los que pretendo ver en profundidad de que trata este problema y cómo la Inteligencia Artificial puede colaborar. En la Parte I de esta serie, voy a profundizar un poco más en el problema de la coloración de imágenes y voy a meterme en los fundamentos teóricos necesarios para entender como funcionan los algoritmos de Inteligencia Artificial que se están usando para resolver este problema. En las Parte II y Parte III, pretendo abordar algunas de las herramientas que se encuentran en el estado del arte par resolver este problema, probarlas y ver sus resultados.

Definiendo el problema

Cuando miramos una foto antigua seguramente nos preguntamos: ¿Porqué son en blanco y negro? Y la respuesta está en la composición química de los materiales que se utilizaban en aquella época, tanto para la película como en el procedimiento para fijar la imagen sobre un material. Además la fotografía era muy cara por los materiales que se utilizaban: cobre, vidrio y sales de plata por ejemplo. Otro dato curioso, es que demandaba tiempos de exposición frente a la cámara muy prolongados, incluso de hasta 20 minutos. ¿Por eso quizás las personas salían tan serias?

En resumen las limitaciones de la técnica de la fotografía, permitían tomar fotos de forma monocromática.

Prestase atención a la diferencia entre la fotografía en blanco y negro y la fotografía monocromática. Las fotos en blanco y negro son monocromáticas pero no todas las fotos monocromáticas son en blanco y negro. Por ejemplo, también se hacían fotos utilizando el color sepia.

Indios Cheyenes — Fotografía en sepia inicios 1900s

Más formalmente, la fotografía monocromática es aquella en la que en la imagen se guardan distintas intensidades de la luz, pero en lugar de utilizar distintos tonos de colores para representar las distintas frecuencias de onda de luz, que hacen a los colores que vemos en el mundo real, se utiliza un solo color, con el cual se representan todas. De ahí su nombre mono cromática.

¿Cómo se representa una foto en la era digital?

Otro aspecto importante para entender el problema, es como se representa una imagen en la era digital. Una imagen se puede pensar como una matriz de tamaño NxM, en donde la posición <i,j> de la matriz, guarda la información de la imagen que vemos en el pixel <i,j> de una pantalla. Esta información no es más que el color que vemos en ese pixel y aquí es donde entra la teoría de los espacios de colores que seguramente has escuchado hablar, como escala de grises, RGB, CMYK, HSV, etc.

Representación matricial de una imágen de 5x4 pixeles en RGB

¿Entonces cuál es la gran diferencia entre una foto monocromática y una foto a color? La gran diferencia entre una foto digital monocromática y una en color, es que mientras que en la fotografía monocromática en la posición <i, j> de la matriz tenemos la intensidad de un solo color, para la fotografía en color, tenemos la intensidad de varios colores. Para fijar ideas, en el caso del popular espacio de colores RGB, en la posición <i, j> de la matriz tenemos los valores de intensidad en el rango 0..255, de los colores Rojo, Verde y Azul, que se utilizan para componer el color que percibimos al observar la foto. Mientras que en escala de grises tendríamos el valor de intensidad en el rango 0..255 en donde un pixel que vale 0 es completamente negro, un pixel que vale 255 es completamente blanco y en los valores intermedios de ese rango, se tiene toda la gama de grises.

En resumen, para convertir digitalmente una foto monocromática (por ejemplo blanco y negro) a color, es necesario encontrar una forma de corresponder los valores de grises con valores de colores. No es un problema sencillo ya que dos colores distintos pueden tener valores muy similares en una escala de grises y esto es sencillamente porque el espacio monocromático es más pequeño. Al tomar una fotografía con una cámara antigua, de repente el saco de vestir azul marino de mi tío Loreto salía casi igual de gris que el saco gris oscuro de mi tío Giovanni.

¿Entonces como resolvemos el problema? Fácil, agregando la información que falta y tratando de adivinar la que no tenemos. Esto quiere decir, incorporando en la función o algoritmo encargado de convertir una foto blanco y negro a una foto en color, datos como que las hojas de un árbol casi siempre son verdes y los troncos marrones, que el cielo es azul, las vaquitas casi siempre blancas y negras y así sucesivamente.

Restauración digital ≠ coloreado digital

Otro aspecto en el que vale la pena detenernos un momento es cuál la diferencia entre un proceso de coloreado digital de una foto monocromática y un proceso de restauración.

Mientras que el proceso de coloreado ya lo tenemos más o menos claro de que se trata, la restauración implica un montón de otras tareas que incluyen al coloreado. Por ejemplo eliminar o suavizar efectos de manchas en una foto, mejorar la calidad de la imagen, tratando de alguna forma de aumentar la definición de los objetos, entre otras.

Hay una variedad enorme de técnicas de procesamiento de imágenes digitales para resolver estos últimos problemas, incluyendo técnicas más recientes que también incorporan el uso de Inteligencia Artificial. Por una cuestión de alcance, en esta serie de artículos nos vamos a concentrar específicamente en el problema del coloreado automático.

Ahora que tenemos una definición más clara del problema, veamos algunos conceptos importantes como Redes Neuronales, Redes Convolucionales, entre otros, que van a ser importantes para entender como funcionan las herramientas de Inteligencia Artificial para colorear imágenes.

¿Qué son las Redes Neuronales?

Las Redes Neuronales Artificiales, son una forma de representar funciones matemáticas complejas. En el sentido de la cantidad de parámetros que pueden llegar a tener (del orden de cientos de miles) y las distribuciones de funciones que pueden imitar, ya que el resultado tipicamente suele ser un vector de 0s y 1s. Son inspiradas por las redes neuronales biológicas que constituyen los cerebros en los animales.

Principales componentes de una Neural Network — Ilustración de Packt Publishing

En esencia, una red neuronal se compone de:

  1. Una capa de entrada que constituye a los parámetros de la función.
  2. Una o más capaz ocultas que son las que en definitiva aprenden a estimar o ajustarse al comportamiento de la función objetivo.
  3. Una capa de salida que codifica el resultado de la función.

Las capas ocultas de una red a su vez, se componen de neuronas (las pelotitas en el diagrama). Cada una de ellas conectadas con neuronas de la capa anterior y posterior con una determinada forma o arquitectura. Estas neuronas implementan una función matemática muy simple que se denomina función de activación. Existen varios tipos de función de activación, las más famosas son: Sigmoid, ReLU y Softmax.

En esencia y estableciendo un paralelismo con modelos tradicionales de Machine Learning, al entrenar una red neuronal, iterativamente se van ajustando los coeficientes o “pesos” en las funciones de activación de cada neurona, en cada capa oculta, de forma de reducir el error entre los resultados esperados y los generados por la red.

Naturalmente hay varios conceptos más por detrás pero con estos alcanza para entender que son y cómo funcionan.

¿En qué se diferencia una Red Neuronal de una Red Convolucional?

Desde la introducción del Perceptrón por Frank Rosenblatt en 1957, la teoría de las Redes Neuronales Artificiales se ha desarrollado notablemente, introduciendo diferentes arquitecturas o patrones, para resolver diferentes tipos de problemas. Una de estas arquitecturas o variantes son las denominadas Redes Convolucionales, CNN o ConvNet por su sigla en inglés.

Surgen inspiradas por los patrones de conexión entre las neuronas del cerebro humano, que se encargan de controlar la corteza visual. Allí distintos objetos en el campo visual producen estímulos en pequeñas regiones del cerebro y no en toda la corteza visual. Siguiendo esta idea y a diferencia del Perceptrón, en el que originalmente todas las neuronas de una capa se encontraban conectadas a todas las neuronas de la siguiente capa, en las redes Convolucionales una neurona se conecta solamente con las neuronas de su vecindad en la siguiente capa.

Imagen de una secuencia de CNN para clasificar números escritos a mano

Por su arquitectura, resultaron ser muy buenas en el procesamiento de imágenes, por ejemplo para realizar tareas de visión por computadora como detectar y clasificar objetos. Por ejemplo, reconocer números escritos a mano como se muestra en la foto anterior.

¿Qué son las GANs?

No, no es un diminutivo del Gangam Style ni tampoco una marca de cubos Rubik, es la sigla de Generative Adversarial Networks, un tipo de redes neuronales muy poderoso, utilizadas en problemas de aprendizaje no supervisado.

Fueron propuestas entre otros por Ian Goodfellow, un estudiante de Doctorado de la Universidad de Montreal, formado nada más y nada menos que por investigadores de la talla de Andrw N.G y Yoshua Bengio (que son algo así como los Keith Richards y Jimmy Page de la IA). En el artículo de nombre Generative Adversarial Networks y del año 2014, Ian Goodfellow introduce el concepto para estimar mejor modelos generadores.

Arquitectura de una red GAN — Ilustración de Packt Publishing

Se componen de dos redes neuronales rivales, que aprenden mediante un juego de competencia entre ellas:

  1. La red Generadora, se encarga de aprender la distribución de clases en un set de datos. Para fijar ideas y por ejemplo, la distribución de colores en una pintura de Leonardo da Vinci.
  2. Mientras tanto, la red Discriminadora se encarga de aprender a distinguir entre ejemplos genuinos de un set de datos y ejemplos artificiales o sintéticos. Por ejemplo distinguir entre la verdadera y famosa pintura de Leonardo, la Mona Lisa y una copia.

La idea de las GANs es que en el proceso de entrenamiento, la red Generadora logra desarrollar la capacidad de generar ejemplos artificiales que pueden engañar, la red discriminadora. Dicho de una forma más formal, el objetivo es maximizar la tasa de error de la red discriminadora.

Por su arquitectura, las GANs son capaces de capturar y copiar variaciones en un set de datos. Por ello son muy buenas para modificar y manipular por ejemplo imágenes y de forma realista, pero también se están probando en la industria farmacéutica, para el desarrollo de nuevas fórmulas de sintetizar medicamentos. Si después de esta explicación te sigue siendo muy abstracto el concepto de GANs, te recomiendo visitar el sitio web ThisPersonDoesNotExist para ver de lo que es capaz una variante de GAN llamada StyleGAN2.

En resumen

Hablamos del problema de restaurar fotos antiguas y definimos concentrarnos solamente en el problema del coloreado de una imagen monocromática. Vimos algunos fundamentos muy básicos sobre imágenes digitales y que implica la tarea que tenemos por delante. Por último repasamos algunos conceptos esenciales sobre Redes Neuronales.

En la Parte II de esta serie de artículos, vamos a ver como se entrelazan todos estos conceptos para resolver este problema utilizando Inteligencia Artificial y vamos a meternos de lleno con un modelo open source que fue entrenado específicamente para la tarea de colorear imágenes.

¡Muchísimas gracias por tu atención y espero que esta primer parte te haya gustado! Si tenes algún comentario o inquietud no dudes en dejarla en los comentarios y trataré de responderte.

¡Hasta la próxima!

--

--

Emiliano Viotti
IDATHA // Enterprise Experience & Academic´s

Machine Learning Director at IDATHA.com — AI Builder — CV and NLP practitioner — Hungry reader and stories writer — Former professor at Fing UdelaR.