Link to this sectionЭффективная настройка гиперпараметров с помощью Ray Tune и YOLO26#
Настройка гиперпараметров жизненно важна для достижения максимальной производительности модели за счет обнаружения оптимального набора гиперпараметров. Это включает в себя выполнение пробных запусков с различными гиперпараметрами и оценку производительности каждого из них.
Link to this sectionУскорь настройку с Ultralytics YOLO26 и Ray Tune#
Ultralytics YOLO26 включает Ray Tune для настройки гиперпараметров, оптимизируя процесс подбора параметров модели YOLO26. С помощью Ray Tune ты можешь использовать передовые стратегии поиска, параллелизм и раннюю остановку, чтобы ускорить процесс настройки.
Link to this sectionRay Tune#
Ray Tune — это библиотека для настройки гиперпараметров, разработанная для эффективности и гибкости. Она поддерживает различные стратегии поиска, параллелизм и методы ранней остановки, а также легко интегрируется с популярными фреймворками машинного обучения, включая Ultralytics YOLO26.
Link to this sectionИнтеграция с Weights & Biases#
YOLO26 также поддерживает опциональную интеграцию с Weights & Biases для мониторинга процесса настройки.
Link to this sectionУстановка#
Чтобы установить необходимые пакеты, выполни:
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"
# Optionally install W&B for logging
pip install wandbLink to this sectionИспользование#
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)Link to this sectionПараметры метода 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. | 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() во время настройки. Эти аргументы могут включать такие настройки, как количество эпох обучения, размер пакета (batch size) и другие конфигурации обучения. | {} |
Настраивая эти параметры, ты можешь доработать процесс оптимизации гиперпараметров под свои конкретные нужды и доступные вычислительные ресурсы.
Link to this sectionОписание пространства поиска по умолчанию#
В следующей таблице перечислены параметры пространства поиска по умолчанию для настройки гиперпараметров в 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) | Начальное значение инерции, которое постепенно увеличивается в период прогрева. |
box | tune.uniform(1.0, 20.0) | Вес компонента функции потерь ограничивающей рамки (BBox), балансирующий точность локализации в модели. |
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) | Диапазон аугментации яркости (value), который помогает модели работать в различных условиях освещения. |
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) | Вероятность аугментации «копировать-вставить» (copy-paste), которая переносит объекты между изображениями для увеличения разнообразия экземпляров. |
close_mosaic | tune.randint(0, 11) | Отключает мозаику в последних N эпохах для стабилизации обучения перед завершением. |
Link to this sectionПример пользовательского пространства поиска#
В этом примере мы демонстрируем, как использовать пользовательское пространство поиска для настройки гиперпараметров с помощью 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.
Link to this sectionПример алгоритма поиска#
Ты можешь выбрать стратегию поиска 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,
)Link to this sectionВозобновление прерванного сеанса настройки гиперпараметров с помощью 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)Link to this sectionОбработка результатов Ray Tune#
После проведения эксперимента по настройке гиперпараметров с помощью Ray Tune ты, возможно, захочешь выполнить различные анализы полученных результатов. Это руководство поможет тебе ознакомиться с общими рабочими процессами обработки и анализа таких результатов.
Link to this sectionЗагрузка результатов эксперимента 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()Link to this sectionБазовый анализ на уровне эксперимента#
Получи обзор того, как прошли испытания. Ты можешь быстро проверить, были ли ошибки во время выполнения испытаний.
if result_grid.errors:
print("One or more trials failed!")
else:
print("No errors!")Link to this sectionБазовый анализ на уровне испытания#
Получи доступ к конфигурациям гиперпараметров отдельных испытаний и последним зарегистрированным метрикам.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")Link to this sectionПостроение графика всей истории зарегистрированных метрик для испытания#
Ты можешь построить график истории зарегистрированных метрик для каждого испытания, чтобы увидеть, как метрики менялись с течением времени.
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()Link to this sectionРезюме#
В этом руководстве мы рассмотрели общие рабочие процессы для анализа результатов экспериментов, запущенных с помощью Ray Tune и Ultralytics. Основные шаги включают загрузку результатов эксперимента из директории, выполнение базового анализа на уровне эксперимента и испытания, а также построение графиков метрик.
Узнай больше, посетив страницу документации Ray Tune Analyze Results, чтобы получить максимум от своих экспериментов по настройке гиперпараметров.
Link to this sectionFAQ#
Link to this sectionКак настроить гиперпараметры моей модели 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.
Link to this sectionКакие гиперпараметры по умолчанию используются для настройки 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) | Коэффициент затухания весов |
warmup_epochs | tune.uniform(0.0, 5.0) | Эпохи разминки (Warmup epochs) |
box | tune.uniform(1.0, 20.0) | Вес функции потерь BBox |
cls | tune.uniform(0.1, 4.0) | Вес функции потерь классов |
dfl | tune.uniform(0.4, 12.0) | Вес функции потерь DFL |
hsv_h | tune.uniform(0.0, 0.1) | Диапазон аугментации оттенка (Hue) |
translate | tune.uniform(0.0, 0.9) | Диапазон аугментации смещения (Translation) |
Эти гиперпараметры можно настроить под твои специфические нужды. Полный список и подробности см. в руководстве Hyperparameter Tuning.
Link to this sectionКак я могу интегрировать 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.
Link to this sectionПочему мне стоит использовать Ray Tune для оптимизации гиперпараметров с YOLO26?#
Ray Tune предлагает многочисленные преимущества для оптимизации гиперпараметров:
- Передовые стратегии поиска: использует алгоритмы, такие как Bayesian Optimization и HyperOpt, для эффективного поиска параметров.
- Параллелизм: поддерживает параллельное выполнение нескольких испытаний, значительно ускоряя процесс настройки.
- Ранняя остановка: применяет стратегии, такие как ASHA, для досрочного завершения неэффективных испытаний, экономя вычислительные ресурсы.
Ray Tune легко интегрируется с Ultralytics YOLO26, предоставляя простой интерфейс для эффективной настройки гиперпараметров. Чтобы начать, ознакомься с руководством Hyperparameter Tuning.
Link to this sectionКак я могу определить собственное пространство поиска для настройки гиперпараметров 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)Это позволяет настроить диапазон гиперпараметров, таких как начальная скорость обучения и момент, которые будут исследованы в процессе настройки. Для продвинутых конфигураций обратись к разделу Custom Search Space Example.