Backend para scoring visual de imágenes interiores usando embeddings CLIP + modelo de ranking, con salida explicable (caption + review) y exposición vía API/Gradio.
- Python 3.10+ (recomendado 3.10/3.11)
- (Opcional) GPU CUDA para acelerar inferencia
Como no hay requirements.txt en el estado actual del repo, instala dependencias con:
pip install fastapi uvicorn python-multipart
pip install numpy pandas scikit-learn joblib pyarrow
pip install pillow opencv-python requests
pip install torch transformers
pip install open_clip_torch ultralytics
pip install gradio
pip install matplotlib seabornpython backend/pipeline/dataset_pipeline.pyFlujo que ejecuta:
- Descarga incremental de imágenes Kaggle prefiltradas
- Filtro visual + filtro semántico YOLO
- Creación/actualización de
interior_final_candidates.csv - Etiquetado humano interactivo (teclas:
1=bad,2=medium,3=good,ESCpara salir) - Extracción de embeddings CLIP
- Entrenamiento (
training_pipeline)
python backend/pipeline/dataset_pipeline.py --autoEste modo usa auto-labeling cuando existe:
backend/models/quality_head.joblib
Este modo no modifica el entrenamiento, solo añade análisis visual al finalizar el pipeline.
Genera automáticamente:
- Histograma de
room_score - Scatter
indoor_scorevsroom_score - Distribución
quality_bucket - Histograma de
auto_confidence
Ideal para validar que el auto-learning no introduce sesgos.
-
Distribución
room_score
Permite verificar si el filtro semántico está siendo demasiado estricto o permisivo. -
Indoor vs Room Score
Visualiza cómo el filtro YOLO afecta al scoring interior. -
Quality Buckets
Ayuda a detectar desbalance entre clases:badmediumgood
-
Auto Confidence
Muestra cómo se distribuye la confianza del modelo durante el auto-labeling.
Confirma que se generaron/actualizaron:
backend/models/pairwise_ranker.joblibbackend/models/quality_head.joblibbackend/data/embeddings/human_embeddings.parquet(modo humano)backend/data/embeddings/auto_round_embeddings.parquet(modo auto)
- Ejecuta estos comandos desde la raíz del repo.
- El modo humano abre ventanas con OpenCV (
cv2.imshow), por lo que requiere entorno con UI. - La primera ejecución puede ser lenta por carga de modelos y descarga de datos.
- Las gráficas son solo visualización y no afectan al entrenamiento.
En otra terminal:
setx HF_TOKEN "TU_TOKEN_HUGGINGFACE"
python -m backend.api.visual_appTienes 2 opciones de acceso en backend/api/visual_app.py:
- Opción A (local):
share=False→ solo http://127.0.0.1:7860 - Opción B (enlace temporal):
share=True→ URL pública temporal*.gradio.live
Nota: en este proyecto actualmente está configurado con share=True.
Sí, en la mayoría de casos conviene tener ambas porque cumplen funciones distintas:
- API (FastAPI): integración con app móvil/web, automatizaciones y consumo programático.
- App visual (Gradio): pruebas rápidas, demos y validación manual de resultados.
- El sistema usa CLIP embeddings + ranking model como núcleo.
- El Visual Critic genera explicación textual sin afectar al scoring.
- La primera carga puede tardar por descarga de modelos (BLIP, CLIP, YOLO).
- Después de la primera ejecución, los modelos se cargan desde cache local.
- El backend está preparado para consumo desde app móvil, web o cliente desktop.