Ultralytics YOLO27:

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

Ultralytics YOLO instance segmentation examples

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

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



Watch: Run Segmentation with Pretrained Ultralytics YOLO Model in Python.
Совет

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

Модели#

Здесь представлены предварительно обученные модели YOLO26 Segment. Модели обнаружения, сегментации и позы предварительно обучены на наборе данных COCO, семантические модели — на Cityscapes, а модели классификации — на наборе данных ImageNet.

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

Модельразмер
(пиксели)
mAPbox
50-95(e2e)
mAPmask
50-95(e2e)
Скорость
CPU ONNX
(мс)
Скорость
T4 TensorRT10
(мс)
параметры
(M)
FLOPs
(B)
YOLO26n-seg64039.633.953.3 ± 0.52.1 ± 0.02.79.3
YOLO26s-seg64047.340.0118.4 ± 0.93.3 ± 0.010.434.5
YOLO26m-seg64052.544.1328.2 ± 2.46.7 ± 0.123.6121.7
YOLO26l-seg64054.445.5387.0 ± 3.78.0 ± 0.128.0140.1
YOLO26x-seg64056.547.0787.0 ± 6.816.4 ± 0.162.8314.0
  • Значения mAPval приведены для одной модели и одного масштаба на наборе данных COCO val2017.
    Воспроизвести результаты можно с помощью yolo val segment data=coco.yaml device=0 nms=False
  • Значение скорости усреднено по изображениям COCO val с использованием экземпляра Amazon EC2 P4d.
    Воспроизвести можно с помощью yolo val segment data=coco.yaml batch=1 device=0|cpu nms=False
  • Значения Params и FLOPs приводятся для слитных моделей после свертки/пакетной нормализации (Conv/BatchNorm folding) и удаления неиспользуемой ветки детекции. Предварительно обученные контрольные точки сохраняют полную архитектуру обучения и могут показывать большие значения.

Эти контрольные точки выполняют сегментацию 80 классов COCO. Чтобы выполнять сегментацию категорий, не входящих в этот список, без повторного обучения, смотри YOLOE, который принимает классы в виде текстового запроса, визуального примера или встроенного словаря.

Смотри предварительный просмотр unreleased YOLO27 для предварительных результатов по ограничивающим рамкам и маскам COCO.

Обучение#

Обучи 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 смотри на странице Обучение. Модели сегментации также можно обучать с помощью облачного обучения на платформе Ultralytics.

Формат датасета#

Формат датасета сегментации YOLO подробно описан в руководстве по датасетам. Чтобы конвертировать существующий датасет COCO JSON в формат YOLO, используй встроенную функцию convert_coco с use_segments=True, как описано в руководстве по конвертации COCO в YOLO. Ты также можешь создавать маски сегментации с помощью аннотации на платформе Ultralytics, используя инструменты полигонов и умную аннотацию на базе SAM.

Val#

Проверь точность обученной модели 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 см. на странице Predict.

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

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

АтрибутТипФормаОписание
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,)Идентификаторы классов; преобразуй их в int, чтобы получить имена.

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

Отличия от семантической сегментации#

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

Экспорт#

Экспортируй модель 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. Примеры использования для твоей модели отображаются после завершения экспорта.

Примечание

CoreML поддерживает встроенное NMS (nms=True) для детекции, сегментации экземпляров и оценки поз со статическими формами. Экспорты сегментации по умолчанию (nms=None) оставляют NMS потребителю.

ФорматАргумент formatМодельМетаданныеАргументы
PyTorch-yolo26n-seg.pt-
TorchScripttorchscriptyolo26n-seg.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-seg.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-seg_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-seg.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-seg.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-seg_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-seg.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-seg_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-seg_paddle_model/imgsz, batch, device
MNNmnnyolo26n-seg.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-seg_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-seg_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-seg_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-seg_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-seg_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-seg_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-seg_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-seg.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-seg_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-seg_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-seg.aimodelimgsz, batch, quantize

nms=None по умолчанию выдает сырые результаты для внешнего NMS. Установи nms=False, чтобы выбрать доступный головной модуль без NMS; неподдерживаемые форматы возвращаются к своему родному пути вывода. Записи nms выше определяют форматы, которые могут встраивать NMS с помощью nms=True.

Полное описание export см. на странице Экспорт.

Часто задаваемые вопросы#

  • Чтобы обучить модель сегментации YOLO26 на пользовательском датасете, тебе нужно сначала подготовить датасет в формате сегментации YOLO. Ты можешь использовать встроенную утилиту convert_coco для конвертации датасетов COCO JSON. Когда датасет будет готов, ты сможешь обучить модель с помощью 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)

    Дополнительные доступные аргументы см. на странице Конфигурация.

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

  • Ultralytics YOLO26 — это современная модель, известная высокой точностью и производительностью в реальном времени, что делает её идеальной для задач сегментации экземпляров. Модели YOLO26 Segment предварительно обучены на наборе данных COCO, что обеспечивает стабильную работу с широким спектром объектов. Кроме того, 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)

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

  • Экспортировать модель сегментации 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")

    Подробнее об экспорте в различные форматы см. на странице Экспорт.

Комментарии