Руководство по настройке гиперпараметров в Ultralytics YOLO
Введение
Настройка гиперпараметров — это не разовая операция, а итеративный процесс, направленный на улучшение метрик производительности машинного обучения, таких как точность (accuracy), прецизионность (precision) и полнота (recall). В контексте Ultralytics YOLO эти гиперпараметры могут варьироваться от скорости обучения до архитектурных деталей, например, количества слоев или типов используемых функций активации. Платформа Ultralytics также поддерживает обучение в облаке с настраиваемыми гиперпараметрами и отслеживанием метрик в реальном времени.
Watch: How to Tune Hyperparameters for Better Model Performance 🚀
Что такое гиперпараметры?
Гиперпараметры — это высокоуровневые структурные настройки алгоритма. Они задаются до начала этапа обучения и остаются неизменными в процессе. Вот некоторые часто настраиваемые гиперпараметры в Ultralytics YOLO:
- Скорость обучения (Learning Rate)
lr0: определяет размер шага на каждой итерации при движении к минимуму функции потерь. - Размер пакета
batch: количество изображений, обрабатываемых одновременно за один прямой проход. - Количество эпох
epochs: эпоха — это один полный прямой и обратный проход по всем обучающим примерам. - Особенности архитектуры: например, количество каналов, число слоев, типы функций активации и т. д.
Полный список гиперпараметров аугментации, используемых в YOLO26, можно найти на странице конфигураций.
Генетическая эволюция и мутация
Ultralytics YOLO использует генетические алгоритмы для оптимизации гиперпараметров. Генетические алгоритмы вдохновлены механизмами естественного отбора и генетики.
- Кроссовер (скрещивание): каждая итерация объединяет гены до девяти наиболее подходящих конфигураций, найденных на данный момент, с использованием кроссовера BLX-α и выбора родителей на основе их веса (фитнеса).
- Мутация: рекомбинированный кандидат затем подвергается воздействию логарифмически нормального мультипликативного множителя, применяемого к каждому гиперпараметру (с вероятностью 0,5 на параметр). Сила мутации (сигма) линейно убывает с 0,2 до 0,1 в течение первых 300 итераций, чтобы алгоритм мог проводить широкий поиск в начале и уточнять результат по мере сходимости. На 1-й итерации нет родителей для скрещивания, поэтому в качестве базовой линии используются стандартные гиперпараметры обучения.
Подготовка к настройке гиперпараметров
Перед началом процесса настройки важно:
- Определить метрики: выбери показатели, по которым будешь оценивать работу модели. Это могут быть AP50, F1-score или другие.
- Установить бюджет на настройку: определи, какой объем вычислительных ресурсов ты готов выделить. Настройка гиперпараметров может быть ресурсоемкой задачей.
Этапы процесса
Инициализация гиперпараметров
Начни с разумного набора начальных гиперпараметров. Это могут быть стандартные гиперпараметры, заданные в Ultralytics YOLO, либо параметры, основанные на твоих знаниях предметной области или предыдущих экспериментах.
Мутация гиперпараметров
Используй метод _mutate для создания нового набора гиперпараметров на основе уже существующего. Класс Tuner выполняет этот процесс автоматически.
Обучение модели
Обучение выполняется с использованием мутировавшего набора гиперпараметров. Затем производительность обучения оценивается по выбранным тобой метрикам.
Оценка модели
Используй метрики, такие как AP50, F1-score или пользовательские метрики, для оценки качества модели. Процесс оценки помогает понять, стали ли текущие гиперпараметры лучше предыдущих.
Логирование результатов
Крайне важно записывать (логировать) как метрики производительности, так и соответствующие им гиперпараметры для дальнейшего использования. Ultralytics YOLO автоматически сохраняет эти результаты в формате NDJSON.
Повторение
Процесс повторяется до тех пор, пока не будет достигнуто заданное количество итераций или пока метрика производительности не станет удовлетворительной. Каждая итерация строится на знаниях, полученных из предыдущих запусков.
Описание пространства поиска по умолчанию
В следующей таблице перечислены параметры пространства поиска по умолчанию для настройки гиперпараметров в 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) | Начальный импульс на фазе прогрева. Постепенно увеличивается до конечного значения импульса |
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) | Диапазон случайной аугментации яркости (value). Помогает модели справляться с разными уровнями экспозиции |
degrees | float | (0.0, 45.0) | Максимальный угол поворота при аугментации. Помогает модели стать инвариантной к ориентации объектов |
translate | float | (0.0, 0.9) | Максимальный сдвиг (translation) при аугментации как доля размера изображения. Улучшает устойчивость к положению объекта |
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) | Вероятность использования мозаичной аугментации, которая объединяет 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) | Отключает мозаику в последние 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}, для возобновления конкретного сеанса. В противном случае будет возобновлен последний прерванный сеанс. Тебе также нужно предоставить все предыдущие аргументы обучения, включая 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)Results
После успешного завершения процесса настройки гиперпараметров ты получишь несколько файлов и каталогов, содержащих результаты настройки. Ниже описано содержимое каждого из них:
Структура файлов
Вот как будет выглядеть структура каталогов с результатами. Тренировочные директории, такие как 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Описание файлов
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/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
tune_fitness.png
Это график, отображающий зависимость приспособленности (fitness) от количества итераций. Он помогает тебе визуализировать работу генетического алгоритма с течением времени.
- Формат: PNG
- Использование: Визуализация производительности
График содержит:
- Один маркер на итерацию для каждого набора данных, поэтому для одного набора данных отображается одна точка на итерацию, а для нескольких наборов данных — по одной точке на каждый набор данных для каждой итерации.
- Пунктирная линия "сглаженного среднего", вычисленная с помощью гауссова сглаживания (
sigma=3) по значениям максимальной приспособленности на каждой итерации.
tune_results.ndjson
Файл NDJSON, содержащий подробные результаты каждой итерации настройки. Каждая строка представляет собой JSON-объект с совокупной приспособленностью, настроенными гиперпараметрами и метриками для каждого набора данных. При настройке на одном или нескольких наборах данных используется один и тот же формат файла.
- Формат: NDJSON
- Использование: Отслеживание результатов каждой итерации.
- Пример:
Ниже для наглядности приведен пример в отформатированном виде (pretty-printed). В реальном файле .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"
}
}The top-level fitness is the arithmetic mean of the per-dataset fitness values. For single-dataset tuning the datasets dict has one entry whose fitness equals the top-level fitness. One JSON object is recorded per completed iteration. The actual save_dirs paths are absolute; they are abbreviated above for readability.
tune_scatter_plots.png
Этот файл содержит диаграммы рассеяния, созданные на основе tune_results.ndjson, которые помогают тебе визуализировать взаимосвязи между различными гиперпараметрами и метриками производительности. Гиперпараметры, значение которых по умолчанию равно 0 (например, degrees и shear ниже), могут развиваться медленно от своего начального значения, поскольку мультипликативный фактор мутации имеет очень ограниченный диапазон для роста от значения, близкого к нулю.
- Формат: PNG
- Использование: Исследовательский анализ данных
weights/
В этой директории находятся сохраненные модели PyTorch для последней и лучшей итераций в процессе настройки гиперпараметров.
last.pt: last.pt — это веса с последней эпохи обучения.best.pt: best.pt — это веса для итерации, которая достигла наилучшего показателя приспособленности.
Используя эти результаты, ты сможешь принимать более обоснованные решения для своих будущих тренировок моделей и анализов. Не стесняйся обращаться к этим артефактам, чтобы понять, насколько хорошо работала твоя модель и как ее можно улучшить в дальнейшем.
Заключение
Процесс настройки гиперпараметров в Ultralytics YOLO упрощен, но эффективен благодаря подходу, основанному на генетическом алгоритме, который объединяет кроссовер BLX-α и логнормальную мутацию. Следование шагам, описанным в этом руководстве, поможет тебе систематически настраивать модель для достижения более высокой производительности.
Дополнительные материалы
- Оптимизация гиперпараметров в Википедии
- Руководство по эволюции гиперпараметров YOLOv5
- Эффективная настройка гиперпараметров с помощью Ray Tune и YOLO26
Чтобы получить более глубокое понимание, ты можешь изучить исходный код Tuner class и соответствующую документацию. Если у тебя возникнут вопросы, пожелания по новым функциям или потребуется помощь, смело обращайся к нам на GitHub или в Discord.
Часто задаваемые вопросы (FAQ)
Как мне оптимизировать learning rate для Ultralytics YOLO во время настройки гиперпараметров?
Чтобы оптимизировать скорость обучения (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.
Каковы преимущества использования генетических алгоритмов для настройки гиперпараметров в YOLO26?
Генетические алгоритмы в Ultralytics YOLO26 предоставляют надежный метод исследования пространства гиперпараметров, что приводит к высокой оптимизации производительности модели. Основные преимущества включают:
- Эффективный поиск: Кроссовер BLX-α комбинирует гены родителей с наивысшей приспособленностью, а логнормальная мутация вносит возмущения в результат для обнаружения новых кандидатов.
- Избежание локальных минимумов: Благодаря внесению случайности они помогают избежать локальных минимумов, обеспечивая лучшую глобальную оптимизацию.
- Метрики производительности: Они адаптируются на основе оценки приспособленности, специфичной для задачи (mAP50-95 для детекции).
Чтобы увидеть, как генетические алгоритмы могут оптимизировать гиперпараметры, ознакомься с руководством по эволюции гиперпараметров.
Сколько времени занимает процесс настройки гиперпараметров для Ultralytics YOLO?
Время, необходимое для настройки гиперпараметров с помощью Ultralytics YOLO, во многом зависит от таких факторов, как размер набора данных, сложность архитектуры модели, количество итераций и доступные вычислительные ресурсы. Например, настройка YOLO26n на таком наборе данных, как COCO8, в течение 30 эпох может занять от нескольких часов до нескольких дней в зависимости от оборудования.
Чтобы эффективно управлять временем настройки, заранее определи четкий бюджет настройки (ссылка на внутренний раздел). Это помогает сбалансировать распределение ресурсов и цели оптимизации.
Какие метрики мне следует использовать для оценки производительности модели во время настройки гиперпараметров в YOLO?
При оценке производительности модели во время настройки гиперпараметров в YOLO ты можешь использовать несколько ключевых метрик:
- AP50: Средняя точность (Average Precision) при пороге IoU 0.50.
- F1-Score: Гармоническое среднее точности (precision) и полноты (recall).
- Precision и Recall: Индивидуальные метрики, указывающие на точность модели при идентификации истинно положительных результатов по сравнению с ложноположительными и ложноотрицательными.
Эти метрики помогут тебе понять различные аспекты производительности твоей модели. Обратись к руководству по метрикам производительности Ultralytics YOLO для получения подробного обзора.
Могу ли я использовать Ray Tune для расширенной оптимизации гиперпараметров с YOLO26?
Да, Ultralytics YOLO26 интегрируется с Ray Tune для расширенной оптимизации гиперпараметров. Ray Tune предлагает сложные алгоритмы поиска, такие как байесовская оптимизация и Hyperband, а также возможности параллельного выполнения для ускорения процесса настройки.
Чтобы использовать Ray Tune с YOLO26, просто установи параметр use_ray=True в своем вызове метода model.tune(). Для получения более подробной информации и примеров ознакомься с руководством по интеграции Ray Tune.