Entdecke unsere Partnerschaft mit ClearML für ein verbessertes Ultrlaytics YOLOv5 Erlebnis mit nahtloser ML-Integration, Experiment-Tracking und mehr.
Auf Ultralytics gehen wir kommerzielle Partnerschaften mit anderen Start-ups ein, die uns dabei helfen, die Forschung und Entwicklung unserer großartigen Open-Source-Tools wie YOLOv5 zu finanzieren, damit sie für alle kostenlos bleiben. Dieser Artikel kann Affiliate-Links zu diesen Partnern enthalten.
ClearML ist unser neuester Partner: eine Open-Source-Toolbox, mit der du Zeit sparen kannst.
Mit der Mission, die Einführung von ML zu beschleunigen, macht ClearML ML nahtlos in jedes Software- und Hardware-Produkt integrierbar, das es gibt.
Diese Integration macht es noch einfacher, ein Modell zu YOLOv5 Modell zu trainieren und es mit dem ClearML Experiment Manager automatisch zu verfolgen. Du kannst ganz einfach die Versionsnummer eines ClearML Datensatzes als Dateneingabe angeben, der dann automatisch zum Trainieren deines Modells verwendet wird.
Es liegt an dir, wie viele dieser Tools du nutzen willst. Du kannst dich auf den Experimentiermanager beschränken oder sie alle zu einer beeindruckenden Pipeline zusammenfügen.
Um den Überblick über deine Experimente und Daten zu behalten, muss ClearML mit einem Server kommunizieren. Dafür hast du zwei Möglichkeiten: Entweder du meldest dich kostenlos beim ClearML Hosted Service an oder du richtest deinen eigenen Server ein, siehe hier.
Sogar der Server ist quelloffen, wenn du also mit sensiblen Daten hantierst, ist das kein Problem!
Und voila! Du bist bereit, loszulegen...
Um die ClearML Experimentverfolgung zu aktivieren, installiere einfach das ClearML pip-Paket.
Pip-Installation clearml
Dies ermöglicht die Integration mit dem YOLOv5 Trainingsskript. Von nun an wird jeder Trainingslauf vom ClearML experiment manager erfasst und gespeichert. Wenn du den Projekt- oder Aufgabennamen ändern möchtest, gehst du zu unserem benutzerdefinierten Logger, wo du ihn ändern kannst: utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache
Damit wirst du erfasst:
Gar nicht so schlecht! Jetzt können wir all diese Informationen in der ClearML UI visualisieren, um einen Überblick über unseren Trainingsfortschritt zu erhalten. Füge der Tabellenansicht benutzerdefinierte Spalten hinzu (wie z.B. mAP_0.5), damit du ganz einfach nach dem leistungsstärksten Modell sortieren kannst. Oder wähle mehrere Experimente aus und vergleiche sie direkt!
Es gibt sogar noch mehr, was wir mit all diesen Informationen machen können, z. B. Hyperparameter-Optimierung und Remote-Ausführung. Lies weiter, um zu erfahren, wie!
Es ist generell eine gute Idee, deine Daten getrennt von deinem Code zu versionieren, denn so ist es einfach, die neueste Version zu erhalten. Dieses Repository unterstützt die Angabe der Versions-ID eines Datensatzes und sorgt dafür, dass die Daten beschafft werden, wenn sie noch nicht vorhanden sind. Außerdem speichert dieser Workflow die ID des verwendeten Datensatzes als Teil der Aufgabenparameter, sodass du immer genau weißt, welche Daten in welchem Experiment verwendet wurden!
Das Repository YOLOv5 unterstützt eine Reihe verschiedener Datensätze, indem es YAML-Dateien mit deren Informationen verwendet. Standardmäßig werden die Datensätze in den Ordner ../datasets in Bezug auf den Stammordner des Repositorys heruntergeladen. Wenn du also den coco128-Datensatz über den Link in der YAML-Datei oder mit den von yolov5 bereitgestellten Skripten heruntergeladen hast, erhältst du diese Ordnerstruktur:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
Aber das kann jeder Datensatz sein, den du möchtest. Du kannst auch deine eigenen verwenden, solange du dich an diese Ordnerstruktur hältst.
Als Nächstes legst du unter ⚠️copy die entsprechende YAML-Datei im Stammverzeichnis des Datasets folder⚠️ ab. Diese YAML-Dateien enthalten die Informationen, die ClearML benötigt, um das Dataset richtig zu nutzen. Du kannst sie natürlich auch selbst erstellen, folge einfach der Struktur der Beispiel-YAMLs.
Grundsätzlich brauchen wir die folgenden Schlüssel: path, train, test, val, nc, names.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
Um diesen Datensatz als versionierten Datensatz in ClearML zu erhalten, gehst du zum Stammordner des Datensatzes und führst den folgenden Befehl aus:
cd coco128
clearml--data sync --project YOLOv5 --name coco128 --folder .
Der Befehl clearml-data sync ist eigentlich ein Kurzbefehl. Du kannst diese Befehle auch nacheinander ausführen:
# Füge optional --parent hinzu, wenn du die Basis
# diese Version auf eine andere Datensatzversion, damit keine doppelten Dateien hochgeladen werden!
clearml-data create --name coco128 --project YOLOv5/p>
clearml-data add --files .
clearml-Daten schließen
Jetzt, wo du einen ClearML Datensatz hast, kannst du ihn ganz einfach verwenden, um eigene YOLOv5 Modelle zu trainieren.
python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cache
Jetzt, da wir unsere Experimente und die Datenversion haben, ist es an der Zeit, einen Blick darauf zu werfen, was wir darauf aufbauen können!
Mithilfe der Code-Informationen, der installierten Pakete und der Umgebungsdetails ist das Experiment selbst nun vollständig reproduzierbar. Unter ClearML kannst du ein Experiment klonen und sogar seine Parameter ändern. Wir können es dann einfach mit diesen neuen Parametern automatisch wiederholen - das ist im Grunde das, was HPO macht!
Um die Hyperparameter-Optimierung lokal durchzuführen, haben wir ein vorgefertigtes Skript für dich bereitgestellt. Vergewissere dich einfach, dass eine Trainingsaufgabe mindestens einmal gelaufen ist, damit sie sich im ClearML Experimentmanager befindet. Wir klonen sie und ändern ihre Hyperparameter.
Du musst die ID dieser Vorlagenaufgabe in das Skript unter utils/loggers/clearml/hpo.py eintragen und es dann einfach ausführen. Du kannst task.execute_locally() in task.execute() ändern, um die Aufgabe in eine ClearML Warteschlange zu stellen und stattdessen einen entfernten Agenten mit ihr arbeiten zu lassen.
# Um optuna zu verwenden, installiere es zuerst, ansonsten kannst du den Optimierer einfach in RandomSearch ändern pip install optuna python utils/loggers/clearml/hpo.py
HPO lokal auszuführen ist wirklich praktisch, aber was ist, wenn wir unsere Experimente stattdessen auf einem entfernten Rechner durchführen wollen? Vielleicht hast du Zugang zu einer sehr leistungsstarken GPU Maschine vor Ort oder du hast ein gewisses Budget, um Cloud-GPUs zu nutzen. An dieser Stelle kommt der ClearML Agent ins Spiel.
Schau dir an, was der Agent hier tun kann:
Kurz gesagt: Jedes Experiment, das vom Experiment-Manager verfolgt wird, enthält genügend Informationen, um es auf einem anderen Rechner zu reproduzieren (installierte Pakete, unbestätigte Änderungen usw.). Ein ClearML -Agent macht genau das: Er hört auf eine Warteschlange für eingehende Aufgaben und wenn er eine findet, erstellt er die Umgebung neu und führt sie aus, während er weiterhin Skalare, Plots usw. an den Experimentmanager meldet.
Du kannst jeden Rechner (eine Cloud-VM, einen lokalen GPU Rechner, deinen eigenen Laptop ... ) in einen ClearML Agenten verwandeln, indem du ihn einfach ausführst:
clearml-agent daemon --queue [--docker]
Wenn unser Agent läuft, können wir ihm etwas Arbeit abnehmen. Erinnerst du dich an den Abschnitt über HPO, in dem wir eine Aufgabe klonen und die Hyperparameter bearbeiten können? Das können wir auch über die Benutzeroberfläche tun!
🪄 Klone das Experiment, indem du es mit der rechten Maustaste anklickst
🎯 Bearbeite die Hyperparameter so, wie du sie haben möchtest
⏳ Stelle die Aufgabe in eine der Warteschlangen ein, indem du sie mit der rechten Maustaste anklickst.
Jetzt kannst du eine Aufgabe klonen, wie wir es oben erklärt haben, oder einfach dein aktuelles Skript markieren, indem du task.execute_remotely() hinzufügst. Bei der Ausführung wird es in eine Warteschlange gestellt, damit der Agent mit der Arbeit beginnen kann!
Um das Trainingsskript YOLOv5 aus der Ferne auszuführen, musst du nur diese Zeile in das Skript training.py einfügen, nachdem der Logger ClearML instanziiert worden ist:
# ... # Loggers data_dict = None if RANK in {-1, 0}: loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # loggers instance if loggers.clearml: loggers.clearml.task.execute_remotely(queue='my_queue') # <------ ADD THIS LINE # Data_dict is either None is user did not choose for ClearML dataset or is filled in by ClearML data_dict = loggers.clearml.data_dict # ...
Wenn du das Trainingsskript nach dieser Änderung ausführst, führt python das Skript bis zu dieser Zeile aus. Danach wird der Code verpackt und stattdessen an die Warteschlange gesendet!
ClearML kommt auch mit automatischen Skalierern! Dieses Tool richtet automatisch neue Remote-Maschinen in der Cloud deiner Wahl ein (AWS, GCP, Azure) und verwandelt sie in ClearML Agenten für dich, sobald Experimente in der Warteschlange entdeckt werden. Sobald die Aufgaben abgearbeitet sind, schaltet der Auto-Scaler die Remote-Maschinen automatisch ab und du hörst auf zu zahlen! Sieh dir unten das Video zu den ersten Schritten des Auto-Scalers an.
Hast du Fragen? Tritt unserer Community bei und hinterlasse deine Frage noch heute!
Beginne deine Reise in die Zukunft des maschinellen Lernens