Callbacks
Das Ultralytics Framework unterstützt Callbacks, die als Einstiegspunkte in strategischen Phasen während des Ablaufs dienen. train
, val
, export
und predict
Modi. Jeder Callback akzeptiert einen Trainer
, Validator
, oder Predictor
Objekt, abhängig vom Operationstyp. Alle Eigenschaften dieser Objekte sind im Abschnitt Referenz der Dokumentation.
Ansehen: Wie man Ultralytics Callbacks verwendet | Predict, Train, Validate und Export Callbacks | Ultralytics YOLO 🚀
Beispiele
Zusätzliche Informationen mit der Vorhersage zurückgeben
In diesem Beispiel zeigen wir, wie man den Original-Frame zusammen mit jedem Ergebnisobjekt zurückgibt:
from ultralytics import YOLO
def on_predict_batch_end(predictor):
"""Combine prediction results with corresponding frames."""
_, image, _, _ = predictor.batch
# Ensure that image is a list
image = image if isinstance(image, list) else [image]
# Combine the prediction results with the corresponding frames
predictor.results = zip(predictor.results, image)
# Create a YOLO model instance
model = YOLO("yolo11n.pt")
# Add the custom callback to the model
model.add_callback("on_predict_batch_end", on_predict_batch_end)
# Iterate through the results and frames
for result, frame in model.predict(): # or model.track()
pass
Zugriff auf Modellmetriken mit dem on_model_save
Callback
Dieses Beispiel zeigt, wie Trainingsdetails wie der best_fitness-Score, der total_loss und andere Metriken abgerufen werden können, nachdem ein Checkpoint mit dem on_model_save
Callback.
from ultralytics import YOLO
# Load a YOLO model
model = YOLO("yolo11n.pt")
def print_checkpoint_metrics(trainer):
"""Print trainer metrics and loss details after each checkpoint is saved."""
print(
f"Model details\n"
f"Best fitness: {trainer.best_fitness}, "
f"Loss names: {trainer.loss_names}, " # List of loss names
f"Metrics: {trainer.metrics}, "
f"Total loss: {trainer.tloss}" # Total loss value
)
if __name__ == "__main__":
# Add on_model_save callback.
model.add_callback("on_model_save", print_checkpoint_metrics)
# Run model training on custom dataset.
results = model.train(data="coco8.yaml", epochs=3)
Alle Callbacks
Nachfolgend sind alle unterstützten Callbacks aufgeführt. Weitere Informationen finden Sie im Quellcode der Callbacks.
Trainer-Callbacks
Callback | Beschreibung |
---|---|
on_pretrain_routine_start |
Wird zu Beginn der Pre-Training-Routine ausgelöst. |
on_pretrain_routine_end |
Wird am Ende der Pre-Training-Routine ausgelöst. |
on_train_start |
Wird ausgelöst, wenn das Training beginnt. |
on_train_epoch_start |
Wird zu Beginn jeder Training-Epoche ausgelöst. |
on_train_batch_start |
Wird zu Beginn jedes Training-Batch ausgelöst. |
optimizer_step |
Wird während des Optimierungsschritts ausgelöst. |
on_before_zero_grad |
Wird ausgelöst, bevor die Gradienten auf Null gesetzt werden. |
on_train_batch_end |
Wird am Ende jedes Training-Batch ausgelöst. |
on_train_epoch_end |
Wird am Ende jeder Trainingsepoche ausgelöst. |
on_fit_epoch_end |
Wird am Ende jeder Fit-Epoche ausgelöst. |
on_model_save |
Wird ausgelöst, wenn das Modell gespeichert wird. |
on_train_end |
Wird ausgelöst, wenn der Trainingsprozess endet. |
on_params_update |
Wird ausgelöst, wenn Modellparameter aktualisiert werden. |
teardown |
Wird ausgelöst, wenn der Trainingsprozess bereinigt wird. |
Validator-Callbacks
Callback | Beschreibung |
---|---|
on_val_start |
Wird ausgelöst, wenn die Validierung startet. |
on_val_batch_start |
Wird zu Beginn jedes Validierungs-Batch ausgelöst. |
on_val_batch_end |
Wird am Ende jedes Validierungs-Batch ausgelöst. |
on_val_end |
Wird ausgelöst, wenn die Validierung endet. |
Predictor-Callbacks
Callback | Beschreibung |
---|---|
on_predict_start |
Wird ausgelöst, wenn der Prediction-Prozess startet. |
on_predict_batch_start |
Wird zu Beginn jedes Prediction-Batch ausgelöst. |
on_predict_postprocess_end |
Wird am Ende der Prediction-Nachbearbeitung ausgelöst. |
on_predict_batch_end |
Wird am Ende jedes Prediction-Batch ausgelöst. |
on_predict_end |
Wird ausgelöst, wenn der Prediction-Prozess endet. |
Exporter-Callbacks
Callback | Beschreibung |
---|---|
on_export_start |
Wird ausgelöst, wenn der Exportvorgang startet. |
on_export_end |
Wird ausgelöst, wenn der Exportvorgang endet. |
FAQ
Was sind Ultralytics-Callbacks und wie kann ich sie verwenden?
Ultralytics-Callbacks sind spezielle Einstiegspunkte, die während wichtiger Phasen von Modelloperationen wie Training, Validierung, Export und Vorhersage ausgelöst werden. Diese Callbacks ermöglichen benutzerdefinierte Funktionen an bestimmten Punkten im Prozess und ermöglichen so Erweiterungen und Modifikationen des Workflows. Jeder Callback akzeptiert ein Trainer
, Validator
, oder Predictor
Objekt, abhängig von der Art der Operation. Detaillierte Eigenschaften dieser Objekte finden Sie im Abschnitt Referenz.
Um einen Callback zu verwenden, definieren Sie eine Funktion und fügen Sie sie dem Modell hinzu, indem Sie die folgende Funktion verwenden: model.add_callback()
Methode zurückgibt. Hier ist ein Beispiel für die Rückgabe zusätzlicher Informationen während der Vorhersage:
from ultralytics import YOLO
def on_predict_batch_end(predictor):
"""Handle prediction batch end by combining results with corresponding frames; modifies predictor results."""
_, image, _, _ = predictor.batch
image = image if isinstance(image, list) else [image]
predictor.results = zip(predictor.results, image)
model = YOLO("yolo11n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
pass
Wie kann ich die Ultralytics-Trainingsroutine mithilfe von Callbacks anpassen?
Passen Sie Ihre Ultralytics-Trainingsroutine an, indem Sie in bestimmten Phasen des Trainingsprozesses Logik einfügen. Ultralytics YOLO bietet eine Vielzahl von Trainings-Callbacks, wie z. B. on_train_start
, on_train_end
und on_train_batch_end
, mit denen Sie benutzerdefinierte Metriken, Verarbeitung oder Protokollierung hinzufügen können.
Hier erfahren Sie, wie Sie BatchNorm-Statistiken einfrieren, wenn Sie Ebenen mit Callbacks einfrieren:
from ultralytics import YOLO
# Add a callback to put the frozen layers in eval mode to prevent BN values from changing
def put_in_eval_mode(trainer):
n_layers = trainer.args.freeze
if not isinstance(n_layers, int):
return
for i, (name, module) in enumerate(trainer.model.named_modules()):
if name.endswith("bn") and int(name.split(".")[1]) < n_layers:
module.eval()
module.track_running_stats = False
model = YOLO("yolo11n.pt")
model.add_callback("on_train_epoch_start", put_in_eval_mode)
model.train(data="coco.yaml", epochs=10)
Weitere Informationen zur effektiven Nutzung von Training-Callbacks finden Sie im Training Guide.
Warum sollte ich Callbacks während der Validierung in Ultralytics YOLO verwenden?
Die Verwendung von Callbacks während der Validierung in Ultralytics YOLO verbessert die Modellbewertung, indem sie eine benutzerdefinierte Verarbeitung, Protokollierung oder Metrikenberechnung ermöglicht. Callbacks wie on_val_start
, on_val_batch_end
und on_val_end
bieten Einstiegspunkte, um benutzerdefinierte Logik einzufügen und detaillierte und umfassende Validierungsprozesse zu gewährleisten.
Um beispielsweise alle Validierungs-Batches anstelle von nur den ersten drei zu plotten:
import inspect
from ultralytics import YOLO
def plot_samples(validator):
frame = inspect.currentframe().f_back.f_back
v = frame.f_locals
validator.plot_val_samples(v["batch"], v["batch_i"])
validator.plot_predictions(v["batch"], v["preds"], v["batch_i"])
model = YOLO("yolo11n.pt")
model.add_callback("on_val_batch_end", plot_samples)
model.val(data="coco.yaml")
Weitere Einblicke zur Integration von Callbacks in Ihren Validierungsprozess finden Sie im Validierungsleitfaden.
Wie füge ich einen benutzerdefinierten Callback für den Vorhersagemodus in Ultralytics YOLO hinzu?
Um einen benutzerdefinierten Callback für den Vorhersagemodus in Ultralytics YOLO anzuhängen, definieren Sie eine Callback-Funktion und registrieren Sie diese beim Vorhersageprozess. Häufige Vorhersage-Callbacks sind on_predict_start
, on_predict_batch_end
und on_predict_end
. Diese ermöglichen die Modifizierung von Vorhersageergebnissen und die Integration zusätzlicher Funktionalitäten, wie z. B. Datenprotokollierung oder Ergebnistransformation.
Hier ist ein Beispiel, bei dem ein benutzerdefinierter Callback Vorhersagen speichert, je nachdem, ob ein Objekt einer bestimmten Klasse vorhanden ist:
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
class_id = 2
def save_on_object(predictor):
r = predictor.results[0]
if class_id in r.boxes.cls:
predictor.args.save = True
else:
predictor.args.save = False
model.add_callback("on_predict_postprocess_end", save_on_object)
results = model("pedestrians.mp4", stream=True, save=True)
for results in results:
pass
Für eine umfassendere Nutzung lesen Sie den Vorhersage-Leitfaden, der detaillierte Anweisungen und zusätzliche Anpassungsoptionen enthält.
Was sind einige praktische Beispiele für die Verwendung von Callbacks in Ultralytics YOLO?
Ultralytics YOLO unterstützt verschiedene praktische Implementierungen von Callbacks, um verschiedene Phasen wie Training, Validierung und Vorhersage zu verbessern und anzupassen. Einige praktische Beispiele sind:
- Protokollierung benutzerdefinierter Metriken: Protokollieren Sie zusätzliche Metriken in verschiedenen Phasen, z. B. am Ende des Trainings oder der Validierung Epochen.
- Datenerweiterung: Implementieren Sie benutzerdefinierte Datentransformationen oder -erweiterungen während der Vorhersage- oder Trainings-Batches.
- Zwischenergebnisse: Speichern Sie Zwischenergebnisse, wie z. B. Vorhersagen oder Frames, zur weiteren Analyse oder Visualisierung.
Beispiel: Kombinieren von Frames mit Vorhersageergebnissen während der Vorhersage mit on_predict_batch_end
:
from ultralytics import YOLO
def on_predict_batch_end(predictor):
"""Combine prediction results with frames."""
_, image, _, _ = predictor.batch
image = image if isinstance(image, list) else [image]
predictor.results = zip(predictor.results, image)
model = YOLO("yolo11n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
pass
Erkunden Sie den Callback-Quellcode für weitere Optionen und Beispiele.