Перейти к содержанию

Эффективная настройка гиперпараметров с помощью Ray Tune и YOLO11

Настройка гиперпараметров жизненно важна для достижения максимальной производительности модели путем обнаружения оптимального набора гиперпараметров. Это включает в себя запуск испытаний с различными гиперпараметрами и оценку производительности каждого испытания.

Ускорение настройки с помощью Ultralytics YOLO11 и Ray Tune

Ultralytics YOLO11 включает Ray Tune для настройки гиперпараметров, оптимизируя настройку гиперпараметров модели YOLO11. С помощью Ray Tune вы можете использовать расширенные стратегии поиска, параллелизм и раннюю остановку, чтобы ускорить процесс настройки.

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, выполните следующие действия:

  1. Установите необходимые пакеты:

    pip install -U ultralytics "ray[tune]"
    pip install wandb # optional for logging
    
  2. Загрузите свою модель 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:

  1. Установите W&B:

    pip install wandb
    
  2. Измените свой скрипт настройки:

    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)

Это настраивает диапазон гиперпараметров, таких как начальная скорость обучения и импульс, для изучения в процессе настройки. Для расширенных конфигураций обратитесь к разделу Пример пользовательского пространства поиска.



📅 Создано 1 год назад ✏️ Обновлено 3 месяца назад

Комментарии