Всем привет! Представьте, сколько всего нужно сделать, чтобы дотренировать модель компьютерного зрения:
Поиск и сборка датасетов. Хорошо, если есть открытые и с допустимой лицензией. Но часто приходится собирать «с миру по нитке», дополнять и балансировать данные самостоятельно.
Разметка и аугментация. Качественный датасет — залог хороших метрик. Придётся корпеть над точными detection-боксами, перепроверять, думать над нестандартными ситуациями во входных данных.
Обучение и валидация. Потратим мощности, время, деньги, протестируем. Хорошо, если с первых попыток удастся найти достойный баланс между точностью и временем тренировки. В реальности нужно хотя бы несколько итераций.
Но есть и другой путь. Сегодня расскажу о YOLOE — это модель, которая помогает решить эти проблемы.
Как устроен обычный YOLO и в чём ограничение

Чтобы понять, что нового в YOLOE, вспомним, как работает стандартный детектор.
Изображение проходит через backbone — свёрточную сеть, которая извлекает признаки: края, текстуры, формы на разных масштабах. Затем признаки агрегируются в PAN (Pyramid Attention Network), объединяющей информацию с разных уровней детализации. Наконец, голова детектора предсказывает, есть ли здесь объект и с какой вероятностью, где именно (bounding box), к какому классу он относится.
В зависимости от поколения YOLO (v5, v8, ..., vN) архитектура меняется, но ограничение одно: классы жёстко заданы датасетом. Хочешь найти что-то новое — собирай датасет, размечай, переобучай.
Что такое 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 не заменяет дообучение там, где нужна высокая точность на специфических данных. Но убирает порог входа и меняет сам подход к задачам компьютерного зрения.
Если интересно обсудить похожую задачу — пишите. Расскажу подробнее, как можно внедрить детекцию на вашем объекте.
