Intercambio de caras con inteligencia artificial
Cuando se desarrolló y publicó por primera vez “face swapping”, la tecnología fue innovadora, fue un gran paso en el desarrollo de la inteligencia artificial.
Pero también fue completamente ignorado fuera de la academia porque el código era confuso y fragmentario. Se requería una comprensión profunda de las técnicas complicadas de AI y se tomó un gran esfuerzo para resolverlo.
Hasta que un individuo lo reunió en una sola colección cohesiva. Corrió (Compilo), funcionó, y como suele ocurrir con la nueva tecnología que está surgiendo en Internet, se utilizó de inmediato para crear pornografía. El problema fue que este fue el primer código de inteligencia artificial que cualquier persona podía descargar, ejecutar y aprender mediante experimentación sin tener un doctorado en matemáticas, teoría de la computación, psicología y más.
DeepFakes, es un acrónimo en inglés, “Deep” que viene de Deep Learning que como hemos visto en otros artículos es el aprendizaje profundo y “Fakes” que significa falsificaciones.
Todo esto se trata de una técnica de Inteligencia artificial basada en sintetizar la imagen humana combinando y superponiendo imágenes creadas por el ordenador, utilizando para ello: algoritmos de aprendizaje no supervisados, mejor conocidos en español, como RGAs (Red generativa antagónica).
El resultado final de dicha técnica es, generalmente, un video completamente falso, pero en muchos casos, lo bastante realista como para poder inducirlo a errores y presentar como hechos algo que es pura ficción.
¿Qué es una red generativa antagónica?
Es un algoritmo de inteligencia artificial que utiliza dos redes neurales que compiten mutuamente en una especie de juego.
Una red genera los candidatos y la otra los evalúa.
La red generativa aprende a asignar elementos en un espacio latente, mientras que la red discriminativa diferencia entre los elementos de la distribución de datos originales y los candidatos producidos.
El objetivo del aprendizaje de la red generativa es aumentar el índice de error de la red discriminativa (o sea, "engañar" a la red discriminativa produciendo nuevos elementos sintéticos que parecen provenir de la distribución de datos reales).
Esta técnica puede generar fotografías que parecen auténticas a observadores humanos.
Para empezar a ver como funciona esto de deepfakes, tenemos que tener en cuenta lo siguiente:
Una computadora “poderosa” ya sea que tenga un buen CPU o una que tenga una tarjeta gráfica nvidia (exclusivamente) porque actualmente no son soportadas las tarjetas gráficas de AMD, la GPU necesita al menos soportar CUDA 3.0 o mayor.
Sistema operativo.
- Windows 7, 8 o 10
- Linux de preferencia Ubuntu/debian o Centos os
- MacOs, GPU no es soportada debió a los drives de nvidia.
- Cualquier so deberá ser de 64 bits.
Instalar dependencias.
- Python >= 3.2-3.6 (3.7 no porque no soporta tensorflow).
- Virtualenv y virtualenvwrapper, si no se usa Docker.
- Cuda, si cuentas con GPU.
- Dlib, para Windows, visual studio 2015 y cmake v3.8.2, Linux build-essential, cmake y para macos xquartz.
Pasos por seguir para entrenar la red neural.
Lo primero que tenemos que hacer es bajar o conseguir muchas imágenes de las personas de las que queremos reconocer para posteriormente sustituir una por la otra. Para tener un mejor orden creamos una carpeta para guardar las fotos y dentro de esta, dos subcarpetas con los nombres de las personas que elegiremos para el experimento, en nuestro caso se creó la carpeta de “files” y dentro de esta las subcarpetas: Erick y Rock.
Ya que tenemos las imágenes de las dos personas, lo que necesitamos es extraer la cara de ambas personas, para es corremos los siguientes comandos:
# To convert erick:
python faceswap.py extract -i ~/faceswap/files/erick -o ~/faceswap/data/erick
# To convert therock:
python faceswap.py extract -i ~/faceswap/files/rock -o ~/faceswap/data/rock
Una vez que tenemos la información de nuestras imágenes es momento de entrenar la red, este proceso es tardado especialmente si no cuentas con una GPU. Lo que tenemos que hacer es correr el siguiente comando:
python faceswap.py train -A ~/faceswap/data/erick -B ~/faceswap/data/rock -m ~/faceswap/models/# or -p to show a previewpython faceswap.py train -A ~/faceswap/data/erick -B ~/faceswap/data/rock -m ~/faceswap/models/ -p
Ya que estamos satisfechos con la información de entrenamiento ya podremos convertir las imágenes.
Es un proceso similar al de extracción, para esto creamos una carpeta para las imágenes resultantes, este proceso de extracción es cuando la red corta la cara de uno y la pega en el otro cuidadosamente. Para llevar acabo este proceso corremos el siguiente comando:
python faceswap.py convert -i ~/faceswap/photo/erick/ -o ~/faceswap/output/ -m ~/faceswap/models/
Si quieren seguir leyendo acerca de este tema les comparto tres artículos de los que se hizo o lo que se puede hacer, pero claro hay miles de cosas a las que se les puede sacar provecho o darle mal uso como se a hecho con esta herramienta que es bastante interesante.