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

Руководство Ultralytics YOLO по настройке гиперпараметров

Введение

Настройка гиперпараметров — это не просто разовая настройка, а итеративный процесс, направленный на оптимизацию метрик производительности машинного обучения, таких как точность, прецизионность и полнота. В контексте Ultralytics YOLO эти гиперпараметры могут варьироваться от скорости обучения до архитектурных деталей, таких как количество слоев или типы используемых функций активации.



Смотреть: Как настроить гиперпараметры для повышения производительности модели 🚀

Что такое гиперпараметры?

Гиперпараметры — это высокоуровневые структурные настройки алгоритма. Они устанавливаются до этапа обучения и остаются постоянными в течение него. Вот некоторые часто настраиваемые гиперпараметры в Ultralytics YOLO:

  • Скорость обучения lr0: Определяет размер шага на каждой итерации при движении к минимуму в функция потерь.
  • Размер пакета batch: Количество изображений, обрабатываемых одновременно за один проход.
  • Количество эпох epochs: Эпоха — это один полный прямой и обратный проход всех обучающих примеров.
  • Особенности архитектуры: Такие как количество каналов, количество слоев, типы функций активации и т. д.

Визуализация настройки гиперпараметров

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

Генетическая эволюция и мутация

Ultralytics YOLO использует генетические алгоритмы для оптимизации гиперпараметров. Генетические алгоритмы вдохновлены механизмом естественного отбора и генетики.

  • Мутация: В контексте Ultralytics YOLO мутация помогает локально искать пространство гиперпараметров, применяя небольшие случайные изменения к существующим гиперпараметрам, создавая новых кандидатов для оценки.
  • Кроссовер: Хотя кроссовер является популярным методом генетического алгоритма, в Ultralytics YOLO он в настоящее время не используется для настройки гиперпараметров. Основное внимание уделяется мутации для создания новых наборов гиперпараметров.

Подготовка к настройке гиперпараметров

Прежде чем начать процесс настройки, важно:

  1. Определите метрики: Определите метрики, которые вы будете использовать для оценки производительности модели. Это может быть AP50, F1-score или другие.
  2. Установите бюджет настройки: Определите, сколько вычислительных ресурсов вы готовы выделить. Настройка гиперпараметров может потребовать больших вычислительных затрат.

Задействованные шаги

Инициализировать гиперпараметры

Начните с разумного набора начальных гиперпараметров. Это могут быть гиперпараметры по умолчанию, установленные Ultralytics YOLO, или параметры, основанные на ваших знаниях предметной области или предыдущих экспериментах.

Мутация гиперпараметров

Используйте _mutate метод для создания нового набора гиперпараметров на основе существующего набора. The Класс Tuner обрабатывает этот процесс автоматически.

Обучить модель

Обучение выполняется с использованием измененного набора гиперпараметров. Затем производительность обучения оценивается с использованием выбранных вами метрик.

Оценка модели

Используйте метрики, такие как AP50, F1-score или пользовательские метрики, для оценки производительности модели. Процесс оценки помогает определить, лучше ли текущие гиперпараметры предыдущих.

Регистрация результатов

Крайне важно регистрировать как метрики производительности, так и соответствующие гиперпараметры для дальнейшего использования. Ultralytics YOLO автоматически сохраняет эти результаты в формате CSV.

Повторить

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

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

В следующей таблице перечислены параметры пространства поиска по умолчанию для настройки гиперпараметров в YOLO11. Каждый параметр имеет определенный диапазон значений, определяемый кортежем (min, max).

Параметр Тип Диапазон значений Описание
lr0 float (1e-5, 1e-1) Начальная скорость обучения в начале тренировки. Более низкие значения обеспечивают более стабильное обучение, но более медленную сходимость
lrf float (0.01, 1.0) Коэффициент конечной скорости обучения как доля от lr0. Контролирует, насколько уменьшается скорость обучения во время тренировки
momentum float (0.6, 0.98) Фактор импульса SGD. Более высокие значения помогают поддерживать постоянное направление градиента и могут ускорить сходимость
weight_decay float (0.0, 0.001) Коэффициент L2-регуляризации для предотвращения переобучения. Большие значения обеспечивают более сильную регуляризацию
warmup_epochs float (0.0, 5.0) Количество эпох для линейного разогрева скорости обучения. Помогает предотвратить нестабильность на ранних этапах обучения.
warmup_momentum float (0.0, 0.95) Начальный импульс во время фазы прогрева. Постепенно увеличивается до конечного значения импульса
box float (0.02, 0.2) Вес потерь ограничивающего прямоугольника в общей функции потерь. Балансирует регрессию ограничивающего прямоугольника и классификацию
cls float (0.2, 4.0) Вес потерь классификации в общей функции потерь. Более высокие значения подчеркивают правильное предсказание класса
hsv_h float (0.0, 0.1) Диапазон случайного изменения оттенка в цветовом пространстве HSV. Помогает модели обобщать данные при различных вариациях цвета
hsv_s float (0.0, 0.9) Диапазон случайного изменения насыщенности в пространстве HSV. Имитирует различные условия освещения
hsv_v float (0.0, 0.9) Диапазон случайного изменения значения (яркости). Помогает модели обрабатывать различные уровни экспозиции
degrees float (0.0, 45.0) Максимальное увеличение вращения в градусах. Помогает модели стать инвариантной к ориентации объекта
translate float (0.0, 0.9) Максимальное увеличение трансляции в виде доли размера изображения. Повышает устойчивость к положению объекта
scale float (0.0, 0.9) Диапазон случайного изменения масштаба. Помогает модели обнаруживать объекты разных размеров
shear float (0.0, 10.0) Максимальное увеличение сдвига в градусах. Добавляет искажения, подобные перспективе, к обучающим изображениям
perspective float (0.0, 0.001) Диапазон случайного изменения перспективы. Имитирует различные углы обзора
flipud float (0.0, 1.0) Вероятность вертикального отражения изображения во время обучения. Полезна для аэрофотосъемки.
fliplr float (0.0, 1.0) Вероятность горизонтального отражения изображения. Помогает модели стать инвариантной к направлению объекта
mosaic float (0.0, 1.0) Вероятность использования аугментации mosaic, которая объединяет 4 изображения. Особенно полезна для обнаружения мелких объектов.
mixup float (0.0, 1.0) Вероятность использования аугментации mixup, которая смешивает два изображения. Может повысить устойчивость модели.
copy_paste float (0.0, 1.0) Вероятность использования аугментации copy-paste. Помогает улучшить производительность сегментации экземпляров.

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

Вот как определить пространство поиска и использовать model.tune() метод для использования Tuner класс для настройки гиперпараметров YOLO11n на COCO8 в течение 30 эпох с оптимизатором AdamW и пропуском построения графиков, сохранения контрольных точек и проверки, кроме как в последнюю эпоху, для более быстрой настройки.

Пример

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo11n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-1),
    "degrees": (0.0, 45.0),
}

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(
    data="coco8.yaml",
    epochs=30,
    iterations=300,
    optimizer="AdamW",
    space=search_space,
    plots=False,
    save=False,
    val=False,
)

Возобновление прерванного сеанса настройки гиперпараметров

Вы можете возобновить прерванную сессию настройки гиперпараметров, передав resume=TrueВы можете дополнительно передать каталог name используется под runs/{task} чтобы возобновить обучение. В противном случае будет возобновлена последняя прерванная сессия. Также необходимо предоставить все предыдущие аргументы обучения, включая data, epochs, iterations и space.

Используя resume=True с model.tune()

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo11n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-1),
    "degrees": (0.0, 45.0),
}

# Resume previous run
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)

# Resume tuning run with name 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)

Results

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

Структура файла

Вот как будет выглядеть структура каталогов результатов. Каталоги обучения, такие как train1/ содержат отдельные итерации настройки, то есть одну модель, обученную с одним набором гиперпараметров. The tune/ каталог содержит результаты настройки всех отдельных обучений модели:

runs/
└── detect/
    ├── train1/
    ├── train2/
    ├── ...
    └── tune/
        ├── best_hyperparameters.yaml
        ├── best_fitness.png
        ├── tune_results.csv
        ├── tune_scatter_plots.png
        └── weights/
            ├── last.pt
            └── best.pt

Описание файлов

best_hyperparameters.yaml

Этот YAML-файл содержит лучшие гиперпараметры, найденные в процессе настройки. Вы можете использовать этот файл для инициализации будущих тренировок с этими оптимизированными настройками.

  • Формат: YAML
  • Использование: Результаты гиперпараметров
  • Пример:

    # 558/900 iterations complete ✅ (45536.81s)
    # Results saved to /usr/src/ultralytics/runs/detect/tune
    # Best fitness=0.64297 observed at iteration 498
    # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/dfl_loss': 0.68503, 'fitness': 0.64297}
    # Best fitness model is /usr/src/ultralytics/runs/detect/train498
    # Best fitness hyperparameters are printed below.
    
    lr0: 0.00269
    lrf: 0.00288
    momentum: 0.73375
    weight_decay: 0.00015
    warmup_epochs: 1.22935
    warmup_momentum: 0.1525
    box: 18.27875
    cls: 1.32899
    dfl: 0.56016
    hsv_h: 0.01148
    hsv_s: 0.53554
    hsv_v: 0.13636
    degrees: 0.0
    translate: 0.12431
    scale: 0.07643
    shear: 0.0
    perspective: 0.0
    flipud: 0.0
    fliplr: 0.08631
    mosaic: 0.42551
    mixup: 0.0
    copy_paste: 0.0
    

best_fitness.png

Это график, отображающий соответствие (обычно метрика производительности, такая как AP50) количеству итераций. Он помогает визуализировать, насколько хорошо генетический алгоритм работал с течением времени.

  • Формат: PNG
  • Использование: Визуализация производительности

Настройка гиперпараметров: фитнес против итерации

tune_results.csv

CSV-файл, содержащий подробные результаты каждой итерации во время настройки. Каждая строка в файле представляет одну итерацию и включает в себя такие метрики, как оценка соответствия, точность, полнота, а также используемые гиперпараметры.

  • Формат: CSV
  • Использование: Отслеживание результатов каждой итерации.
  • Пример:
      fitness,lr0,lrf,momentum,weight_decay,warmup_epochs,warmup_momentum,box,cls,dfl,hsv_h,hsv_s,hsv_v,degrees,translate,scale,shear,perspective,flipud,fliplr,mosaic,mixup,copy_paste
      0.05021,0.01,0.01,0.937,0.0005,3.0,0.8,7.5,0.5,1.5,0.015,0.7,0.4,0.0,0.1,0.5,0.0,0.0,0.0,0.5,1.0,0.0,0.0
      0.07217,0.01003,0.00967,0.93897,0.00049,2.79757,0.81075,7.5,0.50746,1.44826,0.01503,0.72948,0.40658,0.0,0.0987,0.4922,0.0,0.0,0.0,0.49729,1.0,0.0,0.0
      0.06584,0.01003,0.00855,0.91009,0.00073,3.42176,0.95,8.64301,0.54594,1.72261,0.01503,0.59179,0.40658,0.0,0.0987,0.46955,0.0,0.0,0.0,0.49729,0.80187,0.0,0.0
    

tune_scatter_plots.png

Этот файл содержит диаграммы рассеяния, сгенерированные из tune_results.csv, помогая визуализировать взаимосвязи между различными гиперпараметрами и метриками производительности. Обратите внимание, что гиперпараметры, инициализированные 0, не будут настроены, например, degrees и shear ниже.

  • Формат: PNG
  • Использование: Разведочный анализ данных

Точечные диаграммы настройки гиперпараметров

weights/

Этот каталог содержит сохраненные модели PyTorch для последней и лучшей итераций в процессе настройки гиперпараметров.

  • last.pt: last.pt — это веса из последней эпохи обучения.
  • best.pt: best.pt веса для итерации, которая достигла наилучшего значения fitness.

Используя эти результаты, вы можете принимать более обоснованные решения для будущих обучений и анализов вашей модели. Не стесняйтесь обращаться к этим артефактам, чтобы понять, насколько хорошо работает ваша модель и как вы можете улучшить ее в дальнейшем.

Заключение

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

Дополнительная литература

  1. Оптимизация гиперпараметров в Википедии
  2. Руководство по эволюции гиперпараметров YOLOv5
  3. Эффективная настройка гиперпараметров с помощью Ray Tune и YOLO11

Для более глубокого понимания вы можете изучить Tuner класс исходный код и сопроводительную документацию. Если у вас возникнут какие-либо вопросы, пожелания или потребуется дополнительная помощь, обращайтесь к нам на GitHub или Discord.

Часто задаваемые вопросы

Как оптимизировать скорость обучения для Ultralytics YOLO во время настройки гиперпараметров?

Чтобы оптимизировать скорость обучения для Ultralytics YOLO, начните с установки начальной скорости обучения с помощью: lr0 параметр. Общие значения варьируются от 0.001 в 0.01. В процессе настройки гиперпараметров это значение будет изменяться для поиска оптимальных параметров. Вы можете использовать model.tune() метод для автоматизации этого процесса. Например:

Пример

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo11n.pt")

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)

Для получения более подробной информации ознакомьтесь со страницей конфигурации Ultralytics YOLO.

Каковы преимущества использования генетических алгоритмов для настройки гиперпараметров в YOLO11?

Генетические алгоритмы в Ultralytics YOLO11 предоставляют надежный метод для исследования пространства гиперпараметров, что приводит к высокооптимизированной производительности модели. Ключевые преимущества включают в себя:

  • Эффективный поиск: Генетические алгоритмы, такие как мутация, могут быстро исследовать большой набор гиперпараметров.
  • Избежание локальных минимумов: Внося случайность, они помогают избежать локальных минимумов, обеспечивая лучшую глобальную оптимизацию.
  • Метрики производительности: Они адаптируются на основе показателей производительности, таких как AP50 и F1-score.

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

Сколько времени занимает процесс настройки гиперпараметров для Ultralytics YOLO?

Время, необходимое для настройки гиперпараметров с помощью Ultralytics YOLO, во многом зависит от нескольких факторов, таких как размер набора данных, сложность архитектуры модели, количество итераций и доступные вычислительные ресурсы. Например, настройка YOLO11n на наборе данных, таком как COCO8, в течение 30 эпох может занять от нескольких часов до нескольких дней, в зависимости от оборудования.

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

Какие метрики следует использовать для оценки производительности модели во время настройки гиперпараметров в YOLO?

При оценке производительности модели во время настройки гиперпараметров в YOLO можно использовать несколько ключевых метрик:

  • AP50: Средняя точность при пороговом значении IoU 0.50.
  • F1-Score: Гармоническое среднее точности и полноты.
  • Точность и полнота: Индивидуальные метрики, указывающие на точность модели в определении истинно положительных результатов по сравнению с ложноположительными и ложноотрицательными.

Эти метрики помогают понять различные аспекты производительности вашей модели. Обратитесь к руководству Метрики производительности Ultralytics YOLO для получения всестороннего обзора.

Могу ли я использовать Ray Tune для расширенной оптимизации гиперпараметров с YOLO11?

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

Чтобы использовать Ray Tune с YOLO11, просто установите use_ray=True параметр в вашем model.tune() вызов метода. Для получения более подробной информации и примеров ознакомьтесь с Руководство по интеграции Ray Tune.



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

Комментарии