Обратные вызовы
Обратные вызовы
Ultralytics Фреймворк поддерживает обратные вызовы в качестве точек входа на стратегических этапах режимов train, val, export и predict. Каждый обратный вызов принимает Trainer
, Validator
, или Predictor
объект в зависимости от типа операции. Все свойства этих объектов можно найти в разделе Reference документации.
Смотреть: Освоение Ultralytics YOLO : Обратные вызовы
Примеры
Возвращение дополнительной информации с помощью предсказания
В этом примере мы хотим вернуть исходный кадр с каждым объектом результата. Вот как мы можем это сделать
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
# 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
Все обратные вызовы
Здесь перечислены все поддерживаемые обратные вызовы. Дополнительные сведения см. в исходном коде callbacks.
Обратные вызовы тренера
Обратный звонок | Описание |
---|---|
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
объект, в зависимости от типа операции. Подробные свойства этих объектов см. в разделе Справочный раздел.
Чтобы использовать обратный вызов, вы можете определить функцию, а затем добавить ее в модель с помощью функции 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
. Они позволяют добавлять пользовательские метрики, обработку или протоколирование.
Вот пример того, как регистрировать дополнительные метрики в конце каждой эпохи обучения:
from ultralytics import YOLO
def on_train_epoch_end(trainer):
"""Custom logic for additional metrics logging at the end of each training epoch."""
additional_metric = compute_additional_metric(trainer)
trainer.log({"additional_metric": additional_metric})
model = YOLO("yolo11n.pt")
model.add_callback("on_train_epoch_end", on_train_epoch_end)
model.train(data="coco.yaml", epochs=10)
Подробнее о том, как эффективно использовать обратные вызовы для обучения, читайте в Руководстве по обучению.
Зачем использовать обратные вызовы при валидации в Ultralytics YOLO ?
Использование обратные вызовы во время проверки в Ultralytics YOLO могут улучшить оценку модели, позволяя выполнять пользовательскую обработку, протоколирование или расчет метрик. Обратные вызовы, такие как on_val_start
, on_val_batch_end
, и on_val_end
предоставляют точки входа для внедрения пользовательской логики, обеспечивая детальные и всесторонние процессы проверки.
Например, вы можете захотеть регистрировать дополнительные метрики проверки или сохранять промежуточные результаты для дальнейшего анализа. Вот пример того, как регистрировать пользовательские метрики в конце проверки:
from ultralytics import YOLO
def on_val_end(validator):
"""Log custom metrics at end of validation."""
custom_metric = compute_custom_metric(validator)
validator.log({"custom_metric": custom_metric})
model = YOLO("yolo11n.pt")
model.add_callback("on_val_end", on_val_end)
model.val(data="coco.yaml")
Ознакомьтесь с руководством по валидации, чтобы узнать больше о включении обратных вызовов в процесс валидации.
Как подключить пользовательский обратный вызов для режима прогнозирования в Ultralytics YOLO ?
Чтобы прикрепить пользовательский обратный вызов для режим прогнозирования в Ultralytics YOLO , вы определяете функцию обратного вызова и регистрируете ее в процессе предсказания. К распространенным обратным вызовам предсказания относятся on_predict_start
, on_predict_batch_end
, и on_predict_end
. Они позволяют модифицировать результаты прогнозирования и интегрировать дополнительные функции, такие как регистрация данных или преобразование результатов.
Вот пример, в котором для регистрации предсказаний используется пользовательский обратный вызов:
from ultralytics import YOLO
def on_predict_end(predictor):
"""Log predictions at the end of prediction."""
for result in predictor.results:
log_prediction(result)
model = YOLO("yolo11n.pt")
model.add_callback("on_predict_end", on_predict_end)
results = model.predict(source="image.jpg")
Для более полного использования обратитесь к Руководству по прогнозированию, которое содержит подробные инструкции и дополнительные возможности настройки.
Каковы практические примеры использования обратных вызовов в 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
Изучите Complete Callback Reference, чтобы найти больше вариантов и примеров.