Ultralytics YOLO27: Встать в лист ожидания.
Get Started
Основы компьютерного зрения·Выбери задачу·Урок 2/10
Урокначинающий

Семь задач компьютерного зрения

Соотнеси строку результата с классификацией, детекцией, сегментацией экземпляров, семантической сегментацией, оценкой глубины, позой или OBB и выбери веса YOLO26 для начала работы.

Выбор задачи — самое дорогостоящее решение, которое ты принимаешь до обучения. Выберешь сегментацию, хотя достаточно рамок, — и расходы на разметку вырастут; выберешь вертикальные рамки для кораблей, снятых с дрона, — и почти вся площадь каждой рамки будет занята водой. Ultralytics YOLO поддерживает семь задач через один API, поэтому выбор зависит от нужного результата, а не от инструментов.

Результат

Укажи одну задачу и файл весов YOLO26, соответствующие строке результата, и в одной строке объясни, почему не нужна следующая, более ресурсоёмкая задача.

Ускоренное прохождение
Если ты уже освоился, вот краткая версия.
  1. Одна метка для всего изображения: классификация.

  2. Что и где, если достаточно прямоугольника: детекция.

  3. Точный контур каждого объекта: сегментация экземпляров. Класс для каждого пикселя: семантическая сегментация.

  4. Расстояние для каждого пикселя: оценка глубины.

  5. Суставы или ориентиры: поза. Объекты под углом при съёмке сверху: OBB.

  6. Для всех семи задач используется один и тот же API YOLO(); меняется только файл весов.

Практические занятия

Краткий обзор семи задач#

Результаты семи задач Ultralytics YOLO: классифицированный лист, обнаруженные автомобили и пешеходы, сегментированные автомобили, семантическая карта улицы, скелет позы бегуна, повёрнутые рамки вокруг кораблей и карта глубины

Смотри на столбец с результатом — именно ему должна соответствовать строка результата в твоей спецификации.

ЗадачаРезультатНа какой вопрос отвечаетВеса YOLO26
КлассификацияОдна метка на изображение с вероятностью«Что изображено на картинке?»yolo26n-cls.pt
ДетекцияКласс, рамка и оценка уверенности для каждого объекта«Что и где?»yolo26n.pt
Сегментация экземпляровКласс и пиксельная маска для каждого объекта«Какова точная форма каждого объекта?»yolo26n-seg.pt
Семантическая сегментацияОдин класс для каждого пикселя«К какому типу области относится каждый пиксель?»yolo26n-sem.pt
Оценка глубиныРасстояние в метрах для каждого пикселя«Как далеко находится каждый пиксель?»yolo26n-depth.pt
Оценка позыРамка и ключевые точки для каждого человека или объекта«В какой позе находится тело?»yolo26n-pose.pt
Ориентированные ограничивающие рамкиПовернутая рамка для каждого объекта«Что где находится и под каким углом?»yolo26n-obb.pt

Две пары задач часто вызывают путаницу. Сегментация экземпляров и семантическая сегментация: сегментация экземпляров разделяет каждый объект (три машины, три маски); семантическая сегментация присваивает класс только пикселям (одна область «машина», без подсчета объектов). Детекция и OBB: обе задачи возвращают по одной рамке на объект, но OBB поворачивается вместе с объектом, что важно, когда объекты расположены под углом на изображениях сверху.

Один API, семь типов выходных данных#

Смена задачи не означает смену инструментов. Файл весов определяет, что вернется, а объект Results заполняет соответствующий атрибут:

from ultralytics import YOLO

image = "https://ultralytics.com/images/bus.jpg"
outputs = ["probs", "boxes", "masks", "semantic_mask", "depth", "keypoints", "obb"]

for suffix in ["-cls", "", "-seg", "-sem", "-depth", "-pose", "-obb"]:
    weights = f"yolo26n{suffix}.pt"
    model = YOLO(weights)
    result = model(image, verbose=False)[0]
    filled = [name for name in outputs if getattr(result, name) is not None]
    print(f"{weights:18} task={model.task:9} -> {', '.join(filled)}")
yolo26n-cls.pt     task=classify  -> probs
yolo26n.pt         task=detect    -> boxes
yolo26n-seg.pt     task=segment   -> boxes, masks
yolo26n-sem.pt     task=semantic  -> semantic_mask
yolo26n-depth.pt   task=depth     -> depth
yolo26n-pose.pt    task=pose      -> boxes, keypoints
yolo26n-obb.pt     task=obb       -> obb

Смотри на правый столбец: сегментация и оценка позы также возвращают рамки, потому что это детекция плюс еще одна возможность. Семантическая сегментация и оценка глубины вообще не возвращают данные по отдельным объектам — вместо этого они описывают каждый пиксель. Твой код для последующей обработки обращается ровно к одному из этих атрибутов, поэтому в строке спецификации с выходными данными нужно указать его.

Как выбрать на практике#

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

  1. Одна метка для всего изображения → классификация.
  2. Класс для каждого пикселя, без необходимости разделять объекты → семантическая сегментация.
  3. Расстояние для каждого пикселя → оценка глубины.
  4. Что-то про каждый объект:
    • где он находится, чтобы посчитать, найти или отфильтровать его → детекция (добавь треккинг, чтобы отслеживать идентификаторы между кадрами);
    • его точная форма, граница или площадь → сегментация экземпляров;
    • его поза → оценка позы;
    • его поворот на изображениях сверху → OBB.

Если подходят две задачи, выбирай ту, которую дешевле разметить и запустить. Для большинства продуктов детекция — вариант по умолчанию: рамки быстро рисовать и проверять, а вместе с треккингом они уже позволяют считать объекты, создавать оповещения о зонах и анализировать трафик, как на этом изображении шоссе:

Трафик на шоссе отслеживается с помощью Ultralytics YOLO: у каждой машины, автобуса и грузовика есть постоянный ID и траектория движения

Глубина: задача, которая отвечает на вопрос «как далеко»#

Оценка глубины возвращает карту размером с изображение, в которой для каждого пикселя указано расстояние в метрах, — без классов и рамок. Используй ее, когда решение зависит от расстояния: например, чтобы робот объезжал препятствия, автомобиль замедлялся при приближении к объекту или можно было примерно оценить объем груды.

from ultralytics import YOLO

model = YOLO("yolo26n-depth.pt")
result = model("https://ultralytics.com/images/bus.jpg", verbose=False)[0]

depth = result.depth.data  # meters, one value per pixel
print(f"depth map {tuple(depth.shape)}, nearest {float(depth.min()):.1f} m, farthest {float(depth.max()):.1f} m")
depth map (1080, 810), nearest 2.0 m, farthest 14.9 m

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

Подводные камни#

Типичная ошибкаСимптомОптимальный выбор
Сегментация там, где хватило бы рамокКод для последующей обработки никогда не использует маскуДетекция
Неповернутые рамки на изображениях сверхуРамки захватывают в основном фон, а соседние объекты подавляют друг другаOBB
Классификация сцены с несколькими объектамиМетка зависит от одного небольшого объектаДетекция и правило
Семантическая сегментация, когда нужно считать объектыСоприкасающиеся объекты сливаются в одну областьСегментация экземпляров
Размер рамки как приблизительная оценка расстоянияПравила перестают работать при разном размере объектовОценка глубины или детекция вместе с оценкой глубины
Оценка позы для проверки присутствияТы никогда не считываешь ключевые точкиДетекция
Не плати за выводы, которые не будешь использовать

Более сложные выходные данные обходятся дороже на каждом этапе: маски и ключевые точки дольше размечать и проверять, к тому же для них нужны более строгие правила разметки. Начни с самой дешёвой задачи, которая позволяет принять решение, и усложняй её только тогда, когда реальному потребителю нужны дополнительные детали.

Попробовать

Возьми строку с выходными данными из спецификации в уроке 1 и пройди по шагам выше. Запиши задачу, файл весов YOLO26, с которого начнешь, атрибут Results, к которому будет обращаться код, и одной строкой объясни, почему следующая, более сложная задача не нужна. Проекта пока нет? Возьми спецификацию для погрузчика.

Критерии готовности
Урок считается завершённым, если выполнены все условия ниже.
  • Ты указал одну задачу, файл весов YOLO26 и атрибут Results, к которому обращается твой код.

  • Ты написал одну строку с объяснением, почему следующая, более сложная задача не нужна.

  • Ты можешь сказать, нужна ли проекту сегментация экземпляров или семантическая сегментация, оценка глубины либо ничего из этого, и объяснить почему.

Показать решение

Для спецификации погрузчика ответ — детекция с yolo26n.pt, данные считываются из result.boxes.

Для принятия решения нужно знать, где находятся погрузчики и люди, чтобы код мог проверить, насколько близко они друг к другу. На этот вопрос отвечают рамки. Сегментация экземпляров увеличила бы затраты на разметку, но не изменила бы оповещение, поскольку нижний край рамки уже указывает положение объекта на земле. Оценка позы не нужна, поскольку поза не влияет на решение. Оценка глубины помогла бы преобразовать координаты на изображении в метры, но калиброванная неподвижная камера и без нее отображает плоскость пола. OBB стоит тестировать, только если камеры направлены строго вниз, а погрузчики появляются под большими диагональными углами.

Что дальше

Дальше подробнее разберем детекцию — основную рабочую задачу, с которой начинается большинство продуктов.

Войди, чтобы сохранять прогресс