Сегментация экземпляров с Ultralytics YOLO#
Сегментация экземпляров идет дальше обнаружения объектов: она позволяет находить отдельные объекты на изображении и отделять их от остальной части изображения.
Модель сегментации экземпляров выдает набор масок или контуров, очерчивающих каждый объект на изображении, а также метки классов и оценки уверенности для каждого объекта. Сегментация экземпляров полезна, когда важно знать не только расположение объектов на изображении, но и их точную форму.
Смотри: Запуск сегментации с предварительно обученной моделью Ultralytics YOLO в Python.
Модели YOLO26 Segment используют суффикс -seg, то есть yolo26n-seg.pt, и предварительно обучены на COCO.
Модели#
Ниже представлены предварительно обученные на наборе данных COCO модели YOLO26 Segment.
Модели автоматически загружаются из последнего релиза Ultralytics при первом использовании.
| Модель | размер (пиксели) | mAPрамка 50-95(e2e) | mAPмаска 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 segment val data=coco.yaml device=0 nms=False - Скорость рассчитана как среднее значение по изображениям COCO val: ONNX на CPU и TensorRT10 на GPU NVIDIA T4.
Воспроизведи результаты с помощьюyolo segment val data=coco.yaml batch=1 device=0|cpu nms=False. - Значения Params и FLOPs указаны для объединённых моделей после свёртки Conv/BatchNorm и удаления неиспользуемой ветви обнаружения. Предварительно обученные контрольные точки сохраняют полную архитектуру обучения, поэтому их показатели могут быть выше.
Эти контрольные точки сегментируют 80 классов COCO. Чтобы сегментировать категории, не входящие в этот список, без повторного обучения, смотри YOLOE: модель принимает классы в виде текстового запроса, визуального примера или встроенного словаря.
Предварительные результаты по боксам и маскам COCO смотри в анонсе предстоящего YOLO27.
Обучение#
Обучи YOLO26n-seg на наборе данных COCO8-seg в течение 100 эпох с размером изображения 640. Полный список доступных аргументов смотри на странице Configuration.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n-seg.yaml") # создать новую модель из YAML
model = YOLO("yolo26n-seg.pt") # загрузить предварительно обученную модель (рекомендуется для обучения)
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt") # создать модель из YAML и перенести веса
# Обучить модель
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)Полное описание режима train смотри на странице Train. Модели сегментации также можно обучать в облаке с помощью Ultralytics Platform.
Формат датасета#
Подробное описание формата наборов данных для сегментации YOLO смотри в руководстве по наборам данных. Чтобы преобразовать существующий набор данных COCO JSON в формат YOLO, используй встроенную функцию convert_coco с use_segments=True, как описано в руководстве по преобразованию COCO в YOLO. Ты также можешь создавать маски сегментации с помощью инструментов-полигонов и интеллектуальной разметки на основе SAM в Ultralytics Platform.
Валидация#
Проверь точность обученной модели YOLO26n-seg. Аргументы не нужны: model сохраняет параметры обучения data и аргументы в атрибутах модели. Модель path/to/best.pt из примера на странице Train проходит валидацию на COCO8-seg. В официальных весах указан путь к обучающему набору данных, которого нет на твоем компьютере, поэтому модель переключается на набор данных задачи по умолчанию coco8-seg.yaml и выводит предупреждение. Укажи data, чтобы провести валидацию на другом наборе данных.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n-seg.pt") # загрузить официальную модель
model = YOLO("path/to/best.pt") # загрузить пользовательскую модель
# Валидировать модель
metrics = model.val() # аргументы не нужны, набор данных и настройки сохранены
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # список значений mAP50-95(B) для каждой категории
metrics.box.image_metrics # словарь метрик для каждого изображения для det с точностью, полнотой, F1, TP, FP и FN
metrics.seg.map # map50-95(M)
metrics.seg.map50 # map50(M)
metrics.seg.map75 # map75(M)
metrics.seg.maps # список значений mAP50-95(M) для каждой категории
metrics.seg.image_metrics # словарь метрик для каждого изображения для seg с точностью, полнотой, F1, TP, FP и FNПредсказание#
Используй обученную модель YOLO26n-seg для предсказаний на изображениях.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n-seg.pt") # загрузить официальную модель
model = YOLO("path/to/best.pt") # загрузить пользовательскую модель
# Получи предсказания с помощью модели
results = model("https://ultralytics.com/images/bus.jpg") # получи предсказание для изображения
# Обратись к результатам
for result in results:
xy = result.masks.xy # полигоны масок в пиксельных координатах
xyn = result.masks.xyn # нормализованные полигоны масок
masks = result.masks.data # бинарные маски, форма (N,H,W), тип данных torch.uint8Полное описание режима 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, специфичных для каждой задачи, см. в разделе Результаты предсказаний по задачам.
Сегментация экземпляров и семантическая сегментация#
Сегментация экземпляров — это сегментация на уровне объектов: для двух машин создаются две маски, два бокса и две оценки уверенности. Семантическая сегментация — это классификация на уровне пикселей: те же машины представлены пикселями с одинаковым ID класса на одной карте классов размером с изображение; боксы, оценки уверенности и список полигонов по умолчанию не формируются. Смотри сравнение по параметрам на странице о семантической сегментации.
Экспорт#
Экспортируй модель YOLO26n-seg в другой формат, например ONNX, CoreML и т. д.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n-seg.pt") # загрузить официальную модель
model = YOLO("path/to/best.pt") # загрузить пользовательскую модель
# Экспортировать модель
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 |
| Apple Core AI | coreai | yolo26n-seg.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n-seg_saved_model/ | ✅ | imgsz, 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 |
| LiteRT | litert | yolo26n-seg.tflite | ✅ | imgsz, quantize, batch, 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 |
| Hailo | hailo | yolo26n-seg_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n-seg_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n-seg_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None по умолчанию возвращает исходные выходные данные для внешней NMS. Укажи nms=False, чтобы выбрать доступную голову без NMS; неподдерживаемые форматы используют собственный путь вывода. Элементы nms выше обозначают форматы, в которые можно встроить NMS с помощью nms=True.
Полное описание export смотри на странице экспорта.
Часто задаваемые вопросы#
Чтобы обучить модель сегментации YOLO26 на собственном наборе данных, сначала подготовь набор данных в формате сегментации YOLO. Для преобразования наборов данных COCO JSON можно использовать встроенную утилиту
convert_coco. Когда набор данных будет готов, обучи модель с помощью команд Python или CLI:Примерfrom ultralytics import YOLO # Загрузи предварительно обученную модель сегментации YOLO26 model = YOLO("yolo26n-seg.pt") # Обучить модель results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)Другие доступные аргументы смотри на странице Configuration.
Обнаружение объектов находит и локализует объекты на изображении, обводя их ограничивающими боксами, а сегментация экземпляров не только определяет боксы, но и очерчивает точную форму каждого объекта. Модели сегментации экземпляров YOLO26 создают маски или контуры каждого обнаруженного объекта. Это особенно полезно для задач, где важна точная форма объектов, например для анализа медицинских изображений или автономного вождения.
Ultralytics YOLO26 — передовая модель, известная высокой точностью и работой в реальном времени, что делает ее отличным выбором для задач сегментации экземпляров. Модели YOLO26 Segment предварительно обучены на наборе данных COCO, что обеспечивает надежную работу с самыми разными объектами. Кроме того, YOLO поддерживает обучение, валидацию, предсказание и экспорт, которые легко интегрируются между собой, поэтому модель подходит для самых разных задач в исследованиях и промышленности.
Загрузить и проверить предварительно обученную модель сегментации YOLO просто. Вот как это сделать с помощью Python и CLI:
Примерfrom ultralytics import YOLO # Загрузи предварительно обученную модель model = YOLO("yolo26n-seg.pt") # Валидировать модель 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 # Загрузи предварительно обученную модель model = YOLO("yolo26n-seg.pt") # Экспортировать модель в формат ONNX model.export(format="onnx")Подробности об экспорте в различные форматы смотри на странице Export.