Overslaan naar inhoud

Terugbellen

Terugbellen

Ultralytics Het framework ondersteunt callbacks als ingangspunten in strategische stadia van de train-, val-, export- en predictmodi. Elke callback accepteert een Trainer, Validatorof Predictor object afhankelijk van het type operatie. Alle eigenschappen van deze objecten kunnen worden gevonden in de Referentie sectie van de docs.



Kijken: Ultralytics YOLOv8 onder de knie krijgen: Callbacks

Voorbeelden

Extra informatie teruggeven met voorspelling

In dit voorbeeld willen we bij elk resultaatobject het originele frame teruggeven. Hier is hoe we dat kunnen doen

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

    # 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("yolov8n.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 callbacks

Hier zijn alle ondersteunde callbacks. Zie de broncode van callbacks voor meer details.

Trainer terugbellen

Terugbellen Beschrijving
on_pretrain_routine_start Wordt geactiveerd aan het begin van de pre-trainingsroutine
on_pretrain_routine_end Wordt geactiveerd aan het einde van de pre-trainingsroutine
on_train_start Wordt geactiveerd wanneer de training begint
on_train_epoch_start Getriggerd aan het begin van elk trainingsepoch
on_train_batch_start Getriggerd aan het begin van elke trainingsbatch
optimizer_step Getriggerd tijdens de optimalisatiestap
on_before_zero_grad Getriggerd voordat hellingen op nul worden gezet
on_train_batch_end Getriggerd aan het einde van elke trainingsbatch
on_train_epoch_end Getriggerd aan het einde van elk trainingsepoch
on_fit_epoch_end Getriggerd aan het einde van elke fit-epoch
on_model_save Wordt geactiveerd wanneer het model wordt opgeslagen
on_train_end Wordt geactiveerd wanneer het trainingsproces eindigt
on_params_update Wordt geactiveerd wanneer modelparameters worden bijgewerkt
teardown Wordt geactiveerd wanneer het trainingsproces wordt opgeschoond

Validator callbacks

Terugbellen Beschrijving
on_val_start Wordt geactiveerd wanneer de validatie begint
on_val_batch_start Getriggerd aan het begin van elke validatiebatch
on_val_batch_end Getriggerd aan het einde van elke validatiebatch
on_val_end Wordt geactiveerd wanneer de validatie eindigt

Voorspellende Callbacks

Terugbellen Beschrijving
on_predict_start Wordt geactiveerd wanneer het voorspellingsproces begint
on_predict_batch_start Getriggerd aan het begin van elke voorspellingsbatch
on_predict_postprocess_end Getriggerd aan het einde van de voorspellingsnabewerking
on_predict_batch_end Getriggerd aan het einde van elke voorspellingsbatch
on_predict_end Wordt geactiveerd wanneer het voorspellingsproces eindigt

Exporteur Callbacks

Terugbellen Beschrijving
on_export_start Wordt geactiveerd wanneer het exportproces start
on_export_end Wordt geactiveerd wanneer het exportproces eindigt

FAQ

Wat zijn Ultralytics callbacks en hoe kan ik ze gebruiken?

Ultralytics callbacks zijn gespecialiseerde invoerpunten die worden geactiveerd tijdens belangrijke fasen van modelbewerkingen zoals trainen, valideren, exporteren en voorspellen. Deze callbacks maken aangepaste functionaliteit mogelijk op specifieke punten in het proces, waardoor verbeteringen en aanpassingen aan de workflow mogelijk worden. Elke callback accepteert een Trainer, Validatorof Predictor object, afhankelijk van het type operatie. Raadpleeg voor gedetailleerde eigenschappen van deze objecten de Referentiegedeelte.

Om een callback te gebruiken, kun je een functie definiëren en deze vervolgens aan het model toevoegen met de optie add_callback methode. Hier is een voorbeeld van hoe je extra informatie kunt teruggeven tijdens het voorspellen:

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("yolov8n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

Hoe kan ik Ultralytics trainingsroutine aanpassen met callbacks?

Om je Ultralytics trainingsroutine aan te passen met behulp van callbacks, kun je je logica injecteren in specifieke stadia van het trainingsproces. Ultralytics YOLO biedt een verscheidenheid aan training callbacks zoals on_train_start, on_train_enden on_train_batch_end. Hiermee kun je aangepaste statistieken, verwerking of logboekregistratie toevoegen.

Hier is een voorbeeld van hoe je aan het eind van elke trainingsepoch extra meetgegevens kunt loggen:

from ultralytics import YOLO


def on_train_epoch_end(trainer):
    """Custom logic for additional metrics logging at the end of each training epoch."""
    additional_metric = compute_additional_metric(trainer)
    trainer.log({"additional_metric": additional_metric})


model = YOLO("yolov8n.pt")
model.add_callback("on_train_epoch_end", on_train_epoch_end)
model.train(data="coco.yaml", epochs=10)

Raadpleeg de Trainingsgids voor meer informatie over hoe je effectief training callbacks kunt gebruiken.

Waarom zou ik callbacks gebruiken tijdens validatie in Ultralytics YOLO ?

Gebruik callbacks tijdens validatie in Ultralytics YOLO kunnen de evaluatie van modellen verbeteren door aangepaste verwerking, logging of berekening van metrieken mogelijk te maken. Callbacks zoals on_val_start, on_val_batch_enden on_val_end bieden ingangen om aangepaste logica te injecteren, waardoor gedetailleerde en uitgebreide validatieprocessen worden gegarandeerd.

Je wilt bijvoorbeeld extra validatiegegevens loggen of tussenresultaten opslaan voor verdere analyse. Hier is een voorbeeld van hoe je aangepaste statistieken kunt loggen aan het einde van de validatie:

from ultralytics import YOLO


def on_val_end(validator):
    """Log custom metrics at end of validation."""
    custom_metric = compute_custom_metric(validator)
    validator.log({"custom_metric": custom_metric})


model = YOLO("yolov8n.pt")
model.add_callback("on_val_end", on_val_end)
model.val(data="coco.yaml")

Bekijk de Validatiegids voor meer inzicht in het opnemen van callbacks in je validatieproces.

Hoe voeg ik een aangepaste callback toe voor de voorspellingsmodus in Ultralytics YOLO ?

Om een aangepaste callback voor de voorspellingsmodus In Ultralytics YOLO definieer je een callbackfunctie en registreer je deze bij het voorspellingsproces. Gebruikelijke voorspellings-callbacks zijn on_predict_start, on_predict_batch_enden on_predict_end. Deze maken het mogelijk om de uitvoer van voorspellingen aan te passen en extra functionaliteiten te integreren, zoals gegevensregistratie of resultaattransformatie.

Hier is een voorbeeld waarbij een aangepaste callback wordt gebruikt om voorspellingen te loggen:

from ultralytics import YOLO


def on_predict_end(predictor):
    """Log predictions at the end of prediction."""
    for result in predictor.results:
        log_prediction(result)


model = YOLO("yolov8n.pt")
model.add_callback("on_predict_end", on_predict_end)
results = model.predict(source="image.jpg")

Raadpleeg voor uitgebreider gebruik de Voorspellingsgids, die gedetailleerde instructies en extra aanpassingsopties bevat.

Wat zijn enkele praktische voorbeelden van het gebruik van callbacks in Ultralytics YOLO ?

Ultralytics YOLO ondersteunt diverse praktische implementaties van callbacks om verschillende fasen zoals training, validatie en voorspelling te verbeteren en aan te passen. Enkele praktische voorbeelden zijn:

  1. Aangepaste meetgegevens loggen: Log extra statistieken in verschillende stadia, zoals het einde van training of validatie epochs.
  2. Gegevensuitbreiding: Implementeer aangepaste gegevenstransformaties of augmentaties tijdens voorspellingen of trainingsbatches.
  3. Tussenresultaten: Sla tussenresultaten op zoals voorspellingen of frames voor verdere analyse of visualisatie.

Voorbeeld: Frames combineren met voorspellingsresultaten tijdens voorspellen met behulp van 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("yolov8n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

Bekijk de Complete Callback Referentie voor meer opties en voorbeelden.



Aangemaakt 2023-11-12, Bijgewerkt 2024-07-04
Auteurs: glenn-jocher (9), RizwanMunawar (1), Laughing-q (1)

Reacties