Ultralytics YOLO27 : Inscris-toi sur la liste d’attente.
Get Started
Développer avec Ultralytics Platform·Créer le jeu de données·Leçon 3/10
Leçonintermédiaire

Annotation intelligente et annotation par lots

Choisis un modèle d’annotation et un seuil de confiance en mesurant le travail de vérification, puis lance l’annotation par lots et évalue-la à l’aide du taux de modification.

Tracer des boîtes à la main prend environ 100 images par heure ; vérifier de bonnes préannotations peut être plusieurs fois plus rapide. Mais si le seuil de confiance d’un modèle d’annotation est mal choisi, le modèle peut créer plus de travail qu’il n’en économise. Et sans vérification, le modèle suivant apprendra ses erreurs. Cette leçon mesure le travail de vérification nécessaire à chaque seuil sur des données réellement annotées, pour que tu choisisses le seuil en fonction des chiffres plutôt que de faire une supposition.

Résultat

Tu peux mesurer le nombre de suppressions et de retracés provoqués par un modèle d’annotation à chaque seuil de confiance, choisir le seuil le plus économique, lancer l’annotation par lots avec ce seuil et calculer le taux de modification de ta vérification.

Parcours accéléré
Si tu connais déjà les bases, voici la version courte.
  1. Appuie sur S dans l’éditeur : SAM pour créer des formes en cliquant, YOLO ou des modèles guidés par des classes pour traiter des images entières.

  2. Teste plusieurs seuils de confiance sur des images annotées et choisis celui qui entraîne le moins de modifications par image.

  3. Lance Plus d’actions > Annotation par lots ; une version du jeu de données est enregistrée avant le démarrage.

  4. Vérifie chaque image, enregistre une deuxième version et calcule le taux de modification avec Comparer les versions.

Pratique

Trois façons de préannoter#

Dans l’éditeur d’annotation, le mode Draw (V) est manuel, tandis que le mode Smart (S) permet à un modèle de proposer des annotations :

Éditeur d’annotation d’Ultralytics Platform sur le jeu de données medical-pills, avec les boutons Draw et Smart dans la barre d’outils et des boîtes bleues autour des pilules sur une plaquette

FamilleFonctionnementTâchesCoût
SAM (SAM 2.1 Tiny à Large, SAM 3, SAM 3.1 par défaut)Clique sur un objet pour créer un masque ; clique à l’extérieur pour en ajouter, à l’intérieur pour en soustraire ; A active ou désactive l’application automatiqueDétection, segmentation, sémantique, OBBFree
YOLO (modèles officiels ou personnalisés)Predict ajoute les détections du modèle ; Map classes aligne les classes du modèle sur celles du jeu de données ; les doublons avec un IoU de 0.7 ou plus sont ignorésDétection, segmentation, sémantique, OBB, poseGratuit dans l’éditeur
Guidé par des classes (Moondream 3.1 par défaut, YOLOE-26x, SAM 3 Text et autres)Repère dans l’image les noms de classes du jeu de données ; les modèles payants de fournisseurs s’exécutent avec ta propre clé APIJeux de données de détection comptant de 1 à 200 classesModèles hébergés gratuits

Éditeur d’annotation d’Ultralytics Platform en mode Smart, avec un modèle YOLO et un bouton Predict dans la barre d’outils, au-dessus des boîtes autour des pilules dans l’image

SAM nécessite un clic par objet et produit les formes les plus précises. Les prédictions du modèle nécessitent un clic par image et leur qualité dépend du modèle ; le reste de cette leçon porte donc sur le choix et le réglage de ce modèle.

Choisir le modèle d’annotation#

Un modèle v0 peu performant, entraîné sur 100 à 200 annotations manuelles, reste préférable au traçage à partir de zéro et, dès la v1, devient généralement un partenaire utile d’apprentissage actif. Les performances des modèles guidés par des classes varient énormément selon le domaine : certains repèrent presque tout dans des photos courantes, mais manquent la plupart des objets dans les images de PCB, de radiographies ou de vente au détail. Vérifie donc dix prédictions avant de faire confiance à un modèle.

Exemple pratique : mesurer le travail de vérification pour chaque seuil#

Le seuil de confiance détermine le travail des personnes chargées de la vérification : trop bas, elles suppriment les fausses boîtes ; trop haut, elles tracent les boîtes ignorées par le modèle. Mesure le travail sur des images déjà correctement annotées, ici les 128 images annotées de COCO128, avec YOLO26n préentraîné comme modèle d’annotation :

from pathlib import Path

import torch

from ultralytics import YOLO
from ultralytics.data.utils import check_det_dataset
from ultralytics.utils.metrics import box_iou
from ultralytics.utils.ops import xywhn2xyxy

data = check_det_dataset("coco128.yaml")  # 128 labeled images, downloaded on first use
images = sorted(Path(data["train"]).glob("*.jpg"))
results = YOLO("yolo26n.pt").predict(images, conf=0.05, verbose=False)  # your labeling model

def review_work(result, image, conf):
    """Return (kept, delete, draw): correct pre-labels, false positives to delete, missed objects to draw."""
    label = Path(str(image).replace("images", "labels")).with_suffix(".txt")
    lines = label.read_text().splitlines() if label.exists() else []  # no label file = background image
    gt = torch.tensor([[float(x) for x in line.split()] for line in lines]).reshape(-1, 5)
    h, w = result.orig_shape
    gt_boxes, gt_cls = xywhn2xyxy(gt[:, 1:], w=w, h=h), gt[:, 0]
    boxes = result.boxes[result.boxes.conf >= conf]
    iou = box_iou(boxes.xyxy, gt_boxes) * (boxes.cls[:, None] == gt_cls[None])  # IoU with same-class boxes only
    matched = set()
    for row in iou:  # greedily match each prediction to its best unmatched ground-truth box
        for j in row.argsort(descending=True).tolist():
            if row[j] >= 0.5 and j not in matched:
                matched.add(j)
                break
    return len(matched), len(boxes) - len(matched), len(gt) - len(matched)

print("conf  kept  delete  draw  edits/image")
for conf in (0.1, 0.25, 0.4, 0.5, 0.7):
    kept, delete, draw = (sum(t) for t in zip(*(review_work(r, i, conf) for r, i in zip(results, images))))
    print(f"{conf:<5} {kept:>4} {delete:>7} {draw:>5} {(delete + draw) / len(images):>12.1f}")
conf  kept  delete  draw  edits/image
0.1    590     490   339          6.5
0.25   468     138   461          4.7
0.4    386      58   543          4.7
0.5    328      35   601          5.0
0.7    230       6   699          5.5

Fonctionnement et interprétation des résultats :

  1. Le modèle effectue une seule prédiction avec une conf=0.05 basse ; chaque seuil filtre ensuite les mêmes prédictions, ce qui rend le balayage rapide.
  2. review_work associe chaque prédiction à une boîte de référence de la même classe avec un IoU d’au moins 0.5. Les prédictions non associées sont des boîtes que la personne chargée de la vérification supprime ; les annotations de référence non associées correspondent aux objets qu’elle trace.
  3. Le nombre de modifications par image est minimal entre 0.25 et 0.4 (4.7). En dessous, les suppressions explosent ; au-dessus, ce sont les objets manqués.
  4. Même avec le meilleur seuil, les personnes chargées de la vérification tracent environ 3.6 boîtes par image, car les nombreux petits objets de COCO sont difficiles à repérer pour un modèle nano.

Règles de décision : choisis le seuil qui entraîne le moins de modifications par image. Si tracer domine à tous les seuils, le modèle d’annotation est trop faible pour les données : utilise un modèle plus grand ou ton modèle affiné. Si supprimer domine même à 0.5, le modèle confond des classes qui se ressemblent ; examine la matrice de confusion avant de poursuivre l’annotation. Pour ton propre projet, effectue ce balayage avec ton modèle affiné sur 50 à 100 images que tu as déjà annotées.

Lancer l’annotation par lots#

L’annotation par lots applique un modèle YOLO ou guidé par des classes à l’ensemble du jeu de données. Ouvre-la depuis Plus d’actions > Annotation par lots, ou clique sur Tout annoter dans la notification après une prédiction dans l’éditeur :

Boîte de dialogue Batch Annotation d’Ultralytics Platform avec Moondream 3.1 sélectionné, des aperçus de prédictions sur six photos d’ouvriers, une option Include annotated images et un coût estimé de 0,05 $

  1. Choisis le modèle. Pour les jeux de données de détection, Moondream 3.1 est sélectionné par défaut ; choisis plutôt ton modèle affiné ou ton modèle YOLO.
  2. Pour un modèle YOLO, règle le seuil de confiance sur la valeur choisie lors du balayage (la valeur par défaut est 0.25) ainsi que l’IoU (0.7), puis vérifie les aperçus des échantillons.
  3. Laisse l’option Inclure les images annotées désactivée pour n’annoter que les images sans annotation.
  4. Vérifie le coût estimé (1,00 $ pour 1 000 images, minimum de 0,01 $), puis clique sur Démarrer.

Le lancement d’une exécution enregistre d’abord une version du jeu de données, ce qui te permet de restaurer son état initial. Arrêter conserve les images déjà traitées et les facture.

Vérifier, puis mesurer le taux de modification#

Les prédictions sont enregistrées comme des annotations ordinaires ; rien n’indique donc qu’elles n’ont pas été vérifiées. Filtre par classe pour examiner d’abord les classes rares, puis trie par Annotations en ordre croissant (objets probablement manqués) et décroissant (scènes encombrées où les boîtes fusionnent). Crée ensuite une version, ouvre Comparer les versions dans l’onglet Versions et sélectionne v_auto comme version De :

NombreSignification
AjoutésObjets manqués par le modèle, plus la copie corrigée de chaque boîte modifiée
SupprimésFaux positifs, plus l’original de chaque boîte modifiée
Taux de modification(ajoutés + supprimés) ÷ annotations dans v_auto, valeur maximale, car une boîte corrigée est comptée deux fois

Suis le taux de modification pour chaque lot. Une hausse est le premier signe que les nouvelles images s’écartent de ce que connaît le modèle d’annotation. La leçon sur les bonnes pratiques d’annotation aborde les guides d’annotation et la concordance entre les personnes chargées de la vérification.

Pièges#

Entraîner le modèle sur des prédictions non vérifiées

Symptôme : chaque nouvel entraînement obtient à peu près le même score, et les mêmes objets ne sont jamais détectés. Solution : les pré-étiquettes non vérifiées inscrivent les erreurs systématiques du modèle d'annotation comme des vérités dans le jeu de données : une classe ressemblante, un bord de boîte systématiquement trop lâche, des objets qu'il ne détecte jamais. Vérifie chaque image avant qu'elle n'entre dans une version d'entraînement.

Se fier à un modèle guidé par des classes dans un domaine spécialisé

Symptôme : l'annotation par lots se termine, mais la plupart des objets restent sans étiquette. Solution : exécute d'abord le modèle dans l'éditeur sur dix images représentatives. S'il manque plus que quelques objets, annote manuellement un jeu initial et entraîne plutôt une version v0.

Les classes du modèle et du jeu de données ne correspondent pas

Symptôme : les boîtes prédites portent les mauvais noms de classe. Correctif : lorsque les classes du modèle diffèrent de celles du jeu de données, l’étape Mapper les classes associe chaque classe du modèle à une classe du jeu de données ou l’ignore. Fais les associations avec soin : une mauvaise association renomme toutes les boîtes de cette classe.

Essayer

Exécute threshold_sweep.py avec ton modèle d’annotation sur 50 à 100 images que tu as déjà annotées, puis choisis le seuil qui entraîne le moins de modifications par image. Lance l’annotation par lots avec ce seuil sur au moins 50 images non annotées, vérifie-les toutes, enregistre une version et calcule le taux de modification avec Comparer les versions.

Terminé lorsque
Tu as terminé la leçon lorsque tous les éléments suivants sont réunis.
  • Tu as un tableau de balayage des seuils pour ton modèle d’annotation et un seuil choisi, avec sa justification.

  • Toutes les images préannotées ont été vérifiées, et deux versions encadrent la vérification.

  • Tu as calculé le taux de modification et identifié l’erreur la plus fréquente de ton modèle d’annotation.

Afficher la solution

Exemple détaillé : le balayage sélectionne 0.35 pour un ajustement fin destiné à l’inspection de pilules. L’annotation par lots enregistre v4 avec 1 240 annotations. Après vérification, Comparer les versions v4 → v5 indique 96 ajouts et 152 suppressions ; le taux de modification est donc (96 + 152) ÷ 1 240 = 20 %. Comme les suppressions sont plus nombreuses que les ajouts, le modèle surestime : l’inspection des boîtes supprimées montre qu’il prend les reflets des plaquettes pour des pilules. Deux mesures s’imposent : augmenter la confiance d’un cran (0.35 → 0.45) pour le prochain lot et vérifier que le taux baisse, puis ajouter 30 images vérifiées de plaquettes brillantes à la prochaine version d’entraînement pour que l’ajustement fin apprenne à faire la différence.

Et ensuite ?

Tu as tes étiquettes. Ensuite, tu vas vérifier que le jeu de données ne présente aucune fuite entre les partitions et figer une version.