Link to this sectionРуководство по настройке гиперпараметров в Ultralytics YOLO#
Link to this sectionВведение#
Настройка гиперпараметров — это не разовая операция, а итеративный процесс, направленный на улучшение метрик производительности машинного обучения, таких как точность (accuracy), прецизионность (precision) и полнота (recall). В контексте Ultralytics YOLO эти гиперпараметры могут варьироваться от скорости обучения до архитектурных деталей, например, количества слоев или типов используемых функций активации. Платформа Ultralytics также поддерживает обучение в облаке с настраиваемыми гиперпараметрами и отслеживанием метрик в реальном времени.
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 использует генетические алгоритмы для оптимизации гиперпараметров. Генетические алгоритмы вдохновлены механизмами естественного отбора и генетики.
- Кроссовер (скрещивание): каждая итерация объединяет гены до девяти наиболее подходящих конфигураций, найденных на данный момент, с использованием кроссовера BLX-α и выбора родителей на основе их веса (фитнеса).
- Мутация: рекомбинированный кандидат затем подвергается воздействию логарифмически нормального мультипликативного множителя, применяемого к каждому гиперпараметру (с вероятностью 0,5 на параметр). Сила мутации (сигма) линейно убывает с 0,2 до 0,1 в течение первых 300 итераций, чтобы алгоритм мог проводить широкий поиск в начале и уточнять результат по мере сходимости. На 1-й итерации нет родителей для скрещивания, поэтому в качестве базовой линии используются стандартные гиперпараметры обучения.
Link to this sectionПодготовка к настройке гиперпараметров#
Перед началом процесса настройки важно:
- Определить метрики: выбери показатели, по которым будешь оценивать работу модели. Это могут быть AP50, F1-score или другие.
- Установить бюджет на настройку: определи, какой объем вычислительных ресурсов ты готов выделить. Настройка гиперпараметров может быть ресурсоемкой задачей.
Link to this sectionЭтапы процесса#
Link to this sectionИнициализация гиперпараметров#
Начни с разумного набора начальных гиперпараметров. Это могут быть стандартные гиперпараметры, заданные в Ultralytics YOLO, либо параметры, основанные на твоих знаниях предметной области или предыдущих экспериментах.
Link to this sectionМутация гиперпараметров#
Используй метод _mutate для создания нового набора гиперпараметров на основе уже существующего. Класс Tuner выполняет этот процесс автоматически.
Link to this sectionОбучение модели#
Обучение выполняется с использованием мутировавшего набора гиперпараметров. Затем производительность обучения оценивается по выбранным тобой метрикам.
Link to this sectionОценка модели#
Используй метрики, такие как AP50, F1-score или пользовательские метрики, для оценки качества модели. Процесс оценки помогает понять, стали ли текущие гиперпараметры лучше предыдущих.
Link to this sectionЛогирование результатов#
Крайне важно записывать (логировать) как метрики производительности, так и соответствующие им гиперпараметры для дальнейшего использования. Ultralytics YOLO автоматически сохраняет эти результаты в формате NDJSON.
Link to this sectionПовторение#
Процесс повторяется до тех пор, пока не будет достигнуто заданное количество итераций или пока метрика производительности не станет удовлетворительной. Каждая итерация строится на знаниях, полученных из предыдущих запусков.
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) | Начальный импульс на фазе прогрева. Постепенно увеличивается до конечного значения импульса |
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 эпох для стабилизации обучения перед завершением |
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 sectionResults#
После успешного завершения процесса настройки гиперпараметров ты получишь несколько файлов и каталогов, содержащих результаты настройки. Ниже описано содержимое каждого из них:
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
- Использование: Отслеживание результатов каждой итерации.
- Пример:
Ниже для наглядности приведен пример в отформатированном виде (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.
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 — это веса для итерации, которая достигла наилучшего показателя приспособленности.
Используя эти результаты, ты сможешь принимать более обоснованные решения для своих будущих тренировок моделей и анализов. Не стесняйся обращаться к этим артефактам, чтобы понять, насколько хорошо работала твоя модель и как ее можно улучшить в дальнейшем.
Link to this sectionЗаключение#
Процесс настройки гиперпараметров в Ultralytics YOLO упрощен, но эффективен благодаря подходу, основанному на генетическом алгоритме, который объединяет кроссовер BLX-α и логнормальную мутацию. Следование шагам, описанным в этом руководстве, поможет тебе систематически настраивать модель для достижения более высокой производительности.
Link to this sectionДополнительные материалы#
- Оптимизация гиперпараметров в Википедии
- Руководство по эволюции гиперпараметров YOLOv5
- Эффективная настройка гиперпараметров с помощью Ray Tune и YOLO26
Чтобы получить более глубокое понимание, ты можешь изучить исходный код Tuner class и соответствующую документацию. Если у тебя возникнут вопросы, пожелания по новым функциям или потребуется помощь, смело обращайся к нам на GitHub или в Discord.
Link to this sectionЧасто задаваемые вопросы (FAQ)#
Link to this sectionКак мне оптимизировать 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.
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: Средняя точность (Average Precision) при пороге 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.