Saltar para o conteúdo

Chamadas de retorno

Ultralytics framework suporta callbacks, que servem como pontos de entrada em fases estratégicas durante o train, val, exporte 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_ende on_train_batch_endque 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_ende 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_ende 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.

📅C riado há 1 ano ✏️ Atualizado há 10 dias

Comentários