Guía paso a paso para hacer deepfakes

TUTORIAL DEEPFAKE

Buenas querido conforero, si estás leyendo esto es que al menos tienes la sana curiosidad de modificar el porno con la cara de una famosa que te pone burraco, si es así aquí estoy yo para tenderte mi mano con mi limitada experiencia (sin porno que no no soy un pervertido como tu) y que así puedas hacer tus sueños de pajillero realidad.

Lo primero es lo primero, tendrás que descargar DeepFaceLab de aquí…

Hay varias versiones pero yo utilicé la última versión “CUDA” porque utilizo una tarjeta Nvidia (aunque en estos momento hay una build más actual llamada simplemente “Nvidia”) también hay versiones para AMD (OPEN CL) que supongo que se utilizarán igual (aunque tengo entendido que son algo mas lentas).

Al lío, una vez instalado os tiene que quedar una carpeta tal que así (son un montonazo de archivos .bat así que no os asustéis que solo utilizaremos unos pocos)…

La carpeta donde trabajaréis con los archivos de imágenes y vídeo es la llamada “workspace” donde se crearan los archivos y carpetas necesarios a medida que trabajéis.

Cosas importantes:

  • EL vídeo donde queráis sustituir las caras se tiene que llamar data_dst.mp4 (sustituiremos la cara original por otra que elijamos).

  • El vídeo de la persona con la que queremos sustituir la cara del vídeo anterior se tiene que llamar data_src.mp4 y debe ser un vídeo en el que tengamos suficiente cantidad de ángulos y gestos de la persona (deberemos sacar unas 2000 imágenes pero podéis sacar más aunque tardará todo más también).

Ambos archivos de vídeo tienen que estar en la carpeta “workspace”.

Bien, el primer .bat que vemos se llama “1) clear workspace” y este archivo simplemente eliminará cualquier trabajo previo o que estuvierais haciendo y dejará todo el directorio “workspace” limpito como una patena (así que ojo con darle a no ser que queráis limpiar todo).

Extraer caras de la persona que queremos poner en otro vídeo
  • Primero debemos extraer todos los fotogramas del vídeo data_src.mp4 pulsando en “2) extract images from video data_src” cuanto más variada y en más posiciones estén las caras del vídeo mejor.

  • Cuando termine de extraer todos los fotogramas tenemos que sacar solo las caras así que pulsamos “4) data_src extract faces S3FD best GPU” (también hay una versión para millonarios con más de una tarjeta llamada “4) data_src extract faces S3FD all GPU”).

  • Ese proceso tardará más que el anterior y una vez acabe las caras se alojarán en workspace\data_src\aligned.

  • Lo siguiente será darle a “4.2.2) data_src sort by similar histogram” esto ordenará las caras por parecido y viene muy bien si hay más de una persona en el vídeo y no queremos meter esas caras.

  • Luego viene un poco de trabajo manual, pulsamos “4.1) data_src check result” y se nos abrirá un programilla ligero en el que trabajaremos y donde debemos eliminar todas las caras que no sean nuestro objetivo (otras personas que aparecen en el vídeo por ejemplo), también debemos eliminar las que estén muy borrosas o las que no salgan del derecho o estén alineadas (a veces las caras salen de lado, del revés, o más lejos) el programilla es bastante útil podeis ver con rapidez muchas filas de fotogramas o si clicáis dos veces sobre una imagen se os abrirá y luego si queréis pasar los fotogramas uno tras otro como si fuera un vídeo o basta con pulsar la flecha derecha del teclado)

  • Después de tener un número decente de buenas imágenes tenéis que pulsar “4.2.other) data_src util add landmarks debug images” lo que hará el reconocimiento facial y generará un duplicado “debug” de todas las caras con esta pinta…

  • Bien, volvemos a darle a “4.1) data_src check result” y ordenamos las caras por fecha (o nombre) para separar las originales de las “debug” podemos mirar a lo bestia y eliminar con nuestro ojo de halcón entre las filas de imágenes o bien pulsamos dos veces en la primera imagen y empezamos a pasar como locos las imágenes pulsando la tecla derecha (si alguna cara no está bien detectada o está mal alineada eliminaremos la cara original y la debug)… Cuando acabemos de eliminar las caras desalineadas (si es que las hay) eliminamos todas las imágenes “debug” y solo dejamos las originales intactas.

  • Ya acabo la parte pesada, ahora simplemente le damos a “4.2.6) data_src sort by best” y ya habremos terminado con el archivo data_src.mp4, se recomienda tener al final unas 2000 imágenes aunque dependerá de lo complejo que sea el vídeo y podrían ser necesarias menos dependiendo del caso (tened en cuenta también que cuantas más imágenes más tardará el proceso pero más posibilidades hay de que la IA tenga buenas referencias de aprendizaje).

El vídeo donde queremos meter la nueva cara
  • Ahora toca trabajar con data_dst.mp4 y lo primero que tenemos que hacer es sacar su fotogramas como hicimos con el anterior así que pulsamos en “3.2) extract images from video data_dst FULL FPS”

  • Cuando termine habrá que darle a “5) data_dst extract faces S3FD best GPU” y esperar.

  • Lo siguiente separar las caras por parecido con “5.2) data_dst sort by similar histogram”

  • Una vez hecho le damos a “5.1) data_dst check results” y eliminamos las imágenes de las personas que no sean nuestro objetivo o que estén giradas o dadas la vuelta (aquí no pasa nada por dejar las que estén borrosas).

  • Luego “5.1) data_dst check results debug” aquí volveremos a ver la detección facial, si hay alguna imagen en la que la detección de nuestra cara objetivo no funcionó o que no está bien alineada eliminadla (absolutamente todas las demás las dejamos).

  • Este paso no es necesario si en el paso anterior no eliminasteis nada, pero si eliminasteis algo toca darle a “5) data_dst extract faces MANUAL RE-EXTRACT DELETED RESULTS DEBUG” esto hará que se os abra una pantalla con las imágenes que eliminasteis y podréis mover el ratón sobre la imagen y hacer zoom (con la rueda del ratón) para intentar que el reconocimiento facial detecte las caras, una vez que la detecte para fijarla solo tenéis que hacer click con el ratón (para pasar al siguiente fotograma pulsad la tecla “.” y para volver al anterior “,”) una vez lleguéis al último fotograma se cerrará la ventana automáticamente.

Toca el deeplearning

Aquí la cosa depende muchísimo de vuestro hardware así que me limitaré a poner mi experiencia personal con una GTX 1080 y utilizando SAEHD (hay otros como SAE que consume menos recursos) así que supongo que la estabilidad dependerá de que tarjeta gráfica tengáis.

Una vez pulsado “6) train SAEHD” se nos pedirá que introduzcamos una serie de opciones de entrenamiento.

  • “Enable autobackup” yo lo tengo activado porque durante el entrenamiento todo se puede ir a la mierda y colapsar (esta opción os hace una copia de seguridad automáticamente cada tanto tiempo).

  • “Write preview history” os creará un archivo de imágenes por si queréis ver como evoluciona el aprendizaje (no hace falta si no queréis).

  • “Choose image for the preview history” Te deja seleccionar la imagen que quieres si activas lo anterior.

  • “Target iteration” el objetivo de iteraciones que queréis (se recomiendan al menos 100000 aunque con menos se pueden hacer cositas), si no ponéis una cifra entrenará sin un límite establecido.

  • “Batch_Size” el número de imágenes que utilizará al mismo tiempo para aprender (en mi caso uso 8).

  • “Flip faces ramdonly” ayuda si tenéis pocas imágenes de la fuente pero le quita realismo (yo lo tengo desactivado).

  • “Resolution” 128 en mi caso… Mas de eso me peta porque no tengo suficiente pepino.

  • “Half, Mid full, Fullface” es el tipo de mascara que utilizareis “F” es completa, “MF” mediana, y “H” es más pequeña (yo utilizo “F”)

  • “Learn Mask” activadlo ayuda con el aprendizaje de máscaras.

  • “Optimizer mode” lo tengo en 3 que es el mas estable.

  • “AE architecture” yo pongo “DF”

  • “Autoencoder dims” 512 pero bajad a la mitad si tenéis menos RAM de vídeo (yo tengo 8GB)

  • “Encoder/Decoder dims per chanel” 21 (reducir si tenéis problemas por falta de RAM)

  • “Use learning rate dropout” da nitidez a la imagen pero NO es conveniente activarlo al principio (después de 50000 iteraciones o cuando la imagen esté suficientemente clara).

  • “Enable random warp of sample” esta es al contrario, es mejor activarla desde el principio y luego desactivarla.

  • “Enable true face” desactivado al principio y activarlo después para ganar nitidez.

  • “Face Style Power” yo no lo utilizo, intenta hacer que la imagen se parezca mas a la original pero no me convence el resultado aunque dicen que viene muy bien si la iluminación es muy diferente (viene bien aplicarlo cuando tenéis ya un modelo muy entrenado).

  • “Background Style Power” intenta fusionar mejor las caras con el fondo, al principio lo pongo a 10 y luego lo bajo a 5

  • “Color Transfer mode apply to src faceset” transfiere una tonalidad de color (rtc suele ir bien para casi todo).

  • “Enable gradient clipping” hace que todo sea mas estable y que el riesgo de colapso del trabajo se reduzca a cambio de que todo sea más lento (yo lo tengo apagado pero si tenéis problemas quizá ayude) conviene activarlo principalmente cuando el numero de iteraciones ya es muy alto.

  • “Pretrain model” pre entrenará el modelo con otras caras y personas antes de empezar, esto no es necesario a no ser que la escena sea muy complicada con condiciones de iluminación con contrastes tochos entre luces y sombras o que queráis tener un modelo todoterreno que podáis utilizar después con más facilidad en otros trabajos diferentes. Lo que hará el preentrenamiento es ayudar a la IA a que detecte condiciones distintas y hará que vuestra cara se adapte mejor a diferentes condiciones de luz o formas (perdiendo un poco de su aspecto original para parecerse más al aspecto del vídeo donde queréis poner la cara) para parar el preentrenamiento (entre 10000 o 20000 iteraciones es suficiente) simplemente cerraremos la ventana y volveremos a darle de nuevo a “6) train SAEHD” lo que comenzará el aprendizaje normal con las caras que de verdad queremos sustituir y en las que trabajamos antes (a partir de aquí comienza comenzaremos a contar de verdad las iteraciones que necesitaremos para el entrenamiento real ya con las caras que queremos sustituir).

Si todo va bien tras unos instantes os aparecerá esto (si no bajad parámetros que es que la cosa petó) y vuestra gráfica se empezará a calentar como si estuvieseis jugando al Crysis 4…

Al principio no se verá una mierda pero poco a poco al lado de las fotos aparecerán unas manchas borrosas que se irán trasformando en caras (si en algún momento una fila se vuele roja es que por desgracia colapsó así que si queréis seguir tendréis que tirar de un backup pero a mi de momento no me paso ni una vez).

Para cambiar de previsualización tecla “P”, para salvar tecla “S” y para salir le dais a “intro” y se salvara el progreso y se cerrará la ventana automáticamente (podréis continuarlo cuando queráis dándole de nuevo a “6) train SAEHD”, si en los primeros dos segundos le dais al intro podréis volver a elegir los parámetros del entrenamiento (y si no pulsáis nada seguirá el mismo que tenía).

Una vez este entrenada lo suficiente que lleva su tiempo (los dientes son una buena referencia para saber si está suficientemente entrenada la IA) pasaremos al siguiente paso.

Montar los fotogramas con la nueva cara

Lo siguiente será montar los fotogramas con la cara nueva, para eso tenemos que pulsar en “7) convert SAEHD” (o el modelo que eligierais) al empezar o pedirá si queréis hacerlo de manera automática o con un previsualizador, si pulsáis y lo haréis con el previsualizador.

Si utilizáis el previsualizador (recomendado) se abrirá esta ventana que os explicará los atajos de teclado y para que sirve cada uno, le dais a la tecla tabulador y aparecerán las imágenes del vídeo.

Hablemos de las atajos para los que no saben inglés.

  • “Tabulador” oculta o enseña la ayuda
  • “, .” (avanzar y retroceder un frame).
  • “- =” Aumentara o disminuirá la ventana donde estáis trabajando
  • “/” aplicar la configuración del frame actual a todos los siguientes.
  • “M” aplicará la configuración actual al frame anterior
  • “W S” Aumentará o disminuirá la máscara
  • “E D” Difuminará más o menos el margen de la máscara
  • “R F” Blur a la máscara
  • “Y H” Pondrá borrosa o aplicara nitidez a la máscara (para elegir que tipo elegir pulsad la tecla “N”)
  • “U J” El tamaño de la cara/mascara
  • Las teclas numéricas os servirán para ir cambiando entre modos de máscara e imagen (la tecla
    número 1 es la que os interesa).
  • “I K” Elimina el ruido de fondo (no afecta a la cara)
  • “O L” Aplica este filtro al fondo (no afecta a la cara)
  • “P :” Reduce el número de colores de fondo (no afecta a la máscara)
  • “Shift + otra” hará que los valores cambien de 5 en 5 en vez de hacerlo de 1 en 1
  • “X” Modo de máscara (el más rápido es “learned”) pero tenéis varias opciones y alguna permiten
    eliminar los efectos indeseados por oclusiones
  • “C” Diferentes modos de transferencia de color
  • “V” aplicará un upscaler por IA para mejorar la resolución (si no está suficientemente entrenada nuestra cara esto generará ruido indeseado y puntos a casporro).
  • “Intro” Aplicará la configuración que tengáis y procesará todos los frames que queden con esa configuración.

Es importante que tengáis a la vista la pantalla de previsualización y la pantalla de símbolo de sistema a la vista al mismo tiempo (todos los valores que modifiques en la previsualización se verán reflejados en la pantalla de símbolo de sistema).

Convertir a vídeo

Una vez que tengáis todos los fotogramas procesados queda el último paso, todas las imagenes finales están el workspace/data_dst/merged y queda pulsar “8) converted to mp4”, se os abrirá una ventana… Elegís el bitrate al que queréis para el vídeo y cuando termine en la carpeta “workspace” aparecerá un vídeo llamado “result.mp4” que es el resultado de vuestro trabajo.

Aquí el mío…

Es importante saber que el entrenamiento y sus backups se guardan en la carpeta “model” y debéis saber que una vez entrenados son reutilizables. Esto solo funcionará siempre y cuando queráis meter la misma cara que entrenasteis en otro vídeo diferente (solo debéis eliminar el vídeo "data_dst.mp4 y todo lo que contenga la carpeta “data_dst” y luego volvéis a hacer todos los pasos relacionados con el vídeo DST de nuevo y volvéis a entrenar para el nuevo vídeo (reutilizar los modelos ahorra mucho tiempo porque ya están entrenados). Para hacerlo solo debéis guardar los archivos sueltos que están dentro de la carpeta “model” y la carpeta “data_src” en otro sitio y cuando queráis utilizar el modelo de nuevo volver a meter los archivos en la carpeta “model” y copiar de nuevo la carpeta “data_src” en su lugar original.

Si llegaste hasta esta parte del texto te doy mis felicitaciones… Tienes más paciencia que el Santo Job.

31 Me gusta

Me lo guardo para revisarlo después

Imagino que la mayor calidad posible se consigue si las personas de ambos videos se parecen mucho

Yo como no tengo idea iba a empezar a probar con este

Un día que tenga tiempo me pongo que has puesto.

Empezaré a toquetear estas cosas más pronto que tarde.

Sirve para personajes digitales? Por ejemplo meterle la cara de Cloud a Snake?

El entrenamiento tarda menos pero lo importante es que se parezca la forma de la cara porque lo que hay en el interior (como ojos boca cejas o nariz dan igual)… Eso sí, si va a haber muchas imágenes de perfil que la nariz se le parezca viene bien.

Si, e incluso para poner la cara de una persona real a un personaje de videojuego…

https://www.youtube.com/watch?v=cI0A0Gih1k0

5 Me gusta

@FBI

¿Por curiosidad, cuánto te ha tardado en procesar los vídeos de Abascal y del Rubius?

No, practicas fotogramas con la boca bien abierta pero no es para porno, que va :innocent:.

4 Me gusta

No sabría decirte exactamente porque no lo dejaba entrenando todo el día (lo paraba si no estaba utilizando el PC y comenzaba el entrenamiento en otro momento) pero supongo que un par de días a piñón.

Yo personalmente lo dejaba entrenando mientras foreaba o veía Netflix y lo dejaba de fondo mientras hacía otras cosas (puedes hacer de todo sin problema siempre y cuando no te pongas a jugar a un juego pepino o algo similar).

Es lo bueno que tiene, salvas donde lo dejaste y cuando enciendes el PC otra vez continuas desde donde lo dejó (no hay prisa).

1 me gusta

¿Cambia mucho el proceso para meter la cara de alguien en un juego 3D? ¿Hay que modearlo, o algo asi?

@PoleoMenta

Perdona, creía que hablabas de un vídeo de un juego.

1 me gusta

Ah, vale. Es decir, haces el video del juego, y luego usas el video como materia prima

Tengo que pasarme por rule34hentai a por material entonces. Luego buscar alguna persona real que se parezca, y magia

Eso es, aquí todo lo que manipulas son vídeos.

1 me gusta

Ta poco hace falta que la persona se parezca un huevo… Mira.

https://youtu.be/zIdeOYbWPRI

Una forma de la cara aproximada y ya… Y ni eso porque puedes poner a Stallone como el crío de solo en casa.

2 Me gusta

Tengo en mente que lo que más problemas podría darme, es que en aquella página usan mucho Blender para pulir animaciones, y les da un aspecto videojueguil 3D que es muy poco real. Algo así como Overwatch

La IA se adapta a lo que le pongas, obviamente la cara que le metas pillará el colorido del vídeo y se adaptará a el (aunque tardará mas cuanto mas diferente sea) por eso hulk en el vídeo anterior no es verde y tiene el tono de piel del brujer.

1 me gusta

Estoy extrayendo las caras del video original. ¿Cómo puedo mirar lo que falta para terminar?

(Creo que ya he encontrado una aproximación haciéndolo a mano) (Mirar la duración del video, y la velocidad de fotogramas por segundo para saber el total de fotogramas que hay que procesar)

###########################

Me encontré con un problema. En la build más reciente de Nvidia, el debug del video de destino te aparece mezclado con todos los fotogramas del video, en la carpeta de debug. No aparecen caras recortadas de debug al lado de las otras caras recortadas

Por que paso vas?

Vas por “5) data_dst extract faces S3FD best GPU” ???

Si es así cuando termine todo el proceso aparecerán las caras en Workspace/data_dst o src/aligned

Luego “5.1) data_dst check results debug” aquí volveremos a ver la detección facial, si hay alguna imagen en la que la detección no funciona y no está bien alineada eliminadla (todas las demás las dejamos).

(En la carpeta Aligned_debug salen todos los fotogramas del video, incluidos los que son debug y sin recortar)

Interesante hilo, sin duda.