Сегментация экземпляров с Ultralytics YOLO#
Сегментация экземпляров — это следующий этап после обнаружения объектов: она включает идентификацию отдельных объектов на изображении и их выделение из остальной части изображения.
Результатом работы модели сегментации экземпляров является набор масок или контуров, очерчивающих каждый объект на изображении, а также метки классов и оценки уверенности для каждого объекта. Сегментация экземпляров полезна, когда нужно знать не только, где находятся объекты на изображении, но и какова их точная форма.
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-seg | 640 | 39.6 | 33.9 | 53.3 ± 0.5 | 2.1 ± 0.0 | 2.7 | 9.3 |
| YOLO26s-seg | 640 | 47.3 | 40.0 | 118.4 ± 0.9 | 3.3 ± 0.0 | 10.4 | 34.5 |
| YOLO26m-seg | 640 | 52.5 | 44.1 | 328.2 ± 2.4 | 6.7 ± 0.1 | 23.6 | 121.7 |
| YOLO26l-seg | 640 | 54.4 | 45.5 | 387.0 ± 3.7 | 8.0 ± 0.1 | 28.0 | 140.1 |
| YOLO26x-seg | 640 | 56.5 | 47.0 | 787.0 ± 6.8 | 16.4 ± 0.1 | 62.8 | 314.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 FNPredict#
Используй обученную модель 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.masks | Masks | (N) | Маски экземпляров. |
result.masks.data | torch.uint8 | (N,H,W) | Двоичные маски со значениями 0 или 1. |
result.masks.xy | np.float32 | list[(P,2)] | Пиксельные многоугольники. |
result.masks.xyn | np.float32 | list[(P,2)] | Нормализованные многоугольники. |
result.boxes | Boxes | (N) | Рамки, классы и значения уверенности экземпляров. |
result.boxes.cls | torch.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 | ✅ | - |
| TorchScript | torchscript | yolo26n-seg.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-seg.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-seg_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-seg.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-seg.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-seg_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-seg.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-seg_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-seg_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-seg.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-seg_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-seg_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-seg_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-seg_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-seg_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-seg_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-seg_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-seg.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-seg_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-seg_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-seg.aimodel | ✅ | imgsz, 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")Подробнее об экспорте в различные форматы см. на странице Экспорт.