Link to this sectionModellvalidierung mit Ultralytics YOLO#
Link to this sectionEinfü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 eine robuste Suite von Tools und Metriken zur Evaluierung der Leistung deiner Objekterkennungs-Modelle. Dieser Leitfaden dient als umfassende Ressource, um zu verstehen, wie du den Val-Modus effektiv nutzen kannst, um sicherzustellen, dass deine Modelle sowohl präzise als auch zuverlässig sind.
Watch: Ultralytics Modes Tutorial: Validation
Link to this sectionWarum Validierung mit Ultralytics YOLO?#
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.
- 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.
- Hyperparameter-Tuning: Verwende Validierungsmetriken, um dein Modell für eine bessere Leistung feinabzustimmen.
Link to this sectionHauptfunktionen des Val-Modus#
Dies sind die bemerkenswerten Funktionalitäten, die der Val-Modus von YOLO26 bietet:
- Automatisierte Einstellungen: Modelle speichern ihre Trainingskonfigurationen für eine unkomplizierte Validierung.
- Multi-Metrik-Unterstützung: Evaluiere dein Modell basierend auf einer Reihe von Genauigkeitsmetriken.
- CLI und Python API: Wähle basierend auf deiner Präferenz für die Validierung zwischen der Befehlszeilenschnittstelle oder der Python API.
- Datenkompatibilität: Funktioniert nahtlos mit Datensätzen, die während der Trainingsphase verwendet wurden, sowie mit benutzerdefinierten Datensätzen.
- YOLO26-Modelle speichern automatisch ihre Trainingseinstellungen, sodass du ein Modell einfach mit
yolo val model=yolo26n.ptoderYOLO("yolo26n.pt").val()bei gleicher Bildgröße und auf dem ursprünglichen Datensatz validieren kannst.
Link to this sectionAnwendungsbeispiele#
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.
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 das Problem zu lösen.
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 FNLink to this sectionArgumente 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, um dir zu helfen, deine Validierungseinstellungen effektiv anzupassen.
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
data | str | None | Gibt den Pfad zur Konfigurationsdatei des Datensatzes an (z. B. coco8.yaml). Diese Datei sollte den Pfad zu den Validierungsdaten enthalten. |
imgsz | int | 640 | Definiert die Größe der Eingabebilder. Alle Bilder werden vor der Verarbeitung auf diese Dimension skaliert. Größere Größen können die Genauigkeit bei kleinen Objekten verbessern, erhöhen aber die Rechenzeit. |
batch | int | 16 | Legt die Anzahl der Bilder pro Batch fest. Höhere Werte nutzen den GPU-Speicher effizienter, erfordern jedoch mehr VRAM. Passe dies basierend auf den verfügbaren Hardware-Ressourcen an. |
save_json | bool | False | Falls True, werden die Ergebnisse zur weiteren Analyse, Integration mit anderen Tools oder zur Einreichung bei Bewertungsservern wie COCO in einer JSON-Datei gespeichert. |
conf | float | 0.001 | Legt den minimalen Konfidenz-Schwellenwert für Erkennungen fest. Niedrigere Werte erhöhen den Recall, können aber mehr falsch-positive Ergebnisse einführen. Wird während der Validierung verwendet, um Precision-Recall-Kurven zu berechnen. Standardmäßig 0.01 für die OBB-Validierung, um die Speicherauslastung zu reduzieren. |
iou | float | 0.7 | Legt den Intersection Over Union-Schwellenwert für Non-Maximum Suppression fest. Steuert die Eliminierung doppelter Erkennungen. |
max_det | int | 300 | Begrenzt die maximale Anzahl der Erkennungen pro Bild. Nützlich in dichten Szenen, um übermäßige Erkennungen zu verhindern und Rechenressourcen zu verwalten. |
quantize | int oder str | None | Validierungspräzision: 16/"fp16" aktiviert FP16-Validierung auf unterstützten GPUs; 32/"fp32"/nicht gesetzt ist FP32. Die INT8/PTQ-Quantisierung wird während des Exports konfiguriert und anschließend durch Validieren des exportierten Modells verwendet. Ersetzt das veraltete half-Flag. |
device | str | None | Gibt das Gerät für die Validierung an (cpu, cuda:0, npu, npu:0 usw.). Wenn None, wird automatisch das beste verfügbare Gerät ausgewählt. Mehrere CUDA-Geräte können durch Komma getrennt angegeben werden. |
dnn | bool | False | Falls True, wird das OpenCV DNN-Modul für die ONNX-Modellinferenz verwendet, was eine Alternative zu PyTorch-Inferenzmethoden bietet. |
plots | bool | True | Wenn auf True gesetzt, werden Plots von Vorhersagen gegenüber der Ground Truth, Konfusionsmatrizen und PR-Kurven zur visuellen Bewertung der Modellleistung generiert und gespeichert. |
classes | list[int] | None | Gibt eine Liste von Klassen-IDs an, die evaluiert werden sollen. Nützlich, um während der Evaluierung bestimmte Klassen herauszufiltern und sich nur auf diese zu konzentrieren. |
rect | bool | True | Falls True, wird rechteckige Inferenz für das Batching verwendet, was das Padding reduziert und potenziell Geschwindigkeit sowie Effizienz durch die Verarbeitung von Bildern in ihrem ursprünglichen Seitenverhältnis steigert. |
split | str | 'val' | Bestimmt den Dataset-Split, der für die Validierung verwendet werden soll (val, test oder train). Erlaubt Flexibilität bei der Auswahl des Datensegments für die Leistungsbewertung. |
project | str | None | Name des Projektverzeichnisses, in dem Validierungsergebnisse gespeichert werden. Hilft dabei, Ergebnisse verschiedener Experimente oder Modelle zu organisieren. |
name | str | None | Name des Validierungslaufs. Wird zum Erstellen eines Unterverzeichnisses innerhalb des Projektordners verwendet, in dem Validierungsprotokolle und -ausgaben gespeichert werden. |
verbose | bool | True | Falls True, werden während des Validierungsprozesses detaillierte Informationen angezeigt, einschließlich klassenspezifischer Metriken, Batch-Fortschritt und zusätzlicher Debugging-Informationen. |
save_txt | bool | False | Falls True, werden Erkennungsergebnisse in Textdateien gespeichert, eine Datei pro Bild, was für weitere Analysen, benutzerdefinierte Nachbearbeitung oder die Integration mit anderen Systemen nützlich ist. |
save_conf | bool | False | Falls True, werden Konfidenzwerte in den gespeicherten Textdateien eingeschlossen, wenn save_txt aktiviert ist, was detailliertere Ausgaben für Analysen und Filterungen bereitstellt. |
workers | int | 8 | Anzahl der Worker-Threads für das Laden von Daten. Höhere Werte können die Datenvorverarbeitung beschleunigen, aber möglicherweise den CPU-Verbrauch erhöhen. Die Einstellung auf 0 verwendet den Hauptthread, was in einigen Umgebungen stabiler sein kann. |
augment | bool | False | Aktiviert Test-Time Augmentation (TTA) während der Validierung, was potenziell die Erkennungsgenauigkeit auf Kosten der Inferenzgeschwindigkeit verbessert, indem Inferenz auf transformierten Versionen der Eingabe ausgeführt wird. |
agnostic_nms | bool | False | Aktiviert 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 Klassenlabels erscheint (IoU=1.0 Duplikate), und führt keine IoU-schwellenwertbasierte Unterdrückung zwischen verschiedenen Boxen durch. |
single_cls | bool | False | Behandelt alle Klassen während der Validierung als eine einzige Klasse. Nützlich zur Bewertung der Modellleistung bei binären Erkennungsaufgaben oder wenn Klassenunterschiede nicht wichtig sind. |
visualize | bool | False | Visualisiert die Ground Truths, True Positives, False Positives und False Negatives für jedes Bild. Nützlich für Debugging und Modellinterpretation. |
show_labels | bool | True | Zeigt Klassenlabels in Validierungsvisualisierungen an, wenn visualize=True. Auf False setzen für eine sauberere Ansicht der Treffer und Fehler. |
show_conf | bool | True | Zeigt Konfidenzwerte in Validierungsvisualisierungen an, wenn visualize=True. Auf False setzen für eine sauberere Ansicht der Treffer und Fehler. |
compile | bool oder str | False | Aktiviert die PyTorch 2.x torch.compile Graph-Kompilierung mit backend='inductor'. Akzeptiert True → "default", False → deaktiviert, oder einen String-Modus wie "default", "reduce-overhead", "max-autotune-no-cudagraphs". Fällt bei Nichtunterstützung mit einer Warnung auf Eager zurück. |
end2end | bool | None | Ü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 durchführen, was es dir zusätzlich ermöglicht, das iou-Argument zu 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 helfen, das beste Gleichgewicht zwischen Genauigkeit und Leistung zu erreichen.
Link to this sectionBeispielvalidierung mit Argumenten#
Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More
Die folgenden Beispiele zeigen die YOLO-Modellvalidierung mit benutzerdefinierten Argumenten in Python und CLI.
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")Du kannst die Ergebnisse der ConfusionMatrix auch in verschiedenen Formaten speichern, indem du den bereitgestellten Code verwendest.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())Die Validierung speichert Präzision, Recall, F1, TP, FP und FN pro Bild (bei einem IoU-Schwellenwert von 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üssel | Beschreibung |
|---|---|
precision | Präzisionswert für das Bild (tp / (tp + fp)). |
recall | Recall-Wert für das Bild (tp / (tp + fn)). |
f1 | Harmonisches Mittel aus Präzision und Recall. |
tp | Anzahl der True Positives für das Bild. |
fp | Anzahl der False Positives für das Bild. |
fn | Anzahl der False Negatives für das Bild. |
Diese Funktion ist für Erkennungs-, Segmentierungs-, Posen- und OBB-Aufgaben verfügbar.
| Methode | Rückgabetyp | Beschreibung |
|---|---|---|
summary() | List[Dict[str, Any]] | Wandelt Validierungsergebnisse in ein zusammengefasstes Dictionary um. |
to_df() | DataFrame | Gibt die Validierungsergebnisse als strukturierten Polars DataFrame zurück. |
to_csv() | str | Exportiert die Validierungsergebnisse im CSV-Format und gibt den CSV-String zurück. |
to_json() | str | Exportiert die Validierungsergebnisse im JSON-Format und gibt den JSON-String zurück. |
Weitere Details findest du in der Dokumentation der DataExportMixin-Klasse.
Link to this sectionFAQ#
Link to this sectionWie 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-95Alternativ kannst du die Befehlszeilenschnittstelle (CLI) verwenden:
yolo val model=yolo26n.ptFü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.
Link to this sectionWelche Metriken kann ich aus der YOLO26-Modellvalidierung erhalten?#
Die YOLO26-Modellvalidierung bietet mehrere wichtige Metriken 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 FNFür eine vollständige Leistungsbewertung ist es entscheidend, all diese Metriken zu überprüfen. Weitere Details findest du in den Hauptfunktionen des Val-Modus.
Link to this sectionWas 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.
- Komfort: Die Modelle speichern ihre Trainingseinstellungen, was die Validierung unkompliziert macht.
- Flexibilität: Du kannst gegen denselben oder andere Datensätze und Bildgrößen validieren.
- Hyperparameter-Tuning: 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 überlegene Ergebnisse optimiert werden können. Erfahre mehr über diese Vorteile im Abschnitt Warum Validierung mit Ultralytics YOLO.
Link to this sectionKann 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.
Die Validierung wird unter Verwendung der eigenen Klassennamen des Modells durchgeführt, die du über model.names anzeigen kannst und die sich von denen in der Datensatzkonfigurationsdatei 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-95Beispiel mit CLI:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlWeitere anpassbare Optionen während der Validierung findest du im Abschnitt Beispielvalidierung mit Argumenten.
Link to this sectionWie 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=TrueDiese Funktionalität ist besonders nützlich für weitere Analysen oder die Integration mit anderen Tools. Siehe Argumente für die YOLO-Modellvalidierung für weitere Details.