Modellvalidierung mit Ultralytics YOLO
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.
- 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.ptoderYOLO("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.
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.
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 FNArgumente 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.
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
data | str | None | Gibt den Pfad zur Datensatz-Konfigurationsdatei 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 Dimensionen können die Genauigkeit bei kleinen Objekten verbessern, erhöhen jedoch die Rechenzeit. |
batch | int | 16 | Setzt 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_json | bool | False | Wenn True, werden die Ergebnisse zur weiteren Analyse, Integration mit anderen Tools oder zur Einreichung bei Evaluierungsservern wie COCO in einer JSON-Datei gespeichert. |
conf | float | 0.001 | Setzt 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. |
iou | float | 0.7 | Setzt den Intersection Over Union-Schwellenwert für die Non-Maximum Suppression. Steuert die Eliminierung doppelter Erkennungen. |
max_det | int | 300 | Begrenzt die maximale Anzahl an Erkennungen pro Bild. Nützlich in dichten Szenen, um übermäßige Erkennungen zu vermeiden und Rechenressourcen zu verwalten. |
half | bool | False | Aktiviert die Berechnung mit halber Präzision (FP16), was den Speicherverbrauch reduziert und potenziell die Geschwindigkeit bei minimalem Einfluss auf die Genauigkeit erhöht. |
device | str | None | Gibt 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. |
dnn | bool | False | Wenn True, wird das OpenCV DNN-Modul für die ONNX-Modell-Inferenz verwendet, was eine Alternative zu PyTorch-Inferenzmethoden bietet. |
plots | bool | True | Wenn auf True gesetzt, werden Diagramme von Vorhersagen gegenüber Ground Truth, Konfusionsmatrizen und PR-Kurven zur visuellen Bewertung der Modellleistung erstellt und gespeichert. |
classes | list[int] | None | Gibt 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. |
rect | bool | True | Wenn 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. |
split | str | '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. |
project | str | None | Name des Projektverzeichnisses, in dem Validierungsergebnisse gespeichert werden. Hilft dabei, Ergebnisse aus verschiedenen Experimenten oder Modellen zu organisieren. |
name | str | None | Name des Validierungsdurchlaufs. Wird zum Erstellen eines Unterverzeichnisses innerhalb des Projektordners verwendet, in dem Validierungs-Logs und -ergebnisse gespeichert werden. |
verbose | bool | True | Wenn True, werden detaillierte Informationen während des Validierungsprozesses angezeigt, einschließlich Metriken pro Klasse, Batch-Fortschritt und zusätzlichen Debugging-Informationen. |
save_txt | bool | False | Wenn 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_conf | bool | False | Wenn True, werden Konfidenzwerte in die gespeicherten Textdateien aufgenommen, sofern save_txt aktiviert ist, was detailliertere Ausgaben für Analyse und Filterung bietet. |
workers | int | 8 | Anzahl 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. |
augment | bool | False | Aktiviert 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_nms | bool | False | Aktiviert 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_cls | bool | False | Behandelt 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. |
visualize | bool | False | Visualisiert die Ground Truths, True Positives, False Positives und False Negatives für jedes Bild. Nützlich für das Debugging und die Modellinterpretation. |
compile | bool oder str | False | Aktiviert 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. |
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 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
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 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())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ü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 von 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. |
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-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.
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 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.
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.
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-95Beispiel mit CLI:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlFü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=TrueDiese 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.