Ultralytics YOLO27:
Get Started

Расширенная настройка#

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



Смотри: Осваиваем Ultralytics YOLO: продвинутая настройка
Совет

Практические примеры распространённых настроек тренера — пользовательские метрики, функция потерь с весами классов, сохранение модели, заморозка базовой сети и скорость обучения для каждого слоя — см. в руководстве «Настройка тренера».

BaseTrainer#

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

  • get_model(cfg, weights): создаёт модель для обучения.
  • get_dataloader(dataset_path, batch_size, rank, mode): создаёт загрузчик данных.

Подробнее см. в справочнике BaseTrainer и исходном коде.

DetectionTrainer#

Вот как использовать и настраивать DetectionTrainer в Ultralytics YOLO:

from ultralytics.models.yolo.detect import DetectionTrainer

trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best  # Получить лучшую модель

Настройка DetectionTrainer#

Чтобы обучить пользовательскую модель обнаружения, которая не поддерживается напрямую, переопредели существующую функциональность get_model:

from ultralytics.models.yolo.detect import DetectionTrainer

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

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

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

from ultralytics.models.yolo.detect import DetectionTrainer
from ultralytics.nn.tasks import DetectionModel

class MyCustomModel(DetectionModel):
    def init_criterion(self):
        """Initializes a custom loss function for the model."""

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

# Обратный вызов для записи весов модели в журнал
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)  # Добавляет к существующим обратным вызовам
trainer.train()

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

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

Аналогичным образом настраивай другие компоненты, например Validators и Predictors. Подробнее см. документацию по валидаторам и предикторам.

Использование YOLO с пользовательскими тренерами#

Класс модели YOLO предоставляет высокоуровневую оболочку для классов тренеров. Используй эту архитектуру, чтобы сделать рабочие процессы машинного обучения более гибкими:

from ultralytics import YOLO
from ultralytics.models.yolo.detect import DetectionTrainer

# Создать пользовательский тренер
class MyCustomTrainer(DetectionTrainer):
    def get_model(self, cfg=None, weights=None, verbose=True):
        """Custom code implementation."""

# Инициализировать модель YOLO
model = YOLO("yolo26n.pt")

# Обучить с пользовательским тренером
results = model.train(trainer=MyCustomTrainer, data="coco8.yaml", epochs=3)

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

Часто задаваемые вопросы#

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

    from ultralytics.models.yolo.detect import DetectionTrainer
    
    class CustomTrainer(DetectionTrainer):
        def get_model(self, cfg=None, weights=None, verbose=True):
            """Loads a custom detection model given configuration and weight files."""
    
    trainer = CustomTrainer(overrides={...})
    trainer.train()
    trained_model = trainer.best  # Получить лучшую модель

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

  • BaseTrainer служит основой для процедур обучения. Его универсальные методы можно переопределять для адаптации к различным задачам. К основным компонентам относятся:

    • get_model(cfg, weights): создаёт модель для обучения.
    • get_dataloader(dataset_path, batch_size, rank, mode): создаёт загрузчик данных.
    • preprocess_batch(): обрабатывает пакет данных перед прямым проходом модели.
    • set_model_attributes(): задаёт атрибуты модели на основе информации о наборе данных.
    • get_validator(): возвращает валидатор для оценки модели.

    Подробнее о настройке и исходном коде см. в справочнике BaseTrainer.

  • Добавляй обратные вызовы в DetectionTrainer, чтобы отслеживать процесс обучения и влиять на него. Вот как добавить обратный вызов, который записывает веса модели в журнал после каждой эпохи обучения (epoch):

    from ultralytics.models.yolo.detect import DetectionTrainer
    
    # Обратный вызов для записи весов модели в журнал
    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)  # Добавляет к существующим обратным вызовам
    trainer.train()

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

  • Ultralytics YOLO предоставляет высокоуровневую абстракцию над мощными исполнителями движка, что делает её идеальной для быстрой разработки и настройки. Основные преимущества:

    • Простота использования: интерфейсы командной строки и Python упрощают решение сложных задач.
    • Производительность: оптимизировано для обнаружения объектов в реальном времени (object detection) и различных задач компьютерного зрения на основе ИИ.
    • Гибкость настройки: легко расширяется за счёт пользовательских моделей, функций потерь и загрузчиков данных.
    • Модульность: компоненты можно изменять независимо, не затрагивая весь конвейер.
    • Интеграция: легко интегрируется с популярными фреймворками и инструментами экосистемы ML.

    Узнай больше о возможностях YOLO на главной странице Ultralytics YOLO.

  • Да, DetectionTrainer отличается гибкостью и подходит для настройки под нестандартные модели. Унаследуй класс от DetectionTrainer и переопредели методы, чтобы учесть требования своей модели. Вот простой пример:

    from ultralytics.models.yolo.detect import DetectionTrainer
    
    class CustomDetectionTrainer(DetectionTrainer):
        def get_model(self, cfg=None, weights=None, verbose=True):
            """Loads a custom detection model."""
    
    trainer = CustomDetectionTrainer(overrides={...})
    trainer.train()

    Подробные инструкции и примеры см. в справочнике DetectionTrainer.

Комментарии