Meet YOLO26: next-gen vision AI.

Link to this sectionОбратные вызовы (Callbacks)#

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



Watch: How to use Ultralytics Callbacks | Predict, Train, Validate and Export Callbacks | Ultralytics YOLO🚀

Link to this sectionПримеры#

Link to this sectionВозврат дополнительной информации при предсказании#

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

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("yolo26n.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

Link to this sectionДоступ к метрикам модели с помощью обратного вызова on_model_save#

Этот пример показывает, как получить данные обучения, такие как показатель best_fitness, total_loss и другие метрики после сохранения контрольной точки с помощью обратного вызова on_model_save.

from ultralytics import YOLO

# Load a YOLO model
model = YOLO("yolo26n.pt")

def print_checkpoint_metrics(trainer):
    """Print trainer metrics and loss details after each checkpoint is saved."""
    print(
        f"Model details\n"
        f"Best fitness: {trainer.best_fitness}, "
        f"Loss names: {trainer.loss_names}, "  # List of loss names
        f"Metrics: {trainer.metrics}, "
        f"Total loss: {trainer.tloss}"  # Total loss value
    )

if __name__ == "__main__":
    # Add on_model_save callback.
    model.add_callback("on_model_save", print_checkpoint_metrics)

    # Run model training on custom dataset.
    results = model.train(data="coco8.yaml", epochs=3)

Link to this sectionВсе обратные вызовы#

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

Link to this sectionОбратные вызовы обучения (Trainer 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Запускается в конце каждой эпохи обучения, после обработки всех батчей, но перед валидацией. Метрики валидации и показатель fitness могут быть еще недоступны.
on_model_saveЗапускается при сохранении контрольной точки модели, после валидации.
on_fit_epoch_endЗапускается в конце каждой эпохи подгонки (обучение + валидация), после валидации и любого сохранения контрольной точки. Метрики валидации доступны, а показатель fitness доступен для вызова обучения за эпоху. Этот обратный вызов также вызывается во время финальной оценки лучшей модели, где сохранение контрольной точки не происходит и показатель fitness может отсутствовать.
on_train_endЗапускается, когда процесс обучения завершается, после финальной оценки лучшей модели.
on_params_updateЗапускается при обновлении параметров модели. Зарезервировано для пользовательских интеграций; не вызывается стандартным циклом обучения.
teardownЗапускается, когда процесс обучения завершается и происходит очистка ресурсов.

Link to this sectionОбратные вызовы валидации (Validator Callbacks)#

Обратный вызовОписание
on_val_startЗапускается при начале валидации.
on_val_batch_startЗапускается в начале каждого батча валидации.
on_val_batch_endЗапускается в конце каждого батча валидации.
on_val_endЗапускается, когда валидация завершается.

Link to this sectionОбратные вызовы предсказания (Predictor Callbacks)#

Обратный вызовОписание
on_predict_startЗапускается при начале процесса предсказания.
on_predict_batch_startЗапускается в начале каждого батча предсказания.
on_predict_postprocess_endЗапускается в конце пост-обработки предсказания.
on_predict_batch_endЗапускается в конце каждого батча предсказания.
on_predict_endЗапускается, когда процесс предсказания завершается.

Link to this sectionОбратные вызовы экспорта (Exporter Callbacks)#

Обратный вызовОписание
on_export_startЗапускается при начале процесса экспорта.
on_export_endЗапускается, когда процесс экспорта завершается.

Link to this sectionFAQ#

Link to this sectionЧто такое обратные вызовы 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("yolo26n.pt")
model.add_callback("on_predict_batch_end", on_predict_batch_end)
for result, frame in model.predict():
    pass

Link to this sectionКак настроить процедуру обучения 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("yolo26n.pt")
model.add_callback("on_train_epoch_start", put_in_eval_mode)
model.train(data="coco.yaml", epochs=10)

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

Link to this sectionЗачем использовать обратные вызовы во время валидации в 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("yolo26n.pt")
model.add_callback("on_val_batch_end", plot_samples)
model.val(data="coco.yaml")

Чтобы узнать больше о внедрении обратных вызовов в процесс валидации, смотри Руководство по валидации.

Link to this sectionКак подключить пользовательский обратный вызов для режима предсказания в Ultralytics YOLO?#

Чтобы подключить пользовательский обратный вызов для режима предсказания в Ultralytics YOLO, определи функцию обратного вызова и зарегистрируй ее в процессе предсказания. Общие обратные вызовы предсказания включают on_predict_start, on_predict_batch_end и on_predict_end. Они позволяют изменять результаты предсказания и интегрировать дополнительные функции, такие как логирование данных или преобразование результатов.

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

from ultralytics import YOLO

model = YOLO("yolo26n.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

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

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

Изучи исходный код обратных вызовов для получения дополнительных вариантов и примеров.

Комментарии