Ultralytics YOLO27: Встать в лист ожидания.
Get Started
Урокначинающий

Первое дообучение и цикл итераций

Дообучи предобученные веса YOLO26 с настройками по умолчанию, ранжируй классы по AP с подсчётом пропусков и путаницы, а затем преврати самый слабый класс в следующую задачу по исправлению датасета.

В этом уроке учебный запуск показывает 0.66 mAP50, что похоже на проблему с темпом обучения. Но таблица по классам говорит об обратном: в val у cup есть 14 размеченных объектов, и модель не находит ни одного. Это проблема с данными, и никакая настройка гиперпараметров её бы не решила. Используй первый запуск как диагностику, которая подскажет, какой класс исправлять следующим.

Результат

Дообучи базовую модель, ранжируй классы по AP и укажи, сколько объектов было пропущено или отнесено к неверному классу, затем запиши одно действие по датасету с указанием числа изображений.

Ускоренное прохождение
Если ты уже освоился, вот краткая версия.
  1. Дообучи предобученный чекпойнт YOLO26 под свою задачу, используя настройки по умолчанию.

  2. Ранжируй классы по AP50-95 и подсчитай для каждого пропуски и случаи путаницы.

  3. Пропущенные объекты указывают на недостаточный охват или отсутствующие метки; путаница между классами — на проблемы с их определениями.

  4. Исправь данные, переобучи модель с теми же настройками и разбиением и сравни результаты.

Практические занятия

Начни с предобученных весов#

При обучении с нуля модель изучает все признаки по новым данным, а при трансферном обучении дообучается предобученная сеть для новой задачи

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

ЗадачаПредобученный чекпойнтНа чём предобучена модель
Обнаружениеyolo26n.ptCOCO
Сегментацияyolo26n-seg.ptCOCO
Семантическая сегментацияyolo26n-sem.ptCityscapes
Позаyolo26n-pose.ptКлючевые точки COCO
OBByolo26n-obb.ptDOTAv1
Классификацияyolo26n-cls.ptImageNet
Оценка глубиныyolo26n-depth.ptБольшой набор данных о глубине для помещений и улицы

Backbone и neck переносятся без изменений; голова задачи частично переинициализируется в соответствии с количеством классов. Обучение с нуля имеет смысл только для очень больших датасетов из необычных предметных областей. Начни с модели nano (n), чтобы быстро получить базовый результат, и переходи к более крупным моделям, только если цикл работы с данными перестанет приносить улучшения. В руководстве по дообучению описано, что происходит внутри модели.

Запусти базовое обучение#

Используй настройки по умолчанию: цель первого запуска — получить базовый результат, а не рекорд. Модель обучается на разбиении учебного набора из раздела Как правильно разделить датасет; сначала создай YAML-файл с данными:

from ultralytics import YOLO
from ultralytics.data.utils import check_det_dataset
from ultralytics.utils import YAML

names = check_det_dataset("coco128.yaml")["names"]  # в учебном наборе сохранены названия классов COCO
YAML.save("practice.yaml", {"path": "datasets/practice", "train": "train.txt", "val": "val.txt", "test": "test.txt", "names": names})

model = YOLO("yolo26n.pt")  # предобучена на COCO; используй чекпойнт для своей задачи
model.train(data="practice.yaml", epochs=3, imgsz=320)  # реальный запуск: epochs=100, imgsz=640
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all         20        143      0.614        0.6      0.664      0.486

В папке запуска (runs/detect/train/) теперь находится weights/best.pt. Для первого запуска стоит рассмотреть только три аргумента:

АргументПо умолчаниюКогда менять
epochs100Меньше — для крошечных датасетов; 200–300 — для очень больших
imgsz6401024 или 1280, если в кадре много мелких объектов
batch16-1 для автоматического выбора размера батча; уменьши значение при нехватке памяти

В разделе Обучи свою первую модель подробно описаны вызов обучения и его текущий лог.

Ранжируй классы и анализируй пропуски#

Общее значение mAP скрывает источник проблемы. Ранжируй классы по AP50-95 и используй матрицу ошибок, чтобы разделить ошибки для каждого класса на объекты, которые модель вообще не заметила, и объекты, которым она присвоила другой класс:

from ultralytics import YOLO

model = YOLO("runs/detect/train/weights/best.pt")  # your fine-tuned checkpoint
metrics = model.val(data="practice.yaml", imgsz=320, verbose=False)  # same data YAML and imgsz as training

matrix = metrics.confusion_matrix.matrix  # rows: predicted class, columns: true class; last row = background
for ap, cls in sorted(zip(metrics.box.ap, metrics.box.ap_class_index))[:5]:  # weakest five classes first
    total, missed, correct = matrix[:, cls].sum(), matrix[-1, cls], matrix[cls, cls]
    print(f"{model.names[cls]:>8}  AP50-95={ap:.3f}  {total:2.0f} labeled: {correct:2.0f} found, "
          f"{missed:2.0f} missed, {total - correct - missed:2.0f} called another class")
     car  AP50-95=0.000   4 labeled:  0 found,  4 missed,  0 called another class
    fork  AP50-95=0.000   1 labeled:  0 found,  0 missed,  1 called another class
 handbag  AP50-95=0.025   1 labeled:  1 found,  0 missed,  0 called another class
     cup  AP50-95=0.039  14 labeled:  0 found, 10 missed,  4 called another class
    sink  AP50-95=0.075   1 labeled:  1 found,  0 missed,  0 called another class

Каждый тип ошибки указывает на своё исправление датасета:

  • Слишком мало экземпляров в val (fork, handbag, sink — по 1 экземпляру): AP — это шум. Не принимай решений по классу, пока в val не будет хотя бы нескольких десятков его экземпляров; сначала собери больше групп для val.
  • Пропуски (car: 4 из 4, cup: 10 из 14): модель вообще не видит объект. Проверь, представлен ли этот сценарий в train, и найди отсутствующие метки с помощью suspect_labels.py.
  • Отнесены к другому классу (cup: 4 из 14): определения классов пересекаются. Открой эти изображения, уточни определения и укажи в руководстве похожий класс.

Здесь важен вывод по cup: 14 размеченных экземпляров, ни один не найден.

Используй папку запуска для анализа данных#

Графики обучения на платформе Ultralytics для модели сегментации: карточки со сводными значениями mAP50, mAP50-95, точности и полноты над графиками точности, полноты и mAP50-95 по эпохам

Каждый запуск обучения сохраняет эти файлы, а на платформе Ultralytics во время облачного обучения в реальном времени отображаются те же графики:

ФайлЧто файл говорит о данных
confusion_matrix_normalized.pngКакие классы путаются друг с другом или не распознаются на фоне
BoxPR_curve.pngТочность и полнота по каждому классу; низкая кривая указывает на слабый класс
val_batch0_pred.jpgПредсказания на реальных изображениях val; ищи систематические пропуски
labels.jpgКоличество классов и размеры рамок, на которых обучалась модель
results.pngКривые функции потерь и метрик; если функция потерь на val растёт, а на train падает, это сигнал о переобучении

В разделе Валидация и диагностика разобраны все графики; здесь всегда нужно выяснить, каких данных не хватает.

Цикл с приоритетом данных#

Типичная итерация: выбери самый слабый класс с достаточным количеством экземпляров в val, проверь около 50 изображений с этим классом, исправь данные, переобучи модель с теми же настройками и разбиением, а затем сравни AP по классам. После этого переходи к следующему по слабости классу.

При каждом переобучении меняй что-то одно

Если при одном и том же переобучении добавить 300 изображений и увеличить imgsz, ты не поймёшь, какое изменение повлияло на показатель. При работе с данными сохраняй настройки и разбиение без изменений, чтобы каждое сравнение отражало только одно изменение данных.

Когда переходить к настройке гиперпараметров#

После двух или трёх итераций по данным, когда оставшиеся слабые классы уже не связаны с охватом данных, разметкой или определениями, настройка может дать последние несколько пунктов прироста. В руководстве по дообучению описаны заморозка слоёв, темпы обучения и выбор оптимизатора. Но если настраивать модель до исправления данных, ты потратишь недели на оптимизацию модели для неправильного датасета.

Когда модель проходит acceptance_test.py на закрытом тестовом наборе, в Ultralytics YOLO в продакшене рассматриваются экспорт и развёртывание, а в разделах Мониторинг состояния и точности и Автоматизация цикла переобучения из Создание решений на платформе Ultralytics — цикл переобучения.

Попробовать

Дообучи чекпойнт YOLO26 для своей задачи с настройками по умолчанию, затем запусти rank_classes.py на best.pt. Не учитывай классы с недостаточным количеством экземпляров в val; проверь около 50 изображений для самого слабого из оставшихся классов и выясни, связаны ли ошибки с пропусками или путаницей. Результат: одно действие по датасету (собрать данные, перемаркировать или переопределить классы) с указанием числа затронутых изображений.

Критерии готовности
Урок считается завершённым, если выполнены все условия ниже.
  • Базовый запуск с настройками по умолчанию создал best.pt и ранжированную таблицу по классам.

  • Назван самый слабый класс с достаточным количеством экземпляров в val, указаны количества пропусков и случаев путаницы.

  • Для одного действия с датасетом указано количество затрагиваемых изображений; гиперпараметры пока не менялись.

Показать решение

По результатам пробного запуска работать нужно с классом cup: в val размечено 14 объектов, 0 обнаружено, 10 пропущено, 4 отнесено к другому классу. План с конкретными объёмами:

РезультатДействие с датасетомОбъём
10 из 14 чашек пропущеныПроверь покрытие в train: посчитай изображения с чашками по камерам и дням съёмки; собери изображения с чашками в группах, где их нет40 новых изображений с чашками за 4 дня съёмки
4 из 14 отнесены к другому классуОткрой их в val_batch0_pred.jpg и матрицу ошибок; если они отнесены к wine glass или bowl, добавь оба похожих класса в описание cupПереразметь около 30 изображений из train по новым правилам
Классы с 1 экземпляромПока ничего не предпринимай; добавь группы val, в которых они встречаютсяСледующий этап сбора данных

Затем переобучи модель с epochs, imgsz и тем же разбиением, повторно запусти rank_classes.py и сравни AP для cup до и после. Если показатель вырос, узким местом были данные; если нет, проверь следующие 50 изображений, прежде чем менять гиперпараметр.

Что дальше

В последнем уроке весь курс собран в одностраничный чек-лист, который можно использовать с заказчиком на старте каждого проекта.

Войди, чтобы сохранять прогресс