Ultralytics YOLO27: Trag dich in die Warteliste ein.
Get Started
Leistungsstarke YOLO-Datensätze erstellen·Beschriftung·Lektion 4/10
LektionAnfänger

Bewährte Verfahren für die Annotation

Verfasse einen Leitfaden zur Beschriftung, wähle ein Werkzeug, vermeide die zehn Fehler, die unbemerkt die Genauigkeit beeinträchtigen, und miss die Übereinstimmung der Annotierenden mit einem Skript, bevor du den Umfang erhöhst.

Die Qualität der Beschriftungen setzt der Modellqualität Grenzen. Wenn zehn Annotierende „Palette“ jeweils etwas anders interpretieren, entsteht ein Datensatz, der alle zehn Interpretationen gleichzeitig vermittelt; wie lange du auch trainierst, der Widerspruch lässt sich nicht auflösen. Ein schriftlicher Leitfaden, eine gemessene Kalibrierungsrunde und eine kurze Liste bekannter Fehler sorgen für einheitliche Beschriftungen – unabhängig davon, ob eine Person 500 Bilder oder ein Team 50.000 Bilder beschriftet.

Lernergebnis

Verfasse einen Leitfaden zur Beschriftung, miss mit einem Skript die Übereinstimmung zwischen zwei Annotierenden und halte jede Abweichung als schriftliche Regel fest.

Schnellkurs
Wenn du dich bereits auskennst, findest du hier die Kurzfassung.
  1. Lege Klassenbeschreibungen, Zeichenregeln und eine Regel für Verdeckungen fest, bevor die Beschriftung beginnt.

  2. Beschrifte jedes relevante Objekt in jedem Bild mit eng an den sichtbaren Objekten anliegenden Boxen.

  3. Miss die Übereinstimmung anhand einer gemeinsamen Stichprobe; weite den Umfang erst bei mindestens 90 % aus.

  4. Prüfe jede vom Modell vorgeschlagene Beschriftung von Hand; übernimm sie niemals automatisch.

Praxisnah

Wähle das Annotationswerkzeug#

Welches Werkzeug passt, hängt von der Aufgabe, dem Team und dem Ort des Trainings ab:

WerkzeugAm besten geeignet fürHinweise
Ultralytics PlatformAlle sieben YOLO-Aufgaben: ein Editor für Boxen, Polygone, semantische Masken, Keypoints, gedrehte Boxen und Bildklassen sowie hochgeladene Tiefenkarten; intelligente Annotation mit SAMBeschriftungen, Datensatzdiagramme und Training an einem Ort; kein Export erforderlich
CVATGroße Teams, Videos und komplexe PrüfabläufeSelbst gehostet oder in der Cloud
Label StudioMultimodale Projekte (Bild + Text + Audio)Flexible Konfiguration, steilere Lernkurve
LabelmePolygonbeschriftung für kleine TeamsEinfache Desktop-Anwendung
LabelImgSchnelle Prototypen nur mit BoxenSchlank; das Repository wird nicht mehr gepflegt

Auf der Ultralytics Platform funktioniert die intelligente Annotation mit SAM 2.1, SAM 3 und SAM 3.1 für Datensätze zur Objekterkennung, Segmentierung, semantischen Segmentierung und OBB. Vergewissere dich unabhängig von deiner Wahl, dass das Werkzeug das für deine Aufgabe benötigte YOLO-Format exportiert; Einen benutzerdefinierten Datensatz vorbereiten behandelt das Beschriftungsformat und die Konvertierung.

Die sieben Beschriftungstypen#

Ultralytics-YOLO-Aufgaben im Vergleich: Klassifizierung, Objekterkennung, Segmentierung, semantische Segmentierung, Pose, OBB und Tiefe

BeschriftungstypWas du einzeichnestAufgabe
KlassenbeschriftungEine Beschriftung pro BildKlassifizierung
BegrenzungsrahmenAchsenparalleles Rechteck pro ObjektObjekterkennung
PolygonUmriss jedes einzelnen ObjektsInstanzsegmentierung
Dichte MaskeEine Klasse für jedes PixelSemantische Segmentierung
KeypointsBenannte Punkte wie GelenkePose
Orientierte BoxGedrehtes Rechteck pro ObjektOBB
TiefenkarteNichts: eine Tiefenkarte mit Entfernungswerten für jedes Pixel, aufgenommen mit einem Tiefensensor und dem jeweiligen Bild zugeordnetTiefenschätzung

Verfasse zuerst den Leitfaden zur Beschriftung#

Verfasse einen Leitfaden mit fünf Abschnitten, bevor jemand eine Box einzeichnet:

  1. Klassenbeschreibungen: ein Absatz pro Klasse mit positiven Beispielen, ähnlichen Objekten, die nicht zu dieser Klasse gehören, und Grenzfällen.
  2. Zeichenregeln: eng an den sichtbaren Objekten anliegende Boxen; Polygone, die dem sichtbaren Umriss folgen.
  3. Regeln für Verdeckungen und Größe: ein Schwellenwert für teilweise sichtbare Objekte („beschriften, wenn sich die Klasse erkennen lässt“) und einer für sehr kleine Objekte („Personen beschriften, die mehr als 10 Pixel hoch sind“); beide Regeln gelten überall.
  4. Protokoll für Zweifelsfälle: jede Frage nach dem Muster „Was ist mit diesem Fall?“ samt vereinbarter Antwort und Screenshot.
  5. Was ausgelassen wird: alles, was für diese Aufgabe nicht beschriftet werden muss.

Ein oder zwei Seiten mit Screenshots reichen völlig aus. Der Leitfaden bildet dann die Grundlage für einen kurzen Ablauf, der vor der Ausweitung der Beschriftung durchgeführt wird:

Unvollständige Kennzeichnung beeinträchtigt das Training unbemerkt

Kennzeichne jedes relevante Objekt in jedem Bild. Ein nicht gekennzeichneter Gabelstapler bringt dem Modell bei, dass Gabelstapler manchmal zum Hintergrund gehören, sodass es lernt, sie zu übersehen. Ein teilweise gekennzeichneter Datensatz sieht bis zum Trainingsbeginn genauso aus wie ein kleinerer, vollständig gekennzeichneter Datensatz. Schließe jedes Bild ab, bevor du mit dem nächsten weitermachst.

Zehn Fehler, die die Genauigkeit beeinträchtigen#

Die Fehler, die das Annotationsteam von Ultralytics am häufigsten sieht, veranschaulicht anhand von Bildern mit Gabelstaplern, Personen und Paletten (nach einer Präsentation von Alexis Schutzger). Nimm sie als erste Einträge in deinen Leitfaden auf.

1. Die Form des Objekts ergänzen. Beschrifte nur, was du sehen kannst. Hier steht der Gabelstapler hinter einer Person und einem Holzstapel, doch seine Box reicht über beide hinweg bis zu der Stelle, an der die annotierende Person den Rest des Fahrzeugs vermutet. Zeichne eine Box um den sichtbaren Teil.

Annotationsfehler: Eine Gabelstapler-Box reicht über die davor befindliche Person und den Holzstapel hinweg und ergänzt den verdeckten Teil, statt nur das Sichtbare einzurahmen

2. Ungenaue Boxen. Boxen müssen eng am Objekt anliegen. Diese Box schneidet die Leuchten am Überrollschutz; eine Box, die einen Teil des Objekts abschneidet oder einen Bodenrand mit einschließt, vermittelt die falsche Ausdehnung.

Annotationsfehler: Eine ungenaue Gabelstapler-Box, deren obere Kante die Leuchten am Überrollschutz schneidet, statt das ganze Objekt einzuschließen

3. Uneinheitliche Konventionen bei ähnlichen Objekten. Die linke Box schließt die Gabeln ein, die rechte nicht. Das Modell erhält zwei Antworten auf dieselbe Frage. Halte daher die Konvention schriftlich fest: Gabeln einschließen oder weglassen.

Annotationsfehler: Zwei ähnliche Gabelstapler sind nach unterschiedlichen Konventionen eingerahmt; eine Box schließt die Gabeln ein, die andere nicht

4. Fehlende Beschriftungen. Neben dem Gabelstapler stehen zwei Personen, doch nur eine ist eingerahmt. Die nicht beschriftete Person wird so zum Trainingsbeispiel für „Personen sind Hintergrund“.

Annotationsfehler: Der Gabelstapler und eine Landwirtin sind eingerahmt, die zweite Landwirtin ist jedoch nicht beschriftet

5. Falsche Klasse. Prüfe die Klasse, nicht nur die Box. Eine korrekte Box um einen Gabelstapler mit der Klasse person verfälscht beide Klassen und entsteht meist durch einen versehentlichen Tastenkürzel-Treffer.

Fehler bei der Annotation: korrekt gezeichnete Box um einen Gabelstapler, der der falschen Klasse „Person“ zugewiesen wurde

6. Leere oder verirrte Annotationen. Jede Annotation braucht ein echtes Objekt und eine echte Klasse. Ein verirrter Klick hinterlässt eine fast leere Box wie die hier in der Ecke, und eine Box, die ohne Klasse gespeichert wird, kann als None oder Klasse 0 exportiert werden. Korrigiere oder lösche sie.

Fehler bei der Annotation: eine verirrte, fast leere Annotation eines Gabelstaplers in der Bildecke neben der echten Box des Gabelstaplers

7. Doppelte Boxen. Ein Objekt, eine Box. Zwei überlappende Boxen um denselben Gabelstapler erhöhen die Anzahl der Instanzen und bringen dem Modell bei, Duplikate vorherzusagen.

Fehler bei der Annotation: zwei überlappende, doppelte Boxen um einen einzelnen Gabelstapler

8. Unklare Richtlinien. Ohne schriftliche Regel improvisieren die Annotierenden: Hier hat eine Person nur den Kopf der Fahrerin oder des Fahrers eingerahmt und ihm die Klasse forklift zugewiesen. Gehört die fahrende Person zum Gabelstapler oder ist sie eine separate person? Beantworte diese Frage einmalig in der Anleitung.

Fehler bei der Annotation: ohne klare Richtlinie rahmt eine annotierende Person nur den Kopf der Bedienperson ein und kennzeichnet ihn als Gabelstapler

9. Ausreißerbilder. Entferne Bilder, die nicht zur späteren Anwendung passen. Ein Foto einer Stadtsilhouette in einem Gabelstapler-Datensatz bringt nichts Nützliches bei und verwässert alles andere.

Fehler bei der Annotation: ein Foto eines Wolkenkratzers als Bildausreißer in einem Gabelstapler-Datensatz

10. Durch Augmentierung verursachte Mehrdeutigkeit. Wenn ein Zuschnitt das Merkmal entfernen kann, das eine Klasse definiert, werden zwei Klassen identisch. Schneide das Ecksymbol eines Herzkönigs ab, und er sieht aus wie die Karten mit der Bezeichnung unknown. Augmentierung mit Bedacht einsetzen erklärt die Lösung.

Fehler bei der Annotation: Spielkarten, bei denen ein Herzkönig ohne das abgeschnittene Ecksymbol wie die als unbekannt gekennzeichneten Karten aussieht

Übereinstimmung messen, nicht schätzen#

Bei einer Kalibrierungsrunde erhalten zwei annotierende Personen dieselben Bilder, und ihre Labels werden Objekt für Objekt verglichen. Zwei Labels stimmen überein, wenn sie dieselbe Klasse haben und sich mit einem IoU von mindestens 0,5 überlappen. Dieses Skript berechnet den Wert anhand der Validierungsbilder von COCO8. Damit das Skript ohne zweite Person ausführbar ist, übernimmt ein vortrainiertes Modell die Rolle der annotierenden Person B; bei einem echten Team liest du die Boxen von B stattdessen aus den Labeldateien aus:

from pathlib import Path

import torch

from ultralytics import YOLO
from ultralytics.data.utils import check_det_dataset, img2label_paths
from ultralytics.utils.metrics import box_iou
from ultralytics.utils.ops import xywh2xyxy

data = check_det_dataset("coco8.yaml")
model = YOLO("yolo26n.pt")  # stands in for a second annotator; compare two label folders the same way
names = data["names"]

matched = total = 0
for image in sorted(Path(data["val"]).glob("*.jpg")):
    rows = [r.split() for r in Path(img2label_paths([str(image)])[0]).read_text().splitlines() if r.strip()]
    a_cls = torch.tensor([int(r[0]) for r in rows])  # annotator A: the dataset labels
    a_box = xywh2xyxy(torch.tensor([[float(v) for v in r[1:]] for r in rows]))
    b = model(image, conf=0.5, verbose=False)[0].boxes  # annotator B: confident model proposals
    iou = box_iou(a_box, b.xyxyn)
    used = set()
    for i in range(len(rows)):  # pair each A object with the best unused same-class B box at IoU >= 0.5
        ok = [j for j in range(len(b)) if j not in used and b.cls[j] == a_cls[i] and iou[i, j] >= 0.5]
        if ok:
            used.add(max(ok, key=lambda j: iou[i, j]))
        else:
            print(f"{image.name}: {names[int(a_cls[i])]} labeled by A only")
    for j in set(range(len(b))) - used:
        print(f"{image.name}: {names[int(b.cls[j])]} labeled by B only")
    matched += len(used)
    total += len(rows) + len(b) - len(used)

print(f"agreement: {matched}/{total} objects = {matched / total:.0%}")
000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: potted plant labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000049.jpg: person labeled by A only
000000000061.jpg: person labeled by A only
000000000061.jpg: elephant labeled by A only
000000000061.jpg: person labeled by A only
agreement: 8/17 objects = 47%

So liest du die Ergebnisse:

  • Der Wert entspricht der Anzahl der zugeordneten Objekte geteilt durch die Anzahl aller von beiden annotierenden Personen eingezeichneten Objekte: 8 von 17.
  • Die Abweichungen häufen sich. Alle neun treten in zwei Bildern auf, und die meisten betreffen Personen, die deutlich weniger als 1 % des Bildes einnehmen. Das sind nicht neun zufällige Fehler, sondern eine fehlende Regel: Kennzeichnen wir Personen in der Ferne?
  • Die Lösung ist ein Eintrag in der Anleitung, zum Beispiel: „Kennzeichne jede Person, die bei einer Bildgröße von 640 Pixeln mindestens 10 Pixel groß ist.“ Beide annotierenden Personen beschriften die zwei Bilder erneut, und anschließend wird der Wert noch einmal gemessen.

Die Entscheidungsregel: Erst dann mehr Annotationen erstellen lassen, wenn die Übereinstimmung 90 % erreicht. Darunter vergrößert jede zusätzliche annotierende Person die Inkonsistenz.

Intelligente Annotation als Beschleuniger einsetzen#

Bei der intelligenten Annotation schlägt ein YOLO-Modell oder SAM Labels vor, die eine Person bestätigt oder korrigiert. So kann der Durchsatz um ein Vielfaches steigen. Arbeite in Runden: Trainiere mit einem geprüften Stapel, lass das Modell die nächsten Labels vorschlagen, prüfe sie und trainiere erneut. Das ist die Schleife des aktiven Lernens, und Intelligente Annotation und Stapelbeschriftung führt dich auf der Ultralytics Platform durch den Ablauf.

Automatisch akzeptierte Vorschläge übernehmen die Modellfehler in die Daten

Ein Modell, das kleine Personen übersieht, schlägt für sie keine Boxen vor. Klickt eine prüfende Person auf „Alle akzeptieren“, werden sie auch nicht hinzugefügt. Das nächste Modell, das anhand dieser Kennzeichnungen trainiert wird, übersieht sie noch überzeugter. Prüfe jedes Bild und ergänze, was das Modell übersehen hat, statt nur seine Einzeichnungen zu korrigieren.

Mit bloßem Auge prüfen#

Bei jedem Ultralytics-Trainingslauf werden labels.jpg und train_batch*.jpg im Ordner des Trainingslaufs gespeichert. Die erste Datei stellt Klassenanzahlen sowie Positionen und Größen der Boxen dar; die anderen zeigen echte Trainingsbilder mit eingezeichneten Labels. Öffne sie, bevor die erste Epoche abgeschlossen ist. Das Auge erkennt, was Kennzahlen niemals erkennen: Boxen um Schatten, vertauschte Klassen-IDs und Polygone, die nicht geschlossen sind.

Ausprobieren

Erstelle eine einseitige Anleitung für deine Klassen mit den fünf obigen Abschnitten und den zehn Fehlern als Ausgangspunkt. Gib zwei Personen dieselben 20–50 Bilder, lass sie unabhängig voneinander annotieren und passe agreement.py so an, dass die beiden Labelordner verglichen werden. Ergebnis: die Anleitung, der Übereinstimmungswert und eine neue Regel für jede Gruppe von Abweichungen.

Abgeschlossen, wenn
Du hast die Lektion abgeschlossen, wenn alle folgenden Punkte zutreffen.
  • Die Anleitung definiert jede Klasse und legt Regeln für das Zeichnen, Verdeckungen und Größen fest.

  • Zwei annotierende Personen haben dieselben Bilder beschriftet, und die Übereinstimmung wird mit einem Skript gemessen, nicht geschätzt.

  • Aus jeder Gruppe von Abweichungen ist eine schriftliche Regel geworden, und nach der erneuten Annotation beträgt die Übereinstimmung mindestens 90 %.

Lösung anzeigen

Aus den Abweichungen bei COCO8 werden Anleitungseinträge wie diese:

AbweichungErgänzte Regel in der Anleitung
Personen in der Ferne in 000000000049.jpg nur von A gekennzeichnetKennzeichne jede Person, die bei einer Bildgröße von 640 Pixeln mindestens 10 Pixel groß ist; überspringe kleinere Personen in allen Bildern.
Topfpflanze am Bildrand nur von A gekennzeichnetKennzeichne ein Objekt, das vom Bildrand abgeschnitten wird, wenn mindestens die Hälfte davon sichtbar ist.
Elefant, der in 000000000061.jpg teilweise von einem anderen Elefanten verdeckt wirdKennzeichne verdeckte Tiere, wenn der Kopf oder die Hälfte des Körpers sichtbar ist; ziehe die Box nur um den sichtbaren Teil.

Um zwei Personen statt einer Person und einem Modell zu vergleichen, lies die Zeilen von annotierender Person B aus dem zweiten Labelordner aus, genau wie das Skript die Zeilen von A ausliest (Path("labels_b", image.stem + ".txt")), erstelle daraus mit denselben zwei Zeilen b_cls und b_box und verwende diese überall dort, wo das Skript b.cls und b.xyxyn ausliest. Führe das Skript nach der erneuten Annotation noch einmal aus; die Runde ist abgeschlossen, wenn der Wert über 90 % liegt.

Wie es weitergeht

Mit fertigen Labels prüft die nächste Lektion die Qualität und findet, was in der Anleitung fehlt, bevor es einen Trainingslauf kostet.