Ultralytics YOLO27:
Get Started

Модель YOLO-World#

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



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

Обзор архитектуры модели 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Обнаружение объектов✅✅✅✅

Перенос обучения без примеров на наборе данных 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-World с Ultralytics | открытый словарь, без запросов и другие возможности 🚀

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

Совет

Мы настоятельно рекомендуем использовать yolov8-worldv2 для обучения на собственных данных: этот инструмент поддерживает детерминированное обучение и упрощает экспорт в такие форматы, как ONNX и TensorRT.

Обнаружение объектов с помощью метода train не вызывает затруднений, как показано ниже:

Пример

Предобученные модели *.pt на базе PyTorch, а также файлы конфигурации *.yaml можно передать классу YOLOWorld(), чтобы создать экземпляр модели в Python:

from ultralytics import YOLOWorld

# Загрузить предварительно обученную модель YOLOv8s-worldv2
model = YOLOWorld("yolov8s-worldv2.pt")

# Обучить модель на демонстрационном наборе данных COCO8 в течение 100 эпох
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

# Запустить инференс модели YOLO-World на изображении 'bus.jpg'
results = model("path/to/bus.jpg")

Использование для предсказаний#

Обнаружение объектов с помощью метода predict не вызывает затруднений, как показано ниже:

Пример
from ultralytics import YOLOWorld

# Инициализировать модель YOLO-World
model = YOLOWorld("yolov8s-world.pt")  # или выбрать yolov8m/l-world.pt для моделей другого размера

# Выполнить инференс модели YOLOv8s-world на указанном изображении
results = model.predict("path/to/image.jpg")

# Показать результаты
results[0].show()

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

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

Проверить модель на наборе данных можно следующим образом:

Пример
from ultralytics import YOLO

# Создать модель YOLO-World
model = YOLO("yolov8s-world.pt")  # или выбрать yolov8m/l-world.pt для моделей другого размера

# Провести проверку модели на примере набора данных COCO8
metrics = model.val(data="coco8.yaml")

Отслеживание объектов#

Отслеживание объектов моделью YOLO-World на видео или изображениях выполняется следующим образом:

Пример
from ultralytics import YOLO

# Создать модель YOLO-World
model = YOLO("yolov8s-world.pt")  # или выбрать yolov8m/l-world.pt для моделей другого размера

# Отслеживание с помощью модели YOLO-World на видео
results = model.track(source="path/to/video.mp4")
Примечание

Модели YOLO-World от Ultralytics предварительно настроены с категориями из набора данных COCO, включёнными в их автономный словарь, что повышает эффективность и позволяет сразу приступать к работе. Благодаря этой интеграции модели YOLOv8-World напрямую распознают и предсказывают 80 стандартных категорий, определённых в наборе данных COCO, без дополнительной настройки.

Задание промптов#

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

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

Например, если твоему приложению нужно обнаруживать только объекты «человек» и «автобус», можно указать эти классы напрямую:

Пример
from ultralytics import YOLO

# Инициализировать модель YOLO-World
model = YOLO("yolov8s-world.pt")  # или выбрать yolov8m/l-world.pt

# Определить пользовательские классы
model.set_classes(["person", "bus"])

# Выполнить предсказание указанных категорий на изображении
results = model.predict("path/to/image.jpg")

# Показать результаты
results[0].show()
Фоновый класс

Некоторые пользователи отмечают, что добавление пустой строки "" в качестве фонового класса может повысить качество обнаружения в некоторых сценариях. Похоже, это зависит от сценария, а точный механизм до конца не изучен:

model.set_classes(["person", "bus", ""])

Пустая строка остаётся в model.names самостоятельным классом, в том числе в сохранённой модели, поэтому обнаружения этого класса возвращаются с пустой меткой. Передай classes=[0, 1] во время предсказания, чтобы оставить только реальные классы.

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

Пример

Сначала загрузи модель YOLO-World, задай для неё пользовательские классы и сохрани её:

from ultralytics import YOLO

# Инициализировать модель YOLO-World
model = YOLO("yolov8s-world.pt")  # или выбрать yolov8m/l-world.pt

# Определить пользовательские классы
model.set_classes(["person", "bus"])

# Сохранить модель с заданным автономным словарём
model.save("custom_yolov8s.pt")

После сохранения модель custom_yolov8s.pt работает как любая другая предварительно обученная модель YOLOv8, но с важным отличием: теперь она оптимизирована для обнаружения только заданных тобой классов. Такая настройка может значительно повысить качество и эффективность обнаружения в конкретных сценариях использования приложения.

from ultralytics import YOLO

# Загрузить пользовательскую модель
model = YOLO("custom_yolov8s.pt")

# Запустить инференс для обнаружения пользовательских классов
results = model.predict("path/to/image.jpg")

# Показать результаты
results[0].show()

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

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

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

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

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

  • Обучающие данные
ДатасетТипПримерыБоксыФайлы аннотаций
Objects365v1Обнаружение609k9621kobjects365_train.json
GQAПривязка к изображениям621k3681kfinal_mixed_train_no_coco.json
Flickr30kПривязка к изображениям149k641kfinal_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

# Вариант 1: использовать словарь Python
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"]},
}

# Вариант 2: использовать YAML-файл (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,  # или data="yolo_world_data.yaml", если используется YAML-файл
    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 — это современный подход к обнаружению объектов в реальном времени на основе фреймворка Ultralytics YOLOv8. Она особенно эффективна в задачах обнаружения с открытым словарём: модель распознаёт объекты на изображении по описаниям на естественном языке. Благодаря моделированию «зрение — язык» и предварительному обучению на больших наборах данных YOLO-World обеспечивает высокую эффективность и производительность при значительно меньших вычислительных затратах, что делает её идеальной для приложений реального времени в самых разных отраслях.

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

    from ultralytics import YOLOWorld
    
    # Инициализировать модель YOLO-World
    model = YOLOWorld("yolov8s-world.pt")
    
    # Определить пользовательские классы
    model.set_classes(["person", "bus"])
    
    # Выполнить предсказание на изображении
    results = model.predict("path/to/image.jpg")
    
    # Показать результаты
    results[0].show()
  • YOLO-World обладает рядом преимуществ по сравнению с традиционными моделями обнаружения с открытым словарём:

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

    from ultralytics import YOLOWorld
    
    # Загрузить предварительно обученную модель YOLOv8s-worldv2
    model = YOLOWorld("yolov8s-worldv2.pt")
    
    # Обучить модель на наборе данных COCO8 в течение 100 эпох
    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)

Комментарии