Ultralytics YOLO27:

Модель 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.

Для задач с открытым словарём, где также нужны маски экземпляров, визуальные подсказки или режим без подсказок, смотри YOLOE, использующую тот же API set_classes().

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

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

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

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

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

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

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

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

В этом разделе подробно описаны доступные модели с соответствующими предварительно обученными весами, поддерживаемые ими задачи и совместимость с различными режимами работы, такими как вывод, валидация, обучение и экспорт, где ✅ обозначает поддерживаемые режимы, а ❌ — неподдерживаемые.

Примечание

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

Тип моделиПредварительно обученные весаПоддерживаемые задачиОбучениеВалидацияВыводЭкспорт
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 выполняется просто, как показано ниже:

Пример

Предварительно обученные модели *.pt PyTorch, а также файлы конфигурации *.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#

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

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

Настройка подсказок#

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

Часто задаваемые вопросы#

  • Модель 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 на собственном наборе данных легко с помощью предоставляемых 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.pt data=coco8.yaml epochs=100 imgsz=640
  • Ultralytics предлагает несколько предварительно обученных моделей YOLO-World, поддерживающих различные задачи и режимы работы:

    Тип моделиПредварительно обученные весаПоддерживаемые задачиОбучениеВалидацияВыводЭкспорт
    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)

Комментарии