Yolo Vision Shenzhen
Shenzhen
Jetzt beitreten

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

Ultralytics

4 Min. Lesezeit

21. Oktober 2022

Entdecken Sie unsere Partnerschaft mit ClearML für ein verbessertes Ultralytics YOLOv5 mit nahtloser ML-Integration, Experiment-Tracking 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, eine YOLOv5 Modell zu trainieren und den ClearML zu verwenden, um es automatisch track . Sie können ganz einfach die Versions-ID eines ClearML als Dateneingabe angeben, der dann automatisch für das Training Ihres Modells verwendet wird.

Bringen Sie Ihr Experiment-Tracking auf die nächste Stufe

  • Verfolgen Sie jeden YOLOv5 im Experiment-Manager.
  • Versionieren Sie Ihre benutzerdefinierten Schulungsdaten und greifen Sie einfach darauf zu - mit dem integrierten ClearML Data Versioning Tool.
  • Erzielen Sie mit ClearML Hyperparameter-Optimierung die beste mAP .
  • Verwandeln Sie Ihr neu trainiertes YOLOv5 mit nur wenigen Befehlen in eine API mit ClearML Serving.

Es liegt an Ihnen, wie viele dieser Tools Sie verwenden möchten. Sie können sich an den Experiment Manager halten oder sie alle zu einer beeindruckenden Pipeline zusammenfügen.

Dinge einrichten

Um den track ü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 Open-Source, wenn Sie also mit sensiblen Daten umgehen, ist das kein Problem!

  1. Installieren Sie daspython clearml : pip install clearml
  2. Verbinden Sie das ClearML SDK mit dem Server, indem Sie Anmeldeinformationen erstellen (gehen Sie oben rechts zu Einstellungen → Arbeitsbereich → Neue Anmeldeinformationen erstellen), führen Sie dann den folgenden Befehl aus und folgen Sie den Anweisungen: clearml

Et voilà! Sie sind startklar...

Schulung von YOLOv5 mit ClearML

Um die ClearML zu aktivieren, installieren Sie einfach das ClearML .

pip install clearml

Dies ermöglicht die Integration mit dem YOLOv5 Trainingsskript. Jeder Trainingslauf wird von nun an vom ClearML erfasst und gespeichert. Wenn Sie den Projekt- oder Aufgabennamen ändern möchten, gehen Sie zu unserem benutzerdefinierten Logger, wo Sie ihn ändern können: clearml.py

python train.py --img 640 --batch 16 --epochs 3 --data coco128yaml --weights yolov5s.pt --cache

Dies erfasst:

  • Quellcode + nicht übertragene Änderungen
  • Installierte Pakete
  • (Hyper-)Parameter
  • Modelldateien (verwenden Sie --save-period n, um alle n Epochen einen Checkpoint zu speichern)
  • Konsolenausgabe
  • SkalenmAP.5, mAP.5:0.95, Präzision, Recall, Verluste, Lernraten, ...)
  • Allgemeine Informationen wie Maschinendetails, Laufzeit, Erstellungsdatum usw.
  • Alle erstellten Diagramme wie Label-Correlogramm und Confusion Matrix
  • Bilder mit Bounding Boxes pro Epoche
  • Mosaik pro Epoche
  • Validierungsbilder pro Epoche

Gar nicht so schlecht! Jetzt können wir all diese Informationen in der ClearML visualisieren, um einen Überblick über unseren Trainingsfortschritt zu erhalten. Fügen Sie der Tabellenansicht benutzerdefinierte Spalten hinzu (wie z. B. mAP.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 noch mehr, was wir mit all diesen Informationen tun können, wie z. B. Hyperparameter-Optimierung und Remote-Ausführung. Lesen Sie also weiter, um zu erfahren, wie!

Versionsverwaltung von Datensätzen

Es ist im Allgemeinen eine gute Idee, Ihre Daten getrennt von Ihrem Code zu versionieren, und es erleichtert auch das Abrufen der neuesten Version. Dieses Repository unterstützt die Angabe einer Datensatz-Versions-ID und stellt sicher, dass die Daten abgerufen werden, falls sie noch nicht vorhanden sind. Darüber hinaus speichert dieser Workflow auch die verwendete Datensatz-ID als Teil der Aufgabenparameter, sodass Sie immer sicher wissen, welche Daten in welchem Experiment verwendet wurden!

Bereiten Sie Ihren Datensatz vor

Das YOLOv5 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 jedoch 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
|_ coco128yaml # ← HIER!
|_ LICENSE
|_ README.txt

Laden Sie Ihren Datensatz hoch

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 sync --project YOLOv5 --name coco128 --folder .


Der Befehl clearml sync ist eigentlich ein Kurzbefehl. Sie können diese Befehle auch nacheinander ausführen:

# Optional --parent hinzufügen, wenn Sie es basieren möchten

# diese Version auf einer anderen Datensatzversion, sodass keine doppelten Dateien hochgeladen werden!

clearml create --name coco128 --project YOLOv5

clearml add --files .

clearml schließen

Training mit einem ClearML durchführen

Jetzt, wo Sie einen ClearML haben, können Sie ihn ganz einfach zum Trainieren von benutzerdefinierten YOLOv5 verwenden.

python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cache

Hyperparameter-Optimierung

Nachdem wir nun unsere Experimente und Datenversion haben, ist es an der Zeit, einen Blick darauf zu werfen, worauf wir 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 befindet. Wir werden sie im Wesentlichen klonen und ihre Hyperparameter ändern.

Sie müssen die ID dieser Vorlagenaufgabe in das Skript unter clearml.py eintragen und es dann einfach ausführen. Sie können task.execute_locally() in task.execute() ändern, um die Aufgabe in eine ClearML 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 clearml.py

Remote Execution (Erweitert)

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 vor Ort oder Sie verfügen über ein gewisses Budget für die Nutzung von Cloud-GPUs. An dieser Stelle kommt der ClearML ins Spiel.

Sehen Sie hier, was der Agent leisten 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 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 , Ihren eigenen Laptop) durch einfache Ausführung in einen ClearML verwandeln:

clearml daemon --queue [--docker]

Klonen, Bearbeiten und in die Warteschlange stellen

Wenn unser Agent läuft, können wir ihm Arbeit geben. 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 mit der rechten Maustaste darauf klicken

🎯 Bearbeiten Sie die Hyperparameter nach Ihren Wünschen

⏳ Die Aufgabe durch Rechtsklick in eine beliebige Warteschlange einreihen

Eine Aufgabe remote ausführen

Jetzt können Sie eine Aufgabe wie oben beschrieben klonen oder einfach Ihr aktuelles Skript mit task.execute_remotely() markieren. Bei der Ausführung wird es in eine Warteschlange gestellt, damit der Agent mit der Arbeit beginnen kann!

Um das YOLOv5 aus der Ferne auszuführen, müssen Sie nur diese Zeile in das training.py-Skript einfügen, nachdem der 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 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!

Automatische Skalierung von Worker-Prozessen

ClearML verfügt auch über automatische Skalierer! Dieses Tool richtet automatisch neue Remote-Maschinen in der Cloud Ihrer Wahl ein (AWS, GCP, Azure) und verwandelt sie in ClearML für Sie, sobald Experimente in der Warteschlange erkannt 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 Community bei und stellen Sie noch heute Ihre Frage!

Lasst uns gemeinsam die Zukunft
der KI gestalten!

Beginnen Sie Ihre Reise mit der Zukunft des maschinellen Lernens

Kostenlos starten