Перейти к содержанию

YOLOE: возможность видеть что угодно в реальном времени

Введение

Варианты подсказок YOLOE

YOLOE (Real-Time Seeing Anything) - это новое достижение в моделях YOLO с нулевым выстрелом и подсказками, предназначенное для обнаружения и сегментации объектов с открытым словарным запасом. В отличие от предыдущих моделей YOLO , ограниченных фиксированными категориями, YOLOE использует подсказки в виде текста, изображений или внутреннего словаря, позволяя в реальном времени обнаруживать любые классы объектов. Построенная на базе YOLOv10 и вдохновленная YOLO, YOLOE достигает современной производительности при нулевом выстреле с минимальным влиянием на скорость и точность.



Смотреть: Как использовать YOLOE с пакетом Ultralytics Python : Open Vocabulary & Real-Time Seeing Anything 🚀

По сравнению с предыдущими моделями YOLO , YOLOE значительно повышает эффективность и точность. Она превосходит YOLO на LVIS на +3,5 AP, используя при этом лишь треть обучающих ресурсов и достигая 1,4× более высокой скорости вывода. При тонкой настройке на COCO YOLOE-v8-large превосходит YOLOv8 на 0,1 mAP, затрачивая почти в 4 раза меньше времени на обучение. Это демонстрирует исключительный баланс точности, эффективности и универсальности YOLOE. В следующих разделах рассматривается архитектура YOLOE, сравнение с эталонами и интеграция с системой Ultralytics фреймворком Ultralytics.

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

Архитектура YOLOE

YOLOE сохраняет стандартную структуру YOLO - конволюционную основу (например, CSP-Darknet) для извлечения признаков, "шею" (например, PAN-FPN) для многомасштабного слияния и безъякорную, раздельную головку обнаружения (как в YOLO11), предсказывающую объектность, классы и коробки независимо. YOLOE представляет три новых модуля, позволяющих обнаруживать открытые словари:

  • Перепараметризуемое выравнивание региона и текста (RepRTA): поддерживает обнаружение по текстовому запросу путем уточнения текстовых вкраплений (например, из CLIP) с помощью небольшой вспомогательной сети. При выводе эта сеть складывается в основную модель, обеспечивая нулевые накладные расходы. Таким образом, YOLOE обнаруживает произвольные объекты с текстовыми метками (например, невидимый "светофор") без ущерба для времени выполнения.

  • Кодировщик визуальных подсказок с семантической активацией (SAVPE): Обеспечивает обнаружение по визуальному запросу с помощью облегченной ветви встраивания. Получив эталонное изображение, SAVPE кодирует семантические и активационные признаки, настраивая модель на обнаружение визуально похожих объектов - возможность одномоментного обнаружения, полезная для логотипов или специфических деталей.

  • Lazy Region-Prompt Contrast (LRPC): В режиме без подсказок YOLOE выполняет распознавание открытых наборов, используя внутренние вкрапления, обученные на больших словарях (1200+ категорий из LVIS и Objects365). Без внешних подсказок или кодировщиков YOLOE идентифицирует объекты с помощью поиска сходства вкраплений, эффективно обрабатывая большие пространства меток при выводе.

Кроме того, YOLOE интегрирует сегментацию экземпляров в реальном времени, расширяя головку обнаружения ветвью предсказания маски (подобно YOLACT или YOLOv8), что добавляет минимальные накладные расходы.

Очень важно, что модули YOLOE с открытым миром не влекут за собой никаких затрат на вывод при использовании в качестве обычного YOLO с закрытым набором. После обучения параметры YOLOE могут быть перепараметризованы в стандартную голову YOLO , сохраняя идентичные FLOP и скорость (например, соответствие YOLO11 точно).

Доступные модели, поддерживаемые задачи и режимы работы

В этом разделе подробно описаны доступные модели с определенными предварительно обученными весами, задачи, которые они поддерживают, и их совместимость с различными режимами работы, такими как Inference, Validation, Training и Export, обозначенными ✅ для поддерживаемых режимов и ❌ для неподдерживаемых режимов.

Модели с текстовыми/визуальными подсказками

Тип модели Предварительно обученные веса Поддерживаемые задачи Заключение Валидация Обучение Экспорт
YOLOE-11S yoloe-11s-seg.pt Сегментация экземпляров
YOLOE-11M yoloe-11m-seg.pt Сегментация экземпляров
YOLOE-11L yoloe-11l-seg.pt Сегментация экземпляров
YOLOE-v8S yoloe-v8s-seg.pt Сегментация экземпляров
YOLOE-v8M yoloe-v8m-seg.pt Сегментация экземпляров
YOLOE-v8L yoloe-v8l-seg.pt Сегментация экземпляров

Оперативно Бесплатные модели

Тип модели Предварительно обученные веса Поддерживаемые задачи Заключение Валидация Обучение Экспорт
YOLOE-11S-PF yoloe-11s-seg-pf.pt Сегментация экземпляров
YOLOE-11M-PF yoloe-11m-seg-pf.pt Сегментация экземпляров
YOLOE-11L-PF yoloe-11l-seg-pf.pt Сегментация экземпляров
YOLOE-v8S-PF yoloe-v8s-seg-pf.pt Сегментация экземпляров
YOLOE-v8M-PF yoloe-v8m-seg-pf.pt Сегментация экземпляров
YOLOE-v8L-PF yoloe-v8l-seg-pf.pt Сегментация экземпляров

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

Модели YOLOE легко интегрируются в ваши приложения Python . Ultralytics предоставляет удобный Python API и командыCLI для упрощения разработки.

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

Тонкая настройка на пользовательском наборе данных

Пример

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

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

model.train(
    data="coco128-seg.yaml",
    epochs=80,
    close_mosaic=10,
    batch=128,
    optimizer="AdamW",
    lr0=1e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    device="0",
    trainer=YOLOEPESegTrainer,
)
from ultralytics import YOLOE
from ultralytics.models.yolo.yoloe import YOLOEPESegTrainer

model = YOLOE("yoloe-11s-seg.pt")
head_index = len(model.model.model) - 1
freeze = [str(f) for f in range(0, head_index)]
for name, child in model.model.model[-1].named_children():
    if "cv3" not in name:
        freeze.append(f"{head_index}.{name}")

freeze.extend(
    [
        f"{head_index}.cv3.0.0",
        f"{head_index}.cv3.0.1",
        f"{head_index}.cv3.1.0",
        f"{head_index}.cv3.1.1",
        f"{head_index}.cv3.2.0",
        f"{head_index}.cv3.2.1",
    ]
)

model.train(
    data="coco128-seg.yaml",
    epochs=2,
    close_mosaic=0,
    batch=16,
    optimizer="AdamW",
    lr0=1e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    device="0",
    trainer=YOLOEPESegTrainer,
    freeze=freeze,
)

Прогнозирование использования

YOLOE supports both text-based and visual prompting. Using prompts is straightforward—just pass them through the predict как показано ниже:

Пример

Text prompts allow you to specify the classes that you wish to detect through textual descriptions. The following code shows how you can use YOLOE to detect people and buses in an image:

from ultralytics import YOLOE

# Initialize a YOLOE model
model = YOLOE("yoloe-11l-seg.pt")  # or select yoloe-11s/m-seg.pt for different sizes

# Set text prompt to detect person and bus. You only need to do this once after you load the model.
names = ["person", "bus"]
model.set_classes(names, model.get_text_pe(names))

# Run detection on the given image
results = model.predict("path/to/image.jpg")

# Show results
results[0].show()

Visual prompts allow you to guide the model by showing it visual examples of the target classes, rather than describing them in text.

Сайт visual_prompts argument takes a dictionary with two keys: bboxes и cls. Each bounding box in bboxes should tightly enclose an example of the object you want the model to detect, and the corresponding entry in cls specifies the class label for that box. This pairing tells the model, "This is what class X looks like—now find more like it."

Class IDs (cls) in visual_prompts are used to associate each bounding box with a specific category within your prompt. They aren't fixed labels, but temporary identifiers you assign to each example. The only requirement is that class IDs must be sequential, starting from 0. This helps the model correctly associate each box with its respective class.

You can provide visual prompts directly within the same image you want to run inference on. For example:

import numpy as np

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

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

# Define visual prompts using bounding boxes and their corresponding class IDs.
# Each box highlights an example of the object you want the model to detect.
visual_prompts = dict(
    bboxes=np.array(
        [
            [221.52, 405.8, 344.98, 857.54],  # Box enclosing person
            [120, 425, 160, 445],  # Box enclosing glasses
        ],
    ),
    cls=np.array(
        [
            0,  # ID to be assigned for person
            1,  # ID to be assigned for glassses
        ]
    ),
)

# Run inference on an image, using the provided visual prompts as guidance
results = model.predict(
    "ultralytics/assets/bus.jpg",
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)

# Show results
results[0].show()

Or you can provide examples from a separate reference image using the refer_image argument. In that case, the bboxes и cls в visual_prompts should describe objects in the reference image, not the target image you're making predictions on:

Примечание

Если source is a video or stream, the model automatically uses the first frame as the refer_image. This means your visual_prompts are applied to that initial frame to help the model understand what to look for in the rest of the video. Alternatively, you can explicitly pass any specific frame as the refer_image to control which visual examples the model uses as reference.

import numpy as np

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

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

# Define visual prompts based on a separate reference image
visual_prompts = dict(
    bboxes=np.array([[221.52, 405.8, 344.98, 857.54]]),  # Box enclosing person
    cls=np.array([0]),  # ID to be assigned for person
)

# Run prediction on a different image, using reference image to guide what to look for
results = model.predict(
    "ultralytics/assets/zidane.jpg",  # Target image for detection
    refer_image="ultralytics/assets/bus.jpg",  # Reference image used to get visual prompts
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)

# Show results
results[0].show()

You can also pass multiple target images to run prediction on:

import numpy as np

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

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

# Define visual prompts using bounding boxes and their corresponding class IDs.
# Each box highlights an example of the object you want the model to detect.
visual_prompts = dict(
    bboxes=[
        np.array(
            [
                [221.52, 405.8, 344.98, 857.54],  # Box enclosing person
                [120, 425, 160, 445],  # Box enclosing glasses
            ],
        ),
        np.array([[150, 200, 1150, 700]]),
    ],
    cls=[
        np.array(
            [
                0,  # ID to be assigned for person
                1,  # ID to be assigned for glasses
            ]
        ),
        np.array([0]),
    ],
)

# Run inference on multiple image, using the provided visual prompts as guidance
results = model.predict(
    ["ultralytics/assets/bus.jpg", "ultralytics/assets/zidane.jpg"],
    visual_prompts=visual_prompts,
    predictor=YOLOEVPSegPredictor,
)

# Show results
results[0].show()

YOLOE also includes prompt-free variants that come with a built-in vocabulary. These models don't require any prompts and work like traditional YOLO models. Instead of relying on user-provided labels or visual examples, they detect objects from a predefined list of 4,585 classes based on the tag set used by the Recognize Anything Model Plus (RAM++).

from ultralytics import YOLOE

# Initialize a YOLOE model
model = YOLOE("yoloe-11l-seg-pf.pt")

# Run prediction. No prompts required.
results = model.predict("path/to/image.jpg")

# Show results
results[0].show()

Использование вала

Пример

from ultralytics import YOLOE

# Create a YOLOE model
model = YOLOE("yoloe-11l-seg.pt")  # or select yoloe-m/l-seg.pt for different sizes

# Conduct model validation on the COCO128-seg example dataset
metrics = model.val(data="coco128-seg.yaml")

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

from ultralytics import YOLOE

# Create a YOLOE model
model = YOLOE("yoloe-11l-seg.pt")  # or select yoloe-m/l-seg.pt for different sizes

# Conduct model validation on the COCO128-seg example dataset
metrics = model.val(data="coco128-seg.yaml", load_vp=True)

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

from ultralytics import YOLOE

# Create a YOLOE model
model = YOLOE("yoloe-11l-seg.pt")  # or select yoloe-m/l-seg.pt for different sizes

# Conduct model validation on the COCO128-seg example dataset
metrics = model.val(data="coco128-seg.yaml", load_vp=True, refer_data="coco.yaml")
from ultralytics import YOLOE

# Create a YOLOE model
model = YOLOE("yoloe-11l-seg.pt")  # or select yoloe-m/l-seg.pt for different sizes

# Conduct model validation on the COCO128-seg example dataset
metrics = model.val(data="coco128-seg.yaml")

Проверка модели на наборе данных осуществляется следующим образом:

Официальные модели поездов

Подготовьте наборы данных

Примечание

Для обучения официальных моделей YOLOE необходимы сегментные аннотации для обучающих данных, вот сценарий, предоставленный официальной командой преобразует наборы данных в аннотации к сегментам, используя Модели SAM2.1. Или вы можете напрямую загрузить предоставленный Processed Segment Annotations в следующей таблице, предоставленной официальной командой.

  • Данные о поезде
Набор данных Тип Образцы Коробки Необработанные аннотации обнаружения Аннотации обработанных сегментов
Объекты365v1 Обнаружение 609k 9621k objects365_train.json objects365_train_segm.json
GQA Заземление 621k 3681k final_mixed_train_no_coco.json final_mixed_train_no_coco_segm.json
Flickr30k Заземление 149k 641k final_flickr_separateGT_train.json final_flickr_separateGT_train_segm.json
  • Валовые данные
Набор данных Тип Файлы аннотаций
LVIS minival Обнаружение minival.txt

Запуск обучения с нуля

Примечание

Visual Prompt Модели точно настраиваются на основе обученных Text Prompt модели.

Пример

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

data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="../datasets/flickr/full_images/",
                json_file="../datasets/flickr/annotations/final_flickr_separateGT_train_segm.json",
            ),
            dict(
                img_path="../datasets/mixed_grounding/gqa/images",
                json_file="../datasets/mixed_grounding/annotations/final_mixed_train_no_coco_segm.json",
            ),
        ],
    ),
    val=dict(yolo_data=["lvis.yaml"]),
)

model = YOLOE("yoloe-11l-seg.yaml")
model.train(
    data=data,
    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",
)

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

import torch

from ultralytics import YOLOE

det_model = YOLOE("yoloe-11l.yaml")
state = torch.load("yoloe-11l-seg.pt")
det_model.load(state["model"])
det_model.save("yoloe-11l-seg-det.pt")

Начните обучение:

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

data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="../datasets/flickr/full_images/",
                json_file="../datasets/flickr/annotations/final_flickr_separateGT_train_segm.json",
            ),
            dict(
                img_path="../datasets/mixed_grounding/gqa/images",
                json_file="../datasets/mixed_grounding/annotations/final_mixed_train_no_coco_segm.json",
            ),
        ],
    ),
    val=dict(yolo_data=["lvis.yaml"]),
)

model = YOLOE("yoloe-11l-seg.pt")
# replace to yoloe-11l-seg-det.pt if converted to detection model
# model = YOLOE("yoloe-11l-seg-det.pt")

# freeze every layer except of the savpe module.
head_index = len(model.model.model) - 1
freeze = list(range(0, head_index))
for name, child in model.model.model[-1].named_children():
    if "savpe" not in name:
        freeze.append(f"{head_index}.{name}")

model.train(
    data=data,
    batch=128,
    epochs=2,
    close_mosaic=2,
    optimizer="AdamW",
    lr0=16e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    trainer=YOLOEVPTrainer,
    device="0,1,2,3,4,5,6,7",
    freeze=freeze,
)

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

from copy import deepcopy

from ultralytics import YOLOE

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

vp_model = YOLOE("yoloe-11l-vp.pt")
model.model.model[-1].savpe = deepcopy(vp_model.model.model[-1].savpe)
model.eval()
model.save("yoloe-11l-seg.pt")

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

import torch

from ultralytics import YOLOE

det_model = YOLOE("yoloe-11l.yaml")
state = torch.load("yoloe-11l-seg.pt")
det_model.load(state["model"])
det_model.save("yoloe-11l-seg-det.pt")
Начните обучение:
from ultralytics import YOLOE

data = dict(
    train=dict(
        yolo_data=["Objects365.yaml"],
        grounding_data=[
            dict(
                img_path="../datasets/flickr/full_images/",
                json_file="../datasets/flickr/annotations/final_flickr_separateGT_train_segm.json",
            ),
            dict(
                img_path="../datasets/mixed_grounding/gqa/images",
                json_file="../datasets/mixed_grounding/annotations/final_mixed_train_no_coco_segm.json",
            ),
        ],
    ),
    val=dict(yolo_data=["lvis.yaml"]),
)

model = YOLOE("yoloe-11l-seg.pt")
# replace to yoloe-11l-seg-det.pt if converted to detection model
# model = YOLOE("yoloe-11l-seg-det.pt")

# freeze layers.
head_index = len(model.model.model) - 1
freeze = [str(f) for f in range(0, head_index)]
for name, child in model.model.model[-1].named_children():
    if "cv3" not in name:
        freeze.append(f"{head_index}.{name}")

freeze.extend(
    [
        f"{head_index}.cv3.0.0",
        f"{head_index}.cv3.0.1",
        f"{head_index}.cv3.1.0",
        f"{head_index}.cv3.1.1",
        f"{head_index}.cv3.2.0",
        f"{head_index}.cv3.2.1",
    ]
)

model.train(
    data=data,
    batch=128,
    epochs=1,
    close_mosaic=1,
    optimizer="AdamW",
    lr0=2e-3,
    warmup_bias_lr=0.0,
    weight_decay=0.025,
    momentum=0.9,
    workers=4,
    trainer=YOLOEPEFreeTrainer,
    device="0,1,2,3,4,5,6,7",
    freeze=freeze,
    single_cls=True,  # this is needed
)

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

from copy import deepcopy

from ultralytics import YOLOE

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

pf_model = YOLOE("yoloe-11l-seg-pf.pt")
names = ["object"]
tpe = model.get_text_pe(names)
model.set_classes(names, tpe)
model.model.model[-1].fuse(model.model.pe)

model.model.model[-1].cv3[0][2] = deepcopy(pf_model.model.model[-1].cv3[0][2]).requires_grad_(True)
model.model.model[-1].cv3[1][2] = deepcopy(pf_model.model.model[-1].cv3[1][2]).requires_grad_(True)
model.model.model[-1].cv3[2][2] = deepcopy(pf_model.model.model[-1].cv3[2][2]).requires_grad_(True)
del model.model.pe
model.save("yoloe-11l-seg-pf.pt")

Сравнение производительности YOLOE

YOLOE соответствует или превосходит точность закрытых моделей YOLO в стандартных бенчмарках, таких как COCO, без ущерба для скорости и размера модели. В таблице ниже приведено сравнение YOLOE-L (построенного на базе YOLO11) с соответствующими моделями YOLOv8. YOLOv8 и YOLO11 :

Модель COCO mAP50-95 Скорость умозаключений (T4) Параметры GFLOPs (640px)
YOLOv8 (закрытый набор) 52.9% 9,06 мс (110 кадров в секунду) 43.7 M 165.2 B
YOLO11 (закрытый комплект) 53.5% 6,2 мс (130 кадров в секунду) 26.2 M 86.9 B
YOLOE-L (открытая вокабула) 52.6% 6,2 мс (130 кадров в секунду) 26.2 M 86.9 B†

YOLO11 и YOLOE-L имеют идентичную архитектуру (в YOLO11 отключены модули подсказок), что приводит к одинаковой скорости вычислений и схожим оценкам GFLOPs.

YOLOE-L достигает 52,6 % mAP, превосходя YOLOv8(52,9 %) при примерно 40 % меньшем количестве параметров (26 М против 43,7 М). Он обрабатывает изображения 640×640 за 6,2 мс (161 кадр/с) по сравнению с 9,06 мс (110 кадр/с) у YOLOv8, что подчеркивает эффективность YOLO11. Очень важно, что модули YOLOE с открытым словарем не требуют затрат на вывод, демонстрируя дизайн "без компромиссов на бесплатный обед".

В задачах с нулевым выстрелом и переносом YOLOE превосходит всех: на LVIS YOLOE-small превосходит YOLO на +3,5 AP, затрачивая на обучение в 3 раза меньше ресурсов. Тонкая настройка YOLOE-L при переходе от LVIS к COCO также потребовала в 4 раза меньше времени на обучение, чем YOLOv8, что подчеркивает эффективность и адаптивность YOLOE. YOLOE также сохраняет отличительную скорость YOLO, достигая 300+ FPS на GPU T4 и ~64 FPS на iPhone 12 с помощью CoreML, что идеально подходит для пограничных и мобильных развертываний.

Примечание

Условия бенчмарка: Результаты YOLOE получены на основе моделей, предварительно обученных на Objects365, GoldG и LVIS, а затем доработанных или оцененных на COCO. Небольшое преимущество YOLOE по сравнению с YOLOv8 по mAP обусловлено обширным предварительным обучением. Без такого обучения в открытой кабине YOLOE соответствует аналогичным по размеру моделям YOLO , подтверждая точность SOTA и гибкость открытого мира без ущерба для производительности.

Сравнение с предыдущими моделями

YOLOE представляет собой значительное усовершенствование по сравнению с предыдущими моделями YOLO и детекторами открытой лексики:

  • YOLOE против YOLOv5:
    YOLOv5 предлагал хороший баланс скорости и точности, но требовал переобучения для новых классов и использовал головы, основанные на якорях. В отличие от него, YOLOE не использует якорей и динамически определяет новые классы. YOLOE, основываясь на улучшениях YOLOv8, достигает более высокой точности (52,6 % против ~50 % mAP у YOLOv5 на COCO) и интегрирует сегментацию экземпляров, в отличие от YOLOv5.

  • YOLOE против YOLOv8:
    YOLOE расширяется YOLOv8переделанную архитектуру, достигая аналогичной или более высокой точности(52,6% mAP при ~26M параметров против 52,9% у YOLOv8 при ~44M параметров). При этом значительно сокращается время обучения за счет более сильного предварительного обучения. Ключевым достижением является возможность YOLOE работать в открытом мире, обнаруживая невидимые объекты (например,"скутер с птицей" или"символ мира") с помощью подсказок, в отличие от закрытого дизайна YOLOv8.

  • YOLOE против YOLO11:
    YOLO11 улучшает YOLOv8 , повышая эффективность и уменьшая количество параметров (~22%). YOLOE напрямую наследует эти преимущества, сравнивая скорость вывода и количество параметров YOLO11(~26 М параметров), добавляя при этом обнаружение и сегментацию открытой лексики. В сценариях с закрытыми наборами YOLOE эквивалентен YOLO11, но, что очень важно, добавляет адаптивность для обнаружения невидимых классов, достигая возможностейYOLO11 + открытого мира без ущерба для скорости.

  • YOLOE в сравнении с предыдущими детекторами открытой лексики:
    Предыдущие модели открытых словарей (GLIP, OWL-ViT, YOLO) в значительной степени опирались на трансформаторы языка зрения, что приводило к медленному выводу. YOLOE превосходит их по точности с нулевого выстрела (например, +3,5 AP по сравнению с YOLO) и работает в 1,4 раза быстрее при значительно меньших ресурсах обучения. По сравнению с подходами на основе трансформаторов (например, GLIP), YOLOE предлагает на порядки более быстрый вывод, эффективно преодолевая разрыв в точности и эффективности при обнаружении открытых наборов.

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

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

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

  • Обнаружение объектов в открытом мире:
    Идеально подходит для динамичных сценариев, таких как робототехника, где роботы распознают ранее невидимые объекты с помощью подсказок, или системы безопасности, быстро адаптирующиеся к новым угрозам (например, опасным предметам) без переобучения.

  • Обнаружение по нескольким и одному снимку:
    Используя визуальные подсказки (SAVPE), YOLOE быстро изучает новые объекты по одним опорным изображениям - идеальное решение для промышленного контроля (мгновенная идентификация деталей или дефектов) или индивидуального наблюдения, позволяющее осуществлять визуальный поиск с минимальными настройками.

  • Большой словарный запас и длиннохвостовое распознавание:
    Благодаря словарному запасу из 1000 с лишним классов YOLOE отлично справляется с такими задачами, как мониторинг биоразнообразия (обнаружение редких видов), музейные коллекции, инвентаризация розничной торговли или электронная коммерция, надежно идентифицируя множество классов без длительного обучения по каждому классу.

  • Интерактивное обнаружение и сегментация:
    YOLOE поддерживает интерактивные приложения в реальном времени, такие как поиск видео/изображений, дополненная реальность (AR) и интуитивное редактирование изображений, управляемое естественным вводом (текстовые или визуальные подсказки). Пользователи могут динамически изолировать, идентифицировать или точно редактировать объекты с помощью масок сегментации.

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

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

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

Наконечник

Выберите режим YOLOE в зависимости от ваших потребностей:

  • Режим закрытого набора: Для заданий фиксированного класса (максимальная скорость и точность).
  • Режим с подсказками: Быстро добавляйте новые объекты с помощью текстовых или визуальных подсказок.
  • Режим открытого набора без подсказок: Общее обнаружение по многим категориям (идеально для каталогизации и поиска).

Часто комбинирование режимов - например, открытие без подсказок и последующие целевые подсказки - позволяет использовать весь потенциал YOLOE.

Обучение и выводы

YOLOE легко интегрируется с Ultralytics Python API и CLIкак и другие модели YOLO YOLOv8, YOLO). Вот как быстро начать работу:

Обучение и выводы с помощью YOLOE

from ultralytics import YOLO

# Load pre-trained YOLOE model and train on custom data
model = YOLO("yoloe-11s.pt")
model.train(data="path/to/data.yaml", epochs=50, imgsz=640)

# Run inference using text prompts ("person", "bus")
model.set_classes(["person", "bus"])
results = model.predict(source="test_images/street.jpg")
results[0].save()  # save annotated output

Здесь YOLOE по умолчанию ведет себя как стандартный детектор, но его легко переключить в режим обнаружения с подсказками, указав классы (set_classes). Результаты содержат ограничительные рамки, маски и метки.

# Training YOLOE on custom dataset
yolo train model=yoloe-11s.pt data=path/to/data.yaml epochs=50 imgsz=640

# Inference with text prompts
yolo predict model=yoloe-11s.pt source="test_images/street.jpg" classes="person,bus"

Подсказки CLI (classes) направляют YOLOE аналогично Python'у set_classes. Визуальные подсказки (запросы на основе изображений) в настоящее время требуют использования API Python .

Другие поддерживаемые задачи

  • Валидация: Оценить точность легко с помощью model.val() или yolo val.
  • Экспорт: Экспорт моделей YOLOE (model.export()) в ONNX, TensorRT и т.д., что облегчает развертывание.
  • Отслеживание: YOLOE поддерживает слежение за объектами (yolo track) при интеграции, что полезно для отслеживания подсказанных классов в видео.

Примечание

YOLOE автоматически включает в себя маски сегментации в результатах выводов (results[0].masks), что упрощает задачи с пиксельной точностью, такие как выделение объектов или их измерение, не требуя отдельных моделей.

Начало работы

Быстро настройте YOLOE с Ultralytics , выполнив следующие действия:

  1. Установка: Установите или обновите пакет Ultralytics :

    pip install -U ultralytics
    
  2. Скачать YOLOE Weights: Предварительно обученные модели YOLOE (например, варианты YOLOE-v8-S/L, YOLOE-11) доступны из релизов YOLOE на GitHub. Просто загрузите нужную вам модель .pt файл для загрузки в класс Ultralytics YOLO .

  3. Требования к аппаратному обеспечению:

    • Заключение: Рекомендуется GPU NVIDIA с ≥4-8 ГБ VRAM). Небольшие модели эффективно работают на граничных GPU (например, Jetson) или CPU при более низком разрешении.
    • Обучение: Тонкая настройка YOLOE на пользовательских данных обычно требует всего одного GPU. Обширное предварительное обучение с использованием открытого словаря (LVIS/Objects365), использованное авторами, потребовало значительных вычислений (8× RTX 4090 GPU).
  4. Конфигурация: Конфигурации YOLOE используют стандартные YAML-файлы Ultralytics . Конфигурации по умолчанию (например, yoloe-s.yaml) обычно достаточно, но вы можете изменить костяк, классы или размер изображения по мере необходимости.

  5. Бег YOLOE:

    • Быстрое умозаключение (без подсказок):
      yolo predict model=yoloe-s.pt source="image.jpg"
      
    • Обнаружение с подсказкой (пример текстовой подсказки):

      yolo predict model=yoloe-s.pt source="kitchen.jpg" classes="bowl,apple"
      

      В Python:

      from ultralytics import YOLO
      
      model = YOLO("yoloe-s.pt")
      model.set_classes(["bowl", "apple"])
      results = model.predict("kitchen.jpg")
      results[0].save()
      
  6. Советы по интеграции:

    • Названия классов: Выходы YOLOE по умолчанию используют категории LVIS; использовать set_classes() чтобы указать собственные ярлыки.
    • Скорость: YOLOE не имеет накладных расходов, если не использовать подсказки. Текстовые подсказки оказывают минимальное влияние, визуальные - чуть большее.
    • Пакетный вывод: Поддерживается напрямую (model.predict([img1, img2])). Чтобы получить подсказки по конкретным изображениям, запускайте изображения по отдельности.

Дополнительные ресурсы содержатся в документацииUltralytics . YOLOE позволяет вам легко исследовать мощные возможности открытого мира в знакомой экосистеме YOLO .

Наконечник

Совет профессионала: Чтобы максимально увеличить точность нулевого выстрела YOLOE, выполняйте тонкую настройку по предоставленным контрольным точкам, а не тренируйтесь с нуля. Для повышения точности обнаружения используйте слова-подсказки, совпадающие с общими метками для обучения (см. категории LVIS).

Цитаты и благодарности

Если YOLOE внесла вклад в ваше исследование или проект, пожалуйста, процитируйте оригинальную статью Ао Ванга, Лихао Лю, Хуи Чена, Цзыцзя Линя, Чжунгон Ханя и Гуйгуань Дина из Университета Цинхуа:

@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.

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Чем YOLOE отличается от YOLO?

Хотя и YOLOE, и YOLO позволяют распознавать открытую лексику, YOLOE имеет ряд преимуществ. YOLOE достигает точности +3,5 AP на LVIS, используя при этом в 3 раза меньше ресурсов для обучения и работая в 1,4 раза быстрее, чем YOLO. YOLOE также поддерживает три режима подсказок (текстовый, визуальный и внутренний словарь), в то время как YOLO ориентирован в основном на текстовые подсказки. Кроме того, YOLOE включает встроенные возможности сегментации экземпляров, обеспечивая пиксельно-точные маски для обнаруженных объектов без дополнительных накладных расходов.

Могу ли я использовать YOLOE как обычную модель YOLO ?

Да, YOLOE может работать точно так же, как стандартная модель YOLO , без снижения производительности. При использовании в режиме закрытого набора (без подсказок) модули открытого словаря YOLOE перепараметрируются в стандартную детекторную головку, в результате чего скорость и точность работы идентичны эквивалентным моделям YOLO11 . Это делает YOLOE чрезвычайно универсальным - вы можете использовать его как традиционный детектор для максимальной скорости, а затем переключаться в режим открытого словаря только при необходимости.

Какие типы подсказок можно использовать с YOLOE?

YOLOE поддерживает три типа подсказок:

  1. Текстовые подсказки: Укажите классы объектов с помощью естественного языка (например, "человек", "светофор", "скутер")
  2. Визуальные подсказки: Предоставьте эталонные изображения объектов, которые вы хотите обнаружить
  3. Внутренний словарь: Используйте встроенный словарь YOLOE, состоящий из 1200+ категорий, без внешних подсказок

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

Как YOLOE обрабатывает сегментацию экземпляров?

YOLOE интегрирует сегментацию экземпляров непосредственно в свою архитектуру, расширяя головку обнаружения ветвью предсказания маски. Этот подход аналогичен YOLOv8, но работает для любого класса объектов. Маски сегментации автоматически включаются в результаты вывода и могут быть доступны через results[0].masks. Этот единый подход устраняет необходимость в отдельных моделях обнаружения и сегментации, упрощая рабочие процессы для приложений, требующих пиксельной точности границ объектов.

Как YOLOE обрабатывает умозаключения с помощью пользовательских подсказок?

Подобно YOLO, YOLOE поддерживает стратегию "подскажи - потом обнаружи", которая использует автономный словарь для повышения эффективности. Пользовательские подсказки, такие как подписи или конкретные категории объектов, предварительно кодируются и хранятся в виде вкраплений автономного словаря. Такой подход упрощает процесс обнаружения, не требуя повторного обучения. Вы можете динамически задавать эти подсказки в модели, чтобы адаптировать ее к конкретным задачам обнаружения:

from ultralytics import YOLO

# Initialize a YOLOE model
model = YOLO("yoloe-s.pt")

# Define custom classes
model.set_classes(["person", "bus"])

# Execute prediction on an image
results = model.predict("path/to/image.jpg")

# Show results
results[0].show()
📅 Создано 1 месяц назад ✏️ Обновлено 4 дня назад

Комментарии