Muy buenas! ¿como andan tanto tiempo? Aca estamos de vuelta para un nuevo episodio.Semana numero 35 de este año 2020 Seguimos en cuarentena pero bueno, acá estamos. Por suerte parece que ahora se va a flexibilizar un poco. Que se yo, algo es algo.
Hoy quiero hablar de un tema que tenía ganas de traer hace mucho tiempo ya, que son las redes generativas adversarias, las GANs para los amigos.
Asi que si se acuerdan, hace como 1 año y medio atrás había venido al podcast el crack de Santi Iglesias a contarnos sobre mAIro, su aplicación para generar obras de arte usando este tipo de redes y bueno me parecía interesante hacer un episodio específico analizandolas un poco.
Así que empecemos!
Para arrancar me gustaría contar: para qué sirven este tipo de redes. Y como dice parte de su nombre son redes generativas o sea que sirven para generar información: Ahora, ¿que tipo de información? Bueno, pueden ser imágenes, puede ser texto, puede ser audio.
Pero me parece mejor contar algunos ejemplos, los más famosos así es mas entretenido…no?
Ejemplos de redes generativas adversarias
Bueno, unas de las implementaciones de GANs más famosas fue la que hizo NVIDIA con This Person does not exist que es un sitio web donde cada vez que entras te genera una cara nueva de una celebridad que no existe. O sea, cada vez que refrescas la página se inventa una cara nueva de alguien que no existe.
Imagino que ya la conocen pero por las dudas voy a dejar en las notas todos los links de los ejemplos y artículos que voy a mencionar así pueden acceder fácil.
El asunto es que esto de generar cosas que no existen tuvo como su “mini boom” y terminó inspirando muchas implementaciones como por ejemplo these cats that not exist para generar fotos de gatos que no existen y así un montón de sitios que crean cosas que no existen, de hecho hay una pagina que se llama This X does not exit donde está publicada la recopilación de todos, así que les dejo el link tambien por si quieren ir a mirar.
Y bueno, estos son algunos ejemplos de creación de imágenes pero hay muchísimos más: hay para crear personajes de animé, o cosas más complejas como darle una imagen de una persona en una pose como entrada y pedirle que genere una imagen de esa misma persona en otra pose.
Después también está todo lo que es transferencia de estilos, como darle una imagen como entrada y generar una salida con un estilo diferente, por ejemplo darle una foto de entrada y que le aplique el estilo Van Gogh.
También hay usos interesantes como por ejemplo si le das una imagen que tiene un recorte o le falta una parte, que genere lo que falta.
Después también se puede usar para crear productos, ¿si? por ejemplo hay una implementación que genera carteras, zapatos a partir de un boceto hecho a mano.
De hecho este tipo de modelos nosotros en el laboratorio de Shifta los estamos experimentando bastante.
Pero bueno como se habrán dado cuenta, las GANs se pueden usar para generar algo desde cero, o también pueden tomar entradas y generar una salida. Entonces algunos usos comunes están asociados a darles como entrada un boceto hecho a mano y generar algo a partir de ese boceto.
La verdad es que como siempre, hay que ponerle imaginación y ahí es dónde surge la magia.
Generación de audio con GANs
Bueno después, hay quienes también las aplicaron para generación de texto. Como por ejemplo, generar letras de canciones, generar curriculums.
Y también para generar audio, como por ejemplo generar ronroneo de gatos, o directamente generar música, una canción completa.
Aunque la verdad en lo que se refiere a generación de texto y de audio no son las arquitecturas más usadas actualmente.
Bien, con todo esto ya sabemos para qué sirven. Así que avancemos!
Historia y funcionamiento de las GANs
Las redes generativas adversarias fueron propuestas por Ian Goodfellow en un paper publicado en el año 2014 que se llamó redes generativas adversarias.
Lo que propone es un sistema de dos redes neuronales que compitan entre sí. Una es la red generadora y la otra es la red discriminadora. Y son puestas a competir una contra la otra, por eso se dice que son adversarias o antagónicas.
La idea es que la red discriminadora vaya aprendiendo los patrones que encuentra en los datos de entrenamiento y en base a eso pueda decir si un ejemplo es real o es falso.
Básicamente sería un sistema de clasificación donde se tiene que clasificar entre dos clases, verdadero y falso. Y los falsos serían los ejemplos que genera la red generadora.
Por otra parte, el trabajo de la red generadora es crear ejemplos que intenten hacerle creer a la red discriminadora que son verdaderos.
Para esto, a la red generadora le tenemos que dar unos datos de entrada, como para que procese a partir de algo, no? Bueno en el caso más sencillo se le da como entrada una matriz de valores aleatorios o sea un ruido.
Esto se hace así para que cada vez genere un ejemplo diferente. Supongamos que estamos entrenando nuestra GAN para que genere fotos de gatitos, la idea es darle valores aleatorios cada vez, para que genere una foto de un gatito diferente en cada procesamiento.
Pero bueno, la cosa es que ambas redes van a ir mejorando con el entrenamiento, o sea, vamos a tener dos funciones de pérdida, una para cada red, y lo que tiene que pasar durante el entrenamiento es que ambas se vayan optimizando para hacer su trabajo de la mejor manera posible.
Al principio lo que genera la red generadora se va a parecer a lo que veíamos en las teles viejas, los de mi época se van a acordar cuando no había señal y se veía todo como lluvia. Y a partir de ahí debería ir mejorando.
Pero lo interesante y lo inteligente de esta arquitectura es que la red generadora se va a mejorar tomando en cuenta los motivos por los cuales la red discriminadora se dió cuenta que el ejemplo era falso.
Entonces usando ese truco la red generadora va a decir, ah ok, tengo que mejorar en tal cosa, en la próxima lo voy a intentar hacer mejor. Y así sucesivamente, hasta que vaya generando ejemplos cada vez mejores y a la red discriminadora le empiece a costar distinguir cual es real y cual es falso.
Y bueno asi es básicamente como trabajan las GANs. O al menos como estaban planteadas en el año 2014 por el paper original.
Algo interesante a tener en cuenta es que al principio las GANs solo podían crear imágenes en resoluciones relativamente bajas, pero al día de hoy esto ya evolucionó y se pueden crear imágenes con una super resolución también.
Pero ojo, que este tipo de resultados se puedan lograr no quiere decir para nada que se vaya a conseguir de manera fácil!
Este tipo de redes son bastante complejas y también inestables, y por sobre todas las cosas, ¡necesitan bastantes recursos!
Como nos contó Santi Iglesias en la entrevista, poner en memoria imágenes de alta resolución requiere bastantes recursos y los entrenamientos que él nos comentaba eran periodos de uno o más meses.
Obviamente que esto depende de lo que estemos haciendo y los recursos que tengamos. Pero bueno, no quería dejar de aclararlo.
Saliendo un poco de estas cuestiones técnicas y volviendo a las utilidades, no hay dudas de que una de las más famosas utilidades que vimos en los últimos tiempos son los Deep Fakes, que son estas fotos o videos generados con GANs donde se suele simular a un político o un famoso haciendo o diciendo cualquier cosa.
O esta aplicación FaceApp seguro que se acuerdan, que se había viralizado y que te hacia mas viejo o más joven. Ese también es un ejemplo de GANs.
Pero también quería hablar de cómo ese mismo uso se puede tomar para hacer algo positivo, no? No me quiero quedar con que solo se puede usar para hacer algo gracioso o tal vez algo negativo dependiendo el caso.
Usos positivos de las GANs
Uno de los posibles usos positivos por ejemplo es poder traducir un video a otro idioma haciendo coincidir los movimientos de la boca con el audio traducido.
Y este uso la verdad que esta muy bueno. Supongo que vamos a coincidir en que es mucho más amigable ver un video donde el audio y los movimientos de la boca coincidan.
Y bueno y esto se puede llevar tanto a películas, como a publicidades como también a la educación online. Yo creo que estos son muy buenos usos y muy útiles, no solo por hacer el video mas amigable sino que además para personas con problemas auditivos que leen los labios haría estos videos o cursos más accesibles.
Pero bueno más allá de esto de los labios, en todo lo que es la industria del entretenimiento, cine, videojuegos, se pueden generar personajes completos, ambientes, paisajes, escenarios. Creo que la industria del entretenimiento es una de las que más puede explotar este tipo de modelos a futuro.
Después otro posible uso, es el de los probadores virtuales, donde por ejemplo en una plataforma para comprar ropa poder poner una foto tuya y tomando esa foto como entrada generar nuevas imágenes usando otras prendas que quieras probarte.
Este uso para mi también es muy bueno, sobre todo porque no me gusta ir a comprar ropa y tener que probarme. ¡Esto es un golazo! Y además que al comprar online tenes que estar usando la imaginación para pensar como te quedaría o como combina con otras prendas.
Esto mismo también aplica al maquillaje o las tinturas para el pelo, de hecho estos probadores ya existen hace varios años. De esto tambien les dejo algunos links por si quieren probar:
– Sephora
Hasta aquí el programa de hoy, gracias a todos por estar ahí. Y si quieres que enterarse cada vez que salga un nuevo episodio de este podcast suscribiste en Itunes, iVoox, Google Podcast o Spotify. Les agradezco enormemente las reseñas de 5 estrellas en iTunes y los me gusta y comentarios en iVoox que nos ayudan a que nos conozca más gente. Y si te gustó compartirlo en redes sociales.
Y ahora si, nos escuchamos en el próximo episodio donde seguiremos hablando de este hermoso mundo de la inteligencia artificial.