Meet YOLO26: next-gen vision AI.

Link to this sectionДистилляция знаний#

Link to this sectionБыстрый старт#

Обучай меньшую модель-ученика под руководством большей модели-учителя, добавив аргумент distill_model:

Пример
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt")

Link to this sectionЧто такое дистилляция знаний?#

Дистилляция знаний переносит знания от большой, высокоточной модели-учителя к меньшей модели-ученику. Ученик учится имитировать внутренние представления признаков учителя, часто достигая лучшей точности, чем при обучении с нуля.

Используй дистилляцию, когда:

  • Тебе нужна меньшая и более быстрая модель для развертывания
  • У тебя есть высокоточная модель-учитель, обученная на тех же данных
  • Ты хочешь получить лучшую точность, чем дает стандартное обучение
Примечание

Дистилляция знаний реализована для задач detect, segment, pose и obb. На данный момент только для detect экспериментально подтверждено повышение точности.

Link to this sectionПроизводительность#

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

Модельразмер
(пиксели)
mAPval
50-95

базовая
mAPval
50-95

дистиллированная
mAPval
50-95 (e2e)

базовая
mAPval
50-95 (e2e)

дистиллированная
YOLO26n-distill64040.941.540.140.9
YOLO26s-distill64048.649.247.848.6
YOLO26m-distill64053.153.952.553.3
YOLO26l-distill64055.056.054.455.5
YOLO26x-distill64057.557.956.957.4
  • Значения mAPval указаны для модели с одним масштабом на наборе данных COCO val2017.
    Воспроизведи результат с помощью yolo val detect data=coco.yaml device=0
  • Значения e2e используют стандартный путь инференса без NMS; не-e2e значения используют традиционную постобработку NMS (end2end=False). Подробности см. в End-to-End Detection.

Link to this sectionПредварительные требования#

Перед началом убедись, что соответствуешь следующим требованиям:

  • Обученная модель-учитель: предварительно обученная, высокоточная модель-учитель из того же семейства YOLO, что и модель-ученик (например, YOLO26).
  • Совпадающие набор данных и задача: и модель-учитель, и модель-ученик должны использовать абсолютно одинаковую конфигурацию набора данных и задачи.
  • GPU-ресурсы: достаточный объем памяти GPU (VRAM) для загрузки и запуска обеих моделей одновременно во время обучения (обратись к FAQ относительно типичных затрат VRAM).

Link to this sectionРекомендуемые пары моделей#

УченикРекомендуемый учитель
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

Межсемейная дистилляция (например, учитель YOLO11 с учеником YOLO26) не поддерживается.

Link to this sectionКлючевые параметры#

ПараметрТипПо умолчаниюОписание
distill_modelstrNoneПуть к файлу модели-учителя (например, yolo26x.pt). Установка этого параметра активирует дистилляцию знаний.
disfloat6.0Вес функции потерь дистилляции. Контролирует вклад потерь от дистилляции в общую функцию потерь при обучении.

Link to this sectionКак это работает#

  1. Модель-учитель остается замороженной в режиме eval и выполняет инференс на каждом батче
  2. Модель-ученик обучается со стандартными потерями задачи плюс руководство от дистилляции
  3. Признаки извлекаются из обеих моделей на трех слоях «шеи» (neck), которые подаются в голову семейства Detect
  4. Проекционная сеть (легковесный MLP) выравнивает размерности признаков ученика в соответствии с учителем
  5. L2-потеря с весовым коэффициентом уверенности сравнивает спроецированные признаки ученика с признаками учителя, взвешенными по уверенности учителя в классификации
  6. Потеря дистилляции объединяется со стандартными потерями с использованием веса dis
flowchart TD
    A[Input Image Batch] --> T[Teacher Model<br/>frozen, eval mode]
    A --> S[Student Model<br/>trainable]

    T --> |Detect head inputs| TF[Teacher Features]
    S --> |Detect head inputs| SF[Student Features]

    SF --> P[1×1 Conv Projector<br/>with ReLU]
    P --> AF[Aligned Student Features]

    TF --> SW[Score-weighted L2 Loss]
    AF --> SW

    S --> D[Detection Head]
    D --> DL[box_loss + cls_loss + dfl_loss]

    SW --> |× dis| DIS[distillation loss]
    DL --> TOTAL[Total Loss]
    DIS --> TOTAL

    TOTAL --> BP[Backpropagate<br/>Student + Projector only]

Link to this sectionПоддержка задач#

Реализация дистилляции извлекает признаки из трех слоев «шеи», питающих голову модели семейства Detect. Поскольку головы segment, pose и obb наследуются от той же архитектуры Detect, дистилляция технически совместима и с этими задачами.

Предупреждение

Только detect был экспериментально протестирован и проверен. Ты можешь запустить дистилляцию для segment, pose или obb, но повышение точности для этих задач еще не подтверждено.

Дистилляция знаний для других задач
from ultralytics import YOLO

# Segment
model = YOLO("yolo26n-seg.pt")
model.train(data="coco8-seg.yaml", epochs=100, distill_model="yolo26s-seg.pt")

# Pose
model = YOLO("yolo26n-pose.pt")
model.train(data="coco8-pose.yaml", epochs=100, distill_model="yolo26s-pose.pt")

# OBB
model = YOLO("yolo26n-obb.pt")
model.train(data="dota8.yaml", epochs=100, distill_model="yolo26s-obb.pt")

Link to this sectionTraining#

Link to this sectionБазовое обучение#

Обучение с дистилляцией идентично стандартному. Укажи путь distill_model, чтобы активировать его:

Обучение с дистилляцией знаний
from ultralytics import YOLO

# Load a student model
student = YOLO("yolo26m.pt")

# Train with knowledge distillation from a larger teacher model
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26x.pt")

Link to this sectionНастройка веса функции потерь дистилляции#

Параметр dis (по умолчанию: 6.0) контролирует вклад потерь дистилляции:

Пользовательский вес дистилляции
from ultralytics import YOLO

student = YOLO("yolo26n.pt")
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt", dis=10.0)

Link to this sectionВозобновление обучения с дистилляцией#

Обучение с дистилляцией поддерживает возобновление с чекпоинтов. Модель-учитель автоматически пересоздается из пути distill_model:

Возобновление обучения с дистилляцией
from ultralytics import YOLO

student = YOLO("runs/detect/train/weights/last.pt")
results = student.train(resume=True)

Link to this sectionРезультаты обучения#

Когда дистилляция включена, в журналах обучения появляется дополнительный столбец dis_loss:

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss   dis_loss  Instances       Size
      1/80      46.2G      1.566      5.404    0.003249      6.658        231        640

Экспортированная модель содержит только веса ученика — размер файла и скорость инференса соответствуют обычно обученной модели-ученику.

Link to this sectionFAQ#

Link to this sectionПочему моя потеря дистилляции не уменьшается?#

  • Убедись, что учитель и ученик из одного поколения YOLO
  • Подтверди, что путь distill_model верен и файл загружается
  • Попробуй увеличить dis, если значение потерь очень мало
  • Убедись, что модель-учитель обучена на том же наборе данных

Link to this sectionЧем дистилляция отличается от стандартного обучения?#

Добавь параметр distill_model — все остальное работает идентично. Во время обучения вычисляется дополнительная потеря дистилляции, но сохраненная модель является стандартной моделью YOLO без накладных расходов.

Link to this sectionЗамедляет ли дистилляция знаний обучение?#

Да. Ожидай, что обучение будет идти в 1.2-1.5 раза медленнее и потреблять примерно в 1.1 раза больше памяти GPU, так как модель-учитель выполняет инференс на каждом батче. Учитель работает в режиме eval без градиентов, что удерживает накладные расходы на приемлемом уровне. Используй amp=True для снижения влияния.

Link to this sectionКакие задачи и модели поддерживаются?#

Дистилляция знаний работает с задачами detect, segment, pose и obb, так как она дистиллирует признаки из трех слоев «шеи», питающих голову семейства Detect. Задачи classify и semantic не поддерживаются.

Только detect был экспериментально проверен на предмет улучшения точности. Segment, pose и obb технически совместимы, но еще не прошли бенчмаркинг.

Учитель и ученик должны принадлежать к одному семейству YOLO (например, YOLOv8, YOLO11 или YOLO26). Межсемейная дистилляция (например, учитель YOLO11 с учеником YOLO26) не поддерживается.

Участники

Комментарии