Modellvalidierung mit Ultralytics YOLO

Ultralytics YOLO ecosystem and integrations

Einführung

Die Validierung ist ein entscheidender Schritt in der Machine Learning-Pipeline, mit dem du die Qualität deiner trainierten Modelle bewerten kannst. Der Val-Modus in Ultralytics YOLO26 bietet ein robustes Set an Tools und Metriken zur Bewertung der Leistung deiner Objekterkennungs-Modelle. Dieser Leitfaden dient als vollständige Ressource, um zu verstehen, wie du den Val-Modus effektiv nutzt, um sicherzustellen, dass deine Modelle sowohl präzise als auch zuverlässig sind.



Watch: Ultralytics Modes Tutorial: Validation

Warum mit Ultralytics YOLO validieren?

Hier ist der Grund, warum die Nutzung des Val-Modus von YOLO26 vorteilhaft ist:

  • Präzision: Erhalte genaue Metriken wie mAP50, mAP75 und mAP50-95, um dein Modell umfassend zu bewerten.
  • Bequemlichkeit: Nutze integrierte Funktionen, die sich Trainingseinstellungen merken und so den Validierungsprozess vereinfachen.
  • Flexibilität: Validiere dein Modell mit denselben oder anderen Datensätzen und Bildgrößen.
  • Hyperparameter-Optimierung: Nutze Validierungsmetriken, um dein Modell für eine bessere Leistung feinabzustimmen.

Hauptfunktionen des Val-Modus

Dies sind die bemerkenswerten Funktionen, die der Val-Modus von YOLO26 bietet:

  • Automatisierte Einstellungen: Modelle merken sich ihre Trainingskonfigurationen für eine unkomplizierte Validierung.
  • Unterstützung für mehrere Metriken: Bewerte dein Modell basierend auf einer Reihe von Genauigkeitsmetriken.
  • CLI und Python API: Wähle je nach Präferenz zwischen der Befehlszeilenschnittstelle oder der Python API für die Validierung.
  • Datenkompatibilität: Funktioniert nahtlos mit Datensätzen, die während der Trainingsphase verwendet wurden, sowie mit benutzerdefinierten Datensätzen.
Tipp
  • YOLO26-Modelle merken sich automatisch ihre Trainingseinstellungen, sodass du ein Modell einfach mit der gleichen Bildgröße und auf dem ursprünglichen Datensatz mit nur yolo val model=yolo26n.pt oder YOLO("yolo26n.pt").val() validieren kannst.

Anwendungsbeispiele

Validiere die Genauigkeit eines trainierten YOLO26n-Modells auf dem COCO8-Datensatz. Es sind keine Argumente erforderlich, da das model seine Trainings-data und Argumente als Modellattribute beibehält. Siehe den Abschnitt Argumente unten für eine vollständige Liste der Validierungsargumente.

Windows Multi-Processing-Fehler

Unter Windows erhältst du möglicherweise einen RuntimeError, wenn du die Validierung als Skript startest. Füge einen if __name__ == "__main__":-Block vor deinem Validierungscode hinzu, um dies zu beheben.

Beispiel
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # a list containing mAP50-95 for each category
metrics.box.image_metrics  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

Argumente für die YOLO-Modellvalidierung

Bei der Validierung von YOLO-Modellen können verschiedene Argumente feinabgestimmt werden, um den Bewertungsprozess zu optimieren. Diese Argumente steuern Aspekte wie Eingabebildgröße, Stapelverarbeitung und Leistungsschwellenwerte. Unten findest du eine detaillierte Aufschlüsselung jedes Arguments, die dir hilft, deine Validierungseinstellungen effektiv anzupassen.

ArgumentTypStandardBeschreibung
datastrNoneGibt den Pfad zur Datensatz-Konfigurationsdatei an (z. B. coco8.yaml). Diese Datei sollte den Pfad zu den Validierungsdaten enthalten.
imgszint640Definiert die Größe der Eingabebilder. Alle Bilder werden vor der Verarbeitung auf diese Dimension skaliert. Größere Dimensionen können die Genauigkeit bei kleinen Objekten verbessern, erhöhen jedoch die Rechenzeit.
batchint16Setzt die Anzahl der Bilder pro Batch. Höhere Werte nutzen den GPU-Speicher effizienter, erfordern jedoch mehr VRAM. Passe dies basierend auf den verfügbaren Hardware-Ressourcen an.
save_jsonboolFalseWenn True, werden die Ergebnisse zur weiteren Analyse, Integration mit anderen Tools oder zur Einreichung bei Evaluierungsservern wie COCO in einer JSON-Datei gespeichert.
conffloat0.001Setzt den minimalen Konfidenz-Schwellenwert für Erkennungen. Niedrigere Werte erhöhen den Recall, können aber zu mehr falsch-positiven Ergebnissen führen. Wird während der Validierung verwendet, um Precision-Recall-Kurven zu berechnen.
ioufloat0.7Setzt den Intersection Over Union-Schwellenwert für die Non-Maximum Suppression. Steuert die Eliminierung doppelter Erkennungen.
max_detint300Begrenzt die maximale Anzahl an Erkennungen pro Bild. Nützlich in dichten Szenen, um übermäßige Erkennungen zu vermeiden und Rechenressourcen zu verwalten.
halfboolFalseAktiviert die Berechnung mit halber Präzision (FP16), was den Speicherverbrauch reduziert und potenziell die Geschwindigkeit bei minimalem Einfluss auf die Genauigkeit erhöht.
devicestrNoneGibt das Gerät für die Validierung an (cpu, cuda:0, npu, npu:0, etc.). 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, wird das OpenCV DNN-Modul für die ONNX-Modell-Inferenz verwendet, was eine Alternative zu PyTorch-Inferenzmethoden bietet.
plotsboolTrueWenn auf True gesetzt, werden Diagramme von Vorhersagen gegenüber Ground Truth, Konfusionsmatrizen und PR-Kurven zur visuellen Bewertung der Modellleistung erstellt und gespeichert.
classeslist[int]NoneGibt eine Liste von Klassen-IDs zur Evaluierung an. Nützlich, um während der Evaluierung bestimmte Klassen herauszufiltern und sich nur auf diese zu konzentrieren.
rectboolTrueWenn True, wird rechteckige Inferenz für das Batching verwendet, was das Padding reduziert und potenziell die Geschwindigkeit und Effizienz erhöht, indem Bilder in ihrem ursprünglichen Seitenverhältnis verarbeitet werden.
splitstr'val'Bestimmt den Datensatz-Split, der für die Validierung verwendet werden soll (val, test oder train). Erlaubt Flexibilität bei der Auswahl des Datensegments zur Leistungsbewertung.
projectstrNoneName des Projektverzeichnisses, in dem Validierungsergebnisse gespeichert werden. Hilft dabei, Ergebnisse aus verschiedenen Experimenten oder Modellen zu organisieren.
namestrNoneName des Validierungsdurchlaufs. Wird zum Erstellen eines Unterverzeichnisses innerhalb des Projektordners verwendet, in dem Validierungs-Logs und -ergebnisse gespeichert werden.
verboseboolTrueWenn True, werden detaillierte Informationen während des Validierungsprozesses angezeigt, einschließlich Metriken pro Klasse, Batch-Fortschritt und zusätzlichen Debugging-Informationen.
save_txtboolFalseWenn True, werden Erkennungsergebnisse in Textdateien gespeichert, eine Datei pro Bild; nützlich für weitere Analysen, benutzerdefinierte Nachverarbeitung oder die Integration mit anderen Systemen.
save_confboolFalseWenn True, werden Konfidenzwerte in die gespeicherten Textdateien aufgenommen, sofern save_txt aktiviert ist, was detailliertere Ausgaben für Analyse und Filterung bietet.
workersint8Anzahl der Worker-Threads für das Laden der Daten. Höhere Werte können die Vorverarbeitung der Daten beschleunigen, aber die CPU-Auslastung erhöhen. Die Einstellung auf 0 verwendet den Haupt-Thread, was in einigen Umgebungen stabiler sein kann.
augmentboolFalseAktiviert die Test-Time Augmentation (TTA) während der Validierung, was die Erkennungsgenauigkeit potenziell verbessern kann, auf Kosten der Inferenzgeschwindigkeit, da die Inferenz auf transformierten Versionen der Eingabe ausgeführt wird.
agnostic_nmsboolFalseAktiviert die klassenunabhängige Non-Maximum Suppression, die überlappende Boxen unabhängig von ihrer vorhergesagten Klasse zusammenführt. Nützlich für instanzorientierte Anwendungen. Bei End-to-End-Modellen (YOLO26, YOLOv10) verhindert dies nur, dass dieselbe Erkennung mit mehreren Klassen-Labels erscheint (IoU=1.0-Duplikate), und führt keine IoU-schwellenwertbasierte Unterdrückung zwischen unterschiedlichen Boxen durch.
single_clsboolFalseBehandelt alle Klassen als eine einzige Klasse während der Validierung. Nützlich zur Bewertung der Modellleistung bei binären Erkennungsaufgaben oder wenn Klassenunterschiede nicht wichtig sind.
visualizeboolFalseVisualisiert die Ground Truths, True Positives, False Positives und False Negatives für jedes Bild. Nützlich für das Debugging und die Modellinterpretation.
compilebool oder strFalseAktiviert die PyTorch 2.x torch.compile Graphenkompilierung mit backend='inductor'. Akzeptiert True"default", False → deaktiviert, oder einen String-Modus wie "default", "reduce-overhead", "max-autotune-no-cudagraphs". Greift bei Nichtunterstützung mit einer Warnung auf den Eager-Modus zurück.
end2endboolNoneÜberschreibt den End-to-End-Modus in YOLO-Modellen, die NMS-freie Inferenz unterstützen (YOLO26, YOLOv10). Wenn du es auf False setzt, kannst du die Validierung mit der traditionellen NMS-Pipeline ausführen und zusätzlich das iou-Argument nutzen.

Jede dieser Einstellungen spielt eine entscheidende Rolle im Validierungsprozess und ermöglicht eine anpassbare und effiziente Bewertung von YOLO-Modellen. Die Anpassung dieser Parameter an deine spezifischen Bedürfnisse und Ressourcen kann dabei helfen, das beste Gleichgewicht zwischen Genauigkeit und Leistung zu erreichen.

Beispiel-Validierung mit Argumenten



Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More

Erkunde Modellvalidierung und verschiedene Exportmethoden in Google Colab

Die folgenden Beispiele zeigen die YOLO-Modellvalidierung mit benutzerdefinierten Argumenten in Python und CLI.

Beispiel
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

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

Du kannst die Ergebnisse der ConfusionMatrix auch in verschiedenen Formaten mithilfe des bereitgestellten Codes 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, Recall und F1 pro Bild

Die Validierung speichert Präzision, Recall, F1, TP, FP und FN-Metriken pro Bild (bei IoU-Schwellenwert 0,5) für alle Aufgaben außer Klassifizierung. Greife nach Abschluss der Validierung über results.box.image_metrics für Erkennung und OBB, results.seg.image_metrics für Segmentierung und results.pose.image_metrics für Pose darauf zu.

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate and access per-image metrics
results = model.val(data="coco8.yaml")

# image_metrics is a dictionary with image filenames as keys
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# Access metrics for a specific image
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)).
recallRecall-Wert für das Bild (tp / (tp + fn)).
f1Harmonisches Mittel von Präzision und Recall.
tpAnzahl der True Positives für das Bild.
fpAnzahl der False Positives für das Bild.
fnAnzahl der False Negatives für das Bild.

Diese Funktion ist für Erkennungs-, Segmentierungs-, Posen- und OBB-Aufgaben verfügbar.

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

Für weitere Details siehe die DataExportMixin-Klassendokumentation.

FAQ

Wie validiere ich mein YOLO26-Modell mit Ultralytics?

Um dein YOLO26-Modell zu validieren, kannst du den von Ultralytics bereitgestellten Val-Modus verwenden. Zum Beispiel kannst du mit der Python API ein Modell laden und die Validierung wie folgt ausführen:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate the model
metrics = model.val()
print(metrics.box.map)  # map50-95

Alternativ kannst du die Befehlszeilenschnittstelle (CLI) verwenden:

yolo val model=yolo26n.pt

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

Welche Metriken kann ich aus der YOLO26-Modellvalidierung erhalten?

Die YOLO26-Modellvalidierung bietet mehrere Schlüsselmetriken zur Bewertung der Modellleistung. 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 Metriken zugreifen:

metrics = model.val()  # assumes `model` has been loaded
print(metrics.box.map)  # mAP50-95
print(metrics.box.map50)  # mAP50
print(metrics.box.map75)  # mAP75
print(metrics.box.maps)  # list of mAP50-95 for each category
print(metrics.box.image_metrics)  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

Für eine vollständige Leistungsbewertung ist es entscheidend, all diese Metriken zu überprüfen. Weitere Details findest du in den Hauptfunktionen des Val-Modus.

Was sind die Vorteile der Verwendung von Ultralytics YOLO für die Validierung?

Die Verwendung von Ultralytics YOLO für die Validierung bietet mehrere Vorteile:

  • Präzision: YOLO26 bietet genaue Leistungsmetriken, einschließlich mAP50, mAP75 und mAP50-95.
  • Bequemlichkeit: Die Modelle merken sich ihre Trainingseinstellungen, was die Validierung unkompliziert macht.
  • Flexibilität: Du kannst gegen dieselben oder andere Datensätze und Bildgrößen validieren.
  • Hyperparameter-Optimierung: Validierungsmetriken helfen bei der Feinabstimmung von Modellen für eine bessere Leistung.

Diese Vorteile stellen sicher, dass deine Modelle gründlich bewertet und für hervorragende Ergebnisse optimiert werden können. Erfahre mehr über diese Vorteile im Abschnitt Warum mit Ultralytics YOLO validieren.

Kann ich mein YOLO26-Modell mit einem benutzerdefinierten Datensatz validieren?

Ja, du kannst dein YOLO26-Modell mit einem benutzerdefinierten Datensatz validieren. Gib das data-Argument mit dem Pfad zu deiner Datensatzkonfigurationsdatei an. Diese Datei sollte den Pfad zu den Validierungsdaten enthalten.

Hinweis

Die Validierung erfolgt unter Verwendung der eigenen Klassennamen des Modells, die du über model.names anzeigen kannst und die sich von den in der Datensatzkonfigurationsdatei angegebenen unterscheiden können.

Beispiel in Python:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate with a custom dataset
metrics = model.val(data="path/to/your/custom_dataset.yaml")
print(metrics.box.map)  # map50-95

Beispiel mit CLI:

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

Für weitere anpassbare Optionen während der Validierung siehe den Abschnitt Beispiel-Validierung mit Argumenten.

Wie speichere ich Validierungsergebnisse in einer JSON-Datei in YOLO26?

Um die Validierungsergebnisse in einer JSON-Datei zu speichern, kannst du das Argument save_json auf True setzen, wenn du die Validierung ausführst. Dies kann sowohl in der Python API als auch in der CLI erfolgen.

Beispiel in Python:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Save validation results to JSON
metrics = model.val(save_json=True)

Beispiel mit CLI:

yolo val model=yolo26n.pt save_json=True

Diese Funktionalität ist besonders nützlich für weitere Analysen oder die Integration mit anderen Tools. Überprüfe die Argumente für die YOLO-Modellvalidierung für weitere Details.

Kommentare