Callbacks
Das Ultralytics Framework unterstützt Callbacks, die als Einstiegspunkte in 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 Referenzabschnitt der Dokumentation aufgeführt.
Watch: How to use Ultralytics Callbacks | Predict, Train, Validate and Export Callbacks | Ultralytics YOLO🚀
Beispiele
Rückgabe zusätzlicher Informationen bei der Vorhersage
In diesem Beispiel zeigen wir, wie du den ursprünglichen Frame zusammen mit jedem Ergebnisobjekt 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()
passZugriff auf Modellmetriken über den on_model_save-Callback
Dieses Beispiel zeigt, wie du Trainingsdetails, wie den best_fitness-Score, total_loss und andere Metriken, abrufst, nachdem ein Checkpoint mithilfe des on_model_save-Callbacks 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
Nachfolgend findest du alle unterstützten Callbacks. 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 Trainings-Epoche 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 vom Standard-Trainings-Loop nicht aufgerufen. |
on_before_zero_grad | Wird ausgelöst, bevor Gradienten auf Null gesetzt werden. Reserviert für benutzerdefinierte Integrationen; wird vom Standard-Trainings-Loop nicht aufgerufen. |
on_train_batch_end | Wird am Ende jedes Trainings-Batches nach dem Backward-Pass ausgelöst. Der Optimizer-Schritt kann aufgrund von Gradientenakkumulation verzögert werden. |
on_train_epoch_end | Wird am Ende jeder Trainings-Epoche 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 gespeichert wird, nach der Validierung. |
on_fit_epoch_end | Wird am Ende jeder Fit-Epoche (Training + Validierung) nach der Validierung und dem Speichern des Checkpoints ausgelöst. Validierungsmetriken sind verfügbar und die Fitness steht für den pro-Epoche-Trainingsaufruf bereit. Dieser Callback wird auch während der abschließenden Bewertung des besten Modells aufgerufen, bei der kein Checkpoint gespeichert wird und Fitness möglicherweise nicht vorhanden ist. |
on_train_end | Wird ausgelöst, wenn der Trainingsprozess endet, nach der finalen Bewertung des besten Modells. |
on_params_update | Wird ausgelöst, wenn Modellparameter aktualisiert werden. Reserviert für benutzerdefinierte Integrationen; wird vom Standard-Trainings-Loop nicht aufgerufen. |
teardown | Wird ausgelöst, wenn der Trainingsprozess bereinigt wird. |
Validator-Callbacks
| Callback | Beschreibung |
|---|---|
on_val_start | Wird ausgelöst, wenn die Validierung beginnt. |
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 ausgelöst, wenn die Validierung endet. |
Predictor-Callbacks
| Callback | Beschreibung |
|---|---|
on_predict_start | Wird ausgelöst, wenn der Vorhersageprozess beginnt. |
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 ausgelöst, wenn der Vorhersageprozess endet. |
Exporter-Callbacks
| Callback | Beschreibung |
|---|---|
on_export_start | Wird ausgelöst, wenn der Exportprozess beginnt. |
on_export_end | Wird ausgelöst, wenn der Exportprozess endet. |
FAQ
Was sind Ultralytics Callbacks und wie kann ich sie verwenden?
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 und erlauben Erweiterungen und Modifikationen am Workflow. Jeder Callback akzeptiert je nach Operationstyp ein Trainer-, Validator- oder Predictor-Objekt. Detaillierte Eigenschaften dieser Objekte findest du im Referenzabschnitt.
Um einen Callback zu verwenden, definiere eine Funktion und füge sie dem Modell mit der 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():
passWie kann ich die Ultralytics Trainingsroutine mithilfe von Callbacks anpassen?
Passe deine Ultralytics Trainingsroutine an, indem du Logik in bestimmten Stadien des Trainingsprozesses einfügst. Ultralytics YOLO bietet eine Vielzahl von Trainings-Callbacks wie on_train_start, on_train_end und on_train_batch_end, mit denen du benutzerdefinierte Metriken, Verarbeitung oder Logging hinzufügen kannst.
Hier ist, wie du BatchNorm-Statistiken beim Einfrieren von 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 Trainings-Handbuch.
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, da sie benutzerdefinierte Verarbeitung, Logging oder die Berechnung von Metriken ermöglichen. Callbacks wie on_val_start, on_val_batch_end und on_val_end bieten Einstiegspunkte für benutzerdefinierte Logik, um detaillierte und umfassende Validierungsprozesse zu gewährleisten.
Zum Beispiel, um 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 Validierungs-Handbuch.
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 hinzuzufügen, definiere eine Callback-Funktion und registriere sie beim Vorhersageprozess. Häufige Vorhersage-Callbacks sind on_predict_start, on_predict_batch_end und on_predict_end. Diese ermöglichen die Änderung von Vorhersageausgaben und die Integration zusätzlicher Funktionalitäten, wie Datenlogging oder Ergebnistransformation.
Hier ist ein Beispiel, in 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 = model("pedestrians.mp4", stream=True, save=True)
for results in results:
passFür eine umfassendere Nutzung verweisen wir auf das Vorhersage-Handbuch, das 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 Phasen wie Training, Validierung und Vorhersage zu verbessern und anzupassen. Einige praktische Beispiele sind:
- Logging benutzerdefinierter Metriken: Logge zusätzliche Metriken in verschiedenen Phasen, zum Beispiel am Ende von Trainings- oder Validierungs-Epochen.
- Datenaugmentierung: Implementiere benutzerdefinierte Datentransformationen oder Augmentierungen während Vorhersage- oder Trainings-Batches.
- Zwischenergebnisse: Speichere Zwischenergebnisse wie Vorhersagen oder Frames für weitere Analysen oder Visualisierungen.
Beispiel: Zusammenführen von Frames mit Vorhersageergebnissen während der Vorhersage mithilfe 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.