YOLO Vision 2026:

YOLOE: детектирование и сегментация в реальном времени с открытым словарем#

Ultralytics YOLOE (Real-Time Seeing Anything) — это модель для детекции с открытым словарем и сегментации экземпляров: вместо списка классов, зафиксированного при обучении, она принимает категории, нужные тебе в момент инференса, в виде текстового промпта, визуального примера или встроенного словаря из 4585 наименований. Созданная на базе архитектур Ultralytics YOLO — YOLOv8, YOLO11 и YOLO26 — и вдохновленная YOLO-World, YOLOE достигает передовой zero-shot точности при скорости работы, близкой к закрытым моделям YOLO.



Watch: How to use Ultralytics YOLOE-26 (New) | Open Vocabulary & Real-Time Seeing Anything 🚀

Быстрый старт#

Укажи нужные классы и запускай. YOLOE-26 возвращает боксы и маски сегментации экземпляров для категорий, на которых модель никогда не обучалась.

Детектируй все, что можешь назвать
from ultralytics import YOLOE

model = YOLOE("yoloe-26s-seg.pt")

# "double-decker bus" is not a COCO class; YOLOE resolves it from the words alone
model.set_classes(["double-decker bus", "person"])

results = model.predict("https://ultralytics.com/images/bus.jpg")
results[0].show()

Первый вызов set_classes() загружает текстовый энкодер; ознакомься с разделом Установка и требования перед развертыванием на машине без доступа к сети.

Выбор режима промптов#

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

YOLOE детектирует и сегментирует объекты по текстовым промптам, визуальным промптам и встроенному словарю

РежимЧекпоинтЧто ты предоставляешьИмена классов в результатахИспользуй, когда
Текстовый промпт*-seg.ptИмена классов в виде строкТочно те имена, которые ты передалТы можешь описать цель словами — самый обычный выбор
Визуальный промпт*-seg.ptПримеры боксов на эталонном изображенииОбщие object0, object1, …Ты не можешь выразить цель словами: конкретная деталь, логотип или дефект
Без промпта*-seg-pf.ptНичегоИмена из встроенного словаря на 4585 наименованийТы занимаешься каталогизацией или исследованием и заранее не знаешь, что искать
Два частых сюрприза
  • Визуальные промпты не переносят твои метки. Идентификационные номера классов в visual_prompts объединяют примеры в группы; модель сообщает о них как о object0, object1 и так далее. Сопоставляй их со своими именами самостоятельно.
  • Чекпоинты без промптов отклоняют set_classes(). Вызов этой функции для модели *-seg-pf.pt вызывает AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.. Вместо этого загрузи чекпоинт *-seg.pt, когда тебе понадобятся твои собственные классы.

Установка и требования#

YOLOE поставляется в составе основного пакета Ultralytics:

pip install -U ultralytics

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

  • Первый вызов set_classes() устанавливает ultralytics/CLIP из GitHub вместе с pip (он предоставляет токенизатор) и скачивает текстовый энкодер TorchScript в текущую рабочую директорию. YOLOE-26 загружает mobileclip2_b.ts, размером около 254 МБ; YOLOE-11 и YOLOE-v8 загружают mobileclip_blt.ts. Запусти загрузку один раз из той директории, из которой будешь запускать код, или скопируй файл туда, иначе он будет скачан заново.
  • Оба шага требуют доступа к сети, поэтому выполни одно предсказание с промптом перед развертыванием на офлайн-машине или машине с изолированной сетью (air-gapped).
  • Визуальные промпты и чекпоинты без промптов вообще не требуют текстового энкодера.

Чекпоинты YOLOE-26 требуют ultralytics 8.4.0 или новее; семейства YOLOE-11 и YOLOE-v8 доступны в более ранних релизах. Одно предсказание с текстовым промптом проверяет весь путь целиком — скачивание чекпоинта, установку CLIP, текстовый энкодер, инференс:

yolo predict model=yoloe-26s-seg.pt source="https://ultralytics.com/images/bus.jpg" classes="person"

Чтобы полностью пропустить скачивание текстового энкодера во время инференса, зашей промпты в веса один раз и используй их повторно — см. Повторное использование эмбеддингов промптов.

Обзор архитектуры#

YOLOE Architecture

YOLOE сохраняет стандартную структуру YOLO — сверточный бэкбон (backbone) для извлечения признаков, нек (neck) для многомасштабного слияния и безакорную, разделенную голову (anchor-free, decoupled head), прогнозирующую классы и боксы, — и добавляет три модуля, по одному на каждый режим промптов:

  • Репараметризуемое выравнивание регионов и текста (RepRTA) уточняет текстовые эмбеддинги из CLIP через небольшую вспомогательную сеть. Эта сеть запускается один раз за вызов set_classes() и сворачивается при экспорте, поэтому она ничего не стоит на один кадр. То, что действительно работает при каждом прямом проходе (forward pass) — это сравнение сохраненных эмбеддингов промптов с признаками регионов; см. раздел Ограничения, чтобы узнать, во сколько это обходится при большом наборе промптов.
  • Энкодер визуальных промптов с активацией семантики (SAVPE) кодирует семантические признаки и признаки активации из примера бокса, настраивая модель на объекты, которые выглядят похоже. Это путь один-выстрел (one-shot) для целей, которые трудно назвать словами, таких как логотип или конкретная деталь.
  • Ленивое сопоставление промптов по регионам (LRPC) сопоставляет эмбеддинги регионов со встроенным словарем на 4585 наименований, поэтому чекпоинты без промптов распознают объекты без внешнего промпта и без текстового энкодера.

Сегментация экземпляров обеспечивается веткой масок на голове детекции, как в YOLOv8-Seg, и каждое предсказание несет маску на results[0].masks. После того как модель экспортирована, модули открытого мира репараметризуются в стандартную голову YOLO, поэтому экспортированный файл выполняет обычный путь детекции/сегментации.

Доступные модели#

Каждый чекпоинт ниже представляет собой модель сегментации экземпляров и поддерживает валидацию (val), предсказание (predict), экспорт (export) и трекинг (track). Загружай файл *-seg.pt для текстовых или визуальных промптов и файл *-seg-pf.pt для инференса без промптов; они не взаимозаменяемы, см. раздел Выбор режима промптов. Только файлы *-seg.pt поддерживают обучение (train); чекпоинт без промптов создается из обученной модели с текстовыми промптами, см. раздел Обучение официальных моделей с нуля.

Производительность YOLOE на LVIS#

Результаты zero-shot на мини-выборке LVIS (minival) при 640 пикселях из статьи Ultralytics YOLO26.

Текстовые и визуальные промпты#

Каждая ячейка точности и параметров читается как текстовый промпт / визуальный промпт; FLOPs указаны один раз. Параметры и FLOPs приведены для конфигурации детекции, оцениваемой в статье. Точность соответствует показателю Non-E2E из статьи — единственному протоколу, который она сообщает для каждой модели в сравнении; голова end-to-end модели YOLOE-26 отстает от него не более чем на 1.1 AP при текстовых промптах и на 2.6 AP при визуальных промптах.

МодельmAP50-95mAPrmAPcmAPfпараметры
(М)
FLOPs
(Б)
YOLOE-26n24.7 / 21.920.5 / 17.624.1 / 22.326.1 / 22.43.9 / 3.16.1
YOLOE-26s30.8 / 28.623.9 / 25.129.6 / 27.833.0 / 29.910.7 / 11.021.9
YOLOE-26m35.4 / 33.931.1 / 33.434.7 / 34.036.9 / 33.821.3 / 25.170.6
YOLOE-26l37.8 / 36.335.1 / 37.637.6 / 36.238.5 / 36.125.5 / 29.389.0
YOLOE-26x40.6 / 38.537.4 / 35.340.9 / 38.841.0 / 38.855.2 / 65.2197.7
YOLOE-11s27.5 / 26.321.4 / 22.526.8 / 27.129.3 / 26.410.7 / 10.922.7
YOLOE-11m33.0 / 31.426.9 / 27.132.5 / 31.934.5 / 31.721.0 / 24.870.4
YOLOE-11l35.2 / 33.729.1 / 28.135.0 / 34.636.5 / 33.826.0 / 29.889.5
YOLOE-v8s27.9 / 26.222.3 / 21.327.8 / 27.729.0 / 25.712.3 / 12.629.8
YOLOE-v8m32.6 / 31.026.9 / 27.031.9 / 31.734.4 / 31.126.4 / 28.480.7
YOLOE-v8l35.9 / 34.233.2 / 33.234.8 / 34.637.3 / 34.143.5 / 47.3167.6

Без промпта#

Чекпоинты без промптов отвечают на основе своего встроенного словаря без подачи промптов. Каждая ячейка точности читается как end-to-end / Non-E2E — два протокола, по которым статья оценивает YOLOE-26; страница YOLO26 цитирует колонку Non-E2E.

МодельmAP50-95mAPrmAPcmAPfпараметры
(М)
FLOPs
(Б)
YOLOE-26n-pf16.6 / 17.715.7 / 15.815.3 / 16.417.9 / 19.22.35.3
YOLOE-26s-pf21.4 / 22.616.2 / 20.220.1 / 20.923.5 / 24.59.020.8
YOLOE-26m-pf25.7 / 26.426.7 / 24.524.0 / 25.026.9 / 27.919.468.4
YOLOE-26l-pf27.2 / 28.026.3 / 25.725.7 / 26.828.7 / 29.523.686.8
YOLOE-26x-pf29.9 / 31.127.5 / 28.929.1 / 30.731.1 / 31.753.1194.4

При использовании текстовых и визуальных промптов модели YOLOE-26 опережают свои аналоги YOLOE-11 и YOLOE-v8 на любом соответствующем масштабе по метрике mAP50-95, оставаясь при этом ниже линии v8 по параметрам и FLOPs. На том же сплите в статье приводятся результаты для YOLO-Worldv2: 24.4 (S), 32.4 (M) и 35.5 (L), а для детекторов на основе трансформеров — GLIP-T (26.0), GDINO-T (27.4) и DetCLIP-T (34.4), каждый из которых содержит от 155 до 232 млн параметров. Оригинальная статья YOLOE добавляет два результата для моделей масштаба v8, которые она представила. На датасете LVIS модель YOLOE-v8s превосходит YOLO-Worldv2-S на 3.5 AP при трети затрат на обучение и скорости инференса выше в 1.4 раза. При переносе на COCO модель YOLOE-v8l получает прирост 0.6 box AP и 0.4 mask AP по сравнению с закрытой моделью YOLOv8-L при почти в 4 раза меньшем времени обучения.

Данные в статье против выпущенных чекпоинтов

В статье по YOLO26 оценивается конфигурация детекции. Выпущенные веса представляют собой чекпоинты сегментации и содержат ветку масок, SAVPE и проекцию текста поверх, поэтому загруженный файл yoloe-26l-seg.pt сообщает о 35.4 М и 142.0 Б вместо 25.5 М и 89.0 Б указанных выше. В обоих случаях показатель FLOPs исключает сходство между регионами и текстом, поэтому реальная стоимость растет с увеличением размера набора промптов, даже если колонка не двигается; см. Ограничения.

Примеры использования#

Каждый пример YOLOE ниже запускается из Python API. Предсказание с текстовым промптом, валидация, экспорт, трекинг и простое обучение также работают из CLI; рецепты дообучения (fine-tuning) и визуальные промпты передают класс тренера или предиктора в качестве аргумента, что поддерживается только в Python API.

Использование для обучения#

Дообучай любой выпущенный чекпоинт *-seg.pt на собственном датасете YOLO. В основном это следует стандартной процедуре обучения YOLO; разница заключается в том, какого тренера ты передаешь. YOLOEPESegTrainer внедряет твои имена классов в голову и выполняет дообучение оттуда, что и требуется для твоих собственных меток; стандартный тренер не производит обучение по твоим именам классов.



Watch: How to Train YOLOE on Car Parts Segmentation Dataset | Open-Vocabulary Model, Prediction & Export 🚀
Пример
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPESegTrainer

model = YOLOE("yoloe-26s-seg.pt")

results = model.train(
    data="coco128-seg.yaml",
    epochs=80,
    patience=10,
    trainer=YOLOEPESegTrainer,  # <- Important: the fine-tuning trainer, not the default
)
Вместо этого обучение модели детекции

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

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPETrainer

model = YOLOE("yoloe-26s.yaml").load("yoloe-26s-seg.pt")

results = model.train(data="coco128.yaml", epochs=80, patience=10, trainer=YOLOEPETrainer)

Использование для предсказания#

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

Пример

Визуальные промпты показывают модели пример вместо описания. visual_prompts принимает массив bboxes с примерами боксов и массив cls с идентификаторами классов, по одному на каждый бокс. ID являются временными группировками, а не метками — они должны идти последовательно с 0, и результаты возвращаются как object0, object1, … вместо имен, выбранных тобой.

Примеры боксов могут располагаться на том изображении, для которого ты делаешь предсказание:

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

# One example box per target, each with its own class ID
visual_prompts = {
    "bboxes": np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # person, glasses
    "cls": np.array([0, 1]),
}

results = model.predict(
    "ultralytics/assets/bus.jpg",
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

Или на отдельном эталонном изображении, переданном как refer_image, и в этом случае bboxes и cls описывают объекты на этом эталоне, а не в целевом изображении:

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

visual_prompts = {"bboxes": np.array([[221.52, 405.8, 344.98, 857.54]]), "cls": np.array([0])}  # person

results = model.predict(
    "ultralytics/assets/zidane.jpg",  # Target image
    refer_image="ultralytics/assets/bus.jpg",  # Where the example boxes live
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

# refer_image also sets the classes permanently, so later calls need no prompts at all
results = model("ultralytics/assets/bus.jpg")
model.export(format="onnx")  # And the export keeps them
Примечание

Когда source является видео или потоком, первый кадр автоматически становится refer_image, поэтому переданные тобой промпты применяются к этому кадру и переносятся на остальную часть видео. Передай refer_image явно, чтобы выбрать другой кадр.

И source, и refer_image принимают тензоры torch напрямую, что удобно, когда изображения уже поступают из существующего пайплайна. Указывай боксы в собственных пиксельных координатах тензора:

import numpy as np
import torch

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-11l-seg.pt")

img_tensor = torch.rand(1, 3, 480, 480)  # (1, 3, H, W) float tensor in [0, 1]
visual_prompts = {"bboxes": np.array([[10, 10, 50, 50]]), "cls": np.array([0])}

results = model.predict(
    img_tensor,
    refer_image=img_tensor,
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
    imgsz=640,
)

Чтобы сделать предсказание для нескольких изображений одновременно, вложи промпты на один уровень глубже: один массив bboxes и один массив cls на каждое исходное изображение, в том же порядке, что и источники.

import numpy as np

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26l-seg.pt")

visual_prompts = {
    "bboxes": [
        np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),  # bus.jpg: person, glasses
        np.array([[150, 200, 1150, 700]]),  # zidane.jpg: person
    ],
    "cls": [np.array([0, 1]), np.array([0])],
}

results = model.predict(
    ["ultralytics/assets/bus.jpg", "ultralytics/assets/zidane.jpg"],
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)
results[0].show()

Использование для валидации#

Валидация запускается так же, как и для любой другой модели на датасете сегментации:

Пример
from ultralytics import YOLOE

model = YOLOE("yoloe-26l-seg.pt")  # or yoloe-26s/m-seg.pt for other sizes

metrics = model.val(data="coco128-seg.yaml")

Два варианта одного и того же вызова охватывают другие режимы промптов:

  • Визуальные промптыmodel.val(data="coco128-seg.yaml", load_vp=True) извлекает визуальный эмбеддинг для каждой категории прямо из датасета. Добавь refer_data="coco.yaml", чтобы взять эмбеддинги из другого датасета, который должен содержать те же самые категории.
  • Без промпта — загрузи чекпоинт *-seg-pf.pt и передай single_cls=True.

Использование при экспорте#

Эмбеддинги промптов можно сохранить один раз и использовать повторно при создании статических экспортов, таких как ONNX, OpenVINO, TensorRT, CoreML, LiteRT и RKNN. Профиль NPZ загружается исходной моделью PyTorch перед экспортом; он не является дополнительным входным параметром среды выполнения, и экспортированной модели файл NPZ не требуется.

Экспортированные модели являются статическими

Классы, настроенные с помощью set_classes() (или через refer_image для визуальных промптов), зашиваются в экспортированные веса. После экспорта модель больше не может принимать новые промпты: вызов set_classes() или передача visual_prompts=... в predict() для загруженного экспорта завершится ошибкой. Чтобы изменить детектируемые классы, выполни повторный экспорт из оригинального чекпоинта .pt с настроенными новыми промптами. Экспортированный файл ведет себя как стандартная модель YOLO, а также может быть загружен с помощью YOLO() вместо YOLOE().

Повторное использование эмбеддингов промптов
from ultralytics import YOLOE

model = YOLOE("yoloe-26n-seg.pt")
model.set_classes(["person", "bus"])
model.save_prompt_embeddings("person-bus.npz")

# The profile is bound to the source checkpoint and can be reused for later exports.
model = YOLOE("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="onnx")

Тот же профиль промпта также может настраивать модель только для детекции, созданную на основе соответствующей архитектуры YOLOE. Это удаляет ветку масок с сохранением запрошенных классов:

from ultralytics import YOLOE

model = YOLOE("yoloe-26n.yaml").load("yoloe-26n-seg.pt")
model.load_prompt_embeddings("person-bus.npz")
model.export(format="rknn", name="rk3588", quantize=16)

Использование для отслеживания#

Промпт-классы напрямую переносятся в трекинг, поэтому ты можешь отслеживать объекты, на которых трекер никогда не обучался:

Пример
from ultralytics import YOLOE

model = YOLOE("yoloe-26s-seg.pt")
model.set_classes(["forklift", "pallet"])

# persist=True keeps track IDs stable across frames
for result in model.track("path/to/video.mp4", stream=True, persist=True):
    print(result.boxes.id)

Сравнение с YOLOE#

YOLOE занимает промежуточное положение между детектором с закрытым словарем и тяжеловесной моделью с открытым словарем. Три сравнения определяют, является ли она правильным выбором:

  • Против YOLO с закрытым словарем. После настройки промптов YOLOE выполняет предсказание через обычный путь детекции/сегментации и экспортируется так же, как любая другая модель. Она добавляет возможность менять список классов во время инференса вместо переобучения; платой за это является точность zero-shot, существенно уступающая модели, обученной на твоих собственных классах.
  • Против более ранних семейств YOLOE. YOLOE-26 наследует свободную от NMS голову end-to-end из YOLO26, охватывает пять масштабов (n/s/m/l/x) против трех предыдущих (s/m/l) и лидирует на каждом соответствующем масштабе в производительности.
  • Против детекторов с открытым словарем на основе трансформеров. GLIP и OWL-ViT запускают визуально-языковой трансформер при инференсе. YOLOE кодирует промпты один раз, а затем сравнивает их с признаками регионов внутри сверточной головы.

Все ближайшие альтернативы принимают текстовый промпт, но только YOLOE и SAM 3 возвращают маски, и эти три модели отвечают на разные вопросы:

YOLOESAM 3YOLO-World
Создано дляДетекция и сегментация именованных классов в реальном времениСегментация концептов и трекинг с поддержкой промптовДетекция в реальном времени с открытым словарем
МаскиДа, с чекпоинтами *-seg.ptДаНет, только ограничивающие рамки
Визуальные промптыДа (SAVPE)ДаНет
Режим без промптовДа, словарь из 4585 именНетНет
Выбирай его, когдаТебе нужна пропускная способность и ты можешь назвать классыТебе нужна самая сильная концептуальная сегментация и ты можешь выделить вычислительные ресурсыТы уже здесь — см. примечание по миграции ниже

Переходишь с YOLO-World? API имеет ту же структуру: замени YOLOWorld на YOLOE, загрузи чекпоинт *-seg.pt и оставь вызов set_classes() без изменений. Ты получаешь маски и визуальные промпты; примечание об экспорте в отношении замороженных классов применимо к обоим вариантам.

Варианты использования и приложения#

Детекция с открытым словарем исключает этап переобучения для каждого класса, что критически важно, когда список целей заранее неизвестен:

  • Детекция в открытом миреробототехника и системы безопасности, которые сталкиваются с объектами, не перечисленными при обучении.
  • Однократная детекция по примеру — визуальные промпты позволяют находить конкретную деталь, логотип или дефект по единственной опорной рамке, что полезно в промышленном контроле.
  • Каталогизация с длинным хвостом — встроенный словарь из 4585 имен достаточно широк для мониторинга биоразнообразия или инвентаризации в ритейле.
  • Бутстраппинг датасетов — предварительная разметка изображений рамками и масками перед проверкой человеком, с последующим обучением быстрой модели с фиксированным набором классов на полученном результате.
  • Сегментация произвольных объектов — выпущенные чекпоинты *-seg.pt возвращают маску с каждым предсказанием, поэтому медицинская визуализация и анализ спутниковых данных выдают результат с точностью до пикселя без второй модели.

Распространенный паттерн объединяет два режима: запустить режим без промптов один раз, чтобы обнаружить присутствующие объекты, а затем переключиться на текстовые промпты для интересующих категорий.

Ограничения#

YOLOE жертвует точностью ради возможности менять классы во время инференса. Последствия, о которых стоит знать перед принятием решения:

  • Точность в режиме zero-shot значительно ниже модели, обученной на твоих классах. Чекпоинты с промптами попадают примерно в диапазон 22–40 mAP на мини-выборке LVIS; модель YOLO с фиксированным набором классов, обученная на твоих данных, превзойдет этот результат для этих классов. Выбирай YOLOE для покрытия классов, для которых обучение невозможно, а не для замены обучения.
  • Редкие категории — слабое место. Колонка mAPr в разделе Производительность отображает точность конкретно для редких классов LVIS, и при текстовых промптах она оказывается ниже колонок распространенных и частых классов в каждой строке. Проверяй ее, а не общий mAP, если твои цели необычны.
  • Промпт описывает внешний вид, а не взаимосвязи. Детекция работает путем сравнения признаков области с эмбеддингом промпта, поэтому промпты, зависящие от состояния, контекста или сравнения («поврежденный», «крайний слева», «тот, который несут»), не имеют надежного основания для сопоставления. Предпочитай формулировки, близкие к повседневным названиям категорий.
  • Большие наборы промптов увеличивают задержку. Эмбеддинги промптов вычисляются один раз, но сравниваются с признаками областей на каждом прямом проходе. Измерения на CPU с yoloe-26s-seg.pt показывают, что прямой проход замедляется примерно на 19% при переходе от 80 до 1203 классов и примерно на 89% при использовании полного словаря из 4585 имен. Указываемые значения FLOPs при этом вообще не меняются, так как сходство региона и текста не учитывается, поэтому профилировщик не предупредит тебя.
  • Имена классов являются заполнителями до задания промпта. Только что загруженный чекпоинт *-seg.pt возвращает nc=80 с числовыми именами ("0", "1", …), поэтому вызывай set_classes() перед чтением меток. Чекпоинты без промптов поставляются с уже заполненным полным словарем.

Примечания по развертыванию#

  • Оборудование. Для инференса требуется GPU от NVIDIA с 4–8 ГБ видеопамяти; масштабы n и s работают на периферийных GPU, таких как Jetson, или на CPU с пониженным разрешением. Для тонкой настройки требуется один GPU.
  • NMS по умолчанию не зависит от класса. YOLOE выполняет предсказания с помощью agnostic_nms=True. В YOLOE-11 и YOLOE-v8 это подавляет перекрывающиеся рамки с более низким скором для разных классов, а не только внутри одного класса, что предотвращает дублирование, когда один объект соответствует нескольким категориям. Модели YOLOE-26 end-to-end вообще не применяют подавление IoU; там агностический режим сохраняет только один лучший класс для каждого анкера вместо того, чтобы позволять одному анкеру выдавать несколько меток классов. Передай agnostic_nms=False, чтобы переопределить это поведение.
  • Батчинг. Пакетный инференс работает напрямую, и визуальные промпты могут различаться для разных изображений в рамках одного вызова.

Обучение официальных моделей с нуля#

Большинству читателей это никогда не понадобится. Это воспроизводит опубликованные чекпоинты с открытым словарем на основе Objects365, GQA и Flickr30k — около 1,4 млн тренировочных образцов на 8× RTX 4090 — и не связано с дообучением на собственных данных, которое описано в разделе Использование обучения выше.

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

Каждый обучающий модуль, наследующий YOLOETrainer, отклоняет compile=True, включая стандартный YOLOESegTrainer и все модули обучения с нуля ниже. Передай compile=False (по умолчанию). Два модуля тонкой настройки, использованные выше, YOLOEPESegTrainer и YOLOEPETrainer, не имеют этого ограничения.

Для обучения нужны аннотации сегментов. Либо скачай обработанные файлы ниже, либо сгенерируй свои с помощью скрипта, предоставленного официальной командой, который работает на базе SAM 2.1. Для валидации используется мини-выборка LVIS.

ДатасетТипОбразцыБоксыОбработанные аннотации сегментов
Objects365v1Детектирование609k9621kobjects365_train_segm.json
GQAGrounding621k3681kfinal_mixed_train_no_coco_segm.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train_segm.json

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

from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOESegTrainerFromScratch

data = {
    "train": {
        "yolo_data": ["Objects365.yaml"],
        "grounding_data": [
            {
                "img_path": "flickr/full_images/",
                "json_file": "flickr/annotations/final_flickr_separateGT_train_segm.json",
            },
            {
                "img_path": "mixed_grounding/gqa/images",
                "json_file": "mixed_grounding/annotations/final_mixed_train_no_coco_segm.json",
            },
        ],
    },
    "val": {"yolo_data": ["lvis.yaml"]},
}

model = YOLOE("yoloe-26l-seg.yaml")
model.train(
    data=data,  # or the path to a YAML file holding the same structure
    batch=128,
    epochs=30,
    close_mosaic=2,
    optimizer="AdamW",
    lr0=2e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    trainer=YOLOESegTrainerFromScratch,
    device="0,1,2,3,4,5,6,7",
)

Чекпоинты с визуальными промптами и режимом без промптов создаются на базе этой обученной модели с текстовыми промптами путем обновления по одному модулю. YOLOESegVPTrainer — это рецепт для визуальных промптов, а YOLOEPEFreeTrainer — для режима без промптов, но ни один класс не заморожен сам по себе: выборочное обучение задается списком freeze, который ты передаешь вместе с ним и который указывает каждый дочерний элемент 'head', кроме savpe (соответственно, каждую классификационную башню), а для запуска без промптов дополнительно требуется single_cls=True. В исходном репозитории YOLOE содержатся полные рецепты для моделей масштаба v8.

Завершенный прогон без промптов репараметризуется в чекпоинт, который сообщает свои имена без промпта при инференсе, используя get_vocab и set_vocab:

from ultralytics import YOLOE

# Weights written by the prompt-free run and by the text-prompt run it started from. Each
# rerun creates a new directory (train-2, train-3, ...), so take the paths the runs printed.
model = YOLOE("runs/segment/train-2/weights/best.pt")  # prompt-free run, its head is already fused
text_model = YOLOE("runs/segment/train/weights/best.pt")  # text-prompt run, its head is still unfused

names = list(YOLOE("yoloe-26l-seg-pf.pt").model.names.values())  # the 4,585-name vocabulary, or your own list
vocab = text_model.get_vocab(names)

model.set_vocab(vocab, names)
model.save("yoloe-26l-seg-pf-custom.pt")  # never overwrite the released checkpoint

Цитирование и благодарности#

Если YOLOE внес вклад в твое исследование или проект, пожалуйста, процитируй оригинальную статью авторов: Ao Wang, Lihao Liu, Hui Chen, Zijia Lin, Jungong Han, and Guiguang Ding из Университета Цинхуа:

Цитата
@misc{wang2025yoloerealtimeseeing,
      title={YOLOE: Real-Time Seeing Anything},
      author={Ao Wang and Lihao Liu and Hui Chen and Zijia Lin and Jungong Han and Guiguang Ding},
      year={2025},
      eprint={2503.07465},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2503.07465},
}

Для дальнейшего чтения оригинальная статья по YOLOE доступна на arXiv. Исходный код проекта и дополнительные ресурсы можно найти в их репозитории на GitHub.

FAQ#

  • Ultralytics YOLOE добавляет две возможности, которых нет у YOLO-World: визуальные промпты, где пример рамки заменяет имя класса, и чекпоинты без промптов, которые отвечают на основе встроенного словаря из 4585 имен вообще без какого-либо промпта. Каждое предсказание из выпущенных чекпоинтов *-seg.pt также содержит маску сегментации инстансов. Что касается точности, оригинальная статья по YOLOE ставит YOLOE-v8s выше YOLO-Worldv2-S на 3.5 AP на LVIS, при трети затрат на обучение и 1.4-кратной скорости инференса. Миграция требует изменения одной строки — см. раздел Сравнение YOLOE.

  • Ultralytics YOLOE поддерживает три режима промптов. Текстовый промпт — это имена классов в виде строк для чекпоинта *-seg.pt, и это обычный выбор. Визуальный промпт — это один или несколько примеров рамок на опорном изображении для целей, которые трудно описать словами. Инференс без промптов использует отдельный чекпоинт *-seg-pf.pt, который отвечает на основе встроенного словаря из 4585 имен без каких-либо входных данных. Текстовые и визуальные промпты используют одни и те же чекпоинты; версии без промптов — это другие файлы, которые отклоняют set_classes(). Полное сравнение см. в разделе Выбор режима промптов.

  • Начни с yoloe-26s-seg.pt: семейство YOLOE-26 превосходит YOLOE-11 и YOLOE-v8 в каждом соответствующем масштабе, а масштаб s является наименьшим среди тех, что превышают 30 mAP на мини-выборке LVIS. Переходи к m, l или x, когда точность для редких категорий важнее задержки — сравнивать следует колонку mAPr в разделе Производительность. Переходи на n только для развертывания на периферийных устройствах. Загружай файл *-seg-pf.pt того же масштаба, если тебе нужен встроенный словарь, а не твои собственные имена классов.

  • Метки вроде object0 и object1 означают, что предсказание получено из визуального промпта, который группирует примеры рамок во временные пронумерованные классы вместо использования твоих имен. Идентификаторы классов, передаваемые в visual_prompts["cls"], выполняют только эту группировку. Модель сообщает их как object0, object1 и т.д. в порядке назначенных тобой ID, поэтому сопоставь их обратно со своими метками в результатах. Если тебе нужны твои имена в выводе, используй текстовый промпт.

  • Чекпоинты без промптов (*-seg-pf.pt) определяют классы через собственный встроенный словарь и отклоняют внешние промпты с помощью AssertionError: Prompt-free model does not support setting classes. Please try with Text/Visual prompt models.. Загрузи чекпоинт *-seg.pt, если тебе нужен собственный список классов. См. раздел Выбор режима промптов.

  • Первый текстовый промпт заставляет Ultralytics YOLOE установить ultralytics/CLIP из GitHub с помощью pip и скачать текстовый энкодер TorchScript в текущую рабочую директорию — около 254 МБ для YOLOE-26; точные данные об активах для каждого семейства моделей см. в разделе Установка и требования. Визуальные промпты и чекпоинты без промптов не требуют ни того, ни другого. Чтобы избежать загрузки на целевой машине, задай промпты один раз и сохрани их с помощью save_prompt_embeddings() или экспортируй модель с уже настроенными классами.

  • Нет — YOLOE вшивает классы из промпта в веса во время экспорта, поэтому загруженный экспортированный файл отклоняет как set_classes(), так и visual_prompts=. Повтори экспорт из исходного чекпоинта .pt с настроенными новыми промптами. Экспортированный файл ведет себя как стандартная модель YOLO и может быть загружен как с помощью YOLO(), так и с помощью YOLOE().

  • Используй YOLOE, когда тебе нужна пропускная способность в реальном времени и ты можешь назвать классы, и SAM 3, когда качество сегментации концепта важнее скорости. Обе модели принимают визуальные примеры, но только у YOLOE есть режим без промптов. Полное сравнение приведено в разделе Сравнение YOLOE.

Комментарии