Обратные вызовы
Фреймворк Ultralytics поддерживает обратные вызовы, которые служат точками входа на стратегических этапах во время train
, val
, export
, и predict
режимы. Каждый обратный вызов принимает Trainer
, Validator
, или Predictor
объект, в зависимости от типа операции. Все свойства этих объектов подробно описаны в разделе Справочный раздел документации.
Смотреть: Освоение Ultralytics YOLO : Обратные вызовы
Примеры
Возвращение дополнительной информации с предсказанием
В этом примере мы покажем, как вернуть исходный кадр вместе с каждым объектом результата:
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
Все обратные вызовы
Ниже перечислены все поддерживаемые обратные вызовы. Для получения более подробной информации обратитесь к исходному коду обратных вызовов.
Обратные вызовы тренера
Обратный звонок | Описание |
---|---|
on_pretrain_routine_start |
Срабатывает в начале предтренировочной процедуры. |
on_pretrain_routine_end |
Срабатывает по окончании предтренировочной процедуры. |
on_train_start |
Срабатывает, когда начинается обучение. |
on_train_epoch_start |
Срабатывает в начале каждой эпохи обучения. |
on_train_batch_start |
Срабатывает в начале каждой обучающей партии. |
optimizer_step |
Срабатывает во время шага оптимизатора. |
on_before_zero_grad |
Срабатывает перед обнулением градиентов. |
on_train_batch_end |
Срабатывает в конце каждой обучающей партии. |
on_train_epoch_end |
Срабатывает в конце каждой эпохи обучения. |
on_fit_epoch_end |
Срабатывает в конце каждой эпохи подгонки. |
on_model_save |
Срабатывает при сохранении модели. |
on_train_end |
Срабатывает по окончании процесса обучения. |
on_params_update |
Срабатывает при обновлении параметров модели. |
teardown |
Срабатывает при очистке процесса обучения. |
Обратные вызовы валидатора
Обратный звонок | Описание |
---|---|
on_val_start |
Срабатывает, когда начинается валидация. |
on_val_batch_start |
Срабатывает в начале каждой партии проверки. |
on_val_batch_end |
Срабатывает в конце каждой партии проверки. |
on_val_end |
Срабатывает по окончании проверки. |
Обратные вызовы предикторов
Обратный звонок | Описание |
---|---|
on_predict_start |
Срабатывает, когда начинается процесс предсказания. |
on_predict_batch_start |
Срабатывает в начале каждой партии предсказаний. |
on_predict_postprocess_end |
Срабатывает по окончании постобработки прогноза. |
on_predict_batch_end |
Срабатывает в конце каждой партии предсказаний. |
on_predict_end |
Срабатывает, когда процесс предсказания заканчивается. |
Обратные вызовы экспортера
Обратный звонок | Описание |
---|---|
on_export_start |
Срабатывает, когда начинается процесс экспорта. |
on_export_end |
Срабатывает при завершении процесса экспорта. |
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Что такое обратные вызовы Ultralytics и как их использовать?
Обратные вызовы Ultralytics - это специализированные точки входа, которые запускаются на ключевых этапах работы модели, таких как обучение, валидация, экспорт и прогнозирование. Эти обратные вызовы позволяют реализовать пользовательскую функциональность в определенных точках процесса, что позволяет расширить и изменить рабочий процесс. Каждый обратный вызов принимает Trainer
, Validator
, или Predictor
объект, в зависимости от типа операции. Подробные свойства этих объектов см. в разделе Справочный раздел.
Чтобы использовать обратный вызов, определите функцию и добавьте ее в модель с помощью model.add_callback()
метод. Вот пример возврата дополнительной информации во время предсказания:
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
Как настроить учебную процедуру Ultralytics с помощью обратных вызовов?
Настройте свою тренировочную программу Ultralytics , внедряя логику на определенных этапах процесса обучения. Ultralytics YOLO предоставляет разнообразные обратные вызовы для обучения, такие как on_train_start
, on_train_end
, и on_train_batch_end
которые позволяют добавлять пользовательские метрики, обработку или протоколирование.
Вот как заморозить статистику BatchNorm при замораживании слоев с помощью обратных вызовов:
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)
Более подробную информацию об эффективном использовании обратных вызовов для обучения см. в Руководстве по обучению.
Зачем использовать обратные вызовы при валидации в Ultralytics YOLO ?
Использование обратных вызовов при проверке в Ultralytics YOLO улучшает оценку модели, позволяя выполнять пользовательскую обработку, протоколирование или расчет метрик. Такие обратные вызовы, как on_val_start
, on_val_batch_end
, и on_val_end
предоставляют точки входа для внедрения пользовательской логики, обеспечивая детальные и всесторонние процессы проверки.
Например, чтобы построить график всех партий проверки, а не только первых трех:
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")
О том, как включить обратные вызовы в процесс проверки, читайте в руководстве по проверке.
Как подключить пользовательский обратный вызов для режима прогнозирования в Ultralytics YOLO ?
Чтобы прикрепить пользовательский обратный вызов для режима прогнозирования в Ultralytics YOLO, определите функцию обратного вызова и зарегистрируйте ее в процессе прогнозирования. К распространенным обратным вызовам прогнозирования относятся on_predict_start
, on_predict_batch_end
, и on_predict_end
. Они позволяют изменять результаты прогнозирования и интегрировать дополнительные функции, такие как регистрация данных или преобразование результатов.
Вот пример, в котором пользовательский обратный вызов сохраняет предсказания, основанные на наличии объекта определенного класса:
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
Для более полного использования обратитесь к Руководству по прогнозированию, в котором содержатся подробные инструкции и дополнительные возможности настройки.
Каковы практические примеры использования обратных вызовов в Ultralytics YOLO ?
Ultralytics YOLO поддерживает различные практические реализации обратных вызовов для улучшения и настройки различных этапов, таких как обучение, проверка и предсказание. Некоторые практические примеры включают:
- Регистрация пользовательских метрик: Записывайте в журнал дополнительные метрики на разных этапах, например в конце эпох обучения или проверки.
- Дополнение данных: Реализуйте пользовательские преобразования или дополнения данных во время прогнозирования или обучения.
- Промежуточные результаты: Сохраните промежуточные результаты, такие как прогнозы или рамки, для дальнейшего анализа или визуализации.
Пример: Объединение кадров с результатами предсказания во время предсказания с помощью 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
Изучите исходный код обратного вызова для получения дополнительных возможностей и примеров.