Модель YOLO-World

Модель YOLO-World представляет собой передовой подход на базе Ultralytics YOLOv8 для задач Open-Vocabulary Detection в реальном времени. Эта инновация позволяет обнаруживать любой объект на изображении на основе описательных текстов. Значительно снижая вычислительные требования при сохранении конкурентоспособной производительности, YOLO-World становится универсальным инструментом для множества приложений, основанных на компьютерном зрении.



Watch: YOLO World training workflow on custom dataset

Обзор архитектуры модели YOLO-World

Обзор

YOLO-World решает проблемы, с которыми сталкиваются традиционные модели Open-Vocabulary detection, зачастую полагающиеся на громоздкие модели Transformer, требующие значительных вычислительных ресурсов. Зависимость таких моделей от предопределенных категорий объектов также ограничивает их полезность в динамических сценариях. YOLO-World обновляет фреймворк YOLOv8 возможностями open-vocabulary detection, используя языковое моделирование и предварительное обучение на обширных наборах данных, чтобы преуспеть в идентификации широкого спектра объектов в сценариях zero-shot с непревзойденной эффективностью.

Основные характеристики

  1. Решение для работы в реальном времени: Используя скорость вычислений CNN, YOLO-World обеспечивает быстрое решение для open-vocabulary detection, обслуживающее отрасли, которым требуются немедленные результаты.

  2. Эффективность и производительность: YOLO-World сокращает вычислительные и ресурсные требования без ущерба для производительности, предлагая надежную альтернативу моделям вроде SAM, но с долей вычислительных затрат, что позволяет использовать его в приложениях реального времени.

  3. Вывод с автономным словарем: YOLO-World представляет стратегию «сначала подсказка, затем обнаружение» (prompt-then-detect), используя автономный словарь для дальнейшего повышения эффективности. Этот подход позволяет использовать пользовательские подсказки, вычисленные заранее, включая подписи или категории, которые кодируются и сохраняются как эмбеддинги автономного словаря, оптимизируя процесс обнаружения.

  4. Работает на базе YOLOv8: Построенная на основе Ultralytics YOLOv8, модель YOLO-World использует последние достижения в области обнаружения объектов в реальном времени для обеспечения open-vocabulary detection с непревзойденной точностью и скоростью.

  5. Превосходство в бенчмарках: YOLO-World превосходит существующие детекторы с открытым словарем, включая серии MDETR и GLIP, по скорости и эффективности в стандартных бенчмарках, демонстрируя превосходные возможности YOLOv8 на одном GPU NVIDIA V100.

  6. Универсальные приложения: Инновационный подход YOLO-World открывает новые возможности для множества задач компьютерного зрения, обеспечивая повышение скорости на порядки по сравнению с существующими методами.

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

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

Примечание

Все веса YOLOv8-World были напрямую перенесены из официального репозитория YOLO-World, подчеркивая их отличный вклад.

Тип моделиПредобученные весаПоддерживаемые задачиЛогический выводВалидацияОбучениеЭкспорт (Export)
YOLOv8s-worldyolov8s-world.ptОбнаружение объектов
YOLOv8s-worldv2yolov8s-worldv2.ptОбнаружение объектов
YOLOv8m-worldyolov8m-world.ptОбнаружение объектов
YOLOv8m-worldv2yolov8m-worldv2.ptОбнаружение объектов
YOLOv8l-worldyolov8l-world.ptОбнаружение объектов
YOLOv8l-worldv2yolov8l-worldv2.ptОбнаружение объектов
YOLOv8x-worldyolov8x-world.ptОбнаружение объектов
YOLOv8x-worldv2yolov8x-worldv2.ptОбнаружение объектов

Zero-shot перенос на датасете COCO

Производительность
Тип моделиmAPmAP50mAP75
yolov8s-world37.452.040.6
yolov8s-worldv237.752.241.0
yolov8m-world42.057.045.6
yolov8m-worldv243.058.446.8
yolov8l-world45.761.349.8
yolov8l-worldv245.861.349.8
yolov8x-world47.063.051.2
yolov8x-worldv247.162.851.4

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

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



Watch: YOLO-World Model Usage examples with Ultralytics | Open Vocab, Prompt-Free & others 🚀

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

Совет

Мы настоятельно рекомендуем использовать модель yolov8-worldv2 для пользовательского обучения, поскольку она поддерживает детерминированное обучение, а также позволяет легко экспортировать другие форматы, например, onnx/tensorrt.

Object detection выполняется просто с помощью метода 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")

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

Обнаружение объектов выполняется просто с помощью метода 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()

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

Использование проверки (Val)

Валидация модели на датасете оптимизирована следующим образом:

Пример
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")

Использование отслеживания (Track)

Object tracking с моделью 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 dataset как частью их автономного словаря, что повышает эффективность для немедленного использования. Эта интеграция позволяет моделям YOLOv8-World напрямую распознавать и предсказывать 80 стандартных категорий, определенных в датасете COCO, без необходимости дополнительной настройки или кастомизации.

Установка подсказок (prompts)

Обзор названий классов подсказок YOLO-World

Фреймворк 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()

Преимущества сохранения с пользовательским словарем

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

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

Воспроизведение официальных результатов с нуля (Экспериментально)

Подготовка датасетов

  • Данные для обучения
ДатасетТипОбразцыBoxesФайлы аннотаций
Objects365v1Обнаружение609k9621kobjects365_train.json
GQAGrounding621k3681kfinal_mixed_train_no_coco.json
Flickr30kGrounding149k641kfinal_flickr_separateGT_train.json
  • Данные для валидации
ДатасетТипФайлы аннотаций
LVIS minivalОбнаружениеminival.txt

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

Примечание

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,
)

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

Мы выражаем благодарность 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. Мы ценим их вклад в развитие этой области и готовность делиться ценными знаниями с сообществом.

Часто задаваемые вопросы (FAQ)

Что такое модель YOLO-World и как она работает?

Модель YOLO-World — это передовой подход к обнаружению объектов в реальном времени, основанный на фреймворке Ultralytics YOLOv8. Она эффективно справляется с задачами Open-Vocabulary Detection, идентифицируя объекты на изображении на основе описательных текстов. Используя визуально-языковое моделирование и предварительное обучение на больших датасетах, YOLO-World достигает высокой эффективности и производительности при значительно сниженных вычислительных требованиях, что делает её идеальной для приложений реального времени в различных отраслях.

Как YOLO-World выполняет инференс с пользовательскими подсказками?

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

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()

Почему мне стоит выбрать YOLO-World вместо традиционных моделей обнаружения с открытым словарем?

YOLO-World обладает рядом преимуществ перед традиционными моделями обнаружения с открытым словарем:

  • Производительность в реальном времени: Она использует вычислительную мощность CNN для быстрого и эффективного обнаружения.
  • Эффективность и низкие требования к ресурсам: YOLO-World сохраняет высокую производительность, значительно снижая требования к вычислениям и ресурсам.
  • Настраиваемые подсказки: Модель поддерживает динамическую настройку подсказок, позволяя пользователям указывать собственные классы для обнаружения без повторного обучения.
  • Отличные результаты тестов: Она превосходит другие детекторы с открытым словарем, такие как MDETR и GLIP, как по скорости, так и по эффективности на стандартных бенчмарках.

Как обучить модель YOLO-World на своем датасете?

Обучение модели YOLO-World на своем датасете выполняется просто с помощью предоставленного Python API или команд 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=640

Какие существуют предобученные модели YOLO-World и какие задачи они поддерживают?

Ultralytics предлагает несколько предобученных моделей YOLO-World, поддерживающих различные задачи и режимы работы:

Тип моделиПредобученные весаПоддерживаемые задачиЛогический выводВалидацияОбучениеЭкспорт (Export)
YOLOv8s-worldyolov8s-world.ptОбнаружение объектов
YOLOv8s-worldv2yolov8s-worldv2.ptОбнаружение объектов
YOLOv8m-worldyolov8m-world.ptОбнаружение объектов
YOLOv8m-worldv2yolov8m-worldv2.ptОбнаружение объектов
YOLOv8l-worldyolov8l-world.ptОбнаружение объектов
YOLOv8l-worldv2yolov8l-worldv2.ptОбнаружение объектов
YOLOv8x-worldyolov8x-world.ptОбнаружение объектов
YOLOv8x-worldv2yolov8x-worldv2.ptОбнаружение объектов

Как воспроизвести официальные результаты 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)

Комментарии