Перейти к содержимому

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

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

Ускорьте тюнинг с помощью Ultralytics YOLOv8 и Ray Tune.

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

Рэй Тьюн

Обзор Ray Tune

Ray Tune - это библиотека для настройки гиперпараметров, созданная для эффективности и гибкости. Она поддерживает различные стратегии поиска, параллелизм и стратегии ранней остановки, а также легко интегрируется с популярными фреймворками машинного обучения, включая Ultralytics YOLOv8 .

Интеграция с Weights & Biases

YOLOv8 также позволяет опционально интегрироваться с 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 YOLOv8n model
model = YOLO('yolov8n.pt')

# Start tuning hyperparameters for YOLOv8n training on the COCO8 dataset
result_grid = model.tune(data='coco8.yaml', use_ray=True)

tune() Параметры метода

The tune() Метод в YOLOv8 предоставляет простой в использовании интерфейс для настройки гиперпараметров с помощью Ray Tune. Он принимает несколько аргументов, которые позволяют тебе настроить процесс настройки. Ниже приведено подробное объяснение каждого параметра:

Параметр Тип Описание Значение по умолчанию
data str Файл конфигурации набора данных (в формате YAML), на котором будет работать тюнер. В этом файле должны быть указаны пути к тренировочным и проверочным данным, а также другие настройки, специфичные для данного набора.
space dict, optional Словарь, определяющий пространство поиска гиперпараметров для Ray Tune. Каждый ключ соответствует имени гиперпараметра, а значение задает диапазон значений, которые нужно исследовать при настройке. Если его не указать, YOLOv8 использует пространство поиска по умолчанию с различными гиперпараметрами.
grace_period int, optional Льготный период в эпохах для планировщика ASHA в Ray Tune. Планировщик не будет завершать испытания раньше этого количества эпох, позволяя модели пройти минимальное обучение, прежде чем принять решение о досрочной остановке. 10
gpu_per_trial int, optional Количество GPU, которое нужно выделить на каждое испытание при настройке. Это помогает управлять использованием GPU, особенно в средах с несколькими GPU. Если это значение не указано, тюнер будет использовать все доступные GPU. Нет
iterations int, optional Максимальное количество испытаний, которые нужно провести во время настройки. Этот параметр помогает контролировать общее количество тестируемых комбинаций гиперпараметров, гарантируя, что процесс настройки не будет идти бесконечно. 10
**train_args dict, optional Дополнительные аргументы, которые нужно передать в train() метод во время настройки. Эти аргументы могут включать такие параметры, как количество эпох обучения, размер партии и другие специфические для обучения настройки. {}

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

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

В следующей таблице перечислены параметры пространства поиска по умолчанию для настройки гиперпараметров в YOLOv8 с помощью 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) 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(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) Вероятность увеличения смешивания
copy_paste tune.uniform(0.0, 1.0) Вероятность увеличения с помощью копи-паста

Пример пользовательского пространства поиска

В этом примере мы продемонстрируем, как использовать пользовательское пространство поиска для настройки гиперпараметров с помощью Ray Tune и YOLOv8. Задав пользовательское пространство поиска, ты сможешь сфокусировать процесс настройки на определенных гиперпараметрах, представляющих интерес.

Использование

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolov8n.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 с предварительно обученными весами "yolov8n.pt". Затем мы вызываем программу tune() метод, указав конфигурацию набора данных с помощью "coco8.yaml". Мы предоставляем пользовательское пространство поиска для начальной скорости обучения lr0 используя словарь с ключом "lr0" и значением tune.uniform(1e-5, 1e-1). Наконец, мы передаем дополнительные аргументы тренировки, такие как количество эпох, непосредственно методу tune в виде epochs=50.

Обработка результатов настройки лучей

После проведения эксперимента по настройке гиперпараметров с помощью Ray 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 result in 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.



Создано 2023-11-12, Обновлено 2024-05-06
Авторы: glenn-jocher (5)

Комментарии