Ultralytics YOLO27:
Get Started

Modellvalidierung mit Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Einführung#

Die Validierung ist ein entscheidender Schritt in der Pipeline für maschinelles Lernen und ermöglicht es dir, die Qualität deiner trainierten Modelle zu beurteilen. Der Val-Modus von Ultralytics YOLO26 bietet eine umfassende Auswahl an Werkzeugen und Metriken zur Bewertung der Leistung deiner Modelle zur Objekterkennung. Dieser Leitfaden erklärt ausführlich, wie du den Val-Modus effektiv einsetzt, um sicherzustellen, dass deine Modelle sowohl genau als auch zuverlässig sind.

Vorläufige Validierungsergebnisse findest du in der Vorschauversion von YOLO27.



Ansehen: Tutorial zu den Ultralytics-Modi: Validierung

Warum mit Ultralytics YOLO validieren?#

Darum ist der Val-Modus von YOLO26 von Vorteil:

  • Präzision: Ermittle genaue Kennzahlen wie mAP50, mAP75 und mAP50-95, um dein Modell umfassend zu bewerten.
  • Komfort: Nutze integrierte Funktionen, die sich an die Trainingseinstellungen erinnern und so den Validierungsprozess vereinfachen.
  • Flexibilität: Validiere dein Modell mit denselben oder anderen Datensätzen und Bildgrößen.
  • Hyperparameteroptimierung: Nutze Validierungskennzahlen, um dein Modell für eine bessere Leistung fein abzustimmen.

Wichtige Funktionen des Val-Modus#

Dies sind die wichtigsten Funktionen des Val-Modus von YOLO26:

  • Automatische Einstellungen: Modelle speichern ihre Trainingskonfigurationen für eine unkomplizierte Validierung.
  • Unterstützung mehrerer Kennzahlen: Bewerte dein Modell anhand einer Reihe von Genauigkeitskennzahlen.
  • CLI und Python-API: Wähle für die Validierung je nach Vorliebe die Befehlszeile oder die Python-API.
  • Datenkompatibilität: Funktioniert nahtlos sowohl mit den während des Trainings verwendeten als auch mit benutzerdefinierten Datensätzen.
Tipp
  • YOLO26-Modelle speichern ihre Trainingseinstellungen automatisch. Daher validiert yolo val model=path/to/best.pt oder YOLO("path/to/best.pt").val() mit der beim Training verwendeten Bildgröße auf dem ursprünglichen Datensatz. Bei offiziellen Gewichten wird auf den für die Aufgabe standardmäßig vorgesehenen Datensatz zurückgegriffen; mit data kannst du diesen überschreiben.

Anwendungsbeispiele#

Validiere die Genauigkeit eines trainierten YOLO26n-Modells. Dafür sind keine Argumente erforderlich, da model die beim Training verwendeten data und Argumente als Modellattribute speichert: path/to/best.pt validiert auf dem Datensatz, mit dem das Modell trainiert wurde. Offizielle Gewichte speichern einen Trainingsdatensatzpfad, der auf deinem Rechner nicht vorhanden ist. Daher wird mit einer Warnung auf den für die Aufgabe standardmäßig vorgesehenen coco8.yaml zurückgegriffen. Mit data kannst du die Validierung auf einem anderen Datensatz durchführen. Eine vollständige Liste der Validierungsargumente findest du weiter unten im Abschnitt „Argumente“.

Fehler bei der Mehrfachverarbeitung unter Windows

Unter Windows kann beim Starten der Validierung als Skript ein RuntimeError auftreten. Füge vor deinem Validierungscode einen Block if __name__ == "__main__": ein, um das Problem zu beheben.

Beispiel
from ultralytics import YOLO

# Ein Modell laden
model = YOLO("yolo26n.pt")  # Ein offizielles Modell laden
model = YOLO("path/to/best.pt")  # Ein benutzerdefiniertes Modell laden

# Das Modell validieren
metrics = model.val()  # Keine Argumente erforderlich, Datensatz und Einstellungen werden gespeichert
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # Eine Liste mit mAP50-95-Werten für jede Kategorie
metrics.box.image_metrics  # Kennzahlenverzeichnis pro Bild mit Präzision, Trefferquote, F1, TP, FP und FN

Argumente für die YOLO-Modellvalidierung#

Bei der Validierung von YOLO-Modellen lassen sich verschiedene Argumente fein abstimmen, um den Auswertungsprozess zu optimieren. Diese Argumente steuern unter anderem die Eingabebildgröße, die Stapelverarbeitung und Leistungsschwellenwerte. Im Folgenden findest du eine ausführliche Erläuterung der einzelnen Argumente, damit du deine Validierungseinstellungen gezielt anpassen kannst.

ArgumentTypStandardBeschreibung
datastrNoneGibt den Pfad zur Dataset-YAML-Datei an (z. B. coco8.yaml), die den Pfad zu den Validierungsdaten enthalten sollte. Für die Klassifizierung wird stattdessen ein Dataset-Verzeichnis oder der Name eines integrierten Datensatzes verwendet (z. B. imagenet10).
imgszint640Legt die Größe der Eingabebilder fest. Vor der Verarbeitung werden alle Bilder auf diese Abmessungen skaliert. Größere Abmessungen können die Genauigkeit bei kleinen Objekten verbessern, erhöhen aber den Rechenaufwand.
batchint16Legt die Anzahl der Bilder pro Batch fest. Höhere Werte nutzen den GPU-Speicher effizienter, benötigen aber mehr VRAM. Passe den Wert an die verfügbaren Hardwareressourcen an.
save_jsonboolFalseWenn True aktiviert ist, werden die Ergebnisse zur weiteren Analyse, zur Einbindung in andere Werkzeuge oder zur Übermittlung an Evaluierungsserver wie COCO in einer JSON-Datei gespeichert. Bei Erkennungsdatensätzen werden die Vorhersagen außerdem mit faster-coco-eval ausgewertet. Die mAP-Werte für kleine, mittlere und große Objekte werden während des Trainings in results.csv als metrics/mAP_small(B), metrics/mAP_medium(B) und metrics/mAP_large(B) protokolliert.
conffloat0.001Legt den Mindestkonfidenzschwellenwert für Erkennungen fest. Niedrigere Werte erhöhen den Recall, können aber mehr falsch-positive Ergebnisse verursachen. Präzisions-Recall-Kurven, mAP und Erkennungskonfusionsmatrizen verwenden diesen Wert. Ein höherer Wert für conf, etwa 0.25, führt zu einer Matrix, die der Vorhersageausgabe stärker entspricht, kann aber die mAP senken. Die zusammengefassten Werte für Präzision und Recall verwenden die Konfidenz mit dem maximalen F1-Wert und können daher von den aus confusion_matrix.png abgeleiteten Werten abweichen. Für die OBB-Validierung standardmäßig 0.01, um den Speicherbedarf zu verringern.
ioufloat0.7Legt den Schwellenwert für die Schnittmenge über Vereinigungsmenge für die Nichtmaximalwertunterdrückung fest. Steuert das Entfernen doppelter Erkennungen.
max_detint300Begrenzt die maximale Anzahl der Erkennungen pro Bild. Bei detect, segment, pose und OBB wird der Wert 300 auf die größte Anzahl beschrifteter Objekte im validierten Split angehoben, falls ein Bild diesen Wert überschreitet; dabei wird eine Warnung ausgegeben. Jeder andere Wert bleibt unverändert; wird er von einem Bild überschritten, weist eine Warnung darauf hin, dass der Recall begrenzt sein kann.
quantizeint oder strNoneValidierungspräzision: 16/"fp16" und 32/"fp32"/nicht gesetzt wählen die FP16- oder FP32-Berechnung für PyTorch- und TorchScript-Modelle; andere Formate berechnen mit der Präzision, die ihr Artefakt und ihre Laufzeitumgebung vorgeben. Bei 16 rundet OpenVINO die Eingabe auf Clientseite weiterhin auf FP16 und erweitert sie anschließend wieder auf FP32, ohne die Präzision der Berechnung durch die Laufzeitumgebung zu ändern. INT8/PTQ-Quantisierung wird beim Export konfiguriert und anschließend bei der Validierung des exportierten Modells verwendet. Ersetzt das veraltete Flag half.
devicestrNoneGibt das Gerät für die Validierung an (cpu, cuda:0, npu, npu:0 usw.). Bei None wird automatisch das beste verfügbare Gerät ausgewählt. Mehrere CUDA-Geräte können durch Kommas getrennt angegeben werden.
dnnboolFalseWenn True aktiviert ist, verwendet die Inferenz von ONNX-Modellen das DNN-Modul von OpenCV als Alternative zu PyTorch-Inferenzmethoden.
plotsboolTrueBei True werden Vorhersagen im Vergleich zu den Ground-Truth-Daten, Konfusionsmatrizen und PR-Kurven zur visuellen Bewertung der Modellleistung erstellt und gespeichert.
classeslist[int]NoneGibt eine Liste der auszuwertenden Klassen-IDs an. Nützlich, um während der Auswertung bestimmte Klassen herauszufiltern und sich auf sie zu konzentrieren.
rectboolTrueWenn True aktiviert ist, wird für das Batching die rechteckige Inferenz verwendet. Dadurch verringert sich die Auffüllung, und die Verarbeitung der Bilder mit ihrem ursprünglichen Seitenverhältnis kann Geschwindigkeit und Effizienz verbessern. Bei der Validierung von depth wird die Option ignoriert, da dort jedes Bild auf ein festes quadratisches imgsz-Format gestreckt statt aufgefüllt wird.
splitstr'val'Legt den für die Validierung verwendeten Datensatz-Split fest (val, test oder train). So kannst du flexibel auswählen, welcher Datenabschnitt zur Leistungsbewertung verwendet wird.
fractionfloat, int oder list1.0Teilmenge des validierten Splits. Bei einer Liste in [train, val, test] gilt der Eintrag, der zu split passt (1 = vollständiger Split, Ganzzahlen über 1 = Anzahl der Bilder; ausgelassene Einträge entsprechen dem vollständigen Split). Ein einzelner Wert gilt nur für split=train; val und test verwenden dann den vollständigen Split.
projectstrNoneName des Projektverzeichnisses, in dem die Validierungsausgaben gespeichert werden. Hilft dabei, Ergebnisse verschiedener Experimente oder Modelle zu organisieren.
namestrNoneName des Validierungslaufs. Dient zum Erstellen eines Unterverzeichnisses im Projektordner, in dem Validierungsprotokolle und -ausgaben gespeichert werden.
verboseboolTrueWenn True aktiviert ist, werden während der Validierung ausführliche Informationen angezeigt, darunter Kennzahlen für jede Klasse, der Batch-Fortschritt und zusätzliche Informationen zur Fehlersuche.
save_txtboolFalseWenn True aktiviert ist, werden Erkennungsergebnisse in Textdateien gespeichert, jeweils eine Datei pro Bild. Nützlich für weiterführende Analysen, benutzerdefinierte Nachbearbeitung oder die Einbindung in andere Systeme.
save_confboolFalseWenn True aktiviert ist, werden Konfidenzwerte in die gespeicherten Textdateien aufgenommen, sofern save_txt aktiviert ist. Dadurch stehen detailliertere Ausgaben für Analysen und Filterungen zur Verfügung.
workersint8Anzahl der Worker-Threads für das Laden von Daten. Höhere Werte können die Datenvorverarbeitung beschleunigen, aber die CPU-Auslastung erhöhen. Bei 0 wird der Hauptthread verwendet, was in manchen Umgebungen stabiler sein kann.
augmentboolFalseAktiviert Testzeit-Augmentierung (TTA) während der Validierung. Durch Inferenz auf transformierten Versionen der Eingabe kann sich die Erkennungsgenauigkeit verbessern, allerdings auf Kosten der Inferenzgeschwindigkeit. Nur für Ultralytics-PyTorch-Modelle verfügbar.
agnostic_nmsboolFalseAktiviert klassenunabhängige Nichtmaximalwertunterdrückung, bei der sich überlappende Boxen mit niedrigeren Konfidenzwerten unabhängig von der vorhergesagten Klasse unterdrückt werden. Nützlich für Anwendungen, bei denen einzelne Objekte im Mittelpunkt stehen. Bei der NMS-freien Inferenz (nms=False mit YOLO26 oder YOLOv10) verhindert dies lediglich, dass dieselbe Erkennung mit mehreren Klassenbezeichnungen erscheint (Duplikate mit IoU=1.0), und unterdrückt keine unterschiedlichen Boxen anhand eines IoU-Schwellenwerts.
single_clsboolFalseBehandelt während der Validierung alle Klassen als eine einzige Klasse. Nützlich, um die Modellleistung bei binären Erkennungsaufgaben zu bewerten oder wenn Klassenunterscheidungen keine Rolle spielen.
visualizeboolFalseVisualisiert für jedes Bild die Ground-Truth-Daten, richtig-positiven, falsch-positiven und falsch-negativen Ergebnisse. Nützlich für die Fehlersuche und die Interpretation des Modells.
show_labelsboolTrueZeigt Klassenbezeichnungen in Validierungsvisualisierungen an, wenn visualize=True aktiviert ist. Setze den Wert auf False, um Übereinstimmungen und Fehler übersichtlicher darzustellen.
show_confboolTrueZeigt Konfidenzwerte in Validierungsvisualisierungen an, wenn visualize=True aktiviert ist. Setze den Wert auf False, um Übereinstimmungen und Fehler übersichtlicher darzustellen.
compilebool oder strFalseAktiviert die PyTorch-2.x-Graphkompilierung torch.compile mit backend='inductor'. Akzeptiert True → "default", False → deaktiviert oder einen Zeichenfolgenmodus wie "default", "reduce-overhead", "max-autotune-no-cudagraphs". Bei Nichtunterstützung wird mit einer Warnung auf den Eager-Modus zurückgegriffen.
channels_lastboolNoneVerwendet für die native PyTorch-Validierung das Speicherformat channels_last (NHWC). None aktiviert es automatisch auf oneDNN-fähigen Linux- und Windows-x86-CPUs mit PyTorch 1.13 oder neuer, False deaktiviert es und True fordert es auf unterstützten x86-CPUs oder CUDA-Geräten an. ARM64, MPS, ältere PyTorch-Versionen, CPUs ohne oneDNN und exportierte Formate bleiben unverändert; bei der Validierung während des Trainings bleibt das Layout des Trainingsmodells erhalten.
nmsbool, optionalNoneFührt standardmäßig eine Viele-zu-eins-Inferenz mit NMS aus (None oder True). Setze False, um den NMS-freien Eins-zu-eins-Kopf zu verwenden, sofern verfügbar. Weitere Informationen findest du in der Anleitung zur End-to-End-Erkennung.

Jede dieser Einstellungen spielt eine wichtige Rolle bei der Validierung und ermöglicht eine anpassbare und effiziente Auswertung von YOLO-Modellen. Wenn du diese Parameter an deine spezifischen Anforderungen und Ressourcen anpasst, findest du die optimale Balance zwischen Genauigkeit und Leistung.

Beispiel: Validierung mit Argumenten#



Ansehen: So exportierst du Modellvalidierungsergebnisse als CSV, JSON, SQL, Polars-DataFrame und mehr

Explore model validation and different export methods in Google Colab

Die folgenden Beispiele zeigen, wie du ein YOLO-Modell mit benutzerdefinierten Argumenten in Python und über die CLI validierst.

Beispiel
from ultralytics import YOLO

# Ein Modell laden
model = YOLO("yolo26n.pt")

# Validierungseinstellungen anpassen
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")
ConfusionMatrix exportieren

Mit dem bereitgestellten Code kannst du die Ergebnisse der ConfusionMatrix auch in verschiedenen Formaten speichern.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())
Präzision, Trefferquote und F1 pro Bild

Bei der Validierung werden Kennzahlen pro Bild zu Präzision, Trefferquote, F1, TP, FP und FN (bei einem IoU-Schwellenwert von 0.5) für alle Aufgaben außer der Klassifizierung gespeichert. Nach Abschluss der Validierung kannst du über results.box.image_metrics auf die Kennzahlen für Detektion und OBB, über results.seg.image_metrics auf die Kennzahlen für Segmentierung und über results.pose.image_metrics auf die Kennzahlen für Pose zugreifen.

from ultralytics import YOLO

# Ein Modell laden
model = YOLO("yolo26n.pt")

# Validieren und auf Kennzahlen pro Bild zugreifen
results = model.val(data="coco8.yaml")

# image_metrics ist ein Verzeichnis mit Bilddateinamen als Schlüsseln
print(results.box.image_metrics)
# Ausgabe: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# Auf Kennzahlen für ein bestimmtes Bild zugreifen
results.box.image_metrics["image1.jpg"]  # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}

Jeder Eintrag in image_metrics enthält die folgenden Schlüssel:

SchlüsselBeschreibung
precisionPräzisionswert für das Bild (tp / (tp + fp)).
recallTrefferquotenwert für das Bild (tp / (tp + fn)).
f1Harmonisches Mittel von Präzision und Trefferquote.
tpAnzahl der richtig-positiven Erkennungen für das Bild.
fpAnzahl der falsch-positiven Erkennungen für das Bild.
fnAnzahl der falsch-negativen Erkennungen für das Bild.

Diese Funktion ist für die Aufgaben Detektion, Segmentierung, Pose und OBB verfügbar.

Das zurückgegebene Kennzahlenobjekt bietet außerdem Exporthilfen für nachgelagerte Analysen:

MethodeRückgabetypBeschreibung
summary()List[Dict[str, Any]]Wandelt die Validierungsergebnisse in ein zusammengefasstes Wörterbuch um.
to_df()DataFrameGibt die Validierungsergebnisse als strukturierten Polars-DataFrame zurück.
to_csv()strExportiert die Validierungsergebnisse im CSV-Format und gibt die CSV-Zeichenfolge zurück.
to_json()strExportiert die Validierungsergebnisse im JSON-Format und gibt die JSON-Zeichenfolge zurück.

Weitere Informationen findest du in der Dokumentation zur Klasse DataExportMixin.

Wie geht es weiter?#

Zufrieden mit den Kennzahlen? Exportiere das Modell in ein Bereitstellungsformat. Wenn die Genauigkeit nicht stimmt, kehre zurück und trainiere erneut – mit anderen Hyperparametern oder mehr Trainingsdaten.

Häufig gestellte Fragen#

  • Um dein YOLO26-Modell zu validieren, kannst du den von Ultralytics bereitgestellten Val-Modus verwenden. Mit der Python-API kannst du zum Beispiel ein Modell laden und die Validierung folgendermaßen ausführen:

    from ultralytics import YOLO
    
    # Ein Modell laden
    model = YOLO("yolo26n.pt")
    
    # Das Modell validieren
    metrics = model.val()
    print(metrics.box.map)  # map50-95

    Alternativ kannst du die Befehlszeile (CLI) verwenden:

    yolo detect val model=yolo26n.pt data=coco8.yaml

    Für weitere Anpassungen kannst du sowohl im Python- als auch im CLI-Modus verschiedene Argumente wie imgsz, batch und conf ändern. Die vollständige Liste der Parameter findest du im Abschnitt Argumente für die YOLO-Modellvalidierung.

  • Bei der Validierung eines YOLO26-Modells werden mehrere wichtige Kennzahlen zur Bewertung der Modellleistung ermittelt. Dazu gehören:

    • mAP50 (mittlere durchschnittliche Präzision bei einem IoU-Schwellenwert von 0.5)
    • mAP75 (mittlere durchschnittliche Präzision bei einem IoU-Schwellenwert von 0.75)
    • mAP50-95 (mittlere durchschnittliche Präzision über mehrere IoU-Schwellenwerte von 0.5 bis 0.95)

    Mit der Python-API kannst du wie folgt auf diese Kennzahlen zugreifen:

    metrics = model.val()  # setzt voraus, dass `model` geladen wurde
    print(metrics.box.map)  # mAP50-95
    print(metrics.box.map50)  # mAP50
    print(metrics.box.map75)  # mAP75
    print(metrics.box.maps)  # Liste mit mAP50-95-Werten für jede Kategorie
    print(metrics.box.image_metrics)  # Kennzahlenverzeichnis pro Bild mit Präzision, Trefferquote, F1, TP, FP und FN

    Für eine vollständige Leistungsbewertung ist es wichtig, alle diese Kennzahlen zu prüfen. Weitere Informationen findest du unter Wichtige Funktionen des Val-Modus.

  • Die Validierung mit Ultralytics YOLO bietet mehrere Vorteile:

    • Präzision: YOLO26 liefert genaue Leistungskennzahlen wie mAP50, mAP75 und mAP50-95.
    • Komfort: Die Modelle speichern ihre Trainingseinstellungen, sodass sich die Validierung unkompliziert durchführen lässt.
    • Flexibilität: Du kannst mit denselben oder anderen Datensätzen und Bildgrößen validieren.
    • Hyperparameteroptimierung: Validierungskennzahlen helfen dabei, Modelle für eine bessere Leistung fein abzustimmen.

    Diese Vorteile sorgen dafür, dass deine Modelle gründlich bewertet und für bessere Ergebnisse optimiert werden können. Weitere Informationen zu diesen Vorteilen findest du im Abschnitt Warum mit Ultralytics YOLO validieren.

  • Ja, du kannst dein YOLO26-Modell mit einem benutzerdefinierten Datensatz validieren. Gib für das Argument data den Pfad zu deiner Dataset-YAML-Datei an. Diese sollte den Pfad zu den Validierungsdaten enthalten. Für die Klassifizierung gibst du stattdessen ein Datensatzverzeichnis oder den Namen eines integrierten Datensatzes an (z. B. imagenet10).

    Hinweis

    Bei der Validierung werden die Klassennamen des Modells verwendet. Du kannst sie mit model.names anzeigen. Sie können von den Klassennamen abweichen, die im Datensatz selbst festgelegt sind.

    Beispiel in Python:

    from ultralytics import YOLO
    
    # Ein Modell laden
    model = YOLO("yolo26n.pt")
    
    # Mit einem benutzerdefinierten Datensatz validieren
    metrics = model.val(data="path/to/your/custom_dataset.yaml")
    print(metrics.box.map)  # map50-95

    Beispiel mit der CLI:

    yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yaml

    Weitere Anpassungsmöglichkeiten während der Validierung findest du im Abschnitt Beispiel: Validierung mit Argumenten.

  • Um die Validierungsergebnisse in einer JSON-Datei zu speichern, kannst du beim Ausführen der Validierung das Argument save_json auf True setzen. Das funktioniert sowohl mit der Python-API als auch mit der CLI.

    Beispiel in Python:

    from ultralytics import YOLO
    
    # Ein Modell laden
    model = YOLO("yolo26n.pt")
    
    # Validierungsergebnisse als JSON speichern
    metrics = model.val(save_json=True)

    Beispiel mit der CLI:

    yolo val model=yolo26n.pt save_json=True

    Bei Detektionsdatensätzen gibt save_json=True über faster-coco-eval auch die mAP-Werte für kleine, mittlere und große Objekte aus. Weitere Informationen findest du unter Argumente für die YOLO-Modellvalidierung.

Kommentare