Ultralytics YOLO27:
Get Started

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

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

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

Поддерживаемые форматы датасетов#

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

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

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

  • Значения пикселей 0, 1, 2, ... обозначают идентификаторы классов из сопоставления набора данных names.
  • Значение пикселя 255 считается меткой игнорирования и не учитывается при вычислении функции потерь и метрик.
  • Для файлов масок нужно использовать то же основное имя, что и для соответствующего файла изображения, например 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, а пиксели, не покрытые ни одним многоугольником, — как 0. В names дополнительный фоновый класс не добавляется.
  • Для пикселей, добавленных при дополнении изображения во время аугментации (например, случайного кадрирования), по-прежнему используется метка игнорирования 255.

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

Формат YAML-файла набора данных#

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

КлючОписание
pathКорневая папка набора данных.
trainПуть к изображениям для обучения относительно path или абсолютный путь.
valПуть к изображениям для валидации относительно path или абсолютный путь.
testНеобязательный путь к изображениям для тестирования.
masks_dirИмя папки для семантических масок. Чтобы переключиться на формат многоугольных меток YOLO, не указывай этот ключ и убедись, что в корневой папке набора данных нет папки masks/.
namesСопоставление идентификаторов классов с названиями классов.
label_mappingНеобязательное сопоставление идентификаторов исходного набора данных с идентификаторами для обучения или 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

# Загрузи предварительно обученную модель семантической сегментации
model = YOLO("yolo26n-sem.pt")

# Обучи модель на наборе данных Cityscapes8 для семантической сегментации
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 предоставляет инструмент полигональной разметки для задачи семантической сегментации, а также Smart-разметку с поддержкой 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 классов семантического разбора сцен). На странице каждого набора указаны точный список классов, инструкции по загрузке и проверенный пример обучения.

Комментарии