Семантическая сегментация с Ultralytics YOLO#
Семантическая сегментация присваивает метку класса каждому пикселю изображения, создавая плотную карту классов, охватывающую всю сцену. В отличие от сегментации экземпляров, которая разделяет отдельные объекты, семантическая сегментация объединяет все пиксели одного класса независимо от количества присутствующих отдельных объектов.
Watch: Semantic Segmentation with Ultralytics YOLO26 | Quickstart Tutorial
Результатом работы модели семантической сегментации является единая карта классов высотой на ширину, где значение каждого пикселя соответствует предсказанному ID класса. Это делает семантическую сегментацию идеальной для таких задач разбора сцен, как автономное вождение, анализ медицинских изображений и картографирование типов земного покрова.
Используй task=semantic или задачу CLI yolo semantic для семантической сегментации. Файлы моделей семантической сегментации YOLO26 используют суффикс -sem, например yolo26n-sem.pt.
Модели#
Ниже показаны модели семантической сегментации YOLO26, предварительно обученные на датасете Cityscapes.
Модели автоматически скачиваются из последнего релиза Ultralytics при первом использовании.
| Модель | размер (пиксели) | mIoUval | Скорость RTX3090 PyTorch (мс) | параметры (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem | 1024 × 2048 | 78.3 | 4.4 ± 0.0 | 1.6 | 23.8 |
| YOLO26s-sem | 1024 × 2048 | 80.8 | 8.4 ± 0.0 | 6.5 | 91.0 |
| YOLO26m-sem | 1024 × 2048 | 82.0 | 19.9 ± 0.1 | 14.3 | 305.5 |
| YOLO26l-sem | 1024 × 2048 | 82.9 | 26.5 ± 0.1 | 17.8 | 388.2 |
| YOLO26x-sem | 1024 × 2048 | 83.6 | 48.9 ± 0.2 | 40.1 | 866.9 |
- Значения mIoUval приведены для одной модели в одном масштабе на валидационном наборе Cityscapes.
Воспроизведи с помощьюyolo semantic val data=cityscapes.yaml device=0 imgsz=2048 - Метрики скорости усреднены по изображениям валидационного набора Cityscapes с использованием экземпляра RTX3090.
Воспроизведи с помощьюyolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048 - Значения Params и FLOPs указаны для объединённой модели после выполнения
model.fuse(), которая объединяет слои Conv и BatchNorm. Предварительно обученные контрольные точки сохраняют полную архитектуру обучения и могут показывать большее количество параметров и операций.
Ниже показаны модели семантической сегментации YOLO26, предварительно обученные на датасете ADE20K.
Модели автоматически скачиваются из последнего релиза Ultralytics при первом использовании.
| Модель | размер (пиксели) | mIoUval | Скорость RTX3090 PyTorch (мс) | параметры (M) | FLOPs (B) |
|---|---|---|---|---|---|
| YOLO26n-sem-ade20k | 640 | 38.8 | 3.9 ± 0.2 | 1.6 | 4.5 |
| YOLO26s-sem-ade20k | 640 | 45.6 | 4.2 ± 0.3 | 6.5 | 17.5 |
| YOLO26m-sem-ade20k | 640 | 47.4 | 4.7 ± 0.3 | 14.4 | 59.6 |
| YOLO26l-sem-ade20k | 640 | 49.7 | 8.3 ± 0.2 | 17.9 | 75.2 |
| YOLO26x-sem-ade20k | 640 | 51.5 | 9.9 ± 0.3 | 40.2 | 168.4 |
- Значения mIoUval приведены для одной модели в одном масштабе на валидационном наборе ADE20K.
Воспроизведи с помощьюyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml device=0 imgsz=640, заменивyolo26n-sem-ade20k.ptна нужную контрольную точкуyolo26*-sem-ade20k.pt. - Метрики скорости усреднены по изображениям валидационного набора ADE20K с использованием экземпляра RTX3090.
Воспроизведи с помощьюyolo semantic val model=yolo26n-sem-ade20k.pt data=ade20k.yaml batch=1 device=0|cpu imgsz=640, заменивyolo26n-sem-ade20k.ptна нужную контрольную точкуyolo26*-sem-ade20k.pt. - Значения Params и FLOPs указаны для объединённой модели после выполнения
model.fuse(), которая объединяет слои Conv и BatchNorm. Предварительно обученные контрольные точки сохраняют полную архитектуру обучения и могут показывать большее количество параметров и операций.
Смотри предварительный обзор невыпущенного YOLO27 для предварительных результатов mIoU на Cityscapes.
Обучение#
Обучи YOLO26n-sem на датасете Cityscapes8 в течение 100 эпох с размером изображения 1024. Полный список доступных аргументов см. на странице Конфигурация.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.yaml") # build a new model from YAML
model = YOLO("yolo26n-sem.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n-sem.yaml").load("yolo26n-sem.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)Полные сведения о режиме train см. на странице Обучение. Модели семантической сегментации также можно обучать с помощью облачного обучения на платформе Ultralytics.
Формат датасета#
Датасеты для семантической сегментации используют одноканальные изображения масок, обычно в формате PNG, где значение каждого пикселя представляет собой ID класса. Пиксели со значением 255 считаются «игнорируемыми» и исключаются из вычисления потерь. В YAML-файле датасета должны быть указаны пути к изображениям и соответствующим каталогам масок. Подробности о формате см. в руководстве по датасетам для семантической сегментации. Поддерживаются датасеты Cityscapes и ADE20K. Управлять датасетами для семантической сегментации и размечать их можно с помощью аннотации на платформе Ultralytics.
Val#
Проверь точность обученной модели YOLO26n-sem на датасете для семантической сегментации. Явно передай data, чтобы при проверке использовался нужный YAML-файл датасета.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Validate the model
metrics = model.val(data="cityscapes.yaml")
metrics.miou # mean Intersection over Union
metrics.pixel_accuracy # overall pixel accuracyPredict#
Используй обученную модель YOLO26n-sem для выполнения предсказаний на изображениях.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.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:
semantic_mask = result.semantic_mask.data # class map, shape (H,W), integer dtype selected by class countПолное описание режима predict см. на странице Predict.
Выходные данные результатов#
Семантическая сегментация YOLO возвращает один объект Results для каждого изображения. Каждый результат хранит одну плотную карту классов для всего
изображения, а не список масок объектов. Пиксели с одинаковым предсказанным классом имеют один и тот же ID класса, даже если они
относятся к отдельным объектам.
| Атрибут | Тип | Форма | Описание |
|---|---|---|---|
result.semantic_mask | SemanticMask | (H,W) | Плотная карта классов. |
result.semantic_mask.data | torch.uint8torch.int16torch.int32 | (H,W) | ID классов; dtype выбирается по количеству классов. |
result.masks | - | - | Маски экземпляров отсутствуют. |
result.boxes | - | - | Без рамок и значений уверенности экземпляров. |
result.masks.xy | - | - | Полигоны по умолчанию отсутствуют. |
Описание специфичных для задач полей Results для всех задач см. в разделе Результаты предсказаний по задачам.
Семантическая сегментация предсказывает плотную карту классов, а затем изменяет ее размер до формы изображения для визуализации и
дальнейшего использования. Поэтому очень тонкие структуры, такие как дорожная разметка, линии разметки площадки, столбы или провода, могут выглядеть
ступенчатыми, если вывод выполняется при значительно меньшем imgsz, чем исходное разрешение изображения. Если границы выглядят
зубчатыми, сначала повторно проверь исходную модель PyTorch .pt с большим imgsz, например 1024, 1280 или ближайшим
практичным значением к размеру исходного изображения. Используй экспортированные модели только после подтверждения того, что результат .pt приемлем,
поскольку входные данные с низким разрешением не могут восстановить мелкие детали, отсутствовавшие в предсказанной карте классов.
Сегментация экземпляров и семантическая сегментация#
| Аспект | Сегментация экземпляров (task="segment") | Семантическая сегментация (task="semantic") |
|---|---|---|
| Цель предсказания | Сегментировать каждый обнаруженный объект отдельно | Присвоить каждому пикселю один ID класса |
| Поле результата | result.masks | result.semantic_mask |
| Основные данные | result.masks.data | result.semantic_mask.data |
| Форма | (N,H,W) | (H,W) |
| Значения пикселей | Значения бинарной маски: 0 или 1 | ID классов: 0, 1, 2, ... |
| Dtype | torch.uint8 | torch.uint8torch.int16torch.int32 |
| Объекты одного класса | Сохраняются как отдельные экземпляры | Объединяются в одну область класса |
| Полигоны | Да, через result.masks.xy и result.masks.xyn | По умолчанию полигоны не выводятся |
| BBox и confidence | Да, через result.boxes | Нет BBox или оценок confidence для отдельных экземпляров |
| Типичное применение | Подсчет, отслеживание, кадрирование, измерения на уровне объектов | Плотная разметка сцен, проезжая часть, типы земного покрова, медицинские области |
Экспорт#
Экспортируй модель YOLO26n-sem в другой формат, например ONNX, CoreML и т. д.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n-sem.pt") # load an official model
model = YOLO("path/to/best.pt") # load a custom model
# Export the model
model.export(format="onnx")Доступные форматы экспорта моделей семантической сегментации YOLO26 приведены в таблице ниже. Экспортировать модель в любой формат можно с помощью аргумента format, например format='onnx' или format='engine'. Предсказывать или выполнять проверку непосредственно на экспортированных моделях можно с помощью yolo predict model=yolo26n-sem.onnx. Примеры использования для твоей модели отображаются после завершения экспорта.
| Формат | Аргумент format | Модель | Метаданные | Аргументы |
|---|---|---|---|---|
| PyTorch | - | yolo26n-sem.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-sem.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-sem.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-sem_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-sem.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-sem.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| TF SavedModel | saved_model | yolo26n-sem_saved_model/ | ✅ | imgsz, keras, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-sem.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-sem_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-sem_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-sem.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-sem_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-sem_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-sem_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-sem_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-sem_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-sem_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-sem_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| LiteRT | litert | yolo26n-sem.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| Hailo | hailo | yolo26n-sem_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou |
| Huawei Ascend | ascend | yolo26n-sem_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms |
| Apple Core AI | coreai | yolo26n-sem.aimodel | ✅ | imgsz, batch, quantize |
nms=None по умолчанию выдает сырые результаты для внешнего NMS. Установи nms=False, чтобы выбрать доступный головной модуль без NMS; неподдерживаемые форматы возвращаются к своему родному пути вывода. Записи nms выше определяют форматы, которые могут встраивать NMS с помощью nms=True.
Полное описание export см. на странице Экспорт.
Часто задаваемые вопросы#
Чтобы обучить модель семантической сегментации YOLO26 на пользовательском датасете, подготовь изображения масок PNG, где значение каждого пикселя представляет собой ID класса (0, 1, 2, ...), а пиксели со значением 255 игнорируются во время обучения. Создай YAML-файл датасета с указанием каталогов изображений и масок, затем обучи модель:
Примерfrom ultralytics import YOLO # Load a pretrained YOLO26 semantic segmentation model model = YOLO("yolo26n-sem.pt") # Train the model results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=512)Дополнительные доступные аргументы см. на странице Конфигурация.
Сегментация экземпляров и семантическая сегментация — это задачи на уровне пикселей, но они различаются по одному ключевому аспекту:
- Семантическая сегментация присваивает метку класса каждому пикселю, но не различает отдельные объекты одного класса. Например, все автомобили в сцене получают одну и ту же метку класса.
- Сегментация экземпляров распознает каждый отдельный объект независимо и создает отдельную маску для каждого объекта, даже если они относятся к одному классу.
Семантическая сегментация лучше всего подходит для задач понимания сцены, таких как автономное вождение и картографирование типов земного покрова, тогда как сегментация экземпляров предпочтительна, когда важно считать или отслеживать отдельные объекты.
Да. Если в твоем датасете используются полигональные метки Ultralytics YOLO (один
.txtна изображение), не указывайmasks_dirв YAML-файле датасета и убедись, что рядом с изображениями в корне датасета нет каталогаmasks/(само его наличие активирует режим PNG-масок, даже еслиmasks_dirне задан). После этого загрузчик преобразует полигоны в семантические маски для каждого изображения на лету. Для многоклассовых датасетов (N > 1) дополнительный классbackgroundавтоматически добавляется кnames. Для одноклассовых датасетов (N == 1) обучение остается с 1 классом: объявленный тобой класс становится1в маске, а непокрытые пиксели становятся0. Подробности см. в руководстве по датасетам для семантической сегментации.Ultralytics YOLO26 предоставляет встроенные конфигурации для нескольких датасетов семантической сегментации:
- Cityscapes: городские уличные сцены с 19 классами, широко используемые в исследованиях автономного вождения.
- ADE20K: крупномасштабный датасет для разбора сцен со 150 классами.
Также можно использовать любой пользовательский датасет с аннотациями масок PNG, где значения пикселей соответствуют ID классов.
Проверь предварительно обученную модель семантической сегментации YOLO26 с помощью YAML-файла датасета, использованного для оценки:
Примерfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-sem.pt") # Validate the model metrics = model.val(data="cityscapes.yaml") print("Mean IoU:", metrics.miou) print("Pixel Accuracy:", metrics.pixel_accuracy)Эти шаги предоставят метрики валидации, такие как среднее пересечение по объединению (mIoU) и точность на уровне пикселей, которые являются стандартными показателями оценки качества семантической сегментации.
Экспортируй модель семантической сегментации YOLO26 в формат ONNX с помощью команд Python или CLI:
Примерfrom ultralytics import YOLO # Load a pretrained model model = YOLO("yolo26n-sem.pt") # Export the model to ONNX format model.export(format="onnx")Подробнее об экспорте в различные форматы см. на странице Экспорт.