Schulung und Überwachung von Ultralytics YOLOv5 aus der Ferne mit ClearML

21. Oktober 2022
Entdecken Sie unsere Partnerschaft mit ClearML für ein verbessertes Ultrlaytics YOLOv5-Erlebnis mit nahtloser ML-Integration, Experimentverfolgung und mehr.

21. Oktober 2022
Entdecken Sie unsere Partnerschaft mit ClearML für ein verbessertes Ultrlaytics YOLOv5-Erlebnis mit nahtloser ML-Integration, Experimentverfolgung und mehr.
Bei Ultralytics gehen wir kommerzielle Partnerschaften mit anderen Start-ups ein, um 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 Sie Zeit sparen können.
Mit dem Ziel, die Einführung von ML zu beschleunigen, ermöglicht ClearML die nahtlose Integration von ML in jedes Software- und Hardware-Produkt auf dem Markt.
Diese Integration macht es noch einfacher, ein YOLOv5-Modell zu trainieren und den ClearML-Experiment-Manager zu verwenden, um es automatisch zu verfolgen. Sie können ganz einfach die Versions-ID eines ClearML-Datensatzes als Dateneingabe angeben und dieser wird automatisch zum Trainieren Ihres Modells verwendet.
Es bleibt Ihnen überlassen, wie viele dieser Tools Sie verwenden möchten. Sie können sich auf den Experimentiermanager beschränken oder sie alle zu einer beeindruckenden Pipeline zusammenfügen.
Um den Überblick über Ihre Experimente und Daten zu behalten, muss ClearML mit einem Server kommunizieren. Hierfür haben Sie zwei Möglichkeiten: Entweder Sie melden sich kostenlos beim ClearML Hosted Service an oder Sie richten Ihren eigenen Server ein, siehe hier.
Sogar der Server ist quelloffen, wenn Sie also mit sensiblen Daten zu tun haben, ist das kein Problem!
Und voila! Sie sind bereit, loszulegen...
Um die ClearML-Experimentverfolgung zu aktivieren, installieren Sie einfach das ClearML-Pip-Paket.
pip install clearml
Dies ermöglicht die Integration mit dem YOLOv5 Trainingsskript. Jeder Trainingslauf wird von nun an vom ClearML-Experiment-Manager erfasst und gespeichert. Wenn Sie den Projekt- oder Aufgabennamen ändern möchten, gehen Sie zu unserem benutzerdefinierten Logger, wo Sie ihn ändern können: utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache
Damit werden Sie erfasst:
Gar nicht so schlecht! Jetzt können wir all diese Informationen in der ClearML-Benutzeroberfläche visualisieren, um einen Überblick über unseren Trainingsfortschritt zu erhalten. Fügen Sie der Tabellenansicht benutzerdefinierte Spalten hinzu (wie z. B. mAP_0.5), damit Sie einfach nach dem leistungsstärksten Modell sortieren können. Oder wählen Sie mehrere Experimente aus und vergleichen Sie sie direkt!
Es gibt sogar noch mehr, was wir mit all diesen Informationen tun können, wie z.B. Hyperparameter-Optimierung und Remote-Ausführung, also lesen Sie weiter, um zu erfahren, wie!
Die Versionierung Ihrer Daten getrennt von Ihrem Code ist im Allgemeinen eine gute Idee und macht es einfach, auch die neueste Version zu erhalten. Dieses Repository unterstützt die Angabe einer Datensatzversions-ID 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, so dass Sie immer sicher wissen, welche Daten in welchem Experiment verwendet wurden!
Das YOLOv5-Repository unterstützt eine Reihe von verschiedenen Datensätzen durch die Verwendung von YAML-Dateien, die deren Informationen enthalten. Standardmäßig werden die Datensätze in den Ordner ../datasets in Bezug auf den Stammordner des Repositorys heruntergeladen. Wenn Sie also den coco128-Datensatz über den Link in der YAML-Datei oder mit den von yolov5 bereitgestellten Skripten heruntergeladen haben, erhalten Sie diese Ordnerstruktur:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
Dies kann aber jeder beliebige Datensatz sein. Sie können gerne Ihre eigenen verwenden, solange Sie sich an diese Ordnerstruktur halten.
Als Nächstes wird die entsprechende YAML-Datei ⚠️copy in das Stammverzeichnis des Datasets folder⚠️ eingefügt. Diese YAML-Dateien enthalten die Informationen, die ClearML zur korrekten Nutzung des Datasets benötigt. Sie können diese natürlich auch selbst erstellen, folgen Sie einfach der Struktur der Beispiel-YAMLs.
Im Wesentlichen benötigen 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, rufen Sie den Stammordner des Datensatzes auf und führen den folgenden Befehl aus:
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .
Der Befehl clearml-data sync ist eigentlich ein Kurzbefehl. Sie können diese Befehle auch nacheinander ausführen:
# Fügen Sie optional --parent hinzu, wenn Sie 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-data schließen
Jetzt, wo Sie einen ClearML-Datensatz haben, können Sie ihn ganz einfach zum Trainieren von benutzerdefinierten YOLOv5-Modellen verwenden.
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!
Anhand der Codeinformationen, der installierten Pakete und der Umgebungsdetails ist das Experiment selbst nun vollständig reproduzierbar. Mit ClearML können Sie 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 tut!
Um die Hyperparameter-Optimierung lokal durchzuführen, haben wir ein vorgefertigtes Skript für Sie bereitgestellt. Stellen Sie einfach sicher, dass eine Trainingsaufgabe mindestens einmal ausgeführt wurde, damit sie sich im ClearML-Experiment-Manager befindet. Wir werden sie im Wesentlichen klonen und ihre Hyperparameter ändern.
Sie müssen die ID dieser Vorlagenaufgabe in das Skript unter utils/loggers/clearml/hpo.py eintragen und es dann einfach ausführen. Sie können 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, installieren Sie es zuerst, andernfalls können Sie 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 haben Sie Zugang zu einer sehr leistungsstarken GPU-Maschine vor Ort oder Sie verfügen über ein gewisses Budget für die Nutzung von Cloud-GPUs. An dieser Stelle kommt der ClearML-Agent ins Spiel.
Hier erfahren Sie, was der Agent tun kann:
Kurz gesagt: Jedes vom Experiment-Manager verfolgte Experiment enthält genügend Informationen, um es auf einem anderen Rechner zu reproduzieren (installierte Pakete, nicht übertragene Änderungen usw.). Ein ClearML-Agent macht also genau das: Er wartet in einer Warteschlange auf eingehende Aufgaben, und wenn er eine findet, erstellt er die Umgebung neu und führt sie aus, während er weiterhin Skalare, Diagramme usw. an den Experiment-Manager meldet.
Sie können jeden beliebigen Rechner (eine Cloud-VM, einen lokalen GPU-Rechner, Ihren eigenen Laptop ... ) durch einfache Ausführung in einen ClearML-Agenten verwandeln:
clearml-agent daemon --queue [--docker]
Wenn unser Agent läuft, können wir ihm etwas Arbeit abnehmen. Erinnern Sie sich aus dem HPO-Abschnitt, dass wir eine Aufgabe klonen und die Hyperparameter bearbeiten können? Das können wir auch über die Schnittstelle tun!
🪄 Klonen Sie das Experiment, indem Sie es mit der rechten Maustaste anklicken
🎯 Ändern Sie die Hyperparameter so, wie Sie sie haben möchten
⏳ Stellen Sie die Aufgabe in eine der Warteschlangen ein, indem Sie sie mit der rechten Maustaste anklicken
Jetzt können Sie eine Aufgabe klonen, wie oben beschrieben, oder einfach Ihr aktuelles Skript markieren, indem Sie task.execute_remotely() hinzufügen, und bei der Ausführung wird es in eine Warteschlange gestellt, damit der Agent damit arbeiten kann!
Um das YOLOv5-Trainingsskript aus der Ferne auszuführen, müssen Sie nur diese Zeile in das training.py-Skript einfügen, nachdem der ClearML-Logger 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 das Trainingsskript nach dieser Änderung ausgeführt wird, wird Python das Skript bis zu dieser Zeile ausführen, danach wird es den Code verpacken und stattdessen an die Warteschlange senden!
ClearML verfügt auch über automatische Skalierer! Dieses Tool startet automatisch neue Remote-Maschinen in der Cloud Ihrer Wahl (AWS, GCP, Azure) und verwandelt sie in ClearML-Agenten für Sie, sobald Experimente in der Warteschlange entdeckt werden. Sobald die Aufgaben abgearbeitet sind, schaltet der Auto-Scaler die Remote-Maschinen automatisch ab und Sie hören auf zu zahlen! Sehen Sie sich unten das Video zu den ersten Schritten des Auto-Scalers an.
Haben Sie Fragen? Treten Sie unserer Gemeinschaft bei und stellen Sie Ihre Frage noch heute!