Proyecto del Máster en Ingeniería de Telecomunicaciones - Asignatura de Reconocimiento Biométrico - EPS/UAM
Este proyecto implementa y evalúa sistemas de detección de DeepFakes utilizando técnicas de aprendizaje profundo (Deep Learning) con Redes Neuronales Convolucionales (CNNs) en el entorno MATLAB. Se exploran análisis intra-database e inter-database utilizando arquitecturas como AlexNet y una CNN personalizada.
Desarrollado por:
El objetivo es desarrollar y evaluar sistemas de detección de DeepFakes. El proyecto se divide en tres tareas principales:
- Task 1 - Análisis Intra-Database: Desarrollo y evaluación de un sistema de detección de DeepFakes utilizando la base de datos UADFV. Se emplea transfer learning con una red AlexNet modificada.
- Task 2 - Análisis Inter-Database: Evaluación del modelo entrenado en la Tarea 1 sobre una base de datos diferente (Celeb-DF) para analizar su capacidad de generalización.
- Task 3 - Propuesta de Mejora (Inter-Database): Implementación de una nueva arquitectura CNN personalizada y entrenamiento con una base de datos ampliada (UADFV + imágenes espejo) para mejorar los resultados en el análisis inter-database sobre Celeb-DF.
El proyecto incluye un script de preprocesamiento (encontrar_caras.m) para detectar y recortar rostros de las imágenes, que luego son utilizados para entrenar y evaluar los modelos.
- Lenguaje y Entorno: MATLAB (R2024b o similar)
- Toolboxes de MATLAB:
- Deep Learning Toolbox (para AlexNet, capas de CNN, entrenamiento)
- Image Processing Toolbox (para
imcrop,imread, etc.) - Computer Vision Toolbox (o similar, para
vision.CascadeObjectDetector)
- Arquitecturas CNN: AlexNet (modificada), CNN personalizada.
- Técnicas: Transfer Learning, Data Augmentation (espejo).
+-- .gitignore
+-- LICENSE
+-- README.md
+-- data/
| +-- Task1/
| | +-- development_cropped/ (Caras recortadas de UADFV para entrenamiento de Task 1)
| | | +-- fake/
| | | +-- real/
| | +-- evaluation_cropped/ (Caras recortadas de UADFV para evaluación de Task 1)
| | | +-- fake/
| | | +-- real/
| +-- Task2/
| | +-- cropped_faces/ (Caras recortadas de Celeb-DF para entrenamiento de Task 2)
| | | +-- fake/
| | | +-- real/
| | +-- evaluation/ (Dataset Celeb-DF original para evaluación de Task 2)
| | | +-- fake/
| | | +-- real/
| +-- Task3/
| | +-- development_cropped/ (Caras recortadas para entrenamiento de Task 3)
| | | +-- fake/
| | | +-- real/
| | +-- evaluation_cropped/ (Caras recortadas para evaluación de Task 3)
| | | +-- fake/
| | | +-- real/
+-- code/
| +-- encontrar_caras.m (Script de preprocesamiento para recortar caras)
| +-- Task_1.m (Script para la Tarea 1: AlexNet en UADFV)
| +-- Task_2.m (Script para la Tarea 2: Modelo de Tarea 1 en Celeb-DF)
| +-- Task_3.m (Script para la Tarea 3: CNN personalizada)
+-- models/
| +-- AlexNet_task2.mat (Modelo entrenado en Task 1 y usado en Task 2)
| +-- AlexNet_task3.mat (Modelo entrenado en la Task3)
+-- docs/
| +-- DeepFakes_Detection_Lab_Report.pdf (Informe detallado del proyecto)
+-- ...
Para obtener una copia local de este proyecto, clone el repositorio usando Git:
git clone https://github.com/MiguelCarra/deepfake-detection-matlab.git
cd deepfake-detection-matlab- MATLAB (versión R2024b o posterior recomendada).
- Toolboxes de MATLAB:
- Deep Learning Toolbox
- Deep Learning Toolbox Model for AlexNet Network Support Package (Para Task 1 y Task 2. Se puede instalar desde el Add-Ons Explorer de MATLAB).
- Image Processing Toolbox
- Computer Vision Toolbox (o el toolbox que provea
vision.CascadeObjectDetector)
Este repositorio incluye las bases de datos con caras ya recortadas y los modelos pre-entrenados necesarios para replicar los resultados del informe.
-
Datos Preprocesados:
- Las imágenes con rostros recortados para Task 1 se encuentran en:
data/Task1/development_cropped/(entrenamiento/desarrollo UADFV, sin data augmentation)data/Task1/evaluation_cropped/(evaluación UADFV)
- Las imágenes con rostros recortados para entrenamiento de Task 3 (UADFV con data augmentation de espejo) se encuentran en:
data/Task3/development_cropped/
- Las imágenes con rostros recortados para evaluación de Task 2 y Task 3 (provenientes de Celeb-DF) se encuentran en:
data/Task2/cropped_faces/
- Las imágenes con rostros recortados para Task 1 se encuentran en:
-
Modelo Pre-entrenado para Task 2:
- El modelo entrenado por
Task_1.my necesario paraTask_2.mestá disponible enmodels/AlexNet_task2.mat. - Si ejecuta
Task_1.m, este generará un nuevo modelo. Para usarlo enTask_2.m, deberá guardarlo/renombrarlo comoAlexNet_task2.maten la carpetamodels/. Si no desea re-entrenar Task 1, puede usar directamente el modelo provisto.
- El modelo entrenado por
Con estos datos y modelos, puede proceder directamente a la sección "Ejecución de las Tareas".
Si desea generar sus propias bases de datos a partir de los datasets originales UADFV y Celeb-DF, siga estos pasos:
4.1. Descarga de Datasets Originales:
- Este repositorio no incluye los datasets originales UADFV y Celeb-DF debido a su tamaño.
- Dataset UADFV (para Task 1 y Task 3):
- Descargue el dataset UADFV.
- Dentro de la carpeta
data/Task1/(créela si no existe en la raíz del proyecto), cree las subcarpetasdevelopment_originalyevaluation_original. - Dentro de
data/Task1/development_original/, cree subcarpetasfake/yreal/y coloque las imágenes de entrenamiento/desarrollo UADFV correspondientes. - Dentro de
data/Task1/evaluation_original/, cree subcarpetasfake/yreal/y coloque las imágenes de evaluación UADFV correspondientes.
- Dataset Celeb-DF (para Task 2 y Task 3):
- Descargue el dataset Celeb-DF.
- Dentro de la carpeta
data/Task2/(créela si no existe), cree una subcarpetaceleb_df_original(o el nombre que prefiera para los datos crudos). - Dentro de
data/Task2/celeb_df_original/, cree subcarpetasfake/yreal/y coloque los vídeos o imágenes de Celeb-DF correspondientes. Nota:encontrar_caras.mestá configurado para procesar imágenes. Si descarga vídeos, deberá extraer los frames previamente.
4.2. Preprocesamiento de Caras Recortadas con encontrar_caras.m:
El script code/encontrar_caras.m se encarga de detectar y recortar rostros. Deberá ejecutarlo configurándolo adecuadamente para cada conjunto de datos. Asegúrese de estar en la carpeta code/ al ejecutarlo.
-
Para Task 1 (Entrenamiento/Desarrollo UADFV - SIN Data Augmentation):
- Modifique
encontrar_caras.m:evalFolder = fullfile('..', 'data', 'Task1', 'development_original');outputFolder = fullfile('..', 'data', 'Task1', 'development_cropped');
- Asegúrese de que las líneas de data augmentation (espejo) estén comentadas.
- Ejecute el script. Las caras recortadas se guardarán en
data/Task1/development_cropped/.
- Modifique
-
Para Task 1 (Evaluación UADFV):
- Modifique
encontrar_caras.m:evalFolder = fullfile('..', 'data', 'Task1', 'evaluation_original');outputFolder = fullfile('..', 'data', 'Task1', 'evaluation_cropped');
- Asegúrese de que las líneas de data augmentation (espejo) estén comentadas.
- Ejecute el script. Las caras recortadas se guardarán en
data/Task1/evaluation_cropped/.
- Modifique
-
Para Task 3 (Entrenamiento/Desarrollo UADFV - CON Data Augmentation):
- Modifique
encontrar_caras.m:evalFolder = fullfile('..', 'data', 'Task1', 'development_original');(usa el mismo origen que Task 1 dev)outputFolder = fullfile('..', 'data', 'Task3', 'development_cropped');(guarda en la carpeta específica de Task 3)
- Asegúrese de descomentar las líneas relevantes para aplicar data augmentation (espejo).
- Ejecute el script. Las caras recortadas y aumentadas se guardarán en
data/Task3/development_cropped/.
- Modifique
-
Para Task 2 y Task 3 (Evaluación Celeb-DF):
- Modifique
encontrar_caras.m:evalFolder = fullfile('..', 'data', 'Task2', 'celeb_df_original');(o la ruta donde guardó Celeb-DF)outputFolder = fullfile('..', 'data', 'Task2', 'cropped_faces');
- Asegúrese de que las líneas de data augmentation (espejo) estén comentadas.
- Ejecute el script. Las caras recortadas se guardarán en
data/Task2/cropped_faces/.
- Modifique
Tras estos pasos, tendrá las siguientes carpetas con sus datos procesados listos para ser usados por los scripts de las tareas:
data/Task1/development_cropped/(UADFV desarrollo, sin augmentation)data/Task1/evaluation_cropped/(UADFV evaluación)data/Task3/development_cropped/(UADFV desarrollo, con augmentation)data/Task2/cropped_faces/(Celeb-DF evaluación)
Todos los scripts deben ejecutarse desde MATLAB, teniendo la carpeta code/ como directorio actual.
-
Ejecutar Tarea 1 (
Task_1.m):- Utiliza los datos de
data/Task1/development_cropped/para entrenar ydata/Task1/evaluation_cropped/para evaluar. - Entrenará la AlexNet modificada.
- Guardará el modelo entrenado (ej.
trainedNet). Si desea usar este nuevo modelo para la Tarea 2, recuerde mover/renombrar este modelo a../models/AlexNet_task2.mat. - Mostrará curvas ROC y métricas de rendimiento.
- Utiliza los datos de
-
Ejecutar Tarea 2 (
Task_2.m):- Carga el modelo desde
../models/AlexNet_task2.mat(ya sea el provisto o el que usted generó y guardó desde Task 1). - Utiliza los datos de
data/Task2/cropped_faces/para la evaluación inter-database. - Mostrará la curva ROC y métricas de rendimiento.
- Carga el modelo desde
-
Ejecutar Tarea 3 (
Task_3.m):- Utiliza los datos de
data/Task3/development_cropped/(UADFV con data augmentation) para entrenar la CNN personalizada. - Utiliza los datos de
data/Task2/cropped_faces/para la evaluación. - Mostrará curvas ROC y métricas de rendimiento. El modelo entrenado puede ser guardado si modifica el script.
- Utiliza los datos de
Los resultados detallados, incluyendo métricas de exactitud, AUC, y las curvas ROC para cada tarea, se encuentran en el Informe Completo del Laboratorio.
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.