YOLOv5 mit Comet
Dieser Leitfaden behandelt die Verwendung von YOLOv5 mit Comet, einem leistungsstarken Tool zum Verfolgen, Vergleichen und Optimieren von Machine-Learning-Experimenten.
Über Comet
Comet entwickelt Tools, die Datenwissenschaftlern, Ingenieuren und Teamleitern helfen, Machine-Learning- und Deep-Learning-Modelle zu beschleunigen und zu optimieren.
Verfolgen und visualisieren Sie Modellmetriken in Echtzeit, speichern Sie Ihre Hyperparameter, Datensätze und Modell-Checkpoints und visualisieren Sie Ihre Modellvorhersagen mit Comet Custom Panels! Comet stellt sicher, dass Sie nie die Übersicht über Ihre Arbeit verlieren und erleichtert das Teilen von Ergebnissen und die Zusammenarbeit in Teams jeder Größe!
Loslegen
Comet installieren
pip install comet_ml
Comet-Zugangsdaten konfigurieren
Es gibt zwei Möglichkeiten, Comet mit YOLOv5 zu konfigurieren.
Sie können Ihre Anmeldeinformationen 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 erstellen Sie eine .comet.config
Datei in Ihrem Arbeitsverzeichnis und legen Sie dort Ihre Anmeldeinformationen fest:
Comet-Konfigurationsdatei heruntergeladen
[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.pt
Das ist alles! Comet protokolliert automatisch Ihre Hyperparameter, Befehlszeilenargumente, Trainings- und Validierungsmetriken. Sie können Ihre Durchläufe in der Comet-UI visualisieren und analysieren.
Probieren Sie ein Beispiel aus!
Ein Beispiel für einen abgeschlossenen Durchlauf finden Sie hier.
Oder noch besser, probiere es selbst in diesem Colab Notebook aus:
Automatisch protokollieren
Standardmäßig protokolliert Comet die folgenden Elemente:
Metriken
- Box Loss, Object Loss, Classification Loss für die Trainings- und Validierungsdaten
- mAP_0.5, mAP_0.5:0.95 Metriken für die Validierungsdaten
- Präzision und Recall für die Validierungsdaten
Parameter
- Modell-Hyperparameter
- Alle Parameter, die über die Befehlszeilenoptionen übergeben werden
Visualisierungen
- Konfusionsmatrix der Modellvorhersagen auf den Validierungsdaten
- Diagramme für die PR- und F1-Kurven über alle Klassen hinweg
- Correlogramm der Klassenbezeichnungen
Comet-Protokollierung konfigurieren
Comet kann so konfiguriert werden, dass zusätzliche Daten entweder über Befehlszeilen-Flags, die an das Trainingsskript übergeben werden, oder über Umgebungsvariablen protokolliert werden:
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_LEVEL_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 predictions
Checkpoints mit Comet protokollieren
Das Logging von Modellen zu Comet ist standardmäßig deaktiviert. Um es zu aktivieren, übergeben Sie den save-period
Argument für das Trainingsskript. Dadurch werden die protokollierten Checkpoints basierend auf dem durch angegebenen Intervallwert in Comet gespeichert. save-period
:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--save-period 1
Modellvorhersagen protokollieren
Standardmäßig werden Modellvorhersagen (Bilder, Ground-Truth-Labels und Begrenzungsrahmen) in Comet protokolliert.
Sie können die Häufigkeit der protokollierten Vorhersagen und der zugehörigen Bilder steuern, indem Sie das bbox_interval
Befehlszeilenargument. Vorhersagen können mit Comet visualisiert werden. Objekterkennung Benutzerdefiniertes Panel. Diese Frequenz entspricht jedem N-ten Datenbatch pro Epoche. Im folgenden Beispiel protokollieren wir jeden zweiten Datenbatch für jede Epoche.
Hinweis: Der YOLOv5-Validierungs-Dataloader verwendet standardmäßig eine Batch-Größe von 32. Sie müssen die Protokollierungsfrequenz entsprechend anpassen.
Hier ist ein Beispielprojekt mit Panel
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 2
Steuern der Anzahl der in Comet protokollierten Vorhersagebilder
Bei der Protokollierung von Vorhersagen von YOLOv5 protokolliert Comet die Bilder, die zu jedem Satz von Vorhersagen gehören. Standardmäßig werden maximal 100 Validierungsbilder protokolliert. Sie können diese Zahl mit dem folgenden Wert erhöhen oder verringern: COMET_MAX_IMAGE_UPLOADS
Umgebungsvariable:
env COMET_MAX_IMAGE_UPLOADS=200 python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 1
Protokollierung von Metriken auf Klassenebene
Verwenden Sie den COMET_LOG_PER_CLASS_METRICS
Umgebungsvariable, um mAP, Präzision, Recall, 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.pt
Hochladen eines Datensatzes in Comet-Artefakte
Wenn Sie Ihre Daten mit Comet-Artefaktekönnen Sie dies mit dem upload_dataset
Flag.
Der Datensatz sollte wie in der YOLOv5 Dokumentation. Die Datensatzkonfiguration yaml
Datei muss das gleiche Format haben wie die der coco128.yaml
Datei gespeichert werden.
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--upload_dataset
Sie finden den hochgeladenen Datensatz im Tab "Artefakte" in Ihrem Comet-Workspace:
Sie können die Daten direkt in der Comet-UI in der Vorschau anzeigen:
Artefakte werden versioniert und unterstützen auch das Hinzufügen von Metadaten über den Datensatz. Comet protokolliert automatisch die Metadaten aus Ihrem Datensatz yaml
Datei:
Verwenden eines gespeicherten Artefakts
Wenn Sie ein Dataset von Comet Artifacts verwenden möchten, setzen Sie die Variable path
in Ihrem Datensatz yaml
Datei, um auf die folgende Artifact-Ressourcen-URL zu verweisen:
# Contents of artifact.yaml file
path: "comet://WORKSPACE_NAME>/ARTIFACT_NAME:ARTIFACT_VERSION_OR_ALIAS"
Übergeben Sie diese Datei dann wie folgt an Ihr Trainingsskript:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data artifact.yaml \
--weights yolov5s.pt
Artefakte ermöglichen es Ihnen auch, die Herkunft von Daten zu verfolgen, während sie durch Ihren Experimentier-Workflow fließen. Hier sehen Sie ein Diagramm, das Ihnen alle Experimente zeigt, die Ihr hochgeladenes Dataset verwendet haben:
Wiederaufnahme eines Trainingslaufs
Wenn Ihr Trainingslauf aus irgendeinem Grund unterbrochen wird, z. B. durch eine unterbrochene Internetverbindung, können Sie den Lauf mit dem Befehl fortsetzen resume
Flag und dem Comet Run Path.
Der Run Path hat das folgende Format comet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_ID
.
Dadurch wird der Lauf in den Zustand vor der Unterbrechung zurückversetzt, was die Wiederherstellung des Modells aus einem Checkpoint, die Wiederherstellung aller Hyperparameter und Trainingsargumente sowie das Herunterladen von Comet-Dataset-Artefakten umfasst, falls diese im ursprünglichen Lauf verwendet wurden. Der fortgesetzte Lauf wird weiterhin im bestehenden Experiment in der Comet-UI protokolliert:
python train.py \
--resume "comet://YOUR_RUN_PATH"
Hyperparameter-Suche mit dem Comet Optimizer
YOLOv5 ist auch in den Comet Optimizer integriert, wodurch es einfach ist, Hyperparameter-Sweeps in der Comet-UI zu visualisieren.
Konfigurieren eines Optimizer-Sweeps
Um den Comet Optimizer zu konfigurieren, müssen Sie eine JSON-Datei mit den Informationen über den Sweep erstellen. Eine Beispieldatei wurde in folgendem Verzeichnis bereitgestellt: utils/loggers/comet/optimizer_config.json
:
python utils/loggers/comet/hpo.py \
--comet_optimizer_config "utils/loggers/comet/optimizer_config.json"
Die hpo.py
Skript akzeptiert die gleichen Argumente wie train.py
. Wenn Sie Ihrem Sweep zusätzliche Argumente übergeben möchten, fügen Sie diese 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 1
Visualisierung der Ergebnisse
Comet bietet eine Reihe von Möglichkeiten, die Ergebnisse Ihres Sweeps zu visualisieren. Sehen Sie sich hier ein Projekt mit einem abgeschlossenen Sweep an.