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

Продвинутая настройка

И интерфейсы Ultralytics YOLO командной строки, и Python - это просто высокоуровневая абстракция на базовых исполнителях движка. Давай посмотрим на движок Trainer.



Смотри: Mastering Ultralytics YOLOv8 : Advanced Customization

BaseTrainer

BaseTrainer содержит общую шаблонную процедуру обучения. Его можно настроить под любую задачу, переопределив нужные функции или операции, при условии соблюдения правильных форматов. Например, ты можешь поддерживать свою собственную модель и dataloader, просто переопределив эти функции:

  • get_model(cfg, weights) - Функция, которая строит обучаемую модель
  • get_dataloader() - Функция, которая строит dataloader Более подробную информацию и исходный код можно найти в BaseTrainer Ссылка

DetectionTrainer

Вот как ты можешь использовать YOLOv8 DetectionTrainer и настроить его под себя.

from ultralytics.models.yolo.detect import DetectionTrainer

trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best  # get best model

Настройка тренажера DetectionTrainer

Давай настроим тренера чтобы обучить пользовательскую модель обнаружения которые не поддерживаются напрямую. Ты можешь сделать это, просто перегрузив существующий get_model функциональность:

from ultralytics.models.yolo.detect import DetectionTrainer


class CustomTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        """Loads a custom detection model given configuration and weight files."""
        ...


trainer = CustomTrainer(overrides={...})
trainer.train()

Теперь ты понимаешь, что тебе нужно еще больше настроить тренера под себя:

  • Настройте loss function.
  • Добавь callback которая загружает модель на твой Google Drive после каждых 10 epochs Вот как ты можешь это сделать:
from ultralytics.models.yolo.detect import DetectionTrainer
from ultralytics.nn.tasks import DetectionModel


class MyCustomModel(DetectionModel):
    def init_criterion(self):
        """Initializes the loss function and adds a callback for uploading the model to Google Drive every 10 epochs."""
        ...


class CustomTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        """Returns a customized detection model instance configured with specified config and weights."""
        return MyCustomModel(...)


# callback to upload model weights
def log_model(trainer):
    """Logs the path of the last model weight used by the trainer."""
    last_weight_path = trainer.last
    print(last_weight_path)


trainer = CustomTrainer(overrides={...})
trainer.add_callback("on_train_epoch_end", log_model)  # Adds to existing callback
trainer.train()

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

Другие компоненты двигателя

Есть и другие компоненты, которые можно настроить аналогичным образом, например Validators и Predictors. Подробнее о них читай в разделе Reference.

ВОПРОСЫ И ОТВЕТЫ

Как настроить Ultralytics YOLOv8 DetectionTrainer для выполнения конкретных задач?

Чтобы настроить Ultralytics YOLOv8 DetectionTrainer для конкретной задачи, ты можешь переопределить его методы, чтобы адаптировать их к своей пользовательской модели и даталоадеру. Начни с наследования от DetectionTrainer а затем переопределить такие методы, как get_model чтобы реализовать свой пользовательский функционал. Вот пример:

from ultralytics.models.yolo.detect import DetectionTrainer


class CustomTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        """Loads a custom detection model given configuration and weight files."""
        ...


trainer = CustomTrainer(overrides={...})
trainer.train()
trained_model = trainer.best  # get best model

Для дальнейшей настройки, например, изменения loss function или добавить callbackТы можешь обратиться к нашему Руководство по обратным вызовам.

Каковы ключевые компоненты BaseTrainer в Ultralytics YOLOv8 ?

The BaseTrainer в Ultralytics YOLOv8 служит основой для тренировочных процедур и может быть настроен для различных задач путем переопределения его общих методов. Основные компоненты включают в себя:

  • get_model(cfg, weights) чтобы построить обучаемую модель.
  • get_dataloader() чтобы создать загрузчик данных.

Более подробную информацию о настройке и исходном коде см. BaseTrainer Ссылка.

Как добавить обратный вызов в Ultralytics YOLOv8 DetectionTrainer?

Ты можешь добавить обратные вызовы, чтобы контролировать и изменять процесс тренировки в Ultralytics YOLOv8 DetectionTrainer. Например, вот как ты можешь добавить обратный вызов для регистрации весов модели после каждой эпохи обучения:

from ultralytics.models.yolo.detect import DetectionTrainer


# callback to upload model weights
def log_model(trainer):
    """Logs the path of the last model weight used by the trainer."""
    last_weight_path = trainer.last
    print(last_weight_path)


trainer = DetectionTrainer(overrides={...})
trainer.add_callback("on_train_epoch_end", log_model)  # Adds to existing callbacks
trainer.train()

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

Почему мне стоит использовать Ultralytics YOLOv8 для обучения модели.

Ultralytics YOLOv8 предлагает высокоуровневую абстракцию на мощных исполнителях движка, что делает его идеальным для быстрой разработки и кастомизации. Ключевые преимущества включают в себя:

  • Простота использования: интерфейсы как командной строки, так и Python упрощают выполнение сложных задач.
  • Производительность: Оптимизирован для обнаружения объектов в реальном времени и различных приложений ИИ для зрения.
  • Персонализация: Легко расширяется для пользовательских моделей, функций потерь и загрузчиков данных.

Узнай больше о возможностях YOLOv8, посетив сайт Ultralytics YOLO.

Могу ли я использовать Ultralytics YOLOv8 DetectionTrainer для нестандартных моделей?

Да, Ultralytics YOLOv8 DetectionTrainer очень гибкий и может быть адаптирован под нестандартные модели. Наследуя от DetectionTrainerТы можешь перегружать различные методы, чтобы поддержать потребности конкретной модели. Вот простой пример:

from ultralytics.models.yolo.detect import DetectionTrainer


class CustomDetectionTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        """Loads a custom detection model."""
        ...


trainer = CustomDetectionTrainer(overrides={...})
trainer.train()

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



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

Комментарии