--- license: mit language: - es --- # Modelo de Reconocimiento Facial de Expresiones ## Descripción Este modelo ha sido entrenado para clasificar expresiones faciales en siete categorías: Enfadado, Disgustado, Miedo, Feliz, Triste, Sorprendido y Neutral. Es parte de un proyecto del curso de especialización en IA y Big Data, diseñado para demostrar el uso de modelos preentrenados y técnicas de Fine-Tuning en la clasificación de imágenes. ## Detalles del Modelo - **Arquitectura**: ResNet50 - **Dataset de Entrenamiento**: [FER2013](https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data) - **Número de Etiquetas**: 7 - **Tamaño de Imagen**: 224x224 - **Función de Activación de Salida**: Softmax - **Función de Pérdida**: CrossEntropyLoss - **Optimizador**: Adam - **Tasa de Aprendizaje**: 0.001 ## Transformaciones de Datos Durante el preprocesamiento, las imágenes se sometieron a las siguientes transformaciones: - **Resize**: 224x224 - **RandomHorizontalFlip**: True - **ColorJitter**: - Brillo: 0.2 - Contraste: 0.2 - Saturación: 0.2 - Tinte: 0.1 - **Normalize**: - Media: [0.485, 0.456, 0.406] - Desviación Estándar: [0.229, 0.224, 0.225] ## Mejoras Realizadas - **Congelación y Descongelación Selectiva de Capas**: Descongelamos las últimas capas de la red preentrenada para permitir un ajuste más fino. - **Early Stopping**: Implementamos early stopping para detener el entrenamiento cuando la precisión de validación dejaba de mejorar. - **Scheduler de Tasa de Aprendizaje**: Utilizamos un scheduler para reducir la tasa de aprendizaje durante el entrenamiento, ayudando a afinar el modelo. ## Resultados El modelo alcanzó los siguientes resultados durante el entrenamiento y validación: - **Train Accuracy**: ~97.5% - **Validation Accuracy**: ~61% - **Test Accuracy**: ~62.5% ## Uso del Modelo Para utilizar este modelo, puedes cargarlo y realizar predicciones en nuevas imágenes de la siguiente manera: ```python import torch from torchvision import models, transforms import json from PIL import Image # Cargar el modelo model = models.resnet50() model.load_state_dict(torch.load("pytorch_model.bin")) model.eval() # Configuración with open("config.json") as f: config = json.load(f) # Preprocesamiento de imágenes transform = transforms.Compose([ transforms.Resize((config["image_size"], config["image_size"])), transforms.ToTensor(), transforms.Normalize(mean=config["transformations"]["Normalize"]["mean"], std=config["transformations"]["Normalize"]["std"]) ]) # Ejemplo de uso con una imagen image = Image.open("ruta_a_tu_imagen.jpg") image = transform(image).unsqueeze(0) output = model(image) _, predicted = torch.max(output, 1) print("Predicted emotion:", predicted.item())