Object Tracking
Le suivi d’objets associe les détections d’une image vidéo à l’autre et conserve un identifiant persistant pour chaque objet malgré les mouvements et les occultations. Découvre le fonctionnement des traqueurs et consulte le code.
Le suivi d’objets est une tâche de vision par ordinateur qui localise les objets dans des images vidéo successives et relie leurs positions pour former des trajectoires, en attribuant à chaque objet un identifiant persistant. Une voiture qui entre dans l’image avec l’ID 7 garde cet ID lorsqu’elle avance, tourne et passe brièvement derrière un bus, ce qui permet au système de ne la compter qu’une fois, de mesurer sa vitesse et d’estimer sa destination. Le suivi mono-objet suit une cible choisie dans la première image, tandis que le suivi multi-objets (MOT), la forme la plus courante en pratique, suit en même temps tous les objets des classes d’intérêt.
Fonctionnement du suivi d’objets#
La plupart des suiveurs multi-objets utilisent le suivi par détection : un modèle de détection d’objets repère les objets dans chaque image, puis un suiveur relie ces détections au fil du temps. Le suiveur s’appuie sur un modèle de mouvement, généralement un filtre de Kalman, le chevauchement des boîtes mesuré par l’intersection sur l’union (IoU), des représentations vectorielles d’apparence facultatives issues d’un modèle de réidentification d’objets (Re-ID), et un solveur d’affectation linéaire comme l’algorithme hongrois. À chaque image, il exécute quatre étapes :
- Prédire : en supposant une vitesse constante, le filtre de Kalman prédit où apparaîtra la boîte de chaque piste existante dans la nouvelle image.
- Évaluer : le suiveur construit une matrice de coûts entre les pistes prédites et les nouvelles détections, à partir de l’IoU, du mouvement et, pour certains suiveurs, de la similarité d’apparence.
- Affecter : le solveur choisit les correspondances un à un de coût minimal.
- Gérer les pistes : les pistes appariées mettent à jour leur état, les détections non appariées et suffisamment fiables démarrent de nouvelles pistes, et les pistes non appariées sont conservées comme « perdues » pendant un certain nombre d’images afin de pouvoir être retrouvées après une occultation.
L’étape de gestion du cycle de vie permet de stabiliser les identifiants lorsque les détections disparaissent pendant quelques images :
L’architecture de base remonte à SORT, en 2016, qui n’utilisait qu’un filtre de Kalman, des coûts d’IoU et l’algorithme hongrois. DeepSORT a ajouté des caractéristiques d’apparence pour retrouver les identités après une occultation, et ByteTrack a amélioré le rappel en faisant aussi correspondre les détections à faible confiance, souvent des objets partiellement occultés, lors d’une seconde passe. Les suiveurs plus récents ajoutent une compensation du mouvement de la caméra pour les caméras mobiles et des règles d’association plus élaborées pour les foules.
Suivi et détection#
Un détecteur est sans état : il traite chaque image indépendamment, de sorte que la voiture de l’image 1 et celle de l’image 2 constituent des détections sans lien. Le suivi ajoute un état qui conserve les identités d’une image à l’autre, ce dont dépendent le comptage, le temps de présence et l’estimation de la vitesse. Le suivi se distingue également du suivi de points et du flot optique, qui suivent des pixels individuels ou des points de surface sans les regrouper en objets étiquetés.
Le mode de suivi d’Ultralytics YOLO ajoute cet état à tout modèle de détection YOLO26, de segmentation, de pose ou de boîtes orientées, avec six trackers intégrés, dont ByteTrack, BoT-SORT et le tracker par défaut, TrackTrack :
from ultralytics import YOLO
# Load a YOLO26 detector; track() pairs it with a tracker that assigns persistent IDs
model = YOLO("yolo26n.pt")
detections, track_ids = 0, set()
for result in model.track(
"https://github.com/ultralytics/assets/releases/download/v0.0.0/decelera_portrait_min.mov", stream=True
):
detections += len(result.boxes)
if result.boxes.is_track:
track_ids.update(result.boxes.id.int().tolist())
print(f"Detections summed over all frames: {detections}")
print(f"Unique tracked objects: {len(track_ids)}")Le nombre d’identifiants uniques est inférieur au total des détections, car chaque identifiant désigne un seul objet dans toutes les images où il apparaît.
Applications concrètes#
- Surveillance du trafic et estimation de la vitesse : le suivi de chaque véhicule d’une image à l’autre permet le comptage, l’analyse du flux par voie et l’estimation de la vitesse à partir de la distance parcourue par une piste en une seconde.
- Analyse du commerce de détail : les caméras des magasins suivent les clients pour mesurer la fréquentation, la longueur des files d’attente et le temps passé devant les présentoirs, sans compter deux fois la même personne.
- Analyse sportive : les diffuseurs et les entraîneurs suivent les joueurs et le ballon pour calculer les distances parcourues, la vitesse et les formations des équipes.
- Véhicules autonomes et robotique : les systèmes de perception suivent les piétons et les véhicules pour estimer leurs vitesses et prédire leur position à la seconde suivante.
Évaluer la qualité du suivi#
Les suiveurs sont comparés sur des benchmarks tels que MOT17, MOT20 pour les foules denses et DanceTrack pour les personnes qui se ressemblent et se déplacent de façon imprévisible. MOTA regroupe les omissions, les faux positifs et les changements d’identité en un score dominé par la qualité de détection ; IDF1 mesure la constance avec laquelle chaque objet réel conserve un identifiant unique, et HOTA équilibre les deux en calculant la moyenne géométrique de la précision de détection et de la précision d’association.










