Chamadas de retorno
Ultralytics framework suporta callbacks, que servem como pontos de entrada em fases estratégicas durante o train
, val
, export
e predict
modos. Cada retorno de chamada aceita um Trainer
, Validator
, ou Predictor
dependendo do tipo de operação. Todas as propriedades desses objetos são detalhadas no Secção de referência da documentação.
Ver: Dominar Ultralytics YOLO : Callbacks
Exemplos
Retorno de informações adicionais com previsão
Neste exemplo, demonstramos como devolver a moldura original juntamente com 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("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 as chamadas de retorno
Abaixo estão todas as callbacks suportadas. Para mais pormenores, consulte o código-fonte das callbacks.
Chamadas do formador
Chamada de retorno | Descrição |
---|---|
on_pretrain_routine_start |
Acionado no início da rotina de pré-treino. |
on_pretrain_routine_end |
Acionado no final da rotina de pré-treino. |
on_train_start |
Acionado quando a formação começa. |
on_train_epoch_start |
Acionado no início de cada época de treino. |
on_train_batch_start |
Acionado no início de cada lote de treino. |
optimizer_step |
Acionado durante a etapa do optimizador. |
on_before_zero_grad |
Acionado antes de os gradientes serem colocados a zero. |
on_train_batch_end |
Acionado no final de cada lote de formação. |
on_train_epoch_end |
Acionado no final de cada época de treino. |
on_fit_epoch_end |
Acionado no final de cada época de ajuste. |
on_model_save |
Acionado quando o modelo é guardado. |
on_train_end |
Acionado quando o processo de formação termina. |
on_params_update |
Acionado quando os parâmetros do modelo são actualizados. |
teardown |
Acionado quando o processo de formação está a ser limpo. |
Repetições de validação
Chamada de retorno | Descrição |
---|---|
on_val_start |
Acionado quando a validação começa. |
on_val_batch_start |
Acionado no início de cada lote de validação. |
on_val_batch_end |
Acionado no final de cada lote de validação. |
on_val_end |
Acionado quando a validação termina. |
Chamadas de retorno do preditor
Chamada de retorno | Descrição |
---|---|
on_predict_start |
Acionado quando o processo de previsão é iniciado. |
on_predict_batch_start |
Acionado no início de cada lote de previsão. |
on_predict_postprocess_end |
Acionado no final do pós-processamento da previsão. |
on_predict_batch_end |
Acionado no final de cada lote de previsão. |
on_predict_end |
Acionado quando o processo de previsão termina. |
Chamadas de retorno do exportador
Chamada de retorno | Descrição |
---|---|
on_export_start |
Acionado quando o processo de exportação é iniciado. |
on_export_end |
Acionado quando o processo de exportação termina. |
FAQ
O que são as chamadas de retorno Ultralytics e como é que as posso utilizar?
As callbacks Ultralytics são pontos de entrada especializados que são acionados durante os principais estágios das operações do modelo, como treinamento, validação, exportação e previsão. Esses retornos de chamada possibilitam a funcionalidade personalizada em pontos específicos do processo, permitindo aprimoramentos e modificações no fluxo de trabalho. Cada retorno de chamada aceita um Trainer
, Validator
, ou Predictor
dependendo do tipo de operação. Para obter propriedades detalhadas desses objetos, consultar a Secção de referência.
Para usar um retorno de chamada, defina uma função e adicione-a ao modelo usando o model.add_callback()
método. Eis um exemplo de devolução de informações adicionais durante a previsão:
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
Como é que posso personalizar a rotina de formação Ultralytics utilizando as chamadas de retorno?
Personalize a sua rotina de treino Ultralytics injectando lógica em fases específicas do processo de treino. Ultralytics YOLO fornece uma variedade de callbacks de treino, tais como on_train_start
, on_train_end
e on_train_batch_end
que lhe permitem adicionar métricas, processamento ou registo personalizados.
Eis como congelar estatísticas BatchNorm ao congelar camadas com chamadas de retorno:
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 mais informações sobre como utilizar eficazmente as rechamadas de formação, consulte o Guia de Formação.
Por que razão devo utilizar as chamadas de retorno durante a validação em Ultralytics YOLO ?
A utilização de callbacks durante a validação no Ultralytics YOLO melhora a avaliação do modelo, permitindo o processamento personalizado, o registo ou o cálculo de métricas. Chamadas de retorno como on_val_start
, on_val_batch_end
e on_val_end
fornecem pontos de entrada para injetar lógica personalizada, assegurando processos de validação pormenorizados e abrangentes.
Por exemplo, para traçar todos os lotes de validação em vez de apenas os três primeiros:
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 obter mais informações sobre como incorporar callbacks no seu processo de validação, consulte o Guia de Validação.
Como posso anexar um retorno de chamada personalizado para o modo de previsão em Ultralytics YOLO ?
Para anexar uma chamada de retorno personalizada ao modo de previsão no Ultralytics YOLO, defina uma função de chamada de retorno e registe-a no processo de previsão. Os retornos de chamada de previsão comuns incluem on_predict_start
, on_predict_batch_end
e on_predict_end
. Estes permitem a modificação dos resultados da previsão e a integração de funcionalidades adicionais, como o registo de dados ou a transformação de resultados.
Eis um exemplo em que um retorno de chamada personalizado guarda previsões com base na presença ou não de um objeto de uma determinada classe:
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 uma utilização mais abrangente, consulte o Guia de Previsão, que inclui instruções detalhadas e opções de personalização adicionais.
Quais são alguns exemplos práticos de utilização de callbacks em Ultralytics YOLO ?
Ultralytics YOLO suporta várias implementações práticas de callbacks para melhorar e personalizar diferentes fases, como a formação, a validação e a previsão. Alguns exemplos práticos incluem:
- Registo de métricas personalizadas: Registre métricas adicionais em diferentes estágios, como no final de épocas de treinamento ou validação.
- Aumento de dados: Implementar transformações ou aumentos de dados personalizados durante a previsão ou os lotes de formação.
- Resultados intermediários: Guardar resultados intermédios, tais como previsões ou molduras, para análise ou visualização posterior.
Exemplo: Combinação de fotogramas com resultados de previsão durante a previsão 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("yolo11n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
pass
Explore o código-fonte do retorno de chamada para obter mais opções e exemplos.