Meet YOLO26: next-gen vision AI.

Link to this sectionРуководство по настройке гиперпараметров в Ultralytics YOLO#

Настройка гиперпараметров в Ultralytics YOLO — это автоматизированный итеративный поиск, который оптимизирует такие параметры, как скорость обучения (learning rate), веса функций потерь и интенсивность аугментации, чтобы максимизировать метрики эффективности машинного обучения, такие как точность (accuracy), прецизионность (precision) и полнота (recall). Вместо ручного подбора этих значений Ultralytics YOLO исследует пространство гиперпараметров с помощью генетического алгоритма, который мутирует и оценивает конфигурации-кандидаты в ходе множества коротких циклов обучения.



Watch: How to Tune Hyperparameters for Better Model Performance 🚀

Link to this sectionЧто такое гиперпараметры?#

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

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

Hyperparameter optimization search space visualization

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

Link to this sectionГенетическая эволюция и мутация#

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

  • Кроссовер: Каждая итерация объединяет гены до девяти конфигураций с наилучшей приспособленностью (fitness), найденных на данный момент, с использованием кроссовера BLX-α и выбора родителей, взвешенного по приспособленности.
  • Мутация: Рекомбинированный кандидат затем подвергается возмущению с помощью логнормального мультипликативного коэффициента, примененного к каждому гиперпараметру (с вероятностью 0.5 на параметр). Сила мутации сигма линейно убывает с 0.2 до 0.1 в течение первых 300 итераций, чтобы алгоритм исследовал пространство широко на раннем этапе и уточнял поиск по мере сходимости. На 1-й итерации нет родителей для кроссовера, поэтому используются гиперпараметры обучения по умолчанию в качестве базовых.

Link to this sectionПодготовка к настройке гиперпараметров#

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

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

Link to this sectionКак работает цикл настройки#

Для каждой итерации встроенный настройщик повторяет следующий цикл:

  1. Инициализация гиперпараметров — начни с разумного базового уровня: либо с гиперпараметров по умолчанию, установленных в Ultralytics YOLO, либо со значений, основанных на твоих экспертных знаниях в предметной области или предыдущих экспериментах.
  2. Мутация гиперпараметров — класс Tuner автоматически создает новый набор гиперпараметров из существующего с помощью метода _mutate.
  3. Обучение модели — обучай модель, используя мутировавшие гиперпараметры, а затем оценивай результаты обучения с помощью выбранных тобой метрик.
  4. Оценка модели — используй такие метрики, как AP50, F1-score или свои собственные метрики в рамках процесса оценки, чтобы определить, улучшают ли текущие гиперпараметры предыдущие результаты.
  5. Регистрация результатов — записывай как метрики эффективности, так и соответствующие им гиперпараметры для дальнейшего использования. Ultralytics YOLO автоматически сохраняет эти результаты в формате NDJSON.
  6. Повторение — продолжай, пока не будет достигнуто заданное количество итераций или удовлетворительная метрика эффективности, при этом каждая итерация опирается на знания, полученные в ходе предыдущих запусков.

Link to this sectionИтерации и размер популяции#

При использовании встроенного тюнера (use_ray=False), iterations управляет общим количеством последовательных испытаний. Каждое испытание обучает одну модель с одной конфигурацией гиперпараметров — например, iterations=40 с epochs=50 планирует 40 независимых запусков обучения по 50 эпох каждый, а не один запуск на 50 эпох с отдельной популяцией из 40 кандидатов.

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

Для параллельных испытаний или более продвинутых стратегий поиска установи use_ray=True для использования Ray Tune, который принимает iterations как num_samples. Подробности см. в руководстве по интеграции Ray Tune.

Link to this sectionПространство поиска по умолчанию#

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

ПараметрТипДиапазон значенийОписание
lr0float(1e-5, 1e-2)Начальная скорость обучения в начале тренировки. Меньшие значения обеспечивают более стабильное обучение, но более медленную сходимость
lrffloat(0.01, 1.0)Коэффициент конечной скорости обучения как доля от lr0. Контролирует, насколько уменьшается скорость обучения во время тренировки
momentumfloat(0.7, 0.98)Коэффициент импульса (momentum) SGD. Более высокие значения помогают поддерживать постоянное направление градиента и могут ускорить сходимость
weight_decayfloat(0.0, 0.001)Коэффициент L2-регуляризации для предотвращения переобучения. Большие значения обеспечивают более сильную регуляризацию
warmup_epochsfloat(0.0, 5.0)Количество эпох для линейного прогрева (warmup) скорости обучения. Помогает предотвратить нестабильность в начале обучения
warmup_momentumfloat(0.0, 0.95)Начальный импульс (momentum) во время фазы прогрева. Постепенно увеличивается до конечного значения импульса
boxfloat(1.0, 20.0)Вес функции потерь ограничивающей рамки (bbox) в общей функции потерь. Балансирует регрессию рамок относительно классификации
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)Диапазон случайной аугментации оттенка (hue) в цветовом пространстве HSV. Помогает модели обобщать цветовые вариации
hsv_sfloat(0.0, 0.9)Диапазон случайной аугментации насыщенности (saturation) в пространстве HSV. Симулирует различные условия освещения
hsv_vfloat(0.0, 0.9)Диапазон случайной аугментации значения (яркости/brightness). Помогает модели справляться с разными уровнями экспозиции
degreesfloat(0.0, 45.0)Максимальная аугментация вращения в градусах. Помогает модели стать инвариантной к ориентации объекта
translatefloat(0.0, 0.9)Максимальная аугментация переноса как доля от размера изображения. Улучшает устойчивость к положению объекта
scalefloat(0.0, 0.95)Диапазон случайной аугментации масштабирования. Помогает модели обнаруживать объекты разных размеров
shearfloat(0.0, 10.0)Максимальная аугментация сдвига (shear) в градусах. Добавляет перспективные искажения к изображениям для обучения
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)Отключает mosaic в последние N эпох для стабилизации обучения перед завершением

Link to this sectionПример пользовательского пространства поиска#

Вот как определить пространство поиска и использовать метод 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,
)

Link to this sectionВозобновление прерванного сеанса настройки гиперпараметров#

Ты можешь возобновить прерванный сеанс настройки гиперпараметров, передав 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)

Link to this sectionРезультаты#

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

Link to this sectionСтруктура файлов#

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

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

Link to this sectionОписание файлов#

Link to this sectionbest_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

Link to this sectiontune_fitness.png#

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

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

Hyperparameter Tuning Fitness vs Iteration

График содержит:

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

Link to this sectiontune_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 являются абсолютными; выше они сокращены для удобства чтения.

Link to this sectiontune_scatter_plots.png#

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

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

Hyperparameter tuning results scatter plot analysis

Link to this sectionweights/#

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

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

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

Link to this sectionЗаключение#

Настройка гиперпараметров в Ultralytics YOLO проста в запуске и обладает мощным функционалом, сочетая кроссовер BLX-α с логнормальной мутацией в рамках генетического алгоритма. Следование циклу, описанному в этом руководстве, позволяет систематически настраивать твою модель для повышения производительности, а затем повторно использовать полученный файл best_hyperparameters.yaml для инициализации будущих запусков обучения. Чтобы масштабировать настройку на параллельные испытания и использовать более продвинутые алгоритмы поиска, изучи руководство по интеграции Ray Tune или запускай управляемые задания с настраиваемыми гиперпараметрами и отслеживанием метрик в реальном времени на Ultralytics Platform через облачное обучение.

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

Link to this sectionFAQ#

Link to this sectionКак мне оптимизировать learning rate для 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии