Перейти к содержанию

Модель YOLO-World

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



Смотреть: Рабочий процесс обучения YOLO World на пользовательском наборе данных

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

Обзор

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

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

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

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

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

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

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

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

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

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

Примечание

Все веса 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Обнаружение объектов

Перенос без обучения на наборе данных 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 команды для оптимизации разработки.



Смотреть: Примеры использования модели YOLO с Ultralytics | Open Vocab, Prompt-Free и другими 🚀

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

Совет

Мы настоятельно рекомендуем использовать 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")
# Load a pretrained YOLOv8s-worldv2 model and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov8s-worldv2.yaml data=coco8.yaml epochs=100 imgsz=640

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

Обнаружение объектов выполняется просто с помощью 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()
# Perform object detection using a YOLO-World model
yolo predict model=yolov8s-world.pt source=path/to/image.jpg imgsz=640

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

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

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

Пример

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")
# Validate a YOLO-World model on the COCO8 dataset with a specified image size
yolo val model=yolov8s-world.pt data=coco8.yaml imgsz=640

Использование при отслеживании

Отслеживание объектов с помощью модели 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")
# Track with a YOLO-World model on the video with a specified image size
yolo track model=yolov8s-world.pt imgsz=640 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()

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

Пример

Сначала загрузите модель 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.model.yolo.world.train_world.py.

Пример

from ultralytics import YOLOWorld
from ultralytics.models.yolo.world.train_world import WorldTrainerFromScratch

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"]),
)
model = YOLOWorld("yolov8s-worldv2.yaml")
model.train(data=data, 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. Мы ценим их стремление к развитию этой области и обмену ценными знаниями с сообществом.

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

Что такое модель 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 на вашем наборе данных не составит труда с помощью предоставленного 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

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

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Обнаружение объектов

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


📅 Создано 1 год назад ✏️ Обновлено 5 дней назад
glenn-jocherRizwanMunawarLaughing-qY-T-Gjk4eMatthewNoyceUltralyticsAssistantBurhan-Q

Комментарии