Source: https://revolucionia.com/2017/11/Generando_imagenes_sinteticas_celebridades.html
Timestamp: 2020-02-27 10:55:13+00:00

Document:
Generando imágenes sintéticas de celebridades
Fernando P. 03/11/2017
La compañía NVIDIA es conocida por sus procesadores de alto rendimiento para aplicaciones de cálculo intensivo, sobre todo en temas de procesamiento de gráficos (GPU). Pero también se está especializando en construir dispositivos de proceso paralelo masivo que pueden usarse para entrenar redes neuronales artificiales de gran tamaño (RNA en lo sucesivo).
Recientemente, investigadores de esta compañía han publicado un trabajo de investigación en el que describen cómo han construído un sistema basado en RNA que es capaz de crear imágenes sintéticas de alta resolución que contienen rostros de personas que no existen, pero que podrían pasar perfectamente por imágenes de personas reales para alguien que no supiera de su origen sintético.
Lo divertido del asunto es que han usado imágenes de miles de celebridades para entrenar el sistema y las imágenes sintéticas que produce el sistema vienen a ser mezcla o maquillaje de rostros de varias celebridades, unas veces más evidente y otras menos.
Redes neuronales artificiales para generar imágenes
Como ya hemos visto, las redes neuronales artificiales son un mecanismo muy potente de construir funciones para clasificadores. Básicamente, una RNA funciona como un clasificador.
¿ Cómo podemos generar imágenes con una RNA entonces ?
Una RNA por sí sola no sirve para generar nada, sólo clasifica. Pero podemos usar la RNA como una fuente de conocimiento para construir cosas nuevas que esa misma RNA clasificaría de determinada forma que nos interese.
En el caso que nos ocupa, que tiene que ver con imágenes, podemos construir una RNA que sea capaz de clasificar imágenes para, por ejemplo, distinguir imágenes con rostros personas de imágenes sin rostros de personas. Cada vez que presentemos una imagen a la RNA nos dirá si tiene o no tiene rostros de personas.
Ahora, supongamos que queremos generar imágenes sintéticas que no contengan rostros de personas. La RNA que hemos construido no puede generar nada por sí sola pero podemos usarla como discriminador para saber si estamos generando imágenes adecuadas.
Bajo este nombre tan técnico, se cobija la idea de usar dos RNA que, de alguna forma, compiten entre ellas.
Una primera RNA (discriminador) es entrenada con ejemplos del tipo de imágenes (es el caso que nos ocupa, pero no tienen porqué ser imágenes) que nos interesa generar. Se trata de la RNA que va a decidir si lo que hemos generado es suficientemente bueno o no.
La segunda RNA (generador) es una RNA que toma como entrada patrones más o menos aleatorios (no imágenes, puntos en espacios de muchas dimensiones) y se configura para que proporcione como salida algo que debería ser una imagen (una matriz de números).
El generador no se entrena explícitamente, se le proporcionan entradas aleatorias y envía la salida al discriminador para ver si ha generado algo de utilidad o no. Si, efectivamente, ha generado algo válido, usa esa información para entrenarse modificando sus pesos mediante un esquema de aprendizaje no supervisado.
Es decir, el generador puede entrenarse de forma autónoma, sólo necesita ir procesando sucesivamente entradas generadas aleatoriamente y cada vez que genere algo válido reforzará sus conexiones para favorecer ese comportamiento. Naturalmente, es fácil que sean necesarias millones de iteraciones para que el generador pueda configurarse en una estructura que genere con facilidad imágenes válidas.
¿ Cómo generar imágenes sintéticas de celebridades ?
Lo que han hecho los investigadores de NVIDIA es construir una red GAN con dos RNA:
Discriminador es la RNA que está entrenada a partir de una base de datos del orden de 30.000 images de celebridades y que es capaz de discriminar entre imágenes que tienen los mismos patrones que hay en esa base de datos y las que no
Generador es la RNA que se entrena de forma autónoma para generar, a partir de patrones aleatorios, imágenes que el discriminador da como válidas
De esta forma, la red conjunta es capaz de generar imágenes de alta resolución que contiene rostros perfectamente asimilables a personas reales para alguien que no conozca su origen.
Existen bastantes ejemplos de estas imágenes en el artículo original. Aquí no hemos pedido permiso para publicarlas, quizá lo hagamos más adelante.
Este tipo de sistemas no son una gran novedad, ya existen muchos otros que son capaces de generar imágenes de objetos dados siguiendo la misma operativa. La novedad en el trabajo de los investigadores de NVIDIA es la enorme resolución y gran realismo de sus imágenes, que les ha obligado a desarrollar nuevas técnicas.
Generación progresiva de imágenes
Las imágenes que genera la GAN de NVIDIA tienen una resolución de 1024x1024. Para conseguir esta resolución en el generador es necesario que el discriminador pueda funcionar con ella. Entrenar una RNA con imágenes de 1024x1024 es muy complicado porque hace falta una red gigantesca con muchos millones de parámetros y un conjunto de entrenamiento demasiado grande.
Para solventar ese problema, en NVIDIA han usado un mecanismo muy ingenioso que consiste en empezar con imágenes de bajísima resolución (4x4) y cuando esto les ha funcionado han modificado y reentrenado las redes sobre la marcha para duplicar resolución y poder funcionar con imágenes de 8x8 sin perder los patrones que ya había en las RNA para imágenes de 4x4.
Siguiendo paso a paso, duplicando resolución en cada paso, han llegado hasta imágenes de 1024x1024 sin necesidad de tener que entrenar desde cero con imágenes de 1024x1024, porque la red de 512x512 (el paso anterior) ya sabía mucho sobre imágenes de celebridades ... y así sucesivamente hasta la red de 4x4.
La red de 4x4, que es el primer paso, es muy simple ya que hay pocas posibilidades para que una imagen de 4x4 sea la versión super reducida de una imagen real de un rostro.
Además de simplificar el entrenamiento del discriminador, el generador funciona de forma progresiva y aprende a crear las imágenes partiendo de un patrón incial de 4x4 que va refinando progresivamente, introduciendo detalles cada vez que dobla la resolución, hasta que aquello termina siendo una imagen 1024x1024 de un rostro de una celebridad en alta resolulución.
En el proceso de introducción de detalles, el generador usa detalles que sabe que son válidos (así ha sido entrenado por el discriminador), pero puede mezclar detalles de varias imágenes para hacer una sola y de ahí el que genere imágenes que no se corresponden con nadie en particular, aunque a veces sí que genera imágenes que se pueden considerar maquilladas de una persona concreta y reconocible.
El hecho de usar imágenes de celebridades tiene que ver con la disponibilidad pública de imágenes de alta resolución de estas personas. Podría haber funcionado con cualquier otra cosa.
De hecho, en el artículo original también se describe cómo han usado la red para generar imágenes de objetos bien definidos (bicicletas, casas ...) y cómo la generación progresiva permite un entrenamiento mucho más afinado de la red porque permite ir de arriba hacia abajo, es decir, se empieza con los rasgos generales y se termina con los detalles más pequeños.
La red que han usado tiene del orden de 40 millones de parámetros (20 el discriminador y 20 el generador) y ha costado varios días de entrenamiento en una GPU muy potente de NVIDIA, como no podía ser de otra forma.
La combinación de RNA para que operen en forma de adversarios es una forma muy ingeniosa de construir sistemas que puedan generar versiones sintéticas de los patrones que ha detectado el discriminador. Es una técnica con enormes posibilidades.
NIVIDIA: Progressive Growing of GANs for Improved Quality, Stability, and Variation
Reseña en sitio web de NVIDIA sobre la investigación descrita, hay algunas imágenes de ejemplo y enlaces a gran cantidad de material sobre el desarrollo.
YouTube: Progressive Growing of GANs for Improved Quality, Stability, and Variation
Vídeo muy interesante que muestra tanto imágenes reales de celebridades como imágenes sintéticas y que ilustra el proceso de generación progresiva de imágenes de alta resolución partiendo de patrones muy básicos.
arXiv: Progressive Growing of GANs for Improved Quality, Stability, and Variation
Artículo original con la investigación y con todos los detalles del desarrollo de las redes. También contiene gran cantidad de imágenes que se han generado con la red.

References: resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución 
 resolución