Métricas finales
mAP@50 (val)
0.784
vs. YOLO base: +8.6%
mAP@50:95 (val)
0.631
Mejor época: 30 / 30
Tiempo GPU
2h 34m
Hardware: t4-small
Coste total
1.03€
Presupuesto usado: 4.1% de 25€
Curvas de entrenamiento (Trackio)
mAP@50 por época — train vs. validation
Train mAP@50
Val mAP@50
Objetivo mínimo
e1: 0.14
e5: 0.31
e10: 0.48
e15: 0.61
e20: 0.70
e25: 0.75
e30: 0.784 ★
Training Loss — convergencia
Total Loss (GIoU + Classification)
Convergencia estable sin overfitting. D-FINE-Small alcanza plateau en época 25. Early stopping no activado — mejora marginal hasta época 30.
mAP por clase — época 30 (validation)
| Clase | mAP@50 | mAP@50:95 | Precisión | Recall | Rendimiento | Muestras val. |
|---|---|---|---|---|---|---|
| lácteos | 0.841 | 0.672 | 0.863 | 0.812 | 48 | |
| bebidas | 0.828 | 0.661 | 0.847 | 0.801 | 62 | |
| snacks | 0.812 | 0.648 | 0.834 | 0.789 | 55 | |
| higiene | 0.798 | 0.631 | 0.821 | 0.776 | 34 | |
| conservas | 0.783 | 0.624 | 0.811 | 0.762 | 41 | |
| pan | 0.771 | 0.612 | 0.795 | 0.748 | 29 | |
| limpieza | 0.762 | 0.608 | 0.783 | 0.738 | 38 | |
| fruta | 0.758 | 0.601 | 0.779 | 0.732 | 44 | |
| charcutería | 0.742 | 0.589 | 0.764 | 0.718 | 31 | |
| carne | 0.731 | 0.581 | 0.754 | 0.709 | 27 | |
| congelados | 0.724 | 0.578 | 0.748 | 0.701 | 22 | |
| varios | 0.698 | 0.556 | 0.721 | 0.678 | 39 ⚠️ | |
| MEDIA | 0.784 | 0.631 | 0.810 | 0.764 | 470 |
⚠️ Clase
varios por debajo de media (mAP 0.698) — considerar añadir más ejemplos en próxima iteración o dividir en subcategorías.
Configuración del job
Modelo base
ustc-community/dfine-small-coco
Dataset
visionretail/supermarket-shelf-products
Hardware
t4-small (1× T4, 16GB)
Timeout
4h (14400s)
Épocas
30
Image size
640×640
Batch size
8 (por device)
Learning rate
5e-5
Dataset Inspector — visionretail/supermarket-shelf-products
Columna objects
READY — bbox + category detectados
Formato bbox
READY — xywh (COCO) detectado y convertible
Categories
READY — 12 clases string → int remapping OK
Split train/val
READY — 3780 train / 420 val ya existentes
image_id column
WARN — no existe, generado automáticamente
t4-small
NVIDIA T4 · Suficiente para D-FINE-Small (10.4M params)
GPU
1× NVIDIA T4 · 16 GB VRAM
CPU
8 vCPUs · 32 GB RAM
Precio
$0.40/hr
Duración
2h 34min (2.57h)
💶 Coste real: 1.03€ / presupuesto 25€
Código de envío del job
# ── Fine-tuning D-FINE-Small para VisionRetail SL ────────────────────────── # Objetivo: detección de productos en lineales · mAP@50 objetivo > 0.72 # Ejecutado: 2026-06-14 09:15:23 UTC · Job ID: 687fb701029421ae5549d998 from huggingface_hub import HfApi, get_token api = HfApi() OD_SCRIPT_ARGS = [ "--model_name_or_path", "ustc-community/dfine-small-coco", "--dataset_name", "visionretail/supermarket-shelf-products", "--image_square_size", "640", "--output_dir", "shelf_detector_dfine", "--run_name", "visionretail-shelf-v1", "--num_train_epochs", "30", "--per_device_train_batch_size", "8", "--learning_rate", "5e-5", "--eval_strategy", "epoch", "--save_strategy", "epoch", "--save_total_limit", "2", "--load_best_model_at_end", "--metric_for_best_model", "eval_map", "--greater_is_better", "True", # Optional[bool] → valor explícito OBLIGATORIO "--no_remove_unused_columns", # OBLIGATORIO: preserva columna imagen "--no_eval_do_concat_batches", # OBLIGATORIO: targets variables por imagen "--push_to_hub", # OBLIGATORIO: entorno efímero "--hub_model_id", "visionretail/shelf-detector-dfine-small", "--do_train", "--do_eval", ] job_info = api.run_uv_job( script="scripts/object_detection_training.py", script_args=OD_SCRIPT_ARGS, flavor="t4-small", timeout=14400, # 4h — buffer suficiente para 30 épocas + Hub push env={"PYTHONUNBUFFERED": "1"}, secrets={"HF_TOKEN": get_token()}, # get_token(), NO "$HF_TOKEN" con Python API ) print(f"✅ Job ID: {job_info.id}") print(f"📊 Trackio: https://huggingface.co/spaces/visionretail/trackio") print(f"🤗 Hub: https://huggingface.co/visionretail/shelf-detector-dfine-small")
Hub Model + Log del job
🤗 visionretail/shelf-detector-dfine-small
Modelo publicado automáticamente al finalizar el job. Listo para inferencia con Transformers pipeline.
object-detection
D-FINE-Small
transformers
es
retail
supermarket
Tamaño: 10.4M params · FP32: 39.7 MB · ONNX compatible ✓
INFERENCIA RÁPIDA
from transformers import pipeline
detector = pipeline(
"object-detection",
"visionretail/shelf-detector-dfine-small"
)
results = detector("shelf_image.jpg")
Comparativa vs modelo anterior
| Modelo | mAP@50 | Error rate prod. | Params | Latencia |
|---|---|---|---|---|
| YOLOv8-n (anterior) | 0.697 | 28% | 3.2M | 4.2ms |
| D-FINE-Small (nuevo) | 0.784 | ~11%* | 10.4M | 8.1ms |
* Estimado basado en correlación mAP↔error rate en producción
Log del job — 2026-06-14
09:15:23
✅ Job enviado
ID: 687fb701029421ae5549d998 · flavor: t4-small
09:17:41
✅ GPU asignada — T4 16GB ready
Imagen Docker inicializada · Python 3.11 · uv 0.4.1
09:19:05
✅ Dependencias instaladas
transformers, albumentations, timm, trackio — 94s
09:20:12
✅ Dataset descargado y validado
3780 train + 420 val · bbox xywh→xyxy convertido · image_id generado
09:21:08
✅ Modelo base cargado
ustc-community/dfine-small-coco · 10.4M params · FP32
09:21:09
🟦 Trackio inicializado
Proyecto: shelf_detector_dfine · Run: visionretail-shelf-v1
09:21:15
✅ Entrenamiento iniciado
Época 1/30 · Steps por época: ~473
10:42:30
⚠️ Época 15 — mAP@50: 0.614
Por debajo de objetivo. Continúa entrenamiento — convergencia esperada
11:24:17
✅ Época 20 — mAP@50: 0.701
Supera objetivo mínimo 0.72 faltando 10 épocas
11:49:52
✅ Época 30 — mAP@50: 0.784 🏆
Best checkpoint guardado · hub_strategy: every_save
11:51:38
✅ Modelo pusheado al Hub
visionretail/shelf-detector-dfine-small · 39.7MB
11:52:04
✅ Job completado
Duración: 2h 36min · Coste: $1.03 · Status: COMPLETED
Próximos pasos recomendados
🔧
Export a ONNX
Convertir a ONNX con optimum para despliegue en Raspberry Pi 5 + Coral TPU. Latencia estimada en edge: ~15ms con cuantización INT8.
ONNX
Edge AI
📊
Mejorar clase "varios"
Clase
varios con mAP 0.698 — añadir 150+ imágenes o subdividir en subcategorías (perfumería, papelería). Nueva iteración: ~0.5h GPU.
Data augmentation
🚀
Inferencia en producción
Desplegar vía FastAPI + Transformers pipeline. Añadir post-procesado NMS con threshold 0.35. El modelo está listo en Hub para descarga directa.
FastAPI
Producción