lunes, noviembre 12, 2018

How To FaceSwapping in a video "Chema Alonso" & "Axl Rose" with AI (1 de 2)

Era un martes normal en la oficina para el equipo de Ideas Locas de CDO. En concreto la mañana del 30 de Octubre. Aproximadamente las 14:15 de la tarde. En ese momento llega una llamada de Chema Alonso. Así comienzan muchas de nuestras aventuras. A horas más raras para recibir una llamada de trabajo. Suele pasar cuando al boss se le ocurre una idea:  “Pablo, ¿conoces el tema de las DeepFakes de las que hablé una vez en mi blog?” Así empezó todo. Comienza una nueva aventura en el equipo.

Figura 1: How To FaceSwapping in a video "Chema Alonso" & "Axl Rose" with AI (1 de 2)

Por supuesto, contesté que sí lo conocía. Había salido en el blog, y llevamos tiempo trabajando con OpenAI para entrenar AI con visión artificial para jugar a juegos clásicos, y hemos hecho cosas con las GAN (Generative Adversarial Networks) en seguridad. Pero debíamos estudiarlo si queríamos hacer algo con ello.


Figura 2: OpenAI jugando a BreakOut

Pero Chema Alonso había decidido hacer una charla diferente para el Security Innovation Day 2018 que tenía lugar el día 7 de Noviembre. Había decidido no hablar de Stela FileTrak que era la estrella del acto y dejárselo a los compañeros para hacer algo diferente en el cierre de la jornada, así que me comentó:  "¿Puedes decirme en unas horas si es viable llevarlo al SID 2018?"

Así trabajamos en Ideas Locas, de forma ágil y, en algunos casos, alocada. La respuesta como podéis imaginar fue afirmativa, por lo que entramos en una espiral de locuras entrenando AI para poner la cara de Chema Alonso en un vídeo de su amado Rosendo Mercado, o en uno de Bon Jovi, o uno de Axl Rose usando DeepFakes, hasta que se presentó el ejemplo del vídeo en el Security Innovation Day 2018 de ElevenPaths.

Figura 3: Ejemplo de la cara de la actriz de Star Wars en el cuerpo de una actriz porno

Tuvimos una semana de trabajo, así que no había mucho tiempo para fallar, pero tiempo más que suficiente para hacer algunas pruebas. Este evento es muy importante para ElevenPaths y para Chema Alonso, que sabéis que le gustar marcar los ritmos de innovación con deliveries en las conferencias importantes. Ya sabemos que cuando se acerca un evento importante, siempre nos puede caer un acelerón con algo nuevo.

La verdad es que nos tocó trabajar mucho, ya que partíamos, prácticamente desde cero, por lo que tuvimos que entender bien qué es lo que queríamos y cómo podíamos llegar a ello. Por suerte, en el equipo de Ideas Locas tenemos diferentes tipos de perfiles. Gente especializada en Ciberseguridad, otros en Inteligencia Artificial, especialistas en desarrollo móvil, en hardware y en temas de Big Data. Nos balanceamos y ayudamos en función de nuestras necesidades. Somos pocos, pero bien distribuidos los perfiles.


En este artículo os vamos a contar qué es lo que fuimos haciendo durante la semana con las tecnologías GAN (Generative Adversarila Netwoks) y las FakeNews, aunque no todo el trabajo fue lo que os contamos en este artículo, ya que otra parte del equipo se dedicó a preparar otras cosas que dejamos para otros momentos. Lo primero es entender la tecnología que está detrás de las DeepFakes. Nuestro compañero Enrique Blanco se encargó de liderar la parte más teórica y hacernos entender cuál era el camino idóneo.

La parte más teórica

Entender la tecnología detrás de DeepFakes no es complicado en absoluto. El funcionamiento de este software se basa en el uso de arquitecturas de Deep learning y algoritmos bien conocidos de Machine Learning. Cada nodo (o neurona artificial) de la capa de entrada contiene un valor numérico que codifica la entrada con la que queremos alimentar a la red. Estos valores se transmiten de manera recurrente a cada una de las capas.

Lo interesante es que cada borde amortigua o amplifica los valores que transmite. Cada nodo suma todos los valores que recibe y genera uno nuevo basado en una determinada operación o función de activación. El resultado del cálculo se puede recuperar de la capa de salida. Cuando tomamos como entrada a una red neuronal un conjunto de imágenes, debemos hacer uso de arquitecturas efectivas, como Redes Neuronales Convolucionales (CNNs), que es exactamente a lo que DeepFakes está recurriendo.

Entrenar una red neuronal significa encontrar un conjunto de pesos para todos los bordes, de modo que la capa de salida produzca el resultado deseado. Una de las técnicas más utilizadas para lograr esto se llama backpropagation, y funciona reajustando los pesos cada vez que la red comete un error.


Figura 5: Conferencia sobre GANs por David Del Val donde habla de FaceSwapping

La idea básica detrás de la detección de rostros y la generación de imágenes es que cada capa representará progresivamente características complejas básicas, aumentando la abstracción sobre determinadas características del input.

Aunque, en realidad, lo que cada capa es capaz de abstraer no resulta tan sencillo de sintetizar, en el caso de una cara, por ejemplo, la primera capa podría detectar bordes, la segunda sería capaz de detectar ojos u otros detalles de los rostros, etc… Otro recurso que utiliza DeepFakes son los Autoencoders, que se erigen como pieza clave en la tecnología de face swapping. Su teoría y funcionamiento se explican brevemente a continuación.

Autoencoders

Las redes neuronales pueden adquirir infinitas configuraciones en materia de forma y tamaños. Y es exactamente esa forma y el tamaño lo que determina el rendimiento de la arquitectura para resolver un determinado problema. Un autoencoder es un tipo especial de red neuronal cuyo objetivo es hacer coincidir la entrada que se le proporcionó con la mayor semejanza posible.

A primera vista, no parecen resolver ningún problema real, pero el valor de este tipo de arquitecturas reside en las características que se pueden extraer de la abstracción de las entradas que realizan en las capas profundas de su arquitectura. El autoencoder debe comprimir la información para reconstruirla a posteriori.

Figura 6: Descripción de autoencoder

Tras un entrenamiento correcto, el autoencoder aprenderá a representar los valores de entrada en una forma diferente, pero mucho más compacta. El codificador automático se puede desacoplar en dos redes separadas: un codificador y un decodificador, ambos compartiendo la capa en el medio, que a menudo es referida como vector base y representa la imagen de entrada en el llamado espacio latente. Los codificadores automáticos tienen pérdidas naturales, lo que significa que no podrán reconstruir la imagen de entrada a la perfección.

Entrenamiento DeepFakes

Supongamos que tenemos un conjunto de rostros como training dataset que pueden ser usadas como entrada a nuestra arquitectura. El diagrama siguiente muestra una imagen de Chema Alonso reconstruida por DeepFakes que se alimenta a un autoencoder. Su resultado, como se mencionaba anteriormente, es una representación dimensional inferior de esa misma cara  a la que llamaremos "Vector base" o "Cara latente".

Figura 7: Rostro original a rostro reconstruido

Dependiendo de la arquitectura de la red, la cara latente puede no parecer una cara en absoluto. Cuando se pasa a través del Ddecoder, la cara latente se reconstruye. Para monitorizar el rendimiento de una red de este tipo, se mide la bondad de la reconstrucción de la imagen original a partir de la descompresión de la representación obtenida en el espacio latente.

En el caso de DeepFakes, con la finalidad de mezclar caras, entrenar dos autoencoders de forma separada no tendría ningún sentido, pues la representación de los espacios latentes aprendidos por cada uno sería totalmente diferente y no podrían ser usadas al mismo tiempo.  La tecnología de Face Swapping es posible si se codifican dos clases diferentes de inputs en una misma representación latente. Esto se ha conseguido construyendo dos redes neuronales que comparten el mismo encoder pero usan dos decoders diferentes.

Figura 8: Mezcla de dos caras con autoencoders

Durante el entrenamiento, las dos redes de arriba se entrenan por separado. El Decoder A solo se entrena con caras de A (Axl Rose); el Decoder B solo se entrena con caras de B (Chema Alonso). Sin embargo, todas las caras latentes son producidas por el mismo Encoder. Esto significa que el Encoder tiene que identificar características comunes en ambas caras.

Debido a que todas las caras comparten una estructura similar, no resulta imposible que el Encoder adquiera la capacidad de representar caras, ni tampoco resulta descabellado inferir que en la máxima compresión de la información de nuestra red se consigue un vector base común a ambas personas.

Figura 9: Por cada cara de Chema Alonso generada a partir de la cara de Axl Rose, el Discriminador irá diciendo el grado de bondad de la cara generada, es decir, cuánto se parece esa cara a "Chema Alonso". Cuando se supere el umbral marcado, se considerará que la cara ha sido transferida en ese fotograma.

Una vez nuestro modelo ha sido entrenado, la red tendrá la capacidad de generalizar con bastante buen acierto las características de un rostro humano, por lo que podrá decodificar satisfactoriamente distintos gestos y orientaciones de los elementos que componen una cara. Y lo más importante: nuestro modelo tendrá la capacidad de generar nuevos rostros (tanto del sujeto A dado un rostro de B y viceversa) que no existen en nuestro training y/o test dataset con el que se inicializa el Discriminador.

- How To FaceSwapping in a video "Chema Alonso" & "Axl Rose" with AI (1 de 2)
- How To FaceSwapping in a video "Chema Alonso" & "Axl Rose" with AI (2 de 2)

Autores: Pablo González Pérez (@pablogonzalezpe), escritor de los libros "Metasploit para Pentesters", "Hacking con Metasploit: Advance Pentesting" "Hacking Windows", "Ethical Hacking", "Got Root" y “Pentesting con Powershell”, Microsoft MVP en Seguridad y Security Researcher en el equipo de "Ideas Locas" de la unidad CDO de Telefónica y Enrique Blanco (@eblanco_h) es Investigador en el departamento de Ideas Locas CDO de Telefónica

No hay comentarios:

Publicar un comentario