YOLO Vision 2026 :

Callbacks#

Le framework Ultralytics prend en charge les rappels, qui servent de points d'entrée à des étapes stratégiques pendant les modes train, val, export et predict. Chaque rappel accepte un objet Trainer, Validator ou Predictor, selon le type d'opération. Toutes les propriétés de ces objets sont détaillées dans la section Référence de la documentation.



Watch: How to use Ultralytics Callbacks | Predict, Train, Validate and Export Callbacks | Ultralytics YOLO🚀

Exemples#

Retourner des informations supplémentaires avec la prédiction#

Dans cet exemple, nous montrons comment retourner l'image originale avec chaque objet de résultat :

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()
    pass

Accède aux métriques du modèle à l'aide du rappel on_model_save#

Cet exemple montre comment récupérer les détails de l'entraînement, tels que le score best_fitness, total_loss et d'autres métriques après qu'un point de contrôle a été enregistré à l'aide du rappel on_model_save.

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)

Tous les callbacks#

Tu trouveras ci-dessous tous les rappels pris en charge. Pour plus de détails, consulte le code source des rappels.

Callbacks du Trainer#

CallbackDescription
on_pretrain_routine_startDéclenché au début de la routine de pré-entraînement, avant le chargement des données et la configuration du modèle.
on_pretrain_routine_endDéclenché à la fin de la routine de pré-entraînement, une fois le chargement des données et la configuration du modèle terminés.
on_train_startDéclenché au démarrage de l'entraînement, avant que la première époque ne commence.
on_train_epoch_startDéclenché au début de chaque époque d'entraînement, avant que l'itération des lots ne commence.
on_train_batch_startDéclenché au début de chaque lot d'entraînement, avant la passe avant (forward pass).
optimizer_stepDéclenché lors de l'étape de l'optimiseur. Réservé aux intégrations personnalisées ; non appelé par la boucle d'entraînement par défaut.
on_before_zero_gradDéclenché avant que les gradients ne soient mis à zéro. Réservé aux intégrations personnalisées ; non appelé par la boucle d'entraînement par défaut.
on_train_batch_endDéclenché à la fin de chaque lot d'entraînement, après la passe arrière (backward pass). L'étape de l'optimiseur peut être différée en raison de l'accumulation de gradients.
on_train_epoch_endDéclenché à la fin de chaque époque d'entraînement, après que tous les lots ont été traités mais avant la validation. Les métriques de validation et le fitness peuvent ne pas encore être disponibles.
on_model_saveDéclenché lorsque le checkpoint du modèle est enregistré, après la validation.
on_fit_epoch_endDéclenché à la fin de chaque époque d'ajustement (entraînement + validation), après la validation et tout enregistrement de checkpoint. Les métriques de validation sont disponibles, et le fitness est disponible pour l'appel d'entraînement par époque. Ce callback est également appelé lors de l'évaluation finale du meilleur modèle, où aucun enregistrement de checkpoint ne se produit et le fitness peut ne pas être présent.
on_train_endDéclenché lorsque le processus d'entraînement se termine, après l'évaluation finale du meilleur modèle.
on_params_updateDéclenché lorsque les paramètres du modèle sont mis à jour. Réservé aux intégrations personnalisées ; non appelé par la boucle d'entraînement par défaut.
teardownDéclenché lorsque le processus d'entraînement est en cours de nettoyage.

Callbacks du Validator#

CallbackDescription
on_val_startDéclenché lorsque la validation commence.
on_val_batch_startDéclenché au début de chaque lot de validation.
on_val_batch_endDéclenché à la fin de chaque lot de validation.
on_val_endDéclenché lorsque la validation se termine.

Callbacks du Predictor#

CallbackDescription
on_predict_startDéclenché lorsque le processus de prédiction commence.
on_predict_batch_startDéclenché au début de chaque lot de prédiction.
on_predict_postprocess_endDéclenché à la fin du post-traitement de la prédiction.
on_predict_batch_endDéclenché à la fin de chaque lot de prédiction.
on_predict_endDéclenché lorsque le processus de prédiction se termine.

Callbacks de l'exporteur#

CallbackDescription
on_export_startDéclenché lorsque le processus d'exportation commence.
on_export_endDéclenché lorsque le processus d'exportation se termine.

FAQ#

  • Les rappels Ultralytics sont des points d'entrée spécialisés qui sont déclenchés lors d'étapes clés des opérations du modèle telles que l'entraînement, la validation, l'exportation et la prédiction. Ces rappels permettent d'ajouter des fonctionnalités personnalisées à des moments précis du processus, ce qui permet d'améliorer et de modifier le flux de travail. Chaque rappel accepte un objet Trainer, Validator ou Predictor, selon le type d'opération. Pour connaître les propriétés détaillées de ces objets, consulte la section Référence.

    Pour utiliser un rappel, définis une fonction et ajoute-la au modèle à l'aide de la méthode model.add_callback(). Voici un exemple de renvoi d'informations supplémentaires lors de la prédiction :

    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():
        pass
  • Personnalise ta routine d'entraînement Ultralytics en injectant de la logique à des étapes spécifiques du processus d'entraînement. Ultralytics YOLO propose une variété de rappels d'entraînement, tels que on_train_start, on_train_end et on_train_batch_end, qui te permettent d'ajouter des métriques, un traitement ou un journal personnalisés.

    Voici comment figer les statistiques BatchNorm lors du gel des couches avec des callbacks :

    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)

    Pour plus de détails sur l'utilisation efficace des rappels d'entraînement, consulte le Guide d'entraînement.

  • L'utilisation de rappels lors de la validation dans Ultralytics YOLO améliore l'évaluation du modèle en permettant un traitement personnalisé, la journalisation ou le calcul de métriques. Des rappels comme on_val_start, on_val_batch_end et on_val_end fournissent des points d'entrée pour injecter une logique personnalisée, garantissant des processus de validation détaillés et complets.

    Par exemple, pour tracer tous les lots de validation au lieu de seulement les trois premiers :

    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")

    Pour plus d'informations sur l'intégration de rappels dans ton processus de validation, consulte le Guide de validation.

  • Pour associer un rappel personnalisé au mode de prédiction dans Ultralytics YOLO, définis une fonction de rappel et enregistre-la auprès du processus de prédiction. Les rappels de prédiction courants incluent on_predict_start, on_predict_batch_end et on_predict_end. Ceux-ci permettent de modifier les sorties de prédiction et d'intégrer des fonctionnalités supplémentaires, telles que la journalisation des données ou la transformation des résultats.

    Voici un exemple où un callback personnalisé enregistre les prédictions en fonction de la présence ou non d'un objet d'une classe particulière :

    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:
        pass

    Pour une utilisation plus complète, consulte le Guide de prédiction, qui comprend des instructions détaillées et des options de personnalisation supplémentaires.

  • Ultralytics YOLO prend en charge diverses implémentations pratiques de callbacks pour améliorer et personnaliser différentes phases comme l'entraînement, la validation et la prédiction. Quelques exemples pratiques incluent :

    • Journalisation des métriques personnalisées : Enregistre des métriques supplémentaires à différentes étapes, comme à la fin des époques d'entraînement ou de validation.
    • Augmentation des données : Implémente des transformations ou des augmentations de données personnalisées pendant la prédiction ou les lots d'entraînement.
    • Résultats intermédiaires : Enregistre des résultats intermédiaires, tels que des prédictions ou des images, pour une analyse ou une visualisation ultérieure.

    Exemple : Combinaison de cadres avec les résultats de prédiction lors de la prédiction à l'aide de 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():
        pass

    Explore le code source des rappels pour plus d'options et d'exemples.

Commentaires