Ultralytics YOLO27 : Inscris-toi sur la liste d’attente.
Get Started
Entraîne ton premier modèle YOLO·Prédire·Leçon 2/10
Leçondébutant

Effectuer une prédiction sur une image

Exécute un modèle YOLO26 préentraîné depuis Python, lis les classes, les scores de confiance et les boîtes en pixels dans les résultats, et ajuste les paramètres qui corrigent la plupart des détections manquées.

Toute utilisation concrète d’un détecteur — compter les articles en stock sur une étagère, recadrer des visages pour les flouter, envoyer des boîtes à une API JSON — commence par une lecture correcte de l’objet de résultat. Une seule erreur, comme indexer les noms de classes avec un tenseur, et ton application plante dès la première image.

Un modèle YOLO26 de détection préentraîné connaît déjà les 80 classes COCO. Dans cette leçon, tu vas exécuter le mode Predict depuis Python, extraire des résultats chaque champ utile et apprendre quel paramètre modifier en cas de détections manquées, de doublons et de petits objets. Le même objet de résultat sera renvoyé plus tard par ton propre modèle entraîné.

Résultat

Tu peux écrire un script Python qui exécute YOLO26 sur des images et affiche le nom de la classe, le score de confiance et la boîte en pixels de chaque détection, et tu sais quel paramètre corrige chaque type de détection manquée.

Parcours accéléré
Si tu connais déjà les bases, voici la version courte.
  1. Charge une fois : model = YOLO('yolo26n.pt'), puis result = model(source)[0].

  2. Parcours result.boxes ; convertis avec int(box.cls), float(box.conf), box.xyxy[0].tolist().

  3. Associe les indices de classe aux noms avec result.names[int(box.cls)].

  4. Ajuste conf, iou, imgsz et classes à chaque appel.

Pratique

Effectuer une prédiction et afficher chaque détection#

Détections Ultralytics YOLO sur une promenade en bord de mer : boîtes étiquetées avec des scores de confiance autour de personnes, de vélos, d’un chien et de voitures

L’appel du modèle sur une source exécute le mode Predict et renvoie une liste contenant un objet Results par image. Avec une seule image, lis results[0].

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")

result = results[0]
for box in result.boxes:
    name = result.names[int(box.cls)]
    conf = float(box.conf)
    x1, y1, x2, y2 = box.xyxy[0].tolist()
    print(f"{name:>8} {conf:.2f}  ({x1:.0f}, {y1:.0f}) -> ({x2:.0f}, {y2:.0f})")

result.save("bus_annotated.jpg")

Résultat réel de predict.py, après la ligne de journal habituelle :

     bus 0.88  (0, 230) -> (803, 751)
  person 0.87  (49, 398) -> (240, 902)
  person 0.86  (223, 405) -> (345, 861)
  person 0.85  (670, 395) -> (810, 880)
  person 0.65  (0, 553) -> (60, 871)

Lecture du résultat :

  • bus 0.88 : nom de la classe et score de confiance. Les boîtes sont triées par score de confiance décroissant.
  • (0, 230) -> (803, 751) : coins supérieur gauche et inférieur droit en pixels de l’image originale de 810×1080, avec l’origine en haut à gauche. Tu peux les utiliser directement pour recadrer ou dessiner.
  • person 0.65 à (0, 553) : une cinquième personne, coupée par le bord gauche, obtient un score inférieur. C’est généralement le cas des objets partiels.

result.save() écrit l’image annotée ; result.show() l’ouvre dans une fenêtre.

Comprendre le contenu d’un résultat#

Chaque tâche renvoie le même type Results ; seuls les champs renseignés changent. La liste complète des champs est présentée dans le guide d’utilisation de Python.

AttributContient
boxesDétections : pixels xyxy, format centre normalisé xywhn, conf, cls et id en mode suivi
masks, keypoints, obb, probsSorties des modèles de segmentation, de pose, OBB et de classification (None pour un modèle de détection)
namesDictionnaire associant les indices de classe aux noms de classe
orig_img, orig_shapeImage d’entrée sous forme de tableau NumPy, ainsi que sa hauteur × largeur
speedTemps de prétraitement, d’inférence et de post-traitement en ms
path, save_dirOrigine de l’entrée et emplacement d’écriture des sorties

Pour la détection d’objets, tu as surtout besoin de boxes, les boîtes englobantes. result.summary() renvoie les mêmes détections sous forme de liste de dictionnaires ordinaires, prêts à être envoyés à une API JSON.

Ajuster la prédiction#

Les paramètres par défaut conviennent à la plupart des images. Si ce n’est pas le cas, modifie un seul paramètre à la fois :

Problème observéArgumentPar défautModification
Détections manquées : un objet visible n’est pas encadréconf0.25Réduis, par exemple 0.1
Faux positifs : des boîtes apparaissent sans objetconf0.25Augmente, par exemple 0.5
Deux boîtes autour d’un même objetiou0.7Réduis le seuil de chevauchement (IoU) de la NMS pour fusionner les doublons
Petits objets éloignés non détectésimgsz640Augmente, par exemple 1280 (arrondi au multiple de 32)
Seules certaines classes sont pertinentesclassestoutespar exemple classes=[0] pour les personnes
Matériel inadaptédeviceautocpu, mps ou un indice de GPU comme 0

Le score de confiance change le résultat, pas seulement le nombre de détections. Sur la même image de bus :

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model("https://ultralytics.com/images/bus.jpg", conf=0.5, classes=[0])  # 4 persons
model("https://ultralytics.com/images/bus.jpg", conf=0.1)  # 5 personnes, 1 bus, 1 panneau d’arrêt

Avec conf=0.1, le modèle signale aussi un panneau d’arrêt dont il n’était pas sûr. Réduire conf est le moyen le plus rapide de voir ce qu’un modèle a presque détecté. Tous les autres paramètres figurent dans la référence de configuration.

Si une prédiction ne renvoie rien, suis ces étapes :

Traiter plusieurs images#

Transmets une liste, un dossier ou un motif glob tel que "photos/*.jpg". Par défaut, Predict utilise batch=1 ; définis batch pour traiter plusieurs images à la fois avec le modèle, ce qui est beaucoup plus rapide sur un GPU :

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
images = ["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"]
for result in model(images, batch=2):
    print(result.path, len(result.boxes), result.verbose())
image0.jpg 5 4 persons, 1 bus,
image1.jpg 3 2 persons, 1 tie,

Éviter ces erreurs#

Indexer des noms avec un tenseur

Symptôme : KeyError: tensor([5.]). Cause : box.cls et box.conf sont des tenseurs PyTorch, et result.names est un dictionnaire indexé par int. Solution : convertis-les d’abord : result.names[int(box.cls)], float(box.conf), box.xyxy[0].tolist().

Charger le modèle à chaque appel

Symptôme : une fonction auxiliaire qui appelle YOLO("yolo26n.pt") s’exécute lentement. Sur le CPU d’un ordinateur portable, le rechargement du modèle pour chaque image a pris 71 ms, contre 25 ms lorsque le modèle n’était chargé qu’une fois. Solution : crée le modèle une fois au démarrage et réutilise-le pour chaque image.

Des centaines d’images ou une vidéo ? Traite-les en flux

model(list_or_folder) collecte en mémoire chaque objet Results avant de renvoyer le résultat. Pour les dossiers volumineux et toutes les vidéos, passe stream=True et itère : les résultats arrivent un par un. La leçon sur la vidéo traite ce sujet en détail.

Essayer

Écris top3.py : charge yolo26n.pt une seule fois, exécute-le sur bus.jpg, zidane.jpg et une de tes propres photos, puis affiche le nombre de détections et les trois classes ayant les scores de confiance les plus élevés pour chaque image. Relance ensuite l’image qui a le moins de détections avec conf=0.1 et écris une phrase sur ce qui est apparu.

Terminé lorsque
Tu as terminé la leçon lorsque tous les éléments suivants sont réunis.
  • Ton script affiche le nombre de détections et les trois principales classes avec leurs scores de confiance pour chaque image, sans KeyError.

  • Tu as comparé une image avec conf=0.25 et conf=0.1, et noté les différences.

  • Tu sais nommer le paramètre à modifier en cas de détections manquées, de boîtes en double et de petits objets.

Afficher la solution
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # load once
images = ["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"]

for result in model(images, verbose=False):
    top3 = sorted(result.summary(), key=lambda d: d["confidence"], reverse=True)[:3]
    print(f"{result.path}: {len(result.boxes)} detections")
    for d in top3:
        print(f"  {d['name']:>8} {d['confidence']:.2f}")
image0.jpg: 5 detections
       bus 0.90
    person 0.85
    person 0.85
image1.jpg: 3 detections
    person 0.89
    person 0.79
       tie 0.59

summary() renvoie déjà des noms ordinaires et des nombres flottants : aucun tenseur n’est donc à convertir. Les scores de confiance diffèrent légèrement de predict.py, car une liste d’images est complétée jusqu’à une forme commune. Avec conf=0.1, bus.jpg ajoute un panneau d’arrêt.

Et ensuite ?

Tu as utilisé le plus petit modèle. Ensuite, détermine quelle taille de YOLO26 ton projet doit réellement entraîner et déployer.