Эффективная настройка гиперпараметров с помощью Ray Tune и YOLO11
Настройка гиперпараметров жизненно важна для достижения максимальной производительности модели путем обнаружения оптимального набора гиперпараметров. Это включает в себя запуск испытаний с различными гиперпараметрами и оценку производительности каждого испытания.
Ускорение настройки с помощью Ultralytics YOLO11 и Ray Tune
Ultralytics YOLO11 включает Ray Tune для настройки гиперпараметров, оптимизируя настройку гиперпараметров модели YOLO11. С помощью Ray Tune вы можете использовать расширенные стратегии поиска, параллелизм и раннюю остановку, чтобы ускорить процесс настройки.
Ray Tune
Ray Tune — это библиотека для настройки гиперпараметров, разработанная для обеспечения эффективности и гибкости. Она поддерживает различные стратегии поиска, параллелизм и стратегии ранней остановки, а также легко интегрируется с популярными фреймворками машинного обучения, включая Ultralytics YOLO11.
Интеграция с Weights & Biases
YOLO11 также позволяет опциональную интеграцию с 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 YOLO11n model
model = YOLO("yolo11n.pt")
# Start tuning hyperparameters for YOLO11n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)
tune()
Параметры метода
Параметр tune()
Метод в YOLO11 предоставляет простой в использовании интерфейс для настройки гиперпараметров с помощью Ray Tune. Он принимает несколько аргументов, которые позволяют настроить процесс тюнинга. Ниже приводится подробное объяснение каждого параметра:
Параметр | Тип | Описание | Значение по умолчанию |
---|---|---|---|
data |
str |
Файл конфигурации набора данных (в формате YAML) для запуска тюнера. Этот файл должен определять пути к данным для обучения и валидации, а также другие параметры, специфичные для набора данных. | |
space |
dict, optional |
Словарь, определяющий пространство поиска гиперпараметров для Ray Tune. Каждый ключ соответствует имени гиперпараметра, а значение определяет диапазон значений для исследования во время настройки. Если не указано, YOLO11 использует пространство поиска по умолчанию с различными гиперпараметрами. | |
grace_period |
int, optional |
Льготный период в эпохах для ASHA scheduler в Ray Tune. Планировщик не будет завершать ни одну попытку до истечения этого количества эпох, что позволит модели пройти минимальное обучение, прежде чем принимать решение о ранней остановке. | 10 |
gpu_per_trial |
int, optional |
Количество GPU, выделяемых на каждую попытку во время настройки. Это помогает управлять использованием GPU, особенно в средах с несколькими GPU. Если не указано, тюнер будет использовать все доступные GPU. | None |
iterations |
int, optional |
Максимальное количество попыток, выполняемых во время настройки. Этот параметр помогает контролировать общее количество протестированных комбинаций гиперпараметров, гарантируя, что процесс настройки не будет выполняться бесконечно. | 10 |
**train_args |
dict, optional |
Дополнительные аргументы для передачи в train() метод во время настройки. Эти аргументы могут включать такие параметры, как количество эпох обучения, размер пакетаи другие конфигурации, специфичные для обучения. |
{} |
Настраивая эти параметры, вы можете точно настроить процесс оптимизации гиперпараметров в соответствии с вашими конкретными потребностями и доступными вычислительными ресурсами.
Описание пространства поиска по умолчанию
В следующей таблице перечислены параметры пространства поиска по умолчанию для настройки гиперпараметров в YOLO11 с помощью Ray Tune. Каждый параметр имеет определенный диапазон значений, определяемый tune.uniform()
.
Параметр | Диапазон | Описание |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Начальная скорость обучения, которая контролирует размер шага во время оптимизации. Более высокие значения ускоряют обучение, но могут вызвать нестабильность. |
lrf |
tune.uniform(0.01, 1.0) |
Конечный коэффициент скорости обучения, который определяет, насколько снижается скорость обучения к концу обучения. |
momentum |
tune.uniform(0.6, 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(0.02, 0.2) |
Вес компонента потери ограничивающего прямоугольника, балансирующий точность локализации в модели. |
cls |
tune.uniform(0.2, 4.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.9) |
Диапазон аугментации масштабирования, который имитирует объекты на разных расстояниях. |
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) |
Вероятность горизонтального отражения для увеличения данных, полезна для симметричных объектов. |
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, которая переносит объекты между изображениями для увеличения разнообразия экземпляров. |
Пример пользовательского пространства поиска
В этом примере мы покажем, как использовать пользовательское пространство поиска для настройки гиперпараметров с помощью Ray Tune и YOLO11. Предоставляя пользовательское пространство поиска, вы можете сосредоточить процесс настройки на конкретных интересующих вас гиперпараметрах.
Использование
from ray import tune
from ultralytics import YOLO
# Define a YOLO model
model = YOLO("yolo11n.pt")
# Run Ray Tune on the model
result_grid = model.tune(
data="coco8.yaml",
space={"lr0": tune.uniform(1e-5, 1e-1)},
epochs=50,
use_ray=True,
)
В приведенном выше фрагменте кода мы создаем модель YOLO с предварительно обученными весами "yolo11n.pt". Затем мы вызываем tune()
метод, указывая конфигурацию набора данных с помощью "coco8.yaml". Мы предоставляем пользовательское пространство поиска для начальной скорости обучения lr0
используя словарь с ключом "lr0" и значением tune.uniform(1e-5, 1e-1)
. Наконец, мы передаем дополнительные аргументы обучения, такие как количество эпох, непосредственно в метод tune как epochs=50
.
Возобновление прерванной сессии настройки гиперпараметров с помощью 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("yolo11n.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 Analyze Results.
Часто задаваемые вопросы
Как настроить гиперпараметры моей модели YOLO11 с помощью Ray Tune?
Чтобы настроить гиперпараметры вашей модели Ultralytics YOLO11 с помощью Ray Tune, выполните следующие действия:
-
Установите необходимые пакеты:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging
-
Загрузите свою модель YOLO11 и начните настройку:
from ultralytics import YOLO # Load a YOLO11 model model = YOLO("yolo11n.pt") # Start tuning with the COCO8 dataset result_grid = model.tune(data="coco8.yaml", use_ray=True)
Это использует расширенные стратегии поиска и параллелизм Ray Tune для эффективной оптимизации гиперпараметров вашей модели. Для получения дополнительной информации ознакомьтесь с документацией Ray Tune.
Каковы гиперпараметры по умолчанию для настройки YOLO11 с помощью Ray Tune?
Ultralytics YOLO11 использует следующие гиперпараметры по умолчанию для настройки с помощью Ray Tune:
Параметр | Диапазон значений | Описание |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Начальная скорость обучения |
lrf |
tune.uniform(0.01, 1.0) |
Коэффициент конечной скорости обучения |
momentum |
tune.uniform(0.6, 0.98) |
Момент |
weight_decay |
tune.uniform(0.0, 0.001) |
Затухание веса |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Эпохи разминки |
box |
tune.uniform(0.02, 0.2) |
Вес потерь ограничивающей рамки |
cls |
tune.uniform(0.2, 4.0) |
Вес потерь класса |
hsv_h |
tune.uniform(0.0, 0.1) |
Диапазон увеличения цветового тона |
translate |
tune.uniform(0.0, 0.9) |
Диапазон увеличения сдвига |
Эти гиперпараметры можно настроить в соответствии с вашими конкретными потребностями. Полный список и более подробную информацию см. в руководстве по Настройке гиперпараметров.
Как я могу интегрировать Weights & Biases с настройкой моей модели YOLO11?
Чтобы интегрировать Weights & Biases (W&B) с процессом настройки Ultralytics YOLO11:
-
Установите W&B:
pip install wandb
-
Измените свой скрипт настройки:
import wandb from ultralytics import YOLO wandb.init(project="YOLO-Tuning", entity="your-entity") # Load YOLO model model = YOLO("yolo11n.pt") # Tune hyperparameters result_grid = model.tune(data="coco8.yaml", use_ray=True)
Эта настройка позволит вам отслеживать процесс настройки, конфигурации гиперпараметров и визуализировать результаты в W&B.
Почему я должен использовать Ray Tune для оптимизации гиперпараметров с помощью YOLO11?
Ray Tune предлагает множество преимуществ для оптимизации гиперпараметров:
- Продвинутые стратегии поиска: Использует такие алгоритмы, как байесовская оптимизация и HyperOpt для эффективного поиска параметров.
- Параллелизм: Поддерживает параллельное выполнение нескольких испытаний, что значительно ускоряет процесс настройки.
- Ранняя остановка: Использует такие стратегии, как ASHA, для досрочного прекращения неэффективных испытаний, экономя вычислительные ресурсы.
Ray Tune легко интегрируется с Ultralytics YOLO11, предоставляя простой в использовании интерфейс для эффективной настройки гиперпараметров. Чтобы начать, ознакомьтесь с руководством по настройке гиперпараметров.
Как я могу определить пользовательское пространство поиска для настройки гиперпараметров YOLO11?
Чтобы определить пользовательское пространство поиска для настройки гиперпараметров YOLO11 с помощью Ray Tune:
from ray import tune
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)
Это настраивает диапазон гиперпараметров, таких как начальная скорость обучения и импульс, для изучения в процессе настройки. Для расширенных конфигураций обратитесь к разделу Пример пользовательского пространства поиска.