Эффективная настройка гиперпараметров с помощью Ray Tune и YOLOv8
Настройка гиперпараметров жизненно важна для достижения пиковой производительности модели путем выявления оптимального набора гиперпараметров. Для этого нужно провести испытания с разными гиперпараметрами и оценить эффективность каждого испытания.
Ускорьте тюнинг с помощью Ultralytics YOLOv8 и Ray Tune.
Ultralytics YOLOv8 включает в себя Ray Tune для настройки гиперпараметров, что упрощает оптимизацию гиперпараметров модели YOLOv8 . С помощью Ray Tune ты можешь использовать продвинутые стратегии поиска, параллелизм и раннюю остановку, чтобы ускорить процесс настройки.
Рэй Тьюн
Ray Tune - это библиотека для настройки гиперпараметров, созданная для эффективности и гибкости. Она поддерживает различные стратегии поиска, параллелизм и стратегии ранней остановки, а также легко интегрируется с популярными фреймворками машинного обучения, включая Ultralytics YOLOv8 .
Интеграция с Weights & Biases
YOLOv8 также позволяет опционально интегрироваться с Weights & Biases для мониторинга процесса настройки.
Установка
Чтобы установить необходимые пакеты, выполни:
Установка
Использование
Использование
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. Задав пользовательское пространство поиска, ты сможешь сфокусировать процесс настройки на определенных гиперпараметрах, представляющих интерес.
Использование
В приведенном выше фрагменте кода мы создаем модель 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()
Базовый анализ на уровне экспериментов
Получи обзор того, как проходили испытания. Ты можешь быстро проверить, не было ли ошибок во время испытаний.
Базовый анализ на уровне испытаний
Получи доступ к конфигурациям гиперпараметров отдельных испытаний и последним отчетным метрикам.
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.