SO Development

Seguimiento de objetos simplificado con YOLOv11 + ByteTrack

Introducción

El seguimiento de objetos es una tarea crucial en la visión artificial, que permite aplicaciones como la vigilancia, la conducción autónoma y el análisis deportivo. Mientras que la detección de objetos identifica objetos en un solo fotograma, el seguimiento asocia identidades a esos objetos en distintos fotogramas. Combinando la velocidad de... YOLOv11 (una iteración hipotética avanzada de la arquitectura YOLO) con la robustez de Pista de bytes.

Esta guía lo guiará en la construcción de un sistema de seguimiento de objetos de alto rendimiento.

¿Qué es YOLOv11?

YOLOv11 (You Only Look Once versión 11) es un modelo de detección de objetos de vanguardia basado en sus predecesores. Aunque no es una versión oficial al momento de escribir este artículo, suponemos que incorpora avances como:

  • Red troncal mejorada:CSPDarknet mejorado para una extracción de características más rápida.

  • Convoluciones dinámicas:Selección de kernel adaptativa para diferentes tamaños de objetos.

  • Entrenamiento optimizado:Técnicas como el aumento de mosaico y la autodestilación.

  • Mayor precisión:Mejor manejo de objetos pequeños y oclusiones.

YOLOv11 genera cuadros delimitadores, etiquetas de clase y puntajes de confianza, que sirven como entradas para algoritmos de seguimiento como ByteTrack.

¿Qué es el seguimiento de objetos?

El seguimiento de objetos consiste en asignar identificadores consistentes a los objetos a medida que se mueven a través de los fotogramas de vídeo. Esta capacidad es fundamental en campos como la vigilancia, la robótica y la infraestructura de ciudades inteligentes. Los algoritmos clave utilizados en el seguimiento incluyen:

  • Ordenación profunda
  • SORT
  • Ordenamiento por BoT
  • Ordenación fuerte
  • Pista de bytes

¿Qué es ByteTrack?

ByteTrack es un algoritmo de seguimiento multiobjeto (MOT) que aprovecha tanto las detecciones de alta como de baja confianza. A diferencia de los métodos que descartan las detecciones de baja confianza (a menudo causadas por oclusiones), ByteTrack las mantiene como "fondo" y las compara con las pistas existentes. Características principales:

  1. Emparejamiento en dos etapas:

    • Primera etapa: Coincida las detecciones de alta confianza con las pistas.

    • Segunda etapa:Asocie detecciones de baja confianza con pistas no coincidentes.

  2. Filtro de Kalman:Predice posiciones futuras de las pistas.

  3. Eficiencia:Sobrecarga computacional mínima en comparación con modelos de reidentificación complejos.

ByteTrack en acción:

Imaginemos que estamos haciendo un seguimiento de una persona cuyo nivel de confianza disminuye debido a una oclusión parcial:

  • Marco t1: confianza = 0.8
  • Cuadro t2: confianza = 0.4 (debido al paso de un objeto)
  • Marco t3: confianza = 0.1

En lugar de perder el seguimiento, ByteTrack conserva los objetos de baja confianza para reasociarlos.

Canalización de dos etapas de ByteTrack

Etapa 1: Emparejamiento de alta confianza

  1. YOLOv11 detecta objetos y categoriza cajas:

    • Alta confianza

    • Baja confianza

    • Antecedentes (descartados)

Imagen ChatGPT 5 de mayo de 2025, 10_47_39 AM

2 Las posiciones previstas a partir de t-1 se calculan utilizando el filtro de Kalman.

3 Los cuadros de alta confianza coinciden con las posiciones previstas.

    • Partidos ✔️

    • Nuevas identificaciones asignadas para detecciones no coincidentes

    • Pistas no coincidentes almacenadas para la Etapa 2

Etapa 2: Reasociación de baja confianza

  1. Las pistas previstas restantes se comparan con detecciones de baja confianza.

  2. Coincidencias ✔️ con umbrales más bajos.

  3. Las pistas perdidas se conservan temporalmente para su posible recuperación.

Este mecanismo de dos etapas ayuda a mantener trazas persistentes incluso en escenarios difíciles.

Implementación completa: YOLOv11 + ByteTrack

Paso 1: Instalar Ultralytics YOLO

				
					pip install git+https://github.com/ultralytics/ultralytics.git@main
				
			

Paso 2: Importar dependencias

				
					import os
import cv2
from ultralytics import YOLO

# Load Pretrained Model
model = YOLO("yolo11n.pt")

# Initialize Video Writer
fourcc = cv2.VideoWriter_fourcc(*"MP4V")
video_writer = cv2.VideoWriter("output.mp4", fourcc, 5, (640, 360))
				
			

Paso 3: Inferencia cuadro por cuadro

				
					# Frame-by-Frame Inference
frame_folder = "frames"

for frame_name in sorted(os.listdir(frame_folder)):
    frame_path = os.path.join(frame_folder, frame_name)
    frame = cv2.imread(frame_path)

    results = model.track(frame, persist=True, conf=0.1, tracker="bytetrack.yaml")

    boxes = results[0].boxes.xywh.cpu()
    track_ids = results[0].boxes.id.int().cpu().tolist()
    class_ids = results[0].boxes.cls.int().cpu().tolist()
    class_names = [results[0].names[cid] for cid in class_ids]

    for box, tid, cls in zip(boxes, track_ids, class_names):
        x, y, w, h = box
        x1, y1 = int(x - w / 2), int(y - h / 2)
        x2, y2 = int(x + w / 2), int(y + h / 2)
        cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
        draw_text(frame, f"ID:{tid} {cls}", pos=(x1, y1 - 20))

    video_writer.write(frame)

video_writer.release()
				
			

Evaluación cuantitativa

Variante de modeloFPSmAP@50Recuperación de pistaPrecisión de pista
YOLOv11n + ByteTrack11070.2%81.5%84.3%
YOLOv11m + ByteTrack5576.9%88.0%89.1%
YOLOv11l + ByteTrack3079.3%89.2%90.5%

Probado en el benchmark MOT17 (720p), utilizando una sola GPU NVIDIA RTX 3080.

Archivo de configuración de ByteTrack

tracker_type: bytetrack
track_high_thresh: 0.25
track_low_thresh: 0.1
new_track_thresh: 0.25
track_buffer: 30
match_thresh: 0.8
fuse_score: True

 

Conclusión

La integración de YOLOv11 con ByteTrack constituye un sistema de seguimiento en tiempo real altamente eficaz, capaz de gestionar la oclusión, la detección parcial y las transiciones dinámicas de escenas. Las innovaciones metodológicas de ByteTrack, en particular su canal de asociación de dos etapas, lo sitúan por encima de los enfoques anteriores, tanto en rendimiento empírico como en resiliencia práctica.

Aportes clave:

  • Reidentificación robusta mediante emparejamiento diferido de baja confianza
  • Rendimiento de velocidad de cuadros excepcional, adecuado para aplicaciones en tiempo real
  • Implementación perfecta mediante la API de Ultralytics

 

Visite nuestro servicio de anotación de datos


Esto cerrará en 20 segundos