YOLO Vision 2026:

Callbacks#

El framework Ultralytics admite callbacks, que sirven como puntos de entrada en etapas estratégicas durante los modos train, val, export y predict. Cada callback acepta un objeto Trainer, Validator o Predictor, según el tipo de operación. Todas las propiedades de estos objetos se detallan en la sección de Referencia de la documentación.



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

Ejemplos#

Devolver información adicional con la predicción#

En este ejemplo, demostramos cómo devolver el frame original junto con cada objeto de resultado:

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

Accede a las métricas del modelo utilizando el callback on_model_save#

Este ejemplo muestra cómo recuperar detalles de entrenamiento, como la puntuación best_fitness, total_loss y otras métricas después de guardar un punto de control (checkpoint) utilizando el callback 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)

Todos los callbacks#

A continuación se muestran todos los callbacks compatibles. Para obtener más detalles, consulta el código fuente de los callbacks.

Callbacks del Trainer#

CallbackDescripción
on_pretrain_routine_startSe activa al comienzo de la rutina de preentrenamiento, antes de la carga de datos y la configuración del modelo.
on_pretrain_routine_endSe activa al final de la rutina de preentrenamiento, una vez completadas la carga de datos y la configuración del modelo.
on_train_startSe activa cuando comienza el entrenamiento, antes de que empiece la primera época.
on_train_epoch_startSe activa al inicio de cada época de entrenamiento, antes de que comience la iteración por lotes.
on_train_batch_startSe activa al inicio de cada lote de entrenamiento, antes del paso hacia adelante (forward pass).
optimizer_stepSe activa durante el paso del optimizador. Reservado para integraciones personalizadas; no es llamado por el bucle de entrenamiento predeterminado.
on_before_zero_gradSe activa antes de que los gradientes se pongan a cero. Reservado para integraciones personalizadas; no es llamado por el bucle de entrenamiento predeterminado.
on_train_batch_endSe activa al final de cada lote de entrenamiento, después del paso hacia atrás (backward pass). El paso del optimizador podría posponerse debido a la acumulación de gradientes.
on_train_epoch_endSe activa al final de cada época de entrenamiento, después de procesar todos los lotes pero antes de la validación. Es posible que las métricas de validación y la idoneidad (fitness) aún no estén disponibles.
on_model_saveSe activa cuando se guarda el punto de control del modelo, después de la validación.
on_fit_epoch_endSe activa al final de cada época de ajuste (train + val), después de la validación y de guardar cualquier punto de control. Las métricas de validación están disponibles y la idoneidad está disponible para la llamada de entrenamiento por época. Este callback también se llama durante la evaluación final del mejor modelo, donde no se guarda ningún punto de control y la idoneidad puede no estar presente.
on_train_endSe activa cuando termina el proceso de entrenamiento, después de la evaluación final del mejor modelo.
on_params_updateSe activa cuando se actualizan los parámetros del modelo. Reservado para integraciones personalizadas; no es llamado por el bucle de entrenamiento predeterminado.
teardownSe activa cuando se está limpiando el proceso de entrenamiento.

Callbacks del Validator#

CallbackDescripción
on_val_startSe activa cuando comienza la validación.
on_val_batch_startSe activa al inicio de cada lote de validación.
on_val_batch_endSe activa al final de cada lote de validación.
on_val_endSe activa cuando termina la validación.

Callbacks del Predictor#

CallbackDescripción
on_predict_startSe activa cuando comienza el proceso de predicción.
on_predict_batch_startSe activa al inicio de cada lote de predicción.
on_predict_postprocess_endSe activa al final del posprocesamiento de la predicción.
on_predict_batch_endSe activa al final de cada lote de predicción.
on_predict_endSe activa cuando termina el proceso de predicción.

Callbacks del Exporter#

CallbackDescripción
on_export_startSe activa cuando comienza el proceso de exportación.
on_export_endSe activa cuando termina el proceso de exportación.

FAQ#

  • Los callbacks de Ultralytics son puntos de entrada especializados que se activan durante etapas clave de las operaciones del modelo, como el entrenamiento, la validación, la exportación y la predicción. Estos callbacks permiten añadir funcionalidad personalizada en puntos específicos del proceso, posibilitando mejoras y modificaciones en el flujo de trabajo. Cada callback acepta un objeto Trainer, Validator o Predictor, según el tipo de operación. Para conocer las propiedades detalladas de estos objetos, consulta la sección de Referencia.

    Para utilizar un callback, define una función y añádela al modelo utilizando el método model.add_callback(). Aquí tienes un ejemplo de cómo devolver información adicional durante la predicción:

    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
  • Personaliza tu rutina de entrenamiento de Ultralytics inyectando lógica en etapas específicas del proceso de entrenamiento. Ultralytics YOLO ofrece una variedad de callbacks de entrenamiento, como on_train_start, on_train_end y on_train_batch_end, que te permiten añadir métricas, procesamiento o registro personalizados.

    Aquí te mostramos cómo congelar las estadísticas de BatchNorm al congelar capas con 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)

    Para obtener más detalles sobre cómo utilizar eficazmente los callbacks de entrenamiento, consulta la Guía de entrenamiento.

  • El uso de callbacks durante la validación en Ultralytics YOLO mejora la evaluación del modelo al permitir procesamiento personalizado, registro de datos o cálculo de métricas. Callbacks como on_val_start, on_val_batch_end y on_val_end proporcionan puntos de entrada para inyectar lógica personalizada, garantizando procesos de validación detallados y exhaustivos.

    Por ejemplo, para graficar todos los lotes de validación en lugar de solo los tres primeros:

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

    Para obtener más información sobre cómo incorporar callbacks en tu proceso de validación, consulta la Guía de validación.

  • Para adjuntar un callback personalizado para el modo de predicción en Ultralytics YOLO, define una función de callback y regístrala en el proceso de predicción. Los callbacks de predicción comunes incluyen on_predict_start, on_predict_batch_end y on_predict_end. Estos permiten la modificación de las salidas de predicción y la integración de funcionalidades adicionales, como el registro de datos o la transformación de resultados.

    Aquí tienes un ejemplo donde un callback personalizado guarda predicciones según si está presente un objeto de una clase particular:

    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

    Para un uso más exhaustivo, consulta la Guía de predicción, que incluye instrucciones detalladas y opciones de personalización adicionales.

  • Ultralytics YOLO admite varias implementaciones prácticas de callbacks para mejorar y personalizar diferentes fases como el entrenamiento, la validación y la predicción. Algunos ejemplos prácticos incluyen:

    • Registro de métricas personalizadas: Registra métricas adicionales en diferentes etapas, como al final de las épocas de entrenamiento o validación.
    • Aumento de datos: Implementa transformaciones o aumentos de datos personalizados durante lotes de predicción o entrenamiento.
    • Resultados intermedios: Guarda resultados intermedios, como predicciones o frames, para su posterior análisis o visualización.

    Ejemplo: Combinación de fotogramas con resultados de predicción durante la predicción utilizando 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

    Explora el código fuente de los callbacks para ver más opciones y ejemplos.

Comentarios