Ultralytics YOLO27 : Inscris-toi sur la liste d’attente.
Get Started
Fondamentaux de la vision par ordinateur·Choisir une tâche·Leçon 3/10
Leçondébutant

Comprendre la détection d’objets

Lis la sortie d’un détecteur — classe, boîte, confiance — et règle les seuils de confiance et d’IoU en fonction du coût de chaque erreur.

La plupart des systèmes de vision en production reposent sur la détection, complétée par une logique : compteurs, suiveurs, alertes de zone, floutage pour protéger la vie privée. Lorsqu’un système se comporte mal, la cause est généralement le choix involontaire d’un seuil, et non le modèle. Sache exactement ce que renvoie un détecteur et quels sont les deux paramètres qui déterminent la liste : tu pourras ainsi déboguer presque tout ce qui s’appuie dessus.

Résultat

Lis les détections YOLO26 dans le code et choisis conf et iou en fonction du coût d’une détection manquée par rapport à celui d’une fausse alerte.

Parcours accéléré
Si tu connais déjà les bases, voici la version courte.
  1. Chaque détection se compose d’une classe, d’une boîte et d’un score de confiance.

  2. conf élimine les boîtes peu fiables (valeur par défaut : 0.25) ; iou détermine à partir de quand la NMS considère deux boîtes comme des doublons (valeur par défaut : 0.7).

  3. Les détections manquées coûtent cher ? Abaisse conf. Les fausses alertes sont visibles ? Augmente-le.

  4. Des objets voisins disparaissent ? Augmente iou.

  5. La confiance classe les boîtes par ordre de priorité ; ce n’est pas une probabilité calibrée.

Pratique

Ce que renvoie un détecteur#

Promenade au bord de l’eau avec des détections Ultralytics YOLO : des personnes, deux cyclistes, un chien et deux voitures, chacune encadrée par une boîte indiquant sa classe et son niveau de confiance

Chaque étiquette de cette image correspond à une ligne de sortie : un nom de classe, un niveau de confiance et la boîte qui l’entoure. Un modèle de détection renvoie exactement cette liste :

  • Classe — un indice entier associé à un nom via result.names (0 correspond à person, 5 à bus).
  • Boîte — quatre nombres qui localisent l’objet ; xyxy indique les coordonnées en pixels du coin supérieur gauche et du coin inférieur droit.
  • Confiance — un score compris entre 0 et 1, utilisé pour classer et filtrer les détections.

Le comptage, les alertes, le suivi et le floutage sont des fonctionnalités que tu codes à partir de ces lignes.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
result = model("https://ultralytics.com/images/bus.jpg", verbose=False)[0]

for box in result.boxes:
    name = result.names[int(box.cls)]
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    print(f"{name:8} conf={float(box.conf):.2f} box=({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")
bus      conf=0.88 box=(0, 230, 803, 751)
person   conf=0.87 box=(49, 398, 240, 902)
person   conf=0.86 box=(223, 405, 345, 861)
person   conf=0.85 box=(670, 395, 810, 880)
person   conf=0.65 box=(0, 553, 60, 871)

Ligne par ligne : la boîte du bus commence à x=0 parce que le bus sort du cadre à gauche ; trois personnes obtiennent un score de 0.85–0.87 ; la quatrième personne, coupée par le bord gauche, n’obtient que 0.65 — le modèle ne voit que la moitié du corps. Une faible confiance pour les objets tronqués est normale, et c’est là qu’un seuil a d’abord un effet.

Chaque boîte est disponible dans quatre formats ; utilise celui qu’attend ton code en aval :

AttributFormatUtilisation habituelle
boxes.xyxyCoordonnées des coins en pixels (x1, y1, x2, y2)Recadrage, dessin, règles de chevauchement
boxes.xywhCentre en pixels, largeur et hauteurFiltres de taille, mouvement
boxes.xyxynCoordonnées des coins normalisées entre 0 et 1Règles qui restent valides lorsque la résolution change
boxes.xywhnCentre et dimensions normalisés entre 0 et 1Fichiers d’étiquettes YOLO

Des candidats à la liste finale#

En interne, le modèle attribue un score à de nombreuses boîtes candidates par objet. Deux filtres les transforment en liste affichée :

Filtre de confiance. conf élimine les boîtes sous un seuil ; la valeur par défaut en prédiction est 0.25. Sur l’image du bus, le nombre change rapidement :

confBoîtes sur bus.jpg
0.107
0.255
0.505
0.754

Filtre des doublons. La suppression non maximale (NMS) conserve la boîte ayant la confiance la plus élevée et élimine les autres boîtes de la même classe qui la chevauchent au-delà de iou (valeur par défaut : 0.7). Le chevauchement est mesuré par l’intersection sur union : la surface commune divisée par la surface totale réunie.

Intersection sur union sur un oiseau : boîtes prédites et de vérité terrain qui se chevauchent, ainsi que masques correspondants ; l’IoU correspond à leur intersection divisée par leur union

iouBoîtes sur bus.jpgEffet
0.35Strict : les boîtes qui se chevauchent sont fusionnées
0.75Par défaut
0.958Permissif : les quasi-doublons sont conservés

Choisis les seuils en fonction du coût des erreurs#

Si…Alors…
Un faux négatif coûte cher (alertes de sécurité, défauts)Abaisse conf et accepte quelques fausses alertes
Une fausse alerte est visible par les utilisateurs (recherche, étiquetage)Relève conf
Tu communiques des nombres de détectionsFais varier conf sur les images de validation et garde la valeur qui minimise l'erreur de comptage
Les vrais objets voisins disparaissent dans les foulesRelève iou, par exemple de 0.7 → 0.8
Le même objet reçoit deux boîtesAbaisse iou
La difficulté varie selon les classesFais des prédictions avec la valeur la plus basse de conf dont tu as besoin, puis filtre par classe dans le code

La surveillance de la sécurité en entrepôt est le cas classique où utiliser un seuil bas ; le mode Predict répertorie tous les arguments d'inférence.

Pièges#

Interpréter la confiance comme une probabilité

Symptôme : « le modèle est sûr à 88 % que c’est un bus », et des seuils choisis à l’intuition. Solution : considère la confiance comme un score de classement. Dans YOLO26, un seul score couvre à la fois « il y a un objet » et « c’est cette classe », et il n’est pas calibré — choisis le seuil à partir des données de validation, pas en fonction de la signification du nombre.

Il manque l’un des deux voisins ? Vérifie NMS

Quand deux personnes se tiennent côte à côte, leurs boîtes se chevauchent fortement et NMS peut supprimer une vraie personne comme « doublon ». Augmente iou et la deuxième boîte réapparaît. YOLO26 propose aussi une tête de détection de bout en bout qui ne nécessite aucun NMS ; passe nms=False pour l’utiliser.

Régler les paramètres sur une seule image

Symptôme : un seuil qui semble parfait sur l’image de démonstration échoue avec la vraie caméra. Solution : balaie les seuils sur un jeu de validation issu de la caméra de déploiement ; une seule image te montre uniquement l’effet des paramètres.

Quatre façons de se tromper#

ÉchecQuel est le problème ?Correctif habituel
Bonne classe, boîte impréciseLocalisationDes règles de boîte plus strictes et cohérentes ; une valeur plus élevée de imgsz pour les petits objets
Bonne boîte, mauvaise classeClassificationAjoute des exemples de la paire confondue ou fusionne les classes
Aucune boîteRappelAjoute des exemples de cette situation : éclairage, taille, occultation
Boîte sur l'arrière-planPrécisionDes images difficiles contenant tout ce qui a trompé le modèle

Deux listes facilitent le diagnostic : les vrais positifs à faible confiance (le modèle doute d'objets réels) et les faux positifs à forte confiance (il est sûr de lui, mais se trompe). Elles orientent vers des correctifs différents.

Essayer

Exécute la solution avec conf=0.05 et ouvre l'image enregistrée. Marque chaque boîte sous 0.5 comme vrai ou faux positif et note la raison de chaque faux positif. Note ensuite la valeur de conf que tu déploierais pour un compteur de piétons sur cette caméra, avec une phrase de justification.

Terminé lorsque
Tu as terminé la leçon lorsque tous les éléments suivants sont réunis.
  • Tu as une liste de toutes les boîtes sous 0.5 dans bus.jpg, chacune marquée comme vrai ou faux positif et accompagnée d'une raison.

  • Tu as noté une valeur de conf pour un compteur de piétons et l'erreur contre laquelle elle protège.

  • Tu peux expliquer, à l'aide du tableau iou, pourquoi relever iou fait réapparaître un objet voisin supprimé.

Afficher la solution
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
result = model("https://ultralytics.com/images/bus.jpg", conf=0.05, save=True, verbose=False)[0]

for box in sorted(result.boxes, key=lambda b: -float(b.conf)):
    name, conf = result.names[int(box.cls)], float(box.conf)
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    print(f"{conf:.2f} {name:10} ({x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f})")
0.88 bus        (0, 230, 803, 751)
0.87 person     (49, 398, 240, 902)
0.86 person     (223, 405, 345, 861)
0.85 person     (670, 395, 810, 880)
0.65 person     (0, 553, 60, 871)
0.18 person     (0, 600, 40, 871)
0.12 stop sign  (0, 252, 35, 326)
0.08 handbag    (43, 732, 78, 812)
0.07 skateboard (669, 822, 808, 881)
0.06 handbag    (225, 634, 291, 705)

Toutes les boîtes sous 0.5 sont des faux positifs. La boîte à 0.18 de person fait doublon avec la personne à 0.65, coupée au bord gauche. La boîte à 0.12 de stop sign correspond à un vrai panneau routier, mais avec la mauvaise classe. Les sacs à main et le skateboard sont sur des mains et des chaussures. Tous les objets réels ont un score supérieur à 0.6 ; conf=0.5 conserve donc les quatre personnes et écarte toutes les détections parasites pour un compteur de piétons — il évite le double comptage. Vérifie ce réglage sur un jeu de validation provenant de la caméra réelle avant le déploiement : la personne tronquée à 0.65 montre à quel point les objets réels peuvent être proches du seuil.

Et ensuite ?

Ensuite : quand un rectangle ne suffit pas et que tu as besoin de la forme exacte de l'objet.