Ultralytics YOLOv5 mit ClearML aus der Ferne trainieren und überwachen
Erfahre, wie du mit ClearML Experimente nachverfolgst, Datensätze versionierst, Hyperparameter abstimmst und Ultralytics YOLOv5-Modelle auf entfernten Rechnern trainierst.
Nuvola Ladi6 Min. Lesezeit
Bei Ultralytics arbeiten wir kommerziell mit anderen Start-ups zusammen, um die Forschung und Entwicklung unserer quelloffenen Werkzeuge wie YOLOv5 zu finanzieren und sie für alle kostenlos zu halten. Dieser Artikel kann Affiliate-Links zu diesen Partnern enthalten.
ClearML ist unser neuester Partner: eine Open-Source-Werkzeugsammlung, die dir Zeit sparen soll.
ClearML hat sich zum Ziel gesetzt, die Einführung von ML zu beschleunigen, und macht es einfach, ML in jedes Software- oder Hardwareprodukt zu integrieren.
Diese Integration vereinfacht das Training eines YOLOv5-Modells noch weiter und ermöglicht es, den ClearML-Experimentmanager zur automatischen Nachverfolgung zu verwenden. Du kannst ganz einfach eine ClearML-Datensatzversions-ID als Dateneingabe angeben. Sie wird dann automatisch zum Trainieren deines Modells verwendet.
Bring die Nachverfolgung deiner Experimente auf ein neues Niveau#
- Verfolge jeden YOLOv5-Trainingslauf im Experimentmanager.
- Verwalte Versionen deiner benutzerdefinierten Trainingsdaten und greife mit dem integrierten ClearML-Tool zur Datenversionierung einfach darauf zu.
- Erziele mit der ClearML-Hyperparameteroptimierung den bestmöglichen mAP.
- Stelle dein frisch trainiertes YOLOv5-Modell mit nur wenigen Befehlen mithilfe von ClearML Serving als API bereit.
Du entscheidest, wie viele dieser Werkzeuge du verwenden möchtest: Du kannst dich auf den Experimentmanager beschränken oder sie alle zu einer beeindruckenden Pipeline verknüpfen.
Einrichtung#
Damit du deine Experimente und Daten nachverfolgen kannst, muss ClearML mit einem Server kommunizieren. Dafür hast du zwei Möglichkeiten: Registriere dich kostenlos beim ClearML Hosted Service oder richte einen eigenen Server ein.
Auch der Server ist Open Source. Wenn du also mit sensiblen Daten arbeitest, ist das kein Problem!
- Installiere das ClearML-Python-Paket:
pip install clearml - Verbinde das ClearML SDK mit dem Server, indem du Zugangsdaten erstellst (gehe oben rechts zu Settings → Workspace → Create new credentials). Führe anschließend den folgenden Befehl aus und folge den Anweisungen:
clearml-init
Jetzt kannst du loslegen.
YOLOv5 mit ClearML trainieren#
Um die Experimentverfolgung von ClearML zu aktivieren, installiere einfach das ClearML-Paket mit pip.
pip install clearmlDamit wird die Integration in das YOLOv5-Trainingsskript aktiviert. Jeder weitere Trainingslauf wird vom ClearML-Experimentmanager erfasst und gespeichert. Wenn du den Wert für project_name oder task_name ändern möchtest, kannst du das in unserem benutzerdefinierten Logger tun: utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cacheDabei werden folgende Informationen erfasst:
- Quellcode + nicht übernommene Änderungen
- Installierte Pakete
- (Hyper-)Parameter
- Modelldateien (verwende --save-period n, um alle n Epochen einen Checkpoint zu speichern)
- Konsolenausgabe
- Skalare (mAP50, mAP50-95, Präzision, Recall, Verluste, Lernraten, ...)
- Allgemeine Informationen wie Maschinendetails, Laufzeit, Erstellungsdatum usw.
- Alle erstellten Diagramme, etwa das Label-Korrelogramm und die Konfusionsmatrix
- Bilder mit Begrenzungsrahmen pro Epoche
- Mosaik pro Epoche
- Validierungsbilder pro Epoche
Jetzt können wir all diese Informationen in der ClearML-Benutzeroberfläche visualisieren, um einen Überblick über den Trainingsfortschritt zu erhalten. Füge der Tabellenansicht benutzerdefinierte Spalten hinzu (z. B. mAP50), damit du ganz einfach nach dem leistungsstärksten Modell sortieren kannst. Oder wähle mehrere Experimente aus und vergleiche sie direkt!
Mit all diesen Informationen können wir noch viel mehr machen, zum Beispiel Hyperparameter optimieren und Aufgaben remote ausführen. Lies also weiter, um zu erfahren, wie das geht!
Versionsverwaltung für Datensätze#
Es ist generell sinnvoll, deine Daten getrennt von deinem Code zu versionieren. So kannst du auch ganz einfach die neueste Version beziehen. Dieses Repository unterstützt die Angabe einer Datensatzversions-ID und stellt sicher, dass die Daten abgerufen werden, falls sie noch nicht vorhanden sind. Außerdem speichert dieser Arbeitsablauf die verwendete Datensatz-ID als Teil der Aufgabenparameter. So weißt du immer genau, welche Daten in welchem Experiment verwendet wurden!
Datensatz vorbereiten#
Das YOLOv5-Repository unterstützt verschiedene Datensätze und verwendet dafür YAML-Dateien mit den entsprechenden Informationen. Standardmäßig werden Datensätze im Ordner ../datasets relativ zum Stammordner des Repositorys gespeichert. 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 folgende Ordnerstruktur:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txtDu kannst aber jeden beliebigen Datensatz verwenden. Du kannst gern deinen eigenen nutzen, solange du diese Ordnerstruktur beibehältst.
Kopiere als Nächstes die entsprechende YAML-Datei in den Stammordner des Datensatzes. Diese YAML-Dateien enthalten die Informationen, die ClearML zur korrekten Verwendung des Datensatzes benötigt. Natürlich kannst du die Datei auch selbst erstellen. Orientiere dich einfach an der Struktur der Beispiel-YAML-Dateien.
Die YAML-Datei benötigt die folgenden Schlüssel: path, train, test, val, nc und names.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # ← HERE!
|_ LICENSE
|_ README.txtDatensatz hochladen#
Um diesen Datensatz als versionierten Datensatz in ClearML zu speichern, wechsle in das Stammverzeichnis des Datensatzes und führe den folgenden Befehl aus:
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .Der Befehl clearml-data sync ist eigentlich eine Kurzform. Du kannst die folgenden Befehle auch nacheinander ausführen:
# Optionally add --parent if you want to base
# this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data closeTraining mit einem ClearML-Datensatz ausführen#
Da du jetzt einen ClearML-Datensatz hast, kannst du damit benutzerdefinierte YOLOv5-Modelle trainieren.
python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cacheHyperparameteroptimierung#
Jetzt, wo wir unsere Experimente und die Datenversion haben, sehen wir uns an, was wir darauf aufbauen können!
Dank der Informationen zum Code, den installierten Paketen und der Umgebung lässt sich das Experiment jetzt vollständig reproduzieren. ClearML ermöglicht es dir sogar, ein Experiment zu klonen und seine Parameter zu ändern. Anschließend können wir es mit den neuen Parametern automatisch erneut ausführen. Genau das macht HPO im Wesentlichen.
Um die Hyperparameteroptimierung lokal auszuführen, haben wir ein fertiges Skript für dich bereitgestellt. Achte darauf, dass mindestens ein Trainingslauf durchgeführt wurde und sich die Aufgabe im ClearML-Experimentmanager befindet. Das Skript klont sie und ändert ihre Hyperparameter.
Du musst im Skript unter utils/loggers/clearml/hpo.py die ID dieser Vorlagenaufgabe eintragen und das Skript anschließend ausführen. Du kannst task.execute_locally() in task.execute() ändern, um die Aufgabe in eine ClearML-Warteschlange einzureihen und stattdessen von einem Remote-Agenten bearbeiten zu lassen.
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.pyRemote-Ausführung (fortgeschritten)#
HPO lokal auszuführen ist sehr praktisch. Aber was, wenn wir unsere Experimente stattdessen auf einem Remote-Rechner ausführen möchten? Vielleicht hast du vor Ort Zugang zu einem sehr leistungsstarken GPU-Rechner oder ein Budget für Cloud-GPUs. Hier kommt der ClearML-Agent ins Spiel.
Hier erfährst du, was der Agent kann:
Kurz gesagt: Jedes vom Experimentmanager erfasste Experiment enthält genügend Informationen, um es auf einem anderen Rechner zu reproduzieren (installierte Pakete, nicht übernommene Änderungen usw.). Genau das macht ein ClearML-Agent: Er überwacht eine Warteschlange auf eingehende Aufgaben. Findet er eine Aufgabe, richtet er die Umgebung erneut ein und führt sie aus. Dabei meldet er weiterhin skalare Werte, Diagramme usw. an den Experimentmanager.
Du kannst jeden Rechner (eine Cloud-VM, einen lokalen GPU-Rechner oder deinen eigenen Laptop) ganz einfach in einen ClearML-Agenten verwandeln, indem du Folgendes ausführst:
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]Klonen, bearbeiten und in die Warteschlange stellen#
Wenn unser Agent läuft, können wir ihm Aufgaben zuweisen. Erinnerst du dich noch an den Abschnitt zu HPO, in dem wir eine Aufgabe klonen und die Hyperparameter bearbeiten konnten? Das geht auch über die Benutzeroberfläche!
- Klone das Experiment, indem du mit der rechten Maustaste darauf klickst.
- Bearbeite die Hyperparameter und lege die gewünschten Werte fest.
- Stelle die Aufgabe in eine beliebige Warteschlange, indem du mit der rechten Maustaste darauf klickst.
Aufgabe remote ausführen#
Jetzt kannst du eine Aufgabe wie oben beschrieben klonen oder einfach dein aktuelles Skript mit task.execute_remotely() markieren. Bei der Ausführung wird es dann in eine Warteschlange gestellt, damit der Agent mit der Arbeit beginnen kann!
Um das YOLOv5-Trainingsskript remote auszuführen, musst du lediglich diese Zeile in das Skript train.py einfügen, nachdem der ClearML-Logger initialisiert wurde:
# ...
# Loggers
data_dict = None
if RANK in {-1, 0}:
loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # Instanz des Loggers
if loggers.clearml:
loggers.clearml.task.execute_remotely(queue="my_queue") # <------ DIESE ZEILE HINZUFÜGENNoch Fragen? Tritt unserer Community bei und stelle deine Frage noch heute!
Verfasst von
Kommentare
Stelle eine Frage, teile deine Ergebnisse oder hilf anderen.










