Ultralytics YOLO27:
Get Started

Рецепт обучения 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.ptyolo26n-objv1-150.pt
yolo26s.ptyolo26s-objv1-150.pt
yolo26m.ptyolo26m-objv1-150.pt
yolo26l.ptyolo26l-objv1-150.pt
yolo26x.ptyolo26x-objv1-150.pt

При предобучении использовались преимущественно настройки по умолчанию, а не подобранные значения. lr0, lrf, momentum, weight_decay, box и cls соответствуют default.yaml, а значения warmup_epochs, close_mosaic и dfl были переопределены. Для всех размеров настройки одинаковы, за исключением warmup_epochs у X, силы аугментации, а также внутренних весов MuSGD и head, перечисленных после таблиц:

ПараметрЗначение
dataObjects365v1
epochs150
imgsz640
batch128
optimizerMuSGD
lr0 / lrf0.01 / 0.01
momentum0.937
weight_decay0.0005
warmup_epochs1 (2 для X)
close_mosaic8
box / cls / dfl7.5 / 0.5 / 6.0
АугментацияNSMLX
mosaic1.01.01.01.01.0
mixup0.00.050.150.150.2
copy_paste0.10.150.40.50.6
scale0.50.90.90.90.9

В этих таблицах приведены настройки, влияющие на предобучение, а не полная конфигурация. В контрольных точках записано более 100 аргументов, поэтому для получения авторитетного списка выведи train_args, как показано ниже.

Дополнительно: внутренние параметры предобучения

При предобучении также менялись параметры экспериментальных веток того же типа, что описан в разделе Внутренние параметры обучения. Значение cls_w составляло 1.0 для всех размеров:

ПараметрNSMLX
muon_w0.450.50.450.450.5
sgd_w0.550.50.550.550.6
o2m0.10.10.11.01.0
Начни с весов Objects365

Чтобы повторно использовать этап 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 отличается от остальных:

ПараметрNSMLX
optimizerMuSGDMuSGDMuSGDMuSGDMuSGD
lr00.00540.000380.000380.000380.00038
lrf0.04950.8820.8820.8820.882
momentum0.9470.9480.9480.9480.948
weight_decay0.000640.000270.000270.000270.00027
warmup_epochs0.980.990.990.990.99
epochs24570806040
batch128128128128128
imgsz640640640640640
Стратегия изменения скорости обучения

Для модели N использовалась более высокая начальная скорость обучения с резким снижением (lrf=0.0495), а для моделей S/M/L/X — гораздо более низкая начальная скорость обучения и более плавное расписание (lrf=0.882). Это связано с различиями в динамике сходимости небольших и крупных моделей: небольшим моделям нужны более интенсивные обновления, чтобы эффективно обучаться.

Веса функции потерь#

Веса функции потерь балансируют три компонента функции потерь детектора: регрессию IoU для ограничивающих рамок (box), классификацию (cls) и компонент регрессии расстояний до рамки (dfl). Учти, что в YOLO26 без DFL коэффициент dfl используется для взвешивания функции потерь L1 по нормализованным расстояниям до рамки, а не функции потерь distribution focal:

ПараметрNSMLX
box5.639.839.839.839.83
cls0.560.650.650.650.65
dfl9.040.960.960.960.96

В модели N приоритет отдаётся компоненту регрессии расстояний dfl, а в моделях S/M/L/X больший вес получает регрессия рамок на основе IoU. Вес функции потерь классификации остаётся примерно одинаковым для всех размеров.

Конвейер аугментации#

Подробное описание каждого метода см. в руководстве по аугментации данных YOLO.

ПараметрNSMLX
mosaic0.9090.9920.9920.9920.992
mixup0.0120.050.4270.4270.427
copy_paste0.0750.4040.3040.4040.404
scale0.5620.90.950.950.95
fliplr0.6060.3040.3040.3040.304
degrees1.11~0~0~0~0
shear1.46~0~0~0~0
translate0.0710.2750.2750.2750.275
hsv_h0.0140.0130.0130.0130.013
hsv_s0.6450.3530.3530.3530.353
hsv_v0.5660.1940.1940.1940.194
bgr0.1060.00.00.00.0

Значения, указанные как ~0, в контрольных точках фактически меньше 0.01 (например, degrees=0.00012 для модели S), поэтому аугментация практически отключена.

В целом для крупных моделей используется более интенсивная аугментация (более высокие значения mixup и scale), поскольку у них выше вычислительная ёмкость и они лучше используют усиленную регуляризацию. Модель N — единственная, для которой применяются значимые значения поворота, сдвига и аугментации BGR.

Внутренние параметры обучения#

Дополнительно: внутренние параметры конвейера

В контрольных точках также есть параметры, использовавшиеся в экспериментальной ветке обучения, но не доступные для настройки пользователем в default.yaml:

ПараметрОписаниеNSMLX
muon_wВес обновления Muon в MuSGD0.5280.4360.4360.4360.436
sgd_wВес обновления SGD в MuSGD0.6740.4790.4790.4790.479
cls_wВнутренний вес классификации2.743.483.483.483.48
o2mВес функции потерь для головы one-to-many1.00.7050.7050.7050.705
topkНазначение меток top-k85555

О том, что эти параметры означают при дообучении, см. в ответе на часто задаваемый вопрос об этих параметрах.

Дообучение 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 есть отдельный журнал.

  • Результаты будут близки к опубликованным метрикам, но не идентичны. Чтобы точно воспроизвести настройки, переключись на коммит, указанный в контрольной точке, и обучай модель в этой ветке. Подробнее см. в разделе Проверка ревизии кода.

Комментарии