YOLOE: возможность видеть что угодно в реальном времени
Введение
YOLOE (Real-Time Seeing Anything) - это новое достижение в моделях YOLO с нулевым выстрелом и подсказками, предназначенное для обнаружения и сегментации объектов с открытым словарным запасом. В отличие от предыдущих моделей YOLO , ограниченных фиксированными категориями, YOLOE использует подсказки в виде текста, изображений или внутреннего словаря, позволяя в реальном времени обнаруживать любые классы объектов. Построенная на базе YOLOv10 и вдохновленная YOLO, YOLOE достигает современной производительности при нулевом выстреле с минимальным влиянием на скорость и точность.
Статус интеграции Ultralytics 🚧
Интеграция Ultralytics для YOLOE находится в стадии разработки 🔨. Примеры использования, приведенные в этой документации, будут работать, когда интеграция будет завершена ✅. Пожалуйста, следите за обновлениями 🔄 или следите за нашим репозиторием GitHub 🚀 для последних изменений.
По сравнению с предыдущими моделями YOLO , YOLOE значительно повышает эффективность и точность. Она превосходит YOLO на LVIS на +3,5 AP, используя при этом лишь треть обучающих ресурсов и достигая 1,4× более высокой скорости вывода. При тонкой настройке на COCO YOLOE-v8-large превосходит YOLOv8 на 0,1 mAP, затрачивая почти в 4 раза меньше времени на обучение. Это демонстрирует исключительный баланс точности, эффективности и универсальности YOLOE. В следующих разделах рассматривается архитектура YOLOE, сравнение с эталонами и интеграция с системой Ultralytics фреймворком Ultralytics.
Обзор архитектуры
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 точно).
Сравнение производительности 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 (open-vocab) | 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). Вот как быстро начать работу:
Статус интеграции Ultralytics 🚧
Интеграция Ultralytics для YOLOE находится в стадии разработки 🔨. Примеры ниже демонстрируют, как будет работать API после завершения интеграции ✅.
Обучение и выводы с помощью YOLOE
from ultralytics import YOLO
# Load pre-trained YOLOE model and train on custom data
model = YOLO("yoloe-s.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-s.pt data=path/to/data.yaml epochs=50 imgsz=640
# Inference with text prompts
yolo predict model=yoloe-s.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 , выполнив следующие действия:
-
Установка: Установите или обновите пакет Ultralytics :
-
Скачать YOLOE Weights: Предварительно обученные модели YOLOE (например, варианты YOLOE-v8-S/L, YOLOE-11) доступны из релизов YOLOE на GitHub. Просто загрузите нужную вам модель
.pt
файл для загрузки в класс Ultralytics YOLO . -
Требования к аппаратному обеспечению:
- Заключение: Рекомендуется GPU NVIDIA с ≥4-8 ГБ VRAM). Небольшие модели эффективно работают на граничных GPU (например, Jetson) или CPU при более низком разрешении.
- Обучение: Тонкая настройка YOLOE на пользовательских данных обычно требует всего одного GPU. Обширное предварительное обучение с использованием открытого словаря (LVIS/Objects365), использованное авторами, потребовало значительных вычислений (8× RTX 4090 GPU).
-
Конфигурация: Конфигурации YOLOE используют стандартные YAML-файлы Ultralytics . Конфигурации по умолчанию (например,
yoloe-s.yaml
) обычно достаточно, но вы можете изменить костяк, классы или размер изображения по мере необходимости. -
Бег YOLOE:
- Быстрое умозаключение (без подсказок):
-
Обнаружение с подсказкой (пример текстовой подсказки):
В Python:
-
Советы по интеграции:
- Названия классов: Выходы YOLOE по умолчанию используют категории LVIS; использовать
set_classes()
чтобы указать собственные ярлыки. - Скорость: YOLOE не имеет накладных расходов, если не использовать подсказки. Текстовые подсказки оказывают минимальное влияние, визуальные - чуть большее.
- Пакетный вывод: Поддерживается напрямую (
model.predict([img1, img2])
). Чтобы получить подсказки по конкретным изображениям, запускайте изображения по отдельности.
- Названия классов: Выходы YOLOE по умолчанию используют категории LVIS; использовать
Дополнительные ресурсы содержатся в документацииUltralytics . YOLOE позволяет вам легко исследовать мощные возможности открытого мира в знакомой экосистеме YOLO .
Наконечник
Совет профессионала: Чтобы максимально увеличить точность нулевого выстрела YOLOE, выполняйте тонкую настройку по предоставленным контрольным точкам, а не тренируйтесь с нуля. Для повышения точности обнаружения используйте слова-подсказки, совпадающие с общими метками для обучения (см. категории LVIS).
Цитаты и благодарности
Если YOLOE внесла вклад в ваше исследование или проект, пожалуйста, процитируйте оригинальную статью Ао Ванга, Лихао Лю, Хуи Чена, Цзыцзя Линя, Чжунгон Ханя и Гуйгуань Дина из Университета Цинхуа:
Оригинальная статья 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 поддерживает три типа подсказок:
- Текстовые подсказки: Укажите классы объектов с помощью естественного языка (например, "человек", "светофор", "скутер")
- Визуальные подсказки: Предоставьте эталонные изображения объектов, которые вы хотите обнаружить
- Внутренний словарь: Используйте встроенный словарь 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()