Первый взгляд на модель мира Yolo (YOLO-World)
31 января 2024 года была выпущена модель YOLO-World - модель обнаружения объектов с открытым словарем в реальном времени. Git:
https://github.com/AILab-CVC/YOLO-World
Аннотация с сайта:
Модель YOLO-World Model представляет собой продвинутую, работающую в режиме реального времени Ultralytics YOLOv8-подход к решению задач по обнаружению открытых словарей. Эта инновация позволяет обнаружить любой объект на изображении на основе описательных текстов. Благодаря значительному снижению вычислительных требований при сохранении конкурентоспособной производительности, YOLO-World становится универсальным инструментом для множества приложений, основанных на зрении.
https://docs.ultralytics.com/ru/models/yolo-world/
Т.е. другими словами, Yolo-world - это Zero-Shot модель, позволяющая начать использование модели детектирования объектов без тренировки. Если взглянуть на быстродействие модели, по сравнению с текущими моделями подобного назначения, то оно впечатляет:
Общая архитектура YOLO-World:
По сравнению с традиционными детекторами YOLO, YOLO-World как детектор открытого словаря принимает текст в качестве входных данных. Кодировщик текста сначала кодирует вложения входного текста. Затем Image Encoder кодирует входное изображение в многомасштабные функции изображения, а предлагаемый RepVL-PAN использует многоуровневое кросс-модальное слияние как для изображений, так и для текстовых функций. Наконец, YOLO-World прогнозирует ограничивающие рамки и встраивания объектов для соответствия категориям или существительным, появившимся во входном тексте.
Конечно не надо думать, что данная модель распознает прямо всё. Датасеты, на которых обучалась модель: Objects365 - 365 классов объектов; но потом увеличиваю с GoldG и с CC3M-Lite. Т.е. по сути в Yolov8, обученной на COCO, стандартные веса предоставляются для 80 объектов. А здесь объектов больше. Плюс они, как и в языковых моделях, могут обучаться на комбинациях ембендингов. Т.е. две главные особенности:
- можно комбинировать ембендинги - например, Golden dog, person with a white shirt и т.п. Т.е. можно уточнять объекты, добавляя какие-то характеристики (естественно из тех, которые были поддержаны обучением);
- уменьшая количество детектируемых классов, увеличивается качество работы моделей.
Задавая пользовательские подсказки, пользователи могут по сути направлять внимание модели на интересующие их объекты, повышая релевантность и точность результатов обнаружения
https://docs.ultralytics.com/ru/models/yolo-world/
Это последняя особенность довольно интересна, но никак не подтверждена экспериментальными данными в статье:
Попробуем, как это работает (можно на Colab). Устанавливаем ultralitics:
!pip install ultralytics
Загружаем тестовую картинку:
# Загрузить картинку
!wget https://media.wired.com/photos/63d06d8db478ca5c4a95f64e/1:1/w_1920,h_1920,c_limit/Bike-Bus-Gear-0G3A1248.jpg
Последовательно комментируя и раскомментируя пробуем 3 варианта:
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"])
#model.set_classes(["bike"])
model.set_classes(["red bike"])
# Execute prediction for specified categories on an image
results = model.predict('Bike-Bus-Gear-0G3A1248.jpg')
# Show results
results[0].show()
Выводим картинку:
from ultralytics.utils.plotting import Annotator
import cv2
img = cv2.imread('Bike-Bus-Gear-0G3A1248.jpg')
annotator = Annotator(img)
for r in results[0]:
boxes = r.boxes
for box in boxes:
b = box.xyxy[0] # get box coordinates in (left, top, right, bottom) format
c = box.cls
annotator.box_label(b, model.names[int(c)])
img = annotator.result()
img = cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 1, figsize=(30, 15))
axes.imshow(img)
axes.axis('off')
plt.show()
Видно, что красных велосипедов нашлось много лишних - на комбинациях фраз пока работает далеко от идеала.