YOLO Vision 2026:

Расширенная кастомизация#

И командная строка 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.

Комментарии