Рецепт обучения YOLO26#
Введение#
В этом руководстве описан точный рецепт обучения, использованный для создания официальных предобученных весов YOLO26 на COCO. Все приведённые здесь гиперпараметры уже сохранены в выпущенных весах .pt вместе с журналом обучения по эпохам и ревизией кода, использованной при запуске; всё это можно программно изучить.
Знание того, что легло в основу официальных контрольных точек — не только архитектуры, но и расписаний скорости обучения, конвейеров аугментации и весов функции потерь, повлиявших на качество, — поможет принимать более взвешенные решения при дообучении: какие аугментации данных оставить, веса какой функции потерь изменить и какие настройки оптимизатора лучше подходят для размера твоего набора данных.
На этой странице описаны гиперпараметры, зафиксированные в выпущенных контрольных точках. Обоснование этих параметров, включая архитектуру, изменения функции потерь и назначения меток, а также абляционные исследования, представлено в статье Ultralytics YOLO26: унифицированные сквозные модели компьютерного зрения реального времени.
Обзор обучения#
Все базовые модели YOLO26 обучались в два этапа: предобучение на Objects365v1 в течение 150 эпох, а затем дообучение на COCO. На обоих этапах использовалось разрешение 640x640, оптимизатор MuSGD и размер батча 128. Ни одна контрольная точка YOLO26 не обучалась на COCO со случайных весов, поэтому этап COCO для большинства размеров был коротким; гиперпараметры этого этапа подбирались с помощью эволюционного поиска. Полные журналы обучения и метрики для моделей каждого размера хранятся в выпущенных контрольных точках и отображаются в виде графиков на платформе Ultralytics.
Ключевые решения, общие для моделей всех размеров:
- Предобучение на Objects365 для моделей каждого размера до этапа COCO
- Обучение с двумя головами с обучением по one-to-many и one-to-one; по умолчанию при инференсе используется NMS, а
nms=Falseвыбирает голову без NMS - Оптимизатор MuSGD сочетает SGD с ортогонализированными обновлениями в стиле Muon для матриц весов (линейные веса 2D и свёрточные фильтры 4D, которые преобразуются в 2D)
- Сильная мозаичная аугментация (вероятность ~0.9-1.0), отключаемая в последних эпохах (
close_mosaic=8при предобучении,close_mosaic=10на COCO) - Агрессивная аугментация масштаба (0.5-0.95) для работы с объектами разного размера
- Минимальный поворот и сдвиг для большинства размеров, чтобы снизить геометрические искажения
Этап 1: предобучение на Objects365#
Каждая контрольная точка YOLO26 для COCO была дообучена на контрольной точке Objects365v1 того же размера. Эти предобученные веса также опубликованы и описаны на странице набора данных Objects365. Начальные веса для каждой контрольной точки COCO указаны в конфигурации обучения, встроенной в файл .pt. Как прочитать эту конфигурацию, показано ниже в разделе Изучение параметров обучения контрольной точки YOLO26:
| Контрольная точка COCO | Начальные веса |
|---|---|
yolo26n.pt | yolo26n-objv1-150.pt |
yolo26s.pt | yolo26s-objv1-150.pt |
yolo26m.pt | yolo26m-objv1-150.pt |
yolo26l.pt | yolo26l-objv1-150.pt |
yolo26x.pt | yolo26x-objv1-150.pt |
При предобучении использовались преимущественно настройки по умолчанию, а не подобранные значения. lr0, lrf, momentum, weight_decay, box и cls соответствуют default.yaml, а значения warmup_epochs, close_mosaic и dfl были переопределены. Для всех размеров настройки одинаковы, за исключением warmup_epochs у X, силы аугментации, а также внутренних весов MuSGD и head, перечисленных после таблиц:
| Параметр | Значение |
|---|---|
data | Objects365v1 |
epochs | 150 |
imgsz | 640 |
batch | 128 |
optimizer | MuSGD |
lr0 / lrf | 0.01 / 0.01 |
momentum | 0.937 |
weight_decay | 0.0005 |
warmup_epochs | 1 (2 для X) |
close_mosaic | 8 |
box / cls / dfl | 7.5 / 0.5 / 6.0 |
| Аугментация | N | S | M | L | X |
|---|---|---|---|---|---|
mosaic | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
mixup | 0.0 | 0.05 | 0.15 | 0.15 | 0.2 |
copy_paste | 0.1 | 0.15 | 0.4 | 0.5 | 0.6 |
scale | 0.5 | 0.9 | 0.9 | 0.9 | 0.9 |
В этих таблицах приведены настройки, влияющие на предобучение, а не полная конфигурация. В контрольных точках записано более 100 аргументов, поэтому для получения авторитетного списка выведи train_args, как показано ниже.
Дополнительно: внутренние параметры предобучения
При предобучении также менялись параметры экспериментальных веток того же типа, что описан в разделе Внутренние параметры обучения. Значение cls_w составляло 1.0 для всех размеров:
| Параметр | N | S | M | L | X |
|---|---|---|---|---|---|
muon_w | 0.45 | 0.5 | 0.45 | 0.45 | 0.5 |
sgd_w | 0.55 | 0.5 | 0.55 | 0.55 | 0.6 |
o2m | 0.1 | 0.1 | 0.1 | 1.0 | 1.0 |
Чтобы повторно использовать этап 1, набор данных Objects365 не нужен. Предварительно обученные контрольные точки скачиваются автоматически, как и любые другие ресурсы Ultralytics, поэтому ты можешь дообучить их на собственном наборе данных:
from ultralytics import YOLO
model = YOLO("yolo26s-objv1-150.pt")
results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)Чтобы вместо этого повторно запустить этап COCO, начни с тех же весов и передай значения оптимизатора, функции потерь и аугментации для этапа 2 для соответствующего размера модели из таблиц ниже. В таблицах не указаны менее важные аргументы, отличающиеся от значений по умолчанию, например warmup_momentum, warmup_bias_lr, perspective, flipud и cutmix, поэтому для получения точной конфигурации выведи train_args из контрольной точки. Внутренние параметры не поддерживаются выпущенным пакетом — для их использования нужна экспериментальная ветка.
Проверка аргументов обучения в контрольной точке YOLO26#
В каждой контрольной точке Ultralytics хранится полная конфигурация обучения, использованная для её создания, поэтому ты можешь самостоятельно проверить каждое значение на этой странице:
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
print(model.ckpt["train_args"])В выводе перечислена полная конфигурация из более чем 100 параметров, включая все значения рецепта, описанные на этой странице. Например, фрагмент для yolo26n.pt:
batch: 128
...
box: 5.62767
...
close_mosaic: 10
cls: 0.56099
...
dfl: 9.03871
...
epochs: 245
...
lr0: 0.0054
lrf: 0.04952
...
optimizer: MuSGDЭто работает с любой контрольной точкой .pt — как с официальными релизами, так и с твоими собственными дообученными моделями. Полный список настраиваемых аргументов обучения см. в справочнике по конфигурации обучения.
Просмотр графиков обучения#
В контрольной точке хранится не только train_args. В каждой контрольной точке также содержится полный results.csv по эпохам для запуска, в ходе которого она была создана, а также итоговые метрики валидации. Графики для официальных контрольных точек YOLO26 опубликованы на платформе Ultralytics, а любой файл .pt можно перетащить в проект, чтобы построить графики по тем же данным: метаданные автоматически извлекаются из файла.
Каждая контрольная точка охватывает этап, на котором она была создана: графики COCO находятся в yolo26s.pt, а графики 150 эпох обучения на Objects365 — в yolo26s-objv1-150.pt.
Проверка ревизии кода#
В ckpt["git"] записан коммит, с которым была создана контрольная точка. Эти коммиты доступны в публичных экспериментальных ветках репозитория Ultralytics, поэтому ты можешь получить точный код обучения:
from ultralytics import YOLO
print(YOLO("yolo26n.pt").ckpt["git"])
# {'root': ..., 'branch': 'exp-main', 'commit': 'cb13d5f9cfbd6f299da3620c625f81d721dc2849', ...}git fetch origin cb13d5f9cfbd6f299da3620c625f81d721dc2849
git checkout cb13d5f9cfbd6f299da3620c625f81d721dc2849В экспериментальных ветках есть код, который так и не попал в main, например настраиваемые o2m и cls_w. Обучение на main с приведёнными ниже гиперпараметрами не даст побитово идентичный результат, но метрики будут отличаться от опубликованных лишь незначительно.
Гиперпараметры обучения YOLO26 для каждого размера модели#
Это значения этапа 2, которые применяются к указанным выше весам Objects365. В таблицах ниже рецепт разбит на категории: оптимизатор и расписание, веса функции потерь и аугментация. Все значения взяты непосредственно из train_args, встроенного в выпущенные контрольные точки.
Оптимизатор и скорость обучения#
Эти настройки оптимизатора и расписания использовались при дообучении на COCO для моделей каждого размера. Обрати внимание, насколько модель N отличается от остальных:
| Параметр | N | S | M | L | X |
|---|---|---|---|---|---|
optimizer | MuSGD | MuSGD | MuSGD | MuSGD | MuSGD |
lr0 | 0.0054 | 0.00038 | 0.00038 | 0.00038 | 0.00038 |
lrf | 0.0495 | 0.882 | 0.882 | 0.882 | 0.882 |
momentum | 0.947 | 0.948 | 0.948 | 0.948 | 0.948 |
weight_decay | 0.00064 | 0.00027 | 0.00027 | 0.00027 | 0.00027 |
warmup_epochs | 0.98 | 0.99 | 0.99 | 0.99 | 0.99 |
epochs | 245 | 70 | 80 | 60 | 40 |
batch | 128 | 128 | 128 | 128 | 128 |
imgsz | 640 | 640 | 640 | 640 | 640 |
Для модели N использовалась более высокая начальная скорость обучения с резким снижением (lrf=0.0495), а для моделей S/M/L/X — гораздо более низкая начальная скорость обучения и более плавное расписание (lrf=0.882). Это связано с различиями в динамике сходимости небольших и крупных моделей: небольшим моделям нужны более интенсивные обновления, чтобы эффективно обучаться.
Веса функции потерь#
Веса функции потерь балансируют три компонента функции потерь детектора: регрессию IoU для ограничивающих рамок (box), классификацию (cls) и компонент регрессии расстояний до рамки (dfl). Учти, что в YOLO26 без DFL коэффициент dfl используется для взвешивания функции потерь L1 по нормализованным расстояниям до рамки, а не функции потерь distribution focal:
| Параметр | N | S | M | L | X |
|---|---|---|---|---|---|
box | 5.63 | 9.83 | 9.83 | 9.83 | 9.83 |
cls | 0.56 | 0.65 | 0.65 | 0.65 | 0.65 |
dfl | 9.04 | 0.96 | 0.96 | 0.96 | 0.96 |
В модели N приоритет отдаётся компоненту регрессии расстояний dfl, а в моделях S/M/L/X больший вес получает регрессия рамок на основе IoU. Вес функции потерь классификации остаётся примерно одинаковым для всех размеров.
Конвейер аугментации#
Подробное описание каждого метода см. в руководстве по аугментации данных YOLO.
| Параметр | N | S | M | L | X |
|---|---|---|---|---|---|
mosaic | 0.909 | 0.992 | 0.992 | 0.992 | 0.992 |
mixup | 0.012 | 0.05 | 0.427 | 0.427 | 0.427 |
copy_paste | 0.075 | 0.404 | 0.304 | 0.404 | 0.404 |
scale | 0.562 | 0.9 | 0.95 | 0.95 | 0.95 |
fliplr | 0.606 | 0.304 | 0.304 | 0.304 | 0.304 |
degrees | 1.11 | ~0 | ~0 | ~0 | ~0 |
shear | 1.46 | ~0 | ~0 | ~0 | ~0 |
translate | 0.071 | 0.275 | 0.275 | 0.275 | 0.275 |
hsv_h | 0.014 | 0.013 | 0.013 | 0.013 | 0.013 |
hsv_s | 0.645 | 0.353 | 0.353 | 0.353 | 0.353 |
hsv_v | 0.566 | 0.194 | 0.194 | 0.194 | 0.194 |
bgr | 0.106 | 0.0 | 0.0 | 0.0 | 0.0 |
Значения, указанные как ~0, в контрольных точках фактически меньше 0.01 (например, degrees=0.00012 для модели S), поэтому аугментация практически отключена.
В целом для крупных моделей используется более интенсивная аугментация (более высокие значения mixup и scale), поскольку у них выше вычислительная ёмкость и они лучше используют усиленную регуляризацию. Модель N — единственная, для которой применяются значимые значения поворота, сдвига и аугментации BGR.
Внутренние параметры обучения#
Дополнительно: внутренние параметры конвейера
В контрольных точках также есть параметры, использовавшиеся в экспериментальной ветке обучения, но не доступные для настройки пользователем в default.yaml:
| Параметр | Описание | N | S | M | L | X |
|---|---|---|---|---|---|---|
muon_w | Вес обновления Muon в MuSGD | 0.528 | 0.436 | 0.436 | 0.436 | 0.436 |
sgd_w | Вес обновления SGD в MuSGD | 0.674 | 0.479 | 0.479 | 0.479 | 0.479 |
cls_w | Внутренний вес классификации | 2.74 | 3.48 | 3.48 | 3.48 | 3.48 |
o2m | Вес функции потерь для головы one-to-many | 1.0 | 0.705 | 0.705 | 0.705 | 0.705 |
topk | Назначение меток top-k | 8 | 5 | 5 | 5 | 5 |
О том, что эти параметры означают при дообучении, см. в ответе на часто задаваемый вопрос об этих параметрах.
Дообучение YOLO26 на собственном наборе данных#
При дообучении YOLO26 на собственном наборе данных не нужно в точности повторять весь рецепт предварительного обучения. Предварительно обученные веса уже содержат знания об аугментации и оптимизации, полученные при обучении на COCO. Общие рекомендации по обучению см. в разделе Советы по обучению моделей.
Дообучение с настройками по умолчанию#
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.train(data="your-dataset.yaml", epochs=100, imgsz=640)Дообучение с настройками по умолчанию — хорошая отправная точка. Меняй гиперпараметры, только если для этого есть конкретная причина.
Когда менять гиперпараметры YOLO26#
Небольшие наборы данных (< 1 000 изображений):
- Уменьши интенсивность аугментации:
mosaic=0.5,mixup=0.0,copy_paste=0.0 - Снизь скорость обучения и явно укажи оптимизатор:
optimizer=AdamW,lr0=0.001 - Используй меньше эпох и настрой patience:
epochs=50,patience=20 - Рассмотри возможность заморозить слои backbone:
freeze=10
Большие наборы данных (> 50 000 изображений):
- Точнее следуй рецепту предварительного обучения
- Рассмотри
optimizer=MuSGDдля более длительного обучения - Усиль аугментацию:
mosaic=1.0,mixup=0.3,scale=0.9
Изображения из специфичных предметных областей (съёмка с воздуха, медицинские изображения, подводная съёмка):
- Увеличь
flipud=0.5, если ориентация по вертикали меняется - Увеличь
degrees, если объекты могут иметь произвольный угол поворота - Измени
hsv_sиhsv_v, если условия освещения существенно отличаются от COCO
Об автоматической оптимизации гиперпараметров см. в руководстве по подбору гиперпараметров.
Выбор размера модели#
| Модель | Оптимальный вариант для | Рекомендации по размеру пакета |
|---|---|---|
| YOLO26n | Периферийные устройства, мобильные устройства, работа в реальном времени на CPU | Большие пакеты (64–128) на потребительских GPU |
| YOLO26s | Баланс скорости и точности | Средние пакеты (32–64) |
| YOLO26m | Более высокая точность при умеренных вычислительных затратах | Небольшие пакеты (16–32) |
| YOLO26l | Высокая точность при наличии GPU | Небольшие пакеты (8–16) или несколько GPU |
| YOLO26x | Максимальная точность, развёртывание на сервере | Небольшие пакеты (4–8) или несколько GPU |
Варианты экспорта и развёртывания см. в руководстве по экспорту и разделе Варианты развёртывания моделей.
Заключение#
В контрольных точках YOLO26 встроен полный рецепт обучения, поэтому точные гиперпараметры для модели любого размера всегда можно узнать, выполнив один запрос train_args. Начинай дообучение с настроек по умолчанию, осознанно меняй их с помощью таблиц на этой странице и проверяй каждое изменение на собственном валидационном наборе. Если у тебя возникнут вопросы, обратись к сообществу в репозитории Ultralytics на GitHub или на сервере Ultralytics в Discord.
Часто задаваемые вопросы#
Загрузи контрольную точку с помощью
torch.load()и обратись к ключуtrain_argsлибо используйmodel.ckpt["train_args"]с API Ultralytics. Полные примеры см. в разделе Проверка аргументов обучения в контрольной точке YOLO26.Для предварительного обучения каждой модели на Objects365 использовалось одинаковое количество — 150 эпох, поэтому значения для COCO относятся только к этапу дообучения. Крупные модели сходятся на COCO за меньшее количество эпох: 40 для X против 245 для N. Количество эпох не строго монотонно (для S использовалось 70, для M — 80), поскольку оно определялось при поиске гиперпараметров для каждого размера. При дообучении на собственном наборе данных оптимальное количество эпох зависит от размера и сложности набора данных, а не от размера модели. Используй раннюю остановку (
patience), чтобы автоматически найти подходящий момент для завершения обучения.Эти параметры взяты из экспериментальной ветки, в которой были созданы базовые контрольные точки, и записаны в
train_argsдля воспроизводимости. Вdefault.yamlони недоступны для настройки пользователем, а передача их вmodel.train()вызывает ошибку недопустимого аргумента, потому что выпущенный пакет их не считывает. При дообучении задавать эти параметры не нужно. Их значения для каждого размера модели см. в разделе Внутренние параметры обучения.Нет. Каждая контрольная точка COCO была дообучена на контрольной точке Objects365v1 того же размера, предварительно обученной в течение 150 эпох. Это описано в разделе Этап 1: предварительное обучение на Objects365 и в статье о YOLO26. Для опубликованных результатов обучение на COCO с нуля не проводилось, поэтому сравнение с этими результатами будет некорректным.
Они хранятся в контрольных точках, а графики доступны на платформе Ultralytics. В каждой контрольной точке содержится полный
results.csvпо эпохам для соответствующего запуска. Перетащи файл.ptв проект на платформе, чтобы построить графики функции потерь, изменения mAP и скорости обучения — без единой строки кода. Подробнее см. в разделе Просмотр графиков обучения. Для этапа Objects365 в контрольных точкахyolo26*-objv1-150.ptесть отдельный журнал.Результаты будут близки к опубликованным метрикам, но не идентичны. Чтобы точно воспроизвести настройки, переключись на коммит, указанный в контрольной точке, и обучай модель в этой ветке. Подробнее см. в разделе Проверка ревизии кода.