Cuando me propusieron planteé escribir un artículo sobre deepfakes, tenía una idea aproximada de la algoritmia que hay detrás, la conversación global sobre la ética (o ausencia de) y los retos de kaggle para automatizar su detección. Y como ejercicio de aprendizaje, mi intención era montar un proceso completo implementado from scratch, algo siempre formativo…

… Eso, hasta que fui consciente del tiempo que realmente tenía disponible para ello y rápidamente cambié de discurso para abanderar el no hace falta reinventar la rueda, hombre, con herramientas como faceswap… Éstas implementan todo un framework y modelos para ello, y son un punto intermedio entre crear algo de 0 y un end-to-end. Pero, en cualquier caso, empecemos por el principio.

¿Qué es un deepfake?

Seguro que conoces el video de Obama dando un extraño discurso, o quizás a Nicolas Cage en películas que no le corresponden (debatible), o incluso uno de mis favoritos: Explicaciones de Trump sobre distintos temas en “A stable genious explains”.

En estos videos (y audios) se utilizan técnicas de deep learning para generar o modificar videos usando la cara/voz de otra persona con resultados sorprendentemente realistas. 

Pese a saltar a la fama con los falsos discursos de Obama, saltaron a la infamia con su uso para generar contenido pornográfico o crear un caos político con videos de falsos discursos. Con el objetivo de ayudar a combatirlos, en kaggle, plataforma de retos de ciencia de datos, se planteó el reto de detectarlos con premios de hasta $500k dolares para el ganador.

Pero no todo es negativo. También hay iniciativas como el nuevo anuncio de Cruzcampo “Con mucho acento” en el que volvemos a ver a Lola flores explicando que fue su acento el que la hizo entenderse con todo el mundo. O alternativas a la edición digital de video para retirar algún que otro bigote de películas en post-producción.

Sea como sea, es una disciplina muy interesante y merece la pena entender cómo funciona. Así que:

¿Cómo funciona un deepfake?

En el fondo, todo es compresión con pérdidas” como diría un antiguo compañero. En el centro de todo el proceso para crear un deepfake, se encuentra un algoritmo de deep learning: Autoencoder.

Estos algoritmos tienen como objetivo tomar el dato de entrada y devolver la versión más parecida posible en la salida, haciendo pasar la información por capas de neuronas cada vez más pequeñas, obligando a representar los datos de forma más compacta en lo que se conoce como espacio latente, para luego intentar reconstruir el dato original. La estructura de un autoencoder, por tanto, se compone del encoder (comprime o simplifica), la representación (en el espacio latente) y el decoder (reconstruye).

Aplicando esta técnica a las imágenes, es posible quedarse con la información realmente importante que aplicada a “caras”, podría traducirse en qué expresión facial tiene o hacia qué dirección mira, y descartar cosas como color de ojos, tono de piel…

¿Espera, eso no es importante?

Pues en este contexto, no, o no tanto. Recordemos que al usar un autoencoder, estamos obligando a la red a simplificar para quedarse con la información más crítica. En este caso, el color del pelo, ojos o piel, es información “estática”, algo que tanto el encoder como el decoder pueden aprender. Pero la expresión o dirección de la cara es cambiante, y esa es la información que necesitamos que pase entre ambos bloques y la que quedaría recogida en ese espacio latente.

Ahora bien, ¿qué hacemos con esto? Con un solo modelo no demasiado, pero en este caso ¡vamos a usar dos!

Una vez tengo ambos modelos entrenados, podemos repasar lo comentado antes. El encoder comprime la imagen para quedarse solo con “la expresión de la cara” (simplificando muchísimo la explicación) en una representación latente. El decoder por otro lado, aprende a reconstruir una cara a partir de una “expresión”. 

En este caso, voy a hacer un experimento rápido con mi propia cara, a fin de cuentas, ¿quién no ha querido ser Jedi?

En un primer vistazo se puede ver que la fase de extracción de cara me deja la barba fuera. Algo que seguro no impactará más adelante. – En absoluto. No. Nada. –

Después de todo esto solo queda un paso más. Cruzarlos.

Voy a usar el encoder del modelo A con el decoder del modelo B. Los decoders son los que han aprendido a reconstruir una cara a partir de la expresión facial del espacio latente, así que al cambiarlos, le estoy pidiendo al modelo que explique la expresión que tiene Obi Wan, y la reconstruye con mi cara.

Aproximaciones más complejas utilizan un único decoder inicial, mayor tamaño de modelo y otras complejidades demasiado técnicas para este artículo, no obstante, este sería el concepto básico de su funcionamiento.

Respecto a mi experimento rápido , ¿cuál fue el resultado? Terrible, obviamente.

(El tono de piel no acaba de encajar, la generación de mi cara no se completa por lo que aparece borrosa, y… ¿qué demonios pasa con mi ojo?)

Como lección que todo científico de datos ha aprendido y ha sentido en sus carnes, los modelos funcionan tan bien como el dato de entrada les permite. Y ante sorpresa de nadie, utilizar como referencia un único vídeo grabado con una webcam a toda prisa, no es, evidentemente, ni el mejor tipo de dato a usar ni lo suficientemente representativo.

No solo eso, sino el pretratamiento del video, la detección de las caras, tamaño del enmascarado, tiempo de entrenamiento (con menos de 12h en GPU no conseguirás demasiado como podéis comprobar)… No es algo a resolver en dos días, como quien dice… Lo cual es un buen indicador del esfuerzo y tiempo dedicados a las auténticas obras de arte que se pueden ver por ahí.

En conclusión

Los deepfakes, como toda tecnología de IA (o tecnología, en general), tienen una complejidad mucho mayor de la que, a priori, se puede percibir. Y en la línea del Deep Learning, nos deja hacer cosas que antes ni siquiera nos podíamos plantear. 

Como todo, el cómo lo usemos es y siempre será el quid de la cuestión. En cuanto a la ética, implicaciones y usos, es algo de lo que hablaremos en una segunda parte con suficiente profundidad, ya que revisando la longitud de este artículo creo que ya me he extendido demasiado. 

Quizás, en esa segunda parte, tenga otros ejemplos propios más decentes que enseñar.

Imagen: Rawpixel