YOLO Vision 2026:

Семантическая сегментация#

Semantic segmentation examples

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



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
(мс)
параметры
(М)
FLOPs
(Б)
YOLO26n-sem1024 × 204878.34.4 ± 0.01.622.7
YOLO26s-sem1024 × 204880.88.4 ± 0.06.588.8
YOLO26m-sem1024 × 204882.019.9 ± 0.114.3304.5
YOLO26l-sem1024 × 204882.926.5 ± 0.117.9384.7
YOLO26x-sem1024 × 204883.648.9 ± 0.240.2861.7
  • Значения mIoUval указаны для одной модели и одного масштаба на валидационном наборе Cityscapes.
    Воспроизведи с помощью yolo semantic val data=cityscapes.yaml device=0 imgsz=2048
  • Метрики Speed усреднены по валидационным изображениям 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
(мс)
параметры
(М)
FLOPs
(Б)
YOLO26n-sem-ade20k64038.83.9 ± 0.21.64.4
YOLO26s-sem-ade20k64045.64.2 ± 0.36.517.4
YOLO26m-sem-ade20k64047.44.7 ± 0.314.359.5
YOLO26l-sem-ade20k64049.78.3 ± 0.217.975.0
YOLO26x-sem-ade20k64051.59.9 ± 0.340.2168.1
  • Значения 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.
  • Метрики Speed усреднены по валидационным изображениям 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. Предварительно обученные чекпоинты сохраняют всю архитектуру обучения и могут показывать больший счетчик.

Обучение#

Обучи YOLO26n-sem на датасете Cityscapes8 в течение 100 эпох при размере изображения 1024. Полный список доступных аргументов смотри на странице Configuration.

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

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

Датасеты семантической сегментации используют одноканальные маски-изображения, обычно в формате PNG, где значение каждого пикселя представляет идентификатор класса. Пиксели со значением 255 трактуются как «игнорируемые» и исключаются из вычисления функции потерь. В YAML-файле датасета должны быть указаны пути к изображениям и соответствующим им директориям масок. Подробности о формате см. в Руководстве по датасетам семантической сегментации. Поддерживаемые датасеты включают Cityscapes и ADE20K. Ты можешь управлять семантическими датасетами и размечать их с помощью разметки Ultralytics Platform.

Валидация#

Выполни валидацию точности обученной модели 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 accuracy

Предсказание#

Используй обученную модель 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 на странице Предсказание.

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

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

АтрибутТипФормаОписание
result.semantic_maskSemanticMask(H,W)Плотная карта классов.
result.semantic_mask.datatorch.uint8
torch.int16
torch.int32
(H,W)ID классов; тип данных (dtype) выбирается в зависимости от количества классов.
result.masks--Нет масок экземпляров.
result.boxes--Нет прямоугольников/достоверностей экземпляров.
result.masks.xy--По умолчанию многоугольники отсутствуют.

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

Качество границ маски

Семантическая сегментация предсказывает плотную карту классов, а затем изменяет размер этой карты до формы изображения для визуализации и дальнейшего использования. Очень тонкие структуры, такие как разметка полос, линии площадки, столбы или провода, из-за этого могут выглядеть лестничными, когда инференс запускается с гораздо меньшим imgsz, чем исходное разрешение изображения. Если границы выглядят рваными, сначала перепроверь нативную модель PyTorch .pt с большим imgsz, например 1024, 1280 или ближайшим практическим значением к размеру исходного изображения. Используй экспортированные модели только после подтверждения того, что вывод .pt является приемлемым, так как входы с более низким разрешением не могут восстановить мелкие детали, отсутствовавшие на предсказанной карте классов.

Экземплярная vs Семантическая сегментация#

АспектСегментация экземпляров (task="segment")Семантическая сегментация (task="semantic")
Цель предсказанияСегментировать каждый обнаруженный объект отдельноПрисвоить один ID класса каждому пикселю
Поле выводаresult.masksresult.semantic_mask
Основные данныеresult.masks.dataresult.semantic_mask.data
Форма(N,H,W)(H,W)
Значения пикселейЗначения бинарных масок: 0 или 1ID классов: 0, 1, 2, ...
Dtypetorch.uint8torch.uint8
torch.int16
torch.int32
Объекты одного классаСохраняются как отдельные экземплярыОбъединяются в одну область класса
МногоугольникиДа, через result.masks.xy и result.masks.xynПо умолчанию вывод многоугольников не предусмотрен
Рамки и уверенностьДа, через result.boxesНет рамок или оценок уверенности для каждого экземпляра
Типичное использованиеПодсчет, отслеживание, обрезка, измерение на уровне объектовПлотная разметка сцены, проезжая часть, земной покров, медицинские области

Экспорт#

Экспортируй модель 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-
TorchScripttorchscriptyolo26n-sem.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-sem.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-sem_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-sem.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-sem.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-sem.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgsz, batch, device
MNNmnnyolo26n-sem.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-sem_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-sem_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-sem_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-sem_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-sem_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-sem_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-sem_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-sem.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-sem_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-sem_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-sem.aimodelimgsz, batch, quantize

Смотри полную информацию об export на странице Экспорт.

FAQ#

  • Чтобы обучить модель семантической сегментации 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")

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

Комментарии