Обзор наборов данных для семантической сегментации#
Семантическая сегментация назначает одну метку класса каждому пикселю изображения. В отличие от сегментации экземпляров, семантическая сегментация не разделяет отдельные объекты одного класса. Целевой результат обучения — плотная карта классов, в которой каждый пиксель хранит 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 🚀 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-маски#
- Сохрани изображения в папках отдельных поднаборов, например
images/trainиimages/val. - Сохрани по одной одноканальной маске для каждого изображения в зеркальных папках масок, например
masks/trainиmasks/val. - Убедись, что значения пикселей масок являются ID классов. Используй
255для пикселей, которые нужно игнорировать. - Создай YAML-файл набора данных с
path,train,val,masks_dirиnames. - Добавляй
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 — полигональные метки#
- Организуй изображения и полигональные файлы
.txtточно так же, как для сегментации экземпляров. - Создай YAML-файл набора данных с
path,train,valиnames— не указывайmasks_dir. - Убедись, что рядом с изображениями в корне набора данных нет папки
masks/— одного её наличия достаточно, чтобы загрузчик переключился в режим PNG-масок, даже если в YAML не указаноmasks_dir. - Не добавляй запись "background" в
names. Для наборов данных с несколькими классами загрузчик добавляет её автоматически; для наборов данных с одним классом обучение остаётся с 1 классом — твой объявленный класс становится1в маске, а непокрытые пиксели —0.
path: path/to/my-polygon-dataset
train: images/train
val: images/val
names:
0: person
1: carUltralytics 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 классов для разбора сцен). На каждой странице приведены точный список классов, инструкции по скачиванию и проверенный пример обучения.