Callbacks#
Das Ultralytics-Framework unterstützt Callbacks, die als Einstiegspunkte an strategischen Phasen während der Modi train, val, export und predict dienen. Jeder Callback akzeptiert je nach Operationstyp ein Trainer-, Validator- oder Predictor-Objekt. Alle Eigenschaften dieser Objekte sind im Referenzbereich der Dokumentation detailliert beschrieben.
Watch: How to use Ultralytics Callbacks | Predict, Train, Validate and Export Callbacks | Ultralytics YOLO🚀
Beispiele#
Zusätzliche Informationen mit Vorhersagen zurückgeben#
In diesem Beispiel zeigen wir, wie du zusammen mit jedem Ergebnisobjekt den ursprünglichen Frame zurückgibst:
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("yolo26n.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()
passGreife über den on_model_save-Callback auf Modellmetriken zu#
Dieses Beispiel zeigt, wie man Trainingsdetails wie den best_fitness-Score, total_loss und andere Metriken abruft, nachdem ein Checkpoint mit dem on_model_save-Callback gespeichert wurde.
from ultralytics import YOLO
# Load a YOLO model
model = YOLO("yolo26n.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#
Unten sind alle unterstützten Callbacks aufgeführt. Weitere Details findest du im Quellcode der Callbacks.
Trainer-Callbacks#
| Callback | Beschreibung |
|---|---|
on_pretrain_routine_start | Wird zu Beginn der Pre-Training-Routine ausgelöst, vor dem Laden der Daten und dem Einrichten des Modells. |
on_pretrain_routine_end | Wird am Ende der Pre-Training-Routine ausgelöst, nachdem das Laden der Daten und das Einrichten des Modells abgeschlossen sind. |
on_train_start | Wird beim Start des Trainings ausgelöst, bevor die erste Epoche beginnt. |
on_train_epoch_start | Wird zu Beginn jeder Trainingsepoche (epoch) ausgelöst, bevor die Batch-Iteration beginnt. |
on_train_batch_start | Wird zu Beginn jedes Trainings-Batches ausgelöst, vor dem Forward-Pass. |
optimizer_step | Wird während des Optimizer-Schritts ausgelöst. Reserviert für benutzerdefinierte Integrationen; wird nicht durch die Standard-Trainingsschleife aufgerufen. |
on_before_zero_grad | Wird ausgelöst, bevor die Gradienten auf Null gesetzt werden. Reserviert für benutzerdefinierte Integrationen; wird nicht durch die Standard-Trainingsschleife aufgerufen. |
on_train_batch_end | Wird am Ende jedes Trainings-Batches ausgelöst, nach dem Backward-Pass. Der Optimizer-Schritt kann aufgrund von Gradientenakkumulation verzögert werden. |
on_train_epoch_end | Wird am Ende jeder Trainingsepoche ausgelöst, nachdem alle Batches verarbeitet wurden, aber vor der Validierung. Validierungsmetriken und Fitness sind möglicherweise noch nicht verfügbar. |
on_model_save | Wird ausgelöst, wenn der Modell-Checkpoint nach der Validierung gespeichert wird. |
on_fit_epoch_end | Wird am Ende jeder Fit-Epoche (Train + Val) ausgelöst, nach der Validierung und dem Speichern von Checkpoints. Validierungsmetriken sind verfügbar und die Fitness steht für den Training-Aufruf pro Epoche zur Verfügung. Dieser Callback wird auch während der abschließenden Bewertung des besten Modells aufgerufen, wobei kein Checkpoint-Speichern erfolgt und die Fitness möglicherweise nicht vorhanden ist. |
on_train_end | Wird ausgelöst, wenn der Trainingsprozess nach der abschließenden Bewertung des besten Modells endet. |
on_params_update | Wird ausgelöst, wenn Modellparameter aktualisiert werden. Reserviert für benutzerdefinierte Integrationen; wird nicht durch die Standard-Trainingsschleife aufgerufen. |
teardown | Wird ausgelöst, wenn der Trainingsprozess bereinigt wird. |
Validator-Callbacks#
| Callback | Beschreibung |
|---|---|
on_val_start | Wird beim Start der Validierung ausgelöst. |
on_val_batch_start | Wird zu Beginn jedes Validierungs-Batches ausgelöst. |
on_val_batch_end | Wird am Ende jedes Validierungs-Batches ausgelöst. |
on_val_end | Wird am Ende der Validierung ausgelöst. |
Predictor-Callbacks#
| Callback | Beschreibung |
|---|---|
on_predict_start | Wird beim Start des Vorhersageprozesses ausgelöst. |
on_predict_batch_start | Wird zu Beginn jedes Vorhersage-Batches ausgelöst. |
on_predict_postprocess_end | Wird am Ende der Nachbearbeitung der Vorhersage ausgelöst. |
on_predict_batch_end | Wird am Ende jedes Vorhersage-Batches ausgelöst. |
on_predict_end | Wird am Ende des Vorhersageprozesses ausgelöst. |
Exporter-Callbacks#
| Callback | Beschreibung |
|---|---|
on_export_start | Wird beim Start des Exportprozesses ausgelöst. |
on_export_end | Wird am Ende des Exportprozesses ausgelöst. |
FAQ#
Ultralytics-Callbacks sind spezialisierte 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 des Prozesses, was Erweiterungen und Modifikationen des Workflows erlaubt. Jeder Callback akzeptiert je nach Operationstyp ein
Trainer-,Validator- oderPredictor-Objekt. Detaillierte Eigenschaften dieser Objekte findest du im Referenzbereich.Um einen Callback zu verwenden, definiere eine Funktion und füge sie dem Modell über die Methode
model.add_callback()hinzu. 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("yolo26n.pt") model.add_callback("on_predict_batch_end", on_predict_batch_end) for result, frame in model.predict(): passPasse deine Ultralytics-Trainingsroutine an, indem du Logik in bestimmten Phasen des Trainingsprozesses einfügst. Ultralytics YOLO bietet eine Vielzahl von Trainings-Callbacks wie
on_train_start,on_train_endundon_train_batch_end, mit denen du benutzerdefinierte Metriken, Verarbeitungen oder Protokollierungen hinzufügen kannst.So frierst du BatchNorm-Statistiken ein, wenn du Schichten mit Callbacks fixierst:
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("yolo26n.pt") model.add_callback("on_train_epoch_start", put_in_eval_mode) model.train(data="coco.yaml", epochs=10)Weitere Details zur effektiven Nutzung von Trainings-Callbacks findest du im Trainingsleitfaden.
Die Verwendung von Callbacks während der Validierung in Ultralytics YOLO verbessert die Modellbewertung, indem sie benutzerdefinierte Verarbeitung, Protokollierung oder Metrikberechnung ermöglicht. Callbacks wie
on_val_start,on_val_batch_endundon_val_endstellen Einstiegspunkte zum Einfügen benutzerdefinierter Logik bereit und sorgen für detaillierte und umfassende Validierungsprozesse.Um beispielsweise alle Validierungs-Batches anstatt nur die 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("yolo26n.pt") model.add_callback("on_val_batch_end", plot_samples) model.val(data="coco.yaml")Weitere Einblicke in die Einbindung von Callbacks in deinen Validierungsprozess findest du im Validierungsleitfaden.
Um einen benutzerdefinierten Callback für den Vorhersagemodus in Ultralytics YOLO anzuhängen, definiere eine Callback-Funktion und registriere sie im Vorhersageprozess. Gängige Vorhersage-Callbacks sind
on_predict_start,on_predict_batch_endundon_predict_end. Diese ermöglichen die Modifikation von Vorhersageausgaben und die Integration zusätzlicher Funktionen wie Datenprotokollierung oder Ergebnistransformation.Hier ist ein Beispiel, bei dem ein benutzerdefinierter Callback Vorhersagen basierend darauf speichert, ob ein Objekt einer bestimmten Klasse vorhanden ist:
from ultralytics import YOLO model = YOLO("yolo26n.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_stream = model("pedestrians.mp4", stream=True, save=True) for result in results_stream: passEine umfassendere Verwendung findest du im Vorhersageleitfaden, der detaillierte Anweisungen und zusätzliche Anpassungsoptionen enthält.
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: Protokolliere zusätzliche Metriken in verschiedenen Stadien, beispielsweise am Ende von Trainings- oder Validierungsepochen.
- Datenaugmentation: Implementiere benutzerdefinierte Datentransformationen oder -augmentationem während der Vorhersage oder von Trainings-Batches.
- Zwischenergebnisse: Speichere Zwischenergebnisse wie Vorhersagen oder Frames für weitere Analysen oder Visualisierungen.
Beispiel: Kombinieren von Frames mit Vorhersageergebnissen während der Vorhersage unter Verwendung von
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("yolo26n.pt") model.add_callback("on_predict_batch_end", on_predict_batch_end) for result, frame in model.predict(): passErkunde den Callback-Quellcode für weitere Optionen und Beispiele.