Перейти к содержимому

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

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

Ultralytics Фреймворк поддерживает обратные вызовы в качестве точек входа на стратегических этапах режимов train, val, export и predict. Каждый обратный вызов принимает Trainer, Validator, или Predictor объект в зависимости от типа операции. Все свойства этих объектов можно найти в разделе Reference в документации.



Смотри: Mastering Ultralytics YOLOv8 : Callbacks

Примеры

Возвращение дополнительной информации с помощью предсказания

В этом примере мы хотим вернуть оригинальный кадр с каждым объектом результата. Вот как мы можем это сделать

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("yolov8n.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("yolov8n.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("yolov8n.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("yolov8n.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("yolov8n.pt")
model.add_callback("on_predict_end", on_predict_end)
results = model.predict(source="image.jpg")

Для более полного использования обратись к руководству по предсказаниям, в котором есть подробные инструкции и дополнительные возможности настройки.

Какие есть практические примеры использования обратных вызовов в 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("yolov8n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

Изучи Complete Callback Reference, чтобы найти больше вариантов и примеров.



Создано 2023-11-12, Обновлено 2024-07-04
Авторы: glenn-jocher (9), RizwanMunawar (1), Laughing-q (1)

Комментарии