Deep Learning: Genera tus propias imágenes con BigGAN

Introducción

La evolución de la inteligencia artificial y del hardware han hecho posible que año tras año la evolución en la generación de imágenes avance a gran ritmo. Las Generative Adversarial Networks (GAN, Goodfellow et al 2014) cada vez generan imágenes de mayor calidad, aquí tenemos el ejemplo con generación de caras:

Pero en diciembre del 2018 hubo un salto cualitativo en generación de caras tras la publicación de un paper de NVIDIA sobre el tema poniendo sobre la mesa una generación de caras de esta calidad:

Fuente: arxiv.org/pdf/1812.04948.pdf

Este paper vino 2 meses después de la publicación por parte de Google DeepMind de su paper sobre BigGAN, el cual presenta nuevas maneras de generar imágenes, y para ello entrenan con las imágenes de ImageNet, es decir, miles de imágenes que están clasificadas en 1000 clases, que van desde razas de perros y gatos, hasta todo tipo de objetos.

Fuente: arxiv.org/pdf/1809.11096.pdf

Genera tus propias imágenes con BigGAN

En lugar de mostrar fotos generadas, he preferido montar un ejemplo que se puede ejecutar en internet de manera que cualquier persona pueda probar cómo es la experiencia de generar imágenes con BigGAN. Para ello he aprovechado los modelos ya entrenados que ofrece TensorHub, y la plataforma Google Colab, que permite subir experimentos en formato Jupyter Notebooks que se ejecutan en la nube (Google ofrece gratis la máquina virtual, la GPU y demás).

Este es el enlace para acceder:

colab.research.google.com/drive/1VRvVeqrWHbLzvk4ehzYzLs5q1ZBj_krp

Una vez dentro se puede ver el código, con algunos comentarios, y al bajar en el código veremos un lugar para cambiar dos parámetros: la cantidad de imágenes a generar (por defecto 10) y qué es lo que queremos generar de entre las 1000 cosas para las que está entrenada

Como ver las clases en ese interfaz no es tan fácil, os pongo un link en el que podéis ver las 1000 clases:

gist.github.com/yrevar/942d3a0ac09ec9e5eb3a

Una vez configurado solamente hay que pinchar en Entorno de Ejecución -> Ejecutar Todas o bien pulsar Ctrl+F9.

Algunos ejemplos

Generación de 201 Ladybug

Generación de 363 Armadillo:

Generación de 281 tabby cat:

Más curiosidades

Entrenar un modelo de BigGAN se hace a partir de unas imágenes de entrada, y lo que se genera es un espacio multidimensional en el que están representadas las imágenes, al coger una imagen lo que estamos haciendo es dar las coordenadas del dato de ese espacio que queremos extraer. Lo curioso es que hay una relación entre los datos cercanos, es decir, todos los gatos estarán cerca entre ellos, y los perros, pero además podemos movernos por ese espacio en lugar de al azar utilizando alguna fórmula matemática. Por ejemplo al movernos por z y seno de z, obtenemos diferentes fondos pero un frontal muy similar:

Al movernos por el valor absoluto de z menos seno de z estaremos obteniendo el mismo fondo, pero el frente será la misma clase pero en diferente posición, como en una animación:

Y al movernos por (x*z)/|z| estaremos obteniendo un zoom diferente del mismo frente de la imagen:

 

CartoonGAN y Hayao Miyazaki

Otro experimento interesante a seguir es el de CartoonGAN, que sirve para transferir estilo a fotos, en este caso incluso dar el estilo de los dibujos de Hayao Miyazaki. El paper tiene ya 9 meses así que es previo a BigGAN, pero es interesante: openaccess.thecvf.com/content_cvpr_2018/papers/Chen_CartoonGAN_Generat

Se puede utilizar el código fuente de este github para poder ejecutar uno mismo esta GAN y aplicar el estilo de miyazaki a nuestras fotos:

github.com/enomotokenji/CartoonGAN-predict