Rückrufe
Das Ultralytics unterstützt Rückrufe, die als Einstiegspunkte in strategischen Phasen während des Prozesses dienen. train
, val
, export
und predict
Modi. Jeder Callback akzeptiert eine Trainer
, Validator
, oder Predictor
Objekt, abhängig von der Art des Vorgangs. Alle Eigenschaften dieser Objekte sind im Abschnitt Referenzabschnitt der Dokumentation.
Beobachten: Mastering Ultralytics YOLO : Rückrufe
Beispiele
Rückgabe zusätzlicher Informationen mit Vorhersage
In diesem Beispiel wird gezeigt, wie das Originalbild zusammen mit jedem Ergebnisobjekt zurückgegeben werden kann:
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
Alle Rückrufe
Nachstehend sind alle unterstützten Rückrufe aufgeführt. Weitere Details finden Sie im Quellcode der Rückrufe.
Trainer-Rückrufe
Rückruf | Beschreibung |
---|---|
on_pretrain_routine_start |
Wird zu Beginn des Vorprogramms ausgelöst. |
on_pretrain_routine_end |
Wird am Ende des Vorprogramms ausgelöst. |
on_train_start |
Wird ausgelöst, wenn das Training beginnt. |
on_train_epoch_start |
Wird zu Beginn jeder Trainingsepoche ausgelöst. |
on_train_batch_start |
Wird zu Beginn eines jeden Trainingsstapels 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 |
Ausgelöst am Ende eines jeden Trainingsstapels. |
on_train_epoch_end |
Wird am Ende jeder Trainingsepoche ausgelöst. |
on_fit_epoch_end |
Wird am Ende jeder Anpassungsepoche 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 die Modellparameter aktualisiert werden. |
teardown |
Wird ausgelöst, wenn der Trainingsprozess bereinigt wird. |
Validator Rückrufe
Rückruf | Beschreibung |
---|---|
on_val_start |
Wird ausgelöst, wenn die Validierung beginnt. |
on_val_batch_start |
Wird zu Beginn einer jeden Validierungscharge ausgelöst. |
on_val_batch_end |
Wird am Ende jeder Validierungscharge ausgelöst. |
on_val_end |
Wird ausgelöst, wenn die Validierung endet. |
Rückrufe von Prädiktoren
Rückruf | Beschreibung |
---|---|
on_predict_start |
Wird ausgelöst, wenn der Vorhersageprozess beginnt. |
on_predict_batch_start |
Ausgelöst zu Beginn jeder Vorhersagecharge. |
on_predict_postprocess_end |
Wird am Ende der Nachbearbeitung der Vorhersage ausgelöst. |
on_predict_batch_end |
Ausgelöst am Ende jeder Vorhersagecharge. |
on_predict_end |
Wird ausgelöst, wenn der Vorhersageprozess endet. |
Exporter Rückrufe
Rückruf | Beschreibung |
---|---|
on_export_start |
Wird ausgelöst, wenn der Exportvorgang beginnt. |
on_export_end |
Wird ausgelöst, wenn der Exportvorgang beendet ist. |
FAQ
Was sind Ultralytics Rückrufe und wie kann ich sie nutzen?
Ultralytics Callbacks sind spezialisierte Einstiegspunkte, die während wichtiger Phasen von Modelloperationen wie Training, Validierung, Export und Vorhersage ausgelöst werden. Diese Rückrufe ermöglichen benutzerdefinierte Funktionen an bestimmten Punkten des Prozesses, wodurch Erweiterungen und Änderungen des Arbeitsablaufs möglich werden. Jeder Callback akzeptiert eine Trainer
, Validator
, oder Predictor
Objekt, abhängig von der Art des Vorgangs. Die detaillierten Eigenschaften dieser Objekte finden Sie in der Referenzabschnitt.
Um einen Rückruf zu verwenden, definieren Sie eine Funktion und fügen sie dem Modell mit der Option model.add_callback()
Methode. 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 mit Rückrufen anpassen?
Passen Sie Ihre Ultralytics an, indem Sie in bestimmten Phasen des Trainingsprozesses Logik einfügen. Ultralytics YOLO bietet eine Vielzahl von Trainingsrückrufen, wie z. B. on_train_start
, on_train_end
und on_train_batch_end
die es Ihnen ermöglichen, benutzerdefinierte Metriken, Verarbeitung oder Protokollierung hinzuzufügen.
So frieren Sie die BatchNorm-Statistiken ein, wenn Sie Ebenen mit Rückrufen 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 Einzelheiten zum effektiven Einsatz von Trainingsrückrufen finden Sie im Trainingshandbuch.
Warum sollte ich Callbacks während der Validierung in Ultralytics YOLO verwenden?
Die Verwendung von Rückrufen während der Validierung in Ultralytics YOLO verbessert die Modellevaluierung, indem sie die benutzerdefinierte Verarbeitung, Protokollierung oder Berechnung von Metriken ermöglicht. Rückrufe wie on_val_start
, on_val_batch_end
und on_val_end
bieten Einstiegspunkte für die Einbindung benutzerdefinierter Logik und gewährleisten detaillierte und umfassende Validierungsprozesse.
Zum Beispiel, um alle Validierungschargen darzustellen, anstatt nur die ersten drei:
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 Informationen zur Integration von Rückrufen 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 Rückruf für den Vorhersagemodus in Ultralytics YOLO hinzuzufügen, definieren Sie eine Rückruffunktion und registrieren Sie sie mit dem Vorhersageprozess. Übliche Rückrufe für die Vorhersage sind on_predict_start
, on_predict_batch_end
und on_predict_end
. Diese ermöglichen die Änderung der Vorhersageergebnisse und die Integration zusätzlicher Funktionen wie Datenprotokollierung oder Ergebnistransformation.
Hier ein Beispiel, bei dem ein benutzerdefinierter Rückruf 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 Verwendung lesen Sie bitte den Prediction Guide, der detaillierte Anweisungen und zusätzliche Anpassungsoptionen enthält.
Was sind einige praktische Beispiele für die Verwendung von Rückrufen in Ultralytics YOLO ?
Ultralytics YOLO unterstützt verschiedene praktische Implementierungen von Rückrufen zur Verbesserung und Anpassung verschiedener Phasen wie Training, Validierung und Vorhersage. Einige praktische Beispiele sind:
- Protokollierung benutzerdefinierter Metriken: Protokollieren Sie zusätzliche Metriken in verschiedenen Phasen, z. B. am Ende von Trainings- oder Validierungsepochen.
- Datenerweiterung: Implementieren Sie benutzerdefinierte Datentransformationen oder -erweiterungen während der Vorhersage oder der Trainingsbatches.
- 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
Weitere Optionen und Beispiele finden Sie im Quellcode der Rückrufe.