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

Les sept tâches de vision

Associe une ligne de sortie à la classification, à la détection, à la segmentation d’instance, à la segmentation sémantique, à l’estimation de profondeur, à la pose ou à OBB, puis choisis les poids YOLO26 pour commencer.

Choisir la tâche est la décision la plus coûteuse avant l’entraînement. Choisis la segmentation alors que des boîtes suffiraient, et ta facture d’annotation explose ; choisis des boîtes verticales pour des navires vus depuis un drone, et chaque boîte contient surtout de l’eau. Ultralytics YOLO prend en charge sept tâches avec une seule API : le choix dépend donc de la sortie dont tu as besoin, pas des outils.

Résultat

Indique la tâche et le fichier de poids YOLO26 qui correspondent à ta ligne de sortie, puis explique en une ligne pourquoi la tâche suivante, plus coûteuse, n’est pas nécessaire.

Parcours accéléré
Si tu connais déjà les bases, voici la version courte.
  1. Une étiquette pour l’image entière : classification.

  2. Quoi et où, avec un rectangle suffisant : détection.

  3. Contour exact de chaque objet : segmentation d’instance. Classe de chaque pixel : segmentation sémantique.

  4. Distance de chaque pixel : estimation de profondeur.

  5. Articulations ou repères : pose. Objets vus de dessus et inclinés : OBB.

  6. La même API YOLO() pour les sept tâches ; seul le fichier de poids change.

Pratique

Les sept tâches en un coup d’œil#

Sorties des sept tâches Ultralytics YOLO : une feuille classée, des voitures et des piétons détectés, des voitures segmentées, une carte sémantique de rue, le squelette de pose d’un coureur, des boîtes orientées autour de navires et une carte de profondeur

Lis le tableau en regardant la colonne « Sortie » : c’est à elle que doit correspondre la ligne de sortie de ta spécification.

TâcheSortieRépond à la questionPoids YOLO26
ClassificationUne étiquette par image, avec une probabilité« Que représente cette image ? »yolo26n-cls.pt
DétectionClasse, boîte et score de confiance par objet« Qu’y a-t-il, et où ? »yolo26n.pt
Segmentation d’instanceClasse et masque de pixels par objet« Quelle est la forme exacte de chaque objet ? »yolo26n-seg.pt
Segmentation sémantiqueUne classe pour chaque pixel« De quel type de région s’agit-il pour chaque pixel ? »yolo26n-sem.pt
Estimation de profondeurDistance en mètres pour chaque pixel« À quelle distance se trouve chaque pixel ? »yolo26n-depth.pt
Estimation de poseBoîte et points clés pour chaque personne ou objet« Quelle est la posture du corps ? »yolo26n-pose.pt
Boîtes englobantes orientéesBoîte tournée par objet« Qu’est-ce qui se trouve où, et selon quel angle ? »yolo26n-obb.pt

Deux paires de notions prêtent à confusion. Segmentation d’instance vs segmentation sémantique : la segmentation d’instance sépare chaque objet (trois voitures, trois masques) ; la segmentation sémantique étiquette uniquement les pixels par classe (une région « voiture », sans décompte). Détection vs OBB : les deux renvoient une boîte par objet, mais une OBB pivote avec l’objet, ce qui compte lorsque les objets sont inclinés dans des images prises en plongée.

Une API, sept sorties#

Changer de tâche ne signifie pas changer d’outil. Le fichier de poids détermine le résultat renvoyé, et l’objet Results renseigne l’attribut correspondant :

from ultralytics import YOLO

image = "https://ultralytics.com/images/bus.jpg"
outputs = ["probs", "boxes", "masks", "semantic_mask", "depth", "keypoints", "obb"]

for suffix in ["-cls", "", "-seg", "-sem", "-depth", "-pose", "-obb"]:
    weights = f"yolo26n{suffix}.pt"
    model = YOLO(weights)
    result = model(image, verbose=False)[0]
    filled = [name for name in outputs if getattr(result, name) is not None]
    print(f"{weights:18} task={model.task:9} -> {', '.join(filled)}")
yolo26n-cls.pt     task=classify  -> probs
yolo26n.pt         task=detect    -> boxes
yolo26n-seg.pt     task=segment   -> boxes, masks
yolo26n-sem.pt     task=semantic  -> semantic_mask
yolo26n-depth.pt   task=depth     -> depth
yolo26n-pose.pt    task=pose      -> boxes, keypoints
yolo26n-obb.pt     task=obb       -> obb

Lis la colonne de droite : la segmentation et la pose renvoient aussi des boîtes, car elles ajoutent simplement un élément à la détection. La segmentation sémantique et la profondeur ne renvoient aucune sortie par objet : elles décrivent plutôt chaque pixel. Ton code en aval lit exactement l’un de ces attributs ; la ligne de sortie de ta spécification doit donc le nommer.

Choisir en pratique#

Commence par déterminer ce qu’une prédiction doit décrire, puis choisis la tâche la moins coûteuse qui répond à la question de décision :

  1. Une étiquette pour l’image entière → classification.
  2. Une classe pour chaque pixel, sans besoin de séparer les objets → segmentation sémantique.
  3. Une distance pour chaque pixel → estimation de profondeur.
  4. Une information sur chaque objet :
    • sa position, pour le compter, le localiser ou le filtrer → détection (ajoute le suivi pour conserver son identité d’une image à l’autre) ;
    • sa forme exacte, son contour ou sa surface → segmentation d’instance ;
    • sa posture → pose ;
    • sa rotation dans des images prises en plongée → OBB.

Si deux tâches conviennent, choisis celle qui coûte le moins cher à annoter et à exécuter. La détection est le choix par défaut pour la plupart des produits : les boîtes sont rapides à dessiner et à vérifier, et, avec le suivi, elles permettent déjà le comptage, les alertes de zone et l’analyse du trafic, comme dans cette vue d’autoroute :

Trafic autoroutier suivi par Ultralytics YOLO, avec un identifiant persistant et une trajectoire de mouvement sur chaque voiture, bus et camion

Profondeur : la tâche qui répond à la question « à quelle distance ? »#

L’estimation de profondeur renvoie une carte de la taille de l’image, avec une distance en mètres par pixel — sans classe ni boîte. Utilise-la lorsque la distance détermine la décision : un robot qui évite les obstacles, un véhicule qui ralentit lorsqu’un objet est proche ou une estimation approximative du volume d’un tas.

from ultralytics import YOLO

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

depth = result.depth.data  # meters, one value per pixel
print(f"depth map {tuple(depth.shape)}, nearest {float(depth.min()):.1f} m, farthest {float(depth.max()):.1f} m")
depth map (1080, 810), nearest 2.0 m, farthest 14.9 m

Une caméra unique déduit la profondeur à partir d’indices appris, comme la perspective et la taille des objets. Mesure donc son erreur sur tes propres scènes avant de l’utiliser pour des distances critiques pour la sécurité. La profondeur se combine bien avec la détection : détecte l’objet, puis lis la carte de profondeur dans sa boîte.

Pièges#

ConfusionSymptômeMeilleur choix
Segmentation alors que des boîtes suffiraientAucun code en aval ne lit jamais le masqueDétection
Boîtes droites sur des images prises en plongéeLes boîtes couvrent surtout l’arrière-plan et les objets voisins s’éliminent mutuellementOBB
Classification pour une scène contenant plusieurs objetsL’étiquette dépend d’un petit objetDétection plus une règle
Segmentation sémantique alors que tu as besoin de décomptesLes objets qui se touchent fusionnent en une seule régionSegmentation d’instance
Taille de la boîte utilisée comme approximation de la distanceLes règles ne fonctionnent plus lorsque la taille des objets varieEstimation de profondeur, ou détection plus profondeur
Pose pour vérifier la présenceTu ne lis jamais de point cléDétection
Ne paie pas pour des sorties que tu n’utiliseras pas

Des sorties plus riches coûtent plus cher à chaque étape : les masques et les points clés prennent plus de temps à dessiner et à réviser, et exigent des règles d’annotation plus strictes. Commence par la tâche la moins coûteuse qui répond à la règle de décision, et passe à une solution plus avancée uniquement lorsqu’un utilisateur réel a besoin de ces détails supplémentaires.

Essayer

Reprends la ligne de sortie de ta spécification de la leçon 1 et suis les étapes ci-dessus. Note la tâche, le fichier de poids YOLO26 que tu utiliserais en premier, l’attribut Results que ton code lira et une phrase expliquant pourquoi la tâche suivante, plus coûteuse, n’est pas nécessaire. Tu n’as pas encore de projet ? Utilise la spécification du chariot élévateur.

Terminé lorsque
Tu as terminé la leçon lorsque tous les éléments suivants sont réunis.
  • Tu as nommé une tâche, son fichier de poids YOLO26 et l’attribut Results que ton code lit.

  • Tu as écrit une phrase expliquant pourquoi la tâche suivante, plus coûteuse, n’est pas nécessaire.

  • Tu peux dire si ton projet a besoin de segmentation d’instance ou sémantique, de profondeur, ou d’aucune de ces options — et pourquoi.

Afficher la solution

Pour la spécification du chariot élévateur, la réponse est détection, avec yolo26n.pt, et la lecture de result.boxes.

La décision doit connaître la position des chariots élévateurs et des personnes pour que le code puisse vérifier leur proximité. Les boîtes suffisent. La segmentation d’instance augmenterait le coût d’annotation sans modifier l’alerte, car le bord inférieur d’une boîte indique déjà la position au sol. La pose n’est pas nécessaire, puisque la posture n’entre pas dans la décision. La profondeur pourrait aider à convertir les positions dans l’image en mètres, mais une caméra fixe calibrée permet de cartographier le plancher sans cela. Une OBB ne vaut la peine d’être testée que si les caméras regardent directement vers le bas et que les chariots élévateurs apparaissent selon des angles diagonaux marqués.

Et ensuite ?

Ensuite, examinons la détection de plus près : c’est la tâche de référence et celle par laquelle commencent la plupart des produits.