Das Problem festlegen
Mach aus einer unklaren Produktidee eine dreizeilige Aufgabenbeschreibung und halte die Geschäftsregel im Code fest, damit du sie ohne erneutes Training ändern kannst.

Bei den meisten Projekten zur Computer Vision, die ins Stocken geraten, fehlte von Anfang an eine klare Fragestellung. „Unsicheres Verhalten erkennen“ klingt nach einer Anforderung, aber eine annotierende Person kann es nicht beschriften, ein Modell kann es nicht lernen und niemand kann feststellen, ob es funktioniert. Eine dreizeilige Aufgabenbeschreibung schafft innerhalb eines Nachmittags Klarheit – und legt fest, welche Aufgabe du trainierst, was du beschriftest und welche Kennzahl du angibst.
Praxisnah
Warum die Aufgabenbeschreibung an erster Stelle steht#

Jeder Schritt eines Computer-Vision-Projekts übernimmt sein Ziel aus Schritt 0. Eine unklare Fragestellung führt zu einem unklaren Datensatz, uneinigen annotierenden Personen und einer Kennzahl, die das Falsche misst – und noch so viel Training in Schritt 2 kann das nicht beheben.
Die drei Zeilen#
Eine Aufgabenbeschreibung besteht aus drei Sätzen, jeweils einer pro Zeile. Jede Zeile beantwortet eine Frage, die eine andere Person im Projekt stellen wird:
| Zeile | Beantwortete Frage | Schwach | Stark |
|---|---|---|---|
| Eingabe | Was sieht das Modell? | „Kameraaufnahmen“ | „1920×1080-Bilder mit 5 fps von 12 Deckenkameras“ |
| Ausgabe | Welche Daten kommen zurück? | „Sicherheitsprobleme erkennen“ | „Boxen für forklift und person, jeweils mit einem Konfidenzwert“ |
| Entscheidung | Wer handelt und wann? | „Die Sicherheit verbessern“ | „Die Schichtleitung benachrichtigen, wenn sich ein Gabelstapler und eine Person 2 s lang innerhalb von 2 m voneinander befinden“ |
Die Ausgabezeile erfordert besondere Sorgfalt, denn ihr Datentyp bestimmt die Aufgabe:

Ein Label für das ganze Bild bedeutet Klassifizierung; Boxen bedeuten Objekterkennung; Umrisse bedeuten Segmentierung; Gelenke bedeuten Pose; gedrehte Boxen bedeuten OBB; eine Klasse oder ein Abstand pro Pixel bedeutet semantische Segmentierung beziehungsweise Tiefenschätzung. In der nächsten Lektion gehen wir alle sieben Aufgaben durch.
Beispiel: Modell und Regel getrennt halten#
„Wir möchten erkennen, wann Gabelstapler auf der Lagerfläche etwas Gefährliches tun.“
Dieser Satz beschreibt ein Projekt, keine Aufgabe. Er vermischt zwei Tätigkeiten: Gabelstapler und Personen zu finden, was die Bildpixel betrifft, und festzulegen, was als gefährlich gilt, was eine Richtlinienfrage ist. Trenne beides:
Nur der Detektor ist das Modell. Die Raute ist gewöhnlicher Code. Du kannst diese Trennung gleich ausprobieren: bus.jpg enthält keinen Gabelstapler, aber ein Bus und vier Personen reichen für denselben Test. Eine erste Regel lautet: „Alarm auslösen, wenn sich die Box einer Person zu mehr als 30 % mit der Box eines Fahrzeugs überschneidet“:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
result = model("https://ultralytics.com/images/bus.jpg", verbose=False)[0]
# The model's job ends here: a class, a box, and a confidence per object.
people = [b.xyxy[0].tolist() for b in result.boxes if result.names[int(b.cls)] == "person"]
vehicles = [b.xyxy[0].tolist() for b in result.boxes if result.names[int(b.cls)] == "bus"]
def share_inside(a, b):
"""Fraction of box a's area that lies inside box b."""
w = max(0, min(a[2], b[2]) - max(a[0], b[0]))
h = max(0, min(a[3], b[3]) - max(a[1], b[1]))
return w * h / ((a[2] - a[0]) * (a[3] - a[1]))
# The decision rule is plain code: change the policy without retraining.
ALERT_SHARE = 0.30
for person in people:
share = max(share_inside(person, v) for v in vehicles)
print(f"person at x={person[0]:3.0f}: {share:4.0%} inside the bus box -> {'ALERT' if share > ALERT_SHARE else 'ok'}")person at x= 49: 70% inside the bus box -> ALERT
person at x=223: 76% inside the bus box -> ALERT
person at x=670: 70% inside the bus box -> ALERT
person at x= 0: 62% inside the bus box -> ALERTVier Alarme, alle falsch: Die Personen sind vor einem geparkten Bus auf dem Gehweg. Der Detektor erkennt jede Box korrekt; die Regel ist falsch, denn eine Überlappung in einem 2D-Bild bedeutet nicht, dass zwei Dinge in der realen Welt nahe beieinander sind. Da die Regel Code ist, lässt sie sich durch Code korrigieren. Vergleiche, wo die Füße jeder Person den Boden berühren, mit der Radlinie des Busses:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
result = model("https://ultralytics.com/images/bus.jpg", verbose=False)[0]
people = [b.xyxy[0].tolist() for b in result.boxes if result.names[int(b.cls)] == "person"]
vehicles = [b.xyxy[0].tolist() for b in result.boxes if result.names[int(b.cls)] == "bus"]
def same_ground_line(person, vehicle, tolerance=40):
"""True when the person's feet are level with the vehicle's wheels and inside its width."""
feet_x, feet_y = (person[0] + person[2]) / 2, person[3]
return vehicle[0] < feet_x < vehicle[2] and abs(feet_y - vehicle[3]) < tolerance
for person in people:
alert = any(same_ground_line(person, v) for v in vehicles)
print(f"person at x={person[0]:3.0f}: feet y={person[3]:.0f}, bus wheels y={vehicles[0][3]:.0f} -> {'ALERT' if alert else 'ok'}")person at x= 49: feet y=902, bus wheels y=751 -> ok
person at x=223: feet y=861, bus wheels y=751 -> ok
person at x=670: feet y=880, bus wheels y=751 -> ok
person at x= 0: feet y=871, bus wheels y=751 -> okDie Füße jeder Person liegen 110–150 Pixel unter der Radlinie, sie stehen also näher an der Kamera als der Bus. Kein erneutes Training, keine neuen Beschriftungen: Das Sicherheitsteam verbessert die Regel, während der Detektor unverändert bleibt. In einer Produktionsversion würde man die Füße mithilfe einer kalibrierten Kamera auf Bodenkoordinaten abbilden und die 2-Sekunden-Beständigkeit durch Objektverfolgung ergänzen – weiterhin als Code auf denselben Boxen.
Subjektive Begriffe wie „unsicher“, „defekt“, „verdächtig“ oder „VIP“ gehören in den Code, der die Modellausgabe verarbeitet. Ein Modell beantwortet Fragen zu Pixeln. Wenn zwei Fachleute über eine Bezeichnung streiten würden, gehört die strittige Entscheidung in eine Regel, die du versionieren, testen und ändern kannst.
Stolperfallen#
Symptom: In der Spezifikation steht „Sicherheitsprobleme erkennen“ oder „die Szene verstehen“, und die Annotierenden fragen, was sie einzeichnen sollen. Lösung: Formuliere die Ausgabe als Datentyp mit benannten Klassen: „Boxen für forklift und person“.
Symptom: Eine Klasse wie suspicious_behavior oder dangerous, die zwei Annotierende im selben Bild unterschiedlich kennzeichnen. Lösung: Ersetze sie durch sichtbare Merkmale – eine Person in einem Sperrbereich, eine offengehaltene Tür – und verlagere die Bewertung in die Entscheidungsregel.
Symptom: „Beschreibe, was passiert“ (Bildbeschreibung) oder „sage voraus, ob der Gabelstapler jemanden anfährt“ (Vorhersage). Lösung: Ermittle zuerst die Objekte und ergänze dann Regeln zur Verfolgung und Bewegung. Entwickle den Detektor vor der Vorhersage.
Von der Aufgabenbeschreibung zu Erfolgskriterien#
Die Aufgabenbeschreibung sagt, was das Modell tut, aber nicht, wie gut gut genug ist oder was ein übersehener Fall im Vergleich zu einem Fehlalarm kostet. Der Abschnitt Mit dem Geschäftsziel beginnen in Leistungsstarke YOLO-Datensätze erstellen macht aus der Aufgabenbeschreibung messbare Ziele. Jede weitere Lektion in diesem Kurs bezieht sich auf deine drei Zeilen.
Lösung anzeigen
Eine Aufgabenbeschreibung für die Regalkamera:
- Eingabe: ein 1920×1080-Standbild alle 60 Sekunden von einer feststehenden Kamera, die auf einen Gang gerichtet ist.
- Ausgabe: Begrenzungsrahmen für
productundempty_facing(ein Regalplatz ohne Produkt), jeweils mit einem Konfidenzwert. - Entscheidung: Einen Nachfüllauftrag erstellen, wenn mindestens drei
empty_facing-Boxen im selben Regal während der Öffnungszeiten auf fünf aufeinanderfolgenden Standbildern bestehen bleiben.
Wörter, die das Modell nicht sehen kann, sind Nachfüllauftrag, dasselbe Regal, auf fünf aufeinanderfolgenden Standbildern bestehen bleiben und Öffnungszeiten. Als Regel:
if count(empty_facing on shelf S) >= 3 in each of the last 5 stills and store_is_open(now):
create_restock_task(shelf=S)Das Geschäft kann „3“, „5“ oder die Öffnungszeiten ändern, ohne auch nur ein einziges Bild neu beschriften zu müssen.