Superresolución con Inteligencia Artificial: Zoom infinito, o imaginación infinita?

23/06/2020


Uno de los artículos presentados en la conferencia CVPR de este año ha avivado el interés por la super resolución. El artículo, titulado "PULSE: Self-Supervised Photo Upsampling via Latent Space Exploration of Generative Models" [1], presenta una nueva manera de ampliar fotos de caras consiguiendo un aspecto realista. PULSE continúa la tendencia de utilizar redes neuronales convolucionales de manera generativa, creando imágenes capaces de engañar a un sistema de detección de imágenes falsas.

El sistema de superresolución utiliza la red StyleGAN [2], y calcula cuál de las caras creadas por la red generativa se parece más a la imagen de baja resolución. Este proceso consta de tres pasos, primero se entrena StyleGAN para generar imágenes de caras que tengan aspecto realista. El conjunto de entrenamiento es Flickr-Faces-HQ, que consta de 70000 imágenes de caras con una resolución de 1024x1024. El segundo paso es utilizar la red generativa de StyleGAN para crear una imagen nueva. En tercer lugar el sistema calcula el error del proceso teniendo en cuenta, entre otros factores, cuanto se parecen la imagen reconstruida y la de baja resolución. Para ello reduce el tamaño de la imagen generada y compara la apariencia de la imagen de partida, y la imagen generada después de haber reducido su tamaño. Estos dos últimos pasos se repetirán de manera iterativa generando, en cada paso, una imagen que se parezca más a la imagen de baja resolución.

Los resultados de PULSE demuestran que los métodos generativos son capaces de aumentar la resolución sin emborronar las imágenes. Sin embargo, el haber generado (o alucinado) los detalles significa que no se tienen porque corresponder con la realidad que hay en la imagen de baja resolución. Esto se traduce en que la cara reconstruida podría ser de la misma persona, pero también podría ser de otra persona, o ser una cara completamente inventada.

Si te interesa la superresolución, las redes generativas antagónicas (GANs), y quieres ver por que al deep learning le queda mucho para aumentar imágenes como en las películas, este artículo es para ti.

Qué es la super resolución?

La superresolución es una técnica para aumentar el número de pixels de una imagen. Los algoritmos de superresolución reciben una imagen con un tamaño relativamente pequeño, y la escalan a un tamaño mayor tratando de recuperar la información que no se ve en la imagen de partida. Un ejemplo de la utilizad de estos algoritmos es la microscopía, donde es relativamente común que un científico quiera obtener imágenes con una resolución mayor que la capturada por el microscopio. En este caso, hará falta un algoritmo para ampliar la imagen capturada multiplicando su tamaño en un rango que normalmente está entre x2 y x8.

De manera visual, un algoritmo de superresolución mapea los pixels de una imagen pequeña, a una escala grande. Si asumimos una imagen con una cruz de 3x3, en la que el eje de coordenadas está en el pixel superior izquierdo, al mapear los valores de la imagen a una escala más grande pasará lo siguiente:

Zoom x2

La duda ahora es qué hacer con los huecos que no tienen información. La tarea de los algoritmos de superresolución es precisamente la de recuperar esta información, utilizando la información de la imagen original. Opcionalmente, los algoritmos de superresolución pueden incorporar experiencia adquirida durante un proceso de entrenamiento, de esta manera podrán realizar un escalado de manera más informada, y alcanzar mejores resultados.

Quizás el algoritmo de escalado másico es el llamado “nearest neighbor”. Este algoritmo recorre cada uno de los pixels de la imagen escalada, divide su posición entre la escala aplicada, redondea el valor resultante, y asigna el valor del pixel de baja resolución que corresponda a las coordenadas redondeadas. De esta manera, el pixel con las coordenadas (x:5, y:4) tendrá el valor del pixel (x:2, y:2) de la imagen original, tal y como se ve en el siguiente ejemplo:

Ampliar imagen utilizando nearest neighbor

Para un ejemplo tan sencillo este algoritmo funciona bien, pero como te imaginarás, deja de funcionar cuando nos movemos a imágenes más complejas. De hecho, como explicaremos a continuación, es prácticamente imposible aumentar la resolución de una imagen sin perder calidad.

No es posible aumentar la resolución sin perder calidad

Quizás ya lo habrás escuchado, pero lo repetimos una vez más: No se puede hacer zoom en las imágenes y recuperar la cara de una persona con una definición perfecta como pasa en las películas.

Además, en este artículo vamos un paso más allá y afirmamos que no se puede, ni nunca se podrá, al menos utilizando solamente una imagen para recuperar la información. Veamos el siguiente ejemplo para comprobar la dificultad del proceso de superresolución.

Estás buscando un sospechoso, y la única pista que te ha dejado es la siguiente foto pixelada con una resolución de 32x32.

Sospechoso

Es una foto de cara, y fondo neutro, casi una foto tipo carnet. Como investigador, sabes que el algoritmo de superresolución perfecto no existe, pero el ingenio humano es infinito, y planteas una solución inteligente. Vas a reducir el tamaño de todas las imágenes de la base de datos de la policía, y comparar las imágenes reducidas con la imagen del sospechoso.

Ejecutas la búsqueda, y bingo! Hay una coincidencia, Javier Bardem, y como supervillano de la saga Bond estás seguro que él es el que buscas.

Javier Bardem

La búsqueda te ha devuelto esta imagen, así que realizas la comprobación final de manera manual. Reduces el tamaño de la imagen de Javier Bardem, y obtienes una imagen que se parece mucho a la imagen de partida. En la siguiente figura puedes comparar las imagenes, una al lado de otra.

Comparación resultado superresolución

Las imágenes se parecen, así que das el caso por cerrado y detienes al villano. Pero en este punto es cuando te decimos que has cometido un error. Es verdad que la imagen pixelada de partida, y la imagen de Javier Bardem reducida se parecen mucho, pero no son la misma cara. La imagen de partida pertenecía a esta otra persona:

Imagen del sospechoso en alta resolución

Dos caras diferentes han generado imágenes pixeladas (prácticamente) idénticas. Esta es la razón por la que nunca se podrá aplicar superresolución como en las películas.

Mapear imágenes de baja a alta resolución

No todas las aplicaciones de superresolución son tan complejas como recuperar caras de personas. Existen ámbitos mucho más acotados en los que la variabilidad de las imágenes recuperadas es menor. Ésta es una de las motivaciones que lleva a muchos investigadores a empujar los límites de la inteligencia artificial para conseguir algoritmos de superresolución mejores.

Una de las primeras aplicaciones de las redes convolucionales a la superresolución es [3]. Este artículo utiliza una red convolucional para aprender los detalles que sirven para pasar de una imagen escalada con un método clásico, a una imagen con más detalle. El método utiliza aprendizaje end to end, de manera que para cada imagen de baja resolución, el algoritmo tiene disponible la imagen de alta resolución verdadera para estimar cómo de bien funciona. El algoritmo de superresolución ampliará la imagen pixelada, y comparará el resultado con la imagen verdadera, intentando que se parezca lo máximo posible.

Esta manera de aplicar superresolución tiene un problema. Tanto da si utilizas deep learning, machine learning, o cualquier otro tipo de algoritmo, si comparas directamente la imagen reconstruida y la verdadera, pixel a pixel, tu algoritmo siempre reconstruirá imágenes borrosas. Esto se debe a que, como ya vimos en la sección anterior, un pixel de una imagen de baja resolución puede pertenecer a varias imágenes con alta resolución diferentes. Además, al entrenar el algoritmo de reconstrucción trataremos de que no tenga sesgos, es decir, que no tenga preferencia por ninguna imagen en concreto. Juntando estos dos factores, la única vía que tiene el algoritmo de reconstrucción para obtener un error pequeño es hacer un promedio. En este caso promediará todos los valores los pixels de imágenes de alta resolución que se correspondan con un pixel de baja resolución.

Con esto concluimos que hace falta una técnica diferente si queremos añadir detalles finos a las imágenes de alta resolución.

Alucinar imágenes

Una alternativa a los métodos que mapean de baja a alta resolución, son los métodos que buscan directamente una imagen de alta resolución que, tras reducirla, coincida con la imagen de partida. El problema de estas aproximaciones es que generar directamente una imagen en alta resolución es complicado. En concreto, una imagen RGB de 1024x1024 pixels y 8 bits por canal tiene 1024x1024x28x3=1.7592x1013 posibles combinaciones.

Para reducir las posibles combinaciones, muchos autores proponen acotar el problema, y centrarse en imágenes de un dominio concreto, por ejemplo imágenes de caras. El problema ahora se reduce a la posibilidad de generar todas las posibles caras. Afortunadamente, los avances en las GANs ya permiten generar imágenes realistas de caras. Puedes visitar la web thispersondoesnotexist para ver algunos ejemplos de caras generadas automágicamente.

La siguiente tarea es hacer una búsqueda para encontrar una imagen generada que, tras reducirla, se parezca a la imagen pixelada de partida. Las GANs tienen dos subredes, una red encargada de decidir si una imagen ha sido generada, y otra red que genera una imagen a partir de un vector de ruido. Dependiendo de los valores que reciba la red generativa, creará una u otra imagen, puedes pensar en el vector de ruido como si fuese un mando que controla el proceso de generación de imágenes.

Solo resta un último detalle para posibilitar el proceso de búsqueda, y es el proceso de optimización. Cuando se entrena la parte generativa de una GAN, se ajustan los valores de los filtros de convolución para que, partiendo de un vector de ruido, genere una imagen realista. Los valores de los filtros de convolución se optimizan intentando engañar a la red encargada de detectar imágenes falsas. En PULSE no se optimizan los filtros de convolución, se utiliza una red generativa ya entrenada, y se optimiza el vector de ruido. Al tomar el vector de ruido como una variable que queremos optimizar, estamos buscando la configuración del vector que genera la cara que queremos.

El proceso de optimización se ejecuta durante varias iteraciones. En cada iteración se genera una imagen, se reduce, y se compara con la imagen pixelada de partida. Después de cada iteración se actualiza el vector de ruido, el objetivo es que la imagen generada en la próxima iteración, después de reducirla, se parezca más a la pixelada. El siguiente video muestra el proceso de búsqueda, partiendo de una imagen totalmente aleatoria, a una imagen que el algoritmo considera que encaja con una de baja resolución.

Con todo este proceso conseguimos dos cosas, generar imágenes realistas de caras, y generar imágenes con alta resolución que se corresponden con la imagen pixelada. Podría parecer una solución perfecta, pero tiene un problema: las caras generadas son inventadas. En general, las imágenes de alta y baja resolución tendrán caras de personas distintas. Esto se debe a que, como ya vimos anteriormente, una cara pixelada equivale a varias caras en alta resolución. El algoritmo de reconstrucción no sabe cuál de las caras de alta resolución es la buena, por lo que genera la que se parezca más a las que ha generado durante el entrenamiento.

Ejemplos de imágenes ampliadas con PULSE

En esta última sección hemos utilizado PULSE para reconstruir imágenes de famosos. Utilizando el código oficial implementado en PyTorch, hemos partido de imágenes de 64x64 pixels, y hemos ejecutado el algoritmo 10 veces eligiendo a mano el resultado más realista. Debido a que las imágenes resultantes son inventadas, su análisis nos ayudará a entender el sesgo que tiene la base de datos Flickr-Faces-HQ, y la preferencia que tiene StyleGAN por ciertos rasgos faciales. A continuación incluímos los resultados.

Ariana Grande

Superresolución PULSE Ariana Grande

Barack Obama

Superresolución PULSE Barack Obama

Cristiano Ronaldo

Superresolución PULSE Cristiano Ronaldo

Donald Trump

Superresolución PULSE Donald Trump

Drake

Superresolución PULSE Drake

Dwayne Johnson

Superresolución PULSE Dwayne Johnson

Ellen Degeneres

Superresolución PULSE Ellen Degeneres

George Clooney

Superresolución PULSE George Clooney

Katy Perry

Superresolución PULSE Katy Perry

Leonardo DiCaprio

Superresolución PULSE Leonardo DiCaprio

Lionel Messi

Superresolución PULSE Lionel Messi

Nelson Mandela

Superresolución PULSE Nelson Mandela

Pedro Sánchez

Superresolución PULSE Pedro Sánchez

Rihanna

Superresolución PULSE Rihanna

Taylor Swift

Superresolución PULSE Taylor Swift

Vladimir Putin

Superresolución PULSE Vladimir Putin

Una de las primeras observaciones es que el algoritmo tiene preferencia por los ojos claros. No solo ha aclarado el tono de ojos que ya eran claros, sino que ha cambiado el tono de ojos oscuros como los de Ariana Grande o Drake.

Otro cambio que hace el algoritmo es el pelo. Pese a que Dwayne Johnson no tiene pelo, la imagen reconstruida si que lo tiene. Además, en las fotos reconstruidas de Ellen Degeneres, Nelson Mandela, y Rihanna, se aprecia una densidad de cabello reducida en la parte frontal. También se puede observar que ha quitado la coleta típica de Ariana Grande, o que Obama tiene el pelo más liso.

PULSE tampoco reconoce rasgos característicos como la nariz Bantú de Nelson Mandela. Esto se podría deber a que la base de datos utilizada para entrenar StyleGAN tiene pocas caras con rasgos africanos.

También se puede ver que el algoritmo promedia la cantidad de barba. En casos como la barba tupida de Drake, directamente la elimina. En otros casos como la cara de Trump, le añade un poco de vello facial.

Finalmente, una puntualización menor es que todas las caras generadas miran directamente a cámara. Caras ligeramente ladeadas como la de Drake o Taylor Swift están más rectas.

Conclusión

En este artículo hemos explicado en qué consiste la superresolución. Hemos presentado varias aproximaciones basadas en deep learning, y hemos ejemplificado de manera extensiva los problemas que tienen estos algoritmos. Finalmente hemos analizado algunos sesgos en las imágenes reconstruidas. Pese a la dificultad de distinguir con completa confianza qué es un sesgo de la base de datos, y qué es un sesgo introducido por el algoritmo de manera aislada, se observan algunos ejemplos de promediado como la barba, el cabello, y la forma de la nariz.

Si bien el tono general del artículo es negativo, intentando subrayar los problemas que tienen estos algoritmos, el deep learning todavía tiene mucho camino por delante. Lo más importante es saber qué objetivos se quieren conseguir, cómo funcionan los métodos utilizados para conseguirlo, y no dejarse llevar por el contenido mediático que nos lleva a malinterpretar el progreso.

Referencias

[1] Menon, Sachit, Alexandru Damian, Shijia Hu, Nikhil Ravi, and Cynthia Rudin. "PULSE: Self-Supervised Photo Upsampling via Latent Space Exploration of Generative Models." In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, pp. 2437-2445. 2020.

[2] Karras, Tero, Samuli Laine, and Timo Aila. "A style-based generator architecture for generative adversarial networks." In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 4401-4410. 2019.

[3] Kim, Jiwon, Jung Kwon Lee, and Kyoung Mu Lee. "Accurate image super-resolution using very deep convolutional networks." In Proceedings of the IEEE conference on computer vision and pattern recognition, pp. 1646-1654. 2016.