YOLO Vision 2026:

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

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

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

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

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

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

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

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

Макет по умолчанию хранит изображения и маски в параллельных папках. Значение 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. Убедись, что значения пикселей маски являются идентификаторами классов. Используй 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-масок даже без masks_dir в YAML.
  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 — размечай прямо в браузере, экспортируй полученный датасет с разметкой полигонами или обучаийся на нем без ручной настройки этой структуры.

FAQ#

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

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

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

  • Да, если они уже соответствуют твоим 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 классов разбора сцен). На каждой странице документирован точный список классов, шаги загрузки и проверенный пример обучения.

Комментарии