Расширенная настройка
Интерфейсы командной строки и Python в Ultralytics YOLO представляют собой высокоуровневые абстракции, построенные на базе движков исполнителей. В этом руководстве основное внимание уделяется движку Trainer, и объясняется, как настроить его под твои конкретные нужды.
Watch: Mastering Ultralytics YOLO: Advanced Customization
Практические примеры распространенных настроек тренера — пользовательские метрики, функция потерь с учетом весов классов, сохранение модели, заморозка бэкбона и скорость обучения для отдельных слоев — смотри в руководстве Customizing Trainer.
BaseTrainer
Класс BaseTrainer предоставляет универсальную процедуру обучения, адаптируемую для различных задач. Ты можешь настроить его, переопределив конкретные функции или операции, придерживаясь при этом требуемых форматов. Например, интегрируй свою собственную модель и загрузчик данных (dataloader), переопределив следующие функции:
get_model(cfg, weights): создает модель для обучения.get_dataloader(): создает загрузчик данных.
Более подробную информацию и исходный код ты найдешь в справочнике BaseTrainer Reference.
DetectionTrainer
Вот как использовать и настраивать DetectionTrainer в Ultralytics YOLO:
from ultralytics.models.yolo.detect import DetectionTrainer
trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best # Get the best modelНастройка 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()Далее настрой тренера, изменив функцию потерь или добавив callback для загрузки модели на Google Drive каждые 10 эпох. Вот пример:
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=None, weights=None, verbose=True):
"""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 callbacks
trainer.train()Более подробную информацию о событиях запуска callback и точках входа смотри в руководстве по обратным вызовам (Callbacks Guide).
Другие компоненты движка
Настраивай другие компоненты, такие как Validators и Predictors, аналогичным образом. Дополнительную информацию ты найдешь в документации к Validators и Predictors.
Использование YOLO с пользовательскими тренерами
Класс модели YOLO предоставляет высокоуровневую обертку для классов Trainer. Ты можешь использовать эту архитектуру для большей гибкости в своих процессах машинного обучения:
from ultralytics import YOLO
from ultralytics.models.yolo.detect import DetectionTrainer
# Create a custom trainer
class MyCustomTrainer(DetectionTrainer):
def get_model(self, cfg=None, weights=None, verbose=True):
"""Custom code implementation."""
...
# Initialize YOLO model
model = YOLO("yolo26n.pt")
# Train with custom trainer
results = model.train(trainer=MyCustomTrainer, data="coco8.yaml", epochs=3)Этот подход позволяет тебе сохранить простоту интерфейса YOLO, настраивая базовый процесс обучения под твои специфические требования.
Часто задаваемые вопросы (FAQ)
Как настроить Ultralytics YOLO DetectionTrainer для специфических задач?
Настраивай 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 # Get the best modelДля дальнейшей настройки, например, изменения функции потерь или добавления callback, обратись к руководству по обратным вызовам (Callbacks Guide).
Каковы ключевые компоненты BaseTrainer в Ultralytics YOLO?
BaseTrainer служит основой для процедур обучения, настраиваемой для различных задач путем переопределения его общих методов. К ключевым компонентам относятся:
get_model(cfg, weights): создает модель для обучения.get_dataloader(): создает загрузчик данных.preprocess_batch(): обрабатывает пакет (batch) перед прямым проходом модели.set_model_attributes(): задает атрибуты модели на основе информации о наборе данных.get_validator(): возвращает валидатор для оценки модели.
Более подробную информацию о настройке и исходный код ты найдешь в справочнике BaseTrainer Reference.
Как добавить callback в Ultralytics YOLO DetectionTrainer?
Добавляй callback для отслеживания и изменения процесса обучения в DetectionTrainer. Вот как добавить callback для сохранения весов модели после каждой эпохи обучения:
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()Более подробную информацию о событиях callback и точках входа ты найдешь в руководстве по обратным вызовам (Callbacks Guide).
Почему стоит использовать Ultralytics YOLO для обучения моделей?
Ultralytics YOLO предоставляет высокоуровневую абстракцию поверх мощных движков, что делает его идеальным для быстрой разработки и настройки. Основные преимущества включают:
- Простота использования: интерфейсы командной строки и Python упрощают сложные задачи.
- Производительность: оптимизировано для обнаружения объектов в реальном времени и различных приложений компьютерного зрения.
- Настраиваемость: легко расширяется для пользовательских моделей, функций потерь и загрузчиков данных.
- Модульность: компоненты могут быть изменены независимо без влияния на весь конвейер.
- Интеграция: легко работает с популярными фреймворками и инструментами в экосистеме ML.
Узнай больше о возможностях YOLO на основной странице Ultralytics YOLO.
Могу ли я использовать Ultralytics YOLO DetectionTrainer для нестандартных моделей?
Да, 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 Reference.