GANs - En el Mundo Visual
Tech Community Day
Hace unas semanas me pidieron si podría dar una charla acerca de un tema de Inteligencia Artificial en el Tech Community Day. Es la primera vez que he dado una charla de este tipo, tanto en línea como a un público en general, por lo que claramente estaba nervioso. Sin embargo, estaba aún más emocionado de poder compartir un poco de lo que he estado realizando durante mi doctorado en el CVC desde finales del año pasado, por lo que acepté darla. Asimismo, estaba honrado de que los organizadores me hayan considerado para dar una charla en este evento, por lo que les estaré eternamente agradecido.
El tema que he escogido fue de GANs y decidí realizarla en español, ya que la información que se puede conseguir del tema en inglés abunda, mas no en español y no se diga en otros idiomas. El título de la charla fue GANs - En el Mundo Visual y pueden encontrar la grabación de la misma en YouTube.
Si bien condensar tanta información en una charla de 1 hora es difícil, tuve que dejar fuera ciertos puntos y aplicaciones interesantes de las GANs. Al mismo tiempo, esto me permitió ver lo que el público le interesa saber más (para la próxima vez):
- ¿Qué aplicaciones concretas se ha realizado de las GANs en medicina, arquitectura o diseño? ¿Qué tal en otras áreas que no se han explorado mucho?
- ¿Cómo podemos saber que se tiene que detener el entrenamiento de una GAN?
- Por aparte, esto lleva a explicar los problemas típicos que se enfrenta uno al entrenar una GAN (colapso, colapso total o inclusive no converger, por ejemplo).
- ¿Puede una GAN llegar a sobreajustar (overfit) los datos de un dataset? ¿Cuál de las dos redes hace esto?
- ¿Debemos de hacer públicos todos los modelos generativos, incluidos los hechos con una GAN?
Sobre el último punto, mi respuesta al momento sería No, que es justamente lo que he querido comunicar con los modelos que he entrenado para la generación de huipiles: compartir dichos modelos puede llevar fácilmente al abuso de la recreación o apropiación de los diseños y patrones de los huipiles, por lo que no los he hecho públicos, aunque me lo han pedido en varias ocasiones. Sin embargo, si compartir los modelos reinicia un interés en el tema de los tejidos (más allá de la apropiación de los mismos), quizá valga la pena compartirlos. Claramente, siempre y cuando se tengan algunas medidas precautivas para no afectar a las comunidades de donde son originarios los tejidos, pero aún no lo tengo del todo claro.
En concreto, las diapositivas que he utilizado se encuentran a continuación (editadas para no incluir los archivos originales de algunas piezas de arte):
Transferencia de Estilo
Respecto al ultimo proyecto mencionado en la presentación y diapositivas donde he usando StyleGAN2, Threads, podemos ver el resultado de mezclar a los vectores latentes generados con un listado de semillas específicas. Más concretamente, las semillas que han generado las imágenes de la primera columna son las semillas fuente, mientras que las semillas de que han generado la primera fila son las semillas destino.
En el código de StyleGAN2 que uso, especificamos a estos como: --row-seeds=17,32,78,300
y --col-seeds=23,50,200,512
, respectivamente. Asimismo, el estilo que más me ha gustado traducir de una imagen a otra es el estilo fino, es decir, solamente copiamos los detalles finos (colores) de las semillas destino a las semillas fuente, ya que esto da combinaciones de huipiles conocidos que no hayamos visto antes. En el código, hacemos esto mediante --col-styles=8-15
(i.e., de $64^2$ a $512^2$).
En el código de StyleGAN2 que uso, especificamos a estos como: --row-seeds=17,32,78,300
y --col-seeds=23,50,200,512
, respectivamente. Asimismo, el estilo que más me ha gustado traducir de una imagen a otra es el estilo fino, es decir, solamente copiamos los detalles finos (colores) de las semillas destino a las semillas fuente, ya que esto da combinaciones de huipiles conocidos que no hayamos visto antes. En el código, hacemos esto mediante --col-styles=8-15
(i.e., de $64^2$ a $512^2$).
El comando utilizado fue el siguiente:
python run_generator.py \
style-mixing-example \
--network=/path/to/network.pkl \
--row-seeds=17,32,78,300 \
--col-seeds=23,50,200,512 \
--col-styles=8-15 \
--truncation-psi=1.0
Obtenemos entonces al siguiente grid:
Si queremos apreciar los detalles, podemos entonces comparar a dos imágenes mediante un paquete de comparación de imágenes llamado BeerSlider. Por ejemplo, para ver el resultado de mezclar las semillas 17
con 23
, en el primer slider podemos ver a la derecha, la imagen generada con la semilla 17
y a la izquierda el resultado de la mezcla con la semilla 23
.
He seleccionado tres que me han gustado bastante, pero por supuesto, existen muchos mas que aún no he explorado. Espero que en el próximo blog post (cuando suceda) pueda explorar más a fondo los modelos que he usado para este proyecto: ProGAN1, StyleGAN2 y el ya mencionado StyleGAN23.
Hasta la próxima vez que termine el último blog post.
-
T. Karras, T. Aila, S. Laine & J. Lehtinen, Progressive Growing of GANs for Improved Quality, Stability, and Variation. In ICLR, 2018. ↩
-
T. Karras, S. Laine & T. Aila, A Style-Based Generator Architecture for Generative Adversarial Networks. In CVPR, 2019. ↩
-
T. Karras, S. Laine, M. Aittala, J. Hellsten, J. Lehtinen & T. Aila, Analyzing and Improving the Image Quality of StyleGAN. In CoRR, 2020. ↩