Руководство по настройке гиперпараметров в Ultralytics YOLO#
Настройка гиперпараметров в Ultralytics YOLO — это автоматизированный итеративный поиск, который оптимизирует такие параметры, как скорость обучения, веса потерь и сила аугментации, чтобы максимизировать метрики производительности модели машинного обучения, такие как точность (accuracy), прецизионность (precision) и полнота (recall). Вместо ручного тестирования этих значений Ultralytics YOLO исследует пространство гиперпараметров с помощью генетического алгоритм, который мутирует и оценивает конфигурации-кандидаты в ходе множества коротких тренировочных запусков.
Watch: How to Tune Hyperparameters for Better Model Performance 🚀
Что такое гиперпараметры?#
Гиперпараметры — это высокоуровневые структурные настройки алгоритма. Они задаются до этапа обучения и остаются неизменными во время него. Вот некоторые часто настраиваемые гиперпараметры в Ultralytics YOLO:
- Скорость обучения (Learning Rate)
lr0: определяет размер шага на каждой итерации при приближении к минимуму в функции потерь. - Размер батча (Batch Size)
batch: количество изображений, обрабатываемых одновременно в ходе прямого прохода (forward pass). - Количество эпох (Epochs)
epochs: эпоха — это один полный прямой и обратный проход по всем обучающим примерам. - Особенности архитектуры: такие как количество каналов, количество слоев, типы функций активации и т. д. Они находятся в конфигурации модели YAML, а не в аргументах обучения.
Из этих четырех только скорость обучения входит в пространство поиска по умолчанию: batch, epochs и архитектура остаются фиксированными. Тюнер также изменяет расписание, веса потерь и аугментации, перечисленные ниже.
Полный список гиперпараметров аугментации, используемых в YOLO26, см. на странице конфигураций.
Генетическая эволюция и мутация#
Ultralytics YOLO использует генетические алгоритмы для оптимизации гиперпараметров. Генетические алгоритмы вдохновлены механизмами естественного отбора и генетики.
- Кроссовер: Каждая итерация объединяет гены до девяти конфигураций с наилучшей приспособленностью (fitness), найденных на данный момент, с использованием кроссовера BLX-α и выбора родителей, взвешенного по приспособленности.
- Мутация: Рекомбинированный кандидат затем подвергается возмущению с помощью логнормального мультипликативного коэффициента, примененного к каждому гиперпараметру (с вероятностью 0.5 на параметр). Сила мутации сигма линейно убывает с 0.2 до 0.1 в течение первых 300 итераций, чтобы алгоритм исследовал пространство широко на раннем этапе и уточнял поиск по мере сходимости. На 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 контролируют общее количество последовательных испытаний. Каждое испытание обучает одну модель с одной конфигурацией гиперпараметров — например, iterations=40 с epochs=50 планирует 40 независимых 50-эпохальных обучающих запусков, а не один 50-эпохальный запуск с отдельной популяцией из 40 кандидатов.
Встроенный генетический алгоритм не имеет явного параметра размера популяции. Как только появляются предыдущие испытания, он выбирает до девяти конфигураций с наилучшей приспособленностью в качестве родителей, применяет кроссовер BLX-α и мутацию, создавая одного кандидата за итерацию.
Для параллельных испытаний или более сложных стратегий поиска установи для use_ray=True значение Ray Tune, который принимает 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) | Коэффициент импульса (momentum) SGD. Более высокие значения помогают поддерживать постоянное направление градиента и могут ускорить сходимость |
weight_decay | float | (0.0, 0.001) | Коэффициент L2-регуляризации для предотвращения переобучения. Большие значения обеспечивают более сильную регуляризацию |
warmup_epochs | float | (0.0, 5.0) | Количество эпох для линейного прогрева (warmup) скорости обучения. Помогает предотвратить нестабильность в начале обучения |
warmup_momentum | float | (0.0, 0.95) | Начальный импульс (momentum) во время фазы прогрева. Постепенно увеличивается до конечного значения импульса |
box | float | (1.0, 20.0) | Вес функции потерь ограничивающей рамки (bbox) в общей функции потерь. Балансирует регрессию рамок относительно классификации |
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) | Диапазон случайной аугментации оттенка (hue) в цветовом пространстве HSV. Помогает модели обобщать цветовые вариации |
hsv_s | float | (0.0, 0.9) | Диапазон случайной аугментации насыщенности (saturation) в пространстве HSV. Симулирует различные условия освещения |
hsv_v | float | (0.0, 0.9) | Диапазон случайной аугментации значения (яркости/brightness). Помогает модели справляться с разными уровнями экспозиции |
degrees | float | (0.0, 45.0) | Максимальная аугментация вращения в градусах. Помогает модели стать инвариантной к ориентации объекта |
translate | float | (0.0, 0.9) | Максимальная аугментация переноса как доля от размера изображения. Улучшает устойчивость к положению объекта |
scale | float | (0.0, 0.95) | Диапазон случайной аугментации масштабирования. Помогает модели обнаруживать объекты разных размеров |
shear | float | (0.0, 10.0) | Максимальная аугментация сдвига (shear) в градусах. Добавляет перспективные искажения к изображениям для обучения |
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) | Вероятность использования аугментации mosaic, которая объединяет 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-объект с совокупной приспособленностью, настроенными гиперпараметрами и метриками для каждого набора данных. Настройка на одном и нескольких наборах данных использует один и тот же формат файла.
- Формат: 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, которые помогают визуализировать взаимосвязи между различными гиперпараметрами и метриками производительности. Гиперпараметры, значение по умолчанию которых равно 0 (например, degrees и shear ниже), могут изменяться лишь медленно от своего исходного состояния, поскольку мультипликативный коэффициент мутации имеет очень маленький диапазон для расширения из околонулевого значения.
- Формат: PNG
- Использование: Исследовательский анализ данных
weights/#
Этот каталог содержит сохраненные модели PyTorch с наилучшим показателем пригодности итерации настройки. Оба файла получены из той же итерации:
last.pt: Файл last.pt содержит веса последней эпохи обучения.best.pt: Файл best.pt содержит веса для итерации, которая достигла наилучшего значения пригодности (fitness score).
Используя эти результаты, ты можешь принимать более обоснованные решения для будущих обучений и анализов модели.
Заключение#
Настройка гиперпараметров в Ultralytics YOLO проста в запуске и обладает мощными возможностями «под капотом», сочетая кроссовер BLX-α с лог-нормальной мутацией в генетическом алгоритме. Следование циклу, описанному в этом руководстве, позволяет систематически настраивать модель для достижения лучшей производительности, а затем повторно использовать полученный файл best_hyperparameters.yaml для инициализации будущих запусков обучения. Чтобы масштабировать настройку на параллельные испытания и более продвинутые алгоритмы поиска, перейди к руководству по интеграции Ray Tune или запусти управляемые задания с настраиваемыми гиперпараметрами и отслеживанием метрик в реальном времени на Ultralytics Platform посредством облачного обучения.
Для настроек, которые не поддерживаются ни одним аргументом, таких как скорости обучения для каждого слоя или пользовательская метрика пригодности, вместо этого унаследуй класс тренера. Для более глубокого понимания изучи исходный код класса Tuner. Если у тебя есть вопросы или запросы на новые функции, обращайся на GitHub или в Discord.
FAQ#
Установи начальное значение с помощью параметра
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 предоставляют надежный метод исследования пространства гиперпараметров, что приводит к высокооптимизированной производительности модели. Основные преимущества включают:
- Эффективный поиск: Скрещивание BLX-α комбинирует гены от родителей с наилучшей приспособленностью, в то время как логнормальная мутация вносит возмущения в результат для обнаружения новых кандидатов.
- Избегание локальных минимумов: Благодаря внесению случайности они помогают избежать локальных минимумов, обеспечивая лучшую глобальную оптимизацию.
- Метрики производительности: Они адаптируются на основе оценки приспособленности, специфичной для задачи (mAP50-95 для обнаружения).
Чтобы узнать, как генетические алгоритмы могут оптимизировать гиперпараметры, ознакомься с руководством по эволюции гиперпараметров.
Время, необходимое для настройки гиперпараметров в Ultralytics YOLO, во многом зависит от нескольких факторов, таких как размер набора данных, сложность архитектуры модели, количество итераций и доступные вычислительные ресурсы. Например, настройка YOLO26n на таком наборе данных, как COCO8, в течение 30 эпох может занять от нескольких часов до нескольких дней, в зависимости от оборудования.
Чтобы эффективно управлять временем настройки, заранее определи четкий бюджет настройки, как описано в разделе Подготовка к настройке гиперпараметров. Это поможет сбалансировать распределение ресурсов и цели оптимизации.
При оценке производительности модели во время настройки гиперпараметров в YOLO ты можешь использовать несколько ключевых метрик:
- AP50: Средняя точность при пороге IoU 0.50.
- F1-Score: Гармоническое среднее точности (precision) и полноты (recall).
- Точность (Precision) и полнота (Recall): отдельные метрики, указывающие на точность модели при определении истинных срабатываний (true positives) по сравнению с ложными срабатываниями (false positives) и ложными пропусками (false negatives).
Эти метрики помогут тебе понять различные аспекты производительности модели. Для получения полного обзора обратись к руководству по метрикам производительности Ultralytics YOLO.
Да, Ultralytics YOLO26 интегрируется с Ray Tune для расширенной оптимизации гиперпараметров. Ray Tune предлагает сложные алгоритмы поиска, такие как байесовская оптимизация и Hyperband, а также возможности параллельного выполнения для ускорения процесса настройки.
Чтобы использовать Ray Tune с YOLO26, просто задай параметр
use_ray=Trueв вызове методаmodel.tune(). Подробности и примеры можно найти в руководстве по интеграции Ray Tune.