jueves, octubre 28, 2021

Un DeepFake Detector escalable e integrado con FOCA

Actualmente, estamos inmersos en un mundo donde las Fake News están muy presentes. Cada vez tenemos que ser más cautos con el contenido que vemos en Internet y, en muchos casos, ser capaces de saber si la información que tenemos entre manos es verdad o no. Sin embargo, las Fake News y la desinformación no se centran únicamente en noticias escritas. Un campo muy peligroso lo encontramos dentro de los Deepfakes, utilizadas como elemento clave en la creación de Fake News realistas

Figura 1: Un DeepFake Detector escalable e integrado con FOCA

El término DeepFake se acuñó en el año 2017 cuando un usuario de la conocida plataforma Redit comenzó a publicar vídeos de carácter pornográfico en el que intercambiaba la cara de los actores originales por el de famosos mediante técnicas de Deep Learning. Hoy en día, este término no se centra únicamente en aspectos relativos a manipular vídeos e imágenes para intercambiar el rostro o la voz, sino que puede hacer referencia a la creación de personas que no existen o cualquier tratamiento que afecta a la identidad de las personas. Algunos ejemplos llamativos los encontramos en este enlace. Por ejemplo, tenemos este ejemplo de un vídeo donde se ha sustituido el rostro de Jeniffer Lawrence por el de Steve Buscemi u otro de Stark Trek donde aparecen Jeff Bezos y Elon Musk.

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

Las técnicas de Deepfakes pueden aplicarse en una gran cantidad de campos, como se puede ver también en el artículo de BladeRunners & Virtual Replicants. Por ejemplo, en el ámbito cinematográfico, donde se pueden recrear Flashbacks de una manera más sencilla. Se pueden rejuvenecer a actores e incluso se pueden revivir a actores que desgraciadamente han fallecido y no han podido acabar el rodaje de películas. Ejemplos los encontramos en superproducciones como Los juegos del hambre o Fast & Fourious. En el ámbito del del marketing y la publicidad se pueden crear personas ficticias que sean imágenes de campañas publicitarias. 

También es posible contratar a un actor pero que no grabe propiamente el vídeo sino que aporte su imagen y mediante técnicas de Deepfakes hacer como si lo protagonizara. De hecho, ya hay ofertas de trabajo para ser modelo de Deepfakes. En las videoconferencias en diferentes idiomas se puede ir modificando el movimiento de la boca para que, junto con técnicas de NLP para llevar a cabo traducciones, dé la sensación de estar ambas personas en el mismo idioma.

Figura 3: DeepFake de película SOLO para poner a Han Solo de joven

Sin embargo, son herramientas que pueden llegar a ser bastante nocivas, especialmente en el ámbito de la desinformación como hemos mencionado al principio del artículo. Se pueden crear vídeos de políticos haciendo determinadas afirmaciones que pueden llegar a causar conflictos y muchas preocupaciones entre los ciudadanos. También, son bastante propicias las extorsiones, especialmente creando vídeos de carácter pornográfico, con el fin de obtener alguna recompensa económica o dañar la imagen de la persona afectada. 

No hay que olvidar tampoco los problemas éticos que esto puede ocasionar. Nos podemos hacer preguntas como: ¿está bien traer a la vida a una persona conocida para una campaña publicitaria? o ¿qué tipo de contenido se puede generar para que no sea considerado un delito? Por último, es importante destacar la facilidad de acceso a técnicas y recursos para crear este contenido, lo que aumenta la cantidad de contenido falso a la que podemos estar expuesto. 

Figura 4: Noticias de DeepFakes

Este hecho unido a la velocidad en la que se propaga el contenido en redes sociales hace que tengamos que estar más alerta. Hay muchos cuaderno de Google Colaboratory que guían en todo el proceso. Pero no es necesario tener grandes conocimientos, existen aplicaciones gratuitas en los teléfonos móviles que permiten crearlos de una manera muy rápida y sencilla.

Centrándonos en los ámbitos de manipulación, nos encontramos con cuatro ámbitos diferentes de actuación, aunque en el ámbito de la desinformación destacan los tres primeros ya que son los más propicios a generar noticias falsas.
  • Síntesis de rostros: para generar rostros de personas que no existen.
  • Intercambio de la identidad: tomar una imagen/fotograma base y sustituir el rostro que aparece por otro.
  • Intercambio de la expresión: la persona que aparece en la imagen base y objetivo es la misma pero su expresión (enfadado, triste, alegre...) en función de la objetivo.
  • Manipulación de atributos: para añadir elementos como pelo, gafas, barba...
Para la síntesis de rostros de rostros se utilizan sobre todo redes generativas adversarias (GANs). Las principales arquitecturas son la red ProGAN y StyleGAN (en su versión 1 y 2) que nos pueden aportar muy buenos resultados. De hecho, los resultados son tan buenos que muchas es muy complicado poder detectarlo. Para este fin, se han empleado técnicas de que detectan el rango de color ya que es diferente el que aportan las cámaras gráficas a las técnicas de generación o mecanismos de estogoanálisis. Destaca una propuesta de Facebook que utiliza las huellas o marcas que dejan los diferentes algoritmos de generación de la imágenes.

En cuanto a las técnicas de intercambio de rostros y expresión utilizan técnicas muy parecidas entre sí. Por un lado, procesos gráficos en los que se seleccionan unos puntos clave en la imagen base y la objetivo y luego se fusionan y por otro lado técnicas propias de aprendizaje profundo utilizando redes neuronales. Un estudio más detallado se puede encontrar en este enlace. A diferencia de la síntesis de rostros, su detección es más fácil ya que los resultados presentan una serie de artifacts o defectos más visibles: contenido borroso, facciones duplicadas, poco detalle.. 

Entre las principales propuestas encontramos el conocido artículo de FaceForensics++. Este artículo es importante sobre todo porque aporta un conjunto de datos con vídeos en diferentes calidades y manipulados mediante diferentes técnicas para poder entrenar redes neuronales y mejorar los mecanismos actuales de detección. De hecho, en este artículo también se encuentra una propuesta de red entrenada bajo ese conjunto de datos que aporta muy buenos resultados. 

Para este caso concreto hemos hecho el desarrollo de un sistema en la nube que ofrece una API para poder enviar contenido y analizar si se trata de un Deepfake o es real. mecanismos actuales de detección. De hecho, con una propuesta de red entrenada bajo ese conjunto de datos que aporta muy buenos resultados. 

GCP para albergar un sistema de detección de deepfakes

Una vez descritas qué son los Deepfakes, las ventajas y desventajas que presentan así como una leve pincelada sobre los mecanismos de generación y detección empleando sobre todo técnicas de Deep learning, vamos a llevar a cabo la explicación de un sistema que se ha creado para poder llevar a cabo el análisis de Deepfakes. Este sistema se ha desarrollado como TFM para la titulación del Máster en Ingeniería Informática de la Universidad de Granada

Figura 5: GitHub con el código del DeepFake Detector del TFM

Se ha desarrollado también bajo la supervisión del equipo de Ideas Locas de Teléfonica por lo que, dentro del trabajo, se ha desarrollo una extensión para el programa FOCA que hace uso de la API creada. Esta extensión la explicaremos con mayor detalle en la siguiente sección. Por ahora, nos vamos a centrar en la arquitectura desarrollada en el sistema. Todo el código se encuentra en este repositorio de GitHub

Este sistema se basa en dos pilares fundamentales: Inteligencia Artificial y Cloud Computing. La primera de ellas, como he visto, abarca los algoritmos para detectar el contenido falso. De la segunda, aprovechamos las facilidades que ofrece relativas a infraestructura, potencia, disponibilidad de acceso, etcétera. Para el desarrollo a nivel de TFM se ha utilizado como proveedor de servicios a Google mediante la plataforma Google Cloud Platform. Sin embargo, como veremos, todas las funcionalidades se han encapsulado en un contenedor, por lo que llevarlo de un sistema a otro es relativamente sencillo.

Al ser sistema diseñado para ejecutarse en la nube, se ha seguido una aproximación Cloud Native para aprovechar todas la ventajas que nos ofrece el Cloud Computing:
  • Microservicios: Los diferentes algoritmos o funcionalidades se han implementado en microservicios distintos, lo que favorece el desarrollo independiente de los mismos evitando el solapamiento lo máximo posible. De este modo, se pueden utilizar diferentes lenguajes de programación, incluir mejoras sin afectar al resto de funcionalidades o realizar cambios. Además se pueden incluir otros algoritmos con unas pequeñas modificaciones sin afectar al resto. La comunicación entre los diferentes microservicios se realiza mediante llamadas HTTP.
  • Contenedores: cada microservicio es un contenedor (almacenado en Google Container Registry) definido en Dockerfile donde se encapsula el código con las dependencias del mismo lo que facilita su despliegue en diferentes ámbitos e incluso usarlo como entorno de test. Los Dockerfiles se encuentran dentro de las carpetas correspondientes a cada funcionalidad y que son accesibles fácilmente desde el README del repositorio.
  • CI/CD: para la integración y despliegue continuo se ha usado la herramienta de Google Cloud Build. De este modo, hay definidos una serie de tests que deben pasar cada uno de los microservicios se despliegue ya que de este modo se asegura el correcto funcionamiento del mismo. Este es el archivo con la definición del flujo de pruebas creado. A nivel general, para cada uno lo que se hacemos es descargar el contenedor correspondiente de GCR creado previamente, llevar a a cabo los nuevos tests (solo nos hacen falta las dependencias ya que el código nuevo se monta como volumen), usamos la caché para acelerar el proceso e incluir el nuevo código y finalmente desplegar el servicio.
  • DevOps: gracias a esta división de las funcionalidades, se hace más sencillo y rápido el proceso de la inclusión de mejoras, corrección de errores, etcétera. En los issues (cerrados) del repositorio podemos ver todo el proceso de desarrollo del trabajo.
Finalmente, ha sido importante el uso de sistemas sin servidor, conocido como Serverless. En nuestro caso, no necesitamos que los algoritmos se estén ejecutando continuamente, sino que una vez reciben de una petición, solo necesitan hacer los cálculos y devolver el resultado. Las ejecuciones son independientes unas de otras por lo que no necesitan mantener un estado global. En caso de querer almacenar información, podemos utilizar un servicio denominado caché y que explicaremos a continuación. En esta ocasión, hemos aprovechado los servicios de Google Cloud Run para ejecutar los algoritmos y de Google Functions para integrar los resultados del despliegue en el README del repositorio.

Figura 6: Arquitectura del sistema para detección de DeepFakes

Una vez vista la parte teórica del trabajo, pasamos a explicar los algoritmos incluidos y que sirven para detectar Deepfakes. Notamos que en el TFM no se ha llevado a cabo la implementación de dichos algoritmos sino que se han adaptado algunas ya propuestas. Además, toda la arquitectura del sistema junto con las relaciones de los mimos ser muestra en la siguiente figura.
  • api: ofrece la API de entrada al sistema y está desarrollada en Golang utilizando Gin como Web Framework. Su principal cometido es redirigir las peticiones de entrada a los diferentes algoritmos (se han implementado 4 algoritmos en total) con el objetivo de tener un único endpoint. También lleva un control de las peticiones por usuario haciendo uso de la caché. La definición completa de la API la podemos encontrar aquí aunque exploraremos las entradas de cada algoritmo más adelante.
  • faceforensics: para el análisis de vídeos se puede utilizar una red neuronal entrenada con el conjunto de datos de Faceforensics++. Se ha empleado como base la implementación de HonggLiu. Este algoritmo junto al resto, están desarrollados en Python, usando Flask como servidor HTTP. Para enviar un vídeo, se debe indicar la URL del vídeo que debe de estar subido a la plataforma Youtube.
  • kerasioimg: este servicio se encarga de análisis de imágenes. Sin embargo, el modelo para llevar a cabo la predicción lo puede entrenar el propio usuario. Esto es así ya que un parámetro de entrada es la dirección del modelo que se debe descargar y que debe de estar almacenado en la plataforma TensorflowHub. Este modelo debe seguir la versión 2 siguiendo el ejemplo de este modelo (entrenado para otros propósitos) ya subido a la plataforma. Además, se puede obtener una imagen siguiendo el algoritmo LIME con aquellas zonas de la imagen que han podido llevar al modelo a tomar una decisión u otra.
  • kerasio: este último modelo es para análisis de vídeos. Notamos que todavía no es funcional para llevar a cabo las predicciones de deepfakes al faltar el entrenamiento de la red para este problema en específico. Sin embargo, al englobarse dentro de un TFM se ha incluido para mostrar la versatilidad del sistema y por ser una propuesta muy interesante a explotar en el futuro. Utiliza una red neuronal con una parte recurrente para detectar las inconsistencias temporales de los vídeos ya que los fotogramas se suelen generar de manera independiente, lo que da lugar a incongruencias entre los mismos.
También se han implementado dos interfaces de usuario que hacen uso de la API, una en forma de extensión para FOCA que veremos en la siguiente entrada y una aplicación web para poder acceder al sistema desde cualquier navegador web, que se ha creado una web mediante React. En ella encontramos una página de inicio con una introducción a los Deepfakes y a los diferentes algoritmos que se pueden utilizar. Esta es una versión simplificada de los formularios por lo que no están disponibles todas las opciones.


Por último hemos creado un servicio caché que utiliza las funcionalidades de Google Firebase que nos proporciona una base de datos en tiempo real que la utilizamos para almacenar las peticiones por usuario y los resultados de algunas ejecuciones (almacenando el valor hash de cada archivo) para aliviar la carga del sistema. En el próximo articulo de mañana veremos la utilidad real del mismo viendo cómo usar el plugin para FOCA y donde exploraremos todas las posibilidades que ofrece.

Saludos

Autor: Pedro Flores

No hay comentarios:

Publicar un comentario