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

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

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

  • Сбор данных. Хорошо, если есть открытые датасеты с подходящей лицензией. Часто приходится собирать данные вручную, балансировать и дополнять их.
  • Разметка и аугментация. Качественная разметка — залог точных результатов. Требуется время, чтобы аккуратно выделить bounding box'ы, проверить их и учесть редкие случаи.
  • Обучение и валидация. Нужны вычислительные ресурсы, время и деньги. Даже при удачном старте редко удаётся обойтись без нескольких итераций подбора параметров.

Но есть альтернатива — YOLOE. Эта модель позволяет обойти традиционный цикл дообучения.

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

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

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

Архитектура может меняться в зависимости от версии (YOLOv5, YOLOv8 и т.д.), но остаётся одно ограничение: классы жёстко заданы датасетом. Хотите искать новый объект — собирайте данные, размечайте, дообучайте.

Что такое YOLOE и как модель обходит фиксированные классы

В YOLOE (You Only Look Once - Everything) backbone и PAN остаются практически без изменений. Основное отличие — в голове детектора.

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

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

Теперь вместо дообучения можно просто задать нужные классы текстом:

from ultralytics import YOLOE

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

model.set_classes(["person", "bus"]) # задаём произвольные классы через текстовый энкодер

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")

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") # автоматическое распознавание

results[0].show()

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

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

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

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

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

Примеры задач без дообучения

Вот несколько сценариев, где YOLOE показывает себя особенно хорошо:

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

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

Подсчёт и классификация на складе. На складах ассортимент часто меняется. Возможность задавать классы «на лету» серьёзно сокращает затраты на обучение моделей.

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

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

Читать оригинал