YOLO Vision 2026:

Модель YOLO-World#

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



Watch: YOLO World training workflow on custom dataset

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

Обзор#

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

Ключевые особенности#

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

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

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

  4. На базе YOLOv8: Созданная на основе Ultralytics YOLOv8, модель YOLO-World задействует новейшие достижения в области детектирования объектов в реальном времени для обеспечения обнаружения с открытым словарем с непревзойденной точностью и скоростью.

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

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

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

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

Примечание

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

Тип моделиПредобученные весаПоддерживаемые задачиTrainingValidationInferenceЭкспорт
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.

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

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

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

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

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

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

Трекинг объектов с помощью модели 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 dataset, без необходимости дополнительной настройки или кастомизации.

Установка промптов#

Обзор имен классов промптов 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()

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

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

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

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

Подготовка наборов данных#

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

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

Примечание

WorldTrainerFromScratch глубоко настроен так, чтобы позволять обучение моделей yolo-world как на датасетах детектирования, так и на датасетах граундинга одновременно. Подробнее см. в ultralytics.models.yolo.world.train_world.py.

Пример
from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch

# Option 1: Use Python dictionary
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"]},
}

# 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 за их новаторскую работу в области детектирования объектов с открытым словарем в реальном времени с помощью 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 представляет собой передовой подход к детектированию объектов в реальном времени на базе фреймворка Ultralytics YOLOv8. Она превосходно справляется с задачами детектирования с открытым словарем, идентифицируя объекты на изображении на основе текстовых описаний. Используя зрительно-языковое моделирование и предварительное обучение на больших датасетах, 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 предоставляет несколько преимуществ перед традиционными моделями детектирования с открытым словарем:

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

    Тип моделиПредобученные весаПоддерживаемые задачиTrainingValidationInferenceЭкспорт
    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Обнаружение объектов
  • Чтобы воспроизвести официальные результаты с нуля, тебе нужно подготовить датасеты и запустить обучение с помощью предоставленного кода. Процедура обучения включает создание словаря данных и запуск метода 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)

Комментарии