Расширенная кастомизация#
И командная строка Ultralytics YOLO, и интерфейсы Python представляют собой высокоуровневые абстракции, созданные на базе исполнителей базового движка. В этом руководстве рассматривается движок Trainer, и объясняется, как настроить его под твои конкретные задачи.
Watch: Mastering Ultralytics YOLO: Advanced Customization
Практические примеры распространенных настроек тренера — пользовательских метрик, взвешенной по классам функции потерь, сохранения моделей, заморозки бэкбона и послойной скорости обучения — см. в руководстве Customizing Trainer.
BaseTrainer#
Класс BaseTrainer предоставляет универсальную процедуру обучения, адаптируемую для различных задач. Настрой её, переопределив конкретные функции или операции с соблюдением требуемых форматов. Например, интегрируй свою собственную модель и даталоадер, переопределив следующие функции:
get_model(cfg, weights): Собирает модель для обучения.get_dataloader(): Собирает даталоадер.
Подробности и исходный код см. в разделе Справочник BaseTrainer.
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()Дополнительно настрой тренер, изменив функцию потерь или добавив колбэк для выгрузки модели на 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()Подробную информацию о событиях активации колбэков и точках входа см. в Руководстве по колбэкам.
Другие компоненты движка#
Аналогичным образом настраивай и другие компоненты, такие как 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#
Настрой
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Для дальнейшей кастомизации, например, изменения функции потерь или добавления колбэка, обратись к Руководству по колбэкам.
BaseTrainerслужит основой для процедур обучения, настраиваемых под различные задачи путем переопределения его универсальных методов. Ключевые компоненты включают:get_model(cfg, weights): Собирает модель для обучения.get_dataloader(): Собирает даталоадер.preprocess_batch(): Управляет предварительной обработкой батча перед прямым проходом модели.set_model_attributes(): Устанавливает атрибуты модели на основе информации о датасете.get_validator(): Возвращает валидатор для оценки модели.
Подробности о кастомизации и исходный код см. в разделе Справочник
BaseTrainer.Добавляй колбэки для мониторинга и изменения процесса обучения в
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 YOLO предоставляет высокоуровневую абстракцию поверх мощных исполнителей движка, что делает его идеальным для быстрой разработки и кастомизации. К ключевым преимуществам относятся:
- Простота использования: интерфейсы командной строки и Python упрощают сложные задачи.
- Производительность: Оптимизировано для детектирования объектов в реальном времени и различных задач компьютерного зрения с ИИ.
- Кастомизация: Легко расширяется для кастомных моделей, функций потерь и даталоадеров.
- Модульность: компоненты можно модифицировать независимо друг от друга, не затрагивая весь конвейер.
- Интеграция: бесшовная работа с популярными фреймворками и инструментами в экосистеме 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.