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