Эффективная настройка гиперпараметров с помощью Ray Tune и YOLO26#
Настройка гиперпараметров крайне важна для достижения максимальной производительности модели: для этого необходимо найти оптимальный набор гиперпараметров. Процесс включает запуск испытаний с разными гиперпараметрами и оценку результатов каждого испытания.
Ускорь настройку с помощью Ultralytics YOLO26 и Ray Tune#
Ultralytics YOLO26 использует Ray Tune для настройки гиперпараметров, упрощая оптимизацию гиперпараметров модели YOLO26. С помощью Ray Tune ты можешь использовать передовые стратегии поиска, параллельное выполнение и досрочную остановку, чтобы ускорить процесс настройки.
Ray Tune#
Ray Tune — это библиотека для настройки гиперпараметров, разработанная с учетом эффективности и гибкости. Она поддерживает различные стратегии поиска, параллельное выполнение и досрочную остановку, а также легко интегрируется с популярными платформами машинного обучения, включая Ultralytics YOLO26.
Интеграция с Weights & Biases#
YOLO26 также поддерживает необязательную интеграцию с Weights & Biases для мониторинга процесса настройки.
Установка#
Чтобы установить необходимые пакеты, выполни команду:
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]" optuna
# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=TrueИспользование#
from ultralytics import YOLO
# Загрузить модель YOLO26n
model = YOLO("yolo26n.pt")
# Начать настройку гиперпараметров для обучения YOLO26n на наборе данных COCO8
result_grid = model.tune(data="coco8.yaml", use_ray=True)Параметры метода tune()#
Метод tune() в YOLO26 предоставляет удобный интерфейс для настройки гиперпараметров с помощью Ray Tune. Он принимает несколько аргументов, позволяющих настроить процесс. Ниже подробно описан каждый параметр:
| Параметр | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
data | str | YAML-файл набора данных, для которого запускается настройщик. В нем указываются пути к обучающим и валидационным данным и другие параметры набора данных. Для классификации вместо этого укажи каталог набора данных или имя встроенного набора данных (например, imagenet10). | |
space | dict, optional | Словарь, задающий пространство поиска гиперпараметров для Ray Tune. Каждый ключ соответствует имени гиперпараметра, а значение задает диапазон значений для проверки в процессе настройки. Если этот параметр не указан, YOLO26 использует пространство поиска по умолчанию с различными гиперпараметрами. | |
grace_period | int, optional | Льготный период в эпохах для планировщика ASHA в Ray Tune. Планировщик не будет завершать испытания до истечения этого количества эпох, чтобы модель успела пройти минимальное обучение перед принятием решения о досрочной остановке. | 10 |
gpu_per_trial | int, optional | Количество GPU, выделяемых Ray для каждого испытания. Укажи это значение явно, чтобы использовать обучение на GPU; если параметр не указан, испытания не получат ресурсов GPU. | None |
iterations | int, optional | Максимальное количество испытаний, выполняемых в процессе настройки. Этот параметр позволяет ограничить общее число проверяемых комбинаций гиперпараметров и не допустить бесконечного выполнения настройки. | 300 |
search_alg | str or Searcher, optional | Стратегия поиска Ray Tune. Можно напрямую передать объект поискового алгоритма Ray или указать поддерживаемую строку, например optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax или random. Для поисковых алгоритмов, заданных строкой, автоматически используются метрика задачи по умолчанию и mode="max". По умолчанию используется многомерный TPE Optuna с параллельно-ориентированными рекомендациями. | "optuna" |
**train_args | dict, optional | Дополнительные аргументы, передаваемые методу train() во время настройки. К ним могут относиться такие параметры, как количество эпох обучения, размер пакета и другие настройки обучения. | {} |
Настраивая эти параметры, ты можешь адаптировать процесс оптимизации гиперпараметров под свои задачи и доступные вычислительные ресурсы.
Описание пространства поиска по умолчанию#
В следующей таблице перечислены параметры пространства поиска по умолчанию для настройки гиперпараметров YOLO26 с помощью Ray Tune. Для каждого параметра задан определенный диапазон значений tune.uniform(), кроме close_mosaic, в котором используется tune.randint().
| Параметр | Диапазон | Описание |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | Начальный темп обучения, определяющий размер шага при оптимизации. Более высокие значения ускоряют обучение, но могут привести к нестабильности. |
lrf | tune.uniform(0.01, 1.0) | Коэффициент конечного темпа обучения, определяющий, насколько снизится темп обучения к концу обучения. |
momentum | tune.uniform(0.7, 0.98) | Коэффициент импульса для оптимизатора, который помогает ускорить обучение и преодолеть локальные минимумы. |
weight_decay | tune.uniform(0.0, 0.001) | Параметр регуляризации, предотвращающий переобучение за счет штрафа за большие значения весов. |
warmup_epochs | tune.uniform(0.0, 5.0) | Количество эпох с постепенным увеличением темпа обучения для стабилизации начального этапа обучения. |
warmup_momentum | tune.uniform(0.0, 0.95) | Начальное значение импульса, которое постепенно увеличивается в период разогрева. |
box | tune.uniform(1.0, 20.0) | Вес компонента функции потерь для ограничивающей рамки, регулирующий точность локализации модели. |
cls | tune.uniform(0.1, 4.0) | Вес компонента функции потерь классификации, регулирующий точность предсказания классов моделью. |
cls_pw | tune.uniform(0.0, 1.0) | Степень взвешивания классов: от отключенного режима (0.0) до полного взвешивания, обратно пропорционального частоте (1.0). |
dfl | tune.uniform(0.4, 12.0) | Вес компонента регрессии расстояния до рамки, повышающий точность локализации ограничивающих рамок. |
hsv_h | tune.uniform(0.0, 0.1) | Диапазон аугментации оттенка, добавляющий вариативность цветов и помогающий модели лучше обобщать данные. |
hsv_s | tune.uniform(0.0, 0.9) | Диапазон аугментации насыщенности, изменяющий интенсивность цвета для повышения устойчивости. |
hsv_v | tune.uniform(0.0, 0.9) | Диапазон аугментации значения (яркости), помогающий модели работать при разном освещении. |
degrees | tune.uniform(0.0, 45.0) | Диапазон аугментации поворота в градусах, улучшающий распознавание повернутых объектов. |
translate | tune.uniform(0.0, 0.9) | Диапазон аугментации переноса, сдвигающей изображения по горизонтали и вертикали. |
scale | tune.uniform(0.0, 0.95) | Диапазон аугментации масштаба, имитирующей объекты на разных расстояниях. |
shear | tune.uniform(0.0, 10.0) | Диапазон аугментации сдвига по сдвигу в градусах, имитирующей изменения перспективы. |
perspective | tune.uniform(0.0, 0.001) | Диапазон аугментации перспективы, имитирующей изменения трехмерной точки зрения. |
flipud | tune.uniform(0.0, 1.0) | Вероятность вертикального отражения при аугментации, повышающая разнообразие набора данных. |
fliplr | tune.uniform(0.0, 1.0) | Вероятность горизонтального отражения при аугментации, полезная для симметричных объектов. |
bgr | tune.uniform(0.0, 1.0) | Вероятность аугментации с перестановкой каналов BGR, помогающей добиться инвариантности к цвету. |
mosaic | tune.uniform(0.0, 1.0) | Вероятность мозаичной аугментации, объединяющей четыре изображения в один обучающий пример. |
mixup | tune.uniform(0.0, 1.0) | Вероятность аугментации MixUp, объединяющей два изображения и их метки. |
cutmix | tune.uniform(0.0, 1.0) | Вероятность аугментации CutMix, объединяющей области изображений с сохранением локальных признаков. |
copy_paste | tune.uniform(0.0, 1.0) | В режиме flip — доля объектов, подходящих для копирования в изображение; в режиме mixup — также вероятность применения этой операции. |
close_mosaic | tune.randint(0, 11) | Отключает мозаику за последние N эпох, чтобы стабилизировать обучение перед его завершением. |
Пример пользовательского пространства поиска#
В этом примере показано, как задать пользовательское пространство поиска для настройки гиперпараметров с помощью Ray Tune и YOLO26. Пользовательское пространство поиска позволяет сосредоточить настройку на нужных гиперпараметрах.
from ray import tune
from ultralytics import YOLO
# Определение модели YOLO
model = YOLO("yolo26n.pt")
# Запустить Ray Tune для модели
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). Наконец, мы передаем дополнительные аргументы обучения, например количество эпох, непосредственно в метод настройки в виде epochs=50.
Пример алгоритма поиска#
Стратегию поиска Ray Tune можно выбрать по имени. Для алгоритмов поиска, заданных строкой, Ultralytics автоматически использует метрику оптимизации по умолчанию для текущей задачи и mode="max". Если search_alg не указан, Ultralytics использует многомерный TPE Optuna с параллельно-ориентированными рекомендациями.
from ultralytics import YOLO
# Определение модели YOLO
model = YOLO("yolo26n.pt")
result_grid = model.tune(
data="coco8.yaml",
epochs=50,
search_alg="optuna",
use_ray=True,
)Если тебе нужно настроить сэмплер поискового алгоритма или переопределить его метрику и режим оптимизации, передай экземпляр объекта поискового алгоритма Ray Tune вместо строки.
from ray.tune.search.optuna import OptunaSearch
from ultralytics import YOLO
# Определение модели YOLO
model = YOLO("yolo26n.pt")
# Определить поисковый алгоритм
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, необходимо передать снова.
from ultralytics import YOLO
# Определение модели YOLO
model = YOLO("yolo26n.pt")
# Возобновление предыдущего запуска
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)
# Возобновить запуск Ray Tune с именем '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 из каталога#
model.tune(use_ray=True) возвращает объект Ray ResultGrid и сохраняет эксперимент в runs/{task}/tune или в переданном тобой каталоге name. Чтобы загрузить результаты после завершения исходного скрипта, возобнови сеанс: это восстановит сохраненные испытания и вернет тот же ResultGrid:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
result_grid = model.tune(data="coco8.yaml", epochs=50, use_ray=True, resume=True)Базовый анализ на уровне эксперимента#
Получи обзор результатов испытаний. Ты можешь быстро проверить, возникали ли ошибки во время испытаний.
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["metrics/mAP50-95(B)"],
label=f"Trial {i}",
)
plt.xlabel("Training Iterations")
plt.ylabel("mAP50-95")
plt.legend()
plt.show()Итоги#
В этом руководстве мы рассмотрели распространенные сценарии анализа результатов экспериментов, проведенных с помощью Ray Tune и Ultralytics. Основные шаги: загрузить результаты эксперимента из каталога, выполнить базовый анализ на уровне эксперимента и испытаний, а также построить графики метрик.
Чтобы узнать больше о настройке гиперпараметров, изучи страницу документации Ray Tune «Анализ результатов».
Часто задаваемые вопросы#
Чтобы настроить гиперпараметры модели Ultralytics YOLO26 с помощью Ray Tune, выполни следующие шаги:
-
Установи необходимые пакеты:
pip install -U ultralytics "ray[tune]" optuna pip install wandb # optional for logging yolo settings wandb=True -
Загрузи модель YOLO26 и начни настройку:
from ultralytics import YOLO # Загрузи модель YOLO26 model = YOLO("yolo26n.pt") # Начать настройку на наборе данных COCO8 result_grid = model.tune(data="coco8.yaml", use_ray=True)
Для эффективной оптимизации гиперпараметров модели используются передовые стратегии поиска и параллельное выполнение Ray Tune. Подробнее см. в документации Ray Tune.
-
При настройке с помощью Ray Tune в Ultralytics YOLO26 по умолчанию используются следующие гиперпараметры:
Параметр Диапазон значений Описание lr0tune.uniform(1e-5, 1e-2)Начальный темп обучения lrftune.uniform(0.01, 1.0)Коэффициент конечного темпа обучения momentumtune.uniform(0.7, 0.98)Импульс weight_decaytune.uniform(0.0, 0.001)Затухание весов warmup_epochstune.uniform(0.0, 5.0)Эпохи разогрева boxtune.uniform(1.0, 20.0)Вес функции потерь для рамки clstune.uniform(0.1, 4.0)Вес функции потерь классификации cls_pwtune.uniform(0.0, 1.0)Степень взвешивания классов dfltune.uniform(0.4, 12.0)Вес функции потерь расстояния до рамки hsv_htune.uniform(0.0, 0.1)Диапазон аугментации оттенка translatetune.uniform(0.0, 0.9)Диапазон аугментации переноса Эти гиперпараметры можно настроить в соответствии с твоими задачами. Полный список и подробную информацию см. в руководстве по настройке гиперпараметров.
Чтобы интегрировать Weights & Biases (W&B) в процесс настройки Ultralytics YOLO26:
-
Установи W&B:
pip install wandb wandb login yolo settings wandb=True -
Запусти настройщик:
from ultralytics import YOLO # Загрузить модель YOLO model = YOLO("yolo26n.pt") # Каждый запуск Ray создает собственный запуск W&B в этом проекте result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)
Эта настройка позволит тебе отслеживать процесс подбора параметров, конфигурации гиперпараметров и визуализировать результаты в W&B.
-
Ray Tune предлагает множество преимуществ для оптимизации гиперпараметров:
- Продвинутые стратегии поиска: используются такие алгоритмы, как байесовская оптимизация и HyperOpt, для эффективного поиска параметров.
- Параллельное выполнение: поддерживает одновременное выполнение нескольких запусков, значительно ускоряя процесс подбора параметров.
- Ранняя остановка: применяет такие стратегии, как ASHA, чтобы досрочно завершать неэффективные запуски и экономить вычислительные ресурсы.
Ray Tune легко интегрируется с Ultralytics 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)Так ты задашь диапазоны исследуемых гиперпараметров, например начальной скорости обучения и момента импульса. Дополнительные варианты настройки смотри в разделе Пример пользовательского пространства поиска.