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

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

Введение

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



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

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

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

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

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

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

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

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

  • Кроссинг-аут: Каждая итерация объединяет гены из девяти конфигураций с наибольшей приспособленностью, обнаруженных на данный момент, с использованием кроссинг-аута BLX-α и отбора родительских особей с учетом приспособленности.
  • Мутация: Затем рекомбинированный кандидат подвергается воздействию логарифмически-нормального мультипликативного коэффициента, применяемого к каждому гиперпараметру (с вероятностью 0,5 для каждого параметра). Сила мутации sigma линейно уменьшается с 0,2 до 0,1 в течение первых 300 итераций, благодаря чему алгоритм вначале проводит широкий поиск, а по мере сходимости — уточняет результаты. В итерации 1 нет родителей для кроссинговера, и в качестве базовой линии используются гиперпараметры обучения по умолчанию.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Повторить

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

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

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

ПараметрТипДиапазон значенийОписание
lr0float(1e-5, 1e-2)Начальная скорость обучения в начале тренировки. Более низкие значения обеспечивают более стабильное обучение, но более медленную сходимость
lrffloat(0.01, 1.0)Коэффициент конечной скорости обучения как доля от lr0. Контролирует, насколько уменьшается скорость обучения во время тренировки
momentumfloat(0.7, 0.98)Фактор импульса SGD. Более высокие значения помогают поддерживать постоянное направление градиента и могут ускорить сходимость
weight_decayfloat(0.0, 0.001)Коэффициент L2-регуляризации для предотвращения переобучения. Большие значения обеспечивают более сильную регуляризацию
warmup_epochsfloat(0.0, 5.0)Количество эпох для линейного разогрева скорости обучения. Помогает предотвратить нестабильность на ранних этапах обучения.
warmup_momentumfloat(0.0, 0.95)Начальный импульс во время фазы прогрева. Постепенно увеличивается до конечного значения импульса
boxfloat(1.0, 20.0)Вес потерь ограничивающего прямоугольника в общей функции потерь. Балансирует регрессию ограничивающего прямоугольника и классификацию
clsfloat(0.1, 4.0)Вес потерь классификации в общей функции потерь. Более высокие значения подчеркивают правильное предсказание класса
cls_pwfloat(0.0, 1.0)Коэффициент взвешивания классов для устранения дисбаланса классов. Более высокие значения увеличивают вес редких классов
dflfloat(0.4, 12.0)Вес DFL (Distribution Focal Loss) в общей функции потерь. Более высокие значения акцентируют внимание на точной локализации ограничивающих рамок.
hsv_hfloat(0.0, 0.1)Диапазон случайного изменения оттенка в цветовом пространстве HSV. Помогает модели обобщать данные при различных вариациях цвета
hsv_sfloat(0.0, 0.9)Диапазон случайного изменения насыщенности в пространстве HSV. Имитирует различные условия освещения
hsv_vfloat(0.0, 0.9)Диапазон случайного изменения значения (яркости). Помогает модели обрабатывать различные уровни экспозиции
degreesfloat(0.0, 45.0)Максимальное увеличение вращения в градусах. Помогает модели стать инвариантной к ориентации объекта
translatefloat(0.0, 0.9)Максимальное увеличение трансляции в виде доли размера изображения. Повышает устойчивость к положению объекта
scalefloat(0.0, 0.95)Диапазон увеличения случайного масштабирования. Помогает модели detect объекты разных размеров
shearfloat(0.0, 10.0)Максимальное увеличение сдвига в градусах. Добавляет искажения, подобные перспективе, к обучающим изображениям
perspectivefloat(0.0, 0.001)Диапазон случайного изменения перспективы. Имитирует различные углы обзора
flipudfloat(0.0, 1.0)Вероятность вертикального отражения изображения во время обучения. Полезна для аэрофотосъемки.
fliplrfloat(0.0, 1.0)Вероятность горизонтального отражения изображения. Помогает модели стать инвариантной к направлению объекта
bgrfloat(0.0, 1.0)Вероятность использования BGR-аугментации, которая меняет местами цветовые каналы. Может помочь с инвариантностью к цвету.
mosaicfloat(0.0, 1.0)Вероятность использования аугментации mosaic, которая объединяет 4 изображения. Особенно полезна для обнаружения мелких объектов.
mixupfloat(0.0, 1.0)Вероятность использования аугментации mixup, которая смешивает два изображения. Может повысить устойчивость модели.
cutmixfloat(0.0, 1.0)Вероятность использования аугментации cutmix. Объединяет области изображения, сохраняя локальные признаки
copy_pastefloat(0.0, 1.0)Вероятность использования аугментации copy-paste. Помогает улучшить производительность сегментации экземпляров.
close_mosaicfloat(0.0, 10.0)Отключает мозаику в последние N эпох для стабилизации обучения перед завершением

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

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

Предупреждение

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

Пример

from ultralytics import YOLO

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

# Define search space
search_space = {
    "lr0": (1e-5, 1e-2),
    "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("yolo26n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-2),
    "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
        ├── tune_fitness.png
        ├── tune_results.ndjson
        ├── 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
    

tune_fitness.png

На этом графике показана зависимость критерия приспособленности от количества итераций. Он помогает визуально оценить, как генетический алгоритм работал с течением времени.

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

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

В состав входит:

  • Один маркер на итерацию для каждого набора данных, поэтому при выполнении с одним набором данных отображается одна точка на итерацию, а при выполнении с несколькими наборами данных — по одной точке на каждый набор данных за итерацию.
  • Пунктирная линия «сглаженного среднего» рассчитано с помощью гауссового сглаживания (sigma=3) по значениям приспособленности верхнего уровня за каждую итерацию.

tune_results.ndjson

Файл NDJSON, содержащий подробные результаты каждой итерации настройки. Каждая строка представляет собой один объект JSON, содержащий совокупную критерию приспособленности, настроенные гиперпараметры и показатели по каждому набору данных. Для настройки с одним набором данных и с несколькими наборами данных используется одинаковый формат файла.

  • Формат: NDJSON
  • Использование: Отслеживание результатов каждой итерации.
  • Пример:

Для удобства чтения ниже приведен пример с форматированием. В реальном .ndjson В файле каждый объект хранится в отдельной строке.

{
    "iteration": 1,
    "fitness": 0.48628,
    "hyperparameters": {
        "lr0": 0.01,
        "lrf": 0.01,
        "momentum": 0.937,
        "weight_decay": 0.0005
    },
    "datasets": {
        "coco8": {
            "metrics/precision(B)": 0.65666,
            "metrics/recall(B)": 0.85,
            "metrics/mAP50(B)": 0.85086,
            "metrics/mAP50-95(B)": 0.64104,
            "val/box_loss": 1.57958,
            "val/cls_loss": 1.04986,
            "val/dfl_loss": 1.32641,
            "fitness": 0.64104
        },
        "coco8-grayscale": {
            "metrics/precision(B)": 0.6582,
            "metrics/recall(B)": 0.51667,
            "metrics/mAP50(B)": 0.59106,
            "metrics/mAP50-95(B)": 0.33152,
            "val/box_loss": 1.95424,
            "val/cls_loss": 1.64059,
            "val/dfl_loss": 1.70226,
            "fitness": 0.33152
        }
    },
    "save_dirs": {
        "coco8": "runs/detect/coco8",
        "coco8-grayscale": "runs/detect/coco8-grayscale"
    }
}

Верхний уровень fitness — это среднее арифметическое по каждому набору данных fitness значения. Для настройки на основе одного набора данных datasets В словаре есть одна запись, в которой fitness соответствует верхнему уровню fitness. За каждую завершённую итерацию записывается один объект JSON. Фактический save_dirs пути указаны в абсолютном виде; выше они приведены в сокращенном виде для удобства чтения.

tune_scatter_plots.png

Этот файл содержит диаграммы рассеяния, сгенерированные из tune_results.ndjson, что поможет вам наглядно представить взаимосвязь между различными гиперпараметрами и показателями производительности. Гиперпараметры, значение по умолчанию которых равно 0 (например, degrees и shear (см. ниже) могут развиваться из исходного зародыша лишь очень медленно, поскольку мутационный коэффициент, действующий по принципу умножения, имеет очень мало пространства для роста, начиная с значения, близкого к нулю.

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

Анализ результатов настройки гиперпараметров с помощью точечной диаграммы

weights/

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

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

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

Заключение

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

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

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

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

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

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

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

Пример

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo26n.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.

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

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

  • Эффективный поиск: метод кроссинга BLX-α объединяет гены родителей с наивысшей приспособленностью, а логарифмически нормальное распределение мутаций вносит в результат случайные изменения, позволяя обнаружить новых кандидатов.
  • Избежание локальных минимумов: Внося случайность, они помогают избежать локальных минимумов, обеспечивая лучшую глобальную оптимизацию.
  • Показатели эффективности: они адаптируются на основе показателя пригодности для конкретной задачи (mAP50 для задачи обнаружения).

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

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

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

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

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

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

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

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

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

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

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



📅 Создано 2 лет назад ✏️ Обновлено 0 дней назад
glenn-jocherraimbekovmY-T-GRizwanMunawarUltralyticsAssistantLaughing-qfaruk.gmstss@gmail.compderrenger1490435889@qq.comMatthewNoyce

Комментарии