Руководство Ultralytics по подбору гиперпараметров#
Настройка гиперпараметров в Ultralytics YOLO — это автоматизированный итеративный поиск, оптимизирующий параметры — такие как скорость обучения, веса функций потерь и интенсивность аугментации — для максимизации метрик производительности модели машинного обучения, например точности, прецизионности и полноты. Вместо того чтобы проверять эти значения вручную, Ultralytics YOLO исследует пространство гиперпараметров с помощью генетического алгоритма, который мутирует и оценивает кандидатные конфигурации в ходе множества коротких запусков обучения.
Смотри: Как настраивать гиперпараметры для повышения производительности модели 🚀
Что такое гиперпараметры?#
Гиперпараметры — это высокоуровневые структурные настройки алгоритма. Их задают до этапа обучения, и во время обучения они остаются неизменными. Вот некоторые гиперпараметры Ultralytics YOLO, которые часто настраивают:
- Скорость обучения
lr0: определяет размер шага на каждой итерации при движении к минимуму функции потерь. - Размер пакета
batch: количество изображений, обрабатываемых одновременно за один прямой проход. - Число эпох
epochs: одна эпоха — это полный прямой и обратный проход по всем обучающим примерам. - Особенности архитектуры: например, количество каналов и слоёв, типы функций активации и т. д. Эти параметры задаются в конфигурации модели YAML, а не в аргументах обучения.
Из этих четырёх параметров в пространство поиска по умолчанию входит только скорость обучения: batch, epochs и архитектура остаются неизменными. Настройщик также мутирует расписание, коэффициенты потерь и аугментации, перечисленные ниже.
Полный список гиперпараметров аугментации, используемых в YOLO26, смотри на странице конфигураций.
Генетическая эволюция и мутация#
Ultralytics YOLO использует генетические алгоритмы для оптимизации гиперпараметров. Генетические алгоритмы вдохновлены механизмами естественного отбора и генетики.
- Отбор: на каждой итерации выбирается одна из максимум девяти конфигураций с наилучшей приспособленностью, причём вероятность выбора пропорциональна приспособленности. После 30 результатов лучшие 20% всех результатов (не более 30) также используются для оценки ковариации параметров; её влияние растёт по мере накопления данных об элитных конфигурациях.
- Мутация: на каждой итерации примерно половина параметров мутирует с помощью гауссовых шагов, нормализованных по диапазонам поиска. Когда ковариация активна, доля не более 40%, взвешенная по уровню уверенности, использует коррелированные шаги; отражение возвращает эти шаги в допустимые границы, не накапливая отсечённые значения. Если испытания продолжаются без улучшений, размер шагов линейно уменьшается максимум на 20% за 25 испытаний и сбрасывается при появлении нового лучшего результата. У итерации 1 нет родительской конфигурации; в качестве базового уровня используются гиперпараметры обучения по умолчанию.
Подготовка к настройке гиперпараметров#
Перед началом настройки важно:
- Определи метрики: встроенный настройщик (
use_ray=False) ранжирует испытания по оценкеfitnessдля задачи, аuse_ray=Trueиспользует метрику задачи. Реши, какие дополнительные метрики ты будешь анализировать, например AP50 или F1-score. - Определи бюджет настройки: реши, сколько вычислительных ресурсов ты готов выделить. Настройка гиперпараметров может требовать больших вычислительных затрат.
Как работает цикл настройки#
На каждой итерации встроенный настройщик повторяет следующий цикл:
- Инициализация гиперпараметров — начни с разумных базовых значений: гиперпараметров по умолчанию, заданных Ultralytics YOLO, или значений, выбранных на основе твоих знаний предметной области либо предыдущих экспериментов.
- Мутация гиперпараметров — класс
Tunerавтоматически создаёт новый набор гиперпараметров на основе существующего с помощью метода_mutate. - Обучение модели — обучи модель с мутировавшими гиперпараметрами, а затем оцени качество обучения по выбранным метрикам.
- Оценка модели — процесс оценки вычисляет оценку приспособленности для итерации, которую сравнивают с результатами предыдущих итераций, чтобы определить, улучшились ли текущие гиперпараметры.
- Запись результатов — сохрани метрики производительности и соответствующие им гиперпараметры для дальнейшего использования. Ultralytics YOLO автоматически сохраняет эти результаты в формате NDJSON.
- Повторение — продолжай, пока не будет достигнуто заданное число итераций; каждая итерация использует знания, полученные в предыдущих запусках. Встроенный настройщик выполняет все
iterations; Ray Tune сообщает метрики после каждой эпохи обучения, позволяя ASHA останавливать слабые испытания по истечении льготного периода.
Число итераций и размер популяции#
Во встроенном настройщике (use_ray=False) параметр iterations задаёт общее число последовательных испытаний; по умолчанию он равен 300. В каждом испытании обучается одна модель с одной конфигурацией гиперпараметров. Например, iterations=40 вместе с epochs=50 задаёт 40 независимых запусков обучения по 50 эпох, а не один запуск на 50 эпох с отдельной популяцией из 40 кандидатов.
У встроенного генетического алгоритма нет отдельного параметра размера популяции. Когда доступны результаты предыдущих испытаний, алгоритм выбирает одну из максимум девяти конфигураций с наилучшей приспособленностью и мутирует одного кандидата за итерацию.
Для параллельных испытаний или более продвинутых стратегий поиска задай 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
# Инициализация модели YOLO
model = YOLO("yolo26n.pt")
# Определение пространства поиска
search_space = {
"lr0": (1e-5, 1e-2),
"degrees": (0.0, 45.0),
}
# Настройка гиперпараметров на COCO8 в течение 30 эпох
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
# Определение модели YOLO
model = YOLO("yolo26n.pt")
# Определение пространства поиска
search_space = {
"lr0": (1e-5, 1e-2),
"degrees": (0.0, 45.0),
}
# Возобновление предыдущего запуска
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)
# Возобновление настройки с именем 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)Результаты#
После успешного завершения настройки гиперпараметров ты получишь несколько файлов и каталогов с результатами настройки. Ниже описан каждый из них:
Структура файлов#
Вот как будет выглядеть структура каталогов с результатами. Каталоги перебора, например multitrain/ и multitrain-2/, содержат отдельные итерации настройки: в каждой обучается одна модель на каждом наборе данных с одним набором гиперпараметров, в подкаталоге с именем соответствующего набора данных. Для экономии места настройщик удаляет каталоги запусков для каждого набора данных в итерациях, которые не стали лучшими на текущий момент. Каталог tune/ содержит результаты настройки по всем отдельным запускам обучения моделей:
runs/
└── detect/
├── multitrain/
│ └── coco8/
├── multitrain-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#
На этом графике показана зависимость приспособленности от числа итераций. Он помогает наглядно оценить работу генетического алгоритма с течением времени.
- Формат: 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/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/multitrain/coco8",
"coco8-grayscale": "runs/detect/multitrain/coco8-grayscale"
}
}Значение верхнего уровня fitness — это среднее арифметическое значений fitness для каждого набора данных. При настройке на одном наборе данных словарь datasets содержит одну запись, где fitness равно значению fitness верхнего уровня. Для каждой завершённой итерации записывается один объект JSON. В действительности пути save_dirs являются абсолютными; выше они сокращены для удобства чтения.
tune_scatter_plots.png#
Этот файл содержит диаграммы рассеяния, построенные на основе tune_results.ndjson, которые помогают наглядно увидеть взаимосвязи между разными гиперпараметрами и метриками производительности. При мутации используются заданные диапазоны каждого гиперпараметра, поэтому значения могут изменяться даже от нулевых значений по умолчанию, например degrees и shear.
- Формат: PNG
- Использование: исследовательский анализ данных
weights/#
Этот каталог содержит сохранённые модели PyTorch из итерации настройки с наилучшей оценкой приспособленности. Оба файла относятся к одной и той же итерации:
last.pt: файл last.pt содержит веса с последней эпохи обучения.best.pt: веса best.pt относятся к итерации с наилучшей оценкой приспособленности.
Используя эти результаты, ты сможешь принимать более обоснованные решения при дальнейшем обучении моделей и проведении анализа.
Заключение#
Настройку гиперпараметров Ultralytics YOLO легко запустить, а её внутренняя логика очень эффективна: генетический алгоритм использует отбор с учётом fitness и мутации с нормализацией диапазона. Следуя циклу, описанному в этом руководстве, ты сможешь систематически настроить модель для повышения производительности, а затем повторно использовать полученный best_hyperparameters.yaml для инициализации будущих запусков обучения. Чтобы масштабировать настройку на параллельные испытания и более продвинутые алгоритмы поиска, ознакомься с руководством по интеграции Ray Tune или запускай управляемые задания с настраиваемыми гиперпараметрами и отслеживанием метрик в реальном времени на Ultralytics Platform с помощью облачного обучения.
Если нужную настройку нельзя задать ни одним аргументом, например скорость обучения для каждого слоя или пользовательскую метрику fitness, вместо этого создай подкласс trainer. Чтобы разобраться глубже, изучи исходный код класса Tuner. Если у тебя есть вопросы или предложения по функциям, напиши нам на GitHub или Discord.
Часто задаваемые вопросы#
Задай начальное значение параметром
lr0— обычно значения находятся в диапазоне от0.001до0.01, — а затем позволь настройке изменять его, чтобы найти оптимальное значение. Автоматизировать этот процесс можно с помощью методаmodel.tune(). Например:Примерfrom ultralytics import YOLO # Инициализация модели YOLO model = YOLO("yolo26n.pt") # Настройка гиперпараметров на COCO8 в течение 30 эпох model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)Подробнее см. на странице конфигурации Ultralytics YOLO.
Генетические алгоритмы в Ultralytics YOLO26 обеспечивают надёжный способ исследовать пространство гиперпараметров и добиваться высокой производительности модели. К основным преимуществам относятся:
- Эффективный поиск: отбор с учётом fitness сохраняет удачные конфигурации, а мутации с нормализацией диапазона исследуют новые варианты.
- Избежание локальных минимумов: добавляя случайность, алгоритмы помогают избегать локальных минимумов и улучшают глобальную оптимизацию.
- Метрики производительности: алгоритмы адаптируются на основе оценки fitness для конкретной задачи (mAP50-95 для обнаружения объектов).
Чтобы узнать, как генетические алгоритмы помогают оптимизировать гиперпараметры, ознакомься с руководством по эволюции гиперпараметров.
Продолжительность настройки гиперпараметров Ultralytics YOLO в основном зависит от нескольких факторов: размера набора данных, сложности архитектуры модели, количества итераций и доступных вычислительных ресурсов. Например, настройка YOLO26n на таком наборе данных, как COCO8, в течение 30 эпох может занять от нескольких часов до нескольких дней — в зависимости от оборудования.
Чтобы эффективно управлять временем настройки, заранее определи бюджет на неё, как описано в разделе «Подготовка к настройке гиперпараметров». Это поможет сбалансировать распределение ресурсов и цели оптимизации.
При оценке производительности модели во время настройки гиперпараметров YOLO можно использовать несколько основных метрик:
- AP50: средняя точность при пороге IoU 0.50.
- F1-мера: гармоническое среднее точности и полноты.
- Точность и полнота: отдельные метрики, показывающие точность модели при определении истинно положительных результатов в сравнении с ложноположительными и ложноотрицательными результатами.
Эти метрики помогают понять разные стороны производительности модели. Подробный обзор см. в руководстве по метрикам производительности Ultralytics YOLO.
Да, Ultralytics YOLO26 интегрируется с Ray Tune, позволяя выполнять продвинутую оптимизацию гиперпараметров. Ray Tune предлагает сложные алгоритмы поиска, например байесовскую оптимизацию и Hyperband, а также параллельное выполнение для ускорения настройки.
Чтобы использовать Ray Tune с YOLO26, просто задай параметр
use_ray=Trueпри вызове методаmodel.tune(). Подробнее и примеры см. в руководстве по интеграции Ray Tune.