Sistema de recomendación de ropa basado en similitud visual usando redes neuronales convolucionales (MobileNetV2 + ResNet50) con fine-tuning y transferencia de aprendizaje.
El sistema extrae embeddings visuales de imágenes de prendas y recomienda las más similares usando similitud coseno.
- Dos modelos CNN con fine-tuning: MobileNetV2 (ligero) y ResNet50 (robusto)
- Modo combinado: Concatena embeddings de ambos modelos para mayor precisión
- Interfaz web interactiva con Streamlit
- Dos modos de uso: Subir tu propia imagen o navegar el catálogo
- Filtrado por categoría: T-Shirts, Shirts, Pants, Shorts, Shoes, Sneakers
- Pre-cómputo de features: Arranque rápido sin re-extraer embeddings
App_recomendacion_ropa/
├── app.py # App de Streamlit (interfaz web)
├── requirements.txt # Dependencias del proyecto
├── README.md
├── assets/ # Imágenes y GIFs del proyecto
├── data/
│ └── clothes/
│ ├── train/ # Imágenes de entrenamiento por categoría
│ └── test/ # Imágenes de test por categoría
├── models/
│ ├── mobilenet_finetuned.keras # Modelo MobileNetV2 entrenado
│ ├── resnet_finetuned.keras # Modelo ResNet50 entrenado
│ ├── features_mobilenet.pkl # Embeddings pre-computados
│ ├── features_resnet.pkl
│ ├── features_combined.pkl
│ ├── metadata.pkl # Metadata de las imágenes
│ ├── class_names.json
│ ├── training_metrics.json
│ └── plots/ # Gráficas de entrenamiento
├── notebooks/
│ └── exploration.ipynb # Notebook de exploración y entrenamiento
└── src/
├── __init__.py
├── data_loader.py # Descarga y carga del dataset
├── feature_extractor.py # Extracción de features con CNNs
├── train.py # Pipeline de entrenamiento
├── build_index.py # Pre-cómputo del índice de features
├── recommender.py # Lógica de recomendación
└── utils.py # Funciones utilitarias
pip install -r requirements.txtPuedes hacerlo de dos formas:
Opción A: Usando el notebook (recomendado para exploración)
jupyter notebook notebooks/exploration.ipynbOpción B: Usando los scripts directamente
# Paso 1: Entrenar modelos (descarga el dataset automáticamente)
cd src
python train.py
# Paso 2: Pre-computar features
python build_index.pystreamlit run app.pyImagen de entrada
│
▼
┌──────────────┐ ┌──────────────┐
│ MobileNetV2 │ │ ResNet50 │
│ (fine-tuned) │ │ (fine-tuned) │
└──────┬───────┘ └──────┬───────┘
│ 256-d │ 512-d
└────────┬───────────┘
│ Concatenar
▼
Vector 768-d (combinado)
│
▼
Similitud Coseno vs Catálogo
│
▼
Top-N Recomendaciones
- Transfer Learning: Se cargan MobileNetV2 y ResNet50 preentrenados en ImageNet con las capas base congeladas
- Fine-tuning: Se descongelan las últimas capas y se re-entrenan con learning rate bajo
- Data Augmentation: Rotación, flip horizontal, zoom y desplazamiento para compensar el dataset pequeño (~300 imágenes)
- Evaluación: Accuracy, matriz de confusión y reporte por categoría
- Fuente: Kaggle - Clothes Dataset
- Categorías: T-Shirts, Shirts, Pants, Shorts, Shoes, Sneakers (6 clases)
- Tamaño: ~300 imágenes organizadas en train/test
| Componente | Tecnología |
|---|---|
| Deep Learning | TensorFlow / Keras |
| Modelos | MobileNetV2, ResNet50 |
| ML clásico | scikit-learn (cosine similarity) |
| Interfaz | Streamlit |
| Datos | pandas, numpy |
| Visualización | matplotlib, seaborn |
| Dataset | kagglehub |
Este proyecto está bajo la Licencia MIT.
