Creé mi propio dipfake en dos semanas y $ 552

Al crear este video, aprendí mucho



La tecnología Dipfake utiliza redes neuronales profundas para reemplazar de manera convincente a una persona con otra en video. Esta tecnología tiene un potencial obvio para el uso malicioso, y se está volviendo más común. Con respecto a las consecuencias sociales y políticas de esta tendencia, muchos buenos artículos ya se han escrito.

Y este no es uno de ellos. En cambio, echaré un vistazo más de cerca a esta tecnología: ¿cómo funciona el software diphey? ¿Qué tan difícil es crearlos y qué tan buenos son los resultados?

Decidí que era mejor responder estas preguntas creando mi propio video dip. Los editores me dieron unos días para jugar con el software y $ 1000 para pagar la computación en la nube. Después de un par de semanas, obtuve el resultado presentado en el video al comienzo del artículo. Comencé con un video de Mark Zuckerberg dirigiéndose al Congreso y reemplacé su rostro con el Teniente Comandante Data (Brent Spiner) de Star Trek: The Next Generation. Se gastó un total de $ 552.

El video no fue perfecto. Todos los detalles de la cara de los datos no se transmiten, y si observa de cerca, los artefactos son visibles en los bordes.

Aún así, es bastante notable que un recién llegado como yo pueda crear un video convincente, y de manera tan rápida y económica. Hay muchas razones para creer que la tecnología dipfeyk en los próximos años solo mejorará, será más rápida y más barata.

En este artículo, te guiaré de la mano en mi camino de dipfake. Explicaré cada paso que debes seguir para crear un video falso. En el camino, explicaré cómo funciona esta tecnología y qué limitaciones tiene.

Dipfeyks necesita mucha potencia informática y datos


Llamamos a estos videos diphakes ["falsificaciones profundas"] porque se crean utilizando redes neuronales profundas. Durante la última década, los científicos informáticos han descubierto que las redes neuronales se están volviendo más poderosas con la adición de capas adicionales de neuronas. Pero para liberar todo el potencial de las redes neuronales profundas, necesita muchos datos y una gran potencia informática.

Lo mismo es cierto para los dipfakes. Para este proyecto, alquilé una máquina virtual con cuatro potentes tarjetas gráficas. E incluso con todos estos caballos, me llevó casi una semana entrenar a mi modelo.

También necesitaba una montaña de imágenes de Mark Zuckerberg y Data. Obtuve un video de 38 segundos de duración, pero para el entrenamiento necesitaba videos mucho más largos, tanto Zuckerberg como Data.

Para hacer esto, descargué un montón de videos que contenían sus caras: 14 clips con clips de Star Trek y nueve clips con Mark Zuckerberg. Entre estos últimos hubo informes formales, varias entrevistas en la televisión e incluso un video en el que Zuckerberg estaba preparando una barbacoa en su patio.

Subí todos estos clips a iMovie y eliminé marcos que no contenían las caras de Zuckerberg y Data. También corté en pedazos los pasajes más largos. Un programa dipfake no solo necesita una gran cantidad de imágenes, sino una gran cantidad de imágenes diferentes. Necesitábamos disparar caras desde diferentes ángulos, con diferentes expresiones y con diferentes luces. Un video de una hora en el que Zuckerberg lee el informe no puede producir más tomas valiosas que un segmento de cinco minutos, ya que se toma desde el mismo ángulo, con la misma luz y muestra la misma expresión facial. Así que recorté unas pocas horas de video a 9 minutos con Data y hasta 7 minutos con Zuckerberg.

Faceswap: un paquete de software para crear dipfakes


Entonces es hora de usar el software para dipheyka. Al principio intenté usar el programa DeepFaceLab y pude crear un video bastante tosco. Luego pedí consejo en el foro SFWdeepfakes, y luego algunas personas me aconsejaron sobre Faceswap. La gente notó que este programa tiene más funciones, mejor documentación y mejor soporte en línea. Decidí seguir sus consejos.

Faceswap se ejecuta en Linux, Windows y Mac. El paquete tiene herramientas para trabajar en todas las etapas de la creación de un dipfake, desde la importación de los videos originales hasta la creación de un video dipfake terminado. El software no es intuitivo, pero viene con un material de capacitación detallado que cubre todos los pasos del proceso. El material fue escrito por el creador de Faceswap, Matt Torah, quien también me ayudó mucho a chatear en el canal Deepfake de Discord.

Faceswap requiere una potente tarjeta gráfica. Sabía que mi MacBook Pro no podía manejarlo. Pedí a los técnicos de nuestra oficina editorial que me alquilaran una máquina virtual para Linux de un proveedor líder de servicios en la nube. Comencé con una máquina virtual con una GPU Nvidia K80 y 12 GB de memoria de video. Unos días después cambié a un modelo con dos GPU y luego a 4 GPU. Tenía cuatro GPU Nvidia T4 Tensor Core con 16 Gb de memoria cada una (y otras 48 CPU y 192 RAM, que en su mayoría estaban inactivas).

Después de dos semanas de trabajo, recibí una factura de $ 522. Claro, gasté una cantidad bastante grande para la conveniencia de alquilar una computadora. La Torá me dijo que, por el momento, la opción de hardware más rentable para un dipfake es una tarjeta Nvidia GTX 1070 o 1080 con 8 GB de memoria. Tal tarjeta usada vale varios cientos de dólares. Una tarjeta 1080 no enseña una red neuronal tan rápido como cuatro de mis GPU, pero si está listo para esperar algunas semanas, obtendrá resultados similares.

El flujo de trabajo en Faceswap consta de tres pasos básicos:

  • Extracción: corte el video en cuadros, encuentre caras en cada cuadro, muestre imágenes bien alineadas y cuidadosamente recortadas de cada cara.
  • Entrenamiento: use las imágenes obtenidas para entrenar la red neuronal dipfake. Toma una imagen de la cara de una persona y produce una imagen de la cara de otra persona con la misma expresión, iluminación y en la misma posición.
  • Transformación: aplique el modelo entrenado en el paso anterior a un video específico para dar un dipfake. Después de entrenar el modelo, se puede aplicar a cualquier video en el que esas personas estén presentes en los rostros en los que se entrenó.

Para cada uno de los tres pasos, se requiere una cantidad de tiempo completamente diferente de la persona y la máquina. El software de recuperación de imágenes se ejecuta durante varios minutos, pero una persona puede tardar horas en verificar los resultados. El software observa todas las caras en cada imagen, así como algunos falsos positivos. Para obtener buenos resultados, una persona necesita revisar todos los resultados, eliminando rostros innecesarios y todo lo que el software tomó para una persona.

El aprendizaje es fácil de configurar y prácticamente no requiere la participación humana. Sin embargo, puede llevar días o incluso semanas de tiempo de computadora para obtener buenos resultados. Comencé a entrenar mi modelo final el 7 de diciembre y funcionó hasta el 13 de diciembre. Es posible que después de otra semana de trabajo, la calidad de mi dipfake mejore. Y también usé mi monstruo en la nube con cuatro tarjetas gráficas avanzadas. Si trabaja en su computadora con una sola GPU de menor potencia, puede llevar muchas semanas entrenar un buen modelo.

El paso final, la transformación, es rápido tanto para una persona como para una computadora. Al recibir un modelo adecuadamente entrenado, puede entregar videos falsos en menos de un minuto.

¿Cómo funcionan los diphakes?


Antes de describir el proceso de aprendizaje de Faceswap, debe explicar cómo funciona la tecnología subyacente.

En el corazón de Faceswap, y otros paquetes de software líderes para crear diphakes, está el codificador automático. Esta es una red neuronal entrenada para recibir una imagen de entrada y producir una imagen idéntica. Esta habilidad en sí misma puede no ser tan útil, pero, como veremos más adelante, es un elemento clave en el proceso de creación de una falsificación.



El codificador automático está estructurado según el principio de dos embudos conectados por un extremo estrecho. En un lado de la red hay un codificador que recibe una imagen y la comprime en una pequeña cantidad de variables. En el modelo que utilicé en Faceswap, estos son 1024 números de coma flotante de 32 bits. En el otro lado de la red neuronal hay un decodificador. Toma esta representación compacta, conocida como "espacio latente", e intenta expandirla, después de haber recibido la imagen inicial.

Limitar artificialmente la cantidad de datos transmitidos desde el codificador al decodificador hace que estas dos redes desarrollen una representación compacta del rostro humano. Un codificador es algo así como un algoritmo de compresión con pérdida que intenta guardar tanta información sobre una cara como sea posible mientras limita la cantidad de almacenamiento. El espacio latente debe extraer de alguna manera detalles importantes, por ejemplo, en qué dirección mira el sujeto, sus ojos están abiertos o cerrados, está sonriendo o frunciendo el ceño.

Es importante que el codificador automático necesite guardar solo aquellas características de la cara que cambian con el tiempo. No necesita almacenar cosas sin cambios, como el color de los ojos o la forma de la nariz. Si tiene ojos azules en cada fotografía de Zuckerberg, entonces su decodificador de red aprenderá a dibujar automáticamente su cara con ojos azules. No es necesario meter información en un espacio latente que no cambie durante la transición de una imagen a otra. Como veremos más adelante, el hecho de que los codificadores automáticos tengan diferentes actitudes hacia las características faciales constantes y cambiantes es extremadamente importante por su capacidad para emitir diphfakes.

Cada algoritmo para entrenar una red neuronal necesita alguna forma de evaluar la calidad de la red para poder mejorarla. En muchos casos, esto se hace a través de la capacitación con el maestro, cuando la persona proporciona la respuesta correcta para cada elemento del conjunto de datos de capacitación. Los codificadores automáticos funcionan de manera diferente. Dado que simplemente intentan reproducir sus propios datos de entrada, el software de capacitación puede juzgar su calidad de trabajo automáticamente. En la jerga del aprendizaje automático, esto se llama aprendizaje sin un maestro.

Al igual que cualquier red neuronal, los codificadores automáticos en Faceswap se entrenan mediante retropropagación. El algoritmo de entrenamiento alimenta una imagen específica en la red neuronal y observa qué píxeles en la salida no coinciden con la entrada. Luego calcula cuál de las neuronas de la última capa hizo la mayor contribución a los errores y corrige ligeramente los parámetros de cada neurona para que dé mejores resultados.

Luego, estos errores se propagan de regreso a la capa anterior, donde los parámetros de cada neurona se corrigen nuevamente. Los errores se propagan de esta manera más atrás hasta que se corrija cada uno de los parámetros de la red neuronal, tanto el codificador como el decodificador.

Luego, el algoritmo de entrenamiento alimenta otra imagen de la red, y todo el proceso se repite nuevamente. Cientos de miles de repeticiones de este tipo pueden ser necesarias para hacer un codificador automático que reproduzca bien su propia entrada.



El software Dipfake funciona entrenando simultáneamente dos codificadores automáticos, uno para la cara original y el segundo para el nuevo. Durante el proceso de capacitación, cada codificador automático recibe imágenes de una sola persona y está capacitado para producir imágenes muy similares a las originales.

Sin embargo, hay un inconveniente: ambas redes usan el mismo codificador. Los decodificadores (neuronas en el lado derecho de la red) permanecen separados, y cada uno de ellos está entrenado para dar una cara diferente. Pero las neuronas en el lado izquierdo de la red tienen parámetros comunes que cambian cada vez que se entrena uno de los codificadores automáticos. Cuando la red Zuckerberg se entrena en la cara de Zuckerberg, esto cambia la mitad de la red que pertenece al codificador y en la red de datos. Cada vez que la red de Data se entrena en la cara de Data, el codificador Zuckerberg hereda estos cambios.

Como resultado, dos codificadores automáticos tienen un codificador común que puede "leer" la cara de Zuckerberg o la cara de Data. El propósito del codificador es usar la misma representación de cosas como el ángulo de la cabeza o la ubicación de las cejas, ya sea que recibió una foto de Zuckerberg o una foto de datos en la entrada. Y esto, a su vez, significa que cuando aprietas tu cara con el codificador, puedes desempacarlo usando cualquier decodificador.



Entonces, habiendo entrenado un par de codificadores automáticos de esta manera, queda un simple paso para crear un falso falso: intercambia decodificadores. Está codificando una foto de Zuckerberg, pero utilizando el decodificador de datos en el paso de decodificación. El resultado es una fotografía reconstruida de Data, pero con la misma posición de cabeza y expresión facial que la fotografía original de Zuckerberg.

Recuerde, mencioné que el espacio latente captura las características faciales variables de una persona (expresión, dirección de visión, ubicación de las cejas) y cosas tan constantes como el color de los ojos o la forma de la boca le dan al decodificador. Esto significa que si codifica la imagen de Zuckerberg y luego la decodifica usando el decodificador de datos, obtendrá una cara con características de datos permanentes, por ejemplo, una forma de cara, pero con la expresión y orientación de la cara original de Zuckerberg.

Aplicando esta técnica a cuadros sucesivos de un video con Zuckerberg, obtienes un nuevo video donde la cara de Data realiza los mismos movimientos - sonríe, parpadea, gira la cabeza - que Zuckerberg hizo en el video original.

Esta situación es simétrica. Cuando entrena una red neuronal para recibir una foto de Zuckerberg y emite una foto de Datos, simultáneamente la entrena para recibir una foto de Datos y emitir una foto de Zuckerberg. La herramienta de conversión de video de Faceswap, el último paso en el proceso de creación de un dipfake, incluye una casilla de verificación útil "intercambiar modelos", que permite al usuario intercambiar decodificadores. Como resultado, en lugar de sustituir la cara de Data en lugar de la cara de Zuckerberg, el programa hace lo contrario, produciendo videos muy divertidos como este:


Datos de entrenamiento


En la práctica, obtener buenos resultados al crear un dipfake no es fácil.

Como mencioné, obtuve siete minutos de video para Data y nueve minutos para Zuckerberg. Luego usé la herramienta de extracción de imágenes Faceswap para cortar el video y obtener imágenes recortadas de las caras de ambos hombres. El video contiene aproximadamente 30 fotogramas por segundo, pero extraje solo cada sexto; esta práctica se recomienda en la documentación de Faceswap. Esto se debe a que una variedad de imágenes significa más que solo su número, y guardar cada cuadro conduciría a una gran cantidad de imágenes muy similares.

La herramienta de extracción Faceswap produjo bastantes falsos positivos. También encontró caras reales en el fondo de algunas tomas. Durante un par de horas, eliminé manualmente todas las fotos extraídas que no pertenecían a ninguno de mis dos sujetos experimentales. Como resultado, obtuve 2598 imágenes de la cara de Data y 2224 imágenes de la cara de Zuckerberg.

Y en ese momento, finalmente, era hora de pasar al entrenamiento de modelo real. Ahora Faceswap viene con 10 algoritmos diferentes de dipfake que admiten diferentes tamaños de imagen y requieren diferentes poderes informáticos. Entre los más sencillos hay un modelo "liviano" que funciona con imágenes faciales de no más de 64 píxeles de tamaño. Se puede ejecutar en una máquina con no más de 2 GB de memoria de video. Otros modelos funcionan con imágenes de 128, 256 o incluso 512 píxeles de tamaño; sin embargo, requieren mucha más memoria de video, así como más tiempo de entrenamiento.

Comencé a entrenar el modelo DFL-SAE, derivado de algoritmos de DeepFaceLab. Sin embargo, hubo una advertencia en la documentación de Faceswap de que este modelo sufre de una "fuga de identidad" en la que algunas características de una cara pueden filtrarse en otra. Me pareció que vi algo como esto en un par de los primeros videos de prueba, así que un día después cambié al modelo Villain, que funciona con imágenes de 128 píxeles. El manual de Faceswap lo describe como muy exigente con VRAM y como "una buena opción para aquellos que desean obtener un modelo de mayor resolución sin ajustar ningún parámetro".

Entonces esperé. Y él esperó. El proceso de aprendizaje aún no había terminado cuando mi fecha límite llegó el viernes, y esto después de seis días de entrenamiento. En ese momento, mi modelo produjo un dipfake bastante bueno. La velocidad del progreso disminuyó, pero es posible que hubiera obtenido un mejor resultado si tuviera otra semana de tiempo en la computadora.

Faceswap está bien adaptado para un trabajo informático prolongado. Si inicia el equipo de capacitación desde la interfaz gráfica, la interfaz del programa actualiza regularmente la pantalla de vista previa, donde puede ver ejemplos de cómo el software crea retratos de Data y Zuckerberg. Si prefiere realizar un entrenamiento desde la línea de comando, esto también es posible. La interfaz Faceswap tiene un útil botón "generar" que proporciona el comando exacto que necesita ejecutar para entrenar el modelo con la configuración actual realizada en la interfaz.

¿Qué tan bueno fue el dipfake?


En el proceso de aprendizaje, Faceswap muestra constantemente una estimación numérica de la "pérdida" para cada uno de los dos codificadores automáticos. Estas estimaciones muestran qué tan bien el codificador automático de Zuckerberg puede reproducir las fotos de Zuckerberg, y qué tan bien el codificador automático de Data puede reproducir las fotos de Data. Y estos números seguían disminuyendo cuando dejé de aprender el viernes, aunque la velocidad del progreso disminuyó significativamente.

Por supuesto, de hecho, es importante para nosotros qué tan bien el decodificador de Data puede convertir la cara de Zuckerberg en Data. No sabemos cómo debería ser el "resultado final", por lo tanto, es imposible medir la calidad del trabajo en números exactos. Lo mejor que podemos hacer es revisar el video y decidir si parece realista.


. 10 12 Villain. 6 – . – . .

9 , . , . .

« », — , , « . , ».

, . , Faceswap , , . , , .

. , - . . , , – - .


, . , . Faceswap . , . , . , , .

, Faceswap . 6464 . 128128 – 256 – . , , , .

. , .

- (), , «» , . . , .

, 2014 , . , , 1024 . , , , , , - – , , , .


. . , . , - – – , .

– , . . , , - -, .

, Faceswap . , , . , - , , .

. , , , . ?

, . , - -, . - , , .

, , . ? ? , ? , .


. , - , , , - . , - , .

, : . . , . , .

( , ), . . , – .

-. , . - - , . , .

, Faceswap, , . , . , , . , , , , .

, , . , « ». .

Source: https://habr.com/ru/post/482684/


All Articles