Ultralytics YOLO27: Trag dich in die Warteliste ein.
Get Started
LektionAnfänger

Beginne mit dem Geschäftsziel

Wandle ein Geschäftsziel in eine Computer-Vision-Aufgabe, festgelegte Klassen und einen Abnahmetest um, den du als Code ausführen kannst – bevor auch nur ein einziges Bild erfasst wird.

Ein Schreibtisch mit einem Laptop, auf dem ein beschrifteter Bilddatensatz zu sehen ist, sortierten Fotoabzügen, Haftnotizen mit Klassenbezeichnungen und einer Datensatz-Checkliste

Ein Lagerteam fotografiert einen Monat lang alles und erfährt dann, dass die Sicherheitsleitung nur Personen in der Nähe fahrender Gabelstapler erfassen möchte. Die Hälfte der Beschriftungen muss deshalb erneuert werden. Eine einseitige Zielsetzung, auf die man sich vor dem ersten Foto einigt, verhindert das. Sie dauert einen Nachmittag und bestimmt alle späteren Entscheidungen in diesem Kurs: was erfasst und beschriftet wird und wann das Modell gut genug für den Einsatz ist.

Lernergebnis

Erstelle eine einseitige Zielsetzung und wandle ihre Erfolgskennzahl in ein Abnahmetestskript um, das für jedes Modell PASS oder FAIL ausgibt.

Schnellkurs
Wenn du dich bereits auskennst, findest du hier die Kurzfassung.
  1. Formuliere das Geschäftsziel als einen messbaren Satz mit einer Frist.

  2. Wähle die einfachste der sieben Computer-Vision-Aufgaben, die das Ziel erfüllt.

  3. Definiere 3–10 Klassen mit jeweils einem Satz und nenne für jede Klasse ein ähnlich aussehendes Objekt, das nicht dazugehört.

  4. Schreibe den Abnahmetest auf: Kennzahl, Schwellenwert und ein ungesehenes Holdout-Set. Führe ihn dann als Code aus.

  5. Liste auf, was Version 1 nicht abdecken wird.

Praxisnah

Die einseitige Zielsetzung#

Ausgaben der Ultralytics-YOLO-Aufgaben im Vergleich: Detektion, Pose, Segmentierung, Klassifizierung, OBB, semantische Segmentierung und Tiefe

Fünf Zeilen beantworten die Fragen, von denen alle späteren Schritte abhängen. Der Leitfaden zum Festlegen von Projektzielen behandelt dieselben Themen ausführlicher. Hier ist ein ausgefülltes Beispiel aus einem Lager, auf dem dieser Kurs aufbaut:

ZeileBeantwortete FrageBeispiel aus dem Lager
GeschäftszielWas ändert sich für das Unternehmen, und bis wann?Die Zahl der Beinaheunfälle an den Lagertoren innerhalb von sechs Monaten um 30 % senken.
Computer-Vision-AufgabeWas gibt das Modell aus?Objekterkennung: Boxen um Gabelstapler und Personen.
KlassenWas genau erhält eine Beschriftung?forklift, person, pallet; alles andere ist Hintergrund.
AbnahmetestWelcher Wert bedeutet „bereit für den Einsatz“?Recall für person ≥ 0.95 bei einer Präzision ≥ 0.85 auf 500 Frames von Kameras, die nicht fürs Training verwendet wurden.
Nicht im UmfangWas verspricht Version 1 nicht?Stockdunkle Laderampen, vollständig hinter Regalen verborgene Personen, manuelle Hubwagen.

Hänge die Seite dort auf, wo das ganze Team sie sehen kann. Wenn später jemand aus dem Kreis der Beteiligten eine Zeile infrage stellt, ändere zuerst die Seite und erst danach den Datensatz.

Wähle die einfachste Aufgabe, die die Frage beantwortet#

Dieselbe Szene mit Katze und Hund, auf drei Arten interpretiert: Bei der Bildklassifizierung geht es darum, ob eine Katze zu sehen ist, bei der Objekterkennung darum, was sich wo befindet, und bei der Bildsegmentierung darum, welche Pixel zu welchem Objekt gehören

Die Aufgabe bestimmt, was Annotatoren einzeichnen müssen, und davon hängt der Großteil des Beschriftungsaufwands ab. Gehe diesen Entscheidungsbaum durch und höre bei der ersten Aufgabe auf, die die Geschäftsfrage beantwortet:

Ultralytics YOLO unterstützt sieben Aufgaben. Bei der Planung des Datensatzes kommt es darauf an, wie viel Aufwand die Beschriftung jeder Aufgabe erfordert; Grundlagen der Computer Vision vergleicht sie ausführlich in der Lektion zu Computer-Vision-Aufgaben.

AufgabeWas Annotatoren erstellenBeschriftungsaufwandWähle diese Aufgabe, wenn …
KlassifizierungEine Beschriftung pro BildAm geringstenEine Antwort pro Bild ausreicht
ObjekterkennungKlasse + achsenparallele Box pro ObjektGeringDu Objekte zählen oder lokalisieren musst
OBBKlasse + gedrehte Box pro ObjektMittelObjekte lang und schmal sind oder von oben aufgenommen werden
PoseKlasse + benannte Keypoints pro ObjektHochPositionen von Gelenken oder Teilen sind wichtig
InstanzsegmentierungKlasse + Polygon pro ObjektHochDie Umrisse jedes Objekts sind wichtig
Semantische SegmentierungEine Klasse für jedes PixelAm höchstenDu brauchst Bereiche, keine zählbaren Objekte
TiefenschätzungNichts eingezeichnet: eine Tiefenkarte pro Bild, normalerweise von einem TiefensensorHängt von der Aufnahmehardware abDu brauchst die Entfernung für jedes Pixel

Arten der Bildannotation bei einer Staude Bananen: Die Klassifizierung zeigt das Vorhandensein, die Objekterkennung ergänzt Position und Anzahl, die semantische Segmentierung zeigt, welche Pixel zu Bananen gehören, und die Instanzsegmentierung ergänzt Größe und Form jeder einzelnen Banane

Lies die Bananenübersicht wie eine Preisliste: Die Objekterkennung liefert bereits Vorhandensein, Position und Anzahl; nur die beiden Segmentierungsfelder ergänzen Größe und Form – bei deutlich höheren Annotationskosten. Wenn das Unternehmen nur wissen muss, „wie viele Bananen“ es gibt, ist die Objekterkennung die richtige Wahl, und Polygone sind verschwendetes Budget.

Segmentierung verbraucht standardmäßig das Budget

Teams greifen oft zur Segmentierung, weil sie präziser wirkt, und haben dann ihr Kennzeichnungsbudget aufgebraucht, bevor der Datensatz Nachtschichten, Regen oder den zweiten Standort abdeckt. Polygone kosten pro Objekt ein Mehrfaches von Boxen. Entscheide dich nur dann für Segmentierung, wenn ein Ziel ausdrücklich die Umrisslinie erfordert, etwa zum Flächenmessen oder Ausschneiden einer Maske.

Formuliere Klassen, die Annotatoren zuordnen können#

Eine Klasse ist nur dann nützlich, wenn zwei Annotatoren dasselbe Objekt gleich kennzeichnen. Schreibe für jede Klasse eine Definition in einem Satz, die ein ähnlich aussehendes Objekt nennt, das sie ausschließt:

  • forklift: ein motorisierter Gabelstapler einschließlich Gabeln und Hubmast. Handhubwagen sind ausgeschlossen.
  • person: jeder Mensch, auch wenn er teilweise sichtbar oder sitzend ist oder sich in einer Fahrzeugkabine befindet. Spiegelungen und Poster sind ausgeschlossen.
  • pallet: eine hölzerne oder Kunststoffpalette für den Versand, beladen oder leer. Gestapelte Kisten ohne Palettenunterbau sind ausgeschlossen.

Wähle anschließend bewusst den Detaillierungsgrad. Grobe Klassen („Fahrzeug“) sind günstiger und lassen sich schneller vereinheitlichen; feinere Klassen („Limousine“, „Pick-up“) sind für nachgelagerte Anwendungen nützlicher, aber schwerer konsistent zu halten. Beginne mit dem, was das Unternehmen braucht. Feine Kennzeichnungen lassen sich später mit einer Codezeile zu groben Klassen zusammenfassen; grobe Kennzeichnungen lassen sich jedoch nur durch erneute Annotation aufteilen.

Was du nicht schriftlich festhalten kannst, können Annotierende nicht kennzeichnen

„Alles, was gefährlich aussieht“ oder „Zeug, das den Gang blockiert“ ist keine Klasse. Damit muss jede annotierende Person selbst urteilen, und ein Modell, das anhand uneinheitlicher Urteile trainiert wurde, lernt diese Uneinheitlichkeit. Formuliere eine vage Klasse so lange um, bis eine neue annotierende Person sie allein anhand der Definition anwenden kann, oder mache daraus eine Regel, die nach der Erkennung angewendet wird (zum Beispiel „jedes pallet innerhalb des Gangpolygons“).

Mach aus der Metrik einen ausführbaren Abnahmetest#

Wähle die Metrik passend zu den Kosten eines Fehlers:

  • Ein übersehenes Objekt ist teuer (Sicherheit, Defekte): Lege für diese Klasse eine Recall-Schwelle fest.
  • Ein Fehlalarm ist teuer (automatisches Aussortieren von Teilen, Alarmierung von Mitarbeitenden): Lege eine Precision-Schwelle fest.
  • Jede Klasse ist gleich wichtig (Zählung, Lagerbestand): Lege eine Schwelle für die AP pro Klasse fest, damit keine Klasse hinter dem Durchschnitt verschwindet.

Der Leitfaden zu YOLO-Leistungsmetriken erklärt jede davon. Schreibe den Test anschließend als Code, damit „Ist das gut genug?“ nicht mehr zur Diskussion steht. Dieses Skript läuft heute mit einem vortrainierten Modell auf dem Demosatz COCO8 und später mit deinem eigenen Checkpoint und Holdout:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # later: your fine-tuned runs/detect/train/weights/best.pt
metrics = model.val(data="coco8.yaml", classes=[0], verbose=False)  # 0 = person; later: your holdout YAML

precision, recall = metrics.box.mp, metrics.box.mr
print(f"person: precision={precision:.2f} recall={recall:.2f}")
print("PASS" if recall >= 0.95 and precision >= 0.85 else "FAIL: below the acceptance test")
                   all          4         10      0.939        0.8      0.848      0.387
person: precision=0.94 recall=0.80
FAIL: below the acceptance test

Was dir die einzelnen Zeilen sagen:

  • classes=[0] bewertet nur person, sodass andere Klassen das Ergebnis nicht aufbessern können. Verwende die ID deiner eigenen Sicherheitsklasse.
  • Die Zeile des Validators zeigt 4 Bilder mit 10 gekennzeichneten Personen. mp und mr sind Precision und Recall an der Konfidenzschwelle, bei der beide am besten ausgeglichen sind (maximaler F1-Wert).
  • Ein vortrainiertes COCO-Modell erkennt 8 der 10 Personen, der Recall beträgt also 0.80: präzise, aber nicht sicher genug. Dass der Test FEHLGESCHLAGEN ist, zeigt, dass er funktioniert. In diesem Kurs führt ein FEHLGESCHLAGEN zurück zu den Daten, nicht zu den Hyperparametern.
Die Festlegung des Testsatzes ist genauso wichtig wie die Kennzahl

Ein Testsatz aus denselben Kameras und Tagen wie der Trainingssatz misst das Erinnerungsvermögen, nicht die Einsatzbereitschaft. Benenne den Testsatz im Ziel („Kameras, die nicht fürs Training verwendet wurden“, „die letzten zwei Wochen an Aufnahmen“) und erstelle ihn mit Datensatz korrekt aufteilen.

Halte fest, was Version 1 nicht leisten wird#

Kein Modell ist perfekt. Benenne daher vorab die akzeptablen Fehler: Bedingungen, für die du keine Leistung versprichst (dichter Nebel, völlige Dunkelheit), ähnlich aussehende Objekte, die das Modell verwechseln darf, und seltene Klassen, die auf Version 2 verschoben werden. Diese Zeile verhindert, dass ein Modell, das sein Ziel erreicht, an einer nicht festgehaltenen 100-%-Vorgabe gemessen wird. Außerdem zeigt sie dem Datenerfassungsteam, wo sich zusätzlicher Aufwand vorerst nicht lohnt.

Ausprobieren

Fülle die fünfzeilige Zielsetzungstabelle für dein Projekt aus und sende sie der Person, die für das Geschäftsergebnis verantwortlich ist. Überarbeite jede Zeile, zu der diese Person Fragen hat. Kopiere anschließend acceptance_test.py, lege deine Klassen-ID und Schwellenwerte fest und führe den Test mit dem vortrainierten Modell aus, damit er bereits vor dem Datensatz existiert. Ergebnis: objective.md und ein funktionsfähiges acceptance_test.py.

Abgeschlossen, wenn
Du hast die Lektion abgeschlossen, wenn alle folgenden Punkte zutreffen.
  • Das Geschäftsziel besteht aus einem messbaren Satz mit einer Frist, dem die verantwortliche Person zugestimmt hat.

  • Für jede Klasse gibt es eine Definition in einem Satz und mindestens ein ausdrücklich genanntes, ähnlich aussehendes Objekt, das sie ausschließt.

  • acceptance_test.py läuft und gibt für eine Metrik, einen Schwellenwert und einen benannten Holdout BESTANDEN oder FEHLGESCHLAGEN aus.

Lösung anzeigen

Ein ausgearbeitetes Ziel für ein anderes Projekt: eine Lebensmittelkette erkennt leere Regalplätze.

ZeileAntwort
GeschäftszielDie Ausverkaufsdauer bei den 200 umsatzstärksten Produkten innerhalb eines Quartals um 25 % senken.
Computer-Vision-AufgabeObjekterkennung. Der Markt braucht die Position jeder Lücke, nicht ihren Umriss. Daher sind Begrenzungsrahmen besser als Polygone.
Klassengap: ein leerer Regalplatz, der mindestens so breit wie ein Produkt ist; Plätze, die von Kundschaft oder Einkaufswagen verdeckt werden, sind ausgeschlossen. price_tag: ein Regalkantenetikett; Werbeaufkleber sind ausgeschlossen.
AbnahmetestRecall für gap ≥ 0.90 bei einer Precision ≥ 0.80 auf 400 Bildern aus 5 Filialen, die nicht für das Training verwendet wurden.
Nicht im UmfangGlastüren von Tiefkühlgeräten mit Spiegelungen, Stirnregale und die Obst- und Gemüseabteilung.

Recall hat Vorrang, weil eine übersehene Lücke einen Verkauf kostet, während ein Fehlalarm für eine mitarbeitende Person nur einen kurzen Weg bedeutet. acceptance_test.py ändert sich an genau drei Stellen: data="holdout_stores.yaml" (die fünf unbekannten Filialen), classes=[0] (0 ist jetzt gap) und den Schwellenwerten recall >= 0.90 and precision >= 0.80.

Wie es weitergeht

Als Nächstes machst du aus der Zielsetzung eine Datensatzspezifikation, die festlegt, welche Bilder du benötigst und wie viele davon jeweils.