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: Эпоха — это один полный прямой и обратный проход по всем обучающим примерам. - Специфика архитектуры: Например, количество каналов, количество слоев, типы функций активации и т. д.
Полный список гиперпараметров аугментации, используемых в YOLO26, см. на странице конфигураций.
Link to this sectionГенетическая эволюция и мутация#
Ultralytics YOLO использует генетические алгоритмы для оптимизации гиперпараметров. Генетические алгоритмы вдохновлены механизмом естественного отбора и генетикой.
- Кроссовер: Каждая итерация объединяет гены до девяти конфигураций с наилучшей приспособленностью (fitness), найденных на данный момент, с использованием кроссовера BLX-α и выбора родителей, взвешенного по приспособленности.
- Мутация: Рекомбинированный кандидат затем подвергается возмущению с помощью логнормального мультипликативного коэффициента, примененного к каждому гиперпараметру (с вероятностью 0.5 на параметр). Сила мутации сигма линейно убывает с 0.2 до 0.1 в течение первых 300 итераций, чтобы алгоритм исследовал пространство широко на раннем этапе и уточнял поиск по мере сходимости. На 1-й итерации нет родителей для кроссовера, поэтому используются гиперпараметры обучения по умолчанию в качестве базовых.
Link to this sectionПодготовка к настройке гиперпараметров#
Прежде чем начать процесс настройки, важно выполнить следующее:
- Определи метрики: Установи метрики, которые ты будешь использовать для оценки производительности модели. Это могут быть AP50, F1-score или другие.
- Установи бюджет настройки: Определи, сколько вычислительных ресурсов ты готов выделить. Настройка гиперпараметров может быть ресурсоемкой.
Link to this sectionКак работает цикл настройки#
Для каждой итерации встроенный настройщик повторяет следующий цикл:
- Инициализация гиперпараметров — начни с разумного базового уровня: либо с гиперпараметров по умолчанию, установленных в Ultralytics YOLO, либо со значений, основанных на твоих экспертных знаниях в предметной области или предыдущих экспериментах.
- Мутация гиперпараметров — класс
Tunerавтоматически создает новый набор гиперпараметров из существующего с помощью метода_mutate. - Обучение модели — обучай модель, используя мутировавшие гиперпараметры, а затем оценивай результаты обучения с помощью выбранных тобой метрик.
- Оценка модели — используй такие метрики, как AP50, F1-score или свои собственные метрики в рамках процесса оценки, чтобы определить, улучшают ли текущие гиперпараметры предыдущие результаты.
- Регистрация результатов — записывай как метрики эффективности, так и соответствующие им гиперпараметры для дальнейшего использования. Ultralytics YOLO автоматически сохраняет эти результаты в формате NDJSON.
- Повторение — продолжай, пока не будет достигнуто заданное количество итераций или удовлетворительная метрика эффективности, при этом каждая итерация опирается на знания, полученные в ходе предыдущих запусков.
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).
| Параметр | Тип | Диапазон значений | Описание |
|---|---|---|---|
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) | Вес DFL (Distribution Focal Loss) в общей функции потерь. Более высокие значения делают упор на точную локализацию ограничивающей рамки |
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) | Вероятность использования аугментации copy-paste. Помогает улучшить производительность сегментации экземпляров |
close_mosaic | float | (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.
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.ptLink 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
- Использование: Визуализация производительности
График содержит:
- Один маркер на итерацию на набор данных, поэтому запуск на одном наборе данных показывает одну точку на итерацию, а запуск на нескольких наборах данных показывает одну точку на набор данных на итерацию.
- Пунктирная линия "сглаженного среднего", вычисленная как гауссовское сглаживание (
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
- Использование: Исследовательский анализ данных
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.