Эффективная настройка гиперпараметров с помощью Ray Tune и YOLO26

Настройка гиперпараметров жизненно важна для достижения максимальной производительности модели путем поиска оптимального набора гиперпараметров. Это включает в себя запуск пробных запусков с различными гиперпараметрами и оценку эффективности каждого из них.

Ускорение настройки с помощью Ultralytics YOLO26 и Ray Tune

Ultralytics YOLO26 включает Ray Tune для настройки гиперпараметров, оптимизируя процесс подбора гиперпараметров модели YOLO26. С помощью Ray Tune ты можешь использовать передовые стратегии поиска, параллелизм и раннюю остановку, чтобы ускорить процесс настройки.

Ray Tune

Ray Tune hyperparameter optimization workflow

Ray Tune — это библиотека для настройки гиперпараметров, разработанная для эффективности и гибкости. Она поддерживает различные стратегии поиска, параллелизм и методы ранней остановки, а также легко интегрируется с популярными фреймворками машинного обучения, включая Ultralytics YOLO26.

Интеграция с Weights & Biases

YOLO26 также позволяет опционально интегрироваться с Weights & Biases для мониторинга процесса настройки.

Установка

Чтобы установить необходимые пакеты, выполни:

Установка
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"

# Optionally install W&B for logging
pip install wandb

Использование

Использование
from ultralytics import YOLO

# Load a YOLO26n model
model = YOLO("yolo26n.pt")

# Start tuning hyperparameters for YOLO26n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)

Параметры метода tune()

Метод tune() в YOLO26 предоставляет простой в использовании интерфейс для настройки гиперпараметров с помощью Ray Tune. Он принимает несколько аргументов, которые позволяют тебе настроить процесс подбора. Ниже приведено подробное объяснение каждого параметра:

ПараметрТипОписаниеЗначение по умолчанию
datastrФайл конфигурации набора данных (в формате YAML) для запуска тюнера. В этом файле должны быть указаны пути к обучающим и валидационным данным, а также другие специфические настройки набора данных.
spacedict, optionalСловарь, определяющий пространство поиска гиперпараметров для Ray Tune. Каждый ключ соответствует имени гиперпараметра, а значение указывает диапазон значений для исследования во время настройки. Если не предоставлено, YOLO26 использует пространство поиска по умолчанию с различными гиперпараметрами.
grace_periodint, optionalПериод ожидания в эпохах для планировщика ASHA в Ray Tune. Планировщик не будет завершать пробный запуск до истечения этого количества эпох, позволяя модели пройти минимальное обучение перед принятием решения о ранней остановке.10
gpu_per_trialint, optionalКоличество GPU, выделяемых на один пробный запуск во время настройки. Это помогает управлять использованием GPU, особенно в средах с несколькими GPU. Если не предоставлено, тюнер будет использовать все доступные GPU.None
iterationsint, optionalМаксимальное количество пробных запусков во время настройки. Этот параметр помогает контролировать общее количество комбинаций гиперпараметров, обеспечивая, чтобы процесс настройки не выполнялся бесконечно.10
search_algstr or Searcher, optionalСтратегия поиска Ray Tune для использования. Ты можешь передать объект поисковика Ray напрямую или использовать поддерживаемую строку, такую как optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax или random. Строковые поисковики автоматически используют метрику задачи по умолчанию и mode="max". Если не предоставлено, Ray Tune использует свою стратегию случайного поиска по умолчанию, BasicVariantGenerator.None
**train_argsdict, optionalДополнительные аргументы для передачи в метод train() во время настройки. Эти аргументы могут включать настройки, такие как количество эпох обучения, размер батча и другие конфигурации обучения.{}

Настраивая эти параметры, ты можешь оптимизировать процесс подбора гиперпараметров в соответствии со своими специфическими потребностями и доступными вычислительными ресурсами.

Описание пространства поиска по умолчанию

В следующей таблице перечислены параметры пространства поиска по умолчанию для настройки гиперпараметров в YOLO26 с помощью Ray Tune. Каждый параметр имеет определенный диапазон значений, заданный tune.uniform().

ПараметрДиапазонОписание
lr0tune.uniform(1e-5, 1e-2)Начальная скорость обучения (learning rate), которая контролирует размер шага во время оптимизации. Более высокие значения ускоряют обучение, но могут вызвать нестабильность.
lrftune.uniform(0.01, 1.0)Фактор конечной скорости обучения, определяющий, насколько сильно скорость обучения уменьшается к концу обучения.
momentumtune.uniform(0.7, 0.98)Коэффициент импульса (momentum) для оптимизатора, который помогает ускорить обучение и преодолеть локальные минимумы.
weight_decaytune.uniform(0.0, 0.001)Параметр регуляризации, предотвращающий переобучение путем штрафования больших значений весов.
warmup_epochstune.uniform(0.0, 5.0)Количество эпох с постепенно увеличивающейся скоростью обучения для стабилизации начального обучения.
warmup_momentumtune.uniform(0.0, 0.95)Начальное значение импульса, которое постепенно увеличивается во время периода прогрева (warmup).
boxtune.uniform(1.0, 20.0)Вес компонента потерь ограничивающей рамки (bbox loss), балансирующий точность локализации в модели.
clstune.uniform(0.1, 4.0)Вес компонента потерь классификации, балансирующий точность предсказания классов в модели.
dfltune.uniform(0.4, 12.0)Вес компонента Distribution Focal Loss, подчеркивающий точную локализацию ограничивающей рамки.
hsv_htune.uniform(0.0, 0.1)Диапазон аугментации оттенка (hue), вводящий цветовое разнообразие, чтобы помочь модели лучше обобщать.
hsv_stune.uniform(0.0, 0.9)Диапазон аугментации насыщенности, изменяющий интенсивность цвета для повышения надежности.
hsv_vtune.uniform(0.0, 0.9)Диапазон аугментации значения (яркости), помогающий модели работать в различных условиях освещения.
degreestune.uniform(0.0, 45.0)Диапазон аугментации поворота в градусах, улучшающий распознавание повернутых объектов.
translatetune.uniform(0.0, 0.9)Диапазон аугментации трансляции (смещения), который сдвигает изображения по горизонтали и вертикали.
scaletune.uniform(0.0, 0.95)Диапазон аугментации масштабирования, имитирующий объекты на разных расстояниях.
sheartune.uniform(0.0, 10.0)Диапазон аугментации сдвига (shear) в градусах, имитирующий перспективные искажения.
perspectivetune.uniform(0.0, 0.001)Диапазон аугментации перспективы, имитирующий изменения точки обзора в 3D.
flipudtune.uniform(0.0, 1.0)Вероятность аугментации вертикального отражения, увеличивающая разнообразие набора данных.
fliplrtune.uniform(0.0, 1.0)Вероятность аугментации горизонтального отражения, полезная для симметричных объектов.
bgrtune.uniform(0.0, 1.0)Вероятность аугментации обмена каналов BGR, помогающая с цветовой инвариантностью.
mosaictune.uniform(0.0, 1.0)Вероятность аугментации Mosaic, которая объединяет четыре изображения в один обучающий пример.
mixuptune.uniform(0.0, 1.0)Вероятность аугментации Mixup, которая смешивает два изображения и их метки вместе.
cutmixtune.uniform(0.0, 1.0)Вероятность аугментации Cutmix, которая объединяет области изображений, сохраняя при этом локальные признаки.
copy_pastetune.uniform(0.0, 1.0)Вероятность аугментации Copy-paste, которая переносит объекты между изображениями для увеличения разнообразия экземпляров.
close_mosaictune.randint(0.0, 11)Отключает Mosaic в последних N эпохах для стабилизации обучения перед завершением.

Пример пользовательского пространства поиска

В этом примере мы демонстрируем, как использовать пользовательское пространство поиска для настройки гиперпараметров с Ray Tune и YOLO26. Предоставляя пользовательское пространство поиска, ты можешь сфокусировать процесс настройки на конкретных интересующих тебя гиперпараметрах.

Использование
from ray import tune

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Run Ray Tune on the model
result_grid = model.tune(
    data="coco8.yaml",
    space={"lr0": tune.uniform(1e-5, 1e-2)},
    epochs=50,
    use_ray=True,
)

В приведенном выше фрагменте кода мы создаем модель YOLO с предобученными весами "yolo26n.pt". Затем мы вызываем метод tune(), указывая конфигурацию набора данных с помощью "coco8.yaml". Мы предоставляем пользовательское пространство поиска для начальной скорости обучения lr0, используя словарь с ключом "lr0" и значением tune.uniform(1e-5, 1e-2). Наконец, мы передаем дополнительные аргументы обучения, такие как количество эпох, напрямую в метод tune как epochs=50.

Пример алгоритма поиска

Ты можешь выбрать стратегию поиска Ray Tune по имени. Для алгоритмов поиска на основе строк Ultralytics будет автоматически использовать метрику оптимизации по умолчанию текущей задачи и mode="max". Если search_alg не предоставлен, Ray Tune использует стратегию случайного поиска по умолчанию, BasicVariantGenerator.

Использование строкового параметра `search_alg` с `model.tune()`
from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg="optuna",
    use_ray=True,
)

Если тебе нужно настроить сэмплер поисковика или переопределить его метрику и режим оптимизации, передай экземпляр объекта поисковика Ray Tune вместо строки.

Использование объекта `OptunaSearch` с `model.tune()`
from ray.tune.search.optuna import OptunaSearch

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Define a searcher
searcher = OptunaSearch(
    metric="metrics/mAP50-95(B)",
    mode="max",
)

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg=searcher,
    use_ray=True,
)

Возобновление прерванного сеанса настройки гиперпараметров с помощью Ray Tune

Ты можешь возобновить прерванный сеанс Ray Tune, передав resume=True. Ты можешь опционально передать директорию name, используемую Ray Tune в runs/{task}, чтобы возобновить работу. В противном случае он возобновит последний прерванный сеанс. Тебе не нужно снова предоставлять iterations и space, но необходимо снова предоставить остальные аргументы обучения, включая data и epochs.

Использование `resume=True` вместе с `model.tune()`
from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Resume previous run
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)

# Resume Ray Tune run with name 'tune_exp_2'
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, name="tune_exp_2", resume=True)

Обработка результатов Ray Tune

После запуска эксперимента по настройке гиперпараметров с Ray Tune ты, возможно, захочешь выполнить различные анализы полученных результатов. Это руководство проведет тебя через общие рабочие процессы обработки и анализа этих результатов.

Загрузка результатов эксперимента Tune из директории

После запуска эксперимента по настройке с tuner.fit(), ты можешь загрузить результаты из директории. Это полезно, особенно если ты проводишь анализ после того, как исходный скрипт обучения завершил выполнение.

experiment_path = f"{storage_path}/{exp_name}"
print(f"Loading results from {experiment_path}...")

restored_tuner = tune.Tuner.restore(experiment_path, trainable=train_mnist)
result_grid = restored_tuner.get_results()

Базовый анализ на уровне эксперимента

Получи обзор того, как проходили пробные запуски. Ты можешь быстро проверить, были ли ошибки во время них.

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

Базовый анализ на уровне пробного запуска

Получи доступ к конфигурациям гиперпараметров отдельных пробных запусков и последним полученным метрикам.

for i, result in enumerate(result_grid):
    print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")

Построение графика полной истории зарегистрированных метрик для пробного запуска

Ты можешь построить график истории зарегистрированных метрик для каждого пробного запуска, чтобы увидеть, как метрики развивались с течением времени.

import matplotlib.pyplot as plt

for i, result in enumerate(result_grid):
    plt.plot(
        result.metrics_dataframe["training_iteration"],
        result.metrics_dataframe["mean_accuracy"],
        label=f"Trial {i}",
    )

plt.xlabel("Training Iterations")
plt.ylabel("Mean Accuracy")
plt.legend()
plt.show()

Резюме

В этом руководстве мы рассмотрели общие рабочие процессы анализа результатов экспериментов, запущенных с помощью Ray Tune и Ultralytics. Ключевые шаги включают загрузку результатов эксперимента из директории, выполнение базового анализа на уровне эксперимента и пробного запуска, а также построение графиков метрик.

Исследуй дальше, заглянув на страницу документации Ray Tune Анализ результатов, чтобы получить максимум от своих экспериментов по настройке гиперпараметров.

Часто задаваемые вопросы (FAQ)

Как мне настроить гиперпараметры моей модели YOLO26 с помощью Ray Tune?

Чтобы настроить гиперпараметры твоей модели Ultralytics YOLO26 с помощью Ray Tune, выполни следующие шаги:

  1. Установи необходимые пакеты:

    pip install -U ultralytics "ray[tune]"
    pip install wandb # optional for logging
  2. Загрузи свою модель YOLO26 и начни настройку:

    from ultralytics import YOLO
    
    # Load a YOLO26 model
    model = YOLO("yolo26n.pt")
    
    # Start tuning with the COCO8 dataset
    result_grid = model.tune(data="coco8.yaml", use_ray=True)

Это использует передовые стратегии поиска и параллелизм Ray Tune для эффективной оптимизации гиперпараметров твоей модели. Для получения дополнительной информации ознакомься с документацией Ray Tune.

Каковы гиперпараметры по умолчанию для настройки YOLO26 с помощью Ray Tune?

Ultralytics YOLO26 использует следующие гиперпараметры по умолчанию для настройки с помощью Ray Tune:

ПараметрДиапазон значенийОписание
lr0tune.uniform(1e-5, 1e-2)Начальная скорость обучения
lrftune.uniform(0.01, 1.0)Фактор конечной скорости обучения
momentumtune.uniform(0.7, 0.98)Импульс (momentum)
weight_decaytune.uniform(0.0, 0.001)Weight decay
warmup_epochstune.uniform(0.0, 5.0)Warmup epochs
boxtune.uniform(1.0, 20.0)Box loss weight
clstune.uniform(0.1, 4.0)Class loss weight
dfltune.uniform(0.4, 12.0)DFL loss weight
hsv_htune.uniform(0.0, 0.1)Hue augmentation range
translatetune.uniform(0.0, 0.9)Translation augmentation range

Ты можешь настроить эти гиперпараметры в соответствии со своими конкретными задачами. Полный список и подробную информацию ищи в руководстве по Hyperparameter Tuning.

Как интегрировать Weights & Biases в процесс настройки моей модели YOLO26?

Чтобы интегрировать Weights & Biases (W&B) в процесс настройки Ultralytics YOLO26:

  1. Установи W&B:

    pip install wandb
  2. Измени свой скрипт настройки:

    import wandb
    
    from ultralytics import YOLO
    
    wandb.init(project="YOLO-Tuning", entity="your-entity")
    
    # Load YOLO model
    model = YOLO("yolo26n.pt")
    
    # Tune hyperparameters
    result_grid = model.tune(data="coco8.yaml", use_ray=True)

Эта настройка позволит тебе отслеживать процесс тюнинга, записывать конфигурации гиперпараметров и визуализировать результаты в W&B.

Почему стоит использовать Ray Tune для оптимизации гиперпараметров с YOLO26?

Ray Tune предлагает множество преимуществ для оптимизации гиперпараметров:

  • Продвинутые стратегии поиска: использует такие алгоритмы, как Bayesian Optimization и HyperOpt для эффективного поиска параметров.
  • Параллелизм: поддерживает параллельное выполнение нескольких попыток, что значительно ускоряет процесс настройки.
  • Ранняя остановка: применяет такие стратегии, как ASHA, для преждевременного завершения неэффективных попыток, экономя вычислительные ресурсы.

Ray Tune легко интегрируется с Ultralytics YOLO26, предоставляя простой интерфейс для эффективной настройки гиперпараметров. Чтобы начать, ознакомься с руководством по Hyperparameter Tuning.

Как задать собственное пространство поиска для настройки гиперпараметров YOLO26?

Чтобы определить собственное пространство поиска для настройки гиперпараметров YOLO26 с помощью Ray Tune:

from ray import tune

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-2), "momentum": tune.uniform(0.7, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)

Это позволяет настроить диапазон гиперпараметров, таких как начальная скорость обучения (learning rate) и импульс (momentum), для исследования в процессе тюнинга. Дополнительные конфигурации смотри в разделе Custom Search Space Example.

Комментарии