Devoluciones de llamada
El marco de Ultralytics admite callbacks, que sirven como puntos de entrada en etapas estratégicas durante el train
, val
, export
y predict
modos. Cada devolución de llamada acepta un Trainer
, Validator
o Predictor
en función del tipo de operación. Todas las propiedades de estos objetos se detallan en el Sección de referencia de la documentación.
Observa: Dominio de Ultralytics YOLO : Devoluciones de llamada
Ejemplos
Devolución de información adicional con predicción
En este ejemplo, demostramos cómo devolver el fotograma original junto con cada objeto resultante:
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
Todas las devoluciones de llamada
A continuación se muestran todas las callbacks soportadas. Para más detalles, consulte el código fuente de las llamadas de retorno.
Llamadas de los formadores
Devolución de llamada | Descripción |
---|---|
on_pretrain_routine_start |
Se activa al inicio de la rutina de preentrenamiento. |
on_pretrain_routine_end |
Se activa al final de la rutina de preentrenamiento. |
on_train_start |
Se activa cuando comienza el entrenamiento. |
on_train_epoch_start |
Se activa al comienzo de cada período de entrenamiento. |
on_train_batch_start |
Se activa al inicio de cada lote de entrenamiento. |
optimizer_step |
Se activa durante el paso del optimizador. |
on_before_zero_grad |
Se activa antes de poner a cero los gradientes. |
on_train_batch_end |
Se activa al final de cada lote de entrenamiento. |
on_train_epoch_end |
Se activa al final de cada período de entrenamiento. |
on_fit_epoch_end |
Se activa al final de cada época de ajuste. |
on_model_save |
Se activa cuando se guarda el modelo. |
on_train_end |
Se activa cuando finaliza el proceso de entrenamiento. |
on_params_update |
Se activa cuando se actualizan los parámetros del modelo. |
teardown |
Se activa cuando se está limpiando el proceso de formación. |
Devoluciones de llamada del validador
Devolución de llamada | Descripción |
---|---|
on_val_start |
Se activa cuando comienza la validación. |
on_val_batch_start |
Se activa al inicio de cada lote de validación. |
on_val_batch_end |
Se activa al final de cada lote de validación. |
on_val_end |
Se activa cuando finaliza la validación. |
Devoluciones de predictor
Devolución de llamada | Descripción |
---|---|
on_predict_start |
Se activa cuando se inicia el proceso de predicción. |
on_predict_batch_start |
Se activa al inicio de cada lote de predicción. |
on_predict_postprocess_end |
Se activa al final del postprocesamiento de predicciones. |
on_predict_batch_end |
Se activa al final de cada lote de predicción. |
on_predict_end |
Se activa cuando finaliza el proceso de predicción. |
Llamadas de retorno del exportador
Devolución de llamada | Descripción |
---|---|
on_export_start |
Se activa cuando se inicia el proceso de exportación. |
on_export_end |
Se activa cuando finaliza el proceso de exportación. |
PREGUNTAS FRECUENTES
¿Qué son las retrollamadas de Ultralytics y cómo puedo utilizarlas?
Los callbacks de Ultralytics son puntos de entrada especializados que se activan durante las etapas clave de las operaciones del modelo, como la formación, la validación, la exportación y la predicción. Estas retrollamadas habilitan funcionalidades personalizadas en puntos específicos del proceso, permitiendo mejoras y modificaciones en el flujo de trabajo. Cada llamada de retorno acepta un Trainer
, Validator
o Predictor
en función del tipo de operación. Para conocer las propiedades detalladas de estos objetos, consulte la sección Sección de referencia.
Para utilizar una devolución de llamada, defina una función y añádala al modelo mediante la función model.add_callback()
método. He aquí un ejemplo de devolución de 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("yolo11n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
pass
¿Cómo puedo personalizar la rutina de entrenamiento Ultralytics mediante callbacks?
Personalice su rutina de entrenamiento Ultralytics inyectando lógica en etapas específicas del proceso de entrenamiento. Ultralytics YOLO proporciona una variedad de callbacks de entrenamiento, tales como on_train_start
, on_train_end
y on_train_batch_end
que permiten añadir métricas, procesamientos o registros personalizados.
A continuación se explica 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("yolo11n.pt")
model.add_callback("on_train_epoch_start", put_in_eval_mode)
model.train(data="coco.yaml", epochs=10)
Para obtener más información sobre el uso eficaz de las retrollamadas de formación, consulte la Guía de formación.
¿Por qué debo utilizar callbacks durante la validación en Ultralytics YOLO ?
El uso de callbacks durante la validación en Ultralytics YOLO mejora la evaluación del modelo al permitir el procesamiento personalizado, el registro o el cálculo de métricas. Devoluciones de llamada 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 trazar todos los lotes de validación en lugar de sólo 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("yolo11n.pt")
model.add_callback("on_val_batch_end", plot_samples)
model.val(data="coco.yaml")
Para obtener más información sobre la incorporación de devoluciones de llamada en el proceso de validación, consulte la Guía de validación.
¿Cómo puedo adjuntar una llamada de retorno personalizada para el modo de predicción en Ultralytics YOLO ?
Para adjuntar una llamada de retorno personalizada para el modo de predicción en Ultralytics YOLO, defina una función de llamada de retorno y regístrela con el proceso de predicción. Los callbacks de predicción más comunes son on_predict_start
, on_predict_batch_end
y on_predict_end
. Permiten modificar los resultados de las predicciones e integrar funcionalidades adicionales, como el registro de datos o la transformación de resultados.
Este es un ejemplo donde un callback personalizado guarda predicciones basadas en si un objeto de una clase en particular está presente:
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
Para un uso más exhaustivo, consulte la Guía de predicción, que incluye instrucciones detalladas y opciones de personalización adicionales.
¿Cuáles son algunos ejemplos prácticos del uso de callbacks en Ultralytics YOLO ?
Ultralytics YOLO soporta 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 son:
- 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: Implemente transformaciones o aumentos de datos personalizados durante la predicción o los lotes de entrenamiento.
- Resultados intermedios: Guarda resultados intermedios, como predicciones o fotogramas, para su posterior análisis o visualización.
Ejemplo: Combinación de fotogramas con resultados de predicción durante la predicción mediante 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
Explore el código fuente de la llamada de retorno para ver más opciones y ejemplos.