Эффективная настройка гиперпараметров с помощью 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]"
# 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. Он принимает несколько аргументов, которые позволяют тебе настроить процесс подбора. Ниже приведено подробное объяснение каждого параметра:
| Параметр | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
data | str | Файл конфигурации набора данных (в формате YAML) для запуска тюнера. В этом файле должны быть указаны пути к обучающим и валидационным данным, а также другие специфические настройки набора данных. | |
space | dict, optional | Словарь, определяющий пространство поиска гиперпараметров для Ray Tune. Каждый ключ соответствует имени гиперпараметра, а значение указывает диапазон значений для исследования во время настройки. Если не предоставлено, YOLO26 использует пространство поиска по умолчанию с различными гиперпараметрами. | |
grace_period | int, optional | Период ожидания в эпохах для планировщика ASHA в Ray Tune. Планировщик не будет завершать пробный запуск до истечения этого количества эпох, позволяя модели пройти минимальное обучение перед принятием решения о ранней остановке. | 10 |
gpu_per_trial | int, optional | Количество GPU, выделяемых на один пробный запуск во время настройки. Это помогает управлять использованием GPU, особенно в средах с несколькими GPU. Если не предоставлено, тюнер будет использовать все доступные GPU. | None |
iterations | int, optional | Максимальное количество пробных запусков во время настройки. Этот параметр помогает контролировать общее количество комбинаций гиперпараметров, обеспечивая, чтобы процесс настройки не выполнялся бесконечно. | 10 |
search_alg | str or Searcher, optional | Стратегия поиска Ray Tune для использования. Ты можешь передать объект поисковика Ray напрямую или использовать поддерживаемую строку, такую как optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax или random. Строковые поисковики автоматически используют метрику задачи по умолчанию и mode="max". Если не предоставлено, Ray Tune использует свою стратегию случайного поиска по умолчанию, BasicVariantGenerator. | None |
**train_args | dict, optional | Дополнительные аргументы для передачи в метод train() во время настройки. Эти аргументы могут включать настройки, такие как количество эпох обучения, размер батча и другие конфигурации обучения. | {} |
Настраивая эти параметры, ты можешь оптимизировать процесс подбора гиперпараметров в соответствии со своими специфическими потребностями и доступными вычислительными ресурсами.
Описание пространства поиска по умолчанию
В следующей таблице перечислены параметры пространства поиска по умолчанию для настройки гиперпараметров в YOLO26 с помощью Ray Tune. Каждый параметр имеет определенный диапазон значений, заданный tune.uniform().
| Параметр | Диапазон | Описание |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | Начальная скорость обучения (learning rate), которая контролирует размер шага во время оптимизации. Более высокие значения ускоряют обучение, но могут вызвать нестабильность. |
lrf | tune.uniform(0.01, 1.0) | Фактор конечной скорости обучения, определяющий, насколько сильно скорость обучения уменьшается к концу обучения. |
momentum | tune.uniform(0.7, 0.98) | Коэффициент импульса (momentum) для оптимизатора, который помогает ускорить обучение и преодолеть локальные минимумы. |
weight_decay | tune.uniform(0.0, 0.001) | Параметр регуляризации, предотвращающий переобучение путем штрафования больших значений весов. |
warmup_epochs | tune.uniform(0.0, 5.0) | Количество эпох с постепенно увеличивающейся скоростью обучения для стабилизации начального обучения. |
warmup_momentum | tune.uniform(0.0, 0.95) | Начальное значение импульса, которое постепенно увеличивается во время периода прогрева (warmup). |
box | tune.uniform(1.0, 20.0) | Вес компонента потерь ограничивающей рамки (bbox loss), балансирующий точность локализации в модели. |
cls | tune.uniform(0.1, 4.0) | Вес компонента потерь классификации, балансирующий точность предсказания классов в модели. |
dfl | tune.uniform(0.4, 12.0) | Вес компонента Distribution Focal Loss, подчеркивающий точную локализацию ограничивающей рамки. |
hsv_h | tune.uniform(0.0, 0.1) | Диапазон аугментации оттенка (hue), вводящий цветовое разнообразие, чтобы помочь модели лучше обобщать. |
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) | Диапазон аугментации сдвига (shear) в градусах, имитирующий перспективные искажения. |
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) | Вероятность аугментации Mosaic, которая объединяет четыре изображения в один обучающий пример. |
mixup | tune.uniform(0.0, 1.0) | Вероятность аугментации Mixup, которая смешивает два изображения и их метки вместе. |
cutmix | tune.uniform(0.0, 1.0) | Вероятность аугментации Cutmix, которая объединяет области изображений, сохраняя при этом локальные признаки. |
copy_paste | tune.uniform(0.0, 1.0) | Вероятность аугментации Copy-paste, которая переносит объекты между изображениями для увеличения разнообразия экземпляров. |
close_mosaic | tune.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.
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 из директории
После запуска эксперимента по настройке с 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, выполни следующие шаги:
-
Установи необходимые пакеты:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging -
Загрузи свою модель 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:
| Параметр | Диапазон значений | Описание |
|---|---|---|
lr0 | tune.uniform(1e-5, 1e-2) | Начальная скорость обучения |
lrf | tune.uniform(0.01, 1.0) | Фактор конечной скорости обучения |
momentum | tune.uniform(0.7, 0.98) | Импульс (momentum) |
weight_decay | tune.uniform(0.0, 0.001) | Weight decay |
warmup_epochs | tune.uniform(0.0, 5.0) | Warmup epochs |
box | tune.uniform(1.0, 20.0) | Box loss weight |
cls | tune.uniform(0.1, 4.0) | Class loss weight |
dfl | tune.uniform(0.4, 12.0) | DFL loss weight |
hsv_h | tune.uniform(0.0, 0.1) | Hue augmentation range |
translate | tune.uniform(0.0, 0.9) | Translation augmentation range |
Ты можешь настроить эти гиперпараметры в соответствии со своими конкретными задачами. Полный список и подробную информацию ищи в руководстве по Hyperparameter Tuning.
Как интегрировать Weights & Biases в процесс настройки моей модели YOLO26?
Чтобы интегрировать Weights & Biases (W&B) в процесс настройки Ultralytics YOLO26:
-
Установи W&B:
pip install wandb -
Измени свой скрипт настройки:
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.