Modellvalidierung mit Ultralytics YOLO
Einführung
Die Validierung ist ein kritischer Schritt in der Machine-Learning-Pipeline, der es Ihnen ermöglicht, die Qualität Ihrer trainierten Modelle zu beurteilen. Der Val-Modus in Ultralytics YOLO11 bietet eine robuste Suite von Tools und Metriken zur Bewertung der Leistung Ihrer Objekterkennungs-Modelle. Dieser Leitfaden dient als vollständige Ressource, um zu verstehen, wie Sie den Val-Modus effektiv nutzen können, um sicherzustellen, dass Ihre Modelle sowohl genau als auch zuverlässig sind.
Ansehen: Ultralytics Modes Tutorial: Validierung
Warum mit Ultralytics YOLO validieren?
Deshalb ist die Verwendung des Val-Modus von YOLO11 vorteilhaft:
- Präzision: Erhalten Sie genaue Metriken wie mAP50, mAP75 und mAP50-95, um Ihr Modell umfassend zu bewerten.
- Komfort: Nutzen Sie integrierte Funktionen, die sich an Trainingseinstellungen erinnern und den Validierungsprozess vereinfachen.
- Flexibilität: Validieren Sie Ihr Modell mit den gleichen oder unterschiedlichen Datensätzen und Bildgrößen.
- Hyperparameter-Optimierung: Verwenden Sie Validierungsmetriken, um Ihr Modell für eine bessere Leistung feinabzustimmen.
Hauptmerkmale des Val-Modus
Dies sind die bemerkenswerten Funktionalitäten, die der Val-Modus von YOLO11 bietet:
- Automatisierte Einstellungen: Modelle speichern ihre Trainingskonfigurationen für eine unkomplizierte Validierung.
- Multi-Metrik-Unterstützung: Bewerten Sie Ihr Modell anhand einer Reihe von Genauigkeitsmetriken.
- CLI und Python API: Wählen Sie zwischen der Befehlszeilenschnittstelle oder der Python API, je nachdem, was Sie für die Validierung bevorzugen.
- Datenkompatibilität: Funktioniert nahtlos mit Datensätzen, die während der Trainingsphase verwendet wurden, sowie mit benutzerdefinierten Datensätzen.
Tipp
- YOLO11-Modelle speichern automatisch ihre Trainingseinstellungen, sodass Sie ein Modell einfach mit derselben Bildgröße und auf dem ursprünglichen Datensatz validieren können, indem Sie einfach
yolo val model=yolo11n.pt
odermodel('yolo11n.pt').val()
Anwendungsbeispiele
Validieren des trainierten YOLO11n-Modells Genauigkeit auf dem COCO8-Datensatz. Es werden keine Argumente benötigt, da die model
behält sein Training data
und Argumente als Modellattribute. Eine vollständige Liste der Validierungsargumente finden Sie im Abschnitt Argumente weiter unten.
Beispiel
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.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 contains map50-95 of each category
yolo detect val model=yolo11n.pt # val official model
yolo detect val model=path/to/best.pt # val custom model
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 die Größe des Eingangsbildes, die Batch-Verarbeitung und Leistungsschwellenwerte. Im Folgenden finden Sie eine detaillierte Aufschlüsselung der einzelnen Argumente, die Ihnen helfen, Ihre Validierungseinstellungen effektiv anzupassen.
Argument | Typ | Standard | Beschreibung |
---|---|---|---|
data |
str |
None |
Gibt den Pfad zur Datensatzkonfigurationsdatei an (z. B. coco8.yaml ). Diese Datei enthält Pfade zu Validierungsdaten, Klassennamen und Anzahl der Klassen. |
imgsz |
int |
640 |
Definiert die Größe der Eingabebilder. Alle Bilder werden vor der Verarbeitung auf diese Dimension skaliert. Größere Formate 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, benötigen aber mehr VRAM. Anpassen basierend auf den verfügbaren Hardwareressourcen. |
save_json |
bool |
False |
Wenn True , speichert die Ergebnisse in einer JSON-Datei zur weiteren Analyse, Integration mit anderen Tools oder zur Einreichung bei Bewertungsservern wie COCO. |
conf |
float |
0.001 |
Legt den minimalen Konfidenzschwellenwert für Erkennungen fest. Niedrigere Werte erhöhen die Trefferquote, können aber mehr falsch positive Ergebnisse verursachen. Wird während der Validierung verwendet, um Precision-Recall-Kurven zu berechnen. |
iou |
float |
0.7 |
Legt den Intersection Over Union-Schwellenwert für die Non-Maximum Suppression fest. Steuert die Eliminierung von Duplikaten. |
max_det |
int |
300 |
Begrenzt die maximale Anzahl von Erkennungen pro Bild. Nützlich in dichten Szenen, um übermäßige Erkennungen zu verhindern und Rechenressourcen zu verwalten. |
half |
bool |
True |
Aktiviert die Halb-precision (FP16)-Berechnung, wodurch der Speicherverbrauch reduziert und potenziell die Geschwindigkeit erhöht wird, mit minimalen Auswirkungen auf die Genauigkeit. |
device |
str |
None |
Gibt das Gerät für die Validierung an (cpu , cuda:0 , usw.). Wenn None , wählt automatisch das beste verfügbare Gerät aus. Mehrere CUDA-Geräte können durch Kommas getrennt angegeben werden. |
dnn |
bool |
False |
Wenn True , verwendet das OpenCV DNN-Modul für die ONNX-Modellinferenz, das eine Alternative zu PyTorch Inferenzmethoden bietet. |
plots |
bool |
False |
Wenn aktiviert, True , generiert und speichert Diagramme von Vorhersagen im Vergleich zur Ground Truth, Konfusionsmatrizen und PR-Kurven zur visuellen Bewertung der Modellleistung. |
classes |
list[int] |
None |
Gibt eine Liste von Klassen-IDs an, auf denen trainiert werden soll. Nützlich, um bestimmte Klassen während der Evaluierung herauszufiltern und sich nur auf diese zu konzentrieren. |
rect |
bool |
True |
Wenn True , verwendet rechteckige Inferenz für Batch-Verarbeitung, wodurch das Padding reduziert und potenziell die Geschwindigkeit und Effizienz durch die Verarbeitung von Bildern in ihrem ursprünglichen Seitenverhältnis erhöht wird. |
split |
str |
'val' |
Bestimmt die Datensatzaufteilung, die für die Validierung verwendet werden soll (val , test , oder train ). Ermöglicht Flexibilität bei der Auswahl des Datensegments für die Leistungsbewertung. |
project |
str |
None |
Name des Projektverzeichnisses, in dem Validierungsausgaben gespeichert werden. Hilft bei der Organisation von Ergebnissen aus verschiedenen Experimenten oder Modellen. |
name |
str |
None |
Name des Validierungslaufs. Wird verwendet, um ein Unterverzeichnis innerhalb des Projektordners zu erstellen, in dem Validierungsprotokolle und -ausgaben gespeichert werden. |
verbose |
bool |
False |
Wenn True , zeigt detaillierte Informationen während des Validierungsprozesses an, einschließlich Metriken pro Klasse, Batch-Fortschritt und zusätzlichen Debugging-Informationen. |
save_txt |
bool |
False |
Wenn True , speichert Erkennungsergebnisse in Textdateien, mit einer Datei pro Bild, nützlich für weitere Analysen, benutzerdefinierte Nachbearbeitung oder die Integration mit anderen Systemen. |
save_conf |
bool |
False |
Wenn True , enthält Konfidenzwerte in den gespeicherten Textdateien, wenn save_txt ist aktiviert und bietet eine detailliertere Ausgabe für Analyse und Filterung. |
workers |
int |
8 |
Anzahl der Worker-Threads für das Laden von Daten. Höhere Werte können die Datenvorverarbeitung beschleunigen, aber die CPU-Auslastung erhöhen. Die Einstellung 0 verwendet den Haupt-Thread, der in einigen Umgebungen stabiler sein kann. |
augment |
bool |
False |
Ermöglicht Testzeit-Augmentation (TTA) während der Validierung, was potenziell die Erkennungsgenauigkeit auf Kosten der Inferenzgeschwindigkeit verbessert, indem die Inferenz auf transformierten Versionen der Eingabe ausgeführt wird. |
agnostic_nms |
bool |
False |
Ermöglicht klassenunabhängige Non-Maximum Suppression, die überlappende Boxen unabhängig von ihrer vorhergesagten Klasse zusammenführt. Nützlich für instanzfokussierte Anwendungen. |
single_cls |
bool |
False |
Behandelt alle Klassen während der Validierung als eine einzige Klasse. Dies ist nützlich, um die Modellleistung bei binären Erkennungsaufgaben zu bewerten oder wenn Klassenunterscheidungen keine Rolle spielen. |
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. |
Jede dieser Einstellungen spielt eine wichtige Rolle im Validierungsprozess und ermöglicht eine anpassbare und effiziente Bewertung von YOLO-Modellen. Das Anpassen dieser Parameter an Ihre spezifischen Bedürfnisse und Ressourcen kann dazu beitragen, das beste Gleichgewicht zwischen Genauigkeit und Leistung zu erzielen.
Beispielvalidierung mit Argumenten
Ansehen: Exportieren von Modellvalidierungsergebnissen in CSV, JSON, SQL, Polars DataFrame und mehr
Die folgenden Beispiele zeigen die Validierung von YOLO-Modellen mit benutzerdefinierten Argumenten in Python und CLI.
Beispiel
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt")
# Customize validation settings
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.6, device="0")
yolo val model=yolo11n.pt data=coco8.yaml imgsz=640 batch=16 conf=0.25 iou=0.6 device=0
ConfusionMatrix exportieren
Sie können die ConfusionMatrix-Ergebnisse auch mit dem bereitgestellten Code in verschiedenen Formaten speichern.
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())
Methode | Rückgabetyp | Beschreibung |
---|---|---|
summary() |
List[Dict[str, Any]] |
Konvertiert Validierungsergebnisse in ein zusammengefasstes Dictionary. |
to_df() |
DataFrame |
Gibt die Validierungsergebnisse in Form eines strukturierten Polars DataFrame zurück. |
to_csv() |
str |
Exportiert die Validierungsergebnisse im CSV-Format und gibt die CSV-Zeichenkette zurück. |
to_json() |
str |
Exportiert die Validierungsergebnisse im JSON-Format und gibt die JSON-Zeichenkette zurück. |
Weitere Informationen finden Sie in der DataExportMixin
Klassendokumentation.
FAQ
Wie validiere ich mein YOLO11-Modell mit Ultralytics?
Um Ihr YOLO11-Modell zu validieren, können Sie den von Ultralytics bereitgestellten Val-Modus verwenden. Mit der Python API können Sie beispielsweise ein Modell laden und die Validierung wie folgt ausführen:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt")
# Validate the model
metrics = model.val()
print(metrics.box.map) # map50-95
Alternativ können Sie die Befehlszeilenschnittstelle (CLI) verwenden:
yolo val model=yolo11n.pt
Für weitere Anpassungen können Sie verschiedene Argumente anpassen, wie z.B. imgsz
, batch
und conf
sowohl im Python- als auch im CLI-Modus. Überprüfen Sie den Abschnitt Argumente für die YOLO-Modellvalidierung für die vollständige Liste der Parameter.
Welche Metriken kann ich aus der YOLO11-Modellvalidierung erhalten?
Die YOLO11-Modellvalidierung bietet verschiedene Schlüsselmetriken zur Bewertung der Modellleistung. Dazu gehören:
- mAP50 (Mean Average Precision bei IoU-Schwellenwert 0.5)
- mAP75 (Mean Average Precision bei IoU-Schwellenwert 0.75)
- mAP50-95 (Mean Average Precision über mehrere IoU-Schwellenwerte von 0.5 bis 0.95)
Mit der Python API können Sie 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
Für eine vollständige Leistungsbewertung ist es entscheidend, alle diese Metriken zu überprüfen. Weitere Informationen finden Sie unter Hauptmerkmale des Val-Modus.
Welche Vorteile bietet die Verwendung von Ultralytics YOLO zur Validierung?
Die Verwendung von Ultralytics YOLO zur Validierung bietet mehrere Vorteile:
- Präzision: YOLO11 bietet genaue Leistungsmetriken, einschließlich mAP50, mAP75 und mAP50-95.
- Komfort: Die Modelle speichern ihre Trainingseinstellungen, was die Validierung unkompliziert macht.
- Flexibilität: Sie können gegen die gleichen oder unterschiedliche 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 Ihre Modelle gründlich evaluiert und für überragende Ergebnisse optimiert werden können. Erfahren Sie mehr über diese Vorteile im Abschnitt Warum mit Ultralytics YOLO validieren.
Kann ich mein YOLO11-Modell mit einem benutzerdefinierten Datensatz validieren?
Ja, Sie können Ihr YOLO11-Modell mit einem benutzerdefinierten Datensatzvalidieren. Spezifizieren Sie das data
Argument mit dem Pfad zu Ihrer Datensatz-Konfigurationsdatei. Diese Datei sollte Pfade zu den Validierungsdaten, Klassennamen und andere relevante Details enthalten.
Beispiel in python:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt")
# Validate with a custom dataset
metrics = model.val(data="path/to/your/custom_dataset.yaml")
print(metrics.box.map) # map50-95
Beispiel mit der CLI:
yolo val model=yolo11n.pt data=path/to/your/custom_dataset.yaml
Weitere anpassbare Optionen während der Validierung finden Sie im Abschnitt Beispielvalidierung mit Argumenten.
Wie speichere ich Validierungsergebnisse in einer JSON-Datei in YOLO11?
Um die Validierungsergebnisse in einer JSON-Datei zu speichern, können Sie den save_json
Argument für True
beim Ausführen der Validierung festlegen. 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("yolo11n.pt")
# Save validation results to JSON
metrics = model.val(save_json=True)
Beispiel mit der CLI:
yolo val model=yolo11n.pt save_json=True
Diese Funktionalität ist besonders nützlich für die weitere Analyse oder Integration mit anderen Tools. Weitere Informationen finden Sie unter Argumente für die YOLO-Modellvalidierung.