YOLOE: детектим что угодно без дотренировок. computervision.. computervision. yolo.. computervision. yolo. видеоаналитика.. computervision. yolo. видеоаналитика. глубокое обучение.. computervision. yolo. видеоаналитика. глубокое обучение. Машинное обучение.. computervision. yolo. видеоаналитика. глубокое обучение. Машинное обучение. пищевая промышленность.. computervision. yolo. видеоаналитика. глубокое обучение. Машинное обучение. пищевая промышленность. производство.. computervision. yolo. видеоаналитика. глубокое обучение. Машинное обучение. пищевая промышленность. производство. промышленная автоматизация.

Всем привет! Представьте, сколько всего нужно сделать, чтобы дотренировать модель компьютерного зрения:

  • Поиск и сборка датасетов. Хорошо, если есть открытые и с допустимой лицензией. Но часто приходится собирать «с миру по нитке», дополнять и балансировать данные самостоятельно.

  • Разметка и аугментация. Качественный датасет — залог хороших метрик. Придётся корпеть над точными detection-боксами, перепроверять, думать над нестандартными ситуациями во входных данных.

  • Обучение и валидация. Потратим мощности, время, деньги, протестируем. Хорошо, если с первых попыток удастся найти достойный баланс между точностью и временем тренировки. В реальности нужно хотя бы несколько итераций.

Но есть и другой путь. Сегодня расскажу о YOLOE — это модель, которая помогает решить эти проблемы.

Как устроен обычный YOLO и в чём ограничение

Пример архитектуры модели YOLOv8

Пример архитектуры модели YOLOv8

Чтобы понять, что нового в YOLOE, вспомним, как работает стандартный детектор.

Изображение проходит через backbone — свёрточную сеть, которая извлекает признаки: края, текстуры, формы на разных масштабах. Затем признаки агрегируются в PAN (Pyramid Attention Network), объединяющей информацию с разных уровней детализации. Наконец, голова детектора предсказывает, есть ли здесь объект и с какой вероятностью, где именно (bounding box), к какому классу он относится.

В зависимости от поколения YOLO (v5, v8, …, vN) архитектура меняется, но ограничение одно: классы жёстко заданы датасетом. Хочешь найти что-то новое — собирай датасет, размечай, переобучай.

Что такое YOLOE и как модель обходит «вшитый» лейблинг

Овервью YOLOE

Овервью YOLOE

В YOLOE (You Only Look Once – Everything) backbone и PAN остаются теми же, что в обычном YOLO. За небольшим исключением, это та же самая модель.

Меняется только то, с чем сравнивается эмбеддинг обнаруженного объекта в голове детектора. Вместо фиксированных классов туда подаются векторы из текстового энкодера, запущенного один раз перед инференсом.

Для этого авторы предложили RepRTA (Re-parameterizable Region-Text Alignment): лёгкая вспомогательная сеть уточняет предобученные текстовые эмбеддинги и улучшает согласование визуальных и текстовых признаков. При инференсе текстовый энкодер убирается, а его результаты складываются обратно в веса основной сети через ре-параметризацию. Скорость остаётся как у обычной YOLO. Никакого оверхеда в рантайме.

Итого, вместо разметки данных, дотренировок и классического флоу разработки YOLO-модели можно взять YOLOE:

from ultralytics import YOLOE

model = YOLOE("yoloe-26m-seg.pt")  # инициализируем модель

model.set_classes(["person", "bus"])  # вместо классов из тренировки -

# текстовым энкодером через RepRTA задаём новые, произвольные!

results = model.predict("path/to/image.jpg")  # текстовый энкодер уже

# не участвует в инференсе - векторы классов сохранены в архитектуре

Помимо текстовых подсказок, YOLOE поддерживает визуальные промпты через модуль SAVPE (Semantic-Activated Visual Prompt Encoder). Можно показать модели изображение-пример, и она начнёт искать похожие объекты без текстового описания вообще. Полезно там, где объект проще показать, чем описать: нестандартный дефект, редкая деталь, специфическая упаковка.

import numpy as np

from ultralytics import YOLOE

from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor

model = YOLOE("yoloe-26m-seg.pt")

# Боксы объектов на референсном изображении и их ID классов

visual_prompts = dict(

    bboxes=np.array([

        [221.52, 405.8, 344.98, 857.54],  # Person

        [120, 425, 160, 445],              # Bus

    ]),

    cls=np.array([0, 1]),

)

results = model.predict(

    "ultralytics/assets/bus.jpg",

    refer_image="reference.jpg",

    visual_prompts=visual_prompts,

    predictor=YOLOEVPSegPredictor,

)

results[0].show()

Наконец, есть режим без подсказок: модель автоматически распознаёт более 1200 категорий из встроенного словаря. Запускаете на изображении, не описывая ничего.

from ultralytics import YOLOE

model = YOLOE("yoloe-26m-seg-pf.pt")

results = model.predict("path/to/image.jpg")  # best guess из открытого словаря

results[0].show()

Когда YOLOE работает, а когда нет

Честно говоря — это не серебряная пуля. Мы успели испытать подход на нескольких задачах, где-то перешли обратно на стандартные YOLO, где-то оставили YOLOE.
Выводы такие:

Работает хорошо, когда задача чётко описывается словами или визуальным примером, объекты визуально различимы и не требуют узкоспециализированного контекста.

Работает хуже, когда классы визуально похожи и различаются тонкими деталями, объект настолько специфичен, что предобученная модель его «не видела», или нужна точность выше 95-98% на нестандартных данных.

В таких случаях YOLOE можно использовать как отправную точку: запустить, посмотреть на качество, и уже по результатам решать хватит ли настройки энкодеров или всё-таки тренировать.

Примеры задач без дотренировки

Несколько практических сценариев, где текстовых промптов, как правило, достаточно.

Контроль маркировки и упаковки. Обнаружение QR-кода, повреждённой этикетки или неправильно ориентированной упаковки на конвейере. Классы формулируются прямолинейно, объекты визуально различимы. Нам это помогло в кейсе с распознаванием корректной маркировки мясной продукции, которая недавно это стала обязательным требованием к производствам.

YOLOE: детектим что угодно без дотренировок - 3

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

Подсчёт и классификация объектов на складе. Склады постоянно имеют дело с меняющейся продукцией. Свободный промптинг серьёзно сокращает затраты на обучение модели.

Детекция очевидных дефектов. Царапины, сколы, грубые деформации на поверхности – если дефект визуально выражен и хорошо описывается словами.

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

Если интересно обсудить похожую задачу — пишите. Расскажу подробнее, как можно внедрить детекцию на вашем объекте.

Автор: oleg_mad

Источник