Модель YOLO-World
Модель YOLO-World представляет собой передовой, работающий в реальном времени подход на базе Ultralytics YOLOv8 для задач обнаружения с открытым словарем. Эта инновация позволяет обнаруживать любой объект на изображении на основе описательных текстов. Значительно снижая вычислительные требования при сохранении конкурентоспособной производительности, YOLO-World становится универсальным инструментом для многочисленных приложений, основанных на машинном зрении.
Смотреть: Рабочий процесс обучения YOLO World на пользовательском наборе данных
Обзор
YOLO-World решает проблемы, с которыми сталкиваются традиционные модели обнаружения с открытым словарем, которые часто полагаются на громоздкие модели Transformer, требующие значительных вычислительных ресурсов. Зависимость этих моделей от предварительно определенных категорий объектов также ограничивает их полезность в динамических сценариях. YOLO-World модернизирует фреймворк YOLOv8, добавляя возможности обнаружения с открытым словарем, используя моделирование зрения-языка и предварительное обучение на обширных наборах данных, чтобы преуспеть в идентификации широкого спектра объектов в сценариях zero-shot с беспрецедентной эффективностью.
Основные характеристики
-
Решение в реальном времени: Используя вычислительную скорость CNN, YOLO-World предоставляет быстрое решение для обнаружения с открытым словарем, обслуживая отрасли, нуждающиеся в немедленных результатах.
-
Эффективность и производительность: YOLO-World сокращает вычислительные и ресурсные требования без ущерба для производительности, предлагая надежную альтернативу таким моделям, как SAM, но за небольшую часть вычислительных затрат, что позволяет использовать приложения в реальном времени.
-
Вывод с автономным словарем: YOLO-World представляет стратегию «запрос-затем-обнаружение», используя автономный словарь для дальнейшего повышения эффективности. Этот подход позволяет использовать пользовательские запросы, вычисленные априори, включая подписи или категории, которые кодируются и хранятся как автономные вложения словаря, оптимизируя процесс обнаружения.
-
На базе YOLOv8: Построенный на основе Ultralytics YOLOv8, YOLO-World использует последние достижения в области обнаружения объектов в реальном времени, чтобы облегчить обнаружение с открытым словарем с беспрецедентной точностью и скоростью.
-
Превосходство в бенчмарках: YOLO-World превосходит существующие детекторы с открытым словарем, включая серии MDETR и GLIP, с точки зрения скорости и эффективности на стандартных бенчмарках, демонстрируя превосходные возможности YOLOv8 на одной NVIDIA V100 GPU.
-
Универсальные приложения: Инновационный подход YOLO-World открывает новые возможности для множества задач машинного зрения, обеспечивая повышение скорости на несколько порядков по сравнению с существующими методами.
Доступные модели, поддерживаемые задачи и режимы работы
В этом разделе подробно описаны доступные модели с их конкретными предварительно обученными весами, задачи, которые они поддерживают, и их совместимость с различными режимами работы, такими как Inference, Validation, Training и Export, обозначенные ✅ для поддерживаемых режимов и ❌ для неподдерживаемых режимов.
Примечание
Все веса YOLOv8-World были напрямую перенесены из официального репозитория YOLO-World, что подчеркивает их отличный вклад.
Тип модели | Предварительно обученные веса | Поддерживаемые задачи | Инференс | Валидация | Обучение | Экспорт |
---|---|---|---|---|---|---|
YOLOv8s-world | yolov8s-world.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ❌ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ✅ |
YOLOv8m-world | yolov8m-world.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ❌ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ✅ |
YOLOv8l-world | yolov8l-world.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ❌ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ✅ |
YOLOv8x-world | yolov8x-world.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ❌ |
YOLOv8x-worldv2 | yolov8x-worldv2.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ✅ |
Перенос без обучения на наборе данных COCO
Производительность
Тип модели | mAP | mAP50 | mAP75 |
---|---|---|---|
yolov8s-world | 37.4 | 52.0 | 40.6 |
yolov8s-worldv2 | 37.7 | 52.2 | 41.0 |
yolov8m-world | 42.0 | 57.0 | 45.6 |
yolov8m-worldv2 | 43.0 | 58.4 | 46.8 |
yolov8l-world | 45.7 | 61.3 | 49.8 |
yolov8l-worldv2 | 45.8 | 61.3 | 49.8 |
yolov8x-world | 47.0 | 63.0 | 51.2 |
yolov8x-worldv2 | 47.1 | 62.8 | 51.4 |
Примеры использования
Модели YOLO-World легко интегрируются в ваши python-приложения. Ultralytics предоставляет удобный Python API и CLI команды для оптимизации разработки.
Использование при обучении
Совет
Мы настоятельно рекомендуем использовать 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 YOLOv8n 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 позволяет динамически задавать классы с помощью пользовательских запросов, что позволяет пользователям адаптировать модель к своим конкретным потребностям без переобучения. Эта функция особенно полезна для адаптации модели к новым доменам или конкретным задачам, которые изначально не входили в обучающие данные. Устанавливая пользовательские запросы, пользователи могут, по сути, направлять внимание модели на интересующие объекты, повышая релевантность и точность результатов обнаружения.
Например, если вашему приложению требуется обнаруживать только объекты '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 | Обнаружение | 609k | 9621k | objects365_train.json |
GQA | Grounding | 621k | 3681k | final_mixed_train_no_coco.json |
Flickr30k | Grounding | 149k | 641k | final_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-world | yolov8s-world.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ❌ |
YOLOv8s-worldv2 | yolov8s-worldv2.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ✅ |
YOLOv8m-world | yolov8m-world.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ❌ |
YOLOv8m-worldv2 | yolov8m-worldv2.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ✅ |
YOLOv8l-world | yolov8l-world.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ❌ |
YOLOv8l-worldv2 | yolov8l-worldv2.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ✅ |
YOLOv8x-world | yolov8x-world.pt | Обнаружение объектов | ✅ | ✅ | ✅ | ❌ |
YOLOv8x-worldv2 | yolov8x-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)