Ultralytics YOLO27:

Обзор наборов данных для семантической сегментации#

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

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

Поддерживаемые форматы наборов данных#

Поддерживаются два формата разметки. Загрузчик набора данных выбирает PNG-маски, если YAML-файл набора данных определяет ключ masks_dir или если папка masks/ уже существует рядом с изображениями в корне набора данных; в противном случае он переключается на полигональные метки YOLO.

Формат PNG-масок#

Наборы данных для семантической сегментации используют один файл изображения и один файл маски для каждого образца. Маска представляет собой одноканальное изображение, обычно в формате PNG, где значение каждого пикселя — это индекс класса соответствующего пикселя изображения.

  • Значения пикселей 0, 1, 2, ... обозначают ID классов из соответствующего набора данных names.
  • Значение пикселя 255 считается меткой игнорирования и исключается из вычисления функции потерь и метрик.
  • Файлы масок должны использовать то же базовое имя, что и соответствующие файлы изображений, например frankfurt_000000_000294.png.
  • По умолчанию маски ищутся как .png; если файл не найден, также принимаются другие поддерживаемые расширения изображений. Используй форматы без потерь, такие как .png или .tiff, поскольку сжатие с потерями (например, .jpg) искажает значения пикселей, содержащие ID классов.

В стандартной структуре изображения и маски находятся в параллельных папках. Значение masks_dir из YAML-файла набора данных заменяет компонент пути images, чтобы найти маски.

dataset/
├── images/
│   ├── train/
│   └── val/
└── masks/
    ├── train/
    └── val/

Например, изображению в images/train/aachen_000000_000019.png соответствует маска в masks/train/aachen_000000_000019.png, если задано masks_dir: masks.

Формат полигональных меток YOLO#

Если в твоём наборе данных уже есть полигональные метки Ultralytics YOLO (один .txt на изображение со строками <class-index> <x1> <y1> <x2> <y2> ...), ты можешь напрямую обучать модель семантической сегментации — преобразование в PNG-маски не требуется. Формат строк описан в разделе о формате набора данных для сегментации экземпляров.

Этот режим выбирается автоматически, если YAML-файл набора данных не содержит masks_dir и рядом с изображениями в корне набора данных нет папки masks/ — удали или переименуй оставшуюся папку masks/, иначе загрузчик переключится в режим PNG-масок и будет искать маски там. Поведение:

  • При загрузке полигоны преобразуются в семантическую маску для каждого изображения и сортируются по площади, поэтому меньшие объекты перекрывают большие в областях пересечения.
  • Несколько классов (N > 1 в names): после объявленных классов добавляется дополнительный класс background для пикселей, не покрытых ни одним полигоном. Модель создаётся с N + 1 выходными каналами, последний канал отводится под фон.
  • Один класс (N == 1 в names): обучение по-прежнему выполняется с 1 классом. Маска является бинарной: объявленный класс обозначается как 1, а пиксели, не покрытые полигонами, — как 0. В names дополнительный класс фона не добавляется.
  • Пиксели, добавленные дополнением при аугментации (например, при случайной обрезке), по-прежнему используют 255 как метку игнорирования.

Используй этот режим, если данные уже размечены полигонами экземпляров и ты хочешь обучить модель семантической сегментации на тех же файлах.

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

Наборы данных для семантической сегментации настраиваются с помощью YAML-файлов. Основные поля:

КлючОписание
pathКорневой каталог набора данных.
trainПуть к изображениям для обучения относительно path или абсолютный путь.
valПуть к изображениям для валидации относительно path или абсолютный путь.
testНеобязательный путь к тестовым изображениям.
masks_dirИмя каталога, используемого для семантических масок. Не указывай этот ключ (если в корне набора данных нет папки masks/), чтобы переключиться на формат полигональных меток YOLO.
namesСопоставление ID классов с именами классов.
label_mappingНеобязательное сопоставление ID исходного набора данных с ID для обучения или ignore_label.
ultralytics/cfg/datasets/cityscapes8.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# Cityscapes semantic segmentation dataset (19 classes)
# Documentation: https://docs.ultralytics.com/datasets/semantic/cityscapes8
# Example usage: yolo semantic train data=cityscapes8.yaml model=yolo26n-sem.pt
# parent
# ├── ultralytics
# └── datasets
#     └── cityscapes8 ← downloads here (small subset)
#         └── images
#         └── masks

# Dataset root directory
path: cityscapes8 # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images

masks_dir: masks # semantic mask directory

# Cityscapes 19-class labels
names:
  0: road
  1: sidewalk
  2: building
  3: wall
  4: fence
  5: pole
  6: traffic light
  7: traffic sign
  8: vegetation
  9: terrain
  10: sky
  11: person
  12: rider
  13: car
  14: truck
  15: bus
  16: train
  17: motorcycle
  18: bicycle

# Map source label IDs to train IDs; ignore_label is converted to 255.
label_mapping:
  -1: ignore_label
  0: ignore_label
  1: ignore_label
  2: ignore_label
  3: ignore_label
  4: ignore_label
  5: ignore_label
  6: ignore_label
  7: 0
  8: 1
  9: ignore_label
  10: ignore_label
  11: 2
  12: 3
  13: 4
  14: ignore_label
  15: ignore_label
  16: ignore_label
  17: 5
  18: ignore_label
  19: 6
  20: 7
  21: 8
  22: 9
  23: 10
  24: 11
  25: 12
  26: 13
  27: 14
  28: 15
  29: ignore_label
  30: ignore_label
  31: 16
  32: 17
  33: 18

# Download URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/cityscapes8.zip

Используй label_mapping, если ID масок источника ещё не соответствуют последовательным ID классов для обучения. Cityscapes и ADE20K включают сопоставления, которые преобразуют исходные ID меток в ID для обучения семантической сегментации YOLO и игнорируют неиспользуемые метки.

Использование#

Обучи модель YOLO26 для семантической сегментации с помощью Python или CLI:

Пример
from ultralytics import YOLO

# Load a pretrained semantic segmentation model
model = YOLO("yolo26n-sem.pt")

# Train on the Cityscapes8 semantic segmentation dataset
results = model.train(data="cityscapes8.yaml", epochs=100, imgsz=1024)

Поддерживаемые наборы данных#

Ultralytics предоставляет YAML-файлы наборов данных для семантической сегментации для следующих наборов данных. Полную таблицу бенчмарков предварительно обученных моделей см. на странице задачи семантической сегментации.

  • Cityscapes: набор данных для семантической сегментации городских уличных сцен с 19 обучающими классами.
  • Cityscapes8: поднабор Cityscapes из 8 изображений для быстрых тестов и проверок CI.
  • ADE20K: набор данных для разбора сцен со 150 семантическими классами.

Добавление собственного набора данных#

Вариант A — PNG-маски#

  1. Сохрани изображения в папках отдельных поднаборов, например images/train и images/val.
  2. Сохрани по одной одноканальной маске для каждого изображения в зеркальных папках масок, например masks/train и masks/val.
  3. Убедись, что значения пикселей масок являются ID классов. Используй 255 для пикселей, которые нужно игнорировать.
  4. Создай YAML-файл набора данных с path, train, val, masks_dir и names.
  5. Добавляй label_mapping только тогда, когда ID масок нужно преобразовать в последовательные ID для обучения.
path: path/to/my-semantic-dataset
train: images/train
val: images/val
masks_dir: masks

names:
    0: background
    1: road
    2: building

Вариант B — полигональные метки#

  1. Организуй изображения и полигональные файлы .txt точно так же, как для сегментации экземпляров.
  2. Создай YAML-файл набора данных с path, train, val и namesне указывай masks_dir.
  3. Убедись, что рядом с изображениями в корне набора данных нет папки masks/ — одного её наличия достаточно, чтобы загрузчик переключился в режим PNG-масок, даже если в YAML не указано masks_dir.
  4. Не добавляй запись "background" в names. Для наборов данных с несколькими классами загрузчик добавляет её автоматически; для наборов данных с одним классом обучение остаётся с 1 классом — твой объявленный класс становится 1 в маске, а непокрытые пиксели — 0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val

names:
    0: person
    1: car

Ultralytics Platform предоставляет инструмент полигональной разметки для задачи семантической сегментации, а также интеллектуальную разметку с помощью SAM — размечай данные прямо в браузере и экспортируй или обучайся на полученном наборе данных с полигональными метками, не настраивая эту структуру вручную.

Часто задаваемые вопросы#

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

  • Значение пикселя 255 используется как метка игнорирования. Такие пиксели пропускаются при вычислении функции потерь и метрик, что удобно для пустых областей, неразмеченных пикселей или классов, не входящих в набор обучающих меток.

  • Да. Каждая семантическая маска должна иметь то же базовое имя файла, что и соответствующее изображение. Загрузчик набора данных заменяет компонент каталога images на masks_dir и ищет соответствующие файлы масок, а если маска .png не найдена, проверяет другие поддерживаемые расширения изображений (.jpg, .tiff и т. д.). Рекомендуются только форматы без потерь, поскольку резервный поиск это не проверяет.

  • Да, если они уже соответствуют ID классов names. Если исходный набор данных использует непоследовательные ID или содержит метки, которые нужно игнорировать, добавь раздел label_mapping, чтобы преобразовать значения пикселей источника в ID для обучения.

  • Да. Наборы данных для сегментации экземпляров используют полигональные метки Ultralytics YOLO (один .txt на изображение со строками <class-index> <x1> <y1> <x2> <y2> ...), и те же файлы можно повторно использовать для семантической сегментации — просто не указывай masks_dir в YAML-файле набора данных и убедись, что рядом с изображениями в корне набора данных нет папки masks/ (одного её наличия достаточно для включения режима PNG-масок, даже если masks_dir не задан). Затем загрузчик преобразует полигоны в маски для каждого изображения на лету. Для наборов данных с несколькими классами (N > 1) добавляется дополнительный класс background, а модель создаётся с N + 1 выходными каналами. Для наборов данных с одним классом (N == 1) обучение остаётся с 1 классом — маска отображает объявленный класс как 1, а непокрытые пиксели — как 0.

  • Ultralytics включает готовые к использованию YAML-файлы наборов данных для Cityscapes (19 классов городских сцен), облегчённого поднабора Cityscapes8 для тестирования конвейера и ADE20K (150 классов для разбора сцен). На каждой странице приведены точный список классов, инструкции по скачиванию и проверенный пример обучения.

Комментарии