Сегментация экземпляров

Instance segmentation examples

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

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



Watch: Run Segmentation with Pretrained Ultralytics YOLO Model in Python.
Подсказка

Модели YOLO26 Segment используют суффикс -seg, например yolo26n-seg.pt, и предварительно обучены на COCO.

Модели

Предварительно обученные модели сегментации YOLO26 показаны здесь. Модели Detect, Segment и Pose предварительно обучены на наборе данных COCO, Semantic модели — на Cityscapes, а модели Classify — на наборе данных ImageNet.

Модели загружаются автоматически из последнего релиза Ultralytics при первом использовании.

Модельразмер
(пиксели)
mAPbox
50-95(e2e)
mAPmask
50-95(e2e)
Скорость
CPU ONNX
(мс)
Скорость
T4 TensorRT10
(мс)
параметры
(М)
FLOPs
(Б)
YOLO26n-seg64039.633.953.3 ± 0.52.1 ± 0.02.79.1
YOLO26s-seg64047.340.0118.4 ± 0.93.3 ± 0.010.434.2
YOLO26m-seg64052.544.1328.2 ± 2.46.7 ± 0.123.6121.5
YOLO26l-seg64054.445.5387.0 ± 3.78.0 ± 0.128.0139.8
YOLO26x-seg64056.547.0787.0 ± 6.816.4 ± 0.162.8313.5
  • mAPval значения указаны для одиночной модели и одиночного масштаба на наборе данных COCO val2017.
    Воспроизведи с помощью yolo val segment data=coco.yaml device=0
  • Скорость усреднена по изображениям COCO val с использованием инстанса Amazon EC2 P4d.
    Воспроизведи с помощью yolo val segment data=coco.yaml batch=1 device=0|cpu
  • Значения Params и FLOPs указаны для объединенной модели после model.fuse(), которая объединяет слои Conv и BatchNorm, а для end2end моделей удаляет вспомогательную «один-ко-многим» голову обнаружения. Предварительно обученные чекпоинты сохраняют полную архитектуру обучения и могут показывать более высокие значения.

Обучение

Обучи YOLO26n-seg на наборе данных COCO8-seg в течение 100 эпох при размере изображения 640. Полный список доступных аргументов смотри на странице Конфигурация.

Пример
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.yaml")  # build a new model from YAML
model = YOLO("yolo26n-seg.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)

Полную информацию о режиме train смотри на странице Обучение. Модели сегментации также можно обучать на облачных GPU через Ultralytics Platform.

Формат набора данных

Подробности о формате набора данных сегментации YOLO можно найти в Руководстве по наборам данных. Чтобы конвертировать свой существующий набор данных из других форматов (например, COCO и т.д.) в формат YOLO, используй инструмент JSON2YOLO от Ultralytics. Ты также можешь создавать маски сегментации на Ultralytics Platform, используя инструменты для работы с многоугольниками и умную аннотацию на базе SAM.

Валидация

Проверь точность обученной модели YOLO26n-seg на наборе данных COCO8-seg. Аргументы не нужны, так как model сохраняет свои data обучения и аргументы в качестве атрибутов модели.

Пример
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # a list containing mAP50-95(B) for each category
metrics.box.image_metrics  # per-image metrics dictionary for det with precision, recall, F1, TP, FP, and FN
metrics.seg.map  # map50-95(M)
metrics.seg.map50  # map50(M)
metrics.seg.map75  # map75(M)
metrics.seg.maps  # a list containing mAP50-95(M) for each category
metrics.seg.image_metrics  # per-image metrics dictionary for seg with precision, recall, F1, TP, FP, and FN

Predict

Используй обученную модель YOLO26n-seg для запуска предсказаний на изображениях.

Пример
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    xy = result.masks.xy  # mask polygons in pixel coordinates
    xyn = result.masks.xyn  # normalized mask polygons
    masks = result.masks.data  # binary masks, shape (N,H,W), dtype torch.uint8

Полную информацию о режиме predict смотри на странице Предсказание.

Вывод результатов

Сегментация экземпляров YOLO возвращает один объект Results на каждое изображение. Каждый результат сохраняет предсказания на уровне объектов, где каждый обнаруженный экземпляр имеет свою бинарную маску, класс, показатель уверенности и ограничивающий прямоугольник (box).

АтрибутТипФормаОписание
result.masksMasks(N)Маски экземпляров.
result.masks.datatorch.uint8(N,H,W)Бинарные маски, значения 0 или 1.
result.masks.xynp.float32list[(P,2)]Пиксельные многоугольники.
result.masks.xynnp.float32list[(P,2)]Нормализованные многоугольники.
result.boxesBoxes(N)Ограничивающие прямоугольники/классы/уверенность для экземпляров.
result.boxes.clstorch.float32(N,)ID классов; приведи к int для имен.

Информацию о специфичных для задачи полях Results смотри в разделе Предсказание результатов по задачам.

Чем это отличается от семантической сегментации

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

Экспорт

Экспортируй модель YOLO26n-seg в другой формат, такой как ONNX, CoreML и т.д.

Пример
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

Доступные форматы экспорта YOLO26-seg приведены в таблице ниже. Ты можешь экспортировать модель в любой формат с помощью аргумента format, например format='onnx' или format='engine'. Ты можешь выполнять предсказание или валидацию напрямую на экспортированных моделях, например yolo predict model=yolo26n-seg.onnx. Примеры использования показаны для твоей модели после завершения экспорта.

ФорматАргумент formatМодельМетаданныеАргументы
PyTorch-yolo26n-seg.pt-
TorchScripttorchscriptyolo26n-seg.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n-seg.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n-seg_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n-seg.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-seg.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n-seg_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-seg.pbimgsz, batch, device
TF Litetfliteyolo26n-seg.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-seg_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n-seg_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-seg_paddle_model/imgsz, batch, device
MNNmnnyolo26n-seg.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n-seg_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n-seg_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n-seg_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-seg_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-seg_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n-seg_deepx_model/imgsz, int8, data, optimize, device

Смотри полные сведения об export на странице Export.

FAQ

Как обучить модель сегментации YOLO26 на собственном наборе данных?

Чтобы обучить модель сегментации YOLO26 на собственном наборе данных, сначала нужно подготовить данные в формате сегментации YOLO. Ты можешь использовать такие инструменты, как JSON2YOLO, для конвертации наборов данных из других форматов. Как только твой набор данных будет готов, ты сможешь обучить модель с помощью Python или команд CLI:

Пример
from ultralytics import YOLO

# Load a pretrained YOLO26 segment model
model = YOLO("yolo26n-seg.pt")

# Train the model
results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)

Проверь страницу Configuration для получения списка других доступных аргументов.

В чем разница между детекцией объектов и сегментацией экземпляров в YOLO26?

Детекция объектов идентифицирует и локализует объекты на изображении, рисуя вокруг них ограничивающие рамки (bounding boxes), в то время как сегментация экземпляров не только находит эти рамки, но и определяет точную форму каждого объекта. Модели сегментации экземпляров YOLO26 предоставляют маски или контуры, которые очерчивают каждый обнаруженный объект, что особенно полезно для задач, где важно знать точную форму объектов, например, в медицинской визуализации или при разработке беспилотных автомобилей.

Почему стоит использовать YOLO26 для сегментации экземпляров?

Ultralytics YOLO26 — это современная модель, признанная за высокую точность и производительность в реальном времени, что делает её идеальной для задач сегментации экземпляров. Модели сегментации YOLO26 поставляются с предварительно обученными весами на наборе данных COCO, что гарантирует надежную работу с различными типами объектов. Кроме того, YOLO поддерживает обучение, валидацию, предсказание и экспорт с бесшовной интеграцией, что делает её универсальным инструментом как для научных исследований, так и для промышленных задач.

Как загрузить и проверить предварительно обученную модель сегментации YOLO?

Загрузить и проверить предварительно обученную модель сегментации YOLO очень просто. Вот как ты можешь это сделать с помощью Python и CLI:

Пример
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n-seg.pt")

# Validate the model
metrics = model.val()
print("Mean Average Precision for boxes:", metrics.box.map)
print("Mean Average Precision for masks:", metrics.seg.map)

Эти шаги предоставят тебе метрики валидации, такие как Mean Average Precision (mAP), важные для оценки производительности модели.

Как я могу экспортировать модель сегментации YOLO в формат ONNX?

Экспорт модели сегментации YOLO в формат ONNX выполняется просто, с помощью Python или команд CLI:

Пример
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n-seg.pt")

# Export the model to ONNX format
model.export(format="onnx")

Для получения более подробной информации об экспорте в различные форматы обратись к странице Export.

Комментарии