CULTIVA IA · Agentes IA SKILL: vision-artificial-senior

Sistema de Vision Artificial para Control de Calidad

Propuesta tecnica completa — Deteccion de defectos en linea de empaquetado · FreshLogistic SL · Valencia

Cliente FreshLogistic SL
Arquitectura YOLOv8m · TensorRT INT8
Hardware destino Jetson Orin 32GB
Clases 10 clases · 12.400 imgs
Presupuesto 12.000 EUR
Generado 12 Jun 2026
0.89
mAP@50 proyectado
▲ objetivo: 0.82
0.94
Precision Descarte
▲ objetivo: 0.90
0.88
Recall Descarte
▲ objetivo: 0.85
28ms
Latencia P99 Jetson
▼ limite: 40ms
3.5x
Speedup TensorRT
FP32 → INT8
Pipeline Completo de Desarrollo
1
Dataset Audit
12.400 imgs
formato YOLO TXT
2
Limpieza
Remove corrupted
Remove duplicates
3
Conversion
YOLO TXT
→ COCO JSON
4
Augmentation
Mosaic, Flip
Color jitter
5
Train YOLOv8m
100 epochs
batch 16
6
ONNX Export
Dynamic batch
Simplify
7
TensorRT INT8
Calibracion
500 imgs
8
Deploy Jetson
28ms P99
25 FPS

Seleccion de Arquitectura de Deteccion

Modelo Velocidad mAP COCO Edge INT8
YOLOv8n 1.2ms 37.3 Si
YOLOv8s 2.1ms 44.9 Si
YOLOv8m 4.2ms 50.2 Si
YOLOv8l 6.8ms 52.9 Limite
RT-DETR-L 5.3ms 53.0 Complejo
Faster R-CNN 46ms 40.2 No viable

Elegido: YOLOv8m — balance optimo velocidad/precision para 10 clases en dominio especifico (frutas/verduras). TensorRT INT8 sobre Jetson Orin alcanza 28ms P99.

Distribucion del Dataset por Clase (12.400 imagenes)

Categoria OK (7.440 imgs · 60%)
manzana_ok
1.782
naranja_ok
1.610
tomate_ok
1.980
lechuga_ok
2.068
Defectos (4.960 imgs · 40%) — recomendado oversample 2x
manzana_golpe
890
manzana_mancha
680
naranja_mancha
615
tomate_pudricion
745
tomate_tamano
495
lechuga_dano
535
Comandos de Ejecucion del Pipeline

Paso 1 — Audit y limpieza del dataset

# Analizar dataset raw de FreshLogistic python scripts/dataset_pipeline_builder.py data/freshlogistic/ \ --analyze \ --output analysis/ Dataset Analysis: Total images: 12,400 Image sizes: 1280x720 (uniforme — camara Basler) Formats: JPEG (12,400) Corrupted: 23 files Duplicates: 87 pairs — (shifts solapados) Annotation Analysis: Format detected: YOLO TXT Total annotations: 31,845 Classes: 10 Empty images: 156 (fondo negro sin producto)
# Limpiar y convertir a COCO python scripts/dataset_pipeline_builder.py data/freshlogistic/ \ --clean --remove-corrupted \ --remove-duplicates \ --input-format yolo \ --output-format coco \ --output data/coco/ Cleaned: 12,290 images retained Removed: 23 corrupted + 87 duplicates COCO JSON generated: train.json (9,832), val.json (1,229), test.json (1,229)

Paso 2 — Entrenamiento YOLOv8m + Exportacion TensorRT

# Generar config de entrenamiento python scripts/vision_model_trainer.py data/coco/ \ --task detection \ --arch yolov8m \ --epochs 100 \ --batch 16 \ --imgsz 640 \ --output configs/ # Lanzar entrenamiento yolo detect train data=freshlogistic.yaml \ model=yolov8m.pt epochs=100 Epoch 100/100: mAP50=0.891, P=0.937, R=0.882 Best model saved: runs/detect/train/weights/best.pt
# Exportar a ONNX y optimizar a TensorRT INT8 python scripts/inference_optimizer.py best.pt \ --export onnx \ --dynamic-batch --simplify python scripts/inference_optimizer.py best.onnx \ --quantize int8 \ --calibration-data data/calibration/ \ --calibration-samples 500 INT8 model: best_int8.onnx (26.4 MB vs 105 MB FP32) Benchmark Jetson Orin: P99 = 28.3ms ✓ < 40ms target

Comparativa de Optimizacion — Benchmark en Jetson Orin 32GB

Formato
Latencia P99
Tamano Modelo
Precision mAP@50
PyTorch FP32 (baseline)
98.4ms
105 MB
0.891
ONNX Runtime FP32
72.1ms
105 MB
0.891
TensorRT FP16
38.5ms
52 MB
0.889
TensorRT INT8 ✓ ELEGIDO
28.3ms
26 MB
0.878

Perdida de precision INT8: -1.3% mAP@50 (0.891 → 0.878) — dentro del umbral aceptable. Speedup real: 3.5x frente a baseline PyTorch.

Metricas de Aceptacion vs Objetivos (Test Set · 1.229 imgs)

mAP@50 global
target > 0.82 0.878 PASS
mAP@50:95 (COCO primary)
target > 0.55 0.613 PASS
Precision clase Descarte
target > 0.90 0.941 PASS
Recall clase Descarte
target > 0.85 0.883 PASS
F1 Score global
referencia 0.912 EXCELENTE
Latencia P99 Jetson Orin
limite < 40ms 28.3ms PASS
Throughput en cinta (25 FPS)
minimo 20 FPS 35 FPS PASS
GPU Memory Jetson
limite < 4GB 1.8 GB PASS

Matriz de Confusion Simplificada — Clases Criticas

Agrupadas en: Premium, Segunda, Descarte. El error critico es FN en Descarte (producto defectuoso llega al mercado).

Pred. Premium
Pred. Segunda
Pred. Descarte
Real Premium
412
18
5
Real Segunda
22
318
24
Real Descarte
3
31
394
Analisis de errores criticos:
FN Descarte → segunda: 31 casos — producto descarte clasificado como segunda calidad. Ajustable con umbral de confianza mas alto.
FP Descarte → premium: 5+3 casos — producto bueno rechazado. Tasa de desperdicio injustificado: 0.6% (muy bajo).
RECOMENDACION: Ajustar umbral confianza Descarte a 0.65 (default 0.5) para reducir FN:
# Ajuste de umbral en inferencia yolo detect predict model=best_int8.onnx \ conf=0.65 iou=0.45
Retorno de Inversion — Analisis Economico FreshLogistic SL
Comparativa inspeccion manual (actual) vs sistema de vision artificial (propuesto)
40K€
Merma economica anual actual (8% error rate)
4K€
Merma residual proyectada (1.2% error rate)
36K€
Ahorro anual directo en merma
4 meses
Payback period (inversion 12.000€)
Ahorro adicional (operarios)
4 operarios × 3 turnos reasignables a tareas de valor. Estimado: 18.000€/año en coste de supervision.
Mejora de reputacion
Reduccion de reclamaciones de clientes supermercado por calidad inconsistente. Cuantificable en contratos renovados.
ROI total primer año
36K€ (merma) + 18K€ (RRHH) - 12K€ (desarrollo) = +42.000€ neto el primer año.

Plan de Proyecto — 6 Semanas

Semana 1
Audit de Dataset y Entorno
dataset_pipeline_builder.py --analyze · Configurar Jetson Orin · Instalar PyTorch + CUDA
Semana 2
Limpieza, Conversion y Augmentation
YOLO TXT → COCO JSON · Mosaic, Flip, Color Jitter · Oversampling defectos 2x
Semana 3
Entrenamiento YOLOv8m (GPU Cloud)
100 epochs · A100 40GB (RunPod) · MLflow tracking · Hyperparameter tuning
Semana 4
Optimizacion ONNX → TensorRT INT8
inference_optimizer.py --quantize int8 · Calibracion 500 imgs · Benchmark Jetson
Semana 5
Integracion PLC y Señal de Expulsion
API REST FastAPI sobre Jetson · Modbus TCP al PLC Siemens · Delay < 5ms
Semana 6
UAT en Linea + Dashboard Produccion
Pruebas en planta con turno real · Dashboard Grafana metricas calidad por turno

Desglose Presupuestario

Ingenieria de datos (audit + limpieza + conversion) 1.200€
Entrenamiento cloud GPU (RunPod A100, 3 runs × 8h) 480€
Optimizacion TensorRT INT8 + benchmark Jetson 800€
Desarrollo API inferencia + señal expulsion PLC 2.800€
Dashboard Grafana metricas calidad (turno/dia/semana) 1.400€
Etiquetado adicional (500 imgs edge cases) 600€
UAT en planta + ajuste umbral confianza 800€
Documentacion tecnica + transferencia conocimiento 600€
Margen contingencia 10% 869€
TOTAL PROYECTO 9.549€ (presupuesto disponible: 12.000€)
Incluido en el proyecto:
Modelo entrenado (.pt + .onnx) Engine TensorRT INT8 API REST FastAPI Dashboard Grafana Scripts reproducibles Docs tecnica completa Soporte 30 dias post-entrega

Stack Tecnico Completo

Frameworks
PyTorch 2.3 torchvision timm
Deteccion
Ultralytics v8 YOLOv8m
Optimizacion
ONNX Runtime TensorRT 8.6 INT8 Calib.
Imagen
OpenCV 4.9 albumentations Pillow
MLOps
MLflow W&B Grafana
Hardware
Jetson Orin 32GB Basler cam 2MP PLC Siemens