YOLO Vision 2026:

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

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

Ускорь настройку с Ultralytics YOLO26 и Ray Tune#

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

Ray Tune#

Ray Tune hyperparameter optimization workflow

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 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. Он принимает несколько аргументов, позволяющих настроить процесс подбора. Ниже приведено подробное описание каждого параметра:

ПараметрТипОписаниеЗначение по умолчанию
datastrYAML-файл датасета для запуска настройки, определяющий пути к обучающим и данным валидации, а также другие настройки, специфичные для датасета. Для классификации вместо этого указывается каталог датасета или встроенное имя датасета (например, imagenet10).
spacedict, optionalСловарь, определяющий пространство поиска гиперпараметров для Ray Tune. Каждый ключ соответствует имени гиперпараметра, а значение указывает диапазон значений для исследования во время настройки. Если не указано, YOLO26 использует пространство поиска по умолчанию с различными гиперпараметрами.
grace_periodint, optionalПериод отсрочки в эпохах для планировщика ASHA в Ray Tune. Планировщик не будет завершать ни одну пробную задачу до истечения этого числа эпох, что позволяет модели пройти минимальное обучение перед принятием решения о ранней остановке.10
gpu_per_trialint, optionalКоличество GPU, которые Ray выделяет для каждого испытания. Укажи это явно для использования обучения на GPU; если пропущено, испытания не получают ресурсов GPU.None
iterationsint, optionalМаксимальное количество пробных запусков для выполнения во время настройки. Этот параметр помогает контролировать общее количество протестированных комбинаций гиперпараметров, гарантируя, что процесс настройки не будет длиться бесконечно.10
search_algstr or Searcher, optionalСтратегия поиска Ray Tune для использования. Ты можешь передать объект поисковика Ray напрямую или использовать поддерживаемую строку, такую как optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax или random. Строковые поисковики автоматически используют метрику задачи по умолчанию и mode="max". Если параметр не указан, Ray Tune возвращается к своей стратегии случайного поиска по умолчанию — BasicVariantGenerator.None
**train_argsdict, optionalДополнительные аргументы, передаваемые методу train() во время подбора. Эти аргументы могут включать такие настройки, как количество эпох обучения, размер батча и другие конфигурации, специфичные для обучения.{}

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

Описание пространства поиска по умолчанию#

В следующей таблице перечислены параметры пространства поиска по умолчанию для подбора гиперпараметров в YOLO26 с использованием Ray Tune. Каждый параметр имеет определенный диапазон значений, заданный tune.uniform().

ПараметрДиапазонОписание
lr0tune.uniform(1e-5, 1e-2)Начальная скорость обучения (learning rate), которая контролирует размер шага во время оптимизации. Более высокие значения ускоряют обучение, но могут вызвать нестабильность.
lrftune.uniform(0.01, 1.0)Коэффициент конечной скорости обучения, который определяет, насколько снижается скорость обучения к концу тренировки.
momentumtune.uniform(0.7, 0.98)Коэффициент инерции (momentum) для оптимизатора, который помогает ускорить обучение и преодолеть локальные минимумы.
weight_decaytune.uniform(0.0, 0.001)Параметр регуляризации, предотвращающий переобучение путем штрафования больших значений весов.
warmup_epochstune.uniform(0.0, 5.0)Количество эпох с постепенно увеличивающейся скоростью обучения для стабилизации начального этапа обучения.
warmup_momentumtune.uniform(0.0, 0.95)Начальное значение инерции, которое постепенно увеличивается в период прогрева.
boxtune.uniform(1.0, 20.0)Вес компонента функции потерь ограничивающей рамки (BBox), балансирующий точность локализации в модели.
clstune.uniform(0.1, 4.0)Вес компонента функции потерь классификации, балансирующий точность предсказания класса в модели.
cls_pwtune.uniform(0.0, 1.0)Степень взвешивания классов: от отключенной (0.0) до полного взвешивания по обратной частоте (1.0).
dfltune.uniform(0.4, 12.0)Вес для компонента регрессии расстояния между боксами, подчеркивающий точную локализацию ограничивающего бокса.
hsv_htune.uniform(0.0, 0.1)Диапазон аугментации оттенка (hue), который вносит цветовое разнообразие, помогая модели обобщать данные.
hsv_stune.uniform(0.0, 0.9)Диапазон аугментации насыщенности, который меняет интенсивность цвета для улучшения устойчивости.
hsv_vtune.uniform(0.0, 0.9)Диапазон аугментации яркости (value), который помогает модели работать в различных условиях освещения.
degreestune.uniform(0.0, 45.0)Диапазон аугментации поворота в градусах, улучшающий распознавание повернутых объектов.
translatetune.uniform(0.0, 0.9)Диапазон аугментации смещения, который сдвигает изображения по горизонтали и вертикали.
scaletune.uniform(0.0, 0.95)Диапазон аугментации масштабирования, имитирующий объекты на разных расстояниях.
sheartune.uniform(0.0, 10.0)Диапазон аугментации сдвига в градусах, имитирующий перспективные искажения.
perspectivetune.uniform(0.0, 0.001)Диапазон аугментации перспективы, который имитирует изменения точки обзора в 3D.
flipudtune.uniform(0.0, 1.0)Вероятность аугментации вертикального отражения, увеличивающая разнообразие набора данных.
fliplrtune.uniform(0.0, 1.0)Вероятность аугментации горизонтального отражения, полезная для симметричных объектов.
bgrtune.uniform(0.0, 1.0)Вероятность аугментации смены каналов BGR, помогающая достичь инвариантности к цвету.
mosaictune.uniform(0.0, 1.0)Вероятность мозаичной аугментации, которая объединяет четыре изображения в один обучающий пример.
mixuptune.uniform(0.0, 1.0)Вероятность MixUp-аугментации, которая смешивает два изображения и их метки вместе.
cutmixtune.uniform(0.0, 1.0)Вероятность Cutmix-аугментации, которая объединяет области изображения, сохраняя локальные признаки.
copy_pastetune.uniform(0.0, 1.0)В режиме flip доля подходящих объектов, копируемых в изображение, а в режиме mixup — также вероятность ее запуска.
close_mosaictune.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 не указан, Ray Tune использует свою стратегию случайного поиска по умолчанию — BasicVariantGenerator.

Использование строкового параметра `search_alg` с `model.tune()`
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 вместо строки.

Использование объекта `OptunaSearch` с `model.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.

Использование `resume=True` с `model.tune()`
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 Analyze Results, чтобы извлечь максимум пользы из твоих экспериментов по подбору гиперпараметров.

FAQ#

  • Чтобы настроить гиперпараметры твоей модели Ultralytics YOLO26 с помощью Ray Tune, выполни следующие шаги:

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

      pip install -U ultralytics "ray[tune]"
      pip install wandb # optional for logging
      yolo settings wandb=True
    2. Загрузи свою модель 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)Момент (Momentum)
    weight_decaytune.uniform(0.0, 0.001)Коэффициент затухания весов
    warmup_epochstune.uniform(0.0, 5.0)Эпохи разминки (Warmup epochs)
    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)Вес функции потерь расстояния бокса
    hsv_htune.uniform(0.0, 0.1)Диапазон аугментации оттенка (Hue)
    translatetune.uniform(0.0, 0.9)Диапазон аугментации смещения (Translation)

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

  • Чтобы интегрировать Weights & Biases (W&B) в процесс настройки твоей модели Ultralytics YOLO26:

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

      pip install wandb
      wandb login
      yolo settings wandb=True
    2. Запусти тюнер:

      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)

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

Комментарии