Detección de objetos con YOLO: Guía práctica completa para desarrolladores
Guía integral para desarrollar con YOLO: conceptos, datos, entrenamiento, evaluación, tiempo real, API de producción, rendimiento, seguridad y entrevistas.
¿Qué es la detección de objetos con YOLO?
YOLO (“You Only Look Once”) es una familia de detectores de objetos de una sola etapa. Mientras la clasificación asigna una etiqueta a toda la imagen, un detector devuelve varias predicciones: clase, confianza y caja delimitadora para cada objeto.
YOLO se utiliza en tráfico, inspección industrial, robótica, agricultura, deporte, comercio y vídeo en tiempo real. Su ventaja práctica es el equilibrio entre precisión, latencia, tamaño y facilidad de despliegue.
Conceptos esenciales
- Bounding Box: rectángulo que localiza el objeto.
- Confidence: estimación de fiabilidad.
- IoU: área de intersección de dos cajas dividida por su unión.
- Precision: proporción de detecciones devueltas que son correctas.
- Recall: proporción de objetos reales que fueron encontrados.
- mAP: resumen del rendimiento entre clases y umbrales IoU.
Un umbral de confianza alto reduce falsos positivos, pero puede perder objetos difíciles. Debe elegirse según el coste real de cada error.
Flujo de YOLO
- Decodificar la imagen o el fotograma.
- Redimensionar y normalizar según el contrato del modelo.
- Ejecutar la red neuronal.
- Convertir salidas en cajas, clases y puntuaciones.
- Eliminar resultados débiles y duplicados con NMS.
- Escalar coordenadas a la imagen original.
La arquitectura suele incluir un Backbone para extraer características, un Neck para fusionar escalas y un Detection Head para producir predicciones.
Instalación
python -m venv .venv
source .venv/bin/activate
pip install ultralytics opencv-python
Primera inferencia, cámara y entrenamiento
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
result = model.predict("street.jpg", conf=0.35, imgsz=640)[0]
for box in result.boxes:
class_id = int(box.cls.item())
print({
"class": model.names[class_id],
"confidence": float(box.conf.item()),
"xyxy": box.xyxy[0].tolist(),
})
import cv2
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
camera = cv2.VideoCapture(0)
while camera.isOpened():
ok, frame = camera.read()
if not ok:
break
result = model.predict(frame, conf=0.4, verbose=False)[0]
cv2.imshow("YOLO", result.plot())
if cv2.waitKey(1) & 0xFF == ord("q"):
break
camera.release()
cv2.destroyAllWindows()
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
model.train(
data="dataset.yaml",
epochs=100,
imgsz=640,
batch=16,
device=0,
project="runs/safety",
name="baseline",
)
path: /absolute/path/to/dataset
train: images/train
val: images/val
test: images/test
names:
0: person
1: helmet
2: safety_vest
Empieza con un modelo pequeño para establecer una línea base de latencia. Usa uno mayor sólo si la mejora medida compensa memoria y cómputo.
Datos y anotaciones
Una línea de etiqueta YOLO normalmente contiene:
class_id x_center y_center width height
Las coordenadas están normalizadas. Separa images y labels en train, val y test. No distribuyas aleatoriamente fotogramas vecinos del mismo vídeo entre entrenamiento y validación; son casi duplicados y producen fuga de datos.
Lista de calidad
- Define una regla para objetos parcialmente ocultos.
- Dibuja cajas ajustadas y consistentes.
- Etiqueta todas las instancias relevantes.
- Define cómo tratar reflejos, pantallas y carteles.
- Revisa equilibrio de clases y tamaños.
- Audita muestras de cada anotador.
- Versiona datos y guías.
Entrenamiento y evaluación
Los pesos preentrenados son el mejor punto de partida en la mayoría de los casos. Más épocas no arreglan etiquetas incorrectas, fuga de datos ni escenarios ausentes.
No te limites a un mAP global. Divide resultados por clase, tamaño, cámara, cliente, iluminación, clima, oclusión, desenfoque, distancia y compresión. Mantén una galería de falsos positivos, falsos negativos, errores de localización y duplicados.
API y arquitectura de producción
Carga y calienta el modelo una sola vez al iniciar la aplicación. Valida contenido, tamaño de archivo y dimensiones. Procesa vídeos largos como trabajos asíncronos con progreso en vez de mantener una petición HTTP abierta.
Un servicio resistente separa gateway y autenticación, validación de cargas, almacenamiento, cola, workers de inferencia, resultados, monitorización y auditoría.
Optimización
Mide latencia completa: decodificación, resize, transferencia, inferencia, NMS, dibujo, serialización y red. Usa FP16 en hardware compatible, limita concurrencia y cola, y controla p50, p95, p99, memoria y fotogramas descartados.
Después de exportar a ONNX, TensorRT u OpenVINO, ejecuta pruebas de regresión por clase frente al modelo original.
Seguridad y privacidad
Las imágenes pueden contener caras, matrículas, pantallas, direcciones y espacios privados. Aplica minimización, retención limitada, control de acceso y cifrado. No confíes en la extensión ni cargues modelos no confiables. YOLO es probabilístico y no debe ser la única autoridad en decisiones médicas, legales, laborales o de seguridad de alto riesgo.
Errores frecuentes
- Fuga de fotogramas similares.
- Reglas de anotación inconsistentes.
- Ocultar el fallo de una clase crítica tras buen mAP global.
- Probar sólo imágenes limpias.
- Un umbral para todas las clases.
- Ignorar latencia p99.
- Colas de vídeo ilimitadas.
- Exportar sin prueba comparativa.
- Registrar imágenes privadas por defecto.
- No vigilar drift.
Preguntas de entrevista
¿Por qué YOLO es de una sola etapa?
Predice ubicaciones y clases directamente, sin una fase separada de propuestas.
¿Qué mide IoU?
La superposición entre caja predicha y real respecto a su área combinada.
¿Precision o Recall?
Depende del coste. Un control de seguridad puede priorizar recall; un bloqueo automático requiere precision alta.
¿Cómo mejorar objetos pequeños?
Mejorar datos y etiquetas de alta resolución, ajustar tamaño y aumentos, conservar características multiescala y evaluar tiling.
Conclusión
Un proyecto YOLO es un proyecto de datos y sistemas, no sólo un comando de entrenamiento. Crea una línea base medible, mejora datos a partir de errores reales y optimiza después de perfilar todo el flujo.
Referencias
Artículos destacados

Kafka en producción: particiones, lag, fiabilidad y respuesta a incidentes
Una guía práctica para tomar decisiones de orden, capacidad y recuperación en Kafka, interpretar el lag y responder a fallos sin perder de vista el resultado de negocio.

Laravel y Kafka sin eventos perdidos: outbox transaccional y consumidores idempotentes con PostgreSQL
Una confirmación en PostgreSQL y una publicación en Kafka no forman una transacción ordinaria. Aprende a evitar pérdidas y duplicación de efectos.

Apache Kafka explicado: temas, particiones, grupos de consumidores y tu primer flujo de eventos
Sigue un evento de pedido desde el productor hasta varios consumidores y prueba en local cómo funcionan las particiones, el orden y la reproducción.
Comentarios
0 comentariosTodavía no hay comentarios aprobados. Las respuestas nuevas pueden esperar moderación.