Руководство Ultralytics YOLO по настройке гиперпараметров#
Настройка гиперпараметров в Ultralytics YOLO — это автоматизированный итеративный поиск, оптимизирующий параметры, такие как скорость обучения, веса функции потерь и интенсивность аугментации, чтобы максимизировать метрики производительности модели машинного обучения, например точность, precision и recall. Вместо ручной проверки этих значений Ultralytics YOLO исследует пространство гиперпараметров с помощью генетического алгоритма, который изменяет и оценивает наборы параметров-кандидатов во множестве коротких запусков обучения.
Watch: How to Tune Hyperparameters for Better Model Performance 🚀
Что такое гиперпараметры?#
Гиперпараметры — это высокоуровневые структурные настройки алгоритма. Их задают до начала обучения, и во время обучения они остаются неизменными. Ниже приведены некоторые часто настраиваемые гиперпараметры в Ultralytics YOLO:
- Скорость обучения
lr0: определяет размер шага на каждой итерации при движении к минимуму функции потерь. - Размер пакета
batch: количество изображений, одновременно обрабатываемых за один прямой проход. - Количество эпох
epochs: эпоха — это один полный прямой и обратный проход по всем обучающим примерам. - Особенности архитектуры: например, количество каналов, число слоёв, типы функций активации и т. д. Они задаются в конфигурации модели YAML, а не в аргументах обучения.
Из этих четырёх параметров только скорость обучения входит в пространство поиска по умолчанию: batch, epochs и архитектура остаются неизменными. Настройщик также изменяет расписание, коэффициенты потерь и аугментации, перечисленные ниже.
Полный список гиперпараметров аугментации, используемых в YOLO26, см. на странице конфигураций.
Генетическая эволюция и мутация#
Ultralytics YOLO использует генетические алгоритмы для оптимизации гиперпараметров. Генетические алгоритмы вдохновлены механизмами естественного отбора и генетики.
- Отбор: на каждой итерации выбирается одна из не более чем девяти конфигураций с наилучшей приспособленностью, взвешенных по fitness. После 30 результатов лучшие 20% всех результатов (не более 30) также оценивают ковариацию параметров; влияние этой оценки растёт по мере накопления свидетельств в пользу элитных решений.
- Мутация: на каждой итерации примерно половина параметров изменяется с помощью гауссовых шагов, нормализованных относительно диапазонов поиска. После активации ковариации доля не более 40% шагов, взвешенная по уверенности, использует коррелированные шаги; отражение возвращает эти шаги в допустимые границы, не накапливая обрезанные значения. По мере накопления испытаний без улучшений размеры шагов линейно сужаются максимум на 20% за 25 испытаний и сбрасываются при обнаружении нового лучшего результата. У итерации 1 нет родительской конфигурации, поэтому в качестве базовой линии используются гиперпараметры обучения по умолчанию.
Подготовка к настройке гиперпараметров#
Перед началом процесса настройки важно:
- Определить метрики: встроенный настройщик (
use_ray=False) ранжирует испытания по показателю задачиfitness, аuse_ray=Trueиспользует метрику задачи. Определи, какие вторичные метрики ты будешь проверять, например AP50 или F1-score. - Задать бюджет настройки: определи, какой объём вычислительных ресурсов ты готов выделить. Настройка гиперпараметров может требовать значительных вычислительных ресурсов.
Как работает цикл настройки#
На каждой итерации встроенный настройщик повторяет следующий цикл:
- Инициализация гиперпараметров — начни с разумной базовой конфигурации: гиперпараметров по умолчанию, заданных Ultralytics YOLO, или значений на основе твоих знаний предметной области либо предыдущих экспериментов.
- Мутация гиперпараметров — класс
Tunerавтоматически создаёт новый набор гиперпараметров из существующего с помощью метода_mutate. - Обучение модели — обучи модель с изменёнными гиперпараметрами, затем оцени результаты обучения с помощью выбранных метрик.
- Оценка модели — процесс оценки формирует показатель fitness для итерации. Он сравнивается с показателями предыдущих итераций, чтобы определить, улучшились ли текущие гиперпараметры.
- Регистрация результатов — запиши метрики производительности и соответствующие гиперпараметры для последующего использования. Ultralytics YOLO автоматически сохраняет эти результаты в формате NDJSON.
- Повторение — продолжай, пока не будет достигнуто заданное число итераций; каждая итерация использует знания, полученные в предыдущих запусках. Встроенный настройщик выполняет все
iterations; Ray Tune сообщает метрики после каждой эпохи обучения, позволяя ASHA останавливать слабые испытания после завершения периода ожидания.
Итерации и размер популяции#
Во встроенном настройщике (use_ray=False) параметр iterations управляет общим числом последовательных испытаний и по умолчанию равен 300. Каждое испытание обучает одну модель с одной конфигурацией гиперпараметров — например, iterations=40 с epochs=50 планирует 40 независимых запусков обучения по 50 эпох, а не один запуск на 50 эпох с отдельной популяцией из 40 кандидатов.
Встроенный генетический алгоритм не имеет явного параметра размера популяции. После появления предыдущих испытаний он выбирает до девяти конфигураций с наилучшей fitness и изменяет одного кандидата на каждой итерации.
Для параллельных испытаний или более продвинутых стратегий поиска задай use_ray=True, чтобы использовать Ray Tune, который применяет то же значение по умолчанию — 300 испытаний — и получает iterations как num_samples. Подробнее см. в руководстве по интеграции Ray Tune.
Пространство поиска по умолчанию#
В следующей таблице перечислены параметры пространства поиска по умолчанию для настройки гиперпараметров в YOLO26. Для каждого параметра задан определённый диапазон значений кортежем (min, max).
| Параметр | Тип | Диапазон значений | Описание |
|---|---|---|---|
lr0 | float | (1e-5, 1e-2) | Начальная скорость обучения в начале обучения. Меньшие значения обеспечивают более стабильное обучение, но более медленную сходимость |
lrf | float | (0.01, 1.0) | Конечный коэффициент скорости обучения как доля lr0. Управляет степенью снижения скорости обучения во время обучения |
momentum | float | (0.7, 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 | (1.0, 20.0) | Вес потерь ограничивающих рамок в общей функции потерь. Балансирует регрессию рамок и классификацию |
cls | float | (0.1, 4.0) | Вес потерь классификации в общей функции потерь. Более высокие значения усиливают значение правильного предсказания класса |
cls_pw | float | (0.0, 1.0) | Степень взвешивания классов для обработки дисбаланса классов. Более высокие значения увеличивают вес редких классов |
dfl | float | (0.4, 12.0) | Вес члена регрессии расстояния до рамки. YOLO26 без DFL применяет этот коэффициент к потерям L1 для нормализованных расстояний до рамок; более высокие значения усиливают точность локализации |
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.95) | Диапазон случайной аугментации масштабирования. Помогает модели обнаруживать объекты разных размеров |
shear | float | (0.0, 10.0) | Максимальная аугментация сдвига в градусах. Добавляет искажения, напоминающие перспективные, в обучающие изображения |
perspective | float | (0.0, 0.001) | Диапазон случайной аугментации перспективы. Имитирует различные углы обзора |
flipud | float | (0.0, 1.0) | Вероятность вертикального отражения изображения во время обучения. Полезно для изображений, снятых сверху или с воздуха |
fliplr | float | (0.0, 1.0) | Вероятность горизонтального отражения изображения. Помогает модели стать инвариантной к направлению объекта |
bgr | float | (0.0, 1.0) | Вероятность использования аугментации BGR, меняющей местами цветовые каналы. Может повысить инвариантность к цвету |
mosaic | float | (0.0, 1.0) | Вероятность использования мозаичной аугментации, объединяющей 4 изображения. Особенно полезна для обнаружения небольших объектов |
mixup | float | (0.0, 1.0) | Вероятность использования аугментации mixup, объединяющей два изображения. Может повысить устойчивость модели |
cutmix | float | (0.0, 1.0) | Вероятность использования аугментации cutmix. Объединяет области изображений, сохраняя локальные признаки |
copy_paste | float | (0.0, 1.0) | В режиме flip — доля подходящих объектов, которые копируются; в режиме mixup — также вероятность её применения |
close_mosaic | int | (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}, чтобы возобновить работу. Без name возобновляется каталог с буквальным именем tune, то есть имя по умолчанию, а не каталог последнего запущенного сеанса; поэтому для запуска, начатого с пользовательским именем, передай name. Также необходимо указать все предыдущие аргументы обучения, включая data, epochs, iterations и space.
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)Результаты#
После успешного завершения настройки гиперпараметров ты получишь несколько файлов и каталогов, содержащих результаты настройки. Ниже описан каждый из них:
Структура файлов#
Структура каталога результатов будет выглядеть следующим образом. Каталоги обучения, например train/ и train-2/, содержат отдельные итерации настройки, то есть по одной модели, обученной с одним набором гиперпараметров. Каталог tune/ содержит результаты настройки всех отдельных обучений моделей:
runs/
└── detect/
├── train/
├── train-2/
├── ...
└── 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/l1_loss': 0.68503, 'fitness': 0.64297} # Best fitness model is /usr/src/ultralytics/runs/detect/tune/weights # 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#
Этот график отображает fitness в зависимости от числа итераций. Он помогает визуализировать работу генетического алгоритма с течением времени.
- Формат: PNG
- Использование: визуализация производительности
График содержит:
- По одному маркеру на каждую итерацию для каждого набора данных, поэтому запуск с одним набором данных показывает одну точку на итерацию, а запуск с несколькими наборами данных — по одной точке для каждого набора данных на каждой итерации.
- Пунктирную линию «сглаженное среднее», вычисленную с помощью гауссова сглаживания (
sigma=3) значений общей fitness для каждой итерации.
tune_results.ndjson#
Файл NDJSON с подробными результатами каждой итерации настройки. Каждая строка содержит один объект JSON с агрегированной fitness, настроенными гиперпараметрами и метриками для каждого набора данных. Для настройки на одном и нескольких наборах данных используется один и тот же формат файла.
- Формат: 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/l1_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/l1_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, и помогает визуализировать взаимосвязи между различными гиперпараметрами и метриками производительности. Мутация использует настроенный диапазон каждого гиперпараметра, поэтому значения могут эволюционировать от значений по умолчанию, равных нулю, таких как degrees и shear.
- Формат: PNG
- Использование: исследовательский анализ данных
weights/#
Этот каталог содержит сохранённые модели PyTorch из итерации запуска настройки с лучшей fitness. Оба файла относятся к одной и той же итерации:
last.pt: last.pt — это веса последней эпохи обучения.best.pt: веса best.pt относятся к итерации, достигшей наилучшего показателя fitness.
Используя эти результаты, ты сможешь принимать более обоснованные решения при дальнейшем обучении и анализе моделей.
Заключение#
Настройку гиперпараметров в Ultralytics YOLO легко запустить, а под капотом она использует отбор с весами fitness и мутацию, нормализованную относительно диапазона, в генетическом алгоритме. Следуя циклу, описанному в этом руководстве, ты сможешь систематически настроить модель для повышения производительности, а затем повторно использовать полученный best_hyperparameters.yaml для инициализации будущих запусков обучения. Чтобы масштабировать настройку на параллельные испытания и более продвинутые алгоритмы поиска, продолжи с руководством по интеграции Ray Tune или запускай управляемые задания с настраиваемыми гиперпараметрами и отслеживанием метрик в реальном времени на Ultralytics Platform с помощью облачного обучения.
Для параметров, которые не представлены ни одним аргументом, например скорости обучения для отдельных слоёв или пользовательской метрики fitness, вместо этого создай подкласс тренера. Чтобы получить более глубокое понимание, изучи исходный код класса Tuner. Если у тебя есть вопросы или запросы на добавление функций, напиши в GitHub или Discord.
Часто задаваемые вопросы#
Задай начальное значение с помощью параметра
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.
Генетические алгоритмы в Ultralytics YOLO26 обеспечивают надежный метод исследования пространства гиперпараметров, что позволяет добиться высокооптимизированной производительности модели. Ключевые преимущества:
- Эффективный поиск: отбор с учетом приспособленности сохраняет сильные конфигурации, а мутация с нормализацией по диапазону исследует новые варианты.
- Избегание локальных минимумов: благодаря внесению случайности они помогают избегать локальных минимумов, обеспечивая лучшую глобальную оптимизацию.
- Метрики производительности: они адаптируются на основе специфичной для задачи оценки приспособленности (mAP50-95 для обнаружения).
Чтобы узнать, как генетические алгоритмы могут оптимизировать гиперпараметры, ознакомься с руководством по эволюции гиперпараметров.
Время, необходимое для настройки гиперпараметров с помощью Ultralytics YOLO, в значительной степени зависит от нескольких факторов, таких как размер набора данных, сложность архитектуры модели, количество итераций и доступные вычислительные ресурсы. Например, настройка YOLO26n на наборе данных вроде COCO8 в течение 30 эпох может занять от нескольких часов до нескольких дней в зависимости от оборудования.
Чтобы эффективно управлять временем настройки, заранее определи четкий бюджет настройки, как описано в разделе Подготовка к настройке гиперпараметров. Это помогает сбалансировать распределение ресурсов и цели оптимизации.
При оценке производительности модели во время настройки гиперпараметров в YOLO можно использовать несколько ключевых метрик:
- AP50: средняя точность при пороге IoU 0,50.
- F1-Score: гармоническое среднее точности и полноты.
- Точность и полнота: отдельные метрики, показывающие точность модели при выявлении истинно положительных результатов по сравнению с ложно положительными и ложно отрицательными результатами.
Эти метрики помогают понять различные аспекты производительности модели. Для получения полного обзора ознакомься с руководством по метрикам производительности Ultralytics YOLO.
Да, Ultralytics YOLO26 интегрируется с Ray Tune для расширенной оптимизации гиперпараметров. Ray Tune предлагает сложные алгоритмы поиска, такие как байесовская оптимизация и Hyperband, а также возможности параллельного выполнения для ускорения процесса настройки.
Чтобы использовать Ray Tune с YOLO26, просто укажи параметр
use_ray=Trueв вызове методаmodel.tune(). Дополнительные сведения и примеры приведены в руководстве по интеграции Ray Tune.