Эффективная настройка гиперпараметров с 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
# 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. Он принимает несколько аргументов, позволяющих настроить процесс настройки. Ниже приведено подробное описание каждого параметра:
| Параметр | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
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().
| Параметр | Диапазон | Описание |
|---|---|---|
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) | Вес компонента потерь BBox, регулирующий точность локализации модели. |
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) | Вес компонента регрессии расстояния до BBox, повышающий точность локализации BBox. |
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) | Диапазон аугментации перспективы, имитирующий изменения точки обзора в 3D. |
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
# 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 не указан, Ultralytics использует многомерный TPE Optuna с предложениями, учитывающими параллельное выполнение.
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.
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, нужно передать снова.
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 из каталога#
model.tune(use_ray=True) возвращает ResultGrid Ray и сохраняет эксперимент в 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 на странице Analyze Results, чтобы получить максимум от экспериментов по настройке гиперпараметров.
Часто задаваемые вопросы#
Чтобы настроить гиперпараметры своей модели 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 # 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.
-
Ultralytics YOLO26 использует следующие гиперпараметры по умолчанию для настройки с Ray Tune:
Параметр Диапазон значений Описание 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)Вес потерь BBox clstune.uniform(0.1, 4.0)Вес потерь классификации cls_pwtune.uniform(0.0, 1.0)Степень взвешивания классов dfltune.uniform(0.4, 12.0)Вес потерь расстояния до BBox 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 # Load YOLO model model = YOLO("yolo26n.pt") # Each Ray trial creates its own W&B run in this project 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)Это позволяет настроить диапазон перебираемых гиперпараметров, таких как начальная скорость обучения и импульс. Расширенные варианты конфигурации см. в разделе Пример пользовательского пространства поиска.