Este proyecto implementa un sistema completo de Reconocimiento de Emociones Faciales (FER) que entrena y evalúa 9 familias de modelos de aprendizaje profundo sobre el dataset RAF-DB (Real-world Affective Faces Database) con 7 emociones básicas: Sorpresa, Miedo, Disgusto, Felicidad, Tristeza, Ira y Neutral.
Opción A: Usando Conda / Anaconda (Recomendado - Evita errores en Windows)
Si utilizas Anaconda o Miniconda, ejecuta el siguiente comando en tu terminal (Anaconda Prompt) para crear un entorno virtual e instalar todas las dependencias pre-compiladas (incluyendo controladores CUDA de GPU):
Opción B: Usando pip estándar
Si prefieres usar pip de Python directo:
pip install -r requirements.txt
💡 Solución de problemas (Windows): Si al instalar por pip obtienes un error relacionado con la compilación de stringzilla (como Microsoft Visual C++ 14.0 or greater is required), puedes solucionarlo ejecutando:
pip install "stringzilla<3.10"
Paso 3: Descomprimir el dataset RAF-DB (Ya incluido)
El dataset ya viene incluido en el repositorio en dataset/Archive(2).zip (~39.5 MB). Solo debes descomprimirlo dentro de la carpeta dataset/raw/.
🔬 Reproducción del Estudio de Ablación (Paso a Paso E1 a E6)
Para evaluar cuantitativamente el impacto de cada componente metodológico sobre el modelo líder (POSTER++), se pueden ejecutar secuencialmente los siguientes 6 experimentos de ablación controlada:
Experimento
Configuración Metodológica
Accuracy (%)
$\Delta$ Acc
F1-Score Macro
$\Delta$ F1
E1
Línea Base (Sin Regularización)
78.20 ± 0.45%
Línea Base
0.6950 ± 0.012
Línea Base
E2
+ Alineación Geométrica MTCNN
80.12 ± 0.40%
+1.92%
0.7210 ± 0.010
+0.0260
E3
+ Pesos de Clase Balanceados
81.05 ± 0.42%
+0.93%
0.7380 ± 0.011
+0.0170
E4
+ MixUp ($\alpha=0.2$)
83.20 ± 0.38%
+2.15%
0.7610 ± 0.009
+0.0230
E5
+ CutMix ($\alpha=0.35$)
84.50 ± 0.35%
+1.30%
0.7790 ± 0.008
+0.0180
E6
+ Mecanismo SCN (Atenuación Ruido)
85.63 ± 0.38%
+1.13%
0.7917 ± 0.008
+0.0127
💻 Comandos CLI para Reproducir cada Experimento de Ablación:
Scheduler: CosineAnnealingLR (épocas ≥ 45) o ReduceLROnPlateau
Mixed Precision: torch.amp.GradScaler para reducir VRAM
Early Stopping: paciencia de 30 épocas
Escenarios de Entrenamiento
Escenario
Descripción
Scratch
Todas las capas entrenables. Pesos iniciales de VGGFace2 (modelos faciales) o ImageNet (CNNs)
Transfer Learning
Backbone completamente congelado. Solo se entrena la cabeza clasificadora
Fine-Tuning
Backbone congelado excepto el último bloque (block8/layers[-1]/blocks[-1])
📱 Despliegue en Android
Los modelos exportados para Android se encuentran en PARA_ANDROID_STUDIO/:
Archivos .ptl (PyTorch Lite) para PyTorch Mobile
Archivos .onnx para ONNX Runtime
kotlin
1// Ejemplo de uso en Android (Kotlin)2val module = LiteModuleLoader.load("poster_v2.ptl")3val inputTensor = TensorImageUtils.bitmapToFloat32Tensor(4 bitmap,floatArrayOf(0.485f,0.456f,0.406f),5floatArrayOf(0.229f,0.224f,0.225f)6)7val output = module.forward(IValue.from(inputTensor)).toTensor()
🔬 Modelos SOTA Implementados
POSTER++ (Poster V2) - 🥇 Campeón (85.63%)
Red híbrida que usa 68 landmark queries aprendibles (sin detector explícito) y atención bidireccional (Image→Landmarks→Image) sobre un backbone InceptionResnetV1 pre-entrenado en VGGFace2.
QCS (Quadruplet Cross-Similarity) - 🥈 (84.91%)
Usa Cross-Similarity Attention que durante el entrenamiento cruza features de diferentes muestras del batch mediante torch.roll(), forzando representaciones discriminativas. En inferencia usa self-attention.
SwinFace (Swin Transformer + CBAM) - (69.39%)
Backbone Swin Transformer con ventanas desplazadas (W-MSA/SW-MSA), extracción multi-escala (local 1344ch + global 768ch = 2112ch), CBAM (Channel + Spatial attention) y TaskSpecificSubnet.
DeiT (Data-efficient Image Transformer)
Vision Transformer con destilación via timm. Usa deit_tiny_patch16_224 (5.7M params) optimizado para datasets pequeños.
⚡ Optimización de Hardware
Este proyecto fue diseñado para funcionar en GPUs de gama portátil (RTX 3050 con 4GB VRAM):
Técnica
Ahorro
Congelamiento selectivo de capas
VRAM: 3.2GB → 1.2GB (62%)
Mixed Precision (FP16)
Velocidad: 3x más rápido
Batch size optimizado (32)
Estabilidad de gradientes
DataLoader sin workers (Windows)
Compatibilidad sin deadlocks
📄 Documentación
El directorio DOCUMENTACION/ contiene:
Resultados del Proyecto de Reconocimiento de Emociones (1).docx: Registro completo de avance con 12 figuras, 2 tablas, análisis descriptivos y 12 anexos de código fuente