
YOLOv5 mit Comet#
In dieser Anleitung erfährst du, wie du YOLOv5 mit Comet verwendest – einem leistungsstarken Tool zum Nachverfolgen, Vergleichen und Optimieren von Machine-Learning-Experimenten.
Über Comet#
Comet entwickelt Tools, mit denen Data Scientists, Ingenieure und Teamleitungen Machine-Learning- und Deep-Learning-Modelle schneller entwickeln und optimieren können.
Verfolge und visualisiere Modellmetriken in Echtzeit, speichere deine Hyperparameter, Datensätze und Modell-Checkpoints und visualisiere deine Modellvorhersagen mit den benutzerdefinierten Comet-Panels! Comet sorgt dafür, dass du den Überblick über deine Arbeit behältst, und erleichtert es dir, Ergebnisse zu teilen und mit Teams jeder Größe zusammenzuarbeiten!
Erste Schritte#
Comet installieren#
pip install comet_mlComet-Zugangsdaten konfigurieren#
Du kannst Comet auf zwei Arten mit YOLOv5 konfigurieren.
Du kannst deine Zugangsdaten entweder über Umgebungsvariablen festlegen:
Umgebungsvariablen
export COMET_API_KEY=YOUR_API_KEY
export COMET_PROJECT_NAME=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'Oder erstelle in deinem Arbeitsverzeichnis eine .comet.config-Datei und trage dort deine Zugangsdaten ein:
Comet-Konfigurationsdatei
[comet]
api_key=YOUR_API_KEY
project_name=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'Trainingsskript ausführen#
# Train YOLOv5s on COCO128 for 5 epochs
python train.py --img 640 --batch 16 --epochs 5 --data coco128.yaml --weights yolov5s.ptDas war's! Comet protokolliert automatisch deine Hyperparameter, Befehlszeilenargumente sowie Trainings- und Validierungsmetriken. In der Comet-Benutzeroberfläche kannst du deine Trainingsläufe visualisieren und analysieren.

Probiere es aus!#
Sieh dir hier einen abgeschlossenen Trainingslauf an.
Noch besser: Probiere es selbst in diesem Colab-Notebook aus:
Automatische Protokollierung#
Comet protokolliert standardmäßig die folgenden Elemente:
Metriken#
- Box-Verlust, Objektverlust und Klassifikationsverlust für die Trainings- und Validierungsdaten
- mAP_0.5- und mAP_0.5:0.95-Metriken für die Validierungsdaten
- Präzision und Trefferquote für die Validierungsdaten
Parameter#
- Modellhyperparameter
- Alle Parameter, die über Befehlszeilenoptionen übergeben werden
Visualisierungen#
- Konfusionsmatrix der Modellvorhersagen für die Validierungsdaten
- Diagramme der PR- und F1-Kurven für alle Klassen
- Korrelogramm der Klassenbezeichnungen
Comet-Protokollierung konfigurieren#
Du kannst Comet so konfigurieren, dass zusätzliche Daten protokolliert werden. Dazu kannst du Befehlszeilenoptionen an das Trainingsskript übergeben oder Umgebungsvariablen verwenden:
export COMET_MODE=online # Set whether to run Comet in 'online' or 'offline' mode. Defaults to online
export COMET_MODEL_NAME="yolov5" # Set the name for the saved model. Defaults to yolov5
export COMET_LOG_CONFUSION_MATRIX=false # Set to disable logging a Comet Confusion Matrix. Defaults to true
export COMET_MAX_IMAGE_UPLOADS=30 # Controls how many total image predictions to log to Comet. Defaults to 100.
export COMET_LOG_PER_CLASS_METRICS=true # Set to log evaluation metrics for each detected class at the end of training. Defaults to false
export COMET_DEFAULT_CHECKPOINT_FILENAME="last.pt" # Set this if you would like to resume training from a different checkpoint. Defaults to 'last.pt'
export COMET_LOG_BATCH_METRICS=true # Set this if you would like to log training metrics at the batch level. Defaults to false.
export COMET_LOG_PREDICTIONS=true # Set this to false to disable logging model predictionsCheckpoints mit Comet protokollieren#
Die Protokollierung von Modellen in Comet ist standardmäßig deaktiviert. Aktiviere sie, indem du dem Trainingsskript das Argument save-period übergibst. Dadurch werden Checkpoints entsprechend dem mit save-period angegebenen Intervall in Comet gespeichert:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--save-period 1Modellvorhersagen protokollieren#
Standardmäßig werden Modellvorhersagen (Bilder, Referenzlabels und Begrenzungsrahmen) in Comet protokolliert.
Mit dem Befehlszeilenargument bbox_interval kannst du festlegen, wie oft Vorhersagen und die zugehörigen Bilder protokolliert werden. Die Vorhersagen lassen sich im benutzerdefinierten Panel für Objekterkennung von Comet visualisieren. Das Intervall gibt an, nach wie vielen Batches pro Epoche protokolliert wird. Im folgenden Beispiel protokollieren wir jeden zweiten Batch jeder Epoche.
Hinweis: Der YOLOv5-Validierungsdatenlader verwendet die doppelte Batchgröße des Trainings (32 für --batch 16). Daher musst du das Protokollierungsintervall entsprechend festlegen.
Hier findest du ein Beispielprojekt, das das Panel verwendet.
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 2Anzahl der in Comet protokollierten Vorhersagebilder festlegen#
Wenn du Vorhersagen aus YOLOv5 protokollierst, protokolliert Comet auch die Bilder zu den jeweiligen Vorhersagen. Standardmäßig werden höchstens 100 Validierungsbilder protokolliert. Mit der Umgebungsvariablen COMET_MAX_IMAGE_UPLOADS kannst du diese Anzahl erhöhen oder verringern:
env COMET_MAX_IMAGE_UPLOADS=200 python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 1Metriken für einzelne Klassen protokollieren#
Verwende die Umgebungsvariable COMET_LOG_PER_CLASS_METRICS, um mAP, Präzision, Trefferquote und F1 für jede Klasse zu protokollieren:
env COMET_LOG_PER_CLASS_METRICS=true python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.ptDatensatz in Comet Artifacts hochladen#
Wenn du deine Daten mit Comet Artifacts speichern möchtest, kannst du dafür das Flag upload_dataset verwenden.
Der Datensatz sollte so organisiert sein, wie in der YOLOv5-Dokumentation beschrieben. Die Konfigurationsdatei yaml des Datensatzes muss dasselbe Format wie die Datei coco128.yaml haben.
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--upload_datasetDen hochgeladenen Datensatz findest du im Tab „Artifacts“ deines Comet-Arbeitsbereichs:

Du kannst dir die Daten direkt in der Comet-Benutzeroberfläche ansehen:

Artifacts werden versioniert und unterstützen außerdem das Hinzufügen von Metadaten zum Datensatz. Comet protokolliert automatisch die Metadaten aus deiner Datensatzdatei yaml:

Gespeichertes Artifact verwenden#
Wenn du einen Datensatz aus Comet Artifacts verwenden möchtest, lege in deiner Datensatzdatei yaml die Variable path so fest, dass sie auf die folgende Artifact-Ressourcen-URL verweist:
# Contents of artifact.yaml file
path: "comet://WORKSPACE_NAME/ARTIFACT_NAME:ARTIFACT_VERSION_OR_ALIAS"Übergib diese Datei anschließend wie folgt an dein Trainingsskript:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data artifact.yaml \
--weights yolov5s.ptMit Artifacts kannst du außerdem die Herkunft deiner Daten verfolgen, während sie deinen Experimentierablauf durchlaufen. Hier siehst du ein Diagramm mit allen Experimenten, in denen dein hochgeladener Datensatz verwendet wurde:

Einen Trainingslauf fortsetzen#
Wenn dein Trainingslauf aus irgendeinem Grund unterbrochen wird, z. B. durch eine unterbrochene Internetverbindung, kannst du den Lauf mit dem Flag resume und dem Comet Run Path fortsetzen.
Der Run Path hat das folgende Format: comet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_ID.
Dadurch wird der Lauf auf den Zustand vor der Unterbrechung zurückgesetzt. Dazu gehören das Wiederherstellen des Modells aus einem Checkpoint, das Wiederherstellen aller Hyperparameter und Trainingsargumente sowie das Herunterladen von Comet-Dataset-Artefakten, sofern diese im ursprünglichen Lauf verwendet wurden. Der fortgesetzte Lauf protokolliert weiterhin im bestehenden Experiment in der Comet-Benutzeroberfläche:
python train.py \
--resume "comet://YOUR_RUN_PATH"Hyperparametersuche mit dem Comet Optimizer#
YOLOv5 ist auch in Comet's Optimizer integriert, sodass sich Hyperparameter-Sweeps ganz einfach in der Comet-Benutzeroberfläche visualisieren lassen.
Einen Optimizer-Sweep konfigurieren#
Um den Comet Optimizer zu konfigurieren, musst du eine JSON-Datei mit den Informationen zum Sweep erstellen. Eine Beispieldatei findest du unter utils/loggers/comet/optimizer_config.json:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json"Das Skript hpo.py akzeptiert dieselben Argumente wie train.py. Wenn du deinem Sweep weitere Argumente übergeben möchtest, füge sie einfach nach dem Skript hinzu:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json" \
--save-period 1 \
--bbox_interval 1Ergebnisse visualisieren#
Comet bietet verschiedene Möglichkeiten, die Ergebnisse deines Sweeps zu visualisieren. Sieh dir hier ein Projekt mit einem abgeschlossenen Sweep an.

Häufig gestellte Fragen#
Erstelle ein kostenloses Konto auf comet.com, öffne deine Kontoeinstellungen und kopiere den API-Schlüssel. Exportiere ihn als
COMET_API_KEYoder speichere ihn in einer.comet.config-Datei nebentrain.py.Ja. Setze
COMET_MODE=offline, damit das Experiment in einem lokalen Archiv gespeichert wird, und lade es später mitcomet upload path/to/archive.ziphoch.Die Protokollierung von Checkpoints ist standardmäßig deaktiviert. Übergib
--save-period 1(oder ein anderes Intervall) antrain.py, damit jeder gespeicherte Checkpoint in das Experiment hochgeladen wird.Kopiere den Run Path aus der Comet-Benutzeroberfläche und starte das Training mit
python train.py --resume "comet://WORKSPACE/PROJECT/EXPERIMENT_ID". YOLOv5 stellt den Checkpoint, die Hyperparameter und alle Comet-Dataset-Artefakte wieder her und protokolliert weiterhin im selben Experiment.