Zum Inhalt springen

Rückrufe

Das Ultralytics unterstützt Rückrufe, die als Einstiegspunkte in strategischen Phasen während des Prozesses dienen. train, val, exportund 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_endund on_train_batch_enddie 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_endund 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_endund 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.

📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 9 Tagen

Kommentare