logo

Dot CSV

Inteligencia Artificial, Tecnología, Ciencia y Futuro! Bienvenidos a la 4ª Revolución Industrial 🚀 Inteligencia Artificial, Tecnología, Ciencia y Futuro! Bienvenidos a la 4ª Revolución Industrial 🚀

Transcribed podcasts: 213
Time transcribed: 5d 22h 50m 3s

This graph shows how many times the word ______ has been mentioned throughout the history of the program.

Este vídeo está patrocinado por la Universitat Politécnica de València.
¿Cómo funciona FaceApp? Ya sabéis, esta aplicación que en muchas ocasiones ha vuelto viral por
conseguir coger una imagen de una persona y poder aplicar asombrosas transformaciones donde poder
verte más mayor, o bueno, incluso más mayor si vuelves a pasar la imagen por la aplicación. Y no
solo eso, cada año esta aplicación ha seguido evolucionando para permitirte también cambiarte
de género, hacerte ganar unos kilos de más, cambiarte el peinado o incluso en aplicaciones
similares convertirte en un dibujo animado. Unos resultados que son impresionantes y que
seguramente muchos de vosotros habréis probado, pero no muchos sabréis cómo funciona. Porque a
ver, esto no va de superponer elementos encima de tu cara y ya está, no es que te estén poniendo
un bigote postizo, una barba postiza, no. Aquí se ve claramente que esta aplicación aprende
exactamente cuáles son los patrones que conforman a tu cara y sabe cómo manipularlos para sumar en
ellos más edad. Fíjate, por ejemplo, cómo esta región del ojo aquí se sigue distorsionando en
las imágenes posteriores. ¿Lo ves? ¿Quieres saber cómo funciona toda esta tecnología? Pues
ponte cómodo porque hoy te voy a introducir al fascinante mundo de cómo matemáticamente hemos
descubierto la fórmula del envejecimiento. Chúpate, Sadalas, me ha adelantado. Comenzamos.
Para poder entender bien el desarrollo que ha tenido una aplicación como FaceApp a lo largo
de los últimos años, es una buena idea acudir a la literatura del campo del deep learning que
se encarga de justamente esta tarea. En concreto, vamos a empezar hablando de las famosas redes
generativas adversarias. Para el que desconozca del tema, simplemente quedaros con el siguiente
concepto. Una red generativa adversaria, o GAN en inglés, es una combinación de dos redes neuronales
en las que cada una tiene que aprender a hacer bien su tarea para fastidiar a la otra. En concreto,
tenemos una red neuronal generadora, cuya tarea será aprender a generar contenido, evidentemente,
y por el otro lado tendremos una red discriminadora, cuyo trabajo será aprender a detectar si la otra
red le está colando contenido generado sintéticamente, contenido falso, que parezca tan real como los
datos de entrenamiento. Esto produce una batalla interna donde cada red neuronal tiene una tarea
antagónica con la otra, y por tanto cada una se va a ir especializando mejor en su tarea. La red
discriminadora cada vez sabrá mejor cómo detectar el contenido falso, pero es que al mismo tiempo la
red generadora irá creando cada vez contenido más y más realista. Y esto ocurrirá hasta el punto en
el que sus creaciones sean casi indiferenciables de nuestro dato de entrenamientos originales,
ya sean estos cuadros, paisajes o caras. ¿Lo veis? Las redes generativas adversarias son desde
2014 capaces de generarnos imágenes realistas de cualquier dato que les suministremos. Pero
todo esto ya muchos de vosotros lo sabía y si es que soy fan del canal sabréis que esto lo
hemos visto en numerosas ocasiones, de redes generativas adversarias hemos hablado en muchísimos
vídeos y es por eso que considero que hoy podemos ir un poquito más allá. Vamos a profundizar.
Ya sabéis que esta red de aquí se va a encargar de generar como resultado una imagen realista,
pero ¿cuál es su input? Es decir, las redes neuronales normalmente requieren de un input para
generar un output, pero ¿y en este caso? A partir de que generan esta imagen y no otra. Pues si como
respuesta te dijera que como input les suministramos vectores distribuidos aleatoriamente,
posiblemente tu cara se te quedaría como algo así, que fue una de las primeras caras generadas con
estas guns. Pero confía en mis dotes para enseñarte mis dotes. Y créeme que esto tiene sentido,
lo vas a entender y además te va a molar mucho. Mira, imagínate que yo te pido el siguiente
ejercicio. Te voy a dar unas cuantas fotografías de caras y tú vas a tener que ordenarla bajo el
criterio que quieras sobre esta mesa. Venga, dale. En este caso lo normal sería escoger algún criterio
que produzca modificaciones importantes entre las distintas imágenes. En este caso podrías ordenarlas
por géneros, si más masculinas o femeninas o por color de piel, lo que sea. En cualquier caso tu
tarea será ordenarlo bajo los dos criterios que hayas seleccionado en esta mesa. ¿Por qué dos? Bueno,
pues porque te lo he pedido yo. Tampoco nos pongamos aquí a cuestionarnos unos a otros,
pero bueno, te he dicho en una mesa y una mesa al final no deja de ser un plano bidimensional,
con lo cual solamente vas a poder tener dos ejes donde poder ordenar tus imágenes y por
tanto tiene sentido que sólo puedas coger dos atributos. Si por ejemplo yo te hubiera pedido
que las ordenaras en un volumen, en un cubo, entonces si hubieras podido elegir tres componentes y así
hubieras tenido más espacio para conseguir una mejor ordenación. ¿Lo ves? Vale, pero sigamos
con las dos dimensiones. Si has entendido este ejercicio y has conseguido resolverlo, ya te puedo
decir que es a esta misma tarea a la que una red neuronal típica se enfrenta cuando está aprendiendo.
De verdad, y es que comúnmente llamamos ordenador a esto cuando en realidad deberíamos de llamárselo
a esto. Y es que si hay una tarea que una red neuronal sabe hacer muy pero que muy bien, es aprender
a ordenar los datos que le suministramos. Por ejemplo, si a una red neuronal la entrenamos con
muchas imágenes de números como estos, internamente la red podría aprender a ordenar estas imágenes en
un plano de la siguiente manera, donde imágenes parecidas estarán cercanas unas con otras. ¿Ves
por ejemplo como el 3 y el 8 están cerca dentro de este espacio plano? Igual sucedería si la
entrenamos con imágenes de caras o cualquier otro conjunto de imágenes. Aprendiendo a hacer esto
automáticamente a partir de analizar la similitud entre imágenes. Ahora quiero que recordéis los
vectores de los que estábamos hablando antes. Matemáticamente un vector no deja de ser un
listado de números que lo que vienen a representar son las diferentes coordenadas de dicho vector en
un espacio geométrico. Una coordenada en una recta o dos coordenadas en un plano o tres coordenadas
en un volumen. Pues ahora fíjate bien, en el caso en el que estamos viendo, fíjate como cada imagen
una vez están ordenadas dentro de este espacio, ahora las podemos identificar a cada una con un
vector de dos coordenadas que nos indique cuál es su posición. Esto mola porque no sólo ahora
nuestras imágenes de entrenamiento van a estar bien identificadas con vectores, sino porque también
podríamos incluso plantearnos cómo tendría que ser una imagen dentro de este espacio para un vector
nuevo en un punto diferente. No sería descabellado pensar que este vector de aquí por ejemplo estuviera
asociado a esta imagen de aquí, ¿verdad? Con esto lo que estamos ganando es control a la hora de
generar caras que van más allá de nuestro dataset de entrenamiento. A este espacio ordenado nuestra
mesa o el cubo que decíamos antes o incluso un espacio multidimensional mayor, en el gremio de
la IA es lo que se conoce como un espacio latente, un espacio matemático construido por la red
neuronal para ordenar los datos. Y en este punto sólo espero que os estéis preguntando qué tiene
que ver todo esto con lo que hace FaceApp. Pues mira, ya en este punto entendéis que lo que le
suministramos a esta red de generativas adversarias como input es un vector, un vector que va a servir
como identificador dentro de este espacio latente de aquel contenido que queremos generar. Si por
ejemplo a una red ya entrenada le damos el mismo vector dos veces, lo que va a generar será dos
veces el mismo resultado. Y si por ejemplo le damos un vector completamente diferente, lo que
generará será una imagen de una cara totalmente diferente. Y si este vector lo modificamos sólo
un poquito, esto va a generar en la imagen final un cambio muy pequeñito, ¿lo veis? Y más
impresionante aún, mira, si por ejemplo contamos con un vector asociado con una cara y otro vector
asociado con otra cara, podemos coger estos dos vectores y calcular su media, pues con papel y
boli matemáticamente, para observar que el resultado será la mezcla de ambas caras. Wow. De
hecho esto lo podemos mezclar con diferentes intensidades creando así una animación de la
interpolación de movernos de una cara a otra. E incluso podemos movernos con toda libertad para
generar animaciones como esta. Mola, ¿eh? Bueno, pues esperad un poco porque nuestro viaje por
los espacios latentes sólo acaba de empezar. Hasta ahora solamente hemos hablado de redes
generativas adversarias, de GANs, de una forma muy general, pero tienes que saber que a lo largo de
los últimos años pues han surgido diferentes modificaciones de este tipo de redes que introducen
cambios y mejoras en sus arquitecturas. Modelos como CycleGan, StackGan, BigGan, ProgressiveGan,
Gandalf. Bueno, una de estas me la acabo de inventar. Si realmente vamos a hablar de trabajos que
hayan tenido un impacto relevante dentro del ámbito de los generativos, vamos a tener que
hacer una parada importantísima dentro del fascinante mundo de las StyleGans. Porque StyleGan
es otro modelo más de red generativa adversaria, pero que por su potencia y por su capacidad de
generar contenido realista de alta resolución se ha ganado un puesto importante en los corazones
de cualquier entusiasta del campo del deep learning. ¿Por qué? Mira, ¿te acuerdas como
antes hemos hablado de que típicamente una GAN toma como input un vector para generar su
imagen correspondiente? Pues en este caso la arquitectura de un modelo StyleGan lo que nos
permite es introducir este vector como input a diferentes niveles dentro de la red, donde ahora
los cambios en el vector podrán tener efecto a distintos niveles de los patrones que generan
a la cara. Por ejemplo, ajustando aquí podríamos variar patrones de alto nivel como podrían ser
toda la apariencia, la forma o incluso la pose de la cara, para después cambiar aquí patrones más
sutiles como sus rasgos y aspectos, pero ya sin por ejemplo variar cuál sería su pose. A finalmente
incluso poder controlar patrones más sutiles como podría ser el color del pelo, la piel o el fondo
de un mismo rostro. De esto surge tanto interés por StyleGan. Bueno, de esto y porque también está
demostrado que esta red durante su entrenamiento construye un espacio latente mucho más ordenado,
mejor estructurado, más explorable. ¿Quieres verlo? Pues te digo que tenemos un problema y
es que en este caso el tamaño de los vectores que utiliza StyleGan para codificar a sus imágenes es
de 512 componentes, es decir, cada imagen que vamos a generar realmente será un puntito que
solamente encontraremos cuando coloquemos correctamente cada una de las 512 coordenadas
de este vector. Estamos hablando de que en este caso todas las imágenes de cara generadas van
a residir en un espacio multidimensional de 512 dimensiones. Vale, voy a parar un momentito aquí
la reproducción del vídeo, disculpa si te he asustado, pero es que creo que no estamos siendo
conscientes de lo inabarcable que es todo este espacio, porque estamos aquí todos viendo la
imagen de Interestelar que en realidad son cuatro dimensiones espaciales y no estamos pensando
realmente con nuestros cerebros de primates, que estamos hablando de 512 dimensiones. Un
espacio multidimensional que es inabarcable para nuestras cabezas. De hecho voy a dar un dato
con el que vais a flipar. Imaginad que ahora os tomáis una foto, una foto de vuestra cara,
puede salir pues en la ropa, el fondo, da igual, pero una foto. Y si te dijera que si ahora nos
pusiéramos a explorar este espacio latente y encontráramos la combinación de 512 números
correcta podríamos encontrar justo la imagen que acabas de sacar. No sólo es que esta red
tenga capacidad de poder generar la imagen que acaba de fotografiar con tu móvil, sino que si
quieres pues también podrías encontrar esta misma versión de la foto donde a ti se te viera con 20
años más, o 20 años menos, o en una versión tuya del sexo opuesto pero manteniendo los mismos
rasgos. ¿Te das cuenta hacia dónde estamos yendo? Todas estas versiones de tu cara están ahí dentro,
el problema es saber en qué dirección tenemos que movernos para poder encontrarla. ¿Cómo encontrar
la dirección para poco a poco ver nuestra cara envejecida? O dicho de otra manera ¿cuáles de
estas 512 componentes tenemos que variar para ver que en nuestra cara aparecen canas y arrugas? Pues
con todo lo que has entendido hasta ahora ya verás que no te va a costar entender la solución y es
que tal y como describen en este paper de aquí la receta sería la siguiente. Primer paso, ponte a
generar vectores aleatorios como loco y utiliza StyleGam para generar las caras equivalentes a
estos vectores. Segundo paso, vamos a utilizar ahora otra red neuronal que ha sido entrenada para
predecir cuál es el rango de edad de una persona, su género y demás atributos a partir de observar
únicamente su imagen. Con esta red ya podemos estimar por ejemplo cuál sería la edad de cada
una de las caras que hemos generado antes con StyleGam, con lo cual ya contamos con unos
cuantos vectores de los que podemos saber si pertenecen a personas jóvenes o mayores,
chicos o chicas. ¿Lo ves? Ahora con esto el siguiente paso será tomar aquellos vectores
que pertenezcan a personas de un rango de edad determinado y calcular la media de todos estos
vectores obteniendo así el vector medio de los jóvenes y lo mismo haremos con las personas de
mayor edad, obteniendo también así el vector medio de personas mayores. Así con esto ya
habremos encontrado dentro del espacio latente las coordenadas asociadas con las personas jóvenes
y las personas mayores. Solo nos quedará calcular por tanto cuál es la dirección que conecta a ambos
puntos para así por fin trazar el camino, la dirección que nos lleva desde un rostro joven
a un rostro anciano. ¿Estáis viendo lo que estamos haciendo? ¿Estáis pensando la movida
que estamos construyendo aquí? Estamos hablando de que dentro de una red neuronal hemos encontrado
la dirección que nos mueve a una imagen hacia una versión envejecida de ella o más rejuvenecida si
nos movemos en el sentido contrario. O si por ejemplo encontramos la dirección de género pues
que nos podría mover entre más masculino o femenino. De realidad queda una cosa muy importante
por explicar. Sí, me he quedado sin batería en la cámara, pero bueno, ya vamos a acabar. La cosa
es que os he explicado cómo podemos encontrar estas direcciones de la felicidad, del género,
de la edad dentro de este espacio latente, pero en ningún momento os he explicado cómo podemos
encontrar vuestro punto, vuestra foto, cómo podemos sacar una foto con el móvil y encontrar
ese punto en el espacio latente. Esto lamentablemente es un proceso que requiere mucha computación. Es
similar al entrenamiento de las redes neuronales. Aunque no vayamos a entrar a explicar por qué,
podéis intentar intuir cómo esto de ir ajustando los numeritos de un vector para que la imagen
resultado se parezca a una imagen que yo tengo, se asemeja bastante a lo que sería el entrenamiento
de una red neuronal. Pero bueno, vamos a dejar eso aparte y dejadme deciros cuál es el plot twist
final de este vídeo. Y es que el girito es que en realidad todo esto de StyleGam no se utiliza
realmente para envejecer tus fotos. ¡Pero Carlos, esto es tanto rollo para esto! Sí, a ver, sí se
usa StyleGam, pero no se usa para modificar tu foto. Lo que se suele hacer es coger StyleGam para,
aplicando la transformación de la que hemos estado hablando hoy, generar un dataset sintético de
caras jóvenes y caras mayores para así poder tener un dataset que de otra manera sería imposible
conseguir. A ver, piensa, ¿cómo podrías conseguir un dataset de personas de su cara joven con la
misma pose en el mismo fondo y de personas mayores? Es complicadísimo. De esta manera, podemos
asegurarnos que podemos generar de manera sintética un dataset que sí podremos utilizar para entrenar
ahora sí a otra red neuronal tipo Pix2PixHD que puede aprender a hacer estas transformaciones sobre
cualquier imagen que le demos. Podría ser la imagen que tú mismo acabas de sacar con tu móvil.
Con esto ya sabéis cómo funciona una aplicación como FaceApp. Detrás de cada filtro, posiblemente
lo que hay es un modelo que ha aprendido a través del conocimiento que hemos extraído de otro modelo
como es StyleGam. Un proceso que se conoce como destilar el modelo. Mola. Si llegados aquí y este
vídeo te ha gustado y te ha interesado muchísimo, te recomiendo que eches un vistazo al vídeo sobre
Clip, porque vas a entender el potencial que tiene un modelo como es este, como es Clip,
cuando lo comparamos con lo que en este vídeo ha sido este modelo que aprendía a detectar pues
la edad y el género de una persona. Allí veréis cómo podemos aplicar transformaciones sobre caras
de manera mucho más potente en lo que será el futuro de las herramientas de diseño gráfico.
Os recomiendo que veáis ese vídeo y si no pues podéis buscar algún vídeo de estos que están
por aquí que recomienda la red neuronal de YouTube para tu perfil y que por tanto pues tiene que estar
genial para ti porque la red neuronal nunca se equivoca, ¿verdad? Y nada más chicos,
nos vemos con más Inteligencia Artificial en el próximo vídeo aquí en DotsCV. Adiós.