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

Semantic segmentation examples

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

Выходными данными модели семантической сегментации является карта классов размером «высота на ширину», где каждое значение пикселя соответствует предсказанному 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 с использованием экземпляра Amazon EC2 P4d.
    Воспроизведи с помощью yolo semantic val data=cityscapes.yaml batch=1 device=0|cpu imgsz=2048
  • Значения Params и FLOPs указаны для объединенной (fused) модели после model.fuse(), которая объединяет слои Conv и BatchNorm. Предобученные чекпоинты сохраняют полную архитектуру обучения и могут показывать более высокие значения.

Обучение (Train)

Обучи 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 смотри на странице Обучение.

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

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

Валидация (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 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  # height x width class map (torch.Tensor)

Полные подробности режима predict смотри на странице Предсказание.

Экспорт (Export)

Экспортируй модель 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, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n-sem.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n-sem_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n-sem.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-sem.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n-sem_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-sem.pbimgsz, batch, device
TF Litetfliteyolo26n-sem.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-sem_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n-sem_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-sem_paddle_model/imgsz, batch, device
MNNmnnyolo26n-sem.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n-sem_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n-sem_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n-sem_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-sem_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-sem_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n-sem_deepx_model/imgsz, int8, data, optimize, device

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

Часто задаваемые вопросы (FAQ)

Как обучить модель семантической сегментации YOLO26 на пользовательском наборе данных?

Чтобы обучить модель семантической сегментации 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-файле набора данных, и загрузчик преобразует полигоны в семантические маски на лету для каждого изображения. Для многоклассовых наборов данных (N > 1) дополнительный класс background автоматически добавляется к names. Для одноклассовых наборов данных (N == 1) обучение остается в 1 классе — твой объявленный класс становится 1 в маске, а нераспознанные пиксели становятся 0. Смотри подробности в Руководстве по наборам данных для семантической сегментации.

Какие наборы данных поддерживаются для семантической сегментации?

Ultralytics YOLO26 предоставляет встроенные конфигурации для нескольких наборов данных для семантической сегментации:

  • Cityscapes: Городские уличные сцены с 19 классами, широко используемые для исследований автономного вождения.
  • ADE20K: Крупномасштабный набор данных для парсинга сцен со 150 классами.

Ты также можешь использовать любой пользовательский набор данных, который предоставляет PNG-маски аннотаций, где значения пикселей соответствуют ID классов.

Как проверить предобученную модель семантической сегментации YOLO26?

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

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

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

Комментарии