Перейти к содержанию

Обратные вызовы

Обратные вызовы

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. Они позволяют добавлять пользовательские метрики, обработку или протоколирование.

Here's an example of how to freeze BatchNorm statistics when freezing layers with 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)

Подробнее о том, как эффективно использовать обратные вызовы для обучения, читайте в Руководстве по обучению.

Зачем использовать обратные вызовы при валидации в Ultralytics YOLO ?

Использование обратные вызовы во время проверки в Ultralytics YOLO могут улучшить оценку модели, позволяя выполнять пользовательскую обработку, протоколирование или расчет метрик. Обратные вызовы, такие как on_val_start, on_val_batch_end, и on_val_end предоставляют точки входа для внедрения пользовательской логики, обеспечивая детальные и всесторонние процессы проверки.

For instance, you might want to plot all the validation batches, instead of just the first 3. Here's how you can do that:

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. Они позволяют модифицировать результаты прогнозирования и интегрировать дополнительные функции, такие как регистрация данных или преобразование результатов.

Here is an example where a custom callback is used to save predictions based on whether an object of a particular class is present:

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 поддерживает различные практические реализации обратных вызовов для улучшения и настройки различных этапов, таких как обучение, проверка и предсказание. Некоторые практические примеры включают:

  1. Регистрация пользовательских метрик: Записывайте в журнал дополнительные метрики на разных этапах, например в конце эпохи обучения или проверки.
  2. Дополнение данных: Реализуйте пользовательские преобразования или дополнения данных во время прогнозирования или обучения.
  3. Промежуточные результаты: Сохраните промежуточные результаты, такие как прогнозы или рамки, для дальнейшего анализа или визуализации.

Пример: Объединение кадров с результатами предсказания во время предсказания с помощью 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, чтобы найти больше вариантов и примеров.

📅 Создано 1 год назад ✏️ Обновлено 16 дней назад

Комментарии