Расширенная настройка#
Интерфейсы 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.