Link to this sectionМодель YOLO-World#
Модель YOLO-World представляет передовой подход в реальном времени, основанный на Ultralytics YOLOv8, для задач детектирования с открытым словарем (Open-Vocabulary Detection). Это инновационное решение позволяет находить любые объекты на изображении на основе их текстового описания. Значительно снижая вычислительные требования при сохранении конкурентоспособной производительности, YOLO-World становится универсальным инструментом для множества приложений компьютерного зрения.
Watch: YOLO World training workflow on custom dataset

Link to this sectionОбзор#
YOLO-World решает проблемы, с которыми сталкиваются традиционные модели детектирования с открытым словарем, часто зависящие от громоздких моделей Transformer, требующих значительных вычислительных ресурсов. Зависимость этих моделей от предопределенных категорий объектов также ограничивает их полезность в динамических сценариях. YOLO-World обновляет фреймворк YOLOv8 возможностями детектирования с открытым словарем, используя зрение-языковое моделирование и предварительное обучение на обширных наборах данных, чтобы превосходно справляться с идентификацией широкого спектра объектов в сценариях zero-shot с непревзойденной эффективностью.
Link to this sectionКлючевые особенности#
-
Решение в реальном времени: Используя вычислительную скорость CNN, YOLO-World обеспечивает быстрое решение для детектирования с открытым словарем, подходящее для отраслей, которым нужны немедленные результаты.
-
Эффективность и производительность: YOLO-World сокращает вычислительные и ресурсные требования без ущерба для производительности, предлагая надежную альтернативу моделям вроде SAM, но с долей вычислительных затрат, что позволяет использовать его в приложениях реального времени.
-
Инференс с офлайн-словарем: YOLO-World представляет стратегию «prompt-then-detect» (сначала промпт, потом детектирование), используя офлайн-словарь для дальнейшего повышения эффективности. Этот подход позволяет использовать пользовательские промпты, вычисленные заранее, включая заголовки или категории, для кодирования и сохранения в качестве эмбеддингов офлайн-словаря, оптимизируя процесс детектирования.
-
Работает на базе YOLOv8: Построенная на Ultralytics YOLOv8, модель YOLO-World использует последние достижения в детектировании объектов в реальном времени для обеспечения детектирования с открытым словарем с беспрецедентной точностью и скоростью.
-
Превосходство в тестах: YOLO-World превосходит существующие детекторы с открытым словарем, включая серии MDETR и GLIP, по скорости и эффективности на стандартных бенчмарках, демонстрируя превосходные возможности YOLOv8 на одном GPU NVIDIA V100.
-
Универсальные приложения: Инновационный подход YOLO-World открывает новые возможности для множества задач компьютерного зрения, обеспечивая увеличение скорости на порядки по сравнению с существующими методами.
Link to this sectionДоступные модели, поддерживаемые задачи и режимы работы#
В этом разделе подробно описаны доступные модели с их конкретными предобученными весами, задачи, которые они поддерживают, и их совместимость с различными режимами работы, такими как Inference, Validation, Training и Export, обозначенными ✅ для поддерживаемых режимов и ❌ для неподдерживаемых.
Все веса YOLOv8-World были перенесены непосредственно из официального репозитория YOLO-World, что подчеркивает их значительный вклад.
| Тип модели | Предобученные веса | Поддерживаемые задачи | Inference | Validation | Training | Экспорт |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ✅ |
Link to this sectionZero-shot перенос на набор данных COCO#
| Тип модели | mAP | mAP50 | mAP75 |
|---|---|---|---|
| yolov8s-world | 37.4 | 52.0 | 40.6 |
| yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
| yolov8m-world | 42.0 | 57.0 | 45.6 |
| yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
| yolov8l-world | 45.7 | 61.3 | 49.8 |
| yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
| yolov8x-world | 47.0 | 63.0 | 51.2 |
| yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
Link to this sectionПримеры использования#
Модели YOLO-World легко интегрируются в твои приложения на Python. Ultralytics предоставляет удобный Python API и CLI-команды для оптимизации разработки.
Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀
Link to this sectionИспользование для обучения#
Мы настоятельно рекомендуем использовать модель yolov8-worldv2 для кастомного обучения, поскольку она поддерживает детерминированное обучение, а также легко экспортируется в другие форматы, например onnx/tensorrt.
Детектирование объектов выполняется просто с помощью метода train, как показано ниже:
Предобученные в PyTorch модели *.pt, а также файлы конфигурации *.yaml можно передать в класс YOLOWorld() для создания экземпляра модели в Python:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 example dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Run inference with the YOLO-World model on the 'bus.jpg' image
results = model("path/to/bus.jpg")Link to this sectionИспользование для предсказания#
Детектирование объектов выполняется просто с помощью метода predict, как показано ниже:
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Execute inference with the YOLOv8s-world model on the specified image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Этот фрагмент кода демонстрирует простоту загрузки предобученной модели и запуска предсказания на изображении.
Link to this sectionИспользование для валидации#
Валидация модели на наборе данных упрощена следующим образом:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Conduct model validation on the COCO8 example dataset
metrics = model.val(data="coco8.yaml")Link to this sectionИспользование для отслеживания#
Отслеживание объектов с помощью модели YOLO-World на видео/изображениях упрощено следующим образом:
from ultralytics import YOLO
# Create a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt for different sizes
# Track with a YOLO-World model on a video
results = model.track(source="path/to/video.mp4")Модели YOLO-World, предоставляемые Ultralytics, поставляются с предварительно настроенными категориями набора данных COCO как часть их офлайн-словаря, что повышает эффективность для немедленного применения. Эта интеграция позволяет моделям YOLOv8-World напрямую распознавать и предсказывать 80 стандартных категорий, определенных в наборе данных COCO, без необходимости дополнительной настройки или кастомизации.
Link to this sectionУстановка промптов#

Фреймворк YOLO-World позволяет динамически задавать классы с помощью пользовательских промптов, давая пользователям возможность адаптировать модель к своим конкретным потребностям без переобучения. Эта функция особенно полезна для адаптации модели к новым доменам или специфическим задачам, которые изначально не были частью обучающих данных. Устанавливая пользовательские промпты, ты можешь по сути направлять фокус модели на интересующие объекты, повышая релевантность и точность результатов детектирования.
Например, если твоему приложению требуется обнаруживать только объекты 'person' (человек) и 'bus' (автобус), ты можешь указать эти классы напрямую:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or choose yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Execute prediction for specified categories on an image
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Некоторые пользователи обнаружили, что добавление пустой строки "" в качестве фонового класса может улучшить производительность детектирования в некоторых сценариях. Это поведение, по-видимому, зависит от сценария, и точный механизм не до конца изучен:
model.set_classes(["person", "bus", ""])Ты также можешь сохранить модель после настройки пользовательских классов. Поступив так, ты создаешь версию модели YOLO-World, специализированную для твоего конкретного случая использования. Этот процесс встраивает твои определения пользовательских классов непосредственно в файл модели, делая ее готовой к использованию с указанными тобой классами без дальнейших правок. Выполни эти шаги, чтобы сохранить и загрузить свою кастомную модель YOLO-World:
Сначала загрузи модель YOLO-World, установи для нее пользовательские классы и сохрани ее:
from ultralytics import YOLO
# Initialize a YOLO-World model
model = YOLO("yolov8s-world.pt") # or select yolov8m/l-world.pt
# Define custom classes
model.set_classes(["person", "bus"])
# Save the model with the defined offline vocabulary
model.save("custom_yolov8s.pt")После сохранения модель custom_yolov8s.pt ведет себя как любая другая предобученная модель YOLOv8, но с ключевым отличием: теперь она оптимизирована для обнаружения только тех классов, которые ты определил. Эта кастомизация может значительно улучшить производительность и эффективность детектирования для твоих конкретных сценариев использования.
from ultralytics import YOLO
# Load your custom model
model = YOLO("custom_yolov8s.pt")
# Run inference to detect your custom classes
results = model.predict("path/to/image.jpg")
# Show results
results[0].show()Link to this sectionПреимущества сохранения с пользовательским словарем#
- Эффективность: Оптимизирует процесс детектирования, фокусируясь на релевантных объектах, уменьшая вычислительные накладные расходы и ускоряя инференс.
- Гибкость: Позволяет легко адаптировать модель к новым или узкоспециализированным задачам детектирования без необходимости масштабного переобучения или сбора данных.
- Простота: Упрощает развертывание, устраняя необходимость повторно указывать пользовательские классы во время выполнения, делая модель готовой к использованию с ее встроенным словарем.
- Производительность: Повышает точность детектирования для указанных классов, фокусируя внимание и ресурсы модели на распознавании определенных объектов.
Этот подход предоставляет мощное средство настройки современных моделей детектирования объектов под конкретные задачи, делая передовой ИИ более доступным и применимым для широкого спектра практических задач.
Link to this sectionВоспроизведение официальных результатов с нуля (Экспериментально)#
Link to this sectionПодготовка наборов данных#
- Данные для обучения
| Датасет | Тип | Образцы | Боксы | Файлы аннотаций |
|---|---|---|---|---|
| Objects365v1 | Детектирование | 609k | 9621k | objects365_train.json |
| GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
| Flickr30k | Обоснование | 149 тыс. | 641 тыс. | final_flickr_separateGT_train.json |
- Данные валидации
| Датасет | Тип | Файлы аннотаций |
|---|---|---|
| LVIS minival | Детектирование | minival.txt |
Link to this sectionЗапуск обучения с нуля#
WorldTrainerFromScratch сильно кастомизирован, что позволяет обучать модели yolo-world одновременно на датасетах для детекции и датасетах с обоснованием. Более подробную информацию смотри в ultralytics.model.yolo.world.train_world.py.
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
# Option 1: Use Python dictionary
data = dict(
train=dict(
yolo_data=["Objects365.yaml"],
grounding_data=[
dict(
img_path="flickr30k/images",
json_file="flickr30k/final_flickr_separateGT_train.json",
),
dict(
img_path="GQA/images",
json_file="GQA/final_mixed_train_no_coco.json",
),
],
),
val=dict(yolo_data=["lvis.yaml"]),
)
# Option 2: Use YAML file (yolo_world_data.yaml)
# 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 = YOLOWorld("yolov8s-worldv2.yaml")
model.train(
data=data, # or data="yolo_world_data.yaml" if using YAML file
batch=128,
epochs=100,
trainer=WorldTrainerFromScratch,
)Link to this sectionЦитирование и благодарности#
Мы выражаем благодарность Tencent AILab Computer Vision Center за их новаторскую работу в области детектирования объектов с открытым словарем в реальном времени с помощью YOLO-World:
@article{cheng2024yolow,
title={YOLO-World: Real-Time Open-Vocabulary Object Detection},
author={Cheng, Tianheng and Song, Lin and Ge, Yixiao and Liu, Wenyu and Wang, Xinggang and Shan, Ying},
journal={arXiv preprint arXiv:2401.17270},
year={2024}
}Для дальнейшего чтения оригинальная статья по YOLO-World доступна на arXiv. Исходный код проекта и дополнительные ресурсы доступны через их репозиторий на GitHub. Мы ценим их вклад в развитие области и обмен ценными идеями с сообществом.
Link to this sectionFAQ#
Link to this sectionЧто такое модель YOLO-World и как она работает?#
Модель YOLO-World — это продвинутый подход к детектированию объектов в реальном времени, основанный на фреймворке Ultralytics YOLOv8. Она превосходно справляется с задачами детектирования с открытым словарем, идентифицируя объекты на изображении на основе описательных текстов. Используя визуально-языковое моделирование и предварительное обучение на больших наборах данных, YOLO-World достигает высокой эффективности и производительности при значительно сниженных вычислительных требованиях, что делает её идеальной для приложений реального времени в различных отраслях.
Link to this sectionКак YOLO-World выполняет инференс с пользовательскими промптами?#
YOLO-World поддерживает стратегию «промпт-затем-детектирование» (prompt-then-detect), которая использует офлайн-словарь для повышения эффективности. Пользовательские промпты, такие как подписи или специфические категории объектов, предварительно кодируются и сохраняются как офлайн-словарь эмбеддингов. Этот подход упрощает процесс детекции без необходимости переобучения. Ты можешь динамически задавать эти промпты внутри модели, чтобы адаптировать её под конкретные задачи детекции, как показано ниже:
from ultralytics import YOLOWorld
# Initialize a YOLO-World model
model = YOLOWorld("yolov8s-world.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()Link to this sectionПочему стоит выбрать YOLO-World вместо традиционных моделей детектирования с открытым словарем?#
YOLO-World предоставляет несколько преимуществ перед традиционными моделями детектирования с открытым словарем:
- Производительность в реальном времени: Она использует вычислительную скорость CNN для быстрого и эффективного детектирования.
- Эффективность и низкие требования к ресурсам: YOLO-World поддерживает высокую производительность, значительно снижая требования к вычислениям и ресурсам.
- Настраиваемые промпты: Модель поддерживает динамическую настройку промптов, позволяя тебе указывать пользовательские классы для детекции без переобучения.
- Превосходство в бенчмарках: Она превосходит другие детекторы с открытым словарем, такие как MDETR и GLIP, как по скорости, так и по эффективности на стандартных бенчмарках.
Link to this sectionКак обучить модель YOLO-World на своем датасете?#
Обучение модели YOLO-World на твоем датасете выполняется просто с помощью предоставленного API Python или команд CLI. Вот как начать обучение с помощью Python:
from ultralytics import YOLOWorld
# Load a pretrained YOLOv8s-worldv2 model
model = YOLOWorld("yolov8s-worldv2.pt")
# Train the model on the COCO8 dataset for 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Или используя CLI:
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640Link to this sectionКакие существуют предобученные модели YOLO-World и какие задачи они поддерживают?#
Ultralytics предлагает множество предобученных моделей YOLO-World, поддерживающих различные задачи и режимы работы:
| Тип модели | Предобученные веса | Поддерживаемые задачи | Inference | Validation | Training | Экспорт |
|---|---|---|---|---|---|---|
| YOLOv8s-world | yolov8s-world.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ❌ |
| YOLOv8s-worldv2 | yolov8s-worldv2.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ✅ |
| YOLOv8m-world | yolov8m-world.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ❌ |
| YOLOv8m-worldv2 | yolov8m-worldv2.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ✅ |
| YOLOv8l-world | yolov8l-world.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ❌ |
| YOLOv8l-worldv2 | yolov8l-worldv2.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ✅ |
| YOLOv8x-world | yolov8x-world.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ❌ |
| YOLOv8x-worldv2 | yolov8x-worldv2.pt | Обнаружение объектов (Object Detection) | ✅ | ✅ | ✅ | ✅ |
Link to this sectionКак воспроизвести официальные результаты YOLO-World с нуля?#
Чтобы воспроизвести официальные результаты с нуля, тебе нужно подготовить датасеты и запустить обучение с помощью предоставленного кода. Процедура обучения включает создание словаря данных и запуск метода train с пользовательским тренером:
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch
data = {
"train": {
"yolo_data": ["Objects365.yaml"],
"grounding_data": [
{
"img_path": "flickr30k/images",
"json_file": "flickr30k/final_flickr_separateGT_train.json",
},
{
"img_path": "GQA/images",
"json_file": "GQA/final_mixed_train_no_coco.json",
},
],
},
"val": {"yolo_data": ["lvis.yaml"]},
}
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, batch=128, epochs=100, trainer=WorldTrainerFromScratch)